package br.com.centralit.citcorpore.ajaxForms;
import java.util.ArrayList;
import java.util.Collection;
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.HTMLForm;
import br.com.centralit.citajax.html.HTMLSelect;
import br.com.centralit.citcorpore.bean.AlcadaDTO;
import br.com.centralit.citcorpore.bean.GrupoDTO;
import br.com.centralit.citcorpore.bean.LimiteAlcadaDTO;
import br.com.centralit.citcorpore.negocio.AlcadaService;
import br.com.centralit.citcorpore.negocio.CentroResultadoService;
import br.com.centralit.citcorpore.negocio.GrupoService;
import br.com.centralit.citcorpore.negocio.LimiteAlcadaService;
import br.com.centralit.citcorpore.util.Enumerados.TipoAlcada;
import br.com.centralit.citcorpore.util.WebUtil;
import br.com.citframework.excecao.ServiceException;
import br.com.citframework.service.ServiceLocator;
import br.com.citframework.util.UtilFormatacao;
import br.com.citframework.util.UtilI18N;
/**
* @author rodrigo.oliveira
*
*/
@SuppressWarnings({"rawtypes", "unchecked"})
public class Alcada extends AjaxFormAction {
private AlcadaService alcadaService;
@Override
public Class getBeanClass() {
return AlcadaDTO.class;
}
@Override
public void load(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
preencheComboTipoAlcada(document, request);
}
private void preencheComboTipoAlcada(DocumentHTML document, HttpServletRequest request) throws Exception {
HTMLSelect combo = (HTMLSelect) document.getSelectById("tipoAlcada");
inicializaCombo(combo, request);
for (TipoAlcada c : TipoAlcada.values()){
if (c.getDescricao() != null) {
combo.addOption(c.name(), c.getDescricao());
}
}
}
private void inicializaCombo(HTMLSelect componenteCombo, HttpServletRequest request) {
componenteCombo.removeAllOptions();
componenteCombo.addOption("", UtilI18N.internacionaliza(request, "citcorpore.comum.selecione"));
}
public void save(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
AlcadaDTO alcada = (AlcadaDTO) document.getBean();
LimiteAlcadaService limiteService = (LimiteAlcadaService) ServiceLocator.getInstance().getService(LimiteAlcadaService.class, WebUtil.getUsuarioSistema(request));
ArrayList<LimiteAlcadaDTO> listaDeLimites = (ArrayList<LimiteAlcadaDTO>) br.com.citframework.util.WebUtil.deserializeCollectionFromRequest(LimiteAlcadaDTO.class, "listLimites", request);
boolean existeIgual = getAlcadaService(request).existeIgual(alcada);
if (alcada.getIdAlcada() == null || alcada.getIdAlcada() == 0) {
if(!existeIgual){
alcada = (AlcadaDTO) getAlcadaService(request).create(alcada);
limiteService.removerPorIdAlcada(alcada.getIdAlcada());
if (listaDeLimites != null && !listaDeLimites.isEmpty()) {
for (LimiteAlcadaDTO limiteAlcadaDTO : listaDeLimites) {
limiteAlcadaDTO.setIdAlcada(alcada.getIdAlcada());
limiteService.create(limiteAlcadaDTO);
}
}
document.alert(UtilI18N.internacionaliza(request, "MSG05"));
} else {
document.alert(UtilI18N.internacionaliza(request, "MSE01"));
return;
}
} else {
getAlcadaService(request).update(alcada);
limiteService.removerPorIdAlcada(alcada.getIdAlcada());
if (listaDeLimites != null && !listaDeLimites.isEmpty()) {
for (LimiteAlcadaDTO limiteAlcadaDTO : listaDeLimites) {
limiteAlcadaDTO.setIdAlcada(alcada.getIdAlcada());
limiteService.create(limiteAlcadaDTO);
}
}
document.alert(UtilI18N.internacionaliza(request, "MSG06"));
}
HTMLForm form = document.getForm("form");
form.clear();
document.executeScript("setSituacao()");
HTMLForm formLimite = document.getForm("formLimite");
formLimite.clear();
document.executeScript("setSituacaoLimite()");
document.executeScript("deleteAllRows()");
}
public void delete(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
AlcadaDTO alcadaDTO = (AlcadaDTO) document.getBean();
LimiteAlcadaService limiteService = (LimiteAlcadaService) ServiceLocator.getInstance().getService(LimiteAlcadaService.class, WebUtil.getUsuarioSistema(request) );
// Verificando a exist�ncia do DTO e do servi�o de limite.
if (alcadaDTO != null && limiteService != null) {
if (alcadaDTO.getIdAlcada() != null && alcadaDTO.getIdAlcada().intValue() > 0) {
CentroResultadoService centroResultadoService = (CentroResultadoService) ServiceLocator.getInstance().getService(CentroResultadoService.class, WebUtil.getUsuarioSistema(request) );
// Verificando se a al�ada a ser exclu�da est� associada a alguma al�ada de centro de resultado.
Collection centrosResultadoDTO = centroResultadoService.findByIdAlcada(alcadaDTO.getIdAlcada() );
if (centrosResultadoDTO != null && !centrosResultadoDTO.isEmpty() ) {
// Se existe a associa��o, notifica o usu�rio que a exclus�o foi cancelada.
document.alert(UtilI18N.internacionaliza(request, "MSG08") );
} else {
// Sen�o efetua a exclus�o.
limiteService.removerPorIdAlcada(alcadaDTO.getIdAlcada() );
getAlcadaService(request).delete(alcadaDTO);
}
}
HTMLForm form = document.getForm("form");
document.executeScript("deleteAllRows()");
form.clear();
}
}
public void restore(DocumentHTML document, HttpServletRequest request, HttpServletResponse response) throws Exception {
AlcadaDTO alcada = (AlcadaDTO) document.getBean();
alcada = (AlcadaDTO) getAlcadaService(request).restore(alcada);
LimiteAlcadaService limiteService = (LimiteAlcadaService) ServiceLocator.getInstance().getService(LimiteAlcadaService.class, WebUtil.getUsuarioSistema(request));
Collection<LimiteAlcadaDTO> colLimites = new ArrayList();
colLimites = limiteService.findByIdAlcada(alcada.getIdAlcada());
HTMLForm form = document.getForm("form");
form.clear();
document.executeScript("deleteAllRows()");
if (colLimites != null && !colLimites.isEmpty()){
StringBuilder scriptAddLinha = new StringBuilder();
GrupoService grupoService = (GrupoService) ServiceLocator.getInstance().getService(GrupoService.class, WebUtil.getUsuarioSistema(request));
GrupoDTO grupoDTO = new GrupoDTO();
String valor = "";
for (LimiteAlcadaDTO limiteAlcada : colLimites){
scriptAddLinha.append("addLinhaTabelaLimite(");
scriptAddLinha.append(limiteAlcada.getIdGrupo() +",");
grupoDTO.setIdGrupo(limiteAlcada.getIdGrupo());
grupoDTO = (GrupoDTO) grupoService.restore(grupoDTO);
if(grupoDTO != null){
scriptAddLinha.append("'" + grupoDTO.getNome() + "',");
}
scriptAddLinha.append("'" + limiteAlcada.getTipoLimite() + "',");
scriptAddLinha.append("'" + limiteAlcada.getAbrangenciaCentroCusto() + "',");
valor = UtilFormatacao.formatDouble(limiteAlcada.getLimiteItemUsoInterno(),2);
scriptAddLinha.append("'" + valor + "',");
valor = UtilFormatacao.formatDouble(limiteAlcada.getLimiteMensalUsoInterno(),2);
scriptAddLinha.append("'" + valor + "',");
valor = UtilFormatacao.formatDouble(limiteAlcada.getLimiteItemAtendCliente(),2);
scriptAddLinha.append("'" + valor + "',");
valor = UtilFormatacao.formatDouble(limiteAlcada.getLimiteMensalAtendCliente(),2);
scriptAddLinha.append("'" + valor + "',");
scriptAddLinha.append("'" + limiteAlcada.getSituacao() + "')");
document.executeScript(scriptAddLinha.toString());
scriptAddLinha = new StringBuilder();
}
}
form.setValues(alcada);
}
public AlcadaService getAlcadaService(HttpServletRequest request) throws ServiceException, Exception {
if(alcadaService == null){
alcadaService = (AlcadaService) ServiceLocator.getInstance().getService(AlcadaService.class, WebUtil.getUsuarioSistema(request));
}
return alcadaService;
}
}