package br.gov.al.saude.test.formatador;
import static br.gov.al.saude.test.ConstantesTestHelper.UtilConstantes.ESPACO;
import static br.gov.al.saude.test.ConstantesTestHelper.UtilConstantes.PONTO_VIRGULA;
import static br.gov.al.saude.test.util.ConversorDeTipo.FORMAT_DATE_DD_MM_YYYY_HH_MM_SS;
import static br.gov.al.saude.test.util.ConversorDeTipo.converterDateParaString;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import br.gov.al.saude.framework.core.util.ConversorDeTipo;
import br.gov.al.saude.framework.core.util.VerificadorUtil;
import br.gov.al.saude.scg.model.view.PessoaDocumentoView;
import br.gov.al.saude.scg.model.view.PessoaFisicaView;
import br.gov.al.saude.scs.model.Frequencia;
import br.gov.al.saude.scs.model.Turma;
import br.gov.al.saude.scs.model.TurmaParticipante;
import br.gov.al.saude.scs.model.TurmaPeriodo;
import br.gov.al.saude.scs.model.TurmaProcesso;
import br.gov.al.saude.scs.model.view.ProcessoOrcamentoView;
import br.gov.al.saude.test.util.formatador.impl.AbstractFormatadorDeMensagem;
public class FormatadorTurmaDetalhado
extends AbstractFormatadorDeMensagem
<Turma
> {
@
Override
protected String obterPadrao
() {
StringBuilder mensagemPadrao =
new StringBuilder();
mensagemPadrao.
append("Turma: ");
mensagemPadrao.
append("Capacitação: ''{0}'', Identificador da Turma: ''{1}'', Ano de Exercício: ''{2}'', ");
mensagemPadrao.
append("Unidade Solicitante: ''{3}'', ");
mensagemPadrao.
append("Representantes: [{4}], ");
mensagemPadrao.
append("Situação da Turma: ''{5}'', Carga Horária: ''{6}'', Unidade Federativa: ''{7}'', Município: ''{8}'', ");
mensagemPadrao.
append("Observação: ''{9}'', Ementa: ''{10}'', Ativo: ''{11}'', ");
mensagemPadrao.
append("Processos: [{12}], ");
mensagemPadrao.
append("Participantes - Organizadores: [{13}], ");
mensagemPadrao.
append("Participantes: [{14}], ");
mensagemPadrao.
append("Períodos: [{15}], ");
mensagemPadrao.
append("Frequências: [{16}]");
return mensagemPadrao.
toString();
}
@
Override
protected List<Object> gerarParametros
(Turma turma
) {
List<Object> listaParametros =
new ArrayList<Object>();
listaParametros.
add(turma.
getCapacitacao().
getDescricao());
listaParametros.
add(turma.
getSequencial());
listaParametros.
add(String.
valueOf(turma.
getAnoExercicio()));
listaParametros.
add(turma.
getUnidadeSolicitante().
getDescricao());
listaParametros.
add(gerarStringRepresentantes
(turma.
getRepresentantes()));
listaParametros.
add(turma.
getSituacaoTurma());
listaParametros.
add(turma.
getCargaHoraria());
listaParametros.
add(turma.
getUf().
getCodigo());
listaParametros.
add(turma.
getMunicipio().
getNomeMunicipio());
listaParametros.
add(VerificadorUtil.
naoEstaNuloOuVazio(turma.
getObservacao())?turma.
getObservacao():
"");
listaParametros.
add(VerificadorUtil.
naoEstaNuloOuVazio(turma.
getEmenta())?turma.
getEmenta():
"");
listaParametros.
add(turma.
getIndicadorAtivo()?"SIM":
"NÃO");
listaParametros.
add(gerarStringProcessos
(turma.
getProcessos()));
listaParametros.
add(gerarStringParticipantesOrganizadores
(turma.
getParticipantes()));
listaParametros.
add(gerarStringParticipantes
(turma.
getParticipantes()));
listaParametros.
add(gerarStringPeriodos
(turma.
getPeriodos()));
listaParametros.
add(gerarStringFrequencias
(turma.
getFrequencias()));
return listaParametros
;
}
private String gerarStringFrequencias
(Set<Frequencia
> frequencias
) {
StringBuilder mensagemFrequencias =
new StringBuilder();
for (Frequencia frequencia : frequencias
){
mensagemFrequencias.
append(MessageFormat.
format("Data e Hora: ''{0}'', Validado: ''{1}'', Ativo: ''{2}''",
converterDateParaString
(frequencia.
getData(), FORMAT_DATE_DD_MM_YYYY_HH_MM_SS
),
frequencia.
getIndicadorValidado()?"SIM":
"NÃO",
frequencia.
getIndicadorAtivo()?"SIM":
"NÃO"))
.
append(PONTO_VIRGULA
)
.
append(ESPACO
);
}
return retirarUltimoPontoIhVirgulaComEspaco
(mensagemFrequencias.
toString());
}
private String gerarStringPeriodos
(Set<TurmaPeriodo
> periodos
) {
StringBuilder mensagemPeriodos =
new StringBuilder();
for (TurmaPeriodo periodo : periodos
){
mensagemPeriodos.
append(MessageFormat.
format("Data e Hora Inicial: ''{0}'', Data e Hora Final: ''{1}''",
converterDateParaString
(periodo.
getDataInicial(), FORMAT_DATE_DD_MM_YYYY_HH_MM_SS
),
converterDateParaString
(periodo.
getDataFinal(), FORMAT_DATE_DD_MM_YYYY_HH_MM_SS
)))
.
append(PONTO_VIRGULA
)
.
append(ESPACO
);
}
return retirarUltimoPontoIhVirgulaComEspaco
(mensagemPeriodos.
toString());
}
private String gerarStringRepresentantes
(Set<PessoaFisicaView
> representantes
) {
StringBuilder mensagemRepresentantes =
new StringBuilder();
for (PessoaFisicaView representante : representantes
){
mensagemRepresentantes.
append(MessageFormat.
format("Nome: ''{0}''",
VerificadorUtil.
naoEstaNuloOuVazio(representante
)?representante.
getNomePessoa():
""))
.
append(PONTO_VIRGULA
)
.
append(ESPACO
);
}
return retirarUltimoPontoIhVirgulaComEspaco
(mensagemRepresentantes.
toString());
}
private String gerarStringProcessos
(Set<TurmaProcesso
> processos
) {
StringBuilder mensagemProcessos =
new StringBuilder();
for (TurmaProcesso processo : processos
){
mensagemProcessos.
append(MessageFormat.
format("Órgão: ''{0}'', Número do Processo: ''{1}'', Ano: ''{2}'', "
+
"Despesas: [{3}]",
VerificadorUtil.
naoEstaNuloOuVazio(processo.
getOrgao())?String.
valueOf(processo.
getOrgao().
getCodigo()):
"",
VerificadorUtil.
naoEstaNuloOuVazio(processo.
getNumeroProcesso())?String.
valueOf(processo.
getNumeroProcesso()):
"",
VerificadorUtil.
naoEstaNuloOuVazio(processo.
getAno())?String.
valueOf(processo.
getAno()):
"",
gerarStringProcessosElementosDespesa
(processo.
getDespesasTurma().
getElementosDespesa())))
.
append(PONTO_VIRGULA
)
.
append(ESPACO
);
}
return retirarUltimoPontoIhVirgulaComEspaco
(mensagemProcessos.
toString());
}
private String gerarStringProcessosElementosDespesa
(List<ProcessoOrcamentoView
> elementosDespesa
) {
StringBuilder mensagemElementosDespesa =
new StringBuilder();
for (ProcessoOrcamentoView elemento : elementosDespesa
){
mensagemElementosDespesa.
append(MessageFormat.
format("Elemento de Despesa: ''{0}'', Fonte de Recurso: ''{1}'', Valor Orçado: ''{2}''",
VerificadorUtil.
naoEstaNuloOuVazio(elemento.
getElementoDespesa())?elemento.
getElementoDespesa():
"",
VerificadorUtil.
naoEstaNuloOuVazio(elemento.
getFonteRecurso())?elemento.
getFonteRecurso():
"",
VerificadorUtil.
naoEstaNuloOuVazio(elemento.
getValorOrcado())?String.
valueOf(elemento.
getValorOrcado()):
""))
.
append(PONTO_VIRGULA
)
.
append(ESPACO
);
}
return retirarUltimoPontoIhVirgulaComEspaco
(mensagemElementosDespesa.
toString());
}
private String gerarStringParticipantesOrganizadores
(Set<TurmaParticipante
> participantesOrganizadores
) {
StringBuilder mensagemParticipantesOrganizadores =
new StringBuilder();
for (TurmaParticipante participante : participantesOrganizadores
){
if (participante.
getPerfil().
getIndicadorOrganizador()) {
mensagemParticipantesOrganizadores.
append(MessageFormat.
format("Nome: ''{0}'', CPF: ''{1}'', Perfil: ''{2}'', Indicador de Servidor: ''{3}'', "
+
"Indicador de Remuneração: ''{4}'', Carga Horária Específica: ''{5}''",
VerificadorUtil.
naoEstaNuloOuVazio(participante.
getPessoa())?participante.
getPessoa().
getNomePessoa():
"",
recuperarCpfPessoa
(participante.
getPessoa().
getDocumentos()),
participante.
getPerfil().
getDescricao(),
ConversorDeTipo.
formatarBooleanParaString(participante.
getIndicadorServidor(),
"SIM",
"NÃO"),
ConversorDeTipo.
formatarBooleanParaString(participante.
getIndicadorRemunerado(),
"SIM",
"NÃO"),
VerificadorUtil.
naoEstaNuloOuVazio(participante.
getCargaHorariaEspecifica())?participante.
getCargaHorariaEspecifica():
""))
.
append(PONTO_VIRGULA
)
.
append(ESPACO
);
}
}
return retirarUltimoPontoIhVirgulaComEspaco
(mensagemParticipantesOrganizadores.
toString());
}
private String gerarStringParticipantes
(Set<TurmaParticipante
> participantes
) {
StringBuilder mensagemParticipantesOrganizadores =
new StringBuilder();
for (TurmaParticipante participante : participantes
){
if (participante.
getPerfil().
getIndicadorOrganizador() ==
false) {
mensagemParticipantesOrganizadores.
append(MessageFormat.
format("Nome: ''{0}'', CPF: ''{1}'', Perfil: ''{2}'', Indicador de Servidor: ''{3}'', "
+
"Indicador de Remuneração: ''{4}'', Carga Horária Específica: ''{5}''",
VerificadorUtil.
naoEstaNuloOuVazio(participante.
getPessoa())?participante.
getPessoa().
getNomePessoa():
"",
recuperarCpfPessoa
(participante.
getPessoa().
getDocumentos()),
participante.
getPerfil().
getDescricao(),
ConversorDeTipo.
formatarBooleanParaString(participante.
getIndicadorServidor(),
"SIM",
"NÃO"),
ConversorDeTipo.
formatarBooleanParaString(participante.
getIndicadorRemunerado(),
"SIM",
"NÃO"),
VerificadorUtil.
naoEstaNuloOuVazio(participante.
getCargaHorariaEspecifica())?participante.
getCargaHorariaEspecifica():
""))
.
append(PONTO_VIRGULA
)
.
append(ESPACO
);
}
}
return retirarUltimoPontoIhVirgulaComEspaco
(mensagemParticipantesOrganizadores.
toString());
}
private String recuperarCpfPessoa
(Set<PessoaDocumentoView
> documentos
) {
for (PessoaDocumentoView documento : documentos
) {
if (documento.
getSiglaTipoDocumento().
equals("CPF")) {
return documento.
getNumero();
}
}
return null;
}
}