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.Date;
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;
public class InserirLocalidadeAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
//Seta o retorno
ActionForward retorno = actionMapping.findForward("telaSucesso");
//Obt�m a inst�ncia da fachada
Fachada fachada = Fachada.getInstancia();
//Obt�m a sess�o
HttpSession sessao = httpServletRequest.getSession(false);
InserirLocalidadeActionForm inserirLocalidadeActionForm = (InserirLocalidadeActionForm) actionForm;
Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado");
//------------ REGISTRAR TRANSA��O ----------------
RegistradorOperacao registradorOperacao = new RegistradorOperacao(
Operacao.OPERACAO_LOCALIDADE_INSERIR,
new UsuarioAcaoUsuarioHelper(usuario,
UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO));
Operacao operacao = new Operacao();
operacao.setId(Operacao.OPERACAO_LOCALIDADE_INSERIR);
OperacaoEfetuada operacaoEfetuada = new OperacaoEfetuada();
operacaoEfetuada.setOperacao(operacao);
//------------ REGISTRAR TRANSA��O ----------------
String localidadeID = inserirLocalidadeActionForm.getLocalidadeID();
String localidadeNome = inserirLocalidadeActionForm.getLocalidadeNome();
Collection colecaoEnderecos = (Collection) sessao.getAttribute("colecaoEnderecos");
String telefone = inserirLocalidadeActionForm.getTelefone();
String ramal = inserirLocalidadeActionForm.getRamal();
String fax = inserirLocalidadeActionForm.getFax();
String email = inserirLocalidadeActionForm.getEmail();
String menorConsumo = inserirLocalidadeActionForm.getMenorConsumo();
String icms = inserirLocalidadeActionForm.getIcms();
String centroCusto = inserirLocalidadeActionForm.getCentroCusto();
String centroCustoEsgoto = inserirLocalidadeActionForm.getCentroCustoEsgoto();
String eloID = inserirLocalidadeActionForm.getEloID();
//String gerenciaID = inserirLocalidadeActionForm.getGerenciaID();
String idUnidadeNegocio = inserirLocalidadeActionForm.getIdUnidadeNegocio();
String classeID = inserirLocalidadeActionForm.getClasseID();
String porteID = inserirLocalidadeActionForm.getPorteID();
String informatizada = inserirLocalidadeActionForm.getInformatizada();
String gerenteLocalidade = inserirLocalidadeActionForm.getGerenteLocalidade();
String hidrometroLocalArmazenagem = inserirLocalidadeActionForm.getHidrometroLocalArmazenagem();
//Inidicador se a localidade � a sede da empresa
String sede = inserirLocalidadeActionForm.getSede();
String municipio = inserirLocalidadeActionForm.getMunicipio();
Localidade localidadeInserir = new Localidade();
Collection colecaoPesquisa = null;
sessao.removeAttribute("tipoPesquisaRetorno");
//O c�digo 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");
}
if (colecaoEnderecos != null && !colecaoEnderecos.isEmpty()) {
localidadeInserir = (Localidade) Util
.retonarObjetoDeColecao(colecaoEnderecos);
}
localidadeInserir.setId(new Integer(localidadeID));
localidadeInserir.setDescricao(localidadeNome);
//O telefone � obrigat�rio caso o ramal tenha sido informado.
if (ramal != null && !ramal.equalsIgnoreCase("")) {
localidadeInserir.setRamalfone(ramal);
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");
}
}
//Telefone.
if (telefone != null && !telefone.equalsIgnoreCase("")) {
if (telefone.length() < 7){
throw new ActionServletException(
"atencao.telefone_ou_fax_localidade_menor_sete_digitos", null, "Telefone");
}
else{
localidadeInserir.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");
}
else{
localidadeInserir.setFax(fax);
}
}
//E-mail.
if (email != null && !email.equalsIgnoreCase("")) {
localidadeInserir.setEmail(email);
}
//Menor Consumo.
if (menorConsumo != null && !menorConsumo.equalsIgnoreCase("")) {
localidadeInserir.setConsumoGrandeUsuario(Integer
.parseInt(menorConsumo));
}
//ICMS
if (icms != null && !icms.equalsIgnoreCase("")) {
localidadeInserir.setCodigoICMS(Integer
.parseInt(icms));
}
//Centro Custo
if (centroCusto != null && !centroCusto.equalsIgnoreCase("")) {
localidadeInserir.setCodigoCentroCusto(centroCusto);
}
//Centro Custo de Esgoto
if (centroCustoEsgoto != null && !centroCustoEsgoto.equalsIgnoreCase("")) {
localidadeInserir.setCodigoCentroCustoEsgoto(centroCustoEsgoto);
}
//Ger�ncia Regional
if (idUnidadeNegocio == null
|| idUnidadeNegocio.equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)){
//Informe Ger�ncia Regional
throw new ActionServletException("atencao.required",null,"Unidade de Neg�cio");
}else{
UnidadeNegocio unidadeNegocio = new UnidadeNegocio();
unidadeNegocio.setId(new Integer(idUnidadeNegocio));
localidadeInserir.setUnidadeNegocio(unidadeNegocio);
}
//Elo.
Localidade localidadeElo = new Localidade();
if (eloID != null
&& !eloID.equalsIgnoreCase(String
.valueOf(ConstantesSistema.NUMERO_NAO_INFORMADO))) {
FiltroLocalidade filtroLocalidadeElo = new FiltroLocalidade();
filtroLocalidadeElo.adicionarParametro(new ParametroSimples(
FiltroLocalidade.ID_UNIDADE_NEGOCIO, localidadeInserir
.getUnidadeNegocio().getId()));
filtroLocalidadeElo.adicionarParametro(new ParametroSimples(
FiltroLocalidade.ID, eloID));
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");
} else {
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");
} else {
localidadeInserir.setLocalidade(localidadeElo);
}
}
}
else{
localidadeInserir.setLocalidade(localidadeInserir);
}
//Classe
if (classeID == null
|| classeID.equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)){
//Informe Classe
throw new ActionServletException("atencao.required",null,"Classe");
}else{
LocalidadeClasse classe = new LocalidadeClasse();
classe.setId(new Integer(classeID));
localidadeInserir.setLocalidadeClasse(classe);
}
//Porte
if (porteID == null
|| porteID.equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)){
// Informe Porte
throw new ActionServletException("atencao.required",null,"Porte");
}else{
LocalidadePorte porte = new LocalidadePorte();
porte.setId(new Integer(porteID));
localidadeInserir.setLocalidadePorte(porte);
}
//Local Armazenagem Hidrometro
if (hidrometroLocalArmazenagem != null
&& hidrometroLocalArmazenagem.equals("")){
HidrometroLocalArmazenagem hidrometroLocalArmazenagemID = new HidrometroLocalArmazenagem();
hidrometroLocalArmazenagemID.setId(new Integer(hidrometroLocalArmazenagem));
localidadeInserir.setHidrometroLocalArmazenagem(hidrometroLocalArmazenagemID);
}
//Seta o Gerencia Regional de acordo com a Unidade de Negocio
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 unidadeNegocio = (UnidadeNegocio) colecaoUnidadeNegocio.iterator().next();
if(unidadeNegocio.getGerenciaRegional() != null){
GerenciaRegional gerenciaRegional = new GerenciaRegional();
gerenciaRegional.setId(unidadeNegocio.getGerenciaRegional().getId());
if (gerenteLocalidade != null && !gerenteLocalidade.equals("")){
Integer clienteFuncionario = fachada.verificarClienteSelecionadoFuncionario(new Integer(gerenteLocalidade));
if(clienteFuncionario == null){
throw new ActionServletException("atencao.cliente_selecionado_nao_e_funcionario");
}
}
localidadeInserir.setGerenciaRegional(gerenciaRegional);
}
//Informatizada
if (informatizada == null
|| informatizada.equals("")){
// Informatizada
throw new ActionServletException("atencao.required",null,"Informatizada");
}else{
localidadeInserir.setIndicadorLocalidadeInformatizada(new Short(informatizada));
}
if(gerenteLocalidade != null && !gerenteLocalidade.equals("")){
Cliente cliente = new Cliente();
cliente.setId(new Integer(gerenteLocalidade));
localidadeInserir.setCliente(cliente);
}
//Sede
if (sede == null
|| sede.equals("")){
throw new ActionServletException("atencao.required",null,"Sede");
}else{
if ( inserirLocalidadeActionForm.getSede() != null &&
inserirLocalidadeActionForm.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{
localidadeInserir.setIndicadorLocalidadeSede(new Short(sede));
}
}
}else{
localidadeInserir.setIndicadorLocalidadeSede(new Short(sede));
}
}
//Munic�pio Principal
if(municipio != null && !municipio.equals("")){
FiltroMunicipio filtroMunicipio = new FiltroMunicipio();
filtroMunicipio.adicionarParametro(new ParametroSimples(FiltroMunicipio.ID, municipio));
Collection colecaoMunicipio = fachada.pesquisar(filtroMunicipio,
Municipio.class.getName());
if(colecaoMunicipio != null && !colecaoMunicipio.isEmpty()){
Municipio objMunicipio = (Municipio) colecaoMunicipio.iterator().next();
localidadeInserir.setMunicipio(objMunicipio);
}else{
throw new ActionServletException("atencao.municipio.inexistente");
}
}
//Indicador de Uso
localidadeInserir
.setIndicadorUso(ConstantesSistema.INDICADOR_USO_ATIVO);
//Ultima altera��o
localidadeInserir.setUltimaAlteracao(new Date());
FiltroLocalidade filtroLocalidade = new FiltroLocalidade();
filtroLocalidade.adicionarParametro(new ParametroSimples(
FiltroLocalidade.ID, localidadeInserir.getId()));
//Verificar exist�ncia da Localidade
colecaoPesquisa = fachada.pesquisar(filtroLocalidade, Localidade.class
.getName());
if (colecaoPesquisa != null && !colecaoPesquisa.isEmpty()) {
//Localidade j� existe
throw new ActionServletException(
"atencao.pesquisa_localidade_ja_cadastrada", null, localidadeID);
} else {
Integer idLocalidade = null;
//------------ REGISTRAR TRANSA��O ----------------
localidadeInserir.setOperacaoEfetuada(operacaoEfetuada);
localidadeInserir.adicionarUsuario(usuario,
UsuarioAcao.USUARIO_ACAO_EFETUOU_OPERACAO);
registradorOperacao.registrarOperacao(localidadeInserir);
//------------ REGISTRAR TRANSA��O ----------------
idLocalidade = fachada.inserirLocalidadeRetorno(localidadeInserir);
montarPaginaSucesso(httpServletRequest, "Localidade de c�digo "
+ localidadeInserir.getId().intValue()
+ " inserida com sucesso.", "Inserir outra Localidade",
"exibirInserirLocalidadeAction.do?menu=sim",
"exibirAtualizarLocalidadeAction.do?idRegistroInseridoAtualizar="
+ idLocalidade,
"Atualizar Localidade Inserida");
}
sessao.removeAttribute("colecaoEnderecos");
//devolve o mapeamento de retorno
return retorno;
}
}