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')