diff --git a/app/Abstracts/Listeners/Report.php b/app/Abstracts/Listeners/Report.php index eb678a292..12cd95e2a 100644 --- a/app/Abstracts/Listeners/Report.php +++ b/app/Abstracts/Listeners/Report.php @@ -114,6 +114,14 @@ abstract class Report return $model->pluck('name', 'id')->toArray(); } + public function getBasis() + { + return [ + 'cash' => trans('general.cash'), + 'accrual' => trans('general.accrual'), + ]; + } + public function applyDateFilter($event) { $event->model->monthsOfYear($event->args['date_field']); @@ -127,6 +135,10 @@ abstract class Report $search_year = 'year:' . $this->getSearchStringValue('year', '', $input); $input = str_replace($search_year, '', $input); + // Remove basis as it's handled based on report itself + $search_basis = 'basis:' . $this->getSearchStringValue('basis', 'accrual', $input); + $input = str_replace($search_basis, '', $input); + $event->model->usingSearchString($input); } diff --git a/app/Listeners/Report/AddBasis.php b/app/Listeners/Report/AddBasis.php new file mode 100644 index 000000000..31de87864 --- /dev/null +++ b/app/Listeners/Report/AddBasis.php @@ -0,0 +1,34 @@ +skipThisClass($event)) { + return; + } + + $event->class->filters['basis'] = $this->getBasis(); + $event->class->filters['keys']['basis'] = 'basis'; + $event->class->filters['defaults']['basis'] = $event->class->getSetting('basis', 'accrual'); + } +} diff --git a/app/Providers/Event.php b/app/Providers/Event.php index f867640f4..c3d65b423 100644 --- a/app/Providers/Event.php +++ b/app/Providers/Event.php @@ -112,5 +112,6 @@ class Event extends Provider 'App\Listeners\Report\AddIncomeExpenseCategories', 'App\Listeners\Report\AddSearchString', 'App\Listeners\Report\AddRowsToTax', + 'App\Listeners\Report\AddBasis', ]; } diff --git a/app/Reports/ExpenseSummary.php b/app/Reports/ExpenseSummary.php index 6865e9612..d5bac2e28 100644 --- a/app/Reports/ExpenseSummary.php +++ b/app/Reports/ExpenseSummary.php @@ -32,7 +32,9 @@ class ExpenseSummary extends Report { $transactions = $this->applyFilters(Transaction::with('recurring')->expense()->isNotTransfer(), ['date_field' => 'paid_at']); - switch ($this->getSetting('basis')) { + $basis = $this->getSearchStringValue('basis', $this->getSetting('basis')); + + switch ($basis) { case 'cash': // Payments $payments = $transactions->get(); diff --git a/app/Reports/IncomeExpenseSummary.php b/app/Reports/IncomeExpenseSummary.php index 61bb64f0a..1c63f66ea 100644 --- a/app/Reports/IncomeExpenseSummary.php +++ b/app/Reports/IncomeExpenseSummary.php @@ -18,7 +18,9 @@ class IncomeExpenseSummary extends Report $income_transactions = $this->applyFilters(Transaction::with('recurring')->income()->isNotTransfer(), ['date_field' => 'paid_at']); $expense_transactions = $this->applyFilters(Transaction::with('recurring')->expense()->isNotTransfer(), ['date_field' => 'paid_at']); - switch ($this->getSetting('basis')) { + $basis = $this->getSearchStringValue('basis', $this->getSetting('basis')); + + switch ($basis) { case 'cash': // Revenues $revenues = $income_transactions->get(); diff --git a/app/Reports/IncomeSummary.php b/app/Reports/IncomeSummary.php index 6298fd94f..c2b140a8e 100644 --- a/app/Reports/IncomeSummary.php +++ b/app/Reports/IncomeSummary.php @@ -32,7 +32,9 @@ class IncomeSummary extends Report { $transactions = $this->applyFilters(Transaction::with('recurring')->income()->isNotTransfer(), ['date_field' => 'paid_at']); - switch ($this->getSetting('basis')) { + $basis = $this->getSearchStringValue('basis', $this->getSetting('basis')); + + switch ($basis) { case 'cash': // Revenues $revenues = $transactions->get(); diff --git a/app/Reports/ProfitLoss.php b/app/Reports/ProfitLoss.php index 4076cbcee..98144f43d 100644 --- a/app/Reports/ProfitLoss.php +++ b/app/Reports/ProfitLoss.php @@ -37,7 +37,9 @@ class ProfitLoss extends Report $income_transactions = $this->applyFilters(Transaction::with('recurring')->income()->isNotTransfer(), ['date_field' => 'paid_at']); $expense_transactions = $this->applyFilters(Transaction::with('recurring')->expense()->isNotTransfer(), ['date_field' => 'paid_at']); - switch ($this->getSetting('basis')) { + $basis = $this->getSearchStringValue('basis', $this->getSetting('basis')); + + switch ($basis) { case 'cash': // Revenues $revenues = $income_transactions->get(); diff --git a/app/Reports/TaxSummary.php b/app/Reports/TaxSummary.php index d5b437eb1..9589ff6e2 100644 --- a/app/Reports/TaxSummary.php +++ b/app/Reports/TaxSummary.php @@ -40,7 +40,9 @@ class TaxSummary extends Report public function setData() { - switch ($this->getSetting('basis')) { + $basis = $this->getSearchStringValue('basis', $this->getSetting('basis')); + + switch ($basis) { case 'cash': // Invoice Payments $invoices = $this->applyFilters(Transaction::with('recurring', 'invoice', 'invoice.totals')->income()->isDocument()->isNotTransfer(), ['date_field' => 'paid_at'])->get(); diff --git a/resources/views/partials/reports/filter.blade.php b/resources/views/partials/reports/filter.blade.php index e19b15e02..f3b2b586d 100644 --- a/resources/views/partials/reports/filter.blade.php +++ b/resources/views/partials/reports/filter.blade.php @@ -10,7 +10,7 @@ $filtered = []; $skipped = [ - 'keys', 'names', 'types', 'routes' + 'keys', 'names', 'types', 'routes', 'defaults' ]; foreach ($class->filters as $filter_name => $filter_values) { @@ -58,6 +58,16 @@ $url = (is_array($route)) ? route($route[0], $route[1]) : route($route); } + $default_value = null; + + if (isset($class->filters['defaults']) && !empty($class->filters['defaults'][$filter_name])) { + $default_value = $class->filters['defaults'][$filter_name]; + } + + if ($key == 'year') { + $default_value = \Date::now()->year; + } + $filters[] = [ 'key' => $key, 'value' => $value, @@ -66,11 +76,11 @@ 'values' => $filter_values, ]; - if ($key == 'year') { + if (!is_null($default_value)) { $filtered[] = [ 'option' => $key, 'operator' => '=', - 'value' => \Date::now()->year, + 'value' => $default_value, ]; }