/// <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);
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 4
0
        /// <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));
        }
Esempio n. 5
0
        /// <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);
 }