Exemplo n.º 1
0
        public async Task OnShippingProcessed(ShippingResponse msg)
        {
            var order = await _repo.GetById(msg.OrderId);

            var acctInfo = await GetAccountById(msg.AccountId);

            if (order == null || acctInfo == null)
            {
                // todo :: log
                return;
            }

            switch (msg.Status)
            {
            case S.ShippingStatus.Delivered:
                await OnShippingSucceeded(order, acctInfo);

                break;

            default:
                // other workflows not implemented
                // on shiping error, just cancel the order
                await OnShippingError(order, acctInfo);

                break;
            }
        }
 internal static IEnumerable <ProductResponse> GetAllProducts(this ShippingResponse response)
 {
     if (response == null)
     {
         throw new ArgumentNullException(nameof(response));
     }
     return(response.Consignments.SelectMany(x => x.Products));
 }
        internal static IEnumerable <Error> GetAllErrors(this ShippingResponse response)
        {
            if (response == null)
            {
                throw new ArgumentNullException(nameof(response));
            }

            var result = new List <Error>();

            result.AddRange(response.FieldErrors);
            result.AddRange(GetAllProducts(response).SelectMany(x => x.Errors));

            return(result);
        }
        public void it_can_be_deserialized()
        {
            var expected = new ShippingResponse(
                new[]
            {
                new ProductResponse(
                    "SERVICEPAKKE",
                    "1202",
                    new GuiInformation(
                        11,
                        "Hent varene selv",
                        null,
                        "På posten",
                        "Klimanøytral Servicepakke",
                        "Rimi Vinterbro. Åpningstider Man - Fre: 1000-2100, Lør: 0900-1800",
                        "Sendingen er en Klimanøytral Servicepakke som blir levert til mottakers postkontor/ post i butikk. Mottaker kan velge å hente sendingen på et annet postkontor/post i butikk enn sitt lokale. Mottaker varsles om at sendingen er ankommet via SMS, e-post eller hentemelding i postkassen. Transporttid er normalt 1-3 virkedager, avhengig av strekning. Sendingen kan spores ved hjelp av sporingsnummeret.",
                        "Billigst!",
                        35
                        ),
                    new PackagePrice(
                        "NOK",
                        new Price(126.0, 31.5, 157.5),
                        new Price(126.0, 31.5, 157.5)
                        ),
                    new ExpectedDelivery(
                        "1",
                        null,
                        "28.11.2014",
                        null,
                        new DateTime(2014, 11, 28),
                        null
                        )
                    )
            },
                new TraceMessages(
                    new[]
            {
                "Added fee 'brev-varsling' (NOK 7.00) to base price of SERVICEPAKKE since request did not have additional service 'eVarsling' specified.",
                "Package exceed maximum measurements for product B-POST ",
                "Package exceed maximum measurements for product A-POST "
            })
                );

            var actual = JsonConvert.DeserializeObject <ShippingResponse>(SingleProductSuccessJsonResponse);

            expected.ShouldBeEquivalentTo(actual);
        }
Exemplo n.º 5
0
        public void it_can_be_deserialized()
        {
            var expected = new ShippingResponse(
                new[]
            {
                new ConsignmentResponse(new [] {
                    new ProductResponse(
                        "SERVICEPAKKE",
                        "1202",
                        new GuiInformation(
                            11,
                            "Pakke",
                            "Til private",
                            "Klimanøytral Servicepakke",
                            "Klimanøytral Servicepakke",
                            "Pakken kan spores og utleveres på ditt lokale hentested.",
                            "Klimanøytral Servicepakke leveres til mottakers lokale hentested (postkontor eller Post i Butikk). Mottaker kan velge å hente sendingen på et annet hentested enn sitt lokale. Mottaker varsles om at sendingen er ankommet via SMS, e-post eller hentemelding i postkassen. Sendingen kan spores ved hjelp av sporingsnummeret.",
                            null,
                            35
                            ),
                        new PackagePrices(new PackagePrice(
                                              "NOK",
                                              new Price(98.00, 24.50, 122.50),
                                              new Price(98.00, 24.50, 122.50)
                                              )),
                        new ExpectedDelivery(
                            "1",
                            null,
                            "13.11.2018",
                            null,
                            new DateTime(2018, 11, 13),
                            null
                            )
                        )
                })
            },
                new[]
            {
                "Added fee 'brev-varsling' (NOK 13.00) to base price of SERVICEPAKKE since request did not have additional service 'eVarsling' specified."
            },
                null);

            var actual = JsonConvert.DeserializeObject <ShippingResponse>(SingleProductSuccessJsonResponse);

            expected.Should().BeEquivalentTo(actual);
        }
        public IHttpActionResult InsertRegionTerritory(ShippingRequest obj)
        {
            ShippingResponse response = new ShippingResponse();

            if (obj == null)
            {
                return(BadRequest());
            }

            using (NORTHWNDEntitiesNew dbContext = new NORTHWNDEntitiesNew())
            {
                dbContext.Shippers.Add(new Shipper {
                    CompanyName = obj.CompanyName, Phone = obj.Phone
                });
                dbContext.SaveChanges();

                response.success = "Yes"; response.failure = "No";
            }
            return(Ok(response));
        }
