/*
* Copyright (C) 2012-2016 The Android Money Manager Ex Project Team
*
* This program 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; 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 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 com.money.manager.ex.domainmodel;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.text.TextUtils;
import com.money.manager.ex.Constants;
import com.money.manager.ex.core.TransactionTypes;
import com.money.manager.ex.database.ITransactionEntity;
import com.money.manager.ex.recurring.transactions.Recurrence;
import com.money.manager.ex.utils.MmxDate;
import com.money.manager.ex.utils.MmxDateTimeUtils;
import org.parceler.Parcel;
import java.util.Date;
import info.javaperformance.money.Money;
import info.javaperformance.money.MoneyFactory;
/**
* Recurring Transaction
*/
@Parcel
public class RecurringTransaction
extends EntityBase
implements ITransactionEntity {
public static final String BDID = "BDID";
public static final String REPEATS = "REPEATS";
/**
* Payment Date
*/
public static final String NEXTOCCURRENCEDATE = "NEXTOCCURRENCEDATE";
/**
* Repetitions / Payments Left
*/
public static final String NUMOCCURRENCES = "NUMOCCURRENCES";
public static RecurringTransaction createInstance() {
RecurringTransaction tx = new RecurringTransaction();
tx.setAmount(MoneyFactory.fromDouble(0));
tx.setAmountTo(MoneyFactory.fromDouble(0));
return tx;
}
public RecurringTransaction() {
super();
setPayeeId(Constants.NOT_SET);
setCategoryId(Constants.NOT_SET);
setSubcategoryId(Constants.NOT_SET);
setRecurrence(Recurrence.ONCE);
setTransactionType(TransactionTypes.Withdrawal);
}
@Override
public void loadFromCursor(Cursor c) {
super.loadFromCursor(c);
// Reload all money values.
DatabaseUtils.cursorDoubleToContentValuesIfPresent(c, this.contentValues, ITransactionEntity.TRANSAMOUNT);
DatabaseUtils.cursorDoubleToContentValuesIfPresent(c, this.contentValues, ITransactionEntity.TOTRANSAMOUNT);
}
public Integer getId() {
return getInt(BDID);
}
public void setId(Integer id) {
setInt(BDID, id);
}
public boolean hasId() {
return getId() != null && getId() != Constants.NOT_SET;
}
public Integer getAccountId() {
return getInt(ITransactionEntity.ACCOUNTID);
}
public void setAccountId(Integer value) {
setInt(ITransactionEntity.ACCOUNTID, value);
}
@Override
public Integer getAccountToId() {
return getInt(ITransactionEntity.TOACCOUNTID);
}
@Override
public void setAccountToId(Integer value) {
setInt(ITransactionEntity.TOACCOUNTID, value);
}
public boolean hasAccountTo() {
return getAccountToId() != null && getAccountToId() != Constants.NOT_SET;
}
public Money getAmount() {
Double amount = getDouble(ITransactionEntity.TRANSAMOUNT);
if (amount == null) {
amount = 0D;
}
Money result = MoneyFactory.fromDouble(amount);
return result;
}
public void setAmount(Money value) {
setMoney(ITransactionEntity.TRANSAMOUNT, value);
}
public Money getAmountTo() {
Double amount = getDouble(ITransactionEntity.TOTRANSAMOUNT);
if (amount == null) {
amount = 0D;
}
Money result = MoneyFactory.fromDouble(amount);
return result;
}
public void setAmountTo(Money value) {
setMoney(ITransactionEntity.TOTRANSAMOUNT, value);
}
@Override
public Integer getCategoryId() {
return getInt(ITransactionEntity.CATEGID);
}
@Override
public void setCategoryId(Integer value) {
setInt(ITransactionEntity.CATEGID, value);
}
public boolean hasCategory() {
return getCategoryId() != null && getCategoryId() != Constants.NOT_SET;
}
public String getDueDateString() {
return getString(TRANSDATE);
}
public Date getDueDate() {
String dateString = getDueDateString();
if (TextUtils.isEmpty(dateString)) {
return null;
}
return new MmxDate(dateString).toDate();
}
public void setDueDate(Date value) {
setDate(TRANSDATE, value);
}
/**
* For recurring transaction, the date is Due Date.
* @return Due date of the transaction.
*/
public Date getDate() {
return getDueDate();
}
public String getDateString() {
return getDueDateString();
}
/**
* Due Date
* @param value Date to set
*/
public void setDate(Date value) {
setDueDate(value);
}
// public DateTime getPaymentDate() {
// String dateString = getString(NEXTOCCURRENCEDATE);
// if (TextUtils.isEmpty(dateString)) {
// return null;
// }
//
// return MmxJodaDateTimeUtils.from(dateString);
// }
public Date getPaymentDate() {
String dateString = getString(NEXTOCCURRENCEDATE);
if (TextUtils.isEmpty(dateString)) {
return null;
}
return new MmxDate(dateString).toDate();
}
public String getPaymentDateString() {
return getString(NEXTOCCURRENCEDATE);
}
public void setPaymentDate(String value) {
setString(NEXTOCCURRENCEDATE, value);
}
public void setPaymentDate(Date value){
setDate(NEXTOCCURRENCEDATE, value);
}
public String getNotes() {
return getString(ITransactionEntity.NOTES);
}
public void setNotes(String value) {
setString(ITransactionEntity.NOTES, value);
}
public Integer getPaymentsLeft() {
return getInt(NUMOCCURRENCES);
}
public void setPaymentsLeft(Integer value) {
setInt(NUMOCCURRENCES, value);
}
public Integer getPayeeId() {
return getInt(ITransactionEntity.PAYEEID);
}
public void setPayeeId(Integer value) {
setInt(ITransactionEntity.PAYEEID, value);
}
public boolean hasPayee() {
return getPayeeId() != null && getPayeeId() != Constants.NOT_SET;
}
/**
* The recurrence type
* @return the recurrence type
*/
public Integer getRecurrenceInt() {
Integer result = getInt(REPEATS);
if (result == null) {
setRecurrence(Recurrence.ONCE);
return Recurrence.ONCE.getValue();
} else {
return result;
}
}
public void setRecurrence(Integer value) {
setInt(REPEATS, value);
}
public Recurrence getRecurrence() {
int recurrence = getRecurrenceInt();
return Recurrence.valueOf(recurrence);
}
public void setRecurrence(Recurrence value) {
int recurrence = value.getValue();
setRecurrence(recurrence);
}
public String getStatus() {
return getString(ITransactionEntity.STATUS);
}
public void setStatus(String value) {
setString(ITransactionEntity.STATUS, value);
}
public Integer getSubcategoryId() {
return getInt(ITransactionEntity.SUBCATEGID);
}
public void setSubcategoryId(Integer value) {
setInt(ITransactionEntity.SUBCATEGID, value);
}
public Integer getToAccountId() {
return getInt(ITransactionEntity.TOACCOUNTID);
}
public String getTransactionCode() {
return getString(ITransactionEntity.TRANSCODE);
}
public String getTransactionNumber() {
return getString(ITransactionEntity.TRANSACTIONNUMBER);
}
public void setTransactionNumber(String value) {
setString(ITransactionEntity.TRANSACTIONNUMBER, value);
}
public TransactionTypes getTransactionType() {
String code = getTransactionCode();
return TransactionTypes.valueOf(code);
}
public void setTransactionType(TransactionTypes value) {
setString(ITransactionEntity.TRANSCODE, value.name());
}
}