diff --git a/app/Exports/V3/Mission/Violation/CountryReport.php b/app/Exports/V3/Mission/Violation/CountryReport.php
new file mode 100644
index 00000000..78604002
--- /dev/null
+++ b/app/Exports/V3/Mission/Violation/CountryReport.php
@@ -0,0 +1,90 @@
+data as $r) {
+ $pid = (int) $r->province_id;
+ $name = $r->province_name;
+
+ if ($pid === -1) {
+ $national = [
+ 'province_name' => $name,
+ 'no_mission_count' => (int) ($r->no_mission_count ?? 0),
+ 'out_of_area_count' => (int) ($r->out_of_area_count ?? 0),
+ ];
+ continue;
+ }
+
+
+ if (!isset($grid[$pid])) {
+ $grid[$pid] = [
+ 'province_name' => $name,
+ ];
+ }
+
+ $grid[$pid]['no_mission_count'] = (int) ($r->no_mission_count ?? 0);
+ $grid[$pid]['out_of_area_count'] = (int) ($r->out_of_area_count ?? 0);
+
+ }
+
+ $exportRows = [];
+ if ($national) $exportRows[] = $national;
+ foreach ($grid as $row) {
+ $exportRows[] = $row;
+ }
+
+ return view('v3.Reports.Mission.Violation.CountryActivityReport', [
+ 'rows' => $exportRows,
+ ]);
+ }
+
+ public function registerEvents(): array
+ {
+ return [
+ AfterSheet::class => function (AfterSheet $event) {
+ $event->sheet->getDelegate()->setRightToLeft(true);
+ },
+ ];
+ }
+
+ public function drawings(): array
+ {
+ $drawing = new Drawing();
+ $drawing->setName('Logo');
+ $drawing->setDescription('This is my logo');
+ $drawing->setPath(public_path('/dist/logo.png'));
+ $drawing->setWidth(50);
+ $drawing->setHeight(50);
+ $drawing->setOffsetX(5);
+ $drawing->setOffsetY(5);
+ $drawing->setCoordinates('A1');
+
+ $drawing2 = new Drawing();
+ $drawing2->setName('Logo');
+ $drawing2->setDescription('This is my logo');
+ $drawing2->setPath(public_path('/dist/141icon.png'));
+ $drawing2->setWidth(50);
+ $drawing2->setHeight(50);
+ $drawing2->setOffsetX(5);
+ $drawing2->setOffsetY(5);
+ $drawing2->setCoordinates('E1');
+ return [$drawing, $drawing2];
+ }
+}
diff --git a/app/Exports/V3/Mission/Violation/ProvinceReport.php b/app/Exports/V3/Mission/Violation/ProvinceReport.php
new file mode 100644
index 00000000..7b26540a
--- /dev/null
+++ b/app/Exports/V3/Mission/Violation/ProvinceReport.php
@@ -0,0 +1,99 @@
+data as $r) {
+ $pid = (int) $r->province_id;
+ $name = $r->city_name;
+
+ if ($pid === -1) {
+ $province = [
+ 'city_name' => $name,
+ 'no_mission_count' => (int) ($r->no_mission_count ?? 0),
+ 'out_of_area_count' => (int) ($r->out_of_area_count ?? 0),
+ ];
+ continue;
+ }
+
+
+ if (!isset($grid[$pid])) {
+ $grid[$pid] = [
+ 'city_name' => $name,
+ ];
+ }
+
+ $grid[$pid]['no_mission_count'] = (int) ($r->no_mission_count ?? 0);
+ $grid[$pid]['out_of_area_count'] = (int) ($r->out_of_area_count ?? 0);
+
+ }
+
+ $exportRows = [];
+ if ($province) $exportRows[] = $province;
+ foreach ($grid as $row) {
+ $exportRows[] = $row;
+ }
+
+
+ return view('v3.Reports.Mission.Violation.ProvinceActivityReport', [
+ 'rows' => $exportRows,
+ ]);
+ }
+
+ public function registerEvents(): array
+ {
+ return [
+ AfterSheet::class => function (AfterSheet $event) {
+ $event->sheet->getDelegate()->setRightToLeft(true);
+ },
+ ];
+ }
+
+ /**
+ * @throws Exception
+ */
+ 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('E1');
+ return [$drawing, $drawing2];
+ }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/V3/Dashboard/Mission/ReportController.php b/app/Http/Controllers/V3/Dashboard/Mission/ReportController.php
index 8b3e6dc4..c59f4022 100644
--- a/app/Http/Controllers/V3/Dashboard/Mission/ReportController.php
+++ b/app/Http/Controllers/V3/Dashboard/Mission/ReportController.php
@@ -2,6 +2,8 @@
namespace App\Http\Controllers\V3\Dashboard\Mission;
+use App\Exports\V3\Mission\Violation\CountryReport;
+use App\Exports\V3\Mission\Violation\ProvinceReport;
use App\Http\Controllers\Controller;
use App\Http\Traits\ApiResponse;
use App\Models\City;
@@ -9,6 +11,9 @@ use App\Models\Province;
use App\Services\Cartables\Mission\ReportService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
+use Maatwebsite\Excel\Facades\Excel;
+use PhpOffice\PhpSpreadsheet\Exception;
+use Symfony\Component\HttpFoundation\BinaryFileResponse;
class ReportController extends Controller
{
@@ -29,20 +34,28 @@ class ReportController extends Controller
'city' => City::query()->where('province_id', $request->province_id)->get(['id', 'name_fa']),
]);
}
-//
-// public function countryExcelActivity(Request $request, OperatorService $operatorService): BinaryFileResponse
-// {
-// $data = $operatorService->countryActivity($request);
-// $name = 'گزارش تخلفات ماموریت ها '.verta()->now()->format('Y-m-d H-i').'.xlsx';
-//
-// return Excel::download(new ExcelReport($data), $name);
-// }
-//
-// public function provinceExcelActivity(Request $request, OperatorService $operatorService): BinaryFileResponse
-// {
-// $data = $operatorService->provinceActivity($request);
-// $name = 'گزارش تخلفات ماموریت ها '.verta()->now()->format('Y-m-d H-i').'.xlsx';
-//
-// return Excel::download(new ProvinceExcelReport($data, $request), $name);
-// }
+
+ /**
+ * @throws Exception
+ * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
+ */
+ public function countryExcelActivity(Request $request, ReportService $reportService): BinaryFileResponse
+ {
+ $data = $reportService->countryActivity($request);
+ $name = 'گزارش تخلفات ماموریت ها '.verta()->now()->format('Y-m-d H-i').'.xlsx';
+
+ return Excel::download(new CountryReport($data), $name);
+ }
+
+ /**
+ * @throws Exception
+ * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
+ */
+ public function provinceExcelActivity(Request $request, ReportService $reportService): BinaryFileResponse
+ {
+ $data = $reportService->provinceActivity($request);
+ $name = 'گزارش تخلفات ماموریت ها '.verta()->now()->format('Y-m-d H-i').'.xlsx';
+
+ return Excel::download(new ProvinceReport($data), $name);
+ }
}
diff --git a/resources/views/v3/Reports/Mission/Violation/CountryActivityReport.blade.php b/resources/views/v3/Reports/Mission/Violation/CountryActivityReport.blade.php
new file mode 100644
index 00000000..57103985
--- /dev/null
+++ b/resources/views/v3/Reports/Mission/Violation/CountryActivityReport.blade.php
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+ گزارش کل کشور
+
+
+
+
+
+@php
+ // show a dot if key missing or value is 0/empty
+ function cell($row, $key) {
+ return array_key_exists($key, $row) ? ($row[$key] ?: '0') : '0';
+ }
+@endphp
+
+
+
+
+ |
+ تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }}
+ |
+
+
+ |
+ |
+
+
+ |
+ گزارش نخلف های صورت گرفته
+ |
+
+
+ |
+ کد یکتا
+ |
+
+خروج بدون ماموریت |
+
+
+ خارج از محدوده
+ |
+
+
+
+
+ @foreach ($data as $item)
+
+ | {{ $item['id'] ?? '-' }} |
+ {{ $item['no_mission_count'] ?? '-' }} |
+ {{ $item['out_of_area_count'] ?? '-' }} |
+
+ @endforeach
+
+
+
+
diff --git a/resources/views/v3/Reports/Mission/Violation/ProvinceActivityReport.blade.php b/resources/views/v3/Reports/Mission/Violation/ProvinceActivityReport.blade.php
new file mode 100644
index 00000000..78910a8c
--- /dev/null
+++ b/resources/views/v3/Reports/Mission/Violation/ProvinceActivityReport.blade.php
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+ گزارش ادارات شهرستان
+
+
+
+
+
+@php
+ // show a dot if key missing or value is 0/empty
+ function cell($row, $key) {
+ return array_key_exists($key, $row) ? ($row[$key] ?: '0') : '0';
+ }
+@endphp
+
+
+
+
+ |
+ تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }}
+ |
+
+
+ |
+ |
+
+
+ |
+ گزارش نخلف های صورت گرفته
+ |
+
+
+ |
+ کد یکتا
+ |
+
+خروج بدون ماموریت |
+
+
+ خارج از محدوده
+ |
+
+
+
+
+
+
+ @foreach ($data as $item)
+
+ | {{ $item['id'] ?? '-' }} |
+ {{ $item['no_mission_count'] ?? '-' }} |
+ {{ $item['out_of_area_count'] ?? '-' }} |
+
+ @endforeach
+
+
+
+