public void IncluirFornecedorIndividual(string documento) { SolicitacaoCadastroFornecedor solicitacaoCadastroFornecedor = _solicitacaoCadastroRepository.Buscar(x => x.CNPJ == documento || x.CPF == documento); SOLICITACAO solicitacao = solicitacaoCadastroFornecedor.WFD_SOLICITACAO; ROBO roboFornecedor = solicitacaoCadastroFornecedor.WFD_PJPF_ROBO; Domain.Models.Fornecedor fornecedor = new Domain.Models.Fornecedor { CONTRATANTE_ID = solicitacao.CONTRATANTE_ID, TIPO_PJPF_ID = solicitacaoCadastroFornecedor.PJPF_TIPO, RAZAO_SOCIAL = solicitacaoCadastroFornecedor.RAZAO_SOCIAL, NOME_FANTASIA = solicitacaoCadastroFornecedor.NOME_FANTASIA, NOME = solicitacaoCadastroFornecedor.NOME, CNPJ = solicitacaoCadastroFornecedor.CNPJ, CPF = solicitacaoCadastroFornecedor.CPF, CNAE = solicitacaoCadastroFornecedor.CNAE, INSCR_ESTADUAL = solicitacaoCadastroFornecedor.INSCR_ESTADUAL, INSCR_MUNICIPAL = solicitacaoCadastroFornecedor.INSCR_MUNICIPAL, ENDERECO = solicitacaoCadastroFornecedor.ENDERECO, NUMERO = solicitacaoCadastroFornecedor.NUMERO, COMPLEMENTO = solicitacaoCadastroFornecedor.COMPLEMENTO, BAIRRO = solicitacaoCadastroFornecedor.BAIRRO, CIDADE = solicitacaoCadastroFornecedor.CIDADE, UF = solicitacaoCadastroFornecedor.UF, CEP = solicitacaoCadastroFornecedor.CEP, PAIS = solicitacaoCadastroFornecedor.PAIS, ATIVO = true, }; if (roboFornecedor != null && solicitacaoCadastroFornecedor.PJPF_TIPO != 2) { fornecedor.ROBO_ID = roboFornecedor.ID; } #region Unspsc foreach (var item in solicitacao.WFD_SOL_UNSPSC) { fornecedor.FornecedorServicoMaterialList.Add(new FORNECEDOR_UNSPSC { SOLICITACAO_ID = solicitacao.ID, UNSPSC_ID = item.UNSPSC_ID, DT_INCLUSAO = DateTime.Now, WFD_PJPF = fornecedor }); } #endregion WFD_CONTRATANTE_PJPF contratanteFornecedor = new WFD_CONTRATANTE_PJPF { CATEGORIA_ID = solicitacaoCadastroFornecedor.CATEGORIA_ID, CONTRATANTE_ID = solicitacao.CONTRATANTE_ID, PJPF_ID = fornecedor.ID, PJPF_COD_ERP = solicitacaoCadastroFornecedor.COD_PJPF_ERP, PJPF_STATUS_ID = 1, PJPF_STATUS_ID_SOL = solicitacao.ID, TP_PJPF = 2 }; #region Bancos foreach (var item in solicitacao.WFD_SOL_MOD_BANCO) { contratanteFornecedor.WFD_PJPF_BANCO.Add(new FORNECEDOR_BANCO { CONTRATANTE_PJPF_ID = contratanteFornecedor.ID, BANCO_ID = item.BANCO_ID, AGENCIA = item.AGENCIA, AG_DV = item.AG_DV, CONTA = item.CONTA, CONTA_DV = item.CONTA_DV, ATIVO = true, DATA_UPLOAD = item.DATA_UPLOAD, NOME_ARQUIVO = item.NOME_ARQUIVO, ARQUIVO_ID = item.ARQUIVO_ID }); } #endregion #region Endereços foreach (var solicitacaoModificacaoEndereco in solicitacao.WFD_SOL_MOD_ENDERECO) { contratanteFornecedor.WFD_PJPF_ENDERECO.Add(new FORNECEDOR_ENDERECO { BAIRRO = solicitacaoModificacaoEndereco.BAIRRO, CEP = solicitacaoModificacaoEndereco.CEP, CIDADE = solicitacaoModificacaoEndereco.CIDADE, COMPLEMENTO = solicitacaoModificacaoEndereco.COMPLEMENTO, ENDERECO = solicitacaoModificacaoEndereco.ENDERECO, NUMERO = solicitacaoModificacaoEndereco.NUMERO, PAIS = solicitacaoModificacaoEndereco.PAIS, T_UF = solicitacaoModificacaoEndereco.T_UF, TP_ENDERECO_ID = solicitacaoModificacaoEndereco.TP_ENDERECO_ID, UF = solicitacaoModificacaoEndereco.UF, CONTRATANTE_PJPF_ID = contratanteFornecedor.ID }); } #endregion #region Contatos foreach (var item in solicitacao.WFD_SOL_MOD_CONTATO) { contratanteFornecedor.WFD_PJPF_CONTATOS.Add(new FORNECEDOR_CONTATOS { CONTRAT_ORG_COMPRAS_ID = solicitacao.WFD_CONTRATANTE.WFD_CONTRATANTE_ORG_COMPRAS.First().ID, CONTRATANTE_PJPF_ID = contratanteFornecedor.ID, NOME = item.NOME, EMAIL = item.EMAIL, CELULAR = item.CELULAR, TELEFONE = item.TELEFONE }); } #endregion #region Documentos if (solicitacaoCadastroFornecedor.PJPF_TIPO != 2) { foreach (SOLICITACAO_DOCUMENTOS item in solicitacao.WFD_SOL_DOCUMENTOS) { if (item.ARQUIVO_ID != null) { contratanteFornecedor.WFD_PJPF_DOCUMENTOS.Add(new FORNECEDOR_DOCUMENTOS { CONTRATANTE_PJPF_ID = contratanteFornecedor.ID, ARQUIVO_ID = item.ARQUIVO_ID, DATA_VENCIMENTO = item.DATA_VENCIMENTO, DESCRICAO_DOCUMENTO_ID = item.DESCRICAO_DOCUMENTO_ID, LISTA_DOCUMENTO_ID = item.LISTA_DOCUMENTO_ID, OBRIGATORIO = item.OBRIGATORIO, EXIGE_VALIDADE = item.EXIGE_VALIDADE, PERIODICIDADE_ID = item.PERIODICIDADE_ID, SOLICITACAO_ID = solicitacao.ID, PJPF_ID = fornecedor.ID }); } } } #endregion #region Informações Complementares foreach (var item in solicitacao.WFD_INFORM_COMPL) { contratanteFornecedor.WFD_PJPF_INFORM_COMPL.Add(new FORNECEDOR_INFORM_COMPL { PERG_ID = item.PERG_ID, RESPOSTA = item.RESPOSTA, CONTRATANTE_PJPF_ID = contratanteFornecedor.ID }); } #endregion CONTRATANTE contratanteAncora = CriarContratante(documento, solicitacaoCadastroFornecedor); fornecedor.WFD_CONTRATANTE_PJPF.Add(contratanteFornecedor); contratanteAncora.WFD_CONTRATANTE_PJPF.Add(contratanteFornecedor); _fornecedorRepository.Inserir(fornecedor); _contratanteRepository.Inserir(contratanteAncora); _unitOfWork.Finalizar(); CriacaoUsuarioPadrao(documento, solicitacao.WFD_SOL_MOD_CONTATO.FirstOrDefault().EMAIL); }
/// <summary> /// CN.02 Pré - Configurar a Aplicação (Contratante) /// Os valores das tabelas abaixo são definidos pelo CONTRATANTE e devem ser especificadas nas implantações. /// Estes valores determinarão como a aplicação funcionará conforme as regras parametrizadas pelo Contratado. /// </summary> public void IncluirContratanteAncora(AdesaoContratante contratante) { //Incluir Contratante CONTRATANTE ancora = new CONTRATANTE(); ancora.TIPO_CADASTRO_ID = (int)contratante.TipoEmpresa; ancora.TIPO_CONTRATANTE_ID = (int)contratante.TipoContratante; ancora.DATA_CADASTRO = DateTime.Now; ancora.ATIVO = true; ancora.ATIVO_DT = DateTime.Now; ancora.CNPJ = contratante.Documento; ancora.RAZAO_SOCIAL = contratante.RazaoSocial; ancora.NOME_FANTASIA = contratante.NomeFantasia; ancora.COD_WEBFORMAT = contratante.CodigoWebformat; ancora.CONTRANTE_COD_ERP = contratante.CodigoErp; ancora.ESTILO = contratante.CodigoErp; //• WFD_CONTRATANTE_CONFIG - Define dados particulares do contratante(Manualmente) CONTRATANTE_CONFIGURACAO config = _contratanteConfig.BuscarPorId(1); ancora.WFD_CONTRATANTE_CONFIG = new CONTRATANTE_CONFIGURACAO() { SOLICITA_DOCS = config.SOLICITA_DOCS, SOLICITA_FICHA_CAD = config.SOLICITA_FICHA_CAD, LOGOTIPO = config.LOGOTIPO, TERMO_ACEITE = config.TERMO_ACEITE, ROBO_CICLO_ATU = config.ROBO_CICLO_ATU, ROBO_DT_PROX_EXEC = config.ROBO_DT_PROX_EXEC, BLOQUEIO_MANUAL = config.BLOQUEIO_MANUAL, BLOQUIEO_MANUAL_PRAZO = config.BLOQUIEO_MANUAL_PRAZO, TOTAL_TENTATIVA_ROBO = config.TOTAL_TENTATIVA_ROBO, NIVEIS_CATEGORIA = config.NIVEIS_CATEGORIA, QTD_ROBO_SIMULTANEA = config.QTD_ROBO_SIMULTANEA, PRAZO_ENTREGA_FICHA = config.PRAZO_ENTREGA_FICHA, FORNECEDOR_CARGA = config.FORNECEDOR_CARGA, FORNECEDOR_RETORNO = config.FORNECEDOR_RETORNO, CLIENTE_CARGA = config.CLIENTE_CARGA, CLIENTE_RETORNO = config.CLIENTE_RETORNO, CONTRATANTE_ID = 0 }; //• WFD_CONTRATANTE_CONFIG_EMAIL - Define os emails que o contratante envia (Manualmente) var contratanteConfiguracaoEmails = _contratanteConfigEmail.ListarTodosPorIdContratante(1); contratanteConfiguracaoEmails.ForEach(x => { ancora.WFD_CONTRATANTE_CONFIG_EMAIL.Add( new CONTRATANTE_CONFIGURACAO_EMAIL { ASSUNTO = x.ASSUNTO, CORPO = x.CORPO, EMAIL_TP_ID = x.EMAIL_TP_ID }); }); //• WFD_CONTRATANTE_FUNCAO - Define quais funções o contratante tem acesso.Se o contratante não for associado a uma função nesta tabela, // esta função não parecerá na tela de cadastro de novos perfis. (Manualmente) List <FUNCAO> funcao = _funcao.Listar().Where(x => x.ID == 7 || x.FUNCAO_PAI == 7).ToList(); ancora.WAC_FUNCAO = funcao; //• WFD_CONTRATANTE_LOG – Não é usado //• WFD_CONTRATANTE_ORG_COMPRAS – Define as organizações de compras que um contratante pode ter. //é necessário ao menos uma organização(Manualmente). var organizacoesDeCompras = _contratanteOrgCompras.ListarTodosPorIdContratante(1); organizacoesDeCompras.ForEach(x => { ancora.WFD_CONTRATANTE_ORG_COMPRAS.Add( new CONTRATANTE_ORGANIZACAO_COMPRAS { ORG_COMPRAS_COD = x.ORG_COMPRAS_COD, ORG_COMPRAS_DSC = x.ORG_COMPRAS_DSC }); }); //• WFD_TIPO_DOCUMENTOS – Grupo de documentos que o contratante e o fornecedor irão usar para armazenar seus arquivos. //Inicialmente será populada com a tabela WFD_TIPO_DOCUMENTOS_CH Manualmente. var tipoDocumentos = _tipoDocumentoRepository.Listar(x => x.Valido(x) && x.CONTRATANTE_ID == 1, e => e.DESCRICAO).ToList(); tipoDocumentos.ForEach(x => { ancora.WFD_TIPO_DOCUMENTOS.Add( new TIPO_DOCUMENTOS { ATIVO = x.ATIVO, DESCRICAO = x.DESCRICAO, TIPO_DOCUMENTOS_CH_ID = x.TIPO_DOCUMENTOS_CH_ID, }); }); //• WFD_DESCRICAO_DOCUMENTOS – São os documentos do grupo de documentos que o contratante e o fornecedor usarão //para armazenar seus arquivos.Inicialmente será populada com a tabela WFD_DESCRICAO_DOCUMENTOS_CH Manualmente. var descricaoDocumentos = _descricaoDocumentoRepository.Listar(e => e.ATIVO && e.CONTRATANTE_ID == 1).ToList(); descricaoDocumentos.ForEach(x => { ancora.WFD_DESCRICAO_DOCUMENTOS.Add( new WFD_DESCRICAO_DOCUMENTOS { ATIVO = x.ATIVO, DESCRICAO = x.DESCRICAO, DESCRICAO_DOCUMENTOS_CH_ID = x.DESCRICAO_DOCUMENTOS_CH_ID, TIPO_DOCUMENTOS_ID = x.TIPO_DOCUMENTOS_ID }); }); //• WFD_GRUPO – Define o grupo de empresas que o contratante faz parte. //Se o contratante não tive grupo é necessário criar ao menos um grupo pra ele. (Manualmente) //• WFD_GRUPO_CONTRATANTE – Associa os contratantes ao grupo de empresa. var grupos = _grupoRepository.BuscarPorId(1); ancora.WFD_GRUPO.Add(new GRUPO { GRUPO_NM = contratante.Grupo }); //• WFD_PJPF_CATEGORIA – Inicialmente serão as categorias armazenadas na tabela WFD_PJPF_CATEGORIA_CH (Manualmente). var categorias = _categoriaFornecedorRepository.ListarPorContratanteId(1); categorias.ForEach(x => { ancora.WFD_PJPF_CATEGORIA.Add(new FORNECEDOR_CATEGORIA { ATIVO = x.ATIVO, CATEGORIA_PAI_ID = x.CATEGORIA_PAI_ID, CODIGO = x.CODIGO, DESCRICAO = x.DESCRICAO, ISENTO_CONTATOS = x.ISENTO_CONTATOS, ISENTO_DADOSBANCARIOS = x.ISENTO_DADOSBANCARIOS, ISENTO_DOCUMENTOS = x.ISENTO_DOCUMENTOS, PJPF_CATEGORIA_CH_ID = x.PJPF_CATEGORIA_CH_ID, QIC_QUESTIONARIO_CATEGORIA = x.QIC_QUESTIONARIO_CATEGORIA }); }); //• WFD_USUARIO – Necessário criar um usuário Administrador Manualmente para o novo contratante. ancora.WFD_USUARIO.Add(new Domain.Models.USUARIO { ATIVO = true, CONTA_TENTATIVA = 0, DAT_NASCIMENTO = DateTime.Now, DT_CRIACAO = DateTime.Now, EXPIRA_EM_DIAS = 0, PRIMEIRO_ACESSO = true, CPF_CNPJ = contratante.UsuarioAdministrador.Documento, PRINCIPAL = contratante.UsuarioAdministrador.Administrador, CARGO = contratante.UsuarioAdministrador.Cargo, EMAIL = contratante.UsuarioAdministrador.Email, LOGIN = contratante.UsuarioAdministrador.Login, SENHA = "1000:GOVDjUgvS4PqbgHkr6Q3uRmFXy5EFPD5:V+GLrEZIIoGcY1h0gwFMVR+AiPdcSHy9", NOME = contratante.UsuarioAdministrador.Nome, }); //• WFL_FLUXO – Define todos os fluxos que o contratante âncora terá no sistema. //Inicialmente copiar os fluxos do contratante CH manualmente. var fluxos = _fluxo.BuscarPorContratanteId(1); fluxos.ForEach(x => { ancora.WFL_FLUXO.Add(new FLUXO { FLUXO_NM = x.FLUXO_NM, CONTRATANTE_ID = x.CONTRATANTE_ID, APLICACAO_ID = x.APLICACAO_ID, PAPEL_INI_FLUXO = x.PAPEL_INI_FLUXO, FLUXO_TP_ID = x.FLUXO_TP_ID }); }); //• WFL_FLUXO_SEQ_PRE_REQUIS – por enquanto não é usado. //• WFL_USUARIO_PAPEL – Associar o usuário Administrador aos papeis necessários ou a todos. var papeis = _papelRepository.ListarPorContratanteId(1); papeis.ForEach(x => { ancora.WFL_PAPEL.Add(new WFL_PAPEL { PAPEL_NM = x.PAPEL_NM, PAPEL_SGL = x.PAPEL_SGL, PAPEL_TP_ID = 50 }); }); //• WAC_PERFIL - É preciso criar um perfil Administrador Inicial (Manualmente) var perfis = _perfilRepository.ListarPorContratanteId(1); perfis.ForEach(x => { ancora.WAC_PERFIL.Add(new Perfil { PERFIL_DSC = x.PERFIL_DSC, PERFIL_NM = x.PERFIL_NM }); }); //• WFD_CONTRATANTE - Necessário Criar o Contratante(Manualmente) _contratante.Inserir(ancora); _unitOfWok.Finalizar(); //• WFL_FLUXO_SEQUENCIA – Define a sequência que cada Fluxo irá seguir no workflow. //Inicialmente copiar do contratante CH Manualmente. var fluxosContratantenovo = _fluxo.BuscarPorContratanteId(ancora.ID); fluxosContratantenovo.ForEach(y => { var fluxoSequenciais = _fluxoSequencia.ListarPorContratanteIdEFluxoTipoId(1, y.FLUXO_TP_ID); fluxoSequenciais.ForEach(x => { ancora.WFL_FLUXO_SEQUENCIA.Add(new FLUXO_SEQUENCIA { CONTRATANTE_ID = ancora.ID, FLUXO_ID = y.ID, SEQUENCIA = x.SEQUENCIA, PAPEL_ID_INI = x.PAPEL_ID_INI, PAPEL_ID_FIM = x.PAPEL_ID_FIM, FLUXO_ETAPA_NM = x.FLUXO_ETAPA_NM, FLUXO_ETAPA_DSC = x.FLUXO_ETAPA_DSC, FLUXO_SEQ_ANTERIOR = x.FLUXO_SEQ_ANTERIOR, GRUPO_ORIGEM = x.GRUPO_ORIGEM, GRUPO_DESTINO = x.GRUPO_DESTINO, EXECUCAO_MANUAL = x.EXECUCAO_MANUAL, APROV_SEM_ROBO = x.APROV_SEM_ROBO, BLOQ_INATIVO_RECEITA = x.BLOQ_INATIVO_RECEITA, }); }); }); //contratanteAncora.WFL_FLUXO_SEQUENCIA = fluxoSequenciais; _contratante.Alterar(ancora); _unitOfWok.Finalizar(); ancora.USUARIO_ID = ancora.WFD_USUARIO.FirstOrDefault().ID; _contratante.Alterar(ancora); _unitOfWok.Finalizar(); }