diff --git a/app/Http/Controllers/InsuranceController.php b/app/Http/Controllers/InsuranceController.php index a59d22d..7b642f6 100644 --- a/app/Http/Controllers/InsuranceController.php +++ b/app/Http/Controllers/InsuranceController.php @@ -274,7 +274,7 @@ class InsuranceController extends Controller $insurance = NhInsurance::findOrFail($id); $latestSubscription = NhInsurancesSubscription::where('network_id', $request->input('network_id'))->where('user_id', $request->input('user_id')) - ->whereNotIn('state', [InsuranceSubscriptionState::REJECTED])->orderBy('created_at', 'DESC')->first(); + ->whereIn('state', [InsuranceSubscriptionState::UNDER_VALIDATION, InsuranceSubscriptionState::AWAITING_FURTHER_INFORMATION])->orderBy('created_at', 'DESC')->first(); if (isset($latestSubscription)) { return $this->errorResponse(trans('errors.subscription_cannot_be_submitted', ['state' => mb_strtolower(trans('states.' . $latestSubscription->state), 'UTF-8')])); @@ -308,7 +308,8 @@ class InsuranceController extends Controller 'number_of_beneficiaries' => sizeof($request->input('beneficiaries', [])), 'number_of_months' => $monthPrice->number_of_months, 'bonus_amount' => $monthPrice->min_amount, - 'insurance_action' => InsuranceAction::ADDITION_OF_BENEFICIARY + 'insurance_action' => InsuranceAction::ADDITION_OF_BENEFICIARY, + 'state' => InsuranceSubscriptionState::UNDER_VALIDATION, ]); // Ajouter les nouveaux ayant droit @@ -402,6 +403,13 @@ class InsuranceController extends Controller ]); $insurance = NhInsurance::findOrFail($id); + $latestSubscription = NhInsurancesSubscription::where('network_id', $insurance->network_id)->where('user_id', $insurance->user_id) + ->whereIn('state', [InsuranceSubscriptionState::UNDER_VALIDATION, InsuranceSubscriptionState::AWAITING_FURTHER_INFORMATION])->orderBy('created_at', 'DESC')->first(); + + if (isset($latestSubscription)) { + return $this->errorResponse(trans('errors.subscription_cannot_be_submitted', ['state' => mb_strtolower(trans('states.' . $latestSubscription->state), 'UTF-8')])); + } + $user = $insurance->user; $identification = $insurance->user->identification; @@ -411,51 +419,33 @@ class InsuranceController extends Controller if (!checkPassword($request->password, $user->encrypted_password, $user->salt)) return $this->errorResponse(trans('messages.incorrect_user_password')); + $current_beneficiaries_ids = array_map(function ($b) { + return $b['id']; + }, $insurance->beneficiaries->toArray()); + + foreach ($request->input('beneficiaries_ids') as $index => $id) { + if (!in_array($id, $current_beneficiaries_ids)) { + return $this->errorResponse(__('errors.beneficiary_not_part_in_insurance', ['id' => $index + 1])); + } + } + try { DB::beginTransaction(); $datetime = $this->getCurrentTimeByCountryCode($user->network->country->code_country); - // Creer une nouvelle subscription - $newSubscription = NhInsurancesSubscription::create([ - 'network_id' => $insurance->network_id, - 'user_id' => $insurance->user_id, - 'insurance_subscription_id' => $this->generateSubscriptionID(), - 'number_of_beneficiaries' => sizeof($request->input('beneficiaries_ids', [])), - 'number_of_months' => $insurance->number_of_months, - 'bonus_amount' => $insurance->min_amount, - 'insurance_action' => InsuranceAction::DELETION_OF_BENEFICIARY, - 'created_at' => $datetime, 'updated_at' => $datetime - ]); - $beneficiaries = NhInsurancesHavingRight::where('insurance_id', $insurance->id)->whereIn('having_right_id', $request->input('beneficiaries_ids'))->get(); $beneficiariesBonus = 0; foreach ($beneficiaries as $b) { - $beneficiariesBonus += $b->bonus_amount; - NhInsurancesHavingRight::create([ - 'insurance_subscription_id' => $newSubscription->id, - 'having_right_id' => $b->having_right_id, - 'created_at' => $datetime, 'updated_at' => $datetime - ]); + $beneficiariesBonus += $b->beneficiary->bonus_amount; } - $newSubscription->total_bonus_amount = -$beneficiariesBonus; - $newSubscription->save(); - NhInsurancesSubscriptionsHistory::create([ - 'action' => 'ADD', - 'insurance_subscription_id' => $newSubscription->insurance_subscription_id, - 'insurance_subscription_state' => $newSubscription->state, - 'created_at' => $datetime, 'updated_at' => $datetime, - ]); + $insurance->number_of_beneficiaries -= sizeof($beneficiaries); + $insurance->total_bonus_amount -= $beneficiariesBonus; + $insurance->updated_at = $datetime; + $insurance->save(); - Event::dispatch(new InsuranceEvent($newSubscription, trans('messages.insurance_deletion_beneficiary'), trans('messages.insurance_deletion_beneficiary_mail', ['name' => $newSubscription->user->lastname, 'subscription_id' => $newSubscription->insurance_subscription_id, - 'bonus_amount' => $this->toMoneyWithNetwork($newSubscription->total_bonus_amount, $newSubscription->network_id), 'number_of_beneficiaries' => $newSubscription->number_of_beneficiaries, - 'gender' => trans('states.' . $identification->gender), 'insurance_name' => $insurance->network->name]))); - -// $beneficiaries = $insurance->beneficiaries; -// $insurance->number_of_beneficiaries = sizeof($beneficiaries); -// $insurance->total_bonus_amount = $insurance->bonus_amount + $beneficiariesBonus; -// $insurance->updated_at = $datetime; -// $insurance->save(); + // Supprimer ces beneficiares de l'assurance + $beneficiaries->each->delete(); DB::commit(); return $this->successResponse(trans('messages.insurance_deletion_beneficiary_successful')); diff --git a/app/Models/NhInsurancesHavingRight.php b/app/Models/NhInsurancesHavingRight.php index d32fbc1..35444c4 100644 --- a/app/Models/NhInsurancesHavingRight.php +++ b/app/Models/NhInsurancesHavingRight.php @@ -39,4 +39,10 @@ class NhInsurancesHavingRight extends Pivot 'insurance_id', 'having_right_id', ]; + + public function beneficiary() + { + return $this->hasOne(NhHavingRight::class, 'id', 'having_right_id'); + } + } diff --git a/resources/lang/en/errors.php b/resources/lang/en/errors.php index 81b7536..4799d27 100755 --- a/resources/lang/en/errors.php +++ b/resources/lang/en/errors.php @@ -42,5 +42,8 @@ return [ "exam_not_belong_to_sheet" => "The exam: id does not belong to the care sheet", "prescription_not_belong_to_sheet" => "The prescription: id does not belong to the care sheet", "sheet_cannot_be_modified" => "This care sheet cannot be modified", - "unauthorized_to_update_sheet" => "You are not authorized to modify this care sheet" + "unauthorized_to_update_sheet" => "You are not authorized to modify this care sheet", + "beneficiary_not_part_in_insurance" => "Beneficiary number :id is not part of this insurance", + 'act_application_already_pending' => "You already have an application pending for this act", + 'insurance_not_in_order' => "This insurance is not in order" ]; diff --git a/resources/lang/en/messages.php b/resources/lang/en/messages.php index 3b0c508..acdf8b2 100755 --- a/resources/lang/en/messages.php +++ b/resources/lang/en/messages.php @@ -137,15 +137,5 @@ A new consultation or prescription has been made with your insurance. '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", - 'insurance_deletion_beneficiary_successful' => "Request for deletion of your insurance beneficiary successful", - 'insurance_deletion_beneficiary' => "Request for deletion of beneficiary from your insurance", - 'insurance_deletion_beneficiary_mail' => ":gender :name , - -Your request for deletion of entitlement to your insurance is being validated. - Request information : - - ID: :subscription_id - - Name of the insurance: :insurance_name - - Premium amount: :bonus_amount - - Number of beneficiaries : :number_of_beneficiaries - ", + 'insurance_deletion_beneficiary_successful' => "Deletion of your insurance beneficiary successful", ]; diff --git a/resources/lang/fr/errors.php b/resources/lang/fr/errors.php index 7e424dd..2cdc952 100755 --- a/resources/lang/fr/errors.php +++ b/resources/lang/fr/errors.php @@ -42,5 +42,8 @@ return [ "exam_not_belong_to_sheet" => "L'examen :id n'appartient pas à la feuille de soins", "prescription_not_belong_to_sheet" => "La prescription :id n'appartient pas à la feuille de soins", "sheet_cannot_be_modified" => "Cette feuille de soins ne peut être modifiée", - "unauthorized_to_update_sheet" => "Vous n'êtes pas autorisé à modifier cette feuille de soins" + "unauthorized_to_update_sheet" => "Vous n'êtes pas autorisé à modifier cette feuille de soins", + "beneficiary_not_part_in_insurance" => "Le bénéficiaire numéro :id ne fait pas partie de cette assurance", + 'act_application_already_pending' => "Vous avez deja une demande en cours de validation pour cet acte.", + 'insurance_not_in_order' => "Cette assurance n'est pas en règle" ]; diff --git a/resources/lang/fr/messages.php b/resources/lang/fr/messages.php index 45f659d..3d76ff5 100755 --- a/resources/lang/fr/messages.php +++ b/resources/lang/fr/messages.php @@ -153,15 +153,5 @@ Une nouvelle execution de prescription vient d'etre effectuée sur votre assuran '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", - 'insurance_deletion_beneficiary_successful' => "Demande de suppression d'ayant droit à votre assurance réussie", - 'insurance_deletion_beneficiary' => "Demande de suppression d'ayant droit à votre assurance", - 'insurance_deletion_beneficiary_mail' => ":gender :name , - -Votre demande de suppression d'ayant droit à votre assurance est en cours de validation. - Informations de la demande : - - ID : :subscription_id - - Nom de l'assurance : :insurance_name - - Montant de la prime : :bonus_amount - - Nombre d'ayants droit : :number_of_beneficiaries - ", + 'insurance_deletion_beneficiary_successful' => "Suppression d'ayant droit à votre assurance réussie", ];