Пример #1
0
        public async Task <Resposta> CadastraSolicitacaoPagamento(Solicitacao_Pagamento solicitacaoPagamento)
        {
            try
            {
                solicitacaoPagamento.id_fila_solicitacao_pagamento = (int)Enums.FilaSolicitacaoPagamento.AprovacaoGerente;

                validaInformacoes(solicitacaoPagamento, false);

                solicitacaoPagamento.id_tipo_solicitacao_pagamento = (int)Enums.TipoSolicitacaoPagamento.Produtivo;
                solicitacaoPagamento.dt_criacao          = DateTime.Now;
                solicitacaoPagamento.usuario             = this.usuarioNegocio.GetUsuario().id;
                solicitacaoPagamento.dt_atualizacao      = DateTime.Now;
                solicitacaoPagamento.usuario_atualizacao = this.usuarioNegocio.GetUsuario().id;

                await this.UploadArquivoSPLS(solicitacaoPagamento);

                this.dados.Solicitacao_Pagamento.Add(solicitacaoPagamento);

                this.dados.SaveChanges();

                return(this.resposta.SetResposta("Solicitação de Pagamento lançada com sucesso!"));
            }
            catch (NegocioException ex)
            {
                return(this.resposta.SetResposta(ex.Message, false));
            }
            catch (Exception ex)
            {
                return(this.resposta.SetResposta("Erro ao lançar Solicitação de Pagamento", false, ex));
            }
        }
Пример #2
0
        private void validaInformacoes(Solicitacao_Pagamento solicitacaoPagamento, bool fgAtualizacao)
        {
            if (!solicitacaoPagamento.Solicitacao_Pagamento_Detalhe.Any())
            {
                throw new NegocioException("Por favor adicione pelo menos um Item");
            }

            this.validaFornecedor(solicitacaoPagamento.numero_fornecedor.Value);

            if (!fgAtualizacao)
            {
                this.validaNotasFiscaisCadastradas(solicitacaoPagamento.Solicitacao_Pagamento_Detalhe, solicitacaoPagamento.numero_fornecedor.Value);
            }

            this.validaValorTotal(solicitacaoPagamento.Solicitacao_Pagamento_Detalhe, solicitacaoPagamento.valor_total.Value);

            this.validaArquivos(solicitacaoPagamento);

            this.validaArquivosDetalhes(solicitacaoPagamento);

            if (solicitacaoPagamento.Solicitacao_Pagamento_Detalhe.Select(x => x.linha).Distinct().Count() != solicitacaoPagamento.Solicitacao_Pagamento_Detalhe.Count)
            {
                throw new NegocioException("Por favor valide as Linhas dos Itens");
            }

            solicitacaoPagamento.Solicitacao_Pagamento_Detalhe
            .GroupBy(key => new { key.numero_nf }, x =>
            {
                this.validaDatasNotaFiscal(x);

                if (!Util.ValidaCampo(x.linha))
                {
                    throw new NegocioException("Por favor informe a Linha");
                }
                else if (x.linha.ToString().Length < 2 || x.linha.ToString().Substring(x.linha.ToString().Length - 1) != "0")
                {
                    throw new NegocioException("Campo Linha inválido");
                }
                else if (!Util.ValidaCampo(x.valor))
                {
                    throw new NegocioException("Por favor informe o Valor");
                }

                /*else if (!Util.validaCampo(x.categoria_nf)) throw new NegocioException("Por favor informe a Categoria");
                 * else if (Util.validaCampo(x.chave_acesso))
                 * {
                 *  this.validaChaveAcesso(x, solicitacaoPagamento.numero_fornecedor.Value);
                 * }*/

                if (x.dt_vencimento <= DateTime.Now.AddDays(5))
                {
                    solicitacaoPagamento.id_fila_solicitacao_pagamento = (int)Enums.FilaSolicitacaoPagamento.AprovacaoDataVencimento;
                }

                x.dt_criacao     = DateTime.Now;
                x.dt_atualizacao = DateTime.Now;

                return(x);
            }).ToList();
        }
