RequirementController.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. <?php
  2. namespace App\Http\Controllers\API;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Requests\API\Requirement\ClosedRequest;
  5. use App\Http\Requests\API\Requirement\CreateOrUpdateRequest;
  6. use App\Http\Requests\API\Requirement\LinkPlanRequest;
  7. use App\Http\Requests\API\Requirement\BatchCreateRequest;
  8. use App\Http\Resources\API\AssetRequirementResource;
  9. use App\Http\Resources\API\RequirementResource;
  10. use App\Models\Asset;
  11. use App\Models\Enums\RequirementStatus;
  12. use App\Models\Plan;
  13. use App\Models\Requirement;
  14. use App\Repositories\ActionRepository;
  15. use Illuminate\Http\Request;
  16. use Illuminate\Support\Facades\Auth;
  17. use Illuminate\Support\Facades\DB;
  18. use Illuminate\Validation\Rules\Enum;
  19. class RequirementController extends Controller
  20. {
  21. /**
  22. * Display a listing of the resource.
  23. */
  24. public function index(Request $request)
  25. {
  26. $requirements=Requirement::filter($request->all())->where('company_id',Auth::user()->company_id)->with(['createdBy', 'plan','group','asset'=>function($query){
  27. $query->with('parent');
  28. }]) ->simplePaginate();
  29. return AssetRequirementResource::collection($requirements);
  30. }
  31. // public function byAsset(Request $request,string $assetId)
  32. // {
  33. // $requirements=Requirement::filter($request->all())->with(['createdBy', 'plan','group']) ->where('asset_id', $assetId)->simplePaginate();
  34. //
  35. // return AssetRequirementResource::collection($requirements);
  36. // }
  37. /**
  38. * Store a newly created resource in storage.
  39. */
  40. public function store(CreateOrUpdateRequest $request)
  41. {
  42. $requirement = new Requirement();
  43. $requirement->mergeFillable([
  44. 'company_id', 'created_by',
  45. ]);
  46. $requirement->fill([
  47. ...$request->all(),
  48. 'company_id' => Auth::user()->company_id,
  49. 'created_by' => Auth::id(),
  50. ]);
  51. $requirement->save();
  52. return $this->created();
  53. }
  54. /**
  55. * Display the specified resource.
  56. */
  57. public function show(string $id)
  58. {
  59. $requirement = Requirement::query()->findOrFail($id);
  60. return new RequirementResource($requirement);
  61. }
  62. /**
  63. * Update the specified resource in storage.
  64. */
  65. public function update(CreateOrUpdateRequest $request, string $id)
  66. {
  67. //
  68. $requiremen = Requirement::findOrFail($id);
  69. $requiremen->fill($request->all());
  70. $requiremen->save();
  71. return $this->noContent();
  72. }
  73. /**
  74. * Remove the specified resource from storage.
  75. */
  76. public function destroy(string $id)
  77. {
  78. $requiremen = Requirement::findOrFail($id);
  79. $requiremen->delete();
  80. return $this->noContent();
  81. }
  82. public function close(Request $request,string $id){
  83. $requiremen = Requirement::findOrFail($id);
  84. $requiremen->status = RequirementStatus::CLOSED->value;
  85. $requiremen->save();
  86. ActionRepository::createByProject($requiremen, ObjectAction::CLOSED, $request->get("comment"));
  87. return $this->noContent();
  88. }
  89. public function start(Request $request, string $id)
  90. {
  91. $requiremen = Requirement::findOrFail($id);
  92. $requiremen->status = RequirementStatus::ACTIVE->value;
  93. $requiremen->save();
  94. ActionRepository::createByProject($requiremen, ObjectAction::STARTED, $request->get("comment"));
  95. return $this->noContent();
  96. }
  97. public function linkPlan(LinkPlanRequest $request, string $planId)
  98. {
  99. $plan = Plan::query()->findOrFail($planId);
  100. Requirement::query()->where("asset_id", $plan->asset_id)
  101. ->whereIn('id', $request->get("requirement_ids"))
  102. ->update([
  103. 'plan_id' => $plan->id,
  104. ]);
  105. return $this->noContent();
  106. }
  107. public function unlinkPlan(LinkPlanRequest $request)
  108. {
  109. Requirement::query()->whereIn('id', $request->get("requirement_ids"))
  110. ->update([
  111. 'plan_id' => null,
  112. ]);
  113. return $this->noContent();
  114. }
  115. public function batchStore(BatchCreateRequest $request)
  116. {
  117. $requirementsData = $request->all();
  118. $companyId = Auth::user()->company_id;
  119. $created_by = Auth::id();
  120. DB::transaction(function () use ($requirementsData,$companyId,$created_by) {
  121. foreach ($requirementsData as $k => $data) {
  122. $requirement = new Requirement();
  123. $requirement->mergeFillable([
  124. 'company_id', 'created_by',
  125. ]);
  126. if($k != 0){
  127. $requirementsData[$k]["requirement_group_id"] = $requirementsData[$k]["requirement_group_id"] == 'ditto'?$requirementsData[$k-1]["requirement_group_id"]:$requirementsData[$k]["requirement_group_id"];
  128. $requirementsData[$k]["priority"] = $requirementsData[$k]["priority"] == 'ditto'? $requirementsData[$k-1]["priority"]: $requirementsData[$k]["priority"];
  129. }
  130. $requirement->fill([
  131. ...$requirementsData[$k],
  132. 'company_id' => $companyId,
  133. 'created_by' => $created_by,
  134. 'status' => RequirementStatus::ACTIVE,
  135. 'mailto' => [],
  136. ]);
  137. $requirement->save();
  138. }
  139. });
  140. return $this->created();
  141. }
  142. }