akaunting/app/Models/Common/Recurring.php

59 lines
1.3 KiB
PHP
Raw Normal View History

2018-04-26 02:17:55 +03:00
<?php
namespace App\Models\Common;
use App\Models\Model;
2018-04-28 11:56:11 +03:00
use DateTime;
use DateTimeZone;
use Recurr\Rule;
use Recurr\Transformer\ArrayTransformer;
use Recurr\Transformer\ArrayTransformerConfig;
2018-04-26 02:17:55 +03:00
class Recurring extends Model
{
2018-04-27 17:42:45 +03:00
protected $table = 'recurring';
2018-04-26 18:40:04 +03:00
/**
* Attributes that should be mass-assignable.
*
* @var array
*/
2018-04-27 17:42:45 +03:00
protected $fillable = ['company_id', 'recurable_id', 'recurable_type', 'frequency', 'interval', 'started_at', 'count'];
2018-04-26 18:40:04 +03:00
2018-04-26 02:17:55 +03:00
/**
2018-05-01 19:00:33 +03:00
* Get all of the owning recurable models.
2018-04-26 02:17:55 +03:00
*/
2018-04-27 17:42:45 +03:00
public function recurable()
2018-04-26 02:17:55 +03:00
{
return $this->morphTo();
}
2018-04-28 11:56:11 +03:00
public function schedule()
{
$config = new ArrayTransformerConfig();
$config->enableLastDayOfMonthFix();
$transformer = new ArrayTransformer();
$transformer->setConfig($config);
return $transformer->transform($this->rule());
}
public function rule()
{
// 0 means infinite
$count = ($this->count == 0) ? 999 : $this->count;
$rule = (new Rule())
->setStartDate(new DateTime($this->started_at, new DateTimeZone(setting('general.timezone'))))
->setTimezone(setting('general.timezone'))
->setFreq(strtoupper($this->frequency))
->setInterval($this->interval)
->setCount($count);
return $rule;
}
2018-04-26 02:17:55 +03:00
}