예제 #1
0
        public void LogStyleItemQuantity(IUnitOfWork db,
                                         long styleItemId,
                                         int?newQuantity,
                                         int?oldQuantity,
                                         QuantityChangeSourceType type,
                                         string tag,
                                         long?sourceEntityTag,
                                         string sourceEntityName,
                                         DateTime when,
                                         long?by)
        {
            var styleItemCache = db.StyleItemCaches.GetAllAsDto().FirstOrDefault(si => si.Id == styleItemId);

            db.StyleItemQuantityHistories.Add(new StyleItemQuantityHistory()
            {
                StyleItemId = styleItemId,

                Quantity     = newQuantity,
                FromQuantity = oldQuantity,

                BeforeRemainingQuantity = styleItemCache != null ? styleItemCache.RemainingQuantity : (int?)null,

                Type             = (int)type,
                Tag              = tag,
                SourceEntityTag  = sourceEntityTag,
                SourceEntityName = sourceEntityName,

                CreateDate = when,
                CreatedBy  = by
            });

            db.Commit();
        }
        public static string GetName(QuantityChangeSourceType type)
        {
            switch (type)
            {
            case QuantityChangeSourceType.AddNewBox:
                return("Add Box");

            case QuantityChangeSourceType.RemoveBox:
                return("Remove Box");

            case QuantityChangeSourceType.ChangeBox:
                return("Change Box Qty");

            case QuantityChangeSourceType.UseBoxQuantity:
                return("Switch to Box Qty");

            case QuantityChangeSourceType.UseManuallyQuantity:
                return("Switch to Manually");

            case QuantityChangeSourceType.AddSpecialCase:
                return("Special Case");

            case QuantityChangeSourceType.RemoveSpecialCase:
                return("Special Case");

            case QuantityChangeSourceType.SentToFBA:
                return("Sent to FBA");

            case QuantityChangeSourceType.SentToStore:
                return("Sent to Store");

            case QuantityChangeSourceType.Initial:
                return("Manually");

            case QuantityChangeSourceType.EnterNewQuantity:
                return("Manually");

            case QuantityChangeSourceType.OnHold:
                return("On Hold");

            case QuantityChangeSourceType.NewOrder:
                return("New Order");

            case QuantityChangeSourceType.OrderCancelled:
                return("Order Canceled");

            case QuantityChangeSourceType.RemainingChanged:
                return("Snapshot");

            case QuantityChangeSourceType.SaleEventOnHold:
                return("Sale Event (OnHold)");

            case QuantityChangeSourceType.SaleEventPurchased:
                return("Sale Event (Purchased)");

            default:
                return(type.ToString());
            }
            return("-");
        }
예제 #3
0
        public void UpdateListingQuantity(IUnitOfWork db,
                                          QuantityChangeSourceType type,
                                          Listing listing,
                                          int?newQuantity,
                                          string size,
                                          string styleString,
                                          long?styleId,
                                          long?styleItemId,
                                          DateTime when,
                                          long?by)
        {
            var wasChanged = false;
            var note       = String.Empty;

            if (listing.RealQuantity != (newQuantity ?? 0))
            {
                note = listing.RealQuantity.ToString();
                listing.QuantityUpdateRequested     = true;
                listing.QuantityUpdateRequestedDate = when;
                listing.RealQuantity           = newQuantity ?? 0;
                listing.RealQuantityUpdateDate = when;
                if (type == QuantityChangeSourceType.SetByAutoQuantity)
                {
                    listing.AutoQuantityUpdateDate = when;
                }

                wasChanged = true;
            }

            if (wasChanged)
            {
                db.QuantityHistories.Add(new QuantityHistory()
                {
                    ListingId       = listing.Id,
                    Type            = (int)type,
                    QuantityChanged = newQuantity ?? 0,
                    SKU             = StringHelper.Substring(listing.SKU, 50),

                    StyleId     = styleId,
                    StyleString = StringHelper.Substring(styleString, 50),
                    StyleItemId = styleItemId,
                    Size        = StringHelper.Substring(size, 50),

                    OrderId    = StringHelper.Substring(note, 50),
                    CreateDate = when,
                    CreatedBy  = by
                });

                db.Commit();
            }
        }
