From 90914793ff7170bf421dcfc2146943c9b6e9df03 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Tue, 7 Jan 2025 10:04:56 +0330 Subject: [PATCH 1/5] create report system --- .../V3/Reports/RoadItemsReportController.php | 215 ++++++++++++++++++ .../V3/Reports/RoadPatrolReportController.php | 44 ++++ routes/v3.php | 23 ++ storage/sql-files/edarate_shahri.sql | 1 + 4 files changed, 283 insertions(+) create mode 100644 app/Http/Controllers/V3/Reports/RoadItemsReportController.php create mode 100644 app/Http/Controllers/V3/Reports/RoadPatrolReportController.php diff --git a/app/Http/Controllers/V3/Reports/RoadItemsReportController.php b/app/Http/Controllers/V3/Reports/RoadItemsReportController.php new file mode 100644 index 00000000..777dd568 --- /dev/null +++ b/app/Http/Controllers/V3/Reports/RoadItemsReportController.php @@ -0,0 +1,215 @@ +groupBy('item')->get(); + + return $this->successResponse([ + 'items' => $items, + 'data' => $data, + ]); + } + + public function getItems(Request $request): JsonResponse + { + $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); + $toDate = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); + $item = $request->item; + + $all = RoadItemsProject::query()->selectRaw(' + sub_item AS t, + COUNT(*) AS c, + CAST(SUM(CASE WHEN sub_item_data > 0 THEN sub_item_data ELSE ABS(sub_item_data) END) AS UNSIGNED) AS s, + province_id AS p') + ->where('item', '=', $item) + ->whereBetween('activity_date_time', [$fromDate, $toDate]) + ->where('status', '=', 1) + ->groupBy('province_id', 'sub_item') + ->get(); + + $country = RoadItemsProject::query()->selectRaw(' + sub_item AS t, + COUNT(*) AS c, + CAST(SUM(CASE WHEN sub_item_data > 0 THEN sub_item_data ELSE ABS(sub_item_data) END) AS UNSIGNED) AS s, + -1 AS p') + ->where('item', '=', $item) + ->whereBetween('activity_date_time', [$fromDate, $toDate]) + ->where('status', '=', 1) + ->groupBy('sub_item') + ->get(); + + $itemsFa = InfoItem::query()->where('item', '=', $item)->get()->keyBy('sub_item'); + + $all->each(function ($value) use ($itemsFa) { + if (isset($itemsFa[$value->t])) { + $value->u = $itemsFa[$value->t]->sub_item_unit; + } + }); + + return $this->successResponse([ + 'data' => $all, + 'country' => $country, + 'items_fa' => $itemsFa + ]); + } + + public function getItemsCity(Request $request): JsonResponse + { + $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); + $toDate = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); + $item = $request->item; + $province = $request->province_id; + + $all = RoadItemsProject::query()->selectRaw(' + sub_item AS t, + COUNT(*) AS c, + CAST(SUM(CASE WHEN sub_item_data > 0 THEN sub_item_data ELSE ABS(sub_item_data) END) AS UNSIGNED) AS s, + province_id AS p, + edarat_id AS ci + ') + ->where('item', '=', $item) + ->where('province_id', '=', $province) + ->whereBetween('activity_date_time', [$fromDate, $toDate]) + ->where('status', '=', 1) + ->groupBy('edarat_id', 'sub_item') + ->get(); + + $itemsFa = InfoItem::where('item', $item)->get()->keyBy('sub_item'); + + $all->each(function ($value) use ($itemsFa) { + if (isset($itemsFa[$value->t])) { + $value->u = $itemsFa[$value->t]->sub_item_unit; + } + }); + + return $this->successResponse([ + 'data' => $all, + 'items_fa' => $itemsFa + ]); + } + + public function provinceExcel(Request $request): JsonResponse + { + if (auth()->check()) { + auth()->user()->addActivityComplete(1033); + } + + $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); + $toDate = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); + $user = auth()->user(); + $isSpecialUser = in_array($user->username, ['witel', 'drdanesh']); + $provinceId = $isSpecialUser ? null : $user->province_id; + + // Base queries + $roadItemsProjectsQuery = RoadItemsProject::query() + ->selectRaw('COUNT(*) AS s, province_id AS p, item AS i') + ->where('status', 1) + ->whereBetween('activity_date_time', [$fromDate, $toDate]) + ->when(!$isSpecialUser, function ($query) use ($provinceId) { + $query->where('province_id', $provinceId); + }) + ->groupBy('province_id', 'item'); + + $roadPatrolsQuery = RoadPatrol::query() + ->selectRaw('COUNT(*) AS s, province_id AS p, 77 AS i') + ->whereBetween('start_time', [$fromDate, $toDate]) + ->when(!$isSpecialUser, function ($query) use ($provinceId) { + $query->where('province_id', $provinceId); + }) + ->groupBy('province_id'); + + $roadItemsProjectsSummaryQuery = RoadItemsProject::query() + ->selectRaw('COUNT(*) AS s, -1 AS p, item AS i') + ->where('status', 1) + ->whereBetween('activity_date_time', [$fromDate, $toDate]) + ->when(!$isSpecialUser, function ($query) use ($provinceId) { + $query->where('province_id', $provinceId); + }) + ->groupBy('item'); + + $roadPatrolsSummaryQuery = RoadPatrol::query() + ->selectRaw('COUNT(*) AS s, -1 AS p, 77 AS i') + ->whereBetween('start_time', [$fromDate, $toDate]) + ->when(!$isSpecialUser, function ($query) use ($provinceId) { + $query->where('province_id', $provinceId); + }); + + // Combine queries using UNION ALL + $data = $roadItemsProjectsQuery + ->unionAll($roadPatrolsQuery) + ->unionAll($roadItemsProjectsSummaryQuery) + ->unionAll($roadPatrolsSummaryQuery) + ->get(); + + return $this->successResponse($data); + } + + public function cityExcel(Request $request): JsonResponse + { + $provinceId = $request->province_id; + $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); + $toDate = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); + + $roadItemsProjectsQuery = RoadItemsProject::query() + ->selectRaw(' + COUNT(*) AS s, + edarat_id AS c, + item AS i') + ->where('status', '=', 1) + ->whereBetween('activity_date_time', [$fromDate, $toDate]) + ->where('province_id', $provinceId) + ->groupBy('item', 'edarat_id'); + + $roadPatrolsQuery = RoadPatrol::query() + ->selectRaw(' + COUNT(*) AS s, + edare_id AS c, + 77 AS i') + ->whereBetween('start_time', [$fromDate, $toDate]) + ->where('province_id', '=', $provinceId) + ->groupBy('edare_id'); + + $data = $roadItemsProjectsQuery + ->unionAll($roadPatrolsQuery) + ->get(); + + return $this->successResponse($data); + } + + public function map(Request $request): JsonResponse + { + $provinceId = $request->province_id; + $cityId = $request->city_id; + $subId = $request->sub_id; + $dateFrom = $request->date_from ? $request->date_from . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); + $dateTo = $request->date_to ? $request->date_to . ' 23:59:59' : now()->addDay()->startOfDay()->toDateTimeString(); + + $data = RoadItemsProject::query() + ->where('is_new', '=', 1) + ->when($provinceId, fn($query) => $query->where('province_id', '=', $provinceId)) + ->when($cityId, fn($query) => $query->where('city_id', '=', $cityId)) + ->when($subId, fn($query) => $query->where('sub_items', 'like', '%' . $subId . '%')) + ->when($request->item, fn($query) => $query->where('item', '=', $request->item)) + ->when(!is_null($request->status), fn($query) => $query->where('status', '=', $request->status)) + ->whereBetween('activity_date', [$dateFrom, $dateTo]) + ->leftJoin('users', 'users.id', '=', 'road_items_projects.user_id') + ->select('road_items_projects.id as i', 'start_lat as l', 'start_lng as g', 'status') + ->get(); + + return $this->successResponse($data); + } +} diff --git a/app/Http/Controllers/V3/Reports/RoadPatrolReportController.php b/app/Http/Controllers/V3/Reports/RoadPatrolReportController.php new file mode 100644 index 00000000..4c56abac --- /dev/null +++ b/app/Http/Controllers/V3/Reports/RoadPatrolReportController.php @@ -0,0 +1,44 @@ +from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); + $dateTo = $request->date_to ? $request->date_to . ' 23:59:59' : now()->addDay()->startOfDay()->toDateTimeString(); + + $data = RoadPatrolProject::provincePatrolData($fromDate, $dateTo); + return $this->successResponse($data); + } + + public function edarehPatrolData(Request $request): JsonResponse + { + $request->validate(["province_id" => "required",]); + $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); + $dateTo = $request->date_to ? $request->date_to . ' 23:59:59' : now()->addDay()->startOfDay()->toDateTimeString(); + + $data = RoadPatrolProject::edarehPatrolData($fromDate, $dateTo, $request->province_id); + return $this->successResponse($data); + } + + public function roadPatrolsReportTable(Request $request): BinaryFileResponse + { + $name = 'گزارش از گشت راهداری و ترابری ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; + + return Excel::download( + new RoadPatrolTable($request->from_date, $request->date_to), $name + ); + } +} diff --git a/routes/v3.php b/routes/v3.php index 405f76c8..08ea3979 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -10,6 +10,8 @@ use App\Http\Controllers\V3\Harim\DivarkeshiController; use App\Http\Controllers\V3\ObservedItemController; use App\Http\Controllers\V3\ProfileController; use App\Http\Controllers\V3\RahdaranController; +use App\Http\Controllers\V3\Reports\RoadItemsReportController; +use App\Http\Controllers\V3\Reports\RoadPatrolReportController; use App\Http\Controllers\V3\RoadItemsProjectController; use App\Http\Controllers\V3\RoadPatrolProjectController; use Illuminate\Support\Facades\Route; @@ -187,3 +189,24 @@ Route::prefix('observed_items') Route::get('/filter', 'filter')->name('filter'); Route::get('/{observedItem}', 'show')->name('show'); }); + +Route::prefix('road_item_reports') + ->name('roadItemReports.') + ->controller(RoadItemsReportController::class) + ->group(function () { + Route::get('/get_sub_items', 'getSubItems')->name('getSubItems'); + Route::get('/get_items', 'getItems')->name('getItems'); + Route::get('/get_items_city', 'getItemsCity')->name('getItemsCity'); + Route::get('/province_excel', 'provinceExcel')->name('provinceExcel'); + Route::get('/city_excel', 'cityExcel')->name('cityExcel'); + Route::get('/map', 'map')->name('map'); + }); + +Route::prefix('road_patrol_reports') + ->name('roadPatrolReports.') + ->controller(RoadPatrolReportController::class) + ->group(function () { + Route::get('/province_data', 'provincePatrolData')->name('provincePatrolData'); + Route::get('/edareh_data', 'edarehPatrolData')->name('edarehPatrolData'); + Route::get('/report_excel', 'roadPatrolsReportTable')->name('roadPatrolsReportTable'); + }); diff --git a/storage/sql-files/edarate_shahri.sql b/storage/sql-files/edarate_shahri.sql index b61474b3..85a2b042 100644 --- a/storage/sql-files/edarate_shahri.sql +++ b/storage/sql-files/edarate_shahri.sql @@ -520,3 +520,4 @@ INSERT INTO edarate_shahri (name_fa,province_id,created_at,updated_at) VALUES ('اداره خمام',28,'2023-06-17 08:43:14','2023-06-17 08:43:14'), ('اداره اصلاندوز',3,'2023-08-15 09:33:55','2023-08-15 09:33:55'); ('اداره گالیکش',27,'2024-11-16 14:33:55','2024-11-16 14:33:55'); + ('آزادراه ساوه-تهران',32,'2025-01-06 14:33:55','2025-01-06 14:33:55'); From 53dd73103bc1ba9e0d2d7939f49f0c7bba14c4bc Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Tue, 7 Jan 2025 16:06:22 +0330 Subject: [PATCH 2/5] remove road patrol summary --- .../V3/Reports/RoadItemsReportController.php | 40 ++++++------------- routes/v3.php | 4 +- 2 files changed, 14 insertions(+), 30 deletions(-) diff --git a/app/Http/Controllers/V3/Reports/RoadItemsReportController.php b/app/Http/Controllers/V3/Reports/RoadItemsReportController.php index 777dd568..8a18b684 100644 --- a/app/Http/Controllers/V3/Reports/RoadItemsReportController.php +++ b/app/Http/Controllers/V3/Reports/RoadItemsReportController.php @@ -102,7 +102,7 @@ class RoadItemsReportController extends Controller ]); } - public function provinceExcel(Request $request): JsonResponse + public function activityStatisticsPerProvince(Request $request): JsonResponse { if (auth()->check()) { auth()->user()->addActivityComplete(1033); @@ -124,14 +124,6 @@ class RoadItemsReportController extends Controller }) ->groupBy('province_id', 'item'); - $roadPatrolsQuery = RoadPatrol::query() - ->selectRaw('COUNT(*) AS s, province_id AS p, 77 AS i') - ->whereBetween('start_time', [$fromDate, $toDate]) - ->when(!$isSpecialUser, function ($query) use ($provinceId) { - $query->where('province_id', $provinceId); - }) - ->groupBy('province_id'); - $roadItemsProjectsSummaryQuery = RoadItemsProject::query() ->selectRaw('COUNT(*) AS s, -1 AS p, item AS i') ->where('status', 1) @@ -141,24 +133,14 @@ class RoadItemsReportController extends Controller }) ->groupBy('item'); - $roadPatrolsSummaryQuery = RoadPatrol::query() - ->selectRaw('COUNT(*) AS s, -1 AS p, 77 AS i') - ->whereBetween('start_time', [$fromDate, $toDate]) - ->when(!$isSpecialUser, function ($query) use ($provinceId) { - $query->where('province_id', $provinceId); - }); - - // Combine queries using UNION ALL $data = $roadItemsProjectsQuery - ->unionAll($roadPatrolsQuery) ->unionAll($roadItemsProjectsSummaryQuery) - ->unionAll($roadPatrolsSummaryQuery) ->get(); return $this->successResponse($data); } - public function cityExcel(Request $request): JsonResponse + public function activityStatisticsPerCity(Request $request): JsonResponse { $provinceId = $request->province_id; $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); @@ -174,17 +156,18 @@ class RoadItemsReportController extends Controller ->where('province_id', $provinceId) ->groupBy('item', 'edarat_id'); - $roadPatrolsQuery = RoadPatrol::query() + $roadItemsProjectsSummaryQuery = RoadItemsProject::query() ->selectRaw(' COUNT(*) AS s, - edare_id AS c, - 77 AS i') - ->whereBetween('start_time', [$fromDate, $toDate]) - ->where('province_id', '=', $provinceId) - ->groupBy('edare_id'); + -1 AS c, + item AS i') + ->where('status', '=', 1) + ->whereBetween('activity_date_time', [$fromDate, $toDate]) + ->where('province_id', $provinceId) + ->groupBy('item'); $data = $roadItemsProjectsQuery - ->unionAll($roadPatrolsQuery) + ->unionAll($roadItemsProjectsSummaryQuery) ->get(); return $this->successResponse($data); @@ -195,6 +178,7 @@ class RoadItemsReportController extends Controller $provinceId = $request->province_id; $cityId = $request->city_id; $subId = $request->sub_id; + $item = $request->item; $dateFrom = $request->date_from ? $request->date_from . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); $dateTo = $request->date_to ? $request->date_to . ' 23:59:59' : now()->addDay()->startOfDay()->toDateTimeString(); @@ -203,7 +187,7 @@ class RoadItemsReportController extends Controller ->when($provinceId, fn($query) => $query->where('province_id', '=', $provinceId)) ->when($cityId, fn($query) => $query->where('city_id', '=', $cityId)) ->when($subId, fn($query) => $query->where('sub_items', 'like', '%' . $subId . '%')) - ->when($request->item, fn($query) => $query->where('item', '=', $request->item)) + ->when($item, fn($query) => $query->where('item', '=', $item)) ->when(!is_null($request->status), fn($query) => $query->where('status', '=', $request->status)) ->whereBetween('activity_date', [$dateFrom, $dateTo]) ->leftJoin('users', 'users.id', '=', 'road_items_projects.user_id') diff --git a/routes/v3.php b/routes/v3.php index 08ea3979..079d83c2 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -197,8 +197,8 @@ Route::prefix('road_item_reports') Route::get('/get_sub_items', 'getSubItems')->name('getSubItems'); Route::get('/get_items', 'getItems')->name('getItems'); Route::get('/get_items_city', 'getItemsCity')->name('getItemsCity'); - Route::get('/province_excel', 'provinceExcel')->name('provinceExcel'); - Route::get('/city_excel', 'cityExcel')->name('cityExcel'); + Route::get('/province_statistics', 'activityStatisticsPerProvince')->name('activityStatisticsPerProvince'); + Route::get('/city_statistics', 'activityStatisticsPerCity')->name('activityStatisticsPerCity'); Route::get('/map', 'map')->name('map'); }); From 6b310a099a7d93600fa47814f6d73216aec8fb62 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Tue, 7 Jan 2025 16:53:15 +0330 Subject: [PATCH 3/5] write meaningful names --- .../V3/Reports/RoadItemsReportController.php | 36 +++++++++---------- routes/v3.php | 4 +-- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/app/Http/Controllers/V3/Reports/RoadItemsReportController.php b/app/Http/Controllers/V3/Reports/RoadItemsReportController.php index 8a18b684..c5be196a 100644 --- a/app/Http/Controllers/V3/Reports/RoadItemsReportController.php +++ b/app/Http/Controllers/V3/Reports/RoadItemsReportController.php @@ -24,13 +24,13 @@ class RoadItemsReportController extends Controller ]); } - public function getItems(Request $request): JsonResponse + public function getRoadItemsPerSubItem(Request $request): JsonResponse { $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); $toDate = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); $item = $request->item; - $all = RoadItemsProject::query()->selectRaw(' + $provinceRoadItemsPerSubItem = RoadItemsProject::query()->selectRaw(' sub_item AS t, COUNT(*) AS c, CAST(SUM(CASE WHEN sub_item_data > 0 THEN sub_item_data ELSE ABS(sub_item_data) END) AS UNSIGNED) AS s, @@ -41,7 +41,7 @@ class RoadItemsReportController extends Controller ->groupBy('province_id', 'sub_item') ->get(); - $country = RoadItemsProject::query()->selectRaw(' + $countryRoadItemsPerSubItem = RoadItemsProject::query()->selectRaw(' sub_item AS t, COUNT(*) AS c, CAST(SUM(CASE WHEN sub_item_data > 0 THEN sub_item_data ELSE ABS(sub_item_data) END) AS UNSIGNED) AS s, @@ -52,29 +52,29 @@ class RoadItemsReportController extends Controller ->groupBy('sub_item') ->get(); - $itemsFa = InfoItem::query()->where('item', '=', $item)->get()->keyBy('sub_item'); + $infoItems = InfoItem::query()->where('item', '=', $item)->get()->keyBy('sub_item'); - $all->each(function ($value) use ($itemsFa) { - if (isset($itemsFa[$value->t])) { - $value->u = $itemsFa[$value->t]->sub_item_unit; + $provinceRoadItemsPerSubItem->each(function ($value) use ($infoItems) { + if (isset($infoItems[$value->t])) { + $value->u = $infoItems[$value->t]->sub_item_unit; } }); return $this->successResponse([ - 'data' => $all, - 'country' => $country, - 'items_fa' => $itemsFa + 'provincesData' => $provinceRoadItemsPerSubItem, + 'countryData' => $countryRoadItemsPerSubItem, + 'items' => $infoItems ]); } - public function getItemsCity(Request $request): JsonResponse + public function getCityRoadItemsPerSubItem(Request $request): JsonResponse { $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); $toDate = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); $item = $request->item; $province = $request->province_id; - $all = RoadItemsProject::query()->selectRaw(' + $cityRoadItemsPerSubItem = RoadItemsProject::query()->selectRaw(' sub_item AS t, COUNT(*) AS c, CAST(SUM(CASE WHEN sub_item_data > 0 THEN sub_item_data ELSE ABS(sub_item_data) END) AS UNSIGNED) AS s, @@ -88,17 +88,17 @@ class RoadItemsReportController extends Controller ->groupBy('edarat_id', 'sub_item') ->get(); - $itemsFa = InfoItem::where('item', $item)->get()->keyBy('sub_item'); + $items = InfoItem::where('item', $item)->get()->keyBy('sub_item'); - $all->each(function ($value) use ($itemsFa) { - if (isset($itemsFa[$value->t])) { - $value->u = $itemsFa[$value->t]->sub_item_unit; + $cityRoadItemsPerSubItem->each(function ($value) use ($items) { + if (isset($items[$value->t])) { + $value->u = $items[$value->t]->sub_item_unit; } }); return $this->successResponse([ - 'data' => $all, - 'items_fa' => $itemsFa + 'citiesData' => $cityRoadItemsPerSubItem, + 'items' => $items ]); } diff --git a/routes/v3.php b/routes/v3.php index 079d83c2..c8a023a6 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -195,8 +195,8 @@ Route::prefix('road_item_reports') ->controller(RoadItemsReportController::class) ->group(function () { Route::get('/get_sub_items', 'getSubItems')->name('getSubItems'); - Route::get('/get_items', 'getItems')->name('getItems'); - Route::get('/get_items_city', 'getItemsCity')->name('getItemsCity'); + Route::get('/get_items', 'getRoadItemsPerSubItem')->name('getRoadItemsPerSubItem'); + Route::get('/get_items_city', 'getCityRoadItemsPerSubItem')->name('getCityRoadItemsPerSubItem'); Route::get('/province_statistics', 'activityStatisticsPerProvince')->name('activityStatisticsPerProvince'); Route::get('/city_statistics', 'activityStatisticsPerCity')->name('activityStatisticsPerCity'); Route::get('/map', 'map')->name('map'); From 72717a19fdb6bf867c474f4d15730191cc299229 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Wed, 8 Jan 2025 13:30:48 +0330 Subject: [PATCH 4/5] change functions name --- .../V3/Reports/RoadItemsReportController.php | 27 +++++++++++++------ .../V3/Reports/RoadPatrolReportController.php | 4 +-- routes/v3.php | 8 +++--- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/app/Http/Controllers/V3/Reports/RoadItemsReportController.php b/app/Http/Controllers/V3/Reports/RoadItemsReportController.php index c5be196a..d89dbb3b 100644 --- a/app/Http/Controllers/V3/Reports/RoadItemsReportController.php +++ b/app/Http/Controllers/V3/Reports/RoadItemsReportController.php @@ -4,7 +4,9 @@ namespace App\Http\Controllers\V3\Reports; use App\Http\Controllers\Controller; use App\Http\Traits\ApiResponse; +use App\Models\EdarateShahri; use App\Models\InfoItem; +use App\Models\Province; use App\Models\RoadItemsProject; use App\Models\RoadPatrol; use Illuminate\Http\JsonResponse; @@ -24,7 +26,7 @@ class RoadItemsReportController extends Controller ]); } - public function getRoadItemsPerSubItem(Request $request): JsonResponse + public function provinceActivityPerSubItem(Request $request): JsonResponse { $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); $toDate = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); @@ -67,7 +69,7 @@ class RoadItemsReportController extends Controller ]); } - public function getCityRoadItemsPerSubItem(Request $request): JsonResponse + public function cityActivityPerSubItem(Request $request): JsonResponse { $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); $toDate = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); @@ -88,7 +90,7 @@ class RoadItemsReportController extends Controller ->groupBy('edarat_id', 'sub_item') ->get(); - $items = InfoItem::where('item', $item)->get()->keyBy('sub_item'); + $items = InfoItem::query()->where('item', $item)->get()->keyBy('sub_item'); $cityRoadItemsPerSubItem->each(function ($value) use ($items) { if (isset($items[$value->t])) { @@ -102,7 +104,7 @@ class RoadItemsReportController extends Controller ]); } - public function activityStatisticsPerProvince(Request $request): JsonResponse + public function provinceActivityPerItem(Request $request): JsonResponse { if (auth()->check()) { auth()->user()->addActivityComplete(1033); @@ -114,7 +116,6 @@ class RoadItemsReportController extends Controller $isSpecialUser = in_array($user->username, ['witel', 'drdanesh']); $provinceId = $isSpecialUser ? null : $user->province_id; - // Base queries $roadItemsProjectsQuery = RoadItemsProject::query() ->selectRaw('COUNT(*) AS s, province_id AS p, item AS i') ->where('status', 1) @@ -137,10 +138,15 @@ class RoadItemsReportController extends Controller ->unionAll($roadItemsProjectsSummaryQuery) ->get(); - return $this->successResponse($data); + $provinces = Province::all(['id', 'name']); + + return $this->successResponse([ + 'activities' => $data, + 'provinces' => $provinces, + ]); } - public function activityStatisticsPerCity(Request $request): JsonResponse + public function cityActivityPerItem(Request $request): JsonResponse { $provinceId = $request->province_id; $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); @@ -170,7 +176,12 @@ class RoadItemsReportController extends Controller ->unionAll($roadItemsProjectsSummaryQuery) ->get(); - return $this->successResponse($data); + $edarateShahri = EdarateShahri::all(['id', 'name'])->where('province_id', $provinceId); + + return $this->successResponse([ + 'activities' => $data, + 'edaratShahri' => $edarateShahri, + ]); } public function map(Request $request): JsonResponse diff --git a/app/Http/Controllers/V3/Reports/RoadPatrolReportController.php b/app/Http/Controllers/V3/Reports/RoadPatrolReportController.php index 4c56abac..16f85d01 100644 --- a/app/Http/Controllers/V3/Reports/RoadPatrolReportController.php +++ b/app/Http/Controllers/V3/Reports/RoadPatrolReportController.php @@ -17,7 +17,7 @@ class RoadPatrolReportController extends Controller public function provincePatrolData(Request $request): JsonResponse { $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); - $dateTo = $request->date_to ? $request->date_to . ' 23:59:59' : now()->addDay()->startOfDay()->toDateTimeString(); + $dateTo = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); $data = RoadPatrolProject::provincePatrolData($fromDate, $dateTo); return $this->successResponse($data); @@ -27,7 +27,7 @@ class RoadPatrolReportController extends Controller { $request->validate(["province_id" => "required",]); $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); - $dateTo = $request->date_to ? $request->date_to . ' 23:59:59' : now()->addDay()->startOfDay()->toDateTimeString(); + $dateTo = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); $data = RoadPatrolProject::edarehPatrolData($fromDate, $dateTo, $request->province_id); return $this->successResponse($data); diff --git a/routes/v3.php b/routes/v3.php index c8a023a6..198fc35d 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -195,10 +195,10 @@ Route::prefix('road_item_reports') ->controller(RoadItemsReportController::class) ->group(function () { Route::get('/get_sub_items', 'getSubItems')->name('getSubItems'); - Route::get('/get_items', 'getRoadItemsPerSubItem')->name('getRoadItemsPerSubItem'); - Route::get('/get_items_city', 'getCityRoadItemsPerSubItem')->name('getCityRoadItemsPerSubItem'); - Route::get('/province_statistics', 'activityStatisticsPerProvince')->name('activityStatisticsPerProvince'); - Route::get('/city_statistics', 'activityStatisticsPerCity')->name('activityStatisticsPerCity'); + Route::get('/get_items', 'provinceActivityPerSubItem')->name('provinceActivityPerSubItem'); + Route::get('/get_items_city', 'cityActivityPerSubItem')->name('cityActivityPerSubItem'); + Route::get('/province_statistics', 'provinceActivityPerItem')->name('provinceActivityPerItem'); + Route::get('/city_statistics', 'cityActivityPerItem')->name('cityActivityPerItem'); Route::get('/map', 'map')->name('map'); }); From f260fdc9de047a8c09d72a07129d41e5dfe1479c Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Wed, 8 Jan 2025 14:16:10 +0330 Subject: [PATCH 5/5] bugfix --- app/Http/Controllers/V3/Reports/RoadItemsReportController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/V3/Reports/RoadItemsReportController.php b/app/Http/Controllers/V3/Reports/RoadItemsReportController.php index d89dbb3b..24e7c32c 100644 --- a/app/Http/Controllers/V3/Reports/RoadItemsReportController.php +++ b/app/Http/Controllers/V3/Reports/RoadItemsReportController.php @@ -138,7 +138,7 @@ class RoadItemsReportController extends Controller ->unionAll($roadItemsProjectsSummaryQuery) ->get(); - $provinces = Province::all(['id', 'name']); + $provinces = Province::all(['id', 'name_fa']); return $this->successResponse([ 'activities' => $data, @@ -176,7 +176,7 @@ class RoadItemsReportController extends Controller ->unionAll($roadItemsProjectsSummaryQuery) ->get(); - $edarateShahri = EdarateShahri::all(['id', 'name'])->where('province_id', $provinceId); + $edarateShahri = EdarateShahri::query()->where('province_id', '=', $provinceId)->get(['id', 'name']); return $this->successResponse([ 'activities' => $data,