public ActionResult Configure(CorreiosShippingModel model)
        {
            if (!ModelState.IsValid)
            {
                return(Configure());
            }

            //save settings
            _correiosSettings.Url                     = model.Url;
            _correiosSettings.CodigoEmpresa           = model.CodigoEmpresa;
            _correiosSettings.Senha                   = model.Senha;
            _correiosSettings.CustoAdicionalEnvio     = model.CustoAdicionalEnvio;
            _correiosSettings.IncluirAvisoRecebimento = model.IncluirAvisoRecebimento;
            _correiosSettings.IncluirMaoPropria       = model.IncluirMaoPropria;
            _correiosSettings.IncluirValorDeclarado   = model.IncluirValorDeclarado;
            _correiosSettings.DiasUteisAdicionais     = model.DiasUteisAdicionais;
            _correiosSettings.CEPRestito              = model.CEPRestito;
            _correiosSettings.CategoriasRetritras     = model.CategoriasRetritras;
            // Save selected services
            var carrierServicesOfferedDomestic       = new StringBuilder();
            int carrierServicesDomesticSelectedCount = 0;

            if (model.CheckedCarrierServices != null)
            {
                foreach (var cs in model.CheckedCarrierServices)
                {
                    carrierServicesDomesticSelectedCount++;
                    string serviceId = CorreiosServices.GetServiceId(cs);
                    if (!String.IsNullOrEmpty(serviceId))
                    {
                        carrierServicesOfferedDomestic.AppendFormat("{0},", serviceId);
                    }
                }
            }

            if (carrierServicesDomesticSelectedCount == 0)
            {
                _correiosSettings.CarrierServicesOffered = "41106,40010,40215";
            }
            else
            {
                _correiosSettings.CarrierServicesOffered = carrierServicesOfferedDomestic.ToString().TrimEnd(',');
            }


            _settingService.SaveSetting(_correiosSettings);

            ViewData["sucesso"] = this._localizationService.GetResource("Admin.Configuration.Updated");

            return(Configure());
        }
        public ActionResult Configure()
        {
            var model = new CorreiosShippingModel();

            model.Url                     = _correiosSettings.Url;
            model.CodigoEmpresa           = _correiosSettings.CodigoEmpresa;
            model.Senha                   = _correiosSettings.Senha;
            model.CustoAdicionalEnvio     = _correiosSettings.CustoAdicionalEnvio;
            model.IncluirAvisoRecebimento = _correiosSettings.IncluirAvisoRecebimento;
            model.IncluirMaoPropria       = _correiosSettings.IncluirMaoPropria;
            model.IncluirValorDeclarado   = _correiosSettings.IncluirValorDeclarado;
            model.DiasUteisAdicionais     = _correiosSettings.DiasUteisAdicionais;
            model.CEPRestito              = _correiosSettings.CEPRestito;
            model.CategoriasRetritras     = _correiosSettings.CategoriasRetritras;

            var services = new CorreiosServices();
            // Load service names
            string carrierServicesOfferedDomestic = _correiosSettings.CarrierServicesOffered;

            foreach (string service in services.Services)
            {
                model.AvailableCarrierServices.Add(service);
            }

            if (!String.IsNullOrEmpty(carrierServicesOfferedDomestic))
            {
                foreach (string service in services.Services)
                {
                    string serviceId = CorreiosServices.GetServiceId(service);
                    if (!String.IsNullOrEmpty(serviceId) && !String.IsNullOrEmpty(carrierServicesOfferedDomestic))
                    {
                        if (carrierServicesOfferedDomestic.Contains(serviceId))
                        {
                            model.CarrierServicesOffered.Add(service);
                        }
                    }
                }
            }


            return(View("~/Plugins/Shipping.Correios/Views/ShippingCorreios/Configure.cshtml", model));
        }
        /// <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);
            }
        }