package com.fp.persistence.parmas.param;

import java.io.Serializable;
import java.lang.reflect.Field;
import java.sql.Date;
import java.sql.Timestamp;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.persistence.Version;

import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;

import com.fp.dto.hb.HibernateBean;
import com.fp.dto.hb.Log;

/**
 * Clase que implementa la entidad de Hibernate que hace referencia a la tabla TARMCENTROCONTROL
 */
@Entity(name = "TarmCentroControl")
@Table(name = "TARMCENTROCONTROL")
public class TarmCentroControl extends com.fp.dto.AbstractDataTransport implements Serializable, HibernateBean, Cloneable, Log {

    /**
     * HashCode asociado con la Instancia
     */
    @Transient
    private int hashValue = 0;
    /**
     * Version de la Clase
     */
    private static final long serialVersionUID = 1L;
    /**
     * Clave primaria de la Entidad TarmCentroControl
     */
    @Id
    @Column(name = "CCENTROCONTROL", nullable = false, updatable = false)
    @GenericGenerator(name = "seq_id", strategy = "com.fp.general.keygen.SequenceKey", parameters = {
        @Parameter(name = "name", value = "CCENTROCONTROL"),//campo secuencial de la tabla
        @Parameter(name = "type", value = "java.lang.String"),// tipo de dato
        @Parameter(name = "fill", value = "0"),
        @Parameter(name = "length", value = "6")})
    @GeneratedValue(generator = "seq_id")
    private String pk;
    @Column(name = "CUPOSLIBRESULTIMODIA", nullable = true)

    /**
     * CUANTOS TRAMITES PUEDO REALIZAR EN LA FECHAPROXIMOTRAMITE PARA COMPLETAR
     * EL NUMERO DE TRAMITES POR DIA DEL CENTRO
     */
    private Integer cuposlibresultimodia;

    @Column(name = "DIRECCION", nullable = true)

    /**
     * null
     */
    private String direccion;

    @Column(name = "NOMBREINSTITUCION", nullable = true)

    /**
     * Codigo de catalogo 01 Natural, 02 Juridico
     */
    private String nombreinstitucion;

    @Column(name = "CANTONCODE", nullable = true)

    /**
     * Codigo de canton
     */
    private String cantoncode;

    @Column(name = "NOMBREINSTITUCIONCODIGO", nullable = true)

    /**
     * Codigo de tabla de catalogo 01 Codigo de tabla de tipos de persona
     */
    private String nombreinstitucioncodigo;

    @Column(name = "TRAMITESPORDIA", nullable = true)

    /**
     * null
     */
    private Integer tramitespordia;

    @Column(name = "GRADO", nullable = true)

    /**
     * Codigo de catalogo 01 Natural, 02 Juridico
     */
    private String grado;

    @Column(name = "COUNTRYCODE", nullable = true)

    /**
     * Codigo de pais
     */
    private String countrycode;

    @Column(name = "INSTITUCIONTIPO", nullable = true)

    /**
     * Codigo de tabla de catalogo 01 Codigo de tabla de tipos de persona
     */
    private String instituciontipo;

    @Column(name = "INSTITUCION", nullable = true)

    /**
     * Codigo de catalogo 01 Natural, 02 Juridico
     */
    private String institucion;

    @Column(name = "FECHAPROXIMOTRAMITE", nullable = true)

    /**
     * FECHA DE ATENCION AL USUARIO PARA EL PROXIMO TRAMITE DE TIPO PERMISO QUE
     * INGRESE
     */
    private Date fechaproximotramite;

    @Column(name = "PARROQUIACODE", nullable = true)

    /**
     * Codigo de parroquia
     */
    private String parroquiacode;

    @Column(name = "PERSONCODE", nullable = true)

    /**
     * Codigo de persona
     */
    private Integer personcode;

    @Column(name = "ESTADO", nullable = true)

    /**
     * null
     */
    private String estado;

