package br.com.ec.controller;
import java.io.Serializable;
import java.util.ArrayList;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.event.FlowEvent;
import org.springframework.context.annotation.Scope;
import br.com.ec.core.generic.GenericService;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.dto.PessoaDTO;
import br.com.ec.domain.model.Endereco;
import br.com.ec.domain.model.Funcionario;
import br.com.ec.domain.model.Pessoa;
import br.com.ec.domain.model.tipos.TipoDependentes;
import br.com.ec.domain.model.tipos.TipoEscolaridade;
import br.com.ec.domain.model.tipos.TipoEstadoCivil;
import br.com.ec.domain.model.tipos.TipoPessoa;
import br.com.ec.domain.model.tipos.TipoRacaCor;
import br.com.ec.domain.service.PessoaService;
import br.com.ec.domain.shared.ConstantesSEC;
import br.com.ec.domain.shared.GerenciadorEmailImpl;
import br.com.ec.web.exception.VerificadorLancamentoException;
import br.com.ec.web.exception.VerificadorLancamentoException.CommandBean;
import br.com.ec.web.generic.AbstractBean;
import br.com.ec.web.message.LancadorMensagem;
import br.com.ec.web.util.TipoOperacao;
@Named
@Scope
("view")
public class CadastroExternoBean
extends AbstractBean
<PessoaDTO
> implements Serializable {
private static final long serialVersionUID = 1L
;
private Pessoa pessoaSelecionada
;
private Funcionario funcionarioSelecionado
;
private Endereco enderecoSelecionado
;
private String proximoPasso
;
private PessoaService pessoaService
;
@Inject
public CadastroExternoBean
(PessoaService pessoaService
) {
this.
pessoaService = pessoaService
;
}
@
Override
public void preCarregamento
() {
limparEntidade
();
}
@
Override
public void limparEntidade
() {
PessoaDTO pessoaDTO =
new PessoaDTO
();
pessoaDTO.
setTipoPessoa(TipoPessoa.
FISICA_F.
getValor());
pessoaDTO.
setNome("NOVATO");
setEntidade
(pessoaDTO
);
}
@
Override
public GenericService
<PessoaDTO
> getService
() {
return null;
}
@
Override
public PessoaDTO getEntidade
() {
return entidade
;
}
@
Override
public void preConsultar
() {
setTipoOperacao
(TipoOperacao.
CONSULTAR);
}
@
Override
public PessoaDTO getId
() {
return getEntidade
();
}
public TipoEstadoCivil
[] getTiposEstadoCivil
() {
return TipoEstadoCivil.
values();
}
public TipoRacaCor
[] getTiposRacaCor
() {
return TipoRacaCor.
values();
}
public TipoEscolaridade
[] getTiposEscolaridade
() {
return TipoEscolaridade.
values();
}
public TipoDependentes
[] getTiposDependentes
() {
return TipoDependentes.
values();
}
public Pessoa getPessoaSelecionada
() {
return pessoaSelecionada
;
}
public void setPessoaSelecionada
(Pessoa pessoaSelecionada
) {
this.
pessoaSelecionada = pessoaSelecionada
;
}
public Funcionario getFuncionarioSelecionado
() {
return funcionarioSelecionado
;
}
public void setFuncionarioSelecionado
(Funcionario funcionarioSelecionado
) {
this.
funcionarioSelecionado = funcionarioSelecionado
;
}
public Endereco getEnderecoSelecionado
() {
return enderecoSelecionado
;
}
public void setEnderecoSelecionado
(Endereco enderecoSelecionado
) {
this.
enderecoSelecionado = enderecoSelecionado
;
}
public String getProximoPasso
() {
return proximoPasso
;
}
public void setProximoPasso
(String proximoPasso
) {
this.
proximoPasso = proximoPasso
;
}
/*********************************************************/
public void iniciarCadastroExterno
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
Pessoa pessoa =
new Pessoa
(getEntidade
());
pessoa.
setEnderecos(new ArrayList<Endereco
>());
setPessoaSelecionada
(pessoaService.
cadastroExterno(null, pessoa,
null,
null));
if (getPessoaSelecionada
().
getNome().
equals("NOVATO")) {
getPessoaSelecionada
().
setNome("");
}
setFuncionarioSelecionado
(getPessoaSelecionada
().
getFuncionario());
setEnderecoSelecionado
(getPessoaSelecionada
().
primeiroEndereco());
if (VerificadorUtil.
estaNulo(getEnderecoSelecionado
())) {
setEnderecoSelecionado
(new Endereco
(true));
}
}
});
}
public String seguir
(final FlowEvent evento
) {
setProximoPasso
(evento.
getOldStep());
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
pessoaService.
cadastroExterno(evento, getPessoaSelecionada
(), getFuncionarioSelecionado
(), getEnderecoSelecionado
());
setFuncionarioSelecionado
(getPessoaSelecionada
().
getFuncionario());
setProximoPasso
(evento.
getNewStep());
}
});
return getProximoPasso
();
}
public void finalizarCadastro
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
new GerenciadorEmailImpl
()
.
comEmailsDestino(ConstantesSEC.
DESTINATARIOS_EMAIL_RH)
.
comAssunto("[EC] NOVO COLABORADOR CADASTRADO")
.
comConteudoHtml("COLABORADOR: " + getPessoaSelecionada
().
getNome())
.
enviar();
setPessoaSelecionada
(null);
setEnderecoSelecionado
(null);
limparEntidade
();
LancadorMensagem.
lancarSucesso("CADASTRO REALIZADO COM SUCESSO");
}
});
}
}