package gcom.gui.cadastro.localidade;
import gcom.cadastro.cliente.Cliente;
import gcom.cadastro.geografico.FiltroMunicipio;
import gcom.cadastro.geografico.Municipio;
import gcom.cadastro.localidade.FiltroLocalidade;
import gcom.cadastro.localidade.FiltroUnidadeNegocio;
import gcom.cadastro.localidade.GerenciaRegional;
import gcom.cadastro.localidade.Localidade;
import gcom.cadastro.localidade.LocalidadeClasse;
import gcom.cadastro.localidade.LocalidadePorte;
import gcom.cadastro.localidade.UnidadeNegocio;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.interceptor.RegistradorOperacao;
import gcom.micromedicao.hidrometro.HidrometroLocalArmazenagem;
import gcom.seguranca.acesso.Operacao;
import gcom.seguranca.acesso.OperacaoEfetuada;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.seguranca.acesso.usuario.UsuarioAcao;
import gcom.seguranca.acesso.usuario.UsuarioAcaoUsuarioHelper;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.util.Collection;
import java.util.Iterator;
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;
/**
* Action para a atualiza��o do logradouro
*
* @author S�vio Luiz
* @date 30/06/2006
*/
public class AtualizarLocalidadeAction extends GcomAction {
//Obt�m a inst�ncia da fachada
Fachada fachada = Fachada.getInstancia();
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
//Seta o retorno
ActionForward retorno = actionMapping.findForward("telaSucesso");
//Obt�m a sess�o
HttpSession sessao = httpServletRequest.getSession(false);
AtualizarLocalidadeActionForm atualizarLocalidadeActionForm = (AtualizarLocalidadeActionForm) actionForm;
Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado");
//------------ REGISTRAR TRANSA��O ----------------
RegistradorOperacao registradorOperacao = new RegistradorOperacao(
Operacao.OPERACAO_LOCALIDADE_ATUALIZAR,
new UsuarioAcaoUsuarioHelper(usuario,
UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO));
Operacao operacao = new Operacao();
operacao.setId(Operacao.OPERACAO_LOCALIDADE_ATUALIZAR);
OperacaoEfetuada operacaoEfetuada = new OperacaoEfetuada();
operacaoEfetuada.setOperacao(operacao);
//------------ REGISTRAR TRANSA��O ----------------
String localidadeID = atualizarLocalidadeActionForm
.getLocalidadeID();
String localidadeNome = atualizarLocalidadeActionForm
.getLocalidadeNome();
Collection colecaoEnderecos = (Collection) sessao
.getAttribute("colecaoEnderecos");
String telefone = atualizarLocalidadeActionForm.getTelefone();
String ramal = atualizarLocalidadeActionForm.getRamal();
String fax = atualizarLocalidadeActionForm.getFax();
String email = atualizarLocalidadeActionForm.getEmail();
String icms = atualizarLocalidadeActionForm.getIcms();
String centroCusto = atualizarLocalidadeActionForm.getCentroCusto();
String informatizada = atualizarLocalidadeActionForm.getInformatizada();
String gerenteLocalidade = atualizarLocalidadeActionForm.getGerenteLocalidade();
String sede = atualizarLocalidadeActionForm.getSede();
String menorConsumo = atualizarLocalidadeActionForm
.getMenorConsumo();
String eloID = atualizarLocalidadeActionForm.getEloID();
//String gerenciaID = atualizarLocalidadeActionForm.getGerenciaID();
String idUnidadeNegocio = atualizarLocalidadeActionForm.getIdUnidadeNegocio();
String classeID = atualizarLocalidadeActionForm.getClasseID();
String porteID = atualizarLocalidadeActionForm.getPorteID();
String indicadorUso = atualizarLocalidadeActionForm.getIndicadorUso();
String hidrometroLocalArmazenagem = atualizarLocalidadeActionForm.getHidrometroLocalArmazenagem();
String centroCustoEsgoto = atualizarLocalidadeActionForm.getCentroCustoEsgoto();
String municipio = atualizarLocalidadeActionForm.getMunicipio();
Localidade localidadeAlterar = (Localidade) sessao.getAttribute("localidadeManter");
Collection colecaoPesquisa = null;
//O id da localidade � obrigat�rio.
if (localidadeID == null || localidadeID.equalsIgnoreCase("")) {
throw new ActionServletException(
"atencao.required",null,"C�digo");
}
//O nome da localidade � obrigat�rio.
if (localidadeNome == null || localidadeNome.equalsIgnoreCase("")) {
throw new ActionServletException(
"atencao.required",null,"Nome");
}
//O endere�o da localidade � obrigat�rio.
/*if (colecaoEnderecos == null || colecaoEnderecos.isEmpty()) {
throw new ActionServletException(
"atencao.endereco_localidade_nao_informado");
} else {
localidadeAlterar = (Localidade) Util
.retonarObjetoDeColecao(colecaoEnderecos);
localidadeAlterar.setId(new Integer(localidadeID));
localidadeAlterar.setDescricao(localidadeNome);
}*/
if (colecaoEnderecos != null && !colecaoEnderecos.isEmpty()) {
localidadeAlterar = (Localidade) Util
.retonarObjetoDeColecao(colecaoEnderecos);
}
localidadeAlterar.setId(new Integer(localidadeID));
localidadeAlterar.setDescricao(localidadeNome);
//O telefone � obrigat�rio caso o ramal tenha sido informado.
if (ramal != null && !ramal.equalsIgnoreCase("")) {
if (telefone == null || telefone.equalsIgnoreCase("")) {
throw new ActionServletException(
"atencao.telefone_localidade_nao_informado");
}
else if (telefone.length() < 7){
throw new ActionServletException(
"atencao.telefone_ou_fax_localidade_menor_sete_digitos", null, "Telefone");
}
}
localidadeAlterar.setRamalfone(ramal);
//indicador bloqueio
localidadeAlterar.setIndicadorBloqueio(new Short(atualizarLocalidadeActionForm.getIndicadorBloqueio()));
//Telefone.
if (telefone != null && !telefone.equalsIgnoreCase("")) {
if (telefone.length() < 7){
throw new ActionServletException(
"atencao.telefone_ou_fax_localidade_menor_sete_digitos", null, "Telefone");
}
}
localidadeAlterar.setFone(telefone);
//Fax.
if (fax != null && !fax.equalsIgnoreCase("")) {
if (fax.length() < 7){
throw new ActionServletException(
"atencao.telefone_ou_fax_localidade_menor_sete_digitos", null, "Fax");
}
}
localidadeAlterar.setFax(fax);
//E-mail.
//if (email != null && !email.equalsIgnoreCase("")) {
localidadeAlterar.setEmail(email);
//}
//Menor Consumo.
if (menorConsumo != null && !menorConsumo.equalsIgnoreCase("")) {
localidadeAlterar.setConsumoGrandeUsuario(Integer
.parseInt(menorConsumo));
}else{
localidadeAlterar.setConsumoGrandeUsuario(Integer
.parseInt("0"));
}
//ICMS
if (icms != null && !icms.equalsIgnoreCase("")) {
localidadeAlterar.setCodigoICMS(Integer
.parseInt(icms));
}
//Centro de Custo
if (centroCusto != null && !centroCusto.equalsIgnoreCase("")) {
localidadeAlterar.setCodigoCentroCusto(centroCusto);
}
//Centro de Custo Esgoto
if (centroCustoEsgoto != null && !centroCustoEsgoto.equalsIgnoreCase("")) {
localidadeAlterar.setCodigoCentroCustoEsgoto(centroCustoEsgoto);
}
//Elo.
Localidade localidadeElo = new Localidade();
if (eloID != null && !eloID.equalsIgnoreCase("") && !eloID.equalsIgnoreCase("-1")) {
FiltroLocalidade filtroLocalidadeElo = new FiltroLocalidade();
filtroLocalidadeElo.adicionarParametro(new ParametroSimples(
FiltroLocalidade.ID, eloID));
if (!eloID.equalsIgnoreCase(localidadeID)) {
filtroLocalidadeElo.adicionarParametro(new ParametroSimples(
FiltroLocalidade.INDICADORUSO,
ConstantesSistema.INDICADOR_USO_ATIVO));
}
//Retorna localidade - Elo
colecaoPesquisa = fachada.pesquisar(filtroLocalidadeElo,
Localidade.class.getName());
if (colecaoPesquisa == null || colecaoPesquisa.isEmpty()) {
//O c�digo do Elo n�o existe na tabela Localidade
throw new ActionServletException(
"atencao.pesquisa_elo_nao_inexistente");
}
localidadeElo = (Localidade) Util.retonarObjetoDeColecao(colecaoPesquisa);
if (localidadeElo.getId().intValue() != localidadeElo
.getLocalidade().getId().intValue()) {
//A localidade escolhida n�o � um Elo
throw new ActionServletException(
"atencao.localidade_nao_e_elo");
}
localidadeAlterar.setLocalidade(localidadeElo);
}
else{
localidadeElo.setId(new Integer(localidadeID));
localidadeAlterar.setLocalidade(localidadeElo);
}
//Ger�ncia Regional
if (idUnidadeNegocio == null
|| idUnidadeNegocio.equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)){
//Informe Ger�ncia Regional
throw new ActionServletException("atencao.required",null,"Unidade Neg�cio");
}
UnidadeNegocio unidadeNegocio = new UnidadeNegocio();
unidadeNegocio.setId(new Integer(idUnidadeNegocio));
localidadeAlterar.setUnidadeNegocio(unidadeNegocio);
//Classe
if (classeID == null
|| classeID.equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)){
//Informe Classe
throw new ActionServletException("atencao.required",null,"Classe");
}
LocalidadeClasse classe = new LocalidadeClasse();
classe.setId(new Integer(classeID));
localidadeAlterar.setLocalidadeClasse(classe);
//Porte
if (porteID == null
|| porteID.equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)){
// Informe Porte
throw new ActionServletException("atencao.required",null,"Porte");
}
LocalidadePorte porte = new LocalidadePorte();
porte.setId(new Integer(porteID));
localidadeAlterar.setLocalidadePorte(porte);
///Local Armazenagem Hidrometro
if (hidrometroLocalArmazenagem != null
&& !hidrometroLocalArmazenagem.equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)){
HidrometroLocalArmazenagem hidrometroLocalArmazenagemID = new HidrometroLocalArmazenagem();
hidrometroLocalArmazenagemID.setId(new Integer(hidrometroLocalArmazenagem));
localidadeAlterar.setHidrometroLocalArmazenagem(hidrometroLocalArmazenagemID);
}else{
localidadeAlterar.setHidrometroLocalArmazenagem(null);
}
//Informatizada
if (informatizada == null
|| informatizada.equals("")){
// Informatizada
throw new ActionServletException("atencao.required",null,"Informatizada");
}
localidadeAlterar.setIndicadorLocalidadeInformatizada(new Short(informatizada));
if(gerenteLocalidade != null && !gerenteLocalidade.equals("")){
Cliente cliente = new Cliente();
cliente.setId(new Integer(gerenteLocalidade));
Integer clienteFuncionario = fachada.verificarClienteSelecionadoFuncionario(new Integer(gerenteLocalidade));
if(clienteFuncionario == null){
throw new ActionServletException("atencao.cliente_selecionado_nao_e_funcionario");
}
localidadeAlterar.setCliente(cliente);
}
// Sede
if (sede == null
|| sede.equals("")){
throw new ActionServletException("atencao.required",null,"Sede");
}else{
if ( atualizarLocalidadeActionForm.getSede() != null &&
atualizarLocalidadeActionForm.getSede().equals("1")){
FiltroLocalidade filtroLocalidade = new FiltroLocalidade();
// filtroLocalidade.adicionarParametro(new ParametroSimples(FiltroLocalidade.ID,
// inserirLocalidadeActionForm.getLocalidadeID()));
boolean jaExisteSede = false;
Collection colecaoLocalidade = this.getFachada().pesquisar(filtroLocalidade,Localidade.class.getName());
if (colecaoLocalidade != null && !colecaoLocalidade.isEmpty()){
Iterator colecaoLocalidadeIterator = colecaoLocalidade.iterator();
Localidade localidade = null;
String localidadeSede = "";
while ( colecaoLocalidadeIterator.hasNext() && jaExisteSede == false ){
localidade = (Localidade) colecaoLocalidadeIterator.next();
if ( localidade.getIndicadorLocalidadeSede() == 1){
localidadeSede = ""+localidade.getId();
jaExisteSede = true;
}
}
if (jaExisteSede){
throw new ActionServletException(
"atencao.ja_existe_localidade_sede", null, localidadeSede);
}else{
localidadeAlterar.setIndicadorLocalidadeSede(new Short(sede));
}
}
}else{
localidadeAlterar.setIndicadorLocalidadeSede(new Short(sede));
}
}
//Munic�pio
localidadeAlterar.setMunicipio(null);
if(municipio != null && !municipio.equals("")){
FiltroMunicipio filtroMunicipio = new FiltroMunicipio();
filtroMunicipio.adicionarParametro(new ParametroSimples(FiltroMunicipio.ID, municipio));
Collection colecaoMunicipio = fachada.pesquisar(filtroMunicipio, Municipio.class.getName());
//Caso exista o munic�pio digitado pelo usu�rio
if(colecaoMunicipio != null && !colecaoMunicipio.isEmpty()){
Municipio objMunicipio = (Municipio)colecaoMunicipio.iterator().next();
localidadeAlterar.setMunicipio(objMunicipio);
}else{
throw new ActionServletException("atencao.municipio.inexistente");
}
}
//Indicador de Uso
localidadeAlterar.setIndicadorUso(new Short(indicadorUso));
FiltroUnidadeNegocio filtroUnidadeNegocio = new FiltroUnidadeNegocio();
filtroUnidadeNegocio.adicionarParametro(new ParametroSimples(FiltroUnidadeNegocio.ID,idUnidadeNegocio));
filtroUnidadeNegocio.adicionarCaminhoParaCarregamentoEntidade(FiltroUnidadeNegocio.GERENCIA);
filtroUnidadeNegocio.adicionarParametro(new ParametroSimples(
FiltroUnidadeNegocio.INDICADOR_USO,
ConstantesSistema.INDICADOR_USO_ATIVO));
Collection colecaoUnidadeNegocio = fachada.pesquisar(filtroUnidadeNegocio,
UnidadeNegocio.class.getName());
UnidadeNegocio unidadeNegocioGerencia = (UnidadeNegocio) colecaoUnidadeNegocio.iterator().next();
if(unidadeNegocioGerencia.getGerenciaRegional() != null){
GerenciaRegional gerenciaRegional = new GerenciaRegional();
gerenciaRegional.setId(unidadeNegocioGerencia.getGerenciaRegional().getId());
localidadeAlterar.setGerenciaRegional(gerenciaRegional);
}
//Ultima altera��o
//localidadeAlterar.setUltimaAlteracao(new Date());
//------------ REGISTRAR TRANSA��O ----------------
localidadeAlterar.setOperacaoEfetuada(operacaoEfetuada);
localidadeAlterar.adicionarUsuario(usuario,
UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO);
registradorOperacao.registrarOperacao(localidadeAlterar);
//------------ REGISTRAR TRANSA��O ----------------
fachada.atualizarLocalidade(localidadeAlterar);
montarPaginaSucesso(httpServletRequest, "Localidade de c�digo "
+ localidadeAlterar.getId() + " atualizada com sucesso.",
"Realizar outra Manuten��o de Localidade",
"exibirFiltrarLocalidadeAction.do?desfazer=S");
sessao.removeAttribute("localidadeManter");
sessao.removeAttribute("colecaoLocalidade");
sessao.removeAttribute("colecaoEnderecos");
sessao.removeAttribute("colecaoGerenciaRegional");
sessao.removeAttribute("colecaoClasse");
sessao.removeAttribute("colecaoPorte");
sessao.removeAttribute("colecaoHidrometroLocalArmazenagem");
sessao.removeAttribute("tipoPesquisaRetorno");
/* //Limpando o formulario
atualizarLocalidadeActionForm.setEloID("");
atualizarLocalidadeActionForm.setEmail("");
atualizarLocalidadeActionForm.setFax("");
atualizarLocalidadeActionForm.setLocalidadeID("");
atualizarLocalidadeActionForm.setLocalidadeNome("");
atualizarLocalidadeActionForm.setMenorConsumo("");
atualizarLocalidadeActionForm.setRamal("");
atualizarLocalidadeActionForm.setTelefone("");
// Campos do tipo lista no formul�rio
atualizarLocalidadeActionForm.setClasseID("");
atualizarLocalidadeActionForm.setGerenciaID("");
atualizarLocalidadeActionForm.setPorteID("");
*/
//devolve o mapeamento de retorno
return retorno;
}
}