package com.fp.frontend.controller.armas.solicitud;

import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.primefaces.context.RequestContext;

import com.fp.dto.Request;
import com.fp.dto.Response;
import com.fp.dto.query.DtoQuery;
import com.fp.dto.query.Filter;
import com.fp.dto.query.SubQuery;
import com.fp.dto.save.DtoSave;
import com.fp.frontend.controller.AbstractController;
import com.fp.frontend.controller.armas.parametros.CentroControlArmasController;
import com.fp.frontend.controller.armas.parametros.TiposArmasExplosivosController;
import com.fp.frontend.controller.pcustomer.PersonAddressController;
import com.fp.frontend.controller.pcustomer.PersonDetailController;
import com.fp.frontend.controller.pgeneral.gene.CatalogDetailController;
import com.fp.frontend.helper.MessageHelper;
import com.fp.frontend.utility.MsgControlArmas;
import com.fp.general.mail.EnvioMail;
import com.fp.general.mail.dto.EnvioCorreoDTO;
import com.fp.general.mail.exception.EnvioMailException;
import com.fp.general.mail.factory.EnvioMailFactory;
import com.fp.persistence.parmas.param.TarmCentroControl;
import com.fp.persistence.parmas.param.TarmTipoArmaExplosivo;
import com.fp.persistence.parmas.param.TarmTramite;
import com.fp.persistence.parmas.soli.TarmArmas;
import com.fp.persistence.parmas.soli.TarmSolicitud;
import com.fp.persistence.parmas.soli.TarmSolicitudArmas;
import com.fp.persistence.parmas.soli.TarmSolicitudTramite;
import com.fp.persistence.pcustomer.gene.TcustPersonAddress;
import com.fp.persistence.pcustomer.gene.TcustPersonDetail;
import com.fp.persistence.pgeneral.gene.TgeneCanton;
import com.fp.persistence.pgeneral.gene.TgeneCatalogDetail;
import com.fp.persistence.pgeneral.gene.TgeneCity;
import com.fp.persistence.pgeneral.gene.TgeneParroquia;
import com.fp.persistence.pgeneral.gene.TgeneProvince;
import com.fp.persistence.pgeneral.safe.TsafeUserDetail;

@SuppressWarnings("serial")
@ManagedBean
@ViewScoped
public class ValidacionTramiteLibreTransitoController extends AbstractController<TarmSolicitud> {

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    TarmSolicitudTramite solicitudTramite = new TarmSolicitudTramite();
    TarmTramite tramite = new TarmTramite();
    TcustPersonDetail detallesPersona = new TcustPersonDetail();
    TarmSolicitudArmas solicitudArmas = new TarmSolicitudArmas();

    private String provincia;
    private String canton;
    private String ciudad;
    private TgeneParroquia parroquia;
    private TcustPersonAddress direccionCliente;
    String tipoDireccion = "";
    private List<TarmArmas> lArmas;
    private String direccion;
    private String estadoTramite;
    private String tipoDocumento;
    private String tipoTramite;
    private String usoActividad;
    private String observaciones = "Prueba observaciones";
    private String gradoFuncionario = "";
    private TcustPersonDetail usuario;
    private String nombreInstitucion;
    private TarmCentroControl centroControl;
    private String csolicitud = "";
    private String opcion = "";
    private String numeroSolicitud;

    @ManagedProperty(value = "#{personAddressController}")
    private PersonAddressController personAddressController;

    @ManagedProperty(value = "#{tarmSolicitudTramiteController}")
    private TarmSolicitudTramiteController tarmSolicitudTramiteController;

    @ManagedProperty(value = "#{tarmSolicitudArmasController}")
    private TarmSolicitudArmasController tarmSolicitudArmasController;

    public ValidacionTramiteLibreTransitoController() throws Exception {
        super(TarmSolicitud.class);
    }

