/**
  * @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));
 }