Exemplo n.º 1
0
 public MarketPriceViewViewModel(StyleItemSaleToMarketDTO saleToMarket)
 {
     SaleId             = saleToMarket.SaleId;
     Market             = (MarketType)saleToMarket.Market;
     MarketplaceId      = saleToMarket.MarketplaceId;
     MarketName         = MarketHelper.GetShortName(saleToMarket.Market, saleToMarket.MarketplaceId);
     MarketCurrency     = PriceHelper.GetCurrencySymbol(Market, MarketplaceId);
     SalePrice          = saleToMarket.SalePrice;
     SFPSalePrice       = saleToMarket.SFPSalePrice;
     SalePercent        = saleToMarket.SalePercent;
     ApplyToNewListings = saleToMarket.ApplyToNewListings;
 }
Exemplo n.º 2
0
        public ItemViewModel(ItemDTO item)
        {
            ItemId        = item.Id;
            Market        = item.Market;
            MarketplaceId = item.MarketplaceId;
            IsPrime       = item.IsPrime;

            if (item.PublishedStatus != item.PublishedStatusFromMarket &&
                item.PublishedStatusFromMarket.HasValue &&
                !PublishedStatusesHelper.InProgressStatus((PublishedStatuses)item.PublishedStatus))
            {
                PublishedStatus = item.PublishedStatusFromMarket.Value;
            }
            else
            {
                PublishedStatus = item.PublishedStatus;
            }

            //NOTE: need to review (in fact need to hide errors listings in out-of-stock)
            if (PublishedStatus == (int)PublishedStatuses.PublishingErrors &&
                item.RealQuantity == 0)
            {
                PublishedStatus = (int)PublishedStatuses.PublishedInactive;
            }

            PublishedStatusReason = item.PublishedStatusReason;

            ListingEntityId = item.ListingEntityId;
            ParentASIN      = item.ParentASIN;
            SKU             = item.SKU;

            SourceMarketId = item.SourceMarketId;

            PictureUrl      = item.ImageUrl;
            LargePictureUrl = item.LargeImageUrl;

            ListingType = AmazonTemplateHelper.GetListingType(item);

            IsFBA = item.IsFBA;
            EstimatedOrderHandlingFeePerOrder = item.EstimatedOrderHandlingFeePerOrder;
            EstimatedPickPackFeePerUnit       = item.EstimatedPickPackFeePerUnit;
            EstimatedWeightHandlingFeePerUnit = item.EstimatedWeightHandlingFeePerUnit;

            StyleId     = item.StyleId;
            StyleItemId = item.StyleItemId;
            StyleString = item.StyleString;
            StyleOnHold = item.StyleOnHold ?? false;
            ASIN        = item.ASIN;

            Size           = item.Size;
            ColorVariation = item.ColorVariation;

            StyleSize       = item.StyleSize;
            StyleColor      = item.StyleColor;
            StyleItemOnHold = item.StyleItemOnHold ?? false;

            Color           = item.Color;
            DisplayQuantity = item.DisplayQuantity;
            RealQuantity    = item.RealQuantity;

            AutoQuantityUpdateDate = item.AutoQuantityUpdateDate;
            OnHold        = item.OnHold;
            UseStyleImage = item.UseStyleImage;
            RestockDate   = item.RestockDate;

            ItemCurrentPrice         = item.CurrentPrice;
            ItemCurrentPriceCurrency = PriceHelper.GetCurrencySymbol((MarketType)item.Market, item.MarketplaceId);
            BusinessPrice            = item.BusinessPrice;

            //Sale
            SalePrice        = item.SalePrice;
            SaleStartDate    = item.SaleStartDate;
            SaleEndDate      = item.SaleEndDate;
            MaxPiecesOnSale  = item.MaxPiecesOnSale;
            PiecesSoldOnSale = item.PiecesSoldOnSale;
            SaleId           = item.SaleId;

            Weight = item.Weight != null?item.Weight.ToString() : "";

            Barcode = item.Barcode;

            LowestPrice  = item.LowestPrice;
            BuyBoxStatus = item.BuyBoxStatus ?? BuyBoxStatusCode.None;

            TotalQuantity = item.TotalQuantity;

            SoldByAmazon      = item.SoldByAmazon ?? 0;
            SoldByInventory   = item.SoldByInventory ?? 0;
            SoldByFBA         = item.SoldByFBA ?? 0;
            SoldBySpecialCase = item.SoldBySpecialCase ?? 0;

            TotalSoldByAmazon      = item.TotalSoldByAmazon ?? 0;
            TotalSoldByInventory   = item.TotalSoldByInventory ?? 0;
            TotalSoldByFBA         = item.TotalSoldByFBA ?? 0;
            TotalSoldBySpecialCase = item.TotalSoldBySpecialCase ?? 0;

            RemainingQuantity = item.RemainingQuantity.HasValue ? Math.Max(item.RemainingQuantity.Value, 0) : (int?)null;

            IsAmazonParentASIN = item.IsAmazonParentASIN;
            IsExistOnAmazon    = item.IsExistOnAmazon;
            OpenDate           = item.OpenDate ?? item.CreateDate;
            AmazonRealQuantity = item.AmazonRealQuantity;
            AmazonCurrentPrice = item.AmazonCurrentPrice;
        }
