package br.com.centralit.citcorpore.ajaxForms;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.centralit.citajax.html.AjaxFormAction;
import br.com.centralit.citajax.html.DocumentHTML;
import br.com.centralit.citajax.html.HTMLElement;
import br.com.centralit.citajax.html.HTMLForm;
import br.com.centralit.citajax.html.HTMLSelect;
import br.com.centralit.citcorpore.bean.CidadesDTO;
import br.com.centralit.citcorpore.bean.EnderecoDTO;
import br.com.centralit.citcorpore.bean.FornecedorDTO;
import br.com.centralit.citcorpore.bean.PaisDTO;
import br.com.centralit.citcorpore.bean.UfDTO;
import br.com.centralit.citcorpore.bean.UsuarioDTO;
import br.com.centralit.citcorpore.negocio.CidadesService;
import br.com.centralit.citcorpore.negocio.EnderecoService;
import br.com.centralit.citcorpore.negocio.FornecedorService;
import br.com.centralit.citcorpore.negocio.PaisServico;
import br.com.centralit.citcorpore.negocio.UfService;
import br.com.centralit.citcorpore.util.WebUtil;
import br.com.citframework.service.ServiceLocator;
import br.com.citframework.util.Constantes;
import br.com.citframework.util.UtilI18N;
@SuppressWarnings({ "rawtypes", "unchecked" })
public class Fornecedor extends AjaxFormAction {
@Override
public void load(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
UsuarioDTO usuario = WebUtil.getUsuario(request);
if (usuario == null) {
document.alert(UtilI18N.internacionaliza(request, "citcorpore.comum.sessaoExpirada"));
document.executeScript("window.location = '" + Constantes.getValue("SERVER_ADDRESS") + request.getContextPath() + "'");
return;
}
document.executeScript("$('#cnpj').unmask()");
document.executeScript("$('#cnpj').attr('disabled', 'disabled')");
this.preencherComboPaises(document, request, response);
HTMLSelect comboUfs = (HTMLSelect) document.getSelectById("comboUfs");
if (comboUfs != null) {
this.inicializarCombo(comboUfs, request);
}
HTMLSelect comboCidades = (HTMLSelect) document.getSelectById("comboCidades");
if (comboCidades != null) {
this.inicializarCombo(comboCidades, request);
}
}
public void restore(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
FornecedorDTO fornecedorDTO = (FornecedorDTO) document.getBean();
FornecedorService fornecedorService = (FornecedorService) ServiceLocator.getInstance().getService(FornecedorService.class, null);
if (fornecedorDTO != null && fornecedorDTO.getIdFornecedor() != null) {
fornecedorDTO = (FornecedorDTO) fornecedorService.restore(fornecedorDTO);
if (fornecedorDTO.getIdEndereco() != null) {
EnderecoDTO enderecoDTO = new EnderecoDTO();
enderecoDTO.setIdEndereco(fornecedorDTO.getIdEndereco());
EnderecoService enderecoService = (EnderecoService) ServiceLocator.getInstance().getService(EnderecoService.class, null);
enderecoDTO = (EnderecoDTO) enderecoService.restore(enderecoDTO);
fornecedorDTO.setLogradouro(enderecoDTO.getLogradouro());
fornecedorDTO.setNumero(enderecoDTO.getNumero());
fornecedorDTO.setComplemento(enderecoDTO.getComplemento());
fornecedorDTO.setBairro(enderecoDTO.getBairro());
fornecedorDTO.setCep(enderecoDTO.getCep());
// Pa�s
if (enderecoDTO.getIdPais() != null) {
fornecedorDTO.setIdPais(enderecoDTO.getIdPais());
HTMLElement idPais = document.getElementById("idPais");
idPais.setValue(enderecoDTO.getIdPais().toString());
this.preencherComboPaises(document, request, response);
}
// Uf
if (enderecoDTO.getIdUf() != null) {
fornecedorDTO.setIdUf(enderecoDTO.getIdUf());
HTMLElement idUf = document.getElementById("idUf");
idUf.setValue(enderecoDTO.getIdUf().toString());
this.preencherComboUfs(document, request, response);
}
// Cidade
if (enderecoDTO.getIdCidade() != null) {
fornecedorDTO.setIdCidade(enderecoDTO.getIdCidade());
HTMLElement idCidade = document.getElementById("idCidade");
idCidade.setValue(enderecoDTO.getIdCidade().toString());
this.preencherComboCidades(document, request, response);
}
}
HTMLForm form = document.getForm("form");
form.clear();
form.setValues(fornecedorDTO);
String mascara = "";
// Retirando a m�scara antiga.
document.executeScript("$('#cnpj').unmask()");
if (fornecedorDTO.getTipoPessoa() != null && !fornecedorDTO.getTipoPessoa().equals("")) {
document.executeScript("$('#comboTiposPessoa option[value=\"" + fornecedorDTO.getTipoPessoa() + "\"]').prop('selected', true)");
if (fornecedorDTO.getTipoPessoa().equalsIgnoreCase("F")) {
mascara = "999.999.999-99";
} else if (fornecedorDTO.getTipoPessoa().equalsIgnoreCase("J")) {
mascara = "99.999.999/9999-99";
}
// Aplicando a nova m�scara ao campo.
document.executeScript("$('#cnpj').mask(\"" + mascara + "\")");
}
}
}
public void save(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
// Obtendo os dados provenientes do formul�rio (encapsulados em um DTO - Data Transfer Object).
FornecedorDTO fornecedorDTO = (FornecedorDTO) document.getBean();
// Obtendo um servi�o para persistir os dados recebidos.
FornecedorService fornecedorService = (FornecedorService) ServiceLocator.getInstance().getService(FornecedorService.class, null);
// Verificando a exist�ncia dos dados e do servi�o.
if (fornecedorDTO != null && fornecedorService != null) {
// 1 - Desformatando os valores de alguns atributos.
// 1.1 - Cnpj
if (fornecedorDTO.getCnpj() != null) {
if (fornecedorDTO.getCnpj().equals("")) {
fornecedorDTO.setCnpj(null);
} else {
fornecedorDTO.setCnpj(fornecedorDTO.getCnpj().replaceAll("[\\./-]", ""));
}
}
// 1.2 - Telefone
if (fornecedorDTO.getTelefone() != null && fornecedorDTO.getTelefone().equals("")) {
fornecedorDTO.setTelefone(null);
}
// 1.3 - Fax
if (fornecedorDTO.getFax() != null && fornecedorDTO.getFax().equals("")) {
fornecedorDTO.setFax(null);
}
EnderecoDTO enderecoDTO = new EnderecoDTO();
EnderecoService enderecoService = (EnderecoService) ServiceLocator.getInstance().getService(EnderecoService.class, null);
if (enderecoDTO != null && enderecoService != null) {
if (fornecedorDTO.getIdEndereco() != null) {
enderecoDTO.setIdEndereco(fornecedorDTO.getIdEndereco());
}
if (fornecedorDTO.getLogradouro() != null) {
if (fornecedorDTO.getLogradouro().equals("")) {
enderecoDTO.setLogradouro(null);
} else {
enderecoDTO.setLogradouro(fornecedorDTO.getLogradouro());
}
}
if (fornecedorDTO.getNumero() != null) {
if (fornecedorDTO.getNumero().equals("")) {
enderecoDTO.setNumero(null);
} else {
enderecoDTO.setNumero(fornecedorDTO.getNumero());
}
}
if (fornecedorDTO.getComplemento() != null) {
if (fornecedorDTO.getComplemento().equals("")) {
enderecoDTO.setComplemento(null);
} else {
enderecoDTO.setComplemento(fornecedorDTO.getComplemento());
}
}
if (fornecedorDTO.getBairro() != null) {
if (fornecedorDTO.getBairro().equals("")) {
enderecoDTO.setBairro(null);
} else {
enderecoDTO.setBairro(fornecedorDTO.getBairro());
}
}
if (fornecedorDTO.getIdPais() != null) {
enderecoDTO.setIdPais(fornecedorDTO.getIdPais());
}
if (fornecedorDTO.getIdUf() != null) {
enderecoDTO.setIdUf(fornecedorDTO.getIdUf());
}
if (fornecedorDTO.getIdCidade() != null) {
enderecoDTO.setIdCidade(fornecedorDTO.getIdCidade());
}
if (fornecedorDTO.getCep() != null) {
if (fornecedorDTO.getCep().equals("")) {
enderecoDTO.setCep(null);
} else {
enderecoDTO.setCep(fornecedorDTO.getCep().replace("-", ""));
}
}
// Inserindo o endere�o.
if (fornecedorDTO.getIdEndereco() == null) {
enderecoService.create(enderecoDTO);
} else { // Atualizando o endere�o.
enderecoService.update(enderecoDTO);
}
// Definindo o endere�o do fornecedor.
fornecedorDTO.setIdEndereco(enderecoDTO.getIdEndereco());
}
if (fornecedorDTO.getIdFornecedor() == null) {
/*
* List<FornecedorDTO> fornecedores = (List) fornecedorService.list();
*
* // Verificando se existe algum fornecedor com CPF/CNPJ, Raz�o social ou Nome fantasia j� cadastrado. if (fornecedorDTO.getCnpj() != null) { for (FornecedorDTO fornecedor :
* fornecedores) { if (fornecedorDTO.getCnpj().equals(fornecedor.getCnpj() ) || fornecedorDTO.getRazaoSocial().equals(fornecedor.getRazaoSocial() ) ||
* fornecedorDTO.getNomeFantasia().equals(fornecedor.getNomeFantasia() ) ) { document.alert(UtilI18N.internacionaliza(request, "fornecedor.jaCadastrado") ); return; } } }
*/
if (fornecedorService.consultarCargosAtivos(fornecedorDTO)) {
document.alert(UtilI18N.internacionaliza(request, "fornecedor.jaCadastrado"));
return;
} else {
// Inserindo o fornecedor.
fornecedorService.create(fornecedorDTO);
document.alert(UtilI18N.internacionaliza(request, "MSG05"));
HTMLForm form = document.getForm("form");
form.clear();
}
} else {
// Atualizando o fornecedor.
if (fornecedorService.consultarCargosAtivos(fornecedorDTO)) {
document.alert(UtilI18N.internacionaliza(request, "fornecedor.jaCadastrado"));
return;
} else {
fornecedorService.update(fornecedorDTO);
document.alert(UtilI18N.internacionaliza(request, "MSG06"));
HTMLForm form = document.getForm("form");
form.clear();
}
}
}
document.executeScript("limpar_LOOKUP_FORNECEDOR()");
}
public void delete(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
FornecedorDTO fornecedorDTO = (FornecedorDTO) document.getBean();
FornecedorService fornecedorService = (FornecedorService) ServiceLocator.getInstance().getService(FornecedorService.class, null);
boolean retornoExclusao;
if (fornecedorDTO != null && fornecedorDTO.getIdFornecedor() != null && fornecedorService != null) {
//Verifica se existe algum contrato associado ao fornecedor, se existir, n�o deixa excluir.
boolean fornecedorAssociadoContrato = fornecedorService.existeFornecedorAssociadoContrato(fornecedorDTO.getIdFornecedor());
if(fornecedorAssociadoContrato){
document.alert(UtilI18N.internacionaliza(request, "fornecedor.fornecedorVinculadoContrato"));
return;
}
// Excluindo o fornecedor.
retornoExclusao = fornecedorService.excluirFornecedor(fornecedorDTO);
if (retornoExclusao == false) {
document.alert(UtilI18N.internacionaliza((HttpServletRequest) request, "fornecedor.exclusao"));
return;
} else {
document.alert(UtilI18N.internacionaliza(request, "MSG07"));
}
if (fornecedorDTO.getIdEndereco() != null && fornecedorDTO.getIdEndereco() > 0) {
EnderecoDTO enderecoDTO = new EnderecoDTO();
enderecoDTO.setIdEndereco(fornecedorDTO.getIdEndereco());
EnderecoService enderecoService = (EnderecoService) ServiceLocator.getInstance().getService(EnderecoService.class, null);
// Excluindo o endere�o associado.
enderecoService.delete(enderecoDTO);
}
HTMLForm form = document.getForm("form");
form.clear();
document.setBean(new FornecedorDTO());
load(document, request, response);
}
document.executeScript("limpar_LOOKUP_FORNECEDOR()");
}
@Override
public Class getBeanClass() {
return FornecedorDTO.class;
}
private void inicializarCombo(HTMLSelect componenteCombo, HttpServletRequest request) {
componenteCombo.removeAllOptions();
componenteCombo.addOption("", UtilI18N.internacionaliza(request, "citcorpore.comum.selecione"));
}
public void preencherComboPaises(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
HTMLSelect comboPaises = (HTMLSelect) document.getSelectById("comboPaises");
if (comboPaises != null) {
this.inicializarCombo(comboPaises, request);
PaisServico paisServico = (PaisServico) ServiceLocator.getInstance().getService(PaisServico.class, null);
if (paisServico != null) {
List<PaisDTO> paises = (List) paisServico.list();
// Ordenando paises alfabeticamente.
Collections.sort(paises, new Comparator<PaisDTO>() {
@Override
public int compare(PaisDTO o1, PaisDTO o2) {
if (o1 == null || o1.getNomePais().trim().equals("")) {
return -999;
}
if (o1 == null || o1.getNomePais().trim().equals("")) {
return -999;
}
return o1.getNomePais().compareTo(o2.getNomePais());
}
});
if (paises != null) {
for (PaisDTO pais : paises) {
comboPaises.addOption(pais.getIdPais().toString(), pais.getNomePais());
}
}
}
}
}
public void preencherComboUfs(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
HTMLSelect comboUfs = (HTMLSelect) document.getSelectById("comboUfs");
if (comboUfs != null) {
this.inicializarCombo(comboUfs, request);
int paisId = 0;
if (request.getParameter("idPais") != null && !request.getParameter("idPais").equals("")) {
paisId = Integer.parseInt(request.getParameter("idPais"));
} else {
HTMLElement idPais = document.getElementById("idPais");
if (idPais != null && idPais.getValue() != null && !idPais.getValue().equals("")) {
paisId = Integer.parseInt(idPais.getValue());
}
}
if (paisId > 0) {
UfService ufService = (UfService) ServiceLocator.getInstance().getService(UfService.class, null);
UfDTO obj = new UfDTO();
obj.setIdPais(paisId);
if (ufService != null) {
List<UfDTO> ufs = (List) ufService.listByIdPais(obj);
// Ordenando ufs alfabeticamente.
Collections.sort(ufs, new Comparator<UfDTO>() {
@Override
public int compare(UfDTO o1, UfDTO o2) {
if (o1 == null || o1.getNomeUf().trim().equals("")) {
return -999;
}
if (o1 == null || o1.getNomeUf().trim().equals("")) {
return -999;
}
return o1.getNomeUf().compareTo(o2.getNomeUf());
}
});
if (ufs != null) {
for (UfDTO uf : ufs) {
comboUfs.addOption(uf.getIdUf().toString(), uf.getNomeUf());
}
}
}
}
}
}
public void preencherComboCidades(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
HTMLSelect comboCidades = (HTMLSelect) document.getSelectById("comboCidades");
if (comboCidades != null) {
this.inicializarCombo(comboCidades, request);
int ufId = 0;
if (request.getParameter("idUf") != null && !request.getParameter("idUf").equals("")) {
ufId = Integer.parseInt(request.getParameter("idUf"));
} else {
HTMLElement idUf = document.getElementById("idUf");
if (idUf != null && idUf.getValue() != null && !idUf.getValue().equals("")) {
ufId = Integer.parseInt(idUf.getValue());
}
}
if (ufId > 0) {
CidadesService cidadesService = (CidadesService) ServiceLocator.getInstance().getService(CidadesService.class, null);
CidadesDTO obj = new CidadesDTO();
obj.setIdUf(ufId);
if (cidadesService != null && comboCidades != null) {
// O nome do m�todo deveria ser listByIdUf e n�o listByIdCidades.
List<CidadesDTO> cidades = (List) cidadesService.listByIdCidades(obj);
if (cidades != null) {
// Ordenando cidades alfabeticamente.
Collections.sort(cidades, new Comparator<CidadesDTO>() {
@Override
public int compare(CidadesDTO o1, CidadesDTO o2) {
if (o1 == null || o1.getNomeCidade().trim().equals("")) {
return -999;
}
if (o1 == null || o1.getNomeCidade().trim().equals("")) {
return -999;
}
return o1.getNomeCidade().compareTo(o2.getNomeCidade());
}
});
for (CidadesDTO cidade : cidades) {
comboCidades.addOption(cidade.getIdCidade().toString(), cidade.getNomeCidade());
}
}
}
}
}
}
}