From 28ebb840112ecf5a63d304e445eab2368ad2da91 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 12 Jan 2025 16:13:13 +0330 Subject: [PATCH 01/43] add option to datatable --- .../DataTable/Filter/SearchFunctions/FilterBetween.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/Services/DataTable/Filter/SearchFunctions/FilterBetween.php b/app/Services/DataTable/Filter/SearchFunctions/FilterBetween.php index 7b91d5e6..7a6292da 100644 --- a/app/Services/DataTable/Filter/SearchFunctions/FilterBetween.php +++ b/app/Services/DataTable/Filter/SearchFunctions/FilterBetween.php @@ -13,11 +13,17 @@ class FilterBetween extends SearchFilter [$minVal, $maxVal] = $this->filter->getValue(); if ($minVal) { + if ($this->filter->getDatatype() == "date") { + $minVal = $minVal . " 00:00:00"; + } $this->filter->setValue($minVal); $query = (new FilterGreaterThanOrEqual($this->query, $this->filter))->apply(); } if ($maxVal) { + if ($this->filter->getDatatype() == "date") { + $maxVal = $maxVal . " 23:59:59"; + } $this->filter->setValue($maxVal); $query = (new FilterLessThanOrEqual($this->query, $this->filter))->apply(); } From fae721a3f19e6d931fa3193c47556f7c2fa03c11 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Mon, 20 Jan 2025 09:13:22 +0330 Subject: [PATCH 02/43] create report files --- .../CountryActivityPerItemReport.php | 108 ++++++++++++++++ .../CountryActivityPerSubItemReport.php | 122 ++++++++++++++++++ .../ProvinceActivityPerItemReport.php | 116 +++++++++++++++++ .../ProvinceActivityPerSubItemReport.php | 120 +++++++++++++++++ .../Dashboard/RoadItemsProjectController.php | 4 +- .../Dashboard/RoadPatrolProjectController.php | 8 +- 6 files changed, 472 insertions(+), 6 deletions(-) create mode 100644 app/Exports/V3/RoadItemsProjects/CountryActivityPerItemReport.php create mode 100644 app/Exports/V3/RoadItemsProjects/CountryActivityPerSubItemReport.php create mode 100644 app/Exports/V3/RoadItemsProjects/ProvinceActivityPerItemReport.php create mode 100644 app/Exports/V3/RoadItemsProjects/ProvinceActivityPerSubItemReport.php diff --git a/app/Exports/V3/RoadItemsProjects/CountryActivityPerItemReport.php b/app/Exports/V3/RoadItemsProjects/CountryActivityPerItemReport.php new file mode 100644 index 00000000..95f88d94 --- /dev/null +++ b/app/Exports/V3/RoadItemsProjects/CountryActivityPerItemReport.php @@ -0,0 +1,108 @@ +fromDate ?? '2021-03-21'; + $toDate = $this->toDate ?? \Carbon\Carbon::now(); + + $query = "SELECT + COUNT(CASE WHEN item = 1 THEN 1 END) AS MarematRooyeCount, + COUNT(CASE WHEN item = 2 THEN 1 END) AS PaksaziCount, + COUNT(CASE WHEN item = 3 THEN 1 END) AS AlaemCount, + COUNT(CASE WHEN item = 4 THEN 1 END) AS HefazCount, + COUNT(CASE WHEN item = 5 THEN 1 END) AS RoshanayiCount, + COUNT(CASE WHEN item = 6 THEN 1 END) AS KhatkeshiCount, + COUNT(CASE WHEN item = 7 THEN 1 END) AS RangamiziCount, + COUNT(CASE WHEN item = 8 THEN 1 END) AS WashingCount, + COUNT(CASE WHEN item = 9 THEN 1 END) AS ImenSaziCount, + COUNT(CASE WHEN item = 10 THEN 1 END) AS HarimCount, + COUNT(CASE WHEN item = 11 THEN 1 END) AS PolCount, + COUNT(CASE WHEN item = 12 THEN 1 END) AS ToonelCount, + COUNT(CASE WHEN item = 13 THEN 1 END) AS AmaliatZemestaniCount, + COUNT(CASE WHEN item = 14 THEN 1 END) AS MashinAlatCount, + COUNT(CASE WHEN item = 15 THEN 1 END) AS TollhouseCount, + COUNT(CASE WHEN item = 16 THEN 1 END) AS EmergencyCount, + province_fa, + province_id, + COUNT(CASE WHEN item != -1 THEN 1 END) AS TotalCount + FROM ( + SELECT + province_fa, + province_id, + item, + status + FROM road_items_projects + WHERE activity_date_time BETWEEN '{$fromDate} 00:00:00' and '{$toDate} 23:59:59' + ) AS merged_table + WHERE status = 1 + GROUP BY province_id, province_fa;"; + + $countryActivities = DB::select($query); + + return view('', [ + 'activities' => $countryActivities, + 'fromDate' => $fromDate, + 'toDate' => $toDate + ]); + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + $event->sheet->getDelegate()->getStyle('A:U')->getFont()->setName('Arial'); + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setHorizontal(Alignment::HORIZONTAL_CENTER); + + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setVertical(Alignment::VERTICAL_CENTER); + } + ]; + } + + 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/RoadItemsProjects/CountryActivityPerSubItemReport.php b/app/Exports/V3/RoadItemsProjects/CountryActivityPerSubItemReport.php new file mode 100644 index 00000000..611e0a44 --- /dev/null +++ b/app/Exports/V3/RoadItemsProjects/CountryActivityPerSubItemReport.php @@ -0,0 +1,122 @@ +fromDate ?? '2021-03-21'; + $toDate = $this->toDate ?? Carbon::now(); + + $query = "SELECT + COUNT(CASE WHEN sub_item = 1 THEN 1 END) as LabeAsphaltCount, + SUM(CASE WHEN sub_item = 1 THEN sub_item_data END) as LabeAsphaltSum, + + COUNT(CASE WHEN sub_item = 2 THEN 1 END) as ShaneSaziCount, + SUM(CASE WHEN sub_item = 2 THEN sub_item_data END) as ShaneSaziSum, + + COUNT(CASE WHEN sub_item = 3 THEN 1 END) as GodOftadegiCount, + SUM(CASE WHEN sub_item = 3 THEN sub_item_data END) as GodOftadegiSum, + + COUNT(CASE WHEN sub_item = 4 THEN 1 END) as LakegiriCount, + SUM(CASE WHEN sub_item = 4 THEN sub_item_data END) as LakegiriSum, + + COUNT(CASE WHEN sub_item = 5 THEN 1 END) as MarematCount, + SUM(CASE WHEN sub_item = 5 THEN sub_item_data END) as MarematSum, + + COUNT(CASE WHEN sub_item = 6 THEN 1 END) as BastarHarimCount, + SUM(CASE WHEN sub_item = 6 THEN sub_item_data END) as BastarHarimSum, + + COUNT(CASE WHEN sub_item = 8 THEN 1 END) as DarzgiriCount, + SUM(CASE WHEN sub_item = 8 THEN sub_item_data END) as DarzgiriSum, + + COUNT(CASE WHEN sub_item = 9 THEN 1 END) as MozresCount, + SUM(CASE WHEN sub_item = 9 THEN sub_item_data END) as MozresSum, + + COUNT(CASE WHEN sub_item = 10 THEN 1 END) as TarashRooyeCount, + SUM(CASE WHEN sub_item = 10 THEN sub_item_data END) as TarashRooyeSum, + + COUNT(CASE WHEN sub_item = 11 THEN 1 END) as TighzaniCount, + SUM(CASE WHEN sub_item = 11 THEN sub_item_data END) as TighzaniSum, + + COUNT(CASE WHEN sub_item = 12 THEN 1 END) as ShenriziCount, + SUM(CASE WHEN sub_item = 12 THEN sub_item_data END) as ShenriziSum, + + COUNT(CASE WHEN sub_item = 13 THEN 1 END) as KhakbardariCount, + SUM(CASE WHEN sub_item = 13 THEN sub_item_data END) as KhakbardariSum, + + province_id, + province_fa + + FROM road_items_projects + WHERE item = 1 and status = 1 + AND activity_date_time BETWEEN '{$fromDate} 00:00:00' and '{$toDate} 23:59:59' + GROUP BY province_id, province_fa + ORDER BY province_id ASC;"; + + $countryActivities = DB::select($query); + + return view('', [ + 'activities' => $countryActivities, + 'fromDate' => $fromDate, + 'toDate' => $toDate + ]); + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + $event->sheet->getDelegate()->getStyle('A:U')->getFont()->setName('Arial'); + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setHorizontal(Alignment::HORIZONTAL_CENTER); + + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setVertical(Alignment::VERTICAL_CENTER); + } + ]; + } + + 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/RoadItemsProjects/ProvinceActivityPerItemReport.php b/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerItemReport.php new file mode 100644 index 00000000..bd924403 --- /dev/null +++ b/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerItemReport.php @@ -0,0 +1,116 @@ +fromDate ?? '2021-03-21'; + $toDate = $this->toDate ?? \Carbon\Carbon::now(); + + $query = "SELECT + COUNT(CASE WHEN item = 1 THEN 1 END) AS MarematRooyeCount, + COUNT(CASE WHEN item = 2 THEN 1 END) AS PaksaziCount, + COUNT(CASE WHEN item = 3 THEN 1 END) AS AlaemCount, + COUNT(CASE WHEN item = 4 THEN 1 END) AS HefazCount, + COUNT(CASE WHEN item = 5 THEN 1 END) AS RoshanayiCount, + COUNT(CASE WHEN item = 6 THEN 1 END) AS KhatkeshiCount, + COUNT(CASE WHEN item = 7 THEN 1 END) AS RangamiziCount, + COUNT(CASE WHEN item = 8 THEN 1 END) AS WashingCount, + COUNT(CASE WHEN item = 9 THEN 1 END) AS ImenSaziCount, + COUNT(CASE WHEN item = 10 THEN 1 END) AS HarimCount, + COUNT(CASE WHEN item = 11 THEN 1 END) AS PolCount, + COUNT(CASE WHEN item = 12 THEN 1 END) AS ToonelCount, + COUNT(CASE WHEN item = 13 THEN 1 END) AS AmaliatZemestaniCount, + COUNT(CASE WHEN item = 14 THEN 1 END) AS MashinAlatCount, + COUNT(CASE WHEN item = 15 THEN 1 END) AS TollhouseCount, + COUNT(CASE WHEN item = 16 THEN 1 END) AS EmergencyCount, + province_fa, + province_id, + edarat_name, + edarat_id, + COUNT(CASE WHEN item != -1 THEN 1 END) AS TotalCount + FROM ( + SELECT + province_fa, + province_id, + edarat_name, + edarat_id, + item, + status + FROM road_items_projects + WHERE activity_date_time BETWEEN '{$fromDate} 00:00:00' and '{$toDate} 23:59:59' + ) AS merged_table + WHERE status = 1 + AND province_id = {$this->provinceId} + GROUP BY edarat_id, edarat_name, order by province_id ASC;"; + + $provinceActivities = DB::select($query); + + return view('', [ + 'activities' => $provinceActivities, + 'fromDate' => $fromDate, + 'toDate' => $toDate + ]); + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + $event->sheet->getDelegate()->getStyle('A:U')->getFont()->setName('Arial'); + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setHorizontal(Alignment::HORIZONTAL_CENTER); + + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setVertical(Alignment::VERTICAL_CENTER); + } + ]; + } + + 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/RoadItemsProjects/ProvinceActivityPerSubItemReport.php b/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerSubItemReport.php new file mode 100644 index 00000000..f966747e --- /dev/null +++ b/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerSubItemReport.php @@ -0,0 +1,120 @@ +fromDate ?? '2021-03-21'; + $toDate = $this->toDate ?? Carbon::now(); + + $query = "SELECT + COUNT(CASE WHEN sub_item = 1 THEN 1 END) as LabeAsphaltCount, + SUM(CASE WHEN sub_item = 1 THEN sub_item_data END) as LabeAsphaltSum, + + COUNT(CASE WHEN sub_item = 2 THEN 1 END) as ShaneSaziCount, + SUM(CASE WHEN sub_item = 2 THEN sub_item_data END) as ShaneSaziSum, + + COUNT(CASE WHEN sub_item = 3 THEN 1 END) as GodOftadegiCount, + SUM(CASE WHEN sub_item = 3 THEN sub_item_data END) as GodOftadegiSum, + + COUNT(CASE WHEN sub_item = 4 THEN 1 END) as LakegiriCount, + SUM(CASE WHEN sub_item = 4 THEN sub_item_data END) as LakegiriSum, + + COUNT(CASE WHEN sub_item = 5 THEN 1 END) as MarematCount, + SUM(CASE WHEN sub_item = 5 THEN sub_item_data END) as MarematSum, + + COUNT(CASE WHEN sub_item = 6 THEN 1 END) as BastarHarimCount, + SUM(CASE WHEN sub_item = 6 THEN sub_item_data END) as BastarHarimSum, + + COUNT(CASE WHEN sub_item = 8 THEN 1 END) as DarzgiriCount, + SUM(CASE WHEN sub_item = 8 THEN sub_item_data END) as DarzgiriSum, + + COUNT(CASE WHEN sub_item = 9 THEN 1 END) as MozresCount, + SUM(CASE WHEN sub_item = 9 THEN sub_item_data END) as MozresSum, + + COUNT(CASE WHEN sub_item = 10 THEN 1 END) as TarashRooyeCount, + SUM(CASE WHEN sub_item = 10 THEN sub_item_data END) as TarashRooyeSum, + + COUNT(CASE WHEN sub_item = 11 THEN 1 END) as TighzaniCount, + SUM(CASE WHEN sub_item = 11 THEN sub_item_data END) as TighzaniSum, + + COUNT(CASE WHEN sub_item = 12 THEN 1 END) as ShenriziCount, + SUM(CASE WHEN sub_item = 12 THEN sub_item_data END) as ShenriziSum, + + COUNT(CASE WHEN sub_item = 13 THEN 1 END) as KhakbardariCount, + SUM(CASE WHEN sub_item = 13 THEN sub_item_data END) as KhakbardariSum, + + province_id, province_fa, city_id, user_name as city_fa + + FROM road_items_projects + WHERE item =1 AND status = 1 + AND province_id = {$this->provinceId} + AND activity_date_time BETWEEN '{$fromDate}' AND '{$toDate}' GROUP BY city_id ORDER BY province_id ASC;"; + + $provinceActivities = DB::select($query); + + return view('', [ + 'activities' => $provinceActivities, + 'fromDate' => $fromDate, + 'toDate' => $toDate + ]); + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + $event->sheet->getDelegate()->getStyle('A:U')->getFont()->setName('Arial'); + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setHorizontal(Alignment::HORIZONTAL_CENTER); + + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setVertical(Alignment::VERTICAL_CENTER); + } + ]; + } + + 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/RoadItemsProjectController.php b/app/Http/Controllers/V3/Dashboard/RoadItemsProjectController.php index 0d9ecc5e..c2a7d122 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadItemsProjectController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadItemsProjectController.php @@ -35,7 +35,7 @@ class RoadItemsProjectController extends Controller 'end_lng', 'project_distance', 'item', 'item_fa', 'sub_item_fa', 'sub_item', 'sub_item_data', 'created_at', 'updated_at', 'province_id', 'province_fa', 'unit_fa', 'status', 'status_fa', 'supervisor_description', 'supervising_time', - 'supervisor_name', 'edarat_id', 'edarat_name', 'activity_date_time','cmmsMachines.machine_code' + 'supervisor_name', 'edarat_id', 'edarat_name', 'activity_date_time','cmmsMachines.machine_code', 'rahdaran.code', ); $allowedFilters = $columns; @@ -142,7 +142,7 @@ class RoadItemsProjectController extends Controller 'end_lng', 'project_distance', 'item', 'item_fa', 'sub_item_fa', 'sub_item', 'sub_item_data', 'created_at', 'updated_at', 'province_id', 'province_fa', 'unit_fa', 'status', 'status_fa', 'supervisor_description', 'supervising_time', - 'supervisor_name', 'edarat_id', 'edarat_name', 'activity_date_time', 'cmmsMachines.machine_code' + 'supervisor_name', 'edarat_id', 'edarat_name', 'activity_date_time', 'cmmsMachines.machine_code', 'rahdaran.code', ); $allowedFilters = $columns; diff --git a/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php b/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php index dfac13c0..6d62ba03 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php @@ -33,11 +33,11 @@ class RoadPatrolProjectController extends Controller public function supervisorIndex(Request $request): JsonResponse { $columns = array( - 'id', 'start_lat', 'start_lon', 'end_lat', 'end_lon', 'operator_id', + 'id', 'start_lat', 'start_lon', 'end_lat', 'end_lon', 'operator_id', 'created_at', 'operator_name', 'officer_plaque', 'officer_phone_number', 'officer_name', 'supervisor_description', 'supervising_time', 'supervisor_name', 'status', 'status_fa', 'distance', 'province_id', 'province_fa', 'edare_id', 'edare_name', - 'start_time', 'end_time','description', 'cmmsMachines.machine_code' + 'start_time', 'end_time','description', 'cmmsMachines.machine_code', 'rahdaran.code', ); $allowedFilters = $columns; @@ -124,9 +124,9 @@ class RoadPatrolProjectController extends Controller public function operatorIndex(Request $request): JsonResponse { $columns = array( - 'id', 'start_lat', 'start_lon', 'end_lat', 'end_lon', 'officer_plaque', + 'id', 'start_lat', 'start_lon', 'end_lat', 'end_lon', 'officer_plaque', 'created_at', 'officer_phone_number', 'officer_name', 'supervisor_description', 'supervising_time', - 'supervisor_name', 'status', 'status_fa', 'distance', 'start_time', 'end_time', 'cmmsMachines.machine_code' + 'supervisor_name', 'status', 'status_fa', 'distance', 'start_time', 'end_time', 'cmmsMachines.machine_code', 'rahdaran.code', ); $allowedFilters = $columns; From 03fd210671dcf53f3f407aa971299a1cb2962f5a Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Tue, 21 Jan 2025 10:31:25 +0330 Subject: [PATCH 03/43] create excel files --- app/Enums/InfoItem.php | 77 +++++++++++++++++++ .../CountryActivityPerSubItemReport.php | 60 ++------------- .../ProvinceActivityPerSubItemReport.php | 58 ++------------ .../Reports/RoadItemsReportController.php | 70 ++++++++++------- .../Reports/RoadItemReportService.php | 70 +++++++++++++++++ routes/v3.php | 4 + 6 files changed, 205 insertions(+), 134 deletions(-) create mode 100644 app/Enums/InfoItem.php create mode 100644 app/Services/Reports/RoadItemReportService.php diff --git a/app/Enums/InfoItem.php b/app/Enums/InfoItem.php new file mode 100644 index 00000000..8d17d409 --- /dev/null +++ b/app/Enums/InfoItem.php @@ -0,0 +1,77 @@ + [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], + 2 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], + 3 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], + 4 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], + 5 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], + 6 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], + 7 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], + 8 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], + 9 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], + 10 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], + 11 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], + 12 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], + 13 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], + 14 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], + 15 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], + 16 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], + 17 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], + 20 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], + ]; + + return $subitems[$item]; + } + + public static function persianName(int $item): string + { + $persianName = [ + 1 => '', + 2 => '', + 3 => '', + 4 => '', + 5 => '', + 6 => '', + 7 => '', + 8 => '', + 9 => '', + 10 => '', + 11 => '', + 12 => '', + 13 => '', + 14 => '', + 15 => '', + 16 => '', + 17 => '', + 20 => '', + ]; + + return $persianName[$item]; + } +} \ No newline at end of file diff --git a/app/Exports/V3/RoadItemsProjects/CountryActivityPerSubItemReport.php b/app/Exports/V3/RoadItemsProjects/CountryActivityPerSubItemReport.php index 611e0a44..9d6426fa 100644 --- a/app/Exports/V3/RoadItemsProjects/CountryActivityPerSubItemReport.php +++ b/app/Exports/V3/RoadItemsProjects/CountryActivityPerSubItemReport.php @@ -6,6 +6,7 @@ use App\Models\Province; use App\Models\RoadItemsProject; use Carbon\Carbon; use Illuminate\Contracts\View\View; +use Illuminate\Support\Collection; use Illuminate\Support\Facades\DB; use Maatwebsite\Excel\Concerns\FromView; use Maatwebsite\Excel\Concerns\ShouldAutoSize; @@ -17,65 +18,16 @@ use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; class CountryActivityPerSubItemReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings { - public function __construct(private ?string $fromDate, private ?string $toDate){} + public function __construct(private Collection $activities){} public function view(): View { - $fromDate = $this->fromDate ?? '2021-03-21'; - $toDate = $this->toDate ?? Carbon::now(); - - $query = "SELECT - COUNT(CASE WHEN sub_item = 1 THEN 1 END) as LabeAsphaltCount, - SUM(CASE WHEN sub_item = 1 THEN sub_item_data END) as LabeAsphaltSum, - - COUNT(CASE WHEN sub_item = 2 THEN 1 END) as ShaneSaziCount, - SUM(CASE WHEN sub_item = 2 THEN sub_item_data END) as ShaneSaziSum, - - COUNT(CASE WHEN sub_item = 3 THEN 1 END) as GodOftadegiCount, - SUM(CASE WHEN sub_item = 3 THEN sub_item_data END) as GodOftadegiSum, - - COUNT(CASE WHEN sub_item = 4 THEN 1 END) as LakegiriCount, - SUM(CASE WHEN sub_item = 4 THEN sub_item_data END) as LakegiriSum, - - COUNT(CASE WHEN sub_item = 5 THEN 1 END) as MarematCount, - SUM(CASE WHEN sub_item = 5 THEN sub_item_data END) as MarematSum, - - COUNT(CASE WHEN sub_item = 6 THEN 1 END) as BastarHarimCount, - SUM(CASE WHEN sub_item = 6 THEN sub_item_data END) as BastarHarimSum, - - COUNT(CASE WHEN sub_item = 8 THEN 1 END) as DarzgiriCount, - SUM(CASE WHEN sub_item = 8 THEN sub_item_data END) as DarzgiriSum, - - COUNT(CASE WHEN sub_item = 9 THEN 1 END) as MozresCount, - SUM(CASE WHEN sub_item = 9 THEN sub_item_data END) as MozresSum, - - COUNT(CASE WHEN sub_item = 10 THEN 1 END) as TarashRooyeCount, - SUM(CASE WHEN sub_item = 10 THEN sub_item_data END) as TarashRooyeSum, - - COUNT(CASE WHEN sub_item = 11 THEN 1 END) as TighzaniCount, - SUM(CASE WHEN sub_item = 11 THEN sub_item_data END) as TighzaniSum, - - COUNT(CASE WHEN sub_item = 12 THEN 1 END) as ShenriziCount, - SUM(CASE WHEN sub_item = 12 THEN sub_item_data END) as ShenriziSum, - - COUNT(CASE WHEN sub_item = 13 THEN 1 END) as KhakbardariCount, - SUM(CASE WHEN sub_item = 13 THEN sub_item_data END) as KhakbardariSum, - - province_id, - province_fa - - FROM road_items_projects - WHERE item = 1 and status = 1 - AND activity_date_time BETWEEN '{$fromDate} 00:00:00' and '{$toDate} 23:59:59' - GROUP BY province_id, province_fa - ORDER BY province_id ASC;"; - - $countryActivities = DB::select($query); + $activities = $this->activities; return view('', [ - 'activities' => $countryActivities, - 'fromDate' => $fromDate, - 'toDate' => $toDate + 'activities' => $activities->data, + 'fromDate' => $activities->fromDate, + 'toDate' => $activities->toDate ]); } diff --git a/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerSubItemReport.php b/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerSubItemReport.php index f966747e..6b8be60d 100644 --- a/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerSubItemReport.php +++ b/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerSubItemReport.php @@ -6,6 +6,7 @@ use App\Models\Province; use App\Models\RoadItemsProject; use Carbon\Carbon; use Illuminate\Contracts\View\View; +use Illuminate\Support\Collection; use Illuminate\Support\Facades\DB; use Maatwebsite\Excel\Concerns\FromView; use Maatwebsite\Excel\Concerns\ShouldAutoSize; @@ -17,63 +18,16 @@ use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; class ProvinceActivityPerSubItemReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings { - public function __construct(private ?string $fromDate, private ?string $toDate, private string $provinceId,){} + public function __construct(private Collection $activities){} public function view(): View { - $fromDate = $this->fromDate ?? '2021-03-21'; - $toDate = $this->toDate ?? Carbon::now(); - - $query = "SELECT - COUNT(CASE WHEN sub_item = 1 THEN 1 END) as LabeAsphaltCount, - SUM(CASE WHEN sub_item = 1 THEN sub_item_data END) as LabeAsphaltSum, - - COUNT(CASE WHEN sub_item = 2 THEN 1 END) as ShaneSaziCount, - SUM(CASE WHEN sub_item = 2 THEN sub_item_data END) as ShaneSaziSum, - - COUNT(CASE WHEN sub_item = 3 THEN 1 END) as GodOftadegiCount, - SUM(CASE WHEN sub_item = 3 THEN sub_item_data END) as GodOftadegiSum, - - COUNT(CASE WHEN sub_item = 4 THEN 1 END) as LakegiriCount, - SUM(CASE WHEN sub_item = 4 THEN sub_item_data END) as LakegiriSum, - - COUNT(CASE WHEN sub_item = 5 THEN 1 END) as MarematCount, - SUM(CASE WHEN sub_item = 5 THEN sub_item_data END) as MarematSum, - - COUNT(CASE WHEN sub_item = 6 THEN 1 END) as BastarHarimCount, - SUM(CASE WHEN sub_item = 6 THEN sub_item_data END) as BastarHarimSum, - - COUNT(CASE WHEN sub_item = 8 THEN 1 END) as DarzgiriCount, - SUM(CASE WHEN sub_item = 8 THEN sub_item_data END) as DarzgiriSum, - - COUNT(CASE WHEN sub_item = 9 THEN 1 END) as MozresCount, - SUM(CASE WHEN sub_item = 9 THEN sub_item_data END) as MozresSum, - - COUNT(CASE WHEN sub_item = 10 THEN 1 END) as TarashRooyeCount, - SUM(CASE WHEN sub_item = 10 THEN sub_item_data END) as TarashRooyeSum, - - COUNT(CASE WHEN sub_item = 11 THEN 1 END) as TighzaniCount, - SUM(CASE WHEN sub_item = 11 THEN sub_item_data END) as TighzaniSum, - - COUNT(CASE WHEN sub_item = 12 THEN 1 END) as ShenriziCount, - SUM(CASE WHEN sub_item = 12 THEN sub_item_data END) as ShenriziSum, - - COUNT(CASE WHEN sub_item = 13 THEN 1 END) as KhakbardariCount, - SUM(CASE WHEN sub_item = 13 THEN sub_item_data END) as KhakbardariSum, - - province_id, province_fa, city_id, user_name as city_fa - - FROM road_items_projects - WHERE item =1 AND status = 1 - AND province_id = {$this->provinceId} - AND activity_date_time BETWEEN '{$fromDate}' AND '{$toDate}' GROUP BY city_id ORDER BY province_id ASC;"; - - $provinceActivities = DB::select($query); + $activities = $this->activities; return view('', [ - 'activities' => $provinceActivities, - 'fromDate' => $fromDate, - 'toDate' => $toDate + 'activities' => $activities->data, + 'fromDate' => $activities->fromDate, + 'toDate' => $activities->toDate ]); } diff --git a/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php index 5c0d789c..45b18fc7 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php @@ -2,13 +2,17 @@ namespace App\Http\Controllers\V3\Dashboard\Reports; -use App\Exports\Activities\One\AllSheets as OneSheet; +use App\Exports\V3\RoadItemsProjects\CountryActivityPerItemReport; +use App\Exports\V3\RoadItemsProjects\CountryActivityPerSubItemReport; +use App\Exports\V3\RoadItemsProjects\ProvinceActivityPerItemReport; +use App\Exports\V3\RoadItemsProjects\ProvinceActivityPerSubItemReport; 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\Services\Reports\RoadItemReportService; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Maatwebsite\Excel\Facades\Excel; @@ -224,38 +228,48 @@ class RoadItemsReportController extends Controller return $this->successResponse($data); } - public function activityExcelPerItem(Request $request): BinaryFileResponse + public function countryActivityExcelPerItem(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); + $name = 'گزارش کشوری از فعالیت روزانه و جاری - جدول 1 ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; + return Excel::download(new CountryActivityPerItemReport($request->fromDate, $request->toDate), $name); } - public function activityExcelPerSubItem(Request $request) + public function provinceActivityExcelPerItem(Request $request): BinaryFileResponse { - $url_correction = $request->province ? "&province={$request->province}" : ""; + auth()->user()->addActivityComplete(1034); + $name = 'گزارش استانی از فعالیت روزانه و جاری - جدول 1 ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; + return Excel::download(new ProvinceActivityPerItemReport($request->fromDate, $request->toDate, $request->province), $name); + } - 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), - }; + public function countryActivityExcelPerSubItem(Request $request, RoadItemReportService $roadItemReportService): BinaryFileResponse + { + auth()->user()->addActivityComplete(1034); + + $activities = $roadItemReportService->countryActivityPerSubItem( + $request->item, + $request->fromDate, + $request->toDate, + ); + + $name = "گزارش کشوری از فعالیت روزانه و جاری({}) - جدول 2 " . verta()->now()->format('Y-m-d H-i') . '.xlsx'; + + return Excel::download(new CountryActivityPerSubItemReport($activities), $name); + } + + public function provinceActivityExcelPerSubItem(Request $request, RoadItemReportService $roadItemReportService): BinaryFileResponse + { + auth()->user()->addActivityComplete(1034); + + $activities = $roadItemReportService->provinceActivityPerSubItem( + $request->item, + $request->fromDate, + $request->toDate, + $request->province_id + ); + + $name = "گزارش استانی از فعالیت روزانه و جاری({}) - جدول 2 " . verta()->now()->format('Y-m-d H-i') . '.xlsx'; + + return Excel::download(new ProvinceActivityPerSubItemReport($activities), $name); } } diff --git a/app/Services/Reports/RoadItemReportService.php b/app/Services/Reports/RoadItemReportService.php new file mode 100644 index 00000000..25210900 --- /dev/null +++ b/app/Services/Reports/RoadItemReportService.php @@ -0,0 +1,70 @@ +selectRaw('province_id, province_fa'); + + foreach ($subItems as $key => $name) { + $query->selectRaw(" + COUNT(CASE WHEN sub_item = {$key} THEN 1 END) as {$name}Count, + SUM(CASE WHEN sub_item = {$key} THEN sub_item_data END) as {$name}Sum + "); + } + + $query->where('item', '=', $item) + ->where('status', '=', 1) + ->whereBetween('activity_date_time', [$fromDate, $toDate]) + ->groupBy('province_id', 'province_fa') + ->orderBy('province_id'); + + $activities = $query->get(); + + return collect([ + 'data' => $activities, + 'fromDate' => $fromDate, + 'toDate' => $toDate, + ]); + } + + public function provinceActivityPerSubItem(int $item, string $fromDate, string $toDate, int $provinceId): Collection + { + $subItems = InfoItem::subItems($item); + + $query = DB::table('road_items_projects') + ->selectRaw('province_id, province_fa, user_name as city_fa, city_id'); + + foreach ($subItems as $key => $name) { + $query->selectRaw(" + COUNT(CASE WHEN sub_item = {$key} THEN 1 END) as {$name}Count, + SUM(CASE WHEN sub_item = {$key} THEN sub_item_data END) as {$name}Sum + "); + } + + $query->where('item', '=', $item) + ->where('status', '=', 1) + ->where('province_id', '=', $provinceId) + ->whereBetween('activity_date_time', [$fromDate, $toDate]) + ->groupBy('city_id') + ->orderBy('province_id'); + + $activities = $query->get(); + + return collect([ + 'data' => $activities, + 'fromDate' => $fromDate, + 'toDate' => $toDate, + ]); + } +} \ No newline at end of file diff --git a/routes/v3.php b/routes/v3.php index 78e8be34..4d3177e0 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -200,6 +200,10 @@ Route::prefix('road_item_reports') Route::get('/province_activity_per_item', 'provinceActivityPerItem')->name('provinceActivityPerItem'); Route::get('/city_activity_per_item', 'cityActivityPerItem')->name('cityActivityPerItem'); Route::get('/map', 'map')->name('map'); + Route::get('/country_activity_excel_per_item', 'countryActivityExcelPerItem')->name('countryActivityExcelPerItem'); + Route::get('/province_activity_excel_per_item', 'provinceActivityExcelPerItem')->name('provinceActivityExcelPerItem'); + Route::get('/country_activity_excel_per_sub_item', 'countryActivityExcelPerSubItem')->name('countryActivityExcelPerSubItem'); + Route::get('/province_activity_excel_per_sub_item', 'provinceActivityExcelPerSubItem')->name('provinceActivityExcelPerSubItem'); }); Route::prefix('road_patrol_reports') From e6dcd36fc9e01421f4cf9c48829c520a9580d32f Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Wed, 22 Jan 2025 11:25:57 +0330 Subject: [PATCH 04/43] create report views --- app/Enums/InfoItem.php | 113 ++++++++++------- .../CountryActivityPerItemReport.php | 29 ++++- .../Reports/RoadItemReportService.php | 11 +- resources/.gitignore | 4 +- .../CountryActivityPerItem.blade.php | 119 ++++++++++++++++++ 5 files changed, 222 insertions(+), 54 deletions(-) create mode 100644 resources/views/v3/Reports/RoadItems/CountryActivityPerItem.blade.php diff --git a/app/Enums/InfoItem.php b/app/Enums/InfoItem.php index 8d17d409..ebd43a83 100644 --- a/app/Enums/InfoItem.php +++ b/app/Enums/InfoItem.php @@ -26,52 +26,77 @@ enum InfoItem: int public static function subItems(int $item): array { $subitems = [ - 1 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], - 2 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], - 3 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], - 4 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], - 5 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], - 6 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], - 7 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], - 8 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], - 9 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], - 10 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], - 11 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], - 12 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], - 13 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], - 14 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], - 15 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], - 16 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], - 17 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], - 20 => [1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13], + 1 => [1 => 'LabeAsphalt', 2 => 'ShaneSazi', 3 => 'GodOftadegi', 4 => 'Lakegiri', + 5 => 'Maremat', 6 => 'BastarHarim', 8 => 'Darzgiri', 9 => 'Mozres', + 10 => 'TarashRooye', 11 => 'Tighzani', 12 => 'Shenrizi', 13 => 'Khakbardari', + 14 => 'TaranesheBardary' + ], + + 2 => [1 => 'PaksaziSathRah', 2 => 'TanfieAbro', 3 => 'PaksaziLashe', 4 => 'PaksaziGhono', + 5 => 'PaksaziTasadofat', 6 => 'AlafKani', 7 => 'PaksaziHarim', 8 => 'JamavariGhateat', + 9 => 'PaksaziParking', 10 => 'PaksaziKenarGharnizPol', 11 => 'PaksaziJazire', + 12 => 'PaksaziTanfieDakhelPol', 13 => 'PaksaziSifon', 14 => 'PaksaziShakheDerakhtan', 15 => 'PaksaziMavadNafti', + 16 => 'AlafKaniDasti', 17 => 'RizeshBardari', 18 => 'JamavariSang', 19 => 'Layeroobi' + ], + + 3 => [1 => 'TabloEkhtari', 2 => 'TabloEtelati', 3 => 'Shabrang', 4 => 'Baztab', 5 => 'TavizTablo', + 6 => 'Maremat', 7 => 'EslahKajShodegi', 8 => 'NasbAlaemMovaghat', 9 => 'ShibShirvani' + ], + + 4 => [1 => 'Miani', 2 => 'Pol', 3 => 'Behsazi'], + + 5 => [1 => 'NegahdariTool', 2 => 'NegahdariHashieh', 3 => 'NegahdariNoghteyi', 4 => 'NegahdariNavahi', + 5 => 'NegahdariMehgir', 6 => 'NegahdariToonel', 7 => 'TamiratCable', 8 => 'TamiratKaleCheragh', + 9 => 'TamiratMafselzani', 10 => 'TamiratTablo', 11 => 'TamiratBorjNoori' + ], + + 6 => [1 => 'KhatkeshiRangGarm', 2 => 'KhatkeshiRangSard', 3 => 'TarsimKhat', + 4 => 'EjrayeTooli', 5 => 'EjrayeArzi', 6 => 'PakKardanKhotoot' + ], + + 7 => [1 => 'RangamiziTablo', 2 => 'RangamiziCheraq', 3 => 'RangimiziPayeRoshanayi', 4 => 'RangamiziPol', + 5 => 'RangamiziDarvazi', 6 => 'RangamiziHefazFelezi', 7 => 'RangamiziNewjersi', 8 => 'RangamiziSoratgah', 9 => 'RangamiziPaye' + ], + + 8 => [1 => 'ShosteshooAlaem', 2 => 'ShosteshooTablo', 3 => 'ShosteshooJadval', 4 => 'ShosteshooNewjersi', + 5 => 'ShosteshooGuardrail', 6 => 'ShosteshooToonel', 7 => 'ShosteshooPol' + ], + + 9 => [1 => 'ImensaziSarguard', 4 => ' TamiratCheraq', 5 => 'IjadShiar', + 6 => 'Zarbegir', 7 => 'NasbSoratgir', 8 => 'IjadLarzanande', + 9 => 'OstevaneImeni', 11 => 'EhdasSoratgir', 12 => 'EjrayeNoghteyi', + 13 => 'EjrayeTooli', 14 => 'TarizMaghtaei', 15 => 'HazfMavane', 16 => 'DivarChini' + ], + + 10 => [4 => 'BarkhordBaDastfroosh', 5 => 'JamavariTabloo', 6 => 'JamavariBanner'], + + 11 => [1 => 'EhdasGharnizPol', 2 => 'Lole', 3 => 'Tatvil', 4 => 'Bazsazi', + 5 => 'TamiratAbro', 6 => 'Maremat', 7 => 'Radie' + ], + + 12 => [1 => 'Zehkeshi', 2 => 'Maremat', 3 => 'Lining', 4 => 'TamirGallery', + 5 => 'Gabarit', 6 => 'Doorbin', 7 => 'Tahvie' + ], + + 13 => [1 => 'Yakhzodaei', 2 => 'BarfRoobi', + 5 => 'MizanNamak', 7 => 'Mosaferin', 8 => 'KomakResani' + ], + + 14 => [1 => 'BenzinMasrafi', 2 => 'GazMasrafi', 3 => 'MavadNafti', 4 => 'Bazsazi', + 8 => 'Service', 9 => 'NamakPash', 10 => 'Jabejayi' + ], + + 15 => [1 => 'Tamirat', 3 => 'Jalasat'], + + 16 => [1 => 'Paksazi', 2 => 'Taradod', 3 => 'BargharariErtebat', 4 => 'AbBordegi', + 5 => 'ShekastegiPol', 6 => 'HedayatTraffici', 7 => 'Bozgoshaei', 8 => 'Jabejayi', 9 => 'Laghgiri' + ], + + 20 => [1 => 'AbniyeFani', 2 => 'Alaem', 3 => 'Taranshe', 4 => 'RoyeAphalt', + 5 => 'HarimRah', 6 => 'MashinAlat'], + ]; return $subitems[$item]; } - - public static function persianName(int $item): string - { - $persianName = [ - 1 => '', - 2 => '', - 3 => '', - 4 => '', - 5 => '', - 6 => '', - 7 => '', - 8 => '', - 9 => '', - 10 => '', - 11 => '', - 12 => '', - 13 => '', - 14 => '', - 15 => '', - 16 => '', - 17 => '', - 20 => '', - ]; - - return $persianName[$item]; - } } \ No newline at end of file diff --git a/app/Exports/V3/RoadItemsProjects/CountryActivityPerItemReport.php b/app/Exports/V3/RoadItemsProjects/CountryActivityPerItemReport.php index 95f88d94..692f21af 100644 --- a/app/Exports/V3/RoadItemsProjects/CountryActivityPerItemReport.php +++ b/app/Exports/V3/RoadItemsProjects/CountryActivityPerItemReport.php @@ -43,7 +43,7 @@ class CountryActivityPerItemReport implements FromView, WithEvents, ShouldAutoSi COUNT(CASE WHEN item = 16 THEN 1 END) AS EmergencyCount, province_fa, province_id, - COUNT(CASE WHEN item != -1 THEN 1 END) AS TotalCount + COUNT(CASE WHEN item != -1 THEN 1 END) AS TotalProvinceCount FROM ( SELECT province_fa, @@ -56,10 +56,31 @@ class CountryActivityPerItemReport implements FromView, WithEvents, ShouldAutoSi WHERE status = 1 GROUP BY province_id, province_fa;"; - $countryActivities = DB::select($query); + $provinceActivities = collect(DB::select($query)); - return view('', [ - 'activities' => $countryActivities, + $totalItemCount = [ + 'totalMarematRooyeCount' => $provinceActivities->sum('MarematRooyeCount'), + 'totalPaksaziCount' => $provinceActivities->sum('PaksaziCount'), + 'totalAlaemCount' => $provinceActivities->sum('AlaemCount'), + 'totalHefazCount' => $provinceActivities->sum('HefazCount'), + 'totalRoshanayiCount' => $provinceActivities->sum('RoshanayiCount'), + 'totalKhatkeshiCount' => $provinceActivities->sum('KhatkeshiCount'), + 'totalRangamiziCount' => $provinceActivities->sum('RangamiziCount'), + 'totalWashingCount' => $provinceActivities->sum('WashingCount'), + 'totalImenSaziCount' => $provinceActivities->sum('ImenSaziCount'), + 'totalHarimCount' => $provinceActivities->sum('HarimCount'), + 'totalPolCount' => $provinceActivities->sum('PolCount'), + 'totalToonelCount' => $provinceActivities->sum('ToonelCount'), + 'totalAmaliatZemestaniCount' => $provinceActivities->sum('AmaliatZemestaniCount'), + 'totalMashinAlatCount' => $provinceActivities->sum('MashinAlatCount'), + 'totalTollhouseCount' => $provinceActivities->sum('TollhouseCount'), + 'totalEmergencyCount' => $provinceActivities->sum('EmergencyCount'), + 'totalCountryCount' => $provinceActivities->sum('TotalProvinceCount'), + ]; + + return view('v3.Reports.RoadItems.CountryActivityPerItem', [ + 'provinceCount' => $provinceActivities, + 'countryCount' => $totalItemCount, 'fromDate' => $fromDate, 'toDate' => $toDate ]); diff --git a/app/Services/Reports/RoadItemReportService.php b/app/Services/Reports/RoadItemReportService.php index 25210900..25ae1cdc 100644 --- a/app/Services/Reports/RoadItemReportService.php +++ b/app/Services/Reports/RoadItemReportService.php @@ -2,7 +2,7 @@ namespace App\Services\Reports; -use App\Enums\InfoItem; +use App\Models\InfoItem; use Illuminate\Http\Request; use Illuminate\Support\Collection; use Illuminate\Support\Facades\DB; @@ -11,15 +11,15 @@ class RoadItemReportService { public function countryActivityPerSubItem(int $item, string $fromDate, string $toDate): Collection { - $subItems = InfoItem::subItems($item); + $subItems = InfoItem::query()->where('item', $item)->get(['sub_item', 'sub_item_str']); $query = DB::table('road_items_projects') ->selectRaw('province_id, province_fa'); - foreach ($subItems as $key => $name) { + foreach ($subItems as $subItem) { $query->selectRaw(" - COUNT(CASE WHEN sub_item = {$key} THEN 1 END) as {$name}Count, - SUM(CASE WHEN sub_item = {$key} THEN sub_item_data END) as {$name}Sum + COUNT(CASE WHEN sub_item = {$subItem->sub_item} THEN 1 END) as Count_{$subItem->sub_item}, + SUM(CASE WHEN sub_item = {$subItem->sub_item} THEN sub_item_data END) as Sum_{$subItem->sub_item} "); } @@ -35,6 +35,7 @@ class RoadItemReportService 'data' => $activities, 'fromDate' => $fromDate, 'toDate' => $toDate, + 'titles' => $subItems->pluck('sub_item_str') ]); } diff --git a/resources/.gitignore b/resources/.gitignore index 9db1b5b1..58b2b566 100644 --- a/resources/.gitignore +++ b/resources/.gitignore @@ -1 +1,3 @@ -views +/views/* +!/views/v3/ +!/views/v3/*` \ No newline at end of file diff --git a/resources/views/v3/Reports/RoadItems/CountryActivityPerItem.blade.php b/resources/views/v3/Reports/RoadItems/CountryActivityPerItem.blade.php new file mode 100644 index 00000000..17c4040e --- /dev/null +++ b/resources/views/v3/Reports/RoadItems/CountryActivityPerItem.blade.php @@ -0,0 +1,119 @@ + + + + + + + + کشوری + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @foreach ($provinceCount as $activity) + + + + + + + + + + + + + + + + + + + + + @endforeach + + + + + + + + + + + + + + + + + + + + + + + +
+ تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }} +
+
+ گزارش فعالیت روزانه و جاری راهداری از تاریخ + {{ verta($fromDate)->format('Y/n/j') }} + تا + تاریخ + {{ verta($toDate)->format('Y/n/j') }} + +
اداره کل + فعالیت های + جاری و روزانه راهداری + کل
مرمت رویهپاکسازیعلائمحفاظروشناییخط کشیرنگ آمیزیشستشوایمن سازیحریمپلتونل و گالریعملیات زمستانیماشین آلاتراهدارخانهموارد اضطراری
{{ $activity['province_fa'] }}{{ $activity['MarematRooyeCount'] }}{{ $activity['PaksaziCount'] }}{{ $activity['AlaemCount'] }}{{ $activity['HefazCount'] }}{{ $activity['RoshanayiCount'] }}{{ $activity['KhatkeshiCount'] }}{{ $activity['RangamiziCount'] }}{{ $activity['WashingCount'] }}{{ $activity['ImenSaziCount'] }}{{ $activity['HarimCount'] }}{{ $activity['PolCount'] }}{{ $activity['ToonelCount'] }}{{ $activity['AmaliatZemestaniCount'] }}{{ $activity['MashinAlatCount'] }}{{ $activity['TollhouseCount'] }}{{ $activity['EmergencyCount'] }}{{ $activity['TotalProvinceCount'] }}
کشوری{{ $countryCount['totalMarematRooyeCount'] }}{{ $countryCount['totalPaksaziCount'] }}{{ $countryCount['totalAlaemCount'] }}{{ $countryCount['totalHefazCount'] }}{{ $countryCount['totalRoshanayiCount'] }}{{ $countryCount['totalKhatkeshiCount'] }}{{ $countryCount['totalRangamiziCount'] }}{{ $countryCount['totalWashingCount'] }}{{ $countryCount['totalImenSaziCount'] }}{{ $countryCount['totalHarimCount'] }}{{ $countryCount['totalPolCount'] }}{{ $countryCount['totalToonelCount'] }}{{ $countryCount['totalAmaliatZemestaniCount'] }}{{ $countryCount['totalMashinAlatCount'] }}{{ $countryCount['totalTollhouseCount'] }}{{ $countryCount['totalEmergencyCount'] }}{{ $countryCount['totalCountryCount'] }}
+ + + + From 7ba7ebaa31169e11ed4f3f2a4889fb28c3eebd50 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Wed, 22 Jan 2025 11:51:07 +0330 Subject: [PATCH 05/43] create city report excel per item --- .../ProvinceActivityPerItemReport.php | 29 ++++- .../CountryActivityPerItem.blade.php | 36 +++--- .../ProvinceActivityPerItem.blade.php | 119 ++++++++++++++++++ 3 files changed, 162 insertions(+), 22 deletions(-) create mode 100644 resources/views/v3/Reports/RoadItems/ProvinceActivityPerItem.blade.php diff --git a/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerItemReport.php b/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerItemReport.php index bd924403..5afd7875 100644 --- a/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerItemReport.php +++ b/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerItemReport.php @@ -48,7 +48,7 @@ class ProvinceActivityPerItemReport implements FromView, WithEvents, ShouldAutoS province_id, edarat_name, edarat_id, - COUNT(CASE WHEN item != -1 THEN 1 END) AS TotalCount + COUNT(CASE WHEN item != -1 THEN 1 END) AS TotalCityCount FROM ( SELECT province_fa, @@ -64,10 +64,31 @@ class ProvinceActivityPerItemReport implements FromView, WithEvents, ShouldAutoS AND province_id = {$this->provinceId} GROUP BY edarat_id, edarat_name, order by province_id ASC;"; - $provinceActivities = DB::select($query); + $cityActivities = collect(DB::select($query)); - return view('', [ - 'activities' => $provinceActivities, + $totalItemCount = [ + 'totalMarematRooyeCount' => $cityActivities->sum('MarematRooyeCount'), + 'totalPaksaziCount' => $cityActivities->sum('PaksaziCount'), + 'totalAlaemCount' => $cityActivities->sum('AlaemCount'), + 'totalHefazCount' => $cityActivities->sum('HefazCount'), + 'totalRoshanayiCount' => $cityActivities->sum('RoshanayiCount'), + 'totalKhatkeshiCount' => $cityActivities->sum('KhatkeshiCount'), + 'totalRangamiziCount' => $cityActivities->sum('RangamiziCount'), + 'totalWashingCount' => $cityActivities->sum('WashingCount'), + 'totalImenSaziCount' => $cityActivities->sum('ImenSaziCount'), + 'totalHarimCount' => $cityActivities->sum('HarimCount'), + 'totalPolCount' => $cityActivities->sum('PolCount'), + 'totalToonelCount' => $cityActivities->sum('ToonelCount'), + 'totalAmaliatZemestaniCount' => $cityActivities->sum('AmaliatZemestaniCount'), + 'totalMashinAlatCount' => $cityActivities->sum('MashinAlatCount'), + 'totalTollhouseCount' => $cityActivities->sum('TollhouseCount'), + 'totalEmergencyCount' => $cityActivities->sum('EmergencyCount'), + 'TotalProvinceCount' => $cityActivities->sum('TotalCityCount'), + ]; + + return view('v3.Reports.RoadItems.ProvinceActivityPerItem', [ + 'cityCount' => $cityActivities, + 'provinceCount' => $totalItemCount, 'fromDate' => $fromDate, 'toDate' => $toDate ]); diff --git a/resources/views/v3/Reports/RoadItems/CountryActivityPerItem.blade.php b/resources/views/v3/Reports/RoadItems/CountryActivityPerItem.blade.php index 17c4040e..1fb13aec 100644 --- a/resources/views/v3/Reports/RoadItems/CountryActivityPerItem.blade.php +++ b/resources/views/v3/Reports/RoadItems/CountryActivityPerItem.blade.php @@ -69,24 +69,24 @@ @foreach ($provinceCount as $activity) - {{ $activity['province_fa'] }} - {{ $activity['MarematRooyeCount'] }} - {{ $activity['PaksaziCount'] }} - {{ $activity['AlaemCount'] }} - {{ $activity['HefazCount'] }} - {{ $activity['RoshanayiCount'] }} - {{ $activity['KhatkeshiCount'] }} - {{ $activity['RangamiziCount'] }} - {{ $activity['WashingCount'] }} - {{ $activity['ImenSaziCount'] }} - {{ $activity['HarimCount'] }} - {{ $activity['PolCount'] }} - {{ $activity['ToonelCount'] }} - {{ $activity['AmaliatZemestaniCount'] }} - {{ $activity['MashinAlatCount'] }} - {{ $activity['TollhouseCount'] }} - {{ $activity['EmergencyCount'] }} - {{ $activity['TotalProvinceCount'] }} + {{ $activity->province_fa }} + {{ $activity->MarematRooyeCount }} + {{ $activity->PaksaziCount }} + {{ $activity->AlaemCount }} + {{ $activity->HefazCount }} + {{ $activity->RoshanayiCount }} + {{ $activity->KhatkeshiCount }} + {{ $activity->RangamiziCount }} + {{ $activity->WashingCount }} + {{ $activity->ImenSaziCount }} + {{ $activity->HarimCount }} + {{ $activity->PolCount }} + {{ $activity->ToonelCount }} + {{ $activity->AmaliatZemestaniCount }} + {{ $activity->MashinAlatCount }} + {{ $activity->TollhouseCount }} + {{ $activity->EmergencyCount }} + {{ $activity->TotalProvinceCount }} @endforeach diff --git a/resources/views/v3/Reports/RoadItems/ProvinceActivityPerItem.blade.php b/resources/views/v3/Reports/RoadItems/ProvinceActivityPerItem.blade.php new file mode 100644 index 00000000..abacb6e1 --- /dev/null +++ b/resources/views/v3/Reports/RoadItems/ProvinceActivityPerItem.blade.php @@ -0,0 +1,119 @@ + + + + + + + + استانی + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @foreach ($cityCount as $activity) + + + + + + + + + + + + + + + + + + + + + @endforeach + + + + + + + + + + + + + + + + + + + + + + + +
+ تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }} +
+
+ گزارش فعالیت روزانه و جاری راهداری از تاریخ + {{ verta($fromDate)->format('Y/n/j') }} + تا + تاریخ + {{ verta($toDate)->format('Y/n/j') }} + +
اداره کل + فعالیت های + جاری و روزانه راهداری + کل
مرمت رویهپاکسازیعلائمحفاظروشناییخط کشیرنگ آمیزیشستشوایمن سازیحریمپلتونل و گالریعملیات زمستانیماشین آلاتراهدارخانهموارد اضطراری
{{ $activity->province_fa }}{{ $activity->MarematRooyeCount }}{{ $activity->PaksaziCount }}{{ $activity->AlaemCount }}{{ $activity->HefazCount }}{{ $activity->RoshanayiCount }}{{ $activity->KhatkeshiCount }}{{ $activity->RangamiziCount }}{{ $activity->WashingCount }}{{ $activity->ImenSaziCount }}{{ $activity->HarimCount }}{{ $activity->PolCount }}{{ $activity->ToonelCount }}{{ $activity->AmaliatZemestaniCount }}{{ $activity->MashinAlatCount }}{{ $activity->TollhouseCount }}{{ $activity->EmergencyCount }}{{ $activity->TotalCityCount }}
کشوری{{ $provinceCount['totalMarematRooyeCount'] }}{{ $provinceCount['totalPaksaziCount'] }}{{ $provinceCount['totalAlaemCount'] }}{{ $provinceCount['totalHefazCount'] }}{{ $provinceCount['totalRoshanayiCount'] }}{{ $provinceCount['totalKhatkeshiCount'] }}{{ $provinceCount['totalRangamiziCount'] }}{{ $provinceCount['totalWashingCount'] }}{{ $provinceCount['totalImenSaziCount'] }}{{ $provinceCount['totalHarimCount'] }}{{ $provinceCount['totalPolCount'] }}{{ $provinceCount['totalToonelCount'] }}{{ $provinceCount['totalAmaliatZemestaniCount'] }}{{ $provinceCount['totalMashinAlatCount'] }}{{ $provinceCount['totalTollhouseCount'] }}{{ $provinceCount['totalEmergencyCount'] }}{{ $provinceCount['TotalProvinceCount'] }}
+ + + + From dab16915da7c10df06e995888083193b050b2f69 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Wed, 22 Jan 2025 14:27:39 +0330 Subject: [PATCH 06/43] create province excel report --- .../CountryActivityPerItemReport.php | 6 +-- .../ProvinceActivityPerItemReport.php | 8 ++-- .../CountryActivityPerItem.blade.php | 41 +++++++++--------- .../ProvinceActivityPerItem.blade.php | 43 ++++++++++--------- 4 files changed, 50 insertions(+), 48 deletions(-) diff --git a/app/Exports/V3/RoadItemsProjects/CountryActivityPerItemReport.php b/app/Exports/V3/RoadItemsProjects/CountryActivityPerItemReport.php index 692f21af..a5f33307 100644 --- a/app/Exports/V3/RoadItemsProjects/CountryActivityPerItemReport.php +++ b/app/Exports/V3/RoadItemsProjects/CountryActivityPerItemReport.php @@ -21,7 +21,7 @@ class CountryActivityPerItemReport implements FromView, WithEvents, ShouldAutoSi public function view(): View { - $fromDate = $this->fromDate ?? '2021-03-21'; + $fromDate = $this->fromDate ?? '2021-03-21 00:00:00'; $toDate = $this->toDate ?? \Carbon\Carbon::now(); $query = "SELECT @@ -43,7 +43,7 @@ class CountryActivityPerItemReport implements FromView, WithEvents, ShouldAutoSi COUNT(CASE WHEN item = 16 THEN 1 END) AS EmergencyCount, province_fa, province_id, - COUNT(CASE WHEN item != -1 THEN 1 END) AS TotalProvinceCount + COUNT(CASE WHEN item != 20 THEN 1 END) AS TotalProvinceCount FROM ( SELECT province_fa, @@ -51,7 +51,7 @@ class CountryActivityPerItemReport implements FromView, WithEvents, ShouldAutoSi item, status FROM road_items_projects - WHERE activity_date_time BETWEEN '{$fromDate} 00:00:00' and '{$toDate} 23:59:59' + WHERE activity_date_time BETWEEN '{$fromDate}' and '{$toDate}' ) AS merged_table WHERE status = 1 GROUP BY province_id, province_fa;"; diff --git a/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerItemReport.php b/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerItemReport.php index 5afd7875..7b8f99b2 100644 --- a/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerItemReport.php +++ b/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerItemReport.php @@ -24,7 +24,7 @@ class ProvinceActivityPerItemReport implements FromView, WithEvents, ShouldAutoS public function view(): View { - $fromDate = $this->fromDate ?? '2021-03-21'; + $fromDate = $this->fromDate ?? '2021-03-21 00:00:00'; $toDate = $this->toDate ?? \Carbon\Carbon::now(); $query = "SELECT @@ -48,7 +48,7 @@ class ProvinceActivityPerItemReport implements FromView, WithEvents, ShouldAutoS province_id, edarat_name, edarat_id, - COUNT(CASE WHEN item != -1 THEN 1 END) AS TotalCityCount + COUNT(CASE WHEN item != 20 THEN 1 END) AS TotalCityCount FROM ( SELECT province_fa, @@ -58,11 +58,11 @@ class ProvinceActivityPerItemReport implements FromView, WithEvents, ShouldAutoS item, status FROM road_items_projects - WHERE activity_date_time BETWEEN '{$fromDate} 00:00:00' and '{$toDate} 23:59:59' + WHERE activity_date_time BETWEEN '{$fromDate}' and '{$toDate}' ) AS merged_table WHERE status = 1 AND province_id = {$this->provinceId} - GROUP BY edarat_id, edarat_name, order by province_id ASC;"; + GROUP BY edarat_id, edarat_name order by province_id ASC;"; $cityActivities = collect(DB::select($query)); diff --git a/resources/views/v3/Reports/RoadItems/CountryActivityPerItem.blade.php b/resources/views/v3/Reports/RoadItems/CountryActivityPerItem.blade.php index 1fb13aec..cc387f3d 100644 --- a/resources/views/v3/Reports/RoadItems/CountryActivityPerItem.blade.php +++ b/resources/views/v3/Reports/RoadItems/CountryActivityPerItem.blade.php @@ -67,6 +67,27 @@ + + کل کشور + {{ $countryCount['totalMarematRooyeCount'] }} + {{ $countryCount['totalPaksaziCount'] }} + {{ $countryCount['totalAlaemCount'] }} + {{ $countryCount['totalHefazCount'] }} + {{ $countryCount['totalRoshanayiCount'] }} + {{ $countryCount['totalKhatkeshiCount'] }} + {{ $countryCount['totalRangamiziCount'] }} + {{ $countryCount['totalWashingCount'] }} + {{ $countryCount['totalImenSaziCount'] }} + {{ $countryCount['totalHarimCount'] }} + {{ $countryCount['totalPolCount'] }} + {{ $countryCount['totalToonelCount'] }} + {{ $countryCount['totalAmaliatZemestaniCount'] }} + {{ $countryCount['totalMashinAlatCount'] }} + {{ $countryCount['totalTollhouseCount'] }} + {{ $countryCount['totalEmergencyCount'] }} + {{ $countryCount['totalCountryCount'] }} + + @foreach ($provinceCount as $activity) {{ $activity->province_fa }} @@ -89,26 +110,6 @@ {{ $activity->TotalProvinceCount }} @endforeach - - کشوری - {{ $countryCount['totalMarematRooyeCount'] }} - {{ $countryCount['totalPaksaziCount'] }} - {{ $countryCount['totalAlaemCount'] }} - {{ $countryCount['totalHefazCount'] }} - {{ $countryCount['totalRoshanayiCount'] }} - {{ $countryCount['totalKhatkeshiCount'] }} - {{ $countryCount['totalRangamiziCount'] }} - {{ $countryCount['totalWashingCount'] }} - {{ $countryCount['totalImenSaziCount'] }} - {{ $countryCount['totalHarimCount'] }} - {{ $countryCount['totalPolCount'] }} - {{ $countryCount['totalToonelCount'] }} - {{ $countryCount['totalAmaliatZemestaniCount'] }} - {{ $countryCount['totalMashinAlatCount'] }} - {{ $countryCount['totalTollhouseCount'] }} - {{ $countryCount['totalEmergencyCount'] }} - {{ $countryCount['totalCountryCount'] }} - diff --git a/resources/views/v3/Reports/RoadItems/ProvinceActivityPerItem.blade.php b/resources/views/v3/Reports/RoadItems/ProvinceActivityPerItem.blade.php index abacb6e1..55a708ee 100644 --- a/resources/views/v3/Reports/RoadItems/ProvinceActivityPerItem.blade.php +++ b/resources/views/v3/Reports/RoadItems/ProvinceActivityPerItem.blade.php @@ -67,9 +67,30 @@ + + کل استان + {{ $provinceCount['totalMarematRooyeCount'] }} + {{ $provinceCount['totalPaksaziCount'] }} + {{ $provinceCount['totalAlaemCount'] }} + {{ $provinceCount['totalHefazCount'] }} + {{ $provinceCount['totalRoshanayiCount'] }} + {{ $provinceCount['totalKhatkeshiCount'] }} + {{ $provinceCount['totalRangamiziCount'] }} + {{ $provinceCount['totalWashingCount'] }} + {{ $provinceCount['totalImenSaziCount'] }} + {{ $provinceCount['totalHarimCount'] }} + {{ $provinceCount['totalPolCount'] }} + {{ $provinceCount['totalToonelCount'] }} + {{ $provinceCount['totalAmaliatZemestaniCount'] }} + {{ $provinceCount['totalMashinAlatCount'] }} + {{ $provinceCount['totalTollhouseCount'] }} + {{ $provinceCount['totalEmergencyCount'] }} + {{ $provinceCount['TotalProvinceCount'] }} + + @foreach ($cityCount as $activity) - {{ $activity->province_fa }} + {{ $activity->edarat_name }} {{ $activity->MarematRooyeCount }} {{ $activity->PaksaziCount }} {{ $activity->AlaemCount }} @@ -89,26 +110,6 @@ {{ $activity->TotalCityCount }} @endforeach - - کشوری - {{ $provinceCount['totalMarematRooyeCount'] }} - {{ $provinceCount['totalPaksaziCount'] }} - {{ $provinceCount['totalAlaemCount'] }} - {{ $provinceCount['totalHefazCount'] }} - {{ $provinceCount['totalRoshanayiCount'] }} - {{ $provinceCount['totalKhatkeshiCount'] }} - {{ $provinceCount['totalRangamiziCount'] }} - {{ $provinceCount['totalWashingCount'] }} - {{ $provinceCount['totalImenSaziCount'] }} - {{ $provinceCount['totalHarimCount'] }} - {{ $provinceCount['totalPolCount'] }} - {{ $provinceCount['totalToonelCount'] }} - {{ $provinceCount['totalAmaliatZemestaniCount'] }} - {{ $provinceCount['totalMashinAlatCount'] }} - {{ $provinceCount['totalTollhouseCount'] }} - {{ $provinceCount['totalEmergencyCount'] }} - {{ $provinceCount['TotalProvinceCount'] }} - From ac2cb74398d3ce917b3f4ae6fc1f5aab6cf2cdf2 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sat, 25 Jan 2025 13:34:45 +0330 Subject: [PATCH 07/43] add detail to api --- .../CountryActivityPerSubItemReport.php | 5 +- app/Http/Controllers/DevelopController.php | 2 +- .../RoadItemsProjectController.php | 4 +- .../Dashboard/RoadItemsProjectController.php | 4 +- .../Reports/RoadItemReportService.php | 28 +++++--- .../CountryActivityPerSubItem.blade.php | 70 +++++++++++++++++++ 6 files changed, 98 insertions(+), 15 deletions(-) create mode 100644 resources/views/v3/Reports/RoadItems/CountryActivityPerSubItem.blade.php diff --git a/app/Exports/V3/RoadItemsProjects/CountryActivityPerSubItemReport.php b/app/Exports/V3/RoadItemsProjects/CountryActivityPerSubItemReport.php index 9d6426fa..c54e9f9e 100644 --- a/app/Exports/V3/RoadItemsProjects/CountryActivityPerSubItemReport.php +++ b/app/Exports/V3/RoadItemsProjects/CountryActivityPerSubItemReport.php @@ -24,10 +24,11 @@ class CountryActivityPerSubItemReport implements FromView, WithEvents, ShouldAut { $activities = $this->activities; - return view('', [ + return view('v3.Reports.RoadItems.CountryActivityPerSubItem', [ 'activities' => $activities->data, 'fromDate' => $activities->fromDate, - 'toDate' => $activities->toDate + 'toDate' => $activities->toDate, + 'details' => $activities->details ]); } diff --git a/app/Http/Controllers/DevelopController.php b/app/Http/Controllers/DevelopController.php index 9fa55bde..d7eaec3e 100644 --- a/app/Http/Controllers/DevelopController.php +++ b/app/Http/Controllers/DevelopController.php @@ -658,7 +658,7 @@ class DevelopController extends Controller $save = $file->move(storage_path('images'), $fileName); - \App\Helpers\Compress::resize($save); +// \App\Helpers\Compress::resize($save); return response()->json(['msg' => 'ok']); } diff --git a/app/Http/Controllers/RoadItemsProjectController.php b/app/Http/Controllers/RoadItemsProjectController.php index ff774208..502f8ad1 100644 --- a/app/Http/Controllers/RoadItemsProjectController.php +++ b/app/Http/Controllers/RoadItemsProjectController.php @@ -154,13 +154,13 @@ class RoadItemsProjectController extends Controller $after = $request->file('after_image')->store('road_items_projects_new/after', 'public'); $roadItems->files()->create(['path' => $after]); $urlAfter = "/var/www/rms/public/storage/{$after}"; - \App\Helpers\Compress::resize($urlAfter); +// \App\Helpers\Compress::resize($urlAfter); } if ($request->has('before_image')) { $before = $request->file('before_image')->store('/road_items_projects_new/before', 'public'); $roadItems->files()->create(['path' => $before]); $urlBefore = "/var/www/rms/public/storage/{$before}"; - \App\Helpers\Compress::resize($urlBefore); +// \App\Helpers\Compress::resize($urlBefore); } if (auth()->user()) { diff --git a/app/Http/Controllers/V2/Dashboard/RoadItemsProjectController.php b/app/Http/Controllers/V2/Dashboard/RoadItemsProjectController.php index 445db4ad..e6e8e907 100644 --- a/app/Http/Controllers/V2/Dashboard/RoadItemsProjectController.php +++ b/app/Http/Controllers/V2/Dashboard/RoadItemsProjectController.php @@ -372,7 +372,7 @@ class RoadItemsProjectController extends Controller ]); // $road_item->files()->create(['path' => $after]); $urlAfter = "/var/www/rms/public/storage/{$after}"; - \App\Helpers\Compress::resize($urlAfter); +// \App\Helpers\Compress::resize($urlAfter); } if ($request->has('before_image')) { Storage::delete('public/'. $road_item->files[1]->path); @@ -383,7 +383,7 @@ class RoadItemsProjectController extends Controller ]); // $road_item->files()->create(['path' => $before]); $urlBefore = "/var/www/rms/public/storage/{$before}"; - \App\Helpers\Compress::resize($urlBefore); +// \App\Helpers\Compress::resize($urlBefore); } } diff --git a/app/Services/Reports/RoadItemReportService.php b/app/Services/Reports/RoadItemReportService.php index 25ae1cdc..34da3e02 100644 --- a/app/Services/Reports/RoadItemReportService.php +++ b/app/Services/Reports/RoadItemReportService.php @@ -11,10 +11,10 @@ class RoadItemReportService { public function countryActivityPerSubItem(int $item, string $fromDate, string $toDate): Collection { - $subItems = InfoItem::query()->where('item', $item)->get(['sub_item', 'sub_item_str']); + $subItems = InfoItem::query()->where('item', $item)->get(['sub_item', 'sub_item_str', 'sub_item_unit']); $query = DB::table('road_items_projects') - ->selectRaw('province_id, province_fa'); + ->selectRaw('province_id, province_fa, sub_item'); foreach ($subItems as $subItem) { $query->selectRaw(" @@ -31,25 +31,36 @@ class RoadItemReportService $activities = $query->get(); + $totalItemCount = [ + 'province_fa' => 'کشوری' + ]; + + foreach ($subItems as $subItem) { + $totalItemCount = [ + "total_count_{$subItem->sub_item}" => $activities->sum("Count_{$subItem->sub_item}"), + "total_sum_{$subItem->sub_item}" => $activities->sum("Sum_{$subItem->sub_item}"), + ]; + } + return collect([ - 'data' => $activities, + 'data' => $activities->push($totalItemCount), 'fromDate' => $fromDate, 'toDate' => $toDate, - 'titles' => $subItems->pluck('sub_item_str') + 'details' => $subItems, ]); } public function provinceActivityPerSubItem(int $item, string $fromDate, string $toDate, int $provinceId): Collection { - $subItems = InfoItem::subItems($item); + $subItems = InfoItem::query()->where('item', $item)->get(['sub_item', 'sub_item_str', 'sub_item_unit']); $query = DB::table('road_items_projects') ->selectRaw('province_id, province_fa, user_name as city_fa, city_id'); - foreach ($subItems as $key => $name) { + foreach ($subItems as $subItem) { $query->selectRaw(" - COUNT(CASE WHEN sub_item = {$key} THEN 1 END) as {$name}Count, - SUM(CASE WHEN sub_item = {$key} THEN sub_item_data END) as {$name}Sum + COUNT(CASE WHEN sub_item = {$subItem->sub_item} THEN 1 END) as Count_{$subItem->sub_item}, + SUM(CASE WHEN sub_item = {$subItem->sub_item} THEN sub_item_data END) as Sum_{$subItem->sub_item} "); } @@ -66,6 +77,7 @@ class RoadItemReportService 'data' => $activities, 'fromDate' => $fromDate, 'toDate' => $toDate, + 'details' => $subItems ]); } } \ No newline at end of file diff --git a/resources/views/v3/Reports/RoadItems/CountryActivityPerSubItem.blade.php b/resources/views/v3/Reports/RoadItems/CountryActivityPerSubItem.blade.php new file mode 100644 index 00000000..b1f288a5 --- /dev/null +++ b/resources/views/v3/Reports/RoadItems/CountryActivityPerSubItem.blade.php @@ -0,0 +1,70 @@ + + + + + + + کشوری + + + + + + + + + + + + + + + + > + + + + + + + @foreach($details as $detail) + + + + + + + @foreach ($activities as $activity) + + + + @if($activity->sub_item == $detail->sub_item) + + + @endif + + + @endforeach + @endforeach + +
+ تاریخ دریافت گزارش: {{verta()->now()->format('Y/m/d H:i')}} +
+ تعداد و احجام فعالیت های روزانه و جاری راهداری ثبت شده از تاریخ + {{verta($fromDate)->format('Y/n/j')}} + تا + تاریخ + {{verta($toDate)->format('Y/n/j')}} +
اداره کل
+
+ {{ $detail->sub_item_str }} +
+ تعداد + {{ $detail->unit }}مجموع +
+
+
{{ $activity->province_fa }}{{ $activity->Count_ }}{{ round($activity->Sum_, 1) }}
+ + + + \ No newline at end of file From 735e7f68e54e5198825ec2b792a396bca4a39b8a Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sat, 25 Jan 2025 14:01:19 +0330 Subject: [PATCH 08/43] fix the blade --- .../CountryActivityPerSubItemReport.php | 15 +++++---------- app/Services/Reports/RoadItemReportService.php | 9 ++++----- .../RoadItems/CountryActivityPerSubItem.blade.php | 10 +++++----- 3 files changed, 14 insertions(+), 20 deletions(-) diff --git a/app/Exports/V3/RoadItemsProjects/CountryActivityPerSubItemReport.php b/app/Exports/V3/RoadItemsProjects/CountryActivityPerSubItemReport.php index c54e9f9e..16fc87cf 100644 --- a/app/Exports/V3/RoadItemsProjects/CountryActivityPerSubItemReport.php +++ b/app/Exports/V3/RoadItemsProjects/CountryActivityPerSubItemReport.php @@ -2,12 +2,7 @@ namespace App\Exports\V3\RoadItemsProjects; -use App\Models\Province; -use App\Models\RoadItemsProject; -use Carbon\Carbon; use Illuminate\Contracts\View\View; -use Illuminate\Support\Collection; -use Illuminate\Support\Facades\DB; use Maatwebsite\Excel\Concerns\FromView; use Maatwebsite\Excel\Concerns\ShouldAutoSize; use Maatwebsite\Excel\Concerns\WithDrawings; @@ -18,17 +13,17 @@ use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; class CountryActivityPerSubItemReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings { - public function __construct(private Collection $activities){} + public function __construct(private array $activities){} public function view(): View { $activities = $this->activities; return view('v3.Reports.RoadItems.CountryActivityPerSubItem', [ - 'activities' => $activities->data, - 'fromDate' => $activities->fromDate, - 'toDate' => $activities->toDate, - 'details' => $activities->details + 'activities' => $activities["data"], + 'fromDate' => $activities["fromDate"], + 'toDate' => $activities["toDate"], + 'details' => $activities["details"] ]); } diff --git a/app/Services/Reports/RoadItemReportService.php b/app/Services/Reports/RoadItemReportService.php index 34da3e02..146d3250 100644 --- a/app/Services/Reports/RoadItemReportService.php +++ b/app/Services/Reports/RoadItemReportService.php @@ -3,13 +3,12 @@ namespace App\Services\Reports; use App\Models\InfoItem; -use Illuminate\Http\Request; use Illuminate\Support\Collection; use Illuminate\Support\Facades\DB; class RoadItemReportService { - public function countryActivityPerSubItem(int $item, string $fromDate, string $toDate): Collection + public function countryActivityPerSubItem(int $item, string $fromDate, string $toDate): array { $subItems = InfoItem::query()->where('item', $item)->get(['sub_item', 'sub_item_str', 'sub_item_unit']); @@ -36,18 +35,18 @@ class RoadItemReportService ]; foreach ($subItems as $subItem) { - $totalItemCount = [ + $totalItemCount[] = [ "total_count_{$subItem->sub_item}" => $activities->sum("Count_{$subItem->sub_item}"), "total_sum_{$subItem->sub_item}" => $activities->sum("Sum_{$subItem->sub_item}"), ]; } - return collect([ + return [ 'data' => $activities->push($totalItemCount), 'fromDate' => $fromDate, 'toDate' => $toDate, 'details' => $subItems, - ]); + ]; } public function provinceActivityPerSubItem(int $item, string $fromDate, string $toDate, int $provinceId): Collection diff --git a/resources/views/v3/Reports/RoadItems/CountryActivityPerSubItem.blade.php b/resources/views/v3/Reports/RoadItems/CountryActivityPerSubItem.blade.php index b1f288a5..8f465ba1 100644 --- a/resources/views/v3/Reports/RoadItems/CountryActivityPerSubItem.blade.php +++ b/resources/views/v3/Reports/RoadItems/CountryActivityPerSubItem.blade.php @@ -42,7 +42,7 @@ {{ $detail->sub_item_str }}
تعداد - {{ $detail->unit }}مجموع + {{ $detail["sub_item_unit"] }}مجموع
@@ -52,11 +52,11 @@ @foreach ($activities as $activity) - {{ $activity->province_fa }} + {{ $activity["province_fa"] }} - @if($activity->sub_item == $detail->sub_item) - {{ $activity->Count_ }} - {{ round($activity->Sum_, 1) }} + @if($activity["sub_item"] == $detail["sub_item"]) + {{ $activity["Count_{$activity["sub_item"]}"] }} + {{ round($activity["Sum_{$activity["sub_item"]}"], 1) }} @endif From 2e10afa5eb00b49c12a6b47bb75c445b01c0f08a Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 26 Jan 2025 09:44:27 +0330 Subject: [PATCH 09/43] create blade files --- .../Reports/RoadItemReportService.php | 27 +++++-- .../CountryActivityPerSubItem.blade.php | 50 +++++++------ .../ProvinceActivityPerSubItem.blade.php | 74 +++++++++++++++++++ 3 files changed, 122 insertions(+), 29 deletions(-) create mode 100644 resources/views/v3/Reports/RoadItems/ProvinceActivityPerSubItem.blade.php diff --git a/app/Services/Reports/RoadItemReportService.php b/app/Services/Reports/RoadItemReportService.php index 146d3250..ae052bfe 100644 --- a/app/Services/Reports/RoadItemReportService.php +++ b/app/Services/Reports/RoadItemReportService.php @@ -10,10 +10,12 @@ class RoadItemReportService { public function countryActivityPerSubItem(int $item, string $fromDate, string $toDate): array { - $subItems = InfoItem::query()->where('item', $item)->get(['sub_item', 'sub_item_str', 'sub_item_unit']); + $subItems = InfoItem::query()->where('item', $item) + ->orderBy('sub_item') + ->get(['sub_item', 'sub_item_str', 'sub_item_unit']); $query = DB::table('road_items_projects') - ->selectRaw('province_id, province_fa, sub_item'); + ->selectRaw('province_id, province_fa'); foreach ($subItems as $subItem) { $query->selectRaw(" @@ -45,13 +47,15 @@ class RoadItemReportService 'data' => $activities->push($totalItemCount), 'fromDate' => $fromDate, 'toDate' => $toDate, - 'details' => $subItems, + 'details' => $subItems->keyBy('sub_item'), ]; } public function provinceActivityPerSubItem(int $item, string $fromDate, string $toDate, int $provinceId): Collection { - $subItems = InfoItem::query()->where('item', $item)->get(['sub_item', 'sub_item_str', 'sub_item_unit']); + $subItems = InfoItem::query()->where('item', $item) + ->orderBy('sub_item') + ->get(['sub_item', 'sub_item_str', 'sub_item_unit']); $query = DB::table('road_items_projects') ->selectRaw('province_id, province_fa, user_name as city_fa, city_id'); @@ -72,11 +76,22 @@ class RoadItemReportService $activities = $query->get(); + $totalItemCount = [ + 'city_fa' => 'استانی' + ]; + + foreach ($subItems as $subItem) { + $totalItemCount[] = [ + "total_count_{$subItem->sub_item}" => $activities->sum("Count_{$subItem->sub_item}"), + "total_sum_{$subItem->sub_item}" => $activities->sum("Sum_{$subItem->sub_item}"), + ]; + } + return collect([ - 'data' => $activities, + 'data' => $activities->push($totalItemCount), 'fromDate' => $fromDate, 'toDate' => $toDate, - 'details' => $subItems + 'details' => $subItems->keyBy('sub_item') ]); } } \ No newline at end of file diff --git a/resources/views/v3/Reports/RoadItems/CountryActivityPerSubItem.blade.php b/resources/views/v3/Reports/RoadItems/CountryActivityPerSubItem.blade.php index 8f465ba1..62d19ec5 100644 --- a/resources/views/v3/Reports/RoadItems/CountryActivityPerSubItem.blade.php +++ b/resources/views/v3/Reports/RoadItems/CountryActivityPerSubItem.blade.php @@ -23,7 +23,7 @@ - تعداد و احجام فعالیت های روزانه و جاری راهداری ثبت شده از تاریخ + تعداد و مجموع فعالیت های روزانه و جاری راهداری ثبت شده از تاریخ {{verta($fromDate)->format('Y/n/j')}} تا تاریخ @@ -33,34 +33,38 @@ اداره کل + فعالیت های انجام شده + + + + @foreach($details as $detail) + {{ $detail->sub_item_str }} + @endforeach + + + + @foreach($details as $detail) + تعداد + مجموع ({{ $detail->sub_item_unit }}) + @endforeach - @foreach($details as $detail) - - -
- {{ $detail->sub_item_str }} -
- تعداد - {{ $detail["sub_item_unit"] }}مجموع -
-
- - - @foreach ($activities as $activity) - - {{ $activity["province_fa"] }} + @foreach ($activities as $activity) + + {{ $activity->province_fa }} - @if($activity["sub_item"] == $detail["sub_item"]) - {{ $activity["Count_{$activity["sub_item"]}"] }} - {{ round($activity["Sum_{$activity["sub_item"]}"], 1) }} - @endif - - - @endforeach + @foreach ($details as $index => $detail) + + {{ $activity->{'Count_' . ($index)} ?? '-' }} + + + {{ isset($activity->{'Sum_' . ($index)}) ? round($activity->{'Sum_' . ($index)}, 1) : '-' }} + + @endforeach + @endforeach diff --git a/resources/views/v3/Reports/RoadItems/ProvinceActivityPerSubItem.blade.php b/resources/views/v3/Reports/RoadItems/ProvinceActivityPerSubItem.blade.php new file mode 100644 index 00000000..9ff1b3cf --- /dev/null +++ b/resources/views/v3/Reports/RoadItems/ProvinceActivityPerSubItem.blade.php @@ -0,0 +1,74 @@ + + + + + + + استانی + + + + + + + + + + + + + + + + > + + + + + + + + + @foreach($details as $detail) + + @endforeach + + + + @foreach($details as $detail) + + + @endforeach + + + + + + @foreach ($activities as $activity) + + + + @foreach ($details as $index => $detail) + + + @endforeach + + @endforeach + +
+ تاریخ دریافت گزارش: {{verta()->now()->format('Y/m/d H:i')}} +
+ تعداد و مجموع فعالیت های روزانه و جاری راهداری ثبت شده از تاریخ + {{verta($fromDate)->format('Y/n/j')}} + تا + تاریخ + {{verta($toDate)->format('Y/n/j')}} +
ادارهفعالیت های انجام شده
{{ $detail->sub_item_str }}
تعدادمجموع ({{ $detail->sub_item_unit }})
{{ $activity->city_fa }} + {{ $activity->{'Count_' . ($index)} ?? '-' }} + + {{ isset($activity->{'Sum_' . ($index)}) ? round($activity->{'Sum_' . ($index)}, 1) : '-' }} +
+ + + + \ No newline at end of file From 01a30c763cb59c9869f34c85e4ce138e51040ef3 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 26 Jan 2025 10:09:22 +0330 Subject: [PATCH 10/43] remove the nested array --- .../Reports/RoadItemsReportController.php | 4 ++-- app/Services/Reports/RoadItemReportService.php | 16 ++++++---------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php index 45b18fc7..be92abb6 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php @@ -252,7 +252,7 @@ class RoadItemsReportController extends Controller $request->toDate, ); - $name = "گزارش کشوری از فعالیت روزانه و جاری({}) - جدول 2 " . verta()->now()->format('Y-m-d H-i') . '.xlsx'; + $name = "گزارش کشوری از فعالیت روزانه و جاری - جدول 2 " . verta()->now()->format('Y-m-d H-i') . '.xlsx'; return Excel::download(new CountryActivityPerSubItemReport($activities), $name); } @@ -268,7 +268,7 @@ class RoadItemsReportController extends Controller $request->province_id ); - $name = "گزارش استانی از فعالیت روزانه و جاری({}) - جدول 2 " . verta()->now()->format('Y-m-d H-i') . '.xlsx'; + $name = "گزارش استانی از فعالیت روزانه و جاری - جدول 2 " . verta()->now()->format('Y-m-d H-i') . '.xlsx'; return Excel::download(new ProvinceActivityPerSubItemReport($activities), $name); } diff --git a/app/Services/Reports/RoadItemReportService.php b/app/Services/Reports/RoadItemReportService.php index ae052bfe..c487d526 100644 --- a/app/Services/Reports/RoadItemReportService.php +++ b/app/Services/Reports/RoadItemReportService.php @@ -37,14 +37,12 @@ class RoadItemReportService ]; foreach ($subItems as $subItem) { - $totalItemCount[] = [ - "total_count_{$subItem->sub_item}" => $activities->sum("Count_{$subItem->sub_item}"), - "total_sum_{$subItem->sub_item}" => $activities->sum("Sum_{$subItem->sub_item}"), - ]; + $totalItemCount["Count_{$subItem->sub_item}"] = $activities->sum("Count_{$subItem->sub_item}"); + $totalItemCount["Sum_{$subItem->sub_item}"] = $activities->sum("Sum_{$subItem->sub_item}"); } return [ - 'data' => $activities->push($totalItemCount), + 'data' => $activities->push((object)$totalItemCount), 'fromDate' => $fromDate, 'toDate' => $toDate, 'details' => $subItems->keyBy('sub_item'), @@ -81,14 +79,12 @@ class RoadItemReportService ]; foreach ($subItems as $subItem) { - $totalItemCount[] = [ - "total_count_{$subItem->sub_item}" => $activities->sum("Count_{$subItem->sub_item}"), - "total_sum_{$subItem->sub_item}" => $activities->sum("Sum_{$subItem->sub_item}"), - ]; + $totalItemCount["Count_{$subItem->sub_item}"] = $activities->sum("Count_{$subItem->sub_item}"); + $totalItemCount["Sum_{$subItem->sub_item}"] = $activities->sum("Sum_{$subItem->sub_item}"); } return collect([ - 'data' => $activities->push($totalItemCount), + 'data' => $activities->push((object)$totalItemCount), 'fromDate' => $fromDate, 'toDate' => $toDate, 'details' => $subItems->keyBy('sub_item') From 3158ac3102031e0123b3bda2f1aa0e37a1fe5a63 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 26 Jan 2025 11:14:30 +0330 Subject: [PATCH 11/43] debug city export --- .../ProvinceActivityPerSubItemReport.php | 11 ++++++----- app/Services/Reports/RoadItemReportService.php | 8 ++++---- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerSubItemReport.php b/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerSubItemReport.php index 6b8be60d..2d8aad5a 100644 --- a/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerSubItemReport.php +++ b/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerSubItemReport.php @@ -18,16 +18,17 @@ use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; class ProvinceActivityPerSubItemReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings { - public function __construct(private Collection $activities){} + public function __construct(private array $activities){} public function view(): View { $activities = $this->activities; - return view('', [ - 'activities' => $activities->data, - 'fromDate' => $activities->fromDate, - 'toDate' => $activities->toDate + return view('v3.Reports.RoadItems.ProvinceActivityPerSubItem', [ + 'activities' => $activities["data"], + 'fromDate' => $activities["fromDate"], + 'toDate' => $activities["toDate"], + 'details' => $activities["details"] ]); } diff --git a/app/Services/Reports/RoadItemReportService.php b/app/Services/Reports/RoadItemReportService.php index c487d526..240d6bb4 100644 --- a/app/Services/Reports/RoadItemReportService.php +++ b/app/Services/Reports/RoadItemReportService.php @@ -49,14 +49,14 @@ class RoadItemReportService ]; } - public function provinceActivityPerSubItem(int $item, string $fromDate, string $toDate, int $provinceId): Collection + public function provinceActivityPerSubItem(int $item, string $fromDate, string $toDate, int $provinceId): array { $subItems = InfoItem::query()->where('item', $item) ->orderBy('sub_item') ->get(['sub_item', 'sub_item_str', 'sub_item_unit']); $query = DB::table('road_items_projects') - ->selectRaw('province_id, province_fa, user_name as city_fa, city_id'); + ->selectRaw('province_id, province_fa, TRIM(SUBSTRING_INDEX(user_name, "استان", 1)) as city_fa, city_id'); foreach ($subItems as $subItem) { $query->selectRaw(" @@ -83,11 +83,11 @@ class RoadItemReportService $totalItemCount["Sum_{$subItem->sub_item}"] = $activities->sum("Sum_{$subItem->sub_item}"); } - return collect([ + return [ 'data' => $activities->push((object)$totalItemCount), 'fromDate' => $fromDate, 'toDate' => $toDate, 'details' => $subItems->keyBy('sub_item') - ]); + ]; } } \ No newline at end of file From 55f8b453041192b092d19226011c6918a3773dce Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 26 Jan 2025 14:00:12 +0330 Subject: [PATCH 12/43] create road patrol exports --- .../V3/RoadPatrols/CountryActivity.php | 72 ++++++++++ .../V3/RoadPatrols/ProvinceActivity.php | 72 ++++++++++ .../Reports/RoadPatrolReportController.php | 124 +++-------------- .../Reports/RoadPatrolReportService.php | 126 ++++++++++++++++++ .../RoadPatrols/CountryActivity.blade.php | 102 ++++++++++++++ .../RoadPatrols/ProvinceActivity.blade.php | 98 ++++++++++++++ routes/v3.php | 5 +- 7 files changed, 493 insertions(+), 106 deletions(-) create mode 100644 app/Exports/V3/RoadPatrols/CountryActivity.php create mode 100644 app/Exports/V3/RoadPatrols/ProvinceActivity.php create mode 100644 app/Services/Reports/RoadPatrolReportService.php create mode 100644 resources/views/v3/Reports/RoadPatrols/CountryActivity.blade.php create mode 100644 resources/views/v3/Reports/RoadPatrols/ProvinceActivity.blade.php diff --git a/app/Exports/V3/RoadPatrols/CountryActivity.php b/app/Exports/V3/RoadPatrols/CountryActivity.php new file mode 100644 index 00000000..06ac17dd --- /dev/null +++ b/app/Exports/V3/RoadPatrols/CountryActivity.php @@ -0,0 +1,72 @@ +activities; + + return view('v3.Reports.RoadPatrols.CountryActivity', [ + 'activities' => $activities["activities"], + 'fromDate' => $activities["fromDate"], + 'toDate' => $activities["toDate"] + ]); + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + $event->sheet->getDelegate()->getStyle('A:U')->getFont()->setName('Arial'); + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setHorizontal(Alignment::HORIZONTAL_CENTER); + + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setVertical(Alignment::VERTICAL_CENTER); + } + ]; + } + + 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/RoadPatrols/ProvinceActivity.php b/app/Exports/V3/RoadPatrols/ProvinceActivity.php new file mode 100644 index 00000000..959f561a --- /dev/null +++ b/app/Exports/V3/RoadPatrols/ProvinceActivity.php @@ -0,0 +1,72 @@ +activities; + + return view('v3.Reports.RoadPatrols.CountryActivity', [ + 'activities' => $activities["activities"], + 'fromDate' => $activities["fromDate"], + 'toDate' => $activities["toDate"] + ]); + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + $event->sheet->getDelegate()->getStyle('A:U')->getFont()->setName('Arial'); + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setHorizontal(Alignment::HORIZONTAL_CENTER); + + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setVertical(Alignment::VERTICAL_CENTER); + } + ]; + } + + 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/Reports/RoadPatrolReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php index 26e218ba..be44d94a 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php @@ -8,6 +8,7 @@ use App\Http\Traits\ApiResponse; use App\Models\EdarateShahri; use App\Models\Province; use App\Models\RoadPatrolProject; +use App\Services\Reports\RoadPatrolReportService; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; @@ -17,54 +18,12 @@ use Symfony\Component\HttpFoundation\BinaryFileResponse; class RoadPatrolReportController extends Controller { use ApiResponse; - public function provincePatrolActivity(Request $request): JsonResponse + public function countryPatrolActivity(Request $request, RoadPatrolReportService $roadPatrolReportService): 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()->endOfDay()->toDateTimeString(); + $toDate = $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' - ); + $activities = $roadPatrolReportService->countryActivity($fromDate, $toDate); $provinces = Province::all(['id', 'name_fa']); @@ -74,66 +33,14 @@ class RoadPatrolReportController extends Controller ]); } - public function cityPatrolActivity(Request $request): JsonResponse + public function provincePatrolActivity(Request $request, RoadPatrolReportService $roadPatrolReportService): 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(); + $toDate = $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 - ' - ); + $activities = $roadPatrolReportService->provinceActivity($fromDate, $toDate, $provinceId); $edarateShahri = EdarateShahri::query()->where('province_id', '=', $provinceId)->get(['id', 'name_fa']); @@ -143,12 +50,21 @@ class RoadPatrolReportController extends Controller ]); } - public function excel(Request $request): BinaryFileResponse + public function countryActivityExcel(Request $request, RoadPatrolReportService $roadPatrolReportService): BinaryFileResponse { + $activities = $roadPatrolReportService->countryActivity($request->from_date, $request->to_date); + $name = 'گزارش از گشت راهداری و ترابری ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - return Excel::download( - new RoadPatrolTable($request->from_date, $request->date_to), $name - ); + return Excel::download(new RoadPatrolTable($activities), $name); + } + + public function provinceActivityExcel(Request $request, RoadPatrolReportService $roadPatrolReportService): BinaryFileResponse + { + $activities = $roadPatrolReportService->provinceActivity($request->from_date, $request->to_date, $request->province_id); + + $name = 'گزارش از گشت راهداری و ترابری ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; + + return Excel::download(new RoadPatrolTable($activities), $name); } } diff --git a/app/Services/Reports/RoadPatrolReportService.php b/app/Services/Reports/RoadPatrolReportService.php new file mode 100644 index 00000000..bb22cd4d --- /dev/null +++ b/app/Services/Reports/RoadPatrolReportService.php @@ -0,0 +1,126 @@ + $activities, + 'fromDate' => $fromDate, + 'toDate' => $toDate + ]; + } + + public function provinceActivity(string $fromDate, string $toDate, int $provinceId): array + { + $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 "'.$toDate.'") 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 "'.$toDate.'") temp + GROUP BY edare_id + ' + ); + + return [ + 'activities' => $activities, + 'fromDate' => $fromDate, + 'toDate' => $toDate + ]; + } +} \ No newline at end of file diff --git a/resources/views/v3/Reports/RoadPatrols/CountryActivity.blade.php b/resources/views/v3/Reports/RoadPatrols/CountryActivity.blade.php new file mode 100644 index 00000000..91fc320c --- /dev/null +++ b/resources/views/v3/Reports/RoadPatrols/CountryActivity.blade.php @@ -0,0 +1,102 @@ + + + + + + + + کشوری + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @foreach ($activities as $activity) + + + + + + + + + + + @endforeach + + + +
+ تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }} +
+
+ گزارش گشت راهداری و ترابری از تاریخ + {{ verta($fromFa)->format('Y/n/j') }} + تا + تاریخ + {{ verta($toFa)->format('Y/n/j') }} + +
+ اداره کل + + گشت راهداری +
+ تعداد کل + + اقدامات لازم جهت رسیدگی آتی + + اقدامات رسیدگی شده + + مجموع مسافت پیمایش شده(کیلومتر) + + تعداد فعالیت صورت گرفته حین گشت زنی +
+ عادی + + فوری + + آنی +
{{ $activity->province_fa }}{{ $activity->tedade }}{{ $activity->tedad_mavarede_moshede_shode_adi }}{{ $activity->tedad_mavarede_moshede_shode_fori }}{{ $activity->tedad_mavarede_moshede_shode_ani }}{{ $activity->tedad_mavarede_peygiri_shode }}{{ $activity->masafat_tey_shode }}{{ $activity->tedad_faliyat_sabt_shode }}
+ + + + diff --git a/resources/views/v3/Reports/RoadPatrols/ProvinceActivity.blade.php b/resources/views/v3/Reports/RoadPatrols/ProvinceActivity.blade.php new file mode 100644 index 00000000..c8744f76 --- /dev/null +++ b/resources/views/v3/Reports/RoadPatrols/ProvinceActivity.blade.php @@ -0,0 +1,98 @@ + + + + + + + + استانی + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @foreach ($activities as $activity) + + + + + + + + + + + @endforeach + +
+ تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }} +
+
+ گزارش گشت راهداری و ترابری از تاریخ + {{ verta($fromFa)->format('Y/n/j') }} + تا + تاریخ + {{ verta($toFa)->format('Y/n/j') }} + +
+ اداره کل + + گشت راهداری +
+ تعداد کل + + اقدامات لازم جهت رسیدگی آتی + + اقدامات رسیدگی شده + + مجموع مسافت پیمایش شده(کیلومتر) + + تعداد فعالیت صورت گرفته حین گشت زنی +
+ عادی + + فوری + + آنی +
{{ $activity['name'] }}{{ $activity['tedade'] }}{{ $activity['tedad_mavarede_moshede_shode_adi'] }}{{ $activity['tedad_mavarede_moshede_shode_fori'] }}{{ $activity['tedad_mavarede_moshede_shode_ani'] }}{{ $activity['tedad_mavarede_peygiri_shode'] }}{{ $activity['masafat_tey_shode'] }}{{ $activity['tedad_faliyat_sabt_shode'] }}
+ + diff --git a/routes/v3.php b/routes/v3.php index 4d3177e0..ae606cc8 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -210,7 +210,8 @@ Route::prefix('road_patrol_reports') ->name('roadPatrolReports.') ->controller(RoadPatrolReportController::class) ->group(function () { + Route::get('/country_activity', 'countryPatrolActivity')->name('countryPatrolActivity'); Route::get('/province_activity', 'provincePatrolActivity')->name('provincePatrolActivity'); - Route::get('/city_activity', 'cityPatrolActivity')->name('cityPatrolActivity'); - Route::get('/excel', 'excel')->name('excel'); + Route::get('/country_activity_excel', 'countryActivityExcel')->name('countryActivityExcel'); + Route::get('/province_activity_excel', 'provinceActivityExcel')->name('provinceActivityExcel'); }); From 8ecaebf34453dd310eb777742492b042cd5eb753 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 26 Jan 2025 14:18:03 +0330 Subject: [PATCH 13/43] bugfix --- app/Exports/V3/RoadPatrols/CountryActivity.php | 2 -- app/Exports/V3/RoadPatrols/ProvinceActivity.php | 2 -- .../V3/Dashboard/Reports/RoadPatrolReportController.php | 9 ++++----- app/Services/Reports/RoadPatrolReportService.php | 6 ++---- 4 files changed, 6 insertions(+), 13 deletions(-) diff --git a/app/Exports/V3/RoadPatrols/CountryActivity.php b/app/Exports/V3/RoadPatrols/CountryActivity.php index 06ac17dd..29be9cff 100644 --- a/app/Exports/V3/RoadPatrols/CountryActivity.php +++ b/app/Exports/V3/RoadPatrols/CountryActivity.php @@ -2,9 +2,7 @@ namespace App\Exports\V3\RoadPatrols; -use App\Models\RoadPatrolProject; use Illuminate\Contracts\View\View; -use Illuminate\Support\Facades\DB; use Maatwebsite\Excel\Concerns\FromView; use Maatwebsite\Excel\Concerns\ShouldAutoSize; use Maatwebsite\Excel\Concerns\WithDrawings; diff --git a/app/Exports/V3/RoadPatrols/ProvinceActivity.php b/app/Exports/V3/RoadPatrols/ProvinceActivity.php index 959f561a..99e41d3b 100644 --- a/app/Exports/V3/RoadPatrols/ProvinceActivity.php +++ b/app/Exports/V3/RoadPatrols/ProvinceActivity.php @@ -2,9 +2,7 @@ namespace App\Exports\V3\RoadPatrols; -use App\Models\RoadPatrolProject; use Illuminate\Contracts\View\View; -use Illuminate\Support\Facades\DB; use Maatwebsite\Excel\Concerns\FromView; use Maatwebsite\Excel\Concerns\ShouldAutoSize; use Maatwebsite\Excel\Concerns\WithDrawings; diff --git a/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php index be44d94a..8df975dd 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php @@ -2,16 +2,15 @@ namespace App\Http\Controllers\V3\Dashboard\Reports; -use App\Exports\V2\RoadPatrol\RoadPatrolTable\AllSheets as RoadPatrolTable; +use App\Exports\V3\RoadPatrols\CountryActivity; +use App\Exports\V3\RoadPatrols\ProvinceActivity; use App\Http\Controllers\Controller; use App\Http\Traits\ApiResponse; use App\Models\EdarateShahri; use App\Models\Province; -use App\Models\RoadPatrolProject; use App\Services\Reports\RoadPatrolReportService; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use Illuminate\Support\Facades\DB; use Maatwebsite\Excel\Facades\Excel; use Symfony\Component\HttpFoundation\BinaryFileResponse; @@ -56,7 +55,7 @@ class RoadPatrolReportController extends Controller $name = 'گزارش از گشت راهداری و ترابری ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - return Excel::download(new RoadPatrolTable($activities), $name); + return Excel::download(new CountryActivity($activities), $name); } public function provinceActivityExcel(Request $request, RoadPatrolReportService $roadPatrolReportService): BinaryFileResponse @@ -65,6 +64,6 @@ class RoadPatrolReportController extends Controller $name = 'گزارش از گشت راهداری و ترابری ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - return Excel::download(new RoadPatrolTable($activities), $name); + return Excel::download(new ProvinceActivity($activities), $name); } } diff --git a/app/Services/Reports/RoadPatrolReportService.php b/app/Services/Reports/RoadPatrolReportService.php index bb22cd4d..309533b0 100644 --- a/app/Services/Reports/RoadPatrolReportService.php +++ b/app/Services/Reports/RoadPatrolReportService.php @@ -2,8 +2,6 @@ namespace App\Services\Reports; -use App\Models\InfoItem; -use Illuminate\Support\Collection; use Illuminate\Support\Facades\DB; class RoadPatrolReportService @@ -29,7 +27,7 @@ class RoadPatrolReportService (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 + FROM `road_patrols` rp where rp.start_time BETWEEN "'.$fromDate.'" AND "'.$toDate.'") temp union SELECT province_fa, @@ -50,7 +48,7 @@ class RoadPatrolReportService (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 + FROM `road_patrols` rp where rp.start_time BETWEEN "'.$fromDate.'" AND "'.$toDate.'") temp GROUP BY province_id' ); From 61f1d49ce38102811b25150f75a39b470b860554 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 26 Jan 2025 14:28:21 +0330 Subject: [PATCH 14/43] rename the mistake of names --- .../V3/RoadPatrols/ProvinceActivity.php | 2 +- .../RoadPatrols/CountryActivity.blade.php | 4 ++-- .../RoadPatrols/ProvinceActivity.blade.php | 24 +++++++++---------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/app/Exports/V3/RoadPatrols/ProvinceActivity.php b/app/Exports/V3/RoadPatrols/ProvinceActivity.php index 99e41d3b..1d7d0d8d 100644 --- a/app/Exports/V3/RoadPatrols/ProvinceActivity.php +++ b/app/Exports/V3/RoadPatrols/ProvinceActivity.php @@ -20,7 +20,7 @@ class ProvinceActivity implements FromView, WithEvents, ShouldAutoSize, WithDraw { $activities = $this->activities; - return view('v3.Reports.RoadPatrols.CountryActivity', [ + return view('v3.Reports.RoadPatrols.ProvinceActivity', [ 'activities' => $activities["activities"], 'fromDate' => $activities["fromDate"], 'toDate' => $activities["toDate"] diff --git a/resources/views/v3/Reports/RoadPatrols/CountryActivity.blade.php b/resources/views/v3/Reports/RoadPatrols/CountryActivity.blade.php index 91fc320c..0e94bde7 100644 --- a/resources/views/v3/Reports/RoadPatrols/CountryActivity.blade.php +++ b/resources/views/v3/Reports/RoadPatrols/CountryActivity.blade.php @@ -29,10 +29,10 @@ گزارش گشت راهداری و ترابری از تاریخ - {{ verta($fromFa)->format('Y/n/j') }} + {{ verta($fromDate)->format('Y/n/j') }} تا تاریخ - {{ verta($toFa)->format('Y/n/j') }} + {{ verta($toDate)->format('Y/n/j') }} diff --git a/resources/views/v3/Reports/RoadPatrols/ProvinceActivity.blade.php b/resources/views/v3/Reports/RoadPatrols/ProvinceActivity.blade.php index c8744f76..602352e5 100644 --- a/resources/views/v3/Reports/RoadPatrols/ProvinceActivity.blade.php +++ b/resources/views/v3/Reports/RoadPatrols/ProvinceActivity.blade.php @@ -29,10 +29,10 @@ گزارش گشت راهداری و ترابری از تاریخ - {{ verta($fromFa)->format('Y/n/j') }} + {{ verta($fromDate)->format('Y/n/j') }} تا تاریخ - {{ verta($toFa)->format('Y/n/j') }} + {{ verta($toDate)->format('Y/n/j') }} @@ -81,16 +81,16 @@ @foreach ($activities as $activity) - - {{ $activity['name'] }} - {{ $activity['tedade'] }} - {{ $activity['tedad_mavarede_moshede_shode_adi'] }} - {{ $activity['tedad_mavarede_moshede_shode_fori'] }} - {{ $activity['tedad_mavarede_moshede_shode_ani'] }} - {{ $activity['tedad_mavarede_peygiri_shode'] }} - {{ $activity['masafat_tey_shode'] }} - {{ $activity['tedad_faliyat_sabt_shode'] }} - + + {{ $activity->edare_name }} + {{ $activity->tedade }} + {{ $activity->tedad_mavarede_moshede_shode_adi }} + {{ $activity->tedad_mavarede_moshede_shode_fori }} + {{ $activity->tedad_mavarede_moshede_shode_ani }} + {{ $activity->tedad_mavarede_peygiri_shode }} + {{ $activity->masafat_tey_shode }} + {{ $activity->tedad_faliyat_sabt_shode }} + @endforeach From c1c3a9e90ea98643c8bd502b947b74b706be7463 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 26 Jan 2025 14:36:35 +0330 Subject: [PATCH 15/43] delete info item enum --- app/Enums/InfoItem.php | 102 ----------------------------------------- resources/.gitignore | 2 +- 2 files changed, 1 insertion(+), 103 deletions(-) delete mode 100644 app/Enums/InfoItem.php diff --git a/app/Enums/InfoItem.php b/app/Enums/InfoItem.php deleted file mode 100644 index ebd43a83..00000000 --- a/app/Enums/InfoItem.php +++ /dev/null @@ -1,102 +0,0 @@ - [1 => 'LabeAsphalt', 2 => 'ShaneSazi', 3 => 'GodOftadegi', 4 => 'Lakegiri', - 5 => 'Maremat', 6 => 'BastarHarim', 8 => 'Darzgiri', 9 => 'Mozres', - 10 => 'TarashRooye', 11 => 'Tighzani', 12 => 'Shenrizi', 13 => 'Khakbardari', - 14 => 'TaranesheBardary' - ], - - 2 => [1 => 'PaksaziSathRah', 2 => 'TanfieAbro', 3 => 'PaksaziLashe', 4 => 'PaksaziGhono', - 5 => 'PaksaziTasadofat', 6 => 'AlafKani', 7 => 'PaksaziHarim', 8 => 'JamavariGhateat', - 9 => 'PaksaziParking', 10 => 'PaksaziKenarGharnizPol', 11 => 'PaksaziJazire', - 12 => 'PaksaziTanfieDakhelPol', 13 => 'PaksaziSifon', 14 => 'PaksaziShakheDerakhtan', 15 => 'PaksaziMavadNafti', - 16 => 'AlafKaniDasti', 17 => 'RizeshBardari', 18 => 'JamavariSang', 19 => 'Layeroobi' - ], - - 3 => [1 => 'TabloEkhtari', 2 => 'TabloEtelati', 3 => 'Shabrang', 4 => 'Baztab', 5 => 'TavizTablo', - 6 => 'Maremat', 7 => 'EslahKajShodegi', 8 => 'NasbAlaemMovaghat', 9 => 'ShibShirvani' - ], - - 4 => [1 => 'Miani', 2 => 'Pol', 3 => 'Behsazi'], - - 5 => [1 => 'NegahdariTool', 2 => 'NegahdariHashieh', 3 => 'NegahdariNoghteyi', 4 => 'NegahdariNavahi', - 5 => 'NegahdariMehgir', 6 => 'NegahdariToonel', 7 => 'TamiratCable', 8 => 'TamiratKaleCheragh', - 9 => 'TamiratMafselzani', 10 => 'TamiratTablo', 11 => 'TamiratBorjNoori' - ], - - 6 => [1 => 'KhatkeshiRangGarm', 2 => 'KhatkeshiRangSard', 3 => 'TarsimKhat', - 4 => 'EjrayeTooli', 5 => 'EjrayeArzi', 6 => 'PakKardanKhotoot' - ], - - 7 => [1 => 'RangamiziTablo', 2 => 'RangamiziCheraq', 3 => 'RangimiziPayeRoshanayi', 4 => 'RangamiziPol', - 5 => 'RangamiziDarvazi', 6 => 'RangamiziHefazFelezi', 7 => 'RangamiziNewjersi', 8 => 'RangamiziSoratgah', 9 => 'RangamiziPaye' - ], - - 8 => [1 => 'ShosteshooAlaem', 2 => 'ShosteshooTablo', 3 => 'ShosteshooJadval', 4 => 'ShosteshooNewjersi', - 5 => 'ShosteshooGuardrail', 6 => 'ShosteshooToonel', 7 => 'ShosteshooPol' - ], - - 9 => [1 => 'ImensaziSarguard', 4 => ' TamiratCheraq', 5 => 'IjadShiar', - 6 => 'Zarbegir', 7 => 'NasbSoratgir', 8 => 'IjadLarzanande', - 9 => 'OstevaneImeni', 11 => 'EhdasSoratgir', 12 => 'EjrayeNoghteyi', - 13 => 'EjrayeTooli', 14 => 'TarizMaghtaei', 15 => 'HazfMavane', 16 => 'DivarChini' - ], - - 10 => [4 => 'BarkhordBaDastfroosh', 5 => 'JamavariTabloo', 6 => 'JamavariBanner'], - - 11 => [1 => 'EhdasGharnizPol', 2 => 'Lole', 3 => 'Tatvil', 4 => 'Bazsazi', - 5 => 'TamiratAbro', 6 => 'Maremat', 7 => 'Radie' - ], - - 12 => [1 => 'Zehkeshi', 2 => 'Maremat', 3 => 'Lining', 4 => 'TamirGallery', - 5 => 'Gabarit', 6 => 'Doorbin', 7 => 'Tahvie' - ], - - 13 => [1 => 'Yakhzodaei', 2 => 'BarfRoobi', - 5 => 'MizanNamak', 7 => 'Mosaferin', 8 => 'KomakResani' - ], - - 14 => [1 => 'BenzinMasrafi', 2 => 'GazMasrafi', 3 => 'MavadNafti', 4 => 'Bazsazi', - 8 => 'Service', 9 => 'NamakPash', 10 => 'Jabejayi' - ], - - 15 => [1 => 'Tamirat', 3 => 'Jalasat'], - - 16 => [1 => 'Paksazi', 2 => 'Taradod', 3 => 'BargharariErtebat', 4 => 'AbBordegi', - 5 => 'ShekastegiPol', 6 => 'HedayatTraffici', 7 => 'Bozgoshaei', 8 => 'Jabejayi', 9 => 'Laghgiri' - ], - - 20 => [1 => 'AbniyeFani', 2 => 'Alaem', 3 => 'Taranshe', 4 => 'RoyeAphalt', - 5 => 'HarimRah', 6 => 'MashinAlat'], - - ]; - - return $subitems[$item]; - } -} \ No newline at end of file diff --git a/resources/.gitignore b/resources/.gitignore index 58b2b566..a50fbbe5 100644 --- a/resources/.gitignore +++ b/resources/.gitignore @@ -1,3 +1,3 @@ /views/* !/views/v3/ -!/views/v3/*` \ No newline at end of file +!/views/v3/* \ No newline at end of file From c543afd62715823eb10909053e9120f46e3f7822 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Mon, 27 Jan 2025 08:58:45 +0330 Subject: [PATCH 16/43] change the validation --- .../V3/RoadPatrolProject/StoreRequest.php | 6 ++-- app/Models/RoadPatrol.php | 8 ++++++ ...ange_column_type_in_road_patrols_table.php | 28 +++++++++++++++++++ 3 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 database/migrations/2025_01_27_085125_change_column_type_in_road_patrols_table.php diff --git a/app/Http/Requests/V3/RoadPatrolProject/StoreRequest.php b/app/Http/Requests/V3/RoadPatrolProject/StoreRequest.php index b0986e4b..d75d82db 100644 --- a/app/Http/Requests/V3/RoadPatrolProject/StoreRequest.php +++ b/app/Http/Requests/V3/RoadPatrolProject/StoreRequest.php @@ -27,7 +27,7 @@ class StoreRequest extends FormRequest 'distance' => 'numeric', 'start_time' => 'required|date_format:Y-m-d H:i', 'end_time' => 'required|date_format:Y-m-d H:i|after:start_time', - 'fuel_consumption' => 'required|integer', + 'fuel_consumption' => 'required|numeric', 'vehicle_runtime' => 'required|integer', 'stop_points' => 'required|array', 'road_patrol_machines_id' => 'required|array', @@ -38,9 +38,9 @@ class StoreRequest extends FormRequest 'observed_items' => 'array', 'observed_items.*.item_id' => 'required|integer', 'observed_items.*.sub_item_id' => 'required|integer', - 'observed_items.*.local_name' => 'required', 'observed_items.*.description' => '', 'observed_items.*.instant_action' => 'required|in:0,1', + 'observed_items.*.local_name' => 'required_if:observed_items.*.instant_action,0', // road item projects fields 'observed_items.*.start_point' => 'required', @@ -50,7 +50,7 @@ class StoreRequest extends FormRequest 'observed_items.*.after_image' => 'image|max:4096', 'observed_items.*.priority' => 'integer|in:1,2,3|required_if:observed_items.*.instant_action,0', 'observed_items.*.priority_fa' => 'string|required_if:observed_items.*.instant_action,0', - 'description' => 'string|required_with:observed_items', + 'description' => 'string', 'observed_items.*.road_item_machines_id' => 'required_if:observed_items.*.instant_action,1|array', 'observed_items.*.road_item_machines_id.*' => 'required_if:observed_items.*.instant_action,1|exists:cmms_machines,id', diff --git a/app/Models/RoadPatrol.php b/app/Models/RoadPatrol.php index c39af8c2..19ff01bd 100644 --- a/app/Models/RoadPatrol.php +++ b/app/Models/RoadPatrol.php @@ -6,6 +6,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\MorphToMany; +use Illuminate\Database\Eloquent\Casts\Attribute; class RoadPatrol extends Model { @@ -13,6 +14,13 @@ class RoadPatrol extends Model protected $guarded = ['id']; + protected function stopPoints(): Attribute + { + return Attribute::make( + get: fn ($value) => $value ? json_decode($value) : null, + ); + } + public function observedItems(): HasMany { return $this->hasMany(ObservedItem::class); diff --git a/database/migrations/2025_01_27_085125_change_column_type_in_road_patrols_table.php b/database/migrations/2025_01_27_085125_change_column_type_in_road_patrols_table.php new file mode 100644 index 00000000..2c20efba --- /dev/null +++ b/database/migrations/2025_01_27_085125_change_column_type_in_road_patrols_table.php @@ -0,0 +1,28 @@ +string('fuel_consumption')->change(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('road_patrols', function (Blueprint $table) { + $table->integer('fuel_consumption')->change(); + }); + } +}; From b505389a8a8a2e0cf56d4f7936d6c9612a809a54 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 2 Feb 2025 10:33:10 +0330 Subject: [PATCH 17/43] rename to meaningful names --- .../V3/Dashboard/Reports/RoadItemsReportController.php | 8 ++++---- routes/v3.php | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php index be92abb6..2d4d07b7 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php @@ -32,7 +32,7 @@ class RoadItemsReportController extends Controller ]); } - public function provinceActivityPerSubItem(Request $request): JsonResponse + public function countryActivityPerSubItem(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(); @@ -74,7 +74,7 @@ class RoadItemsReportController extends Controller ]); } - public function cityActivityPerSubItem(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(); @@ -123,7 +123,7 @@ class RoadItemsReportController extends Controller ]); } - public function provinceActivityPerItem(Request $request): JsonResponse + public function countryActivityPerItem(Request $request): JsonResponse { if (auth()->check()) { auth()->user()->addActivityComplete(1033); @@ -166,7 +166,7 @@ class RoadItemsReportController extends Controller ]); } - public function cityActivityPerItem(Request $request): JsonResponse + public function provinceActivityPerItem(Request $request): JsonResponse { $provinceId = $request->province_id; $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); diff --git a/routes/v3.php b/routes/v3.php index ae606cc8..5172be4f 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('/country_activity_per_sub_item', 'countryActivityPerSubItem')->name('countryActivityPerSubItem'); Route::get('/province_activity_per_sub_item', 'provinceActivityPerSubItem')->name('provinceActivityPerSubItem'); - Route::get('/city_activity_per_sub_item', 'cityActivityPerSubItem')->name('cityActivityPerSubItem'); + Route::get('/country_activity_per_item', 'countryActivityPerItem')->name('countryActivityPerItem'); Route::get('/province_activity_per_item', 'provinceActivityPerItem')->name('provinceActivityPerItem'); - Route::get('/city_activity_per_item', 'cityActivityPerItem')->name('cityActivityPerItem'); Route::get('/map', 'map')->name('map'); Route::get('/country_activity_excel_per_item', 'countryActivityExcelPerItem')->name('countryActivityExcelPerItem'); Route::get('/province_activity_excel_per_item', 'provinceActivityExcelPerItem')->name('provinceActivityExcelPerItem'); From d7990dd985b8ed8629844e043e341eff430fef31 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 2 Feb 2025 11:25:04 +0330 Subject: [PATCH 18/43] add map activities to cartables --- .../Reports/RoadPatrolReportController.php | 23 +++++++++++++ .../Dashboard/RoadItemsProjectController.php | 16 +++------ .../Dashboard/RoadPatrolProjectController.php | 33 ++----------------- routes/v3.php | 4 +-- 4 files changed, 31 insertions(+), 45 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php index 8df975dd..3ce39b0c 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php @@ -8,6 +8,8 @@ use App\Http\Controllers\Controller; use App\Http\Traits\ApiResponse; use App\Models\EdarateShahri; use App\Models\Province; +use App\Models\RoadObserved; +use App\Models\RoadPatrol; use App\Services\Reports\RoadPatrolReportService; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -66,4 +68,25 @@ class RoadPatrolReportController extends Controller return Excel::download(new ProvinceActivity($activities), $name); } + + public function activitiesOnMap(Request $request): JsonResponse + { + $date_from = $request->date_from ? $request->date_from .' 00:00:00' : Date('Y-m-d') .' 00:00:00'; + $date_to = $request->date_to ? $request->date_to.' 23:59:59' : (new \DateTime('tomorrow'))->format('Y-m-d').' 23:59:59'; + + $data = RoadPatrol::query()->when($request->province_id, function ($query, $province) { + return $query->where('province_id', '=', $province); + }) + ->when($request->edare_id, function ($query, $edare_id) { + return $query->where('edare_id', '=', $edare_id); + }) + ->whereBetween('created_at', [ + $date_from, + $date_to, + ]) + ->select('id', 'start_lat', 'start_lon') + ->get(); + + return $this->successResponse($data); + } } diff --git a/app/Http/Controllers/V3/Dashboard/RoadItemsProjectController.php b/app/Http/Controllers/V3/Dashboard/RoadItemsProjectController.php index c2a7d122..525103f8 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadItemsProjectController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadItemsProjectController.php @@ -95,9 +95,7 @@ class RoadItemsProjectController extends Controller public function restore(RoadItemsProject $roadItemsProject): JsonResponse { if ($roadItemsProject->status == 0) { - return response()->json([ - 'message' => 'امکان بازگردانی وضعیت این فعالیت وجود ندارد!' - ], 400); + return $this->errorResponse('امکان بازگردانی وضعیت این فعالیت وجود ندارد!'); } $roadItemsProject->update([ @@ -170,15 +168,11 @@ class RoadItemsProjectController extends Controller $user = auth()->user(); if ($user->edarate_ostani_id || is_null($user->city_id)) { - return response()->json([ - 'message' => 'امکان ثبت فعالیت برای ادارات استانی و ستادی وجود ندارد!' - ], 400); + return $this->errorResponse('امکان ثبت فعالیت برای ادارات استانی و ستادی وجود ندارد!'); } if (is_null($user->edarate_shahri_id)) { - return response()->json([ - 'message' => 'اداره شهری برای شما در سامانه ثبت نشده است!' - ], 400); + return $this->errorResponse('اداره شهری برای شما در سامانه ثبت نشده است!'); } $info_item = InfoItem::query()->where('item', $request->item_id) @@ -241,9 +235,7 @@ class RoadItemsProjectController extends Controller $road_item = RoadItemsProject::store($user, $attributes, $before_image, $after_image, $request->observed_item_id); if ($road_item === -1) { - return response()->json([ - 'message' => 'اقدام مربوطه قبلا رسیدگی شده است.' - ], 400); + return $this->errorResponse('اقدام مربوطه قبلا رسیدگی شده است.'); } $road_item->rahdaran()->attach($request->rahdaran_id); diff --git a/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php b/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php index 6d62ba03..32d5978c 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php @@ -150,15 +150,11 @@ class RoadPatrolProjectController extends Controller $user = auth()->user(); if ($user->edarate_ostani_id || is_null($user->city_id)) { - return response()->json([ - 'message' => 'امکان ثبت فعالیت برای ادارات استانی وجود ندارد!' - ], 400); + return $this->errorResponse('امکان ثبت فعالیت برای ادارات استانی وجود ندارد!'); } if (is_null($user->edarate_shahri_id)) { - return response()->json([ - 'message' => 'اداره شهری برای شما در سامانه ثبت نشده است!' - ], 400); + return $this->errorResponse('اداره شهری برای شما در سامانه ثبت نشده است!'); } $edare_id = $user->edarate_shahri_id ?? $user->edarate_ostani_id; @@ -279,9 +275,7 @@ class RoadPatrolProjectController extends Controller $road_item = RoadItemsProject::store($user, $attributes, $before_image, $after_image, $observed_item->id); if ($road_item === -1) { - return response()->json([ - 'message' => 'اقدام مربوطه قبلا رسیدگی شده است.' - ], 400); + return $this->errorResponse('اقدام مربوطه قبلا رسیدگی شده است.'); } $road_item->rahdaran()->attach($item['road_item_rahdaran_id']); @@ -332,27 +326,6 @@ class RoadPatrolProjectController extends Controller return $this->successResponse($data); } - public function getAllDataToMap(Request $request): JsonResponse - { - $date_from = $request->date_from ? $request->date_from .' 00:00:00' : Date('Y-m-d') .' 00:00:00'; - $date_to = $request->date_to ? $request->date_to.' 23:59:59' : (new \DateTime('tomorrow'))->format('Y-m-d').' 23:59:59'; - - $data = RoadPatrol::query()->when($request->province_id, function ($query, $province) { - return $query->where('province_id', '=', $province); - }) - ->when($request->edare_id, function ($query, $edare_id) { - return $query->where('edare_id', '=', $edare_id); - }) - ->whereBetween('created_at', [ - $date_from, - $date_to, - ]) - ->select('id', 'start_lat', 'start_lon') - ->get(); - - return $this->successResponse($data); - } - public function map(Request $request): JsonResponse { $province = $request->province_id; diff --git a/routes/v3.php b/routes/v3.php index 5172be4f..9557589f 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -152,9 +152,6 @@ Route::prefix('road_patrols') Route::get('/operator/report/{roadPatrol}', 'getReport') ->name('getReport'); - Route::get('/operator/map_data', 'getAllDataToMap') - ->name('getAllDataToMap'); - Route::get('/detail/{roadPatrol}', 'show') ->name('show'); }); @@ -214,4 +211,5 @@ Route::prefix('road_patrol_reports') Route::get('/province_activity', 'provincePatrolActivity')->name('provincePatrolActivity'); Route::get('/country_activity_excel', 'countryActivityExcel')->name('countryActivityExcel'); Route::get('/province_activity_excel', 'provinceActivityExcel')->name('provinceActivityExcel'); + Route::get('/activities_on_map', 'activitiesOnMap')->name('activitiesOnMap'); }); From 967d0e6db82676a8161d85d75dae25bc51f5c1b9 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Tue, 4 Feb 2025 09:34:09 +0330 Subject: [PATCH 19/43] seperate the logic into service reports --- .../CountryActivityPerItemReport.php | 64 +---- .../CountryActivityPerSubItemReport.php | 1 - .../OperatorCartableReport.php | 69 +++++ .../ProvinceActivityPerItemReport.php | 72 +---- .../ProvinceActivityPerSubItemReport.php | 1 - .../SupervisorCartableReport.php | 69 +++++ .../V3/RoadPatrols/OperatorCartableReport.php | 68 +++++ .../RoadPatrols/SupervisorCartableReport.php | 68 +++++ .../Reports/RoadItemsReportController.php | 171 ++---------- .../Dashboard/RoadItemsProjectController.php | 78 +----- .../Dashboard/RoadPatrolProjectController.php | 77 +----- .../Reports/RoadItemReportService.php | 248 ++++++++++++++---- .../Reports/RoadPatrolReportService.php | 65 +++++ 13 files changed, 591 insertions(+), 460 deletions(-) create mode 100644 app/Exports/V3/RoadItemsProjects/OperatorCartableReport.php create mode 100644 app/Exports/V3/RoadItemsProjects/SupervisorCartableReport.php create mode 100644 app/Exports/V3/RoadPatrols/OperatorCartableReport.php create mode 100644 app/Exports/V3/RoadPatrols/SupervisorCartableReport.php diff --git a/app/Exports/V3/RoadItemsProjects/CountryActivityPerItemReport.php b/app/Exports/V3/RoadItemsProjects/CountryActivityPerItemReport.php index a5f33307..d85f83f3 100644 --- a/app/Exports/V3/RoadItemsProjects/CountryActivityPerItemReport.php +++ b/app/Exports/V3/RoadItemsProjects/CountryActivityPerItemReport.php @@ -17,70 +17,16 @@ use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; class CountryActivityPerItemReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings { - public function __construct(private ?string $fromDate, private ?string $toDate){} + public function __construct(private ?array $activities){} public function view(): View { - $fromDate = $this->fromDate ?? '2021-03-21 00:00:00'; - $toDate = $this->toDate ?? \Carbon\Carbon::now(); - - $query = "SELECT - COUNT(CASE WHEN item = 1 THEN 1 END) AS MarematRooyeCount, - COUNT(CASE WHEN item = 2 THEN 1 END) AS PaksaziCount, - COUNT(CASE WHEN item = 3 THEN 1 END) AS AlaemCount, - COUNT(CASE WHEN item = 4 THEN 1 END) AS HefazCount, - COUNT(CASE WHEN item = 5 THEN 1 END) AS RoshanayiCount, - COUNT(CASE WHEN item = 6 THEN 1 END) AS KhatkeshiCount, - COUNT(CASE WHEN item = 7 THEN 1 END) AS RangamiziCount, - COUNT(CASE WHEN item = 8 THEN 1 END) AS WashingCount, - COUNT(CASE WHEN item = 9 THEN 1 END) AS ImenSaziCount, - COUNT(CASE WHEN item = 10 THEN 1 END) AS HarimCount, - COUNT(CASE WHEN item = 11 THEN 1 END) AS PolCount, - COUNT(CASE WHEN item = 12 THEN 1 END) AS ToonelCount, - COUNT(CASE WHEN item = 13 THEN 1 END) AS AmaliatZemestaniCount, - COUNT(CASE WHEN item = 14 THEN 1 END) AS MashinAlatCount, - COUNT(CASE WHEN item = 15 THEN 1 END) AS TollhouseCount, - COUNT(CASE WHEN item = 16 THEN 1 END) AS EmergencyCount, - province_fa, - province_id, - COUNT(CASE WHEN item != 20 THEN 1 END) AS TotalProvinceCount - FROM ( - SELECT - province_fa, - province_id, - item, - status - FROM road_items_projects - WHERE activity_date_time BETWEEN '{$fromDate}' and '{$toDate}' - ) AS merged_table - WHERE status = 1 - GROUP BY province_id, province_fa;"; - - $provinceActivities = collect(DB::select($query)); - - $totalItemCount = [ - 'totalMarematRooyeCount' => $provinceActivities->sum('MarematRooyeCount'), - 'totalPaksaziCount' => $provinceActivities->sum('PaksaziCount'), - 'totalAlaemCount' => $provinceActivities->sum('AlaemCount'), - 'totalHefazCount' => $provinceActivities->sum('HefazCount'), - 'totalRoshanayiCount' => $provinceActivities->sum('RoshanayiCount'), - 'totalKhatkeshiCount' => $provinceActivities->sum('KhatkeshiCount'), - 'totalRangamiziCount' => $provinceActivities->sum('RangamiziCount'), - 'totalWashingCount' => $provinceActivities->sum('WashingCount'), - 'totalImenSaziCount' => $provinceActivities->sum('ImenSaziCount'), - 'totalHarimCount' => $provinceActivities->sum('HarimCount'), - 'totalPolCount' => $provinceActivities->sum('PolCount'), - 'totalToonelCount' => $provinceActivities->sum('ToonelCount'), - 'totalAmaliatZemestaniCount' => $provinceActivities->sum('AmaliatZemestaniCount'), - 'totalMashinAlatCount' => $provinceActivities->sum('MashinAlatCount'), - 'totalTollhouseCount' => $provinceActivities->sum('TollhouseCount'), - 'totalEmergencyCount' => $provinceActivities->sum('EmergencyCount'), - 'totalCountryCount' => $provinceActivities->sum('TotalProvinceCount'), - ]; + $activities = $this->activities; + $fromDate = $activities['fromDate'] ?? '2021-03-21 00:00:00'; + $toDate = $activities['toDate'] ?? \Carbon\Carbon::now(); return view('v3.Reports.RoadItems.CountryActivityPerItem', [ - 'provinceCount' => $provinceActivities, - 'countryCount' => $totalItemCount, + 'activities' => $activities['data'], 'fromDate' => $fromDate, 'toDate' => $toDate ]); diff --git a/app/Exports/V3/RoadItemsProjects/CountryActivityPerSubItemReport.php b/app/Exports/V3/RoadItemsProjects/CountryActivityPerSubItemReport.php index 16fc87cf..da5497e2 100644 --- a/app/Exports/V3/RoadItemsProjects/CountryActivityPerSubItemReport.php +++ b/app/Exports/V3/RoadItemsProjects/CountryActivityPerSubItemReport.php @@ -23,7 +23,6 @@ class CountryActivityPerSubItemReport implements FromView, WithEvents, ShouldAut 'activities' => $activities["data"], 'fromDate' => $activities["fromDate"], 'toDate' => $activities["toDate"], - 'details' => $activities["details"] ]); } diff --git a/app/Exports/V3/RoadItemsProjects/OperatorCartableReport.php b/app/Exports/V3/RoadItemsProjects/OperatorCartableReport.php new file mode 100644 index 00000000..43583ba5 --- /dev/null +++ b/app/Exports/V3/RoadItemsProjects/OperatorCartableReport.php @@ -0,0 +1,69 @@ + $this->data, + ]); + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + $event->sheet->getDelegate()->getStyle('A:U')->getFont()->setName('Arial'); + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setHorizontal(Alignment::HORIZONTAL_CENTER); + + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setVertical(Alignment::VERTICAL_CENTER); + } + ]; + } + + 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/RoadItemsProjects/ProvinceActivityPerItemReport.php b/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerItemReport.php index 7b8f99b2..15b1a1c0 100644 --- a/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerItemReport.php +++ b/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerItemReport.php @@ -17,78 +17,16 @@ use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; class ProvinceActivityPerItemReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings { - public function __construct(private ?string $fromDate, - private ?string $toDate, - private string $provinceId, - ){} + public function __construct(private ?array $activities){} public function view(): View { - $fromDate = $this->fromDate ?? '2021-03-21 00:00:00'; - $toDate = $this->toDate ?? \Carbon\Carbon::now(); - - $query = "SELECT - COUNT(CASE WHEN item = 1 THEN 1 END) AS MarematRooyeCount, - COUNT(CASE WHEN item = 2 THEN 1 END) AS PaksaziCount, - COUNT(CASE WHEN item = 3 THEN 1 END) AS AlaemCount, - COUNT(CASE WHEN item = 4 THEN 1 END) AS HefazCount, - COUNT(CASE WHEN item = 5 THEN 1 END) AS RoshanayiCount, - COUNT(CASE WHEN item = 6 THEN 1 END) AS KhatkeshiCount, - COUNT(CASE WHEN item = 7 THEN 1 END) AS RangamiziCount, - COUNT(CASE WHEN item = 8 THEN 1 END) AS WashingCount, - COUNT(CASE WHEN item = 9 THEN 1 END) AS ImenSaziCount, - COUNT(CASE WHEN item = 10 THEN 1 END) AS HarimCount, - COUNT(CASE WHEN item = 11 THEN 1 END) AS PolCount, - COUNT(CASE WHEN item = 12 THEN 1 END) AS ToonelCount, - COUNT(CASE WHEN item = 13 THEN 1 END) AS AmaliatZemestaniCount, - COUNT(CASE WHEN item = 14 THEN 1 END) AS MashinAlatCount, - COUNT(CASE WHEN item = 15 THEN 1 END) AS TollhouseCount, - COUNT(CASE WHEN item = 16 THEN 1 END) AS EmergencyCount, - province_fa, - province_id, - edarat_name, - edarat_id, - COUNT(CASE WHEN item != 20 THEN 1 END) AS TotalCityCount - FROM ( - SELECT - province_fa, - province_id, - edarat_name, - edarat_id, - item, - status - FROM road_items_projects - WHERE activity_date_time BETWEEN '{$fromDate}' and '{$toDate}' - ) AS merged_table - WHERE status = 1 - AND province_id = {$this->provinceId} - GROUP BY edarat_id, edarat_name order by province_id ASC;"; - - $cityActivities = collect(DB::select($query)); - - $totalItemCount = [ - 'totalMarematRooyeCount' => $cityActivities->sum('MarematRooyeCount'), - 'totalPaksaziCount' => $cityActivities->sum('PaksaziCount'), - 'totalAlaemCount' => $cityActivities->sum('AlaemCount'), - 'totalHefazCount' => $cityActivities->sum('HefazCount'), - 'totalRoshanayiCount' => $cityActivities->sum('RoshanayiCount'), - 'totalKhatkeshiCount' => $cityActivities->sum('KhatkeshiCount'), - 'totalRangamiziCount' => $cityActivities->sum('RangamiziCount'), - 'totalWashingCount' => $cityActivities->sum('WashingCount'), - 'totalImenSaziCount' => $cityActivities->sum('ImenSaziCount'), - 'totalHarimCount' => $cityActivities->sum('HarimCount'), - 'totalPolCount' => $cityActivities->sum('PolCount'), - 'totalToonelCount' => $cityActivities->sum('ToonelCount'), - 'totalAmaliatZemestaniCount' => $cityActivities->sum('AmaliatZemestaniCount'), - 'totalMashinAlatCount' => $cityActivities->sum('MashinAlatCount'), - 'totalTollhouseCount' => $cityActivities->sum('TollhouseCount'), - 'totalEmergencyCount' => $cityActivities->sum('EmergencyCount'), - 'TotalProvinceCount' => $cityActivities->sum('TotalCityCount'), - ]; + $activities = $this->activities; + $fromDate = $activities['fromDate'] ?? '2021-03-21 00:00:00'; + $toDate = $activities['toDate'] ?? \Carbon\Carbon::now(); return view('v3.Reports.RoadItems.ProvinceActivityPerItem', [ - 'cityCount' => $cityActivities, - 'provinceCount' => $totalItemCount, + 'activitis' => $activities['data'], 'fromDate' => $fromDate, 'toDate' => $toDate ]); diff --git a/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerSubItemReport.php b/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerSubItemReport.php index 2d8aad5a..cf558cab 100644 --- a/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerSubItemReport.php +++ b/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerSubItemReport.php @@ -28,7 +28,6 @@ class ProvinceActivityPerSubItemReport implements FromView, WithEvents, ShouldAu 'activities' => $activities["data"], 'fromDate' => $activities["fromDate"], 'toDate' => $activities["toDate"], - 'details' => $activities["details"] ]); } diff --git a/app/Exports/V3/RoadItemsProjects/SupervisorCartableReport.php b/app/Exports/V3/RoadItemsProjects/SupervisorCartableReport.php new file mode 100644 index 00000000..4aa03957 --- /dev/null +++ b/app/Exports/V3/RoadItemsProjects/SupervisorCartableReport.php @@ -0,0 +1,69 @@ + $this->data, + ]); + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + $event->sheet->getDelegate()->getStyle('A:U')->getFont()->setName('Arial'); + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setHorizontal(Alignment::HORIZONTAL_CENTER); + + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setVertical(Alignment::VERTICAL_CENTER); + } + ]; + } + + 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/RoadPatrols/OperatorCartableReport.php b/app/Exports/V3/RoadPatrols/OperatorCartableReport.php new file mode 100644 index 00000000..d1279f13 --- /dev/null +++ b/app/Exports/V3/RoadPatrols/OperatorCartableReport.php @@ -0,0 +1,68 @@ +data; + + return view('v3.Reports.RoadPatrols.OperatorCartableReport', [ + 'data' => $data + ]); + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + $event->sheet->getDelegate()->getStyle('A:U')->getFont()->setName('Arial'); + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setHorizontal(Alignment::HORIZONTAL_CENTER); + + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setVertical(Alignment::VERTICAL_CENTER); + } + ]; + } + + 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/RoadPatrols/SupervisorCartableReport.php b/app/Exports/V3/RoadPatrols/SupervisorCartableReport.php new file mode 100644 index 00000000..12f05996 --- /dev/null +++ b/app/Exports/V3/RoadPatrols/SupervisorCartableReport.php @@ -0,0 +1,68 @@ +data; + + return view('v3.Reports.RoadPatrols.SupervisorCartableReport', [ + 'data' => $data + ]); + } + + public function registerEvents(): array + { + return [ + AfterSheet::class => function (AfterSheet $event) { + $event->sheet->getDelegate()->setRightToLeft(true); + $event->sheet->getDelegate()->getStyle('A:U')->getFont()->setName('Arial'); + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setHorizontal(Alignment::HORIZONTAL_CENTER); + + $event->sheet->getDelegate()->getStyle('A:U') + ->getAlignment() + ->setVertical(Alignment::VERTICAL_CENTER); + } + ]; + } + + 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/Reports/RoadItemsReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php index 2d4d07b7..098fc85d 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php @@ -32,132 +32,45 @@ class RoadItemsReportController extends Controller ]); } - public function countryActivityPerSubItem(Request $request): JsonResponse + public function countryActivityPerSubItem(Request $request, RoadItemReportService $roadItemReportService): 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; - - $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') - ->where('item', '=', $item) - ->whereBetween('activity_date_time', [$fromDate, $toDate]) - ->where('status', '=', 1) - ->groupBy('province_id', 'sub_item') - ->get(); - - $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, - -1 AS p') - ->where('item', '=', $item) - ->whereBetween('activity_date_time', [$fromDate, $toDate]) - ->where('status', '=', 1) - ->groupBy('sub_item') - ->get(); - - - $activities = $provinceRoadItemsPerSubItem->push(...$countryRoadItemsPerSubItem); + $activities = $roadItemReportService->countryActivityPerSubItem($request); $provinces = Province::all(['id', 'name_fa']); $subItems = InfoItem::query() - ->where('item', $item) + ->where('item', $request->item) ->get(['id', 'item', 'item_str', 'sub_item_str', 'sub_item_unit', 'sub_item']); return $this->successResponse([ - 'activities' => $activities, + 'activities' => $activities['data'], 'sub_items' => $subItems, 'provinces' => $provinces, ]); } - public function provinceActivityPerSubItem(Request $request): JsonResponse + public function provinceActivityPerSubItem(Request $request, RoadItemReportService $roadItemReportService): 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; + $activities = $roadItemReportService->provinceActivityPerSubItem($request); - $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, - 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(); + $edarateShahri = EdarateShahri::query()->where('province_id', '=', $request->province_id)->get(['id', 'name_fa']); - $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(); - - - $edarateShahri = EdarateShahri::query()->where('province_id', '=', $province)->get(['id', 'name_fa']); - $activities = $cityRoadItemsPerSubItem->push(...$provinceRoadItemsPerSubItem); $subItems = InfoItem::query() - ->where('item', $item) + ->where('item', $request->item) ->get(['id', 'item', 'item_str', 'sub_item_str', 'sub_item_unit', 'sub_item']); return $this->successResponse([ - 'activities' => $activities, + 'activities' => $activities['data'], 'edarateShahri' => $edarateShahri, 'sub_items' => $subItems, ]); } - public function countryActivityPerItem(Request $request): JsonResponse + public function countryActivityPerItem(Request $request, RoadItemReportService $roadItemReportService): 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']); - $isSpecialUser = $user->hasPermissionTo("show-road-item-supervise-cartable"); - $provinceId = $isSpecialUser ? null : $user->province_id; - - $provinceActivity = 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'); - - $countryActivity = 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'); - - $activities = $provinceActivity - ->unionAll($countryActivity) - ->get(); - + $activities = $roadItemReportService->countryActivityPerItem($request); $provinces = Province::all(['id', 'name_fa']); return $this->successResponse([ @@ -166,37 +79,10 @@ class RoadItemsReportController extends Controller ]); } - public function provinceActivityPerItem(Request $request): JsonResponse + public function provinceActivityPerItem(Request $request, RoadItemReportService $roadItemReportService): 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(); - - $edarehActivity = 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'); - - $cityActivity = RoadItemsProject::query() - ->selectRaw(' - COUNT(*) AS s, - -1 AS c, - item AS i') - ->where('status', '=', 1) - ->whereBetween('activity_date_time', [$fromDate, $toDate]) - ->where('province_id', $provinceId) - ->groupBy('item'); - - $activities = $edarehActivity - ->unionAll($cityActivity) - ->get(); - - $edarateShahri = EdarateShahri::query()->where('province_id', '=', $provinceId)->get(['id', 'name_fa']); + $activities = $roadItemReportService->provinceActivityPerItem($request); + $edarateShahri = EdarateShahri::query()->where('province_id', '=', $request->province_id)->get(['id', 'name_fa']); return $this->successResponse([ 'activities' => $activities, @@ -228,48 +114,35 @@ class RoadItemsReportController extends Controller return $this->successResponse($data); } - public function countryActivityExcelPerItem(Request $request): BinaryFileResponse + public function countryActivityExcelPerItem(Request $request, RoadItemReportService $roadItemReportService): BinaryFileResponse { auth()->user()->addActivityComplete(1034); $name = 'گزارش کشوری از فعالیت روزانه و جاری - جدول 1 ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - return Excel::download(new CountryActivityPerItemReport($request->fromDate, $request->toDate), $name); + $activities = $roadItemReportService->countryActivityPerItem($request); + return Excel::download(new CountryActivityPerItemReport($activities), $name); } - public function provinceActivityExcelPerItem(Request $request): BinaryFileResponse + public function provinceActivityExcelPerItem(Request $request, RoadItemReportService $roadItemReportService): BinaryFileResponse { auth()->user()->addActivityComplete(1034); $name = 'گزارش استانی از فعالیت روزانه و جاری - جدول 1 ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - return Excel::download(new ProvinceActivityPerItemReport($request->fromDate, $request->toDate, $request->province), $name); + $activities = $roadItemReportService->provinceActivityPerItem($request); + return Excel::download(new ProvinceActivityPerItemReport($activities), $name); } public function countryActivityExcelPerSubItem(Request $request, RoadItemReportService $roadItemReportService): BinaryFileResponse { auth()->user()->addActivityComplete(1034); - - $activities = $roadItemReportService->countryActivityPerSubItem( - $request->item, - $request->fromDate, - $request->toDate, - ); - $name = "گزارش کشوری از فعالیت روزانه و جاری - جدول 2 " . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - + $activities = $roadItemReportService->countryActivityPerSubItem($request); return Excel::download(new CountryActivityPerSubItemReport($activities), $name); } public function provinceActivityExcelPerSubItem(Request $request, RoadItemReportService $roadItemReportService): BinaryFileResponse { auth()->user()->addActivityComplete(1034); - - $activities = $roadItemReportService->provinceActivityPerSubItem( - $request->item, - $request->fromDate, - $request->toDate, - $request->province_id - ); - + $activities = $roadItemReportService->provinceActivityPerSubItem($request); $name = "گزارش استانی از فعالیت روزانه و جاری - جدول 2 " . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - return Excel::download(new ProvinceActivityPerSubItemReport($activities), $name); } } diff --git a/app/Http/Controllers/V3/Dashboard/RoadItemsProjectController.php b/app/Http/Controllers/V3/Dashboard/RoadItemsProjectController.php index 525103f8..4893bee3 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadItemsProjectController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadItemsProjectController.php @@ -2,9 +2,8 @@ namespace App\Http\Controllers\V3\Dashboard; -use App\Exports\V2\RoadItems\OperatorCartableExport; -use App\Exports\V2\RoadItems\SupervisorCartableExport; -use App\Facades\DataTable\DataTableFacade; +use App\Exports\V3\RoadItemsProjects\OperatorCartableReport; +use App\Exports\V3\RoadItemsProjects\SupervisorCartableReport; use App\Http\Controllers\Controller; use App\Http\Requests\V3\RoadItemsProject\StoreRequest; use App\Http\Requests\V3\RoadItemsProject\UpdateRequest; @@ -14,6 +13,7 @@ use App\Models\EdarateShahri; use App\Models\InfoItem; use App\Models\RoadItemsProject; use App\Services\NominatimService; +use App\Services\Reports\RoadItemReportService; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Gate; @@ -28,39 +28,9 @@ class RoadItemsProjectController extends Controller /** * Display a listing of the resource. */ - public function supervisorIndex(Request $request): JsonResponse + public function supervisorIndex(Request $request, RoadItemReportService $roadItemReportService): JsonResponse { - $columns = array( - 'id', 'user_id', 'start_lat', 'start_lng', 'end_lat', - 'end_lng', 'project_distance', 'item', 'item_fa', 'sub_item_fa', 'sub_item', - 'sub_item_data', 'created_at', 'updated_at', 'province_id', 'province_fa', - 'unit_fa', 'status', 'status_fa', 'supervisor_description', 'supervising_time', - 'supervisor_name', 'edarat_id', 'edarat_name', 'activity_date_time','cmmsMachines.machine_code', 'rahdaran.code', - ); - - $allowedFilters = $columns; - $allowedSortings = $columns; - - $user = auth()->user(); - $query = null; - - if ($user->hasPermissionTo('show-road-item-supervise-cartable')) { - $query = RoadItemsProject::query()->where('is_new', 1)->with(['files', 'rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']); - } - elseif ($user->hasPermissionTo('show-road-item-supervise-cartable-province')) { - if (is_null($user->province_id)) { - return $this->errorResponse('استانی برای شما در سامانه ثبت نشده است!'); - } - $query = RoadItemsProject::query()->where('is_new', 1) - ->with(['files', 'rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])->where('province_id', auth()->user()->province_id); - } - - $data = DataTableFacade::run( - $query, - $request, - allowedFilters: $allowedFilters, - allowedSortings: $allowedSortings); - + $data = $roadItemReportService->supervisorCartableReport($request); foreach ($data['data'] as $road_item) { if (Gate::allows('gate-supervise-road-item', $road_item)) { @@ -126,36 +96,16 @@ class RoadItemsProjectController extends Controller } - public function supervisorCartableReport(Request $request): BinaryFileResponse + public function supervisorCartableReport(Request $request, RoadItemReportService $roadItemReportService): BinaryFileResponse { $name = 'گزارش از کارتابل ارزیابی فعالیت روزانه ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; - return Excel::download(new SupervisorCartableExport($request->id, $request->item, $request->status, - $request->fromDate, $request->toDate, $request->province_id, $request->edarat_id), $name); + $data = $roadItemReportService->supervisorCartableReport($request); + return Excel::download(new SupervisorCartableReport($data), $name); } - public function operatorIndex(Request $request): JsonResponse + public function operatorIndex(Request $request, RoadItemReportService $roadItemReportService): JsonResponse { - $columns = array( - 'id', 'user_id', 'start_lat', 'start_lng', 'end_lat', - 'end_lng', 'project_distance', 'item', 'item_fa', 'sub_item_fa', 'sub_item', - 'sub_item_data', 'created_at', 'updated_at', 'province_id', 'province_fa', - 'unit_fa', 'status', 'status_fa', 'supervisor_description', 'supervising_time', - 'supervisor_name', 'edarat_id', 'edarat_name', 'activity_date_time', 'cmmsMachines.machine_code', 'rahdaran.code', - ); - - $allowedFilters = $columns; - $allowedSortings = $columns; - - $query = RoadItemsProject::with(['files', 'rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']) - ->where('is_new', 1) - ->where('user_id', auth()->user()->id); - - $data = DataTableFacade::run( - $query, - $request, - allowedFilters: $allowedFilters, - allowedSortings: $allowedSortings); - + $data = $roadItemReportService->operatorCartableReport($request); return response()->json($data); } @@ -314,12 +264,10 @@ class RoadItemsProjectController extends Controller return $this->successResponse(); } - public function operatorCartableReport(Request $request): BinaryFileResponse + public function operatorCartableReport(Request $request, RoadItemReportService $roadItemReportService): BinaryFileResponse { $name = 'گزارش از کارتابل عملیات فعالیت روزانه ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; - return Excel::download( - new OperatorCartableExport($request->id, $request->item, $request->status, $request->fromDate, $request->toDate), - $name - ); + $data = $roadItemReportService->operatorCartableReport($request); + return Excel::download(new OperatorCartableReport($data), $name); } } diff --git a/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php b/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php index 32d5978c..565ca51e 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php @@ -4,6 +4,8 @@ namespace App\Http\Controllers\V3\Dashboard; use App\Exports\V2\RoadPatrol\OperatorCartableExport; use App\Exports\V2\RoadPatrol\SupervisorCartableExport; +use App\Exports\V3\RoadPatrols\OperatorCartableReport; +use App\Exports\V3\RoadPatrols\SupervisorCartableReport; use App\Facades\DataTable\DataTableFacade; use App\Facades\Sms\Sms; use App\Http\Controllers\Controller; @@ -16,6 +18,7 @@ use App\Models\RoadItemsProject; use App\Models\RoadObserved; use App\Models\RoadPatrol; use App\Services\NominatimService; +use App\Services\Reports\RoadPatrolReportService; use Carbon\Carbon; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; @@ -30,40 +33,9 @@ class RoadPatrolProjectController extends Controller { use ApiResponse; - public function supervisorIndex(Request $request): JsonResponse + public function supervisorIndex(Request $request, RoadPatrolReportService $roadPatrolReportService): JsonResponse { - $columns = array( - 'id', 'start_lat', 'start_lon', 'end_lat', 'end_lon', 'operator_id', 'created_at', - 'operator_name', 'officer_plaque', 'officer_phone_number', 'officer_name', - 'supervisor_description', 'supervising_time', 'supervisor_name', 'status', - 'status_fa', 'distance', 'province_id', 'province_fa', 'edare_id', 'edare_name', - 'start_time', 'end_time','description', 'cmmsMachines.machine_code', 'rahdaran.code', - ); - - $allowedFilters = $columns; - $allowedSortings = $columns; - - $user = auth()->user(); - $query = null; - - if ($user->hasPermissionTo('show-road-patrol-supervise-cartable')) { - $query = RoadPatrol::query() - ->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']); - } - elseif ($user->hasPermissionTo('show-road-patrol-supervise-cartable-province')) { - if (is_null($user->province_id)) { - return $this->errorResponse('استانی برای شما در سامانه ثبت نشده است!'); - } - $query = RoadPatrol::query() - ->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']) - ->where('province_id', '=', $user->province_id); - } - - $data = DataTableFacade::run( - $query, - $request, - allowedFilters: $allowedFilters, - allowedSortings: $allowedSortings); + $data = $roadPatrolReportService->supervisorCartableReport($request); foreach ($data['data'] as $road_patrol) { if (Gate::allows('gate-supervise-road-item', $road_patrol)) { @@ -111,37 +83,16 @@ class RoadPatrolProjectController extends Controller return $this->successResponse(); } - public function supervisorCartableReport(Request $request): BinaryFileResponse + public function supervisorCartableReport(Request $request, RoadPatrolReportService $roadPatrolReportService): BinaryFileResponse { $name = 'گزارش از کارتابل ارزیابی گشت راهداری ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; - return Excel::download( - new SupervisorCartableExport($request->id, $request->fromDate, - $request->toDate, $request->province_id, $request->edare_id - ), $name - ); + $data = $roadPatrolReportService->supervisorCartableReport($request); + return Excel::download(new SupervisorCartableReport($data), $name); } - public function operatorIndex(Request $request): JsonResponse + public function operatorIndex(Request $request, RoadPatrolReportService $roadPatrolReportService): JsonResponse { - $columns = array( - 'id', 'start_lat', 'start_lon', 'end_lat', 'end_lon', 'officer_plaque', 'created_at', - 'officer_phone_number', 'officer_name', 'supervisor_description', 'supervising_time', - 'supervisor_name', 'status', 'status_fa', 'distance', 'start_time', 'end_time', 'cmmsMachines.machine_code', 'rahdaran.code', - ); - - $allowedFilters = $columns; - $allowedSortings = $columns; - - $query = RoadPatrol::query() - ->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']) - ->where('operator_id', '=', auth()->user()->id); - - $data = DataTableFacade::run( - $query, - $request, - allowedFilters: $allowedFilters, - allowedSortings: $allowedSortings); - + $data = $roadPatrolReportService->operatorCartableReport($request); return response()->json($data); } @@ -369,12 +320,10 @@ class RoadPatrolProjectController extends Controller return $this->successResponse($roadPatrol); } - public function operatorCartableReport(Request $request): BinaryFileResponse + public function operatorCartableReport(Request $request, RoadPatrolReportService $roadPatrolReportService): BinaryFileResponse { $name = 'گزارش از کارتابل عملیات گشت راهداری ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; - return Excel::download( - new OperatorCartableExport($request->id, $request->status, $request->officer_name, $request->fromDate, $request->toDate), - $name - ); + $data = $roadPatrolReportService->operatorCartableReport($request); + return Excel::download(new OperatorCartableReport($data), $name); } } diff --git a/app/Services/Reports/RoadItemReportService.php b/app/Services/Reports/RoadItemReportService.php index 240d6bb4..4751cda3 100644 --- a/app/Services/Reports/RoadItemReportService.php +++ b/app/Services/Reports/RoadItemReportService.php @@ -2,92 +2,232 @@ namespace App\Services\Reports; +use App\Facades\DataTable\DataTableFacade; use App\Models\InfoItem; +use App\Models\RoadItemsProject; +use Illuminate\Http\Request; use Illuminate\Support\Collection; use Illuminate\Support\Facades\DB; class RoadItemReportService { - public function countryActivityPerSubItem(int $item, string $fromDate, string $toDate): array + public function supervisorCartableReport(Request $request) { - $subItems = InfoItem::query()->where('item', $item) - ->orderBy('sub_item') - ->get(['sub_item', 'sub_item_str', 'sub_item_unit']); + $columns = array( + 'id', 'user_id', 'start_lat', 'start_lng', 'end_lat', + 'end_lng', 'project_distance', 'item', 'item_fa', 'sub_item_fa', 'sub_item', + 'sub_item_data', 'created_at', 'updated_at', 'province_id', 'province_fa', + 'unit_fa', 'status', 'status_fa', 'supervisor_description', 'supervising_time', + 'supervisor_name', 'edarat_id', 'edarat_name', 'activity_date_time','cmmsMachines.machine_code', 'rahdaran.code', + ); - $query = DB::table('road_items_projects') - ->selectRaw('province_id, province_fa'); + $allowedFilters = $columns; + $allowedSortings = $columns; - foreach ($subItems as $subItem) { - $query->selectRaw(" - COUNT(CASE WHEN sub_item = {$subItem->sub_item} THEN 1 END) as Count_{$subItem->sub_item}, - SUM(CASE WHEN sub_item = {$subItem->sub_item} THEN sub_item_data END) as Sum_{$subItem->sub_item} - "); + $user = auth()->user(); + $query = null; + + if ($user->hasPermissionTo('show-road-item-supervise-cartable')) { + $query = RoadItemsProject::query()->where('is_new', 1)->with(['files', 'rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']); + } + elseif ($user->hasPermissionTo('show-road-item-supervise-cartable-province')) { + if (is_null($user->province_id)) { + return $this->errorResponse('استانی برای شما در سامانه ثبت نشده است!'); + } + $query = RoadItemsProject::query()->where('is_new', 1) + ->with(['files', 'rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])->where('province_id', auth()->user()->province_id); } - $query->where('item', '=', $item) - ->where('status', '=', 1) + $data = DataTableFacade::run( + $query, + $request, + allowedFilters: $allowedFilters, + allowedSortings: $allowedSortings); + + return $data; + } + + public function operatorCartableReport(Request $request) + { + $columns = array( + 'id', 'user_id', 'start_lat', 'start_lng', 'end_lat', + 'end_lng', 'project_distance', 'item', 'item_fa', 'sub_item_fa', 'sub_item', + 'sub_item_data', 'created_at', 'updated_at', 'province_id', 'province_fa', + 'unit_fa', 'status', 'status_fa', 'supervisor_description', 'supervising_time', + 'supervisor_name', 'edarat_id', 'edarat_name', 'activity_date_time', 'cmmsMachines.machine_code', 'rahdaran.code', + ); + + $allowedFilters = $columns; + $allowedSortings = $columns; + + $query = RoadItemsProject::with(['files', 'rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']) + ->where('is_new', 1) + ->where('user_id', auth()->user()->id); + + $data = DataTableFacade::run( + $query, + $request, + allowedFilters: $allowedFilters, + allowedSortings: $allowedSortings); + + return $data; + } + + public function countryActivityPerSubItem(Request $request): array + { + $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; + + $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') + ->where('item', '=', $item) ->whereBetween('activity_date_time', [$fromDate, $toDate]) - ->groupBy('province_id', 'province_fa') - ->orderBy('province_id'); + ->where('status', '=', 1) + ->groupBy('province_id', 'sub_item') + ->get(); - $activities = $query->get(); + $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, + -1 AS p') + ->where('item', '=', $item) + ->whereBetween('activity_date_time', [$fromDate, $toDate]) + ->where('status', '=', 1) + ->groupBy('sub_item') + ->get(); - $totalItemCount = [ - 'province_fa' => 'کشوری' - ]; - foreach ($subItems as $subItem) { - $totalItemCount["Count_{$subItem->sub_item}"] = $activities->sum("Count_{$subItem->sub_item}"); - $totalItemCount["Sum_{$subItem->sub_item}"] = $activities->sum("Sum_{$subItem->sub_item}"); - } + $activities = $provinceRoadItemsPerSubItem->push(...$countryRoadItemsPerSubItem); return [ - 'data' => $activities->push((object)$totalItemCount), + 'data' => $activities, 'fromDate' => $fromDate, 'toDate' => $toDate, - 'details' => $subItems->keyBy('sub_item'), ]; } - public function provinceActivityPerSubItem(int $item, string $fromDate, string $toDate, int $provinceId): array + public function provinceActivityPerSubItem(Request $request): array { - $subItems = InfoItem::query()->where('item', $item) - ->orderBy('sub_item') - ->get(['sub_item', 'sub_item_str', 'sub_item_unit']); + $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; - $query = DB::table('road_items_projects') - ->selectRaw('province_id, province_fa, TRIM(SUBSTRING_INDEX(user_name, "استان", 1)) as city_fa, city_id'); - - foreach ($subItems as $subItem) { - $query->selectRaw(" - COUNT(CASE WHEN sub_item = {$subItem->sub_item} THEN 1 END) as Count_{$subItem->sub_item}, - SUM(CASE WHEN sub_item = {$subItem->sub_item} THEN sub_item_data END) as Sum_{$subItem->sub_item} - "); - } - - $query->where('item', '=', $item) - ->where('status', '=', 1) - ->where('province_id', '=', $provinceId) + $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, + province_id AS p, + edarat_id AS ci + ') + ->where('item', '=', $item) + ->where('province_id', '=', $province) ->whereBetween('activity_date_time', [$fromDate, $toDate]) - ->groupBy('city_id') - ->orderBy('province_id'); + ->where('status', '=', 1) + ->groupBy('edarat_id', 'sub_item') + ->get(); - $activities = $query->get(); + $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(); - $totalItemCount = [ - 'city_fa' => 'استانی' - ]; - foreach ($subItems as $subItem) { - $totalItemCount["Count_{$subItem->sub_item}"] = $activities->sum("Count_{$subItem->sub_item}"); - $totalItemCount["Sum_{$subItem->sub_item}"] = $activities->sum("Sum_{$subItem->sub_item}"); - } + $activities = $cityRoadItemsPerSubItem->push(...$provinceRoadItemsPerSubItem); return [ - 'data' => $activities->push((object)$totalItemCount), + 'data' => $activities, + 'fromDate' => $fromDate, + 'toDate' => $toDate, + ]; + } + + public function countryActivityPerItem(Request $request): array + { + $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 = $user->hasPermissionTo("show-road-item-supervise-cartable"); + $provinceId = $isSpecialUser ? null : $user->province_id; + + $provinceActivity = 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'); + + $countryActivity = 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'); + + $activities = $provinceActivity + ->unionAll($countryActivity) + ->get(); + + return [ + 'data' => $activities, + 'fromDate' => $fromDate, + 'toDate' => $toDate, + ]; + } + + public function provinceActivityPerItem(Request $request): array + { + $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(); + + $edarehActivity = 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'); + + $cityActivity = RoadItemsProject::query() + ->selectRaw(' + COUNT(*) AS s, + -1 AS c, + item AS i') + ->where('status', '=', 1) + ->whereBetween('activity_date_time', [$fromDate, $toDate]) + ->where('province_id', $provinceId) + ->groupBy('item'); + + $activities = $edarehActivity + ->unionAll($cityActivity) + ->get(); + + return [ + 'data' => $activities, 'fromDate' => $fromDate, 'toDate' => $toDate, - 'details' => $subItems->keyBy('sub_item') ]; } } \ No newline at end of file diff --git a/app/Services/Reports/RoadPatrolReportService.php b/app/Services/Reports/RoadPatrolReportService.php index 309533b0..1dda5f91 100644 --- a/app/Services/Reports/RoadPatrolReportService.php +++ b/app/Services/Reports/RoadPatrolReportService.php @@ -2,10 +2,75 @@ namespace App\Services\Reports; +use App\Facades\DataTable\DataTableFacade; +use App\Models\RoadPatrol; +use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class RoadPatrolReportService { + public function supervisorCartableReport(Request $request) + { + $columns = array( + 'id', 'start_lat', 'start_lon', 'end_lat', 'end_lon', 'operator_id', 'created_at', + 'operator_name', 'officer_plaque', 'officer_phone_number', 'officer_name', + 'supervisor_description', 'supervising_time', 'supervisor_name', 'status', + 'status_fa', 'distance', 'province_id', 'province_fa', 'edare_id', 'edare_name', + 'start_time', 'end_time','description', 'cmmsMachines.machine_code', 'rahdaran.code', + ); + + $allowedFilters = $columns; + $allowedSortings = $columns; + + $user = auth()->user(); + $query = null; + + if ($user->hasPermissionTo('show-road-patrol-supervise-cartable')) { + $query = RoadPatrol::query() + ->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']); + } + elseif ($user->hasPermissionTo('show-road-patrol-supervise-cartable-province')) { + if (is_null($user->province_id)) { + return $this->errorResponse('استانی برای شما در سامانه ثبت نشده است!'); + } + $query = RoadPatrol::query() + ->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']) + ->where('province_id', '=', $user->province_id); + } + + $data = DataTableFacade::run( + $query, + $request, + allowedFilters: $allowedFilters, + allowedSortings: $allowedSortings); + + return $data; + } + + public function operatorCartableReport(Request $request) + { + $columns = array( + 'id', 'start_lat', 'start_lon', 'end_lat', 'end_lon', 'officer_plaque', 'created_at', + 'officer_phone_number', 'officer_name', 'supervisor_description', 'supervising_time', + 'supervisor_name', 'status', 'status_fa', 'distance', 'start_time', 'end_time', 'cmmsMachines.machine_code', 'rahdaran.code', + ); + + $allowedFilters = $columns; + $allowedSortings = $columns; + + $query = RoadPatrol::query() + ->with(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number']) + ->where('operator_id', '=', auth()->user()->id); + + $data = DataTableFacade::run( + $query, + $request, + allowedFilters: $allowedFilters, + allowedSortings: $allowedSortings); + + return $data; + } + public function countryActivity(string $fromDate, string $toDate): array { $activities = DB::select('SELECT From cd9d8211f41b27c2f25b8764b0ffe7d2483f8d22 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Tue, 4 Feb 2025 13:09:27 +0330 Subject: [PATCH 20/43] add new blade for reports --- .../Dashboard/RoadItemsProjectController.php | 4 +- app/Services/DataTable/DataTableInput.php | 6 +- app/Services/DataTable/DataTableService.php | 4 +- .../DataTable/Validators/FilterValidator.php | 2 +- .../DataTable/Validators/SortingValidator.php | 2 +- .../OperatorCartableReport.blade.php | 102 +++++++++++++++ .../SupervisorCartableReport.blade.php | 117 ++++++++++++++++++ 7 files changed, 228 insertions(+), 9 deletions(-) create mode 100644 resources/views/v3/Reports/RoadItems/OperatorCartableReport.blade.php create mode 100644 resources/views/v3/Reports/RoadItems/SupervisorCartableReport.blade.php diff --git a/app/Http/Controllers/V3/Dashboard/RoadItemsProjectController.php b/app/Http/Controllers/V3/Dashboard/RoadItemsProjectController.php index 4893bee3..00295fb7 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadItemsProjectController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadItemsProjectController.php @@ -100,7 +100,7 @@ class RoadItemsProjectController extends Controller { $name = 'گزارش از کارتابل ارزیابی فعالیت روزانه ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; $data = $roadItemReportService->supervisorCartableReport($request); - return Excel::download(new SupervisorCartableReport($data), $name); + return Excel::download(new SupervisorCartableReport($data['data']), $name); } public function operatorIndex(Request $request, RoadItemReportService $roadItemReportService): JsonResponse @@ -268,6 +268,6 @@ class RoadItemsProjectController extends Controller { $name = 'گزارش از کارتابل عملیات فعالیت روزانه ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; $data = $roadItemReportService->operatorCartableReport($request); - return Excel::download(new OperatorCartableReport($data), $name); + return Excel::download(new OperatorCartableReport($data['data']), $name); } } diff --git a/app/Services/DataTable/DataTableInput.php b/app/Services/DataTable/DataTableInput.php index 18e7ea10..64a3f290 100644 --- a/app/Services/DataTable/DataTableInput.php +++ b/app/Services/DataTable/DataTableInput.php @@ -15,10 +15,10 @@ class DataTableInput * @param array $rels */ public function __construct( - private int $start, + private ?int $start, private ?int $size, private array $filters, - private array $sorting, + private ?array $sorting, private array $rels, private array $allowedFilters, private array $allowedSortings, @@ -74,6 +74,4 @@ class DataTableInput { return $this->rels; } - - } diff --git a/app/Services/DataTable/DataTableService.php b/app/Services/DataTable/DataTableService.php index af0d0451..647f6e44 100644 --- a/app/Services/DataTable/DataTableService.php +++ b/app/Services/DataTable/DataTableService.php @@ -76,7 +76,9 @@ class DataTableService $this->totalRowCount = $query->count(); - $query->offset($this->dataTableInput->getStart()); + if (!is_null($this->dataTableInput->getStart())) { + $query->offset($this->dataTableInput->getStart()); + } if(!is_null($this->dataTableInput->getSize())){ $query->limit($this->dataTableInput->getSize()); diff --git a/app/Services/DataTable/Validators/FilterValidator.php b/app/Services/DataTable/Validators/FilterValidator.php index cc45813e..ea837f9e 100644 --- a/app/Services/DataTable/Validators/FilterValidator.php +++ b/app/Services/DataTable/Validators/FilterValidator.php @@ -50,7 +50,7 @@ class FilterValidator protected function isAllowed(Filter $filter, array $allowedFilters): bool { - return in_array($filter->getId(), $allowedFilters); + return $allowedFilters == ['*'] || in_array($filter->getId(), $allowedFilters); } protected function isValidSearchFunction(Filter $filter): bool diff --git a/app/Services/DataTable/Validators/SortingValidator.php b/app/Services/DataTable/Validators/SortingValidator.php index a494ef6a..4409bfba 100644 --- a/app/Services/DataTable/Validators/SortingValidator.php +++ b/app/Services/DataTable/Validators/SortingValidator.php @@ -34,6 +34,6 @@ class SortingValidator protected function isAllowed(Sort $sorting, array $allowedSortings): bool { - return in_array($sorting->getId(), $allowedSortings); + return $allowedSortings == ['*'] || in_array($sorting->getId(), $allowedSortings); } } diff --git a/resources/views/v3/Reports/RoadItems/OperatorCartableReport.blade.php b/resources/views/v3/Reports/RoadItems/OperatorCartableReport.blade.php new file mode 100644 index 00000000..a020d289 --- /dev/null +++ b/resources/views/v3/Reports/RoadItems/OperatorCartableReport.blade.php @@ -0,0 +1,102 @@ + + + + + + + + گزارش فعالیت های روزانه و جاری + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @foreach ($data as $item) + + + + + + + + + + + + + @endforeach + +
+ تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }} +
+
+ گزارش کارتابل عملیات فعالیت های روزانه و جاری از تاریخ + {{ verta($fromDate)->format('Y/n/j') }} + تا + تاریخ + {{ verta($toDate)->format('Y/n/j') }} + +
کد + یکتاآیتم + فعالیت + موضوع مشاهده شده + مقدار + نقطه شروع + نقطه پایان + تاریخ ثبت + تاریخ فعالیت + وضعیت + توضیحات ناظر
{{ $item['id'] ?? '-' }}{{ $item['item_fa'] ?? '-' }}{{ $item['sub_item_fa'] ?? '-' }} + {{ $item['sub_item_data'] ? ($item['unit_fa'] ? $item['sub_item_data'] . '(' . $item['unit_fa'] . ')' : $item['sub_item_data'] . '(-)') : '-' }} + {{ isset($item['start_lat']) && isset($item['start_lng']) ? $item['start_lat'] . ' ' . $item['start_lng'] : '-' }}{{ isset($item['end_lat']) && isset($item['end_lng']) ? $item['end_lat'] . ' ' . $item['end_lng'] : '-' }}{{ $item['created_at'] ? verta($item['created_at'])->format('Y/n/j H:i:s') : '-' }}{{ $item['activity_date_time'] ? verta($item['activity_date_time'])->format('Y/n/j H:i:s') : '-' }} + {{ $item['status_fa'] ?? '-' }}{{ $item['supervisor_description'] ?? '-' }}
+ + + diff --git a/resources/views/v3/Reports/RoadItems/SupervisorCartableReport.blade.php b/resources/views/v3/Reports/RoadItems/SupervisorCartableReport.blade.php new file mode 100644 index 00000000..4822186c --- /dev/null +++ b/resources/views/v3/Reports/RoadItems/SupervisorCartableReport.blade.php @@ -0,0 +1,117 @@ + + + + + + + + گزارش فعالیت های روزانه و جاری + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @foreach ($data as $item) + + + + + + + + + + + + + + + + @endforeach + +
+ تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }} +
+
+ گزارش کارتابل ارزیابی فعالیت های روزانه و جاری از تاریخ + {{ verta($fromDate)->format('Y/n/j') }} + تا + تاریخ + {{ verta($toDate)->format('Y/n/j') }} +
کد + یکتا + استان + ادارهآیتم + فعالیت + موضوع مشاهده شده + مقدار + نقطه شروع + نقطه پایان + تاریخ ثبت + تاریخ فعالیت + وضعیت + توضیحات ناظر
{{ $item['id'] ?? '-' }}{{ $item['province_fa'] ?? '-' }}{{ $item['edarat_name'] ?? '-' }}{{ $item['item_fa'] ?? '-' }}{{ $item['sub_item_fa'] ?? '-' }} + {{ $item['sub_item_data'] ? ($item['unit_fa'] ? $item['sub_item_data'] . '(' . $item['unit_fa'] . ')' : $item['sub_item_data'] . '(-)') : '-' }} + + {{ isset($item['start_lat']) && isset($item['start_lng']) ? $item['start_lat'] . ' ' . $item['start_lng'] : '-' }} + + {{ isset($item['end_lat']) && isset($item['end_lng']) ? $item['end_lat'] . ' ' . $item['end_lng'] : '-' }} + {{ $item['created_at'] ? verta($item['created_at'])->format('Y/n/j H:i:s') : '-' }}{{ $item['activity_date_time'] ? verta($item['activity_date_time'])->format('Y/n/j H:i:s') : '-' }} + {{ $item['status_fa'] ?? '-' }} + {{ $item['supervisor_description'] ?? '-' }}
+ + + From d2d7ee2d57217a2d023a946ac7b3de7e859fe469 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Tue, 4 Feb 2025 13:27:02 +0330 Subject: [PATCH 21/43] make input parameter null --- .../V3/Dashboard/Reports/RoadItemsReportController.php | 4 ++-- app/Services/DataTable/DataTableInput.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php index 098fc85d..3196ff73 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php @@ -74,7 +74,7 @@ class RoadItemsReportController extends Controller $provinces = Province::all(['id', 'name_fa']); return $this->successResponse([ - 'activities' => $activities, + 'activities' => $activities['data'], 'provinces' => $provinces, ]); } @@ -85,7 +85,7 @@ class RoadItemsReportController extends Controller $edarateShahri = EdarateShahri::query()->where('province_id', '=', $request->province_id)->get(['id', 'name_fa']); return $this->successResponse([ - 'activities' => $activities, + 'activities' => $activities['data'], 'edarateShahri' => $edarateShahri, ]); } diff --git a/app/Services/DataTable/DataTableInput.php b/app/Services/DataTable/DataTableInput.php index 64a3f290..8464e878 100644 --- a/app/Services/DataTable/DataTableInput.php +++ b/app/Services/DataTable/DataTableInput.php @@ -26,7 +26,7 @@ class DataTableInput { } - public function getStart(): int + public function getStart(): ?int { return $this->start; } From 05f6e42a8067431f8a75ad39c6d9e8e3dab27e88 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Tue, 4 Feb 2025 15:26:14 +0330 Subject: [PATCH 22/43] return data --- .../V3/Dashboard/Reports/RoadPatrolReportController.php | 4 ++-- app/Services/Reports/RoadPatrolReportService.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php index 3ce39b0c..d45967b6 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php @@ -29,7 +29,7 @@ class RoadPatrolReportController extends Controller $provinces = Province::all(['id', 'name_fa']); return $this->successResponse([ - 'activities' => $activities, + 'activities' => $activities['data'], 'provinces' => $provinces ]); } @@ -46,7 +46,7 @@ class RoadPatrolReportController extends Controller $edarateShahri = EdarateShahri::query()->where('province_id', '=', $provinceId)->get(['id', 'name_fa']); return $this->successResponse([ - 'activities' => $activities, + 'activities' => $activities['data'], 'edarateShahri' => $edarateShahri, ]); } diff --git a/app/Services/Reports/RoadPatrolReportService.php b/app/Services/Reports/RoadPatrolReportService.php index 1dda5f91..c7051116 100644 --- a/app/Services/Reports/RoadPatrolReportService.php +++ b/app/Services/Reports/RoadPatrolReportService.php @@ -118,7 +118,7 @@ class RoadPatrolReportService ); return [ - 'activities' => $activities, + 'data' => $activities, 'fromDate' => $fromDate, 'toDate' => $toDate ]; @@ -181,7 +181,7 @@ class RoadPatrolReportService ); return [ - 'activities' => $activities, + 'data' => $activities, 'fromDate' => $fromDate, 'toDate' => $toDate ]; From 943b2dbb93ee50236e19895499aae0ef2542e63b Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Wed, 5 Feb 2025 13:36:40 +0330 Subject: [PATCH 23/43] refactor blades --- .../CountryActivityPerItemReport.php | 14 +-- .../OperatorCartableReport.php | 3 +- .../ProvinceActivityPerItemReport.php | 14 +-- .../SupervisorCartableReport.php | 3 +- .../Reports/RoadItemsReportController.php | 12 +- .../CountryActivityPerItem.blade.php | 113 +++++++----------- .../OperatorCartableReport.blade.php | 55 ++++++--- .../ProvinceActivityPerItem.blade.php | 110 +++++++---------- .../SupervisorCartableReport.blade.php | 36 +++--- 9 files changed, 170 insertions(+), 190 deletions(-) diff --git a/app/Exports/V3/RoadItemsProjects/CountryActivityPerItemReport.php b/app/Exports/V3/RoadItemsProjects/CountryActivityPerItemReport.php index d85f83f3..60261c20 100644 --- a/app/Exports/V3/RoadItemsProjects/CountryActivityPerItemReport.php +++ b/app/Exports/V3/RoadItemsProjects/CountryActivityPerItemReport.php @@ -17,18 +17,18 @@ use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; class CountryActivityPerItemReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings { - public function __construct(private ?array $activities){} + public function __construct(private ?array $data){} public function view(): View { - $activities = $this->activities; - $fromDate = $activities['fromDate'] ?? '2021-03-21 00:00:00'; - $toDate = $activities['toDate'] ?? \Carbon\Carbon::now(); + $data = $this->data; return view('v3.Reports.RoadItems.CountryActivityPerItem', [ - 'activities' => $activities['data'], - 'fromDate' => $fromDate, - 'toDate' => $toDate + 'data' => $data['activities']['data'], + 'provinces' => $data['provinces'], + 'items' => $data['items'], + 'fromDate' => $data['activities']['fromDate'], + 'toDate' => $data['activities']['toDate'] ]); } diff --git a/app/Exports/V3/RoadItemsProjects/OperatorCartableReport.php b/app/Exports/V3/RoadItemsProjects/OperatorCartableReport.php index 43583ba5..ea736dd2 100644 --- a/app/Exports/V3/RoadItemsProjects/OperatorCartableReport.php +++ b/app/Exports/V3/RoadItemsProjects/OperatorCartableReport.php @@ -6,6 +6,7 @@ use App\Models\Province; use App\Models\RoadItemsProject; use Carbon\Carbon; use Illuminate\Contracts\View\View; +use Illuminate\Database\Eloquent\Collection; use Illuminate\Support\Facades\DB; use Maatwebsite\Excel\Concerns\FromView; use Maatwebsite\Excel\Concerns\ShouldAutoSize; @@ -17,7 +18,7 @@ use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; class OperatorCartableReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings { - public function __construct(private ?string $data){} + public function __construct(private ?Collection $data){} public function view(): View { diff --git a/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerItemReport.php b/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerItemReport.php index 15b1a1c0..9b7b33d0 100644 --- a/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerItemReport.php +++ b/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerItemReport.php @@ -17,18 +17,18 @@ use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; class ProvinceActivityPerItemReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings { - public function __construct(private ?array $activities){} + public function __construct(private ?array $data){} public function view(): View { - $activities = $this->activities; - $fromDate = $activities['fromDate'] ?? '2021-03-21 00:00:00'; - $toDate = $activities['toDate'] ?? \Carbon\Carbon::now(); + $data = $this->data; return view('v3.Reports.RoadItems.ProvinceActivityPerItem', [ - 'activitis' => $activities['data'], - 'fromDate' => $fromDate, - 'toDate' => $toDate + 'data' => $data['activities']['data'], + 'edarateShahri' => $data['edarateShahri'], + 'items' => $data['items'], + 'fromDate' => $data['activities']['fromDate'], + 'toDate' => $data['activities']['toDate'] ]); } diff --git a/app/Exports/V3/RoadItemsProjects/SupervisorCartableReport.php b/app/Exports/V3/RoadItemsProjects/SupervisorCartableReport.php index 4aa03957..d559cf50 100644 --- a/app/Exports/V3/RoadItemsProjects/SupervisorCartableReport.php +++ b/app/Exports/V3/RoadItemsProjects/SupervisorCartableReport.php @@ -6,6 +6,7 @@ use App\Models\Province; use App\Models\RoadItemsProject; use Carbon\Carbon; use Illuminate\Contracts\View\View; +use Illuminate\Database\Eloquent\Collection; use Illuminate\Support\Facades\DB; use Maatwebsite\Excel\Concerns\FromView; use Maatwebsite\Excel\Concerns\ShouldAutoSize; @@ -17,7 +18,7 @@ use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; class SupervisorCartableReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings { - public function __construct(private ?string $data){} + public function __construct(private ?Collection $data){} public function view(): View { diff --git a/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php index 3196ff73..11174fac 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php @@ -119,7 +119,11 @@ class RoadItemsReportController extends Controller auth()->user()->addActivityComplete(1034); $name = 'گزارش کشوری از فعالیت روزانه و جاری - جدول 1 ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; $activities = $roadItemReportService->countryActivityPerItem($request); - return Excel::download(new CountryActivityPerItemReport($activities), $name); + return Excel::download(new CountryActivityPerItemReport([ + 'activities' => $activities, + 'provinces' => Province::all(['id', 'name_fa']), + 'items' => InfoItem::query()->distinct()->get(['item', 'item_str']), + ]), $name); } public function provinceActivityExcelPerItem(Request $request, RoadItemReportService $roadItemReportService): BinaryFileResponse @@ -127,7 +131,11 @@ class RoadItemsReportController extends Controller auth()->user()->addActivityComplete(1034); $name = 'گزارش استانی از فعالیت روزانه و جاری - جدول 1 ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; $activities = $roadItemReportService->provinceActivityPerItem($request); - return Excel::download(new ProvinceActivityPerItemReport($activities), $name); + return Excel::download(new ProvinceActivityPerItemReport([ + 'activities' => $activities, + 'edarateShahri' => EdarateShahri::query()->where('province_id', '=', $request->province_id)->get(['id', 'name_fa']), + 'items' => InfoItem::query()->distinct()->get(['item', 'item_str']), + ]), $name); } public function countryActivityExcelPerSubItem(Request $request, RoadItemReportService $roadItemReportService): BinaryFileResponse diff --git a/resources/views/v3/Reports/RoadItems/CountryActivityPerItem.blade.php b/resources/views/v3/Reports/RoadItems/CountryActivityPerItem.blade.php index cc387f3d..8185757e 100644 --- a/resources/views/v3/Reports/RoadItems/CountryActivityPerItem.blade.php +++ b/resources/views/v3/Reports/RoadItems/CountryActivityPerItem.blade.php @@ -14,19 +14,19 @@ - - - - - - + + + - - - - - - - - - - - - - - - - + @foreach($items as $item) + + @endforeach - - - - - - - - - - - - - - - - - - - - + @php + // محاسبه مجموع مقدار s برای کل کشور + $totalForCountry = collect($data)->where('p', -1)->sum('s'); - @foreach ($provinceCount as $activity) + // محاسبه مجموع مقدار s برای هر آیتم در کل کشور + $itemTotalsForCountry = []; + foreach ($items as $item) { + $itemTotalsForCountry[$item['item']] = collect($data)->where('p', -1)->where('i', $item['item'])->sum('s'); + } + @endphp + + {{-- ردیف کل کشور --}} + + + + @foreach($items as $item) + + @endforeach + + + {{-- ردیف‌های مربوط به هر استان --}} + @foreach($provinces as $province) + @php + // محاسبه مجموع مقدار s برای این استان + $totalForProvince = collect($data)->where('p', $province['id'])->sum('s'); + + // محاسبه مجموع مقدار s برای هر آیتم در این استان + $itemTotalsForProvince = []; + foreach ($items as $item) { + $itemTotalsForProvince[$item['item']] = collect($data)->where('p', $province['id'])->where('i', $item['item'])->sum('s'); + } + @endphp - - - - - - - - - - - - - - - - - - + + + @foreach($items as $item) + + @endforeach @endforeach - -
تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }}
گزارش فعالیت روزانه و جاری راهداری از تاریخ {{ verta($fromDate)->format('Y/n/j') }} @@ -38,83 +38,60 @@
اداره کل - فعالیت های - جاری و روزانه راهداری - کلادارهمجموعایتم های فعالیت روزانه
مرمت رویهپاکسازیعلائمحفاظروشناییخط کشیرنگ آمیزیشستشوایمن سازیحریمپلتونل و گالریعملیات زمستانیماشین آلاتراهدارخانهموارد اضطراری{{ $item['item_str'] }}
کل کشور{{ $countryCount['totalMarematRooyeCount'] }}{{ $countryCount['totalPaksaziCount'] }}{{ $countryCount['totalAlaemCount'] }}{{ $countryCount['totalHefazCount'] }}{{ $countryCount['totalRoshanayiCount'] }}{{ $countryCount['totalKhatkeshiCount'] }}{{ $countryCount['totalRangamiziCount'] }}{{ $countryCount['totalWashingCount'] }}{{ $countryCount['totalImenSaziCount'] }}{{ $countryCount['totalHarimCount'] }}{{ $countryCount['totalPolCount'] }}{{ $countryCount['totalToonelCount'] }}{{ $countryCount['totalAmaliatZemestaniCount'] }}{{ $countryCount['totalMashinAlatCount'] }}{{ $countryCount['totalTollhouseCount'] }}{{ $countryCount['totalEmergencyCount'] }}{{ $countryCount['totalCountryCount'] }}
کل کشور{{ $totalForCountry }}{{ $itemTotalsForCountry[$item['item']] ?? '-' }}
{{ $activity->province_fa }}{{ $activity->MarematRooyeCount }}{{ $activity->PaksaziCount }}{{ $activity->AlaemCount }}{{ $activity->HefazCount }}{{ $activity->RoshanayiCount }}{{ $activity->KhatkeshiCount }}{{ $activity->RangamiziCount }}{{ $activity->WashingCount }}{{ $activity->ImenSaziCount }}{{ $activity->HarimCount }}{{ $activity->PolCount }}{{ $activity->ToonelCount }}{{ $activity->AmaliatZemestaniCount }}{{ $activity->MashinAlatCount }}{{ $activity->TollhouseCount }}{{ $activity->EmergencyCount }}{{ $activity->TotalProvinceCount }}{{ $province['name_fa'] }}{{ $totalForProvince }}{{ $itemTotalsForProvince[$item['item']] ?? '-' }}
- - diff --git a/resources/views/v3/Reports/RoadItems/OperatorCartableReport.blade.php b/resources/views/v3/Reports/RoadItems/OperatorCartableReport.blade.php index a020d289..8c45948a 100644 --- a/resources/views/v3/Reports/RoadItems/OperatorCartableReport.blade.php +++ b/resources/views/v3/Reports/RoadItems/OperatorCartableReport.blade.php @@ -21,56 +21,64 @@ - - - + + + + + اقدام انجام شده - + + - + تاریخ ثبت + @@ -81,15 +89,24 @@ @foreach ($data as $item) + + + + + + + - - - diff --git a/resources/views/v3/Reports/RoadItems/ProvinceActivityPerItem.blade.php b/resources/views/v3/Reports/RoadItems/ProvinceActivityPerItem.blade.php index 55a708ee..2a10a5f4 100644 --- a/resources/views/v3/Reports/RoadItems/ProvinceActivityPerItem.blade.php +++ b/resources/views/v3/Reports/RoadItems/ProvinceActivityPerItem.blade.php @@ -14,19 +14,19 @@
تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }}
- گزارش کارتابل عملیات فعالیت های روزانه و جاری از تاریخ - {{ verta($fromDate)->format('Y/n/j') }} - تا - تاریخ - {{ verta($toDate)->format('Y/n/j') }} - + گزارش کارتابل عملیات فعالیت های روزانه و جاری
کد یکتا + استان + ادارهآیتم فعالیت - موضوع مشاهده شده مقدار + کد خودرو(ها) + کد راهدار(ها) نقطه شروع نقطه پایان - تاریخ ثبت تاریخ فعالیت - وضعیت + وضعیت نظارت توضیحات ناظر
{{ $item['id'] ?? '-' }}{{ $item['province_fa'] ?? '-' }}{{ $item['edarat_name'] ?? '-' }}{{ $item['item_fa'] ?? '-' }} {{ $item['sub_item_fa'] ?? '-' }} - {{ $item['sub_item_data'] ? ($item['unit_fa'] ? $item['sub_item_data'] . '(' . $item['unit_fa'] . ')' : $item['sub_item_data'] . '(-)') : '-' }} + {{ $item['sub_item_data'] ? ($item['unit_fa'] ? $item['sub_item_data'] . '(' . $item['unit_fa'] . ')' : $item['sub_item_data'] . '(-)') : '-' }} + {{ $item['cmmsMachines'] != null ? $item['cmmsMachines']->pluck('machine_code')->implode(', ') : '-' }}{{ $item['rahdaran'] != null ? $item['rahdaran']->pluck('code')->implode(', ') : '-' }} + {{ isset($item['start_lat']) && isset($item['start_lng']) ? $item['start_lat'] . ' ' . $item['start_lng'] : '-' }} + + {{ isset($item['end_lat']) && isset($item['end_lng']) ? $item['end_lat'] . ' ' . $item['end_lng'] : '-' }} {{ isset($item['start_lat']) && isset($item['start_lng']) ? $item['start_lat'] . ' ' . $item['start_lng'] : '-' }}{{ isset($item['end_lat']) && isset($item['end_lng']) ? $item['end_lat'] . ' ' . $item['end_lng'] : '-' }}{{ $item['created_at'] ? verta($item['created_at'])->format('Y/n/j H:i:s') : '-' }} {{ $item['activity_date_time'] ? verta($item['activity_date_time'])->format('Y/n/j H:i:s') : '-' }} + {{ $item['created_at'] ? verta($item['created_at'])->format('Y/n/j H:i:s') : '-' }} {{ $item['status_fa'] ?? '-' }} {{ $item['supervisor_description'] ?? '-' }}
- - - - - - + + + - - - - - - - - - - - - - - - - + @foreach($items as $item) + + @endforeach - - - - - - - - - - - - - - - - - - - - + @php + $totalForProvince = collect($data)->where('c', -1)->sum('s'); - @foreach ($cityCount as $activity) + $itemTotalsForProvince = []; + foreach ($items as $item) { + $itemTotalsForProvince[$item['item']] = collect($data)->where('c', -1)->where('i', $item['item'])->sum('s'); + } + @endphp + + + + + @foreach($items as $item) + + @endforeach + + + {{-- ردیف‌های مربوط به هر استان --}} + @foreach($edarateShahri as $edareShahri) + @php + // محاسبه مجموع مقدار s برای این استان + $totalForProvince = collect($data)->where('p', $edareShahri['id'])->sum('s'); + + // محاسبه مجموع مقدار s برای هر آیتم در این استان + $itemTotalsForProvince = []; + foreach ($items as $item) { + $itemTotalsForProvince[$item['item']] = collect($data)->where('p', $edareShahri['id'])->where('i', $item['item'])->sum('s'); + } + @endphp - - - - - - - - - - - - - - - - - - + + + @foreach($items as $item) + + @endforeach @endforeach - -
تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }}
گزارش فعالیت روزانه و جاری راهداری از تاریخ {{ verta($fromDate)->format('Y/n/j') }} @@ -38,83 +38,57 @@
اداره کل - فعالیت های - جاری و روزانه راهداری - کلادارهمجموعایتم های فعالیت روزانه
مرمت رویهپاکسازیعلائمحفاظروشناییخط کشیرنگ آمیزیشستشوایمن سازیحریمپلتونل و گالریعملیات زمستانیماشین آلاتراهدارخانهموارد اضطراری{{ $item['item_str'] }}
کل استان{{ $provinceCount['totalMarematRooyeCount'] }}{{ $provinceCount['totalPaksaziCount'] }}{{ $provinceCount['totalAlaemCount'] }}{{ $provinceCount['totalHefazCount'] }}{{ $provinceCount['totalRoshanayiCount'] }}{{ $provinceCount['totalKhatkeshiCount'] }}{{ $provinceCount['totalRangamiziCount'] }}{{ $provinceCount['totalWashingCount'] }}{{ $provinceCount['totalImenSaziCount'] }}{{ $provinceCount['totalHarimCount'] }}{{ $provinceCount['totalPolCount'] }}{{ $provinceCount['totalToonelCount'] }}{{ $provinceCount['totalAmaliatZemestaniCount'] }}{{ $provinceCount['totalMashinAlatCount'] }}{{ $provinceCount['totalTollhouseCount'] }}{{ $provinceCount['totalEmergencyCount'] }}{{ $provinceCount['TotalProvinceCount'] }}
کل استان{{ $totalForProvince }}{{ $itemTotalsForProvince[$item['item']] ?? '-' }}
{{ $activity->edarat_name }}{{ $activity->MarematRooyeCount }}{{ $activity->PaksaziCount }}{{ $activity->AlaemCount }}{{ $activity->HefazCount }}{{ $activity->RoshanayiCount }}{{ $activity->KhatkeshiCount }}{{ $activity->RangamiziCount }}{{ $activity->WashingCount }}{{ $activity->ImenSaziCount }}{{ $activity->HarimCount }}{{ $activity->PolCount }}{{ $activity->ToonelCount }}{{ $activity->AmaliatZemestaniCount }}{{ $activity->MashinAlatCount }}{{ $activity->TollhouseCount }}{{ $activity->EmergencyCount }}{{ $activity->TotalCityCount }}{{ $edareShahri['name_fa'] }}{{ $totalForProvince }}{{ $itemTotalsForProvince[$item['item']] ?? '-' }}
- - diff --git a/resources/views/v3/Reports/RoadItems/SupervisorCartableReport.blade.php b/resources/views/v3/Reports/RoadItems/SupervisorCartableReport.blade.php index 4822186c..c92fc3ab 100644 --- a/resources/views/v3/Reports/RoadItems/SupervisorCartableReport.blade.php +++ b/resources/views/v3/Reports/RoadItems/SupervisorCartableReport.blade.php @@ -21,24 +21,20 @@ - - - @@ -58,26 +54,31 @@ فعالیت + اقدام انجام شده - + + - + تاریخ ثبت + @@ -96,18 +97,19 @@ + + - - + @endforeach From ed832dab70a9c7adb849e401e7a93a930581d273 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Wed, 5 Feb 2025 14:08:23 +0330 Subject: [PATCH 24/43] reform the blade files --- .../CountryActivityPerSubItemReport.php | 12 ++++++----- .../ProvinceActivityPerSubItemReport.php | 12 ++++++----- .../Reports/RoadItemsReportController.php | 20 +++++++++++++++++-- .../CountryActivityPerSubItem.blade.php | 20 +++++++++---------- .../ProvinceActivityPerItem.blade.php | 4 ++-- .../ProvinceActivityPerSubItem.blade.php | 16 +++++++-------- 6 files changed, 51 insertions(+), 33 deletions(-) diff --git a/app/Exports/V3/RoadItemsProjects/CountryActivityPerSubItemReport.php b/app/Exports/V3/RoadItemsProjects/CountryActivityPerSubItemReport.php index da5497e2..7e383bdf 100644 --- a/app/Exports/V3/RoadItemsProjects/CountryActivityPerSubItemReport.php +++ b/app/Exports/V3/RoadItemsProjects/CountryActivityPerSubItemReport.php @@ -13,16 +13,18 @@ use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; class CountryActivityPerSubItemReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings { - public function __construct(private array $activities){} + public function __construct(private array $data){} public function view(): View { - $activities = $this->activities; + $data = $this->data; return view('v3.Reports.RoadItems.CountryActivityPerSubItem', [ - 'activities' => $activities["data"], - 'fromDate' => $activities["fromDate"], - 'toDate' => $activities["toDate"], + 'data' => $data['activities']['data'], + 'provinces' => $data['provinces'], + 'subItems' => $data['subItems'], + 'fromDate' => $data['activities']['fromDate'], + 'toDate' => $data['activities']['toDate'] ]); } diff --git a/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerSubItemReport.php b/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerSubItemReport.php index cf558cab..32faa0de 100644 --- a/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerSubItemReport.php +++ b/app/Exports/V3/RoadItemsProjects/ProvinceActivityPerSubItemReport.php @@ -18,16 +18,18 @@ use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; class ProvinceActivityPerSubItemReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings { - public function __construct(private array $activities){} + public function __construct(private array $data){} public function view(): View { - $activities = $this->activities; + $data = $this->data; return view('v3.Reports.RoadItems.ProvinceActivityPerSubItem', [ - 'activities' => $activities["data"], - 'fromDate' => $activities["fromDate"], - 'toDate' => $activities["toDate"], + 'data' => $data['activities']['data'], + 'edarateShahri' => $data['edarateShahri'], + 'subItems' => $data['subItems'], + 'fromDate' => $data['activities']['fromDate'], + 'toDate' => $data['activities']['toDate'] ]); } diff --git a/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php index 11174fac..81a8425d 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php @@ -143,7 +143,15 @@ class RoadItemsReportController extends Controller auth()->user()->addActivityComplete(1034); $name = "گزارش کشوری از فعالیت روزانه و جاری - جدول 2 " . verta()->now()->format('Y-m-d H-i') . '.xlsx'; $activities = $roadItemReportService->countryActivityPerSubItem($request); - return Excel::download(new CountryActivityPerSubItemReport($activities), $name); + $subItems = InfoItem::query() + ->where('item', $request->item) + ->get(['id', 'item', 'item_str', 'sub_item_str', 'sub_item_unit', 'sub_item']); + + return Excel::download(new CountryActivityPerSubItemReport([ + 'activities' => $activities, + 'provinces' => Province::all(['id', 'name_fa']), + 'subItems' => $subItems + ]), $name); } public function provinceActivityExcelPerSubItem(Request $request, RoadItemReportService $roadItemReportService): BinaryFileResponse @@ -151,6 +159,14 @@ class RoadItemsReportController extends Controller auth()->user()->addActivityComplete(1034); $activities = $roadItemReportService->provinceActivityPerSubItem($request); $name = "گزارش استانی از فعالیت روزانه و جاری - جدول 2 " . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - return Excel::download(new ProvinceActivityPerSubItemReport($activities), $name); + $subItems = InfoItem::query() + ->where('item', $request->item) + ->get(['id', 'item', 'item_str', 'sub_item_str', 'sub_item_unit', 'sub_item']); + + return Excel::download(new ProvinceActivityPerSubItemReport([ + 'activities' => $activities, + 'subItems' => $subItems, + 'edarateShahri' => EdarateShahri::query()->where('province_id', '=', $request->province_id)->get(['id', 'name_fa']), + ]), $name); } } diff --git a/resources/views/v3/Reports/RoadItems/CountryActivityPerSubItem.blade.php b/resources/views/v3/Reports/RoadItems/CountryActivityPerSubItem.blade.php index 62d19ec5..00c574d0 100644 --- a/resources/views/v3/Reports/RoadItems/CountryActivityPerSubItem.blade.php +++ b/resources/views/v3/Reports/RoadItems/CountryActivityPerSubItem.blade.php @@ -37,38 +37,36 @@ - @foreach($details as $detail) - + @foreach($subItems as $subItem) + @endforeach - @foreach($details as $detail) + @foreach($subItems as $subItem) - + @endforeach - @foreach ($activities as $activity) + @foreach ($provinces as $province) - + - @foreach ($details as $index => $detail) + @foreach ($subItems as $subItem) @endforeach @endforeach
تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }}
- گزارش کارتابل ارزیابی فعالیت های روزانه و جاری از تاریخ - {{ verta($fromDate)->format('Y/n/j') }} - تا - تاریخ - {{ verta($toDate)->format('Y/n/j') }} + گزارش کارتابل ارزیابی فعالیت های روزانه و جاری
- موضوع مشاهده شده مقدار + کد خودرو(ها) + کد راهدار(ها) نقطه شروع نقطه پایان - تاریخ ثبت تاریخ فعالیت - وضعیت + وضعیت نظارت توضیحات ناظر {{ $item['sub_item_data'] ? ($item['unit_fa'] ? $item['sub_item_data'] . '(' . $item['unit_fa'] . ')' : $item['sub_item_data'] . '(-)') : '-' }} {{ $item['cmmsMachines'] != null ? $item['cmmsMachines']->pluck('machine_code')->implode(', ') : '-' }}{{ $item['rahdaran'] != null ? $item['rahdaran']->pluck('code')->implode(', ') : '-' }} {{ isset($item['start_lat']) && isset($item['start_lng']) ? $item['start_lat'] . ' ' . $item['start_lng'] : '-' }} {{ isset($item['end_lat']) && isset($item['end_lng']) ? $item['end_lat'] . ' ' . $item['end_lng'] : '-' }} {{ $item['created_at'] ? verta($item['created_at'])->format('Y/n/j H:i:s') : '-' }} {{ $item['activity_date_time'] ? verta($item['activity_date_time'])->format('Y/n/j H:i:s') : '-' }} + {{ $item['created_at'] ? verta($item['created_at'])->format('Y/n/j H:i:s') : '-' }} {{ $item['status_fa'] ?? '-' }} - {{ $item['supervisor_description'] ?? '-' }}{{ $item['supervisor_description'] ?? '-' }}
{{ $detail->sub_item_str }}{{ $subItem->sub_item_str }}
تعدادمجموع ({{ $detail->sub_item_unit }})مجموع ({{ $subItem->sub_item_unit }})
{{ $activity->province_fa }}{{ $province['name_fa'] }} - {{ $activity->{'Count_' . ($index)} ?? '-' }} + {{ $province->{'Count_' . ($index)} ?? '-' }} - {{ isset($activity->{'Sum_' . ($index)}) ? round($activity->{'Sum_' . ($index)}, 1) : '-' }} + {{ isset($province->{'Sum_' . ($index)}) ? round($province->{'Sum_' . ($index)}, 1) : '-' }}
- - \ No newline at end of file diff --git a/resources/views/v3/Reports/RoadItems/ProvinceActivityPerItem.blade.php b/resources/views/v3/Reports/RoadItems/ProvinceActivityPerItem.blade.php index 2a10a5f4..5b621aa5 100644 --- a/resources/views/v3/Reports/RoadItems/ProvinceActivityPerItem.blade.php +++ b/resources/views/v3/Reports/RoadItems/ProvinceActivityPerItem.blade.php @@ -72,12 +72,12 @@ @foreach($edarateShahri as $edareShahri) @php // محاسبه مجموع مقدار s برای این استان - $totalForProvince = collect($data)->where('p', $edareShahri['id'])->sum('s'); + $totalForProvince = collect($data)->where('c', $edareShahri['id'])->sum('s'); // محاسبه مجموع مقدار s برای هر آیتم در این استان $itemTotalsForProvince = []; foreach ($items as $item) { - $itemTotalsForProvince[$item['item']] = collect($data)->where('p', $edareShahri['id'])->where('i', $item['item'])->sum('s'); + $itemTotalsForProvince[$item['item']] = collect($data)->where('c', $edareShahri['id'])->where('i', $item['item'])->sum('s'); } @endphp diff --git a/resources/views/v3/Reports/RoadItems/ProvinceActivityPerSubItem.blade.php b/resources/views/v3/Reports/RoadItems/ProvinceActivityPerSubItem.blade.php index 9ff1b3cf..656bf81c 100644 --- a/resources/views/v3/Reports/RoadItems/ProvinceActivityPerSubItem.blade.php +++ b/resources/views/v3/Reports/RoadItems/ProvinceActivityPerSubItem.blade.php @@ -37,31 +37,31 @@ - @foreach($details as $detail) - {{ $detail->sub_item_str }} + @foreach($subItems as $subItem) + {{ $subItem->sub_item_str }} @endforeach - @foreach($details as $detail) + @foreach($subItems as $subItem) تعداد - مجموع ({{ $detail->sub_item_unit }}) + مجموع ({{ $subItem->sub_item_unit }}) @endforeach - @foreach ($activities as $activity) + @foreach ($edarateShahri as $edareShahri) {{ $activity->city_fa }} - @foreach ($details as $index => $detail) + @foreach ($subItems as $subItem) - {{ $activity->{'Count_' . ($index)} ?? '-' }} + {{ $edareShahri->{'Count_' . ($subItem)} ?? '-' }} - {{ isset($activity->{'Sum_' . ($index)}) ? round($activity->{'Sum_' . ($index)}, 1) : '-' }} + {{ isset($edareShahri->{'Sum_' . ($subItem)}) ? round($edareShahri->{'Sum_' . ($subItem)}, 1) : '-' }} @endforeach From 88c24aa4f87ad0795349644d78cf75f26ca9760c Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Wed, 5 Feb 2025 15:24:44 +0330 Subject: [PATCH 25/43] province blade --- .../CountryActivityPerSubItem.blade.php | 46 +++++++++++++---- .../ProvinceActivityPerSubItem.blade.php | 50 +++++++++++++------ 2 files changed, 71 insertions(+), 25 deletions(-) diff --git a/resources/views/v3/Reports/RoadItems/CountryActivityPerSubItem.blade.php b/resources/views/v3/Reports/RoadItems/CountryActivityPerSubItem.blade.php index 00c574d0..7f669bca 100644 --- a/resources/views/v3/Reports/RoadItems/CountryActivityPerSubItem.blade.php +++ b/resources/views/v3/Reports/RoadItems/CountryActivityPerSubItem.blade.php @@ -28,7 +28,7 @@ تا تاریخ {{verta($toDate)->format('Y/n/j')}} - > + @@ -52,17 +52,41 @@ - @foreach ($provinces as $province) - - {{ $province['name_fa'] }} + @php + // محاسبه مقدار c و s برای هر ساب‌آیتم در کل کشور + $countTotalsForCountry = []; + $sumTotalsForCountry = []; - @foreach ($subItems as $subItem) - - {{ $province->{'Count_' . ($index)} ?? '-' }} - - - {{ isset($province->{'Sum_' . ($index)}) ? round($province->{'Sum_' . ($index)}, 1) : '-' }} - + foreach ($subItems as $subItem) { + $countTotalsForCountry[$subItem['sub_item']] = collect($data)->where('p', -1)->where('t', $subItem['sub_item'])->sum('c'); + $sumTotalsForCountry[$subItem['sub_item']] = collect($data)->where('p', -1)->where('t', $subItem['sub_item'])->sum('s'); + } + @endphp + + {{-- ردیف کل کشور --}} + + کل کشور + @foreach($subItems as $subItem) + {{ $countTotalsForCountry[$subItem['sub_item']] ?? '-' }} + {{ $sumTotalsForCountry[$subItem['sub_item']] ?? '-' }} + @endforeach + + + {{-- ردیف‌های مربوط به هر استان --}} + @foreach($provinces as $province) + @php + $countTotalsForProvince = []; + $sumTotalsForProvince = []; + foreach ($subItems as $subItem) { + $countTotalsForProvince[$subItem['sub_item']] = collect($data)->where('p', $province['id'])->where('t', $subItem['sub_item'])->sum('c'); + $sumTotalsForProvince[$subItem['sub_item']] = collect($data)->where('p', $province['id'])->where('t', $subItem['sub_item'])->sum('s'); + } + @endphp + + {{ $province['name_fa'] }} + @foreach($subItems as $subItem) + {{ $countTotalsForProvince[$subItem['sub_item']] ?? '-' }} + {{ $sumTotalsForProvince[$subItem['sub_item']] ?? '-' }} @endforeach @endforeach diff --git a/resources/views/v3/Reports/RoadItems/ProvinceActivityPerSubItem.blade.php b/resources/views/v3/Reports/RoadItems/ProvinceActivityPerSubItem.blade.php index 656bf81c..2b552d68 100644 --- a/resources/views/v3/Reports/RoadItems/ProvinceActivityPerSubItem.blade.php +++ b/resources/views/v3/Reports/RoadItems/ProvinceActivityPerSubItem.blade.php @@ -28,11 +28,11 @@ تا تاریخ {{verta($toDate)->format('Y/n/j')}} - > + - اداره + اداره کل فعالیت های انجام شده @@ -52,23 +52,45 @@ - @foreach ($edarateShahri as $edareShahri) - - {{ $activity->city_fa }} + @php + // محاسبه مقدار c و s برای هر ساب‌آیتم در کل کشور + $countTotalsForProvince = []; + $sumTotalsForProvince = []; - @foreach ($subItems as $subItem) - - {{ $edareShahri->{'Count_' . ($subItem)} ?? '-' }} - - - {{ isset($edareShahri->{'Sum_' . ($subItem)}) ? round($edareShahri->{'Sum_' . ($subItem)}, 1) : '-' }} - + foreach ($subItems as $subItem) { + $countTotalsForProvince[$subItem['sub_item']] = collect($data)->where('ci', -1)->where('t', $subItem['sub_item'])->sum('c'); + $sumTotalsForProvince[$subItem['sub_item']] = collect($data)->where('ci', -1)->where('t', $subItem['sub_item'])->sum('s'); + } + @endphp + + {{-- ردیف کل کشور --}} + + کل کشور + @foreach($subItems as $subItem) + {{ $countTotalsForProvince[$subItem['sub_item']] ?? '-' }} + {{ $sumTotalsForProvince[$subItem['sub_item']] ?? '-' }} + @endforeach + + + {{-- ردیف‌های مربوط به هر استان --}} + @foreach($edarateShahri as $edareShahri) + @php + $countTotalsForProvince = []; + $sumTotalsForProvince = []; + foreach ($subItems as $subItem) { + $countTotalsForProvince[$subItem['sub_item']] = collect($data)->where('ci', $edareShahri['id'])->where('t', $subItem['sub_item'])->sum('c'); + $sumTotalsForProvince[$subItem['sub_item']] = collect($data)->where('ci', $edareShahri['id'])->where('t', $subItem['sub_item'])->sum('s'); + } + @endphp + + {{ $edareShahri['name_fa'] }} + @foreach($subItems as $subItem) + {{ $countTotalsForProvince[$subItem['sub_item']] ?? '-' }} + {{ $sumTotalsForProvince[$subItem['sub_item']] ?? '-' }} @endforeach @endforeach - - \ No newline at end of file From 18cbf772616ae6a94b011a98c0d14e2b7f198d89 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sat, 8 Feb 2025 15:39:15 +0330 Subject: [PATCH 26/43] map reports --- .../Reports/RoadItemsReportController.php | 53 ++++++++++--------- .../Reports/RoadPatrolReportController.php | 5 ++ routes/v3.php | 3 +- 3 files changed, 36 insertions(+), 25 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php index 81a8425d..f5afc74a 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php @@ -90,30 +90,6 @@ class RoadItemsReportController extends Controller ]); } - public function map(Request $request): JsonResponse - { - $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(); - - $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($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') - ->select('road_items_projects.id as i', 'start_lat as l', 'start_lng as g', 'status') - ->get(); - - return $this->successResponse($data); - } - public function countryActivityExcelPerItem(Request $request, RoadItemReportService $roadItemReportService): BinaryFileResponse { auth()->user()->addActivityComplete(1034); @@ -169,4 +145,33 @@ class RoadItemsReportController extends Controller 'edarateShahri' => EdarateShahri::query()->where('province_id', '=', $request->province_id)->get(['id', 'name_fa']), ]), $name); } + + public function activitiesOnMap(Request $request): JsonResponse + { + $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(); + + $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($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') + ->select('road_items_projects.id as i', 'start_lat as l', 'start_lng as g', 'status') + ->get(); + + return $this->successResponse($data); + } + + public function showOnMap(RoadItemsProject $roadItemsProject): JsonResponse + { + return $this->successResponse($roadItemsProject->load(['files', 'rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])); + } } diff --git a/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php index d45967b6..9cb4ce6a 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php @@ -89,4 +89,9 @@ class RoadPatrolReportController extends Controller return $this->successResponse($data); } + + public function showOnMap(RoadPatrol $road_patrol) + { + return $this->successResponse($road_patrol->load(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])); + } } diff --git a/routes/v3.php b/routes/v3.php index 9557589f..cfba8f17 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -196,11 +196,12 @@ Route::prefix('road_item_reports') Route::get('/province_activity_per_sub_item', 'provinceActivityPerSubItem')->name('provinceActivityPerSubItem'); Route::get('/country_activity_per_item', 'countryActivityPerItem')->name('countryActivityPerItem'); Route::get('/province_activity_per_item', 'provinceActivityPerItem')->name('provinceActivityPerItem'); - Route::get('/map', 'map')->name('map'); Route::get('/country_activity_excel_per_item', 'countryActivityExcelPerItem')->name('countryActivityExcelPerItem'); Route::get('/province_activity_excel_per_item', 'provinceActivityExcelPerItem')->name('provinceActivityExcelPerItem'); Route::get('/country_activity_excel_per_sub_item', 'countryActivityExcelPerSubItem')->name('countryActivityExcelPerSubItem'); Route::get('/province_activity_excel_per_sub_item', 'provinceActivityExcelPerSubItem')->name('provinceActivityExcelPerSubItem'); + Route::get('/activities_on_map', 'activitiesOnMap')->name('activitiesOnMap'); + Route::get('/show_on_map', 'showOnMap')->name('showOnMap'); }); Route::prefix('road_patrol_reports') From c8ff302d090882829d8dade3c4d232358b8aafb8 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 9 Feb 2025 09:30:49 +0330 Subject: [PATCH 27/43] refactor the queries --- .../Reports/RoadItemsReportController.php | 13 +++++----- .../Reports/RoadPatrolReportController.php | 24 ++++++++----------- routes/v3.php | 3 ++- 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php index f5afc74a..70d15be0 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/RoadItemsReportController.php @@ -152,18 +152,19 @@ class RoadItemsReportController extends Controller $cityId = $request->city_id; $subId = $request->sub_id; $item = $request->item; + $status = $request->status; $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($item, fn($query) => $query->where('item', '=', $item)) - ->when(!is_null($request->status), fn($query) => $query->where('status', '=', $request->status)) - ->whereBetween('activity_date', [$dateFrom, $dateTo]) + ->when($provinceId, fn($query, $provinceId) => $query->where('road_items_projects.province_id', '=', $provinceId)) + ->when($cityId, fn($query, $cityId) => $query->where('road_items_projects.city_id', '=', $cityId)) + ->when($subId, fn($query, $subId) => $query->where('sub_items', 'like', '%' . $subId . '%')) + ->when($item, fn($query, $item) => $query->where('item', '=', $item)) + ->when(!is_null($status), fn($query, $status) => $query->where('status', '=', $status)) ->leftJoin('users', 'users.id', '=', 'road_items_projects.user_id') + ->whereBetween('road_items_projects.activity_date', [$dateFrom, $dateTo]) ->select('road_items_projects.id as i', 'start_lat as l', 'start_lng as g', 'status') ->get(); diff --git a/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php index 9cb4ce6a..fc6c30b5 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php @@ -71,27 +71,23 @@ class RoadPatrolReportController extends Controller public function activitiesOnMap(Request $request): JsonResponse { - $date_from = $request->date_from ? $request->date_from .' 00:00:00' : Date('Y-m-d') .' 00:00:00'; - $date_to = $request->date_to ? $request->date_to.' 23:59:59' : (new \DateTime('tomorrow'))->format('Y-m-d').' 23:59:59'; + $date_from = $request->date_from ? $request->date_from .' 00:00:00' : now()->startOfDay()->toDateTimeString(); + $date_to = $request->date_to ? $request->date_to.' 23:59:59' : now()->addDay()->startOfDay()->toDateTimeString(); + $provinceId = $request->province_id; + $edareId = $request->edare_id; - $data = RoadPatrol::query()->when($request->province_id, function ($query, $province) { - return $query->where('province_id', '=', $province); - }) - ->when($request->edare_id, function ($query, $edare_id) { - return $query->where('edare_id', '=', $edare_id); - }) - ->whereBetween('created_at', [ - $date_from, - $date_to, - ]) + $data = RoadPatrol::query() + ->when($provinceId, fn($query, $provinceId) => $query->where('province_id', '=', $provinceId)) + ->when($edareId, fn($query, $edareId) => $query->where('edare_id', '=', $edareId)) + ->whereBetween('created_at', [$date_from, $date_to]) ->select('id', 'start_lat', 'start_lon') ->get(); return $this->successResponse($data); } - public function showOnMap(RoadPatrol $road_patrol) + public function showOnMap(RoadPatrol $roadPatrol): JsonResponse { - return $this->successResponse($road_patrol->load(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])); + return $this->successResponse($roadPatrol->load(['rahdaran:id,name,code', 'cmmsMachines:id,machine_code,car_name,plak_number'])); } } diff --git a/routes/v3.php b/routes/v3.php index cfba8f17..a0fa2ed7 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -201,7 +201,7 @@ Route::prefix('road_item_reports') Route::get('/country_activity_excel_per_sub_item', 'countryActivityExcelPerSubItem')->name('countryActivityExcelPerSubItem'); Route::get('/province_activity_excel_per_sub_item', 'provinceActivityExcelPerSubItem')->name('provinceActivityExcelPerSubItem'); Route::get('/activities_on_map', 'activitiesOnMap')->name('activitiesOnMap'); - Route::get('/show_on_map', 'showOnMap')->name('showOnMap'); + Route::get('/show_on_map/{roadItemsProject}', 'showOnMap')->name('showOnMap'); }); Route::prefix('road_patrol_reports') @@ -213,4 +213,5 @@ Route::prefix('road_patrol_reports') Route::get('/country_activity_excel', 'countryActivityExcel')->name('countryActivityExcel'); Route::get('/province_activity_excel', 'provinceActivityExcel')->name('provinceActivityExcel'); Route::get('/activities_on_map', 'activitiesOnMap')->name('activitiesOnMap'); + Route::get('/show_on_map/{roadPatrol}', 'showOnMap')->name('showOnMap'); }); From 66ddeca81a3ba4f02cb96032ff6bdfbb4e5f7423 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 9 Feb 2025 10:34:47 +0330 Subject: [PATCH 28/43] create road patrol blades --- .../Dashboard/RoadPatrolProjectController.php | 3 - .../OperatorCartableReport.blade.php | 89 +++++++++++++++++++ .../SupervisorCartableReport.blade.php | 89 +++++++++++++++++++ 3 files changed, 178 insertions(+), 3 deletions(-) create mode 100644 resources/views/v3/Reports/RoadPatrols/OperatorCartableReport.blade.php create mode 100644 resources/views/v3/Reports/RoadPatrols/SupervisorCartableReport.blade.php diff --git a/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php b/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php index 565ca51e..44d58245 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php @@ -2,11 +2,8 @@ namespace App\Http\Controllers\V3\Dashboard; -use App\Exports\V2\RoadPatrol\OperatorCartableExport; -use App\Exports\V2\RoadPatrol\SupervisorCartableExport; use App\Exports\V3\RoadPatrols\OperatorCartableReport; use App\Exports\V3\RoadPatrols\SupervisorCartableReport; -use App\Facades\DataTable\DataTableFacade; use App\Facades\Sms\Sms; use App\Http\Controllers\Controller; use App\Http\Requests\V3\RoadPatrolProject\DeleteRequest; diff --git a/resources/views/v3/Reports/RoadPatrols/OperatorCartableReport.blade.php b/resources/views/v3/Reports/RoadPatrols/OperatorCartableReport.blade.php new file mode 100644 index 00000000..7cf3b4c3 --- /dev/null +++ b/resources/views/v3/Reports/RoadPatrols/OperatorCartableReport.blade.php @@ -0,0 +1,89 @@ + + + + + + + + گزارش گشت راهداری + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @foreach ($data as $item) + + + + + + + + + + @endforeach + +
+ تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }} +
+
+ گزارش کارتابل عملیات گشت راهداری +
کد + یکتا + استان + اداره + کد خودرو(ها) + کد راهدار(ها) + تاریخ شروع + تاریخ پایان + تاریخ ثبت + توضیحات مامور
{{ $item['id'] ?? '-' }}{{ $item['province_fa'] ?? '-' }}{{ $item['edarat_name'] ?? '-' }}{{ $item['cmmsMachines'] != null ? $item['cmmsMachines']->pluck('machine_code')->implode(', ') : '-' }}{{ $item['rahdaran'] != null ? $item['rahdaran']->pluck('code')->implode(', ') : '-' }}{{ $item['start_time'] ? verta($item['start_time'])->format('Y/n/j H:i:s') : '-' }} + {{ $item['end_time'] ? verta($item['end_time'])->format('Y/n/j H:i:s') : '-' }} + {{ $item['created_at'] ? verta($item['created_at'])->format('Y/n/j H:i:s') : '-' }}{{ $item['supervisor_description'] ?? '-' }}
+ + + diff --git a/resources/views/v3/Reports/RoadPatrols/SupervisorCartableReport.blade.php b/resources/views/v3/Reports/RoadPatrols/SupervisorCartableReport.blade.php new file mode 100644 index 00000000..e90648a2 --- /dev/null +++ b/resources/views/v3/Reports/RoadPatrols/SupervisorCartableReport.blade.php @@ -0,0 +1,89 @@ + + + + + + + + گزارش گشت راهداری + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @foreach ($data as $item) + + + + + + + + + + @endforeach + +
+ تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }} +
+
+ گزارش کارتابل ارزیابی گشت راهداری +
کد + یکتا + استان + اداره + کد خودرو(ها) + کد راهدار(ها) + تاریخ شروع + تاریخ پایان + تاریخ ثبت + توضیحات مامور
{{ $item['id'] ?? '-' }}{{ $item['province_fa'] ?? '-' }}{{ $item['edarat_name'] ?? '-' }}{{ $item['cmmsMachines'] != null ? $item['cmmsMachines']->pluck('machine_code')->implode(', ') : '-' }}{{ $item['rahdaran'] != null ? $item['rahdaran']->pluck('code')->implode(', ') : '-' }}{{ $item['start_time'] ? verta($item['start_time'])->format('Y/n/j H:i:s') : '-' }} + {{ $item['end_time'] ? verta($item['end_time'])->format('Y/n/j H:i:s') : '-' }} + {{ $item['created_at'] ? verta($item['created_at'])->format('Y/n/j H:i:s') : '-' }}{{ $item['supervisor_description'] ?? '-' }}
+ + + From ce3b7d5688ddf6078a671bd192bcde1232cbea4f Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 9 Feb 2025 10:49:12 +0330 Subject: [PATCH 29/43] refactor the blades --- app/Exports/V3/RoadPatrols/OperatorCartableReport.php | 3 ++- app/Exports/V3/RoadPatrols/SupervisorCartableReport.php | 3 ++- .../Controllers/V3/Dashboard/RoadPatrolProjectController.php | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/Exports/V3/RoadPatrols/OperatorCartableReport.php b/app/Exports/V3/RoadPatrols/OperatorCartableReport.php index d1279f13..0a72ef63 100644 --- a/app/Exports/V3/RoadPatrols/OperatorCartableReport.php +++ b/app/Exports/V3/RoadPatrols/OperatorCartableReport.php @@ -3,6 +3,7 @@ namespace App\Exports\V3\RoadPatrols; use Illuminate\Contracts\View\View; +use Illuminate\Database\Eloquent\Collection; use Maatwebsite\Excel\Concerns\FromView; use Maatwebsite\Excel\Concerns\ShouldAutoSize; use Maatwebsite\Excel\Concerns\WithDrawings; @@ -14,7 +15,7 @@ use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; class OperatorCartableReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings { - public function __construct(private array $data){} + public function __construct(private Collection $data){} public function view(): View { diff --git a/app/Exports/V3/RoadPatrols/SupervisorCartableReport.php b/app/Exports/V3/RoadPatrols/SupervisorCartableReport.php index 12f05996..6373978e 100644 --- a/app/Exports/V3/RoadPatrols/SupervisorCartableReport.php +++ b/app/Exports/V3/RoadPatrols/SupervisorCartableReport.php @@ -3,6 +3,7 @@ namespace App\Exports\V3\RoadPatrols; use Illuminate\Contracts\View\View; +use Illuminate\Database\Eloquent\Collection; use Maatwebsite\Excel\Concerns\FromView; use Maatwebsite\Excel\Concerns\ShouldAutoSize; use Maatwebsite\Excel\Concerns\WithDrawings; @@ -14,7 +15,7 @@ use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; class SupervisorCartableReport implements FromView, WithEvents, ShouldAutoSize, WithDrawings { - public function __construct(private array $data){} + public function __construct(private Collection $data){} public function view(): View { diff --git a/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php b/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php index 44d58245..ca3247ef 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php @@ -84,7 +84,7 @@ class RoadPatrolProjectController extends Controller { $name = 'گزارش از کارتابل ارزیابی گشت راهداری ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; $data = $roadPatrolReportService->supervisorCartableReport($request); - return Excel::download(new SupervisorCartableReport($data), $name); + return Excel::download(new SupervisorCartableReport($data['data']), $name); } public function operatorIndex(Request $request, RoadPatrolReportService $roadPatrolReportService): JsonResponse @@ -321,6 +321,6 @@ class RoadPatrolProjectController extends Controller { $name = 'گزارش از کارتابل عملیات گشت راهداری ' . verta()->now()->format('Y-m-d H:i') . '.xlsx'; $data = $roadPatrolReportService->operatorCartableReport($request); - return Excel::download(new OperatorCartableReport($data), $name); + return Excel::download(new OperatorCartableReport($data['data']), $name); } } From 95cd1e319e99044ef2a6063fe1e82616ad2036de Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 9 Feb 2025 11:34:06 +0330 Subject: [PATCH 30/43] fix the place of logo --- .../V3/RoadPatrols/OperatorCartableReport.php | 2 +- .../V3/RoadPatrols/SupervisorCartableReport.php | 2 +- .../RoadItems/OperatorCartableReport.blade.php | 2 +- .../RoadItems/SupervisorCartableReport.blade.php | 2 +- .../RoadPatrols/OperatorCartableReport.blade.php | 6 +++--- .../RoadPatrols/SupervisorCartableReport.blade.php | 12 ++++++------ 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/app/Exports/V3/RoadPatrols/OperatorCartableReport.php b/app/Exports/V3/RoadPatrols/OperatorCartableReport.php index 0a72ef63..769044e3 100644 --- a/app/Exports/V3/RoadPatrols/OperatorCartableReport.php +++ b/app/Exports/V3/RoadPatrols/OperatorCartableReport.php @@ -63,7 +63,7 @@ class OperatorCartableReport implements FromView, WithEvents, ShouldAutoSize, Wi $drawing2->setHeight(50); $drawing2->setOffsetX(5); $drawing2->setOffsetY(5); - $drawing2->setCoordinates('q1'); + $drawing2->setCoordinates('i1'); return [$drawing, $drawing2]; } } \ No newline at end of file diff --git a/app/Exports/V3/RoadPatrols/SupervisorCartableReport.php b/app/Exports/V3/RoadPatrols/SupervisorCartableReport.php index 6373978e..b4e67b7a 100644 --- a/app/Exports/V3/RoadPatrols/SupervisorCartableReport.php +++ b/app/Exports/V3/RoadPatrols/SupervisorCartableReport.php @@ -63,7 +63,7 @@ class SupervisorCartableReport implements FromView, WithEvents, ShouldAutoSize, $drawing2->setHeight(50); $drawing2->setOffsetX(5); $drawing2->setOffsetY(5); - $drawing2->setCoordinates('q1'); + $drawing2->setCoordinates('i1'); return [$drawing, $drawing2]; } } \ No newline at end of file diff --git a/resources/views/v3/Reports/RoadItems/OperatorCartableReport.blade.php b/resources/views/v3/Reports/RoadItems/OperatorCartableReport.blade.php index 8c45948a..558c8907 100644 --- a/resources/views/v3/Reports/RoadItems/OperatorCartableReport.blade.php +++ b/resources/views/v3/Reports/RoadItems/OperatorCartableReport.blade.php @@ -97,7 +97,7 @@ {{ $item['sub_item_data'] ? ($item['unit_fa'] ? $item['sub_item_data'] . '(' . $item['unit_fa'] . ')' : $item['sub_item_data'] . '(-)') : '-' }} - {{ $item['cmmsMachines'] != null ? $item['cmmsMachines']->pluck('machine_code')->implode(', ') : '-' }} + {{ $item['cmms_machines'] != null ? $item['cmms_machines']->pluck('machine_code')->implode(', ') : '-' }} {{ $item['rahdaran'] != null ? $item['rahdaran']->pluck('code')->implode(', ') : '-' }} {{ isset($item['start_lat']) && isset($item['start_lng']) ? $item['start_lat'] . ' ' . $item['start_lng'] : '-' }} diff --git a/resources/views/v3/Reports/RoadItems/SupervisorCartableReport.blade.php b/resources/views/v3/Reports/RoadItems/SupervisorCartableReport.blade.php index c92fc3ab..1dd0a9c8 100644 --- a/resources/views/v3/Reports/RoadItems/SupervisorCartableReport.blade.php +++ b/resources/views/v3/Reports/RoadItems/SupervisorCartableReport.blade.php @@ -97,7 +97,7 @@ {{ $item['sub_item_data'] ? ($item['unit_fa'] ? $item['sub_item_data'] . '(' . $item['unit_fa'] . ')' : $item['sub_item_data'] . '(-)') : '-' }} - {{ $item['cmmsMachines'] != null ? $item['cmmsMachines']->pluck('machine_code')->implode(', ') : '-' }} + {{ $item['cmms_machines'] != null ? $item['cmms_machines']->pluck('machine_code')->implode(', ') : '-' }} {{ $item['rahdaran'] != null ? $item['rahdaran']->pluck('code')->implode(', ') : '-' }} {{ isset($item['start_lat']) && isset($item['start_lng']) ? $item['start_lat'] . ' ' . $item['start_lng'] : '-' }} diff --git a/resources/views/v3/Reports/RoadPatrols/OperatorCartableReport.blade.php b/resources/views/v3/Reports/RoadPatrols/OperatorCartableReport.blade.php index 7cf3b4c3..c90cb1da 100644 --- a/resources/views/v3/Reports/RoadPatrols/OperatorCartableReport.blade.php +++ b/resources/views/v3/Reports/RoadPatrols/OperatorCartableReport.blade.php @@ -73,13 +73,13 @@ {{ $item['id'] ?? '-' }} {{ $item['province_fa'] ?? '-' }} - {{ $item['edarat_name'] ?? '-' }} - {{ $item['cmmsMachines'] != null ? $item['cmmsMachines']->pluck('machine_code')->implode(', ') : '-' }} + {{ $item['edare_name'] ?? '-' }} + {{ $item['cmms_machines'] != null ? $item['cmms_machines']->pluck('machine_code')->implode(', ') : '-' }} {{ $item['rahdaran'] != null ? $item['rahdaran']->pluck('code')->implode(', ') : '-' }} {{ $item['start_time'] ? verta($item['start_time'])->format('Y/n/j H:i:s') : '-' }} {{ $item['end_time'] ? verta($item['end_time'])->format('Y/n/j H:i:s') : '-' }} {{ $item['created_at'] ? verta($item['created_at'])->format('Y/n/j H:i:s') : '-' }} - {{ $item['supervisor_description'] ?? '-' }} + {{ $item['description'] ?? '-' }} @endforeach diff --git a/resources/views/v3/Reports/RoadPatrols/SupervisorCartableReport.blade.php b/resources/views/v3/Reports/RoadPatrols/SupervisorCartableReport.blade.php index e90648a2..0fb2a3d1 100644 --- a/resources/views/v3/Reports/RoadPatrols/SupervisorCartableReport.blade.php +++ b/resources/views/v3/Reports/RoadPatrols/SupervisorCartableReport.blade.php @@ -21,18 +21,18 @@ - - - @@ -73,13 +73,13 @@ - - + + - + @endforeach From ce28ec9f930937ade3d12185c22080f77b022bb5 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 9 Feb 2025 13:34:40 +0330 Subject: [PATCH 31/43] format the blades --- app/Services/Reports/RoadItemReportService.php | 8 ++++---- .../v3/Reports/RoadItems/OperatorCartableReport.blade.php | 3 +-- .../Reports/RoadItems/SupervisorCartableReport.blade.php | 3 +-- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/app/Services/Reports/RoadItemReportService.php b/app/Services/Reports/RoadItemReportService.php index 4751cda3..23454c13 100644 --- a/app/Services/Reports/RoadItemReportService.php +++ b/app/Services/Reports/RoadItemReportService.php @@ -76,7 +76,7 @@ class RoadItemReportService public function countryActivityPerSubItem(Request $request): array { $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(); + $toDate = $request->to_date ? $request->to_date . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); $item = $request->item; $provinceRoadItemsPerSubItem = RoadItemsProject::query()->selectRaw(' @@ -114,7 +114,7 @@ class RoadItemReportService public function provinceActivityPerSubItem(Request $request): array { $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(); + $toDate = $request->to_date ? $request->to_date . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); $item = $request->item; $province = $request->province_id; @@ -159,7 +159,7 @@ class RoadItemReportService public function countryActivityPerItem(Request $request): array { $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(); + $toDate = $request->to_date ? $request->to_date . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); $user = auth()->user(); // $isSpecialUser = in_array($user->username, ['witel', 'drdanesh']); $isSpecialUser = $user->hasPermissionTo("show-road-item-supervise-cartable"); @@ -198,7 +198,7 @@ class RoadItemReportService { $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(); + $toDate = $request->to_date ? $request->to_date . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); $edarehActivity = RoadItemsProject::query() ->selectRaw(' diff --git a/resources/views/v3/Reports/RoadItems/OperatorCartableReport.blade.php b/resources/views/v3/Reports/RoadItems/OperatorCartableReport.blade.php index 558c8907..3894defd 100644 --- a/resources/views/v3/Reports/RoadItems/OperatorCartableReport.blade.php +++ b/resources/views/v3/Reports/RoadItems/OperatorCartableReport.blade.php @@ -33,7 +33,7 @@ @@ -107,7 +107,6 @@ - diff --git a/resources/views/v3/Reports/RoadItems/SupervisorCartableReport.blade.php b/resources/views/v3/Reports/RoadItems/SupervisorCartableReport.blade.php index 1dd0a9c8..6203dbbc 100644 --- a/resources/views/v3/Reports/RoadItems/SupervisorCartableReport.blade.php +++ b/resources/views/v3/Reports/RoadItems/SupervisorCartableReport.blade.php @@ -33,7 +33,7 @@ @@ -107,7 +107,6 @@ - From 6cda8f04c6c6da236857410f1ba52089d94a5223 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 9 Feb 2025 14:08:03 +0330 Subject: [PATCH 32/43] rename --- .../V3/Dashboard/Reports/RoadPatrolReportController.php | 6 +++--- .../V3/Dashboard/RoadPatrolProjectController.php | 4 ++-- app/Services/Reports/RoadItemReportService.php | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php index fc6c30b5..4c28c442 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php @@ -53,7 +53,7 @@ class RoadPatrolReportController extends Controller public function countryActivityExcel(Request $request, RoadPatrolReportService $roadPatrolReportService): BinaryFileResponse { - $activities = $roadPatrolReportService->countryActivity($request->from_date, $request->to_date); + $activities = $roadPatrolReportService->countryActivity($request->from_date, $request->date_to); $name = 'گزارش از گشت راهداری و ترابری ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; @@ -62,7 +62,7 @@ class RoadPatrolReportController extends Controller public function provinceActivityExcel(Request $request, RoadPatrolReportService $roadPatrolReportService): BinaryFileResponse { - $activities = $roadPatrolReportService->provinceActivity($request->from_date, $request->to_date, $request->province_id); + $activities = $roadPatrolReportService->provinceActivity($request->from_date, $request->date_to, $request->province_id); $name = 'گزارش از گشت راهداری و ترابری ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; @@ -71,7 +71,7 @@ class RoadPatrolReportController extends Controller public function activitiesOnMap(Request $request): JsonResponse { - $date_from = $request->date_from ? $request->date_from .' 00:00:00' : now()->startOfDay()->toDateTimeString(); + $date_from = $request->from_date ? $request->from_date .' 00:00:00' : now()->startOfDay()->toDateTimeString(); $date_to = $request->date_to ? $request->date_to.' 23:59:59' : now()->addDay()->startOfDay()->toDateTimeString(); $provinceId = $request->province_id; $edareId = $request->edare_id; diff --git a/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php b/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php index ca3247ef..c33888c3 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php @@ -281,8 +281,8 @@ class RoadPatrolProjectController extends Controller $status = $request->status; $rms_status = $request->rms_status; - if ($request->date_from && $request->date_to) { - $date_from = $request->date_from.' 00:00:00'; + if ($request->from_date && $request->date_to) { + $date_from = $request->from_date.' 00:00:00'; $date_to = $request->date_to.' 23:59:59'; } else { $date_from = Date('Y-m-d'); diff --git a/app/Services/Reports/RoadItemReportService.php b/app/Services/Reports/RoadItemReportService.php index 23454c13..4751cda3 100644 --- a/app/Services/Reports/RoadItemReportService.php +++ b/app/Services/Reports/RoadItemReportService.php @@ -76,7 +76,7 @@ class RoadItemReportService public function countryActivityPerSubItem(Request $request): array { $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); - $toDate = $request->to_date ? $request->to_date . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); + $toDate = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); $item = $request->item; $provinceRoadItemsPerSubItem = RoadItemsProject::query()->selectRaw(' @@ -114,7 +114,7 @@ class RoadItemReportService public function provinceActivityPerSubItem(Request $request): array { $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); - $toDate = $request->to_date ? $request->to_date . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); + $toDate = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); $item = $request->item; $province = $request->province_id; @@ -159,7 +159,7 @@ class RoadItemReportService public function countryActivityPerItem(Request $request): array { $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); - $toDate = $request->to_date ? $request->to_date . ' 23:59:59' : now()->endOfDay()->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 = $user->hasPermissionTo("show-road-item-supervise-cartable"); @@ -198,7 +198,7 @@ class RoadItemReportService { $provinceId = $request->province_id; $fromDate = $request->from_date ? $request->from_date . ' 00:00:00' : now()->startOfDay()->toDateTimeString(); - $toDate = $request->to_date ? $request->to_date . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); + $toDate = $request->date_to ? $request->date_to . ' 23:59:59' : now()->endOfDay()->toDateTimeString(); $edarehActivity = RoadItemsProject::query() ->selectRaw(' From c131e466da27ca58e92b69863b68348f7c30d0c4 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 9 Feb 2025 14:23:36 +0330 Subject: [PATCH 33/43] resolve the date debug --- app/Exports/V3/RoadPatrols/CountryActivity.php | 2 +- .../Dashboard/Reports/RoadPatrolReportController.php | 4 ++-- app/Services/Reports/RoadPatrolReportService.php | 11 +++++++++-- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/app/Exports/V3/RoadPatrols/CountryActivity.php b/app/Exports/V3/RoadPatrols/CountryActivity.php index 29be9cff..48c0c1e4 100644 --- a/app/Exports/V3/RoadPatrols/CountryActivity.php +++ b/app/Exports/V3/RoadPatrols/CountryActivity.php @@ -21,7 +21,7 @@ class CountryActivity implements FromView, WithEvents, ShouldAutoSize, WithDrawi $activities = $this->activities; return view('v3.Reports.RoadPatrols.CountryActivity', [ - 'activities' => $activities["activities"], + 'activities' => $activities["data"], 'fromDate' => $activities["fromDate"], 'toDate' => $activities["toDate"] ]); diff --git a/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php index 4c28c442..d0a28030 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php @@ -53,7 +53,7 @@ class RoadPatrolReportController extends Controller public function countryActivityExcel(Request $request, RoadPatrolReportService $roadPatrolReportService): BinaryFileResponse { - $activities = $roadPatrolReportService->countryActivity($request->from_date, $request->date_to); + $activities = $roadPatrolReportService->countryActivity($request); $name = 'گزارش از گشت راهداری و ترابری ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; @@ -62,7 +62,7 @@ class RoadPatrolReportController extends Controller public function provinceActivityExcel(Request $request, RoadPatrolReportService $roadPatrolReportService): BinaryFileResponse { - $activities = $roadPatrolReportService->provinceActivity($request->from_date, $request->date_to, $request->province_id); + $activities = $roadPatrolReportService->provinceActivity($request); $name = 'گزارش از گشت راهداری و ترابری ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; diff --git a/app/Services/Reports/RoadPatrolReportService.php b/app/Services/Reports/RoadPatrolReportService.php index c7051116..38559505 100644 --- a/app/Services/Reports/RoadPatrolReportService.php +++ b/app/Services/Reports/RoadPatrolReportService.php @@ -71,8 +71,11 @@ class RoadPatrolReportService return $data; } - public function countryActivity(string $fromDate, string $toDate): array + public function countryActivity(Request $request): array { + $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(); + $activities = DB::select('SELECT "کشوری" as province_fa, -1 as province_id, @@ -124,8 +127,12 @@ class RoadPatrolReportService ]; } - public function provinceActivity(string $fromDate, string $toDate, int $provinceId): array + public function provinceActivity(Request $request): array { + $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(); + $provinceId = $request->province_id; + $activities = DB::select( 'SELECT province_fa, From baf4b0502c0ac60dcdedb2d4e373a31f8d9ec53b Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 9 Feb 2025 14:35:54 +0330 Subject: [PATCH 34/43] debug --- app/Exports/V3/RoadPatrols/ProvinceActivity.php | 2 +- .../Dashboard/Reports/RoadPatrolReportController.php | 12 +++--------- .../v3/Reports/RoadPatrols/CountryActivity.blade.php | 2 +- .../Reports/RoadPatrols/ProvinceActivity.blade.php | 2 +- 4 files changed, 6 insertions(+), 12 deletions(-) diff --git a/app/Exports/V3/RoadPatrols/ProvinceActivity.php b/app/Exports/V3/RoadPatrols/ProvinceActivity.php index 1d7d0d8d..5fcc3196 100644 --- a/app/Exports/V3/RoadPatrols/ProvinceActivity.php +++ b/app/Exports/V3/RoadPatrols/ProvinceActivity.php @@ -21,7 +21,7 @@ class ProvinceActivity implements FromView, WithEvents, ShouldAutoSize, WithDraw $activities = $this->activities; return view('v3.Reports.RoadPatrols.ProvinceActivity', [ - 'activities' => $activities["activities"], + 'activities' => $activities["data"], 'fromDate' => $activities["fromDate"], 'toDate' => $activities["toDate"] ]); diff --git a/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php index d0a28030..ab3d13dd 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php @@ -21,10 +21,7 @@ class RoadPatrolReportController extends Controller use ApiResponse; public function countryPatrolActivity(Request $request, RoadPatrolReportService $roadPatrolReportService): 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(); - - $activities = $roadPatrolReportService->countryActivity($fromDate, $toDate); + $activities = $roadPatrolReportService->countryActivity($request); $provinces = Province::all(['id', 'name_fa']); @@ -37,13 +34,10 @@ class RoadPatrolReportController extends Controller public function provincePatrolActivity(Request $request, RoadPatrolReportService $roadPatrolReportService): JsonResponse { $request->validate(["province_id" => "required",]); - $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(); - $provinceId = $request->province_id; - $activities = $roadPatrolReportService->provinceActivity($fromDate, $toDate, $provinceId); + $activities = $roadPatrolReportService->provinceActivity($request); - $edarateShahri = EdarateShahri::query()->where('province_id', '=', $provinceId)->get(['id', 'name_fa']); + $edarateShahri = EdarateShahri::query()->where('province_id', '=', $request->province_id)->get(['id', 'name_fa']); return $this->successResponse([ 'activities' => $activities['data'], diff --git a/resources/views/v3/Reports/RoadPatrols/CountryActivity.blade.php b/resources/views/v3/Reports/RoadPatrols/CountryActivity.blade.php index 0e94bde7..6efeed9b 100644 --- a/resources/views/v3/Reports/RoadPatrols/CountryActivity.blade.php +++ b/resources/views/v3/Reports/RoadPatrols/CountryActivity.blade.php @@ -27,7 +27,7 @@ - @foreach ($activities as $activity) + @php + // محاسبه مجموع مقدار s برای کل کشور + $totalForCountry = collect($activities)->where('province_id', -1)->get(); + @endphp + + {{-- ردیف کل کشور --}} - - - - - - - - + + + @foreach($items as $item) + + @endforeach + @foreach ($provinces as $province) + @foreach($activities as $activity) + @if($province->name_fa == $activity->province_fa) + + + + + + + + + + + @endif + + + + + + + + + + + @endforeach @endforeach From 8099c2874c5dc6cedafea19c82c5713bda929316 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 9 Feb 2025 15:56:31 +0330 Subject: [PATCH 36/43] create blade files --- .../RoadPatrols/CountryActivity.blade.php | 62 ++++++++++--------- .../RoadPatrols/ProvinceActivity.blade.php | 55 ++++++++++++---- 2 files changed, 76 insertions(+), 41 deletions(-) diff --git a/resources/views/v3/Reports/RoadPatrols/CountryActivity.blade.php b/resources/views/v3/Reports/RoadPatrols/CountryActivity.blade.php index 292615ea..bba1555a 100644 --- a/resources/views/v3/Reports/RoadPatrols/CountryActivity.blade.php +++ b/resources/views/v3/Reports/RoadPatrols/CountryActivity.blade.php @@ -82,48 +82,50 @@ @php // محاسبه مجموع مقدار s برای کل کشور - $totalForCountry = collect($activities)->where('province_id', -1)->get(); + $totalForCountry = collect($activities)->where('province_id', -1)->first(); @endphp {{-- ردیف کل کشور --}} - - @foreach($items as $item) - - @endforeach + + + + + + + + @foreach ($provinces as $province) - @foreach($activities as $activity) - @if($province->name_fa == $activity->province_fa) + @php + $totalForProvince = collect($activities)->where('province_id', $province->id)->first(); + @endphp + @if($totalForProvince) - - - - - - - - + + + + + + + + + + @else + + + + + + + + + @endif - - - - - - - - - - - @endforeach @endforeach - -
تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }}
گزارش کارتابل ارزیابی گشت راهداری
{{ $item['id'] ?? '-' }} {{ $item['province_fa'] ?? '-' }}{{ $item['edarat_name'] ?? '-' }}{{ $item['cmmsMachines'] != null ? $item['cmmsMachines']->pluck('machine_code')->implode(', ') : '-' }}{{ $item['edare_name'] ?? '-' }}{{ $item['cmms_machines'] != null ? $item['cmms_machines']->pluck('machine_code')->implode(', ') : '-' }} {{ $item['rahdaran'] != null ? $item['rahdaran']->pluck('code')->implode(', ') : '-' }} {{ $item['start_time'] ? verta($item['start_time'])->format('Y/n/j H:i:s') : '-' }} {{ $item['end_time'] ? verta($item['end_time'])->format('Y/n/j H:i:s') : '-' }} {{ $item['created_at'] ? verta($item['created_at'])->format('Y/n/j H:i:s') : '-' }}{{ $item['supervisor_description'] ?? '-' }}{{ $item['description'] ?? '-' }}
+ style="background-color: #DAEEF3;text-align: center;border-right:1px solid black;font-weight:bolder;font-size: 13px;"> گزارش کارتابل عملیات فعالیت های روزانه و جاری
{{ $item['activity_date_time'] ? verta($item['activity_date_time'])->format('Y/n/j H:i:s') : '-' }} {{ $item['created_at'] ? verta($item['created_at'])->format('Y/n/j H:i:s') : '-' }} {{ $item['status_fa'] ?? '-' }} {{ $item['supervisor_description'] ?? '-' }}
+ style="background-color: #DAEEF3;text-align: center;border-right:1px solid black;font-weight:bolder;font-size: 13px;"> گزارش کارتابل ارزیابی فعالیت های روزانه و جاری
{{ $item['activity_date_time'] ? verta($item['activity_date_time'])->format('Y/n/j H:i:s') : '-' }} {{ $item['created_at'] ? verta($item['created_at'])->format('Y/n/j H:i:s') : '-' }} {{ $item['status_fa'] ?? '-' }} {{ $item['supervisor_description'] ?? '-' }}
+ style="background-color: #DAEEF3;text-align: center;border-right:1px solid black;font-weight:bolder;font-size: 13px;"> گزارش گشت راهداری و ترابری از تاریخ {{ verta($fromDate)->format('Y/n/j') }} تا diff --git a/resources/views/v3/Reports/RoadPatrols/ProvinceActivity.blade.php b/resources/views/v3/Reports/RoadPatrols/ProvinceActivity.blade.php index 602352e5..fe995428 100644 --- a/resources/views/v3/Reports/RoadPatrols/ProvinceActivity.blade.php +++ b/resources/views/v3/Reports/RoadPatrols/ProvinceActivity.blade.php @@ -27,7 +27,7 @@
+ style="background-color: #DAEEF3;text-align: center;border-right:1px solid black;font-weight:bolder;font-size: 13px;"> گزارش گشت راهداری و ترابری از تاریخ {{ verta($fromDate)->format('Y/n/j') }} تا From 382299dac5fa05f8af2454bf0206ccd36fef8e23 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 9 Feb 2025 15:21:14 +0330 Subject: [PATCH 35/43] change patrol blade --- .../V3/RoadPatrols/CountryActivity.php | 7 +-- .../V3/RoadPatrols/ProvinceActivity.php | 7 +-- .../Reports/RoadPatrolReportController.php | 12 ++++- .../RoadPatrols/CountryActivity.blade.php | 45 +++++++++++++++---- 4 files changed, 54 insertions(+), 17 deletions(-) diff --git a/app/Exports/V3/RoadPatrols/CountryActivity.php b/app/Exports/V3/RoadPatrols/CountryActivity.php index 48c0c1e4..dd328cc1 100644 --- a/app/Exports/V3/RoadPatrols/CountryActivity.php +++ b/app/Exports/V3/RoadPatrols/CountryActivity.php @@ -21,9 +21,10 @@ class CountryActivity implements FromView, WithEvents, ShouldAutoSize, WithDrawi $activities = $this->activities; return view('v3.Reports.RoadPatrols.CountryActivity', [ - 'activities' => $activities["data"], - 'fromDate' => $activities["fromDate"], - 'toDate' => $activities["toDate"] + 'activities' => $activities["activities"]['data'], + 'provinces' => $activities["provinces"], + 'fromDate' => $activities["activities"]["fromDate"], + 'toDate' => $activities["activities"]["toDate"] ]); } diff --git a/app/Exports/V3/RoadPatrols/ProvinceActivity.php b/app/Exports/V3/RoadPatrols/ProvinceActivity.php index 5fcc3196..4118fd19 100644 --- a/app/Exports/V3/RoadPatrols/ProvinceActivity.php +++ b/app/Exports/V3/RoadPatrols/ProvinceActivity.php @@ -21,9 +21,10 @@ class ProvinceActivity implements FromView, WithEvents, ShouldAutoSize, WithDraw $activities = $this->activities; return view('v3.Reports.RoadPatrols.ProvinceActivity', [ - 'activities' => $activities["data"], - 'fromDate' => $activities["fromDate"], - 'toDate' => $activities["toDate"] + 'activities' => $activities["activities"]['data'], + 'edarateShahri' => $activities["edarateShahri"], + 'fromDate' => $activities["activities"]["fromDate"], + 'toDate' => $activities["activities"]["toDate"] ]); } diff --git a/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php index ab3d13dd..9f485e05 100644 --- a/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php +++ b/app/Http/Controllers/V3/Dashboard/Reports/RoadPatrolReportController.php @@ -48,19 +48,27 @@ class RoadPatrolReportController extends Controller public function countryActivityExcel(Request $request, RoadPatrolReportService $roadPatrolReportService): BinaryFileResponse { $activities = $roadPatrolReportService->countryActivity($request); + $provinces = Province::all(['id', 'name_fa']); $name = 'گزارش از گشت راهداری و ترابری ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - return Excel::download(new CountryActivity($activities), $name); + return Excel::download(new CountryActivity([ + 'activities' => $activities, + 'provinces' => $provinces, + ]), $name); } public function provinceActivityExcel(Request $request, RoadPatrolReportService $roadPatrolReportService): BinaryFileResponse { $activities = $roadPatrolReportService->provinceActivity($request); + $edarateShahri = EdarateShahri::query()->where('province_id', '=', $request->province_id)->get(['id', 'name_fa']); $name = 'گزارش از گشت راهداری و ترابری ' . verta()->now()->format('Y-m-d H-i') . '.xlsx'; - return Excel::download(new ProvinceActivity($activities), $name); + return Excel::download(new ProvinceActivity([ + 'activities' => $activities, + 'edarateShahri' => $edarateShahri, + ]), $name); } public function activitiesOnMap(Request $request): JsonResponse diff --git a/resources/views/v3/Reports/RoadPatrols/CountryActivity.blade.php b/resources/views/v3/Reports/RoadPatrols/CountryActivity.blade.php index 6efeed9b..292615ea 100644 --- a/resources/views/v3/Reports/RoadPatrols/CountryActivity.blade.php +++ b/resources/views/v3/Reports/RoadPatrols/CountryActivity.blade.php @@ -80,17 +80,44 @@
{{ $activity->province_fa }}{{ $activity->tedade }}{{ $activity->tedad_mavarede_moshede_shode_adi }}{{ $activity->tedad_mavarede_moshede_shode_fori }}{{ $activity->tedad_mavarede_moshede_shode_ani }}{{ $activity->tedad_mavarede_peygiri_shode }}{{ $activity->masafat_tey_shode }}{{ $activity->tedad_faliyat_sabt_shode }}کل کشور{{ $totalForCountry }}{{ $itemTotalsForCountry[$item['item']] ?? '-' }}
{{ $activity->province_fa }}{{ $activity->tedade }}{{ $activity->tedad_mavarede_moshede_shode_adi }}{{ $activity->tedad_mavarede_moshede_shode_fori }}{{ $activity->tedad_mavarede_moshede_shode_ani }}{{ $activity->tedad_mavarede_peygiri_shode }}{{ $activity->masafat_tey_shode }}{{ $activity->tedad_faliyat_sabt_shode }}
{{ $province->name_fa }}-------
کل کشور{{ $totalForCountry }}{{ $itemTotalsForCountry[$item['item']] ?? '-' }}{{ $totalForCountry->tedade }}{{ $totalForCountry->tedad_mavarede_moshede_shode_adi }}{{ $totalForCountry->tedad_mavarede_moshede_shode_fori }}{{ $totalForCountry->tedad_mavarede_moshede_shode_ani }}{{ $totalForCountry->tedad_mavarede_peygiri_shode }}{{ $totalForCountry->masafat_tey_shode }}{{ $totalForCountry->tedad_faliyat_sabt_shode }}
{{ $activity->province_fa }}{{ $activity->tedade }}{{ $activity->tedad_mavarede_moshede_shode_adi }}{{ $activity->tedad_mavarede_moshede_shode_fori }}{{ $activity->tedad_mavarede_moshede_shode_ani }}{{ $activity->tedad_mavarede_peygiri_shode }}{{ $activity->masafat_tey_shode }}{{ $activity->tedad_faliyat_sabt_shode }}{{ $totalForProvince->province_fa }}{{ $totalForProvince->tedade }}{{ $totalForProvince->tedad_mavarede_moshede_shode_adi }}{{ $totalForProvince->tedad_mavarede_moshede_shode_fori }}{{ $totalForProvince->tedad_mavarede_moshede_shode_ani }}{{ $totalForProvince->tedad_mavarede_peygiri_shode }}{{ $totalForProvince->masafat_tey_shode }}{{ $totalForProvince->tedad_faliyat_sabt_shode }}
{{ $province->name_fa }}0000000
{{ $province->name_fa }}-------
- - diff --git a/resources/views/v3/Reports/RoadPatrols/ProvinceActivity.blade.php b/resources/views/v3/Reports/RoadPatrols/ProvinceActivity.blade.php index fe995428..5ab14deb 100644 --- a/resources/views/v3/Reports/RoadPatrols/ProvinceActivity.blade.php +++ b/resources/views/v3/Reports/RoadPatrols/ProvinceActivity.blade.php @@ -80,17 +80,50 @@ - @foreach ($activities as $activity) - - {{ $activity->edare_name }} - {{ $activity->tedade }} - {{ $activity->tedad_mavarede_moshede_shode_adi }} - {{ $activity->tedad_mavarede_moshede_shode_fori }} - {{ $activity->tedad_mavarede_moshede_shode_ani }} - {{ $activity->tedad_mavarede_peygiri_shode }} - {{ $activity->masafat_tey_shode }} - {{ $activity->tedad_faliyat_sabt_shode }} - + @php + // محاسبه مجموع مقدار s برای کل کشور + $totalForProvince = collect($activities)->where('edare_id', -1)->first(); + @endphp + + {{-- ردیف کل کشور --}} + + کل استان + {{ $totalForProvince->tedade ?? 0 }} + {{ $totalForProvince->tedad_mavarede_moshede_shode_adi ?? 0 }} + {{ $totalForProvince->tedad_mavarede_moshede_shode_fori ?? 0 }} + {{ $totalForProvince->tedad_mavarede_moshede_shode_ani ?? 0 }} + {{ $totalForProvince->tedad_mavarede_peygiri_shode ?? 0 }} + {{ $totalForProvince->masafat_tey_shode ?? 0 }} + {{ $totalForProvince->tedad_faliyat_sabt_shode ?? 0 }} + + + @foreach ($edarateShahri as $edareShahri) + @php + $totalForEdare = collect($activities)->where('edare_id', $edareShahri->id)->first(); + @endphp + @if($totalForEdare) + + {{ $totalForEdare->edare_name }} + {{ $totalForEdare->tedade }} + {{ $totalForEdare->tedad_mavarede_moshede_shode_adi }} + {{ $totalForEdare->tedad_mavarede_moshede_shode_fori }} + {{ $totalForEdare->tedad_mavarede_moshede_shode_ani }} + {{ $totalForEdare->tedad_mavarede_peygiri_shode }} + {{ $totalForEdare->masafat_tey_shode }} + {{ $totalForEdare->tedad_faliyat_sabt_shode }} + + @else + + {{ $edareShahri->name_fa }} + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + @endif @endforeach From efda4a816194c5bcc1fa56a8ea0780ab032efe4b Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Tue, 11 Feb 2025 12:03:56 +0330 Subject: [PATCH 37/43] debug the sql files --- storage/sql-files/edarate_shahri.sql | 4 ++-- storage/sql-files/log_lists.sql | 2 +- storage/sql-files/permissions.sql | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/storage/sql-files/edarate_shahri.sql b/storage/sql-files/edarate_shahri.sql index 85a2b042..83b4b022 100644 --- a/storage/sql-files/edarate_shahri.sql +++ b/storage/sql-files/edarate_shahri.sql @@ -518,6 +518,6 @@ INSERT INTO edarate_shahri (name_fa,province_id,created_at,updated_at) VALUES ('اداره آق قلا',27,'2023-03-13 14:12:25','2023-03-13 14:12:25'); 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'); + ('اداره اصلاندوز',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'); diff --git a/storage/sql-files/log_lists.sql b/storage/sql-files/log_lists.sql index 914b9823..4cef3f6e 100644 --- a/storage/sql-files/log_lists.sql +++ b/storage/sql-files/log_lists.sql @@ -160,4 +160,4 @@ INSERT INTO log_lists (description,log_unique_code,action_type,is_done) VALUES ('حذف نوع آزمایش','1164','action',0), ('ثبت نمونه آزمایش','1165','action',0), ('ویرایش نمونه آزمایش','1166','action',0), - ('حذف نمونه آزمایش','1167','action',0), + ('حذف نمونه آزمایش','1167','action',0); diff --git a/storage/sql-files/permissions.sql b/storage/sql-files/permissions.sql index a03a7003..d6515554 100644 --- a/storage/sql-files/permissions.sql +++ b/storage/sql-files/permissions.sql @@ -132,6 +132,6 @@ INSERT INTO permissions (name,guard_name,name_fa,description,created_at,updated_ ('delete-safety-and-privacy','web','حذف نگهداری و حریم','کاربر امکان حذف یک فعالیت نگهداری حریم راه را دارد',NULL,NULL,NULL,NULL,'safety-and-privacy','نگهداری حریم راه',0,0), ('show-receipt','web','نمایش خسارت (کشوری)','نمایش خسارات کشوری',NULL,NULL,NULL,NULL,'receipt','خسارات وارد بر ابنیه فنی راه',0,0), ('show-receipt-province','web','نمایش خسارت (استانی)','نمایش خسارات استانی',NULL,NULL,NULL,NULL,'receipt','خسارات وارد بر ابنیه فنی راه',1,0), - ('supervise-road-item-by-edareostani','web','نظارت بر ثبت فعالیت روزانه و جاری(ادارات استانی)',NULL,'2023-07-09 09:48:35','2023-07-09 09:48:37',NULL,NULL,'road-item','فعالیت روزانه',0,0); - ('azmayesh-management','web','مدیریت آزمایشات',NULL,'2024-11-18 09:48:35','2024-11-18 09:48:35',NULL,NULL,'azmayesh','آزمایشات',0,0); + ('supervise-road-item-by-edareostani','web','نظارت بر ثبت فعالیت روزانه و جاری(ادارات استانی)',NULL,'2023-07-09 09:48:35','2023-07-09 09:48:37',NULL,NULL,'road-item','فعالیت روزانه',0,0), + ('azmayesh-management','web','مدیریت آزمایشات',NULL,'2024-11-18 09:48:35','2024-11-18 09:48:35',NULL,NULL,'azmayesh','آزمایشات',0,0), ('azmayesh-type-management','web','مدیریت نوع آزمایشات',NULL,'2024-11-18 09:48:35','2024-11-18 09:48:35',NULL,NULL,'azmayesh','آزمایشات',0,0); From 6825ae607778f0bcb935c7bd03d02ddcb9c16bef Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sat, 15 Feb 2025 11:45:36 +0330 Subject: [PATCH 38/43] install pulse package --- app/Providers/AuthServiceProvider.php | 5 + bootstrap/cache/packages.php | 22 ++ bootstrap/cache/services.php | 80 +++--- composer.json | 3 +- composer.lock | 227 ++++++++++++++++- config/pulse.php | 233 ++++++++++++++++++ .../2023_06_07_000001_create_pulse_tables.php | 84 +++++++ 7 files changed, 611 insertions(+), 43 deletions(-) create mode 100644 config/pulse.php create mode 100644 database/migrations/2023_06_07_000001_create_pulse_tables.php diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index d8a5337b..434ee1ab 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -2,6 +2,7 @@ namespace App\Providers; +use App\Models\User; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; use Illuminate\Support\Facades\Gate; use App\Models\EdarateOstani; @@ -50,5 +51,9 @@ class AuthServiceProvider extends ServiceProvider return $user->can('supervise-fast-react') || ($user->can('supervise-fast-react-province') && $road_observed->province_id == $user->province_id); }); + + Gate::define('viewPulse', function (User $user) { + return $user->username == 'witel'; + }); } } diff --git a/bootstrap/cache/packages.php b/bootstrap/cache/packages.php index 9ba8eb78..58a2a104 100755 --- a/bootstrap/cache/packages.php +++ b/bootstrap/cache/packages.php @@ -28,6 +28,17 @@ 0 => 'KitLoong\\MigrationsGenerator\\MigrationsGeneratorServiceProvider', ), ), + 'laravel/pulse' => + array ( + 'aliases' => + array ( + 'Pulse' => 'Laravel\\Pulse\\Facades\\Pulse', + ), + 'providers' => + array ( + 0 => 'Laravel\\Pulse\\PulseServiceProvider', + ), + ), 'laravel/sail' => array ( 'providers' => @@ -63,6 +74,17 @@ 0 => 'Laravel\\Ui\\UiServiceProvider', ), ), + 'livewire/livewire' => + array ( + 'aliases' => + array ( + 'Livewire' => 'Livewire\\Livewire', + ), + 'providers' => + array ( + 0 => 'Livewire\\LivewireServiceProvider', + ), + ), 'maatwebsite/excel' => array ( 'providers' => diff --git a/bootstrap/cache/services.php b/bootstrap/cache/services.php index 13560d20..da457a76 100755 --- a/bootstrap/cache/services.php +++ b/bootstrap/cache/services.php @@ -26,26 +26,28 @@ 22 => 'Barryvdh\\Debugbar\\ServiceProvider', 23 => 'Hekmatinasser\\Verta\\Laravel\\VertaServiceProvider', 24 => 'KitLoong\\MigrationsGenerator\\MigrationsGeneratorServiceProvider', - 25 => 'Laravel\\Sail\\SailServiceProvider', - 26 => 'Laravel\\Sanctum\\SanctumServiceProvider', - 27 => 'Laravel\\Telescope\\TelescopeServiceProvider', - 28 => 'Laravel\\Tinker\\TinkerServiceProvider', - 29 => 'Laravel\\Ui\\UiServiceProvider', - 30 => 'Maatwebsite\\Excel\\ExcelServiceProvider', - 31 => 'Carbon\\Laravel\\ServiceProvider', - 32 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider', - 33 => 'Termwind\\Laravel\\TermwindServiceProvider', - 34 => 'Spatie\\LaravelIgnition\\IgnitionServiceProvider', - 35 => 'Spatie\\Permission\\PermissionServiceProvider', - 36 => 'Spatie\\Permission\\PermissionServiceProvider', - 37 => 'App\\Providers\\AppServiceProvider', - 38 => 'App\\Providers\\AuthServiceProvider', - 39 => 'App\\Providers\\EventServiceProvider', - 40 => 'App\\Providers\\RouteServiceProvider', - 41 => 'App\\Providers\\TelescopeServiceProvider', - 42 => 'Barryvdh\\Debugbar\\ServiceProvider', - 43 => 'App\\Providers\\DataTableServiceProvider', - 44 => 'App\\Providers\\FileServiceProvider', + 25 => 'Laravel\\Pulse\\PulseServiceProvider', + 26 => 'Laravel\\Sail\\SailServiceProvider', + 27 => 'Laravel\\Sanctum\\SanctumServiceProvider', + 28 => 'Laravel\\Telescope\\TelescopeServiceProvider', + 29 => 'Laravel\\Tinker\\TinkerServiceProvider', + 30 => 'Laravel\\Ui\\UiServiceProvider', + 31 => 'Livewire\\LivewireServiceProvider', + 32 => 'Maatwebsite\\Excel\\ExcelServiceProvider', + 33 => 'Carbon\\Laravel\\ServiceProvider', + 34 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider', + 35 => 'Termwind\\Laravel\\TermwindServiceProvider', + 36 => 'Spatie\\LaravelIgnition\\IgnitionServiceProvider', + 37 => 'Spatie\\Permission\\PermissionServiceProvider', + 38 => 'Spatie\\Permission\\PermissionServiceProvider', + 39 => 'App\\Providers\\AppServiceProvider', + 40 => 'App\\Providers\\AuthServiceProvider', + 41 => 'App\\Providers\\EventServiceProvider', + 42 => 'App\\Providers\\RouteServiceProvider', + 43 => 'App\\Providers\\TelescopeServiceProvider', + 44 => 'Barryvdh\\Debugbar\\ServiceProvider', + 45 => 'App\\Providers\\DataTableServiceProvider', + 46 => 'App\\Providers\\FileServiceProvider', ), 'eager' => array ( @@ -62,24 +64,26 @@ 10 => 'Barryvdh\\Debugbar\\ServiceProvider', 11 => 'Hekmatinasser\\Verta\\Laravel\\VertaServiceProvider', 12 => 'KitLoong\\MigrationsGenerator\\MigrationsGeneratorServiceProvider', - 13 => 'Laravel\\Sanctum\\SanctumServiceProvider', - 14 => 'Laravel\\Telescope\\TelescopeServiceProvider', - 15 => 'Laravel\\Ui\\UiServiceProvider', - 16 => 'Maatwebsite\\Excel\\ExcelServiceProvider', - 17 => 'Carbon\\Laravel\\ServiceProvider', - 18 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider', - 19 => 'Termwind\\Laravel\\TermwindServiceProvider', - 20 => 'Spatie\\LaravelIgnition\\IgnitionServiceProvider', - 21 => 'Spatie\\Permission\\PermissionServiceProvider', - 22 => 'Spatie\\Permission\\PermissionServiceProvider', - 23 => 'App\\Providers\\AppServiceProvider', - 24 => 'App\\Providers\\AuthServiceProvider', - 25 => 'App\\Providers\\EventServiceProvider', - 26 => 'App\\Providers\\RouteServiceProvider', - 27 => 'App\\Providers\\TelescopeServiceProvider', - 28 => 'Barryvdh\\Debugbar\\ServiceProvider', - 29 => 'App\\Providers\\DataTableServiceProvider', - 30 => 'App\\Providers\\FileServiceProvider', + 13 => 'Laravel\\Pulse\\PulseServiceProvider', + 14 => 'Laravel\\Sanctum\\SanctumServiceProvider', + 15 => 'Laravel\\Telescope\\TelescopeServiceProvider', + 16 => 'Laravel\\Ui\\UiServiceProvider', + 17 => 'Livewire\\LivewireServiceProvider', + 18 => 'Maatwebsite\\Excel\\ExcelServiceProvider', + 19 => 'Carbon\\Laravel\\ServiceProvider', + 20 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider', + 21 => 'Termwind\\Laravel\\TermwindServiceProvider', + 22 => 'Spatie\\LaravelIgnition\\IgnitionServiceProvider', + 23 => 'Spatie\\Permission\\PermissionServiceProvider', + 24 => 'Spatie\\Permission\\PermissionServiceProvider', + 25 => 'App\\Providers\\AppServiceProvider', + 26 => 'App\\Providers\\AuthServiceProvider', + 27 => 'App\\Providers\\EventServiceProvider', + 28 => 'App\\Providers\\RouteServiceProvider', + 29 => 'App\\Providers\\TelescopeServiceProvider', + 30 => 'Barryvdh\\Debugbar\\ServiceProvider', + 31 => 'App\\Providers\\DataTableServiceProvider', + 32 => 'App\\Providers\\FileServiceProvider', ), 'deferred' => array ( diff --git a/composer.json b/composer.json index 05a8958e..825d349e 100644 --- a/composer.json +++ b/composer.json @@ -11,6 +11,7 @@ "guzzlehttp/guzzle": "^7.2", "hekmatinasser/verta": "^8.3", "laravel/framework": "^10.10", + "laravel/pulse": "^1.0@beta", "laravel/sanctum": "^3.2", "laravel/telescope": "^4.17", "laravel/tinker": "^2.8", @@ -76,6 +77,6 @@ "php-http/discovery": true } }, - "minimum-stability": "stable", + "minimum-stability": "beta", "prefer-stable": true } diff --git a/composer.lock b/composer.lock index 7c8ba57f..406835fc 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f354c54643bedde32669099052baa40c", + "content-hash": "fb6adbe1f5e02aaf3de31c514710f0b6", "packages": [ { "name": "beberlei/assert", @@ -865,6 +865,61 @@ ], "time": "2022-12-15T16:57:16+00:00" }, + { + "name": "doctrine/sql-formatter", + "version": "1.5.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/sql-formatter.git", + "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/d6d00aba6fd2957fe5216fe2b7673e9985db20c8", + "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "ergebnis/phpunit-slow-test-detector": "^2.14", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5" + }, + "bin": [ + "bin/sql-formatter" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\SqlFormatter\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Dorn", + "email": "jeremy@jeremydorn.com", + "homepage": "https://jeremydorn.com/" + } + ], + "description": "a PHP SQL highlighting library", + "homepage": "https://github.com/doctrine/sql-formatter/", + "keywords": [ + "highlight", + "sql" + ], + "support": { + "issues": "https://github.com/doctrine/sql-formatter/issues", + "source": "https://github.com/doctrine/sql-formatter/tree/1.5.2" + }, + "time": "2025-01-24T11:45:48+00:00" + }, { "name": "dragonmantank/cron-expression", "version": "v3.3.3", @@ -2043,6 +2098,92 @@ }, "time": "2023-12-29T22:37:42+00:00" }, + { + "name": "laravel/pulse", + "version": "v1.0.0-beta15", + "source": { + "type": "git", + "url": "https://github.com/laravel/pulse.git", + "reference": "6fc88b3ead77fd1c67428f0c0fa6ac2ec5302e2b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pulse/zipball/6fc88b3ead77fd1c67428f0c0fa6ac2ec5302e2b", + "reference": "6fc88b3ead77fd1c67428f0c0fa6ac2ec5302e2b", + "shasum": "" + }, + "require": { + "doctrine/sql-formatter": "^1.1", + "guzzlehttp/promises": "^1.0|^2.0", + "illuminate/auth": "^10.34|^11.0", + "illuminate/cache": "^10.34|^11.0", + "illuminate/config": "^10.34|^11.0", + "illuminate/console": "^10.34|^11.0", + "illuminate/contracts": "^10.34|^11.0", + "illuminate/database": "^10.34|^11.0", + "illuminate/events": "^10.34|^11.0", + "illuminate/http": "^10.34|^11.0", + "illuminate/queue": "^10.34|^11.0", + "illuminate/redis": "^10.34|^11.0", + "illuminate/routing": "^10.34|^11.0", + "illuminate/support": "^10.34|^11.0", + "illuminate/view": "^10.34|^11.0", + "livewire/livewire": "^3.2", + "nesbot/carbon": "^2.67|^3.0", + "php": "^8.1" + }, + "conflict": { + "nunomaduro/collision": "<7.7.0" + }, + "require-dev": { + "guzzlehttp/guzzle": "^7.7", + "mockery/mockery": "^1.0", + "orchestra/testbench": "^8.16|^9.0", + "pestphp/pest": "^2.0", + "pestphp/pest-plugin-laravel": "^2.2", + "phpstan/phpstan": "^1.11", + "predis/predis": "^1.0|^2.0" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Pulse": "Laravel\\Pulse\\Facades\\Pulse" + }, + "providers": [ + "Laravel\\Pulse\\PulseServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Pulse\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Laravel Pulse is a real-time application performance monitoring tool and dashboard for your Laravel application.", + "homepage": "https://github.com/laravel/pulse", + "keywords": [ + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/pulse/issues", + "source": "https://github.com/laravel/pulse" + }, + "time": "2024-03-11T13:19:11+00:00" + }, { "name": "laravel/sanctum", "version": "v3.3.3", @@ -2762,6 +2903,82 @@ ], "time": "2024-01-28T23:22:08+00:00" }, + { + "name": "livewire/livewire", + "version": "v3.5.4", + "source": { + "type": "git", + "url": "https://github.com/livewire/livewire.git", + "reference": "b158c6386a892efc6c5e4682e682829baac1f933" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/livewire/livewire/zipball/b158c6386a892efc6c5e4682e682829baac1f933", + "reference": "b158c6386a892efc6c5e4682e682829baac1f933", + "shasum": "" + }, + "require": { + "illuminate/database": "^10.0|^11.0", + "illuminate/routing": "^10.0|^11.0", + "illuminate/support": "^10.0|^11.0", + "illuminate/validation": "^10.0|^11.0", + "league/mime-type-detection": "^1.9", + "php": "^8.1", + "symfony/console": "^6.0|^7.0", + "symfony/http-kernel": "^6.2|^7.0" + }, + "require-dev": { + "calebporzio/sushi": "^2.1", + "laravel/framework": "^10.15.0|^11.0", + "laravel/prompts": "^0.1.6", + "mockery/mockery": "^1.3.1", + "orchestra/testbench": "^8.21.0|^9.0", + "orchestra/testbench-dusk": "^8.24|^9.1", + "phpunit/phpunit": "^10.4", + "psy/psysh": "^0.11.22|^0.12" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Livewire": "Livewire\\Livewire" + }, + "providers": [ + "Livewire\\LivewireServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Livewire\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Caleb Porzio", + "email": "calebporzio@gmail.com" + } + ], + "description": "A front-end framework for Laravel.", + "support": { + "issues": "https://github.com/livewire/livewire/issues", + "source": "https://github.com/livewire/livewire/tree/v3.5.4" + }, + "funding": [ + { + "url": "https://github.com/livewire", + "type": "github" + } + ], + "time": "2024-07-15T18:27:32+00:00" + }, { "name": "maatwebsite/excel", "version": "3.1.52", @@ -9807,14 +10024,16 @@ } ], "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], + "minimum-stability": "beta", + "stability-flags": { + "laravel/pulse": 10 + }, "prefer-stable": true, "prefer-lowest": false, "platform": { "php": "^8.1", "ext-zip": "*" }, - "platform-dev": [], + "platform-dev": {}, "plugin-api-version": "2.6.0" } diff --git a/config/pulse.php b/config/pulse.php new file mode 100644 index 00000000..2eb95ccc --- /dev/null +++ b/config/pulse.php @@ -0,0 +1,233 @@ + env('PULSE_DOMAIN'), + + /* + |-------------------------------------------------------------------------- + | Pulse Path + |-------------------------------------------------------------------------- + | + | This is the path which the Pulse dashboard will be accessible from. Feel + | free to change this path to anything you'd like. Note that this won't + | affect the path of the internal API that is never exposed to users. + | + */ + + 'path' => env('PULSE_PATH', 'pulse'), + + /* + |-------------------------------------------------------------------------- + | Pulse Master Switch + |-------------------------------------------------------------------------- + | + | This configuration option may be used to completely disable all Pulse + | data recorders regardless of their individual configurations. This + | provides a single option to quickly disable all Pulse recording. + | + */ + + 'enabled' => env('PULSE_ENABLED', true), + + /* + |-------------------------------------------------------------------------- + | Pulse Storage Driver + |-------------------------------------------------------------------------- + | + | This configuration option determines which storage driver will be used + | while storing entries from Pulse's recorders. In addition, you also + | may provide any options to configure the selected storage driver. + | + */ + + 'storage' => [ + 'driver' => env('PULSE_STORAGE_DRIVER', 'database'), + + 'database' => [ + 'connection' => env('PULSE_DB_CONNECTION', null), + 'chunk' => 1000, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Pulse Ingest Driver + |-------------------------------------------------------------------------- + | + | This configuration options determines the ingest driver that will be used + | to capture entries from Pulse's recorders. Ingest drivers are great to + | free up your request workers quickly by offloading the data storage. + | + */ + + 'ingest' => [ + 'driver' => env('PULSE_INGEST_DRIVER', 'storage'), + + 'buffer' => env('PULSE_INGEST_BUFFER', 5_000), + + 'trim' => [ + 'lottery' => [1, 1_000], + 'keep' => '7 days', + ], + + 'redis' => [ + 'connection' => env('PULSE_REDIS_CONNECTION'), + 'chunk' => 1000, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Pulse Cache Driver + |-------------------------------------------------------------------------- + | + | This configuration option determines the cache driver that will be used + | for various tasks, including caching dashboard results, establishing + | locks for events that should only occur on one server and signals. + | + */ + + 'cache' => env('PULSE_CACHE_DRIVER'), + + /* + |-------------------------------------------------------------------------- + | Pulse Route Middleware + |-------------------------------------------------------------------------- + | + | These middleware will be assigned to every Pulse route, giving you the + | chance to add your own middleware to this list or change any of the + | existing middleware. Of course, reasonable defaults are provided. + | + */ + + 'middleware' => [ + 'web', + Authorize::class, + ], + + /* + |-------------------------------------------------------------------------- + | Pulse Recorders + |-------------------------------------------------------------------------- + | + | The following array lists the "recorders" that will be registered with + | Pulse, along with their configuration. Recorders gather application + | event data from requests and tasks to pass to your ingest driver. + | + */ + + 'recorders' => [ + Recorders\CacheInteractions::class => [ + 'enabled' => env('PULSE_CACHE_INTERACTIONS_ENABLED', true), + 'sample_rate' => env('PULSE_CACHE_INTERACTIONS_SAMPLE_RATE', 1), + 'ignore' => [ + ...Pulse::defaultVendorCacheKeys(), + ], + 'groups' => [ + '/^job-exceptions:.*/' => 'job-exceptions:*', + // '/:\d+/' => ':*', + ], + ], + + Recorders\Exceptions::class => [ + 'enabled' => env('PULSE_EXCEPTIONS_ENABLED', true), + 'sample_rate' => env('PULSE_EXCEPTIONS_SAMPLE_RATE', 1), + 'location' => env('PULSE_EXCEPTIONS_LOCATION', true), + 'ignore' => [ + // '/^Package\\\\Exceptions\\\\/', + ], + ], + + Recorders\Queues::class => [ + 'enabled' => env('PULSE_QUEUES_ENABLED', true), + 'sample_rate' => env('PULSE_QUEUES_SAMPLE_RATE', 1), + 'ignore' => [ + // '/^Package\\\\Jobs\\\\/', + ], + ], + + Recorders\Servers::class => [ + 'server_name' => env('PULSE_SERVER_NAME', gethostname()), + 'directories' => explode(':', env('PULSE_SERVER_DIRECTORIES', '/')), + ], + + Recorders\SlowJobs::class => [ + 'enabled' => env('PULSE_SLOW_JOBS_ENABLED', true), + 'sample_rate' => env('PULSE_SLOW_JOBS_SAMPLE_RATE', 1), + 'threshold' => env('PULSE_SLOW_JOBS_THRESHOLD', 1000), + 'ignore' => [ + // '/^Package\\\\Jobs\\\\/', + ], + ], + + Recorders\SlowOutgoingRequests::class => [ + 'enabled' => env('PULSE_SLOW_OUTGOING_REQUESTS_ENABLED', true), + 'sample_rate' => env('PULSE_SLOW_OUTGOING_REQUESTS_SAMPLE_RATE', 1), + 'threshold' => env('PULSE_SLOW_OUTGOING_REQUESTS_THRESHOLD', 1000), + 'ignore' => [ + // '#^http://127\.0\.0\.1:13714#', // Inertia SSR... + ], + 'groups' => [ + // '#^https://api\.github\.com/repos/.*$#' => 'api.github.com/repos/*', + // '#^https?://([^/]*).*$#' => '\1', + // '#/\d+#' => '/*', + ], + ], + + Recorders\SlowQueries::class => [ + 'enabled' => env('PULSE_SLOW_QUERIES_ENABLED', true), + 'sample_rate' => env('PULSE_SLOW_QUERIES_SAMPLE_RATE', 1), + 'threshold' => env('PULSE_SLOW_QUERIES_THRESHOLD', 1000), + 'location' => env('PULSE_SLOW_QUERIES_LOCATION', true), + 'highlighting' => env('PULSE_SLOW_QUERIES_HIGHLIGHTING', true), + 'max_query_length' => env('PULSE_SLOW_QUERIES_MAX_QUERY_LENGTH', null), + 'ignore' => [ + '/(["`])pulse_[\w]+?\1/', // Pulse tables... + '/(["`])telescope_[\w]+?\1/', // Telescope tables... + ], + ], + + Recorders\SlowRequests::class => [ + 'enabled' => env('PULSE_SLOW_REQUESTS_ENABLED', true), + 'sample_rate' => env('PULSE_SLOW_REQUESTS_SAMPLE_RATE', 1), + 'threshold' => env('PULSE_SLOW_REQUESTS_THRESHOLD', 1000), + 'ignore' => [ + '#^/pulse$#', // Pulse dashboard... + '#^/telescope#', // Telescope dashboard... + ], + ], + + Recorders\UserJobs::class => [ + 'enabled' => env('PULSE_USER_JOBS_ENABLED', true), + 'sample_rate' => env('PULSE_USER_JOBS_SAMPLE_RATE', 1), + 'ignore' => [ + // '/^Package\\\\Jobs\\\\/', + ], + ], + + Recorders\UserRequests::class => [ + 'enabled' => env('PULSE_USER_REQUESTS_ENABLED', true), + 'sample_rate' => env('PULSE_USER_REQUESTS_SAMPLE_RATE', 1), + 'ignore' => [ + '#^/pulse$#', // Pulse dashboard... + '#^/telescope#', // Telescope dashboard... + ], + ], + ], +]; diff --git a/database/migrations/2023_06_07_000001_create_pulse_tables.php b/database/migrations/2023_06_07_000001_create_pulse_tables.php new file mode 100644 index 00000000..f75b51e4 --- /dev/null +++ b/database/migrations/2023_06_07_000001_create_pulse_tables.php @@ -0,0 +1,84 @@ +shouldRun()) { + return; + } + + Schema::create('pulse_values', function (Blueprint $table) { + $table->id(); + $table->unsignedInteger('timestamp'); + $table->string('type'); + $table->mediumText('key'); + match ($this->driver()) { + 'mysql' => $table->char('key_hash', 16)->charset('binary')->virtualAs('unhex(md5(`key`))'), + 'pgsql' => $table->uuid('key_hash')->storedAs('md5("key")::uuid'), + 'sqlite' => $table->string('key_hash'), + }; + $table->mediumText('value'); + + $table->index('timestamp'); // For trimming... + $table->index('type'); // For fast lookups and purging... + $table->unique(['type', 'key_hash']); // For data integrity and upserts... + }); + + Schema::create('pulse_entries', function (Blueprint $table) { + $table->id(); + $table->unsignedInteger('timestamp'); + $table->string('type'); + $table->mediumText('key'); + match ($this->driver()) { + 'mysql' => $table->char('key_hash', 16)->charset('binary')->virtualAs('unhex(md5(`key`))'), + 'pgsql' => $table->uuid('key_hash')->storedAs('md5("key")::uuid'), + 'sqlite' => $table->string('key_hash'), + }; + $table->bigInteger('value')->nullable(); + + $table->index('timestamp'); // For trimming... + $table->index('type'); // For purging... + $table->index('key_hash'); // For mapping... + $table->index(['timestamp', 'type', 'key_hash', 'value']); // For aggregate queries... + }); + + Schema::create('pulse_aggregates', function (Blueprint $table) { + $table->id(); + $table->unsignedInteger('bucket'); + $table->unsignedMediumInteger('period'); + $table->string('type'); + $table->mediumText('key'); + match ($this->driver()) { + 'mysql' => $table->char('key_hash', 16)->charset('binary')->virtualAs('unhex(md5(`key`))'), + 'pgsql' => $table->uuid('key_hash')->storedAs('md5("key")::uuid'), + 'sqlite' => $table->string('key_hash'), + }; + $table->string('aggregate'); + $table->decimal('value', 20, 2); + $table->unsignedInteger('count')->nullable(); + + $table->unique(['bucket', 'period', 'type', 'aggregate', 'key_hash']); // Force "on duplicate update"... + $table->index(['period', 'bucket']); // For trimming... + $table->index('type'); // For purging... + $table->index(['period', 'type', 'aggregate', 'bucket']); // For aggregate queries... + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('pulse_values'); + Schema::dropIfExists('pulse_entries'); + Schema::dropIfExists('pulse_aggregates'); + } +}; From 7accc9b38911f81e92dc2cfd7f7ce0415b01db47 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Sun, 16 Feb 2025 15:32:17 +0330 Subject: [PATCH 39/43] create job for road observed problems --- .../SendRoadObservationToNikarayanCommand.php | 45 ++++++ .../V3/Dashboard/ReceiptController.php | 131 ++++++++++++++++++ .../Dashboard/RoadPatrolProjectController.php | 7 +- .../V3/RoadPatrolProject/StoreRequest.php | 1 - app/Jobs/SendRoadObservationToNikarayan.php | 50 +++++++ config/logging.php | 6 + .../2025_02_16_111413_create_jobs_table.php | 32 +++++ ...632_add_column_to_edarate_ostani_table.php | 28 ++++ 8 files changed, 298 insertions(+), 2 deletions(-) create mode 100644 app/Console/Commands/SendRoadObservationToNikarayanCommand.php create mode 100644 app/Http/Controllers/V3/Dashboard/ReceiptController.php create mode 100644 app/Jobs/SendRoadObservationToNikarayan.php create mode 100644 database/migrations/2025_02_16_111413_create_jobs_table.php create mode 100644 database/migrations/2025_02_16_152632_add_column_to_edarate_ostani_table.php diff --git a/app/Console/Commands/SendRoadObservationToNikarayanCommand.php b/app/Console/Commands/SendRoadObservationToNikarayanCommand.php new file mode 100644 index 00000000..6dc285f1 --- /dev/null +++ b/app/Console/Commands/SendRoadObservationToNikarayanCommand.php @@ -0,0 +1,45 @@ +info("Dispatching jobs with 2 seconds delay between each..."); + + RoadObserved::query() + ->whereBetween('StartTime_DateTime_fa', ['1403-01-01 00:00:00', '1403-07-14 23:59:59']) + ->chunk(50, function ($roads) { + foreach ($roads as $road) { + SendRoadObservationToNikarayan::dispatch($road)->delay(now()->addSeconds(2)); + Log::channel('road_observation_problem')->info("Job for Road Observed ID {$road->id} scheduled with 2 seconds delay."); + $this->info("Scheduled job for Road ID: {$road->id} (Delay: 2s)"); + } + }); + + $this->info("all item's sent successfully"); + } +} diff --git a/app/Http/Controllers/V3/Dashboard/ReceiptController.php b/app/Http/Controllers/V3/Dashboard/ReceiptController.php new file mode 100644 index 00000000..0e9ad4dd --- /dev/null +++ b/app/Http/Controllers/V3/Dashboard/ReceiptController.php @@ -0,0 +1,131 @@ +user(); + $query = null; + + if ($user->hasPermissionTo('show-receipt')) { + $query = Accident::with('damages'); + } else { + if (is_null($user->province_id)) { + return $this->errorResponse('استانی برای شما در سامانه ثبت نشده است!'); + } + + $query = Accident::with('damages')->where('province_id', '=', $user->province_id); + } + + $data = DataTableFacade::run( + $query, + $request, + allowedFilters: $allowedFilters, + allowedSortings: $allowedSortings + ); + + + $user->addActivityComplete(1122); + + return $this->successResponse($data); + } + + public function store(Request $request, NominatimService $nominatimService) + { + DB::transaction(function () use ($request, $nominatimService) { + + $province = Province::query()->where('id', '=', $request->province_id)->first(); + $city = City::query()->where('id', '=', $request->city_id)->first(); + + $accident = [ + 'province_id' => $province->id, + 'province_fa' => $province->name_fa, + 'city_id' => $city->id, + 'city_fa' => $city->name_fa, + 'axis_name' => $request->axis_name, + 'driver_name' => $request->driver_name, + 'plaque' => $request->plaque, + 'driver_national_code' => $request->driver_national_code, + 'driver_phone_number' => $request->driver_phone_number, + 'user_id' => auth()->user()->id, + 'lat' => $request->lat, + 'lng' => $request->lng, + 'accident_type' => $request->accident_type, + 'accident_date' => $request->accident_date, + 'accident_time' => $request->accident_time, + 'accident_type_fa' => DailyAccidentSettings::where('type', 'accident_type')->where('name', $request->accident_type)->first()->value, + 'way_id' => $nominatimService->get_way_id_from_nominatim($request->lat, $request->lng), + ]; + + if ($request->report_base) { + $accident['report_base'] = 1; + } else { + $accident['police_file'] = $request->file('police_file')->storeAs('receipts_files/'.$accident->id, 'police_file_'.$accident->id.'_'.time().'.'.$request->file('police_file')->extension(), 'public'); + $accident['police_serial'] = $request->police_serial; + $accident['police_file_date'] = $request->police_file_date; + $accident['report_base'] = 0; + } + + if ($request->has('damage_picture1')) { + $new_accident->damage_picture1 = $request->file('damage_picture1')->storeAs('receipts_files/'.$new_accident->id, 'damage_picture1_'.$new_accident->id.'_'.time().'.'.$request->file('damage_picture1')->extension(), 'public'); + } + + if ($request->has('damage_picture2')) { + $new_accident->damage_picture2 = $request->file('damage_picture2')->storeAs('receipts_files/'.$new_accident->id, 'damage_picture2_'.$new_accident->id.'_'.time().'.'.$request->file('damage_picture2')->extension(), 'public'); + } + + $new_accident->save(); + $sum = 0; + foreach (json_decode($request->items_damge) as $key => $item) { + $damage = Damage::find($item->id); + $new_accident->damages()->attach($item->id, [ + 'value' => $item->value, + 'unit' => $damage->unit, + 'amount' => $item->amount, + ]); + $sum += $item->amount; + } + + $ojrate_nasb = $sum/100*20; + $new_accident->ojrate_nasb = $ojrate_nasb; + + $sum += $ojrate_nasb; + $new_accident->sum = $sum; + $new_accident->withoutAction(); + $new_accident->save(); + $msg = "درخواست شما بابت پرداخت خسارت وارده به ابنیه فنی و تاسیسات راه با کد یکتا ".$new_accident->id." ثبت شد.\n".verta()->now()->format('Y/m/d H:i') ; + Sms::sendSms($request->phone_number, $msg); + auth()->user()->addActivityComplete(1123); + }); + } +} diff --git a/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php b/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php index c33888c3..6056a563 100644 --- a/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php +++ b/app/Http/Controllers/V3/Dashboard/RoadPatrolProjectController.php @@ -155,8 +155,13 @@ class RoadPatrolProjectController extends Controller $item_end_coordinates = null; if ($item['instant_action'] == 0) { + $priority = [ + 1 => 'عادی', + 2 => 'فوری', + 3 => 'آنی', + ]; $observed_item->priority = $item['priority']; - $observed_item->priority_fa = $item['priority_fa']; + $observed_item->priority_fa = $priority[$item['priority']]; $observed_item->save(); } elseif ($item['instant_action'] == 1) { if ($info_item->needs_end_point) { diff --git a/app/Http/Requests/V3/RoadPatrolProject/StoreRequest.php b/app/Http/Requests/V3/RoadPatrolProject/StoreRequest.php index d75d82db..5b82d689 100644 --- a/app/Http/Requests/V3/RoadPatrolProject/StoreRequest.php +++ b/app/Http/Requests/V3/RoadPatrolProject/StoreRequest.php @@ -49,7 +49,6 @@ class StoreRequest extends FormRequest 'observed_items.*.before_image' => 'image|max:4096', 'observed_items.*.after_image' => 'image|max:4096', 'observed_items.*.priority' => 'integer|in:1,2,3|required_if:observed_items.*.instant_action,0', - 'observed_items.*.priority_fa' => 'string|required_if:observed_items.*.instant_action,0', 'description' => 'string', 'observed_items.*.road_item_machines_id' => 'required_if:observed_items.*.instant_action,1|array', diff --git a/app/Jobs/SendRoadObservationToNikarayan.php b/app/Jobs/SendRoadObservationToNikarayan.php new file mode 100644 index 00000000..ffb21eab --- /dev/null +++ b/app/Jobs/SendRoadObservationToNikarayan.php @@ -0,0 +1,50 @@ + 'vaytelrop', + 'strPassword' => 'VaYtelROP*2024', + 'strAutoID' => $this->roadObserved->fk_RegisteredEventMessage, + 'strStateID' => '2', + 'strDescription' => 'گزارشات تایید شده از تاریخ 1 فروردین 1403 تا 14 مهر 1403', + 'strRMSDateAndTime' => $this->roadObserved->updated_at + ); + + $soapClient = new SoapClient($url); + + $soapClient->UpdateInfo_RoadObservedProblems($array); + } + catch (\Exception $exception){ + Log::channel('road_observation_problem')->error($exception->getMessage(), [ + 'roadObserved' => $this->roadObserved, + ]); + } + } +} diff --git a/config/logging.php b/config/logging.php index 4dd0cf49..72cb7076 100644 --- a/config/logging.php +++ b/config/logging.php @@ -111,6 +111,12 @@ return [ 'path' => storage_path('logs/fms/vehicle_activity_service.log'), 'level' => 'info', ], + + 'road_observation_problem' => [ + 'driver' => 'single', + 'path' => storage_path('logs/road_observation_problem.log'), + 'level' => 'info', + ], ], ]; diff --git a/database/migrations/2025_02_16_111413_create_jobs_table.php b/database/migrations/2025_02_16_111413_create_jobs_table.php new file mode 100644 index 00000000..6098d9b1 --- /dev/null +++ b/database/migrations/2025_02_16_111413_create_jobs_table.php @@ -0,0 +1,32 @@ +bigIncrements('id'); + $table->string('queue')->index(); + $table->longText('payload'); + $table->unsignedTinyInteger('attempts'); + $table->unsignedInteger('reserved_at')->nullable(); + $table->unsignedInteger('available_at'); + $table->unsignedInteger('created_at'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('jobs'); + } +}; diff --git a/database/migrations/2025_02_16_152632_add_column_to_edarate_ostani_table.php b/database/migrations/2025_02_16_152632_add_column_to_edarate_ostani_table.php new file mode 100644 index 00000000..f7e6bc91 --- /dev/null +++ b/database/migrations/2025_02_16_152632_add_column_to_edarate_ostani_table.php @@ -0,0 +1,28 @@ +text('sub_items_for_confirm')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('edarate_ostani', function (Blueprint $table) { + $table->dropColumn('sub_items_for_confirm'); + }); + } +}; From ac0640ee88751c5b67c8243c290edcb4ff17a965 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Mon, 17 Feb 2025 09:14:16 +0330 Subject: [PATCH 40/43] create failed jobs migration --- ..._02_16_161240_create_failed_jobs_table.php | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 database/migrations/2025_02_16_161240_create_failed_jobs_table.php diff --git a/database/migrations/2025_02_16_161240_create_failed_jobs_table.php b/database/migrations/2025_02_16_161240_create_failed_jobs_table.php new file mode 100644 index 00000000..249da817 --- /dev/null +++ b/database/migrations/2025_02_16_161240_create_failed_jobs_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('uuid')->unique(); + $table->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('failed_jobs'); + } +}; From fb5233144f15c5aba4595ff4cf6b58ae060ea155 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Mon, 17 Feb 2025 09:25:25 +0330 Subject: [PATCH 41/43] update status --- app/Console/Commands/SendRoadObservationToNikarayanCommand.php | 1 + 1 file changed, 1 insertion(+) diff --git a/app/Console/Commands/SendRoadObservationToNikarayanCommand.php b/app/Console/Commands/SendRoadObservationToNikarayanCommand.php index 6dc285f1..f7c2130c 100644 --- a/app/Console/Commands/SendRoadObservationToNikarayanCommand.php +++ b/app/Console/Commands/SendRoadObservationToNikarayanCommand.php @@ -34,6 +34,7 @@ class SendRoadObservationToNikarayanCommand extends Command ->whereBetween('StartTime_DateTime_fa', ['1403-01-01 00:00:00', '1403-07-14 23:59:59']) ->chunk(50, function ($roads) { foreach ($roads as $road) { + $road->update(['rms_status' => 1]); SendRoadObservationToNikarayan::dispatch($road)->delay(now()->addSeconds(2)); Log::channel('road_observation_problem')->info("Job for Road Observed ID {$road->id} scheduled with 2 seconds delay."); $this->info("Scheduled job for Road ID: {$road->id} (Delay: 2s)"); From edee575b56e21fa2e55494abaf9d0e1cb5529f34 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Mon, 17 Feb 2025 10:51:46 +0330 Subject: [PATCH 42/43] update the job --- .../SendRoadObservationToNikarayanCommand.php | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/app/Console/Commands/SendRoadObservationToNikarayanCommand.php b/app/Console/Commands/SendRoadObservationToNikarayanCommand.php index f7c2130c..1fb1759a 100644 --- a/app/Console/Commands/SendRoadObservationToNikarayanCommand.php +++ b/app/Console/Commands/SendRoadObservationToNikarayanCommand.php @@ -5,6 +5,7 @@ namespace App\Console\Commands; use App\Jobs\SendRoadObservationToNikarayan; use App\Models\RoadObserved; use Illuminate\Console\Command; +use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Log; class SendRoadObservationToNikarayanCommand extends Command @@ -28,19 +29,26 @@ class SendRoadObservationToNikarayanCommand extends Command */ public function handle(): void { - $this->info("Dispatching jobs with 2 seconds delay between each..."); + $count = 0; + $this->info("Dispatching jobs with a delay between each..."); - RoadObserved::query() - ->whereBetween('StartTime_DateTime_fa', ['1403-01-01 00:00:00', '1403-07-14 23:59:59']) - ->chunk(50, function ($roads) { - foreach ($roads as $road) { - $road->update(['rms_status' => 1]); - SendRoadObservationToNikarayan::dispatch($road)->delay(now()->addSeconds(2)); - Log::channel('road_observation_problem')->info("Job for Road Observed ID {$road->id} scheduled with 2 seconds delay."); - $this->info("Scheduled job for Road ID: {$road->id} (Delay: 2s)"); - } - }); + DB::transaction(function () use ($count) { + $delay = 0; + RoadObserved::query() + ->whereBetween('StartTime_DateTime_fa', ['1403-01-01 00:00:00', '1403-07-13 23:59:59']) + ->where('rms_status', '=', 0) + ->chunk(50, function ($roads) use ($delay, $count) { + foreach ($roads as $road) { + $road->update(['rms_status' => 1]); + SendRoadObservationToNikarayan::dispatch($road)->delay(now()->addMinutes(10)->addSeconds($delay)); + Log::channel('road_observation_problem')->info("Job for Road Observed ID {$road->id} scheduled with a {$delay} seconds delay."); + $this->info("Scheduled job for Road ID: {$road->id} {$delay}s"); + $delay += 3; + $count +=1; + } + }); + }); - $this->info("all item's sent successfully"); + $this->info("{$count} item's sent successfully"); } } From 6b6b2a343bc519848b9ce3313cc591e27220a4b0 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Mon, 17 Feb 2025 13:07:15 +0330 Subject: [PATCH 43/43] chunk by id --- app/Console/Commands/SendRoadObservationToNikarayanCommand.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Console/Commands/SendRoadObservationToNikarayanCommand.php b/app/Console/Commands/SendRoadObservationToNikarayanCommand.php index 1fb1759a..224c0acd 100644 --- a/app/Console/Commands/SendRoadObservationToNikarayanCommand.php +++ b/app/Console/Commands/SendRoadObservationToNikarayanCommand.php @@ -37,7 +37,7 @@ class SendRoadObservationToNikarayanCommand extends Command RoadObserved::query() ->whereBetween('StartTime_DateTime_fa', ['1403-01-01 00:00:00', '1403-07-13 23:59:59']) ->where('rms_status', '=', 0) - ->chunk(50, function ($roads) use ($delay, $count) { + ->chunkById(50, function ($roads) use ($delay, $count) { foreach ($roads as $road) { $road->update(['rms_status' => 1]); SendRoadObservationToNikarayan::dispatch($road)->delay(now()->addMinutes(10)->addSeconds($delay));