Payment.java
package com.tradecloud.domain.settlement;
import com.tradecloud.common.base.PersistenceBase;
import com.tradecloud.domain.common.Currency;
import com.tradecloud.domain.document.invoice.CommercialInvoice;
import com.tradecloud.domain.document.invoice.CostsInvoice;
import com.tradecloud.domain.document.invoice.ServiceProviderInvoice;
import com.tradecloud.domain.model.payment.PaymentMethod;
import com.tradecloud.domain.treasury.TreasuryBank;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.hibernate.annotations.ForeignKey;
import javax.persistence.*;
import javax.xml.bind.annotation.*;
import java.math.BigDecimal;
import java.util.Date;
@Entity
@Table(name = "payment")
@Access(AccessType.FIELD)
@NamedQueries({
@NamedQuery(name = "payment.findByPlannedSettlement",
query = "from Payment payment where payment.plannedSettlement=:plannedSettlement order by created"),
@NamedQuery(name = "payment.findAllByOrders",
query = "from Payment as payment, Order as ord where payment.plannedSettlement in elements(ord.plannedSettlements) and "
+ "ord.id in (:orderIds) order by payment.paymentDate")})
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "Payment")
public class Payment extends PersistenceBase {
private static final long serialVersionUID = 1L;
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@XmlElement(name = "ServiceProviderInvoice")
private ServiceProviderInvoice indirectCostsInvoice;
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@XmlElement(name = "CommercialInvoice")
private CommercialInvoice commercialInvoice;
@ManyToOne
@ForeignKey(name = "fk_plannedsettlement")
@XmlElement(name = "PlannedSettlement")
private PlannedSettlement plannedSettlement;
@XmlAttribute
private String reference;
@XmlAttribute
private Date dateCreated;
@XmlAttribute
private Date paymentDate;
@ManyToOne
@ForeignKey(name = "fk_currency")
@XmlElement
private Currency currency;
@XmlAttribute
private BigDecimal spotROE;
@XmlAttribute
private Date spotDate;
@XmlAttribute
private BigDecimal amount;
@XmlAttribute
private BigDecimal bankCharges; // in costing currency
@XmlAttribute
private BigDecimal discount;
@XmlAttribute
private String comments;
@ManyToOne
@XmlElement
@ForeignKey(name = "fk_paymentmethod")
private PaymentMethod paymentMethod;
@XmlAttribute
private boolean authorised;
@ManyToOne(fetch = FetchType.LAZY)
@ForeignKey(name = "fk_linkedPayment")
@XmlElement(name = "linkedPayment")
private Payment linkedPayment;
private Long reallocationSourceId;
private Long reallocationDestinationId;
private String erpPaymentId;
private transient CostsInvoice creditNote;
@Enumerated(EnumType.STRING)
private Type type = Type.PAYMENT;
@XmlType(name = "Type", namespace = "http://www.tradecloud.com/schema/accounting")
public enum Type {
PAYMENT, REALLOCATION, REVERSAL, REALLOCATION_REVERSAL;
}
@ManyToOne
@JoinColumn(name = "nominatedBank_code")
private TreasuryBank nominatedBank;
private String username;
public Payment() {
}
public ServiceProviderInvoice getIndirectCostsInvoice() {
return indirectCostsInvoice;
}
public void setIndirectCostsInvoice(ServiceProviderInvoice indirectCostsInvoice) {
this.indirectCostsInvoice = indirectCostsInvoice;
}
public CommercialInvoice getCommercialInvoice() {
return commercialInvoice;
}
public void setCommercialInvoice(CommercialInvoice commercialInvoice) {
this.commercialInvoice = commercialInvoice;
}
public PlannedSettlement getPlannedSettlement() {
return plannedSettlement;
}
public void setPlannedSettlement(PlannedSettlement plannedSettlement) {
this.plannedSettlement = plannedSettlement;
}
public String getReference() {
return reference;
}
public void setReference(String reference) {
this.reference = reference;
}
public Date getDateCreated() {
return dateCreated;
}
public void setDateCreated(Date dateCreated) {
this.dateCreated = dateCreated;
}
public Date getPaymentDate() {
return paymentDate;
}
public void setPaymentDate(Date paymentDate) {
this.paymentDate = paymentDate;
}
public Currency getCurrency() {
return currency;
}
public void setCurrency(Currency currency) {
this.currency = currency;
}
public BigDecimal getSpotROE() {
return spotROE;
}
public void setSpotROE(BigDecimal spotROE) {
this.spotROE = spotROE;
}
public Date getSpotDate() {
return spotDate;
}
public void setSpotDate(Date spotDate) {
this.spotDate = spotDate;
}
public BigDecimal getAmount() {
return amount;
}
public void setAmount(BigDecimal amount) {
this.amount = amount;
}
public BigDecimal getBankCharges() {
return bankCharges;
}
public void setBankCharges(BigDecimal bankCharges) {
this.bankCharges = bankCharges;
}
public BigDecimal getDiscount() {
return discount;
}
public void setDiscount(BigDecimal discount) {
this.discount = discount;
}
public String getComments() {
return comments;
}
public void setComments(String comments) {
this.comments = comments;
}
public PaymentMethod getPaymentMethod() {
return paymentMethod;
}
public void setPaymentMethod(PaymentMethod paymentMethod) {
this.paymentMethod = paymentMethod;
}
public boolean isAuthorised() {
return authorised;
}
public void setAuthorised(boolean authorised) {
this.authorised = authorised;
}
public Payment getLinkedPayment() {
return linkedPayment;
}
public void setLinkedPayment(Payment linkedPayment) {
this.linkedPayment = linkedPayment;
}
public CostsInvoice getCreditNote() {
return creditNote;
}
public void setCreditNote(CostsInvoice creditNote) {
this.creditNote = creditNote;
}
public TreasuryBank getNominatedBank() {
return nominatedBank;
}
public void setNominatedBank(TreasuryBank nominatedBank) {
this.nominatedBank = nominatedBank;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (this == obj) {
return true;
}
if (!(obj instanceof Payment)) {
return false;
}
Payment other = (Payment) obj;
return new EqualsBuilder().append(created, other.created).append(amount, other.amount).append(paymentDate, other.paymentDate)
.append(plannedSettlement, other.plannedSettlement).isEquals();
}
@Override
public int hashCode() {
return new HashCodeBuilder().append(created).append(amount).append(paymentDate).append(plannedSettlement).toHashCode();
}
@Override
public String toString() {
return new ToStringBuilder(this).append(amount).append(paymentDate).append(plannedSettlement).append(nominatedBank).toString();
}
public Long getReallocationSourceId() {
return reallocationSourceId;
}
public void setReallocationSourceId(Long reallocationSourceId) {
this.reallocationSourceId = reallocationSourceId;
}
public Long getReallocationDestinationId() {
return reallocationDestinationId;
}
public void setReallocationDestinationId(Long reallocationDestinationId) {
this.reallocationDestinationId = reallocationDestinationId;
}
public String getErpPaymentId() {
return erpPaymentId;
}
public void setErpPaymentId(String erpPaymentId) {
this.erpPaymentId = erpPaymentId;
}
public Type getType() {
return type;
}
public void setType(Type type) {
this.type = type;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}