Преглед на файлове

Merge branch 'dev' into peroject-linktree-index

kely преди 1 година
родител
ревизия
b594b4bb59

+ 38 - 25
app/Http/Controllers/API/ProjectController.php

@@ -15,8 +15,6 @@ use App\Http\Resources\API\ProjectDetailResource;
 use App\Http\Resources\API\SimplePlanResource;
 use App\Http\Resources\API\ProjectRequirementResource;
 use App\Http\Resources\API\ProjectResource;
-use App\Http\Resources\API\RequirementResource;
-use App\Models\Asset;
 use App\Models\Enums\ObjectAction;
 use App\Models\Enums\ProjectStatus;
 use App\Models\Plan;
@@ -28,6 +26,7 @@ use App\Models\Requirement;
 use App\Repositories\ActionRepository;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\DB;
 
 class ProjectController extends Controller
 {
@@ -215,44 +214,59 @@ class ProjectController extends Controller
 
     public function linkRequirement(LinkRequirementRequest $request, string $id)
     {
+
+        $requirementIds = $request->get("requirement_id",[]);
         $project = Project::findOrFail($id);
 
-        $requirement = Requirement::findOrFail($request->requirement_id);
 
-        $exists = ProjectAsset::query()
-            ->where('project_id', $project->id)
-            ->where('asset_id', $requirement->asset_id)
-            ->count();
-        if (! $exists) {
+        if(! $requirementIds){
             return $this->forbidden("Please select the correct requirement");
         }
 
-        ProjectRequirement::query()->firstOrCreate([
-            'project_id' => $project->id,
-            'requirement_id' => $requirement->id,
-        ]);
+//        $requirement = Requirement::findOrFail($request->requirement_id);
+
+//        $exists = ProjectAsset::query()
+//            ->where('project_id', $project->id)
+//            ->where('asset_id', $requirement->asset_id)
+//            ->count();
+//        if (! $exists) {
+//            return $this->forbidden("Please select the correct requirement");
+//        }
+        DB::transaction(function () use ($requirementIds,$project) {
+            foreach ($requirementIds as $requirementId) {
+                ProjectRequirement::query()->firstOrCreate([
+                    'project_id' => $project->id,
+                    'requirement_id' => $requirementId,
+                ]);
+            }
+        });
+
 
         return $this->noContent();
     }
 
     public function unlinkRequirement(UnlinkRequirementRequest $request, string $id)
     {
-        $project = Project::findOrFail($id);
 
-        $requirement = Requirement::findOrFail($request->requirement_id);
+        $requirementIds = $request->get("requirement_id",[]);
+        $project = Project::findOrFail($id);
 
-        $exists = ProjectAsset::query()
-            ->where('project_id', $project->id)
-            ->where('asset_id', $requirement->asset_id)
-            ->count();
-        if (! $exists) {
+        if (! $requirementIds) {
             return $this->forbidden("Please select the correct requirement");
         }
 
-        ProjectRequirement::query()->where([
-            'project_id' => $project->id,
-            'requirement_id' => $requirement->id,
-        ])->delete();
+        if($project->requirements->isEmpty()){
+            return $this->forbidden("Project has no associated requirements");
+        }
+
+        DB::transaction(function () use ($requirementIds,$project) {
+            foreach ($requirementIds as $requirement) {
+                ProjectRequirement::query()->where([
+                    'project_id' => $project->id,
+                    'requirement_id' => $requirement,
+                ])->delete();
+            }
+        });
 
         return $this->noContent();
     }
@@ -291,9 +305,8 @@ class ProjectController extends Controller
     public function notLinkAssetRequirement(string $id)
     {
         $project = Project::findOrFail($id);
-
         $requirements = $project->assets
-            ? Requirement::query()->whereIn('asset_id', $project->assets?->pluck('id')->toArray())->simplePaginate()
+            ? Requirement::query()->whereIn('asset_id', $project->assets?->pluck('id')->toArray())->whereNotIn('id', $project->requirements?->pluck('id')->toArray())->simplePaginate()
             : [];
 
         return AssetRequirementResource::collection($requirements);

+ 3 - 3
app/Http/Controllers/API/RequirementController.php

@@ -139,11 +139,11 @@ class RequirementController extends Controller
                     'company_id', 'created_by',
                 ]);
                 if($k != 0){
-                    $data["requirement_group_id"] = $data["requirement_group_id"] == 'ditto'? $requirementsData[$k-1]["requirement_group_id"]:$data["requirement_group_id"];
-                    $data["priority"] = $data["priority"] == 'ditto'? $requirementsData[$k-1]["priority"]:$data["priority"];
+                    $requirementsData[$k]["requirement_group_id"] = $requirementsData[$k]["requirement_group_id"] == 'ditto'?$requirementsData[$k-1]["requirement_group_id"]:$requirementsData[$k]["requirement_group_id"];
+                    $requirementsData[$k]["priority"] =  $requirementsData[$k]["priority"] == 'ditto'?  $requirementsData[$k-1]["priority"]: $requirementsData[$k]["priority"];
                 }
                 $requirement->fill([
-                    ...$data,
+                    ...$requirementsData[$k],
                     'company_id' => $companyId,
                     'created_by' =>  $created_by,
                     'status' => RequirementStatus::ACTIVE,

+ 2 - 1
app/Http/Requests/API/Requirement/BatchCreateRequest.php

@@ -31,7 +31,8 @@ class BatchCreateRequest extends FormRequest
     public function rules(): array
     {
         $requirementGroupIds = RequirementGroup::where('company_id',Auth::user()->company_id)->pluck('id')->toArray();
-        $IdsAndDitto[]='ditto';
+        $IdsAndDitto=$requirementGroupIds;
+        $IdsAndDitto[] = 'ditto';
         return [
             '*.title' => 'required|max:255',
             '*.asset_id' => [

+ 2 - 0
app/Http/Resources/API/ProjectRequirementResource.php

@@ -18,6 +18,8 @@ class ProjectRequirementResource extends JsonResource
             'id' => $this->id,
             'priority' => $this->priority,
             'title' => $this->title,
+            'requirement_group_id' => $this->requirement_group_id ?? 0,
+            'requirement_group' => new RequirementGroupParentResource($this->group),
             'created_by' => new UserProfileResource($this->createdBy),
             'status' => $this->status,
         ];