package com.fp.persistence.pgeneral.trans;

import com.fp.dto.hb.Cache;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Column;
import javax.persistence.EntityManager;
import java.io.Serializable;
import javax.persistence.Table;
import com.fp.dto.hb.HibernateBean;
import javax.persistence.Version;
import java.lang.reflect.Field;
import javax.persistence.Transient;

/**Clase que implementa la entidad de Hibernate que hace referencia a la tabla TGENETRANSACTIONITEMDETAIL*/
@Entity(name="TgeneTransactionItemDetail")
@Table(name="TGENETRANSACTIONITEMDETAIL")
public class TgeneTransactionItemDetail extends com.fp.dto.AbstractDataTransport implements Serializable,HibernateBean,Cloneable,Cache{
/**
* 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 TgeneTransactionItemDetail
*/
@EmbeddedId
private TgeneTransactionItemDetailKey pk;
@Column(name="DEBITCREDIT", nullable=true)

/**
* Indica si el item afecta al debito o credito del par contable
*/
private String debitcredit;

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

/**
* Código de tipo de saldo. Efectivo, Bloqueado , Pignorado, Retenciones Locales, remesas ..Etc
*/
private String balancetype;

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

/**
* Codigo del grupo de balance 1 Activo, 2 Pasivo, 3 Patrimonio .. 62 contingente deudor 61 por contra deudor 
*/
private String balancegroup;

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

/**
* Optimistic locking del registro
*/
private Integer recordversion;

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

/**
* Item complementario utilizado para armar el asiento contable.
*/
private Integer complementaryitem;

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

/**
* Item de referencia del cual se obtien el monto base para calcular IMP, CAR, COM.
*/
private Integer referenceitem;

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

/**
* Rubro asociado, se adiciona a la transaccion cuando se ejecuta un rubro de la transaccion ejemplo cobro de intereses en orden, se reversa de cuentas de orden
*/
private Integer associateditem;

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

/**
* Indica si el journal se graba con la cuenta del request, si el rubro es de debito se copia la cuenta debito, si el rubro es credito se copia la cuenta credito
*/
private String copyaccountfromrequest;

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

/**
* Codigo de modulo
*/
private String conceptmodule;

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

/**
* Codigo de concepto
*/
private Integer conceptcode;

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

/**
* Código de plantilla de cuentas por cobrar. 
*/
private Integer templatecode;

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

/**
* Indica si el item se graba en la tabla de movimiento y afecta el saldo de la cuenta
*/
private String registermovement;

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

/**
* Indica si sobre el rubro se calcula impouestos, cargos o comisiones.
*/
private String tariff;

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

/**
* Indica si el rubro es un impuesto, si  la cuenta no tiene saldo para ejecutar la transacción se cobra el cargo mas el proporcinal del impuesto, En la cxc se define calcula nuevamente el imopuesto
*/
private String istax;

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

/**
* Indica si el movimiento se presenta en el estado de cuenta 
*/
private String accountstatement;

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

/**
* Indica si el valor del rubro genera un sobregiro indirecto o un vario deudor en cuentas de ahorro, se utiliza en los cargos por servicios
*/
private String overdraw;

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

/**
* Indica si tiene o no procesos de negocio a ejecutar en el rubro.
*/
private String process;

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

/**
* Indica si el registro se almacena en cache del servidor de aplicaciones.
*/
private String managecache;

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

/**
* Indica se suma o resta el saldo de la cuenta producto,Los valores pueden ser '+','-' y null
*/
private String addorsub;

/**Contructor por defecto*/
public TgeneTransactionItemDetail(){
}
/**Contructor de TgeneTransactionItemDetail
@param pPk Clave Primaria del entity
*/
public TgeneTransactionItemDetail(TgeneTransactionItemDetailKey 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 TgeneTransactionItemDetail
*/
public static TgeneTransactionItemDetail find(EntityManager pEntityManager,TgeneTransactionItemDetailKey pKey) throws Exception{
    TgeneTransactionItemDetail obj = pEntityManager.find(TgeneTransactionItemDetail.class,pKey);
    return obj;
}
/**Entrega la Clave primaria de TgeneTransactionItemDetail
@return El objeto que referencia a la Clave primaria de TgeneTransactionItemDetail
*/
public TgeneTransactionItemDetailKey getPk(){
  return pk;
}
/**Fija un nuevo valor a la Clave primaria de TgeneTransactionItemDetail
@param pPk El objeto que referencia a la nueva Clave primaria de TgeneTransactionItemDetail
*/
public void setPk(TgeneTransactionItemDetailKey pPk){
  pk=pPk;
}
/**Obtiene el valor de debitcredit
@return valor de debitcredit*/
public String getDebitcredit(){
  return debitcredit;
}
/**Fija el valor de debitcredit
@param pDebitcredit nuevo Valor de debitcredit*/
public void setDebitcredit(String pDebitcredit){
  debitcredit=pDebitcredit;
}

/**Obtiene el valor de balancetype
@return valor de balancetype*/
public String getBalancetype(){
  return balancetype;
}
/**Fija el valor de balancetype
@param pBalancetype nuevo Valor de balancetype*/
public void setBalancetype(String pBalancetype){
  balancetype=pBalancetype;
}

/**Obtiene el valor de balancegroup
@return valor de balancegroup*/
public String getBalancegroup(){
  return balancegroup;
}
/**Fija el valor de balancegroup
@param pBalancegroup nuevo Valor de balancegroup*/
public void setBalancegroup(String pBalancegroup){
  balancegroup=pBalancegroup;
}

/**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 complementaryitem
@return valor de complementaryitem*/
public Integer getComplementaryitem(){
  return complementaryitem;
}
/**Fija el valor de complementaryitem
@param pComplementaryitem nuevo Valor de complementaryitem*/
public void setComplementaryitem(Integer pComplementaryitem){
  complementaryitem=pComplementaryitem;
}

/**Obtiene el valor de referenceitem
@return valor de referenceitem*/
public Integer getReferenceitem(){
  return referenceitem;
}
/**Fija el valor de referenceitem
@param pReferenceitem nuevo Valor de referenceitem*/
public void setReferenceitem(Integer pReferenceitem){
  referenceitem=pReferenceitem;
}

/**Obtiene el valor de associateditem
@return valor de associateditem*/
public Integer getAssociateditem(){
  return associateditem;
}
/**Fija el valor de associateditem
@param pAssociateditem nuevo Valor de associateditem*/
public void setAssociateditem(Integer pAssociateditem){
  associateditem=pAssociateditem;
}

/**Obtiene el valor de copyaccountfromrequest
@return valor de copyaccountfromrequest*/
public String getCopyaccountfromrequest(){
  return copyaccountfromrequest;
}
/**Fija el valor de copyaccountfromrequest
@param pCopyaccountfromrequest nuevo Valor de copyaccountfromrequest*/
public void setCopyaccountfromrequest(String pCopyaccountfromrequest){
  copyaccountfromrequest=pCopyaccountfromrequest;
}

/**Obtiene el valor de conceptmodule
@return valor de conceptmodule*/
public String getConceptmodule(){
  return conceptmodule;
}
/**Fija el valor de conceptmodule
@param pConceptmodule nuevo Valor de conceptmodule*/
public void setConceptmodule(String pConceptmodule){
  conceptmodule=pConceptmodule;
}

/**Obtiene el valor de conceptcode
@return valor de conceptcode*/
public Integer getConceptcode(){
  return conceptcode;
}
/**Fija el valor de conceptcode
@param pConceptcode nuevo Valor de conceptcode*/
public void setConceptcode(Integer pConceptcode){
  conceptcode=pConceptcode;
}

/**Obtiene el valor de templatecode
@return valor de templatecode*/
public Integer getTemplatecode(){
  return templatecode;
}
/**Fija el valor de templatecode
@param pTemplatecode nuevo Valor de templatecode*/
public void setTemplatecode(Integer pTemplatecode){
  templatecode=pTemplatecode;
}

/**Obtiene el valor de registermovement
@return valor de registermovement*/
public String getRegistermovement(){
  return registermovement;
}
/**Fija el valor de registermovement
@param pRegistermovement nuevo Valor de registermovement*/
public void setRegistermovement(String pRegistermovement){
  registermovement=pRegistermovement;
}

/**Obtiene el valor de tariff
@return valor de tariff*/
public String getTariff(){
  return tariff;
}
/**Fija el valor de tariff
@param pTariff nuevo Valor de tariff*/
public void setTariff(String pTariff){
  tariff=pTariff;
}

/**Obtiene el valor de istax
@return valor de istax*/
public String getIstax(){
  return istax;
}
/**Fija el valor de istax
@param pIstax nuevo Valor de istax*/
public void setIstax(String pIstax){
  istax=pIstax;
}

/**Obtiene el valor de accountstatement
@return valor de accountstatement*/
public String getAccountstatement(){
  return accountstatement;
}
/**Fija el valor de accountstatement
@param pAccountstatement nuevo Valor de accountstatement*/
public void setAccountstatement(String pAccountstatement){
  accountstatement=pAccountstatement;
}

/**Obtiene el valor de overdraw
@return valor de overdraw*/
public String getOverdraw(){
  return overdraw;
}
/**Fija el valor de overdraw
@param pOverdraw nuevo Valor de overdraw*/
public void setOverdraw(String pOverdraw){
  overdraw=pOverdraw;
}

/**Obtiene el valor de process
@return valor de process*/
public String getProcess(){
  return process;
}
/**Fija el valor de process
@param pProcess nuevo Valor de process*/
public void setProcess(String pProcess){
  process=pProcess;
}

/**Obtiene el valor de managecache
@return valor de managecache*/
public String getManagecache(){
  return managecache;
}
/**Fija el valor de managecache
@param pManagecache nuevo Valor de managecache*/
public void setManagecache(String pManagecache){
  managecache=pManagecache;
}

/**Obtiene el valor de addorsub
@return valor de addorsub*/
public String getAddorsub(){
  return addorsub;
}
/**Fija el valor de addorsub
@param pAddorsub nuevo Valor de addorsub*/
public void setAddorsub(String pAddorsub){
  addorsub=pAddorsub;
}

public boolean equals(Object rhs){
    if (rhs == null)return false;
    if (! (rhs instanceof TgeneTransactionItemDetail))return false;
    TgeneTransactionItemDetail that = (TgeneTransactionItemDetail) rhs;
    if (this.getPk() == null || that.getPk() == null)
        return false;
    return (this.getPk().equals(that.getPk()));
}
/**Implementacion del metodo hashCode de la la entidad TgeneTransactionItemDetail
@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 TgeneTransactionItemDetail
*/
public Object createInstance(){
 TgeneTransactionItemDetail instance=new TgeneTransactionItemDetail();	
 instance.setPk(new TgeneTransactionItemDetailKey());
 return instance;
}
/**Clona la entidad TgeneTransactionItemDetail
@see com.fp.dto.hb.HibernateBean#cloneMe()
*/
public Object cloneMe() throws CloneNotSupportedException{
  TgeneTransactionItemDetail p=(TgeneTransactionItemDetail)this.clone();
  p.setPk((TgeneTransactionItemDetailKey)this.pk.cloneMe());
  return p;
}
}
