diff --git a/app/Exports/V3/SafetyAndPrivacy/Country/AccessRoadReport.php b/app/Exports/V3/SafetyAndPrivacy/Country/AccessRoadReport.php new file mode 100644 index 00000000..37517385 --- /dev/null +++ b/app/Exports/V3/SafetyAndPrivacy/Country/AccessRoadReport.php @@ -0,0 +1,83 @@ +data; + $existedProvinces = array_keys($data); + + foreach (Province::all() as $value) { + $provinceId = $value->id; + + if (!array_key_exists($provinceId, $existedProvinces)) { + $data[] = (object) [ + 'province_id' => $provinceId, + 'name_fa' => $value->name_fa, + 'sum' => 0, + 'axis_data' => [ + 'آزادراه' => ['1' => 0, '2' => 0, '3' => 0], + 'بزرگراه' => ['1' => 0, '2' => 0, '3' => 0], + 'اصلی' => ['1' => 0, '2' => 0, '3' => 0], + 'فرعی' => ['1' => 0, '2' => 0, '3' => 0], + 'روستایی' => ['1' => 0, '2' => 0, '3' => 0], + ], + ]; + } + } + + return view('v3.Reports.SafetyAndPrivacy.Country.AccessRoadReport', [ + 'data' => $data, + ]); + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + }, + ]; + } + + public function drawings(): array + { + $drawing = new Drawing(); + $drawing->setName('Logo'); + $drawing->setDescription('This is my logo'); + $drawing->setPath(public_path('/dist/logo.png')); + $drawing->setWidth(50); + $drawing->setHeight(50); + $drawing->setOffsetX(5); + $drawing->setOffsetY(5); + $drawing->setCoordinates('A1'); + + $drawing2 = new Drawing(); + $drawing2->setName('Logo'); + $drawing2->setDescription('This is my logo'); + $drawing2->setPath(public_path('/dist/141icon.png')); + $drawing2->setWidth(50); + $drawing2->setHeight(50); + $drawing2->setOffsetX(5); + $drawing2->setOffsetY(5); + $drawing2->setCoordinates('Q1'); + return [$drawing, $drawing2]; + } +} \ No newline at end of file diff --git a/app/Exports/V3/SafetyAndPrivacy/Country/ConstructionReport.php b/app/Exports/V3/SafetyAndPrivacy/Country/ConstructionReport.php new file mode 100644 index 00000000..3e64d0c8 --- /dev/null +++ b/app/Exports/V3/SafetyAndPrivacy/Country/ConstructionReport.php @@ -0,0 +1,84 @@ +data; + $existedProvinces = array_keys($data); + + foreach (Province::all() as $value) { + $provinceId = $value->id; + + if (!array_key_exists($provinceId, $existedProvinces)) { + $data[] = (object) [ + 'province_id' => $provinceId, + 'name_fa' => $value->name_fa, + 'sum' => 0, + 'axis_data' => [ + 'آزادراه' => ['1' => 0, '2' => 0, '3' => 0], + 'بزرگراه' => ['1' => 0, '2' => 0, '3' => 0], + 'اصلی' => ['1' => 0, '2' => 0, '3' => 0], + 'فرعی' => ['1' => 0, '2' => 0, '3' => 0], + 'روستایی' => ['1' => 0, '2' => 0, '3' => 0], + ], + ]; + } + } + + return view('v3.Reports.SafetyAndPrivacy.Country.ConstructionReport', [ + 'data' => $data, + ]); + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + }, + ]; + } + + public function drawings(): array + { + $drawing = new Drawing(); + $drawing->setName('Logo'); + $drawing->setDescription('This is my logo'); + $drawing->setPath(public_path('/dist/logo.png')); + $drawing->setWidth(50); + $drawing->setHeight(50); + $drawing->setOffsetX(5); + $drawing->setOffsetY(5); + $drawing->setCoordinates('A1'); + + $drawing2 = new Drawing(); + $drawing2->setName('Logo'); + $drawing2->setDescription('This is my logo'); + $drawing2->setPath(public_path('/dist/141icon.png')); + $drawing2->setWidth(50); + $drawing2->setHeight(50); + $drawing2->setOffsetX(5); + $drawing2->setOffsetY(5); + $drawing2->setCoordinates('Q1'); + return [$drawing, $drawing2]; + } +} \ No newline at end of file diff --git a/app/Exports/V3/SafetyAndPrivacy/Country/UtilityPassingReport.php b/app/Exports/V3/SafetyAndPrivacy/Country/UtilityPassingReport.php new file mode 100644 index 00000000..e44b14ac --- /dev/null +++ b/app/Exports/V3/SafetyAndPrivacy/Country/UtilityPassingReport.php @@ -0,0 +1,84 @@ +data; + $existedProvinces = array_keys($data); + + foreach (Province::all() as $value) { + $provinceId = $value->id; + + if (!array_key_exists($provinceId, $existedProvinces)) { + $data[] = (object) [ + 'province_id' => $provinceId, + 'name_fa' => $value->name_fa, + 'sum' => 0, + 'axis_data' => [ + 'آزادراه' => ['1' => 0, '2' => 0, '3' => 0], + 'بزرگراه' => ['1' => 0, '2' => 0, '3' => 0], + 'اصلی' => ['1' => 0, '2' => 0, '3' => 0], + 'فرعی' => ['1' => 0, '2' => 0, '3' => 0], + 'روستایی' => ['1' => 0, '2' => 0, '3' => 0], + ], + ]; + } + } + + return view('v3.Reports.SafetyAndPrivacy.Country.UtilityPassingReport', [ + 'data' => $data, + ]); + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + }, + ]; + } + + public function drawings(): array + { + $drawing = new Drawing(); + $drawing->setName('Logo'); + $drawing->setDescription('This is my logo'); + $drawing->setPath(public_path('/dist/logo.png')); + $drawing->setWidth(50); + $drawing->setHeight(50); + $drawing->setOffsetX(5); + $drawing->setOffsetY(5); + $drawing->setCoordinates('A1'); + + $drawing2 = new Drawing(); + $drawing2->setName('Logo'); + $drawing2->setDescription('This is my logo'); + $drawing2->setPath(public_path('/dist/141icon.png')); + $drawing2->setWidth(50); + $drawing2->setHeight(50); + $drawing2->setOffsetX(5); + $drawing2->setOffsetY(5); + $drawing2->setCoordinates('Q1'); + return [$drawing, $drawing2]; + } +} \ No newline at end of file diff --git a/app/Exports/V3/SafetyAndPrivacy/Province/AccessRoadReport.php b/app/Exports/V3/SafetyAndPrivacy/Province/AccessRoadReport.php new file mode 100644 index 00000000..bc80b3a4 --- /dev/null +++ b/app/Exports/V3/SafetyAndPrivacy/Province/AccessRoadReport.php @@ -0,0 +1,83 @@ +data; + $existedCities = array_keys($data); + $edarat = EdarateShahri::query()->where('province_id', '=', $this->request->province_id)->get(['id', 'name_fa']); + + foreach ($edarat as $value) { + $edareId = $value->id; + + if (!array_key_exists($edareId, $existedCities)) { + $data[] = (object) [ + 'edare_shahri_id' => $edareId, + 'name_fa' => $value->name_fa, + 'sum' => 0, + 'axis_data' => [ + 'آزادراه' => ['1' => 0, '2' => 0, '3' => 0], + 'بزرگراه' => ['1' => 0, '2' => 0, '3' => 0], + 'اصلی' => ['1' => 0, '2' => 0, '3' => 0], + 'فرعی' => ['1' => 0, '2' => 0, '3' => 0], + 'روستایی' => ['1' => 0, '2' => 0, '3' => 0], + ], + ]; + } + } + + return view('v3.Reports.SafetyAndPrivacy.Province.AccessRoadReport', [ + 'data' => $data, + ]); + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + }, + ]; + } + + public function drawings(): array + { + $drawing = new Drawing(); + $drawing->setName('Logo'); + $drawing->setDescription('This is my logo'); + $drawing->setPath(public_path('/dist/logo.png')); + $drawing->setWidth(50); + $drawing->setHeight(50); + $drawing->setOffsetX(5); + $drawing->setOffsetY(5); + $drawing->setCoordinates('A1'); + + $drawing2 = new Drawing(); + $drawing2->setName('Logo'); + $drawing2->setDescription('This is my logo'); + $drawing2->setPath(public_path('/dist/141icon.png')); + $drawing2->setWidth(50); + $drawing2->setHeight(50); + $drawing2->setOffsetX(5); + $drawing2->setOffsetY(5); + $drawing2->setCoordinates('Q1'); + return [$drawing, $drawing2]; + } +} \ No newline at end of file diff --git a/app/Exports/V3/SafetyAndPrivacy/Province/ConstructionReport.php b/app/Exports/V3/SafetyAndPrivacy/Province/ConstructionReport.php new file mode 100644 index 00000000..e6492019 --- /dev/null +++ b/app/Exports/V3/SafetyAndPrivacy/Province/ConstructionReport.php @@ -0,0 +1,83 @@ +data; + $existedCities = array_keys($data); + $edarat = EdarateShahri::query()->where('province_id', '=', $this->request->province_id)->get(['id', 'name_fa']); + + foreach ($edarat as $value) { + $edareId = $value->id; + + if (!array_key_exists($edareId, $existedCities)) { + $data[] = (object) [ + 'edare_shahri_id' => $edareId, + 'name_fa' => $value->name_fa, + 'sum' => 0, + 'axis_data' => [ + 'آزادراه' => ['1' => 0, '2' => 0, '3' => 0], + 'بزرگراه' => ['1' => 0, '2' => 0, '3' => 0], + 'اصلی' => ['1' => 0, '2' => 0, '3' => 0], + 'فرعی' => ['1' => 0, '2' => 0, '3' => 0], + 'روستایی' => ['1' => 0, '2' => 0, '3' => 0], + ], + ]; + } + } + + return view('v3.Reports.SafetyAndPrivacy.Province.ConstructionReport', [ + 'data' => $data, + ]); + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + }, + ]; + } + + public function drawings(): array + { + $drawing = new Drawing(); + $drawing->setName('Logo'); + $drawing->setDescription('This is my logo'); + $drawing->setPath(public_path('/dist/logo.png')); + $drawing->setWidth(50); + $drawing->setHeight(50); + $drawing->setOffsetX(5); + $drawing->setOffsetY(5); + $drawing->setCoordinates('A1'); + + $drawing2 = new Drawing(); + $drawing2->setName('Logo'); + $drawing2->setDescription('This is my logo'); + $drawing2->setPath(public_path('/dist/141icon.png')); + $drawing2->setWidth(50); + $drawing2->setHeight(50); + $drawing2->setOffsetX(5); + $drawing2->setOffsetY(5); + $drawing2->setCoordinates('Q1'); + return [$drawing, $drawing2]; + } +} \ No newline at end of file diff --git a/app/Exports/V3/SafetyAndPrivacy/Province/UtilityPassingReport.php b/app/Exports/V3/SafetyAndPrivacy/Province/UtilityPassingReport.php new file mode 100644 index 00000000..d0f5f6a4 --- /dev/null +++ b/app/Exports/V3/SafetyAndPrivacy/Province/UtilityPassingReport.php @@ -0,0 +1,83 @@ +data; + $existedCities = array_keys($data); + $edarat = EdarateShahri::query()->where('province_id', '=', $this->request->province_id)->get(['id', 'name_fa']); + + foreach ($edarat as $value) { + $edareId = $value->id; + + if (!array_key_exists($edareId, $existedCities)) { + $data[] = (object) [ + 'edare_shahri_id' => $edareId, + 'name_fa' => $value->name_fa, + 'sum' => 0, + 'axis_data' => [ + 'آزادراه' => ['1' => 0, '2' => 0, '3' => 0], + 'بزرگراه' => ['1' => 0, '2' => 0, '3' => 0], + 'اصلی' => ['1' => 0, '2' => 0, '3' => 0], + 'فرعی' => ['1' => 0, '2' => 0, '3' => 0], + 'روستایی' => ['1' => 0, '2' => 0, '3' => 0], + ], + ]; + } + } + + return view('v3.Reports.SafetyAndPrivacy.Province.UtilityPassingReport', [ + 'data' => $data, + ]); + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + }, + ]; + } + + public function drawings(): array + { + $drawing = new Drawing(); + $drawing->setName('Logo'); + $drawing->setDescription('This is my logo'); + $drawing->setPath(public_path('/dist/logo.png')); + $drawing->setWidth(50); + $drawing->setHeight(50); + $drawing->setOffsetX(5); + $drawing->setOffsetY(5); + $drawing->setCoordinates('A1'); + + $drawing2 = new Drawing(); + $drawing2->setName('Logo'); + $drawing2->setDescription('This is my logo'); + $drawing2->setPath(public_path('/dist/141icon.png')); + $drawing2->setWidth(50); + $drawing2->setHeight(50); + $drawing2->setOffsetX(5); + $drawing2->setOffsetY(5); + $drawing2->setCoordinates('Q1'); + return [$drawing, $drawing2]; + } +} \ No newline at end of file diff --git a/app/Http/Controllers/V3/Dashboard/RoadItem/OperatorController.php b/app/Http/Controllers/V3/Dashboard/RoadItem/OperatorController.php index d6c5c177..c422e120 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadItem/OperatorController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadItem/OperatorController.php @@ -51,16 +51,6 @@ class OperatorController extends Controller */ public function store(StoreRequest $request, NominatimService $nominatimService): JsonResponse { - $activityDateTime = Carbon::parse($request->activity_date . ' ' . $request->activity_time); - $mission = Mission::findOrFail($request->mission_id); - if ($activityDateTime->lt($mission->start_date) || $activityDateTime->gt($mission->end_date)) { - throw ValidationException::withMessages([ - 'activity_date_time' => __('زمان گزارش باید بین :start تا :end (بازه مأموریت) باشد.', [ - 'start' => verta($mission->start_date)->format('Y/m/d H:i'), - 'end' => verta($mission->end_date)->format('Y/m/d H:i'), - ]), - ]); - } $info_item = InfoItem::query()->where('item', $request->item_id) ->where('sub_item', $request->sub_item_id) diff --git a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/AccessRoadActivityController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/AccessRoadActivityController.php similarity index 84% rename from app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/AccessRoadActivityController.php rename to app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/AccessRoadActivityController.php index 7bd4fb25..f3e4a9cc 100644 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/AccessRoadActivityController.php +++ b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/AccessRoadActivityController.php @@ -1,9 +1,9 @@ countryActivity($request); $name = 'گزارش نگهداری حریم راه برای راه دسترسی غیر مجاز ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - return Excel::download(new CountryActivityReport($data), $name); + return Excel::download(new ExcelReport($data), $name); } public function provinceExcelActivity(Request $request, OperatorService $operatorService): BinaryFileResponse { $data = $operatorService->provinceActivity($request); $name = 'گزارش نگهداری حریم راه برای راه دسترسی غیر مجاز ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - return Excel::download(new ProvinceActivityReport($data, $request), $name); + return Excel::download(new AccessRoadReport($data, $request), $name); } } diff --git a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/ConstructionActivityController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/ConstructionActivityController.php similarity index 84% rename from app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/ConstructionActivityController.php rename to app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/ConstructionActivityController.php index fb5493d1..54dbad4b 100644 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/ConstructionActivityController.php +++ b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/ConstructionActivityController.php @@ -1,9 +1,9 @@ countryActivity($request); $name = ' گزارش نگهداری حریم راه برای ساخت و ساز غیر مجاز' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - return Excel::download(new CountryActivityReport($data), $name); + return Excel::download(new ExcelReport($data), $name); } public function provinceExcelActivity(Request $request, OperatorService $operatorService): BinaryFileResponse { $data = $operatorService->provinceActivity($request); $name = ' گزارش نگهداری حریم راه برای ساخت و ساز غیر مجاز' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - return Excel::download(new ProvinceActivityReport($data, $request), $name); + return Excel::download(new ConstructionReport($data, $request), $name); } diff --git a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/UtilityPassingActivityController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/UtilityPassingActivityController.php similarity index 83% rename from app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/UtilityPassingActivityController.php rename to app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/UtilityPassingActivityController.php index e77f3d52..dd61ed53 100644 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/UtilityPassingActivityController.php +++ b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReport/UtilityPassingActivityController.php @@ -1,9 +1,9 @@ countryActivity($request); $name = 'گزارش نگهداری حریم راه برای عبور تاسیسات زیربنایی غیر مجاز ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - return Excel::download(new CountryActivityReport($data), $name); + return Excel::download(new ExcelReport($data), $name); } public function provinceExcelActivity(Request $request, OperatorService $operatorService): BinaryFileResponse { $data = $operatorService->provinceActivity($request); $name = 'گزارش نگهداری حریم راه برای عبور تاسیسات زیربنایی غیر مجاز ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - return Excel::download(new ProvinceActivityReport($data, $request), $name); + return Excel::download(new UtilityPassingReport($data, $request), $name); } } diff --git a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReportController.php b/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReportController.php deleted file mode 100644 index 0e3c5e78..00000000 --- a/app/Http/Controllers/V3/Dashboard/SafetyAndPrivacy/OperatorReportController.php +++ /dev/null @@ -1,53 +0,0 @@ -countryActivity($request); - return $this->successResponse([ - 'activities' => $data, - 'provinces' => Province::all(['id', 'name_fa']) - ]); - } - - public function provinceActivity(Request $request, OperatorService $operatorService): JsonResponse - { - $data = $operatorService->provinceActivity($request); - return $this->successResponse([ - 'activities' => $data, - 'edarateShahri' => EdarateShahri::query()->where('province_id', '=', $request->province_id)->get(['id', 'name_fa']), - ]); - } - - public function countryExcelActivity(Request $request, OperatorService $operatorService): BinaryFileResponse - { - $data = $operatorService->countryActivity($request); - $name = 'گزارش از نگهداری حریم راه ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - return Excel::download(new CountryActivityReport($data), $name); - } - - public function provinceExcelActivity(Request $request, OperatorService $operatorService): BinaryFileResponse - { - $data = $operatorService->provinceActivity($request); - $name = 'گزارش از نگهداری حریم راه ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - return Excel::download(new ProvinceActivityReport($data, $request), $name); - } -} diff --git a/app/Http/Requests/V3/RoadItem/Operator/StoreRequest.php b/app/Http/Requests/V3/RoadItem/Operator/StoreRequest.php index 67a6c4ec..66f045b3 100644 --- a/app/Http/Requests/V3/RoadItem/Operator/StoreRequest.php +++ b/app/Http/Requests/V3/RoadItem/Operator/StoreRequest.php @@ -2,9 +2,13 @@ namespace App\Http\Requests\V3\RoadItem\Operator; +use App\Models\Mission; +use Carbon\Carbon; use Illuminate\Contracts\Validation\ValidationRule; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; +use Illuminate\Validation\ValidationException; +use Illuminate\Validation\Validator; class StoreRequest extends FormRequest { @@ -48,4 +52,18 @@ class StoreRequest extends FormRequest 'activity_time' => 'ساعت فعالیت', ]; } + public function after(): array + { + return [ + function (Validator $validator) { + $activityTime = Carbon::parse("{$this->activity_date} {$this->activity_time}"); + + if ($activityTime->lt($this->mission->start_date) || $activityTime->gt($this->mission->end_date)) { + $validator->errors()->add('activity_time', 'زمان گزارش باید بین بازه مأموریت باشد.'); + } + } + ]; + } + + } diff --git a/app/Services/Cartables/SafetyAndPrivacy/OperatorService.php b/app/Services/Cartables/SafetyAndPrivacy/OperatorService.php index 1ef3b4c5..c653bc3b 100644 --- a/app/Services/Cartables/SafetyAndPrivacy/OperatorService.php +++ b/app/Services/Cartables/SafetyAndPrivacy/OperatorService.php @@ -4,9 +4,9 @@ namespace App\Services\Cartables\SafetyAndPrivacy; use App\Exceptions\ProhibitedAction; use App\Facades\DataTable\DataTableFacade; -use App\Models\EdarateShahri; use App\Models\SafetyAndPrivacy; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; class OperatorService { @@ -33,126 +33,95 @@ class OperatorService ); } - public function countryActivity(Request $request): array + public function countryActivity(int $info_id): array { - $activities = []; - $countryQuery = SafetyAndPrivacy::query()->selectRaw('COUNT(*) as qty,axis_type_id, step'); - - $country = DataTableFacade::run( - $countryQuery, - $request, - allowedFilters: ['*'], - allowedSortings: ['*'], - allowedGroupBy: ['axis_type_id', 'step'] - ); - - $countryTotalSum = 0; - $countryData = [ - 'name_fa' => 'کشوری', - 'province_id' => -1, - 'sum' => 0, - '1' => ['1' => 0, '2' => 0, '3' => 0,], - '2' => ['1' => 0, '2' => 0, '3' => 0,], - '3' => ['1' => 0, '2' => 0, '3' => 0,], - '4' => ['1' => 0, '2' => 0, '3' => 0,], - '5' => ['1' => 0, '2' => 0, '3' => 0,], - ]; - foreach ($country['data'] as $key => $value) { - $countryTotalSum += $value->qty; - $countryData[$value->info_id][$value->step] = $value->qty; - $countryData["sum"] = $countryTotalSum; - } - - $activities[] = (object) $countryData; - $provinceQuery = SafetyAndPrivacy::query()->selectRaw('province_id, province_fa, COUNT(*) as qty,axis_type_id, step'); - $provinces = DataTableFacade::run( - $provinceQuery, - $request, - allowedFilters: ['*'], - allowedSortings: ['*'], - allowedGroupBy: ['axis_type_id', 'step', 'province_id', 'province_fa'] - ); - - foreach ($provinces['data'] as $value) - { - $provinceId = $value->province_id; - if (!isset($activities[$provinceId])) { - $activities[$provinceId] = (object) [ - 'province_id' => $provinceId, - 'name_fa' => $value->province_fa, - 'sum' => 0, - '1' => ['1' => 0, '2' => 0, '3' => 0,], - '2' => ['1' => 0, '2' => 0, '3' => 0,], - '3' => ['1' => 0, '2' => 0, '3' => 0,], - '4' => ['1' => 0, '2' => 0, '3' => 0,], - '5' => ['1' => 0, '2' => 0, '3' => 0,], - ]; - } - $activities[$provinceId]->{$value->info_id}[$value->step] = $value->qty; - $activities[$provinceId]->sum += $value->qty; - } - - return array_values($activities); + return DB::select(" + WITH combinations AS ( + SELECT + axis_type_id, + step + FROM ( + SELECT 1 AS axis_type_id UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 + ) a + CROSS JOIN ( + SELECT 1 AS step UNION ALL SELECT 2 UNION ALL SELECT 3 + ) s + ), + provinces AS ( + SELECT DISTINCT province_fa FROM safety_and_privacy WHERE info_id = ? + ), + data AS ( + SELECT + p.province_fa, + c.axis_type_id, + c.step, + COUNT(sp.id) AS total + FROM combinations c + CROSS JOIN provinces p + LEFT JOIN safety_and_privacy sp + ON sp.axis_type_id = c.axis_type_id + AND sp.step = c.step + AND sp.province_fa = p.province_fa + AND sp.info_id = ? + GROUP BY p.province_fa, c.axis_type_id, c.step + ) + SELECT + province_fa, + axis_type_id, + step, + total, + SUM(total) OVER (PARTITION BY province_fa) AS total_sum + FROM data + ORDER BY province_fa, axis_type_id, step + ", [$info_id, $info_id]); } - public function provinceActivity(Request $request): array + public function provinceActivity(int $info_id, int $province_id): array { - $activities = []; - $provinceQuery = SafetyAndPrivacy::query()->selectRaw('COUNT(*) as qty,axis_type_id, step'); - $province = DataTableFacade::run( - $provinceQuery, - $request, - allowedFilters: ['*'], - allowedSortings: ['*'], - allowedGroupBy: ['axis_type_id', 'step'] - ); - - $provinceTotalSum = 0; - $provinceData = [ - 'name_fa' => 'استانی', - 'edare_shahri_id' => -1, - 'sum' => 0, - '1' => ['1' => 0, '2' => 0, '3' => 0,], - '2' => ['1' => 0, '2' => 0, '3' => 0,], - '3' => ['1' => 0, '2' => 0, '3' => 0,], - '4' => ['1' => 0, '2' => 0, '3' => 0,], - '5' => ['1' => 0, '2' => 0, '3' => 0,], - ]; - foreach ($province['data'] as $key => $value) { - $provinceTotalSum += $value->qty; - $provinceData["sum"] = $provinceTotalSum; - $provinceData[$value->info_id][$value->step] = $value->qty; - } - $activities[] = (object) $provinceData; - - $citiesQuery = SafetyAndPrivacy::query()->selectRaw('edare_shahri_id, COUNT(*) as qty,axis_type_id, step'); - $cities = DataTableFacade::run( - $citiesQuery, - $request, - allowedFilters: ['*'], - allowedSortings: ['*'], - allowedGroupBy: ['axis_type_id', 'step', 'edare_shahri_id'] - ); - - foreach ($cities['data'] as $value) - { - $cityId = $value->edare_shahri_id; - if (!isset($activities[$cityId])) { - $activities[$cityId] = (object) [ - 'edare_shahri_id' => $cityId, - 'name_fa' => EdarateShahri::query()->find($cityId)->name_fa, - 'sum' => 0, - '1' => ['1' => 0, '2' => 0, '3' => 0,], - '2' => ['1' => 0, '2' => 0, '3' => 0,], - '3' => ['1' => 0, '2' => 0, '3' => 0,], - '4' => ['1' => 0, '2' => 0, '3' => 0,], - '5' => ['1' => 0, '2' => 0, '3' => 0,], - ]; - } - $activities[$cityId]->{$value->info_id}[$value->step] = $value->qty; - $activities[$cityId]->sum += $value->qty; - } - - return array_values($activities); + return DB::select(" + WITH combinations AS ( + SELECT axis_type_id, step + FROM ( + SELECT 1 AS axis_type_id UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 + ) a + CROSS JOIN ( + SELECT 1 AS step UNION ALL SELECT 2 UNION ALL SELECT 3 + ) s + ), + edarat AS ( + SELECT id AS edare_id, name_fa + FROM edarate_shahri + WHERE province_id = :provinceId + ), + data AS ( + SELECT + e.edare_id, + c.axis_type_id, + c.step, + COUNT(sp.id) AS total + FROM combinations c + CROSS JOIN edarat e + LEFT JOIN safety_and_privacy sp + ON sp.axis_type_id = c.axis_type_id + AND sp.step = c.step + AND sp.city_id = e.edare_id + AND sp.info_id = :infoId + GROUP BY e.edare_id, c.axis_type_id, c.step + ) + SELECT + e.edare_id, + e.name_fa AS edare_name, + d.axis_type_id, + d.step, + d.total, + SUM(d.total) OVER (PARTITION BY e.edare_id) AS total_sum + FROM data d + JOIN edarat e ON e.edare_id = d.edare_id + ORDER BY e.edare_id, d.axis_type_id, d.step + ",[ + 'provinceId' => $province_id, + 'infoId' => $info_id, + ]); } + } \ No newline at end of file diff --git a/resources/views/v3/Reports/SafetyAndPrivacy/CountryActivityReport.blade.php b/resources/views/v3/Reports/SafetyAndPrivacy/CountryActivityReport.blade.php deleted file mode 100644 index ee8c6c6a..00000000 --- a/resources/views/v3/Reports/SafetyAndPrivacy/CountryActivityReport.blade.php +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - - - کشوری - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @foreach ($data as $item) - - - - - - - - - - - - - - @endforeach - -
- تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }} -
-
- گزارش نگهداری حریم راه -
- اداره کل - - تعداد کل - - ساخت و ساز غیر مجاز - - راه دسترسی غیر مجاز - - عبور تاسیسات زیربنایی غیر مجاز -
- گام اول (شناسایی) - - گام دوم (مستندات قضایی) - - گام سوم (برخورد) - - گام اول (شناسایی) - - گام دوم (مستندات قضایی) - - گام سوم (برخورد) - - گام اول (شناسایی) - - گام دوم (مستندات قضایی) - - گام سوم (برخورد) -
{{ $item->name_fa }}{{ $item->sum }}{{ $item->{'89'}[1] }}{{ $item->{'89'}[2] }}{{ $item->{'89'}[3] }}{{ $item->{'90'}[1] }}{{ $item->{'90'}[2] }}{{ $item->{'90'}[3] }}{{ $item->{'91'}[1] }}{{ $item->{'91'}[2] }}{{ $item->{'91'}[3] }}
- - diff --git a/resources/views/v3/Reports/SafetyAndPrivacy/ProvinceActivityReport.blade.php b/resources/views/v3/Reports/SafetyAndPrivacy/ProvinceActivityReport.blade.php deleted file mode 100644 index df2f7638..00000000 --- a/resources/views/v3/Reports/SafetyAndPrivacy/ProvinceActivityReport.blade.php +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - استانی - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @foreach ($data as $item) - - - - - - - - - - - - - - @endforeach - -
- تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }} -
-
- گزارش نگهداری حریم راه -
- اداره کل - - تعداد کل - - ساخت و ساز غیر مجاز - - راه دسترسی غیر مجاز - - عبور تاسیسات زیربنایی غیر مجاز -
- گام اول (شناسایی) - - گام دوم (مستندات قضایی) - - گام سوم (برخورد) - - گام اول (شناسایی) - - گام دوم (مستندات قضایی) - - گام سوم (برخورد) - - گام اول (شناسایی) - - گام دوم (مستندات قضایی) - - گام سوم (برخورد) -
{{ $item->name_fa }}{{ $item->sum }}{{ $item->{'89'}[1] }}{{ $item->{'89'}[2] }}{{ $item->{'89'}[3] }}{{ $item->{'90'}[1] }}{{ $item->{'90'}[2] }}{{ $item->{'90'}[3] }}{{ $item->{'91'}[1] }}{{ $item->{'91'}[2] }}{{ $item->{'91'}[3] }}
- - diff --git a/routes/v3.php b/routes/v3.php index 294a407f..03efd856 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -18,6 +18,9 @@ use App\Http\Controllers\V3\Dashboard\OtpManagementController; use App\Http\Controllers\V3\Dashboard\RoadMaintenanceStationController; use App\Http\Controllers\V3\Dashboard\RoadPatrol\ReportController; use App\Http\Controllers\V3\Dashboard\SafetyAndPrivacy\OperatorController; +use App\Http\Controllers\V3\Dashboard\SafetyAndPrivacy\OperatorReport\AccessRoadActivityController; +use App\Http\Controllers\V3\Dashboard\SafetyAndPrivacy\OperatorReport\ConstructionActivityController; +use App\Http\Controllers\V3\Dashboard\SafetyAndPrivacy\OperatorReport\UtilityPassingActivityController; use App\Http\Controllers\V3\Dashboard\SafetyAndPrivacy\OperatorReportController; use App\Http\Controllers\V3\Dashboard\SafetyAndPrivacy\SupervisorController; use App\Http\Controllers\V3\FMSVehicleManagementController; @@ -389,20 +392,36 @@ Route::prefix('safety_and_privacy') Route::post('/confirm/{safetyAndPrivacy}', 'confirm')->name('confirm'); Route::post('/reject/{safetyAndPrivacy}', 'reject')->name('reject'); }); - }); + Route::prefix('operator_report') + ->name('operatorReport.'); + Route::prefix('access_road') + ->name('accessRoad.') + ->controller(AccessRoadActivityController::class) + ->group(function () { + Route::get('/country_activity', 'countryActivity')->name('countryActivity'); + Route::get('/province_activity', 'provinceActivity')->name('provinceActivity'); + Route::get('/country_excel_activity', 'countryExcelActivity')->name('countryExcelActivity'); + Route::get('/province_excel_activity', 'provinceExcelActivity')->name('provinceExcelActivity'); + }); + Route::prefix('construction_activity') + ->name('constructionActivity.') + ->controller(ConstructionActivityController::class) + ->group(function () { + Route::get('/country_activity', 'countryActivity')->name('countryActivity'); + Route::get('/province_activity', 'provinceActivity')->name('provinceActivity'); + Route::get('/country_excel_activity', 'countryExcelActivity')->name('countryExcelActivity'); + Route::get('/province_excel_activity', 'provinceExcelActivity')->name('provinceExcelActivity'); + }); + Route::prefix('utility_passing_activity') + ->name('utilityPassingActivity.') + ->controller(UtilityPassingActivityController::class) + ->group(function () { + Route::get('/country_activity', 'countryActivity')->name('countryActivity'); + Route::get('/province_activity', 'provinceActivity')->name('provinceActivity'); + Route::get('/country_excel_activity', 'countryExcelActivity')->name('countryExcelActivity'); + Route::get('/province_excel_activity', 'provinceExcelActivity')->name('provinceExcelActivity'); + }); -Route::prefix('safety_and_privacy_report') - ->name('SafetyAndPrivacyReport.') - ->group(function () { - Route::prefix('operator') - ->name('operator.') - ->controller(OperatorReportController::class) - ->group(function () { - Route::get('/country_activity', 'countryActivity')->name('countryActivity'); - Route::get('/province_activity', 'provinceActivity')->name('provinceActivity'); - Route::get('/country_excel_activity', 'countryExcelActivity')->name('countryExcelActivity'); - Route::get('/province_excel_activity', 'provinceExcelActivity')->name('provinceExcelActivity'); - }); }); Route::prefix('otp')