Exemplo n.º 3
0
        private static FBAPickListItemViewModel ComposeNewGroup(ListingOrderDTO item,
                                                                bool hasColorVariation,
                                                                Style style,
                                                                IList <StyleItemDTO> styleItems)
        {
            //Add new group
            IList <PickListSizeInfo> allSizes = new List <PickListSizeInfo>();

            //Prepare image
            var image = item.ItemPicture;

            if (String.IsNullOrEmpty(image))
            {
                image = item.StyleImage;
            }

            var title = item.Title;

            if (item.SourceStyleString != item.StyleID)        //NOTE: happens when item has linked style OR item style was changed
            {
                if (!String.IsNullOrEmpty(item.StyleImage))
                {
                    image = item.StyleImage;
                }

                if (style != null && !String.IsNullOrEmpty(style.Name))
                {
                    title = style.Name;
                }
            }

            title = SizeHelper.ExcludeSizeInfo(title);

            if (style != null)
            {
                allSizes = styleItems.Where(i => i.StyleId == style.Id)
                           .Select(i => new PickListSizeInfo()
                {
                    StyleSize   = i.Size,
                    StyleItemId = i.StyleItemId,
                    Weight      = i.Weight
                }).ToList();
            }

            var itemPrice = item.ItemPrice;

            if (item.Market == (int)MarketType.Amazon ||
                item.Market == (int)MarketType.AmazonEU ||
                item.Market == (int)MarketType.AmazonAU)
            {
                itemPrice = item.QuantityOrdered != 0 ? item.ItemPrice / item.QuantityOrdered : 0;
            }

            var newGroup = new FBAPickListItemViewModel
            {
                StyleName         = style != null ? style.Name : null,
                StyleId           = style != null ? (long?)style.Id : null,
                Color             = item.Color,
                StyleString       = style != null ? style.StyleID : null,
                ProductName       = title,
                Picture           = image,
                HasColorVariation = hasColorVariation,

                ListingInfoes = new List <ListingInfo>()
                {
                    new ListingInfo()
                    {
                        ASIN           = item.ASIN,
                        ParentASIN     = item.ParentASIN,
                        SourceMarketId = item.SourceMarketId,
                        MarketplaceId  = item.MarketplaceId,
                        Market         = item.Market,
                        Quantity       = item.QuantityOrdered,
                        Rank           = item.Rank,
                    }
                },

                SoldSizes = new List <PickListSizeInfo>
                {
                    new PickListSizeInfo
                    {
                        Quantity = item.QuantityOrdered,
                        Sizes    = new List <string>()
                        {
                            item.Size
                        },
                        StyleSize   = item.StyleSize,
                        StyleItemId = item.StyleItemId,
                        Color       = item.Color,
                        Weight      = item.Weight,
                        Prices      = new List <PriceInfo>()
                        {
                            new PriceInfo()
                            {
                                Price    = itemPrice,
                                Currency = PriceHelper.GetCurrencySymbol((MarketType)item.Market, item.MarketplaceId)
                            }
                        }
                    }
                },
                AllSizes = allSizes,
            };

            return(newGroup);
        }
