mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-09-05 12:12:18 +00:00
All code for reminders based on piggy banks. I hope.
This commit is contained in:
@@ -302,4 +302,26 @@ class Toolkit implements ToolkitInterface
|
||||
return $end;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function getReminders() {
|
||||
// get reminders, for menu, mumble mumble:
|
||||
$today = new Carbon;
|
||||
$reminders = \Auth::user()->reminders()->validOn($today)->get();
|
||||
|
||||
/** @var \Reminder $reminder */
|
||||
foreach($reminders as $index => $reminder) {
|
||||
if(\Session::has('dismissal-' . $reminder->id)) {
|
||||
$time = \Session::get('dismissal-' . $reminder->id);
|
||||
if($time >= $today) {
|
||||
unset($reminders[$index]);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
\Session::put('reminderCount',count($reminders));
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -23,4 +23,9 @@ interface ToolkitInterface
|
||||
*/
|
||||
public function getDateRangeDates();
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function getReminders();
|
||||
|
||||
}
|
@@ -136,7 +136,18 @@ class EloquentPiggybankRepository implements PiggybankRepositoryInterface
|
||||
$account = isset($data['account_id']) ? $accounts->find($data['account_id']) : null;
|
||||
|
||||
|
||||
|
||||
|
||||
$piggyBank = new \Piggybank($data);
|
||||
|
||||
if(!is_null($piggyBank->reminder) && is_null($piggyBank->startdate) && is_null($piggyBank->targetdate)) {
|
||||
|
||||
$piggyBank->errors()->add('reminder','Cannot create reminders without start ~ AND target date.');
|
||||
return $piggyBank;
|
||||
|
||||
}
|
||||
|
||||
|
||||
if($piggyBank->repeats && !isset($data['targetdate'])) {
|
||||
$piggyBank->errors()->add('targetdate','Target date is mandatory!');
|
||||
return $piggyBank;
|
||||
|
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
namespace Firefly\Storage\Reminder;
|
||||
|
||||
|
||||
use Carbon\Carbon;
|
||||
|
||||
/**
|
||||
* Class EloquentReminderRepository
|
||||
*
|
||||
* @package Firefly\Storage\Reminder
|
||||
*/
|
||||
class EloquentReminderRepository implements ReminderRepositoryInterface
|
||||
{
|
||||
/**
|
||||
* @param \Reminder $reminder
|
||||
*
|
||||
* @return mixed|void
|
||||
*/
|
||||
public function deactivate(\Reminder $reminder)
|
||||
{
|
||||
$reminder->active = 0;
|
||||
$reminder->save();
|
||||
|
||||
return $reminder;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $id
|
||||
*
|
||||
* @return mixed|void
|
||||
*/
|
||||
public function find($id)
|
||||
{
|
||||
return \Reminder::find($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function get()
|
||||
{
|
||||
$today = new Carbon;
|
||||
|
||||
return \Auth::user()->reminders()->validOn($today)->get();
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: sander
|
||||
* Date: 23/08/14
|
||||
* Time: 20:59
|
||||
*/
|
||||
|
||||
namespace Firefly\Storage\Reminder;
|
||||
|
||||
|
||||
/**
|
||||
* Interface ReminderRepositoryInterface
|
||||
*
|
||||
* @package Firefly\Storage\Reminder
|
||||
*/
|
||||
interface ReminderRepositoryInterface {
|
||||
|
||||
/**
|
||||
* @param \Reminder $reminder
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function deactivate(\Reminder $reminder);
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
*/
|
||||
public function get();
|
||||
|
||||
/**
|
||||
* @param $id
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function find($id);
|
||||
|
||||
}
|
@@ -36,6 +36,10 @@ class StorageServiceProvider extends ServiceProvider
|
||||
'Firefly\Storage\RecurringTransaction\EloquentRecurringTransactionRepository'
|
||||
);
|
||||
|
||||
$this->app->bind(
|
||||
'Firefly\Storage\Reminder\ReminderRepositoryInterface',
|
||||
'Firefly\Storage\Reminder\EloquentReminderRepository'
|
||||
);
|
||||
|
||||
$this->app->bind(
|
||||
'Firefly\Storage\Account\AccountRepositoryInterface',
|
||||
|
@@ -85,7 +85,7 @@ class EloquentLimitTrigger
|
||||
*/
|
||||
public function madeRepetition(\LimitRepetition $repetition)
|
||||
{
|
||||
\Log::info('TRIGGER: Created a limit repetition (#' . $repetition->id . ')');
|
||||
\Log::info('TRIGGER: Created a limit repetition (#' . $repetition->id . ')');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -109,8 +109,8 @@ class EloquentLimitTrigger
|
||||
//$events->listen('budgets.change', 'Firefly\Trigger\Limits\EloquentLimitTrigger@updateLimitRepetitions');
|
||||
$events->listen('limits.destroy', 'Firefly\Trigger\Limits\EloquentLimitTrigger@destroy');
|
||||
$events->listen('limits.store', 'Firefly\Trigger\Limits\EloquentLimitTrigger@store');
|
||||
$events->listen('limits.update', 'Firefly\Trigger\Limits\EloquentLimitTrigger@update');
|
||||
$events->listen('limits.check', 'Firefly\Trigger\Limits\EloquentLimitTrigger@checkRepeatingLimits');
|
||||
$events->listen('limits.update', 'Firefly\Trigger\Limits\EloquentLimitTrigger@update');
|
||||
$events->listen('limits.check', 'Firefly\Trigger\Limits\EloquentLimitTrigger@checkRepeatingLimits');
|
||||
$events->listen('limits.repetition', 'Firefly\Trigger\Limits\EloquentLimitTrigger@madeRepetition');
|
||||
//\Event::fire('limits.repetition', [$repetition]);
|
||||
|
||||
|
@@ -3,6 +3,7 @@
|
||||
namespace Firefly\Trigger\Piggybanks;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Events\Dispatcher;
|
||||
|
||||
/**
|
||||
@@ -116,8 +117,64 @@ class EloquentPiggybankTrigger
|
||||
*/
|
||||
public function madeRep(\PiggybankRepetition $rep)
|
||||
{
|
||||
// do something.
|
||||
\Log::info('TRIGGER: Created a piggybank repetition (#' . $rep->id . ')');
|
||||
// do something with reminders?
|
||||
$piggyBank = $rep->piggybank;
|
||||
if (is_null(($piggyBank->reminder))) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$current = clone $rep->startdate;
|
||||
$today = new Carbon;
|
||||
while ($current <= $rep->targetdate) {
|
||||
|
||||
// when do we start reminding?
|
||||
// X days before $current:
|
||||
$reminderStart = clone $current;
|
||||
switch ($piggyBank->reminder) {
|
||||
case 'day':
|
||||
$reminderStart->subDay();
|
||||
break;
|
||||
case 'week':
|
||||
$reminderStart->subDays(4);
|
||||
break;
|
||||
case 'month':
|
||||
$reminderStart->subDays(21);
|
||||
break;
|
||||
case 'year':
|
||||
$reminderStart->subMonths(9);
|
||||
break;
|
||||
}
|
||||
|
||||
if ($current >= $today) {
|
||||
$reminder = new \PiggybankReminder;
|
||||
$reminder->piggybank()->associate($piggyBank);
|
||||
$reminder->user()->associate(\Auth::user());
|
||||
$reminder->startdate = $reminderStart;
|
||||
$reminder->enddate = $current;
|
||||
try {
|
||||
$reminder->save();
|
||||
|
||||
} catch (QueryException $e) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
switch ($piggyBank->reminder) {
|
||||
case 'day':
|
||||
$current->addDays($piggyBank->reminder_skip);
|
||||
break;
|
||||
case 'week':
|
||||
$current->addWeeks($piggyBank->reminder_skip);
|
||||
break;
|
||||
case 'month':
|
||||
$current->addMonths($piggyBank->reminder_skip);
|
||||
break;
|
||||
case 'year':
|
||||
$current->addYears($piggyBank->reminder_skip);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -166,14 +223,6 @@ class EloquentPiggybankTrigger
|
||||
$piggyBank->createRepetition($piggyBank->startdate, $piggyBank->targetdate);
|
||||
|
||||
return true;
|
||||
$rep = new \PiggybankRepetition;
|
||||
$rep->piggybank()->associate($piggyBank);
|
||||
$rep->targetdate = $piggyBank->targetdate;
|
||||
$rep->startdate = $piggyBank->startdate;
|
||||
$rep->currentamount = 0;
|
||||
$rep->save();
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user