예제 #4
0
 public void Process(IUnitOfWork db,
                     long listingId,
                     int quantity,
                     QuantityChangeSourceType changeType,
                     string orderId,
                     long?styleId,
                     string styleString,
                     long?styleItemId,
                     string sku,
                     string size)
 {
     var historyUpdated = UpdateQuantityHistory(db,
                                                _log,
                                                quantity,
                                                changeType,
                                                listingId,
                                                orderId,
                                                styleId,
                                                styleString,
                                                styleItemId,
                                                sku,
                                                size,
                                                _time.GetAppNowTime());
 }
예제 #5
0
        private bool UpdateQuantityHistory(IUnitOfWork db,
                                           ILogService log,
                                           int quantity,
                                           QuantityChangeSourceType changeType,
                                           long listingId,
                                           string orderId,
                                           long?styleId,
                                           string styleString,
                                           long?styleItemId,
                                           string sku,
                                           string size,
                                           DateTime when)
        {
            var qtyHistories = db.QuantityHistories.GetByOrderId(orderId);
            var dbQtyHistory = qtyHistories.FirstOrDefault(q => q.ListingId == listingId && q.StyleItemId == styleItemId);

            if (changeType == QuantityChangeSourceType.NewOrder)
            {
                if (dbQtyHistory != null)
                {
                    //Already substracted
                    if (dbQtyHistory.QuantityChanged != quantity)
                    {
                        log.Fatal(String.Format("Quantity not equal for order item in quantity history record, orderId={0}, listing={1}, qty history={2}, new quantity={3}",
                                                orderId, listingId, dbQtyHistory.QuantityChanged, quantity));
                    }
                    else
                    {
                        log.Warn(String.Format("History record already exist, orderId={0}, listingId={1}, quantity={2}", orderId, listingId, quantity));
                    }
                    return(false);
                }
                else
                {
                    db.QuantityHistories.Add(new QuantityHistory()
                    {
                        ListingId       = listingId,
                        Type            = (int)QuantityChangeSourceType.NewOrder,
                        QuantityChanged = quantity,
                        SKU             = sku,
                        StyleId         = styleId,
                        StyleString     = styleString,
                        StyleItemId     = styleItemId,
                        OrderId         = orderId,
                        Size            = size,
                        CreateDate      = when,
                    });

                    if (styleItemId.HasValue)
                    {
                        LogStyleItemQuantity(db,
                                             styleItemId.Value,
                                             quantity,
                                             null,
                                             QuantityChangeSourceType.NewOrder,
                                             orderId,
                                             null,
                                             null,
                                             when,
                                             null);
                    }
                    return(true);
                }
            }

            if (changeType == QuantityChangeSourceType.OrderCancelled)
            {
                if (qtyHistories.Count == 1 && qtyHistories.First().Type == (int)QuantityChangeSourceType.NewOrder)
                {
                    db.QuantityHistories.Add(new QuantityHistory()
                    {
                        ListingId       = listingId,
                        Type            = (int)QuantityChangeSourceType.OrderCancelled,
                        QuantityChanged = -quantity,
                        SKU             = sku,
                        StyleId         = styleId,
                        StyleString     = styleString,
                        StyleItemId     = styleItemId,
                        OrderId         = orderId,
                        Size            = size,
                        CreateDate      = when,
                    });

                    if (styleItemId.HasValue)
                    {
                        LogStyleItemQuantity(db,
                                             styleItemId.Value,
                                             -quantity,
                                             null,
                                             QuantityChangeSourceType.OrderCancelled,
                                             orderId,
                                             null,
                                             null,
                                             when,
                                             null);
                    }
                    return(true);
                }
                else
                {
                    //Do nothing
                    //-Canceled info already exist
                    //-Or no new order info
                }
            }

            db.Commit();
            return(false);
        }