From 23f8d79ff944669498c82f980e6a536f3d47d1ff Mon Sep 17 00:00:00 2001 From: Djery-Tom Date: Wed, 26 Jan 2022 16:33:55 +0100 Subject: [PATCH] Improve pagination --- .../Controllers/HealthCareSheetController.php | 35 ++++++++++++++--- .../InsuranceSubscriptionController.php | 24 ++++++++++-- app/Http/Middleware/BooleanMiddleware.php | 39 +++++++++++++++++++ bootstrap/app.php | 1 + 4 files changed, 90 insertions(+), 9 deletions(-) create mode 100644 app/Http/Middleware/BooleanMiddleware.php diff --git a/app/Http/Controllers/HealthCareSheetController.php b/app/Http/Controllers/HealthCareSheetController.php index ff92ff7..5c27579 100755 --- a/app/Http/Controllers/HealthCareSheetController.php +++ b/app/Http/Controllers/HealthCareSheetController.php @@ -1017,6 +1017,16 @@ class HealthCareSheetController extends Controller * type="integer" * ) * ), + * @OA\Parameter( + * parameter="pagination", + * name="pagination", + * description="pagination", + * in="query", + * required=false, + * @OA\Schema( + * type="boolean", + * ) + * ), * @OA\Response( * response=200, * description="OK", @@ -1044,7 +1054,8 @@ class HealthCareSheetController extends Controller 'beneficiary_id' => 'nullable|integer|exists:nh_having_rights,id', 'network_agent_id' => 'required_without:user_id|integer|exists:networks_agents,id', 'type' => 'nullable|in:CONSULTATION,EXECUTION', - 'state' => 'nullable|in:UNTREATED,TREATED,ACCEPTED,TO_BILL,ALL' + 'state' => 'nullable|in:UNTREATED,TREATED,ACCEPTED,TO_BILL,ALL', + 'pagination' => 'nullable|boolean' ]); $type = $request->input('type'); @@ -1052,6 +1063,7 @@ class HealthCareSheetController extends Controller $user_id = $request->input('user_id'); $beneficiary_id = $request->input('beneficiary_id'); $network_agent_id = $request->input('network_agent_id'); + $pagination = $request->input('pagination'); if (!empty($user_id)) { $query = NhInfosHealthCareSheets::where('user_id', $user_id); @@ -1107,23 +1119,34 @@ class HealthCareSheetController extends Controller } } - $sheets = $query->orderBy('created_at', 'DESC')->paginate($request->input('perPage', 10)); + $query = $query->orderBy('created_at', 'DESC'); + if ($pagination) { + $sheets = $query->paginate($request->input('perPage', 10)); + } else { + $sheets = $query->get(); + } if (!empty($state) && $state == 'TO_BILL') { // Liste des feuilles de soins a afficher pour l'execution , // Retirer les feuilles de soins qui n'ont ni exams ou prescriptions non soldes $notEmptySheets = []; - foreach ($sheets->items() as $s) { + $array = $pagination ? $sheets->items() : $sheets; + foreach ($array as $s) { if (sizeof($s->exams) == 0 && sizeof($s->prescriptions) == 0) { continue; } $notEmptySheets[] = $s; } -// $sheets = $notEmptySheets; - $sheets->setCollection(collect($notEmptySheets)); + + if ($pagination) { + $sheets->setCollection(collect($notEmptySheets)); + } else { + $sheets = $notEmptySheets; + } } - foreach ($sheets->items() as $sheet) { + $array = $pagination ? $sheets->items() : $sheets; + foreach ($array as $sheet) { $this->formalizeHealthCareSheet($sheet); } diff --git a/app/Http/Controllers/InsuranceSubscriptionController.php b/app/Http/Controllers/InsuranceSubscriptionController.php index c9b2927..6a8a724 100644 --- a/app/Http/Controllers/InsuranceSubscriptionController.php +++ b/app/Http/Controllers/InsuranceSubscriptionController.php @@ -703,6 +703,16 @@ class InsuranceSubscriptionController extends Controller * type="integer" * ) * ), + * @OA\Parameter( + * parameter="pagination", + * name="pagination", + * description="pagination", + * in="query", + * required=false, + * @OA\Schema( + * type="boolean", + * ) + * ), * @OA\Response( * response=200, * description="OK", @@ -727,10 +737,12 @@ class InsuranceSubscriptionController extends Controller { $this->validate($request, [ 'user_id' => 'nullable|integer|exists:users,id', - 'type' => 'nullable|in:ALL,ACCEPTED' + 'type' => 'nullable|in:ALL,ACCEPTED', + 'pagination' => 'nullable|boolean' ]); $user = User::findOrFail($request->input('user_id')); $currency_code = $user->network->country->currency_code; + $pagination = $request->input('pagination'); $query = NhInsurancesSubscription::with(['network:id,name', 'beneficiaries']); @@ -745,8 +757,14 @@ class InsuranceSubscriptionController extends Controller } } - $subscriptions = $query->paginate($request->input('perPage', 10));; - foreach ($subscriptions->items() as $subscription) { + if ($pagination) { + $subscriptions = $query->paginate($request->input('perPage', 10)); + } else { + $subscriptions = $query->get(); + } + + $array = $pagination ? $subscriptions->items() : $subscriptions; + foreach ($array as $subscription) { $subscription->state = trans('states.' . $subscription->state); $subscription->insurance_action = trans('states.' . $subscription->insurance_action); $subscription->bonus_amount = $this->toMoneyWithCurrencyCode($subscription->bonus_amount, $currency_code); diff --git a/app/Http/Middleware/BooleanMiddleware.php b/app/Http/Middleware/BooleanMiddleware.php new file mode 100644 index 0000000..6b9ba05 --- /dev/null +++ b/app/Http/Middleware/BooleanMiddleware.php @@ -0,0 +1,39 @@ +replace($this->transform($request->all())); + return $next($request); + } + + /** + * Transform boolean strings to boolean + * @param array $parameters + * @return array + */ + private function transform(array $parameters): array + { + return collect($parameters)->map(function ($param) { + if ($param == 'true' || $param == 'false') { + return filter_var($param, FILTER_VALIDATE_BOOLEAN); + } + + return $param; + })->all(); + } +} diff --git a/bootstrap/app.php b/bootstrap/app.php index 98328bf..fa89b35 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -82,6 +82,7 @@ $app->alias('mailer', Illuminate\Contracts\Mail\MailQueue::class); $app->middleware([ App\Http\Middleware\Localization::class, + App\Http\Middleware\BooleanMiddleware::class, ]); $app->routeMiddleware([