public virtual TaxProductPrice GetTaxProductPrice( Product product, Customer customer, out decimal taxRate, decimal unitPrice, decimal subTotal, decimal discountAmount, bool priceIncludesTax ) { //no need to calculate tax rate if passed "price" is 0 if (unitPrice == decimal.Zero) { taxRate = decimal.Zero; return(new TaxProductPrice()); } string taxCategoryId = ""; //it seems to be strange, but this way was used above var productPrice = new TaxProductPrice(); //---------------------------------------------------------------------------------------------------- bool isTaxable = default(bool); GetTaxRate(product, taxCategoryId, customer, 0, out taxRate, out isTaxable); if (priceIncludesTax) { if (isTaxable) { productPrice.UnitPriceInclTax = unitPrice; productPrice.UnitPriceExclTax = CalculatePrice(unitPrice, taxRate, false); } else { productPrice.UnitPriceInclTax = CalculatePrice(unitPrice, taxRate, false); productPrice.UnitPriceExclTax = CalculatePrice(unitPrice, taxRate, false); } } else { if (isTaxable) { productPrice.UnitPriceInclTax = CalculatePrice(unitPrice, taxRate, true); productPrice.UnitPriceExclTax = unitPrice; } else { productPrice.UnitPriceInclTax = unitPrice; productPrice.UnitPriceExclTax = unitPrice; } } //---------------------------------------------------------------------------------------------------- if (priceIncludesTax) { if (isTaxable) { productPrice.SubTotalInclTax = subTotal; productPrice.SubTotalExclTax = CalculatePrice(subTotal, taxRate, false); } else { productPrice.SubTotalInclTax = CalculatePrice(subTotal, taxRate, false); productPrice.SubTotalExclTax = CalculatePrice(subTotal, taxRate, false); } } else { if (isTaxable) { productPrice.SubTotalInclTax = CalculatePrice(subTotal, taxRate, true); productPrice.SubTotalExclTax = subTotal; } else { productPrice.SubTotalInclTax = subTotal; productPrice.SubTotalExclTax = subTotal; } } //---------------------------------------------------------------------------------------------------- if (priceIncludesTax) { if (isTaxable) { productPrice.discountAmountInclTax = discountAmount; productPrice.discountAmountExclTax = CalculatePrice(discountAmount, taxRate, false); } else { productPrice.discountAmountInclTax = CalculatePrice(discountAmount, taxRate, false); productPrice.discountAmountExclTax = CalculatePrice(discountAmount, taxRate, false); } } else { if (isTaxable) { productPrice.discountAmountInclTax = CalculatePrice(discountAmount, taxRate, true); productPrice.discountAmountExclTax = discountAmount; } else { productPrice.discountAmountInclTax = discountAmount; productPrice.discountAmountExclTax = discountAmount; } } if (!isTaxable) { //we return 0% tax rate in case a request is not taxable taxRate = decimal.Zero; } return(productPrice); }
public virtual async Task <TaxProductPrice> GetTaxProductPrice( Product product, Customer customer, decimal unitPrice, decimal unitPricewithoutDisc, decimal subTotal, decimal discountAmount, bool priceIncludesTax ) { string taxCategoryId = ""; //it seems to be strange, but this way was used above var productPrice = new TaxProductPrice(); //---------------------------------------------------------------------------------------------------- var taxrates = await GetTaxRate(product, taxCategoryId, customer, 0); productPrice.taxRate = taxrates.taxRate; if (priceIncludesTax) { if (taxrates.isTaxable) { productPrice.UnitPriceWihoutDiscInclTax = unitPricewithoutDisc; productPrice.UnitPriceWihoutDiscExclTax = CalculatePrice(unitPricewithoutDisc, taxrates.taxRate, false); productPrice.UnitPriceInclTax = unitPrice; productPrice.UnitPriceExclTax = CalculatePrice(unitPrice, taxrates.taxRate, false); productPrice.SubTotalInclTax = subTotal; productPrice.SubTotalExclTax = CalculatePrice(subTotal, taxrates.taxRate, false); productPrice.discountAmountInclTax = discountAmount; productPrice.discountAmountExclTax = CalculatePrice(discountAmount, taxrates.taxRate, false); } else { productPrice.UnitPriceWihoutDiscInclTax = CalculatePrice(unitPricewithoutDisc, taxrates.taxRate, false); productPrice.UnitPriceWihoutDiscExclTax = CalculatePrice(unitPricewithoutDisc, taxrates.taxRate, false); productPrice.UnitPriceInclTax = CalculatePrice(unitPrice, taxrates.taxRate, false); productPrice.UnitPriceExclTax = CalculatePrice(unitPrice, taxrates.taxRate, false); productPrice.SubTotalInclTax = CalculatePrice(subTotal, taxrates.taxRate, false); productPrice.SubTotalExclTax = CalculatePrice(subTotal, taxrates.taxRate, false); productPrice.discountAmountInclTax = CalculatePrice(discountAmount, taxrates.taxRate, false); productPrice.discountAmountExclTax = CalculatePrice(discountAmount, taxrates.taxRate, false); } } else { if (taxrates.isTaxable) { productPrice.UnitPriceWihoutDiscInclTax = CalculatePrice(unitPricewithoutDisc, taxrates.taxRate, true); productPrice.UnitPriceWihoutDiscExclTax = unitPricewithoutDisc; productPrice.UnitPriceInclTax = CalculatePrice(unitPrice, taxrates.taxRate, true); productPrice.UnitPriceExclTax = unitPrice; productPrice.SubTotalInclTax = CalculatePrice(subTotal, taxrates.taxRate, true); productPrice.SubTotalExclTax = subTotal; productPrice.discountAmountInclTax = CalculatePrice(discountAmount, taxrates.taxRate, true); productPrice.discountAmountExclTax = discountAmount; } else { productPrice.UnitPriceWihoutDiscInclTax = unitPricewithoutDisc; productPrice.UnitPriceWihoutDiscExclTax = unitPricewithoutDisc; productPrice.UnitPriceInclTax = unitPrice; productPrice.UnitPriceExclTax = unitPrice; productPrice.SubTotalInclTax = subTotal; productPrice.SubTotalExclTax = subTotal; productPrice.discountAmountInclTax = discountAmount; productPrice.discountAmountExclTax = discountAmount; } } if (!taxrates.isTaxable) { //we return 0% tax rate in case a request is not taxable taxrates.taxRate = decimal.Zero; } return(productPrice); }
public virtual async Task <TaxProductPrice> GetTaxProductPrice( Product product, Customer customer, decimal unitPrice, decimal unitPricewithoutDisc, int quantity, decimal subTotal, decimal discountAmount, bool priceIncludesTax ) { var taxrates = await GetTaxRate(product, product.TaxCategoryId, customer, 0); var productPrice = new TaxProductPrice { taxRate = taxrates.taxRate, Quantity = quantity }; if (priceIncludesTax) { if (taxrates.isTaxable) { productPrice.UnitPriceWihoutDiscInclTax = unitPricewithoutDisc; productPrice.UnitPriceWihoutDiscExclTax = CalculatePrice(unitPricewithoutDisc, taxrates.taxRate, false); productPrice.UnitPriceInclTax = unitPrice; productPrice.UnitPriceExclTax = CalculatePrice(unitPrice, taxrates.taxRate, false); productPrice.SubTotalInclTax = subTotal; productPrice.SubTotalExclTax = CalculatePrice(subTotal, taxrates.taxRate, false); productPrice.discountAmountInclTax = discountAmount; productPrice.discountAmountExclTax = CalculatePrice(discountAmount, taxrates.taxRate, false); } else { productPrice.UnitPriceWihoutDiscInclTax = CalculatePrice(unitPricewithoutDisc, taxrates.taxRate, false); productPrice.UnitPriceWihoutDiscExclTax = CalculatePrice(unitPricewithoutDisc, taxrates.taxRate, false); productPrice.UnitPriceInclTax = CalculatePrice(unitPrice, taxrates.taxRate, false); productPrice.UnitPriceExclTax = CalculatePrice(unitPrice, taxrates.taxRate, false); productPrice.SubTotalInclTax = CalculatePrice(subTotal, taxrates.taxRate, false); productPrice.SubTotalExclTax = CalculatePrice(subTotal, taxrates.taxRate, false); productPrice.discountAmountInclTax = CalculatePrice(discountAmount, taxrates.taxRate, false); productPrice.discountAmountExclTax = CalculatePrice(discountAmount, taxrates.taxRate, false); } } else { if (taxrates.isTaxable) { productPrice.UnitPriceWihoutDiscInclTax = CalculatePrice(unitPricewithoutDisc, taxrates.taxRate, true); productPrice.UnitPriceWihoutDiscExclTax = unitPricewithoutDisc; productPrice.UnitPriceInclTax = CalculatePrice(unitPrice, taxrates.taxRate, true); productPrice.UnitPriceExclTax = unitPrice; productPrice.SubTotalInclTax = CalculatePrice(subTotal, taxrates.taxRate, true); productPrice.SubTotalExclTax = subTotal; productPrice.discountAmountInclTax = CalculatePrice(discountAmount, taxrates.taxRate, true); productPrice.discountAmountExclTax = discountAmount; } else { productPrice.UnitPriceWihoutDiscInclTax = unitPricewithoutDisc; productPrice.UnitPriceWihoutDiscExclTax = unitPricewithoutDisc; productPrice.UnitPriceInclTax = unitPrice; productPrice.UnitPriceExclTax = unitPrice; productPrice.SubTotalInclTax = subTotal; productPrice.SubTotalExclTax = subTotal; productPrice.discountAmountInclTax = discountAmount; productPrice.discountAmountExclTax = discountAmount; } } if (!taxrates.isTaxable) { //we return 0% tax rate in case a request is not taxable taxrates.taxRate = decimal.Zero; } return(productPrice); }