Exemplo n.º 1
0
 public HomeController(ILogger <HomeController> logger)
 {
     _logger = logger;
     estabelecimentoService = new EstabelecimentoService();
     categoriaService       = new CategoriaService();
     categorias             = categoriaService.Get();
 }
Exemplo n.º 2
0
        /// <summary>
        /// Page Load
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                // Deixa o botão Home com Danger
                MudaCorBotao("btnLugar");

                if (Page.RouteData.Values["IdEstabelecimento"].ToString() == null)
                {
                    Response.Write("Erro: Estabelecimento não encontreado!!!!");
                }
                else
                {
                    string id = Page.RouteData.Values["IdEstabelecimento"].ToString();

                    lstEstabelecimentosFiltrados = new List <BR_Estabelecimento>();
                    lstEstabelecimentosFiltrados = ((List <BR_Estabelecimento>)
                                                    Session["DataE"]).Where(x => x.Id == Convert.ToInt16(id)).ToList();
                    CarregaEstabelecimentos();

                    lstPratosFiltrados = ((BR_Estabelecimento)EstabelecimentoService.SelectById(Int32.Parse(id)).RetObj).BR_Prato.ToList();
                    CarregaPratosFiltrados();
                }
            }
        }
Exemplo n.º 3
0
        public Pollux.MSG0166 DefinirPropriedadesPlugin(ParametroBeneficio objModel)
        {
            Pollux.MSG0166         retMsgProp     = new Pollux.MSG0166(Domain.Enum.Sistemas.RetornaSistema(Domain.Enum.Sistemas.Sistema.CRM), objModel.ID.ToString());
            BeneficioService       benefService   = new BeneficioService(this.Organizacao, this.IsOffline);
            UnidadeNegocioService  unidNegService = new UnidadeNegocioService(this.Organizacao, this.IsOffline);
            EstabelecimentoService estabService   = new EstabelecimentoService(this.Organizacao, this.IsOffline);

            retMsgProp.CodigoBeneficio          = objModel.Beneficio.Id.ToString();
            retMsgProp.CodigoParametroBeneficio = objModel.ID.ToString();

            var benefObj = benefService.ObterPor(objModel.Beneficio.Id);

            retMsgProp.BeneficioCodigo = benefObj.Codigo;

            var unidNegObj = unidNegService.BuscaUnidadeNegocio(objModel.UnidadeNegocio.Id);

            retMsgProp.CodigoUnidadeNegocio = unidNegObj.ChaveIntegracao;

            var estabObj = estabService.BuscaEstabelecimento(objModel.Estabelecimento.Id);

            retMsgProp.CodigoEstabelecimento = estabObj.Codigo;

            retMsgProp.TipoFluxoFinanceiro       = objModel.TipoFluxoFinanceiro;
            retMsgProp.EspecieDocumento          = objModel.EspecieDocumento;
            retMsgProp.ContaContabil             = objModel.ContaContabil;
            retMsgProp.CentroCusto               = objModel.CentroCusto;
            retMsgProp.PercentualAtingimentoMeta = objModel.AtingimentoMetaPrevisto;
            retMsgProp.PercentualCusto           = objModel.Custo;
            retMsgProp.Situacao         = objModel.Status;
            retMsgProp.Proprietario     = "259A8E4F-15E9-E311-9420-00155D013D39";
            retMsgProp.TipoProprietario = "systemuser";

            return(retMsgProp);
        }
Exemplo n.º 4
0
        public void GetByIdAsync_Retorno_Estabelecimento()
        {
            var estabelecimentoId   = 1;
            var nomeEstabelecimento = "NOME MOCK";

            _estabelecimento = new Estabelecimento
            {
                Id             = estabelecimentoId,
                CNPJ           = "012354456",
                Endereco       = "KASDKJHASDKJASD",
                Nome           = nomeEstabelecimento,
                QtdVagasCarros = 60,
                QtdVagasMotos  = 70,
                Telefone       = "34646548"
            };
            _estabelecimentoServiceMock.Setup(service => service.GetEstabelecimentoById(estabelecimentoId)).ReturnsAsync(_estabelecimento);

            var estabelecimentoRepositoryMock = new Mock <IEstabelecimentoRepository>();
            var unitOfWorkMock = new Mock <IUnitOfWork>();

            unitOfWorkMock.Setup(m => m.Estabelecimentos).Returns(estabelecimentoRepositoryMock.Object);

            IEstabelecimentoService sut = new EstabelecimentoService(unitOfWorkMock.Object);
            var actual = _estabelecimentoServiceMock.Object.GetEstabelecimentoById(estabelecimentoId);


            _estabelecimentoServiceMock.Verify();
            Assert.NotNull(actual.Result);
            Assert.Equal(_estabelecimento.Nome, actual.Result.Nome);
        }
        public void Setup()
        {
            var config = new MapperConfiguration(cfg => cfg.AddProfile <MappingProfile>());

            _mapper = config.CreateMapper();
            _estabelecimentoRepository = new Mock <IEstabelecimentoRepository>();

            _estabelecimentoService = new EstabelecimentoService(_estabelecimentoRepository.Object, _mapper);
        }
