/*
* Copyright (C) 2011 4th Line GmbH, Switzerland
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.fourthline.konto.shared.result;
import org.fourthline.konto.shared.DebitCreditHolder;
import org.fourthline.konto.shared.LedgerEntry;
import org.fourthline.konto.shared.MonetaryAmount;
import org.fourthline.konto.shared.entity.Account;
import org.fourthline.konto.shared.entity.MonetaryUnit;
import java.io.Serializable;
import java.util.Date;
/**
* @author Christian Bauer
*/
public class LedgerLine<LE extends LedgerEntry>
implements Serializable, DebitCreditHolder {
Account account;
LE ledgerEntry;
Date date;
String description;
Account fromToAccount;
MonetaryUnit unit;
MonetaryAmount debit;
MonetaryAmount credit;
MonetaryAmount balance;
public LedgerLine() {
}
public LedgerLine(Account account) {
this.account = account;
}
public LedgerLine(Account account, LE ledgerEntry) {
this.account = account;
this.ledgerEntry = ledgerEntry;
}
public Account getAccount() {
return account;
}
public void setAccount(Account account) {
this.account = account;
}
public LE getLedgerEntry() {
return ledgerEntry;
}
public void setLedgerEntry(LE ledgerEntry) {
this.ledgerEntry = ledgerEntry;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Account getFromToAccount() {
return fromToAccount;
}
public void setFromToAccount(Account fromToAccount) {
this.fromToAccount = fromToAccount;
}
@Override
public MonetaryUnit getMonetaryUnit() {
return unit;
}
@Override
public void setMonetaryUnit(MonetaryUnit unit) {
this.unit = unit;
}
@Override
public MonetaryAmount getDebit() {
return debit;
}
@Override
public void setDebit(MonetaryAmount debit) {
this.debit = debit;
}
@Override
public MonetaryAmount getCredit() {
return credit;
}
@Override
public void setCredit(MonetaryAmount credit) {
this.credit = credit;
}
public MonetaryAmount getBalance() {
return balance;
}
public String getBalanceString() {
if (getBalance().signum() == 0) {
return "-";
}
switch (getAccount().getType()) {
case Liability:
case Income:
return getBalance().negate().getReportString(false, false);
default:
return getBalance().getReportString(false, false);
}
}
public void setBalance(MonetaryAmount balance) {
this.balance = balance;
}
public MonetaryAmount updateBalance(MonetaryAmount currentBalance) {
currentBalance = currentBalance.subtract(getDebit());
currentBalance = currentBalance.add(getCredit());
setBalance(currentBalance);
return currentBalance;
}
public boolean isDateInFuture() {
return getDate() != null && getDate().getTime() > new Date().getTime();
}
@Override
public String toString() {
return getLedgerEntry()
+ " => " + getDate()
+ ", " + getDescription()
+ ", " + getFromToAccount()
+ ", " + getDebit()
+ ", " + getCredit()
+ ", " + getBalance();
}
}