Exemplo n.º 7
0
        internal static ShippingResponse GetShipping(FedExAuthentication auth, ShippingAddress origin, ShippingAddress dest, List<int> parts)
        {
            ShippingResponse response = new ShippingResponse();
            try {
                WebClient wc = new WebClient();
                wc.Proxy = null;

                Settings settings = new Settings();
                wc.Headers["Content-type"] = "application/x-www-form-urlencoded";
                string URI = settings.Get("CURTAPISHIPPINGDOMAIN") + "GetShipping";
                string parameters = "dataType=JSON";
                parameters += "&auth=" + Newtonsoft.Json.JsonConvert.SerializeObject(auth);
                parameters += "&origin=" + Newtonsoft.Json.JsonConvert.SerializeObject(origin);
                parameters += "&destination=" + Newtonsoft.Json.JsonConvert.SerializeObject(dest);
                parameters += "&parts=" + Newtonsoft.Json.JsonConvert.SerializeObject(parts);
                if (settings.Get("FedExEnvironment") == "development") {
                    parameters += "&environment=development";
                } else {
                    parameters += "&environment=production";
                }
                string APIresponse = wc.UploadString(URI, parameters);
                response = JsonConvert.DeserializeObject<ShippingResponse>(APIresponse);
                if (response.Status == "ERROR") {
                    throw new Exception("FedEx is having issues at the moment. Please try again.");
                }
            } catch (Exception) { }
            return response;
        }
        public void it_can_be_deserialized()
        {
            var expected = new ShippingResponse(
                new []
            {
                new ProductResponse(
                    "SERVICEPAKKE",
                    "1202",
                    new GuiInformation(
                        11,
                        "Hent varene selv",
                        null,
                        "På posten",
                        "Klimanøytral Servicepakke",
                        "Rimi Vinterbro. Åpningstider Man - Fre: 1000-2100, Lør: 0900-1800",
                        "Sendingen er en Klimanøytral Servicepakke som blir levert til mottakers postkontor/ post i butikk. Mottaker kan velge å hente sendingen på et annet postkontor/post i butikk enn sitt lokale. Mottaker varsles om at sendingen er ankommet via SMS, e-post eller hentemelding i postkassen. Transporttid er normalt 1-3 virkedager, avhengig av strekning. Sendingen kan spores ved hjelp av sporingsnummeret.",
                        "Billigst!",
                        35
                        ),
                    new PackagePrice(
                        "NOK",
                        new Price(126.0, 31.5, 157.5),
                        new Price(126.0, 31.5, 157.5)
                        ),
                    new ExpectedDelivery(
                        "1",
                        null,
                        "28.11.2014",
                        null,
                        new DateTime(2014, 11, 28),
                        null
                        )
                    ),
                new ProductResponse(
                    "PA_DOREN",
                    "1736",
                    new GuiInformation(
                        41,
                        "Få varene levert",
                        "Til døren",
                        "Hjem på kvelden, 17-21",
                        "På Døren",
                        "Varsel på sms. Sjåføren ringer 30 - 60 min. før",
                        "Sendingen er en På Døren- sending som leveres hjem til  mottaker mellom klokken 17 og 21. Mottaker varsles når sendingen er lastet på bil for utkjøring, via SMS og/eller e-post. Mottaker varsles også på  mobiltelefon 30 - 60 minutter før levering. Dersom sendingen ikke kan leveres,  blir den fraktet til lokalt postkontor/ post i butikk. Mottaker varsles om dette via  SMS, e-post eller hentemelding i postkassen. Sendingen kan spores ved hjelp av sporingsnummeret.",
                        null,
                        35
                        ),
                    new PackagePrice(
                        "NOK",
                        new Price(142.0, 35.5, 177.5),
                        new Price(142.0, 35.5, 177.5)
                        ),
                    new ExpectedDelivery(
                        "1",
                        null,
                        "28.11.2014",
                        null,
                        new DateTime(2014, 11, 28),
                        null
                        )
                    )
            },
                new TraceMessages(
                    new[]
            {
                "Package exceed maximum measurements for product A-POST "
            }));

            var actual = JsonConvert.DeserializeObject <ShippingResponse>(MultipleProductsSuccessJsonResponse);

            expected.ShouldBeEquivalentTo(actual);
        }