Exemplo n.º 6
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Page.RouteData.Values.Count < 1)
                {
                    Response.Redirect("~/Lugar");
                }
                Int32.TryParse(Page.RouteData.Values["IdEstabelecimento"].ToString(), out Id);
                var estab = EstabelecimentoService.SelectById(Id);

                if (estab.Sucesso && estab != null)
                {
                    CarregaCaracterirticas();
                    DetalhesEstab = ((BR_Estabelecimento)(estab.RetObj));
                    img.ImageUrl  = "~/Images/Estabelecimento/" + DetalhesEstab.BR_Fotos_Estabelecimento.First().Imagem;
                    lblNome.Text  = DetalhesEstab.Razao_Social;
                    lblDesc.Text  = DetalhesEstab.Descricao;

                    /* litWifi.Text = DetalhesEstab.Tem_Wifi != true ? "WiFi: Não" : "WiFi: Sim";
                     * litEstacionamento.Text = DetalhesEstab.Tem_Estacionamento != true ? "Estacionamento: Não" : "Estacionamento: Sim";
                     * litAcessoDeficiente.Text = DetalhesEstab.Tem_Acesso_Deficiente != true ? "Acesso a deficiente: Não" : "Acesso a deficiente: Sim";
                     * litFraldario.Text = DetalhesEstab.Tem_Fraldario != true ? "Fraldário: Não" : "Fraldário: Sim";
                     * litEspacoKids.Text = DetalhesEstab.Tem_Espaco_Kids != true ? "Espaço Kids: Não" : "Espaço Kids: Sim";
                     * litReserva.Text = DetalhesEstab.Tem_Reserva != true ? "Reserva: Não" : "Reserva: Sim";
                     * litTemMusica.Text = DetalhesEstab.Tem_Musica != true ? "Música: Não" : "Música: Sim";
                     * litCustomizacao.Text = DetalhesEstab.Tem_Customizacao != true ? "Customização: Não" : "Customização: Sim";
                     * litChamaGarcom.Text = DetalhesEstab.Tem_Chamada_Garcom != true ? "Chamar garçom: Não" : "Chamar garçom: Sim";
                     */

                    imgwifi.Visible         = (DetalhesEstab.Tem_Wifi == true ? true : false);
                    imgEstac.Visible        = (DetalhesEstab.Tem_Estacionamento == true ? true : false);
                    imgdeficientes.Visible  = (DetalhesEstab.Tem_Acesso_Deficiente == true ? true : false);
                    imgfraldario.Visible    = (DetalhesEstab.Tem_Fraldario == true ? true : false);
                    imgreserva.Visible      = (DetalhesEstab.Tem_Reserva == true ? true : false);
                    imgespacokids.Visible   = (DetalhesEstab.Tem_Espaco_Kids == true ? true : false);
                    imgmusica.Visible       = (DetalhesEstab.Tem_Musica == true ? true : false);
                    imgcustomizacao.Visible = (DetalhesEstab.Tem_Customizacao == true ? true : false);
                    imgChamaGar.Visible     = (DetalhesEstab.Tem_Chamada_Garcom == true ? true : false);

                    rptDados.DataSource = DetalhesEstab.BR_Prato;
                    rptDados.DataBind();
                    CarregaAvaliacoes();
                    CarregaComentarios();
                    ScriptManager.RegisterStartupScript(this, this.GetType(), "", "IniciaMapa(" + DetalhesEstab.Latitude + "," + DetalhesEstab.Longitude + ");", true);
                }
                else
                {
                    Response.Redirect("~/Lugar");
                }
            }
        }