Exemplo n.º 4
0
        private static void UpdateExistGroup(FBAPickListItemViewModel existGroup,
                                             bool hasColorVariation,
                                             ListingOrderDTO item)
        {
            //This group always has appropriate color, only check size
            PickListSizeInfo existSize = null;

            if (hasColorVariation)
            {
                existSize = existGroup.SoldSizes.FirstOrDefault(s => s.StyleSize == item.StyleSize && s.Color == item.Color);
            }
            else
            {
                existSize = existGroup.SoldSizes.FirstOrDefault(s => s.StyleSize == item.StyleSize);
            }

            var currency  = PriceHelper.GetCurrencySymbol((MarketType)item.Market, item.MarketplaceId);
            var itemPrice = item.ItemPrice;

            if (item.Market == (int)MarketType.Amazon ||
                item.Market == (int)MarketType.AmazonEU ||
                item.Market == (int)MarketType.AmazonAU)
            {
                itemPrice = item.QuantityOrdered != 0 ? item.ItemPrice / item.QuantityOrdered : 0;
            }

            if (existSize != null)
            {
                existSize.Quantity += item.QuantityOrdered;

                if (!existSize.Prices.Any(p => p.Currency == currency && Math.Abs(p.Price - itemPrice) <= 0.1M))
                {
                    existSize.Prices.Add(new PriceInfo()
                    {
                        Price    = itemPrice,
                        Currency = currency
                    });
                }

                if (existSize.Sizes.All(s => s != item.Size))
                {
                    existSize.Sizes.Add(item.Size);
                }
            }
            else
            {
                existGroup.SoldSizes.Add(new PickListSizeInfo
                {
                    Quantity = item.QuantityOrdered,
                    Sizes    = new List <string>()
                    {
                        item.Size
                    },
                    StyleSize   = item.StyleSize,
                    StyleItemId = item.StyleItemId,
                    Color       = item.Color,
                    Weight      = item.Weight,
                    Prices      = new List <PriceInfo>()
                    {
                        new PriceInfo()
                        {
                            Price    = itemPrice,
                            Currency = currency,
                        }
                    }
                });
            }

            var existListing = existGroup.ListingInfoes.FirstOrDefault(l => l.ASIN == item.ASIN &&
                                                                       l.Market == item.Market &&
                                                                       l.MarketplaceId == item.MarketplaceId);

            if (existListing == null)
            {
                existGroup.ListingInfoes.Add(new ListingInfo()
                {
                    ASIN           = item.ASIN,
                    ParentASIN     = item.ParentASIN,
                    SourceMarketId = item.SourceMarketId,
                    MarketplaceId  = item.MarketplaceId,
                    Market         = item.Market,
                    Quantity       = item.QuantityOrdered,
                    Rank           = item.Rank,
                });
            }
            else
            {
                existListing.Quantity += item.QuantityOrdered;
            }
        }
