Files
firefly-iii/app/lib/FireflyIII/Shared/Toolkit/Reminders.php

101 lines
3.4 KiB
PHP
Raw Normal View History

<?php
namespace FireflyIII\Shared\Toolkit;
2014-11-17 16:14:28 +01:00
use Carbon\Carbon;
2014-11-17 23:08:36 +01:00
use FireflyIII\Exception\FireflyException;
use Illuminate\Support\Collection;
/**
* Class Reminders
*
* @package FireflyIII\Shared\Toolkit
*/
2014-11-17 16:14:28 +01:00
class Reminders
{
2014-11-17 23:08:36 +01:00
/**
* @param \Reminder $reminder
*
* @return int
* @throws FireflyException
*/
2014-11-18 01:53:52 +01:00
public function amountForReminder(\Reminder $reminder)
{
2014-11-17 23:08:36 +01:00
2014-11-18 01:53:52 +01:00
switch (get_class($reminder->remindersable)) {
2014-11-17 23:08:36 +01:00
case 'Piggybank':
$start = new Carbon;
$end = !is_null($reminder->remindersable->targetdate) ? clone $reminder->remindersable->targetdate : new Carbon;
$reminders = 0;
while ($start <= $end) {
$reminders++;
2014-11-21 11:21:48 +01:00
$start = \DateKit::addPeriod($start, $reminder->remindersable->reminder, $reminder->remindersable->reminder_skip);
2014-11-17 23:08:36 +01:00
}
/*
* Now find amount yet to save.
*/
$repetition = $reminder->remindersable->currentRelevantRep();
$leftToSave = floatval($reminder->remindersable->targetamount) - floatval($repetition->currentamount);
2014-11-18 01:53:52 +01:00
$reminders = $reminders == 0 ? 1 : $reminders;
2014-11-17 23:08:36 +01:00
return $leftToSave / $reminders;
break;
default:
2014-11-18 01:53:52 +01:00
throw new FireflyException('Cannot handle class ' . get_class($reminder->remindersable) . ' in amountForReminder.');
2014-11-17 23:08:36 +01:00
break;
}
}
/**
*
*/
public function getReminders()
2014-11-17 16:14:28 +01:00
{
2014-11-18 01:53:52 +01:00
$reminders = \Auth::user()->reminders()
->where('active', 1)
->where('startdate', '<=', Carbon::now()->format('Y-m-d'))
->where('enddate', '>=', Carbon::now()->format('Y-m-d'))
->get();
2014-11-17 23:08:36 +01:00
return $reminders;
}
public function updateReminders()
{
2014-12-14 20:40:02 +01:00
/** @var Collection $set */
$set = \Piggybank::leftJoin('accounts', 'accounts.id', '=', 'piggybanks.account_id')
->where('accounts.user_id', \Auth::user()->id)
->whereNotNull('reminder')->get(['piggybanks.*']);
2014-11-24 17:01:37 +01:00
$today = Carbon::now();
/** @var \Piggybank $piggybank */
2014-12-14 20:40:02 +01:00
foreach ($set as $piggyBank) {
/** @var \PiggybankRepetition $repetition */
2014-12-14 20:40:02 +01:00
$repetition = $piggyBank->currentRelevantRep();
$start = \DateKit::startOfPeriod($today, $piggyBank->reminder);
2014-11-24 17:01:37 +01:00
if ($repetition->targetdate && $repetition->targetdate <= $today) {
// break when no longer relevant:
continue;
}
2014-12-14 20:40:02 +01:00
$end = \DateKit::endOfPeriod(clone $start, $piggyBank->reminder);
// should have a reminder for this period:
2014-12-01 06:09:27 +01:00
/** @var Collection $reminders */
2014-12-14 20:40:02 +01:00
$reminders = $piggyBank->reminders()->dateIs($start, $end)->get();
if ($reminders->count() == 0) {
// create new!
$reminder = new \Reminder;
$reminder->startdate = $start;
$reminder->enddate = $end;
$reminder->active = 1;
2014-12-14 20:40:02 +01:00
$reminder->user()->associate(\Auth::getUser());
$reminder->remindersable_id = $piggyBank->id;
2014-12-01 06:09:27 +01:00
$reminder->remindersable_type = 'Piggybank';
$reminder->save();
}
}
}
}