diff --git a/app/Http/Controllers/Reports/MonthlyReportController.php b/app/Http/Controllers/Reports/MonthlyReportController.php index 28e09ecf..d58fc8ca 100644 --- a/app/Http/Controllers/Reports/MonthlyReportController.php +++ b/app/Http/Controllers/Reports/MonthlyReportController.php @@ -6,6 +6,7 @@ use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\BusinessType; use App\Classes\ValueObjects\Constants\HttpStatus; use App\Classes\ValueObjects\Response\ApiResponseObject; +use App\Models\CompanyConnection; use App\Models\CompanyModule; use App\Models\Container; use App\Models\Order; @@ -66,6 +67,41 @@ class MonthlyReportController ]]))->handler(); } + public function customerReport(Request $request): JsonResponse { + + $connection = CompanyConnection::where('invitee_reference', $request->route('marking'))->firstOrFail(); + $id = $connection->invitee->id; + + $from = $request->route('from') ? Carbon::parse($request->route('from')) : Carbon::parse('01-01-2018'); + $to = $request->route('to') ? Carbon::parse($request->route('to')) : Carbon::now(); + + $containers = Container::whereBetween('loading_date', [$from, $to])->orderBy('loading_date')->get(); + + $packages = $containers->flatMap(function ($container) { + return $container->packages; + }); + + $packages = $packages->filter(function($package){ + return $package->companyModule->id === $id; + }); + + $orders = $packages->unique(function ($package) { + return $package->order; + }); + + $totalCbm = $packages->sum(function($package){ + return $package->companyModule->id === 108 ? (( (float) $package->width / 100) * ( (float) $package->length / 100) * ( (float) $package->height / 100)) * $package->quantity : 0; + }); + + return (new ApiResponseObject('fetch monthly report Successful', + '', + HttpStatus::OK_WITH_MESSAGE, ['data' => [ + 'activated_orders' => count($orders), + 'total_cbm' => $totalCbm, + 'packages' => $packages->sum('quantity'), + ]]))->handler(); + } + public function serviceReport(Request $request): JsonResponse { return (new ApiResponseObject('fetch service report Successful', diff --git a/resources/assets/vue/components/reports/sections/CustomerReportSectionComponent.vue b/resources/assets/vue/components/reports/sections/CustomerReportSectionComponent.vue new file mode 100644 index 00000000..65eb9cc5 --- /dev/null +++ b/resources/assets/vue/components/reports/sections/CustomerReportSectionComponent.vue @@ -0,0 +1,140 @@ + + \ No newline at end of file diff --git a/resources/views/pages/admin/customers.blade.php b/resources/views/pages/admin/customers.blade.php index 3786d46d..09fd11a0 100644 --- a/resources/views/pages/admin/customers.blade.php +++ b/resources/views/pages/admin/customers.blade.php @@ -2,6 +2,7 @@ @section('inner_content')
+
diff --git a/routes/api.php b/routes/api.php index 66d162a9..973fc0f6 100644 --- a/routes/api.php +++ b/routes/api.php @@ -50,6 +50,7 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function require __DIR__ . '/schedule.php'; + Route::get('/report/customer/{marking}/{from?}/{to?}', 'Reports\MonthlyReportController@customerReport')->name('report.customer'); Route::get('/report/sales/{from?}/{to?}', 'Reports\MonthlyReportController@salesReport')->name('report.sales'); Route::get('/report/service', 'Reports\MonthlyReportController@serviceReport')->name('report.service');