/// <summary> /// Salva os responsáveis do aluno, e o pai e a mãe na filiação do aluno. /// </summary> /// <param name="listaResponsavel">Lista da estrutura do cadastro</param> /// <param name="entAluno">Aluno</param> /// <param name="bancoGestao">Transação do Gestão</param> /// <param name="bancoCore">Transação do Core</param> /// <param name="tra_idPrincipal">Id do tipo de responsável principal</param> /// <param name="salvarMaiusculo">Indica se os nomes devem ser salvos em maiúsculos</param> /// <param name="entPessoaAluno">Pessoa referente ao aluno - seta o id do Pai e da Mãe</param> /// <param name="obrigatorioTipoResponsavel">Validar se foi informado o Id do tipo de responsável principal.</param> /// <param name="ent_id">Id da entidade do usuário logado.</param> public static void SalvarResponsaveisAluno ( List <StructCadastro> listaResponsavel, ACA_Aluno entAluno, TalkDBTransaction bancoGestao, TalkDBTransaction bancoCore, Int32 tra_idPrincipal, bool salvarMaiusculo, ref PES_Pessoa entPessoaAluno, bool obrigatorioTipoResponsavel, Guid ent_id ) { List <StructCadastro> listCadastrados = new List <StructCadastro>(); List <StructCadastro> listaInseridos = new List <StructCadastro>(); Guid pes_idMae = Guid.Empty; Guid pes_idPai = Guid.Empty; if (tra_idPrincipal <= 0 && obrigatorioTipoResponsavel) { throw new ValidationException("É necessário informar o responsável do aluno."); } if (listaResponsavel.Count == 0) { throw new ValidationException("Responsável é obrigatório."); } if (!entAluno.IsNew) { // Guardar os responsáveis que já tinham sido cadastrados. listCadastrados = RetornaResponsaveisAluno(entAluno.alu_id, null); } // Buscando ids dos tipos de responsável dos parâmetros. Int32 tra_idMae = TipoResponsavelAlunoParametro.tra_idMae(ent_id); Int32 tra_idPai = TipoResponsavelAlunoParametro.tra_idPai(ent_id); Int32 tra_idProprio = TipoResponsavelAlunoParametro.tra_idProprio(ent_id); // ID do tipo de documento CPF. string docPadraoCPF = SYS_ParametroBO.ParametroValor(SYS_ParametroBO.eChave.TIPO_DOCUMENTACAO_CPF); Guid tdo_idCPF = String.IsNullOrEmpty(docPadraoCPF) ? Guid.Empty : new Guid(docPadraoCPF); // ID do tipo de documento RG. string docPadraoRG = SYS_ParametroBO.ParametroValor(SYS_ParametroBO.eChave.TIPO_DOCUMENTACAO_RG); Guid tdo_idRG = String.IsNullOrEmpty(docPadraoRG) ? Guid.Empty : new Guid(docPadraoRG); // ID do tipo de documento NIS. Guid tdo_idNis = ACA_ParametroAcademicoBO.ParametroValorGuidPorEntidade(eChaveAcademico.TIPO_DOCUMENTACAO_NIS, ent_id); List <string> ListValidacoesDoc = new List <string>(); foreach (StructCadastro resp in listaResponsavel) { //Responsáveis com o mesmo numero de documento foreach (PES_PessoaDocumento psd in resp.listPessoaDoc) { if (listaResponsavel.Any(p => p.entAlunoResp.pes_id != resp.entAlunoResp.pes_id && p.listPessoaDoc.Any(d => d.psd_numero == psd.psd_numero)) && !ListValidacoesDoc.Contains("Há mais de um responsável com o mesmo número de documento.")) { ListValidacoesDoc.Add("Há mais de um responsável com o mesmo número de documento."); } } // Responável tem data de nascimento maior que a data atual. if (resp.entPessoa.pes_dataNascimento > DateTime.Now) { if (resp.entAlunoResp.tra_id == TipoResponsavelAlunoParametro.tra_idMae(ent_id)) { ListValidacoesDoc.Add("A data de nascimento da mãe não pode ser maior que a data atual."); } if (resp.entAlunoResp.tra_id == TipoResponsavelAlunoParametro.tra_idPai(ent_id)) { ListValidacoesDoc.Add("A data de nascimento do pai não pode ser maior que a data atual."); } } // Responsavel do aluno é falecido e mora com ele -- erro if (resp.entAlunoResp.alr_moraComAluno && resp.entAlunoResp.alr_situacao == Convert.ToByte(ACA_AlunoResponsavelSituacao.Falecido)) { ListValidacoesDoc.Add("Responsável do aluno não pode morar com o aluno e ser falecido."); } // Responsavel tem data de nascimento mais nova que a do aluno if (resp.entPessoa.pes_dataNascimento > entPessoaAluno.pes_dataNascimento) { if (resp.entAlunoResp.tra_id == TipoResponsavelAlunoParametro.tra_idMae(ent_id)) { ListValidacoesDoc.Add("A data de nascimento da mãe não pode ser maior que a data de nascimento do aluno."); } if (resp.entAlunoResp.tra_id == TipoResponsavelAlunoParametro.tra_idPai(ent_id)) { ListValidacoesDoc.Add("A data de nascimento do pai não pode ser maior que a data de nascimento do aluno."); } } //Valida código NIS do aluno int index = resp.listPessoaDoc.FindIndex(p => p.tdo_id == tdo_idNis); if (index >= 0 && !(string.IsNullOrEmpty(resp.listPessoaDoc[index].psd_numero))) { string TipoPessoa; if (resp.entAlunoResp.tra_id == tra_idMae) { TipoPessoa = "A mãe"; } else if (resp.entAlunoResp.tra_id == tra_idPai) { TipoPessoa = "O pai"; } else { TipoPessoa = "O responsável"; } if (ACA_AlunoBO.NISInvalido(resp.listPessoaDoc[index].psd_numero)) { ListValidacoesDoc.Add(TipoPessoa + " possui o número do NIS inválido."); } } // Adiciona na lista dos dados inseridos. listaInseridos.Add( SalvarResponsavel(tra_idPrincipal, entAluno, resp, tra_idProprio, bancoCore, tra_idMae, tra_idPai, bancoGestao, tdo_idCPF, tdo_idRG, tdo_idNis, ref pes_idMae, ref pes_idPai, salvarMaiusculo, ref ListValidacoesDoc, listaResponsavel, ent_id)); } // Se não foi inserido nenhum item na lista como principal. if (!listaInseridos.Exists(p => p.entAlunoResp.alr_principal) && obrigatorioTipoResponsavel) { ListValidacoesDoc.Add("É necessário informar o responsável do aluno."); } if (ListValidacoesDoc.Count > 0) { throw new ValidationException(string.Join("<BR/>", ListValidacoesDoc.ToArray())); } // Salva na pessoa do aluno os Ids do pai e da mãe. entPessoaAluno = new PES_Pessoa { pes_id = entAluno.pes_id }; PES_PessoaBO.GetEntity(entPessoaAluno, bancoCore); // Se mudou a mãe. if (entPessoaAluno.pes_idFiliacaoMae != pes_idMae) { entPessoaAluno.pes_idFiliacaoMae = pes_idMae; PES_PessoaBO.Save(entPessoaAluno, bancoCore); } // Se mudou o pai. if (entPessoaAluno.pes_idFiliacaoPai != pes_idPai) { entPessoaAluno.pes_idFiliacaoPai = pes_idPai; PES_PessoaBO.Save(entPessoaAluno, bancoCore); } // Percorrer os itens que existiam antes, para excluir os que não tem mais. foreach (StructCadastro item in listCadastrados) { if (item.entPessoa.pes_id == entAluno.pes_id) { continue; } VerifcaItemCadastrado(listaInseridos, bancoCore, bancoGestao, item, tra_idProprio); } }