RequirementController.php 4.4 KB

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