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;
        }
Пример #2
0
        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;
            }
          
        }