diff --git a/app/Abstracts/Widget.php b/app/Abstracts/Widget.php index 82fabc405..46e80dbbf 100644 --- a/app/Abstracts/Widget.php +++ b/app/Abstracts/Widget.php @@ -29,6 +29,18 @@ abstract class Widget extends AbstractWidget return $this->show(); } + public function applyFilters($model, $args = ['date_field' => 'paid_at']) + { + if (empty(request()->get('start_date', null))) { + return $model; + } + + $start_date = request()->get('start_date') . ' 00:00:00'; + $end_date = request()->get('end_date') . ' 23:59:59'; + + return $model->whereBetween($args['date_field'], [$start_date, $end_date]); + } + public function calculateDocumentTotals($model) { $open = $overdue = 0; diff --git a/app/Http/Controllers/Common/Dashboard.php b/app/Http/Controllers/Common/Dashboard.php index bfc8be3ba..288666ec6 100644 --- a/app/Http/Controllers/Common/Dashboard.php +++ b/app/Http/Controllers/Common/Dashboard.php @@ -7,9 +7,12 @@ use App\Abstracts\Http\Controller; use App\Models\Common\Dashboard as Model; use App\Models\Common\DashboardWidget; use App\Http\Requests\Common\Dashboard as Request; +use App\Traits\DateTime; class Dashboard extends Controller { + use DateTime; + /** * Display a listing of the resource. * @@ -42,7 +45,9 @@ class Dashboard extends Controller ->where('user_id', $user_id) ->orderBy('sort', 'asc')->get(); - return view('common.dashboard.index', compact('dashboards','dashboard', 'widgets')); + $financial_start = $this->getFinancialStart()->format('Y-m-d'); + + return view('common.dashboard.index', compact('dashboards','dashboard', 'widgets', 'financial_start')); } /** diff --git a/app/Widgets/CashFlow.php b/app/Widgets/CashFlow.php index ad30b71a9..1b9c22ec6 100644 --- a/app/Widgets/CashFlow.php +++ b/app/Widgets/CashFlow.php @@ -137,7 +137,7 @@ class CashFlow extends Widget } } - $items = Transaction::type($type)->whereBetween('paid_at', [$start, $end])->isNotTransfer()->get(); + $items = $this->applyFilters(Transaction::type($type)->whereBetween('paid_at', [$start, $end])->isNotTransfer())->get(); $this->setTotals($totals, $items, $date_format, $period); diff --git a/app/Widgets/ExpensesByCategory.php b/app/Widgets/ExpensesByCategory.php index e38fe0a70..d31686def 100644 --- a/app/Widgets/ExpensesByCategory.php +++ b/app/Widgets/ExpensesByCategory.php @@ -16,7 +16,9 @@ class ExpensesByCategory extends Widget Category::with('expense_transactions')->type('expense')->enabled()->each(function ($category) { $amount = 0; - foreach ($category->expense_transactions as $transacion) { + $transactions = $this->applyFilters($category->expense_transactions())->get(); + + foreach ($transactions as $transacion) { $amount += $transacion->getAmountConvertedToDefault(); } diff --git a/app/Widgets/IncomeByCategory.php b/app/Widgets/IncomeByCategory.php index 2402b1246..0de7fcd65 100644 --- a/app/Widgets/IncomeByCategory.php +++ b/app/Widgets/IncomeByCategory.php @@ -16,7 +16,9 @@ class IncomeByCategory extends Widget Category::with('income_transacions')->type('income')->enabled()->each(function ($category) { $amount = 0; - foreach ($category->income_transacions as $transacion) { + $transactions = $this->applyFilters($category->income_transacions())->get(); + + foreach ($transactions as $transacion) { $amount += $transacion->getAmountConvertedToDefault(); } diff --git a/app/Widgets/LatestExpenses.php b/app/Widgets/LatestExpenses.php index e0e041f0d..c1c2dfe7a 100644 --- a/app/Widgets/LatestExpenses.php +++ b/app/Widgets/LatestExpenses.php @@ -9,11 +9,11 @@ class LatestExpenses extends Widget { public function show() { - $transactions = Transaction::with('category')->type('expense')->orderBy('paid_at', 'desc')->isNotTransfer()->take(5)->get(); + $transactions = $this->applyFilters(Transaction::with('category')->type('expense')->orderBy('paid_at', 'desc')->isNotTransfer()->take(5))->get(); return view('widgets.latest_expenses', [ 'config' => (object) $this->config, 'transactions' => $transactions, ]); } -} \ No newline at end of file +} diff --git a/app/Widgets/LatestIncome.php b/app/Widgets/LatestIncome.php index 7961fa4c7..17b45cda6 100644 --- a/app/Widgets/LatestIncome.php +++ b/app/Widgets/LatestIncome.php @@ -9,11 +9,11 @@ class LatestIncome extends Widget { public function show() { - $transactions = Transaction::with('category')->type('income')->orderBy('paid_at', 'desc')->isNotTransfer()->take(5)->get(); + $transactions = $this->applyFilters(Transaction::with('category')->type('income')->orderBy('paid_at', 'desc')->isNotTransfer()->take(5))->get(); return view('widgets.latest_income', [ 'config' => (object) $this->config, 'transactions' => $transactions, ]); } -} \ No newline at end of file +} diff --git a/app/Widgets/TotalExpenses.php b/app/Widgets/TotalExpenses.php index be1876a56..f17231de5 100644 --- a/app/Widgets/TotalExpenses.php +++ b/app/Widgets/TotalExpenses.php @@ -12,11 +12,11 @@ class TotalExpenses extends Widget { $current = $open = $overdue = 0; - Transaction::type('expense')->isNotTransfer()->each(function ($transaction) use (&$current) { + $this->applyFilters(Transaction::type('expense')->isNotTransfer())->each(function ($transaction) use (&$current) { $current += $transaction->getAmountConvertedToDefault(); }); - Bill::accrued()->notPaid()->each(function ($bill) use (&$open, &$overdue) { + $this->applyFilters(Bill::accrued()->notPaid(), ['date_field' => 'created_at'])->each(function ($bill) use (&$open, &$overdue) { list($open_tmp, $overdue_tmp) = $this->calculateDocumentTotals($bill); $open += $open_tmp; diff --git a/app/Widgets/TotalIncome.php b/app/Widgets/TotalIncome.php index 618920cfb..e63f53c8d 100644 --- a/app/Widgets/TotalIncome.php +++ b/app/Widgets/TotalIncome.php @@ -12,11 +12,11 @@ class TotalIncome extends Widget { $current = $open = $overdue = 0; - Transaction::type('income')->isNotTransfer()->each(function ($transaction) use (&$current) { + $this->applyFilters(Transaction::type('income')->isNotTransfer())->each(function ($transaction) use (&$current) { $current += $transaction->getAmountConvertedToDefault(); }); - Invoice::accrued()->notPaid()->each(function ($invoice) use (&$open, &$overdue) { + $this->applyFilters(Invoice::accrued()->notPaid(), ['date_field' => 'created_at'])->each(function ($invoice) use (&$open, &$overdue) { list($open_tmp, $overdue_tmp) = $this->calculateDocumentTotals($invoice); $open += $open_tmp; diff --git a/app/Widgets/TotalProfit.php b/app/Widgets/TotalProfit.php index 863e2237c..d350ee202 100644 --- a/app/Widgets/TotalProfit.php +++ b/app/Widgets/TotalProfit.php @@ -14,7 +14,7 @@ class TotalProfit extends Widget $current_income = $open_invoice = $overdue_invoice = 0; $current_expenses = $open_bill = $overdue_bill = 0; - Transaction::isNotTransfer()->each(function ($transaction) use (&$current_income, &$current_expenses) { + $this->applyFilters(Transaction::isNotTransfer())->each(function ($transaction) use (&$current_income, &$current_expenses) { $amount = $transaction->getAmountConvertedToDefault(); if ($transaction->type == 'income') { @@ -24,14 +24,14 @@ class TotalProfit extends Widget } }); - Invoice::accrued()->notPaid()->each(function ($invoice) use (&$open_invoice, &$overdue_invoice) { + $this->applyFilters(Invoice::accrued()->notPaid(), ['date_field' => 'created_at'])->each(function ($invoice) use (&$open_invoice, &$overdue_invoice) { list($open_tmp, $overdue_tmp) = $this->calculateDocumentTotals($invoice); $open_invoice += $open_tmp; $overdue_invoice += $overdue_tmp; }); - Bill::accrued()->notPaid()->each(function ($bill) use (&$open_bill, &$overdue_bill) { + $this->applyFilters(Bill::accrued()->notPaid(), ['date_field' => 'created_at'])->each(function ($bill) use (&$open_bill, &$overdue_bill) { list($open_tmp, $overdue_tmp) = $this->calculateDocumentTotals($bill); $open_bill += $open_tmp; diff --git a/resources/assets/js/plugins/functions.js b/resources/assets/js/plugins/functions.js new file mode 100644 index 000000000..abd9bdddf --- /dev/null +++ b/resources/assets/js/plugins/functions.js @@ -0,0 +1,18 @@ +// Get Url Paramater +function getQueryVariable(variable) { + var query = window.location.search.substring(1); + + var vars = query.split("&"); + + for (var i = 0; i < vars.length; i++) { + var pair = vars[i].split("="); + + if (pair[0] == variable) { + return pair[1]; + } + } + + return(false); +} + +export {getQueryVariable} diff --git a/resources/assets/js/views/common/dashboard.js b/resources/assets/js/views/common/dashboard.js index 63c1a1f12..c00348155 100644 --- a/resources/assets/js/views/common/dashboard.js +++ b/resources/assets/js/views/common/dashboard.js @@ -9,6 +9,7 @@ require('./../../bootstrap'); import Vue from 'vue'; import Global from './../../mixins/global'; +import {getQueryVariable} from './../../plugins/functions'; import AkauntingDashboard from './../../components/AkauntingDashboard'; import AkauntingWidget from './../../components/AkauntingWidget'; @@ -49,38 +50,20 @@ const dashboard = new Vue({ sort: 0, widget_id: 0 }, - pickerOptions: { - shortcuts: [{ - text: 'Last week', - onClick(picker) { - const end = new Date(); - const start = new Date(); - start.setTime(start.getTime() - 3600 * 1000 * 24 * 7); - picker.$emit('pick', [start, end]); - } - }, { - text: 'Last month', - onClick(picker) { - const end = new Date(); - const start = new Date(); - start.setTime(start.getTime() - 3600 * 1000 * 24 * 30); - picker.$emit('pick', [start, end]); - } - }, { - text: 'Last 3 months', - onClick(picker) { - const end = new Date(); - const start = new Date(); - start.setTime(start.getTime() - 3600 * 1000 * 24 * 90); - picker.$emit('pick', [start, end]); - } - }] - }, - value2: '' + filter_date: [], }; }, mounted() { + let start_date = getQueryVariable('start_date'); + + if (start_date) { + let end_date = getQueryVariable('end_date'); + + this.filter_date.push(start_date); + this.filter_date.push(end_date); + } + this.getWidgets(); }, @@ -166,5 +149,13 @@ const dashboard = new Vue({ this.widget.sort = 0; this.widget.widget_id = 0; }, + + onChangeFilterDate() { + if (this.filter_date) { + window.location.href = url + '?start_date=' + this.filter_date[0] + '&end_date=' + this.filter_date[1]; + } else { + window.location.href = url; + } + }, } }); diff --git a/resources/lang/en-GB/general.php b/resources/lang/en-GB/general.php index e73473ba8..1ce10d2c3 100644 --- a/resources/lang/en-GB/general.php +++ b/resources/lang/en-GB/general.php @@ -134,6 +134,7 @@ return [ 'difference' => 'Difference', 'footer' => 'Footer', 'start_date' => 'Start Date', + 'end_date' => 'End Date', 'basis' => 'Basis', 'accrual' => 'Accrual', 'cash' => 'Cash', diff --git a/resources/views/common/dashboard/index.blade.php b/resources/views/common/dashboard/index.blade.php index 1e6d75250..ea412159f 100644 --- a/resources/views/common/dashboard/index.blade.php +++ b/resources/views/common/dashboard/index.blade.php @@ -92,19 +92,84 @@ @section('new_button') - - + + @endsection @section('content')