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