    @Version
    @Column(name = "RECORDVERSION", nullable = true)

    /**
     * Manejo de optimistic locking del registro
     */
    private Integer recordversion;

    @Column(name = "DATETO", nullable = true)

    /**
     * Fecha hasta la cual esta vigente el registro
     */
    private Timestamp dateto;

    @Column(name = "PROVINCECODE", nullable = true)

    /**
     * Codigo de provincia
     */
    private String provincecode;

    @Column(name = "GRADOCODIGO", nullable = true)

    /**
     * Codigo de tabla de catalogo 01 Codigo de tabla de tipos de persona
     */
    private String gradocodigo;

    /**
     * puntofacturacion formato 001-000
     */
    @Column(name = "PUNTOFACTURACION", nullable = true)
    private String puntofacturacion;
    /**
     * Secuencial para cada punto de facturacion
     */
    @Column(name = "SECUENCIAFACTURACION", nullable = false)
    private Integer secuenciafacturacion;
    /**
     * Contructor por defecto
     */
    public TarmCentroControl() {
    }

    /**
     * Contructor de TarmCentroControl
     *
     * @param pPk Clave Primaria del entity
     */
    public TarmCentroControl(String pPk) {
        this();
        pk = pPk;
    }

    /**
     * Metodo que entrega datos de la tabla dada la clave primaria.
     *
     * @param pEntityManager referencia de la session a obtener datos del bean.
     * @param pKey Caleve primaria del bean.
     * @return TarmCentroControl
     */
    public static TarmCentroControl find(EntityManager pEntityManager, Object pKey) throws Exception {
        TarmCentroControl obj = pEntityManager.find(TarmCentroControl.class, pKey);
        return obj;
    }

    /**
     * Entrega la Clave primaria de TarmCentroControl
     *
     * @return El objeto que referencia a la Clave primaria de TarmCentroControl
     */
    public String getPk() {
        return pk;
    }

    /**
     * Fija un nuevo valor a la Clave primaria de TarmCentroControl
     *
     * @param pPk El objeto que referencia a la nueva Clave primaria de
     * TarmCentroControl
     */
    public void setPk(String pPk) {
        pk = pPk;
    }

    /**
     * Obtiene el valor de cuposlibresultimodia
     *
     * @return valor de cuposlibresultimodia
     */
    public Integer getCuposlibresultimodia() {
        return cuposlibresultimodia;
    }

    /**
     * Fija el valor de cuposlibresultimodia
     *
     * @param pCuposlibresultimodia nuevo Valor de cuposlibresultimodia
     */
    public void setCuposlibresultimodia(Integer pCuposlibresultimodia) {
        cuposlibresultimodia = pCuposlibresultimodia;
    }

    /**
     * Obtiene el valor de direccion
     *
     * @return valor de direccion
     */
    public String getDireccion() {
        return direccion;
    }

    /**
     * Fija el valor de direccion
     *
     * @param pDireccion nuevo Valor de direccion
     */
    public void setDireccion(String pDireccion) {
        direccion = pDireccion;
    }

    /**
     * Obtiene el valor de nombreinstitucion
     *
     * @return valor de nombreinstitucion
     */
    public String getNombreinstitucion() {
        return nombreinstitucion;
    }

    /**
     * Fija el valor de nombreinstitucion
     *
     * @param pNombreinstitucion nuevo Valor de nombreinstitucion
     */
    public void setNombreinstitucion(String pNombreinstitucion) {
        nombreinstitucion = pNombreinstitucion;
    }

    /**
     * Obtiene el valor de cantoncode
     *
     * @return valor de cantoncode
     */
    public String getCantoncode() {
        return cantoncode;
    }

    /**
     * Fija el valor de cantoncode
     *
     * @param pCantoncode nuevo Valor de cantoncode
     */
    public void setCantoncode(String pCantoncode) {
        cantoncode = pCantoncode;
    }