Пример #3
0
        public async Task <Resposta> AtualizaSolicitacaoPagamento(int id, Solicitacao_Pagamento solicitacaoPagamentoAtualizada)
        {
            try
            {
                var solicitacaoPagamento = this.dados.Solicitacao_Pagamento.Where(x => x.id == id).FirstOrDefault().Copy();

                if (solicitacaoPagamento != null)
                {
                    solicitacaoPagamento.id_fila_solicitacao_pagamento = (int)Enums.FilaSolicitacaoPagamento.AprovacaoCarPurchase;
                    solicitacaoPagamento.numero_fornecedor             = solicitacaoPagamentoAtualizada.numero_fornecedor;
                    solicitacaoPagamento.valor_total          = solicitacaoPagamentoAtualizada.valor_total;
                    solicitacaoPagamento.id_diretoria         = solicitacaoPagamentoAtualizada.id_diretoria;
                    solicitacaoPagamento.id_forma_pagamento   = solicitacaoPagamentoAtualizada.id_forma_pagamento;
                    solicitacaoPagamento.dt_atualizacao       = DateTime.Now;
                    solicitacaoPagamento.usuario_atualizacao  = this.usuarioNegocio.GetUsuario().id;
                    solicitacaoPagamento.dt_aprovacao_gerente = null;
                    solicitacaoPagamento.gerente = null;
                    solicitacaoPagamento.dt_aprovacao_diretor = null;
                    solicitacaoPagamento.diretor = null;
                    solicitacaoPagamento.dt_aprovacao_presidente = null;
                    solicitacaoPagamento.presidente   = null;
                    solicitacaoPagamento.dt_pagamento = null;
                    solicitacaoPagamento.obs          = solicitacaoPagamentoAtualizada.obs;

                    solicitacaoPagamento.Solicitacao_Pagamento_Detalhe = solicitacaoPagamentoAtualizada.Solicitacao_Pagamento_Detalhe;
                    solicitacaoPagamento.Documento_Fiscal = solicitacaoPagamentoAtualizada.Documento_Fiscal;

                    validaInformacoes(solicitacaoPagamento, true);

                    await this.UploadArquivoSPLS(solicitacaoPagamento);

                    this.dados.Solicitacao_Pagamento_Detalhe.RemoveRange(this.dados.Solicitacao_Pagamento_Detalhe.Where(x => x.id_solicitacao_pagamento == id).ToArray());

                    this.dados.SaveChanges();

                    if (this.Update(solicitacaoPagamento).Status)
                    {
                        return(this.resposta.SetResposta("Solicitação de Pagamento atualizada com sucesso!"));
                    }
                    else
                    {
                        throw this.resposta.Exception;
                    }
                }
                else
                {
                    return(this.resposta.SetResposta("Solicitação de Pagamento não encontrada", false));
                }
            }
            catch (NegocioException ex)
            {
                return(this.resposta.SetResposta(ex.Message, false));
            }
            catch (Exception ex)
            {
                return(this.resposta.SetResposta("Erro ao atualizar Solicitação de Pagamento", false, ex));
            }
        }
Пример #4
0
        private void validaInformacoes(Solicitacao_Pagamento solicitacaoPagamento, bool fgAtualizacao)
        {
            this.validaFornecedor(solicitacaoPagamento.numero_fornecedor.Value);

            if (!Util.ValidaCampo(solicitacaoPagamento.dt_pagamento))
            {
                throw new NegocioException("Por favor informe a Data de Pagamento");
            }

            this.validaArquivos(solicitacaoPagamento);

            //if (solicitacaoPagamento.dt_pagamento <= DateTime.Now.AddDays(5)) solicitacaoPagamento.id_fila_solicitacao_pagamento = (int)Enums.FilaSolicitacaoPagamento.AprovacaoDataVencimento;
        }
