diff --git a/app/Http/Controllers/V3/Azmayesh/AzmayeshController.php b/app/Http/Controllers/V3/Dashboard/Azmayesh/AzmayeshController.php similarity index 98% rename from app/Http/Controllers/V3/Azmayesh/AzmayeshController.php rename to app/Http/Controllers/V3/Dashboard/Azmayesh/AzmayeshController.php index fb3fd81b..72a3bd70 100644 --- a/app/Http/Controllers/V3/Azmayesh/AzmayeshController.php +++ b/app/Http/Controllers/V3/Dashboard/Azmayesh/AzmayeshController.php @@ -1,9 +1,11 @@ groupBy('sub_item') ->get(); - $infoItems = InfoItem::query()->where('item', '=', $item)->get()->keyBy('sub_item'); - $provinceRoadItemsPerSubItem->each(function ($value) use ($infoItems) { - if (isset($infoItems[$value->t])) { - $value->u = $infoItems[$value->t]->sub_item_unit; - } - }); + $activities = $provinceRoadItemsPerSubItem->push(...$countryRoadItemsPerSubItem); + $provinces = Province::all(['id', 'name_fa']); + $subItems = InfoItem::query() + ->where('item', $item) + ->get(['id', 'item', 'item_str', 'sub_item_str', 'sub_item_unit', 'sub_item']); return $this->successResponse([ - 'provincesData' => $provinceRoadItemsPerSubItem, - 'countryData' => $countryRoadItemsPerSubItem, - 'items' => $infoItems + 'activities' => $activities, + 'sub_items' => $subItems, + 'provinces' => $provinces, ]); } @@ -90,17 +91,31 @@ class RoadItemsReportController extends Controller ->groupBy('edarat_id', 'sub_item') ->get(); - $items = InfoItem::query()->where('item', $item)->get()->keyBy('sub_item'); + $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, + province_id AS p, + -1 AS ci + ') + ->where('item', '=', $item) + ->where('province_id', '=', $province) + ->whereBetween('activity_date_time', [$fromDate, $toDate]) + ->where('status', '=', 1) + ->groupBy('sub_item') + ->get(); - $cityRoadItemsPerSubItem->each(function ($value) use ($items) { - if (isset($items[$value->t])) { - $value->u = $items[$value->t]->sub_item_unit; - } - }); + + $edarateShahri = EdarateShahri::query()->where('province_id', '=', $province)->get(['id', 'name_fa']); + $activities = $cityRoadItemsPerSubItem->push(...$provinceRoadItemsPerSubItem); + $subItems = InfoItem::query() + ->where('item', $item) + ->get(['id', 'item', 'item_str', 'sub_item_str', 'sub_item_unit', 'sub_item']); return $this->successResponse([ - 'citiesData' => $cityRoadItemsPerSubItem, - 'items' => $items + 'activities' => $activities, + 'edarateShahri' => $edarateShahri, + 'sub_items' => $subItems, ]); } @@ -113,10 +128,11 @@ class RoadItemsReportController extends Controller $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']); +// $isSpecialUser = in_array($user->username, ['witel', 'drdanesh']); + $isSpecialUser = $user->hasPermissionTo("show-road-item-supervise-cartable"); $provinceId = $isSpecialUser ? null : $user->province_id; - $roadItemsProjectsQuery = RoadItemsProject::query() + $provinceActivity = RoadItemsProject::query() ->selectRaw('COUNT(*) AS s, province_id AS p, item AS i') ->where('status', 1) ->whereBetween('activity_date_time', [$fromDate, $toDate]) @@ -125,7 +141,7 @@ class RoadItemsReportController extends Controller }) ->groupBy('province_id', 'item'); - $roadItemsProjectsSummaryQuery = RoadItemsProject::query() + $countryActivity = RoadItemsProject::query() ->selectRaw('COUNT(*) AS s, -1 AS p, item AS i') ->where('status', 1) ->whereBetween('activity_date_time', [$fromDate, $toDate]) @@ -134,14 +150,14 @@ class RoadItemsReportController extends Controller }) ->groupBy('item'); - $data = $roadItemsProjectsQuery - ->unionAll($roadItemsProjectsSummaryQuery) + $activities = $provinceActivity + ->unionAll($countryActivity) ->get(); $provinces = Province::all(['id', 'name_fa']); return $this->successResponse([ - 'activities' => $data, + 'activities' => $activities, 'provinces' => $provinces, ]); } @@ -152,7 +168,7 @@ class RoadItemsReportController extends Controller $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() + $edarehActivity = RoadItemsProject::query() ->selectRaw(' COUNT(*) AS s, edarat_id AS c, @@ -162,7 +178,7 @@ class RoadItemsReportController extends Controller ->where('province_id', $provinceId) ->groupBy('item', 'edarat_id'); - $roadItemsProjectsSummaryQuery = RoadItemsProject::query() + $cityActivity = RoadItemsProject::query() ->selectRaw(' COUNT(*) AS s, -1 AS c, @@ -172,15 +188,15 @@ class RoadItemsReportController extends Controller ->where('province_id', $provinceId) ->groupBy('item'); - $data = $roadItemsProjectsQuery - ->unionAll($roadItemsProjectsSummaryQuery) + $activities = $edarehActivity + ->unionAll($cityActivity) ->get(); - $edarateShahri = EdarateShahri::query()->where('province_id', '=', $provinceId)->get(['id', 'name']); + $edarateShahri = EdarateShahri::query()->where('province_id', '=', $provinceId)->get(['id', 'name_fa']); return $this->successResponse([ - 'activities' => $data, - 'edaratShahri' => $edarateShahri, + 'activities' => $activities, + 'edarateShahri' => $edarateShahri, ]); } @@ -207,4 +223,39 @@ class RoadItemsReportController extends Controller return $this->successResponse($data); } + + public function activityExcelPerItem(Request $request): BinaryFileResponse + { + auth()->user()->addActivityComplete(1034); + $name = 'گزارش از فعالیت روزانه و جاری - جدول 1 ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; + return Excel::download(new OneSheet($request->fromDate, $request->toDate, $request->province), $name); + } + + public function activityExcelPerSubItem(Request $request) + { + $url_correction = $request->province ? "&province={$request->province}" : ""; + + return match ($request->type) { + 1 => redirect("/reports/two/maremat?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction), + 2 => redirect("/reports/two/paksazi?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction), + 3 => redirect("/reports/two/alaem?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction), + 4 => redirect("/reports/two/hefaz?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction), + 5 => redirect("/reports/two/roshanaei?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction), + 6 => redirect("/reports/two/khatkeshi?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction), + 7 => redirect("/reports/two/rangamizi?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction), + 8 => redirect("/reports/two/shosteshoo?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction), + 9 => redirect("/reports/two/imensazi?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction), + 10 => redirect("/reports/two/harim?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction), + 11 => redirect("/reports/two/pol?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction), + 12 => redirect("/reports/two/toonel?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction), + 13 => redirect("/reports/two/zemestani?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction), + 14 => redirect("/reports/two/mashinalat?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction), + 15 => redirect("/reports/two/rahdar?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction), + 16 => redirect("/reports/two/ezterari?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction), + 20 => redirect("/reports/two/bazrasi?fromDate={$request->fromDate}&toDate={$request->toDate}" . $url_correction), + default => response()->json([ + 'error' => '404' + ], 404), + }; + } } diff --git a/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php new file mode 100644 index 00000000..26e218ba --- /dev/null +++ b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php @@ -0,0 +1,154 @@ +from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); + $dateTo = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); + + $activities = DB::select('SELECT + "کشوری" as province_fa, + -1 as province_id, + COUNT(*) tedade, + SUM(tedad_mavarede_moshede_shode_adi) as tedad_mavarede_moshede_shode_adi, + SUM(tedad_mavarede_moshede_shode_fori) as tedad_mavarede_moshede_shode_fori, + SUM(tedad_mavarede_moshede_shode_ani) as tedad_mavarede_moshede_shode_ani, + SUM(tedad_mavarede_peygiri_shode) as tedad_mavarede_peygiri_shode, + SUM(tedad_faliyat_sabt_shode) as tedad_faliyat_sabt_shode, + ROUND(SUM(distance)) as masafat_tey_shode + FROM (SELECT + province_id, + province_fa, + distance, + (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 1) AS tedad_mavarede_moshede_shode_adi, + (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 2) AS tedad_mavarede_moshede_shode_fori, + (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 3) AS tedad_mavarede_moshede_shode_ani, + (SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NOT NULL) AS tedad_mavarede_peygiri_shode, + (SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NULL) AS tedad_faliyat_sabt_shode + FROM `road_patrols` rp where rp.start_time BETWEEN "'.$fromDate.'" AND "'.$dateTo.'") temp + union + SELECT + province_fa, + province_id, + COUNT(*) tedade, + SUM(tedad_mavarede_moshede_shode_adi) as tedad_mavarede_moshede_shode_adi, + SUM(tedad_mavarede_moshede_shode_fori) as tedad_mavarede_moshede_shode_fori, + SUM(tedad_mavarede_moshede_shode_ani) as tedad_mavarede_moshede_shode_ani, + SUM(tedad_mavarede_peygiri_shode) as tedad_mavarede_peygiri_shode, + SUM(tedad_faliyat_sabt_shode) as tedad_faliyat_sabt_shode, + ROUND(SUM(distance)) as masafat_tey_shode + FROM (SELECT + province_id, + province_fa, + distance, + (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 1) AS tedad_mavarede_moshede_shode_adi, + (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 2) AS tedad_mavarede_moshede_shode_fori, + (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 3) AS tedad_mavarede_moshede_shode_ani, + (SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NOT NULL) AS tedad_mavarede_peygiri_shode, + (SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NULL) AS tedad_faliyat_sabt_shode + FROM `road_patrols` rp where rp.start_time BETWEEN "'.$fromDate.'" AND "'.$dateTo.'") temp + GROUP BY province_id' + ); + + $provinces = Province::all(['id', 'name_fa']); + + return $this->successResponse([ + 'activities' => $activities, + 'provinces' => $provinces + ]); + } + + public function cityPatrolActivity(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()->endOfDay()->toDateTimeString(); + $provinceId = $request->province_id; + + $activities = DB::select( + 'SELECT + province_fa, + province_id, + -1 AS edare_id, + "استانی" AS edare_name, + COUNT(*) tedade, + SUM(tedad_mavarede_moshede_shode_adi) as tedad_mavarede_moshede_shode_adi, + SUM(tedad_mavarede_moshede_shode_fori) as tedad_mavarede_moshede_shode_fori, + SUM(tedad_mavarede_moshede_shode_ani) as tedad_mavarede_moshede_shode_ani, + SUM(tedad_mavarede_peygiri_shode) as tedad_mavarede_peygiri_shode, + SUM(tedad_faliyat_sabt_shode) as tedad_faliyat_sabt_shode, + ROUND(SUM(distance)) as masafat_tey_shode + FROM (SELECT + province_id, + province_fa, + edare_id, + edare_name, + distance, + (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 1) AS tedad_mavarede_moshede_shode_adi, + (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 2) AS tedad_mavarede_moshede_shode_fori, + (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 3) AS tedad_mavarede_moshede_shode_ani, + (SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NOT NULL) AS tedad_mavarede_peygiri_shode, + (SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NULL) AS tedad_faliyat_sabt_shode + FROM `road_patrols` rp where rp.province_id = "'.$provinceId.'" AND rp.start_time BETWEEN "'.$fromDate.'" AND "'.$dateTo.'") temp + UNION + SELECT + province_fa, + province_id, + edare_id, + edare_name, + COUNT(*) tedade, + SUM(tedad_mavarede_moshede_shode_adi) as tedad_mavarede_moshede_shode_adi, + SUM(tedad_mavarede_moshede_shode_fori) as tedad_mavarede_moshede_shode_fori, + SUM(tedad_mavarede_moshede_shode_ani) as tedad_mavarede_moshede_shode_ani, + SUM(tedad_mavarede_peygiri_shode) as tedad_mavarede_peygiri_shode, + SUM(tedad_faliyat_sabt_shode) as tedad_faliyat_sabt_shode, + ROUND(SUM(distance)) as masafat_tey_shode + FROM (SELECT + province_id, + province_fa, + edare_id, + edare_name, + distance, + (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 1) AS tedad_mavarede_moshede_shode_adi, + (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 2) AS tedad_mavarede_moshede_shode_fori, + (SELECT COUNT(*) FROM `observed_items` oi WHERE rp.`id`= oi.road_patrol_id AND priority = 3) AS tedad_mavarede_moshede_shode_ani, + (SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NOT NULL) AS tedad_mavarede_peygiri_shode, + (SELECT COUNT(*) FROM `observed_items` oii WHERE rp.`id`= oii.road_patrol_id AND oii.road_item_id IS NOT NULL AND priority IS NULL) AS tedad_faliyat_sabt_shode + FROM `road_patrols` rp where rp.province_id = "'.$provinceId.'" AND rp.start_time BETWEEN "'.$fromDate.'" AND "'.$dateTo.'") temp + GROUP BY edare_id + ' + ); + + $edarateShahri = EdarateShahri::query()->where('province_id', '=', $provinceId)->get(['id', 'name_fa']); + + return $this->successResponse([ + 'activities' => $activities, + 'edarateShahri' => $edarateShahri, + ]); + } + + public function excel(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/app/Http/Controllers/V3/RoadItemsProjectController.php b/app/Http/Controllers/V3/Dashboard/RoadItemsProjectController.php similarity index 98% rename from app/Http/Controllers/V3/RoadItemsProjectController.php rename to app/Http/Controllers/V3/Dashboard/RoadItemsProjectController.php index 2a84e803..0d9ecc5e 100644 --- a/app/Http/Controllers/V3/RoadItemsProjectController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadItemsProjectController.php @@ -1,6 +1,6 @@ $user->major, 'degree' => $user->degree, 'mobile' => $user->mobile, + 'province_id' => $user->province_id, 'avatar' => $user->avatarUrl() ]); } diff --git a/app/Http/Controllers/V3/Reports/RoadPatrolReportController.php b/app/Http/Controllers/V3/Reports/RoadPatrolReportController.php deleted file mode 100644 index 16f85d01..00000000 --- a/app/Http/Controllers/V3/Reports/RoadPatrolReportController.php +++ /dev/null @@ -1,44 +0,0 @@ -from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); - $dateTo = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->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()->endOfDay()->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 198fc35d..78e8be34 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -1,19 +1,19 @@ name('harim')->group(function () { @@ -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', '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('/province_activity_per_sub_item', 'provinceActivityPerSubItem')->name('provinceActivityPerSubItem'); + Route::get('/city_activity_per_sub_item', 'cityActivityPerSubItem')->name('cityActivityPerSubItem'); + Route::get('/province_activity_per_item', 'provinceActivityPerItem')->name('provinceActivityPerItem'); + Route::get('/city_activity_per_item', 'cityActivityPerItem')->name('cityActivityPerItem'); Route::get('/map', 'map')->name('map'); }); @@ -206,7 +206,7 @@ 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'); + Route::get('/province_activity', 'provincePatrolActivity')->name('provincePatrolActivity'); + Route::get('/city_activity', 'cityPatrolActivity')->name('cityPatrolActivity'); + Route::get('/excel', 'excel')->name('excel'); });