Ejemplo n.º 1
0
        /// <summary>
        /// insere cte
        /// </summary>
        public uint Insert(Entidade.Cte cte)
        {
            lock (_cadastrarCte)
            {
                using (var transaction = new GDATransaction())
                {
                    try
                    {
                        transaction.BeginTransaction();

                        var idCte = new uint();

                        var emitente = cte.ObjParticipanteCte.Where(c => c.TipoParticipante == Glass.Data.Model.Cte.ParticipanteCte.TipoParticipanteEnum.Emitente).FirstOrDefault();

                        if (emitente == null)
                        {
                            throw new Exception("O emitente não foi informado.");
                        }

                        var idCidade = emitente.IdLoja > 0 ? LojaDAO.Instance.ObtemIdCidade(transaction, emitente.IdLoja.Value) :
                                       emitente.IdCliente > 0 ? ClienteDAO.Instance.ObtemIdCidade(transaction, emitente.IdCliente.Value) :
                                       emitente.IdFornec > 0 ? FornecedorDAO.Instance.ObtemIdCidade(transaction, (int)emitente.IdFornec.Value) :
                                       emitente.IdTransportador > 0 ? (uint?)TransportadorDAO.Instance.GetElementByPrimaryKey(transaction, emitente.IdTransportador.Value).IdCidade : (uint?)null;

                        if (!idCidade.HasValue)
                        {
                            throw new Exception("Não foi possível recuperar a cidade do emitente.");
                        }

                        var cidadeEmitente = CidadeDAO.Instance.GetElementByPrimaryKey(transaction, idCidade.Value);

                        if (Glass.Data.DAL.CTe.ConhecimentoTransporteDAO.Instance.CteCadastrado(transaction))
                        {
                            throw new Exception("CTe cadastrado há poucos segundos, Tente novamente.");
                        }

                        cte.TipoEmissao = cte.TipoEmissao > 0 ? cte.TipoEmissao : 1;

                        if (cte.TipoDocumentoCte == (int)Entidade.Cte.TipoDocumentoCteEnum.Saida)
                        {
                            var idLoja = emitente.IdLoja;

                            if (cte.TipoEmissao != (int)Glass.Data.Model.Cte.ConhecimentoTransporte.TipoEmissaoEnum.AutorizacaoSvcRs &&
                                cte.TipoEmissao != (int)Glass.Data.Model.Cte.ConhecimentoTransporte.TipoEmissaoEnum.AutorizacaoSvcSp)
                            {
                                cte.NumeroCte = BuscarCte.Instance.GetUltimoNumeroCte(transaction, idLoja.Value, Glass.Conversoes.StrParaInt(cte.Serie), (int)cte.TipoEmissao);
                            }

                            cte.DataEmissao  = DateTime.Now;
                            cte.CodAleatorio = (cte.NumeroCte + (cte.TipoEmissao == (int)Glass.Data.Model.Cte.ConhecimentoTransporte.TipoEmissaoEnum.Normal ? 10203040 : 9020304)).ToString();
                            cte.ChaveAcesso  = ChaveDeAcesso(cidadeEmitente.CodIbgeUf, cte.DataEmissao.ToString("yyMM"), LojaDAO.Instance.ObtemCnpj(transaction, idLoja.Value), Glass.Data.CTeUtils.ConfigCTe.Modelo,
                                                             cte.Serie.ToString().PadLeft(3, '0'), cte.NumeroCte.ToString(), cte.TipoEmissao.ToString(), cte.CodAleatorio);
                        }
                        else if (cte.TipoDocumentoCte == (int)Entidade.Cte.TipoDocumentoCteEnum.EntradaTerceiros)
                        {
                            if (!string.IsNullOrEmpty(cte.ChaveAcesso) && cte.ChaveAcesso.Length > 0 && cte.ChaveAcesso.Length != 44)
                            {
                                throw new Exception("A chave de acesso deve ter 44 caracteres.");
                            }
                        }

                        cte.Situacao = (int)Glass.Data.Model.Cte.ConhecimentoTransporte.SituacaoEnum.Aberto;

                        idCte = Glass.Data.DAL.CTe.ConhecimentoTransporteDAO.Instance.Insert(transaction, Convert(cte));

                        cte.ObjCobrancaCte.IdCte = cte.ObjEntregaCte.IdCte = cte.ObjInfoCte.IdCte =
                            cte.ObjConhecimentoTransporteRodoviario.IdCte = cte.ObjSeguroCte.IdCte =
                                cte.ObjComplCte.IdCte = cte.ObjComplCte.ObjComplPassagemCte.IdCte = cte.ObjEfdCte.IdCte = idCte;

                        foreach (var i in cte.ObjParticipanteCte)
                        {
                            i.IdCte = idCte;
                        }

                        foreach (var i in cte.ObjComponenteValorCte)
                        {
                            i.IdCte = idCte;
                        }

                        foreach (var i in cte.ObjVeiculoCte)
                        {
                            i.IdCte = idCte;
                        }

                        foreach (var i in cte.ObjImpostoCte)
                        {
                            i.IdCte = idCte;
                        }

                        CadastrarCobrancaCte.Instance.Insert(transaction, cte.ObjCobrancaCte);
                        CadastrarVeiculoCte.Instance.Insert(transaction, cte.ObjVeiculoCte);
                        if (cte.ObjSeguroCte.IdSeguradora > 0)
                        {
                            CadastrarSeguroCte.Instance.Insert(transaction, cte.ObjSeguroCte);
                        }
                        CadastrarEntregaCte.Instance.Insert(transaction, cte.ObjEntregaCte);
                        CadastrarComponenteValorCte.Instance.Insert(transaction, cte.ObjComponenteValorCte);
                        CadastrarInfoCte.Instance.Insert(transaction, cte.ObjInfoCte);
                        CadastrarConhecimentoTransporteRodoviario.Instance.Insert(transaction, cte.ObjConhecimentoTransporteRodoviario);
                        CadastrarParticipanteCte.Instance.Insert(transaction, cte.ObjParticipanteCte);
                        CadastrarComplCte.Instance.Insert(transaction, cte.ObjComplCte);
                        CadastrarImpostoCte.Instance.Insert(transaction, cte.ObjImpostoCte);
                        CadastrarEfdCte.Instance.Insert(transaction, cte.ObjEfdCte);

                        transaction.Commit();
                        transaction.Close();

                        return(idCte);
                    }
                    catch (Exception ex)
                    {
                        transaction.Rollback();
                        transaction.Close();

                        ErroDAO.Instance.InserirFromException("CadastrarCTE(Insert).", ex);
                        throw new Exception(Glass.MensagemAlerta.FormatErrorMsg("Erro no cadastro de CTe.", ex));
                    }
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// atualiza dados do cte
        /// </summary>
        public void Update(Entidade.Cte cte)
        {
            lock (_cadastrarCte)
            {
                using (var transaction = new GDATransaction())
                {
                    try
                    {
                        transaction.BeginTransaction();

                        var situacaoCTe = Glass.Data.DAL.CTe.ConhecimentoTransporteDAO.Instance.ObtemSituacaoCte(transaction, cte.IdCte);

                        if (situacaoCTe == Glass.Data.Model.Cte.ConhecimentoTransporte.SituacaoEnum.Autorizado ||
                            situacaoCTe == Glass.Data.Model.Cte.ConhecimentoTransporte.SituacaoEnum.FinalizadoTerceiros)
                        {
                            throw new Exception(string.Format("O CTE de número {0} já foi {1}.", cte.NumeroCte,
                                                              situacaoCTe == Glass.Data.Model.Cte.ConhecimentoTransporte.SituacaoEnum.Autorizado ? "autorizado" : "finalizado"));
                        }

                        var emitente = cte.ObjParticipanteCte.Where(c => c.TipoParticipante == Glass.Data.Model.Cte.ParticipanteCte.TipoParticipanteEnum.Emitente).FirstOrDefault();

                        if (emitente == null)
                        {
                            throw new Exception("O emitente não foi informado.");
                        }

                        if (cte.TipoDocumentoCte == (int)Entidade.Cte.TipoDocumentoCteEnum.Saida)
                        {
                            var idCidade = emitente.IdLoja > 0 ? LojaDAO.Instance.ObtemIdCidade(transaction, emitente.IdLoja.Value) :
                                           emitente.IdCliente > 0 ? ClienteDAO.Instance.ObtemIdCidade(transaction, emitente.IdCliente.Value) :
                                           emitente.IdFornec > 0 ? FornecedorDAO.Instance.ObtemIdCidade(transaction, (int)emitente.IdFornec.Value) :
                                           emitente.IdTransportador > 0 ? (uint?)TransportadorDAO.Instance.GetElementByPrimaryKey(transaction, emitente.IdTransportador.Value).IdCidade : (uint?)null;

                            if (!idCidade.HasValue)
                            {
                                throw new Exception("Não foi possível recuperar a cidade do emitente.");
                            }

                            var cidadeEmitente = CidadeDAO.Instance.GetElementByPrimaryKey(transaction, idCidade.Value);
                            var idLoja         = emitente.IdLoja;

                            cte.ChaveAcesso = ChaveDeAcesso(cidadeEmitente.CodIbgeUf, cte.DataEmissao.ToString("yyMM"), LojaDAO.Instance.ObtemCnpj(transaction, idLoja.Value),
                                                            Glass.Data.CTeUtils.ConfigCTe.Modelo, cte.Serie.ToString().PadLeft(3, '0'), cte.NumeroCte.ToString(),
                                                            cte.TipoEmissao.ToString(), cte.CodAleatorio);
                        }
                        else if (cte.TipoDocumentoCte == (int)Entidade.Cte.TipoDocumentoCteEnum.EntradaTerceiros)
                        {
                            if (!string.IsNullOrEmpty(cte.ChaveAcesso) && cte.ChaveAcesso.Length > 0 && cte.ChaveAcesso.Length != 44)
                            {
                                throw new Exception("A chave de acesso deve ter 44 caracteres.");
                            }
                        }

                        cte.Situacao = (int)Glass.Data.Model.Cte.ConhecimentoTransporte.SituacaoEnum.Aberto;

                        var id = Glass.Data.DAL.CTe.ConhecimentoTransporteDAO.Instance.Update(transaction, Convert(cte));

                        cte.ObjCobrancaCte.IdCte = cte.ObjEntregaCte.IdCte = cte.ObjInfoCte.IdCte = cte.ObjEfdCte.IdCte =
                            cte.ObjConhecimentoTransporteRodoviario.IdCte = cte.ObjSeguroCte.IdCte =
                                cte.ObjComplCte.IdCte = cte.ObjComplCte.ObjComplPassagemCte.IdCte = cte.IdCte;

                        foreach (var i in cte.ObjParticipanteCte)
                        {
                            i.IdCte = cte.IdCte;
                        }

                        foreach (var i in cte.ObjComponenteValorCte)
                        {
                            i.IdCte = cte.IdCte;
                        }

                        foreach (var i in cte.ObjVeiculoCte)
                        {
                            i.IdCte = cte.IdCte;
                        }

                        foreach (var i in cte.ObjImpostoCte)
                        {
                            i.IdCte = cte.IdCte;
                        }

                        CadastrarCobrancaCte.Instance.Update(transaction, cte.ObjCobrancaCte);
                        CadastrarVeiculoCte.Instance.Update(transaction, cte.ObjVeiculoCte);
                        CadastrarSeguroCte.Instance.Update(transaction, cte.ObjSeguroCte);
                        CadastrarEntregaCte.Instance.Update(transaction, cte.ObjEntregaCte);

                        if (cte.ObjComponenteValorCte.Count() > 0 && cte.ObjComponenteValorCte.Select(f => !string.IsNullOrEmpty(f.NomeComponente) &&
                                                                                                      f.ValorComponente != 0).FirstOrDefault())
                        {
                            CadastrarComponenteValorCte.Instance.Update(transaction, cte.ObjComponenteValorCte);
                        }

                        CadastrarConhecimentoTransporteRodoviario.Instance.Update(transaction, cte.ObjConhecimentoTransporteRodoviario);
                        CadastrarParticipanteCte.Instance.Update(transaction, cte.ObjParticipanteCte);
                        CadastrarComplCte.Instance.Update(transaction, cte.ObjComplCte);
                        CadastrarImpostoCte.Instance.Update(transaction, cte.ObjImpostoCte);
                        CadastrarInfoCte.Instance.Update(transaction, cte.ObjInfoCte);
                        CadastrarEfdCte.Instance.Update(transaction, cte.ObjEfdCte);

                        transaction.Commit();
                        transaction.Close();
                    }
                    catch (Exception ex)
                    {
                        transaction.Rollback();
                        transaction.Close();

                        ErroDAO.Instance.InserirFromException("CadastrarCTE(Update).", ex);
                        throw new Exception(Glass.MensagemAlerta.FormatErrorMsg("Erro ao atualizar CTe.", ex));
                    }
                }
            }
        }
Ejemplo n.º 3
0
        public void Finalizar(uint idCte)
        {
            lock (_finalizarCTeLock)
            {
                using (var transaction = new GDATransaction())
                {
                    try
                    {
                        transaction.BeginTransaction();

                        Entidade.Cte cte = BuscarCte.Instance.GetCte(transaction, idCte);

                        #region Valida dados do CT-e

                        // TODO: Fazer validações do tipo: CNPJ/Insc Est do transportador,
                        // codigo NCM preenchido automaticamente entre outros.

                        if (cte.NumeroCte == 0)
                        {
                            throw new Exception("Informe o número do conhecimento de transporte.");
                        }

                        if (string.IsNullOrEmpty(cte.Modelo))
                        {
                            throw new Exception("Informe o modelo do conhecimento de transporte.");
                        }

                        if (cte.IdNaturezaOperacao == 0)
                        {
                            throw new Exception("Selecione a natureza de operação do conhecimento de transporte.");
                        }

                        // Verifica se o CFOP selecionado é de nota fiscal de saída
                        if (!CfopDAO.Instance.IsCfopEntrada(transaction, (int)cte.IdCfop))
                        {
                            throw new Exception("O CFOP informado no conhecimento de transporte não é um CFOP de entrada.");
                        }

                        // Verifica se o CTE já foi finalizado.
                        if (cte.Situacao == (int)Glass.Data.Model.Cte.ConhecimentoTransporte.SituacaoEnum.Autorizado ||
                            cte.Situacao == (int)Glass.Data.Model.Cte.ConhecimentoTransporte.SituacaoEnum.FinalizadoTerceiros)
                        {
                            throw new Exception("O CTE de número " + cte.NumeroCte + " já foi " +
                                                (cte.Situacao == (int)Glass.Data.Model.Cte.ConhecimentoTransporte.SituacaoEnum.Autorizado ? "autorizado" : "finalizado."));
                        }

                        //Verifica se o cfop selecionado corresponde a uf do emitente e destinatario
                        var codCfop   = Glass.Conversoes.StrParaInt(CfopDAO.Instance.ObtemCodInterno(transaction, cte.IdCfop)[0].ToString());
                        var ufOrigem  = CidadeDAO.Instance.GetNomeUf(transaction, cte.IdCidadeInicio);
                        var ufDestino = CidadeDAO.Instance.GetNomeUf(transaction, cte.IdCidadeFim);

                        if (ufOrigem.ToLower() == ufDestino.ToLower() && codCfop != 1)
                        {
                            throw new Exception("O CFOP informado não corresponde a um CFOP de entrada dentro do estado.");
                        }
                        else if (ufOrigem.ToLower() != ufDestino.ToLower() && codCfop != 2)
                        {
                            throw new Exception("O CFOP informado não corresponde a um CFOP de entrada fora do estado.");
                        }
                        else if (ufOrigem.ToLower() == "ex" && codCfop != 3)
                        {
                            throw new Exception("O CFOP informado não corresponde a um CFOP de entrada fora do país.");
                        }

                        if (!string.IsNullOrEmpty(cte.ChaveAcesso))
                        {
                            var cnpjChaveAcesso = cte.ChaveAcesso.Substring(6, 14);
                            var emitente        = cte.ObjParticipanteCte.FirstOrDefault(x => x.TipoParticipante == Glass.Data.Model.Cte.ParticipanteCte.TipoParticipanteEnum.Emitente);

                            var cpfCnpjEmitente = emitente == null ? null :
                                                  emitente.IdLoja > 0 ? LojaDAO.Instance.ObtemCnpj(transaction, emitente.IdLoja.Value) :
                                                  emitente.IdCliente > 0 ? ClienteDAO.Instance.ObtemCpfCnpj(transaction, emitente.IdCliente.Value) :
                                                  emitente.IdFornec > 0 ? FornecedorDAO.Instance.ObtemCpfCnpj(transaction, emitente.IdFornec.Value) :
                                                  emitente.IdTransportador > 0 ? TransportadorDAO.Instance.GetElementByPrimaryKey(transaction, emitente.IdTransportador.Value).CpfCnpj : null;

                            if (cpfCnpjEmitente != null && Formatacoes.LimpaCpfCnpj(cpfCnpjEmitente) != cnpjChaveAcesso)
                            {
                                throw new Exception("O CNPJ do Emitente não é o mesmo informado na chave de acesso.");
                            }
                        }

                        #endregion

                        if (cte.TipoDocumentoCte != (int)Glass.Data.Model.Cte.ConhecimentoTransporte.TipoDocumentoCteEnum.EntradaTerceiros)
                        {
                            var notas = NotaFiscalCteDAO.Instance.GetCount(transaction, idCte);
                            if (notas == 0)
                            {
                                throw new Exception("Selecione ao menos uma nota fiscal que está vinculada ao CT-e.");
                            }
                        }

                        GerarContasPagar(transaction, cte);

                        // Altera a situação do CTe
                        ConhecimentoTransporteDAO.Instance.AlteraSituacao(transaction, idCte, Glass.Data.Model.Cte.ConhecimentoTransporte.SituacaoEnum.FinalizadoTerceiros);

                        transaction.Commit();
                        transaction.Close();
                    }
                    catch
                    {
                        transaction.Rollback();
                        transaction.Close();
                        throw;
                    }
                }
            }
        }
Ejemplo n.º 4
0
        private void GerarContasPagar(GDASession session, Entidade.Cte cte)
        {
            if (!cte.ObjCobrancaCte.GerarContasPagar)
            {
                return;
            }

            var duplicatas = cte.ObjCobrancaCte.ObjCobrancaDuplCte.Where(x => x.DataVenc.HasValue).ToList();

            if (cte.ObjCobrancaCte.ValorLiquidoFatura == 0)
            {
                throw new Exception("O Valor Líquido Fatura não foi informado.");
            }

            if (!cte.ObjCobrancaCte.GerarContasPagar || cte.ObjCobrancaCte.IdConta.GetValueOrDefault() == 0 ||
                cte.ObjCobrancaCte.ValorLiquidoFatura == 0 || duplicatas.Count == 0)
            {
                return;
            }

            var loja = cte.ObjParticipanteCte.FirstOrDefault(x =>
                                                             x.IdLoja > 0 &&
                                                             (x.TipoParticipante == Glass.Data.Model.Cte.ParticipanteCte.TipoParticipanteEnum.Destinatario ||
                                                              /* Chamado 46951. */
                                                              x.TipoParticipante == Glass.Data.Model.Cte.ParticipanteCte.TipoParticipanteEnum.Remetente));
            var tipoParticipante = cte.ObjParticipanteCte.FirstOrDefault
                                       (x => x.TipoParticipante == Glass.Data.Model.Cte.ParticipanteCte.TipoParticipanteEnum.Emitente);

            loja             = loja ?? new Entidade.ParticipanteCte();
            tipoParticipante = tipoParticipante ?? new Entidade.ParticipanteCte();

            if (loja.IdLoja.GetValueOrDefault() == 0)
            {
                throw new Exception("Não foi possível identificar a loja (destinatário) do CT-e.");
            }

            if (tipoParticipante.IdFornec.GetValueOrDefault() == 0 && tipoParticipante.IdTransportador.GetValueOrDefault() == 0)
            {
                throw new Exception("Não foi encontrado nenhum fornecedor/transportador associado ao CT-e.");
            }

            int numParc = 1, numParcTotal = duplicatas.Count;

            foreach (var dupl in duplicatas)
            {
                var contasPagar = new Glass.Data.Model.ContasPagar()
                {
                    IdCte           = cte.IdCte,
                    Contabil        = true,
                    AVista          = false,
                    DataVenc        = dupl.DataVenc.Value,
                    IdConta         = cte.ObjCobrancaCte.IdConta.Value,
                    IdLoja          = loja.IdLoja.Value,
                    IdFornec        = tipoParticipante.IdFornec > 0 ? (uint?)tipoParticipante.IdFornec : null,
                    IdTransportador = tipoParticipante.IdTransportador > 0 ? (uint?)tipoParticipante.IdTransportador : null,
                    NumBoleto       = dupl.NumeroDupl,
                    NumParc         = numParc++,
                    NumParcMax      = numParcTotal,
                    Paga            = false,
                    ValorVenc       = dupl.ValorDupl
                };

                ContasPagarDAO.Instance.Insert(session, contasPagar);
            }
        }
Ejemplo n.º 5
0
 public void Delete(Entidade.Cte cte)
 {
     ExcluirCte.Instance.Excluir(cte);
 }
Ejemplo n.º 6
0
        public void Excluir(Entidade.Cte cte)
        {
            lock (_excluirCte)
            {
                using (var transaction = new GDA.GDATransaction())
                {
                    try
                    {
                        transaction.BeginTransaction();

                        uint idCte = cte.IdCte;
                        cte = BuscarCte.Instance.GetCte(transaction, idCte);

                        if (ContasPagarDAO.Instance.ExistePagasCte(transaction, idCte))
                        {
                            throw new Exception("Já existe pelo menos uma conta paga gerada por esse CT-e.");
                        }

                        ContasPagarDAO.Instance.DeleteByCte(transaction, idCte);

                        Glass.Data.DAL.CTe.ConhecimentoTransporteDAO.Instance.DeleteByPrimaryKey(transaction, idCte);
                        Glass.Data.DAL.CTe.CobrancaCteDAO.Instance.DeleteByPrimaryKey(transaction, idCte);

                        foreach (var i in cte.ObjCobrancaCte.ObjCobrancaDuplCte)
                        {
                            Glass.Data.DAL.CTe.CobrancaDuplCteDAO.Instance.Delete(transaction, idCte);
                        }

                        Glass.Data.DAL.CTe.ComplCteDAO.Instance.DeleteByPrimaryKey(transaction, idCte);
                        Glass.Data.DAL.CTe.ComplPassagemCteDAO.Instance.Delete(transaction, idCte, cte.ObjComplCte.ObjComplPassagemCte.NumSeqPassagem);

                        foreach (var i in cte.ObjComponenteValorCte)
                        {
                            Glass.Data.DAL.CTe.ComponenteValorCteDAO.Instance.Delete(transaction, idCte);
                        }

                        Glass.Data.DAL.CTe.ConhecimentoTransporteRodoviarioDAO.Instance.DeleteByPrimaryKey(transaction, idCte);
                        Glass.Data.DAL.CTe.EntregaCteDAO.Instance.DeleteByPrimaryKey(transaction, idCte);

                        foreach (var i in cte.ObjImpostoCte)
                        {
                            Glass.Data.DAL.CTe.ImpostoCteDAO.Instance.Delete(transaction, idCte, i.TipoImposto);
                        }

                        foreach (var i in cte.ObjInfoCte.ObjInfoCargaCte)
                        {
                            Glass.Data.DAL.CTe.InfoCargaCteDAO.Instance.Delete(transaction, idCte, i.TipoUnidade);
                        }

                        Glass.Data.DAL.CTe.InfoCteDAO.Instance.DeleteByPrimaryKey(transaction, idCte);

                        foreach (var i in cte.ObjConhecimentoTransporteRodoviario.ObjLacreCteRod)
                        {
                            Glass.Data.DAL.CTe.LacreCteRodDAO.Instance.Delete(transaction, idCte);
                        }

                        Glass.Data.DAL.CTe.NotaFiscalCteDAO.Instance.DeleteByIdCte(transaction, idCte);

                        foreach (var i in cte.ObjConhecimentoTransporteRodoviario.ObjOrdemColetaCteRod)
                        {
                            Glass.Data.DAL.CTe.OrdemColetaCteRodDAO.Instance.Delete(transaction, idCte);
                        }

                        foreach (var i in cte.ObjConhecimentoTransporteRodoviario.ObjValePedagioCteRod)
                        {
                            Glass.Data.DAL.CTe.ValePedagioCteRodDAO.Instance.Delete(transaction, idCte);
                        }

                        foreach (var i in cte.ObjParticipanteCte)
                        {
                            Glass.Data.DAL.CTe.ParticipanteCteDAO.Instance.Delete(transaction, idCte);
                        }

                        Glass.Data.DAL.CTe.SeguroCteDAO.Instance.Delete(transaction, idCte);

                        foreach (var i in cte.ObjVeiculoCte)
                        {
                            Glass.Data.DAL.CTe.VeiculoCteDAO.Instance.Delete(transaction, idCte);
                        }

                        Glass.Data.DAL.CTe.EfdCteDAO.Instance.Delete(transaction, idCte);

                        transaction.Commit();
                        transaction.Close();
                    }
                    catch
                    {
                        transaction.Rollback();
                        transaction.Close();
                        throw;
                    }
                }
            }
        }