Exemplo n.º 7
0
        public void EstacionamentoMoto(int posicoesVagasMotos, OcorrenciaStatus statusAguardado, string errorMessage)
        {
            var estabelecimento = new Estabelecimento
            {
                Id                  = new Guid("3b60f69c-f052-4d6d-b439-2cfd26eed720"),
                CNPJ                = "57.856.583/0001-74",
                Endereco            = "Avenida Ana Costa, 259, Santos",
                Nome                = "RedePar",
                PosicoesVagasCarros = 0,
                PosicoesVagasMotos  = posicoesVagasMotos,
                Telefone            = "13 2522-3567"
            };

            var veiculoMoto = new Veiculo
            {
                Id     = new Guid("eb005874-95bd-49d7-ab8d-95b9738bbe22"),
                Marca  = "Honda",
                Modelo = "Elite 125",
                Cor    = "Vermelha",
                Placa  = "CGI-2500",
                Tipo   = VeiculoTipo.Moto
            };


            var estabecimentoRepo = new Mock <IGenericRepository <Estabelecimento> >();

            estabecimentoRepo.Setup(x => x.Selecionar(estabelecimento.Id)).Returns(Task.FromResult(estabelecimento));

            var veiculoRepo = new Mock <IGenericRepository <Veiculo> >();

            veiculoRepo.Setup(x => x.Selecionar(veiculoMoto.Id)).Returns(Task.FromResult(veiculoMoto));

            IVeiculoService           veiculoService         = new VeiculoService(veiculoRepo.Object);
            IEstabelecimentoService   estabelecimentoService = new EstabelecimentoService(estabecimentoRepo.Object);
            IIncluirOcorrenciaService ocorrenciaService      = new IncluirOcorrenciaTest();
            IOperarVagasService       OperarVagas            = new OperarVagasService(veiculoService, estabelecimentoService, ocorrenciaService);


            var ocorrencia = new Ocorrencia {
                EstabelecimentoId = estabelecimento.Id, Movimento = TipoMovimento.entrada, VeiculoId = veiculoMoto.Id
            };

            var resultadoOcorrencia = OperarVagas.Executar(ocorrencia);

            int posicoesVagaMotosAguardada = (posicoesVagasMotos - 1 > 0) ? posicoesVagasMotos - 1 : 0;

            Assert.Equal(posicoesVagaMotosAguardada, resultadoOcorrencia.PosicoesVagasMotosAtualizada);
            Assert.True(resultadoOcorrencia.Status == statusAguardado, errorMessage);
        }
Exemplo n.º 8
0
        public void EstacionamentoCarro(int posicoesVagasCarros, OcorrenciaStatus statusAguardado, string errorMessage)
        {
            var estabelecimento = new Estabelecimento
            {
                Id                  = new Guid("3b60f69c-f052-4d6d-b439-2cfd26eed720"),
                CNPJ                = "57.856.583/0001-74",
                Endereco            = "Avenida Ana Costa, 259, Santos",
                Nome                = "RedePar",
                PosicoesVagasCarros = posicoesVagasCarros,
                PosicoesVagasMotos  = 0,
                Telefone            = "13 2522-3567"
            };

            var veiculoCarro = new Veiculo
            {
                Id     = new Guid("4dfbfafd-1122-449a-82b8-a81e924adc1a"),
                Marca  = "Nissan",
                Modelo = "Livina X-Gear",
                Cor    = "Branca",
                Placa  = "FTY-1183",
                Tipo   = VeiculoTipo.Carro
            };

            var estabecimentoRepo = new Mock <IGenericRepository <Estabelecimento> >();

            estabecimentoRepo.Setup(x => x.Selecionar(estabelecimento.Id)).Returns(Task.FromResult(estabelecimento));

            var veiculoRepo = new Mock <IGenericRepository <Veiculo> >();

            veiculoRepo.Setup(x => x.Selecionar(veiculoCarro.Id)).Returns(Task.FromResult(veiculoCarro));

            IIncluirOcorrenciaService ocorrenciaService      = new IncluirOcorrenciaTest();
            IVeiculoService           veiculoService         = new VeiculoService(veiculoRepo.Object);
            IEstabelecimentoService   estabelecimentoService = new EstabelecimentoService(estabecimentoRepo.Object);
            IOperarVagasService       OperarVagas            = new OperarVagasService(veiculoService, estabelecimentoService, ocorrenciaService);


            var ocorrencia = new Ocorrencia {
                EstabelecimentoId = estabelecimento.Id, Movimento = TipoMovimento.entrada, VeiculoId = veiculoCarro.Id
            };

            var resultadoOcorrencia = OperarVagas.Executar(ocorrencia);

            int posicoesVagaCarrosAguardada = (posicoesVagasCarros - 1 > 0) ? posicoesVagasCarros - 1 : 0;

            Assert.Equal(posicoesVagaCarrosAguardada, resultadoOcorrencia.PosicoesVagasCarrosAtualizada);
            Assert.True(resultadoOcorrencia.Status == statusAguardado, errorMessage);
        }
