diff --git a/app/Exports/V3/Mission/Report/Tradod/CountryReport.php b/app/Exports/V3/Mission/Report/Tradod/CountryReport.php index 69e2b66d..b63d606a 100644 --- a/app/Exports/V3/Mission/Report/Tradod/CountryReport.php +++ b/app/Exports/V3/Mission/Report/Tradod/CountryReport.php @@ -29,9 +29,9 @@ class CountryReport implements FromView, ShouldAutoSize, WithDrawings, WithEvent $national = [ 'province_name' => $name, 'total' => (int) ($r->total ?? 0), - 'khareg_mahdode' => (int) ($r->khareg_mahdode ?? 0), 'gps' => (int) ($r->gps ?? 0), 'durations' => (int) ($r->durations ?? 0), + 'khareg_mahdode' => (int) ($r->khareg_mahdode ?? 0), 'bafarayand_saeti' => (int) ($r->far_h ?? 0), 'bafarayand_rozaneh' => (int) ($r->far_d ?? 0), 'bedon_bafarayand_saeti' => (int) ($r->un_far_h ?? 0), @@ -50,9 +50,9 @@ class CountryReport implements FromView, ShouldAutoSize, WithDrawings, WithEvent } $grid[$pid]['total'] = (int) ($r->total ?? 0); - $grid[$pid]['khareg_mahdode'] = ($r->khareg_mahdode ?? 0); $grid[$pid]['gps'] = (int) ($r->gps ?? 0); $grid[$pid]['durations'] = (int) ($r->durations ?? 0); + $grid[$pid]['khareg_mahdode'] = ($r->khareg_mahdode ?? 0); $grid[$pid]['bafarayand_saeti'] = (int) ($r->far_h ?? 0); $grid[$pid]['bafarayand_rozaneh'] = (int) ($r->far_d ?? 0); $grid[$pid]['bedon_bafarayand_saeti'] = (int) ($r->un_far_h ?? 0); diff --git a/app/Exports/V3/Mission/Report/Tradod/ProvinceReport.php b/app/Exports/V3/Mission/Report/Tradod/ProvinceReport.php index 28e31bd0..bf59db39 100644 --- a/app/Exports/V3/Mission/Report/Tradod/ProvinceReport.php +++ b/app/Exports/V3/Mission/Report/Tradod/ProvinceReport.php @@ -30,9 +30,9 @@ class ProvinceReport implements FromView, ShouldAutoSize, WithDrawings, WithEven $province = [ 'city_name' => $name, 'total' => (int) ($r->total ?? 0), - 'khareg_mahdode' => (int) ($r->khareg_mahdode ?? 0), 'gps' => (int) ($r->gps ?? 0), 'durations' => (int) ($r->durations ?? 0), + 'khareg_mahdode' => (int) ($r->khareg_mahdode ?? 0), 'bafarayand_saeti' => (int) ($r->far_h ?? 0), 'bafarayand_rozaneh' => (int) ($r->far_d ?? 0), 'bedon_bafarayand_saeti' => (int) ($r->un_far_h ?? 0), @@ -51,9 +51,9 @@ class ProvinceReport implements FromView, ShouldAutoSize, WithDrawings, WithEven } $grid[$cid]['total'] = (int) ($r->total ?? 0); - $grid[$cid]['khareg_mahdode'] = ($r->khareg_mahdode ?? 0); $grid[$cid]['gps'] = (int) ($r->gps ?? 0); $grid[$cid]['durations'] = (int) ($r->durations ?? 0); + $grid[$cid]['khareg_mahdode'] = ($r->khareg_mahdode ?? 0); $grid[$cid]['bafarayand_saeti'] = (int) ($r->far_h ?? 0); $grid[$cid]['bafarayand_rozaneh'] = (int) ($r->far_d ?? 0); $grid[$cid]['bedon_bafarayand_saeti'] = (int) ($r->un_far_h ?? 0); diff --git a/app/Exports/V3/Mission/Report/machine/machineReport.php b/app/Exports/V3/Mission/Report/machine/machineReport.php new file mode 100644 index 00000000..8f110c9f --- /dev/null +++ b/app/Exports/V3/Mission/Report/machine/machineReport.php @@ -0,0 +1,73 @@ +data as $r) { + $exportRows[] = [ + 'city_name' => $r->c_name ?? '', + 'province_name' => $r->p_name ?? '', + 'm_c_code' => $r->m_c_code ?? 0, + 'distance' => (int) ($r->distance ?? 0), + ]; + } + + return view('v3.Reports.Mission.Report.Machine.ActivityReport', [ + '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('C1'); + + return [$drawing, $drawing2]; + } +} diff --git a/app/Http/Controllers/V3/Dashboard/Mission/Report/ReportMachineController.php b/app/Http/Controllers/V3/Dashboard/Mission/Report/ReportMachineController.php new file mode 100644 index 00000000..34e32a34 --- /dev/null +++ b/app/Http/Controllers/V3/Dashboard/Mission/Report/ReportMachineController.php @@ -0,0 +1,47 @@ +successResponse([ + 'activities' => $reportMachineService->Activity($request), + 'provinces' => Province::all(['id', 'name_fa']), + 'code' => Mission::query() + ->where('machine_code', $request->machine_code) + ->get() + ]); + } + + /** + * @throws Exception + * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception + */ + public function ExcelActivity(Request $request, ReportMachineService $reportMachineService): BinaryFileResponse + { + $data = $reportMachineService->Activity($request); + $name = 'گزارش کل تردد یک ماشین '.verta()->now()->format('Y-m-d H-i').'.xlsx'; + + return Excel::download(new CountryReport($data), $name); + } + +} diff --git a/app/Http/Requests/V3/Mission/ControlUnit/FinishRequest.php b/app/Http/Requests/V3/Mission/ControlUnit/FinishRequest.php index bbc1d5b0..6fe0a2fe 100644 --- a/app/Http/Requests/V3/Mission/ControlUnit/FinishRequest.php +++ b/app/Http/Requests/V3/Mission/ControlUnit/FinishRequest.php @@ -5,6 +5,7 @@ namespace App\Http\Requests\V3\Mission\ControlUnit; use App\Enums\MissionStates; use Illuminate\Contracts\Validation\ValidationRule; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Validator; class FinishRequest extends FormRequest { @@ -23,9 +24,31 @@ class FinishRequest extends FormRequest */ public function rules(): array { + $mission = $this->route('mission'); return [ 'time' => 'required|date', 'end_km' => 'required', ]; } + + public function after(): array + { + return [ + function (Validator $validator) { + $mission = $this->route('mission'); + if (strtotime($this->time) < strtotime($mission->start_time)) { + $validator->errors()->add( + 'time', + 'زمان پایان ماموریت باید بعد از زمان شروع ماموریت باشد.' + ); + } + if ($this->end_km < $mission->km) { + $validator->errors()->add( + 'end_km', + 'کیلومتر پایان باید بزرگتر از کیلومتر شروع باشد.' + ); + } + } + ]; + } } diff --git a/app/Services/Cartables/Mission/Report/ReportMachineService.php b/app/Services/Cartables/Mission/Report/ReportMachineService.php new file mode 100644 index 00000000..f34ceb4a --- /dev/null +++ b/app/Services/Cartables/Mission/Report/ReportMachineService.php @@ -0,0 +1,43 @@ +machine_code; + $from = $request->from_date ?? today()->startOfDay(); + $to = $request->date_to ? Carbon::parse($request->date_to)->endOfDay() : today()->endOfDay(); + + $sql = " + SELECT* + m.city_name AS c.name, + m.city_id AS c_id, + m.province_name AS p_name, + m.province_id AS p_id, + COUNT(m.machine_code) As m_c_code, + SUM(m.end_km)-sum(m.km) AS distance + + FROM missions m + WHERE m.machine_code = :machineCode + AND m.created_at >= :from + AND m.created_at <= :to + GROUP BY m.city_id, m.city_name,m.province_id, m.province_name; + + + "; + + return DB::select($sql, [ + 'from' => $from, + 'to' => $to, + 'machineCode' => $code, + ]); + } +} diff --git a/resources/views/v3/Reports/Mission/Report/Machine/ActivityReport.blade.php b/resources/views/v3/Reports/Mission/Report/Machine/ActivityReport.blade.php new file mode 100644 index 00000000..ef5c1de1 --- /dev/null +++ b/resources/views/v3/Reports/Mission/Report/Machine/ActivityReport.blade.php @@ -0,0 +1,79 @@ + + + + + + + + گزارش کل تردد های یک ماشین + + + + + +@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 + + + + + + + + + + + + + + + + + + + + + + + @foreach ($rows as $item) + + + + + + + + @endforeach + +
+ تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }} +
+
+ گزارش ماشین های ماموریت رفته +
+ استان + + شهر + + تعداد ماموریت + جمع مسافت طی شده +
{{ $item['province_name'] ?? '-' }}{{ $item['city_name'] ?? '-' }}{{ $item['c_m_code'] ?? '-' }}{{ $item['distance'] ?? '-' }}
+ + diff --git a/resources/views/v3/Reports/Mission/Report/Tradod /CountryActivityReport.blade.php b/resources/views/v3/Reports/Mission/Report/Tradod /CountryActivityReport.blade.php index 15edd38a..0fae970f 100644 --- a/resources/views/v3/Reports/Mission/Report/Tradod /CountryActivityReport.blade.php +++ b/resources/views/v3/Reports/Mission/Report/Tradod /CountryActivityReport.blade.php @@ -93,9 +93,9 @@ {{ $item['province_name'] ?? '-' }} {{ $item['total'] ?? '-' }} - {{ $item['khareg_mahdode'] ?? '-' }} {{ $item['gps'] ?? '-' }} {{ $item['durations'] ?? '-' }} + {{ $item['khareg_mahdode'] ?? '-' }} {{ $item['bafarayand_saeti'] ?? '-' }} {{ $item['bafarayand_rozaneh'] ?? '-' }} {{ $item['bedon_bafarayand_saeti'] ?? '-' }} diff --git a/resources/views/v3/Reports/Mission/Report/Tradod /ProvinceActivityReport.blade.php b/resources/views/v3/Reports/Mission/Report/Tradod /ProvinceActivityReport.blade.php index 8d46c155..04c29850 100644 --- a/resources/views/v3/Reports/Mission/Report/Tradod /ProvinceActivityReport.blade.php +++ b/resources/views/v3/Reports/Mission/Report/Tradod /ProvinceActivityReport.blade.php @@ -93,9 +93,9 @@ {{ $item['city_name'] ?? '-' }} {{ $item['total'] ?? '-' }} - {{ $item['khareg_mahdode'] ?? '-' }} {{ $item['gps'] ?? '-' }} {{ $item['durations'] ?? '-' }} + {{ $item['khareg_mahdode'] ?? '-' }} {{ $item['bafarayand_saeti'] ?? '-' }} {{ $item['bafarayand_rozaneh'] ?? '-' }} {{ $item['bedon_bafarayand_saeti'] ?? '-' }} diff --git a/routes/v3.php b/routes/v3.php index 960772f9..8d1e61ca 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -666,6 +666,5 @@ Route::prefix('role') Route::get('/test', function () { $csvExporter = new \Laracsv\Export(); - $csvExporter->build(\App\Models\User::all(), ['id' => 'کد یکتا', 'username' => 'نام کاربری'])->download(); }); \ No newline at end of file