Пример #5
0
        private void validaInformacoes(Solicitacao_Pagamento solicitacaoPagamento, bool fgAtualizacao)
        {
            if (!solicitacaoPagamento.Solicitacao_Pagamento_Detalhe.Any())
            {
                throw new NegocioException("Por favor adicione pelo menos um Item");
            }

            this.validaFornecedor(solicitacaoPagamento.numero_fornecedor.Value);

            if (!fgAtualizacao)
            {
                this.validaNotasFiscaisCadastradas(solicitacaoPagamento.Solicitacao_Pagamento_Detalhe, solicitacaoPagamento.numero_fornecedor.Value);
            }

            this.validaValorTotal(solicitacaoPagamento.Solicitacao_Pagamento_Detalhe, solicitacaoPagamento.valor_total.Value);

            this.validaArquivos(solicitacaoPagamento);

            this.validaArquivosDetalhes(solicitacaoPagamento);

            solicitacaoPagamento.Solicitacao_Pagamento_Detalhe
            .GroupBy(key => new { key.numero_nf }, x =>
            {
                this.validaDatasNotaFiscal(x);

                if (!Util.ValidaCampo(x.categoria_nf))
                {
                    throw new NegocioException("Por favor informe a Categoria");
                }
                else if (!Util.ValidaCampo(x.reused_flag_sn))
                {
                    throw new NegocioException("Por favor informe o campo Reused Flag");
                }
                else if (Util.ValidaCampo(x.chave_acesso))
                {
                    this.validaChaveAcesso(x, solicitacaoPagamento.numero_fornecedor.Value);
                }

                x.categoria_nf = x.categoria_nf.Substring(0, 2);

                if (x.dt_vencimento <= DateTime.Now.AddDays(5))
                {
                    solicitacaoPagamento.id_fila_solicitacao_pagamento = (int)Enums.FilaSolicitacaoPagamento.AprovacaoDataVencimento;
                }

                x.dt_criacao     = DateTime.Now;
                x.dt_atualizacao = DateTime.Now;

                return(x);
            }).ToList();
        }
Пример #6
0
        private void EnviaSolicitacaoPagamentoTriagemALDInvoice(Solicitacao_Pagamento solicitacaoPagamento)
        {
            solicitacaoPagamento.Solicitacao_Pagamento_Detalhe
            .GroupBy(x => x.numero_nf)
            .Select(x =>
            {
                var solicitacaoPagamentoDetalhe = x.FirstOrDefault();

                decimal valorTotal = 0;

                valorTotal += x.Sum(i => i.valor).Value;
                valorTotal += x.Sum(i => i.opcionais_veiculo);
                valorTotal += x.Sum(i => i.acessorios_veiculo);
                valorTotal += x.Sum(i => i.ipva);
                valorTotal += x.Sum(i => i.dpvat);
                valorTotal += x.Sum(i => i.licenciamento);
                valorTotal += x.Sum(i => i.frete);
                valorTotal += x.Sum(i => i.despachante);
                valorTotal += x.Sum(i => i.outros_servicos);
                valorTotal += x.Sum(i => i.nao_rebill_ncva);
                valorTotal += x.Sum(i => i.nao_rebill_cva_material);
                valorTotal += x.Sum(i => i.nao_rebill_cva_servico);

                var notaFiscal = new Controle_NF
                {
                    sp_nr           = solicitacaoPagamento.id,
                    nf_nr           = solicitacaoPagamentoDetalhe.numero_nf,
                    dt_emiss_nf     = solicitacaoPagamentoDetalhe.dt_emissao,
                    dt_rec          = solicitacaoPagamentoDetalhe.dt_recebimento,
                    dt_venc         = solicitacaoPagamentoDetalhe.dt_vencimento,
                    chave_acesso    = solicitacaoPagamentoDetalhe.chave_acesso,
                    chave_acesso_sn = Util.ValidaCampo(solicitacaoPagamentoDetalhe.chave_acesso) ? "S" : "N",
                    dt_rec_tri      = DateTime.Now,
                    ged_agr         = solicitacaoPagamento.id_visual,
                    forn_cnpj       = Util.FormatarCNPJ(solicitacaoPagamento.ALD_ETL_Fornecedores.CNPJ),
                    vlr_bruto       = valorTotal,
                    nf_tipo         = solicitacaoPagamentoDetalhe.categoria_nf,
                    forn_num        = solicitacaoPagamento.ALD_ETL_Fornecedores.Numero,
                    forn_nome       = solicitacaoPagamento.ALD_ETL_Fornecedores.Razao_Social,
                    dt_input        = DateTime.Now,
                    id_fila_nf      = (int)Enums.FilaNF.Triagem,
                    usuario         = solicitacaoPagamento.usuario
                };

                this.dados.Controle_NF.Add(notaFiscal);

                return(x);
            }).ToList();

            this.dados.SaveChanges();
        }
