150 lines
5.1 KiB
PHP
Executable File
150 lines
5.1 KiB
PHP
Executable File
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
|
|
use App\Events\InsuredConsultation;
|
|
use App\HealthCareSheetType;
|
|
use App\InsuranceState;
|
|
use App\InsuranceSubscriptionState;
|
|
use App\Models\AgentPlus;
|
|
use App\Models\NhAuthorizationOfCareRequest;
|
|
use App\Models\NhAct;
|
|
use App\Models\NhDrugsAndDevice;
|
|
use App\Models\NhExam;
|
|
use App\Models\NhHealthCareSheet;
|
|
use App\Models\NhHealthCareSheetsExam;
|
|
use App\Models\NhHealthCareSheetsHistory;
|
|
use App\Models\NhHealthCareSheetsPerformance;
|
|
use App\Models\NhHealthCareSheetsPrescription;
|
|
use App\Models\NhInfosHealthCareSheets;
|
|
use App\Models\NhInsurance;
|
|
use App\Models\NhMedicalPrescription;
|
|
use App\Models\NhNetworksConfig;
|
|
use App\Models\NhPerformance;
|
|
use App\Models\NhProviderClass;
|
|
use App\Models\NhValidatingAgent;
|
|
use App\Models\User;
|
|
use App\Traits\ApiResponser;
|
|
use App\Traits\Helper;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Event;
|
|
use Illuminate\Support\Facades\Log;
|
|
use Illuminate\Support\Facades\Mail;
|
|
use stdClass;
|
|
use Throwable;
|
|
|
|
class AuthorizationCareRequestController extends Controller
|
|
{
|
|
/**
|
|
* @OA\Post(
|
|
* path="/authorizations-care-requests",
|
|
* summary="Demander une autorisation de soin",
|
|
* tags={"Demandes d'autorisation de soins"},
|
|
* security={{"api_key":{}}},
|
|
* @OA\RequestBody(
|
|
* description="Corps de la requete",
|
|
* required=true,
|
|
* @OA\MediaType(
|
|
* mediaType="application/json",
|
|
* @OA\Schema(
|
|
* schema="request_for_authorizations_of_care",
|
|
* title = "Demande autorisation de soins",
|
|
* required={"health_care_sheet_id", "network_agent_id", "password", "practitioner_lastname", "practitioner_provider_class_id",
|
|
* "prescriptions" , "exams"},
|
|
* @OA\Property(
|
|
* property="act_id",
|
|
* description = "ID de l'acte",
|
|
* type="integer",
|
|
* example= 5
|
|
* ),
|
|
* @OA\Property(
|
|
* property="user_id",
|
|
* description = "ID de l'utilisateur",
|
|
* type="integer",
|
|
* example= 301
|
|
* ),
|
|
* @OA\Property(
|
|
* property="password",
|
|
* description = "Mot de passe",
|
|
* type="string",
|
|
* example= "password"
|
|
* )
|
|
* ),
|
|
* ),
|
|
* ),
|
|
* @OA\Response(
|
|
* response=200,
|
|
* description="OK",
|
|
* @OA\JsonContent(
|
|
* ref="#/components/schemas/ApiResponse",
|
|
* example = {
|
|
* "status" : 200,
|
|
* "response" : "Demande autorisation soin envoyée",
|
|
* "error":null
|
|
* }
|
|
* )
|
|
* )
|
|
* )
|
|
*/
|
|
public function store(Request $request)
|
|
{
|
|
$this->validate($request, [
|
|
'act_id' => 'required|integer|exists:nh_acts,id',
|
|
'user_id' => 'required|integer|exists:users,id',
|
|
'password' => 'required|string'
|
|
]);
|
|
|
|
$user = User::find($request->input('user_id'));
|
|
$act_id = $request->input('act_id');
|
|
$password = $request->input('password');
|
|
if (!checkPassword($password, $user->encrypted_password, $user->salt))
|
|
return $this->errorResponse(trans('messages.incorrect_user_password'));
|
|
|
|
$act = NhAct::find($act_id);
|
|
try {
|
|
|
|
DB::beginTransaction();
|
|
NhAuthorizationOfCareRequest::create([
|
|
'request_id' => $this->generateRequestID(),
|
|
'user_id' => $user->id,
|
|
'act_id' => $act_id,
|
|
'state' => InsuranceSubscriptionState::UNDER_VALIDATION
|
|
]);
|
|
DB::commit();
|
|
|
|
$recipients = array_map(function ($email) {
|
|
return preg_replace("/\s+/", "", $email);
|
|
}, NhValidatingAgent::where('role', 'DOCTOR')->whereNotNull('password')->pluck('email')->toArray());
|
|
|
|
|
|
$title = __('messages.new_care_authorisation');
|
|
$message = __('messages.new_care_authorisation_email', ['insured' => $user->lastname . ' ' . $user->firstname, 'act' => $act->name]);
|
|
|
|
Mail::mailer('smtp')->raw($message, function ($message) use ($recipients, $title) {
|
|
$message->subject($title)
|
|
->to($recipients);
|
|
});
|
|
|
|
} catch (Throwable $t) {
|
|
DB::rollBack();
|
|
Log::error('-------- Authorization of care error -----------');
|
|
Log::error($t->getMessage() . " :\n" . $t->getTraceAsString());
|
|
}
|
|
|
|
return $this->successResponse(__('messages.new_care_authorisation_sent'));
|
|
}
|
|
|
|
private function generateRequestID(): string
|
|
{
|
|
do {
|
|
$code = generateTransactionCode();
|
|
$codeCorrect = NhAuthorizationOfCareRequest::where('request_id', $code)->count() < 0;
|
|
} while ($codeCorrect);
|
|
return $code;
|
|
}
|
|
|
|
|
|
}
|