Beispiel #1
0
        /// <summary>
        /// Metodo de calculo de entrega do PAC muito interessante por sinal
        /// </summary>
        /// <param name="pac">Objeto de tipo PAC </param>
        /// <returns></returns>
        public List <Tuple <string, double, string, DateTime> > GetValorFromPAC(PropEnvioPAC pac)
        {
            //Acessa a WS dos correios
            CalcPrecoPrazoWSSoapClient Apac = new CalcPrecoPrazoWSSoapClient(CalcPrecoPrazoWSSoapClient.EndpointConfiguration.CalcPrecoPrazoWSSoap);


            var resultado = Apac.CalcPrecoPrazoAsync(
                pac.nCdEmpresa,
                pac.sDsSenha,
                pac.nCdServico,
                pac.sCepOrigem,
                pac.sCepDestino,
                pac.nVlPeso,
                pac.nCdFormato,
                pac.nVlComprimento,
                pac.nVlAltura,
                pac.nVlLargura,
                pac.nVlDiametro,
                pac.sCdMaoPropria,
                pac.nVlValorDeclarado,
                pac.sCdAvisoRecebimento);

            List <Tuple <string, double, string, DateTime> > result = new List <Tuple <string, double, string, DateTime> >();

            foreach (cServico res in resultado.Result.Servicos)
            {
                string serv = res.Codigo == 1 ? "PAC" : "Outros";

                //Resultado de serviço entrega
                Tuple <string, double, string, DateTime> retorno = new Tuple <string, double, string, DateTime>(
                    serv,
                    Convert.ToDouble(res.Valor),
                    res.PrazoEntrega,
                    Convert.ToDateTime(res.DataMaxEntrega));


                result.Add(retorno);
            }


            return(result);
        }
Beispiel #2
0
        public async Task <Frete> GetFreteAsyncc(Produto produto)
        {
            //41106 pac
            //40010
            CalcPrecoPrazoWSSoapClient correios = new CalcPrecoPrazoWSSoapClient(EndpointConfiguration.CalcPrecoPrazoWSSoap);

            Correios.cResultado resultado = await correios.CalcPrecoPrazoAsync(String.Empty, String.Empty, produto.nCdServico, produto.sCepOrigem, produto.sCepDestino,
                                                                               produto.nVlPeso, produto.nCdFormato, produto.nVlComprimento, produto.nVlAltura, produto.nVlLargura, produto.nVlDiametro,
                                                                               produto.sCdMaoPropria, produto.nVlValorDeclarado, produto.sCdAvisoRecebimento);

            Correios.cServico servico = resultado.Servicos.FirstOrDefault();

            Frete frete = null;

            if (servico != null && !String.IsNullOrEmpty(servico.Erro))
            {
                if (String.IsNullOrEmpty(servico.Erro) || servico.Erro.Equals("0"))
                {
                    frete = new Frete
                    {
                        prazoEntregaDias = int.Parse(servico.PrazoEntrega),
                        valor            = decimal.Parse(servico.Valor),
                        codeErro         = servico.Erro,
                        msgErro          = servico.MsgErro
                    };
                }
                else
                {
                    frete = new Frete
                    {
                        codeErro = servico.Erro,
                        msgErro  = servico.MsgErro
                    };
                }
            }


            return(frete);
        }
