Beispiel #1
0
        private Purchase Map(PurchaseCommand purchaseCommand)
        {
            var purchase = new Purchase
            {
                Id           = purchaseCommand.PurchaseId,
                PurchaseDate = DateTime.UtcNow
            };

            foreach (LineItemCommand lineItemCommand in purchaseCommand.LineItems)
            {
                var productLineItem = new ProductLineItem
                {
                    Product = new Product
                    {
                        Id          = lineItemCommand.ProductId,
                        ProductName = lineItemCommand.ProductName
                    }
                };
                productLineItem.PurchaseUnitPrice = lineItemCommand.PurchaseUnitPrice;
                productLineItem.PurchaseQuantity  = lineItemCommand.PurchaseQuantity;

                purchase.LineItems.Add(productLineItem);
            }

            return(purchase);
        }
        public async Task <CommandResult <CreateCommandResult <Guid> > > Handle(CreateOrderCommand request, CancellationToken cancellationToken)
        {
            var order = Order.Create();
            var plis  = request.Products.Select(p => ProductLineItem.Create(order.Id, p.Id, p.Quantity)).ToList();

            await _context.Orders.AddAsync(order, cancellationToken);

            await _context.ProductLineItems.AddRangeAsync(plis, cancellationToken);

            await _context.SaveChangesAsync(cancellationToken);

            return(await Task.FromResult(CommandResult <CreateCommandResult <Guid> > .Ok(new CreateCommandResult <Guid>(order.Id))));
        }
Beispiel #3
0
        public static IProductLineItem BreadItem()
        {
            var breadItem = new ProductLineItem
            {
                BasketId = 1,
                Product  = new Product {
                    Id = 1, Name = "Bread", Price = 1.00m
                },
                Quantity = 1
            };

            return(breadItem);
        }
Beispiel #4
0
        public void CalculateLineItemPrice_Return_Total_Success(int id, string name, decimal price, int qty, decimal expected)
        {
            var productItem = new ProductLineItem {
                BasketId = 1, Product = new Product {
                    Id = id, Name = name, Price = price
                }, Quantity = qty
            };

            var productTotal = productItem.Quantity * productItem.Product.Price;

            Assert.True(expected == productTotal);

            output.WriteLine($"Name: {productItem.Product.Name} : Price: {productItem.Product.Price} : Line Qty:{productItem.Quantity} : Line Cost:{productItem.Quantity * productItem.Product.Price}");
        }
Beispiel #5
0
        public static IProductLineItem MilkItem()
        {
            var discount = new Discount {
                Id = 2, DiscountAmount = 100m, TargetProductId = 2
            };
            var milkItem = new ProductLineItem
            {
                BasketId = 1,
                Product  = new Product {
                    Id = 2, Discount = discount, Name = "Milk", Price = 1.15m
                },
                Quantity = 1
            };

            return(milkItem);
        }
Beispiel #6
0
        public static IProductLineItem ButterItem()
        {
            var discount = new Discount {
                Id = 1, DiscountAmount = 50m, TargetProductId = 1
            };

            var butterItem = new ProductLineItem
            {
                BasketId = 1,
                Product  = new Product {
                    Id = 3, Discount = discount, Name = "Butter", Price = 0.80m
                },
                Quantity = 1
            };

            return(butterItem);
        }
        public void SaveBasketLineItem(int basketId, IProductLineItem lineItem)
        {
            var basketItem = _appDbContext.BasketLineItems.FirstOrDefault(l => l.BasketId == basketId && l.Product.Id == lineItem.Product.Id);

            if (basketItem != null)
            {
                basketItem.Quantity = lineItem.Quantity;
            }
            else
            {
                basketItem = new ProductLineItem {
                    BasketId = basketId, Quantity = lineItem.Quantity, DiscountedLineCost = lineItem.DiscountedLineCost, Product = lineItem.Product
                };
                _appDbContext.BasketLineItems.Add(basketItem);
            }

            _appDbContext.SaveChanges();
        }
Beispiel #8
0
        /// <summary>
        /// Builds the sales snapshot
        /// </summary>
        /// <param name="startDate"></param>
        /// <param name="endDate"></param>
        /// <param name="invoiceStatuses"></param>
        /// <param name="search"></param>
        /// <returns></returns>
        private SalesSearchSnapshot BuildSalesSearchSnapshot(DateTime startDate, DateTime endDate, IEnumerable <Guid> invoiceStatuses, string search)
        {
            // Get all the statuses
            var statuses = AllStatuses();

            // Loop and set selected statuses
            foreach (var status in statuses)
            {
                if (invoiceStatuses.Contains(status.Key))
                {
                    status.Checked = true;
                }
            }

            // Get the SQL
            var sql = ReportSqlHelper.SalesByItem.GetSaleSearchSql(startDate, endDate, invoiceStatuses, search);

            // Execure the SQL
            var results = ApplicationContext.DatabaseContext.Database.Query <SaleItem>(sql).ToList();

            // Group results by the product key
            var groupedResults = results.GroupBy(x => x.ExtendedData.GetProductKey());

            // List of ProductLineItem to add
            var ProductLineItemList = new List <ProductLineItem>();

            var currencySymbol = this.ActiveCurrencies.FirstOrDefault();

            // Loop each product
            foreach (var productGroup in groupedResults)
            {
                // We do a try as the product may be deleted and not exist anymore
                try
                {
                    // Get the base/master product (We need it for the name)
                    var product = _merchello.Query.Product.GetByKey(productGroup.Key);
                    if (product != null)
                    {
                        var productLineItem = new ProductLineItem
                        {
                            Name           = product.Name,
                            Quantity       = productGroup.Sum(x => x.Quantity),
                            Variants       = new List <ProductLineItem>(),
                            CurrencySymbol = currencySymbol.Symbol
                        };

                        // Get the correct total
                        decimal productGroupTotal = 0;
                        foreach (var p in productGroup)
                        {
                            productGroupTotal += p.Price * p.Quantity;
                        }
                        productLineItem.Total = productGroupTotal;


                        foreach (var variants in productGroup.GroupBy(x => x.Name))
                        {
                            var variantLineItem = new ProductLineItem
                            {
                                Name           = variants.FirstOrDefault().Name,
                                Quantity       = variants.Sum(x => x.Quantity),
                                CurrencySymbol = currencySymbol.Symbol
                            };

                            // Get the correct total
                            decimal productVariantTotal = 0;
                            foreach (var v in variants)
                            {
                                productVariantTotal += v.Price * v.Quantity;
                            }
                            variantLineItem.Total = productVariantTotal;

                            productLineItem.Variants.Add(variantLineItem);
                        }

                        if (productLineItem.Variants.Count() == 1)
                        {
                            if (productLineItem.Variants.FirstOrDefault().Name == product.Name)
                            {
                                // Same as base product so clear
                                productLineItem.Variants.Clear();
                            }
                        }

                        ProductLineItemList.Add(productLineItem);
                    }
                }
                catch (Exception ex)
                {
                    MultiLogHelper.Error <SalesSearchReportApiController>("Error in BuildSalesSearchSnapshot", ex);
                }
            }

            // Make final model
            var salesSearchSnapshot = new SalesSearchSnapshot
            {
                EndDate         = endDate,
                Search          = search,
                StartDate       = startDate,
                InvoiceStatuses = statuses,
                Products        = ProductLineItemList.OrderByDescending(x => x.Total)
            };

            // return
            return(salesSearchSnapshot);
        }