Exemplo n.º 9
0
        public async Task<ActionResult> Shipping(string error = "") {
            HttpContext ctx = System.Web.HttpContext.Current;
            Customer customer = ViewBag.customer;
            Settings settings = ViewBag.settings;
            ViewBag.error = error;

            // Retrieve Customer from Sessions/Cookie
            int shippingpad = 0;
            if (settings.Get("ShippingPadding") != "") {
                try {
                    shippingpad = Convert.ToInt32(settings.Get("ShippingPadding"));
                } catch { }
            }
            var pcats = CURTAPI.GetParentCategoriesAsync();
            await Task.WhenAll(new Task[] { pcats });
            ViewBag.parent_cats = await pcats;

            // Get the contact ContentPage
            ContentPage page = ContentManagement.GetPageByTitle("shipping");
            ViewBag.page = page;

            if (customer.Cart.payment_id == 0) {
                customer.BindAddresses();

                ShippingResponse shippingresponse = new ShippingResponse();
                if (customer.Cart.ship_to != 0 && !customer.Cart.Shipping.isPOBox()) {
                    if (TempData["shipping_response"] != null) {
                        try {
                            shippingresponse = (ShippingResponse)TempData["shipping_response"];
                        } catch (Exception) { }
                    }
                    if (shippingresponse == null || shippingresponse.Result == null) {
                        string type = "";
                        if (customer.Cart.shipping_type != null) {
                            type = customer.Cart.shipping_type;
                        }
                        shippingresponse = getShipping(ctx);
                    }
                }
                ViewBag.shippingpadding = shippingpad;
                ViewBag.shippingresponse = shippingresponse;
                return View();
            } else {
                UDF.ExpireCart(ctx,customer.ID);
                return RedirectToAction("Index");
            }
        }