Exemplo n.º 9
0
        public void SetUp()
        {
            Mapper.Reset();
            Mapper.Initialize(cfg => {
                cfg.AddProfile <DomainToViewModelMappingProfile>();
                cfg.AddProfile <ViewModelToDomainMappingProfile>();
            });

            //Setando categoria
            repositoryMockCategoria = new Mock <ICategoriaRepository>();
            serviceCategoria        = new CategoriaService(repositoryMockCategoria.Object);

            var categorias = new List <CategoriaModel>();

            categorias.Add(new CategoriaModel()
            {
                nome = "Supermercado"
            });
            categorias.Add(new CategoriaModel()
            {
                nome = "Restaurante"
            });
            categorias.Add(new CategoriaModel()
            {
                nome = "Borracharia"
            });
            categorias.Add(new CategoriaModel()
            {
                nome = "Posto"
            });
            categorias.Add(new CategoriaModel()
            {
                nome = "Oficina"
            });

            repositoryMockCategoria.Setup(x => x.GetAll()).Returns(categorias);

            //Setando estabelecimento
            repositoryMock = new Mock <IEstabelecimentoRepository>();
            service        = new EstabelecimentoService(repositoryMock.Object, serviceCategoria);
            controller     = new EstabelecimentoController(service, serviceCategoria);
        }
 /// <summary>
 /// Page Load
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 protected void Page_Load(object sender, EventArgs e)
 {
     if (!Page.IsPostBack)
     {
         var estabelecimantos = EstabelecimentoService.SelectIn();
         lstEstabelecimentosFiltrados = new List <BR_Estabelecimento>();
         if (estabelecimantos.Sucesso)
         {
             lstEstabelecimentos = (List <BR_Estabelecimento>)estabelecimantos.RetObj;
             lstEstabelecimentos.ForEach(x => lstEstabelecimentosFiltrados.Add(x));
             CarregaEstabelecimentos();
             Session["DataE"] = lstEstabelecimentos;
             CarregaTags();
             CarregaCaracterirticas();
         }
         else
         {
             Response.Write("Erro: " + estabelecimantos.MsgErro);
         }
     }
 }
Exemplo n.º 11
0
        /// <summary>
        /// Page Load
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                // Deixa o botão Home com Danger
                MudaCorBotao("btnLugar");

                var estabelecimantos = EstabelecimentoService.SelectIn();
                lstEstabelecimentosFiltrados = new List <BR_Estabelecimento>();
                if (estabelecimantos.Sucesso)
                {
                    lstEstabelecimentos = (List <BR_Estabelecimento>)estabelecimantos.RetObj;
                    lstEstabelecimentos.ForEach(x => lstEstabelecimentosFiltrados.Add(x));
                    CarregaEstabelecimentos();
                    Session["DataE"] = lstEstabelecimentos;
                }
                else
                {
                    Response.Write("Erro: " + estabelecimantos.MsgErro);
                }
            }
        }
Exemplo n.º 12
0
        public Intelbras.Message.Helper.MSG0138 DefinirPropriedades(List <Product> lstProd, List <ProdutosdaSolicitacao> prodSolicLst, List <PrecoProduto> precoProdutoLst, SolicitacaoBeneficio solicBenef)
        {
            Intelbras.Message.Helper.MSG0138 msg0138 = new Intelbras.Message.Helper.MSG0138(Domain.Enum.Sistemas.RetornaSistema(Domain.Enum.Sistemas.Sistema.CRM), solicBenef.ID.ToString());
            var estabService = new EstabelecimentoService(this.Organizacao, this.IsOffline);

            var parametroGlobalCondPagamento = new ParametroGlobalService(this.Organizacao, this.IsOffline).ObterPor((int)Enum.TipoParametroGlobal.CondicaoPagamentoTabelaPreco);

            if (parametroGlobalCondPagamento == null)
            {
                throw new ArgumentException("(CRM) Parâmetro global de Condição de Pagamento não localizado [Código: " + (int)Enum.TipoParametroGlobal.CondicaoPagamentoTabelaPreco + "]");
            }

            int codigoCondicaoPagamento;

            if (!int.TryParse(parametroGlobalCondPagamento.Valor, out codigoCondicaoPagamento))
            {
                throw new ArgumentException("(CRM) Parâmetro global de Condição de Pagamento não é um número inteiro [Código: " + (int)Enum.TipoParametroGlobal.CondicaoPagamentoTabelaPreco + "]");
            }

            msg0138.CondicaoPagamento = codigoCondicaoPagamento;
            msg0138.Conta             = solicBenef.Canal.Id.ToString();

            msg0138.ProdutosItens = new List <Pollux.Entities.ProdutoValorIcmsItem>();
            foreach (var prodSolicObj in prodSolicLst)
            {
                var estabObj     = estabService.BuscaEstabelecimento(prodSolicObj.Estabelecimento.Id);
                var prodObj      = lstProd.Find(x => x.ID == prodSolicObj.Produto.Id);
                var precoProdObj = precoProdutoLst.Find(x => x.Produto.ID == prodSolicObj.Produto.Id);

                var tmpPolluxObj = new Pollux.Entities.ProdutoValorIcmsItem();
                tmpPolluxObj.Estabelecimento = estabObj.Codigo;
                tmpPolluxObj.CodigoProduto   = prodObj.Codigo;
                tmpPolluxObj.PrecoUnitario   = precoProdObj.ValorBase;

                msg0138.ProdutosItens.Add(tmpPolluxObj);
            }

            return(msg0138);
        }
