mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-09-04 03:43:07 +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()
|
||||
{
|
||||
}
|
||||
}
|
@@ -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
|
||||
{
|
||||
|
@@ -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
|
||||
{
|
||||
|
@@ -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
|
||||
{
|
||||
|
@@ -1,25 +1,27 @@
|
||||
<?php
|
||||
|
||||
use Carbon\Carbon;
|
||||
use LaravelBook\Ardent\Ardent;
|
||||
use LaravelBook\Ardent\Builder;
|
||||
|
||||
|
||||
/**
|
||||
* Transaction
|
||||
*
|
||||
* @property integer $id
|
||||
* @property \Carbon\Carbon $created_at
|
||||
* @property \Carbon\Carbon $updated_at
|
||||
* @property integer $account_id
|
||||
* @property integer $piggybank_id
|
||||
* @property integer $transaction_journal_id
|
||||
* @property string $description
|
||||
* @property float $amount
|
||||
* @property-read \Account $account
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection|\Budget[] $budgets
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection|\Category[] $categories
|
||||
* @property integer $id
|
||||
* @property \Carbon\Carbon $created_at
|
||||
* @property \Carbon\Carbon $updated_at
|
||||
* @property integer $account_id
|
||||
* @property integer $piggybank_id
|
||||
* @property integer $transaction_journal_id
|
||||
* @property string $description
|
||||
* @property float $amount
|
||||
* @property-read \Account $account
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection|\Budget[] $budgets
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection|\Category[] $categories
|
||||
* @property-read \Illuminate\Database\Eloquent\Collection|\Component[] $components
|
||||
* @property-read \Piggybank $piggybank
|
||||
* @property-read \TransactionJournal $transactionJournal
|
||||
* @property-read \Piggybank $piggybank
|
||||
* @property-read \TransactionJournal $transactionJournal
|
||||
* @method static \Illuminate\Database\Query\Builder|\Transaction whereId($value)
|
||||
* @method static \Illuminate\Database\Query\Builder|\Transaction whereCreatedAt($value)
|
||||
* @method static \Illuminate\Database\Query\Builder|\Transaction whereUpdatedAt($value)
|
||||
@@ -28,6 +30,12 @@ use LaravelBook\Ardent\Ardent;
|
||||
* @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 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
|
||||
{
|
||||
@@ -81,6 +89,56 @@ class Transaction extends Ardent
|
||||
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
|
||||
*/
|
||||
|
@@ -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');
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@@ -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();
|
||||
|
Reference in New Issue
Block a user