/** * @param Event[] $events * @param User $user * @param $manual_spent * @param $goal * @return float */ protected function processDailyBudget($events, $user, $manual_spent, $goal) { $yesterday = clone $this->goalr->current_date; $yesterday->modify('-1 day'); $tomorrow = clone $this->goalr->current_date; $tomorrow->modify('+1 day'); $forecast_amount_today = $this->purchase_service->getForecastAmountByPeriod($this->goalr->current_date, $this->goalr->current_date, $user); $spent = $this->purchase_service->getAmountByPeriod($goal->date_start, $yesterday, $user) + $this->purchase_service->getAmountByPeriod($tomorrow, $goal->date_end, $user) + $forecast_amount_today; if ($manual_spent !== null) { $spent += $manual_spent; } $spent_today = $this->purchase_service->getAmountByPeriod($this->goalr->current_date, $this->goalr->current_date, $user) - $forecast_amount_today; $daily_budget = $this->goalr->getDailyBudget($goal, $spent, $events); return $daily_budget - $spent_today; }
public function testGetAmountByPeriod() { $purchase = new \shina\controlmybudget\Purchase\Purchase(); $purchase->date = new DateTime('2014-01-15'); $purchase->place = 'Zona Sul'; $purchase->amount = 2.1; $this->purchase_service->save($purchase, $this->user); $purchase = new \shina\controlmybudget\Purchase\Purchase(); $purchase->date = new DateTime('2013-12-25'); $purchase->place = 'Natalandia'; $purchase->amount = 300; $this->purchase_service->save($purchase, $this->user); $purchase = new \shina\controlmybudget\Purchase\Purchase(); $purchase->date = new DateTime('2014-01-20'); $purchase->place = 'Casa do carnaval'; $purchase->amount = 54.7; $this->purchase_service->save($purchase, $this->user); $purchase = new \shina\controlmybudget\Purchase\Purchase(); $purchase->date = new DateTime('2014-01-21'); $purchase->place = 'Bigbi'; $purchase->amount = 11.0; $this->purchase_service->save($purchase, $this->user); $this->assertEquals(67.8, $this->purchase_service->getAmountByPeriod(new DateTime('2014-01-01'), new DateTime('2014-01-31'), $this->user)); }