Пример #7
0
        private void validaInformacoes(Solicitacao_Pagamento solicitacaoPagamento, bool fgAtualizacao)
        {
            if (!solicitacaoPagamento.Solicitacao_Pagamento_Detalhe.Any())
            {
                throw new NegocioException("Por favor adicione pelo menos um Item");
            }

            this.validaFornecedor(solicitacaoPagamento.numero_fornecedor.Value);

            if (!fgAtualizacao)
            {
                this.validaNotasFiscaisCadastradas(solicitacaoPagamento.Solicitacao_Pagamento_Detalhe, solicitacaoPagamento.numero_fornecedor.Value);
            }

            this.validaValorTotal(solicitacaoPagamento.Solicitacao_Pagamento_Detalhe, solicitacaoPagamento.valor_total.Value);

            this.validaArquivos(solicitacaoPagamento);

            this.validaArquivosDetalhes(solicitacaoPagamento);

            solicitacaoPagamento.Solicitacao_Pagamento_Detalhe
            .GroupBy(key => new { key.numero_nf }, x =>
            {
                this.validaDatasNotaFiscal(x);

                if (!Util.ValidaCampo(x.valor))
                {
                    throw new NegocioException("Por favor informe o Valor");
                }
                else if (!Util.ValidaCampo(x.categoria_nf))
                {
                    throw new NegocioException("Por favor informe a Categoria");
                }
                else if (Util.ValidaCampo(x.chave_acesso))
                {
                    this.validaChaveAcesso(x, solicitacaoPagamento.numero_fornecedor.Value);
                }

                if (Util.ValidaCampo(x.placa))
                {
                    x.placa = x.placa.ToUpper();

                    List <ALD_ETL_Database> ALD_ETL_Database_lista = this.dados.ALD_ETL_Database.Where(d => d.Placa.ToUpper() == x.placa).ToList();

                    ALD_ETL_Database ALD_ETL_Database;

                    if (!ALD_ETL_Database_lista.Any())
                    {
                        throw new NegocioException("Por favor informe uma Placa válida");
                    }
                    else if (Util.ValidaCampo(x.numero_contrato))
                    {
                        ALD_ETL_Database = ALD_ETL_Database_lista.Where(d => d.Num_contrato == x.numero_contrato).FirstOrDefault();

                        if (ALD_ETL_Database == null)
                        {
                            throw new NegocioException("Número de Contrato não é válido para a Placa informada");
                        }
                    }
                    else
                    {
                        ALD_ETL_Database = ALD_ETL_Database_lista.FirstOrDefault();
                    }

                    ALD_ETL_Database_lista = null;

                    if (ALD_ETL_Database.Tipo_contrato.ToUpper().Trim() == "POO" && !Util.ValidaCampo(x.customer_rebill))
                    {
                        throw new NegocioException("Por favor informe o Customer Rebill");
                    }
                }
                else
                {
                    throw new NegocioException("Por favor informe uma Placa válida");
                }

                if (Util.ValidaCampo(x.crep_code))
                {
                    var ALD_ETL_Crep_Code = this.dados.ALD_ETL_Crep_Code.Where(c => c.CC_Crep_Code_Numero == x.crep_code).FirstOrDefault();

                    if (ALD_ETL_Crep_Code == null)
                    {
                        throw new NegocioException("Por favor informe um Crep Code válido");
                    }

                    else if (ALD_ETL_Crep_Code.CC_Crep_Code_Exige_Quantidade.ToUpper().Trim() == "S" && (!Util.ValidaCampo(x.qtd) || x.qtd == 0))
                    {
                        throw new NegocioException("Por favor informe uma Quantidade válida");
                    }
                    else if (ALD_ETL_Crep_Code.CC_Crep_Code_Exige_Km.ToUpper().Trim() == "S" && (!Util.ValidaCampo(x.km) || x.km == 0))
                    {
                        throw new NegocioException("Por favor informe uma KM válida");
                    }
                }
                else
                {
                    throw new NegocioException("Por favor informe um Crep Code válido");
                }

                if (!Util.ValidaCampo(x.filial))
                {
                    x.filial = "F001";
                }

                x.categoria_nf = x.categoria_nf.Substring(0, 2);

                if (x.dt_vencimento <= DateTime.Now.AddDays(5))
                {
                    solicitacaoPagamento.id_fila_solicitacao_pagamento = (int)Enums.FilaSolicitacaoPagamento.AprovacaoDataVencimento;
                }

                x.dt_criacao     = DateTime.Now;
                x.dt_atualizacao = DateTime.Now;

                return(x);
            }).ToList();
        }