    /**
     * Obtiene el valor de nombreinstitucioncodigo
     *
     * @return valor de nombreinstitucioncodigo
     */
    public String getNombreinstitucioncodigo() {
        return nombreinstitucioncodigo;
    }

    /**
     * Fija el valor de nombreinstitucioncodigo
     *
     * @param pNombreinstitucioncodigo nuevo Valor de nombreinstitucioncodigo
     */
    public void setNombreinstitucioncodigo(String pNombreinstitucioncodigo) {
        nombreinstitucioncodigo = pNombreinstitucioncodigo;
    }

    /**
     * Obtiene el valor de tramitespordia
     *
     * @return valor de tramitespordia
     */
    public Integer getTramitespordia() {
        return tramitespordia;
    }

    /**
     * Fija el valor de tramitespordia
     *
     * @param pTramitespordia nuevo Valor de tramitespordia
     */
    public void setTramitespordia(Integer pTramitespordia) {
        tramitespordia = pTramitespordia;
    }

    /**
     * Obtiene el valor de grado
     *
     * @return valor de grado
     */
    public String getGrado() {
        return grado;
    }

    /**
     * Fija el valor de grado
     *
     * @param pGrado nuevo Valor de grado
     */
    public void setGrado(String pGrado) {
        grado = pGrado;
    }

    /**
     * Obtiene el valor de countrycode
     *
     * @return valor de countrycode
     */
    public String getCountrycode() {
        return countrycode;
    }

    /**
     * Fija el valor de countrycode
     *
     * @param pCountrycode nuevo Valor de countrycode
     */
    public void setCountrycode(String pCountrycode) {
        countrycode = pCountrycode;
    }

    /**
     * Obtiene el valor de instituciontipo
     *
     * @return valor de instituciontipo
     */
    public String getInstituciontipo() {
        return instituciontipo;
    }

    /**
     * Fija el valor de instituciontipo
     *
     * @param pInstituciontipo nuevo Valor de instituciontipo
     */
    public void setInstituciontipo(String pInstituciontipo) {
        instituciontipo = pInstituciontipo;
    }

    /**
     * Obtiene el valor de institucion
     *
     * @return valor de institucion
     */
    public String getInstitucion() {
        return institucion;
    }

    /**
     * Fija el valor de institucion
     *
     * @param pInstitucion nuevo Valor de institucion
     */
    public void setInstitucion(String pInstitucion) {
        institucion = pInstitucion;
    }

    /**
     * Obtiene el valor de fechaproximotramite
     *
     * @return valor de fechaproximotramite
     */
    public Date getFechaproximotramite() {
        return fechaproximotramite;
    }

    /**
     * Fija el valor de fechaproximotramite
     *
     * @param pFechaproximotramite nuevo Valor de fechaproximotramite
     */
    public void setFechaproximotramite(Date pFechaproximotramite) {
        fechaproximotramite = pFechaproximotramite;
    }

    /**
     * Obtiene el valor de parroquiacode
     *
     * @return valor de parroquiacode
     */
    public String getParroquiacode() {
        return parroquiacode;
    }

    /**
     * Fija el valor de parroquiacode
     *
     * @param pParroquiacode nuevo Valor de parroquiacode
     */
    public void setParroquiacode(String pParroquiacode) {
        parroquiacode = pParroquiacode;
    }

    /**
     * Obtiene el valor de personcode
     *
     * @return valor de personcode
     */
    public Integer getPersoncode() {
        return personcode;
    }

    /**
     * Fija el valor de personcode
     *
     * @param pPersoncode nuevo Valor de personcode
     */
    public void setPersoncode(Integer pPersoncode) {
        personcode = pPersoncode;
    }

    /**
     * Obtiene el valor de estado
     *
     * @return valor de estado
     */
    public String getEstado() {
        return estado;
    }

    /**
     * Fija el valor de estado
     *
     * @param pEstado nuevo Valor de estado
     */
    public void setEstado(String pEstado) {
        estado = pEstado;
    }

