diff --git a/app/Http/Controllers/Reports/MonthlyReportController.php b/app/Http/Controllers/Reports/MonthlyReportController.php index b38edcf0..c00fc588 100644 --- a/app/Http/Controllers/Reports/MonthlyReportController.php +++ b/app/Http/Controllers/Reports/MonthlyReportController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\Reports; +use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\BusinessType; use App\Classes\ValueObjects\Constants\HttpStatus; use App\Classes\ValueObjects\Constants\PackingListType; @@ -10,13 +11,14 @@ use App\Models\Company; use App\Models\CompanyModule; use App\Models\Container; use App\Models\Order; +use App\Models\Package; use Carbon\Carbon; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; class MonthlyReportController { - public function report(Request $request): JsonResponse { + public function salesReport(Request $request): JsonResponse { $today = Carbon::now()->subMonth(); $containers = Container::whereMonth('loading_date', $today->format('m'))->whereYear('loading_date', $today->format('Y'))->orderBy('loading_date')->get(); @@ -30,7 +32,7 @@ class MonthlyReportController }); $customers = $containers->flatMap(function($container){ - return $container->companyModules; + return $container->companyModules; })->unique(); $orders = $containers->flatMap(function($container){ @@ -53,4 +55,33 @@ class MonthlyReportController 'total_orders' => Order::whereMonth('created_at', $today->format('m'))->whereYear('created_at', $today->format('Y'))->count() ]]))->handler(); } + + public function serviceReport(Request $request): JsonResponse { + + return (new ApiResponseObject('fetch service report Successful', + '', + HttpStatus::OK_WITH_MESSAGE, ['data' => [ + 'received' => Package::whereHas('packingList', function($query){ + return $query->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST); + })->sum('quantity'), + 'pending_shipment' => Package::whereDoesntHave('shippingSchedules', function($schedule){ + return $schedule->where('etd', '<', Carbon::now())->where('schedules.status', ApprovalStatus::APPROVED); + })->sum('quantity'), + 'in_transit' => Package::whereHas('shippingSchedules', function($schedule){ + return $schedule->where('etd', '<', Carbon::now())->where('schedules.status', ApprovalStatus::APPROVED); + })->whereDoesntHave('shippingTransports', function($transport){ + return $transport->where('transport_arrangements.status', ApprovalStatus::COMPLETED); + })->sum('quantity'), + 'pending_delivery' => Package::whereHas('shippingTransports', function($transport){ + return $transport->where('transport_arrangements.status', ApprovalStatus::COMPLETED); + })->whereDoesntHave('deliverySchedules', function($schedule){ + return $schedule->where('etd', '<', Carbon::now())->where('schedules.status', ApprovalStatus::APPROVED); + })->sum('quantity'), + 'delivered' => Package::whereHas('shippingSchedules', function($schedule){ + return $schedule->where('eta', '<', Carbon::now())->where('schedules.status', ApprovalStatus::APPROVED); + })->whereHas('deliverySchedules', function($schedule){ + return $schedule->where('etd', '<', Carbon::now())->where('schedules.status', ApprovalStatus::APPROVED); + })->sum('quantity'), + ]]))->handler(); + } } diff --git a/resources/assets/vue/components/reports/sections/MonthlyReportSectionComponent.vue b/resources/assets/vue/components/reports/sections/MonthlySalesReportSectionComponent.vue similarity index 99% rename from resources/assets/vue/components/reports/sections/MonthlyReportSectionComponent.vue rename to resources/assets/vue/components/reports/sections/MonthlySalesReportSectionComponent.vue index 48e966d8..cc9bf0eb 100644 --- a/resources/assets/vue/components/reports/sections/MonthlyReportSectionComponent.vue +++ b/resources/assets/vue/components/reports/sections/MonthlySalesReportSectionComponent.vue @@ -189,7 +189,7 @@ methods: { fetchReport(){ this.isLoading = true; - this.submit(route('api.report'), 'get', this.section, false, false) + this.submit(route('api.report.sales'), 'get', this.section, false, false) }, successHandler(response){ this.$store.dispatch('completeList', {'name': this.section, 'data': []}); diff --git a/resources/assets/vue/components/reports/sections/ServiceReportSectionComponent.vue b/resources/assets/vue/components/reports/sections/ServiceReportSectionComponent.vue new file mode 100644 index 00000000..ff2e3815 --- /dev/null +++ b/resources/assets/vue/components/reports/sections/ServiceReportSectionComponent.vue @@ -0,0 +1,206 @@ + + \ No newline at end of file diff --git a/resources/views/pages/admin/dashboard.blade.php b/resources/views/pages/admin/dashboard.blade.php index f5b7df56..e314cdc1 100644 --- a/resources/views/pages/admin/dashboard.blade.php +++ b/resources/views/pages/admin/dashboard.blade.php @@ -2,7 +2,7 @@
- +
@@ -38,6 +38,10 @@
+
+
+ +
\ No newline at end of file diff --git a/routes/api.php b/routes/api.php index 3399972b..ba440e0c 100644 --- a/routes/api.php +++ b/routes/api.php @@ -50,7 +50,8 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function require __DIR__ . '/schedule.php'; - Route::get('/report', 'Reports\MonthlyReportController@report')->name('report'); + Route::get('/report/sales', 'Reports\MonthlyReportController@salesReport')->name('report.sales'); + Route::get('/report/service', 'Reports\MonthlyReportController@serviceReport')->name('report.service'); }); });