public void Can_get_shoppingCartItem_additional_shippingCharge()
        {
            var product1 = new Product
            {
                Weight = 1.5M,
                Height = 2.5M,
                Length = 3.5M,
                Width  = 4.5M,
                AdditionalShippingCharge = 5.5M,
                IsShipEnabled            = true
            };

            _productService.InsertProduct(product1);

            var product2 = new Product
            {
                Weight = 11.5M,
                Height = 12.5M,
                Length = 13.5M,
                Width  = 14.5M,
                AdditionalShippingCharge = 6.5M,
                IsShipEnabled            = true
            };

            _productService.InsertProduct(product2);

            var sci1 = new ShoppingCartItem {
                AttributesXml = string.Empty, Quantity = 3, ProductId = product1.Id
            };
            var sci2 = new ShoppingCartItem {
                AttributesXml = string.Empty, Quantity = 4, ProductId = product2.Id
            };

            //sci3 is not shippable

            var product3 = new Product
            {
                Weight = 11.5M,
                Height = 12.5M,
                Length = 13.5M,
                Width  = 14.5M,
                AdditionalShippingCharge = 7.5M,
                IsShipEnabled            = false
            };

            _productService.InsertProduct(product3);

            var sci3 = new ShoppingCartItem {
                AttributesXml = string.Empty, Quantity = 5, ProductId = product3.Id
            };

            var cart = new List <ShoppingCartItem> {
                sci1, sci2, sci3
            };

            _orderTotalCalcService.GetShoppingCartAdditionalShippingCharge(cart).Should().Be(42.5M);
        }
예제 #2
0
        public void CanGetShoppingCartItemAdditionalShippingCharge()
        {
            var product = _productService.GetProductBySku("FR_451_RB");

            product.AdditionalShippingCharge = 21.25M;
            product.IsFreeShipping           = false;
            _productService.UpdateProduct(product);
            var additionalShippingCharge = _orderTotalCalcService.GetShoppingCartAdditionalShippingCharge(ShoppingCart);

            product.AdditionalShippingCharge = 0M;
            product.IsFreeShipping           = true;
            _productService.UpdateProduct(product);
            additionalShippingCharge.Should().Be(42.5M);
        }
        /// <summary>
        ///  Gets available shipping options
        /// </summary>
        /// <param name="getShippingOptionRequest">A request for getting shipping options</param>
        /// <returns>Represents a response of getting shipping rate options</returns>
        public GetShippingOptionResponse GetShippingOptions(GetShippingOptionRequest getShippingOptionRequest)
        {
            if (getShippingOptionRequest == null)
            {
                throw new ArgumentNullException("getShippingOptionRequest");
            }

            var response = new GetShippingOptionResponse();

            if (getShippingOptionRequest.Items == null)
            {
                response.AddError("Sem items para enviar");
                return(response);
            }

            if (getShippingOptionRequest.ShippingAddress == null)
            {
                response.AddError("Endereço de envio em branco");
                return(response);
            }

            if (getShippingOptionRequest.ShippingAddress.ZipPostalCode == null)
            {
                response.AddError("CEP de envio em branco");
                return(response);
            }

            var result = ProcessShipping(getShippingOptionRequest, response);

            if (result == null)
            {
                response.AddError("Não há serviços disponíveis no momento");
                return(response);
            }
            else
            {
                List <string> group = new List <string>();

                foreach (cServico servico in result.Servicos.OrderBy(s => s.Valor))
                {
                    Debug.WriteLine("Plugin.Shipping.Correios: Retorno WS");
                    Debug.WriteLine("Codigo: " + servico.Codigo);
                    Debug.WriteLine("Valor: " + servico.Valor);
                    Debug.WriteLine("Valor Mão Própria: " + servico.ValorMaoPropria);
                    Debug.WriteLine("Valor Aviso Recebimento: " + servico.ValorAvisoRecebimento);
                    Debug.WriteLine("Valor Declarado: " + servico.ValorValorDeclarado);
                    Debug.WriteLine("Prazo Entrega: " + servico.PrazoEntrega);
                    Debug.WriteLine("Entrega Domiciliar: " + servico.EntregaDomiciliar);
                    Debug.WriteLine("Entrega Sabado: " + servico.EntregaSabado);
                    Debug.WriteLine("Erro: " + servico.Erro);
                    Debug.WriteLine("Msg Erro: " + servico.MsgErro);

                    if (servico.Erro == "0")
                    {
                        string name = CorreiosServices.GetServicePublicNameById(servico.Codigo.ToString());

                        if (!group.Contains(name))
                        {
                            ShippingOption option = new ShippingOption();
                            option.Name        = name;
                            option.Description = "Prazo médio de entrega " + (servico.PrazoEntrega + _correiosSettings.DiasUteisAdicionais) + " dias úteis";
                            option.Rate        = decimal.Parse(servico.Valor, CultureInfo.GetCultureInfo("pt-BR")) + _orderTotalCalculationService.GetShoppingCartAdditionalShippingCharge(getShippingOptionRequest.Items) + _correiosSettings.CustoAdicionalEnvio;
                            response.ShippingOptions.Add(option);

                            group.Add(name);
                        }
                    }
                    else
                    {
                        _logger.Error("Plugin.Shipping.Correios: erro ao calcular frete: (" + CorreiosServices.GetServiceName(servico.Codigo.ToString()) + ")( " + servico.Erro + ") " + servico.MsgErro);
                    }
                }

                return(response);
            }
        }