public async Task <ActionResult> GetTotalsJson(string quoteRequestId, string quoteItemId, TierPriceFormModel tierPrice)
        {
            QuoteRequestTotals totals = null;

            var quoteRequest = await GetCustomerQuoteRequestByIdAsync(quoteRequestId);

            if (quoteRequest != null)
            {
                var quoteItem = quoteRequest.Items.FirstOrDefault(i => i.Id == quoteItemId);
                if (quoteItem != null)
                {
                    quoteItem.SelectedTierPrice = new TierPrice
                    {
                        Price    = new Money(tierPrice.Price, WorkContext.CurrentCurrency),
                        Quantity = quoteItem.SelectedTierPrice.Quantity
                    };
                }

                var quoteResult = await _quoteApi.QuoteModuleCalculateTotalsAsync(quoteRequest.ToServiceModel());

                totals = quoteResult.Totals.ToWebModel(quoteRequest.Currency);
            }

            return(Json(totals, JsonRequestBehavior.AllowGet));
        }
        public async Task <QuoteRequestTotals> CalculateTotalsAsync(QuoteRequest quote)
        {
            var retVal        = new QuoteRequestTotals();
            var cartFromQuote = quote.ToCartModel(AbstractTypeFactory <ShoppingCart> .TryCreateInstance());

            //Calculate shipment total
            //first try to get manual amount
            retVal.ShippingTotal = quote.ManualShippingTotal;
            if (retVal.ShippingTotal == 0 && quote.ShipmentMethod != null)
            {
                //calculate total by using shipment gateways
                var evalContext = new ShippingEvaluationContext(cartFromQuote);

                var searchCriteria = AbstractTypeFactory <ShippingMethodsSearchCriteria> .TryCreateInstance();

                searchCriteria.StoreId  = quote.StoreId;
                searchCriteria.IsActive = true;
                searchCriteria.Codes    = new[] { quote.ShipmentMethod.ShipmentMethodCode };
                var storeShippingMethods = await _shippingMethodsSearchService.SearchShippingMethodsAsync(searchCriteria);

                var rate = storeShippingMethods.Results
                           .SelectMany(x => x.CalculateRates(evalContext))
                           .FirstOrDefault(x => (quote.ShipmentMethod.OptionName == null) || quote.ShipmentMethod.OptionName == x.OptionName);

                retVal.ShippingTotal = rate != null ? rate.Rate : 0m;
            }

            //Calculate taxes
            var taxSearchCriteria = AbstractTypeFactory <TaxProviderSearchCriteria> .TryCreateInstance();

            taxSearchCriteria.StoreIds = new[] { quote.StoreId };
            taxSearchCriteria.Sort     = nameof(TaxProvider.Priority);
            var taxProvider = (await _taxProviderSearchService.SearchTaxProvidersAsync(taxSearchCriteria)).Results.FirstOrDefault();

            if (taxProvider != null)
            {
                var taxEvalContext = quote.ToTaxEvalContext(AbstractTypeFactory <TaxEvaluationContext> .TryCreateInstance());
                retVal.TaxTotal = taxProvider.CalculateRates(taxEvalContext).Select(x => x.Rate).DefaultIfEmpty(0).Sum(x => x);
            }

            //Calculate subtotal
            var items = quote.Items.Where(x => x.SelectedTierPrice != null);

            if (quote.Items != null)
            {
                retVal.OriginalSubTotalExlTax = items.Sum(x => x.SalePrice * x.SelectedTierPrice.Quantity);
                retVal.SubTotalExlTax         = items.Sum(x => x.SelectedTierPrice.Price * x.SelectedTierPrice.Quantity);
                if (quote.ManualSubTotal > 0)
                {
                    retVal.DiscountTotal  = retVal.SubTotalExlTax - quote.ManualSubTotal;
                    retVal.SubTotalExlTax = quote.ManualSubTotal;
                }
                else if (quote.ManualRelDiscountAmount > 0)
                {
                    retVal.DiscountTotal = retVal.SubTotalExlTax * quote.ManualRelDiscountAmount * 0.01m;
                }
            }

            return(retVal);
        }
