Add treat care request endpoints

This commit is contained in:
Djery-Tom 2022-02-01 11:58:58 +01:00
parent 1436dbda22
commit eb3afacf63
10 changed files with 194 additions and 7 deletions

View File

@ -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));

View File

@ -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 {

View File

@ -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));

View File

@ -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');
}
}

View File

@ -0,0 +1,20 @@
<?php
/**
* Created by Reliese Model.
*/
namespace App\Models;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
class NhInfosAuthorizationOfCareRequest extends Model
{
protected $table = 'nh_infos_authorization_of_care_requests';
public function network()
{
return $this->belongsTo(Network::class, 'network_id');
}
}

View File

@ -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();
});

View File

@ -0,0 +1,33 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
class CreaeNhInfosAuthorizationOfCareRequestsView extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
DB::statement("CREATE OR REPLACE VIEW nh_infos_authorization_of_care_requests AS
SELECT r.* , na.name as act_name , na.code as act_code, nnc.network_id , u.lastname as user_lastname , u.firstname as user_firstname , u.phone as user_phone, u.email as user_email , nva.lastname as validating_agent_lastname,
nva.firstname as validating_agent_firstname , nva.phone as validating_agent_phone, nva.email as validating_agent_email
FROM nh_authorization_of_care_requests r JOIN users u ON r.user_id = u.id JOIN nh_acts na on na.id = r.act_id JOIN nh_networks_configs nnc on na.nh_network_config_id = nnc.id
LEFT JOIN nh_validating_agents nva on r.validating_agent_id = nva.id");
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}

View File

@ -131,5 +131,10 @@ A new consultation or prescription has been made with your insurance.
'recipient' => "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"
];

View File

@ -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"
];

View File

@ -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');
});