Beispiel #1
0
        public void TestePluginSolicitacaoBeneficio()
        {
            Domain.Model.SolicitacaoBeneficio SolicitBeneficioPost = new Intelbras.CRM2013.Domain.Servicos.SolicitacaoBeneficioService(this.OrganizationName, this.IsOffline)
                                                                     .ObterPor(new Guid("116274FE-DBEF-E311-91F5-00155D013E44"));
            Domain.Model.SolicitacaoBeneficio SolBeneficioTarget = SolicitBeneficioPost;

            if (SolBeneficioTarget.BeneficioPrograma != null && SolBeneficioTarget.BeneficioPrograma.Name == "Showroom")
            {
                Domain.Model.CompromissosDoCanal compromissoCanal = new Domain.Model.CompromissosDoCanal(this.OrganizationName, this.IsOffline);

                #region Criacao Compromisso do Canal

                //Pegamos o canal para verificar o proprietario
                Domain.Model.Conta canal = new Domain.Servicos.ContaService(this.OrganizationName, this.IsOffline)
                                           .BuscaConta(SolicitBeneficioPost.Canal.Id);

                compromissoCanal.Canal = new SDKore.DomainModel.Lookup(canal.ID.Value, "");

                Domain.Model.CompromissosDoPrograma compromissoPrograma = new Domain.Servicos.CompromissosDoCanalService(this.OrganizationName, this.IsOffline)
                                                                          .BuscarCompromissoDoPrograma("Showroom");

                compromissoCanal.Compromisso = new SDKore.DomainModel.Lookup(compromissoPrograma.ID.Value, "");

                compromissoCanal.Nome = "Ter aderência às regras de utilização de identidade visual/showroom";

                compromissoCanal.ID = new Domain.Servicos.CompromissosDoCanalService(this.OrganizationName, this.IsOffline).Persistir(compromissoCanal);
                if (compromissoCanal.ID.HasValue)
                {
                    Domain.Model.Usuario proprietario = new Domain.Servicos.UsuarioService(this.OrganizationName, this.IsOffline).BuscarProprietario("account", "accountid", canal.Id);
                    if (proprietario != null)
                    {
                        new Domain.Servicos.UtilService(this.OrganizationName, this.IsOffline).MudarProprietarioRegistro("systemuser", proprietario.ID.Value, "itbc_compdocanal", compromissoCanal.ID.Value);
                    }
                }

                #endregion

                Domain.Model.Tarefa tarefa = new Domain.Model.Tarefa(this.OrganizationName, this.IsOffline);

                tarefa.Assunto = "Envio de evidências de Showroom";
                Domain.Model.TipoDeAtividade tipoAtividade = new Domain.Servicos.TarefaService(this.OrganizationName, this.IsOffline).BuscarTipoTarefa("Pendência do Canal");
                if (tipoAtividade != null)
                {
                    tarefa.TipoDeAtividade = new SDKore.DomainModel.Lookup(tipoAtividade.ID.Value, tipoAtividade.Nome, "");
                }
                tarefa.Conclusao = DateTime.Now.AddMonths(6);

                tarefa.ReferenteA = new SDKore.DomainModel.Lookup(compromissoCanal.ID.Value, "itbc_compdocanal");

                tarefa.ID = new Domain.Servicos.TarefaService(this.OrganizationName, this.IsOffline).Persistir(tarefa);
            }
        }
