package com.fp.persistence.pgeneral.receive.acco; import java.io.Serializable; import java.lang.reflect.Field; import java.math.BigDecimal; import java.sql.Date; import java.sql.Timestamp; import java.util.List; import javax.persistence.Column; import javax.persistence.EmbeddedId; import javax.persistence.Entity; import javax.persistence.EntityManager; import javax.persistence.NoResultException; import javax.persistence.Query; import javax.persistence.Table; import javax.persistence.Transient; import com.fp.common.helper.Constant; import com.fp.dto.hb.HibernateBean; /** Clase que implementa la entidad de Hibernate que hace referencia a la tabla TRECEIVABLEACCOUNTDEMANDEPO */ @Entity(name = "TreceivableAccountDemanDepo") @Table(name = "TRECEIVABLEACCOUNTDEMANDEPO") public class TreceivableAccountDemanDepo extends com.fp.dto.AbstractDataBalanceTransport implements Serializable, HibernateBean, Cloneable { /** * 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 TreceivableAccountDemanDepo */ @EmbeddedId private TreceivableAccountDemanDepoKey pk; @Column(name = "DATEFROM", nullable = false) /** * Fecha desde la cual esta vigente el registro de la cuenta por cobrar */ private Timestamp datefrom; @Column(name = "ACCOUNTINGDATE", nullable = true) /** * Fecha contable con la que se crea la cuenta por cobrar */ private Date accountingdate; @Column(name = "CURRENCYCODE", nullable = true) /** * Codigo de moneda */ private String currencycode; @Column(name = "BALANCETYPE", nullable = true) /** * Código de tipo de saldo de registro de la CXC. 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; @Column(name = "RECOVERBALANCETYPE", nullable = true) /** * Código de tipo de saldo de cobro de la CXC. Efectivo, Bloqueado , Pignorado, Retenciones Locales, remesas ..Etc */ private String recoverbalancetype; @Column(name = "RECOVERBALANCEGROUP", nullable = true) /** * Codigo del grupo de balance 1 Activo, 2 Pasivo, 3 Patrimonio .. 62 contingente deudor 61 por contra deudor */ private String recoverbalancegroup; @Column(name = "PRIORITY", nullable = true) /** * Prioridad de cobro de la cuenta por cobrar dentro en el dia */ private Integer priority; @Column(name = "ISPARTIAL", nullable = true) /** * Indica si la cuenta por cobrar permite cobros parciales */ private String ispartial; @Column(name = "MINIMUMPAYMENT", nullable = true) /** * Si permite cobros parciales, Valor minimo de cobro */ private BigDecimal minimumpayment; @Column(name = "EXPIREDATE", nullable = true) /** * Fecha de vencimiento de la cuenta por cobrar. */ private Date expiredate; @Column(name = "MESSAGE", nullable = true) /** * Numero de mensaje con el cual se realizo la ultima transacción en la cuenta. */ private String message; @Column(name = "ORIGINALMESSAGE", nullable = true) /** * Numero de mensaje con el cual se creo la cuenta por cobrar. */ private String originalmessage; @Column(name = "REVERSEMESSAGE", nullable = true) /** * Numero de mensaje de reverso de la cuenta por cobrar. */ private String reversemessage; @Column(name = "REVERSE", nullable = true) /** * Indica si la cuenta por cobrar esta reversada. */ private String reverse; @Column(name = "ORIGINALAMOUNT", nullable = true) /** * Monto original */ private BigDecimal originalamount; @Column(name = "PENDINGAMOUNT", nullable = true) /** * Monto pendiente de pago */ private BigDecimal pendingamount; @Column(name = "LASTPAYAMOUNT", nullable = true) /** * Ultimo monto pagado */ private BigDecimal lastpayamount; @Column(name = "LASTPAY", nullable = true) /** * Fecha de ultimo pago */ private Date lastpay; @Column(name = "DESCRIPTION", nullable = true) /** * Glosa de la cuenta por cobrar. */ private String description; /** Contructor por defecto */ public TreceivableAccountDemanDepo() { } /** * Contructor de TreceivableAccountDemanDepo * * @param pPk Clave Primaria del entity * @param pDatefrom Fecha desde la cual esta vigente el registro de la cuenta por cobrar */ public TreceivableAccountDemanDepo(TreceivableAccountDemanDepoKey pPk, Timestamp pDatefrom) { this(); pk = pPk; datefrom = pDatefrom; } /** * 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 TreceivableAccountDemanDepo */ public static TreceivableAccountDemanDepo find(EntityManager pEntityManager, TreceivableAccountDemanDepoKey pKey) throws Exception { TreceivableAccountDemanDepo obj = pEntityManager.find(TreceivableAccountDemanDepo.class, pKey); return obj; } /** * Entrega la Clave primaria de TreceivableAccountDemanDepo * * @return El objeto que referencia a la Clave primaria de TreceivableAccountDemanDepo */ public TreceivableAccountDemanDepoKey getPk() { return pk; } /** * Fija un nuevo valor a la Clave primaria de TreceivableAccountDemanDepo * * @param pPk El objeto que referencia a la nueva Clave primaria de TreceivableAccountDemanDepo */ public void setPk(TreceivableAccountDemanDepoKey pPk) { pk = pPk; } /** * Obtiene el valor de datefrom * * @return valor de datefrom */ public Timestamp getDatefrom() { return datefrom; } /** * Fija el valor de datefrom * * @param pDatefrom nuevo Valor de datefrom */ public void setDatefrom(Timestamp pDatefrom) { datefrom = pDatefrom; } /** * Obtiene el valor de accountingdate * * @return valor de accountingdate */ public Date getAccountingdate() { return accountingdate; } /** * Fija el valor de accountingdate * * @param pAccountingdate nuevo Valor de accountingdate */ public void setAccountingdate(Date pAccountingdate) { accountingdate = pAccountingdate; } /** * Obtiene el valor de currencycode * * @return valor de currencycode */ public String getCurrencycode() { return currencycode; } /** * Fija el valor de currencycode * * @param pCurrencycode nuevo Valor de currencycode */ public void setCurrencycode(String pCurrencycode) { currencycode = pCurrencycode; } /** * 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 recoverbalancetype * * @return valor de recoverbalancetype */ public String getRecoverbalancetype() { return recoverbalancetype; } /** * Fija el valor de recoverbalancetype * * @param pRecoverbalancetype nuevo Valor de recoverbalancetype */ public void setRecoverbalancetype(String pRecoverbalancetype) { recoverbalancetype = pRecoverbalancetype; } /** * Obtiene el valor de recoverbalancegroup * * @return valor de recoverbalancegroup */ public String getRecoverbalancegroup() { return recoverbalancegroup; } /** * Fija el valor de recoverbalancegroup * * @param pRecoverbalancegroup nuevo Valor de recoverbalancegroup */ public void setRecoverbalancegroup(String pRecoverbalancegroup) { recoverbalancegroup = pRecoverbalancegroup; } /** * Obtiene el valor de priority * * @return valor de priority */ public Integer getPriority() { return priority; } /** * Fija el valor de priority * * @param pPriority nuevo Valor de priority */ public void setPriority(Integer pPriority) { priority = pPriority; } /** * Obtiene el valor de ispartial * * @return valor de ispartial */ public String getIspartial() { return ispartial; } /** * Fija el valor de ispartial * * @param pIspartial nuevo Valor de ispartial */ public void setIspartial(String pIspartial) { ispartial = pIspartial; } /** * Obtiene el valor de minimumpayment * * @return valor de minimumpayment */ public BigDecimal getMinimumpayment() { return minimumpayment; } /** * Fija el valor de minimumpayment * * @param pMinimumpayment nuevo Valor de minimumpayment */ public void setMinimumpayment(BigDecimal pMinimumpayment) { minimumpayment = pMinimumpayment; } /** * Obtiene el valor de expiredate * * @return valor de expiredate */ public Date getExpiredate() { return expiredate; } /** * Fija el valor de expiredate * * @param pExpiredate nuevo Valor de expiredate */ public void setExpiredate(Date pExpiredate) { expiredate = pExpiredate; } /** * Obtiene el valor de message * * @return valor de message */ public String getMessage() { return message; } /** * Fija el valor de message * * @param pMessage nuevo Valor de message */ public void setMessage(String pMessage) { message = pMessage; } /** * Obtiene el valor de originalmessage * * @return valor de originalmessage */ public String getOriginalmessage() { return originalmessage; } /** * Fija el valor de originalmessage * * @param pOriginalmessage nuevo Valor de originalmessage */ public void setOriginalmessage(String pOriginalmessage) { originalmessage = pOriginalmessage; } /** * Obtiene el valor de reversemessage * * @return valor de reversemessage */ public String getReversemessage() { return reversemessage; } /** * Fija el valor de reversemessage * * @param pReversemessage nuevo Valor de reversemessage */ public void setReversemessage(String pReversemessage) { reversemessage = pReversemessage; } /** * Obtiene el valor de reverse * * @return valor de reverse */ public String getReverse() { return reverse; } /** * Fija el valor de reverse * * @param pReverse nuevo Valor de reverse */ public void setReverse(String pReverse) { reverse = pReverse; } /** * Obtiene el valor de originalamount * * @return valor de originalamount */ public BigDecimal getOriginalamount() { return originalamount; } /** * Fija el valor de originalamount * * @param pOriginalamount nuevo Valor de originalamount */ public void setOriginalamount(BigDecimal pOriginalamount) { originalamount = pOriginalamount; } /** * Obtiene el valor de pendingamount * * @return valor de pendingamount */ public BigDecimal getPendingamount() { return pendingamount; } /** * Fija el valor de pendingamount * * @param pPendingamount nuevo Valor de pendingamount */ public void setPendingamount(BigDecimal pPendingamount) { pendingamount = pPendingamount; } /** * Obtiene el valor de lastpayamount * * @return valor de lastpayamount */ public BigDecimal getLastpayamount() { return lastpayamount; } /** * Fija el valor de lastpayamount * * @param pLastpayamount nuevo Valor de lastpayamount */ public void setLastpayamount(BigDecimal pLastpayamount) { lastpayamount = pLastpayamount; } /** * Obtiene el valor de lastpay * * @return valor de lastpay */ public Date getLastpay() { return lastpay; } /** * Fija el valor de lastpay * * @param pLastpay nuevo Valor de lastpay */ public void setLastpay(Date pLastpay) { lastpay = pLastpay; } /** * Obtiene el valor de description * * @return valor de description */ public String getDescription() { return description; } /** * Fija el valor de description * * @param pDescription nuevo Valor de description */ public void setDescription(String pDescription) { description = pDescription; } public boolean equals(Object rhs) { if (rhs == null) return false; if (!(rhs instanceof TreceivableAccountDemanDepo)) return false; TreceivableAccountDemanDepo that = (TreceivableAccountDemanDepo) 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 TreceivableAccountDemanDepo * * @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 (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; } /** Implementación de la creación de un bean en blanco TreceivableAccountDemanDepo */ public Object createInstance() { TreceivableAccountDemanDepo instance = new TreceivableAccountDemanDepo(); instance.setPk(new TreceivableAccountDemanDepoKey()); return instance; } /** * Clona la entidad TreceivableAccountDemanDepo * * @see com.fp.dto.hb.HibernateBean#cloneMe() */ public Object cloneMe() throws CloneNotSupportedException { TreceivableAccountDemanDepo p = (TreceivableAccountDemanDepo) this.clone(); p.setPk((TreceivableAccountDemanDepoKey) this.pk.cloneMe()); return p; } public Object getId() { return this.pk; } //Metodos manuales. /**Sentencia que obtiene una lista de TreceivableAccount dado un numero de mensaje. */ private static final String HQL_MSG = "from TreceivableAccountDemanDepo t " + " where t.message = :message" ; /** * Entrega una lista de TreceivableAccount dado un numeor de mensaje. * @param pEntityManager Referencia a la session de base de datos. * @param pMessage Numero de mensaje a buscar registros de TreceivableAccount * @return List */ @SuppressWarnings("unchecked") public static List findByMessage(EntityManager pEntityManager,String pMessage) { List ldata = null; Query qry = pEntityManager.createQuery(HQL_MSG); qry.setParameter("message", pMessage); ldata = qry.getResultList(); return ldata; } /**Sentencia que obtiene una lista de TreceivableAccount dado un numero de mensaje orgiginal. */ private static final String HQL_ORIMSG = "from TreceivableAccountDemanDepo t " + " where t.originalmessage = :originalmessage "+ " and t.message != t.originalmessage "; /** * Entrega una lista de TreceivableAccount dado un numeor de mensaje original. * @param pEntityManager Referencia a la session de base de datos. * @param pMessage Numero de mensaje a buscar registros de TreceivableAccount * @return List */ @SuppressWarnings("unchecked") public static List findByOriginalMessage(EntityManager pEntityManager,String pMessage) { List ldata = null; Query qry = pEntityManager.createQuery(HQL_ORIMSG); qry.setParameter("originalmessage", pMessage); ldata = qry.getResultList(); return ldata; } /** Sentencia que devuelve una lista de cuentas por cobrar, pendientes de pago.*/ private static String HQL_RECOVERY = " from TreceivableAccountDemanDepo ra "+ " where ra.pk.account = :account "+ " and ra.pk.dateto = :dateto "+ " and ra.pk.company = :company "+ " and ra.pk.partitiondb = :partition "+ " and ra.expiredate >= :accountingdate"+ " and ra.pendingamount > 0 "+ " order by ra.priority,ra.pk.creationdate "; /** * Metodo que entrega una lista de cuenta por pagar pendientes de pago. * @param pEntityManager Referencia a una session de base de datos. * @param pAccount Numero de cuenta por cobrar. * @param pCompany Codido de compania asociada a la cuenta por cobrar. * @param pAccountingDate Fecha contable. * @return List * @throws Exception */ @SuppressWarnings("unchecked") public static List find(EntityManager pEntityManager,String pAccount,Integer pCompany, Date pAccountingDate) throws Exception { List ldata = null; Query qry = pEntityManager.createQuery(HQL_RECOVERY); qry.setParameter("account", pAccount); qry.setParameter("dateto", Constant.getDefaultExpiryDate()); qry.setParameter("company", pCompany); qry.setParameter("partition", Constant.getPartition(Constant.getDefaultExpiryDate())); qry.setParameter("accountingdate", pAccountingDate); ldata = qry.getResultList(); return ldata; } /** Sentencia que devuelve un registro de la cuenta por pagar vigente, para la cuenta tipo de saldo grupo balance.*/ private static String HQL_VIGENT = " from TreceivableAccountDemanDepo ra "+ " where ra.pk.account = :account "+ " and ra.pk.dateto = :dateto "+ " and ra.pk.company = :company "+ " and ra.pk.partitiondb = :partition "+ " and ra.balancetype >= :balancetype "+ " and ra.balancegroup >= :balancegroup "; /** * Metodo que entrega una datos de cuenta por pagar dada la cuenta, tipo de saldo grupo de balance. * @param pEntityManager Referencia a una session de base de datos. * @param pAccount Numero de cuenta por cobrar. * @param pCompany Codido de compania asociada a la cuenta por cobrar. * @param pBalanceType Tipo de saldo. * @param pBalanceGroup Grupo de balance. * @return TreceivableAccount * @throws Exception */ public static TreceivableAccountDemanDepo findVigent(EntityManager pEntityManager,String pAccount,Integer pCompany, String pBalanceType,String pBalanceGroup) throws Exception { TreceivableAccountDemanDepo obj = null; Query qry = pEntityManager.createQuery(HQL_VIGENT); qry.setParameter("account", pAccount); qry.setParameter("dateto", Constant.getDefaultExpiryDate()); qry.setParameter("company", pCompany); qry.setParameter("partition", Constant.getPartition(Constant.getDefaultExpiryDate())); qry.setParameter("balancetype", pBalanceType); qry.setParameter("balancegroup", pBalanceGroup); try { obj = (TreceivableAccountDemanDepo)qry.getSingleResult(); } catch (NoResultException e) { return obj; } return obj; } }