From b988f4cf0aea4717af55167a9685cc2ffa6a5443 Mon Sep 17 00:00:00 2001 From: Djery-Tom Date: Mon, 14 Feb 2022 19:13:28 +0100 Subject: [PATCH] Implements daily verification to expire insurance if end_date is reach --- app/Console/Kernel.php | 38 +++++++++++++++++++ app/Http/Controllers/InsuranceController.php | 4 +- app/Http/Controllers/InvoiceController.php | 3 ++ app/InsuranceState.php | 1 + app/Models/NhInfosInsurances.php | 30 +++++++++++++++ ...1_03_142456_create_nh_insurances_table.php | 4 +- ...1_10_160021_update_nh_insurances_table.php | 2 +- resources/lang/en/messages.php | 14 ++++++- resources/lang/en/states.php | 3 +- resources/lang/fr/messages.php | 14 ++++++- resources/lang/fr/states.php | 3 +- 11 files changed, 107 insertions(+), 9 deletions(-) create mode 100644 app/Models/NhInfosInsurances.php diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 78269ae..430f0bf 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -3,10 +3,13 @@ namespace App\Console; use App\BillingPeriodType; +use App\InsuranceState; use App\InsuranceSubscriptionState; use App\Models\AgentPlus; use App\Models\CountriesCurrency; use App\Models\NhHealthCareSheet; +use App\Models\NhInfosInsurances; +use App\Models\NhInsurance; use App\Models\NhInvoice; use App\Models\NhNetworksConfig; use App\Traits\Helper; @@ -163,5 +166,40 @@ class Kernel extends ConsoleKernel } Log::info('-------- Weekly Invoice Generation End ' . $date->format("d/m/Y") . '-----------'); })->weekly()->runInBackground(); + + // Verifier les assurances qui ont expiré chaque jour à minuit + $schedule->call(function () { + try { + DB::beginTransaction(); + + $datetime = new DateTime(); + $insurances = NhInfosInsurances::with(['network:id,name', 'user.identification'])->where('state', InsuranceState::PAID)->where('end_at', '<=', $datetime)->get(); + + NhInsurance::where('state', InsuranceState::PAID)->where('end_at', '<=', $datetime)->update([ + 'state' => InsuranceState::EXPIRED + ]); + + DB::commit(); + + $title = trans('messages.insurance_expired'); + foreach ($insurances as $i) { + $message = trans('messages.insurance_expired_mail', ['name' => $i->lastname, 'insured_id' => $i->insured_id, + 'bonus_amount' => $this->toMoneyWithCurrencyCode($i->bonus_amount, $i->currency_code), 'total_bonus_amount' => $this->toMoneyWithCurrencyCode($i->total_bonus_amount, $i->currency_code), + 'number_of_beneficiaries' => $i->number_of_beneficiaries, 'gender' => trans('states.' . $i->user->identification->gender), + 'insurance_name' => $i->network->name, 'months' => $i->number_of_months]); + + $recipients = [preg_replace("/\s+/", "", $i->email)]; // Supprimer les espaces dans le mail + Mail::mailer('smtp')->raw($message, function ($message) use ($recipients, $title) { + $message->subject($title) + ->to($recipients); + }); + } + + } catch (\Throwable $t) { + DB::rollBack(); + Log::error('-------- Mail not sent notify expired insurance-----------'); + Log::error($t->getMessage() . " :\n" . $t->getTraceAsString()); + } + })->daily()->runInBackground(); } } diff --git a/app/Http/Controllers/InsuranceController.php b/app/Http/Controllers/InsuranceController.php index dbf66a8..390b5b1 100644 --- a/app/Http/Controllers/InsuranceController.php +++ b/app/Http/Controllers/InsuranceController.php @@ -183,7 +183,7 @@ class InsuranceController extends Controller $query = $query->whereIn('state', [InsuranceState::PAID]); } if ($type == 'STOPPED') { - $query = $query->where('state', InsuranceState::STOPPED); + $query = $query->whereIn('state', [InsuranceState::STOPPED, InsuranceState::EXPIRED]); } } @@ -593,7 +593,7 @@ class InsuranceController extends Controller ]); $insurance = NhInsurance::findOrFail($id); - if ($insurance->state != InsuranceState::STOPPED) { + if (!in_array($insurance->state, [InsuranceState::STOPPED, InsuranceState::EXPIRED])) { return $this->errorResponse(__('errors.cannot_renew_insurance')); } diff --git a/app/Http/Controllers/InvoiceController.php b/app/Http/Controllers/InvoiceController.php index 36c14ae..3668bde 100755 --- a/app/Http/Controllers/InvoiceController.php +++ b/app/Http/Controllers/InvoiceController.php @@ -4,11 +4,14 @@ namespace App\Http\Controllers; use App\BillingPeriodType; +use App\InsuranceState; use App\InsuranceSubscriptionState; use App\Models\AgentPlus; use App\Models\CountriesCurrency; use App\Models\NhHealthCareSheet; +use App\Models\NhInfosInsurances; use App\Models\NhInfosInvoice; +use App\Models\NhInsurance; use App\Models\NhInvoice; use App\Models\NhNetworksConfig; use Barryvdh\DomPDF\Facade as PDF; diff --git a/app/InsuranceState.php b/app/InsuranceState.php index a912d37..758cec6 100644 --- a/app/InsuranceState.php +++ b/app/InsuranceState.php @@ -7,4 +7,5 @@ abstract class InsuranceState const PAID = 'PAID'; const UNDER_STOPPING = 'UNDER_STOPPING'; const STOPPED = 'STOPPED'; + const EXPIRED = 'EXPIRED'; } diff --git a/app/Models/NhInfosInsurances.php b/app/Models/NhInfosInsurances.php new file mode 100644 index 0000000..c69a6f2 --- /dev/null +++ b/app/Models/NhInfosInsurances.php @@ -0,0 +1,30 @@ +belongsTo(Network::class, 'network_id'); + } + + public function user() + { + return $this->belongsTo(User::class, 'user_id'); + } +} diff --git a/database/migrations/2021_11_03_142456_create_nh_insurances_table.php b/database/migrations/2021_11_03_142456_create_nh_insurances_table.php index 23cd628..9239485 100644 --- a/database/migrations/2021_11_03_142456_create_nh_insurances_table.php +++ b/database/migrations/2021_11_03_142456_create_nh_insurances_table.php @@ -17,8 +17,8 @@ class CreateNhInsurancesTable extends Migration $table->id(); $table->string('insurance_subscription_id')->unique()->comment("ID de la souscription"); $table->string('insured_id')->unique()->comment("Numero de l'assuré"); - $table->dateTime('start_at')->nullable()->comment("Date de debut de l'assurance"); - $table->dateTime('end_at')->nullable()->comment("Date d'echeance"); + $table->date('start_at')->nullable()->comment("Date de debut de l'assurance"); + $table->date('end_at')->nullable()->comment("Date d'echeance"); $table->enum('state', ['PAID', 'UNDER_STOPPING', 'STOPPED', 'ENDED'])->default('PAID'); $table->timestamp('created_at')->useCurrent(); $table->timestamp('updated_at')->useCurrent(); diff --git a/database/migrations/2021_11_10_160021_update_nh_insurances_table.php b/database/migrations/2021_11_10_160021_update_nh_insurances_table.php index ea259ee..1bd62d5 100644 --- a/database/migrations/2021_11_10_160021_update_nh_insurances_table.php +++ b/database/migrations/2021_11_10_160021_update_nh_insurances_table.php @@ -22,7 +22,7 @@ class UpdateNhInsurancesTable extends Migration $table->integer('number_of_beneficiaries')->after('bonus_amount'); $table->decimal('total_bonus_amount', 12, 2)->default(0)->comment("Montant total de la prime (assuré + ayants droit)")->after('number_of_beneficiaries'); DB::statement("ALTER TABLE nh_insurances MODIFY state - ENUM('PAID', 'UNDER_STOPPING', 'STOPPED') DEFAULT 'PAID' NOT NULL;"); + ENUM('PAID', 'UNDER_STOPPING', 'STOPPED', 'EXPIRED') DEFAULT 'PAID' NOT NULL;"); }); } diff --git a/resources/lang/en/messages.php b/resources/lang/en/messages.php index bd1b684..1ed1eb4 100755 --- a/resources/lang/en/messages.php +++ b/resources/lang/en/messages.php @@ -173,5 +173,17 @@ Your insurance has been renewed. - Number of months: :months ", 'insurance_renew_paid' => "Insurance renewal paid", - "invoice_generated" => "Invoice has been generated" + "invoice_generated" => "Invoice has been generated", + 'insurance_expired' => "Insurance expired", + 'insurance_expired_mail' => ":gender :name , + +Your insurance has expired. + Insurance information : + - Insured number: :insured_id + - Insurance name: :insurance_name + - Basic insurance premium amount: :bonus_amount + - Total premium amount: :total_bonus_amount + - Number of beneficiaries : :number_of_beneficiaries + - Number of months: :months + ", ]; diff --git a/resources/lang/en/states.php b/resources/lang/en/states.php index e21c78c..cb4b09d 100755 --- a/resources/lang/en/states.php +++ b/resources/lang/en/states.php @@ -27,5 +27,6 @@ return [ 'INSURED' => 'PRINCIPAL INSURED', 'INVOICE_ISSUED' => 'INVOICE ISSUED', 'STOP_INSURANCE' => "STOP INSURANCE", - 'USED' => 'USED' + 'USED' => 'USED', + 'EXPIRED' => 'EXPIRED' ]; diff --git a/resources/lang/fr/messages.php b/resources/lang/fr/messages.php index 55bc497..9b69b28 100755 --- a/resources/lang/fr/messages.php +++ b/resources/lang/fr/messages.php @@ -190,5 +190,17 @@ Votre assurance a été renouvelée. - Nombre de mois : :months ", 'insurance_renew_paid' => "Renouvellement de l'assurance payée", - "invoice_generated" => "La facture a été générée" + "invoice_generated" => "La facture a été générée", + 'insurance_expired' => "Assurance arrivée à échéance", + 'insurance_expired_mail' => ":gender :name , + +Votre assurance est arrivée à échéance. + 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 + ", ]; diff --git a/resources/lang/fr/states.php b/resources/lang/fr/states.php index bea38d1..7c04126 100755 --- a/resources/lang/fr/states.php +++ b/resources/lang/fr/states.php @@ -27,5 +27,6 @@ return [ 'INSURED' => 'ASSURÉ PRINCIPAL', 'INVOICE_ISSUED' => 'FACTURE ÉMISE', 'STOP_INSURANCE' => "ARRÊT DE L'ASSURANCE", - 'USED' => 'UTILISÉE' + 'USED' => 'UTILISÉE', + 'EXPIRED' => 'EXPIRÉE' ];