/* * Copyright (c) 2015 Ngewi Fet <ngewif@gmail.com> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.gnucash.android.model; import android.os.Parcel; import android.os.Parcelable; import java.math.BigDecimal; /** * Budget amounts for the different accounts. * The {@link Money} amounts are absolute values * @see Budget */ public class BudgetAmount extends BaseModel implements Parcelable { private String mBudgetUID; private String mAccountUID; /** * Period number for this budget amount * A value of -1 indicates that this budget amount applies to all periods */ private long mPeriodNum; private Money mAmount; /** * Create a new budget amount * @param budgetUID GUID of the budget * @param accountUID GUID of the account */ public BudgetAmount(String budgetUID, String accountUID){ this.mBudgetUID = budgetUID; this.mAccountUID = accountUID; } /** * Creates a new budget amount with the absolute value of {@code amount} * @param amount Money amount of the budget * @param accountUID GUID of the account */ public BudgetAmount(Money amount, String accountUID){ this.mAmount = amount.abs(); this.mAccountUID = accountUID; } public String getBudgetUID() { return mBudgetUID; } public void setBudgetUID(String budgetUID) { this.mBudgetUID = budgetUID; } public String getAccountUID() { return mAccountUID; } public void setAccountUID(String accountUID) { this.mAccountUID = accountUID; } /** * Returns the period number of this budget amount * <p>The period is zero-based index, and a value of -1 indicates that this budget amount is applicable to all budgeting periods</p> * @return Period number */ public long getPeriodNum() { return mPeriodNum; } /** * Set the period number for this budget amount * <p>A value of -1 indicates that this BudgetAmount is for all periods</p> * @param periodNum Zero-based period number of the budget amount */ public void setPeriodNum(long periodNum) { this.mPeriodNum = periodNum; } /** * Returns the Money amount of this budget amount * @return Money amount */ public Money getAmount() { return mAmount; } /** * Sets the amount for the budget * <p>The absolute value of the amount is used</p> * @param amount Money amount */ public void setAmount(Money amount) { this.mAmount = amount.abs(); } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(getUID()); dest.writeString(mBudgetUID); dest.writeString(mAccountUID); dest.writeString(mAmount.toPlainString()); dest.writeLong(mPeriodNum); } public static final Parcelable.Creator<BudgetAmount> CREATOR = new Parcelable.Creator<BudgetAmount>(){ @Override public BudgetAmount createFromParcel(Parcel source) { return new BudgetAmount(source); } @Override public BudgetAmount[] newArray(int size) { return new BudgetAmount[size]; } }; /** * Private constructor for creating new BudgetAmounts from a Parcel * @param source Parcel */ private BudgetAmount(Parcel source){ setUID(source.readString()); mBudgetUID = source.readString(); mAccountUID = source.readString(); mAmount = new Money(new BigDecimal(source.readString()), Commodity.DEFAULT_COMMODITY); mPeriodNum = source.readLong(); } }