    /**
     * Obtiene el valor de recordversion
     *
     * @return valor de recordversion
     */
    public Integer getRecordversion() {
        return recordversion;
    }

    /**
     * Fija el valor de recordversion
     *
     * @param pRecordversion nuevo Valor de recordversion
     */
    public void setRecordversion(Integer pRecordversion) {
        recordversion = pRecordversion;
    }

    /**
     * Obtiene el valor de dateto
     *
     * @return valor de dateto
     */
    public Timestamp getDateto() {
        return dateto;
    }

    /**
     * Fija el valor de dateto
     *
     * @param pDateto nuevo Valor de dateto
     */
    public void setDateto(Timestamp pDateto) {
        dateto = pDateto;
    }

    /**
     * Obtiene el valor de provincecode
     *
     * @return valor de provincecode
     */
    public String getProvincecode() {
        return provincecode;
    }

    /**
     * Fija el valor de provincecode
     *
     * @param pProvincecode nuevo Valor de provincecode
     */
    public void setProvincecode(String pProvincecode) {
        provincecode = pProvincecode;
    }

    /**
     * Obtiene el valor de gradocodigo
     *
     * @return valor de gradocodigo
     */
    public String getGradocodigo() {
        return gradocodigo;
    }

    /**
     * Fija el valor de gradocodigo
     *
     * @param pGradocodigo nuevo Valor de gradocodigo
     */
    public void setGradocodigo(String pGradocodigo) {
        gradocodigo = pGradocodigo;
    }

    public String getPuntofacturacion() {
        return puntofacturacion;
    }

    public void setPuntofacturacion(String puntofacturacion) {
        this.puntofacturacion = puntofacturacion;
    }

    public Integer getSecuenciafacturacion() {
        return secuenciafacturacion;
    }

    public void setSecuenciafacturacion(Integer secuenciafacturacion) {
        this.secuenciafacturacion = secuenciafacturacion;
    }
    
    public boolean equals(Object rhs) {
        if (rhs == null) {
            return false;
        }
        if (!(rhs instanceof TarmCentroControl)) {
            return false;
        }
        TarmCentroControl that = (TarmCentroControl) rhs;
        if (this.getPk() == null || that.getPk() == null) {
            return false;
        }
        return (this.getPk().equals(that.getPk()));
    }

    /**
     * Implementacion del metodo hashCode de la la entidad TarmCentroControl
     *
     * @return el hashCode la instancia
     */
    public int hashCode() {
        if (this.hashValue == 0) {
            int result = 17;
            if (this.getPk() == null) {
                result = super.hashCode();
            } else {
                result = this.getPk().hashCode();
            }
            this.hashValue = result;
        }
        return this.hashValue;
    }

    /**
     * Implementacion toString
     */
    public String toString() {
        Field[] fs = this.getClass().getDeclaredFields();
        String data = "";
        for (Field f : fs) {
            try {
                String name = f.getName();
                if (f.getType().getName().compareTo("java.util.Set") == 0) {
                    continue;
                }
                if (name.compareTo("hashValue") == 0 || name.compareTo("serialVersionUID") == 0) {
                    continue;
                }
                data += name + "=" + f.get(this) + ";";
            } catch (Exception e) {
                continue;
            }
        }
        if (data.compareTo("") == 0) {
            data = super.toString();
        }
        return data;
    }

    /**
     * Implementacion de la creacion de un bean en blanco TarmCentroControl
     */
    public Object createInstance() {
        TarmCentroControl instance = new TarmCentroControl();
        return instance;
    }

    /**
     * Clona la entidad TarmCentroControl
     *
     * @see com.fp.dto.hb.HibernateBean#cloneMe()
     */
    public Object cloneMe() throws CloneNotSupportedException {
        TarmCentroControl p = (TarmCentroControl) this.clone();
        return p;
    }
}
