Пример #1
0
        public ActionResult Checkout(CartService cart, ShippingViewModel model)
        {
            if (ModelState.IsValid)
            {
                ShippingDTO shipping = new ShippingDTO
                {
                    City      = model.City,
                    Email     = model.Email,
                    FirstName = model.FirstName,
                    LastName  = model.LastName,
                    GiftWrap  = model.GiftWrap
                };

                if (cart.Lines.Count() == 0)
                {
                    ModelState.AddModelError("", "You cart is empty!");
                }

                orderProcessor.ProcessOrder(cart, shipping);
                cart.Clear();
                return(View("Completed"));
            }
            else
            {
                return(View(model));
            }
        }
        public void ProcessOrder(CartService cart, ShippingDTO shipping)
        {
            Shipping _shipping = new Shipping
            {
                City      = shipping.City,
                Email     = shipping.Email,
                FirstName = shipping.FirstName,
                LastName  = shipping.LastName,
                GiftWrap  = shipping.GiftWrap
            };

            if (_shipping != null)
            {
                Database.Shippings.Create(_shipping);
            }
            Database.Save();


            using (var smtpClient = new SmtpClient())
            {
                smtpClient.EnableSsl             = emailSettings.UseSsl;
                smtpClient.Host                  = emailSettings.ServerName;
                smtpClient.Port                  = emailSettings.ServerPort;
                smtpClient.UseDefaultCredentials = false;
                smtpClient.Credentials           = new NetworkCredential(emailSettings.Username, emailSettings.Password);
                if (emailSettings.WriteAsFile)
                {
                    smtpClient.DeliveryMethod          = SmtpDeliveryMethod.SpecifiedPickupDirectory;
                    smtpClient.PickupDirectoryLocation = emailSettings.FileLocation;
                    smtpClient.EnableSsl = false;
                }
                StringBuilder body = new StringBuilder().AppendLine("New Order").AppendLine("____").AppendLine("Goods: ");
                foreach (var line in cart.Lines)
                {
                    var subtotal = line.SportSupplement.Price * line.Quantity;
                    body.AppendFormat("{0}x{1} (total: {2:c})", line.Quantity, line.SportSupplement.Name, subtotal);
                }

                body.AppendFormat("total cost: {0:c}", cart.ComputeTotalValue())
                .AppendLine("---")
                .AppendLine("Delivery:")
                .AppendLine(shipping.FirstName)
                .AppendLine(shipping.LastName)
                .AppendLine(shipping.City ?? "")
                .AppendLine("---")
                .AppendFormat("Gift wrap: {0}",
                              shipping.GiftWrap ? "Yes" : "No");

                MailMessage mailMessage = new MailMessage(
                    emailSettings.MailFromAddress, emailSettings.MailToAddress, "We send your order!", body.ToString());

                if (emailSettings.WriteAsFile)
                {
                    mailMessage.BodyEncoding = Encoding.UTF8;
                }
                smtpClient.Send(mailMessage);
            }
        }
Пример #3
0
 private BundleModel setBundleData(ShippingDTO shippingResult, SaleDTO saleResult, ProductDTO productResult)
 {
     return(new BundleModel
     {
         Status = shippingResult.Status,
         Sale = getMapperBySale(saleResult),
         Product = getMapperByProduct(productResult)
     });
 }
