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
|
|
|
/**
|
|
|
|
* Get all of the owning recurrable models.
|
|
|
|
*/
|
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
|
|
|
}
|