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..5d11323a --- /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 ?? '', + 'missions' => $r->missions ?? 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('D1'); + + return [$drawing, $drawing2]; + } +} 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/Http/Controllers/V3/Dashboard/Mission/Report/ReportMachineController.php b/app/Http/Controllers/V3/Dashboard/Mission/Report/ReportMachineController.php new file mode 100644 index 00000000..eb8f0b6f --- /dev/null +++ b/app/Http/Controllers/V3/Dashboard/Mission/Report/ReportMachineController.php @@ -0,0 +1,40 @@ +successResponse([ + 'activities' => $reportMachineService->activity($request), + 'provinces' => Province::all(['id', 'name_fa']), + ]); + } + + /** + * @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 machineReport($data), $name); + } + +} diff --git a/app/Http/Requests/V3/Mission/ControlUnit/FinishRequest.php b/app/Http/Requests/V3/Mission/ControlUnit/FinishRequest.php index bbc1d5b0..b62c5124 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 { @@ -28,4 +29,25 @@ class FinishRequest extends FormRequest 'end_km' => 'required', ]; } + + public function after(): array + { + return [ + function (Validator $validator) { + $mission = $this->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..b92a5f89 --- /dev/null +++ b/app/Services/Cartables/Mission/Report/ReportMachineService.php @@ -0,0 +1,40 @@ +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.id) As missions, + (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; + "; + + 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..a3ffc93b --- /dev/null +++ b/resources/views/v3/Reports/Mission/Report/Machine/ActivityReport.blade.php @@ -0,0 +1,78 @@ + + + +
+ + + +| + تاریخ دریافت گزارش: {{ verta()->now()->format('Y/m/d H:i') }} + | +|||
|---|---|---|---|
| + | +|||
| + گزارش ماشین های ماموریت رفته + | +|||
| + استان + | ++ شهر + | ++ تعداد ماموریت | ++ جمع کارکرد + | + +
| {{ $item['province_name'] ?? '-' }} | +{{ $item['city_name'] ?? '-' }} | +{{ $item['missions'] ?? '-' }} | +{{ $item['distance'] ?? '-' }} | +