mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-09-30 10:33:30 +00:00
Ran model helper, added some new features.
This commit is contained in:
22
app/lib/Firefly/Validation/FireflyValidator.php
Normal file
22
app/lib/Firefly/Validation/FireflyValidator.php
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
namespace Firefly\Validation;
|
||||||
|
|
||||||
|
use Illuminate\Validation\Validator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class FireflyValidator
|
||||||
|
*
|
||||||
|
* @package Firefly\Validation
|
||||||
|
*/
|
||||||
|
class FireflyValidator extends Validator
|
||||||
|
{
|
||||||
|
public function validateAlphabasic($attribute, $value, $parameters)
|
||||||
|
{
|
||||||
|
$pattern = '/[^a-z_\-0-9 ]/i';
|
||||||
|
if (preg_match($pattern, $value)) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
22
app/lib/Firefly/Validation/ValidationServiceProvider.php
Normal file
22
app/lib/Firefly/Validation/ValidationServiceProvider.php
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
namespace Firefly\Validation;
|
||||||
|
|
||||||
|
use Illuminate\Support\ServiceProvider;
|
||||||
|
|
||||||
|
class ValidationServiceProvider extends ServiceProvider
|
||||||
|
{
|
||||||
|
public function boot()
|
||||||
|
{
|
||||||
|
$this->app->validator->resolver(
|
||||||
|
function ($translator, $data, $rules, $messages) {
|
||||||
|
return new FireflyValidator($translator, $data, $rules, $messages);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function register()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
@@ -1,6 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
use LaravelBook\Ardent\Ardent;
|
use LaravelBook\Ardent\Ardent;
|
||||||
|
use LaravelBook\Ardent\Builder;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -28,6 +30,12 @@ use LaravelBook\Ardent\Ardent;
|
|||||||
* @method static \Illuminate\Database\Query\Builder|\Transaction whereTransactionJournalId($value)
|
* @method static \Illuminate\Database\Query\Builder|\Transaction whereTransactionJournalId($value)
|
||||||
* @method static \Illuminate\Database\Query\Builder|\Transaction whereDescription($value)
|
* @method static \Illuminate\Database\Query\Builder|\Transaction whereDescription($value)
|
||||||
* @method static \Illuminate\Database\Query\Builder|\Transaction whereAmount($value)
|
* @method static \Illuminate\Database\Query\Builder|\Transaction whereAmount($value)
|
||||||
|
* @method static \Transaction account($account)
|
||||||
|
* @method static \Transaction after($date)
|
||||||
|
* @method static \Transaction before($date)
|
||||||
|
* @method static \Transaction lessThan($amount)
|
||||||
|
* @method static \Transaction moreThan($amount)
|
||||||
|
* @method static \Transaction transactionTypes($types)
|
||||||
*/
|
*/
|
||||||
class Transaction extends Ardent
|
class Transaction extends Ardent
|
||||||
{
|
{
|
||||||
@@ -81,6 +89,56 @@ class Transaction extends Ardent
|
|||||||
return $this->belongsTo('Piggybank');
|
return $this->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
|
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||||
*/
|
*/
|
||||||
|
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use LaravelBook\Ardent\Ardent;
|
use LaravelBook\Ardent\Ardent;
|
||||||
|
use LaravelBook\Ardent\Builder;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -41,6 +42,32 @@ use LaravelBook\Ardent\Ardent;
|
|||||||
* @property-read \Illuminate\Database\Eloquent\Collection|\
|
* @property-read \Illuminate\Database\Eloquent\Collection|\
|
||||||
* 'Category[] $categories
|
* '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
|
class TransactionJournal extends Ardent
|
||||||
{
|
{
|
||||||
@@ -91,6 +118,15 @@ class TransactionJournal extends Ardent
|
|||||||
return ['created_at', 'updated_at', 'date'];
|
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 $query
|
||||||
* @param Carbon $date
|
* @param Carbon $date
|
||||||
@@ -113,6 +149,33 @@ class TransactionJournal extends Ardent
|
|||||||
return $query->where('date', '<=', $date->format('Y-m-d'));
|
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 $query
|
||||||
* @param Carbon $date
|
* @param Carbon $date
|
||||||
@@ -124,6 +187,33 @@ class TransactionJournal extends Ardent
|
|||||||
return $query->where('date', '=', $date->format('Y-m-d'));
|
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
|
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
|
||||||
*/
|
*/
|
||||||
|
@@ -78,7 +78,7 @@ class ChartControllerTest extends TestCase
|
|||||||
{
|
{
|
||||||
$account = f::create('Account');
|
$account = f::create('Account');
|
||||||
$type = f::create('AccountType');
|
$type = f::create('AccountType');
|
||||||
$type->description = 'Default account';
|
$type->type = 'Default account';
|
||||||
$type->save();
|
$type->save();
|
||||||
$account->accounttype()->associate($type);
|
$account->accounttype()->associate($type);
|
||||||
$account->save();
|
$account->save();
|
||||||
|
Reference in New Issue
Block a user