package com.fitbank.hb.persistence.trans;

import java.sql.Clob;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.sql.Date;
import java.math.BigDecimal;
import com.fitbank.common.TransportBean;

/**Clase que implementa la entidad de Hibernate que hace referencia a la tabla FEFACTURA*/
public class Feinvoice implements Serializable,TransportBean,Cloneable{
/** Nombre de la Tabla FEFACTURA */
public static final String TABLE_NAME = "FEFACTURA";
/** HashCode asociado con la Instancia*/
private int hashValue = 0;
/** Version de la Clase*/
private static final long serialVersionUID = 1L;
/**
* Clave primaria de la Entidad Feinvoice
*/
private Long pk;
/**
* Codigo de ambiente al que se envia el documento 1 = Desarrollo/Certificacion, 2 = Produccion
*/
private Integer ambiente;

/**
* Tipo de emision del comprobante 1 = NORMAL 2=Emision por Indisponibilidad del Sistema
*/
private Integer tipoemision;

/**
* Razon social de la entidad que emite la factura
*/
private String razonsocial;

/**
* Nombre comercial de la entidad que emite la factura
*/
private String nombrecomercial;

/**
* Numero del Registro unico de Contribuyentes de la entidad que emite la factura
*/
private String ruc;

/**
* Clave de acceso del comprobante. Se guardan los 48 primeros digitos. El digito verificador se calcula en la aplicacion
*/
private String claveacceso;

/**
* Codigo del documento. Para facturas siempre va a ser 01. Campo necesario para generar una cabecera generica de comprobantes
*/
private String coddoc;

/**
* Codigo del establecimiento desde el que se emite el comprobante
*/
private String estab;

/**
* Punto de emision del comprobante
*/
private String ptoemi;

/**
* Numero secuencial del comprobante, a cargo de la entidad que emite el comprobante
*/
private String secuencial;

/**
* Direccion de la matriz de la entidad que emite el comprobante
*/
private String dirmatriz;

/**
* Fecha de emision del comprobante
*/
private Date fechaemision;

/**
* Direccion del establecimiento desde el que se emite el comprobante
*/
private String direstablecimiento;

/**
* Codigo de contribuyente especial dado por el SRI a la entidad que emite el comprobante
*/
private String contribuyenteespecial;

/**
* Indica si esta obligado a llevar contabilidad SI o NO
*/
private String obligadocontabilidad;

/**
* Codigo del tipo de identificacion del comprador. Revisar ficha tÃ©cnica del SRI para codigos disponibles
*/
private String tipoidentificacioncomprador;

/**
* Nombre o razon social del comprador
*/
private String razonsocialcomprador;

/**
* Direccion del comprador
*/
private String dircomprador;

/**
* Numero de cedula, pasaporte o ruc del comprador, segun el tipo de identificacion del comprador
*/
private String identificacioncomprador;

/**
* Total sin impuestos de la factura
*/
private BigDecimal totalsinimpuestos;

/**
* Suma total de descuentos
*/
private BigDecimal totaldescuento;

/**
* Total de propina
*/
private BigDecimal propina;

/**
* Total facturado
*/
private BigDecimal importetotal;

/**
* Moneda en la que se expresan los valores Por lo general es DOLAR
*/
private String moneda;

/**
* Campo de control que muestra la ultima fecha en la que se contacto al SRI para enviar el comprobante
*/
private Date fenvio;

/**
* JSON de respuesta del programa que envÃ­a comprobantes al SRI
*/
private Clob resp;

/**
* Numero de autorizacion entregado por el SRI cuando se aprueba el comprobante
*/
private String numeroautorizacion;

/**
* Codigo de estatus de envio del comprobante P = Pendiente, E = Error, A = Por aprobar, O = OK
*/
private String estatusenvio;

/**
* Codigo de estatus de envio del correo electronico al cliente. P = Pendiente, E = Error, O = OK
*/
private String estatusenviocorreo;

/**
* Log del envio del correo
*/
private Clob logenviocorreo;

/**
* Correo del que compra
*/
private String correocomprador;

/**
* Xml generado por el generador
*/
private Clob xmlforlote;

/**
* Codigo Contable
*/
private String codigocontable;

/**Contructor por defecto*/
public Feinvoice(){}
/**Contructor de Feinvoice
@param pPk Clave Primaria del entity
@param pAmbiente Codigo de ambiente al que se envia el documento 1 = Desarrollo/Certificacion, 2 = Produccion
@param pTipoemision Tipo de emision del comprobante 1 = NORMAL 2=Emision por Indisponibilidad del Sistema
@param pRazonsocial Razon social de la entidad que emite la factura
@param pRuc Numero del Registro unico de Contribuyentes de la entidad que emite la factura
@param pClaveacceso Clave de acceso del comprobante. Se guardan los 48 primeros digitos. El digito verificador se calcula en la aplicacion
@param pCoddoc Codigo del documento. Para facturas siempre va a ser 01. Campo necesario para generar una cabecera generica de comprobantes
@param pEstab Codigo del establecimiento desde el que se emite el comprobante
@param pPtoemi Punto de emision del comprobante
@param pSecuencial Numero secuencial del comprobante, a cargo de la entidad que emite el comprobante
@param pDirmatriz Direccion de la matriz de la entidad que emite el comprobante
@param pFechaemision Fecha de emision del comprobante
@param pTipoidentificacioncomprador Codigo del tipo de identificacion del comprador. Revisar ficha tÃ©cnica del SRI para codigos disponibles
@param pRazonsocialcomprador Nombre o razon social del comprador
@param pIdentificacioncomprador Numero de cedula, pasaporte o ruc del comprador, segun el tipo de identificacion del comprador
@param pTotalsinimpuestos Total sin impuestos de la factura
@param pTotaldescuento Suma total de descuentos
@param pPropina Total de propina
@param pImportetotal Total facturado
@param pEstatusenvio Codigo de estatus de envio del comprobante P = Pendiente, E = Error, A = Por aprobar, O = OK
@param pEstatusenviocorreo Codigo de estatus de envio del correo electronico al cliente. P = Pendiente, E = Error, O = OK
*/
public Feinvoice(Long pPk,Integer pAmbiente,Integer pTipoemision,String pRazonsocial,String pRuc,String pClaveacceso,String pCoddoc,String pEstab,String pPtoemi,String pSecuencial,String pDirmatriz,Date pFechaemision,String pTipoidentificacioncomprador,String pRazonsocialcomprador,String pIdentificacioncomprador,BigDecimal pTotalsinimpuestos,BigDecimal pTotaldescuento,BigDecimal pPropina,BigDecimal pImportetotal,String pEstatusenvio,String pEstatusenviocorreo){
 pk=pPk;
 ambiente=pAmbiente;
 tipoemision=pTipoemision;
 razonsocial=pRazonsocial;
 ruc=pRuc;
 claveacceso=pClaveacceso;
 coddoc=pCoddoc;
 estab=pEstab;
 ptoemi=pPtoemi;
 secuencial=pSecuencial;
 dirmatriz=pDirmatriz;
 fechaemision=pFechaemision;
 tipoidentificacioncomprador=pTipoidentificacioncomprador;
 razonsocialcomprador=pRazonsocialcomprador;
 identificacioncomprador=pIdentificacioncomprador;
 totalsinimpuestos=pTotalsinimpuestos;
 totaldescuento=pTotaldescuento;
 propina=pPropina;
 importetotal=pImportetotal;
 estatusenvio=pEstatusenvio;
 estatusenviocorreo=pEstatusenviocorreo;
}
/**Entrega la Clave primaria de Feinvoice
@return El objeto que referencia a la Clave primaria de Feinvoice
*/
public Long getPk(){
  return pk;
}
/**Fija un nuevo valor a la Clave primaria de Feinvoice
@param pPk El objeto que referencia a la nueva Clave primaria de Feinvoice
*/
public void setPk(Long pPk){
  pk=pPk;
}
public static final String AMBIENTE="AMBIENTE";
/**Obtiene el valor de ambiente
@return valor de ambiente*/
public Integer getAmbiente(){
  return ambiente;
}
/**Fija el valor de ambiente
@param pAmbiente nuevo Valor de ambiente*/
public void setAmbiente(Integer pAmbiente){
  ambiente=pAmbiente;
}

public static final String TIPOEMISION="TIPOEMISION";
/**Obtiene el valor de tipoemision
@return valor de tipoemision*/
public Integer getTipoemision(){
  return tipoemision;
}
/**Fija el valor de tipoemision
@param pTipoemision nuevo Valor de tipoemision*/
public void setTipoemision(Integer pTipoemision){
  tipoemision=pTipoemision;
}

public static final String RAZONSOCIAL="RAZONSOCIAL";
/**Obtiene el valor de razonsocial
@return valor de razonsocial*/
public String getRazonsocial(){
  return razonsocial;
}
/**Fija el valor de razonsocial
@param pRazonsocial nuevo Valor de razonsocial*/
public void setRazonsocial(String pRazonsocial){
  razonsocial=pRazonsocial;
}

public static final String NOMBRECOMERCIAL="NOMBRECOMERCIAL";
/**Obtiene el valor de nombrecomercial
@return valor de nombrecomercial*/
public String getNombrecomercial(){
  return nombrecomercial;
}
/**Fija el valor de nombrecomercial
@param pNombrecomercial nuevo Valor de nombrecomercial*/
public void setNombrecomercial(String pNombrecomercial){
  nombrecomercial=pNombrecomercial;
}

public static final String RUC="RUC";
/**Obtiene el valor de ruc
@return valor de ruc*/
public String getRuc(){
  return ruc;
}
/**Fija el valor de ruc
@param pRuc nuevo Valor de ruc*/
public void setRuc(String pRuc){
  ruc=pRuc;
}

public static final String CLAVEACCESO="CLAVEACCESO";
/**Obtiene el valor de claveacceso
@return valor de claveacceso*/
public String getClaveacceso(){
  return claveacceso;
}
/**Fija el valor de claveacceso
@param pClaveacceso nuevo Valor de claveacceso*/
public void setClaveacceso(String pClaveacceso){
  claveacceso=pClaveacceso;
}

public static final String CODDOC="CODDOC";
/**Obtiene el valor de coddoc
@return valor de coddoc*/
public String getCoddoc(){
  return coddoc;
}
/**Fija el valor de coddoc
@param pCoddoc nuevo Valor de coddoc*/
public void setCoddoc(String pCoddoc){
  coddoc=pCoddoc;
}

public static final String ESTAB="ESTAB";
/**Obtiene el valor de estab
@return valor de estab*/
public String getEstab(){
  return estab;
}
/**Fija el valor de estab
@param pEstab nuevo Valor de estab*/
public void setEstab(String pEstab){
  estab=pEstab;
}

public static final String PTOEMI="PTOEMI";
/**Obtiene el valor de ptoemi
@return valor de ptoemi*/
public String getPtoemi(){
  return ptoemi;
}
/**Fija el valor de ptoemi
@param pPtoemi nuevo Valor de ptoemi*/
public void setPtoemi(String pPtoemi){
  ptoemi=pPtoemi;
}

public static final String SECUENCIAL="SECUENCIAL";
/**Obtiene el valor de secuencial
@return valor de secuencial*/
public String getSecuencial(){
  return secuencial;
}
/**Fija el valor de secuencial
@param pSecuencial nuevo Valor de secuencial*/
public void setSecuencial(String pSecuencial){
  secuencial=pSecuencial;
}

public static final String DIRMATRIZ="DIRMATRIZ";
/**Obtiene el valor de dirmatriz
@return valor de dirmatriz*/
public String getDirmatriz(){
  return dirmatriz;
}
/**Fija el valor de dirmatriz
@param pDirmatriz nuevo Valor de dirmatriz*/
public void setDirmatriz(String pDirmatriz){
  dirmatriz=pDirmatriz;
}

public static final String FECHAEMISION="FECHAEMISION";
/**Obtiene el valor de fechaemision
@return valor de fechaemision*/
public Date getFechaemision(){
  return fechaemision;
}
/**Fija el valor de fechaemision
@param pFechaemision nuevo Valor de fechaemision*/
public void setFechaemision(Date pFechaemision){
  fechaemision=pFechaemision;
}

public static final String DIRESTABLECIMIENTO="DIRESTABLECIMIENTO";
/**Obtiene el valor de direstablecimiento
@return valor de direstablecimiento*/
public String getDirestablecimiento(){
  return direstablecimiento;
}
/**Fija el valor de direstablecimiento
@param pDirestablecimiento nuevo Valor de direstablecimiento*/
public void setDirestablecimiento(String pDirestablecimiento){
  direstablecimiento=pDirestablecimiento;
}

public static final String CONTRIBUYENTEESPECIAL="CONTRIBUYENTEESPECIAL";
/**Obtiene el valor de contribuyenteespecial
@return valor de contribuyenteespecial*/
public String getContribuyenteespecial(){
  return contribuyenteespecial;
}
/**Fija el valor de contribuyenteespecial
@param pContribuyenteespecial nuevo Valor de contribuyenteespecial*/
public void setContribuyenteespecial(String pContribuyenteespecial){
  contribuyenteespecial=pContribuyenteespecial;
}

public static final String OBLIGADOCONTABILIDAD="OBLIGADOCONTABILIDAD";
/**Obtiene el valor de obligadocontabilidad
@return valor de obligadocontabilidad*/
public String getObligadocontabilidad(){
  return obligadocontabilidad;
}
/**Fija el valor de obligadocontabilidad
@param pObligadocontabilidad nuevo Valor de obligadocontabilidad*/
public void setObligadocontabilidad(String pObligadocontabilidad){
  obligadocontabilidad=pObligadocontabilidad;
}

public static final String TIPOIDENTIFICACIONCOMPRADOR="TIPOIDENTIFICACIONCOMPRADOR";
/**Obtiene el valor de tipoidentificacioncomprador
@return valor de tipoidentificacioncomprador*/
public String getTipoidentificacioncomprador(){
  return tipoidentificacioncomprador;
}
/**Fija el valor de tipoidentificacioncomprador
@param pTipoidentificacioncomprador nuevo Valor de tipoidentificacioncomprador*/
public void setTipoidentificacioncomprador(String pTipoidentificacioncomprador){
  tipoidentificacioncomprador=pTipoidentificacioncomprador;
}

public static final String RAZONSOCIALCOMPRADOR="RAZONSOCIALCOMPRADOR";
/**Obtiene el valor de razonsocialcomprador
@return valor de razonsocialcomprador*/
public String getRazonsocialcomprador(){
  return razonsocialcomprador;
}
/**Fija el valor de razonsocialcomprador
@param pRazonsocialcomprador nuevo Valor de razonsocialcomprador*/
public void setRazonsocialcomprador(String pRazonsocialcomprador){
  razonsocialcomprador=pRazonsocialcomprador;
}

public static final String DIRCOMPRADOR="DIRCOMPRADOR";
/**Obtiene el valor de dircomprador
@return valor de dircomprador*/
public String getDircomprador(){
  return dircomprador;
}
/**Fija el valor de dircomprador
@param pDircomprador nuevo Valor de dircomprador*/
public void setDircomprador(String pDircomprador){
  dircomprador=pDircomprador;
}

public static final String IDENTIFICACIONCOMPRADOR="IDENTIFICACIONCOMPRADOR";
/**Obtiene el valor de identificacioncomprador
@return valor de identificacioncomprador*/
public String getIdentificacioncomprador(){
  return identificacioncomprador;
}
/**Fija el valor de identificacioncomprador
@param pIdentificacioncomprador nuevo Valor de identificacioncomprador*/
public void setIdentificacioncomprador(String pIdentificacioncomprador){
  identificacioncomprador=pIdentificacioncomprador;
}

public static final String TOTALSINIMPUESTOS="TOTALSINIMPUESTOS";
/**Obtiene el valor de totalsinimpuestos
@return valor de totalsinimpuestos*/
public BigDecimal getTotalsinimpuestos(){
  return totalsinimpuestos;
}
/**Fija el valor de totalsinimpuestos
@param pTotalsinimpuestos nuevo Valor de totalsinimpuestos*/
public void setTotalsinimpuestos(BigDecimal pTotalsinimpuestos){
  totalsinimpuestos=pTotalsinimpuestos;
}

public static final String TOTALDESCUENTO="TOTALDESCUENTO";
/**Obtiene el valor de totaldescuento
@return valor de totaldescuento*/
public BigDecimal getTotaldescuento(){
  return totaldescuento;
}
/**Fija el valor de totaldescuento
@param pTotaldescuento nuevo Valor de totaldescuento*/
public void setTotaldescuento(BigDecimal pTotaldescuento){
  totaldescuento=pTotaldescuento;
}

public static final String PROPINA="PROPINA";
/**Obtiene el valor de propina
@return valor de propina*/
public BigDecimal getPropina(){
  return propina;
}
/**Fija el valor de propina
@param pPropina nuevo Valor de propina*/
public void setPropina(BigDecimal pPropina){
  propina=pPropina;
}

public static final String IMPORTETOTAL="IMPORTETOTAL";
/**Obtiene el valor de importetotal
@return valor de importetotal*/
public BigDecimal getImportetotal(){
  return importetotal;
}
/**Fija el valor de importetotal
@param pImportetotal nuevo Valor de importetotal*/
public void setImportetotal(BigDecimal pImportetotal){
  importetotal=pImportetotal;
}

public static final String MONEDA="MONEDA";
/**Obtiene el valor de moneda
@return valor de moneda*/
public String getMoneda(){
  return moneda;
}
/**Fija el valor de moneda
@param pMoneda nuevo Valor de moneda*/
public void setMoneda(String pMoneda){
  moneda=pMoneda;
}

public static final String FENVIO="FENVIO";
/**Obtiene el valor de fenvio
@return valor de fenvio*/
public Date getFenvio(){
  return fenvio;
}
/**Fija el valor de fenvio
@param pFenvio nuevo Valor de fenvio*/
public void setFenvio(Date pFenvio){
  fenvio=pFenvio;
}

public static final String RESP="RESP";
/**Obtiene el valor de resp
@return valor de resp*/
public Clob getResp(){
  return resp;
}
/**Fija el valor de resp
@param pResp nuevo Valor de resp*/
public void setResp(Clob pResp){
  resp=pResp;
}

public static final String NUMEROAUTORIZACION="NUMEROAUTORIZACION";
/**Obtiene el valor de numeroautorizacion
@return valor de numeroautorizacion*/
public String getNumeroautorizacion(){
  return numeroautorizacion;
}
/**Fija el valor de numeroautorizacion
@param pNumeroautorizacion nuevo Valor de numeroautorizacion*/
public void setNumeroautorizacion(String pNumeroautorizacion){
  numeroautorizacion=pNumeroautorizacion;
}

public static final String ESTATUSENVIO="ESTATUSENVIO";
/**Obtiene el valor de estatusenvio
@return valor de estatusenvio*/
public String getEstatusenvio(){
  return estatusenvio;
}
/**Fija el valor de estatusenvio
@param pEstatusenvio nuevo Valor de estatusenvio*/
public void setEstatusenvio(String pEstatusenvio){
  estatusenvio=pEstatusenvio;
}

public static final String ESTATUSENVIOCORREO="ESTATUSENVIOCORREO";
/**Obtiene el valor de estatusenviocorreo
@return valor de estatusenviocorreo*/
public String getEstatusenviocorreo(){
  return estatusenviocorreo;
}
/**Fija el valor de estatusenviocorreo
@param pEstatusenviocorreo nuevo Valor de estatusenviocorreo*/
public void setEstatusenviocorreo(String pEstatusenviocorreo){
  estatusenviocorreo=pEstatusenviocorreo;
}

public static final String LOGENVIOCORREO="LOGENVIOCORREO";
/**Obtiene el valor de logenviocorreo
@return valor de logenviocorreo*/
public Clob getLogenviocorreo(){
  return logenviocorreo;
}
/**Fija el valor de logenviocorreo
@param pLogenviocorreo nuevo Valor de logenviocorreo*/
public void setLogenviocorreo(Clob pLogenviocorreo){
  logenviocorreo=pLogenviocorreo;
}

public static final String CORREOCOMPRADOR="CORREOCOMPRADOR";
/**Obtiene el valor de correocomprador
@return valor de correocomprador*/
public String getCorreocomprador(){
  return correocomprador;
}
/**Fija el valor de correocomprador
@param pCorreocomprador nuevo Valor de correocomprador*/
public void setCorreocomprador(String pCorreocomprador){
  correocomprador=pCorreocomprador;
}

public static final String XMLFORLOTE="XMLFORLOTE";
/**Obtiene el valor de xmlforlote
@return valor de xmlforlote*/
public Clob getXmlforlote(){
  return xmlforlote;
}
/**Fija el valor de xmlforlote
@param pXmlforlote nuevo Valor de xmlforlote*/
public void setXmlforlote(Clob pXmlforlote){
  xmlforlote=pXmlforlote;
}

public static final String CODIGOCONTABLE="CODIGOCONTABLE";
/**Obtiene el valor de codigocontable
@return valor de codigocontable*/
public String getCodigocontable(){
  return codigocontable;
}
/**Fija el valor de codigocontable
@param pCodigocontable nuevo Valor de codigocontable*/
public void setCodigocontable(String pCodigocontable){
  codigocontable=pCodigocontable;
}

/**Implementacion de la comparacion de la entidad Feinvoice
@param rhs Elemento de Comparacion
@return el resultado de la comparacion
*/
public boolean equals(Object rhs){
    if (rhs == null){return false;}
    if (! (rhs instanceof Feinvoice)){return false;}
    Feinvoice that = (Feinvoice) rhs;
    if (this.getPk() == null || that.getPk() == null){
        return false;}
    return (this.getPk().equals(that.getPk()));
}
/**Implementaciï¿½n del metodo hashCode de la la entidad Feinvoice
@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;
}
/**Implementaci�n toString
*/
public String toString() {
	Field[]fs=this.getClass().getDeclaredFields();
	String data="";
	for(Field f:fs){
	 try{	
	 String name=f.getName();
	 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;
	}
/**Implementaci�n de la creaci�n de un bean en blancoFeinvoice
*/
public Object createInstance() throws Exception{
 Feinvoice instance=new Feinvoice();	
 return instance;
}
public Object cloneMe() throws Exception{
  Feinvoice p=(Feinvoice)this.clone();
  return p;
}
}
