From 04b815b76741cf16ea559e01a88685175aa47040 Mon Sep 17 00:00:00 2001 From: Djery-Tom Date: Tue, 29 Mar 2022 20:20:43 +0100 Subject: [PATCH] Add NhInsuranceInvoice for partial payment --- .../InsuranceInvoiceController.php | 297 ++++++++++++++++++ .../InsuranceSubscriptionController.php | 70 ++++- app/InsuranceInvoiceState.php | 10 + app/InsuranceState.php | 3 + app/Models/NhInsurance.php | 10 + app/Models/NhInsurancesInvoice.php | 58 ++++ app/Traits/Helper.php | 11 + ...61135_create_nh_networks_configs_table.php | 2 +- ...64749_update_nh_infos_insurances_view2.php | 2 +- ...h_infos_insurances_subscriptions_view2.php | 2 +- ...51_create_nh_insurances_invoices_table.php | 39 +++ ...payment_split_details_to_nh_insurances.php | 44 +++ resources/lang/en/errors.php | 4 +- resources/lang/en/messages.php | 22 ++ resources/lang/en/states.php | 3 +- resources/lang/fr/errors.php | 4 +- resources/lang/fr/messages.php | 22 ++ resources/lang/fr/states.php | 3 +- routes/web.php | 6 + 19 files changed, 604 insertions(+), 8 deletions(-) create mode 100644 app/Http/Controllers/InsuranceInvoiceController.php create mode 100644 app/InsuranceInvoiceState.php create mode 100644 app/Models/NhInsurancesInvoice.php create mode 100644 database/migrations/2022_03_29_085551_create_nh_insurances_invoices_table.php create mode 100644 database/migrations/2022_03_29_093840_update_state_and_add_payment_split_details_to_nh_insurances.php diff --git a/app/Http/Controllers/InsuranceInvoiceController.php b/app/Http/Controllers/InsuranceInvoiceController.php new file mode 100644 index 0000000..a10be40 --- /dev/null +++ b/app/Http/Controllers/InsuranceInvoiceController.php @@ -0,0 +1,297 @@ +validate($request, [ + 'user_id' => 'required|integer|exists:users,id', + 'state' => 'nullable|in:PAID,UNPAID,TO_PAID', + 'pagination' => 'nullable|boolean' + ]); + $user_id = $request->input('user_id'); + $user = User::findOrFail($user_id); + $currency_code = $user->network->country->currency_code; + $pagination = $request->input('pagination'); + $state = $request->input('state'); + $datetime = $this->getCurrentTimeByCountryCode($user->network->country->code_country); + + $query = NhInsurancesInvoice::with(['insurance', 'subscription']) + ->whereHas('insurance', function ($q) use ($user_id) { + return $q->where('user_id', $user_id); + }); + + if (!empty($state)) { + if ($state == 'TO_PAID') { + $query = $query->where('state', InsuranceInvoiceState::UNPAID) + ->where('payment_deadline', '<', $datetime); + } else { + $query = $query->where('state', $state); + } + } + + if ($pagination) { + $invoices = $query->paginate($request->input('perPage', 10)); + } else { + $invoices = $query->get(); + } + + $array = $pagination ? $invoices->items() : $invoices; + foreach ($array as $invoice) { + $invoice->state = trans('states.' . $invoice->state); + $invoice->reason = trans('states.' . $invoice->reason); + $invoice->amount = $this->toMoneyWithCurrencyCode($invoice->amount, $currency_code); + } + return $this->successResponse($invoices); + } + + /** + * @OA\Put( + * path="/insurances/invoices/{id}/pay", + * summary="Payer la facture de l'assurance", + * tags={"Factures de l'assurance"}, + * security={{"api_key":{}}}, + * @OA\Parameter( + * parameter="id", + * name="id", + * description="ID de la facture", + * in="path", + * required=true, + * @OA\Schema( + * type="integer", + * default=12 + * ) + * ), + * @OA\RequestBody( + * description="Corps de la requete", + * required=true, + * @OA\MediaType( + * mediaType="application/json", + * @OA\Schema( + * @OA\Property(property="password", + * type="string", + * example = "addfdf21", + * description="Mot de passe de l'utilisateur" + * ) + * ), + * example = {"password":"adbc1215448"} + * ) + * ), + * @OA\Response( + * response=200, + * description="OK", + * @OA\JsonContent( + * ref="#/components/schemas/ApiResponse", + * example = {"status":200,"response":"Transaction réussie","error":null} + * ) + * ) + * ) + * @throws \App\Exceptions\AppException + */ + public function payInvoice($id, Request $request) + { + $this->validate($request, [ + 'password' => 'required|string', + ]); + + $invoice = NhInsurancesInvoice::findOrFail($id); + $datetime = $this->getCurrentTimeByCountryCode($invoice->insurance->network->country->code_country); + + if ($invoice->state == InsuranceInvoiceState::PAID) { + return $this->errorResponse(trans('errors.invoice_already_paid')); + } + + if ($invoice->payment_deadline < $datetime) { + return $this->errorResponse(trans('errors.payment_deadline_reached')); + } + + $user = $invoice->insurance->user; + $this->userCredentialsVerification($user, $request->input('password')); + + $currency = $this->getNetworkCurrency($invoice->insurance->network_id); + + $amountToPaid = $invoice->amount; + + if ($user->wallet->balance < $amountToPaid) { + $amount = $amountToPaid - $user->wallet->balance; + return $this->errorResponse(trans('errors.insufficient_balance', ['amount' => $this->toMoneyWithCurrencyCode($amount, $currency)])); + } + + try { + DB::beginTransaction(); + + $hyperviseur = AgentPlus::where('category', 'hyper')->where('network_id', $invoice->insurance->network_id)->firstOrFail(); + $walletHyperviseur = Wallet::where('id_networkAgent', $hyperviseur->network_agent_id)->firstOrFail(); + $walletHyperviseur->balance_princ += $amountToPaid; + $walletHyperviseur->save(); + + $user->balance_nano_health += $amountToPaid; + $user->wallet->balance -= $amountToPaid; + $user->wallet->save(); + $user->save(); + + $invoice->update(['state' => InsuranceInvoiceState::PAID, 'updated_at' => $datetime]); + $invoice->insurance->paid_deadlines++; + $isPartialPayment = true; + if ($invoice->insurance->paid_deadlines == $invoice->insurance->deadlines) { + $invoice->insurance->state = InsuranceState::PAID; + $isPartialPayment = false; + } + + if ($invoice->insurance->state == InsuranceState::PAID) { + + if ($invoice->reason == InsuranceAction::ADDITION_OF_BENEFICIARY) { + $invoice->insurance->bonus_amount = $invoice->subscription->bonus_amount; + $invoice->insurance->total_bonus_amount += $invoice->subscription->total_bonus_amount; + $invoice->insurance->number_of_beneficiaries += $invoice->subscription->number_of_beneficiaries; + $invoice->insurance->updated_at = $datetime; + $invoice->insurance->save(); + + foreach ($invoice->subscription->beneficiaries as $b) { + NhInsurancesHavingRight::create([ + 'insurance_id' => $invoice->insurance->id, + 'having_right_id' => $b->id + ]); + } + } + + if (in_array($invoice->reason, [InsuranceAction::ACTIVATION, InsuranceAction::RENEWAL])) { + if (empty($invoice->insurance->monthsGrid->waiting_period_days)) { + $start_at = $datetime; + } else { + $start_at = $this->addDaysToDateTime($datetime, $invoice->insurance->monthsGrid->waiting_period_days); + } + $end_at = $this->addMonthsToDateTime($start_at->format('Y-m-d H:i:s'), $invoice->insurance->monthsGrid->number_of_months); + $invoice->insurance->start_at = $start_at; + $invoice->insurance->end_at = $end_at; + } + } + + $invoice->insurance->save(); + + Event::dispatch(new InsuranceEvent($invoice->insurance, $isPartialPayment ? trans('messages.insurance_partially_paid') : trans('messages.insurance_subscription_paid'), + trans('messages.insurance_paid_mail', ['name' => $invoice->insurance->user->lastname, 'insured_id' => $invoice->insurance->insured_id, + 'bonus_amount' => $this->toMoneyWithCurrencyCode($invoice->insurance->bonus_amount, $currency), 'total_bonus_amount' => $this->toMoneyWithCurrencyCode($invoice->insurance->total_bonus_amount, $currency), 'number_of_beneficiaries' => $invoice->insurance->number_of_beneficiaries, + 'gender' => trans('states.' . $invoice->insurance->user->identification->gender), 'insurance_name' => $invoice->insurance->network->name, 'months' => $invoice->insurance->monthsGrid->number_of_months, 'invoice_id' => $invoice->invoice_id, + 'amount' => $this->toMoneyWithCurrencyCode($invoice->amount, $currency), 'paid_deadlines' => $invoice->insurance->paid_deadlines, 'remains_deadlines' => $invoice->insurance->deadlines - $invoice->insurance->paid_deadlines, + 'reason' => trans('states.' . $invoice->reason), 'title' => $isPartialPayment ? trans('messages.insurance_partially_paid_title') : trans('messages.insurance_fully_paid_title')]))); + DB::commit(); + return $this->successResponse(trans('messages.insurance_subscription_paid')); + } catch (Throwable $e) { + Log::error($e->getMessage() . '\n' . $e->getTraceAsString()); + DB::rollBack(); + return $this->errorResponse(trans('errors.unexpected_error'), 500); + } + } +} diff --git a/app/Http/Controllers/InsuranceSubscriptionController.php b/app/Http/Controllers/InsuranceSubscriptionController.php index 41fc3d3..b828861 100644 --- a/app/Http/Controllers/InsuranceSubscriptionController.php +++ b/app/Http/Controllers/InsuranceSubscriptionController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers; use App\Events\InsuranceEvent; use App\InsuranceAction; +use App\InsuranceInvoiceState; use App\InsuranceState; use App\InsuranceSubscriptionAffiliation; use App\InsuranceSubscriptionState; @@ -13,6 +14,7 @@ use App\Models\Identification; use App\Models\NhHavingRight; use App\Models\NhInsurance; use App\Models\NhInsurancesHavingRight; +use App\Models\NhInsurancesInvoice; use App\Models\NhInsurancesPayment; use App\Models\NhInsurancesSubscription; use App\Models\NhInsurancesSubscriptionsHistory; @@ -438,6 +440,73 @@ class InsuranceSubscriptionController extends Controller $notification = trans('messages.insurance_stop_accepted_notification', ['subscription_id' => $subscription->insurance_subscription_id]); $mail = trans('messages.insurance_stop_accepted_mail', $mail_data); } else { + $amount_per_split = round($subscription->total_bonus_amount / $subscription->monthsGrid->number_of_fractions); + $amount_last_payment = $subscription->total_bonus_amount - ($amount_per_split * ($subscription->monthsGrid->number_of_fractions - 1)); + + if ($subscription->insurance_action == InsuranceAction::ACTIVATION) { + $insuredId = $this->generateInsuredID(); + $insurance = NhInsurance::create([ + 'network_id' => $subscription->network_id, + 'user_id' => $subscription->user_id, + 'insured_id' => $insuredId, + 'months_grid_id' => $subscription->months_grid_id, + 'total_bonus_amount' => $subscription->total_bonus_amount, + 'number_of_beneficiaries' => $subscription->number_of_beneficiaries, + 'bonus_amount' => $subscription->bonus_amount, + 'created_at' => $datetime, 'updated_at' => $datetime, + 'state' => InsuranceState::UNDER_ACTIVATION, + 'deadlines' => $subscription->monthsGrid->number_of_fractions, + 'paid_deadlines' => 0, + 'amount_per_split' => $amount_per_split, + 'amount_last_payment' => $amount_last_payment + ]); + foreach ($subscription->beneficiaries as $b) { + NhInsurancesHavingRight::create([ + 'insurance_id' => $insurance->id, + 'having_right_id' => $b->id + ]); + } + // Generer la 1ere facture + NhInsurancesInvoice::create([ + 'invoice_id' => $this->generateInsuranceInvoiceID(), + 'insurance_id' => $insurance->id, + 'subscription_id' => $subscription->id, + 'amount' => $amount_per_split, + 'payment_deadline' => $this->addDaysToDateTime($datetime, 10), // 1 semaine + 3 jours + 'payment_reminder' => $this->addDaysToDateTime($datetime, 7), + 'state' => InsuranceInvoiceState::UNPAID, + 'reason' => $subscription->insurance_action + ]); + } + + if ($subscription->insurance_action == InsuranceAction::ADDITION_OF_BENEFICIARY) { + $insurance = NhInsurance::where('user_id', $subscription->user_id)->where('network_id', $subscription->network_id)->where('state', InsuranceState::PAID)->first(); + if (!isset($insurance)) { + DB::rollBack(); + return $this->errorResponse(trans('errors.not_insured'), 500); + } + + $insurance->update([ + 'state' => InsuranceState::UNDER_ADDING_BENEFICIARY, + 'deadlines' => $subscription->monthsGrid->number_of_fractions, + 'paid_deadlines' => 0, + 'amount_per_split' => $amount_per_split, + 'amount_last_payment' => $amount_last_payment, + 'updated_at' => $datetime, + ]); + + // Generer la 1ere facture + NhInsurancesInvoice::create([ + 'invoice_id' => $this->generateInsuranceInvoiceID(), + 'insurance_id' => $insurance->id, + 'subscription_id' => $subscription->id, + 'amount' => $amount_per_split, + 'payment_deadline' => $this->addDaysToDateTime($datetime, 10), // 1 semaine + 3 jours + 'payment_reminder' => $this->addDaysToDateTime($datetime, 7), + 'state' => InsuranceInvoiceState::UNPAID, + 'reason' => $subscription->insurance_action + ]); + } $message = trans('messages.insurance_subscription_accepted'); $notification = trans('messages.insurance_subscription_accepted_notification', ['subscription_id' => $subscription->insurance_subscription_id]); $mail = trans('messages.insurance_subscription_accepted_mail', $mail_data); @@ -449,7 +518,6 @@ class InsuranceSubscriptionController extends Controller 'insurance_subscription_state' => $subscription->state, 'agent_id' => $request->input('agent_id'), 'nh_validating_agent_id' => $request->input('nh_validating_agent_id'), - 'created_at' => $datetime, 'updated_at' => $datetime, ]); diff --git a/app/InsuranceInvoiceState.php b/app/InsuranceInvoiceState.php new file mode 100644 index 0000000..920ad64 --- /dev/null +++ b/app/InsuranceInvoiceState.php @@ -0,0 +1,10 @@ +belongsTo(NhInsurancesPayment::class, 'id', 'insurance_id'); } + + public function invoices() + { + return $this->hasMany(NhInsurancesInvoice::class, 'id'); + } + } diff --git a/app/Models/NhInsurancesInvoice.php b/app/Models/NhInsurancesInvoice.php new file mode 100644 index 0000000..2fe4eca --- /dev/null +++ b/app/Models/NhInsurancesInvoice.php @@ -0,0 +1,58 @@ + 'int', + 'subscription_id' => 'int', + ]; + + protected $fillable = [ + 'invoice_id', + 'insurance_id', + 'subscription_id', + 'amount', + 'payment_deadline', + 'payment_reminder', + 'state', + 'reason' + ]; + + public function insurance() + { + return $this->belongsTo(NhInsurance::class, 'insurance_id'); + } + + public function subscription() + { + return $this->belongsTo(NhInsurancesSubscription::class, 'subscription_id'); + } +} diff --git a/app/Traits/Helper.php b/app/Traits/Helper.php index 54ade10..8928ef1 100644 --- a/app/Traits/Helper.php +++ b/app/Traits/Helper.php @@ -17,6 +17,7 @@ use App\Models\NhHealthCareSheet; use App\Models\NhInfosHealthCareSheets; use App\Models\NhInsurance; use App\Models\NhInsurancesHavingRight; +use App\Models\NhInsurancesInvoice; use App\Models\NhInsurancesSubscription; use App\Models\NhMonthsPricesGrid; use App\Models\NhNetworksConfig; @@ -353,4 +354,14 @@ trait Helper } + public function generateInsuranceInvoiceID(): string + { + do { + $code = generateTransactionCode(); + $codeCorrect = NhInsurancesInvoice::where('invoice_id', $code)->count() < 0; + } while ($codeCorrect); + return $code; + } + + } diff --git a/database/migrations/2021_10_04_161135_create_nh_networks_configs_table.php b/database/migrations/2021_10_04_161135_create_nh_networks_configs_table.php index c6fcc35..a13e52a 100644 --- a/database/migrations/2021_10_04_161135_create_nh_networks_configs_table.php +++ b/database/migrations/2021_10_04_161135_create_nh_networks_configs_table.php @@ -17,7 +17,7 @@ class CreateNhNetworksConfigsTable extends Migration $table->id(); $table->integer('network_id'); $table->enum('provider_billing_period', ['WEEKLY', 'BIMONTHLY', 'MONTHLY'])->default('WEEKLY')->comment('Période de facturation des prestataires : hebdomadaire ou bimensuel ,mensuel '); - $table->decimal('max_number_of_beneficiaries', 1, 0)->default(0)->comment('Nombre d’ayant droit maximum : un nombre à un chiffre'); + $table->decimal('max_number_of_beneficiaries', 4, 0)->default(0)->comment('Nombre d’ayant droit maximum : un nombre à un chiffre'); $table->decimal('age_limit_of_child_beneficiary', 2, 0)->default(0)->comment('Age limite de l’ayant droit enfant : un nombre à 2 chiffres'); // $table->decimal('coverage_limit_per_insured_per_year', 10, 2)->default(0)->comment("Limite de la couverture par assuré par an"); $table->decimal('current_affection_percentage_insurer', 3, 0)->default(0)->comment("Affection courante: % part assureur"); diff --git a/database/migrations/2022_03_28_164749_update_nh_infos_insurances_view2.php b/database/migrations/2022_03_28_164749_update_nh_infos_insurances_view2.php index b752985..d185f6f 100644 --- a/database/migrations/2022_03_28_164749_update_nh_infos_insurances_view2.php +++ b/database/migrations/2022_03_28_164749_update_nh_infos_insurances_view2.php @@ -15,7 +15,7 @@ class UpdateNhInfosInsurancesView2 extends Migration public function up() { DB::statement("CREATE OR REPLACE VIEW nh_infos_insurances AS - SELECT nhi.* , nmpg.number_of_months, nmpg.payment_period , nmpg.payment_duration_months , u.lastname , u.phone , u.email , cc.currency_code FROM nh_insurances nhi + SELECT nhi.* , nmpg.number_of_months, nmpg.payment_period , nmpg.payment_duration_months , nmpg.number_of_fractions, u.lastname , u.phone , u.email , cc.currency_code FROM nh_insurances nhi JOIN nh_months_prices_grid nmpg on nhi.months_grid_id = nmpg.id JOIN users u ON nhi.user_id = u.id JOIN networks n on nhi.network_id = n.id JOIN countries_currencies cc on n.country_id = cc.id"); } diff --git a/database/migrations/2022_03_28_200507_update_nh_infos_insurances_subscriptions_view2.php b/database/migrations/2022_03_28_200507_update_nh_infos_insurances_subscriptions_view2.php index 5e0eb6f..3a64516 100644 --- a/database/migrations/2022_03_28_200507_update_nh_infos_insurances_subscriptions_view2.php +++ b/database/migrations/2022_03_28_200507_update_nh_infos_insurances_subscriptions_view2.php @@ -15,7 +15,7 @@ class UpdateNhInfosInsurancesSubscriptionsView2 extends Migration public function up() { DB::statement("CREATE OR REPLACE VIEW nh_infos_insurances_subscriptions AS - SELECT nhis.* , cc.currency_code , nmpg.number_of_months, nmpg.payment_period , nmpg.payment_duration_months , u.lastname , u.phone, u.email FROM nh_insurances_subscriptions nhis JOIN networks n ON nhis.network_id = n.id + SELECT nhis.* , cc.currency_code , nmpg.number_of_months, nmpg.payment_period , nmpg.payment_duration_months , nmpg.number_of_fractions , u.lastname , u.phone, u.email FROM nh_insurances_subscriptions nhis JOIN networks n ON nhis.network_id = n.id JOIN nh_months_prices_grid nmpg on nhis.months_grid_id = nmpg.id JOIN countries_currencies cc ON n.country_id = cc.id JOIN users u ON nhis.user_id = u.id;"); } diff --git a/database/migrations/2022_03_29_085551_create_nh_insurances_invoices_table.php b/database/migrations/2022_03_29_085551_create_nh_insurances_invoices_table.php new file mode 100644 index 0000000..dcd0daa --- /dev/null +++ b/database/migrations/2022_03_29_085551_create_nh_insurances_invoices_table.php @@ -0,0 +1,39 @@ +id(); + $table->string('invoice_id'); + $table->integer('insurance_id'); + $table->integer('subscription_id')->nullable(); + $table->decimal('amount', 10); + $table->dateTime('payment_deadline'); + $table->dateTime('payment_reminder'); + $table->enum('state', ['PAID', 'UNPAID'])->default('UNPAID'); + $table->string('reason'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('nh_insurances_invoices'); + } +} diff --git a/database/migrations/2022_03_29_093840_update_state_and_add_payment_split_details_to_nh_insurances.php b/database/migrations/2022_03_29_093840_update_state_and_add_payment_split_details_to_nh_insurances.php new file mode 100644 index 0000000..8bad328 --- /dev/null +++ b/database/migrations/2022_03_29_093840_update_state_and_add_payment_split_details_to_nh_insurances.php @@ -0,0 +1,44 @@ +unsignedInteger('deadlines')->default(0)->comment("Nombre total d'écheances") + ->after('state'); + $table->unsignedInteger('paid_deadlines')->default(0)->comment("Nombre d'écheances payées") + ->after('deadlines'); + $table->decimal('amount_per_split', 10)->default(0)->comment("Montant par echeance") + ->after('paid_deadlines'); + $table->decimal('amount_last_payment', 10)->default(0)->comment("Montant de la derniere echeance") + ->after('amount_per_split'); + + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('nh_insurances', function (Blueprint $table) { + $table->dropColumn(['deadlines', 'paid_deadlines', 'amount_per_split', 'amount_last_payment']); + }); + } +} diff --git a/resources/lang/en/errors.php b/resources/lang/en/errors.php index 10dc9c5..74e76cd 100755 --- a/resources/lang/en/errors.php +++ b/resources/lang/en/errors.php @@ -60,5 +60,7 @@ return [ "sheet_not_accepted" => "This treatment sheet has not been accepted", "sheet_not_comes_from_consultation" => "This health care sheet is not from a consultation", 'invoice_not_found' => "The invoice does not exist", - 'network_not_found' => "The network does not exist" + 'network_not_found' => "The network does not exist", + 'invoice_already_paid' => 'This invoice has already been paid', + 'payment_deadline_reached' => 'The payment deadline has already passed', ]; diff --git a/resources/lang/en/messages.php b/resources/lang/en/messages.php index bb73457..925052b 100755 --- a/resources/lang/en/messages.php +++ b/resources/lang/en/messages.php @@ -189,4 +189,26 @@ Your insurance has expired. 'invoice_accepted' => "Invoice accepted", 'invoice_rejected' => "Invoice rejected", 'invoice_accepted_updated' => "Invoice accepted modified", + 'insurance_partially_paid' => "Partial payment of insurance", + 'insurance_paid_mail' => ":gender :name , + + :title + + Payment information : + - ID: :invoice_id + - Amount: :amount + - Number of paid installments: :paid_deadlines + - Number of remaining deadlines: :remains_deadlines :remains_deadlines + - Reason: :reason + + Insurance information : + - Insured number: :insured_id + - Name of the insurance: :insurance_name + - Basic insurance premium amount: :bonus_amount + - Total premium amount: :total_bonus_amount + - Number of beneficiaries : :number_of_beneficiaries + - Number of months: :months + ", + 'insurance_partially_paid_title' => "Your insurance has been partially paid", + 'insurance_fully_paid_title' => "Your insurance has been paid in full." ]; diff --git a/resources/lang/en/states.php b/resources/lang/en/states.php index cb4b09d..2631091 100755 --- a/resources/lang/en/states.php +++ b/resources/lang/en/states.php @@ -28,5 +28,6 @@ return [ 'INVOICE_ISSUED' => 'INVOICE ISSUED', 'STOP_INSURANCE' => "STOP INSURANCE", 'USED' => 'USED', - 'EXPIRED' => 'EXPIRED' + 'EXPIRED' => 'EXPIRED', + "UNPAID" => "UNPAID", ]; diff --git a/resources/lang/fr/errors.php b/resources/lang/fr/errors.php index 441e631..db5e5d4 100755 --- a/resources/lang/fr/errors.php +++ b/resources/lang/fr/errors.php @@ -60,5 +60,7 @@ return [ "sheet_not_accepted" => "Cette feuille de soins n'a pas été acceptée", "sheet_not_comes_from_consultation" => "Cette feuille de soins ne provient pas d'une consultation", 'invoice_not_found' => "La facture n'existe pas", - 'network_not_found' => "Le réseau n'existe pas" + 'network_not_found' => "Le réseau n'existe pas", + 'invoice_already_paid' => 'Cette facture a déjà été payée', + 'payment_deadline_reached' => 'Le délai de paiement est déjà passé', ]; diff --git a/resources/lang/fr/messages.php b/resources/lang/fr/messages.php index b476727..662a40e 100755 --- a/resources/lang/fr/messages.php +++ b/resources/lang/fr/messages.php @@ -206,4 +206,26 @@ Votre assurance est arrivée à échéance. 'invoice_accepted' => "Facture acceptée", 'invoice_rejected' => "Facture refusée", 'invoice_accepted_updated' => "Facture acceptée modifiée", + 'insurance_partially_paid' => "Paiement partiel de l'assurance", + 'insurance_paid_mail' => ":gender :name , + + :title + + Informations sur le paiement : + - ID : :invoice_id + - Montant : :amount + - Nombre d'échéances payées : :paid_deadlines + - Nombre d'échéances restantes : :remains_deadlines + - Motif : :reason + + Informations de l'assurance : + - Numéro d'assuré : :insured_id + - Nom de l'assurance : :insurance_name + - Montant de la prime de base d'assuré : :bonus_amount + - Montant total de la prime : :total_bonus_amount + - Nombre d'ayants droit : :number_of_beneficiaries + - Nombre de mois : :months + ", + 'insurance_partially_paid_title' => "Votre assurance a été payée partiellement.", + 'insurance_fully_paid_title' => "Votre assurance a été payée complétement." ]; diff --git a/resources/lang/fr/states.php b/resources/lang/fr/states.php index 7c04126..549e9b6 100755 --- a/resources/lang/fr/states.php +++ b/resources/lang/fr/states.php @@ -28,5 +28,6 @@ return [ 'INVOICE_ISSUED' => 'FACTURE ÉMISE', 'STOP_INSURANCE' => "ARRÊT DE L'ASSURANCE", 'USED' => 'UTILISÉE', - 'EXPIRED' => 'EXPIRÉE' + 'EXPIRED' => 'EXPIRÉE', + "UNPAID" => "NON PAYÉE", ]; diff --git a/routes/web.php b/routes/web.php index b5883b9..15ec556 100644 --- a/routes/web.php +++ b/routes/web.php @@ -35,6 +35,12 @@ $router->group(['prefix' => '', 'middleware' => 'auth'], function () use ($route $router->put('{id}/pay', 'InsuranceSubscriptionController@paySubscription'); $router->get('', 'InsuranceSubscriptionController@getSubscriptions'); }); + + // Factures + $router->group(['prefix' => '/invoices'], function () use ($router) { + $router->get('', 'InsuranceInvoiceController@getInvoices'); + $router->put('{id}/pay', 'InsuranceInvoiceController@payInvoice'); + }); }); // Insurances routes