package budgetforce.control; import budgetforce.model.DatabaseManager; import static budgetforce.model.EPeriod.DAY; import static budgetforce.model.EPeriod.MONTH; import static budgetforce.model.EPeriod.ONCE; import static budgetforce.model.EPeriod.QUARTER; import static budgetforce.model.EPeriod.WEEK; import static budgetforce.model.EPeriod.YEAR; import java.sql.Timestamp; import java.util.ArrayList; /** * * @author Soi Fon */ public class Income { public Income(int personID) { modelIncome = DatabaseManager.getDatabaseManager().getIncomeByPersonID(personID); } public float MonthIncome(int year, int month) { float completteIncome = 0.0f; for (budgetforce.model.Income income : modelIncome) { Timestamp start = income.getStart(); Timestamp end = income.getEnd(); //period starts before and ends after this month if(DateHandle.Compare(start, year, month) == -1 && DateHandle.Compare(end, year, month) == 1) { switch(income.getPeriod()) { case DAY : completteIncome += income.getAmount() * DateHandle.GetDaysOfMonth(year, month); break; case WEEK : completteIncome += income.getAmount() * (DateHandle.GetDaysOfMonth(year, month) / 7);break; case MONTH : completteIncome += income.getAmount(); break; case QUARTER: completteIncome += income.getAmount() / 3; break; case YEAR : completteIncome += income.getAmount() / 12;break; } continue; } //Period ends this month if(DateHandle.Compare(start, year, month) == -1 && DateHandle.Compare(end, year, month) == 0) { float days = end.getDate() + 1; switch(income.getPeriod()) { case DAY : completteIncome += income.getAmount() * days; break; case WEEK : completteIncome += income.getAmount() * (days / 7);break; case MONTH : completteIncome += income.getAmount() * (days / DateHandle.GetDaysOfMonth(year, month));break; case QUARTER: completteIncome += (income.getAmount() / 3) * (days / DateHandle.GetDaysOfMonth(year, month));break; case YEAR : completteIncome += (income.getAmount() / 12) * (days / DateHandle.GetDaysOfMonth(year, month));break; } continue; } //Period starts this month if(DateHandle.Compare(start, year, month) == 0 && DateHandle.Compare(end, year, month) == 1) { float daysLeft = (DateHandle.GetDaysOfMonth(year, month) - start.getDate()) + 1; switch(income.getPeriod()) { case DAY : completteIncome += income.getAmount() * daysLeft; break; case WEEK : completteIncome += income.getAmount() * (daysLeft / 7);break; case MONTH : completteIncome += income.getAmount() * (daysLeft / DateHandle.GetDaysOfMonth(year, month));break; case QUARTER: completteIncome += (income.getAmount() / 3) * (daysLeft / DateHandle.GetDaysOfMonth(year, month));break; case YEAR : completteIncome += (income.getAmount() / 12) * (daysLeft / DateHandle.GetDaysOfMonth(year, month));break; } continue; } //Period starts and ends this month if(DateHandle.Compare(start, year, month) == 0 && DateHandle.Compare(end, year, month) == 0) { float days = end.getDate() - start.getDate() + 1; switch(income.getPeriod()) { case ONCE : completteIncome += income.getAmount(); break; case DAY : completteIncome += income.getAmount() * days; break; case WEEK : completteIncome += income.getAmount() * (days / 7);break; case MONTH : completteIncome += income.getAmount();break; //there should not be a month , quarter or year period with case QUARTER: completteIncome += income.getAmount();break; //a start and end date within a month anyway, so just the full amount will be case YEAR : completteIncome += income.getAmount();break; //added in this case } continue; } } return completteIncome; } private ArrayList<budgetforce.model.Income> modelIncome; }