add graphs for stats
This commit is contained in:
23
app/Charts/Shop/Order.php
Normal file
23
app/Charts/Shop/Order.php
Normal file
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\Charts\Shop;
|
||||
|
||||
use Akaunting\Apexcharts\Chart;
|
||||
use App\Repositories\Shop\OrderStatistics;
|
||||
|
||||
class Order
|
||||
{
|
||||
public static function getMonthly()
|
||||
{
|
||||
$data = OrderStatistics::getTotalMonthly();
|
||||
|
||||
return (new Chart)->setType('bar')
|
||||
->setWidth('100%')
|
||||
->setHeight(300)
|
||||
->setLabels(array_keys($data))
|
||||
->setDataset('CA', 'bar', array_values($data))
|
||||
->setColor('#334F17')
|
||||
->setStrokeColors(['#527C39'])
|
||||
;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
@include('Admin.Shop.Dashboard.components.chart')
|
||||
{!! $chart->container() !!}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
@include('boilerplate::logs.style')
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="btn-group mb-3" role="group" aria-label="" class="d-none">
|
||||
<button type="button" class="btn btn-sm btn-secondary text-nowrap" data-id="day">jour</button>
|
||||
<button type="button" class="btn btn-sm btn-secondary text-nowrap" data-id="month">mois</button>
|
||||
@@ -26,12 +25,13 @@
|
||||
@include('Admin.Shop.Dashboard._partials.report')
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
|
||||
@include('load.form.daterangepicker')
|
||||
|
||||
@push('js')
|
||||
@apexchartsScripts
|
||||
{!! $chart->script() !!}
|
||||
<script>
|
||||
initDaterangepicker();
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user