Beispiel #2
0
        public void TesteCrmWebServiceProdutoSolicitacao()
        {
            string organizationName = ConfigurationManager.GetSettingValue("OrganizacaoIntelbras");

            Domain.Model.SolicitacaoBeneficio solBeneficio = new Domain.Model.SolicitacaoBeneficio(organizationName, false);
            JavaScriptSerializer        jsonConverter      = new JavaScriptSerializer();
            Dictionary <string, object> dictResposta       = new Dictionary <string, object>();

            try
            {
                string produtoID              = "08bc0401-bef0-e311-9420-00155d013d39";
                string notaFiscalID           = "2D109EDA-AC18-E411-9233-00155D013E44";
                string solicitacaoBeneficioID = "F9A8E1BB-A418-E411-9233-00155D013E44";

                Domain.Model.ProdutoFatura prodFatura = new Domain.Model.ProdutoFatura(organizationName, false);
                Guid produtoGuid              = Guid.Parse(produtoID);
                Guid notaFiscalGuid           = Guid.Parse(notaFiscalID);
                Guid solicitacaoBeneficioGuid = Guid.Parse(solicitacaoBeneficioID);

                solBeneficio = new Intelbras.CRM2013.Domain.Servicos.SolicitacaoBeneficioService(organizationName, false).ObterPor(solicitacaoBeneficioGuid);

                if (solBeneficio == null)
                {
                    throw new ArgumentException("Não foi possível encontrar a solicitação de benefício");
                }

                if (solBeneficio.BeneficioPrograma.Name != "Stock Rotation")
                {
                    dictResposta.Add("Resultado", false);
                    dictResposta.Add("Mensagem", "Benefício do programa não é Stock Rotation");
                    dictResposta.Add("Ignorar", true);
                }
                else
                {
                    prodFatura = new Intelbras.CRM2013.Domain.Servicos.ProdutoFaturaService(organizationName, false).ObterPorProdutoEfatura(produtoGuid, notaFiscalGuid);

                    if (prodFatura == null)
                    {
                        throw new ArgumentException("Produto não encontrado na Nota Fiscal");
                    }

                    if (!prodFatura.ValorTotal.HasValue)
                    {
                        throw new ArgumentException("Produto sem valor total");
                    }

                    dictResposta.Add("Resultado", true);
                    dictResposta.Add("ValorTotal", prodFatura.ValorTotal.Value.ToString());
                }
            }
            catch (FormatException)
            {
                dictResposta = new Dictionary <string, object>();
                dictResposta.Add("Resultado", false);
                dictResposta.Add("Mensagem", "Guid em formato incorreto!Esperado : (xxxxxxxx-xxxx-xxxxx-xxxx-xxxxxxxxxxxx)");
            }
            catch (Exception e)
            {
                dictResposta = new Dictionary <string, object>();
                dictResposta.Add("Resultado", false);
                dictResposta.Add("Mensagem", e.Message);
            }

            var json = jsonConverter.Serialize(dictResposta);
        }
        public void ProdutoSolicitacaoShowRoom(ProdutosdaSolicitacao objProdutoSolicitacao)
        {
            #region Verificações de valores
            if (objProdutoSolicitacao == null)
            {
                throw new ArgumentException("(CRM) Produto Solicitação Vazio");
            }

            if (objProdutoSolicitacao.BeneficioPrograma == null)
            {
                throw new ArgumentException("(CRM) Campo Benefício de Programa obrigatório");
            }

            if (objProdutoSolicitacao.SolicitacaoBeneficio == null)
            {
                throw new ArgumentException("(CRM) Campo Solicitação de Benefício obrigatória");
            }
            #endregion

            Beneficio benefPrograma = new Intelbras.CRM2013.Domain.Servicos.BeneficioService(RepositoryService).ObterPor(objProdutoSolicitacao.BeneficioPrograma.Id);
            #region Verificações de valores
            if (benefPrograma == null)
            {
                throw new ArgumentException("(CRM) Benefício do Programa não encontrado");
            }
            #endregion
            if (benefPrograma.Codigo == (int)Domain.Enum.BeneficiodoPrograma.Codigos.Showroom)
            {
                #region Verificações de valores
                if (objProdutoSolicitacao.Produto == null)
                {
                    throw new ArgumentException("(CRM) Campo Produto obrigatório");
                }
                #endregion

                Product produto = new Intelbras.CRM2013.Domain.Servicos.ProdutoService(RepositoryService).ObterPor(objProdutoSolicitacao.Produto.Id);

                #region Verificações de valores
                if (produto == null)
                {
                    throw new ArgumentException("(CRM) Produto " + objProdutoSolicitacao.Produto.Name.ToString() + " não encontrado");
                }

                if (produto.Segmento == null)
                {
                    throw new ArgumentException("(CRM) Campo segmento do Produto não preenchido,operação cancelada");
                }
                #endregion

                Segmento objSegmento = new Intelbras.CRM2013.Domain.Servicos.SegmentoService(RepositoryService).ObterPor(produto.Segmento.Id);

                #region Verificações de valores
                if (objSegmento == null)
                {
                    throw new ArgumentException("(CRM) Segmento do Produto não encontrado");
                }
                #endregion

                ParametroGlobal paramIntervalo = new Intelbras.CRM2013.Domain.Servicos.ParametroGlobalService(RepositoryService).ObterPor((int)Domain.Enum.TipoParametroGlobal.PrazoPermitidoNovaCompraShowroom, null, null, null, null, null, null, null);
                #region Verificações de valores
                if (paramIntervalo == null)
                {
                    throw new ArgumentException("(CRM) Parâmetro Global não encontrado para 'Prazo permitido para nova compra de showroom'.Operação Cancelada");
                }
                #endregion

                SolicitacaoBeneficio objSolicBenef = new Intelbras.CRM2013.Domain.Servicos.SolicitacaoBeneficioService(RepositoryService).ObterPor(objProdutoSolicitacao.SolicitacaoBeneficio.Id);

                #region Verificação de valores
                if (objSolicBenef == null)
                {
                    throw new ArgumentException("(CRM) Solicitação Benefício não encontrada");
                }

                if (objSolicBenef.BeneficioCanal == null)
                {
                    throw new ArgumentException("(CRM) Benefício do Canal não encontrado");
                }

                #endregion

                List <SolicitacaoBeneficio> solicBenef = new Intelbras.CRM2013.Domain.Servicos.SolicitacaoBeneficioService(RepositoryService).ListarPorBeneficioCanalEStatus(objSolicBenef.BeneficioCanal.Id, objSolicBenef.BeneficioPrograma.Id, (int)Enum.SolicitacaoBeneficio.StatusSolicitacaoBeneficio.PagamentoEfetuado);

                if (solicBenef.Count > 0)
                {
                    List <SolicitacaoBeneficio> tmpSolicBenef = new List <SolicitacaoBeneficio>();
                    foreach (SolicitacaoBeneficio item in solicBenef)
                    {
                        //DateTime.Compare(item.DataCriacao, objSolicBenef.DataCriacao);
                        int diferencaDias = Math.Abs(item.DataCriacao.Value.Subtract(objSolicBenef.DataCriacao.Value).Days);
                        if ((diferencaDias >= Convert.ToInt32(paramIntervalo.Valor)))
                        {
                            //Lista com os beneficios que serão verificados
                            tmpSolicBenef.Add(item);
                        }
                    }

                    int qtdMaxima;

                    if (objSegmento.QtdMaximaShowRoom.HasValue)
                    {
                        qtdMaxima = objSegmento.QtdMaximaShowRoom.Value;
                    }
                    else
                    {
                        //Fluxo alternativo 2
                        ParametroGlobal paramGlobal = new Intelbras.CRM2013.Domain.Servicos.ParametroGlobalService(RepositoryService).ObterPor((int)Domain.Enum.TipoParametroGlobal.QuantidadeKitsShowroomPorSegmento, null, null, null, null, null, null, null);
                        if (paramGlobal == null)
                        {
                            throw new ArgumentException("(CRM) Parâmetro Global não encontrado para Quantidade de Kits para Showroom.Operação Cancelada");
                        }

                        qtdMaxima = Convert.ToInt32(paramGlobal.Valor);
                    }

                    #region Agrupa Produtos por Segmento do Produto

                    decimal qtdProdutosSegmento = 0;
                    if (tmpSolicBenef.Count > 0)
                    {
                        foreach (var item in tmpSolicBenef)
                        {
                            List <ProdutosdaSolicitacao> produtosSolic = new Intelbras.CRM2013.Domain.Servicos.ProdutosdaSolicitacaoService(RepositoryService).ListarPorSolicitacao(item.ID.Value);

                            if (produtosSolic.Count > 0)
                            {
                                foreach (var produtoSolic in produtosSolic)
                                {
                                    if (produtoSolic.Produto == null)
                                    {
                                        throw new ArgumentException("Produto da Solicitação não cadastrado.");
                                    }

                                    Product _produto = new Intelbras.CRM2013.Domain.Servicos.ProdutoService(RepositoryService).ObterPor(produtoSolic.Produto.Id);
                                    if (_produto == null)
                                    {
                                        throw new ArgumentException("Produto não encontrado");
                                    }

                                    if (_produto.Segmento == null)
                                    {
                                        throw new ArgumentException("Segmento do Produto " + _produto.Nome + " não preenchido");
                                    }

                                    if (_produto.Segmento.Id == objSegmento.ID.Value)
                                    {
                                        qtdProdutosSegmento += produtoSolic.QuantidadeAprovada.Value;
                                    }
                                }
                            }
                        }
                    }
                    #endregion

                    if (qtdProdutosSegmento > qtdMaxima)
                    {
                        throw new ArgumentException("(CRM) Limite de compras de showroom atingido para este segmento.Operação bloqueada.");
                    }
                }
            }
        }