Add delete having right endpoints

This commit is contained in:
Djery-Tom 2022-02-03 18:10:19 +01:00
parent ad1d22a7bd
commit 2c0df32542
6 changed files with 43 additions and 61 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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