RequirementController.php 4.3 KB

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