From 9fcc81f4d9ea3eaffc0575545bb2e7a78dfb5d54 Mon Sep 17 00:00:00 2001 From: ludo Date: Mon, 29 Jan 2024 22:39:57 +0100 Subject: [PATCH] add graphs for stats --- app/Charts/Shop/Order.php | 23 ++++ app/Http/Controllers/Admin/HomeController.php | 5 +- app/Repositories/Core/DateRange.php | 26 ++-- app/Repositories/Core/DateStats.php | 119 +++++++++++++++--- app/Repositories/Shop/OrderStatistics.php | 18 ++- .../_partials/salesByPeriod.blade.php | 74 +++++------ .../Admin/Shop/Dashboard/index.blade.php | 10 +- 7 files changed, 202 insertions(+), 73 deletions(-) create mode 100644 app/Charts/Shop/Order.php diff --git a/app/Charts/Shop/Order.php b/app/Charts/Shop/Order.php new file mode 100644 index 00000000..58bce705 --- /dev/null +++ b/app/Charts/Shop/Order.php @@ -0,0 +1,23 @@ +setType('bar') + ->setWidth('100%') + ->setHeight(300) + ->setLabels(array_keys($data)) + ->setDataset('CA', 'bar', array_values($data)) + ->setColor('#334F17') + ->setStrokeColors(['#527C39']) + ; + } +} diff --git a/app/Http/Controllers/Admin/HomeController.php b/app/Http/Controllers/Admin/HomeController.php index 5033b767..cb2418ff 100644 --- a/app/Http/Controllers/Admin/HomeController.php +++ b/app/Http/Controllers/Admin/HomeController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use App\Repositories\Shop\Dashboards; +use App\Charts\Shop\Order; use Illuminate\Http\Request; class HomeController extends Controller @@ -19,7 +20,9 @@ class HomeController extends Controller $start = $request->input('start'); $end = $request->input('end'); $data = Dashboards::getStats($start, $end); - + $data['chart'] = Order::getMonthly(); + //dump($data); + //exit; // dump($data); return view('Admin.Shop.Dashboard.index', $data); } diff --git a/app/Repositories/Core/DateRange.php b/app/Repositories/Core/DateRange.php index 106ac2e8..b87ea28a 100644 --- a/app/Repositories/Core/DateRange.php +++ b/app/Repositories/Core/DateRange.php @@ -30,24 +30,24 @@ class DateRange public static function previousDay($nb = 1) { return [ - 'start' => Carbon::now()->subDay($nb)->startOfDay(), - 'end' => Carbon::now()->subDay($nb)->endOfDay(), + 'start' => Carbon::now()->subDays($nb)->startOfDay(), + 'end' => Carbon::now()->subDays($nb)->endOfDay(), ]; } public static function previousWeek($nb = 1) { return [ - 'start' => Carbon::now()->subWeek($nb)->startOfWeek(), - 'end' => Carbon::now()->subWeek($nb)->endOfWeek(), + 'start' => Carbon::now()->subWeeks($nb)->startOfWeek(), + 'end' => Carbon::now()->subWeeks($nb)->endOfWeek(), ]; } public static function previousMonth($nb = 1) { return [ - 'start' => Carbon::now()->subMonth($nb)->startOfMonth(), - 'end' => Carbon::now()->subMonth($nb)->endOfMonth(), + 'start' => Carbon::now()->subMonths($nb)->startOfMonth(), + 'end' => Carbon::now()->subMonths($nb)->endOfMonth(), ]; } @@ -79,7 +79,7 @@ class DateRange public static function getPeriodsLastMonth($nb = 1, $withActual = true) { $end = $withActual ? Carbon::now()->endOfMonth() : self::lastMonth(); - $begin = $nb === 1 ? $end->copy()->startOfMonth() : $end->copy()->startOfMonth()->subMonth($nb - 1); + $begin = $nb === 1 ? $end->copy()->startOfMonth() : $end->copy()->startOfMonth()->subMonths($nb - 1); return self::getPeriodsByMonth($begin, $end); } @@ -108,7 +108,7 @@ class DateRange public static function getPeriodsLastWeek($nb = 1, $withActual = true) { $end = $withActual ? Carbon::now()->endOfWeek() : self::lastWeek(); - $begin = $end->copy()->subWeek($nb); + $begin = $end->copy()->subWeeks($nb); return static::getPeriodsByWeek($begin, $end); } @@ -116,7 +116,7 @@ class DateRange public static function getPeriodsLastDay($nb = 1, $withActual = true) { $end = $withActual ? Carbon::now()->endOfDay() : static::lastDay(); - $begin = $end->copy()->subDay($nb); + $begin = $end->copy()->subDays($nb); return static::getPeriodsByDay($begin, $end); } @@ -153,7 +153,7 @@ class DateRange $date = Carbon::now()->startOfQuarter(); break; case 4: - $date = Carbon::now()->subMonth(3)->startOfQuarter(); + $date = Carbon::now()->subMonths(3)->startOfQuarter(); break; default: return false; @@ -169,17 +169,17 @@ class DateRange public static function lastMonth() { - return Carbon::now()->subMonth()->startOfMonth(); + return Carbon::now()->subMonths()->startOfMonth(); } public static function lastWeek() { - return Carbon::now()->subWeek()->startOfWeek(); + return Carbon::now()->subWeeks()->startOfWeek(); } public static function lastDay() { - return Carbon::now()->subDay()->startOfDay(); + return Carbon::now()->subDays()->startOfDay(); } public static function getPeriodsByMonth($begin, $end, $interval = 1) diff --git a/app/Repositories/Core/DateStats.php b/app/Repositories/Core/DateStats.php index f2296597..64cee987 100644 --- a/app/Repositories/Core/DateStats.php +++ b/app/Repositories/Core/DateStats.php @@ -7,12 +7,83 @@ use Illuminate\Database\Eloquent\Model; trait DateStats { - public static function countByMonth($prev = 0) + public static function sumDaily($field, $nbDays = 15, $fieldDate = 'created_at') { - $start = Carbon::now()->startOfMonth($prev); - $end = Carbon::now()->endOfMonth($prev); + $periods = DateRange::getPeriodsLastDay($nbDays); + $values = self::sumPeriodly($periods, $field, $fieldDate); - return self::countByPeriod($start, $end); + return self::buildLabels($periods, $values, 'dd Do MMM'); + } + + public static function countDaily($nbDays = 15, $fieldDate = 'created_at') + { + $periods = DateRange::getPeriodsLastDay($nbDays); + $values = self::countPeriodly($periods, $fieldDate); + + return self::buildLabels($periods, $values, 'dd Do MMM'); + } + + public static function sumMonthly($field, $fieldDate = 'created_at') + { + $periods = DateRange::getPeriodsLastMonth(12); + $values = self::sumPeriodly($periods, $field, $fieldDate); + + return self::buildLabels($periods, $values, 'MMM YY'); + } + + public static function countMonthly($fieldDate = 'created_at') + { + $periods = DateRange::getPeriodsLastMonth(12); + $values = self::countPeriodly($periods, $fieldDate); + + return self::buildLabels($periods, $values, 'MMM YY'); + } + + public static function buildLabels($periods, $values, $format = 'MMM YY') + { + $data = []; + foreach ($periods as $key => $period) { + $index = Carbon::parse($period->startDate)->isoFormat($format); + $data[$index] = $values[$key]; + } + + return $data; + } + + public static function sumPeriodly($periods, $field, $fieldDate = 'created_at') + { + $data = []; + foreach ($periods as $period) { + $data[] = self::sumByPeriod($period->startDate, $period->endDate, $field, $fieldDate); + } + + return $data; + } + + public static function countPeriodly($periods, $fieldDate = 'created_at') + { + $data = []; + foreach ($periods as $period) { + $data[] = self::countByPeriod($period->startDate, $period->endDate, $fieldDate); + } + + return $data; + } + + public static function countByMonth($prev = 0, $field = 'created_at') + { + $start = Carbon::now()->subMonths($prev)->startOfMonth(); + $end = Carbon::now()->subMonths($prev)->endOfMonth(); + + return self::countByPeriod($start, $end, $field); + } + + public static function countByDay($prev = 0, $field = 'created_at') + { + $start = Carbon::now()->subDays($prev)->startOfMonth(); + $end = Carbon::now()->subDays($prev)->endOfMonth(); + + return self::countByPeriod($start, $end, $field); } public static function countByPeriod($start, $end, $field = 'created_at') @@ -20,32 +91,48 @@ trait DateStats return self::getModel()->whereBetween($field, [$start, $end])->count(); } - public static function avgByMonth($prev = 0, $field = false) + public static function avgByMonth($field, $prev = 0, $fieldDate = 'created_at') { - $start = Carbon::now()->startOfMonth($prev); - $end = Carbon::now()->endOfMonth($prev); + $start = Carbon::now()->subMonths($prev)->startOfMonth(); + $end = Carbon::now()->subMonths($prev)->endOfMonth(); - return self::avgByPeriod($start, $end, $field); + return self::avgByPeriod($start, $end, $field, $fieldDate); } - public static function avgByPeriod($start, $end, $field) + public static function avgByDay($field, $prev = 0, $fieldDate = 'created_at') + { + $start = Carbon::now()->subDays($prev)->startOfMonth(); + $end = Carbon::now()->subDays($prev)->endOfMonth(); + + return self::avgByPeriod($start, $end, $field, $fieldDate); + } + + public static function avgByPeriod($start, $end, $field, $fieldDate = 'created_at') { $c = self::countByPeriod($start, $end); - return $c ? round(self::sumByPeriod($start, $end, $field) / $c, 2) : 0; + return $c ? round(self::sumByPeriod($start, $end, $field, $fieldDate) / $c, 2) : 0; } - public static function sumByMonth($prev = 0, $field = false) + public static function sumByMonth($field, $prev = 0, $fieldDate = 'created_at') { - $start = Carbon::now()->startOfMonth($prev); - $end = Carbon::now()->endOfMonth($prev); + $start = Carbon::now()->subMonths($prev)->startOfMonth(); + $end = Carbon::now()->subMonths($prev)->endOfMonth(); - return self::sumByPeriod($start, $end, $field); + return self::sumByPeriod($start, $end, $field, $fieldDate); } - public static function sumByPeriod($start, $end, $field = 'created_at') + public static function sumByDay($field, $prev = 0, $fieldDate = 'created_at') { - return self::getModel()->whereBetween($field, [$start, $end])->sum($field); + $start = Carbon::now()->subDays($prev)->startOfDay(); + $end = Carbon::now()->subDays($prev)->endOfDay(); + + return self::sumByPeriod($start, $end, $field, $fieldDate); + } + + public static function sumByPeriod($start, $end, $field, $fieldDate = 'created_at') + { + return self::getModel()->whereBetween($fieldDate, [$start, $end])->sum($field); } public static function getModel() diff --git a/app/Repositories/Shop/OrderStatistics.php b/app/Repositories/Shop/OrderStatistics.php index 317ce2fa..2939ea14 100644 --- a/app/Repositories/Shop/OrderStatistics.php +++ b/app/Repositories/Shop/OrderStatistics.php @@ -4,10 +4,21 @@ namespace App\Repositories\Shop; use App\Models\Shop\Order; use App\Repositories\Core\DateStats; +use App\Traits\Model\Basic; class OrderStatistics { - use DateStats; + use Basic, DateStats; + + public static function getTotalDaily() + { + return self::sumDaily('total_taxed'); + } + + public static function getTotalMonthly() + { + return self::sumMonthly('total_taxed'); + } public static function countPreparationLess2Days() { @@ -49,4 +60,9 @@ class OrderStatistics { return Order::ofLastMonth()->sum('total_taxed'); } + + public static function getModel() + { + return Order::query(); + } } diff --git a/resources/views/Admin/Shop/Dashboard/_partials/salesByPeriod.blade.php b/resources/views/Admin/Shop/Dashboard/_partials/salesByPeriod.blade.php index 47fa0fea..b497fc80 100644 --- a/resources/views/Admin/Shop/Dashboard/_partials/salesByPeriod.blade.php +++ b/resources/views/Admin/Shop/Dashboard/_partials/salesByPeriod.blade.php @@ -1,40 +1,40 @@
-
-
-
-

Evolution du CA

+
+
+
+

Evolution du CA

-
- -
- - -
- -
-
- -
-
-
- @include('Admin.Shop.Dashboard.components.chart') -
-
-
- -
-
+
+ +
+ + +
+ +
+
+ +
+
+
+ {!! $chart->container() !!} +
+
+
+ +
+
diff --git a/resources/views/Admin/Shop/Dashboard/index.blade.php b/resources/views/Admin/Shop/Dashboard/index.blade.php index 0a7fe50c..7ed7c238 100644 --- a/resources/views/Admin/Shop/Dashboard/index.blade.php +++ b/resources/views/Admin/Shop/Dashboard/index.blade.php @@ -1,11 +1,10 @@ @extends('layout.index', [ 'title' => __('Core.dashboard'), -]) +]) @include('boilerplate::logs.style') @section('content') -
@@ -23,16 +22,17 @@ @include('Admin.Shop.Dashboard._partials.counter')
- @include('Admin.Shop.Dashboard._partials.report') + @include('Admin.Shop.Dashboard._partials.report')
- @endsection @include('load.form.daterangepicker') @push('js') + @apexchartsScripts + {!! $chart->script() !!} -@endpush \ No newline at end of file +@endpush