Exemplo n.º 3
0
        public QuoteRequestTotals CalculateTotals(QuoteRequest quote)
        {
            var retVal        = new QuoteRequestTotals();
            var cartFromQuote = quote.ToCartModel();
            var store         = _storeService.GetById(quote.StoreId);

            if (store != null)
            {
                //Calculate shipment total
                //firts try to get manual amount
                retVal.ShippingTotal = quote.ManualShippingTotal;
                if (retVal.ShippingTotal == 0 && quote.ShipmentMethod != null)
                {
                    //calculate total by using shipment gateways
                    var evalContext = new ShippingEvaluationContext(cartFromQuote);

                    var rate = store.ShippingMethods.Where(x => x.IsActive && x.Code == quote.ShipmentMethod.ShipmentMethodCode)
                               .SelectMany(x => x.CalculateRates(evalContext))
                               .Where(x => quote.ShipmentMethod.OptionName != null ? quote.ShipmentMethod.OptionName == x.OptionName : true)
                               .FirstOrDefault();
                    retVal.ShippingTotal = rate != null ? rate.Rate : 0m;
                }
                //Calculate taxes
                var taxProvider = store.TaxProviders.Where(x => x.IsActive).OrderBy(x => x.Priority).FirstOrDefault();
                if (taxProvider != null)
                {
                    var taxRequest     = quote.ToTaxRequest();
                    var taxEvalContext = new TaxEvaluationContext(taxRequest);
                    retVal.TaxTotal = taxProvider.CalculateRates(taxEvalContext).Select(x => x.Rate).DefaultIfEmpty(0).Sum(x => x);
                }
            }

            //Calculate subtotal
            var items = quote.Items.Where(x => x.SelectedTierPrice != null);

            if (quote.Items != null)
            {
                retVal.OriginalSubTotalExlTax = items.Sum(x => x.SalePrice * x.SelectedTierPrice.Quantity);
                retVal.SubTotalExlTax         = items.Sum(x => x.SelectedTierPrice.Price * x.SelectedTierPrice.Quantity);
                if (quote.ManualSubTotal > 0)
                {
                    retVal.DiscountTotal  = retVal.SubTotalExlTax - quote.ManualSubTotal;
                    retVal.SubTotalExlTax = quote.ManualSubTotal;
                }
                else if (quote.ManualRelDiscountAmount > 0)
                {
                    retVal.DiscountTotal = retVal.SubTotalExlTax * quote.ManualRelDiscountAmount * 0.01m;
                }
            }

            return(retVal);
        }
Exemplo n.º 4
0
        public virtual QuoteRequestTotals ToQuoteTotals(quoteDto.QuoteRequestTotals totalsDto, Currency currency)
        {
            var result = new QuoteRequestTotals(currency);

            result.AdjustmentQuoteExlTax  = new Money(totalsDto.AdjustmentQuoteExlTax ?? 0, currency);
            result.DiscountTotal          = new Money(totalsDto.DiscountTotal ?? 0, currency);
            result.GrandTotalExlTax       = new Money(totalsDto.GrandTotalExlTax ?? 0, currency);
            result.GrandTotalInclTax      = new Money(totalsDto.GrandTotalInclTax ?? 0, currency);
            result.OriginalSubTotalExlTax = new Money(totalsDto.OriginalSubTotalExlTax ?? 0, currency);
            result.ShippingTotal          = new Money(totalsDto.ShippingTotal ?? 0, currency);
            result.SubTotalExlTax         = new Money(totalsDto.SubTotalExlTax ?? 0, currency);
            result.TaxTotal = new Money(totalsDto.TaxTotal ?? 0, currency);
            return(result);
        }
Exemplo n.º 5
0
        public static QuoteRequestTotals ToShopifyModel(this Storefront.Model.Quote.QuoteRequestTotals storefrontModel)
        {
            var shopifyModel = new QuoteRequestTotals();

            shopifyModel.AdjustmentQuoteExlTax  = storefrontModel.AdjustmentQuoteExlTax.Amount * 100;
            shopifyModel.DiscountTotal          = storefrontModel.DiscountTotal.Amount * 100;
            shopifyModel.GrandTotalExlTax       = storefrontModel.GrandTotalExlTax.Amount * 100;
            shopifyModel.GrandTotalInclTax      = storefrontModel.GrandTotalInclTax.Amount * 100;
            shopifyModel.OriginalSubTotalExlTax = storefrontModel.OriginalSubTotalExlTax.Amount * 100;
            shopifyModel.ShippingTotal          = storefrontModel.ShippingTotal.Amount * 100;
            shopifyModel.SubTotalExlTax         = storefrontModel.SubTotalExlTax.Amount * 100;
            shopifyModel.TaxTotal = storefrontModel.TaxTotal.Amount * 100;

            return(shopifyModel);
        }
