public static bool Save ( PES_Pessoa entityPessoa , PES_PessoaDeficiencia entityPessoaDeficiencia , DataTable dtEndereco , DataTable dtContato , DataTable dtDocumento , PES_CertidaoCivil entityCertidaoCivil , Guid pai_idAntigo , Guid cid_idAntigo , StructColaboradorFiliacao PaiAntigo , StructColaboradorFiliacao MaeAntigo , Guid tes_idAntigo , Guid tde_idAntigo , RHU_Colaborador entityColaborador , DataTable dtCargoFuncao , DataTable dtCargoDisciplina , bool bSalvarUsuario , bool bSalvarLive , SYS_Usuario entityUsuario , bool bEnviaEmail , string sNomePortal , string sHost , string sEmailSuporte , Guid ent_idUsuario , ACA_Docente entityDocente , string[] arquivosPermitidos , int tamanhoMaximoKB , CFG_Arquivo entFoto , bool ExcluirImagemAtual ) { TalkDBTransaction bancoCore = new PES_PessoaDAO()._Banco.CopyThisInstance(); TalkDBTransaction bancoGestao = new ACA_DocenteDAO()._Banco.CopyThisInstance(); bancoCore.Open(IsolationLevel.ReadCommitted); bancoGestao.Open(IsolationLevel.ReadCommitted); try { //Limpa o cache do docente CacheManager.Factory.Remove(string.Format(ModelCache.DOCENTE_POR_ENTIDADE_PESSOA_MODEL_KEY, entityColaborador.ent_id, entityPessoa.pes_id)); //Verifica se os dados da pessoa serão sempre salvos em maiúsculo. string sSalvarMaiusculo = SYS_ParametroBO.ParametroValor(SYS_ParametroBO.eChave.SALVAR_SEMPRE_MAIUSCULO); bool Salvar_Sempre_Maiusculo = !string.IsNullOrEmpty(sSalvarMaiusculo) && Convert.ToBoolean(sSalvarMaiusculo); var y = from DataRow dr in dtCargoFuncao.Rows where dr.RowState == DataRowState.Deleted select dr; if (dtCargoFuncao.Rows.Count == 0 || y.Count() == dtCargoFuncao.Rows.Count) { throw new ValidationException("É obrigatório o preenchimento de pelo menos um vínculo de trabalho do docente."); } string sPadraoUsuarioDocente = ACA_ParametroAcademicoBO.ParametroValorPorEntidade(eChaveAcademico.PAR_GRUPO_PERFIL_DOCENTE, ent_idUsuario); //Integraçao como o live UserLive entityUserLive = null; if (bSalvarLive) { entityUserLive = new UserLive(eTipoUserLive.Docente); //Cria o usuário docente para integraçao como o live ManageUserLive live = new ManageUserLive(); entityUserLive.email = entityUsuario.usu_email; entityUserLive.senha = entityUsuario.usu_senha; //Caso seja alteração carrega as turma //TODO: Fazer método específico para buscar apenas pelo doc_id. DataTable dtTurmas = entityDocente.doc_id > 0 ? TUR_TurmaBO.GetSelectBy_Pesquisa_TodosTipos (Guid.Empty, Guid.Empty, Guid.Empty, Guid.Empty, 0, 0, 0, 0, 0, 0, "", entityDocente.doc_id, false) : new DataTable(); //Obtendo CPF do docente string tdo_id = SYS_ParametroBO.ParametroValor(SYS_ParametroBO.eChave.TIPO_DOCUMENTACAO_CPF); var x = from DataRow dr in dtDocumento.Rows where dr.RowState != DataRowState.Deleted && dr["tdo_id"].ToString() == tdo_id select dr["numero"].ToString(); //Carrega primeira matricula ativa associada ao cargo de docente do colaborador var mat = from DataRow dr in dtCargoFuncao.Rows where dr.RowState != DataRowState.Deleted && dr["situacao_id"].ToString() == "1" select dr["coc_matricula"].ToString(); //Carrega os tipos de disciplinas var tipo_dis = from DataRow dr in dtCargoDisciplina.Rows where dr.RowState != DataRowState.Deleted select dr["tds_id"].ToString(); DataTable dtTipoDisciplinas = tipo_dis.Count() > 0 ? ACA_TipoDisciplinaBO.SelecionaTipoDisciplinaPorTipoDisciplina (Convert.ToInt32(tipo_dis.First()), bancoGestao, ent_idUsuario) : new DataTable(); if (x.Count() > 0) { DadosUserDocente dadosDocente = new DadosUserDocente { nome = entityPessoa.pes_nome , CPF = x.First() , matricula = mat.Count() > 0 ? mat.First() : string.Empty , turma = dtTurmas.Rows.Count > 0 ? dtTurmas.Rows[0]["tur_cod_desc_nome"].ToString() : string.Empty , serie = dtTurmas.Rows.Count > 0 ? dtTurmas.Rows[0]["crp_descricao"].ToString() : string.Empty , disciplina = dtTipoDisciplinas.Rows.Count > 0 ? dtTipoDisciplinas.Rows[0]["tds_nome"].ToString() : string.Empty }; entityUserLive.dadosUserDocente = dadosDocente; } else { if (!live.VerificarContaEmailExistente(entityUserLive)) { throw new ArgumentException("CPF é um documento obrigatório, para integração do docente com live."); } } } RHU_ColaboradorBO.Save(entityPessoa , entityPessoaDeficiencia , dtEndereco , dtContato , dtDocumento , entityCertidaoCivil , pai_idAntigo , cid_idAntigo , PaiAntigo , MaeAntigo , tes_idAntigo , tde_idAntigo , entityColaborador , dtCargoFuncao , dtCargoDisciplina , bSalvarUsuario , bSalvarLive , entityUsuario , entityUserLive , sPadraoUsuarioDocente , bEnviaEmail , sNomePortal , sHost , sEmailSuporte , ent_idUsuario , bancoCore , bancoGestao , arquivosPermitidos , tamanhoMaximoKB , entFoto , ExcluirImagemAtual); entityDocente.col_id = entityColaborador.col_id; if (entityDocente.Validate()) { Save(entityDocente, bancoGestao); } else { throw new ValidationException(GestaoEscolarUtilBO.ErrosValidacao(entityDocente)); } return(true); } catch (Exception err) { bancoGestao.Close(err); bancoCore.Close(err); throw; } finally { bancoGestao.Close(); bancoCore.Close(); } }