From eb3afacf63c19abd5ba8a70bf58bbb3979bb3ece Mon Sep 17 00:00:00 2001 From: Djery-Tom Date: Tue, 1 Feb 2022 11:58:58 +0100 Subject: [PATCH] Add treat care request endpoints --- app/Console/Kernel.php | 4 +- .../AuthorizationCareRequestController.php | 114 ++++++++++++++++++ app/Http/Controllers/InvoiceController.php | 4 +- app/Models/NhAuthorizationOfCareRequest.php | 9 +- .../NhInfosAuthorizationOfCareRequest.php | 20 +++ ...h_authorization_of_care_requests_table.php | 1 + ...os_authorization_of_care_requests_view.php | 33 +++++ resources/lang/en/messages.php | 7 +- resources/lang/fr/messages.php | 7 +- routes/web.php | 2 + 10 files changed, 194 insertions(+), 7 deletions(-) create mode 100644 app/Models/NhInfosAuthorizationOfCareRequest.php create mode 100644 database/migrations/2022_02_01_074814_creae_nh_infos_authorization_of_care_requests_view.php diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 00477d5..78269ae 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -141,8 +141,8 @@ class Kernel extends ConsoleKernel mkdir(public_path($directoryName), 0755); } - $title = trans('messages.invoice') . ' ' . $invoice->period; - $message = $title; + $title = $agent->lastname . ' - ' . trans('messages.invoice') . ' ' . $invoice->invoice_id; + $message = __('messages.generated_invoice_mail', ['agent' => $agent->lastname, 'period' => $invoice->period]); $file = PDF::loadView('emails.invoice', $invoice->toArray())->setPaper('a4', 'landscape')->setWarnings(false)->save(public_path($directoryName . $filename)); diff --git a/app/Http/Controllers/AuthorizationCareRequestController.php b/app/Http/Controllers/AuthorizationCareRequestController.php index ee8c001..1dbdf56 100755 --- a/app/Http/Controllers/AuthorizationCareRequestController.php +++ b/app/Http/Controllers/AuthorizationCareRequestController.php @@ -17,6 +17,7 @@ use App\Models\NhHealthCareSheetsExam; use App\Models\NhHealthCareSheetsHistory; use App\Models\NhHealthCareSheetsPerformance; use App\Models\NhHealthCareSheetsPrescription; +use App\Models\NhInfosAuthorizationOfCareRequest; use App\Models\NhInfosHealthCareSheets; use App\Models\NhInsurance; use App\Models\NhMedicalPrescription; @@ -27,6 +28,7 @@ use App\Models\NhValidatingAgent; use App\Models\User; use App\Traits\ApiResponser; use App\Traits\Helper; +use GuzzleHttp\Client; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Event; @@ -136,6 +138,118 @@ class AuthorizationCareRequestController extends Controller return $this->successResponse(__('messages.new_care_authorisation_sent')); } + public function treatRequest(Request $request) + { + $this->validate($request, [ + 'request_id' => 'required|integer|exists:nh_authorization_of_care_requests,id', + 'validating_agent_id' => 'required|integer|exists:nh_validating_agents,id', + 'action' => 'required|in:ACCEPT,REJECT' + ]); + + $action = $request->input('action'); + $validating_agent_id = $request->input('validating_agent_id'); + $request = NhAuthorizationOfCareRequest::findOrFail($request->input('request_id')); + + if ($request->state != InsuranceSubscriptionState::UNDER_VALIDATION) { + return $this->errorResponse(trans('errors.care_request_already_been_processed')); + } + + $datetime = $this->getCurrentTimeByCountryCode($request->user->network->country->code_country); + + if ($action == 'ACCEPT') { + $request->state = InsuranceSubscriptionState::ACCEPTED; + $message = trans('messages.care_request_accepted'); + $notification = trans('messages.care_request_accepted_notification', ['request_id' => $request->request_id]); + } else { + $request->state = InsuranceSubscriptionState::REJECTED; + $message = trans('messages.care_request_rejected'); + $notification = trans('messages.care_request_rejected_notification', ['request_id' => $request->request_id]); + + } + $request->validating_agent_id = $validating_agent_id; + $request->updated_at = $datetime; + $request->save(); + + try { + $client = new Client([ + 'base_uri' => config('services.notification_service.base_uri'), + ]); + $headers = [ + 'Authorization' => config('services.notification_service.key'), + ]; + $body = new stdClass(); + $body->user_code = $request->user->user_code; + $body->message = $notification; + $body->date = $datetime; + + $data = new stdClass(); + $data->screen = "notificationview"; + $data->data = new stdClass(); + $body->data = $data; + $client->request('POST', '/onesignal/pushToUser', ['json' => $body, 'headers' => $headers]); + } catch (Throwable $t) { + Log::error('-------- Treat Care Request notification not sent-----------'); + Log::error($t->getMessage() . '\n' . $t->getTraceAsString()); + } + return $this->successResponse($message); + } + + /** + * @OA\Get( + * path="/authorizations-care-requests", + * summary="Lister toutes les demandes autorisation de soin", + * tags={"Demandes d'autorisation de soins"}, + * security={{"api_key":{}}}, + * @OA\Parameter( + * parameter="user_id", + * name="user_id", + * description="ID de l'utilisateur", + * in="query", + * required=true, + * @OA\Schema( + * type="integer", + * ) + * ), + * @OA\Parameter( + * parameter="page", + * name="page", + * description="Page", + * in="query", + * required=false, + * @OA\Schema( + * type="integer" + * ) + * ), + * @OA\Response( + * response=200, + * description="OK", + * @OA\JsonContent( + * ref="#/components/schemas/ApiResponse", + * example = { + * "status" : 200, + * "response" : {{"id":2,"request_id":"E7879YZMOFOE","user_id":349,"act_id":7,"state":"EN COURS DE VALIDATION","validating_agent_id":null,"created_at":"2022-02-01T10:00:02.000000Z","updated_at":"2022-02-01T10:00:02.000000Z"," + * act_name":"Les analyses de biologie m\u00e9dicale","act_code":"CODE4","network_id":250,"user_lastname":"Tom Di","user_firstname":null,"user_phone":"+237690716648","user_email":"ddoubletom@gmail.com","validating_agent_lastname":null, + * "validating_agent_firstname":null,"validating_agent_phone":null,"validating_agent_email":null,"network":{"id":250,"name":"Cnamgs-pharmacies"}}}, + * "error":null + * } + * ) + * ) + * ) + */ + public function getAll(Request $request) + { + $this->validate($request, [ + 'user_id' => 'nullable|integer|exists:users,id' + ]); + + $requests = NhInfosAuthorizationOfCareRequest::with(['network:id,name'])->where('user_id', $request->input('user_id')) + ->paginate($request->input('perPage', 10)); + foreach ($requests->items() as $r) { + $r->state = trans('states.' . $r->state); + } + return $this->successResponse($requests); + } + private function generateRequestID(): string { do { diff --git a/app/Http/Controllers/InvoiceController.php b/app/Http/Controllers/InvoiceController.php index e296d92..1cab77b 100755 --- a/app/Http/Controllers/InvoiceController.php +++ b/app/Http/Controllers/InvoiceController.php @@ -116,8 +116,8 @@ class InvoiceController extends Controller mkdir(public_path($directoryName), 0755); } - $title = trans('messages.invoice') . ' ' . $invoice->period; - $message = $title; + $title = $agent->lastname . ' - ' . trans('messages.invoice') . ' ' . $invoice->invoice_id; + $message = __('messages.generated_invoice_mail', ['agent' => $agent->lastname, 'period' => $invoice->period]); $file = PDF::loadView('emails.invoice', $invoice->toArray())->setPaper('a4', 'landscape')->setWarnings(false)->save(public_path($directoryName . $filename)); diff --git a/app/Models/NhAuthorizationOfCareRequest.php b/app/Models/NhAuthorizationOfCareRequest.php index 8e17e92..519df52 100644 --- a/app/Models/NhAuthorizationOfCareRequest.php +++ b/app/Models/NhAuthorizationOfCareRequest.php @@ -17,6 +17,7 @@ use Illuminate\Database\Eloquent\Model; * @property int $user_id * @property int $act_id * @property string $state + * @property int|null $validating_agent_id * @property Carbon $created_at * @property Carbon $updated_at * @@ -35,6 +36,12 @@ class NhAuthorizationOfCareRequest extends Model 'request_id', 'user_id', 'act_id', - 'state' + 'state', + 'validating_agent_id' ]; + + public function user() + { + return $this->belongsTo(User::class, 'user_id'); + } } diff --git a/app/Models/NhInfosAuthorizationOfCareRequest.php b/app/Models/NhInfosAuthorizationOfCareRequest.php new file mode 100644 index 0000000..a5c9360 --- /dev/null +++ b/app/Models/NhInfosAuthorizationOfCareRequest.php @@ -0,0 +1,20 @@ +belongsTo(Network::class, 'network_id'); + } +} diff --git a/database/migrations/2022_01_31_144613_create_nh_authorization_of_care_requests_table.php b/database/migrations/2022_01_31_144613_create_nh_authorization_of_care_requests_table.php index 91a4dd5..8900da3 100644 --- a/database/migrations/2022_01_31_144613_create_nh_authorization_of_care_requests_table.php +++ b/database/migrations/2022_01_31_144613_create_nh_authorization_of_care_requests_table.php @@ -19,6 +19,7 @@ class CreateNhAuthorizationOfCareRequestsTable extends Migration $table->integer('user_id'); $table->integer('act_id'); $table->enum('state', ['UNDER_VALIDATION', 'ACCEPTED', 'REJECTED'])->default('UNDER_VALIDATION'); + $table->integer('validating_agent_id')->nullable(); $table->timestamp('created_at')->useCurrent(); $table->timestamp('updated_at')->useCurrent(); }); diff --git a/database/migrations/2022_02_01_074814_creae_nh_infos_authorization_of_care_requests_view.php b/database/migrations/2022_02_01_074814_creae_nh_infos_authorization_of_care_requests_view.php new file mode 100644 index 0000000..c2756e0 --- /dev/null +++ b/database/migrations/2022_02_01_074814_creae_nh_infos_authorization_of_care_requests_view.php @@ -0,0 +1,33 @@ + "Recipient", 'new_care_authorisation' => "New care authorisation", 'new_care_authorisation_email' => "Insured :insured requests new care authorisation for procedure :act", - 'new_care_authorisation_sent' => "New care authorisation request sent" + 'new_care_authorisation_sent' => "New care authorisation request sent", + 'care_request_accepted' => "Care request accepted", + 'care_request_rejected' => "Care request refused", + 'care_request_rejected_notification' => "Your request for care authorisation :request_id has been refused", + 'care_request_accepted_notification' => "Your care request :request_id has been accepted", + 'generated_invoice_mail' => "Invoice issued by :agent for the period :period" ]; diff --git a/resources/lang/fr/messages.php b/resources/lang/fr/messages.php index c5a22d7..3a4ec93 100755 --- a/resources/lang/fr/messages.php +++ b/resources/lang/fr/messages.php @@ -147,5 +147,10 @@ Une nouvelle execution de prescription vient d'etre effectuée sur votre assuran 'recipient' => "Destinataire", 'new_care_authorisation' => "Nouvelle autorisation de soin", 'new_care_authorisation_email' => "L'assuré :insured demande une nouvelle autorisation de soin pour l'acte :act", - 'new_care_authorisation_sent' => "Nouvelle demande autorisation soin envoyée" + 'new_care_authorisation_sent' => "Nouvelle demande autorisation soin envoyée", + 'care_request_accepted' => "Demande de soins acceptée", + 'care_request_rejected' => "Demande de soins refusée", + 'care_request_rejected_notification' => "Votre demande d'autorisation de soins :request_id a été refusée", + 'care_request_accepted_notification' => "Votre demande d'autorisation de soins :request_id a été acceptée", + 'generated_invoice_mail' => "Facture émise par :agent pour la période :period" ]; diff --git a/routes/web.php b/routes/web.php index 3060301..84c0ff3 100644 --- a/routes/web.php +++ b/routes/web.php @@ -53,5 +53,7 @@ $router->group(['prefix' => '', 'middleware' => 'auth'], function () use ($route $router->get('invoices', 'InvoiceController@getInvoices'); $router->get('generate-invoice', 'InvoiceController@generateInvoice'); + $router->get('authorizations-care-requests', 'AuthorizationCareRequestController@getAll'); $router->post('authorizations-care-requests', 'AuthorizationCareRequestController@store'); + $router->put('authorizations-care-requests', 'AuthorizationCareRequestController@treatRequest'); });