Пример #4
0
        public bool UpdateOrder(IUnitOfWork db, ShippingDTO shipping)
        {
            _log.Info("Update order: id=" + shipping.OrderId + ", orderId=" + shipping.AmazonIdentifier + ", marketId=" + shipping.MarketOrderId);

            IList <OrderItemDTO> orderItems;

            if (shipping.IsFromMailPage)
            {
                orderItems = db.OrderItems.GetByOrderIdAsDto(shipping.OrderId)
                             //Remove canceled items with 0 price
                             .Where(m => m.ItemPrice > 0 || m.QuantityOrdered > 0).ToList();
            }
            else
            {
                orderItems = db.OrderItems.GetByShippingInfoIdAsDto(shipping.Id)
                             //Remove canceled items with 0 price
                             .Where(m => m.ItemPrice > 0 || m.QuantityOrdered > 0).ToList();
            }

            var allItemWasUpdated = true;

            foreach (var item in orderItems)
            {
                _log.Info("OrderItem, itemId=" + item.ItemOrderIdentifier);

                DateTime?orderDate = null;
                if (shipping.OrderDate.HasValue)
                {
                    orderDate = shipping.OrderDate.Value.ToUniversalTime();
                }
                var shippingDate = shipping.ShippingDate.ToUniversalTime();
                if (orderDate.HasValue && shippingDate < orderDate)
                {
                    shippingDate = orderDate.Value.AddHours(2);
                }

                var result = _api.UpdateOrder(shipping.MarketOrderId,
                                              item.ItemOrderIdentifier,
                                              shippingDate,
                                              shipping.TrackingNumber,
                                              ShippingUtils.FormattedToMarketCurrierName(shipping.ShippingMethod.CarrierName, shipping.ShippingMethod.IsInternational, MarketType.eBay));

                _log.Info(String.Format("Order date: {0}, shipping date: {1}", orderDate, shippingDate));

                allItemWasUpdated = allItemWasUpdated && result.IsSuccess;
                if (result.IsSuccess)
                {
                    _log.Info("Order was updated");
                }
                else
                {
                    _log.Info("Order update errors: ErrorCode=" + result.ErrorCode + ", Message=" + result.Details);
                }
            }

            return(allItemWasUpdated);
        }
        public bool UpdateOrder(IUnitOfWork db, ShippingDTO shipping)
        {
            _log.Info("Update order: id=" + shipping.OrderId + ", orderId=" + shipping.AmazonIdentifier + ", marketId=" + shipping.MarketOrderId);

            var dbOrder = db.Orders.Get(shipping.OrderId);

            if (dbOrder.OrderStatus == OrderStatusEnumEx.Unshipped)
            {
                _log.Info("Order status changed: " + dbOrder.OrderStatus + " => " + OrderStatusEnumEx.Shipped);
                _orderHistory.AddRecord(dbOrder.Id, OrderHistoryHelper.StatusChangedKey, dbOrder.OrderStatus, OrderStatusEnumEx.Shipped, null);

                dbOrder.OrderStatus = OrderStatusEnumEx.Shipped;
            }
            db.Commit();

            return(true);
        }
