public static void CancelOrder(IUnitOfWork db, ILogService log, ITime time, ISystemActionService actionService, IOrderHistoryService orderHistoryService, long orderId, long?by) { var dbOrder = db.Orders.Get(orderId); if (dbOrder != null) { var orderItems = db.OrderItemSources.GetWithListingInfo().Where(oi => oi.OrderId == orderId).ToList(); var itemIdList = orderItems.Where(oi => !String.IsNullOrEmpty(oi.SourceMarketId)) .Select(oi => oi.SourceMarketId) .ToList(); log.Info("Items to cancel: " + String.Join(";", itemIdList)); db.OrderNotifies.Add(new OrderNotify() { OrderId = dbOrder.Id, Type = (int)OrderNotifyType.CancellationRequest, Status = 1, Message = "Email cancelation from web page", CreateDate = time.GetAppNowTime(), }); db.Commit(); orderHistoryService.AddRecord(dbOrder.Id, OrderHistoryHelper.CancellationRequestKey, null, true, by); SystemActionHelper.AddCancelationActionSequences(db, actionService, dbOrder.Id, dbOrder.AmazonIdentifier, String.Join(";", itemIdList), null, null, null, null, by, CancelReasonType.Manually); } }
public void CheckRemovedOrder(IUnitOfWork db, ILogService log, ISystemActionService systemAction, Order order, long?toBatchId, long?by) { log.Info("CheckRemovedOrder"); var orderNumber = order.AmazonIdentifier; var customerOrderId = order.CustomerOrderId; var buyerEmail = order.BuyerEmail; //NOTE: when remove from batch if has cancellation request process them var cancelationRequests = db.OrderNotifies.GetAll().Where(o => o.OrderId == order.Id && o.Type == (int)OrderNotifyType.CancellationRequest).ToList(); if (cancelationRequests.Any() && toBatchId == null) //Move to Order Page { log.Info("Order status was changed to Canceled, orderNumber=" + orderNumber); var itemIdList = cancelationRequests .Where(r => !String.IsNullOrEmpty(r.Params)) .Select(r => r.Params) .Distinct(); SystemActionHelper.AddCancelationActionSequences(db, systemAction, order.Id, orderNumber, String.Join(";", itemIdList), null, null, null, null, by, CancelReasonType.PerBuyerRequest); order.OrderStatus = OrderStatusEnumEx.Canceled; db.Commit(); } }
private void CancelOrder(IUnitOfWork db, EmailReadingResult result, string orderNumber, Order order) { if (!String.IsNullOrEmpty(orderNumber)) { var itemId = EmailHelper.ExtractWalmartItemId(result.Email.Message); _log.Info("ItemId=" + itemId); var existCancellationActions = _systemAction.GetByTypeAndTag(db, SystemActionType.UpdateOnMarketCancelOrder, orderNumber); var isExistCancelRequest = existCancellationActions.Any(); if (existCancellationActions.Any() && order != null && (order.Market == (int)MarketType.Walmart || order.Market == (int)MarketType.WalmartCA)) //NOTE: for Walmart checking by item cancallation { var existItemCancallation = false; foreach (var action in existCancellationActions) { var data = JsonConvert.DeserializeObject <CancelOrderInput>(action.InputData); if (data.ItemId == itemId) { existItemCancallation = true; } } isExistCancelRequest = existItemCancallation; } if (!isExistCancelRequest) { result.WasEmailProcessed = true; _log.Info("CancellationEmailRule, WasEmailProcessed=" + result.WasEmailProcessed); var comment = ""; //NOTE: "system to cancel that order if it wasn’t shipped and it’s not assigned to Active Batch yet, and send client an email" //NOTE: if no order in system if (order == null || ((order.OrderStatus == OrderStatusEnumEx.Unshipped || order.OrderStatus == OrderStatusEnumEx.Pending || order.OrderStatus == OrderStatusEnumEx.Canceled) && !order.BatchId.HasValue)) { _log.Info("Order status was changed to Canceled, orderNumber=" + orderNumber); SystemActionHelper.AddCancelationActionSequences(db, _systemAction, order.Id, orderNumber, itemId, result.Email.Id, result.Email.From, (order != null && (order.Market == (int)MarketType.Walmart || order.Market == (int)MarketType.WalmartCA)) ? result.Email.Subject : null, EmailHelper.ExtractShortMessageBody(result.Email.Message, 200, true), null, CancelReasonType.PerBuyerRequest); if (order != null && order.Market != (int)MarketType.Walmart && order.Market != (int)MarketType.WalmartCA) //NOTE: Exclude Walmart, cancellation happen only for one item { order.OrderStatus = OrderStatusEnumEx.Canceled; } //if (order != null && (order.Market == (int) MarketType.Walmart || order.Market == (int)MarketType.WalmartCA)) //{ // if (!order.BatchId.HasValue) //Only when not in batch // { // var orderItemLineCount = db.OrderItems.GetByOrderIdAsDto(order.Id).Count(); // if (orderItemLineCount > 1) // { // _log.Info("Walmart Order set OnHold, in case it has more then one item line = " + orderItemLineCount); // order.OnHold = true; // db.OrderComments.Add(new OrderComment() // { // OrderId = order.Id, // Message = String.Format("[System] Partial email cancellation request, 1 / {0} order lines", orderItemLineCount), // Type = (int)CommentType.ReturnExchange, // LinkedEmailId = result.Email.Id, // CreateDate = _time.GetAppNowTime(), // UpdateDate = _time.GetAppNowTime(), // }); // } // } //} if (order != null) { comment = "Marked as cancelled + emailed"; db.OrderNotifies.Add(new OrderNotify() { OrderId = order.Id, Status = 1, Type = (int)OrderNotifyType.CancellationRequest, Params = itemId, Message = "Email cancelation request in progress", CreateDate = _time.GetAppNowTime(), }); } } else { var commentText = "[System] Email cancelation request wasn't processed. Order already shipped."; if (order.OrderStatus != OrderStatusEnumEx.Shipped) { db.OrderNotifies.Add(new OrderNotify() { OrderId = order.Id, Status = 1, Type = (int)OrderNotifyType.CancellationRequest, Params = itemId, Message = "Email cancelation request, order in batch", CreateDate = _time.GetAppNowTime(), }); } else { _systemAction.AddAction(db, SystemActionType.SendEmail, orderNumber, new SendEmailInput() { EmailType = EmailTypes.RejectOrderCancellationToBuyer, OrderId = orderNumber, ReplyToEmail = result.Email.From, ReplyToSubject = result.Email.Subject, }, null, null); commentText += " Email was sent to customer."; } db.OrderComments.Add(new OrderComment() { OrderId = order.Id, Message = commentText, Type = (int)CommentType.ReturnExchange, LinkedEmailId = result.Email.Id, CreateDate = _time.GetAppNowTime(), UpdateDate = _time.GetAppNowTime(), }); comment = "Cancellation skipped"; } db.OrderEmailNotifies.Add(new OrderEmailNotify() { OrderNumber = orderNumber, Type = (int)OrderEmailNotifyType.InputOrderCancelledEmail, Reason = comment, CreateDate = _time.GetUtcTime() }); db.Commit(); } else { _log.Info("Repeated OrderCancellation email, no action"); } } else { _log.Info("Can't OrderCancellation, no order number!"); } }