private void AddOrUpdateLineItemFromDiscount(ProductAsDiscount productAsDiscount, Product product) { List<Product> discountProducts = new List<Product>(); discountProducts.Add(product); discProdReturnables = new List<ReturnableProduct>(); discProdReturnables = _productPackagingSummaryService.GetProductReturnables(product, productAsDiscount.Quantity); if (discProdReturnables != null && discProdReturnables.Count > 0) { discProdReturnables.ForEach(discountProducts.Add); } _productPackagingSummaryService.ClearProductReturnables(); foreach (Product prod in discountProducts) { decimal unitPrice = 0m; decimal unitVatRate = 0m; decimal totalNetPrice = 0m; decimal vatValue = 0m; decimal totalVatAmount = 0m; decimal totalPrice = 0m; decimal productDiscount = 0m; decimal totalProductDiscount = 0m; decimal qty = productAsDiscount.Quantity; OrderLineItemType orderLineItemType = OrderLineItemType.Discount; DiscountType discountType = productAsDiscount.DiscountType; if (prod.Id != product.Id) { if (((ReturnableProduct) prod).Capacity > 1) //returnable bulk container qty = (int) (productAsDiscount.Quantity/((ReturnableProduct) prod).Capacity); else //sale product returnable qty = productAsDiscount.Quantity; orderLineItemType = 0; discountType = 0; } if (prod.Id != product.Id) { LineItemPricingInfo pi = GetLineItemPricing( new PackagingSummary {Product = prod, Quantity = qty}, SelectedOutlet.Id); unitPrice = pi.UnitPrice; unitVatRate = pi.VatValue; totalNetPrice = pi.TotalNetPrice; vatValue = unitPrice*unitVatRate; totalVatAmount = pi.TotalVatAmount; totalPrice = pi.TotalPrice; productDiscount = pi.ProductDiscount; totalProductDiscount = pi.TotalProductDiscount; } decimal invBalance = 0m; decimal lineItemsQty = LineItems.Where(n => n.ProductId == prod.Id).Sum(n => n.Qty); decimal balanceAfterLineItems = 0m; Guid ccId = GetConfigParams().CostCentreId; bool inStock = _productPackagingSummaryService.IsProductInStock( ccId, prod.Id, lineItemsQty, qty, out invBalance); if (!inStock) { MessageBox.Show( "Discount product " + prod.Description + " is out of stock.\nThe product will not be added.\nThe required discount quantity is " + qty, "Distributr: Sales Module", MessageBoxButton.OK); } else { balanceAfterLineItems = invBalance - lineItemsQty; if (balanceAfterLineItems < qty) { MessageBox.Show( "The available inventory of " + balanceAfterLineItems + " units cannot cover the " + qty + " units awarded as discount for product " + prod.Description + ".\n" + "Please give " + balanceAfterLineItems + " units.", "Distributr: Sales Module", MessageBoxButton.OK); qty = balanceAfterLineItems; } if (qty > 0) AddLineItem(prod.Id, prod.Description, unitPrice, vatValue, totalVatAmount, qty, totalPrice, false, false, Guid.Empty, product.Id, orderLineItemType, discountType, productDiscount, prod.GetType().ToString().Split('.').Last()); //ordering List<OrderLineItemBase> lineItems = LineItems.Select(n => n as OrderLineItemBase).ToList(); LineItems.Clear(); _productPackagingSummaryService.OrderLineItems(lineItems) .Select(n => n as EditPOSSaleLineItem) .ToList() .ForEach(LineItems.Add); } } }
private void AddOrUpdateLineItemFromDiscount(ProductAsDiscount productAsDiscount, Product product) { List<Product> discountProducts = new List<Product>(); discountProducts.Add(product); discProdReturnables = new List<ReturnableProduct>(); discProdReturnables = _productPackagingSummaryService.GetProductReturnables(product, productAsDiscount.Quantity); if (discProdReturnables != null && discProdReturnables.Count > 0) { discProdReturnables.ForEach(discountProducts.Add); } _productPackagingSummaryService.ClearProductReturnables(); foreach (Product prod in discountProducts) { decimal unitPrice = 0m; decimal vatValue = 0m; decimal totalVatAmount = 0m; decimal totalPrice = 0m; decimal productDiscount = 0m; decimal totalProductDiscount = 0m; decimal qty = productAsDiscount.Quantity; if (prod.Id != product.Id) { if ((prod as ReturnableProduct).Capacity > 1) //returnable bulk container qty = (int) (productAsDiscount.Quantity/(prod as ReturnableProduct).Capacity); } if (prod.Id != product.Id) { LineItemPricingInfo pi = GetLineItemPricing(new PackagingSummary { Product = prod, Quantity = qty }, OutletId); unitPrice = pi.UnitPrice; vatValue = pi.VatValue; totalVatAmount = pi.TotalVatAmount; totalPrice = pi.TotalPrice; productDiscount = pi.ProductDiscount; totalProductDiscount = pi.TotalProductDiscount; } ApproveSalesmanOrderItem existingItem = null; if (prod.Id == product.Id) //is the discount product { existingItem = discountLineItems.FirstOrDefault(n => n.OrderLineItemType == OrderLineItemType.Discount && n.ProductId == prod.Id && n.LineItemDiscountType == productAsDiscount.DiscountType); } else { existingItem = LineItems.FirstOrDefault( n => n.ProductId == prod.Id && n.OrderLineItemType != OrderLineItemType.Discount); } if (existingItem != null) { if (prod.Id != product.Id) { if ((prod as ReturnableProduct).Capacity > 1) //returnable bulk container existingItem.Qty += qty; else //sale product returnable existingItem.Qty += qty; } else //sale product existingItem.Qty += qty; existingItem.TotalLineItemVatAmount += totalVatAmount; existingItem.TotalPrice += totalPrice; existingItem.LineItemTotalProductDiscount += totalProductDiscount; } else { using (var container = NestedContainer) { IOtherUtilities _otherUtilities = Using<IOtherUtilities>(container); existingItem = new ApproveSalesmanOrderItem(_otherUtilities) { SequenceNo = LineItems.Count() + 1, ProductDiscount = productDiscount, LineItemTotalProductDiscount = totalProductDiscount, IsEditable = false, LineItemId = Guid.Empty, ProductId = prod.Id, Product = prod.Description, //ParentProductId = product.Id, Qty = qty, UnitPrice = unitPrice, TotalLineItemVatAmount = totalVatAmount, LineItemVatValue = vatValue, TotalPrice = totalPrice, ProductType = prod.GetType().ToString().Split('.').Last(), CanEdit = false, CanRemove = false, HlnkDeleteContent = GetLocalText("sl.approveOrder.lineItemsGrid.deleteLineItem"), }; if (prod.Id == product.Id) //is the discount product { existingItem.LineItemDiscountType = productAsDiscount.DiscountType; existingItem.OrderLineItemType = OrderLineItemType.Discount; } if (existingItem.OrderLineItemType == OrderLineItemType.Discount) { discountLineItems.Add(existingItem); } else { LineItems.Add(existingItem); } } } } }
private void DisplayProductAsDiscountAndAddToDiscountLineItems(ProductAsDiscount productAsDiscount) { Product product = GetEntityById(typeof(Product),productAsDiscount.ProductId) as Product; AddOrUpdateLineItemFromDiscount(productAsDiscount, product); }
private void DisplayProductAsDiscountAndAddToDiscountLineItems(ProductAsDiscount productAsDiscount) { using (var container = NestedContainer) { IProductRepository _productService = Using<IProductRepository>(container); Product product = _productService.GetById(productAsDiscount.ProductId); AddOrUpdateLineItemFromDiscount(productAsDiscount, product); } }