'required|exists:accounts,id', 'transaction_journal_id' => 'required|exists:transaction_journals,id', 'description' => 'between:1,255', 'amount' => 'required|numeric', ]; use SoftDeletes, ValidatingTrait; /** * @param Builder $query * @param string $table * * @return bool */ public static function isJoined(Builder $query, string $table):bool { $joins = $query->getQuery()->joins; if (is_null($joins)) { return false; } foreach ($joins as $join) { if ($join->table === $table) { return true; } } return false; } /** * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function account() { return $this->belongsTo('FireflyIII\Models\Account'); } /** * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ public function budgets() { return $this->belongsToMany('FireflyIII\Models\Budget'); } /** * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ public function categories() { return $this->belongsToMany('FireflyIII\Models\Category'); } /** * @param $value * * @return float|int */ public function getAmountAttribute($value) { return $value; } /** * * @param Builder $query * @param Carbon $date */ public function scopeAfter(Builder $query, Carbon $date) { if (!self::isJoined($query, 'transaction_journals')) { $query->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id'); } $query->where('transaction_journals.date', '>=', $date->format('Y-m-d 00:00:00')); } /** * * @param Builder $query * @param Carbon $date * */ public function scopeBefore(Builder $query, Carbon $date) { if (!self::isJoined($query, 'transaction_journals')) { $query->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id'); } $query->where('transaction_journals.date', '<=', $date->format('Y-m-d 23:59:59')); } /** * * @param Builder $query * @param array $types */ public function scopeTransactionTypes(Builder $query, array $types) { if (!self::isJoined($query, 'transaction_journals')) { $query->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id'); } if (!self::isJoined($query, 'transaction_types')) { $query->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id'); } $query->whereIn('transaction_types.type', $types); } /** * @param $value */ public function setAmountAttribute($value) { $this->attributes['amount'] = strval(round($value, 2)); } /** * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function transactionJournal() { return $this->belongsTo('FireflyIII\Models\TransactionJournal'); } }