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 @@ + + + + + + + + گزارش کل تردد های یک ماشین + + + + + +@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['missions'] ?? '-' }}{{ $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 8d1e61ca..61157a1b 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -15,6 +15,7 @@ use App\Http\Controllers\V3\Dashboard\Harim\TechnicalDeputyController; use App\Http\Controllers\V3\Dashboard\ItemsManagementController; use App\Http\Controllers\V3\Dashboard\Mission\ControlUnitController; use App\Http\Controllers\V3\Dashboard\Mission\DetailController; +use App\Http\Controllers\V3\Dashboard\Mission\Report\ReportMachineController; use App\Http\Controllers\V3\Dashboard\Mission\Report\ReportTradodController; use App\Http\Controllers\V3\Dashboard\Mission\Report\ReportViolationController; use App\Http\Controllers\V3\Dashboard\Mission\RequestPortalController; @@ -556,6 +557,14 @@ Route::prefix('missions') Route::get('/country_excel_activity', 'countryExcelActivity')->name('countryExcelActivity'); Route::get('/province_excel_activity', 'provinceExcelActivity')->name('provinceExcelActivity'); }); + Route::prefix('report_machine') + ->name('reportsMachine.') + ->middleware(['permission:mission-report-province|mission-report-country']) + ->controller(ReportMachineController::class) + ->group(function () { + Route::get('/activity', 'activity')->name('Activity'); + Route::get('/excel_activity', 'excelActivity')->name('ProvinceActivity'); + }); }); Route::prefix('harim')