Exemplo n.º 6
0
        public virtual QuoteRequestTotals ToLiquidRequestTotal(Storefront.Model.Quote.QuoteRequestTotals requestTotal)
        {
            var result = new QuoteRequestTotals();

            result.AdjustmentQuoteExlTax  = requestTotal.AdjustmentQuoteExlTax.Amount * 100;
            result.DiscountTotal          = requestTotal.DiscountTotal.Amount * 100;
            result.GrandTotalExlTax       = requestTotal.GrandTotalExlTax.Amount * 100;
            result.GrandTotalInclTax      = requestTotal.GrandTotalInclTax.Amount * 100;
            result.OriginalSubTotalExlTax = requestTotal.OriginalSubTotalExlTax.Amount * 100;
            result.ShippingTotal          = requestTotal.ShippingTotal.Amount * 100;
            result.SubTotalExlTax         = requestTotal.SubTotalExlTax.Amount * 100;
            result.TaxTotal = requestTotal.TaxTotal.Amount * 100;

            return(result);
        }
        public static QuoteRequestTotals ToWebModel(this VirtoCommerceQuoteModuleWebModelQuoteRequestTotals serviceModel, Currency currency)
        {
            var webModel = new QuoteRequestTotals(currency);

            webModel.AdjustmentQuoteExlTax  = new Money(serviceModel.AdjustmentQuoteExlTax ?? 0, currency);
            webModel.DiscountTotal          = new Money(serviceModel.DiscountTotal ?? 0, currency);
            webModel.GrandTotalExlTax       = new Money(serviceModel.GrandTotalExlTax ?? 0, currency);
            webModel.GrandTotalInclTax      = new Money(serviceModel.GrandTotalInclTax ?? 0, currency);
            webModel.OriginalSubTotalExlTax = new Money(serviceModel.OriginalSubTotalExlTax ?? 0, currency);
            webModel.ShippingTotal          = new Money(serviceModel.ShippingTotal ?? 0, currency);
            webModel.SubTotalExlTax         = new Money(serviceModel.SubTotalExlTax ?? 0, currency);
            webModel.TaxTotal = new Money(serviceModel.TaxTotal ?? 0, currency);

            return(webModel);
        }
        public static QuoteRequestTotals ToWebModel(this QuoteModule.Client.Model.QuoteRequestTotals serviceModel, Currency currency)
        {
            var webModel = new QuoteRequestTotals(currency)
            {
                AdjustmentQuoteExlTax  = new Money(serviceModel.AdjustmentQuoteExlTax ?? 0, currency),
                DiscountTotal          = new Money(serviceModel.DiscountTotal ?? 0, currency),
                GrandTotalExlTax       = new Money(serviceModel.GrandTotalExlTax ?? 0, currency),
                GrandTotalInclTax      = new Money(serviceModel.GrandTotalInclTax ?? 0, currency),
                OriginalSubTotalExlTax = new Money(serviceModel.OriginalSubTotalExlTax ?? 0, currency),
                ShippingTotal          = new Money(serviceModel.ShippingTotal ?? 0, currency),
                SubTotalExlTax         = new Money(serviceModel.SubTotalExlTax ?? 0, currency),
                TaxTotal = new Money(serviceModel.TaxTotal ?? 0, currency)
            };

            return(webModel);
        }
        public static QuoteModule.Client.Model.QuoteRequestTotals ToServiceModel(this QuoteRequestTotals webModel)
        {
            var serviceModel = new QuoteModule.Client.Model.QuoteRequestTotals
            {
                AdjustmentQuoteExlTax  = (double)webModel.AdjustmentQuoteExlTax.Amount,
                DiscountTotal          = (double)webModel.DiscountTotal.Amount,
                GrandTotalExlTax       = (double)webModel.GrandTotalExlTax.Amount,
                GrandTotalInclTax      = (double)webModel.GrandTotalInclTax.Amount,
                OriginalSubTotalExlTax = (double)webModel.OriginalSubTotalExlTax.Amount,
                ShippingTotal          = (double)webModel.ShippingTotal.Amount,
                SubTotalExlTax         = (double)webModel.SubTotalExlTax.Amount,
                TaxTotal = (double)webModel.TaxTotal.Amount
            };

            return(serviceModel);
        }
Exemplo n.º 10
0
        public virtual quoteDto.QuoteRequestTotals ToQuoteTotalsDto(QuoteRequestTotals totals)
        {
            var result = new quoteDto.QuoteRequestTotals
            {
                AdjustmentQuoteExlTax  = (double)totals.AdjustmentQuoteExlTax.Amount,
                DiscountTotal          = (double)totals.DiscountTotal.Amount,
                GrandTotalExlTax       = (double)totals.GrandTotalExlTax.Amount,
                GrandTotalInclTax      = (double)totals.GrandTotalInclTax.Amount,
                OriginalSubTotalExlTax = (double)totals.OriginalSubTotalExlTax.Amount,
                ShippingTotal          = (double)totals.ShippingTotal.Amount,
                SubTotalExlTax         = (double)totals.SubTotalExlTax.Amount,
                TaxTotal = (double)totals.TaxTotal.Amount
            };

            return(result);
        }
Exemplo n.º 11
0
 public static quoteDto.QuoteRequestTotals ToQuoteTotalsDto(this QuoteRequestTotals totals)
 {
     return(QuoteConverterInstance.ToQuoteTotalsDto(totals));
 }
        public static VirtoCommerceQuoteModuleWebModelQuoteRequestTotals ToServiceModel(this QuoteRequestTotals webModel)
        {
            var serviceModel = new VirtoCommerceQuoteModuleWebModelQuoteRequestTotals();

            serviceModel.AdjustmentQuoteExlTax  = (double)webModel.AdjustmentQuoteExlTax.Amount;
            serviceModel.DiscountTotal          = (double)webModel.DiscountTotal.Amount;
            serviceModel.GrandTotalExlTax       = (double)webModel.GrandTotalExlTax.Amount;
            serviceModel.GrandTotalInclTax      = (double)webModel.GrandTotalInclTax.Amount;
            serviceModel.OriginalSubTotalExlTax = (double)webModel.OriginalSubTotalExlTax.Amount;
            serviceModel.ShippingTotal          = (double)webModel.ShippingTotal.Amount;
            serviceModel.SubTotalExlTax         = (double)webModel.SubTotalExlTax.Amount;
            serviceModel.TaxTotal = (double)webModel.TaxTotal.Amount;

            return(serviceModel);
        }