mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-12 15:35:15 +00:00
Optimizes some of the reminder routines; still have to test future repetitions although it should work fine.
This commit is contained in:
@@ -8,37 +8,6 @@ class PiggybankReminder extends Reminder
|
||||
{
|
||||
protected $isSubclass = true;
|
||||
|
||||
|
||||
public function amountToSave()
|
||||
{
|
||||
/** @var \Piggybank $piggyBank */
|
||||
$piggyBank = $this->piggybank;
|
||||
/** @var \PiggybankRepetition $repetition */
|
||||
$repetition = $piggyBank->currentRelevantRep();
|
||||
|
||||
$today = new Carbon;
|
||||
$diff = $today->diff($repetition->targetdate);
|
||||
$left = $piggyBank->targetamount - $repetition->currentamount;
|
||||
// to prevent devide by zero:
|
||||
$piggyBank->reminder_skip = $piggyBank->reminder_skip < 1 ? 1 : $piggyBank->reminder_skip;
|
||||
$toSave = 0;
|
||||
switch ($piggyBank->reminder) {
|
||||
case 'day':
|
||||
throw new \Firefly\Exception\FireflyException('No impl day reminder/ PiggyBankReminder Render');
|
||||
break;
|
||||
case 'week':
|
||||
throw new \Firefly\Exception\FireflyException('No impl week reminder/ PiggyBankReminder Render');
|
||||
break;
|
||||
case 'month':
|
||||
$toSave = $left / ($diff->m / $piggyBank->reminder_skip);
|
||||
break;
|
||||
case 'year':
|
||||
throw new \Firefly\Exception\FireflyException('No impl year reminder/ PiggyBankReminder Render');
|
||||
break;
|
||||
}
|
||||
return floatval($toSave);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
* @throws Firefly\Exception\FireflyException
|
||||
@@ -60,4 +29,51 @@ class PiggybankReminder extends Reminder
|
||||
return $fullText;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return float
|
||||
* @throws Firefly\Exception\FireflyException
|
||||
*/
|
||||
public function amountToSave()
|
||||
{
|
||||
/** @var \Piggybank $piggyBank */
|
||||
$piggyBank = $this->piggybank;
|
||||
/** @var \PiggybankRepetition $repetition */
|
||||
$repetition = $piggyBank->currentRelevantRep();
|
||||
|
||||
// if the target date of the repetition is zero, we use the created_at date of the repetition
|
||||
// and add two years; it's the same routine used elsewhere.
|
||||
if (is_null($repetition->targetdate)) {
|
||||
$targetdate = clone $repetition->created_at;
|
||||
$targetdate->addYears(2);
|
||||
} else {
|
||||
$targetdate = $repetition->targetdate;
|
||||
}
|
||||
|
||||
|
||||
$today = new Carbon;
|
||||
$diff = $today->diff($targetdate);
|
||||
$left = $piggyBank->targetamount - $repetition->currentamount;
|
||||
// to prevent devide by zero:
|
||||
$piggyBank->reminder_skip = $piggyBank->reminder_skip < 1 ? 1 : $piggyBank->reminder_skip;
|
||||
$toSave = 0;
|
||||
switch ($piggyBank->reminder) {
|
||||
case 'day':
|
||||
throw new \Firefly\Exception\FireflyException('No impl day reminder/ PiggyBankReminder Render');
|
||||
break;
|
||||
case 'week':
|
||||
$weeks = ceil($diff->days / 7);
|
||||
$toSave = $left / ($weeks / $piggyBank->reminder_skip);
|
||||
break;
|
||||
case 'month':
|
||||
$toSave = $left / ($diff->m / $piggyBank->reminder_skip);
|
||||
break;
|
||||
case 'year':
|
||||
throw new \Firefly\Exception\FireflyException('No impl year reminder/ PiggyBankReminder Render');
|
||||
break;
|
||||
}
|
||||
|
||||
return floatval($toSave);
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user