Пример #6
0
        public void CreateShipping(ShippingDTO shippingDTO)
        {
            Shipping shipping = new Shipping
            {
                City      = shippingDTO.City,
                Email     = shippingDTO.Email,
                FirstName = shippingDTO.FirstName,
                LastName  = shippingDTO.LastName,
                GiftWrap  = shippingDTO.GiftWrap
            };

            if (shipping == null)
            {
                throw new ValidationException("Don`t found datas", "");
            }
            Database.Shippings.Create(shipping);
            Database.Save();
        }
        private bool UpdateOrder(IUnitOfWork db, ShippingDTO shipping)
        {
            _log.Info("Update order: id=" + shipping.OrderId + ", orderId=" + shipping.AmazonIdentifier + ", marketId=" + shipping.MarketOrderId);

            IList <OrderItemDTO> orderItems;

            if (shipping.IsFromMailPage)
            {
                orderItems = db.OrderItems.GetByOrderIdAsDto(shipping.OrderId)
                             //Remove canceled items with 0 price
                             .Where(m => m.ItemPrice > 0 || m.QuantityOrdered > 0).ToList();
            }
            else
            {
                orderItems = db.OrderItems.GetByShippingInfoIdAsDto(shipping.Id)
                             //Remove canceled items with 0 price
                             .Where(m => m.ItemPrice > 0 || m.QuantityOrdered > 0).ToList();
            }

            OrderHelper.PrepareSourceItemOrderId(orderItems);
            orderItems = OrderHelper.GroupBySourceItemOrderId(orderItems);

            DateTime?orderDate = null;

            if (shipping.OrderDate.HasValue)
            {
                orderDate = shipping.OrderDate.Value.ToUniversalTime();
            }
            var shippingDate = shipping.ShippingDate.ToUniversalTime();

            if (orderDate.HasValue && shippingDate < orderDate)
            {
                shippingDate = orderDate.Value.AddHours(2);
            }


            var result = _api.SubmitTrackingInfo(shipping.MarketOrderId,
                                                 shipping.TrackingNumber,
                                                 MarketUrlHelper.GetTrackingUrl(shipping.TrackingNumber, shipping.ShippingMethod.CarrierName),
                                                 shipping.ShippingMethod,
                                                 shipping.ShippingMethod.Name,
                                                 ShippingUtils.GetShippingType(shipping.ShippingMethodId),
                                                 ShippingUtils.FormattedToMarketCurrierName(shipping.ShippingMethod.CarrierName, shipping.ShippingMethod.IsInternational, _api.Market),
                                                 shippingDate,
                                                 orderItems,
                                                 shipping.MessageIdentifier.ToString());

            if (result.Status == CallStatus.Success)
            {
                _log.Info("Order was updated");
            }
            else
            {
                _log.Info("Order update errors: Message=" + result.Message);

                /*
                 * Walmart.Api.WalmartException: No response, statusCode=InternalServerError.
                 * Details: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns4:errors xmlns:ns2="http://walmart.com/mp/orders" xmlns:ns3="http://walmart.com/mp/v3/orders" xmlns:ns4="http://walmart.com/"><ns4:error><ns4:code>INVALID_REQUEST_CONTENT.GMP_ORDER_API</ns4:code><ns4:field>data</ns4:field><ns4:description>Unable to process this request. The Line: 4 of PO: 4576930294354 is in SHIPPED status</ns4:description><ns4:info>Request content is invalid.</ns4:info><ns4:severity>ERROR</ns4:severity><ns4:category>DATA</ns4:category><ns4:causes/><ns4:errorIdentifiers/></ns4:error></ns4:errors> ---> System.Net.WebException: The remote server returned an error: (400) Bad Request.
                 */
            }

            return(result.Status == CallStatus.Success);
        }
        private bool UpdateOrder(IUnitOfWork db, ShippingDTO shipping)
        {
            _log.Info("Update order: id=" + shipping.OrderId + ", orderId=" + shipping.AmazonIdentifier + ", marketId=" + shipping.MarketOrderId);

            IList <OrderItemDTO> orderItems;

            if (shipping.IsFromMailPage)
            {
                orderItems = db.OrderItems.GetByOrderIdAsDto(shipping.OrderId)
                             //Remove canceled items with 0 price
                             .Where(m => m.ItemPrice > 0 || m.QuantityOrdered > 0).ToList();
            }
            else
            {
                orderItems = db.OrderItems.GetByShippingInfoIdAsDto(shipping.Id)
                             //Remove canceled items with 0 price
                             .Where(m => m.ItemPrice > 0 || m.QuantityOrdered > 0).ToList();
            }

            OrderHelper.PrepareSourceItemOrderId(orderItems);
            orderItems = OrderHelper.GroupBySourceItemOrderId(orderItems);

            DateTime?orderDate = null;

            if (shipping.OrderDate.HasValue)
            {
                orderDate = shipping.OrderDate.Value.ToUniversalTime();
            }
            var shippingDate = shipping.ShippingDate.ToUniversalTime();

            if (orderDate.HasValue && shippingDate < orderDate)
            {
                shippingDate = orderDate.Value.AddHours(2);
            }

            var carrierName = shipping.ShippingMethod.CarrierName;

            if (!String.IsNullOrEmpty(shipping.CustomCurrier))
            {
                carrierName = shipping.CustomCurrier;
            }

            var result = _api.SubmitTrackingInfo(shipping.MarketOrderId,
                                                 shipping.TrackingNumber,
                                                 MarketUrlHelper.GetTrackingUrl(shipping.TrackingNumber, carrierName),
                                                 shipping.ShippingMethod.Name,
                                                 ShippingUtils.GetShippingType(shipping.ShippingMethodId),
                                                 ShippingUtils.FormattedToMarketCurrierName(carrierName, shipping.ShippingMethod.IsInternational, _api.Market),
                                                 shippingDate,
                                                 orderItems);

            if (result.Status == CallStatus.Success)
            {
                _log.Info("Order was updated");
            }
            else
            {
                _log.Fatal(_api.Market + ": Order update errors: Message=" + result.Message + ", Order=" + shipping.MarketOrderId);

                /*
                 * Walmart.Api.WalmartException: No response, statusCode=InternalServerError.
                 * Details: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns4:errors xmlns:ns2="http://walmart.com/mp/orders" xmlns:ns3="http://walmart.com/mp/v3/orders" xmlns:ns4="http://walmart.com/"><ns4:error><ns4:code>INVALID_REQUEST_CONTENT.GMP_ORDER_API</ns4:code><ns4:field>data</ns4:field><ns4:description>Unable to process this request. The Line: 4 of PO: 4576930294354 is in SHIPPED status</ns4:description><ns4:info>Request content is invalid.</ns4:info><ns4:severity>ERROR</ns4:severity><ns4:category>DATA</ns4:category><ns4:causes/><ns4:errorIdentifiers/></ns4:error></ns4:errors> ---> System.Net.WebException: The remote server returned an error: (400) Bad Request.
                 */

                if (StringHelper.ContainsNoCase(result.Exception?.Message, "doesn't have enough quantity to ship requested quantity"))
                {
                    var allUpdated = true;
                    //Send update by one items
                    foreach (var orderItem in orderItems)
                    {
                        var oneItemResult = _api.SubmitTrackingInfo(shipping.MarketOrderId,
                                                                    shipping.TrackingNumber,
                                                                    MarketUrlHelper.GetTrackingUrl(shipping.TrackingNumber, carrierName),
                                                                    shipping.ShippingMethod.Name,
                                                                    ShippingUtils.GetShippingType(shipping.ShippingMethodId),
                                                                    ShippingUtils.FormattedToMarketCurrierName(carrierName, shipping.ShippingMethod.IsInternational, _api.Market),
                                                                    shippingDate,
                                                                    new List <OrderItemDTO>()
                        {
                            orderItem
                        });

                        if (oneItemResult.Status == CallStatus.Success)
                        {
                            _log.Info("Order item " + orderItem.SKU + " was updated");
                        }
                        else
                        {
                            if (!StringHelper.ContainsNoCase(oneItemResult.Exception?.Message, "is in SHIPPED status") &&
                                !StringHelper.ContainsNoCase(oneItemResult.Exception?.Message, "qtyAvailableToShip :: 0"))
                            {
                                allUpdated = false;
                                _log.Fatal(_api.Market + ": Order item \"" + orderItem.SKU + "\" update errors: Message=" + oneItemResult.Message + ", Order=" + shipping.MarketOrderId);
                            }
                        }
                    }

                    if (allUpdated)
                    {
                        result = CallResult <DTOOrder> .Success(new DTOOrder());
                    }
                }
            }

            return(result.Status == CallStatus.Success);
        }