Exemplo n.º 10
0
        public void it_can_be_deserialized()
        {
            var expected = new ShippingResponse(
                new []
            {
                new ConsignmentResponse(new [] {
                    new ProductResponse(
                        "SERVICEPAKKE",
                        "1202",
                        new GuiInformation(
                            11,
                            "Pakke",
                            "Til private",
                            "Klimanøytral Servicepakke",
                            "Klimanøytral Servicepakke",
                            "Pakken kan spores og utleveres på ditt lokale hentested.",
                            "Klimanøytral Servicepakke leveres til mottakers lokale hentested (postkontor eller Post i Butikk). Mottaker kan velge å hente sendingen på et annet hentested enn sitt lokale. Mottaker varsles om at sendingen er ankommet via SMS, e-post eller hentemelding i postkassen. Sendingen kan spores ved hjelp av sporingsnummeret.",
                            null,
                            35
                            ),
                        new PackagePrices(new PackagePrice(
                                              "NOK",
                                              new Price(98.00, 24.50, 122.5),
                                              new Price(98.00, 24.50, 122.5)
                                              )),
                        new ExpectedDelivery(
                            "1",
                            null,
                            "13.11.2018",
                            null,
                            new DateTime(2018, 11, 13),
                            null
                            )
                        ),
                    new ProductResponse(
                        "PA_DOREN",
                        "1736",
                        new GuiInformation(
                            41,
                            "Pakke",
                            "Til private",
                            "På Døren",
                            "På Døren",
                            "Pakken kan spores og leveres hjem til deg mellom kl. 08-17 eller 17-21 avhengig av ditt postnummer. Sjåføren ringer 30-60 min. før ankomst ved levering på kveldstid.",
                            "På Døren leveres hjem til mottaker mellom kl. 08-17 eller 17-21 avhengig av mottakers postnummer. Mottaker varsles i god tid om forventet utleveringsdag via SMS eller e-post, i tillegg til nytt varsel når sendingen er lastet på bil for utkjøring samme dag. Mottaker kan gi Posten fullmakt til at pakken settes igjen ved døren eller et angitt sted hvis mottaker ikke er hjemme. Sjåføren ringer mottaker 30-60 minutter før ankomst ved levering på kveldstid. Mottaker kan endre leveringsdag når pakken spores (gjelder ikke lokalpakker). Dersom sendingen ikke kan leveres, blir den sendt til mottakers lokale hentested (postkontor eller Post i Butikk). Sendingen kan spores ved hjelp av sporingsnummeret.",
                            null,
                            35
                            ),
                        new PackagePrices(new PackagePrice(
                                              "NOK",
                                              new Price(114.00, 28.50, 142.50),
                                              new Price(114.00, 28.50, 142.50)
                                              )),
                        new ExpectedDelivery(
                            "1",
                            null,
                            "13.11.2018",
                            null,
                            new DateTime(2018, 11, 13),
                            null
                            )
                        )
                })
            },
                new[]
            {
                "Added fee 'brev-varsling' (NOK 13.00) to base price of SERVICEPAKKE since request did not have additional service 'eVarsling' specified."
            },
                null);

            var actual = JsonConvert.DeserializeObject <ShippingResponse>(MultipleProductsSuccessJsonResponse);

            expected.Should().BeEquivalentTo(actual);
        }
Exemplo n.º 11
0
        public ActionResult Shipping()
        {
            Customer customer = ViewBag.customer;

            // Retrieve Customer from Sessions/Cookie
            customer.GetFromStorage();

            if (!customer.LoggedIn()) {
                return RedirectToAction("Index", "Authenticate", new { referrer = "https://" + Request.Url.Host + "/Cart/Checkout" });
            }

            if (customer.Cart.payment_id == 0) {
                customer.BindAddresses();

                List<Address> addresses = customer.GetAddresses();
                ViewBag.addresses = addresses;

                List<Country> countries = UDF.GetCountries();
                ViewBag.countries = countries;

                if (customer.Cart.ship_to == 0 && customer.Cart.bill_to != 0) {
                    RedirectToAction("ChooseShipping", new {id = customer.Cart.bill_to});
                }

                List<string> shipping_types = CURTAPI.GetShippingTypes();
                ViewBag.shipping_types = shipping_types;

                ShippingResponse shippingresponse = new ShippingResponse();
                if (customer.Cart.ship_to != 0) {
                    if (TempData["shipping_response"] != null) {
                        try {
                            shippingresponse = (ShippingResponse)TempData["shipping_response"];
                        } catch (Exception) { }
                    }
                    if (shippingresponse == null || shippingresponse.Result == null) {
                        string type = "";
                        if (customer.Cart.shipping_type != null) {
                            type = customer.Cart.shipping_type;
                        }
                        shippingresponse = getShipping();
                    }
                }
                ViewBag.shippingresponse = shippingresponse;
                return View();
            } else {
                UDF.ExpireCart(customer.ID);
                return RedirectToAction("Index");
            }
        }
        public ActionResult Step3(int id = 0)
        {
            Customer c = new Customer {
                ID = id
            };
            c.Get();
            ViewBag.customer = c;

            string error = (TempData["message"] != null) ? (string)TempData["message"] : null;
            ViewBag.error = error;

            List<Address> addresses = c.GetAddresses();
            ViewBag.addresses = addresses;

            Cart currentCart = c.Carts.Where(x => x.payment_id == 0).First<Cart>();
            ViewBag.cart = currentCart;

            List<Country> countries = UDF.GetCountries();
            ViewBag.countries = countries;

            ShippingResponse shippingresponse = new ShippingResponse();
            shippingresponse = currentCart.getShipping();
            ViewBag.shippingresponse = shippingresponse;
            return View("Add-Shipping");
        }