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); } }
private BundleModel setBundleData(ShippingDTO shippingResult, SaleDTO saleResult, ProductDTO productResult) { return(new BundleModel { Status = shippingResult.Status, Sale = getMapperBySale(saleResult), Product = getMapperByProduct(productResult) }); }
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); }
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); }
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); }