From b81d3fc3dd669dc2a643595834dad797a58e02f1 Mon Sep 17 00:00:00 2001 From: amirghasempoor Date: Tue, 20 May 2025 14:16:07 +0330 Subject: [PATCH] add history logs for missions --- .../Mission/TransportationUnitController.php | 47 ++++++++++++++----- app/Models/Mission.php | 6 +++ 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/app/Http/Controllers/V3/Dashboard/Mission/TransportationUnitController.php b/app/Http/Controllers/V3/Dashboard/Mission/TransportationUnitController.php index 7099551a..4e14cae4 100644 --- a/app/Http/Controllers/V3/Dashboard/Mission/TransportationUnitController.php +++ b/app/Http/Controllers/V3/Dashboard/Mission/TransportationUnitController.php @@ -11,6 +11,7 @@ use App\Models\Mission; use App\Services\Cartables\Mission\TransportationUnitService; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; +use Illuminate\Support\Facades\DB; class TransportationUnitController extends Controller { @@ -23,27 +24,49 @@ class TransportationUnitController extends Controller public function allocate(AllocateRequest $request, Mission $mission): JsonResponse { - $mission->machines()->attach($request->machines); + DB::transaction(function () use ($request, $mission) { + $mission->machines()->attach($request->machines); - $state = MissionStates::PENDING_CONFIRMATION->value; - $mission->update([ - 'state_id' => $state, - 'state_name' => MissionStates::name($state), - ]); + $mission->histories()->create([ + 'user_id' => auth()->user()->id, + 'previous_state_id' => $mission->state_id, + 'previous_state_name' => $mission->state_name + ]); + + $state = MissionStates::PENDING_CONFIRMATION->value; + $mission->update([ + 'state_id' => $state, + 'state_name' => MissionStates::name($state), + ]); + }); return $this->successResponse(); } public function deallocate(DeallocateRequest $request, Mission $mission): JsonResponse { - $state = MissionStates::REJECT_BY_TRANSPORTATION->value; + DB::transaction(function () use ($request, $mission) { + $mission->histories()->create([ + 'user_id' => auth()->user()->id, + 'previous_state_id' => $mission->state_id, + 'previous_state_name' => $mission->state_name, + 'user_description' => $request->description + ]); - $mission->update([ - 'state_id' => $state, - 'state_name' => MissionStates::name($state), - 'description' => $request->description - ]); + $state = MissionStates::REJECT_BY_TRANSPORTATION->value; + + $mission->update([ + 'state_id' => $state, + 'state_name' => MissionStates::name($state), + 'description' => $request->description + ]); + }); return $this->successResponse(); } + + public function rahdaran(Mission $mission): JsonResponse + { + return $this->successResponse($mission->rahdaran()->get(['rahdaran.id', 'rahdaran.name', 'rahdaran.code'])); + } } diff --git a/app/Models/Mission.php b/app/Models/Mission.php index 7ff42e75..3f169f16 100644 --- a/app/Models/Mission.php +++ b/app/Models/Mission.php @@ -5,6 +5,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\MorphToMany; class Mission extends Model @@ -20,6 +21,11 @@ class Mission extends Model ); } + public function histories(): HasMany + { + return $this->hasMany(MissionHistory::class); + } + public function roadItems(): MorphToMany { return $this->morphedByMany(RoadItemsProject::class, 'missionable');