From a0a36c5137537245552f6fed6b707c7cf11fc702 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 30 Aug 2014 14:27:05 +0200 Subject: [PATCH] Ran model helper, added some new features. --- .../Firefly/Validation/FireflyValidator.php | 22 ++++ .../Validation/ValidationServiceProvider.php | 22 ++++ app/models/PiggybankReminder.php | 24 ++--- app/models/RecurringTransactionReminder.php | 24 ++--- app/models/Reminder.php | 24 ++--- app/models/Transaction.php | 84 ++++++++++++--- app/models/TransactionJournal.php | 102 ++++++++++++++++-- app/tests/controllers/ChartControllerTest.php | 2 +- 8 files changed, 248 insertions(+), 56 deletions(-) create mode 100644 app/lib/Firefly/Validation/FireflyValidator.php create mode 100644 app/lib/Firefly/Validation/ValidationServiceProvider.php diff --git a/app/lib/Firefly/Validation/FireflyValidator.php b/app/lib/Firefly/Validation/FireflyValidator.php new file mode 100644 index 0000000000..479ac8c13a --- /dev/null +++ b/app/lib/Firefly/Validation/FireflyValidator.php @@ -0,0 +1,22 @@ +app->validator->resolver( + function ($translator, $data, $rules, $messages) { + return new FireflyValidator($translator, $data, $rules, $messages); + } + ); + } + + public function register() + { + } +} \ No newline at end of file diff --git a/app/models/PiggybankReminder.php b/app/models/PiggybankReminder.php index f72918ae0a..92d6604480 100644 --- a/app/models/PiggybankReminder.php +++ b/app/models/PiggybankReminder.php @@ -17,18 +17,18 @@ use Carbon\Carbon; * @property-read \Piggybank $piggybank * @property-read \RecurringTransaction $recurringTransaction * @property-read \User $user - * @method static \Illuminate\Database\Query\Builder|\PiggybankReminder whereId($value) - * @method static \Illuminate\Database\Query\Builder|\PiggybankReminder whereCreatedAt($value) - * @method static \Illuminate\Database\Query\Builder|\PiggybankReminder whereUpdatedAt($value) - * @method static \Illuminate\Database\Query\Builder|\PiggybankReminder whereClass($value) - * @method static \Illuminate\Database\Query\Builder|\PiggybankReminder wherePiggybankId($value) - * @method static \Illuminate\Database\Query\Builder|\PiggybankReminder whereRecurringTransactionId($value) - * @method static \Illuminate\Database\Query\Builder|\PiggybankReminder whereUserId($value) - * @method static \Illuminate\Database\Query\Builder|\PiggybankReminder whereStartdate($value) - * @method static \Illuminate\Database\Query\Builder|\PiggybankReminder whereEnddate($value) - * @method static \Illuminate\Database\Query\Builder|\PiggybankReminder whereActive($value) - * @method static \Reminder validOn($date) - * @method static \Reminder validOnOrAfter($date) + * @method static \Illuminate\Database\Query\Builder|\PiggybankReminder whereId($value) + * @method static \Illuminate\Database\Query\Builder|\PiggybankReminder whereCreatedAt($value) + * @method static \Illuminate\Database\Query\Builder|\PiggybankReminder whereUpdatedAt($value) + * @method static \Illuminate\Database\Query\Builder|\PiggybankReminder whereClass($value) + * @method static \Illuminate\Database\Query\Builder|\PiggybankReminder wherePiggybankId($value) + * @method static \Illuminate\Database\Query\Builder|\PiggybankReminder whereRecurringTransactionId($value) + * @method static \Illuminate\Database\Query\Builder|\PiggybankReminder whereUserId($value) + * @method static \Illuminate\Database\Query\Builder|\PiggybankReminder whereStartdate($value) + * @method static \Illuminate\Database\Query\Builder|\PiggybankReminder whereEnddate($value) + * @method static \Illuminate\Database\Query\Builder|\PiggybankReminder whereActive($value) + * @method static \Reminder validOn($date) + * @method static \Reminder validOnOrAfter($date) */ class PiggybankReminder extends Reminder { diff --git a/app/models/RecurringTransactionReminder.php b/app/models/RecurringTransactionReminder.php index 6b87d54dc7..4d5b52fc14 100644 --- a/app/models/RecurringTransactionReminder.php +++ b/app/models/RecurringTransactionReminder.php @@ -16,18 +16,18 @@ * @property-read \Piggybank $piggybank * @property-read \RecurringTransaction $recurringTransaction * @property-read \User $user - * @method static \Illuminate\Database\Query\Builder|\RecurringTransactionReminder whereId($value) - * @method static \Illuminate\Database\Query\Builder|\RecurringTransactionReminder whereCreatedAt($value) - * @method static \Illuminate\Database\Query\Builder|\RecurringTransactionReminder whereUpdatedAt($value) - * @method static \Illuminate\Database\Query\Builder|\RecurringTransactionReminder whereClass($value) - * @method static \Illuminate\Database\Query\Builder|\RecurringTransactionReminder wherePiggybankId($value) - * @method static \Illuminate\Database\Query\Builder|\RecurringTransactionReminder whereRecurringTransactionId($value) - * @method static \Illuminate\Database\Query\Builder|\RecurringTransactionReminder whereUserId($value) - * @method static \Illuminate\Database\Query\Builder|\RecurringTransactionReminder whereStartdate($value) - * @method static \Illuminate\Database\Query\Builder|\RecurringTransactionReminder whereEnddate($value) - * @method static \Illuminate\Database\Query\Builder|\RecurringTransactionReminder whereActive($value) - * @method static \Reminder validOn($date) - * @method static \Reminder validOnOrAfter($date) + * @method static \Illuminate\Database\Query\Builder|\RecurringTransactionReminder whereId($value) + * @method static \Illuminate\Database\Query\Builder|\RecurringTransactionReminder whereCreatedAt($value) + * @method static \Illuminate\Database\Query\Builder|\RecurringTransactionReminder whereUpdatedAt($value) + * @method static \Illuminate\Database\Query\Builder|\RecurringTransactionReminder whereClass($value) + * @method static \Illuminate\Database\Query\Builder|\RecurringTransactionReminder wherePiggybankId($value) + * @method static \Illuminate\Database\Query\Builder|\RecurringTransactionReminder whereRecurringTransactionId($value) + * @method static \Illuminate\Database\Query\Builder|\RecurringTransactionReminder whereUserId($value) + * @method static \Illuminate\Database\Query\Builder|\RecurringTransactionReminder whereStartdate($value) + * @method static \Illuminate\Database\Query\Builder|\RecurringTransactionReminder whereEnddate($value) + * @method static \Illuminate\Database\Query\Builder|\RecurringTransactionReminder whereActive($value) + * @method static \Reminder validOn($date) + * @method static \Reminder validOnOrAfter($date) */ class RecurringTransactionReminder extends Reminder { diff --git a/app/models/Reminder.php b/app/models/Reminder.php index 8e9b1b8014..be6e28b351 100644 --- a/app/models/Reminder.php +++ b/app/models/Reminder.php @@ -21,18 +21,18 @@ use Firefly\Database\SingleTableInheritanceEntity; * @property-read \Piggybank $piggybank * @property-read \RecurringTransaction $recurringTransaction * @property-read \User $user - * @method static \Illuminate\Database\Query\Builder|\Reminder whereId($value) - * @method static \Illuminate\Database\Query\Builder|\Reminder whereCreatedAt($value) - * @method static \Illuminate\Database\Query\Builder|\Reminder whereUpdatedAt($value) - * @method static \Illuminate\Database\Query\Builder|\Reminder whereClass($value) - * @method static \Illuminate\Database\Query\Builder|\Reminder wherePiggybankId($value) - * @method static \Illuminate\Database\Query\Builder|\Reminder whereRecurringTransactionId($value) - * @method static \Illuminate\Database\Query\Builder|\Reminder whereUserId($value) - * @method static \Illuminate\Database\Query\Builder|\Reminder whereStartdate($value) - * @method static \Illuminate\Database\Query\Builder|\Reminder whereEnddate($value) - * @method static \Illuminate\Database\Query\Builder|\Reminder whereActive($value) - * @method static \Reminder validOn($date) - * @method static \Reminder validOnOrAfter($date) + * @method static \Illuminate\Database\Query\Builder|\Reminder whereId($value) + * @method static \Illuminate\Database\Query\Builder|\Reminder whereCreatedAt($value) + * @method static \Illuminate\Database\Query\Builder|\Reminder whereUpdatedAt($value) + * @method static \Illuminate\Database\Query\Builder|\Reminder whereClass($value) + * @method static \Illuminate\Database\Query\Builder|\Reminder wherePiggybankId($value) + * @method static \Illuminate\Database\Query\Builder|\Reminder whereRecurringTransactionId($value) + * @method static \Illuminate\Database\Query\Builder|\Reminder whereUserId($value) + * @method static \Illuminate\Database\Query\Builder|\Reminder whereStartdate($value) + * @method static \Illuminate\Database\Query\Builder|\Reminder whereEnddate($value) + * @method static \Illuminate\Database\Query\Builder|\Reminder whereActive($value) + * @method static \Reminder validOn($date) + * @method static \Reminder validOnOrAfter($date) */ class Reminder extends SingleTableInheritanceEntity { diff --git a/app/models/Transaction.php b/app/models/Transaction.php index 5d5b00752f..9ca780cb54 100644 --- a/app/models/Transaction.php +++ b/app/models/Transaction.php @@ -1,25 +1,27 @@ belongsTo('Piggybank'); } + public function scopeAccount(Builder $query, Account $account) + { + $query->where('transactions.account_id', $account->id); + } + + public function scopeAfter(Builder $query, Carbon $date) + { + if (is_null($this->joinedJournals)) { + $query->leftJoin('transaction_journals', 'transaction_journals.id', '=', + 'transactions.transaction_journal_id'); + $this->joinedJournals = true; + } + $query->where('transaction_journals.date', '>=', $date->format('Y-m-d')); + } + + public function scopeBefore(Builder $query, Carbon $date) + { + if (is_null($this->joinedJournals)) { + $query->leftJoin('transaction_journals', 'transaction_journals.id', '=', + 'transactions.transaction_journal_id'); + $this->joinedJournals = true; + } + $query->where('transaction_journals.date', '<=', $date->format('Y-m-d')); + } + + public function scopeLessThan(Builder $query, $amount) + { + $query->where('amount', '<', $amount); + } + + public function scopeMoreThan(Builder $query, $amount) + { + $query->where('amount', '>', $amount); + } + + public function scopeTransactionTypes(Builder $query, array $types) + { + if (is_null($this->joinedJournals)) { + $query->leftJoin('transaction_journals', 'transaction_journals.id', '=', + 'transactions.transaction_journal_id'); + $this->joinedJournals = true; + } + if (is_null($this->joinedTransactionTypes)) { + $query->leftJoin('transaction_types', 'transaction_types.id', '=', + 'transaction_journals.transaction_type_id'); + $this->joinedTransactionTypes = true; + } + $query->whereIn('transaction_types.type', $types); + } + /** * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ diff --git a/app/models/TransactionJournal.php b/app/models/TransactionJournal.php index 35ab91cfa8..960cd76c5c 100644 --- a/app/models/TransactionJournal.php +++ b/app/models/TransactionJournal.php @@ -2,6 +2,7 @@ use Carbon\Carbon; use LaravelBook\Ardent\Ardent; +use LaravelBook\Ardent\Builder; /** @@ -40,7 +41,33 @@ use LaravelBook\Ardent\Ardent; * 'Budget[] $budgets * @property-read \Illuminate\Database\Eloquent\Collection|\ * 'Category[] $categories - * @method static \TransactionJournal onDate($date) + * @method static \TransactionJournal onDate($date) + * @property-read \Illuminate\Database\Eloquent\Collection|\ + * 'Budget[] $budgets + * @property-read \Illuminate\Database\Eloquent\Collection|\ + * 'Category[] $categories + * @property-read \Illuminate\Database\Eloquent\Collection|\ + * 'Budget[] $budgets + * @property-read \Illuminate\Database\Eloquent\Collection|\ + * 'Category[] $categories + * @property-read \Illuminate\Database\Eloquent\Collection|\ + * 'Budget[] $budgets + * @property-read \Illuminate\Database\Eloquent\Collection|\ + * 'Category[] $categories + * @method static \TransactionJournal defaultSorting() + * @method static \TransactionJournal withRelevantData() + * @method static \TransactionJournal account($account) + * @property-read \Illuminate\Database\Eloquent\Collection|\ + * 'Budget[] $budgets + * @property-read \Illuminate\Database\Eloquent\Collection|\ + * 'Category[] $categories + * @method static \TransactionJournal moreThan($amount) + * @method static \TransactionJournal lessThan($amount) + * @method static \TransactionJournal transactionTypes($types) + * @property-read \Illuminate\Database\Eloquent\Collection|\ + * 'Budget[] $budgets + * @property-read \Illuminate\Database\Eloquent\Collection|\ + * 'Category[] $categories */ class TransactionJournal extends Ardent { @@ -61,7 +88,7 @@ class TransactionJournal extends Ardent public function budgets() { return $this->belongsToMany( - 'Budget', 'component_transaction_journal', 'transaction_journal_id', 'component_id' + 'Budget', 'component_transaction_journal', 'transaction_journal_id', 'component_id' ); } @@ -71,7 +98,7 @@ class TransactionJournal extends Ardent public function categories() { return $this->belongsToMany( - 'Category', 'component_transaction_journal', 'transaction_journal_id', 'component_id' + 'Category', 'component_transaction_journal', 'transaction_journal_id', 'component_id' ); } @@ -91,9 +118,18 @@ class TransactionJournal extends Ardent return ['created_at', 'updated_at', 'date']; } + public function scopeAccount(Builder $query, \Account $account) + { + if (!isset($this->joinedTransactions)) { + $query->leftJoin('transactions', 'transactions.transaction_journal_id', '=', 'transaction_journals.id'); + $this->joinedTransactions = true; + } + $query->where('transactions.account_id', $account->id); + } + /** * @param $query - * @param Carbon $date + * @param Carbon $date * * @return mixed */ @@ -104,7 +140,7 @@ class TransactionJournal extends Ardent /** * @param $query - * @param Carbon $date + * @param Carbon $date * * @return mixed */ @@ -113,6 +149,33 @@ class TransactionJournal extends Ardent return $query->where('date', '<=', $date->format('Y-m-d')); } + public function scopeDefaultSorting(Builder $query) + { + $query->orderBy('date', 'DESC')->orderBy('transaction_journals.id', 'DESC'); + } + + public function scopeMoreThan(Builder $query, $amount) + { + if (is_null($this->joinedTransactions)) { + $query->leftJoin('transactions', 'transactions.transaction_journal_id', '=', + 'transaction_journals.id'); + $this->joinedTransactions = true; + } + + $query->where('transactions.amount', '>=', $amount); + } + + public function scopeLessThan(Builder $query, $amount) + { + if (is_null($this->joinedTransactions)) { + $query->leftJoin('transactions', 'transactions.transaction_journal_id', '=', + 'transaction_journals.id'); + $this->joinedTransactions = true; + } + + $query->where('transactions.amount', '<=', $amount); + } + /** * @param $query * @param Carbon $date @@ -124,6 +187,33 @@ class TransactionJournal extends Ardent return $query->where('date', '=', $date->format('Y-m-d')); } + public function scopeTransactionTypes(Builder $query, array $types) + { + if (is_null($this->joinedTransactionTypes)) { + $query->leftJoin('transaction_types', 'transaction_types.id', '=', + 'transaction_journals.transaction_type_id'); + $this->joinedTransactionTypes = true; + } + $query->whereIn('transaction_types.type', $types); + } + + /** + * Automatically includes the 'with' parameters to get relevant related + * objects. + * + * @param $query + */ + public function scopeWithRelevantData(Builder $query) + { + $query->with( + ['transactions' => function ($q) { + $q->orderBy('amount', 'ASC'); + }, 'transactiontype', 'components' => function ($q) { + $q->orderBy('class'); + }, 'transactions.account.accounttype'] + ); + } + /** * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ @@ -158,4 +248,4 @@ class TransactionJournal extends Ardent return $this->belongsTo('User'); } -} \ No newline at end of file +} \ No newline at end of file diff --git a/app/tests/controllers/ChartControllerTest.php b/app/tests/controllers/ChartControllerTest.php index 18ac0f1980..2ea84e322d 100644 --- a/app/tests/controllers/ChartControllerTest.php +++ b/app/tests/controllers/ChartControllerTest.php @@ -78,7 +78,7 @@ class ChartControllerTest extends TestCase { $account = f::create('Account'); $type = f::create('AccountType'); - $type->description = 'Default account'; + $type->type = 'Default account'; $type->save(); $account->accounttype()->associate($type); $account->save();