    @PostConstruct
    private void postconstruct() {
        try {
            startQuery();
            this.init();
            // Inicializa autoconsulta
            super.getMfilters().clear();
            super.query();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void startQuery() {
        try {
            this.pasteBpmScreenParameters();
            csolicitud = super.getMfilters().get("csolicitud");
            super.getMfilters().clear();
        } catch (Exception e) {
            MessageHelper.setMessageError(e);
        }
    }

    /**
     * Incializa el controlador, cuando se esta utilizando una pagina que utliza
     * el controlador.
     */
    private void init() {
        try {
            recperpage = 15; // Cambiar al # reg a mirar.
            lrecord = new ArrayList<>();
            beanalias = "VALIDACIONTRANSITO";

            // this.csolicitud="1";
        } catch (Exception e) {
            MessageHelper.setMessageError(e);
        }
    }

    /**
     * Crea una instancia de TgeneTransactionProcess y marca el registro como
     * nuevo.
     *
     * @throws Exception
     */
    @Override
    public void create() throws Exception {
        super.create();
    }

    @Override
    public void query() throws Exception {
        // TODO Auto-generated method stub
        MessageHelper.setMessageError("msg_notQuery");
        super.query();
    }

    @SuppressWarnings("unchecked")
    @Override
    protected void querydatabase() {
        try {
            DtoQuery dto = super.getDtoQuery(true);

            //Filtrando las armas
            tarmSolicitudArmasController.setCsolicitud(csolicitud);
            tarmSolicitudArmasController.getMfilters().clear();
            tarmSolicitudArmasController.query();

            Filter filtro = new Filter("pk", csolicitud);
            dto.addFiltro(filtro);

            SubQuery sNumeroTramite = new SubQuery("TarmSolicitudTramite", "numerotramite", "ntramite", "i.pk.csolicitud = t.pk");
            dto.addSubQuery(sNumeroTramite);

            SubQuery sEstadoSolicitud = new SubQuery("TarmSolicitudTramite", "numerotramite", "ntramite", "i.pk.csolicitud = t.pk");
            dto.addSubQuery(sEstadoSolicitud);

            HashMap<String, DtoQuery> mtables = new HashMap<String, DtoQuery>();
            mtables.put(beanalias, dto); // permite adicionar mas de una tabla.

            Request request = callerhelper.getRequest();
            request.setQueryTables(mtables);

            Response resp = callerhelper.executeQuery(request);

            if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) != 0) {
                lrecord = new ArrayList<TarmSolicitud>();
                MessageHelper.setMessageError(resp);
            } else {
                lrecord = (List<TarmSolicitud>) resp.get(beanalias);
                super.postQuery(lrecord);

                if (!lrecord.isEmpty()) {
                    record = lrecord.get(0);

                    //Obteniendo la solicitud
                    TarmSolicitud solicitud = ValidacionTramiteLibreTransitoController.findPorSolicitudSimple(this.csolicitud);
                    numeroSolicitud = solicitud.getNumerosolicitud();
                    //Obteniendo el tramite
                    solicitudTramite = TarmSolicitudTramiteController.findPorCSolicitud(record.getPk());

                    if (solicitudTramite != null && solicitudTramite.getPk().getCtramite() != null) {
                        tarmSolicitudTramiteController = new TarmSolicitudTramiteController();
                        tarmSolicitudTramiteController.setRecord(solicitudTramite);
                        tramite = TarmTramiteController.find(solicitudTramite.getPk().getCtramite().toString());

                        //Estado tramite
                        TgeneCatalogDetail catalogDetailTramite = null;
                        if (solicitudTramite.getEstadotramite() != null && solicitudTramite.getEstadotramitecodigo() != null) {
                            catalogDetailTramite = CatalogDetailController.findxCodigoCodcatalogo(solicitudTramite.getEstadotramite(), solicitudTramite.getEstadotramitecodigo());
                        }

                        if (catalogDetailTramite != null) {
                            estadoTramite = catalogDetailTramite.getDescription();
                        }

                        //Tipo tramite
                        if (tramite.getTipotramite() != null && tramite.getTipotramitecodigo() != null) {
                            catalogDetailTramite = CatalogDetailController.findxCodigoCodcatalogo(tramite.getTipoautorizacion(), tramite.getTipoautorizacioncodigo());

                            if (catalogDetailTramite != null) {
                                tipoTramite = catalogDetailTramite.getDescription();
                            }

                            //Uso actividad
                            catalogDetailTramite = CatalogDetailController.findxCodigoCodcatalogo(tramite.getUsoactividad(), tramite.getUsoactividadcodigo());
                            if (catalogDetailTramite != null && tramite.getUsoactividad() != null && tramite.getUsoactividadcodigo() != null) {
                                usoActividad = catalogDetailTramite.getDescription();
                            }
                        }
                    }

                    //Datos de la persona
                    detallesPersona = PersonDetailController.find(String.valueOf(record.getPersoncode().toString()));
                    switch (detallesPersona.getIdentificationcatalog()) {
                        case "CED":
                            tipoDireccion = "1";
                            break;
                        case "RUC":
                            tipoDireccion = "2";
                            break;
                        default:
                            tipoDireccion = "";
                            break;
                    }

                    //Tipo de documento
                    TgeneCatalogDetail catalogDetailDocumento = null;
                    if (detallesPersona.getIdentificationcatalog() != null && detallesPersona.getIdentificationcatalogcode() != null) {
                        catalogDetailDocumento = CatalogDetailController.findxCodigoCodcatalogo(detallesPersona.getIdentificationcatalog(), detallesPersona.getIdentificationcatalogcode());

                        if (catalogDetailDocumento != null) {
                            tipoDocumento = catalogDetailDocumento.getDescription();
                        }
                    }

                    //Obteniendo la direccion del cliente
                    //this.direccionCliente=personAddressController.findPersonaPorDireccionTipoCatalogo(String.valueOf(record.getPersoncode()), tipoDireccion);
                    this.direccionCliente = personAddressController.findPrincipal(String.valueOf(record.getPersoncode()));
                    provincia = direccionCliente.modifiedData().get("provincia") == null ? null : direccionCliente.modifiedData().get("provincia").toString(); //personAddressController.getLprovinces()==null || personAddressController.getLprovinces().isEmpty()?null:personAddressController.getLprovinces().get(0);
                    canton = direccionCliente.modifiedData().get("canton") == null ? null : direccionCliente.modifiedData().get("canton").toString();//personAddressController.getLcantones()==null || personAddressController.getLcantones().isEmpty()?null:personAddressController.getLcantones().get(0);
                    ciudad = direccionCliente.modifiedData().get("ciudad") == null ? null : direccionCliente.modifiedData().get("ciudad").toString();//personAddressController.getLcities()==null || personAddressController.getLcities().isEmpty()?null:personAddressController.getLcities().get(0);
                    direccion = direccionCliente.getAddress();

                    //Obteniendo las armas
                    lArmas = new ArrayList<TarmArmas>();
                    List<TarmSolicitudArmas> listaSolicitudArmas = TarmSolicitudArmasController.findPorCSolicitud(record.getPk());

                    for (TarmSolicitudArmas sa : listaSolicitudArmas) {
                        TarmArmas arma = ArmasController.find(sa.getPk().getCarma(), "REG");
                        lArmas.add(arma);
                    }

                    //Obteniendo los datos del usuario logueado
                    TsafeUserDetail tsafeUserDetail = (TsafeUserDetail) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("TSAFEUSERDETAIL");
                    usuario = PersonDetailController.find(tsafeUserDetail.getPk().getPersoncode().toString());

                    //Obteniendo el grado del funcionario
                    TgeneCatalogDetail grado = CatalogDetailController.findxCodigoCodcatalogo(usuario.getMilitarygrade(), usuario.getMilitarygradecode());
                    if (grado != null) {
                        gradoFuncionario = grado.getDescription() + " - ";
                    }

                    //Obteniendo el centro de control
                    centroControl = CentroControlArmasController.findPorCodigo(solicitud.getCcentrocontrol());
                    if (centroControl != null && centroControl.getNombreinstitucion() != null && !centroControl.getNombreinstitucion().isEmpty()
                            && centroControl.getNombreinstitucioncodigo() != null && !centroControl.getNombreinstitucioncodigo().isEmpty()) {

                        TgeneCatalogDetail catalogoInstitucion = CatalogDetailController.findxCodigoCodcatalogo(centroControl.getNombreinstitucion(), centroControl.getNombreinstitucioncodigo());
                        this.nombreInstitucion = catalogoInstitucion.getDescription();
                    }

                }
            }

        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
        }
    }

