Browse Source

merge dev

moell 4 months ago
parent
commit
bb11e1f297

+ 7 - 4
app/Http/Controllers/API/ApprovalController.php

@@ -45,6 +45,7 @@ class ApprovalController extends Controller
         match ($request->get("tab")) {
             'wait_for_me' => $query->allowed(true),
             'pr' => $query->where("created_by", Auth::id()),
+            'my_approval' => $query->where("action_users", 'like', '%,'.Auth::id().',%'),
             default => $query->allowed(),
         };
 
@@ -77,7 +78,7 @@ class ApprovalController extends Controller
     {
         $approval = Approval::query()
             ->where("id", $id)
-            ->allowed()
+            ->allowed(true)
             ->firstOrFail();
 
         $approvalObjectType = ApprovalObjectType::from($approval->object_type);
@@ -141,7 +142,9 @@ class ApprovalController extends Controller
     {
         $approval = Approval::query()->findOrFail($id);
 
-        ApprovalObjectType::from($approval->object_type)->modelBuilderAllowed($approval->object_id)->findOrFail($approval->object_id);
+        ApprovalObjectType::from($approval->object_type)
+            ->modelBuilderAllowed($approval->object_id)
+            ->findOrFail($approval->object_id);
 
         $approval->remark = $request->remark;
         $approval->save();
@@ -201,9 +204,9 @@ class ApprovalController extends Controller
     public function copyContainerFile(CopyContainerFileRequest $request, string $id)
     {
         $approval = Approval::query()
-            ->allowed()
             ->where("status", ObjectApprovalStatus::APPROVED->value)
-            ->where("object_type", ApprovalObjectType::CONTAINER_FILE->value)
+            ->where("last_action_user_id", Auth::id())
+            ->where("object_type", ApprovalObjectType::CONTAINER_FILE)
             ->find($id);
 
         throw_validation_if(! $approval, "No authority for approval");

+ 4 - 2
app/Models/Approval.php

@@ -48,7 +48,7 @@ class Approval extends Model
         return $this->belongsTo(User::class, 'created_by');
     }
 
-    public function scopeAllowed(Builder $query, bool $isAction = false): void
+    public function scopeAllowed(Builder $query, bool $isView = false): void
     {
         $query->where(function(Builder $query) {
             $query->where("users", 'like', '%,'.Auth::id().',%')
@@ -61,6 +61,8 @@ class Approval extends Model
                 ->whereIn("approval_mode", [
                     ApprovalMode::SEQUENTIAL_APPROVAL->value,
                 ]);
-        })->when(! $isAction, fn(Builder $query) => $query->orWhere("created_by", Auth::id()));
+        })
+            ->when(! $isView, fn(Builder $query) => $query->orWhere("created_by", Auth::id()))
+            ->when(! $isView, fn(Builder $query) => $query->orWhere("action_users", 'like', '%,'.Auth::id().',%'));
     }
 }

+ 6 - 2
app/Services/Approval/ActionService.php

@@ -45,13 +45,17 @@ class ActionService
 
         $this->changeApprovalObjectStatus();
 
-        $this->changeApprovalStatus();
+        $this->changeApproval();
 
         $this->fileToDatabase($fileInfo, $action->id);
     }
 
-    protected function changeApprovalStatus(): void
+    protected function changeApproval(): void
     {
+        $actionUsers = array_unique(array_filter([Auth::id(), ...explode(',', $this->approval->action_users)]));
+
+        $this->approval->last_action_user_id = Auth::id();
+        $this->approval->action_users = sprintf(",%s,", implode(",", $actionUsers));
         $this->approval->save();
     }
 

+ 29 - 0
database/migrations/2024_10_20_184240_add_action_users_to_approvals_table.php

@@ -0,0 +1,29 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::table('approvals', function (Blueprint $table) {
+            $table->string("action_users")->nullable();
+            $table->integer("last_action_user_id")->nullable();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::table('approvals', function (Blueprint $table) {
+            $table->dropColumn(['action_users', 'last_action_user_id']);
+        });
+    }
+};