RequirementController.php 5.2 KB

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