    @SuppressWarnings("unchecked")
    protected void querydatabaseSolicitud() {
        try {
            DtoQuery dto = super.getDtoQuery(true);

            SubQuery sNumeroTramite = new SubQuery("TarmSolicitudTramite", "numerotramite", "ntramite", "i.pk.csolicitud = t.pk");
            dto.addSubQuery(sNumeroTramite);

            HashMap<String, DtoQuery> mtables = new HashMap<String, DtoQuery>();
            mtables.put(beanalias, dto); // permite adicionar mas de una tabla.

            Request request = callerhelper.getRequest();
            request.setQueryTables(mtables);

            Response resp = callerhelper.executeQuery(request);

            if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) != 0) {
                lrecord = new ArrayList<TarmSolicitud>();
                MessageHelper.setMessageError(resp);
            } else {
                lrecord = (List<TarmSolicitud>) resp.get(beanalias);
                if (!lrecord.isEmpty()) {
                    record = lrecord.get(0);
                }
                super.postQuery(lrecord);
            }

        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
        }
    }

    @Override
    public void save() {
        try {
            Request request = callerhelper.getRequest();
            HashMap<String, DtoSave> msave = new HashMap<String, DtoSave>();

            DtoSave dtosave = super.getDtoSave();
            dtosave.setReturnpk(true); // Para que el core devuelva el pk de los registros nuevos.            
            msave.put(beanalias, dtosave); // adicionar metadata de mantenimiento para cada tabla.

            //Aqui se le cambia el estado a TarmSolicitudTramite
            //segun se apruebe o se anule
            /*
            if(condicionAprobado){
            	this.tarmSolicitudTramiteController.cambiarEstado(estadoTramiteAprobado, estadoTramiteAprobadoCodigo);
            }else{
            	this.tarmSolicitudTramiteController.cambiarEstado(estadoTramiteAnulado, estadoTramiteAnuladoCodigo);
            }*/
            DtoSave dtosaveSolicitudTramite = this.tarmSolicitudTramiteController.getDtoSave();
            if (dtosaveSolicitudTramite.pendingProcess()) {
                dtosaveSolicitudTramite.setReturnpk(true);
                msave.put(this.tarmSolicitudTramiteController.getBeanalias(), dtosaveSolicitudTramite);
            }

            request.setSaveTables(msave);
            Response resp = callerhelper.executeSave(request);
            if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) {
                this.postCommit(resp);
                this.tarmSolicitudTramiteController.postCommit(resp);
                MessageHelper.setMessageInfo(resp);
            } else {
                MessageHelper.setMessageError(resp);
            }

        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
        }
    }

    @Override
    public void postCommit(Response response) throws Exception {
        super.postCommitGeneric(response, beanalias);
    }

    /**
     * Metodo que envia un mail de notificacion de tramite anulado
     */
    public void enviarNotificacion() {
        try {
            if (this.opcion != null && !this.opcion.isEmpty() && this.opcion.equalsIgnoreCase("D")) {
                String asunto = MsgControlArmas.getProperty("msg_asuntoNotificacionGuiaTranistoAnulada");
                String cuerpo = MessageFormat.format(MsgControlArmas.getProperty("msg_cuerpoNotificacionGuiaTransitoAnulada"), detallesPersona.getName(),
                        this.record.getModifiedData().get("ntramite"), this.observaciones, this.gradoFuncionario + usuario.getName(), this.nombreInstitucion);

                EnvioCorreoDTO envioCorreo = new EnvioCorreoDTO();
                envioCorreo.setCorreoDesde(MsgControlArmas.getProperty("correoDesde"));
                //Cambiar por el correo del cliente
                envioCorreo.setCorreoPara(new String[]{MsgControlArmas.getProperty("correoDestino")});
                envioCorreo.setAsunto(asunto);
                envioCorreo.setMensajeHTML(cuerpo);
                EnvioMail envioMail = EnvioMailFactory.getInstancia();
                envioMail.envioMail(envioCorreo);

            }
            completarTarea();
        } catch (EnvioMailException e) {
            MessageHelper.setMessageError(new Throwable("Se produjo un error al enviar el correo."));
        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
        }
    }

    /**
     * Metodo para finalizar la tarea del flujo
     */
    public void completarTarea() {

        try {
            Request request = callerhelper.getRequest();
            // limpiar request para finalizar la tarea.
            super.cleanRequest(request);
            request.modifiedData().put("csolicitud", csolicitud);
            request.modifiedData().put("TID", tid);
            request.modifiedData().put("BPMStatus", bpmDataStatus == null ? "A" : bpmDataStatus); // A,D,R
            if (bpmDataStatus != null && bpmDataStatus.equals("D")) {
                Map<String, Object> datosmail = new HashMap<String, Object>();
                datosmail.put("razons", detallesPersona.getName());
                datosmail.put("sol", numeroSolicitud);
                datosmail.put("observaciones", bpmDataComment);
                //grado funcionario de la persona logeada
                TsafeUserDetail userDetailObj = (TsafeUserDetail) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("TSAFEUSERDETAIL");
                TcustPersonDetail personDetailObj = PersonDetailController.find(userDetailObj.getPk().getPersoncode().toString());
                datosmail.put("grado", personDetailObj.getMilitarygrade());
                datosmail.put("funcionario", personDetailObj.getName());
                // Centro de control de armas
                datosmail.put("centrocontrol", centroControl.getModifiedData().get("desinstitucion"));
                request.modifiedData().put("datosmail", datosmail);
            }
            request.modifiedData().put("BPMObs", bpmDataComment == null ? "OK" : bpmDataComment);

            Response resp = callerhelper.executeSave(request);

            if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) {
                MessageHelper.setMessageInfo(resp);
                RequestContext.getCurrentInstance().execute("Maia.refreshusertasks()");
            } else {
                MessageHelper.setMessageError(resp);
            }
        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
        }
    }

    /**
     * Busca una solicitud por su codigo
     *
     * @param codigoSolicitud
     * @return
     */
    public static TarmSolicitud findPorSolicitud(String codigoSolicitud) {
        try {
            ValidacionTramiteLibreTransitoController cc = new ValidacionTramiteLibreTransitoController();
            cc.init();
            cc.recperpage = 300;
            cc.addFilter("pk", codigoSolicitud);
            cc.querydatabase();
            if (cc.record != null) {
                return cc.record;
            }
            return null;
        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
            return null;
        }
    }

    /**
     * Busca una solicitud por su codigo
     *
     * @param codigoSolicitud
     * @return
     */
    public static TarmSolicitud findPorSolicitudSimple(String codigoSolicitud) {
        try {
            ValidacionTramiteLibreTransitoController cc = new ValidacionTramiteLibreTransitoController();
            cc.init();
            cc.recperpage = 300;
            cc.addFilter("pk", codigoSolicitud);
            cc.querydatabaseSolicitud();
            if (cc.record != null) {
                return cc.record;
            }
            return null;
        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
            return null;
        }
    }

    /**
     * Incrementa el numero del arma
     *
     * @param arma
     * @return
     */
    public int incrementarRowkey(TarmArmas arma) {
        int n = 0;

        for (int i = 0; i < lArmas.size(); i++) {
            if (arma.getPk() == lArmas.get(i).getPk()) {
                n = i + 1;
                break;
            }
        }

        return n;
    }

    /**
     * Obtiene los detalles de las armas segun el catalogo
     *
     * @param catalogo
     * @param catalogoCode
     * @return
     */
    public String aspectoArmaCatalogo(String catalogo, String catalogoCode) {
        if (catalogo != null && catalogoCode != null && !catalogo.isEmpty() && !catalogoCode.isEmpty()) {
            return CatalogDetailController.findxCodigoCodcatalogo(catalogo, catalogoCode).getDescription();
        }
        return null;
    }

    /**
     * Devuelve una descripcion de catalogo segun un tipo de aspecto
     *
     * @param arma
     * @param tipoAspecto
     * @return
     */
    public String aspectoArmaExplosivoCatalogo(TarmArmas arma, String tipoAspecto) {
        String aspecto = "";

        try {
            TarmTipoArmaExplosivo explosivo = TiposArmasExplosivosController.findarma(arma.getCtipoarmaexplosivo());
            if (explosivo != null) {
                if (tipoAspecto.equalsIgnoreCase("clase") && explosivo.getClase() != null && !explosivo.getClase().isEmpty()
                        && explosivo.getClasecodigo() != null && !explosivo.getClasecodigo().isEmpty()) {
                    aspecto = CatalogDetailController.findxCodigoCodcatalogo(explosivo.getClase(), explosivo.getClasecodigo()).getDescription();

                } else if (tipoAspecto.equalsIgnoreCase("tipo") && explosivo.getTipoarmaexplosivo() != null && !explosivo.getTipoarmaexplosivo().isEmpty()
                        && explosivo.getTipoarmaexplosivocodigo() != null && !explosivo.getTipoarmaexplosivocodigo().isEmpty()) {
                    aspecto = CatalogDetailController.findxCodigoCodcatalogo(explosivo.getTipoarmaexplosivo(), explosivo.getTipoarmaexplosivocodigo()).getDescription();

                } else if (tipoAspecto.equalsIgnoreCase("calibre") && explosivo.getCalibre() != null && !explosivo.getCalibre().isEmpty()
                        && explosivo.getCalibrecodigo() != null && !explosivo.getCalibrecodigo().isEmpty()) {
                    aspecto = CatalogDetailController.findxCodigoCodcatalogo(explosivo.getCalibre(), explosivo.getCalibrecodigo()).getDescription();
                }
            }

        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
        }

        return aspecto;
    }

    public TarmTipoArmaExplosivo explosivoPorArma(TarmArmas arma) {
        TarmTipoArmaExplosivo explosivo = new TarmTipoArmaExplosivo();

        try {
            explosivo = TiposArmasExplosivosController.findarma(arma.getCtipoarmaexplosivo());
        } catch (Throwable e) {
            MessageHelper.setMessageError(e);
        }

        return explosivo;
    }

    public TarmSolicitudTramite getSolicitudTramite() {
        return solicitudTramite;
    }

    public void setSolicitudTramite(TarmSolicitudTramite solicitudTramite) {
        this.solicitudTramite = solicitudTramite;
    }

    public TarmTramite getTramite() {
        return tramite;
    }

    public void setTramite(TarmTramite tramite) {
        this.tramite = tramite;
    }

    public TcustPersonDetail getDetallesPersona() {
        return detallesPersona;
    }

    public void setDetallesPersona(TcustPersonDetail detallesPersona) {
        this.detallesPersona = detallesPersona;
    }

    public String getProvincia() {
        return provincia;
    }

    public void setProvincia(String provincia) {
        this.provincia = provincia;
    }

    public String getCanton() {
        return canton;
    }

    public void setCanton(String canton) {
        this.canton = canton;
    }

    public String getCiudad() {
        return ciudad;
    }

    public void setCiudad(String ciudad) {
        this.ciudad = ciudad;
    }

    public String getNumeroSolicitud() {
        return numeroSolicitud;
    }

    public void setNumeroSolicitud(String numeroSolicitud) {
        this.numeroSolicitud = numeroSolicitud;
    }

    public List<TarmArmas> getlArmas() {
        return lArmas;
    }

    public void setlArmas(List<TarmArmas> lArmas) {
        this.lArmas = lArmas;
    }

    public PersonAddressController getPersonAddressController() {
        return personAddressController;
    }

    public void setPersonAddressController(
            PersonAddressController personAddressController) {
        this.personAddressController = personAddressController;
    }

    public TarmSolicitudArmas getSolicitudArmas() {
        return solicitudArmas;
    }

    public void setSolicitudArmas(TarmSolicitudArmas solicitudArmas) {
        this.solicitudArmas = solicitudArmas;
    }

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public String getEstadoTramite() {
        return estadoTramite;
    }

    public void setEstadoTramite(String estadoTramite) {
        this.estadoTramite = estadoTramite;
    }

    public String getTipoDocumento() {
        return tipoDocumento;
    }

    public void setTipoDocumento(String tipoDocumento) {
        this.tipoDocumento = tipoDocumento;
    }

    public String getTipoTramite() {
        return tipoTramite;
    }

    public void setTipoTramite(String tipoTramite) {
        this.tipoTramite = tipoTramite;
    }

    public String getUsoActividad() {
        return usoActividad;
    }

    public void setUsoActividad(String usoActividad) {
        this.usoActividad = usoActividad;
    }

    public TarmSolicitudTramiteController getTarmSolicitudTramiteController() {
        return tarmSolicitudTramiteController;
    }

    public void setTarmSolicitudTramiteController(
            TarmSolicitudTramiteController tarmSolicitudTramiteController) {
        this.tarmSolicitudTramiteController = tarmSolicitudTramiteController;
    }

    public TarmSolicitudArmasController getTarmSolicitudArmasController() {
        return tarmSolicitudArmasController;
    }

    public void setTarmSolicitudArmasController(
            TarmSolicitudArmasController tarmSolicitudArmasController) {
        this.tarmSolicitudArmasController = tarmSolicitudArmasController;
    }

    public TgeneParroquia getParroquia() {
        return parroquia;
    }

    public void setParroquia(TgeneParroquia parroquia) {
        this.parroquia = parroquia;
    }

    public TcustPersonAddress getDireccionCliente() {
        return direccionCliente;
    }

    public void setDireccionCliente(TcustPersonAddress direccionCliente) {
        this.direccionCliente = direccionCliente;
    }

    public String getTipoDireccion() {
        return tipoDireccion;
    }

    public void setTipoDireccion(String tipoDireccion) {
        this.tipoDireccion = tipoDireccion;
    }

    public String getObservaciones() {
        return observaciones;
    }

    public void setObservaciones(String observaciones) {
        this.observaciones = observaciones;
    }

    public String getGradoFuncionario() {
        return gradoFuncionario;
    }

    public void setGradoFuncionario(String gradoFuncionario) {
        this.gradoFuncionario = gradoFuncionario;
    }

    public TcustPersonDetail getUsuario() {
        return usuario;
    }

    public void setUsuario(TcustPersonDetail usuario) {
        this.usuario = usuario;
    }

    public String getNombreInstitucion() {
        return nombreInstitucion;
    }

    public void setNombreInstitucion(String nombreInstitucion) {
        this.nombreInstitucion = nombreInstitucion;
    }

    public TarmCentroControl getCentroControl() {
        return centroControl;
    }

    public void setCentroControl(TarmCentroControl centroControl) {
        this.centroControl = centroControl;
    }

    public String getCsolicitud() {
        return csolicitud;
    }

    public void setCsolicitud(String csolicitud) {
        this.csolicitud = csolicitud;
    }

    public String getOpcion() {
        return opcion;
    }

    public void setOpcion(String opcion) {
        this.opcion = opcion;
    }

    public static long getSerialversionuid() {
        return serialVersionUID;
    }

}