Exemplo n.º 5
0
        //public static void UpdateSalePrices(IUnitOfWork db,
        //    long styleItemId,
        //    long saleId,
        //    decimal newSalePrice,
        //    decimal? newSFPSalePrice)
        //{
        //    var rateForMarketplace = RateHelper.GetRatesByStyleItemId(db, styleItemId);

        //    var marketPrices = db.StyleItemSaleToMarkets.GetAll().Where(s => s.SaleId == saleId).ToList();
        //    foreach (var marketPrice in marketPrices)
        //    {
        //        if (marketPrice.SalePrice.HasValue)
        //        {
        //            var marketListings = db.StyleItemSaleToListings.GetAll().Where(l => l.SaleToMarketId == )

        //            marketPrice.SalePrice = RateHelper.CalculateForMarket((MarketType) marketPrice.Market,
        //                marketPrice.MarketplaceId,
        //                newSalePrice,
        //                rateForMarketplace[MarketplaceKeeper.AmazonComMarketplaceId],
        //                rateForMarketplace[MarketplaceKeeper.AmazonCaMarketplaceId],
        //                rateForMarketplace[MarketplaceKeeper.AmazonUkMarketplaceId],
        //                rateForMarketplace[MarketplaceKeeper.AmazonAuMarketplaceId],
        //                RateService.GetMarketShippingAmount(MarketType.Amazon, MarketplaceKeeper.AmazonComMarketplaceId),
        //                RateService.GetMarketShippingAmount((MarketType)marketPrice.Market, marketPrice.MarketplaceId),
        //                RateService.GetMarketExtraAmount((MarketType)marketPrice.Market, marketPrice.MarketplaceId));


        //        }
        //    }

        //    db.Commit();
        //}

        public static IList <MarketPriceEditViewModel> GetForStyleItemId(IUnitOfWork db,
                                                                         IDbFactory dbFactory,
                                                                         long styleItemId,
                                                                         decimal?initSalePrice,
                                                                         decimal?initSFPSalePrice)
        {
            var priceService = new PriceService(dbFactory);

            var results         = new List <MarketPriceEditViewModel>();
            var allMarketplaces = UIMarketHelper.GetSalesMarketplaces();
            var allListings     = db.Listings.GetListingsAsListingDto()
                                  .Where(l => l.StyleItemId == styleItemId)
                                  .ToList()
                                  .Where(l => !l.IsFBA)
                                  .ToList();

            var rateForMarketplace = RateHelper.GetRatesByStyleItemId(db, styleItemId);

            var sale            = db.StyleItemSales.GetAllAsDto().FirstOrDefault(s => s.StyleItemId == styleItemId && !s.IsDeleted);
            var checkedListings = new List <StyleItemSaleToListingDTO>();

            if (sale != null)
            {
                checkedListings = db.StyleItemSaleToListings.GetAllAsDto().Where(s => s.SaleId == sale.Id).ToList();
            }

            var checkedMarkets = new List <StyleItemSaleToMarketDTO>();

            if (sale != null)
            {
                checkedMarkets = db.StyleItemSaleToMarkets.GetAllAsDto().Where(s => s.SaleId == sale.Id).ToList();
            }

            foreach (var market in allMarketplaces)
            {
                var checkedMarket = checkedMarkets.FirstOrDefault(l => l.Market == (int)market.Market &&
                                                                  (l.MarketplaceId == market.MarketplaceId || String.IsNullOrEmpty(market.MarketplaceId)));

                var marketListings = allListings
                                     .Where(l => l.Market == (int)market.Market &&
                                            (l.MarketplaceId == market.MarketplaceId ||
                                             String.IsNullOrEmpty(market.MarketplaceId)))
                                     .Select(l => new ListingPriceEditViewModel(l))
                                     .ToList();

                foreach (var listing in marketListings)
                {
                    listing.IsChecked = sale == null ?
                                        ((listing.IsPrime || SkuHelper.IsPrime(listing.SKU)) ? initSFPSalePrice.HasValue : initSalePrice.HasValue) :
                                        checkedListings.Any(l => l.ListingId == listing.ListingId);
                }

                var defaultPrice = //sale == null &&
                                   initSalePrice.HasValue &&
                                   marketListings.Any() ? priceService.GetMarketDefaultPrice(initSalePrice.Value,
                                                                                             market.Market,
                                                                                             market.MarketplaceId,
                                                                                             rateForMarketplace) : (decimal?)null;

                foreach (var marketListing in marketListings)
                {
                    var newDefaultPrice = priceService.ApplyMarketSpecified(defaultPrice,
                                                                            initSFPSalePrice,
                                                                            market.Market,
                                                                            market.MarketplaceId,
                                                                            marketListing.Weight,
                                                                            marketListing.IsPrime,
                                                                            marketListing.IsFBA);

                    if (newDefaultPrice != defaultPrice)
                    {
                        marketListing.OverrideSalePrice = newDefaultPrice;
                    }
                }

                var saleToMarket = new MarketPriceEditViewModel()
                {
                    Id = checkedMarket != null ? checkedMarket.Id : 0,

                    Market         = (MarketType)market.Market,
                    MarketplaceId  = market.MarketplaceId,
                    MarketName     = MarketHelper.GetMarketName((int)market.Market, market.MarketplaceId),
                    MarketCurrency = PriceHelper.GetCurrencySymbol(market.Market, market.MarketplaceId),

                    SalePrice          = checkedMarket != null ? checkedMarket.SalePrice : defaultPrice,
                    SFPSalePrice       = market.MarketplaceId == MarketplaceKeeper.AmazonComMarketplaceId ? initSFPSalePrice : null,
                    SalePercent        = checkedMarket != null ? checkedMarket.SalePercent : null,
                    ApplyToNewListings = checkedMarket != null ? checkedMarket.ApplyToNewListings : false,

                    Listings = marketListings
                };

                results.Add(saleToMarket);
            }

            return(results);
        }
