mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-12 15:35:15 +00:00
Implemented a proper way of generating reminders (we hope).
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
namespace FireflyIII\Shared\Toolkit;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
/**
|
||||
* Class Reminders
|
||||
@@ -19,35 +20,24 @@ class Reminders
|
||||
public function getReminders()
|
||||
{
|
||||
return [];
|
||||
// $reminders = \Auth::user()->reminders()->where('active', true)->get();
|
||||
// $return = [];
|
||||
// /** @var \Reminder $reminder */
|
||||
// foreach ($reminders as $reminder) {
|
||||
// $set = ['id' => $reminder->id];
|
||||
// switch ($reminder->data->type) {
|
||||
// case 'Test':
|
||||
// case 'Piggybank':
|
||||
// $set['title'] = $reminder->title;
|
||||
// $set['icon'] = $reminder->data->icon;
|
||||
// $set['text'] = mf(floatval($reminder->data->amount));
|
||||
// break;
|
||||
//
|
||||
// }
|
||||
// $return[] = $set;
|
||||
// }
|
||||
//
|
||||
// return $return;
|
||||
}
|
||||
|
||||
public function updateReminders()
|
||||
{
|
||||
// $today = Carbon::now()->format('Y-m-d');
|
||||
// $reminders = \Auth::user()->reminders()->where('startdate', '<=', $today)->where('enddate', '>=', $today)->where('active', '=', 1)->get();
|
||||
//
|
||||
// /*
|
||||
// * Find all piggy banks in the current set of reminders.
|
||||
// */
|
||||
// $this->updatePiggyBankReminders();
|
||||
// $reminders = \Auth::user()->reminders()->where('active', true)->get();
|
||||
// $return = [];
|
||||
// /** @var \Reminder $reminder */
|
||||
// foreach ($reminders as $reminder) {
|
||||
// $set = ['id' => $reminder->id];
|
||||
// switch ($reminder->data->type) {
|
||||
// case 'Test':
|
||||
// case 'Piggybank':
|
||||
// $set['title'] = $reminder->title;
|
||||
// $set['icon'] = $reminder->data->icon;
|
||||
// $set['text'] = mf(floatval($reminder->data->amount));
|
||||
// break;
|
||||
//
|
||||
// }
|
||||
// $return[] = $set;
|
||||
// }
|
||||
//
|
||||
// return $return;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -55,61 +45,114 @@ class Reminders
|
||||
*/
|
||||
public function updatePiggyBankReminders()
|
||||
{
|
||||
// $piggyBanks = \Auth::user()->piggybanks()->where('targetdate', '>=', Carbon::now()->format('Y-m-d'))->whereNotNull('reminder')->where('remind_me', 1)
|
||||
// ->get();
|
||||
//
|
||||
// /** @var \FireflyIII\Shared\Toolkit\Date $dateKit */
|
||||
// $dateKit = \App::make('FireflyIII\Shared\Toolkit\Date');
|
||||
//
|
||||
// $today = Carbon::now();
|
||||
//
|
||||
//
|
||||
// /** @var \Piggybank $piggyBank */
|
||||
// foreach ($piggyBanks as $piggyBank) {
|
||||
// /*
|
||||
// * Loop from today until end?
|
||||
// */
|
||||
// $end = $piggyBank->targetdate;
|
||||
// $start = Carbon::now();
|
||||
//
|
||||
// /*
|
||||
// * Create a reminder for the current period:
|
||||
// */
|
||||
// /*
|
||||
// * * type: Piggybank, Test
|
||||
// * action_uri: where to go when the user wants to do this?
|
||||
// * text: full text to present to user
|
||||
// * amount: any relevant amount.
|
||||
// * model: id of relevant model.
|
||||
// */
|
||||
//
|
||||
// while ($start <= $end) {
|
||||
// $currentEnd = $dateKit->addPeriod(clone $start, $piggyBank->reminder, 0);
|
||||
//
|
||||
// $count = \Reminder::where('startdate',$start->format('Y-m-d'))->where('enddate',$currentEnd->format('Y-m-d'))->count();
|
||||
// if ($start >= $today && $start <= $today && $count == 0) {
|
||||
//
|
||||
//
|
||||
// $reminder = new \Reminder;
|
||||
// $reminder->active = 1;
|
||||
// $reminder->user()->associate(\Auth::user());
|
||||
// $reminder->startdate = clone $start;
|
||||
// $reminder->enddate = $currentEnd;
|
||||
// $reminder->title = 'Add money to "'.e($piggyBank->name).'"';
|
||||
// $amount = $piggyBank->amountPerReminder();
|
||||
// $data = ['type' => 'Piggybank', 'icon' => 'fa-sort-amount-asc', 'text' =>
|
||||
// 'If you want to save up the full amount of "' . e($piggyBank->name) . '", add ' . mf($amount) . ' to account "' . e(
|
||||
// $piggyBank->account->name
|
||||
// ) . '". Don\'t forget to connect the transfer to this piggy bank!', 'amount' => $amount, 'model' => $piggyBank->id
|
||||
//
|
||||
// ];
|
||||
// $reminder->data = $data;
|
||||
// $reminder->save();
|
||||
// }
|
||||
// $start = $dateKit->addPeriod($start, $piggyBank->reminder, 0);
|
||||
// }
|
||||
//
|
||||
// }
|
||||
// $piggyBanks = \Auth::user()->piggybanks()->where('targetdate', '>=', Carbon::now()->format('Y-m-d'))->whereNotNull('reminder')->where('remind_me', 1)
|
||||
// ->get();
|
||||
//
|
||||
// /** @var \FireflyIII\Shared\Toolkit\Date $dateKit */
|
||||
// $dateKit = \App::make('FireflyIII\Shared\Toolkit\Date');
|
||||
//
|
||||
// $today = Carbon::now();
|
||||
//
|
||||
//
|
||||
// /** @var \Piggybank $piggyBank */
|
||||
// foreach ($piggyBanks as $piggyBank) {
|
||||
// /*
|
||||
// * Loop from today until end?
|
||||
// */
|
||||
// $end = $piggyBank->targetdate;
|
||||
// $start = Carbon::now();
|
||||
//
|
||||
// /*
|
||||
// * Create a reminder for the current period:
|
||||
// */
|
||||
// /*
|
||||
// * * type: Piggybank, Test
|
||||
// * action_uri: where to go when the user wants to do this?
|
||||
// * text: full text to present to user
|
||||
// * amount: any relevant amount.
|
||||
// * model: id of relevant model.
|
||||
// */
|
||||
//
|
||||
// while ($start <= $end) {
|
||||
// $currentEnd = $dateKit->addPeriod(clone $start, $piggyBank->reminder, 0);
|
||||
//
|
||||
// $count = \Reminder::where('startdate',$start->format('Y-m-d'))->where('enddate',$currentEnd->format('Y-m-d'))->count();
|
||||
// if ($start >= $today && $start <= $today && $count == 0) {
|
||||
//
|
||||
//
|
||||
// $reminder = new \Reminder;
|
||||
// $reminder->active = 1;
|
||||
// $reminder->user()->associate(\Auth::user());
|
||||
// $reminder->startdate = clone $start;
|
||||
// $reminder->enddate = $currentEnd;
|
||||
// $reminder->title = 'Add money to "'.e($piggyBank->name).'"';
|
||||
// $amount = $piggyBank->amountPerReminder();
|
||||
// $data = ['type' => 'Piggybank', 'icon' => 'fa-sort-amount-asc', 'text' =>
|
||||
// 'If you want to save up the full amount of "' . e($piggyBank->name) . '", add ' . mf($amount) . ' to account "' . e(
|
||||
// $piggyBank->account->name
|
||||
// ) . '". Don\'t forget to connect the transfer to this piggy bank!', 'amount' => $amount, 'model' => $piggyBank->id
|
||||
//
|
||||
// ];
|
||||
// $reminder->data = $data;
|
||||
// $reminder->save();
|
||||
// }
|
||||
// $start = $dateKit->addPeriod($start, $piggyBank->reminder, 0);
|
||||
// }
|
||||
//
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
public function updateReminders()
|
||||
{
|
||||
|
||||
/*
|
||||
* Reminder capable objects are (so far) only piggy banks.
|
||||
*/
|
||||
/** @var \FireflyIII\Database\Piggybank $repository */
|
||||
$repository = \App::make('FireflyIII\Database\Piggybank');
|
||||
|
||||
/** @var \FireflyIII\Shared\Toolkit\Date $dateKit */
|
||||
$dateKit = \App::make('FireflyIII\Shared\Toolkit\Date');
|
||||
|
||||
|
||||
/** @var Collection $piggybanks */
|
||||
$piggybanks = $repository->get();
|
||||
$set = $piggybanks->filter(
|
||||
function (\Piggybank $piggybank) {
|
||||
if (!is_null($piggybank->reminder)) {
|
||||
return $piggybank;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
/** @var \Piggybank $piggybank */
|
||||
foreach ($set as $piggybank) {
|
||||
/*
|
||||
* Try to find a reminder that is valid in the current [period]
|
||||
* aka between [start of period] and [end of period] as denoted
|
||||
* by the piggy's repeat_freq.
|
||||
*/
|
||||
/** @var \PiggybankRepetition $repetition */
|
||||
$repetition = $piggybank->currentRelevantRep();
|
||||
$start = $dateKit->startOfPeriod(Carbon::now(), $piggybank->reminder);
|
||||
if ($repetition->targetdate && $repetition->targetdate <= Carbon::now()) {
|
||||
// break when no longer relevant:
|
||||
continue;
|
||||
}
|
||||
$end = $dateKit->endOfPeriod(Carbon::now(), $piggybank->reminder);
|
||||
// should have a reminder for this period:
|
||||
/** @var \Collection $reminders */
|
||||
$reminders = $piggybank->reminders()->dateIs($start, $end)->get();
|
||||
if ($reminders->count() == 0) {
|
||||
// create new!
|
||||
$reminder = new \Reminder;
|
||||
$reminder->startdate = $start;
|
||||
$reminder->enddate = $end;
|
||||
$reminder->user()->associate($repository->getUser());
|
||||
$reminder->remindersable()->associate($piggybank);
|
||||
$reminder->save();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user