RequirementController.php 4.1 KB

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