/* * MoneyBalance - Android-based calculator for tracking and balancing expenses * Copyright (C) 2012 Ingo van Lil <inguin@gmx.de> * * 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 ivl.android.moneybalance.data; import java.util.ArrayList; import java.util.Calendar; import java.util.List; public class Calculation extends DataObject { private String title; private String mainCurrencyCode; private List<Currency> currencies = new ArrayList<>(); private List<Person> persons = new ArrayList<>(); private List<Expense> expenses = new ArrayList<>(); private static final long MILLIS_PER_DAY = 24 * 3600 * 1000; public Calculation(String title, String mainCurrencyCode) { this.title = title; setMainCurrencyCode(mainCurrencyCode); } public String getTitle() { return title; } public String getMainCurrencyCode() { return mainCurrencyCode; } public void setMainCurrencyCode(String mainCurrencyCode) { Currency currency = null; for (Currency c : currencies) if (c.getCurrencyCode().equals(mainCurrencyCode)) currency = c; if (currency != null) { currency.setExchangeRate(1, 1); } else { currency = new Currency(getId()); currency.setCurrencyCode(mainCurrencyCode); currencies.add(currency); } this.mainCurrencyCode = mainCurrencyCode; } public Currency getMainCurrency() { Currency currency = currencies.get(0); for (Currency c : currencies) if (c.getCurrencyCode().equals(mainCurrencyCode)) currency = c; return currency; } public List<Currency> getCurrencies() { return currencies; } public void setCurrencies(List<Currency> currencies) { this.currencies = currencies; } public Currency getCurrencyById(long currencyId) { for (Currency currency : currencies) if (currency.getId() == currencyId) return currency; return null; } public List<Person> getPersons() { return persons; } public void setPersons(List<Person> persons) { this.persons = persons; } public Person getPersonById(long personId) { for (Person person : persons) if (person.getId() == personId) return person; return null; } public List<Expense> getExpenses() { return expenses; } public void setExpenses(List<Expense> expenses) { this.expenses = expenses; } public double getExpenseTotal() { double total = 0; for (Expense expense : expenses) { Currency currency = expense.getCurrency(); total += currency.exchangeAmount(expense.getAmount()); } return total; } public Calendar getFirstDate() { Calendar date = null; for (Expense expense : expenses) if (date == null || expense.getDate().compareTo(date) < 0) date = expense.getDate(); return date; } public Calendar getLastDate() { Calendar date = null; for (Expense expense : expenses) if (date == null || expense.getDate().compareTo(date) > 0) date = expense.getDate(); return date; } public long getDuration() { Calendar first = getFirstDate(); Calendar last = getLastDate(); if (first == null || last == null) return 0; return (last.getTimeInMillis() - first.getTimeInMillis()) / MILLIS_PER_DAY + 1; } @Override public String toString() { return getTitle(); } }