Exemplo n.º 6
0
        public ItemPriceViewModel(ItemExDTO item)
        {
            ItemId        = item.Id;
            Market        = item.Market;
            MarketplaceId = item.MarketplaceId;

            ListingEntityId = item.ListingEntityId;
            ParentASIN      = item.ParentASIN;
            SKU             = item.SKU;

            SourceMarketId = item.SourceMarketId;

            PictureUrl      = item.ImageUrl;
            LargePictureUrl = item.LargeImageUrl;

            IsFBA = item.IsFBA;
            EstimatedOrderHandlingFeePerOrder = item.EstimatedOrderHandlingFeePerOrder;
            EstimatedPickPackFeePerUnit       = item.EstimatedPickPackFeePerUnit;
            EstimatedWeightHandlingFeePerUnit = item.EstimatedWeightHandlingFeePerUnit;

            StyleId     = item.StyleId;
            StyleItemId = item.StyleItemId;
            StyleString = item.StyleString;
            StyleOnHold = item.StyleOnHold ?? false;
            ASIN        = item.ASIN;

            Size           = item.Size;
            ColorVariation = item.ColorVariation;

            StyleSize  = item.StyleSize;
            StyleColor = item.StyleColor;

            Color           = item.Color;
            DisplayQuantity = item.DisplayQuantity;
            RealQuantity    = item.RealQuantity;

            AutoQuantityUpdateDate = item.AutoQuantityUpdateDate;
            OnHold      = item.OnHold;
            RestockDate = item.RestockDate;

            ItemCurrentPrice         = item.CurrentPrice;
            ItemCurrentPriceCurrency = PriceHelper.GetCurrencySymbol((MarketType)item.Market, item.MarketplaceId);

            //Sale
            SalePrice        = item.SalePrice;
            SaleStartDate    = item.SaleStartDate;
            SaleEndDate      = item.SaleEndDate;
            MaxPiecesOnSale  = item.MaxPiecesOnSale;
            PiecesSoldOnSale = item.PiecesSoldOnSale;
            SaleId           = item.SaleId;

            Weight = item.Weight != null?item.Weight.ToString() : "";

            Barcode = item.Barcode;

            WinnerPrice = item.WinnerPrice;
            WinnerPriceLastChangeDate  = item.WinnerPriceLastChangeDate;
            WinnerPriceLastChangeValue = item.WinnerPriceLastChangeValue;

            WinnerSalePrice = item.WinnerSalePrice;
            WinnerSalePriceLastChangeDate  = item.WinnerSalePriceLastChangeDate;
            WinnerSalePriceLastChangeValue = item.WinnerSalePriceLastChangeValue;

            BuyBoxStatus = item.BuyBoxStatus ?? BuyBoxStatusCode.None;

            TotalQuantity = item.TotalQuantity;

            RemainingQuantity = item.RemainingQuantity;

            IsAmazonParentASIN = item.IsAmazonParentASIN;
            OpenDate           = item.OpenDate ?? item.CreateDate;
            AmazonRealQuantity = item.AmazonRealQuantity;
            AmazonCurrentPrice = item.AmazonCurrentPrice;
        }