/// <summary> /// Attempts to modify the product pricing with tax. /// </summary> /// <param name="value"> /// The value. /// </param> /// <returns> /// The <see cref="Attempt"/>. /// </returns> public override Attempt<IProductVariantDataModifierData> PerformTask(IProductVariantDataModifierData value) { var taxationContent = MerchelloContext.Gateways.Taxation; if (!taxationContent.ProductPricingEnabled || !value.Taxable) return Attempt<IProductVariantDataModifierData>.Succeed(value); var result = taxationContent.CalculateTaxesForProduct(value); value.AlterProduct(result); return Attempt<IProductVariantDataModifierData>.Succeed(value); }
/// <summary> /// Calculates taxes for a product. /// </summary> /// <param name="product"> /// The <see cref="IProductVariantDataModifierData"/>. /// </param> /// <returns> /// The <see cref="ITaxCalculationResult"/>. /// </returns> public virtual IProductTaxCalculationResult CalculateTaxForProduct(IProductVariantDataModifierData product) { var baseTaxRate = TaxMethod.PercentageTaxRate; var taxRate = baseTaxRate > 1 ? baseTaxRate / 100M : baseTaxRate; var priceCalc = product.Price * taxRate; var salePriceCalc = product.SalePrice * taxRate; return(new ProductTaxCalculationResult(TaxMethod.Name, product.Price, priceCalc, product.SalePrice, salePriceCalc, baseTaxRate)); }
/// <summary> /// Calculates taxes for a product. /// </summary> /// <param name="product"> /// The <see cref="IProductVariantDataModifierData"/>. /// </param> /// <returns> /// The <see cref="ITaxCalculationResult"/>. /// </returns> public virtual IProductTaxCalculationResult CalculateTaxForProduct(IProductVariantDataModifierData product) { var baseTaxRate = TaxMethod.PercentageTaxRate; var taxRate = baseTaxRate > 1 ? baseTaxRate / 100M : baseTaxRate; var priceCalc = product.Price * taxRate; var salePriceCalc = product.SalePrice * taxRate; return new ProductTaxCalculationResult(TaxMethod.Name, product.Price, priceCalc, product.SalePrice, salePriceCalc, baseTaxRate); }
/// <summary> /// Calculates taxes based on a product. /// </summary> /// <param name="product"> /// The product. /// </param> /// <returns> /// The <see cref="ITaxCalculationResult"/>. /// </returns> public IProductTaxCalculationResult CalculateTaxesForProduct(IProductVariantDataModifierData product) { var empty = ProductTaxCalculationResult.GetEmptyResult(); if (!ProductPricingEnabled) { return(empty); } return(this.ProductPricingTaxMethod == null ? empty : this.ProductPricingTaxMethod.CalculateTaxForProduct(product)); }
/// <summary> /// Attempts to modify the product pricing with tax. /// </summary> /// <param name="value"> /// The value. /// </param> /// <returns> /// The <see cref="Attempt"/>. /// </returns> public override Attempt <IProductVariantDataModifierData> PerformTask(IProductVariantDataModifierData value) { var taxationContent = MerchelloContext.Gateways.Taxation; if (!taxationContent.ProductPricingEnabled || !value.Taxable) { return(Attempt <IProductVariantDataModifierData> .Succeed(value)); } var result = taxationContent.CalculateTaxesForProduct(value); value.AlterProduct(result); return(Attempt <IProductVariantDataModifierData> .Succeed(value)); }
/// <summary> /// The alters the product with taxation results. /// </summary> /// <param name="value"> /// The value. /// </param> /// <param name="result"> /// The result. /// </param> public static void AlterProduct(this IProductVariantDataModifierData value, IProductTaxCalculationResult result) { value.ModifyData("Price", value.Price + result.PriceResult.TaxAmount, result.PriceResult.ExtendedData); value.ModifyData("SalePrice", value.SalePrice + result.SalePriceResult.TaxAmount, result.SalePriceResult.ExtendedData); }