Пример #9
0
        private bool UpdateOrder(IUnitOfWork db, ShippingDTO shipping)
        {
            _log.Info("Update order: id=" + shipping.OrderId + ", orderId=" + shipping.AmazonIdentifier + ", marketId=" + shipping.MarketOrderId);

            IList <OrderItemDTO> orderItems;

            if (shipping.IsFromMailPage)
            {
                orderItems = db.OrderItems.GetWithListingInfo()
                             //Remove canceled items with 0 price
                             .Where(m => m.ItemPrice > 0 && m.Quantity > 0 && m.OrderId == shipping.OrderId)
                             .Select(oi => new OrderItemDTO()
                {
                    ItemPrice           = oi.ItemPrice,
                    QuantityOrdered     = oi.Quantity,
                    ItemOrderIdentifier = oi.ItemOrderId,
                    SKU = oi.SKU,     //Jet used SKU insted of ItemOrderId
                    SourceItemOrderIdentifier = oi.SourceItemOrderId,
                    ReplaceType = oi.ReplaceType,
                })
                             .ToList();
            }
            else
            {
                orderItems = db.OrderItems.GetWithListingInfoByShippingInfoIdAsDto(shipping.Id)
                             //Remove canceled items with 0 price
                             .Where(m => m.ItemPrice > 0 && m.QuantityOrdered > 0)
                             .ToList();
            }

            OrderHelper.PrepareSourceItemOrderId(orderItems);
            orderItems = OrderHelper.GroupBySourceItemOrderId(orderItems);

            DateTime?orderDate = null;

            if (shipping.OrderDate.HasValue)
            {
                orderDate = shipping.OrderDate.Value.ToUniversalTime();
            }
            var shippingDate = shipping.ShippingDate.ToUniversalTime();

            if (orderDate.HasValue && shippingDate < orderDate)
            {
                shippingDate = orderDate.Value.AddHours(2);
            }


            var result = _api.SubmitTrackingInfo(shipping.MarketOrderId,
                                                 shipping.TrackingNumber,
                                                 MarketUrlHelper.GetTrackingUrl(shipping.TrackingNumber, shipping.ShippingMethod.CarrierName),
                                                 shipping.ShippingMethod.Id,
                                                 shipping.ShippingMethod.CarrierName,
                                                 shippingDate,
                                                 orderItems);

            if (result.Status == CallStatus.Success)
            {
                _log.Info("Order was updated");
            }
            else
            {
                _log.Info("Order update errors: Message=" + result.Message);
            }

            return(result.Status == CallStatus.Success);
        }