filter($request->all())->orderByDesc("created_at")->paginate(); $items = []; foreach ($approvals as $approval) { $items[] = [ 'id' => $approval->id, 'status' => $approval->status, 'object_type' => $approval->object_type, 'object_id' => $approval->object_id, 'node_level' => $approval->node_level, 'created_by' => new UserProfileResource($approval->createdBy), ]; } return $this->success([ 'data' => $items ]); } /** * Store a newly created resource in storage. */ public function store(CreateOrUpdateRequest $request, StoreService $service) { $service->store(); return $this->created(); } /** * Display the specified resource. */ public function show(string $id) { $approval = Approval::query() ->where("id", $id) ->where(fn($query) => $query->where("users", 'like', '%,'.Auth::id().',%')->orWhere("created_by", Auth::id())) ->firstOrFail(); $approvalObjectType = ApprovalObjectType::from($approval->object_type); $object = $approvalObjectType ->modelBuilder() ->find($approval->object_id); $actions = Action::with(['createdBy'])->where([ 'object_type' => $approvalObjectType->actionObjectType(), 'object_id' => $object->id, 'additional_id' => $approval->id, ])->orderByDesc("created_at")->get(); return $this->success([ 'data' => [ 'id' => $approval->id, 'status' => $approval->status, 'object_type' => $approval->object_type, 'object_id' => $approval->object_id, 'object' => [ 'id' => $object->id, 'name' => $object[$approvalObjectType->nameField()], ], 'remark' => $approval->remark, 'node_level' => $approval->node_level, 'created_by' => new UserProfileResource($approval->createdBy), 'approval_flow' => new ApprovalFlowDetailResource($approval->approvalFlow), 'approval_logs' => ActionByApprovalLogResource::collection($actions), ] ]); } public function action(ActionRequest $request, string $id, ActionService $actionService) { $approval = Approval::query() ->where("users", 'like', '%,'.Auth::id().',%') ->whereIn("status", [ ObjectApprovalStatus::DOING->value, ]) ->find($id); throw_validation_if(! $approval, "No authority for approval"); $actionService->action($approval, $request->status, $request->get("comment")); return $this->noContent(); } /** * Update the specified resource in storage. */ public function update(CreateOrUpdateRequest $request, string $id) { $approval = Approval::query()->findOrFail($id); ApprovalObjectType::from($approval->object_type)->modelBuilderAllowed($approval->object_id)->findOrFail($approval->object_id); $approval->remark = $request->remark; $approval->save(); return $this->noContent(); } /** * Remove the specified resource from storage. */ public function cancel(string $id) { $approval = Approval::query() ->whereIn("status", [ ObjectApprovalStatus::DOING->value, ]) ->findOrFail($id); $object = ApprovalObjectType::from($approval->object_type)->modelBuilderAllowed($approval->object_id)->findOrFail($approval->object_id); $approval->status = ObjectApprovalStatus::CANCELED; $approval->save(); ActionRepository::createByApproval($approval, ObjectAction::APPROVED_CANCELED); $object->approval_status = ObjectApprovalStatus::WAIT; $object->save(); return $this->noContent(); } }