. */ declare(strict_types=1); namespace FireflyIII\Models; use Carbon\Carbon; use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * Class PiggyBankRepetition. * * @property string $currentamount * @property Carbon $startdate * @property Carbon $targetdate */ class PiggyBankRepetition extends Model { /** * The attributes that should be casted to native types. * * @var array */ protected $casts = [ 'created_at' => 'datetime', 'updated_at' => 'datetime', 'startdate' => 'date', 'targetdate' => 'date', ]; /** @var array Fields that can be filled */ protected $fillable = ['piggy_bank_id', 'startdate', 'targetdate', 'currentamount']; /** * @codeCoverageIgnore * @return BelongsTo */ public function piggyBank(): BelongsTo { return $this->belongsTo(PiggyBank::class); } /** * @codeCoverageIgnore * * @param EloquentBuilder $query * @param Carbon $start * @param Carbon $target * * @return EloquentBuilder */ public function scopeOnDates(EloquentBuilder $query, Carbon $start, Carbon $target): EloquentBuilder { return $query->where('startdate', $start->format('Y-m-d'))->where('targetdate', $target->format('Y-m-d')); } /** * @codeCoverageIgnore * * @param EloquentBuilder $query * @param Carbon $date * * @return mixed */ public function scopeRelevantOnDate(EloquentBuilder $query, Carbon $date) { return $query->where( function (EloquentBuilder $q) use ($date) { $q->where('startdate', '<=', $date->format('Y-m-d 00:00:00')); $q->orWhereNull('startdate'); } ) ->where( function (EloquentBuilder $q) use ($date) { $q->where('targetdate', '>=', $date->format('Y-m-d 00:00:00')); $q->orWhereNull('targetdate'); } ); } /** * @codeCoverageIgnore * * @param $value */ public function setCurrentamountAttribute($value): void { $this->attributes['currentamount'] = (string)$value; } }