Beispiel #3
0
        public async Task <IEnumerable <CorreioWebServiceModel> > CalcularFrete(string cepDestino, int quantidadePecas, double valorTotalPedido)
        {
            try
            {
                var pacotes = new List <InformacoesPacoteCorreiosModel>();

                var mediaPrecoDosProdutos = valorTotalPedido / quantidadePecas;

                while (quantidadePecas > 0)
                {
                    var pacote = new InformacoesPacoteCorreiosModel();

                    if (quantidadePecas > 55)
                    {
                        pacote.SetPackageData(new CaixaCorreioModel(35, 25, 30, 0.2), 55);

                        quantidadePecas -= 55;
                    }
                    else if (quantidadePecas > 30 && quantidadePecas <= 55)
                    {
                        pacote.SetPackageData(new CaixaCorreioModel(35, 25, 30, 0.2), quantidadePecas);

                        quantidadePecas -= quantidadePecas;
                    }
                    else if (quantidadePecas <= 30)
                    {
                        pacote.SetPackageData(new CaixaCorreioModel(30, 20, 24, 0.170), quantidadePecas);

                        quantidadePecas -= quantidadePecas;
                    }

                    pacotes.Add(pacote);
                }


                //Dados da Empresa se tiver contrato
                const string nCdEmpresa    = "";
                const string sDsSenha      = "";
                const string sCepOrigem    = "20270004";
                const int    nCdFormato    = 1; //FORMATO DE CAIXA
                const string sCdMaoProrpia = "N";

                var sCepDestino = cepDestino;


                var resultList = new List <CorreioWebServiceModel>();

                //loop
                foreach (var pacote in pacotes)
                {
                    var pesoEnvioCorreio = ((0.02 * pacote.QuantidadeArmacoes) + pacote.Caixa.Peso).ToString();
                    //PESO TOTAL EM KG
                    var nVlPeso = pesoEnvioCorreio;


                    //PARA PAC PREENCHER OS CAMPOS
                    decimal nVlComprimento = pacote.Caixa.Comprimento;
                    decimal nVlAltura      = pacote.Caixa.Altura;
                    decimal nVlLargura     = pacote.Caixa.Largura;
                    decimal nVlDiametro    = 0;


                    var     valorPacote       = mediaPrecoDosProdutos * pacote.QuantidadeArmacoes;
                    decimal nVlValorDeclarado = Convert.ToInt32(Math.Round(valorPacote));

                    var sCdAvisoRecebimento = "N";

                    var servicesList = new List <string>
                    {
                        "40010",
                        "41106"
                    };


                    foreach (var service in servicesList)
                    {
                        var nCdServico = service;



                        var nomeServico = service == "40010" ? "Sedex" : "Pac";

                        var wsCorreios =
                            new CalcPrecoPrazoWSSoapClient(CalcPrecoPrazoWSSoapClient.EndpointConfiguration.CalcPrecoPrazoWSSoap);

                        var retornoCorreios = await wsCorreios.CalcPrecoPrazoAsync(nCdEmpresa, sDsSenha, nCdServico, sCepOrigem, sCepDestino, nVlPeso, nCdFormato, nVlComprimento, nVlAltura, nVlLargura, nVlDiametro, sCdMaoProrpia, nVlValorDeclarado, sCdAvisoRecebimento);

                        var correiosWsModel = new CorreioWebServiceModel();

                        if (valorTotalPedido > 1500 && nomeServico == "Pac")
                        {
                            correiosWsModel.SetWebServiceData("Proprio", retornoCorreios.Servicos[0].PrazoEntrega, "0,00");
                        }
                        else
                        {
                            correiosWsModel.SetWebServiceData(nomeServico, retornoCorreios.Servicos[0].PrazoEntrega, retornoCorreios.Servicos[0].Valor);
                        }

                        if (correiosWsModel.PrazoEntrega != "0")
                        {
                            resultList.Add(correiosWsModel);
                        }
                    }
                }

                if (resultList.Count == 1 && valorTotalPedido > 1500)
                {
                    resultList[0].SetValor("0,00");
                }


                var resultGrouped = from empresa in resultList.GroupBy(x => x.Servico)
                                    select new CorreioWebServiceModel(empresa.First().Servico, empresa.First().PrazoEntrega,
                                                                      empresa.Sum(a => double.Parse(a.Valor)).ToString("N2"));

                return(resultGrouped);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Beispiel #4
0
        public static async Task <string[]> GetPriceAndTimePostalServiceAsync(string cep, double weight, double volume)
        {
            double squareSideLength = Math.Pow(volume, 1.0 / 3.0);
            double sideUsed         = 0.0;
            double weightUsed       = 0.0;
            double weightu          = weight / 1000;

            if (weightu < 1.0)
            {
                weightUsed = 1.0;
            }
            else if (weightu > 29)
            {
                weightUsed = 29.0;
            }
            else
            {
                weightUsed = weightu;
            }

            if (squareSideLength > 66.0)
            {
                sideUsed = 66.0;
            }
            else if (squareSideLength < 17.0)
            {
                sideUsed = 17.0;
            }
            else
            {
                sideUsed = squareSideLength;
            }

            string nCdEmpresa = string.Empty;
            string sDsSenha   = string.Empty;

            string nCdServico = "40010";             // Sedex

            string sCepOrigem  = "30130010";         // CEP Praça Sete 30130010
            string sCepDestino = cep;

            string nVlPeso    = weightUsed.ToString("F0"); // peso em kg da encomenda / peso máximo de 30kg
            int    nCdFormato = 1;                         // formato caixa

            decimal nVlComprimento = (decimal)sideUsed;    // medidas em cm entre 16cm e 105cm e a soma das dimensões não deve ultrapassar 200cm
            decimal nVlAltura      = (decimal)sideUsed;
            decimal nVlLargura     = (decimal)sideUsed;
            decimal nVlDiamentro   = 0;

            string sCdMaoPropria = "N";

            decimal nVlValorDeclarado = 0;

            string sCdAvisoRecebimento = "N";

            System.ServiceModel.Channels.Binding binding = new BasicHttpBinding();
            EndpointAddress remoteAddress = new EndpointAddress("http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx");

            CalcPrecoPrazoWSSoapClient wsCorreios2 = new CalcPrecoPrazoWSSoapClient(binding, remoteAddress);

            cResultado retornoCorreios = await wsCorreios2.CalcPrecoPrazoAsync(nCdEmpresa, sDsSenha, nCdServico, sCepOrigem, sCepDestino, nVlPeso, nCdFormato,
                                                                               nVlComprimento, nVlAltura, nVlLargura, nVlDiamentro, sCdMaoPropria, nVlValorDeclarado, sCdAvisoRecebimento);

            string[] result = new string[2];
            result[1] = retornoCorreios.Servicos.FirstOrDefault().PrazoEntrega;
            result[0] = retornoCorreios.Servicos.FirstOrDefault().Valor;

            return(result);
        }