diff --git a/app/Exports/V3/Mission/Report/Machine/machineDriverReport.php b/app/Exports/V3/Mission/Report/Machine/machineDriverReport.php index 3bb74fdc..844bc084 100644 --- a/app/Exports/V3/Mission/Report/Machine/machineDriverReport.php +++ b/app/Exports/V3/Mission/Report/Machine/machineDriverReport.php @@ -65,7 +65,7 @@ class machineDriverReport implements FromView, ShouldAutoSize, WithDrawings, Wit $drawing2->setPath(public_path('/dist/141icon.png')); $drawing2->setWidth(50); $drawing2->setHeight(50); - $drawing2->setOffsetX(5); + $drawing2->setOffsetX(+90); $drawing2->setOffsetY(5); $drawing2->setCoordinates('D1'); diff --git a/app/Exports/V3/Mission/Report/Machine/machineReport.php b/app/Exports/V3/Mission/Report/Machine/machineReport.php index 538c294f..77a09fb1 100644 --- a/app/Exports/V3/Mission/Report/Machine/machineReport.php +++ b/app/Exports/V3/Mission/Report/Machine/machineReport.php @@ -66,7 +66,7 @@ class machineReport implements FromView, ShouldAutoSize, WithDrawings, WithEvent $drawing2->setPath(public_path('/dist/141icon.png')); $drawing2->setWidth(50); $drawing2->setHeight(50); - $drawing2->setOffsetX(5); + $drawing2->setOffsetX(+90); $drawing2->setOffsetY(5); $drawing2->setCoordinates('E1'); diff --git a/app/Exports/V3/Mission/Report/Machine/machineTypeReport.php b/app/Exports/V3/Mission/Report/Machine/machineTypeReport.php index d376871e..6e79eca9 100644 --- a/app/Exports/V3/Mission/Report/Machine/machineTypeReport.php +++ b/app/Exports/V3/Mission/Report/Machine/machineTypeReport.php @@ -64,7 +64,7 @@ class machineTypeReport implements FromView, ShouldAutoSize, WithDrawings, WithE $drawing2->setPath(public_path('/dist/141icon.png')); $drawing2->setWidth(50); $drawing2->setHeight(50); - $drawing2->setOffsetX(5); + $drawing2->setOffsetX(+90); $drawing2->setOffsetY(5); $drawing2->setCoordinates('C1'); diff --git a/app/Http/Controllers/V3/Dashboard/Mission/Report/ReportMachineController.php b/app/Http/Controllers/V3/Dashboard/Mission/Report/ReportMachineController.php index f39b46bf..c6ecde5e 100644 --- a/app/Http/Controllers/V3/Dashboard/Mission/Report/ReportMachineController.php +++ b/app/Http/Controllers/V3/Dashboard/Mission/Report/ReportMachineController.php @@ -85,7 +85,7 @@ class ReportMachineController extends Controller public function countryMachineTypesActivityExcel(Request $request, ReportMachineService $reportMachineService): BinaryFileResponse { $data = $reportMachineService->countryMachineTypesActivity($request); - $name = 'گزارش نوع ماشین آلات'.verta()->now()->format('Y-m-d H-i').'.xlsx'; + $name = 'گزارش انوع ماشین'.verta()->now()->format('Y-m-d H-i').'.xlsx'; return Excel::download(new machineTypeReport($data), $name); } @@ -125,7 +125,7 @@ class ReportMachineController extends Controller public function provinceMachineTypesActivityExcel(Request $request, ReportMachineService $reportMachineService): BinaryFileResponse { $data = $reportMachineService->provinceMachineTypesActivity($request); - $name = 'گزارش نوع ماشین آلات'.verta()->now()->format('Y-m-d H-i').'.xlsx'; + $name = 'گزارش انوع ماشین'.verta()->now()->format('Y-m-d H-i').'.xlsx'; return Excel::download(new machineTypeReport($data), $name); } diff --git a/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php b/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php index 61f539ea..5316a5dc 100644 --- a/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php +++ b/app/Http/Controllers/V3/Dashboard/Mission/RequestPortalController.php @@ -2,7 +2,6 @@ namespace App\Http\Controllers\V3\Dashboard\Mission; -use App\Enums\FMSResultCode; use App\Enums\MissionCategory; use App\Enums\MissionStates; use App\Enums\MissionTypes; @@ -10,7 +9,6 @@ use App\Enums\MissionViolationStatus; use App\Enums\MissionZones; use App\Facades\DataTable\DataTableFacade; use App\Http\Controllers\Controller; -use App\Http\Controllers\V3\Dashboard\RoadPatrol\OperatorController; use App\Http\Requests\V3\Mission\RequestPortal\ChangeStateRequest; use App\Http\Requests\V3\Mission\RequestPortal\ClarifyUnauthorizedExitRequest; use App\Http\Requests\V3\Mission\RequestPortal\ContinueMissionRequest; @@ -23,7 +21,6 @@ use App\Models\Mission; use App\Models\MissionViolation; use App\Models\Rahdaran; use App\Models\RahdariPoint; -use App\Models\RoadObserved; use App\Services\Cartables\Mission\RequestPortalService; use App\Services\FMS\GetErrorRateService; use Carbon\Carbon; @@ -65,6 +62,8 @@ class RequestPortalController extends Controller $user = auth()->user(); $mission = Mission::query()->create([ + 'item_id' => $request->item_id, + 'sub_item_id' => $request->sub_item_id, 'user_id' => $user->id, 'username' => $user->username, 'province_id' => $user->province_id, @@ -83,7 +82,6 @@ class RequestPortalController extends Controller 'start_date' => $request->start_date, 'end_date' => $request->end_date, 'request_date' => now(), - 'description' => $request->description, 'end_point' => $request->end_point, 'encoded_route' => $request->encoded_route, 'category_id' => $request->category_id, @@ -137,6 +135,8 @@ class RequestPortalController extends Controller $machine = CMMSMachine::query()->find($request->machine_id, ['id', 'machine_code', 'car_type']); $newMission = Mission::query()->create([ + 'item_id' => $request->item_id, + 'sub_item_id' => $request->sub_item_id, 'user_id' => $user->id, 'username' => $user->username, 'province_id' => $user->province_id, @@ -154,7 +154,6 @@ class RequestPortalController extends Controller 'start_date' => now(), 'end_date' => $request->end_date, 'request_date' => now(), - 'description' => $request->description, 'end_point' => $request->end_point, 'encoded_route' => $request->encoded_route, 'category_id' => $request->category_id, @@ -185,6 +184,8 @@ class RequestPortalController extends Controller DB::transaction(function () use ($mission, $request) { $state = MissionStates::REQUEST_CREATED->value; $mission->update([ + 'item_id' => $request->item_id, + 'sub_item_id' => $request->sub_item_id, 'state_id' => $state, 'state_name' => MissionStates::name($state), 'requested_machines' => json_encode($request->requested_machines), @@ -194,7 +195,6 @@ class RequestPortalController extends Controller 'zone_fa' => MissionZones::name($request->zone), 'start_date' => $request->start_date, 'end_date' => $request->end_date, - 'description' => $request->description, 'end_point' => $request->end_point, 'encoded_route' => $request->encoded_route, 'category_id' => $request->category_id, @@ -247,6 +247,8 @@ class RequestPortalController extends Controller $machine = CMMSMachine::query()->where('machine_code', '=', $violation->machine_code)->first(['id', 'machine_code', 'car_type']); $mission = Mission::query()->create([ + 'item_id' => $request->item_id, + 'sub_item_id' => $request->sub_item_id, 'user_id' => $user->id, 'username' => $user->username, 'province_id' => $user->province_id, @@ -285,7 +287,7 @@ class RequestPortalController extends Controller $mission->rahdaran()->sync($request->rahdaran); - $violation->update(['status' => 1]); + $violation->update(['status' => 1, 'mission_id' => $mission->id]); // if ($mission->category_id == 2) { // $rpc = new OperatorController; diff --git a/app/Http/Requests/V3/Mission/ControlUnit/FinishRequest.php b/app/Http/Requests/V3/Mission/ControlUnit/FinishRequest.php index b62c5124..87c55735 100644 --- a/app/Http/Requests/V3/Mission/ControlUnit/FinishRequest.php +++ b/app/Http/Requests/V3/Mission/ControlUnit/FinishRequest.php @@ -41,7 +41,7 @@ class FinishRequest extends FormRequest 'زمان پایان ماموریت باید بعد از زمان شروع ماموریت باشد.' ); } - if ($this->end_km < $mission->km) { + if ($this->end_km <= $mission->km) { $validator->errors()->add( 'end_km', 'کیلومتر پایان باید بزرگتر از کیلومتر شروع باشد.' diff --git a/app/Http/Requests/V3/Mission/RequestPortal/ClarifyUnauthorizedExitRequest.php b/app/Http/Requests/V3/Mission/RequestPortal/ClarifyUnauthorizedExitRequest.php index a0129c2c..9391e83e 100644 --- a/app/Http/Requests/V3/Mission/RequestPortal/ClarifyUnauthorizedExitRequest.php +++ b/app/Http/Requests/V3/Mission/RequestPortal/ClarifyUnauthorizedExitRequest.php @@ -25,6 +25,8 @@ class ClarifyUnauthorizedExitRequest extends FormRequest public function rules(): array { return [ + 'item_id' => 'required|exists:info_items,item', + 'sub_item_id' => 'required|exists:info_items,id', 'rahdaran' => 'array', 'rahdaran.*' => 'exists:rahdaran,id', 'driver' => 'required|integer|exists:rahdaran,id', diff --git a/app/Http/Requests/V3/Mission/RequestPortal/ContinueMissionRequest.php b/app/Http/Requests/V3/Mission/RequestPortal/ContinueMissionRequest.php index 46fc0cea..0507f840 100644 --- a/app/Http/Requests/V3/Mission/RequestPortal/ContinueMissionRequest.php +++ b/app/Http/Requests/V3/Mission/RequestPortal/ContinueMissionRequest.php @@ -26,6 +26,8 @@ class ContinueMissionRequest extends FormRequest public function rules(): array { return [ + 'item_id' => 'required|exists:info_items,item', + 'sub_item_id' => 'required|exists:info_items,id', 'rahdaran' => 'array', 'rahdaran.*' => 'exists:rahdaran,id', 'machine_id' => 'required|integer|exists:cmms_machines,id', @@ -33,7 +35,6 @@ class ContinueMissionRequest extends FormRequest 'type' => 'required|in:1,2', 'zone' => 'required|in:1,2,3', 'end_date' => 'required|date', - 'description' => 'string', 'end_point' => 'required|string', 'encoded_route' => 'required|string', 'explanation' => 'required|string', @@ -57,7 +58,7 @@ class ContinueMissionRequest extends FormRequest ); } } - if ($this->end_km < $this->mission->km) { + if ($this->end_km <= $this->mission->km) { $validator->errors()->add( 'end_km', 'کیلومتر پایان باید بزرگتر از کیلومتر شروع باشد.' diff --git a/app/Http/Requests/V3/Mission/RequestPortal/StoreRequest.php b/app/Http/Requests/V3/Mission/RequestPortal/StoreRequest.php index 0e787c12..72fe6ec1 100644 --- a/app/Http/Requests/V3/Mission/RequestPortal/StoreRequest.php +++ b/app/Http/Requests/V3/Mission/RequestPortal/StoreRequest.php @@ -25,6 +25,8 @@ class StoreRequest extends FormRequest public function rules(): array { return [ + 'item_id' => 'required|exists:info_items,item', + 'sub_item_id' => 'required|exists:info_items,id', 'rahdaran' => 'array', 'rahdaran.*' => 'exists:rahdaran,id', 'requested_machines' => 'required|array', @@ -32,7 +34,6 @@ class StoreRequest extends FormRequest 'zone' => 'required|in:1,2,3', 'start_date' => 'required|date', 'end_date' => 'required|date', - 'description' => 'string', 'end_point' => 'required|string', 'encoded_route' => 'required|string', 'explanation' => 'required|string', diff --git a/app/Http/Requests/V3/Mission/RequestPortal/UpdateRequest.php b/app/Http/Requests/V3/Mission/RequestPortal/UpdateRequest.php index ce8858fa..020cf459 100644 --- a/app/Http/Requests/V3/Mission/RequestPortal/UpdateRequest.php +++ b/app/Http/Requests/V3/Mission/RequestPortal/UpdateRequest.php @@ -26,6 +26,8 @@ class UpdateRequest extends FormRequest public function rules(): array { return [ + 'item_id' => 'required|exists:info_items,item', + 'sub_item_id' => 'required|exists:info_items,id', 'rahdaran' => 'array', 'rahdaran.*' => 'exists:rahdaran,id', 'requested_machines' => 'required|array', @@ -33,7 +35,6 @@ class UpdateRequest extends FormRequest 'zone' => 'required|in:1,2,3', 'start_date' => 'required|date', 'end_date' => 'required|date', - 'description' => 'string', 'end_point' => 'required|string', 'encoded_route' => 'required|string', 'explanation' => 'required|string', diff --git a/app/Http/Requests/V3/Mission/TransportaionUnit/DeallocateRequest.php b/app/Http/Requests/V3/Mission/TransportaionUnit/DeallocateRequest.php index c5d763d2..f48c14f9 100644 --- a/app/Http/Requests/V3/Mission/TransportaionUnit/DeallocateRequest.php +++ b/app/Http/Requests/V3/Mission/TransportaionUnit/DeallocateRequest.php @@ -13,8 +13,8 @@ class DeallocateRequest extends FormRequest */ public function authorize(): bool { - return $this->mission->station_id == auth()->user()->station_id && - in_array($this->mission->state_id, [MissionStates::REQUEST_CREATED->value, MissionStates::PENDING_CONFIRMATION->value]) + return ($this->mission->station_id == auth()->user()->station_id && + in_array($this->mission->state_id, [MissionStates::REQUEST_CREATED->value, MissionStates::PENDING_CONFIRMATION->value])) || auth()->user()->username === 'witel'; } diff --git a/app/Http/Requests/V3/Mission/Violation/UpdateRequest.php b/app/Http/Requests/V3/Mission/Violation/UpdateRequest.php index 561e2188..e2d5294e 100644 --- a/app/Http/Requests/V3/Mission/Violation/UpdateRequest.php +++ b/app/Http/Requests/V3/Mission/Violation/UpdateRequest.php @@ -41,7 +41,7 @@ class UpdateRequest extends FormRequest 'زمان پایان ماموریت باید بعد از زمان شروع ماموریت باشد.' ); } - if ($this->end_km < $this->violation->km) { + if ($this->end_km <= $this->violation->km) { $validator->errors()->add( 'end_km', 'کیلومتر پایان باید بزرگتر از کیلومتر شروع باشد.' diff --git a/app/Models/Mission.php b/app/Models/Mission.php index a277162a..3c745d8c 100644 --- a/app/Models/Mission.php +++ b/app/Models/Mission.php @@ -14,7 +14,7 @@ class Mission extends Model { use HasFactory; - protected $guarded = []; + protected $guarded = ['id']; protected $hidden = ['pivot']; protected $casts = [ 'start_time' => 'datetime', diff --git a/app/Models/MissionViolation.php b/app/Models/MissionViolation.php index ad94c62a..31457d90 100644 --- a/app/Models/MissionViolation.php +++ b/app/Models/MissionViolation.php @@ -10,7 +10,7 @@ use Illuminate\Database\Eloquent\Relations\HasOne; class MissionViolation extends Model { use HasFactory; - protected $guarded =[]; + protected $guarded =['id']; public function mission(): BelongsTo { diff --git a/app/Services/Cartables/Mission/Report/ReportMachineService.php b/app/Services/Cartables/Mission/Report/ReportMachineService.php index 38bb4996..215c253c 100644 --- a/app/Services/Cartables/Mission/Report/ReportMachineService.php +++ b/app/Services/Cartables/Mission/Report/ReportMachineService.php @@ -24,7 +24,7 @@ class ReportMachineService FROM missions m JOIN cmms_machines cm ON cm.id = m.machine_id WHERE m.state_id = 4 AND m.start_time >= :from AND m.finish_time <= :to - GROUP BY machine_id;"; + GROUP BY machine_id ORDER BY missions DESC;"; return DB::select($sql, [ 'from' => $from, @@ -42,7 +42,7 @@ class ReportMachineService FROM missions m JOIN cmms_machines cm ON cm.id = m.machine_id WHERE m.state_id = 4 AND start_time >= :from AND finish_time <= :to AND m.province_id = :province_id - GROUP BY machine_id;"; + GROUP BY machine_id ORDER BY missions DESC;"; return DB::select($sql, [ 'from' => $from, @@ -63,7 +63,7 @@ class ReportMachineService FROM missions m JOIN cmms_machines cm ON cm.id = m.machine_id WHERE m.state_id = 4 AND m.start_time >= :from AND m.finish_time <= :to - GROUP BY cm.car_type;"; + GROUP BY cm.car_type ORDER BY missions DESC;"; return DB::select($sql, [ 'from' => $from, @@ -84,7 +84,7 @@ class ReportMachineService FROM missions m JOIN cmms_machines cm ON cm.id = m.machine_id WHERE m.state_id = 4 AND m.start_time >= :from AND m.finish_time <= :to AND m.province_id = :province_id - GROUP BY cm.car_type;"; + GROUP BY cm.car_type ORDER BY missions DESC;"; return DB::select($sql, [ 'from' => $from, @@ -105,7 +105,7 @@ class ReportMachineService SUM(m.end_km - m.km) AS func FROM missions m WHERE m.state_id = 4 AND m.start_time >= :from AND m.finish_time <= :to - GROUP BY m.driver_id;"; + GROUP BY m.driver_id ORDER BY missions DESC;"; return DB::select($sql, [ 'from' => $from, @@ -126,7 +126,7 @@ class ReportMachineService SUM(m.end_km - m.km) AS func FROM missions m WHERE m.state_id = 4 AND m.start_time >= :from AND m.finish_time <= :to AND province_id = :province_id - GROUP BY m.driver_id;"; + GROUP BY m.driver_id ORDER BY missions DESC;"; return DB::select($sql, [ 'from' => $from, diff --git a/app/Services/Cartables/Mission/RequestPortalService.php b/app/Services/Cartables/Mission/RequestPortalService.php index 2c17793c..443508fc 100644 --- a/app/Services/Cartables/Mission/RequestPortalService.php +++ b/app/Services/Cartables/Mission/RequestPortalService.php @@ -34,7 +34,7 @@ class RequestPortalService 'description', 'requested_machines', 'type', 'type_fa', 'start_date', 'state_id', 'end_date', 'request_date', 'end_point', 'encoded_route', 'zone', 'zone_fa', 'start_time', 'finish_time', 'code', 'category_id', 'category_name', 'explanation', 'city_id', 'city_name', 'province_id', 'station_name', - 'driver_id', 'driver_name' + 'driver_id', 'driver_name', 'machine_id', 'item_id', 'sub_item_id' ] ); } diff --git a/database/migrations/2026_06_21_120836_add_item_and_subitems_to_missions_table.php b/database/migrations/2026_06_21_120836_add_item_and_subitems_to_missions_table.php new file mode 100644 index 00000000..224a480f --- /dev/null +++ b/database/migrations/2026_06_21_120836_add_item_and_subitems_to_missions_table.php @@ -0,0 +1,29 @@ +unsignedInteger('item_id')->nullable(); + $table->unsignedInteger('sub_item_id')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('missions', function (Blueprint $table) { + $table->dropColumn('item_id', 'sub_item_id'); + }); + } +}; diff --git a/resources/views/v3/Reports/Mission/Report/Machine/MachineTypeReport.blade.php b/resources/views/v3/Reports/Mission/Report/Machine/MachineTypeReport.blade.php index 74e25d00..fe71606a 100644 --- a/resources/views/v3/Reports/Mission/Report/Machine/MachineTypeReport.blade.php +++ b/resources/views/v3/Reports/Mission/Report/Machine/MachineTypeReport.blade.php @@ -5,7 +5,7 @@ - گزارش کل تردد های انواع ماشین ها + گزارش ترددهای انواع ماشین ها