Exemplo n.º 13
0
        public string ConsultaStatusGKO(string organizationName, String faturaId)
        {
            RepositoryService      RepositoryService            = new RepositoryService(organizationName, false);
            FaturaService          faturaDomainService          = new FaturaService(organizationName, false);
            EstabelecimentoService estabelecimentoDomainService = new EstabelecimentoService(organizationName, false);
            ContaService           contaDomainService           = new ContaService(organizationName, false);

            var jsSerializer = new JavaScriptSerializer();
            List <PosicaoEntregaViewModel> retornoMsg = null;

            try
            {
                var guidFatura         = new Guid(faturaId);
                var FaturaObj          = faturaDomainService.ObterPor(guidFatura);
                var estabelecimentoObj = estabelecimentoDomainService.BuscaEstabelecimento(FaturaObj.Estabelecimento.Id);
                var contaObj           = contaDomainService.BuscaConta(FaturaObj.Cliente.Id);

                Domain.Integracao.MSG0176 msgGKO = new Domain.Integracao.MSG0176(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline);
                retornoMsg = msgGKO.Enviar(FaturaObj, estabelecimentoObj, contaObj);
            }
            catch (Exception e)
            {
                jsSerializer.MaxJsonLength = Int32.MaxValue;

                Dictionary <string, string> retornoMapErr = new Dictionary <string, string>();

                retornoMapErr.Add("return", "FALSE");
                retornoMapErr.Add("message", e.Message);
                var jsonErr = jsSerializer.Serialize(retornoMapErr);

                return(jsonErr.ToString());
            }

            jsSerializer.MaxJsonLength = Int32.MaxValue;
            var json = jsSerializer.Serialize(retornoMsg);

            return(json.ToString());
        }
        private async void LoadEstabelecimentosAsync()
        {
            EstabelecimentoService estabelecimentoService = new EstabelecimentoService();

            _estabelecimentoVM.EstabelecimentosFiltrado = await estabelecimentoService.GetItemsAsync(true);

            meuMapa.Pins.Clear();
            meuMapa.PinCustomizados = new List <PinCustomizado>();
            if (_estabelecimentoVM.EstabelecimentosFiltrado == null)
            {
                return;
            }

            foreach (Estabelecimento item in _estabelecimentoVM.EstabelecimentosFiltrado)
            {
                var pin = new PinCustomizado
                {
                    Type        = PinType.Place,
                    Position    = new Position(item.Latitude, item.Longitude),
                    Label       = item.Nome,
                    Address     = item.Localizacao,
                    Id          = item.IdEstabelecimento,
                    Localizacao = item.Site,
                    Telefone    = item.Telefone
                };
                meuMapa.PinCustomizados = new List <PinCustomizado>()
                {
                    pin
                };

                meuMapa.Pins.Add(pin);
            }


            meuMapa.MoveToRegion(
                MapSpan.FromCenterAndRadius(
                    new Position(-23.573783, -46.623438), Distance.FromMiles(0.1)));
        }
        private readonly CategoriaService _categoriaService; //Dependência com Categorias

        public EstabelecimentosController(EstabelecimentoService estabelecimentoService, CategoriaService categoriaService)
        {
            _estabelecimentoService = estabelecimentoService;
            _categoriaService       = categoriaService;
        }
Exemplo n.º 16
0
 public EstabelecimentoController(EstabelecimentoService context)
 {
     _context = context;
 }
