Example #1
0
 private void GerarRemessa(TRegistro_CargaAvulsa rCarga)
 {
     CamadaDados.Diversos.TList_CfgEmpresa lCfgEmpresa =
         CamadaNegocio.Diversos.TCN_CfgEmpresa.Buscar(rCarga.Cd_empresa, null);
     if (lCfgEmpresa.Count.Equals(0))
     {
         MessageBox.Show("Não existe configuração parâmetro Empresa: " + rCarga.Cd_empresa, "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
         return;
     }
     CamadaDados.Faturamento.Pedido.TRegistro_Pedido rPed = null;
     try
     {
         Proc_Commoditties.TProcessaPedidoCargaAvulsa.GerarPedidoCarga(ref rPed,
                                                                       rCarga,
                                                                       lCfgEmpresa[0]);
         CamadaNegocio.Faturamento.Pedido.TCN_Pedido.Grava_Pedido(rPed, null);
         //Buscar pedido
         rPed = CamadaNegocio.Faturamento.Pedido.TCN_Pedido.Busca_Registro_Pedido(rPed.Nr_pedido.ToString(), null);
         //Buscar itens pedido
         CamadaNegocio.Faturamento.Pedido.TCN_Pedido.Busca_Pedido_Itens(rPed, false, null);
         for (int i = 0; i < rCarga.lItens.Count; i++)
         {
             rPed.Pedido_Itens[i].lItensCargaAvulsa.Add(rCarga.lItens[i]);
         }
         //Gerar Nota Fiscal
         TRegistro_LanFaturamento rFat =
             Proc_Commoditties.TProcessaPedFaturar.ProcessaPedFaturar(rPed, false, decimal.Zero);
         //Gravar Nota Fiscal
         TCN_LanFaturamento.GravarFaturamento(rFat, null, null);
         using (srvNFE.TFGerenciarNFe fGerNfe = new srvNFE.TFGerenciarNFe())
         {
             fGerNfe.rNfe = CamadaNegocio.Faturamento.NotaFiscal.TCN_LanFaturamento.BuscarNF(rFat.Cd_empresa,
                                                                                             rFat.Nr_lanctofiscalstr,
                                                                                             null);
             fGerNfe.ShowDialog();
         }
     }
     catch (Exception ex)
     {
         if (rPed != null)
         {
             CamadaNegocio.Faturamento.Pedido.TCN_Pedido.Deleta_Pedido(rPed, null);
         }
         MessageBox.Show(ex.Message.Trim(), "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }
Example #2
0
 public static void DevolverNF(TRegistro_LanFaturamento val)
 {
     if (val != null)
     {
         //Verificar se Nf é de devolução
         if (new TCD_LanFat_ComplementoDevolucao().BuscarEscalar(
                 new TpBusca[]
         {
             new TpBusca()
             {
                 vNM_Campo = "a.cd_empresa",
                 vOperador = "=",
                 vVL_Busca = "'" + val.Cd_empresa.Trim() + "'"
             },
             new TpBusca()
             {
                 vNM_Campo = "a.NR_LanctoFiscal_Destino",
                 vOperador = "=",
                 vVL_Busca = val.Nr_lanctofiscalstr
             }
         }, "1") != null)
         {
             MessageBox.Show("Não é possivel devolver NF Devolução!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
             return;
         }
         using (TFDevolverNF fDev = new TFDevolverNF())
         {
             fDev.rNf = val;
             if (fDev.ShowDialog() == DialogResult.OK)
             {
                 if (fDev.rNf != null)
                 {
                     try
                     {
                         TRegistro_LanFaturamento rFat = GerarDevolucao(fDev.rNf);
                         TCN_LanFaturamento.GravarFaturamento(rFat, null, null);
                         //Enviar NFe Destino
                         if (rFat != null)
                         {
                             //Buscar nota fiscal de destino
                             TRegistro_LanFaturamento rNf =
                                 TCN_LanFaturamento.BuscarNF(rFat.Cd_empresa,
                                                             rFat.Nr_lanctofiscalstr,
                                                             null);
                             //Se for nota propria e NF-e
                             if (rNf.Tp_nota.Trim().ToUpper().Equals("P") && rNf.Cd_modelo.Trim().Equals("55"))
                             {
                                 if (MessageBox.Show("Deseja enviar NF-e Devolução para a receita agora?", "Pergunta", MessageBoxButtons.YesNo,
                                                     MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
                                 {
                                     try
                                     {
                                         using (srvNFE.TFGerenciarNFe fGerNfe = new srvNFE.TFGerenciarNFe())
                                         {
                                             fGerNfe.rNfe = rNf;
                                             fGerNfe.ShowDialog();
                                         }
                                     }
                                     catch (Exception ex)
                                     { MessageBox.Show("Erro enviar NF-e: " + ex.Message.Trim(), "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); }
                                 }
                             }
                         }
                     }
                     catch (Exception ex)
                     { MessageBox.Show(ex.Message.Trim(), "erro", MessageBoxButtons.OK, MessageBoxIcon.Error); }
                 }
             }
         }
     }
 }
Example #3
0
        public static void GravarDevAquisicao(TRegistro_DevAquisicao val,
                                              BancoDados.TObjetoBanco banco)
        {
            bool st_transacao = false;

            if (banco == null)
            {
                banco = new BancoDados.TObjetoBanco();
                banco.CriarConexao(Parametros.pubLogin, Parametros.pubNM_Servidor, Parametros.pubNM_BancoDados);
                banco.CriarComando();
                banco.Conexao.Open();
                banco.Start_Tran(System.Data.IsolationLevel.ReadCommitted);
                banco.Comando.Transaction = banco.Transac;
                st_transacao = true;
            }
            try
            {
                #region Nota_Fiscal_Origem
                val.rNfOrigem.Nr_pedido            = val.Contrato_devolucao[0].Nr_pedido;
                val.rNfOrigem.Cd_clifor            = val.Contrato_Origem.Cd_clifor;
                val.rNfOrigem.Cd_cmi               = val.Contrato_Origem.Pedido_Fiscal[0].Cd_cmi;
                val.rNfOrigem.Cd_cmistring         = val.Contrato_Origem.Pedido_Fiscal[0].Cd_cmistring;;
                val.rNfOrigem.Cd_condfiscal_clifor = string.Empty;
                val.rNfOrigem.Cd_condpgto          = val.Contrato_Origem.CD_CondPGTO;
                val.rNfOrigem.Cd_empresa           = val.Contrato_Origem.Cd_empresa;
                val.rNfOrigem.Cd_endereco          = val.Contrato_Origem.Cd_endereco;
                val.rNfOrigem.Cd_modelo            = val.Contrato_Origem.Pedido_Fiscal[0].Cd_modelo;
                val.rNfOrigem.Cd_movimentacao      = val.Contrato_Origem.Pedido_Fiscal[0].Cd_movto;

                if (val.Duplicata_Origem.Count > 0)
                {
                    val.rNfOrigem.Duplicata = val.Duplicata_Origem;
                }

                //Criar itens da nota fiscal
                TRegistro_LanFaturamento_Item Reg_Itens_Nota = new TRegistro_LanFaturamento_Item();
                Reg_Itens_Nota.Cd_produto    = val.Contrato_devolucao[0].Cd_produto;
                Reg_Itens_Nota.lNfcompdev    = val.Devolucao;
                Reg_Itens_Nota.Quantidade    = val.Quantidade;
                Reg_Itens_Nota.Vl_unitario   = val.Vl_unit_origem;
                Reg_Itens_Nota.Cd_local      = val.Contrato_devolucao[0].CD_Local;
                Reg_Itens_Nota.Vl_subtotal   = val.Vl_subtotal_origem;
                Reg_Itens_Nota.Id_pedidoitem = val.Contrato_Origem.Id_pedidoitem.Value;
                Reg_Itens_Nota.Nr_pedido     = val.Contrato_Origem.Nr_pedido.Value;
                CamadaDados.Fiscal.TRegistro_CadCFOP rCfop = null;
                if (CamadaNegocio.Fiscal.TCN_Mov_X_CFOP.BuscarCFOP(val.rNfOrigem.Cd_movimentacaostring,
                                                                   val.Contrato_devolucao[0].Cd_condfiscal_produto,
                                                                   val.Contrato_Origem.CD_UFClifor.Trim().Equals("99") ? "I" :
                                                                   val.Contrato_Origem.CD_UFClifor.Trim().Equals(val.Reg_Empresa_Origem.rEndereco.Cd_uf.Trim()) ? "D" : "F",
                                                                   val.Reg_Empresa_Origem.rEndereco.Cd_uf,
                                                                   val.Contrato_Origem.CD_UFClifor,
                                                                   val.rNfOrigem.Tp_movimento,
                                                                   val.Reg_Clifor_Origem.Cd_condfiscal_clifor,
                                                                   val.Reg_Empresa_Origem.Cd_empresa,
                                                                   ref rCfop,
                                                                   banco))
                {
                    Reg_Itens_Nota.Cd_cfop        = rCfop.CD_CFOP;
                    Reg_Itens_Nota.Ds_cfop        = rCfop.DS_CFOP;
                    Reg_Itens_Nota.St_bonificacao = rCfop.St_bonificacaobool;
                }
                else
                {
                    throw new Exception("Não existe CFOP " + (val.Contrato_Origem.CD_UFClifor.Trim().Equals("99") ? "internacional" :
                                                              val.Contrato_Origem.CD_UFClifor.Trim().Equals(val.Reg_Empresa_Origem.rEndereco.Cd_uf.Trim()) ? "dentro estado" : "fora estado") + " configurado para a Movimentação " + val.rNfOrigem.Cd_movimentacaostring + " condição fiscal do produto " + val.Contrato_devolucao[0].Cd_condfiscal_produto);
                }

                Reg_Itens_Nota.Cd_unidade = val.Contrato_Origem.Cd_unidade;
                Reg_Itens_Nota.Cd_unidEst = val.Contrato_Origem.Cd_unid_produto;
                //Procurar Impostos Estaduais para o Item
                string           vObsFiscal = string.Empty;
                TList_ImpostosNF lImpostos  = TCN_LanFaturamento_Item.procuraImpostosPorUf(val.Reg_Empresa_Origem.Cd_empresa,
                                                                                           val.Reg_Empresa_Origem.rEndereco.Cd_uf,
                                                                                           val.Contrato_Origem.CD_UFClifor,
                                                                                           val.Contrato_Origem.Pedido_Fiscal[0].Cd_movtostring,
                                                                                           val.rNfOrigem.Tp_movimento,
                                                                                           val.Reg_Clifor_Origem.Cd_condfiscal_clifor,
                                                                                           val.Reg_Produto_Origem.CD_CondFiscal_Produto,
                                                                                           val.Vl_subtotal_origem,
                                                                                           val.Quantidade,
                                                                                           ref vObsFiscal,
                                                                                           val.rNfOrigem.Dt_emissao,
                                                                                           val.Reg_Produto_Origem.CD_Produto,
                                                                                           val.rNfOrigem.Tp_nota,
                                                                                           val.rNfOrigem.Nr_serie,
                                                                                           banco);
                if (lImpostos.Count > 0)
                {
                    TCN_LanFaturamento_Item.PreencherICMS(lImpostos[0], Reg_Itens_Nota);
                    val.rNfOrigem.Obsfiscal += string.IsNullOrEmpty(val.rNfOrigem.Obsfiscal) ? vObsFiscal.Trim() : "\r\n" + vObsFiscal.Trim();
                }
                else if (TCN_LanFaturamento_Item.ObrigImformarICMS(val.Reg_Produto_Destino.CD_Produto, val.rNfOrigem.Nr_serie, banco))
                {
                    throw new Exception("Não existe condição fiscal para o imposto ICMS: \r\n" +
                                        "Tipo Movimento: " + (val.rNfOrigem.Tp_movimento.Trim().ToUpper().Equals("E") ? "ENTRADA" : "SAIDA") + "\r\n" +
                                        "Movimentação Comercial: " + val.Contrato_Origem.Pedido_Fiscal[0].Cd_movtostring + " - " + val.Contrato_Origem.Pedido_Fiscal[0].Ds_movimentacao + "\r\n" +
                                        "Condição Fiscal Clifor: " + val.Reg_Clifor_Origem.Cd_condfiscal_clifor + "\r\n" +
                                        "Condição Fiscal Produto: " + val.Reg_Produto_Origem.CD_CondFiscal_Produto + "\r\n" +
                                        "UF Origem: " + val.Reg_Empresa_Origem.rEndereco.Cd_uf + "\r\n" +
                                        "UF Destino: " + val.Contrato_Origem.CD_UFClifor);
                }

                //Procurar impostos sobre os itens da nota fiscal de origem
                TCN_LanFaturamento_Item.PreencherOutrosImpostos(
                    TCN_LanFaturamento_Item.procuraCondicaoFiscalImpostos(val.Reg_Clifor_Origem.Cd_condfiscal_clifor,
                                                                          val.Reg_Produto_Origem.CD_CondFiscal_Produto,
                                                                          val.Contrato_Origem.Pedido_Fiscal[0].Cd_movtostring,
                                                                          val.rNfOrigem.Tp_movimento,
                                                                          val.Reg_Clifor_Origem.Tp_pessoa,
                                                                          val.Contrato_devolucao[0].CD_Empresa,
                                                                          val.Contrato_Origem.Pedido_Fiscal[0].Nr_serie,
                                                                          val.Reg_Clifor_Origem.Cd_clifor,
                                                                          val.Reg_Produto_Origem.CD_Unidade,
                                                                          val.Dt_lancto,
                                                                          Reg_Itens_Nota.Quantidade,
                                                                          Reg_Itens_Nota.Vl_subtotal,
                                                                          val.rNfOrigem.Tp_nota,
                                                                          string.Empty,
                                                                          banco), Reg_Itens_Nota, val.rNfOrigem.Tp_movimento);
                //Gerar observacao para o item
                //Observação do Item com os dados das notas de origem
                string obsitem = string.Empty;
                val.Devolucao.ForEach(p =>
                {
                    obsitem += (p.Nr_notafiscal_origem.ToString() + "/" + p.Nr_serie_origem).FormatStringDireita(21, ' ') +
                               (p.Qtd_lancto.ToString("N3", new System.Globalization.CultureInfo("en-US", true)) +
                                Reg_Itens_Nota.Sigla_unidade_estoque.Trim()).FormatStringDireita(15, ' ') +
                               p.Vl_lancto.ToString("N2", new System.Globalization.CultureInfo("en-US", true)).FormatStringDireita(12, ' ') + "\r\n";
                });
                Reg_Itens_Nota.Observacao_item += "NF/Serie Origem      Quantidade     Valor(R$)\r\n" + obsitem;
                //Adicionar item a nota fiscal de origem
                val.rNfOrigem.ItensNota.Add(Reg_Itens_Nota);
                //Gravar nota fiscal de origem
                TCN_LanFaturamento.GravarFaturamento(val.rNfOrigem, null, banco);
                val.Contrato_devolucao[0].NR_LanctoFiscal = val.rNfOrigem.Nr_lanctofiscal.Value;
                #endregion

                #region Nota_Fiscal_Destino
                val.rNfDestino.Nr_pedido       = val.Contrato_compra[0].Nr_pedido;
                val.rNfDestino.Cd_clifor       = val.Contrato_Destino.Cd_clifor;
                val.rNfDestino.Cd_cmi          = val.Contrato_Destino.Pedido_Fiscal[0].Cd_cmi;
                val.rNfDestino.Cd_cmistring    = val.Contrato_Destino.Pedido_Fiscal[0].Cd_cmistring;;
                val.rNfDestino.Cd_condpgto     = val.Contrato_Destino.CD_CondPGTO;
                val.rNfDestino.Cd_empresa      = val.Contrato_Destino.Cd_empresa;
                val.rNfDestino.Cd_endereco     = val.Contrato_Destino.Cd_endereco;
                val.rNfDestino.Cd_modelo       = val.Contrato_Destino.Pedido_Fiscal[0].Cd_modelo;
                val.rNfDestino.Cd_movimentacao = val.Contrato_Destino.Pedido_Fiscal[0].Cd_movto;
                if (val.Duplicata_Destino.Count > 0)
                {
                    val.rNfDestino.Duplicata = val.Duplicata_Destino;
                }

                //Registro item da nota fiscal de destino
                TRegistro_LanFaturamento_Item Reg_Itens_Nota_Destino = new TRegistro_LanFaturamento_Item();
                if (val.Contrato_compra[0].CD_Unidade_Est.Equals(val.Contrato_devolucao[0].CD_Unidade_Est))
                {
                    Reg_Itens_Nota_Destino.Quantidade = val.Quantidade;
                }
                else
                {
                    Reg_Itens_Nota_Destino.Quantidade = TCN_CadConvUnidade.ConvertUnid(val.Contrato_compra[0].CD_Unidade_Est, val.Contrato_devolucao[0].CD_Unidade_Est, val.Quantidade, 3, banco);
                }
                Reg_Itens_Nota_Destino.Cd_produto    = val.Contrato_compra[0].Cd_produto;
                Reg_Itens_Nota_Destino.Vl_unitario   = val.Vl_unit_destino;
                Reg_Itens_Nota_Destino.Cd_local      = val.Contrato_compra[0].CD_Local;
                Reg_Itens_Nota_Destino.Vl_subtotal   = val.Vl_subtotal_destino;
                Reg_Itens_Nota_Destino.Id_pedidoitem = val.Contrato_Destino.Id_pedidoitem;
                Reg_Itens_Nota_Destino.Nr_pedido     = val.Contrato_Destino.Nr_pedido.Value;
                rCfop = null;
                if (CamadaNegocio.Fiscal.TCN_Mov_X_CFOP.BuscarCFOP(val.rNfDestino.Cd_movimentacaostring,
                                                                   val.Contrato_compra[0].Cd_condfiscal_produto,
                                                                   val.Contrato_Destino.CD_UFClifor.Trim().Equals("99") ? "I":
                                                                   val.Contrato_Destino.CD_UFClifor.Trim().Equals(val.Reg_Empresa_Destino.rEndereco.Cd_uf.Trim()) ? "D" : "F",
                                                                   val.Reg_Empresa_Destino.rEndereco.Cd_uf,
                                                                   val.Contrato_Destino.CD_UFClifor,
                                                                   val.rNfDestino.Tp_movimento,
                                                                   val.Reg_Clifor_Destino.Cd_condfiscal_clifor,
                                                                   val.Reg_Empresa_Destino.Cd_empresa,
                                                                   ref rCfop,
                                                                   banco))
                {
                    Reg_Itens_Nota_Destino.Cd_cfop        = rCfop.CD_CFOP;
                    Reg_Itens_Nota_Destino.Ds_cfop        = rCfop.DS_CFOP;
                    Reg_Itens_Nota_Destino.St_bonificacao = rCfop.St_bonificacaobool;
                }
                else
                {
                    throw new Exception("Não existe CFOP " + (val.Contrato_Destino.CD_UFClifor.Trim().Equals("99") ? "internacional" : val.Contrato_Destino.CD_UFClifor.Trim().Equals(val.Reg_Empresa_Destino.rEndereco.Cd_uf.Trim()) ? "dentro estado" : "fora estado") + " configurado para a Movimentação " + val.rNfDestino.Cd_movimentacaostring + " condição fiscal do produto " + val.Contrato_compra[0].Cd_condfiscal_produto);
                }
                Reg_Itens_Nota_Destino.Cd_unidade = val.Contrato_Destino.Cd_unidade;
                Reg_Itens_Nota_Destino.Cd_unidEst = val.Contrato_Destino.Cd_unid_produto;
                //Procurar Impostos Estaduais para o Item
                vObsFiscal = string.Empty;
                TList_ImpostosNF lImpUf = TCN_LanFaturamento_Item.procuraImpostosPorUf(val.Reg_Empresa_Destino.Cd_empresa,
                                                                                       val.Reg_Empresa_Destino.rEndereco.Cd_uf,
                                                                                       val.Contrato_Destino.CD_UFClifor,
                                                                                       val.Contrato_Destino.Pedido_Fiscal[0].Cd_movtostring,
                                                                                       val.rNfDestino.Tp_movimento,
                                                                                       val.Reg_Clifor_Destino.Cd_condfiscal_clifor,
                                                                                       val.Reg_Produto_Destino.CD_CondFiscal_Produto,
                                                                                       val.Vl_subtotal_destino,
                                                                                       val.Quantidade,
                                                                                       ref vObsFiscal,
                                                                                       val.rNfDestino.Dt_emissao,
                                                                                       val.Reg_Produto_Destino.CD_Produto,
                                                                                       val.rNfDestino.Tp_nota,
                                                                                       val.rNfDestino.Nr_serie,
                                                                                       banco);
                if (lImpUf.Exists(v => v.Imposto.St_ICMS))
                {
                    TCN_LanFaturamento_Item.PreencherICMS(lImpUf.Find(v => v.Imposto.St_ICMS), Reg_Itens_Nota_Destino);
                    val.rNfDestino.Obsfiscal += string.IsNullOrEmpty(val.rNfDestino.Obsfiscal) ? vObsFiscal.Trim() : "\r\n" + vObsFiscal.Trim();
                }
                else if (TCN_LanFaturamento_Item.ObrigImformarICMS(val.Reg_Produto_Destino.CD_Produto, val.rNfDestino.Nr_serie, banco))
                {
                    throw new Exception("Não existe configuração fiscal para o imposto ICMS: \r\n" +
                                        "Tipo Movimento: " + (val.rNfDestino.Tp_movimento.Trim().ToUpper().Equals("E") ? "ENTRADA" : "SAIDA") + "\r\n" +
                                        "Movimentação Comercial: " + val.Contrato_Destino.Pedido_Fiscal[0].Cd_movtostring + " - " + val.Contrato_Destino.Pedido_Fiscal[0].Ds_movimentacao + "\r\n" +
                                        "Condição Fiscal Clifor: " + val.Reg_Clifor_Destino.Cd_condfiscal_clifor + "\r\n" +
                                        "Condição Fiscal Produto: " + val.Reg_Produto_Destino.CD_CondFiscal_Produto + "\r\n" +
                                        "UF Origem: " + val.Reg_Empresa_Destino.rEndereco.Cd_uf + "\r\n" +
                                        "UF Destino: " + val.Contrato_Destino.CD_UFClifor);
                }

                //Procurar impostos sobre os itens da nota fiscal de destino
                TCN_LanFaturamento_Item.PreencherOutrosImpostos(
                    TCN_LanFaturamento_Item.procuraCondicaoFiscalImpostos(val.Reg_Clifor_Destino.Cd_condfiscal_clifor,
                                                                          val.Reg_Produto_Destino.CD_CondFiscal_Produto,
                                                                          val.Contrato_Destino.Pedido_Fiscal[0].Cd_movtostring,
                                                                          val.rNfDestino.Tp_movimento,
                                                                          val.Reg_Clifor_Destino.Tp_pessoa,
                                                                          val.Contrato_compra[0].CD_Empresa,
                                                                          val.Contrato_Destino.Pedido_Fiscal[0].Nr_serie,
                                                                          val.Reg_Clifor_Destino.Cd_clifor,
                                                                          val.Reg_Produto_Destino.CD_Unidade,
                                                                          val.Dt_lancto,
                                                                          Reg_Itens_Nota_Destino.Quantidade,
                                                                          Reg_Itens_Nota_Destino.Vl_subtotal,
                                                                          val.rNfDestino.Tp_nota,
                                                                          string.Empty,
                                                                          banco), Reg_Itens_Nota_Destino, val.rNfDestino.Tp_movimento);
                val.rNfDestino.ItensNota.Add(Reg_Itens_Nota_Destino);
                //Gravar Nota Fiscal Destino
                TCN_LanFaturamento.GravarFaturamento(val.rNfDestino, null, banco);
                val.Contrato_compra[0].NR_LanctoFiscal = val.rNfDestino.Nr_lanctofiscal.Value;
                #endregion

                if (st_transacao)
                {
                    banco.Transac.Commit();
                }
            }
            catch (Exception ex)
            {
                if (st_transacao)
                {
                    banco.Transac.Rollback();
                }
                throw new Exception("Erro gravar devolução/aquisição: " + ex.Message.Trim());
            }
            finally
            {
                if (st_transacao)
                {
                    if (banco.Conexao.State == System.Data.ConnectionState.Open)
                    {
                        banco.Conexao.Close();
                    }
                    banco = null;
                }
            }
        }
Example #4
0
        public static string GravarAplicacaoPedido(string CD_Empresa,
                                                   decimal saldoAplicar,
                                                   TRegistro_LanFaturamento rNotaFiscal,
                                                   TObjetoBanco banco)
        {
            TCD_LanAplicacaoPedido qtb_aplic = new TCD_LanAplicacaoPedido();
            bool pode_liberar = false;

            try
            {
                //Start Transação
                if (banco == null)
                {
                    pode_liberar = qtb_aplic.CriarBanco_Dados(true);
                }
                else
                {
                    qtb_aplic.Banco_Dados = banco;
                }

                //Gravar Notas Fiscais da Aplicacao
                if (rNotaFiscal == null)
                {
                    throw new Exception("Erro processar aplicação. Não existe nota para processar.");
                }

                if ((rNotaFiscal.Nr_pedido == null) || (rNotaFiscal.Nr_pedido == 0))
                {
                    throw new Exception("ERRO: Não existe pedido informado para a nota fiscal " + rNotaFiscal.Nr_notafiscal.ToString());
                }

                rNotaFiscal.ItensNota.ForEach(p =>
                {
                    if (p.Nr_pedido.Equals(0))
                    {
                        throw new Exception("ERRO: Não existe pedido informado para o item: " + p.Cd_produto.Trim() + "-" + p.Ds_produto.Trim() + " da nota fiscal " + rNotaFiscal.Nr_notafiscal.ToString());
                    }

                    if ((p.Id_pedidoitem == null) || (p.Id_pedidoitem == 0))
                    {
                        throw new Exception("ERRO: Não existe item de pedido informado para o item: " + p.Cd_produto.Trim() + "-" + p.Ds_produto.Trim() + " da nota fiscal " + rNotaFiscal.Nr_notafiscal.ToString());
                    }

                    TRegistro_EntregaPedido rgent = new TRegistro_EntregaPedido()
                    {
                        Id_entrega    = null,
                        Nr_pedido     = p.Nr_pedido,
                        Cd_produto    = p.Cd_produto,
                        Id_pedidoitem = p.Id_pedidoitem,
                        Qtd_entregue  = p.Quantidade_estoque > 0 ? p.Quantidade_estoque : p.Quantidade,
                        Dt_entrega    = rNotaFiscal.Dt_saient,
                        Ds_observacao = "ENTREGA GRAVADA AUTOMATICAMENTE PELA APLICACAO"
                    };

                    rgent.Id_entregastr = TCN_LanEntregaPedido.Gravar(rgent, qtb_aplic.Banco_Dados);

                    //ADICIONAR A ENTREGA NA NOTAITEM PARA SER UTILIZADA NO PROCESSAMENTO DA NOTA
                    //QUANDO FOR APLICACAO A ENTREGA A SER CUMPRIDA OBRIGATORIAMENTE SERA A GRAVADA ACIMA E NAO OUTRAS COM SALDO DISPONIVEL
                    p.lEntrega = new TList_EntregaPedido();
                    p.lEntrega.Add(rgent);
                });

                //Grava Nota Fiscal
                //gravar taxas de deposito separado da nota
                string retorno = TCN_LanFaturamento.GravarFaturamento(rNotaFiscal, false, null, qtb_aplic.Banco_Dados);
                //Para cada item da nota fiscal, gravar um registro aplicacao
                rNotaFiscal.ItensNota.ForEach(p =>
                {
                    if (p.rEstoque == null)
                    {
                        throw new Exception("Aplicação não pode ser processada. Não foi possivel gerar estoque.");
                    }
                    p.lTicketAplicar.ForEach(v =>
                    {
                        TRegistro_LanAplicacaoPedido val = new TRegistro_LanAplicacaoPedido();
                        //Gravar Aplicação
                        val.Cd_empresa           = p.Cd_empresa;
                        val.Id_ticket            = v.Id_ticket.Value;
                        val.Tp_pesagem           = v.Tp_pesagem;
                        val.Nr_pedido            = p.Nr_pedido;
                        val.Cd_produto           = p.Cd_produto;
                        val.Id_pedidoitem        = p.Id_pedidoitem.Value;
                        val.Id_lanctoestoque     = p.rEstoque.Id_lanctoestoque;
                        val.Qtd_aplicado         = v.Ps_Aplicar;
                        val.Vl_unitario          = TCN_CadConvUnidade.ConvertUnid(v.Cd_unid_produto, v.Cd_unid_contrato, v.Vl_unit_contrato, 7, qtb_aplic.Banco_Dados);
                        val.Vl_subtotal          = Math.Round(v.Ps_Aplicar * val.Vl_unitario, 2);
                        val.Id_aplicacao         = null;
                        val.Id_autoriz           = v.Id_autoriz;
                        string retorno_aplicacao = qtb_aplic.Gravar(val);
                        retorno          = retorno + "|" + retorno_aplicacao;
                        val.Id_aplicacao = Convert.ToDecimal(CamadaDados.TDataQuery.getPubVariavel(retorno_aplicacao, "@P_ID_APLICACAO"));
                        //Gravar Aplicação X Nota Fiscal
                        retorno = retorno + "|" + TCN_LanAplicacao_NotaFiscal.GravarAplicacaoXNotaFiscal(
                            new TRegistro_LanAplicacao_NotaFiscal()
                        {
                            Cd_empresa      = val.Cd_empresa,
                            Id_aplicacao    = val.Id_aplicacao,
                            Id_nfitem       = p.Id_nfitem,
                            Nr_lanctofiscal = p.Nr_lanctofiscal
                        }, qtb_aplic.Banco_Dados);
                    });
                    //Gravar Movimento Deposito
                    TCN_MovDeposito.GravarMovDeposito(new TRegistro_MovDeposito()
                    {
                        Id_Movto         = 0,
                        Nr_Pedido        = p.Nr_pedido,
                        CD_Produto       = p.Cd_produto,
                        CD_Empresa       = p.Cd_empresa,
                        Id_LanctoEstoque = p.rEstoque.Id_lanctoestoque,
                        Id_pedidoitem    = p.Id_pedidoitem.Value
                    }, qtb_aplic.Banco_Dados);
                    //Gravar Pesagem GMO
                    CamadaNegocio.Graos.TCN_LanRoyaltiesGMO.GravaPesagemGMO(p, rNotaFiscal.Tp_movimento, qtb_aplic.Banco_Dados);
                    //Contrato Entrada a Fixar
                    TRegistro_CadCFGPedido rCfg = new TCD_CadCFGPedido(qtb_aplic.Banco_Dados).Select(
                        new TpBusca[]
                    {
                        new TpBusca()
                        {
                            vNM_Campo = string.Empty,
                            vOperador = "exists",
                            vVL_Busca = "(select 1 from tb_fat_pedido x " +
                                        "where x.cfg_pedido = a.cfg_pedido " +
                                        "and x.nr_pedido = " + p.Nr_pedido.ToString() + ")"
                        }
                    }, 1, string.Empty)[0];
                });
                if (pode_liberar)
                {
                    qtb_aplic.Banco_Dados.Commit_Tran();
                }
                return(retorno);
            }
            catch (Exception ex)
            {
                if (pode_liberar)
                {
                    qtb_aplic.Banco_Dados.RollBack_Tran();
                }
                throw new Exception("Erro gravar aplicação: " + ex.Message.Trim());
            }
            finally
            {
                if (pode_liberar)
                {
                    qtb_aplic.deletarBanco_Dados();
                }
            }
        }
Example #5
0
        public static string GravarFixacao(TRegistro_LanFixacao val, BancoDados.TObjetoBanco banco)
        {
            bool           st_transacao = false;
            TCD_LanFixacao qtb_fixacao  = new TCD_LanFixacao();

            try
            {
                if (banco == null)
                {
                    st_transacao = qtb_fixacao.CriarBanco_Dados(true);
                }
                else
                {
                    qtb_fixacao.Banco_Dados = banco;
                }
                //Gravar fixacao
                string retorno = qtb_fixacao.Gravar(val);
                val.Id_fixacao = Convert.ToDecimal(CamadaDados.TDataQuery.getPubVariavel(retorno, "@P_ID_FIXACAO"));
                //Gravar Fixacao X Contrato
                TCN_Fixacao_X_Contrato.Gravar(new TRegistro_Fixacao_X_Contrato()
                {
                    Id_fixacao  = val.Id_fixacao,
                    Nr_contrato = val.Nr_contrato,
                }, qtb_fixacao.Banco_Dados);
                //Gravar nota fiscal de complemento
                val.lFixacaonf.ForEach(p =>
                {
                    if (p.rNfComplemento != null)
                    {
                        TCN_LanFaturamento.GravarFaturamento(p.rNfComplemento, null, qtb_fixacao.Banco_Dados);
                        //Gravar Fixacao NF Complemento
                        TRegistro_Fixacao_NF rFComp = new TRegistro_Fixacao_NF();
                        rFComp.Id_fixacao           = val.Id_fixacao;
                        rFComp.Id_fixacaonf         = null;
                        rFComp.Cd_empresa           = p.rNfComplemento.Cd_empresa;
                        rFComp.Nr_lanctofiscal      = p.rNfComplemento.Nr_lanctofiscal;
                        rFComp.Id_nfitem            = p.rNfComplemento.ItensNota[0].Id_nfitem;
                        rFComp.Qtd_fixacao          = p.Qtd_fixacao;
                        rFComp.Vl_complemento       = decimal.Zero;
                        rFComp.Vl_devolucao         = decimal.Zero;
                        rFComp.Vl_fixacao           = p.Vl_fixacao;
                        rFComp.Tp_nota = "C";
                        TCN_Fixacao_NF.GravarFixacaoNf(rFComp, qtb_fixacao.Banco_Dados);
                    }
                    //Gravar Fixacao NF Pauta
                    p.Tp_nota    = "P";
                    p.Id_fixacao = val.Id_fixacao;
                    TCN_Fixacao_NF.GravarFixacaoNf(p, qtb_fixacao.Banco_Dados);
                });
                //Gravar Nota Fiscal de Devolucao
                if (val.rNfDev != null)
                {
                    TCN_LanFaturamento.GravarFaturamento(val.rNfDev, null, qtb_fixacao.Banco_Dados);
                    TRegistro_Fixacao_NF rFDev = new TRegistro_Fixacao_NF();
                    rFDev.Id_fixacao      = val.Id_fixacao;
                    rFDev.Id_fixacaonf    = null;
                    rFDev.Cd_empresa      = val.rNfDev.Cd_empresa;
                    rFDev.Nr_lanctofiscal = val.rNfDev.Nr_lanctofiscal;
                    rFDev.Id_nfitem       = val.rNfDev.ItensNota[0].Id_nfitem;
                    rFDev.Qtd_fixacao     = val.lFixacaonf.Where(p => p.Vl_devolucao > decimal.Zero).Sum(p => p.Qtd_fixacao);
                    rFDev.Vl_complemento  = decimal.Zero;
                    rFDev.Vl_devolucao    = decimal.Zero;
                    rFDev.Vl_fixacao      = val.lFixacaonf.Where(p => p.Vl_devolucao > decimal.Zero).Sum(p => p.Vl_fixacao);
                    rFDev.Tp_nota         = "D";
                    //Gravar Fixacao NF Devolucao
                    TCN_Fixacao_NF.GravarFixacaoNf(rFDev, qtb_fixacao.Banco_Dados);
                    val.lFixacaonf.ForEach(p =>
                    {
                        //Gravar Fixacao NF Pauta
                        p.Tp_nota    = "P";
                        p.Id_fixacao = val.Id_fixacao;
                        TCN_Fixacao_NF.GravarFixacaoNf(p, qtb_fixacao.Banco_Dados);
                    });
                }
                //Gravar Financeiro Fixacao
                if (val.rDup != null)
                {
                    val.rDup.Nr_docto = "RAP" + val.Id_fixacao.Value.ToString();
                    Financeiro.Duplicata.TCN_LanDuplicata.GravarDuplicata(val.rDup, false, qtb_fixacao.Banco_Dados);
                    //Gravar Fixacao X Duplicata
                    TCN_Fixacao_X_Duplicata.Gravar(new TRegistro_Fixacao_X_Duplicata()
                    {
                        Id_fixacao = val.Id_fixacao,
                        Cd_empresa = val.rDup.Cd_empresa,
                        Nr_lancto  = val.rDup.Nr_lancto
                    }, qtb_fixacao.Banco_Dados);
                    if (ConfigGer.TCN_CadParamGer.BuscaVL_Bool("ST_CONTROLAR_GMO", val.rDup.Cd_empresa, qtb_fixacao.Banco_Dados).Trim().ToUpper().Equals("S"))
                    {
                        val.lFixacaonf.Where(p => p.Vl_complemento > decimal.Zero).ToList().ForEach(p =>
                        {
                            //Gravar Retencao GMO
                            TRegistro_SaldoNFGMO rSaldoNf = new TRegistro_SaldoNFGMO();
                            rSaldoNf.Cd_empresa           = val.rDup.Cd_empresa;
                            rSaldoNf.Nr_lanctoduplicata   = val.rDup.Nr_lancto;
                            rSaldoNf.Dt_saient            = val.rDup.Dt_emissao;
                            rSaldoNf.Nr_lanctofiscal      = p.rNfComplemento.Nr_lanctofiscal;
                            rSaldoNf.Id_nfitem            = p.rNfComplemento.ItensNota[0].Id_nfitem;
                            if (val.Qtd_gmo_declarado > decimal.Zero)
                            {
                                //Liquidar duplicata retendo os Royalties
                                TCN_LanRoyaltiesGMO.liquidaDuplicatas(rSaldoNf,
                                                                      new TRegistro_SaldoContratoGMO()
                                {
                                    Cd_produto  = val.Cd_produto,
                                    Nr_contrato = val.Nr_contrato,
                                    Tp_gmo      = "D"
                                },
                                                                      val.Vl_royalties_declarado,
                                                                      val.Qtd_gmo_declarado,
                                                                      qtb_fixacao.Banco_Dados);
                            }
                            if (val.Qtd_gmo_testado > decimal.Zero)
                            {
                                //Liquidar duplicata retendo os Royalties
                                TCN_LanRoyaltiesGMO.liquidaDuplicatas(rSaldoNf,
                                                                      new TRegistro_SaldoContratoGMO()
                                {
                                    Cd_produto  = val.Cd_produto,
                                    Nr_contrato = val.Nr_contrato,
                                    Tp_gmo      = "T"
                                },
                                                                      val.Vl_royalties_testado,
                                                                      val.Qtd_gmo_testado,
                                                                      qtb_fixacao.Banco_Dados);
                            }
                        });
                        if (val.rNfDev != null)
                        {
                            //Gravar Retencao GMO
                            TRegistro_SaldoNFGMO rSaldoNf = new TRegistro_SaldoNFGMO();
                            rSaldoNf.Cd_empresa         = val.rDup.Cd_empresa;
                            rSaldoNf.Nr_lanctoduplicata = val.rDup.Nr_lancto;
                            rSaldoNf.Dt_saient          = val.rDup.Dt_emissao;
                            rSaldoNf.Nr_lanctofiscal    = val.rNfDev.Nr_lanctofiscal;
                            rSaldoNf.Id_nfitem          = val.rNfDev.ItensNota[0].Id_nfitem;
                            if (val.Qtd_gmo_declarado > decimal.Zero)
                            {
                                //Liquidar duplicata retendo os Royalties
                                TCN_LanRoyaltiesGMO.liquidaDuplicatas(rSaldoNf,
                                                                      new TRegistro_SaldoContratoGMO()
                                {
                                    Cd_produto  = val.Cd_produto,
                                    Nr_contrato = val.Nr_contrato,
                                    Tp_gmo      = "D"
                                },
                                                                      val.Vl_royalties_declarado,
                                                                      val.Qtd_gmo_declarado,
                                                                      qtb_fixacao.Banco_Dados);
                            }
                            if (val.Qtd_gmo_testado > decimal.Zero)
                            {
                                //Liquidar duplicata retendo os Royalties
                                TCN_LanRoyaltiesGMO.liquidaDuplicatas(rSaldoNf,
                                                                      new TRegistro_SaldoContratoGMO()
                                {
                                    Cd_produto  = val.Cd_produto,
                                    Nr_contrato = val.Nr_contrato,
                                    Tp_gmo      = "T"
                                },
                                                                      val.Vl_royalties_testado,
                                                                      val.Qtd_gmo_testado,
                                                                      qtb_fixacao.Banco_Dados);
                            }
                        }
                    }
                }
                if (st_transacao)
                {
                    qtb_fixacao.Banco_Dados.Commit_Tran();
                }
                return(retorno);
            }
            catch (Exception ex)
            {
                if (st_transacao)
                {
                    qtb_fixacao.Banco_Dados.RollBack_Tran();
                }
                throw new Exception("Erro gravar fixação: " + ex.Message.Trim());
            }
            finally
            {
                if (st_transacao)
                {
                    qtb_fixacao.deletarBanco_Dados();
                }
            }
        }
Example #6
0
        public static string Grava_Transferencia(TRegistro_Transferencia val,
                                                 TObjetoBanco banco)
        {
            bool st_transacao = false;
            TCD_Transferencia qtb_Transferencia = new TCD_Transferencia();

            try
            {
                if (banco == null)
                {
                    st_transacao = qtb_Transferencia.CriarBanco_Dados(true);
                }
                else
                {
                    qtb_Transferencia.Banco_Dados = banco;
                }

                // Grava Transferencia
                string retorno = qtb_Transferencia.Gravar(val);
                val.ID_Transf = Convert.ToDecimal(CamadaDados.TDataQuery.getPubVariavel(retorno, "@P_ID_TRANSF"));
                // Grava Transferencia Pedido Origem

                #region Nota_Fiscal_Origem
                val.rNfOrigem.Nr_pedido            = val.Transf_X_Contrato_Origem[0].Nr_pedido;
                val.rNfOrigem.Cd_clifor            = val.Contrato_Origem.Cd_clifor;
                val.rNfOrigem.Cd_condfiscal_clifor = string.Empty;
                val.rNfOrigem.Cd_condpgto          = val.Contrato_Origem.CD_CondPGTO;
                val.rNfOrigem.Cd_empresa           = val.Contrato_Origem.Cd_empresa;
                val.rNfOrigem.Cd_endereco          = val.Contrato_Origem.Cd_endereco;
                val.rNfOrigem.Cd_movimentacao      = val.Contrato_Origem.Pedido_Fiscal[0].Cd_movto;
                if (val.Duplicata_Origem.Count > 0)
                {
                    val.rNfOrigem.Duplicata = val.Duplicata_Origem;
                }

                //Criar itens da nota fiscal
                TRegistro_LanFaturamento_Item Reg_Itens_Nota = new TRegistro_LanFaturamento_Item();
                Reg_Itens_Nota.Cd_produto    = val.Transf_X_Contrato_Origem[0].Cd_produto;
                Reg_Itens_Nota.lNfcompdev    = val.Complemento_Devolucao;
                Reg_Itens_Nota.Quantidade    = val.QTD_Transf;
                Reg_Itens_Nota.Vl_unitario   = val.VL_Unit_Origem;
                Reg_Itens_Nota.Cd_local      = val.Contrato_Origem.Cd_local;
                Reg_Itens_Nota.Vl_subtotal   = val.VL_Sub_Total_Origem;
                Reg_Itens_Nota.Id_pedidoitem = val.Contrato_Origem.Id_pedidoitem;
                Reg_Itens_Nota.Nr_pedido     = val.Contrato_Origem.Nr_pedido.Value;
                CamadaDados.Fiscal.TRegistro_CadCFOP rCfop = null;
                if (CamadaNegocio.Fiscal.TCN_Mov_X_CFOP.BuscarCFOP(val.rNfOrigem.Cd_movimentacaostring,
                                                                   val.Transf_X_Contrato_Origem[0].Cd_condfiscal_produto,
                                                                   val.Contrato_Origem.CD_UFClifor.Trim().Equals("99") ? "I" :
                                                                   val.Reg_Empresa_Origem.rEndereco.Cd_uf.Trim().Equals(val.Contrato_Origem.CD_UFClifor.Trim()) ? "D" : "F",
                                                                   val.Reg_Empresa_Origem.rEndereco.Cd_uf,
                                                                   val.Contrato_Origem.CD_UFClifor,
                                                                   val.rNfOrigem.Tp_movimento,
                                                                   val.Reg_Clifor_Origem.Cd_condfiscal_clifor,
                                                                   val.Reg_Empresa_Origem.Cd_empresa,
                                                                   ref rCfop,
                                                                   banco))
                {
                    Reg_Itens_Nota.Cd_cfop        = rCfop.CD_CFOP;
                    Reg_Itens_Nota.Ds_cfop        = rCfop.DS_CFOP;
                    Reg_Itens_Nota.St_bonificacao = rCfop.St_bonificacaobool;
                }
                else
                {
                    throw new Exception("Não existe CFOP " + (val.Contrato_Origem.CD_UFClifor.Trim().Equals("99") ? "internacional" : val.Reg_Empresa_Origem.rEndereco.Cd_uf.Trim().Equals(val.Contrato_Origem.CD_UFClifor.Trim()) ? "dentro estado" : "fora estado") + " configurado para a Movimentação " + val.rNfOrigem.Cd_movimentacaostring + " condição fiscal do produto " + val.Transf_X_Contrato_Origem[0].Cd_condfiscal_produto);
                }
                Reg_Itens_Nota.Cd_unidade = val.Contrato_Origem.Cd_unidade;
                Reg_Itens_Nota.Cd_unidEst = val.Contrato_Origem.Cd_unid_produto;
                //Procurar Impostos Estaduais para o Item
                string           vObsFiscal = string.Empty;
                TList_ImpostosNF lImpUfOrig = TCN_LanFaturamento_Item.procuraImpostosPorUf(val.Reg_Empresa_Origem.Cd_empresa,
                                                                                           val.Reg_Empresa_Origem.rEndereco.Cd_uf,
                                                                                           val.Contrato_Origem.CD_UFClifor,
                                                                                           val.Contrato_Origem.Pedido_Fiscal[0].Cd_movtostring,
                                                                                           val.rNfOrigem.Tp_movimento,
                                                                                           val.Reg_Clifor_Origem.Cd_condfiscal_clifor,
                                                                                           val.Reg_Produto_Origem.CD_CondFiscal_Produto,
                                                                                           val.VL_Sub_Total_Origem,
                                                                                           val.QTD_Transf,
                                                                                           ref vObsFiscal,
                                                                                           val.rNfOrigem.Dt_emissao,
                                                                                           val.Reg_Produto_Origem.CD_Produto,
                                                                                           val.rNfOrigem.Tp_nota,
                                                                                           val.rNfOrigem.Nr_serie,
                                                                                           banco);
                if (lImpUfOrig.Exists(v => v.Imposto.St_ICMS))
                {
                    TCN_LanFaturamento_Item.PreencherICMS(lImpUfOrig.Find(v => v.Imposto.St_ICMS), Reg_Itens_Nota);
                    val.rNfOrigem.Obsfiscal += string.IsNullOrEmpty(val.rNfOrigem.Obsfiscal) ? vObsFiscal.Trim() : "\r\n" + vObsFiscal.Trim();
                }
                else if (TCN_LanFaturamento_Item.ObrigImformarICMS(val.Reg_Produto_Origem.CD_Produto, val.rNfOrigem.Nr_serie, banco))
                {
                    throw new Exception("Não existe condição fiscal para o imposto ICMS: \r\n" +
                                        "Tipo Movimento: " + (val.rNfOrigem.Tp_movimento.Trim().ToUpper().Equals("E") ? "ENTRADA" : "SAIDA") + "\r\n" +
                                        "Movimentação Comercial: " + val.Contrato_Origem.Pedido_Fiscal[0].Cd_movtostring + " - " + val.Contrato_Origem.Pedido_Fiscal[0].Ds_movimentacao + "\r\n" +
                                        "Condição Fiscal Clifor: " + val.Reg_Clifor_Origem.Cd_condfiscal_clifor + "\r\n" +
                                        "Condição Fiscal Produto: " + val.Reg_Produto_Origem.CD_CondFiscal_Produto + "\r\n" +
                                        "UF Origem: " + val.Reg_Empresa_Origem.rEndereco.Cd_uf + "\r\n" +
                                        "UF Destino: " + val.Contrato_Origem.CD_UFClifor);
                }

                //Procurar impostos sobre os itens da nota fiscal de origem
                TCN_LanFaturamento_Item.PreencherOutrosImpostos(
                    TCN_LanFaturamento_Item.procuraCondicaoFiscalImpostos(val.Reg_Clifor_Origem.Cd_condfiscal_clifor,
                                                                          val.Reg_Produto_Origem.CD_CondFiscal_Produto,
                                                                          val.Contrato_Origem.Pedido_Fiscal[0].Cd_movtostring,
                                                                          val.rNfOrigem.Tp_movimento,
                                                                          val.Reg_Clifor_Origem.Tp_pessoa,
                                                                          val.Transf_X_Contrato_Origem[0].CD_Empresa,
                                                                          val.Contrato_Origem.Pedido_Fiscal[0].Nr_serie,
                                                                          val.Reg_Clifor_Origem.Cd_clifor,
                                                                          val.Reg_Produto_Origem.CD_Unidade,
                                                                          val.DT_Lancto,
                                                                          Reg_Itens_Nota.Quantidade,
                                                                          Reg_Itens_Nota.Vl_subtotal,
                                                                          val.rNfOrigem.Tp_nota,
                                                                          string.Empty,
                                                                          banco), Reg_Itens_Nota, val.rNfOrigem.Tp_movimento);
                //Gerar observacao para o item
                //Observação do Item com os dados das notas de origem
                string obsitem = string.Empty;
                val.Complemento_Devolucao.ForEach(p =>
                {
                    obsitem += (p.Nr_notafiscal_origem.ToString() + "/" + p.Nr_serie_origem).FormatStringDireita(21, ' ') +
                               (p.Qtd_lancto.ToString("N3", new System.Globalization.CultureInfo("en-US", true)) +
                                Reg_Itens_Nota.Sigla_unidade_estoque.Trim()).FormatStringDireita(15, ' ') +
                               p.Vl_lancto.ToString("N2", new System.Globalization.CultureInfo("en-US", true)).FormatStringDireita(12, ' ') + "\r\n";
                });
                Reg_Itens_Nota.Observacao_item += "NF/Serie Origem      Quantidade     Valor(R$)\r\n" + obsitem;
                //Adicionar item a nota fiscal de origem
                val.rNfOrigem.ItensNota.Add(Reg_Itens_Nota);
                //Gravar nota fiscal de origem
                TCN_LanFaturamento.GravarFaturamento(val.rNfOrigem, null, qtb_Transferencia.Banco_Dados);
                val.Transf_X_Contrato_Origem[0].NR_LanctoFiscal = val.rNfOrigem.Nr_lanctofiscal.Value;
                //Gravar transferencia x pedido origem
                TCN_Transf_X_Contrato.Gravar(new TRegistro_Transf_X_Contrato()
                {
                    CD_Empresa      = val.Transf_X_Contrato_Origem[0].CD_Empresa,
                    Cd_produto      = val.Transf_X_Contrato_Origem[0].Cd_produto,
                    ID_Transf       = val.ID_Transf,
                    TP_Movimento    = val.rNfOrigem.Tp_movimento,
                    NR_LanctoFiscal = val.rNfOrigem.Nr_lanctofiscal.Value,
                    ID_NFItem       = val.rNfOrigem.ItensNota[0].Id_nfitem,
                    NR_Contrato     = val.Contrato_Origem.Nr_contrato
                }, qtb_Transferencia.Banco_Dados);
                #endregion

                #region Nota_Fiscal_Destino
                val.rNfDestino.Nr_pedido       = val.Transf_X_Contrato_Destino[0].Nr_pedido;
                val.rNfDestino.Cd_clifor       = val.Contrato_Destino.Cd_clifor;
                val.rNfDestino.Cd_condpgto     = val.Contrato_Destino.CD_CondPGTO;
                val.rNfDestino.Cd_empresa      = val.Contrato_Destino.Cd_empresa;
                val.rNfDestino.Cd_endereco     = val.Contrato_Destino.Cd_endereco;
                val.rNfDestino.Cd_movimentacao = val.Contrato_Destino.Pedido_Fiscal[0].Cd_movto;
                if (val.Duplicata_Destino.Count > 0)
                {
                    val.rNfDestino.Duplicata = val.Duplicata_Destino;
                }

                //Registro item da nota fiscal de destino
                TRegistro_LanFaturamento_Item Reg_Itens_Nota_Destino = new TRegistro_LanFaturamento_Item();
                if (val.Transf_X_Contrato_Destino[0].CD_Unidade_Est.Equals(val.Transf_X_Contrato_Origem[0].CD_Unidade_Est))
                {
                    Reg_Itens_Nota_Destino.Quantidade = val.QTD_Transf;
                }
                else
                {
                    Reg_Itens_Nota_Destino.Quantidade = TCN_CadConvUnidade.ConvertUnid(val.Transf_X_Contrato_Destino[0].CD_Unidade_Est, val.Transf_X_Contrato_Origem[0].CD_Unidade_Est, val.QTD_Transf, 3, qtb_Transferencia.Banco_Dados);
                }

                Reg_Itens_Nota_Destino.Cd_produto    = val.Transf_X_Contrato_Destino[0].Cd_produto;
                Reg_Itens_Nota_Destino.Vl_unitario   = val.VL_Unit_Destino;
                Reg_Itens_Nota_Destino.Cd_local      = val.Contrato_Destino.Cd_local;
                Reg_Itens_Nota_Destino.Vl_subtotal   = val.VL_Sub_Total_Destino;
                Reg_Itens_Nota_Destino.Id_pedidoitem = val.Contrato_Destino.Id_pedidoitem.Value;
                Reg_Itens_Nota_Destino.Nr_pedido     = val.Contrato_Destino.Nr_pedido.Value;
                rCfop = null;
                if (TCN_Mov_X_CFOP.BuscarCFOP(val.rNfDestino.Cd_movimentacaostring,
                                              val.Transf_X_Contrato_Destino[0].Cd_condfiscal_produto,
                                              val.Contrato_Destino.CD_UFClifor.Trim().Equals("99") ? "I" :
                                              val.Reg_Empresa_Destino.rEndereco.Cd_uf.Trim().Equals(val.Contrato_Destino.CD_UFClifor.Trim()) ? "D" : "F",
                                              val.Reg_Empresa_Destino.rEndereco.Cd_uf,
                                              val.Contrato_Destino.CD_UFClifor,
                                              val.rNfDestino.Tp_movimento,
                                              val.Reg_Clifor_Destino.Cd_condfiscal_clifor,
                                              val.Reg_Empresa_Destino.Cd_empresa,
                                              ref rCfop,
                                              banco))
                {
                    Reg_Itens_Nota_Destino.Cd_cfop        = rCfop.CD_CFOP;
                    Reg_Itens_Nota_Destino.Ds_cfop        = rCfop.DS_CFOP;
                    Reg_Itens_Nota_Destino.St_bonificacao = rCfop.St_bonificacaobool;
                }
                else
                {
                    throw new Exception("Não existe CFOP " + (val.Contrato_Destino.CD_UFClifor.Trim().Equals("99") ? "internacional" : val.Reg_Empresa_Destino.rEndereco.Cd_uf.Trim().Equals(val.Contrato_Destino.CD_UFClifor.Trim()) ? "dentro estado" : "fora estado") + " configurado para a Movimentação " + val.rNfDestino.Cd_movimentacaostring + " condição fiscal do produto " + val.Transf_X_Contrato_Destino[0].Cd_condfiscal_produto);
                }
                Reg_Itens_Nota_Destino.Cd_unidade = val.Contrato_Destino.Cd_unidade;
                Reg_Itens_Nota_Destino.Cd_unidEst = val.Contrato_Destino.Cd_unid_produto;
                //Procurar Impostos Estaduais para o Item
                vObsFiscal = string.Empty;
                TList_ImpostosNF lImpUf = TCN_LanFaturamento_Item.procuraImpostosPorUf(val.Reg_Empresa_Destino.Cd_empresa,
                                                                                       val.Reg_Empresa_Destino.rEndereco.Cd_uf,
                                                                                       val.Contrato_Destino.CD_UFClifor,
                                                                                       val.Contrato_Destino.Pedido_Fiscal[0].Cd_movtostring,
                                                                                       val.rNfDestino.Tp_movimento,
                                                                                       val.Reg_Clifor_Destino.Cd_condfiscal_clifor,
                                                                                       val.Reg_Produto_Destino.CD_CondFiscal_Produto,
                                                                                       val.VL_Sub_Total_Destino,
                                                                                       val.QTD_Transf,
                                                                                       ref vObsFiscal,
                                                                                       val.rNfDestino.Dt_emissao,
                                                                                       val.Reg_Produto_Destino.CD_Produto,
                                                                                       val.rNfDestino.Tp_nota,
                                                                                       val.rNfDestino.Nr_serie,
                                                                                       banco);
                if (lImpUf.Exists(v => v.Imposto.St_ICMS))
                {
                    TCN_LanFaturamento_Item.PreencherICMS(lImpUf.Find(v => v.Imposto.St_ICMS), Reg_Itens_Nota_Destino);
                    val.rNfDestino.Obsfiscal += string.IsNullOrEmpty(val.rNfDestino.Obsfiscal) ? vObsFiscal.Trim() : "\r\n" + vObsFiscal.Trim();
                }
                else if (TCN_LanFaturamento_Item.ObrigImformarICMS(val.Reg_Produto_Destino.CD_Produto, val.rNfDestino.Nr_serie, banco))
                {
                    throw new Exception("Não existe condição fiscal para o imposto ICMS: \r\n" +
                                        "Tipo Movimento: " + (val.rNfDestino.Tp_movimento.Trim().ToUpper().Equals("E") ? "ENTRADA" : "SAIDA") + "\r\n" +
                                        "Movimentação Comercial: " + val.Contrato_Destino.Pedido_Fiscal[0].Cd_movtostring + " - " + val.Contrato_Destino.Pedido_Fiscal[0].Ds_movimentacao + "\r\n" +
                                        "Condição Fiscal Clifor: " + val.Reg_Clifor_Destino.Cd_condfiscal_clifor + "\r\n" +
                                        "Condição Fiscal Produto: " + val.Reg_Produto_Destino.CD_CondFiscal_Produto + "\r\n" +
                                        "UF Origem: " + val.Reg_Empresa_Destino.rEndereco.Cd_uf + "\r\n" +
                                        "UF Destino: " + val.Contrato_Destino.CD_UFClifor);
                }

                //Procurar impostos sobre os itens da nota fiscal de destino
                TCN_LanFaturamento_Item.PreencherOutrosImpostos(TCN_LanFaturamento_Item.procuraCondicaoFiscalImpostos(val.Reg_Clifor_Destino.Cd_condfiscal_clifor,
                                                                                                                      val.Reg_Produto_Destino.CD_CondFiscal_Produto,
                                                                                                                      val.Contrato_Destino.Pedido_Fiscal[0].Cd_movtostring,
                                                                                                                      val.rNfDestino.Tp_movimento,
                                                                                                                      val.Reg_Clifor_Destino.Tp_pessoa,
                                                                                                                      val.Transf_X_Contrato_Destino[0].CD_Empresa,
                                                                                                                      val.Contrato_Destino.Pedido_Fiscal[0].Nr_serie,
                                                                                                                      val.Reg_Clifor_Destino.Cd_clifor,
                                                                                                                      val.Reg_Produto_Destino.CD_Unidade,
                                                                                                                      val.DT_Lancto,
                                                                                                                      Reg_Itens_Nota_Destino.Quantidade,
                                                                                                                      Reg_Itens_Nota_Destino.Vl_subtotal,
                                                                                                                      val.rNfDestino.Tp_nota,
                                                                                                                      string.Empty,
                                                                                                                      banco), Reg_Itens_Nota_Destino, val.rNfDestino.Tp_movimento);
                val.rNfDestino.ItensNota.Add(Reg_Itens_Nota_Destino);
                //Gravar Nota Fiscal Destino
                TCN_LanFaturamento.GravarFaturamento(val.rNfDestino, null, qtb_Transferencia.Banco_Dados);
                val.Transf_X_Contrato_Destino[0].NR_LanctoFiscal = val.rNfDestino.Nr_lanctofiscal.Value;

                TCN_Transf_X_Contrato.Gravar(new TRegistro_Transf_X_Contrato()
                {
                    CD_Empresa      = val.Transf_X_Contrato_Destino[0].CD_Empresa,
                    Cd_produto      = val.Transf_X_Contrato_Destino[0].Cd_produto,
                    ID_Transf       = val.ID_Transf,
                    TP_Movimento    = val.rNfDestino.Tp_movimento,
                    NR_LanctoFiscal = val.rNfDestino.Nr_lanctofiscal.Value,
                    ID_NFItem       = val.rNfDestino.ItensNota[0].Id_nfitem,
                    NR_Contrato     = val.Transf_X_Contrato_Destino[0].NR_Contrato
                }, qtb_Transferencia.Banco_Dados);

                #endregion

                if (st_transacao)
                {
                    qtb_Transferencia.Banco_Dados.Commit_Tran();
                }

                return(retorno);
            }
            catch (Exception ex)
            {
                if (st_transacao)
                {
                    qtb_Transferencia.Banco_Dados.RollBack_Tran();
                }

                throw new Exception(ex.Message);
            }
            finally
            {
                if (st_transacao)
                {
                    qtb_Transferencia.deletarBanco_Dados();
                }
            }
        }