package gcom.gui.faturamento.conta;
import gcom.cadastro.imovel.Categoria;
import gcom.cadastro.imovel.FiltroCategoria;
import gcom.cadastro.imovel.FiltroSubCategoria;
import gcom.cadastro.imovel.Subcategoria;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class AdicionarCategoriaContaAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
//Seta o mapeamento de retorno
ActionForward retorno = actionMapping
.findForward("exibirAdicionarCategoriaConta");
Fachada fachada = Fachada.getInstancia();
//Mudar isso quando tiver esquema de seguran�a
HttpSession sessao = httpServletRequest.getSession(false);
//Inst�ncia do formul�rio que est� sendo utilizado
AdicionarCategoriaContaActionForm adicionarCategoriaContaActionForm =
(AdicionarCategoriaContaActionForm) actionForm;
//Par�metros recebidos para adicionar uma categoria
String idCategoria = adicionarCategoriaContaActionForm.getCategoriaID();
String qtdEconomias = adicionarCategoriaContaActionForm.getQtdEconomia();
//Valida��o dos campos recebidos
if (idCategoria == null || idCategoria.equalsIgnoreCase("")){
throw new ActionServletException(
"atencao.campo_texto.obrigatorio", null, "categoria");
}
if (qtdEconomias == null || qtdEconomias.equalsIgnoreCase("")){
throw new ActionServletException(
"atencao.campo_texto.obrigatorio", null, "quantidade de economias");
}
/*
* Colocado por Raphael Rossiter em 14/03/2007
* Objetivo: Manipula��o dos objetos que ser�o exibidos no formul�rio de acordo com a empresa
*/
SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema();
if (sistemaParametro.getIndicadorTarifaCategoria().equals(SistemaParametro.INDICADOR_TARIFA_SUBCATEGORIA)){
String idSubcategoria = adicionarCategoriaContaActionForm.getSubcategoriaID();
//Valida��o dos campos recebidos
if (idSubcategoria == null || idSubcategoria.equalsIgnoreCase("")){
throw new ActionServletException(
"atencao.campo_texto.obrigatorio", null, "subcategoria");
}
this.adicionarSubCategoria(idSubcategoria, qtdEconomias, sessao, httpServletRequest);
}
else{
this.adicionarCategoria(idCategoria, qtdEconomias, sessao, httpServletRequest);
}
//Limpa o formul�rio que adiciona categorias a conta.
adicionarCategoriaContaActionForm.setCategoriaID("");
adicionarCategoriaContaActionForm.setSubcategoriaID("");
adicionarCategoriaContaActionForm.setQtdEconomia("");
sessao.setAttribute("retorno","sim");
sessao.setAttribute("adicionar","1");
/*
* Colocado por Raphael Rossiter em 29/03/2007
* Objetivo: Manipula��o dos objetos que ser�o exibidos no formul�rio de acordo com a empresa
*/
// httpServletRequest.setAttribute("empresaNome", sistemaParametro.getNomeAbreviadoEmpresa().trim());
httpServletRequest.setAttribute("indicadorTarifaCategoria", sistemaParametro.getIndicadorTarifaCategoria().toString());
return retorno;
}
private void adicionarCategoria(String idCategoria, String qtdEconomias, HttpSession sessao,
HttpServletRequest httpServletRequest){
//Pesquisa a categoria selecionada para carregar os atributos.
FiltroCategoria filtroCategoria = new FiltroCategoria();
filtroCategoria.adicionarParametro(new ParametroSimples(FiltroCategoria.CODIGO,
idCategoria));
Collection colecaoCategoriaSelected = Fachada.getInstancia().pesquisar(filtroCategoria,
Categoria.class.getName());
Categoria categoriaSelected = (Categoria) Util.retonarObjetoDeColecao(colecaoCategoriaSelected);
//Carrega a categoria com a quantidade de economias informada pelo usu�rio
categoriaSelected.setQuantidadeEconomiasCategoria(new Integer(qtdEconomias));
//Carrega o novo objeto na sess�o.
if (sessao.getAttribute("colecaoCategoria") == null){
Collection colecaoCategoria = new Vector();
colecaoCategoria.add(categoriaSelected);
sessao.setAttribute("colecaoCategoria", colecaoCategoria);
httpServletRequest.setAttribute("reloadPage", "OK");
//Definindo o caso de uso que receber� o retorno
if (sessao.getAttribute("UseCase").equals("INSERIRCONTA")){
httpServletRequest.setAttribute("reloadPageURL", "INSERIRCONTA");
}
else if (sessao.getAttribute("UseCase").equals("RETIFICARCONTA")) {
httpServletRequest.setAttribute("reloadPageURL", "RETIFICARCONTA");
} else if (sessao.getAttribute("UseCase").equals("SIMULARCALCULOCONTA")) {
httpServletRequest.setAttribute("reloadPageURL", "SIMULARCALCULOCONTA");
}
sessao.setAttribute("totalEconomia",categoriaSelected.getQuantidadeEconomiasCategoria());
}
else{
Collection colecaoCategoria = (Collection) sessao.getAttribute("colecaoCategoria");
if (!colecaoCategoria.contains(categoriaSelected)){
colecaoCategoria.add(categoriaSelected);
httpServletRequest.setAttribute("reloadPage", "OK");
//Definindo o caso de uso que receber� o retorno
if (sessao.getAttribute("UseCase").equals("INSERIRCONTA")){
httpServletRequest.setAttribute("reloadPageURL", "INSERIRCONTA");
}
else if (sessao.getAttribute("UseCase").equals("RETIFICARCONTA")) {
httpServletRequest.setAttribute("reloadPageURL", "RETIFICARCONTA");
} else if (sessao.getAttribute("UseCase").equals("SIMULARCALCULOCONTA")) {
httpServletRequest.setAttribute("reloadPageURL", "SIMULARCALCULOCONTA");
}
Iterator colecaoCategoriaIt = colecaoCategoria.iterator();
Categoria categoria;
String qtdPorEconomia;
Integer qtdEconnomia = 0;
while (colecaoCategoriaIt.hasNext()) {
categoria = (Categoria) colecaoCategoriaIt.next();
if (categoria.getId() != null) {
qtdPorEconomia = categoria.getQuantidadeEconomiasCategoria().toString();
qtdEconnomia = Util.somaInteiros(qtdEconnomia,new Integer(qtdPorEconomia));
}
}
sessao.setAttribute("totalEconomia",qtdEconnomia);
}
// [FS0009] - Verificar categoria j� existente
else{
throw new ActionServletException(
"atencao.adicionar_categoria_ja_existente");
}
}
}
private void adicionarSubCategoria(String idSubcategoria, String qtdEconomias, HttpSession sessao,
HttpServletRequest httpServletRequest){
//Pesquisa a subcategoria selecionada para carregar os atributos.
FiltroSubCategoria filtroSubCategoria = new FiltroSubCategoria();
filtroSubCategoria.adicionarCaminhoParaCarregamentoEntidade("categoria");
filtroSubCategoria.adicionarParametro(new ParametroSimples(FiltroSubCategoria.ID,
idSubcategoria));
Collection colecaoSubCategoriaSelected = Fachada.getInstancia().pesquisar(filtroSubCategoria,
Subcategoria.class.getName());
Subcategoria subcategoriaSelected = (Subcategoria) Util.retonarObjetoDeColecao(colecaoSubCategoriaSelected);
//Carrega a subcategoria com a quantidade de economias informada pelo usu�rio
subcategoriaSelected.setQuantidadeEconomias(new Integer(qtdEconomias));
//Carrega o novo objeto na sess�o.
if (sessao.getAttribute("colecaoSubcategoria") == null){
Collection colecaoSubcategoria = new Vector();
colecaoSubcategoria.add(subcategoriaSelected);
sessao.setAttribute("colecaoSubcategoria", colecaoSubcategoria);
httpServletRequest.setAttribute("reloadPage", "OK");
//Definindo o caso de uso que receber� o retorno
if (sessao.getAttribute("UseCase").equals("INSERIRCONTA")){
httpServletRequest.setAttribute("reloadPageURL", "INSERIRCONTA");
}
else if (sessao.getAttribute("UseCase").equals("RETIFICARCONTA")) {
httpServletRequest.setAttribute("reloadPageURL", "RETIFICARCONTA");
} else if (sessao.getAttribute("UseCase").equals("SIMULARCALCULOCONTA")) {
httpServletRequest.setAttribute("reloadPageURL", "SIMULARCALCULOCONTA");
}
sessao.setAttribute("totalEconomia",subcategoriaSelected.getQuantidadeEconomias());
}
else{
Collection colecaoSubcategoria = (Collection) sessao.getAttribute("colecaoSubcategoria");
if (!colecaoSubcategoria.contains(subcategoriaSelected)){
colecaoSubcategoria.add(subcategoriaSelected);
httpServletRequest.setAttribute("reloadPage", "OK");
//Definindo o caso de uso que receber� o retorno
if (sessao.getAttribute("UseCase").equals("INSERIRCONTA")){
httpServletRequest.setAttribute("reloadPageURL", "INSERIRCONTA");
}
else if (sessao.getAttribute("UseCase").equals("RETIFICARCONTA")) {
httpServletRequest.setAttribute("reloadPageURL", "RETIFICARCONTA");
} else if (sessao.getAttribute("UseCase").equals("SIMULARCALCULOCONTA")) {
httpServletRequest.setAttribute("reloadPageURL", "SIMULARCALCULOCONTA");
}
Iterator colecaoSubcategoriaIt = colecaoSubcategoria.iterator();
Subcategoria subcategoria;
String qtdPorEconomia;
Integer qtdEconnomia = 0;
while (colecaoSubcategoriaIt.hasNext()) {
subcategoria = (Subcategoria) colecaoSubcategoriaIt.next();
if (subcategoria.getId() != null) {
qtdPorEconomia = subcategoria.getQuantidadeEconomias().toString();
qtdEconnomia = Util.somaInteiros(qtdEconnomia,new Integer(qtdPorEconomia));
}
}
sessao.setAttribute("totalEconomia",qtdEconnomia);
Collections.sort((List) colecaoSubcategoria, new Comparator() {
public int compare(Object a, Object b) {
Subcategoria subcategoria1 = (Subcategoria) a;
Subcategoria subcategoria2 = (Subcategoria) b;
int comparacaoCategoria = subcategoria1.getCategoria().getDescricao()
.compareTo(subcategoria2.getCategoria().getDescricao());
if (comparacaoCategoria == 0){
return subcategoria1.getDescricao()
.compareTo(subcategoria2.getDescricao());
}
return comparacaoCategoria;
}
});
}
// [FS0009] - Verificar subcategoria j� existente
else{
throw new ActionServletException(
"atencao.adicionar_subcategoria_ja_existente");
}
}
}
}