예제 #1
0
        /// <summary>
        /// Método responsável por Inserir Cliente com todos os dados
        /// </summary>
        /// <DataCriacao>14/05/2010</DataCriacao>
        /// <Autor>Gustavo Malta Guimarães</Autor>
        /// <Alteracao>
        ///     <DataAlteracao></DataAlteracao>
        ///     <Autor></Autor>
        ///     <Motivo></Motivo>
        /// </Alteracao>
        /// <param name="pLogin">Login</param>
        /// <param name="pCliente">Cliente</param>
        /// <param name="pTelefone">Lista de Telefones</param>
        /// <param name="pEndereco">Lista de Endereços</param>
        /// <param name="pContaBancaria">Lista de Contas Bancárias</param>
        /// <param name="pConta">Lista de Contas</param>
        /// <param name="pDiretor">Lista de Diretores</param>
        /// <param name="pEmitente">Lista de Emitentes</param>
        /// <param name="pSfp">Situação Financeira Patrimonial</param>
        public int InserirCliente
            (Boolean pStReimportacao
            , LoginInfo pLogin
            , ClienteInfo pCliente
            , List <ClienteTelefoneInfo> pTelefone
            , List <ClienteEnderecoInfo> pEndereco
            , List <ClienteBancoInfo> pContaBancaria
            , List <ClienteContaInfo> pConta
            , List <ClienteDiretorInfo> pDiretor
            , List <ClienteEmitenteInfo> pEmitente
            , ClienteSituacaoFinanceiraPatrimonialInfo pSfp)
        {
            //Criar Transação
            DbConnection  conn;
            DbTransaction trans;

            Conexao._ConnectionStringName = gNomeConexaoSql;
            conn = Conexao.CreateIConnection();
            conn.Open();
            trans = conn.BeginTransaction();

            try
            {
                Nullable <int> lIdClienteAntigo = null;

                Nullable <int> lIdLoginAntigo = null;

                ClienteNaoOperaPorContaPropriaInfo lClienteOperaContaPropria = null;

                List <ClientePendenciaCadastralInfo> lPendenciasCad = null;

                List <ClienteContratoInfo> lContratosCliente = null;

                List <LogIntranetInfo> lLogsIntranet = null;

                LoginInfo lLoginReimportacao = null;

                ClienteAutorizacaoInfo lAutorizacao = null;

                if (pStReimportacao)
                {
                    //-->> Consultar pendencias cadastrais do cliente.
                    ClienteDbLib.SelecionaClientePorDataNacCpfCnpj(new RemoverEntidadeRequest <ClienteInfo>()
                    {
                        Objeto = pCliente
                    });

                    lIdClienteAntigo = pCliente.IdCliente;

                    lIdLoginAntigo = pLogin.IdLogin;

                    //-->> Recupera as informações de contratos de clientes
                    lContratosCliente = ClienteDbLib.ConsultarClienteContrato(pCliente.IdCliente.Value);

                    //--> consulta pendencias cadastrais para posteriormente inserir novamente
                    lPendenciasCad = ClienteDbLib.ListarClientePendenciaCadastral(pCliente.IdCliente.Value);

                    //--> consulta para ver se o cliente opera por conta Própria
                    lClienteOperaContaPropria = ClienteDbLib.ConsultarClienteNaoOperaPorContaPropria(pCliente.IdCliente.Value);

                    if (lClienteOperaContaPropria.IdCliente == 0)
                    {
                        lClienteOperaContaPropria = null;
                    }

                    //-->> Recupera as informações de log na intranet para depois ser inseridas novamente com o id_login novo
                    lLogsIntranet = ClienteDbLib.ConsultarLogsClientes(pCliente.IdLogin.Value);

                    //-->> Recupera as informações de login do usuario reimportado
                    lLoginReimportacao = ClienteDbLib.ReceberLogin(pCliente.DsCpfCnpj, pCliente.DtNascimentoFundacao.Value);

                    //-->> Recupera as informações de autorizações do cliente, caso haja alguma
                    lAutorizacao = ClienteDbLib.ReceberAutorizacoesCadastrais(pCliente.IdCliente.Value);

                    //--> Verifica a necessidade de exclusão do cliente antes de iserrir
                    ClienteDbLib.RemoverCliente(trans, new RemoverEntidadeRequest <ClienteInfo>()
                    {
                        Objeto = pCliente
                    });
                }

                //Inserir Login
                SalvarObjetoRequest <LoginInfo> lLogin = new SalvarObjetoRequest <LoginInfo>();

                lLogin.Objeto  = (pStReimportacao) ? lLoginReimportacao : pLogin;
                pLogin.IdLogin = ClienteDbLib.SalvarLogin(trans, lLogin, false).Codigo;

                //Colocar idLogin no cliente
                pCliente.IdLogin = pLogin.IdLogin.Value;

                //Inserir Cliente
                SalvarObjetoRequest <ClienteInfo> lCliente = new SalvarObjetoRequest <ClienteInfo>();
                lCliente.Objeto = pCliente;

                if (lClienteOperaContaPropria != null)
                {
                    lCliente.Objeto.DadosClienteNaoOperaPorContaPropria = lClienteOperaContaPropria;
                }
                else
                {
                    lCliente.Objeto.DadosClienteNaoOperaPorContaPropria = null; //--> Este dado não existe no Sinacor, portanto não deve ser informado.
                }



                pCliente.IdCliente = ClienteDbLib.SalvarCliente(trans, lCliente, false, pStReimportacao).Codigo;

                //Faz o swap de cliente no suitability
                if (pStReimportacao && lIdClienteAntigo != null)
                {
                    ClienteDbLib.SalvarImportacaoSuitability(lIdClienteAntigo.Value, pCliente.IdCliente.Value, trans);

                    if (lPendenciasCad != null && lPendenciasCad.Count > 0)
                    {
                        lPendenciasCad.ForEach(pend =>
                        {
                            ClientePendenciaCadastralInfo lPendencia = new ClientePendenciaCadastralInfo();

                            lPendencia = pend;

                            lPendencia.IdCliente = pCliente.IdCliente;

                            lPendencia.IdPendenciaCadastral = null;

                            lPendencia.IdLoginRealizacao = null;

                            ClienteDbLib.SalvarClientePendenciaCadastral(trans, lPendencia);
                        });
                    }
                }

                //--> Verifica se o cliente preencheu o contrato de
                //--> legislação anteriormente e salva com o código novo do cliente
                if (lContratosCliente != null && lContratosCliente.Count > 0)
                {
                    lContratosCliente.ForEach(contrato =>
                    {
                        ClienteContratoInfo lContrato = new ClienteContratoInfo();

                        lContrato.IdCliente = pCliente.IdCliente;

                        lContrato.IdContrato = contrato.IdContrato;

                        lContrato.DtAssinatura = contrato.DtAssinatura;

                        ClienteDbLib.SalvarImportacaoClienteContrato(trans, lContrato);
                    });
                }

                //--> Verifica se há logs na intranet do cliente para gravar novamente
                if (lLogsIntranet != null && lLogsIntranet.Count > 0)
                {
                    lLogsIntranet.ForEach(log => {
                        LogIntranetInfo lLog = new LogIntranetInfo();

                        lLog = log;

                        lLog.IdLogin = pCliente.IdLogin.Value;

                        lLog.DsObservacao += string.Concat(" ", lLog.IdLogin);

                        ClienteDbLib.RegistrarLog(trans, lLog);
                    });
                }

                //--> Insere novamente a autorização, se houver
                if (lAutorizacao != null && lAutorizacao.StAutorizado != null)
                {
                    lAutorizacao.IdCliente = pCliente.IdCliente.Value;
                    ClienteDbLib.SalvarAutorizacaoCadastralImportacao(trans, lAutorizacao);
                }

                //colocar idCliente nas outras entidades
                //Inserir outras entidades
                SalvarObjetoRequest <ClienteTelefoneInfo> lTelefone;
                foreach (ClienteTelefoneInfo item in pTelefone)
                {
                    item.IdCliente   = pCliente.IdCliente.Value;
                    lTelefone        = new SalvarObjetoRequest <ClienteTelefoneInfo>();
                    lTelefone.Objeto = item;
                    ClienteDbLib.SalvarClienteTelefone(trans, lTelefone);
                }

                SalvarObjetoRequest <ClienteEnderecoInfo> lEndereco;
                foreach (ClienteEnderecoInfo item in pEndereco)
                {
                    item.IdCliente   = pCliente.IdCliente.Value;
                    lEndereco        = new SalvarObjetoRequest <ClienteEnderecoInfo>();
                    lEndereco.Objeto = item;
                    ClienteDbLib.SalvarClienteEndereco(trans, lEndereco);
                }

                SalvarObjetoRequest <ClienteBancoInfo> lBanco;
                foreach (ClienteBancoInfo item in pContaBancaria)
                {
                    item.IdCliente = pCliente.IdCliente.Value;
                    lBanco         = new SalvarObjetoRequest <ClienteBancoInfo>();
                    lBanco.Objeto  = item;
                    ClienteDbLib.SalvarClienteBanco(trans, lBanco);
                }

                SalvarObjetoRequest <ClienteContaInfo> lConta;
                foreach (ClienteContaInfo item in pConta)
                {
                    item.IdCliente = pCliente.IdCliente.Value;
                    lConta         = new SalvarObjetoRequest <ClienteContaInfo>();
                    lConta.Objeto  = item;
                    ClienteDbLib.SalvarClienteConta(trans, lConta);
                }

                SalvarObjetoRequest <ClienteDiretorInfo> lDiretor;
                foreach (ClienteDiretorInfo item in pDiretor)
                {
                    item.IdCliente  = pCliente.IdCliente.Value;
                    lDiretor        = new SalvarObjetoRequest <ClienteDiretorInfo>();
                    lDiretor.Objeto = item;
                    ClienteDbLib.SalvarClienteDiretor(trans, lDiretor);
                }

                SalvarObjetoRequest <ClienteEmitenteInfo> lEmitente;
                foreach (ClienteEmitenteInfo item in pEmitente)
                {
                    item.IdCliente   = pCliente.IdCliente.Value;
                    lEmitente        = new SalvarObjetoRequest <ClienteEmitenteInfo>();
                    lEmitente.Objeto = item;
                    ClienteDbLib.SalvarClienteEmitente(trans, lEmitente);
                }

                pSfp.IdCliente = pCliente.IdCliente.Value;
                SalvarObjetoRequest <ClienteSituacaoFinanceiraPatrimonialInfo> lSfp = new SalvarObjetoRequest <ClienteSituacaoFinanceiraPatrimonialInfo>();
                lSfp.Objeto = pSfp;
                ClienteDbLib.SalvarClienteSituacaoFinanceiraPatrimonial(trans, lSfp);

                ConexaoDbHelper lAcessaDados = new ConexaoDbHelper();
                lAcessaDados.ConnectionStringName = gNomeConexaoControleAcesso;

                using (DbCommand lDbCommand = lAcessaDados.CreateCommand(CommandType.StoredProcedure, "prc_UsuariosPermissoes_ins"))
                {
                    lAcessaDados.AddInParameter(lDbCommand, "@CodigoItem", DbType.Int32, pLogin.IdLogin.Value);
                    lAcessaDados.AddInParameter(lDbCommand, "@Status", DbType.Int32, 0);
                    lAcessaDados.AddInParameter(lDbCommand, "@CodigoPermissao", DbType.String, "22FF518C-C7D3-4ff0-A0CB-96F2476068BB");
                    lAcessaDados.ExecuteNonQuery(lDbCommand);
                }

                lAcessaDados = new ConexaoDbHelper();
                lAcessaDados.ConnectionStringName = gNomeConexaoRisco;

                using (DbCommand lDbCommand = lAcessaDados.CreateCommand(CommandType.StoredProcedure, "prc_ins_permissoes_default_cliente"))
                {
                    lAcessaDados.AddInParameter(lDbCommand, "@id_cliente", DbType.Int32, gContaPrincipal);
                    lAcessaDados.ExecuteNonQuery(lDbCommand);
                }

                trans.Commit();

                return(pCliente.IdCliente.Value);
            }
            catch (Exception ex)
            {
                trans.Rollback();
                throw ex;
            }
            finally
            {
                trans.Dispose();
                trans = null;
                if (!ConnectionState.Closed.Equals(conn.State))
                {
                    conn.Close();
                }
                conn.Dispose();
                conn = null;
            }
        }