firefly-iii/app/models/RecurringTransaction.php

101 lines
3.7 KiB
PHP
Raw Normal View History

<?php
2014-08-09 06:21:24 -05:00
use Carbon\Carbon;
use LaravelBook\Ardent\Ardent;
/**
* RecurringTransaction
*
2014-11-12 15:37:44 -06:00
* @property integer $id
* @property \Carbon\Carbon $created_at
* @property \Carbon\Carbon $updated_at
2014-11-12 15:37:44 -06:00
* @property integer $user_id
* @property string $name
* @property string $match
* @property float $amount_max
* @property float $amount_min
* @property \Carbon\Carbon $date
2014-11-12 15:37:44 -06:00
* @property boolean $active
* @property boolean $automatch
* @property string $repeat_freq
* @property integer $skip
* @property-read \User $user
* @method static \Illuminate\Database\Query\Builder|\RecurringTransaction whereId($value)
* @method static \Illuminate\Database\Query\Builder|\RecurringTransaction whereCreatedAt($value)
* @method static \Illuminate\Database\Query\Builder|\RecurringTransaction whereUpdatedAt($value)
* @method static \Illuminate\Database\Query\Builder|\RecurringTransaction whereUserId($value)
* @method static \Illuminate\Database\Query\Builder|\RecurringTransaction whereName($value)
* @method static \Illuminate\Database\Query\Builder|\RecurringTransaction whereMatch($value)
* @method static \Illuminate\Database\Query\Builder|\RecurringTransaction whereAmountMax($value)
* @method static \Illuminate\Database\Query\Builder|\RecurringTransaction whereAmountMin($value)
* @method static \Illuminate\Database\Query\Builder|\RecurringTransaction whereDate($value)
* @method static \Illuminate\Database\Query\Builder|\RecurringTransaction whereActive($value)
* @method static \Illuminate\Database\Query\Builder|\RecurringTransaction whereAutomatch($value)
* @method static \Illuminate\Database\Query\Builder|\RecurringTransaction whereRepeatFreq($value)
* @method static \Illuminate\Database\Query\Builder|\RecurringTransaction whereSkip($value)
*/
class RecurringTransaction extends Ardent
{
public static $rules
2014-11-12 15:37:44 -06:00
= ['user_id' => 'required|exists:users,id', 'name' => 'required|between:1,255', 'match' => 'required', 'amount_max' => 'required|between:0,65536',
'amount_min' => 'required|between:0,65536', 'date' => 'required|date', 'active' => 'required|between:0,1', 'automatch' => 'required|between:0,1',
'repeat_freq' => 'required|in:daily,weekly,monthly,quarterly,half-year,yearly', 'skip' => 'required|between:0,31',];
2014-11-12 15:37:44 -06:00
protected $fillable = ['user_id', 'name', 'match', 'amount_min', 'amount_max', 'date', 'repeat_freq', 'skip', 'active', 'automatch'];
2014-08-10 11:22:42 -05:00
/**
* @return array
*/
public function getDates()
{
return ['created_at', 'updated_at', 'date'];
}
2014-08-28 00:53:54 -05:00
2014-08-10 11:22:42 -05:00
/**
* @return Carbon
*/
public function next()
{
2014-08-28 00:53:54 -05:00
$today = new Carbon;
$start = clone $this->date;
2014-11-12 15:37:44 -06:00
$skip = $this->skip == 0 ? 1 : $this->skip;
2014-08-28 00:53:54 -05:00
if ($today < $start) {
return $start;
}
while ($start <= $this->date) {
switch ($this->repeat_freq) {
case 'daily':
$start->addDays($skip);
break;
case 'weekly':
$start->addWeeks($skip);
break;
case 'monthly':
$start->addMonths($skip);
break;
case 'quarterly':
$start->addMonths($skip * 3);
break;
case 'half-year':
$start->addMonths($skip * 6);
break;
case 'yearly':
2014-08-10 02:57:30 -05:00
$start->addYears($skip);
break;
}
}
return $start;
}
2014-08-10 11:22:42 -05:00
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function user()
{
return $this->belongsTo('User');
}
}