public UnitPriceDiscount GetUnitPrice(Guid productId, Guid outletId) { decimal unitPrice = 0; Outlet outlet = _costCentreRepository.GetById(outletId) as Outlet; if (outlet == null) throw new ArgumentException("Invalid Outlet Id"); if (outlet.OutletProductPricingTier == null) throw new ArgumentException("Invalid Outlet Pricing Tier"); ProductPricingTier tier = _productPricingTierRepository.GetById(outlet.OutletProductPricingTier.Id); Product p = _productRepository.GetById(productId); if (p == null) throw new ArgumentException("Invalid Product"); UnitPriceDiscount unitPriceDiscount = new UnitPriceDiscount() { Discount = 0, UnitPrice = 0 }; unitPrice = GetUnitPrice(p, tier); unitPriceDiscount.UnitPrice = unitPrice; if (_freeOfChargeDiscountRepository.IsProductFreeOfCharge(productId)) { unitPriceDiscount.DiscountType = DiscountType.FreeOfChargeDiscount; unitPriceDiscount.UnitPrice = 0; return unitPriceDiscount; } if (p is SaleProduct) { if (outlet.DiscountGroup != null) { ProductGroupDiscount pgd = _productGroupDiscountRepository.GetCurrentCustomerDiscount(outlet.DiscountGroup.Id, p.Id, 0); if (pgd != null) { try { decimal rate = pgd.CurrentDiscount(); decimal discount = rate * unitPrice; unitPrice = unitPrice - discount; unitPriceDiscount.Discount = discount; unitPriceDiscount.UnitPrice = unitPrice; unitPriceDiscount.DiscountType = DiscountType.GroupDiscount; } catch { } } } else { try { ProductDiscount pd = _productDiscount.GetProductDiscount(productId, tier.Id); decimal rate = pd.CurrentDiscountRate(0); decimal discount = rate * unitPrice; unitPrice = unitPrice - discount; unitPriceDiscount.Discount = discount; unitPriceDiscount.UnitPrice = unitPrice; unitPriceDiscount.DiscountType = DiscountType.ProductDiscount; } catch { } } } return unitPriceDiscount; }
public UnitPriceDiscount GetUnitPrice(Guid productId, Guid outletId,decimal quantity) { UnitPriceDiscount unitPriceDiscount = new UnitPriceDiscount() { Discount = 0, UnitPrice = 0 }; try { decimal unitPrice = 0; ProductPricingTier tier = null; Product p = null; Outlet outlet = _costCentreService.GetById(outletId) as Outlet; if (outlet == null) throw new ArgumentException("Invalid Outlet Id"); if (outlet.SpecialPricingTier != null) { tier = _productPricingTierService.GetById(outlet.SpecialPricingTier.Id); p = _productService.GetById(productId); if (p == null) throw new ArgumentException("Invalid Product"); unitPrice = GetUnitPrice(p, tier); unitPriceDiscount.UnitPrice = unitPrice; } if (outlet.OutletProductPricingTier != null && unitPrice==0) { tier = _productPricingTierService.GetById(outlet.OutletProductPricingTier.Id); p = _productService.GetById(productId); if (p == null) throw new ArgumentException("Invalid Product"); unitPrice = GetUnitPrice(p, tier); unitPriceDiscount.UnitPrice = unitPrice; } else if (outlet.OutletProductPricingTier==null) { throw new Exception("Invalid Outlet Pricing Tier"); } if (_freeOfChargeDiscountService.IsProductFreeOfCharge(productId)) { unitPriceDiscount.DiscountType = DiscountType.FreeOfChargeDiscount; unitPriceDiscount.UnitPrice = 0; return unitPriceDiscount; } if (p is SaleProduct) { if (outlet.DiscountGroup != null) { ProductGroupDiscount pgd = _productGroupDiscountService.GetCurrentCustomerDiscount(outlet.DiscountGroup.Id, p.Id, quantity); if (pgd != null) { decimal rate = pgd.CurrentDiscount(); decimal discount = rate*unitPrice; unitPrice = unitPrice - discount; unitPriceDiscount.Discount = discount; unitPriceDiscount.UnitPrice = unitPrice; unitPriceDiscount.DiscountType = DiscountType.GroupDiscount; } } else { ProductDiscount pd = _productDiscount.GetProductDiscount(productId, tier.Id); decimal rate =pd!=null? pd.CurrentDiscountRate(quantity):0; decimal discount = rate * unitPrice; unitPrice = unitPrice - discount; unitPriceDiscount.Discount = discount; unitPriceDiscount.UnitPrice = unitPrice; unitPriceDiscount.DiscountType = DiscountType.ProductDiscount; } } return unitPriceDiscount; } catch(Exception e) { throw e; } }