///////////////////////////////////////////////////////////////////////////// // // Project ProjectForge Community Edition // www.projectforge.org // // Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de) // // ProjectForge is dual-licensed. // // This community edition is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as published // by the Free Software Foundation; version 3 of the License. // // This community edition is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General // Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, see http://www.gnu.org/licenses/. // ///////////////////////////////////////////////////////////////////////////// package org.projectforge.fibu; import java.math.BigDecimal; import java.sql.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; import javax.persistence.Transient; import javax.persistence.UniqueConstraint; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.builder.HashCodeBuilder; import org.hibernate.search.annotations.DateBridge; import org.hibernate.search.annotations.Field; import org.hibernate.search.annotations.Index; import org.hibernate.search.annotations.Indexed; import org.hibernate.search.annotations.Resolution; import org.projectforge.core.DefaultBaseDO; import org.projectforge.core.PropertyInfo; import org.projectforge.core.ShortDisplayNameCapable; /** * @author Werner Feder (werner.feder@t-online.de) * */ @Entity @Indexed @Table(name = "T_FIBU_PAYMENT_SCHEDULE", uniqueConstraints = { @UniqueConstraint(columnNames = { "auftrag_id", "number"})}) public class PaymentScheduleDO extends DefaultBaseDO implements ShortDisplayNameCapable { private static final long serialVersionUID = -8024212050762584171L; private AuftragDO auftrag; private short number; @PropertyInfo(i18nKey = "date") @Field(index = Index.UN_TOKENIZED) @DateBridge(resolution = Resolution.DAY) private Date scheduleDate; @PropertyInfo(i18nKey = "fibu.common.betrag") private BigDecimal amount = null; @PropertyInfo(i18nKey = "comment") private String comment; @PropertyInfo(i18nKey = "fibu.common.reached") private boolean reached; @PropertyInfo(i18nKey = "fibu.auftrag.vollstaendigFakturiert") private boolean vollstaendigFakturiert; /** * Not used as object due to performance reasons. * @return AuftragDO */ @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "auftrag_id", nullable = false) public AuftragDO getAuftrag() { return auftrag; } public PaymentScheduleDO setAuftrag(final AuftragDO auftrag) { this.auftrag = auftrag; return this; } @Transient public Integer getAuftragId() { if (this.auftrag == null) return null; return auftrag.getId(); } @Column public short getNumber() { return number; } public PaymentScheduleDO setNumber(final short number) { this.number = number; return this; } @Column(name = "schedule_date") public Date getScheduleDate() { return scheduleDate; } public PaymentScheduleDO setScheduleDate(final Date scheduleDate) { this.scheduleDate = scheduleDate; return this; } @Column(scale = 2, precision = 12) public BigDecimal getAmount() { return amount; } public PaymentScheduleDO setAmount(final BigDecimal amount) { this.amount = amount; return this; } @Column public String getComment() { return comment; } public PaymentScheduleDO setComment(final String comment) { this.comment = comment; return this; } @Column public boolean isReached() { return reached; } public PaymentScheduleDO setReached(final boolean reached) { this.reached = reached; return this; } /** * Dieses Flag wird manuell von der FiBu gesetzt und kann nur für abgeschlossene Aufträge gesetzt werden. */ @Column(name = "vollstaendig_fakturiert", nullable = false) public boolean isVollstaendigFakturiert() { return vollstaendigFakturiert; } public PaymentScheduleDO setVollstaendigFakturiert(final boolean vollstaendigFakturiert) { this.vollstaendigFakturiert = vollstaendigFakturiert; return this; } @Override public boolean equals(final Object o) { if (o instanceof PaymentScheduleDO) { final PaymentScheduleDO other = (PaymentScheduleDO) o; if (ObjectUtils.equals(this.getNumber(), other.getNumber()) == false) { return false; } if (ObjectUtils.equals(this.getAuftragId(), other.getAuftragId()) == false) { return false; } return true; } return false; } @Override public int hashCode() { final HashCodeBuilder hcb = new HashCodeBuilder(); hcb.append(getNumber()); if (getAuftrag() != null) { hcb.append(getAuftrag().getId()); } return hcb.toHashCode(); } @Transient public boolean isEmpty() { if (StringUtils.isBlank(comment) == false) { return false; } if (amount != null && amount.compareTo(BigDecimal.ZERO) != 0) { return false; } return (scheduleDate == null); } /** * @see org.projectforge.core.ShortDisplayNameCapable#getShortDisplayName() */ @Transient public String getShortDisplayName() { return getAuftragId() == null ? Short.toString(number) : getAuftragId().toString() + ":" + Short.toString(number); } }