Exemplo n.º 17
0
        protected override void Execute(IPluginExecutionContext context, IOrganizationServiceFactory serviceFactory, IOrganizationService adminService, IOrganizationService userService)
        {
            switch (Util.Utilitario.ConverterEnum <Domain.Enum.Plugin.MessageName>(context.MessageName))
            {
                #region Create

            case Domain.Enum.Plugin.MessageName.Create:

                var entidade             = (Entity)context.InputParameters["Target"];
                var solicitacaoBeneficio = entidade.Parse <Domain.Model.SolicitacaoBeneficio>(context.OrganizationName, context.IsExecutingOffline);

                new SharepointServices(context.OrganizationName, context.IsExecutingOffline, adminService)
                .CriarDiretorio <Domain.Model.SolicitacaoBeneficio>(solicitacaoBeneficio.Nome, solicitacaoBeneficio.ID.Value);

                break;

                #endregion

                #region Update

            case Domain.Enum.Plugin.MessageName.Update:

                if (context.Depth > 1)
                {
                    return;
                }

                if (context.PreEntityImages.Contains("imagem") && context.PreEntityImages["imagem"] is Entity)
                {
                    var ServiceSolicitacaoBeneficio = new SolicitacaoBeneficioService(context.OrganizationName, context.IsExecutingOffline, adminService);

                    var entityMerge = context.PostEntityImages["imagem"];
                    var solicMerge  = entityMerge.Parse <Domain.Model.SolicitacaoBeneficio>(context.OrganizationName, context.IsExecutingOffline, adminService);

                    ServiceSolicitacaoBeneficio.CriarSolicitacaoComProdutosCancelados(solicMerge);

                    if (solicMerge.TipoPriceProtection.HasValue && solicMerge.TipoPriceProtection == (int)Domain.Enum.SolicitacaoBeneficio.TipoPriceProtection.Autorizacao)
                    {
                        if (solicMerge.StatusCalculoPriceProtection.HasValue && solicMerge.StatusCalculoPriceProtection == (int)Domain.Enum.SolicitacaoBeneficio.StatusCalculoPriceProtection.Calcular)
                        {
                            // Instanciando objetos utilizados para buscas
                            var ServiceProdSolicitacao = new ProdutosdaSolicitacaoService(context.OrganizationName, context.IsExecutingOffline, adminService);
                            var ServiceProd            = new ProdutoService(context.OrganizationName, context.IsExecutingOffline, adminService);
                            var ServiceSellout         = new SellOutService(context.OrganizationName, context.IsExecutingOffline);
                            var ServiceFatura          = new FaturaService(context.OrganizationName, context.IsExecutingOffline);
                            var ServiceConta           = new ContaService(context.OrganizationName, context.IsExecutingOffline);
                            var ServiceUnidade         = new UnidadeNegocioService(context.OrganizationName, context.IsExecutingOffline);
                            var ServiceFamilia         = new FamiliaComercialService(context.OrganizationName, context.IsExecutingOffline);
                            var ServiceEstabelecimento = new EstabelecimentoService(context.OrganizationName, context.IsExecutingOffline);
                            var ServiceArquivo         = new ArquivoService(context.OrganizationName, context.IsExecutingOffline);


                            //trocar status para calculando
                            solicMerge.StatusCalculoPriceProtection = (int)Domain.Enum.SolicitacaoBeneficio.StatusCalculoPriceProtection.Calculando;
                            ServiceSolicitacaoBeneficio.Persistir(solicMerge);

                            // Obtendo dados para busca de quantidade de itens vendidos no Sellout
                            var lstProdSolic = ServiceProdSolicitacao.ListarPorSolicitacaoAtivos(solicMerge.ID.Value);
                            if (lstProdSolic.Count > 0)
                            {
                                var lstTmpFilter = lstProdSolic.Select(c => (Guid)c.Produto.Id).ToList();

                                var lstObjProd          = ServiceProd.ListarProduto(lstTmpFilter);
                                var listFilterSelloutWS = lstObjProd.Select(c => c.Codigo).ToList();
                                var listFilterFatura    = lstObjProd.Select(c => c.ID).ToList();

                                var strListFilter = String.Join("','", listFilterSelloutWS);

                                DateTime dataIni = (DateTime)solicMerge.DataCriacao;
                                dataIni = dataIni.AddMonths(-1);
                                DateTime dataFim = new DateTime(dataIni.Year, dataIni.Month, DateTime.DaysInMonth(dataIni.Year, dataIni.Month), 23, 59, 59);
                                dataIni = dataIni.AddMonths(-2);
                                dataIni = new DateTime(dataIni.Year, dataIni.Month, 1, 0, 0, 0);

                                //Lista de total de unidades reportadas pelo sellout nos ultimos 90 dias, divididos por 2, para os produtos solicitados.
                                var listValueSellout = ServiceSellout.listarContagemVenda(dataIni, dataFim, solicMerge.Canal.Id, strListFilter);

                                //TODO - Determinar data referencia dos 6 meses para as faturas
                                var listProdFaturas = ServiceFatura.listarContagemVendaPrice(solicMerge.Canal.Id, listFilterFatura, lstObjProd);

                                //Ajuste de valor de quantidade
                                foreach (var ajusteValuesTmp in listValueSellout)
                                {
                                    var prodTmp = lstObjProd.Find(x => x.Codigo == ajusteValuesTmp.CodigoProdutoERP);
                                    if (prodTmp != null)
                                    {
                                        var prodSolicTmp = lstProdSolic.Find(x => x.Produto.Id == prodTmp.ID);
                                        if (prodSolicTmp != null)
                                        {
                                            if (prodSolicTmp.QuantidadeAjustada.HasValue)
                                            {
                                                ajusteValuesTmp.TotalUnidades = (decimal)prodSolicTmp.QuantidadeAjustada;
                                            }
                                            else
                                            {
                                                if (ajusteValuesTmp.TotalUnidades > prodSolicTmp.QuantidadeSolicitada)
                                                {
                                                    ajusteValuesTmp.TotalUnidades = (decimal)prodSolicTmp.QuantidadeSolicitada;
                                                }
                                            }
                                        }
                                    }
                                }

                                //Busca de preços atuais
                                var listPrecoProduto = new List <PrecoProduto>();
                                foreach (var objSolicProd in lstProdSolic)
                                {
                                    PrecoProduto precoProduto = new PrecoProduto(context.OrganizationName, context.IsExecutingOffline);
                                    Product      objProd      = lstObjProd.Find(x => x.ID == objSolicProd.Produto.Id);

                                    precoProduto.CodigoProduto = objProd.Codigo;
                                    precoProduto.ProdutoId     = objProd.ID.Value;
                                    precoProduto.Produto       = objProd;

                                    var contaObjTmp = ServiceConta.BuscaConta(solicMerge.Canal.Id);
                                    List <ProdutoPortfolio> lstProdutoPortifolio = ServiceProd.ProdutosPortfolio(contaObjTmp, contaObjTmp.Classificacao.Id, solicMerge.UnidadedeNegocio.Id);
                                    ProdutoPortfolio        produtoPortfolioTmp  = lstProdutoPortifolio.Find(x => x.Produto.Id == objProd.ID.Value);

                                    Estabelecimento estTmp = ServiceEstabelecimento.BuscaEstabelecimento(objSolicProd.Estabelecimento.Id);
                                    precoProduto.codEstabelecimento = (int)estTmp.Codigo;

                                    var unidadeTmp = ServiceUnidade.BuscaUnidadeNegocio(solicMerge.UnidadedeNegocio.Id);
                                    precoProduto.codUnidade = unidadeTmp.ChaveIntegracao;
                                    var famComTmp = ServiceFamilia.ObterPor(objProd.FamiliaComercial.Id);
                                    precoProduto.codFamiliaComl = famComTmp.Codigo;

                                    precoProduto.tipoPortofolio = produtoPortfolioTmp.PortfolioTipo;

                                    precoProduto.ContaId      = solicMerge.Canal.Id;
                                    precoProduto.ValorProduto = 0;
                                    precoProduto.Quantidade   = (int)objSolicProd.QuantidadeSolicitada;

                                    listPrecoProduto.Add(precoProduto);
                                }
                                listPrecoProduto = ServiceProd.ListarPor(listPrecoProduto);

                                MSG0138 msg0138 = new MSG0138(context.OrganizationName, context.IsExecutingOffline);
                                List <ValorProdutoICMSViewModel> lstPrecoProdICMS = msg0138.Enviar(lstObjProd, lstProdSolic, listPrecoProduto, solicMerge);

                                List <ProdutoFaturaViewModel> lstProdFatGenerate = new List <ProdutoFaturaViewModel>();

                                List <string> errorNoSellout = new List <string>();
                                foreach (var objProdSolic in lstProdSolic)
                                {
                                    Product           objProd       = lstObjProd.Find(x => x.ID == objProdSolic.Produto.Id);
                                    QtdProdutoSellout objQtdSellout = listValueSellout.Find(x => x.CodigoProdutoERP == objProd.Codigo);

                                    if (objQtdSellout == null || objQtdSellout.TotalUnidades <= 0)
                                    {
                                        string strError = "Produto: " + objProd.Codigo + " " + objProd.Nome + " | Nenhuma entrada de sellout para o produto";
                                        errorNoSellout.Add(strError);
                                    }
                                }

                                string urlSharepoint    = string.Empty;
                                var    retUrlSharepoint = ServiceArquivo.ObterUrlArquivo(solicMerge.ID.ToString(), context.OrganizationName, out urlSharepoint);

                                if (errorNoSellout.Count == 0)
                                {
                                    foreach (var objProdSolic in lstProdSolic)
                                    {
                                        Product           objProd       = lstObjProd.Find(x => x.ID == objProdSolic.Produto.Id);
                                        QtdProdutoSellout objQtdSellout = listValueSellout.Find(x => x.CodigoProdutoERP == objProd.Codigo);
                                        objProdSolic.QuantidadeAprovada = 0;
                                        objProdSolic.ValorTotalAprovado = 0;
                                        objProdSolic.ValorTotal         = 0;

                                        PrecoProduto objPrecoProd = listPrecoProduto.Find(x => x.Produto.ID == objProdSolic.Produto.Id);
                                        ValorProdutoICMSViewModel objValProdICMS = lstPrecoProdICMS.Find(x => x.CodigoProduto == objProd.Codigo);

                                        var lstProdFatLocal = listProdFaturas.Where(x => x.CodigoProduto == objProd.Codigo).OrderByDescending(x => x.DataEmissaoFatura).ToList();

                                        foreach (var objProdFaturas in lstProdFatLocal)
                                        {
                                            if (objQtdSellout.TotalUnidades == 0)
                                            {
                                                objProdFaturas.QtdCalculo = 0;
                                            }
                                            else if (objProdFaturas.QtdFatura >= objQtdSellout.TotalUnidades)
                                            {
                                                objProdFaturas.QtdCalculo = objQtdSellout.TotalUnidades;
                                            }
                                            else
                                            {
                                                objProdFaturas.QtdCalculo = objProdFaturas.QtdFatura;
                                            }

                                            objProdFaturas.SaldoDiferenca = objProdFaturas.PrecoFatura - objValProdICMS.PrecoLiquido;

                                            if (objProdFaturas.SaldoDiferenca > 0)
                                            {
                                                objProdFaturas.ValorIPIProduto   = objProd.PercentualIPI;
                                                objProdFaturas.PrecoCalculoAtual = objValProdICMS.PrecoLiquido;
                                                objProdFaturas.TotalDiferenca    = objProdFaturas.SaldoDiferenca * objProdFaturas.QtdCalculo;
                                                objProdFaturas.TotalComIPI       = objProdFaturas.TotalDiferenca + (objProdFaturas.TotalDiferenca * (objProd.PercentualIPI / 100));

                                                objProdSolic.QuantidadeAprovada += objProdFaturas.QtdCalculo;
                                                if (objProdFaturas.QtdFatura >= objQtdSellout.TotalUnidades)
                                                {
                                                    objQtdSellout.TotalUnidades = 0;
                                                }
                                                else
                                                {
                                                    objQtdSellout.TotalUnidades -= objProdFaturas.QtdFatura;
                                                }

                                                if (objProdSolic.ValorTotalAprovado.HasValue)
                                                {
                                                    objProdSolic.ValorTotalAprovado += objProdFaturas.TotalComIPI;
                                                }
                                                else
                                                {
                                                    objProdSolic.ValorTotalAprovado = objProdFaturas.TotalComIPI;
                                                }

                                                if (objProdSolic.ValorTotal.HasValue)
                                                {
                                                    objProdSolic.ValorTotal += objProdFaturas.TotalComIPI;
                                                }
                                                else
                                                {
                                                    objProdSolic.ValorTotal = objProdFaturas.TotalComIPI;
                                                }
                                            }
                                            else if (objProdFaturas.SaldoDiferenca <= 0)
                                            {
                                                objProdFaturas.ValorIPIProduto   = objProd.PercentualIPI;
                                                objProdFaturas.PrecoCalculoAtual = objValProdICMS.PrecoLiquido;
                                            }
                                            lstProdFatGenerate.Add(objProdFaturas);
                                        }

                                        if (objProdSolic.QuantidadeAprovada > 0 && objProdSolic.ValorTotalAprovado > 0)
                                        {
                                            var dateTime = DateTime.Now;
                                            ServiceArquivo.CriarExcelRecalculo(lstProdFatGenerate, dateTime.ToString("dd/MM/yyyy"), urlSharepoint, NameFileTable, context.OrganizationName, context.IsExecutingOffline);

                                            ServiceProdSolicitacao.Persistir(objProdSolic);
                                        }
                                        else if (lstProdFatLocal.Count > 0 && objProdSolic.ValorTotalAprovado <= 0)
                                        {
                                            string strError = "Produto: " + objProd.Codigo + " " + objProd.Nome + " | Nenhuma entrada nas Faturas do Canal com diferença positiva de preço para o Produto";
                                            errorNoSellout.Add(strError);
                                        }
                                        else
                                        {
                                            string strError = "Produto: " + objProd.Codigo + " " + objProd.Nome + " | Nenhuma entrada nas Faturas do Canal para o Produto";
                                            errorNoSellout.Add(strError);
                                        }
                                    }

                                    if (errorNoSellout.Count == 0)
                                    {
                                        solicMerge.StatusCalculoPriceProtection = (int)Domain.Enum.SolicitacaoBeneficio.StatusCalculoPriceProtection.Calculado;
                                        ServiceSolicitacaoBeneficio.Persistir(solicMerge);
                                    }
                                    else
                                    {
                                        ServiceArquivo.CriarArquivosErros(errorNoSellout, urlSharepoint, NameFileLog);
                                        solicMerge.StatusCalculoPriceProtection = (int)Domain.Enum.SolicitacaoBeneficio.StatusCalculoPriceProtection.ErroCalcular;
                                        ServiceSolicitacaoBeneficio.Persistir(solicMerge);
                                    }
                                }
                                else
                                {
                                    ServiceArquivo.CriarArquivosErros(errorNoSellout, urlSharepoint, NameFileLog);
                                    solicMerge.StatusCalculoPriceProtection = (int)Domain.Enum.SolicitacaoBeneficio.StatusCalculoPriceProtection.ErroCalcular;
                                    ServiceSolicitacaoBeneficio.Persistir(solicMerge);
                                }
                            }
                            else
                            {
                                solicMerge.StatusCalculoPriceProtection = (int)Domain.Enum.SolicitacaoBeneficio.StatusCalculoPriceProtection.Calculado;
                                ServiceSolicitacaoBeneficio.Persistir(solicMerge);
                            }
                        }
                    }
                }

                break;

                #endregion
            }
        }