Pārlūkot izejas kodu

任务受资产需求树控制,添加任务时需添加资产id和需求分组

kely 11 mēneši atpakaļ
vecāks
revīzija
a7c52ebf9c

+ 7 - 0
app/Http/Controllers/API/ProjectController.php

@@ -17,6 +17,8 @@ use App\Http\Resources\API\ProjectDetailResource;
 use App\Http\Resources\API\ProjectGroupViewTaskResource;
 use App\Http\Resources\API\ProjectKanbanRequirementResource;
 use App\Http\Resources\API\ProjectKanbanTaskResource;
+use App\Http\Resources\API\RequirementGroupParentResource;
+use App\Http\Resources\API\RequirementGroupResource;
 use App\Http\Resources\API\SimplePlanResource;
 use App\Http\Resources\API\ProjectRequirementResource;
 use App\Http\Resources\API\ProjectResource;
@@ -452,4 +454,9 @@ class ProjectController extends Controller
             'data' => ActionRepository::latestDynamic($project)
         ]);
     }
+
+    public function requirementsLinkGroup(string $id){
+        $requirementsLinksGroup = Project::findOrFail($id)->requirementsGroup->unique('id');
+        return RequirementGroupParentResource::collection($requirementsLinksGroup);
+    }
 }

+ 22 - 0
app/Http/Controllers/API/TaskController.php

@@ -11,6 +11,8 @@ use App\Http\Resources\API\TaskResource;
 use App\Models\CustomField;
 use App\Models\NamingRule;
 use App\Models\Project;
+use App\Models\Requirement;
+use App\Models\RequirementGroup;
 use App\Models\Task;
 use App\Repositories\CustomFieldRepository;
 use Illuminate\Http\Request;
@@ -37,11 +39,23 @@ class TaskController extends Controller
      */
     public function store(CreateOrUpdateRequest $request, CustomFieldRepository $customFieldRepo)
     {
+        $asset_id=null;
+        $requirement_group_id=null;
+
+        if ($request->has('requirement_id')){
+            $requirementId=$request->get('requirement_id');
+            $requirement=Requirement::query()->findOrFail($requirementId);
+            $asset_id=$requirement->asset_id;
+            $requirement_group_id=$requirement->requirement_group_id;
+        }
+
         $formData = [
             ...$request->all(),
             'company_id' => Auth::user()->company_id,
             'created_by' => Auth::id(),
             'whitelist' => $request->whitelist ? sprintf(",%s", implode(',', $request->whitelist)) : null,
+            'asset_id' => $asset_id,
+            'requirement_group_id'=>$requirement_group_id,
         ];
 
         if ($request->has("naming_rule_id") && $request->get("naming_rule_id") > 0) {
@@ -70,9 +84,17 @@ class TaskController extends Controller
     public function update(CreateOrUpdateRequest $request, string $id, CustomFieldRepository $customFieldRepo)
     {
         $task = Task::query()->findOrFail($id);
+        $asset_id=null;
+
+        if ($requirementId=$request->get('requirement_id')!=$task->requirement_id){
+            $requirementId=$request->get('requirement_id');
+            $requirement=Requirement::query()->findOrFail($requirementId);
+            $asset_id=$requirement->asset_id;
+        }
 
         $formData = [...$request->all(),
             'whitelist' => $request->whitelist ? sprintf(",%s", implode(',', $request->whitelist)) : null,
+            '$asset_id' => $asset_id,
         ];
 
         if ($request->has("naming_rule_id") && $request->get("naming_rule_id") > 0) {

+ 0 - 1
app/Http/Requests/API/Task/CreateOrUpdateRequest.php

@@ -36,7 +36,6 @@ class CreateOrUpdateRequest extends FormRequest
                 Rule::exists('projects', 'id')->where($this->userCompanyWhere()),
             ],
             'requirement_id' => [
-                'required',
                 Rule::exists('requirements', 'id')->where($this->userCompanyWhere()),
             ],
             'naming_rule_id' => [

+ 1 - 0
app/Http/Resources/API/TaskDetailResource.php

@@ -21,6 +21,7 @@ class TaskDetailResource extends JsonResource
             "project" => new ProjectSimpleResource($this->project),
             "requirement_id" => $this->requirement_id,
             "requirement" => new RequirementSimpleResource($this->requirement),
+            "requirement_group_id"=> $this->requirement_group_id,
             "naming_rule_id" => $this->naming_rule_id,
             "naming_rule" => new NamingRuleSimpleResource($this->namingRule),
             "parent_id" => $this->parent_id,

+ 10 - 0
app/ModelFilters/TaskFilter.php

@@ -20,6 +20,16 @@ class TaskFilter extends ModelFilter
         return $this->where("status", $status);
     }
 
+    public function asset(string $asset): TaskFilter
+    {
+        return $this->where("asset_id", $asset);
+    }
+
+    public function requirementGroup(string $group): TaskFilter
+    {
+        return $this->where("requirement_group_id", $group);
+    }
+
     public function my(string $my): TaskFilter
     {
         return $my == "yes" ? $this->where("assign", Auth::id()) : $this;

+ 33 - 0
database/migrations/2024_03_19_145041_change_asset_group_id_to_asset_id_add_requirement_group_id_tasks.php

@@ -0,0 +1,33 @@
+<?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('tasks', function (Blueprint $table) {
+            //
+            $table->dropColumn(['asset_group_id']);
+            $table->string('asset_id')->nullable();
+            $table->string('requirement_group_id')->nullable();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::table('tasks', function (Blueprint $table) {
+            //
+            $table->string('asset_group_id')->nullable();
+            $table->dropColumn(['asset_id','requirement_group_id']);
+        });
+    }
+};

+ 1 - 0
routes/api.php

@@ -111,5 +111,6 @@ Route::middleware(['auth:sanctum'])->group(function () {
         Route::post("task-batch-create", [API\TaskController::class, "batchStore"])->name("task.batch-store");
 
         Route::get("project-tree/{project_id}", [API\ProjectController::class, "treeIndex"])->name("project.project-tree");
+        Route::get("project-link-requirements-group/{project_id}",[API\ProjectController::class, "requirementsLinkGroup"])->name("project.link-requirements-group");
     });
 });