Improve POST /insurances/subscriptions/bonus-amount to calculate insurance bonus amount and fix bugs

This commit is contained in:
Djery-Tom 2022-02-09 13:13:40 +01:00
parent 97640800fb
commit 5fc64bb218
2 changed files with 26 additions and 6 deletions

View File

@ -166,7 +166,7 @@ class InsuranceController extends Controller
{ {
$this->validate($request, [ $this->validate($request, [
'user_id' => 'required|integer|exists:users,id', 'user_id' => 'required|integer|exists:users,id',
'type' => 'nullable|in:ALL,EDITABLE|STOPPED', 'type' => 'nullable|in:ALL,EDITABLE,STOPPED',
]); ]);
$userId = $request->input('user_id'); $userId = $request->input('user_id');
@ -523,6 +523,13 @@ class InsuranceController extends Controller
]); ]);
$newSubscription->created_at = $newSubscription->updated_at = $datetime; $newSubscription->created_at = $newSubscription->updated_at = $datetime;
$newSubscription->save(); $newSubscription->save();
foreach ($insurance->beneficiaries as $beneficiary) {
NhInsurancesHavingRight::create([
'insurance_subscription_id' => $newSubscription->id,
'having_right_id' => $beneficiary->id,
]);
}
Event::dispatch(new InsuranceEvent($newSubscription, trans('messages.insurance_stop'), trans('messages.insurance_stop_mail', ['name' => $newSubscription->user->lastname, 'subscription_id' => $newSubscription->insurance_subscription_id, Event::dispatch(new InsuranceEvent($newSubscription, trans('messages.insurance_stop'), trans('messages.insurance_stop_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, '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]))); 'gender' => trans('states.' . $identification->gender), 'insurance_name' => $insurance->network->name])));

View File

@ -54,6 +54,11 @@ class InsuranceSubscriptionController extends Controller
* @OA\MediaType( * @OA\MediaType(
* mediaType="application/json", * mediaType="application/json",
* @OA\Schema( * @OA\Schema(
* @OA\Property(property="insurance_id",
* type="integer",
* example = 2,
* description="ID de l'assurance"
* ),
* @OA\Property(property="subscription_id", * @OA\Property(property="subscription_id",
* type="integer", * type="integer",
* example = 2, * example = 2,
@ -75,7 +80,7 @@ class InsuranceSubscriptionController extends Controller
* example = {{"birthdate":"1998-10-05","affiliation":"CHILD"}} * example = {{"birthdate":"1998-10-05","affiliation":"CHILD"}}
* ), * ),
* ), * ),
* example = {"subscription_id":7,"network_id":250,"month_price_id":3,"beneficiaries":{{"birthdate":"1998-10-05","affiliation":"CHILD"}}} * example = {"insurance_id":7,"subscription_id":7,"network_id":250,"month_price_id":3,"beneficiaries":{{"birthdate":"1998-10-05","affiliation":"CHILD"}}}
* ) * )
* ), * ),
* @OA\Response( * @OA\Response(
@ -91,21 +96,29 @@ class InsuranceSubscriptionController extends Controller
public function calculateBonusAmount(Request $request) public function calculateBonusAmount(Request $request)
{ {
$this->validate($request, [ $this->validate($request, [
'insurance_id' => 'nullable|integer|exists:nh_insurances,id',
'subscription_id' => 'nullable|integer|exists:nh_insurances_subscriptions,id', 'subscription_id' => 'nullable|integer|exists:nh_insurances_subscriptions,id',
'network_id' => 'required_without:subscription_id|integer|exists:networks,id', 'network_id' => 'required_without_all::subscription_id,insurance_id|integer|exists:networks,id',
'month_price_id' => 'required_without:subscription_id|integer|exists:nh_months_prices_grid,id', 'month_price_id' => 'required_without_all::subscription_id,insurance_id|integer|exists:nh_months_prices_grid,id',
'beneficiaries' => 'nullable|array', 'beneficiaries' => 'nullable|array',
'beneficiaries.*.birthdate' => 'required|date_format:Y-m-d|before:today', 'beneficiaries.*.birthdate' => 'required|date_format:Y-m-d|before:today',
'beneficiaries.*.affiliation' => 'required|in:CHILD,SPOUSE' 'beneficiaries.*.affiliation' => 'required|in:CHILD,SPOUSE'
]); ]);
$subscription_id = $request->input('subscription_id'); $subscription_id = $request->input('subscription_id');
if (isset($subscription_id)) { $insurance_id = $request->input('insurance_id');
$subscription = NhInsurancesSubscription::findOrFail($request->input('subscription_id')); if (!empty($subscription_id)) {
$subscription = NhInsurancesSubscription::findOrFail($subscription_id);
$networkConfig = $subscription->nhNetworkConfig; $networkConfig = $subscription->nhNetworkConfig;
$monthPrice = $networkConfig->monthsPricesGrid()->where('number_of_months', $subscription->number_of_months)->first(); $monthPrice = $networkConfig->monthsPricesGrid()->where('number_of_months', $subscription->number_of_months)->first();
$beneficiaries = array_merge($subscription->beneficiaries->toArray(), $request->input('beneficiaries', [])); $beneficiaries = array_merge($subscription->beneficiaries->toArray(), $request->input('beneficiaries', []));
} elseif (!empty($insurance_id)) {
$insurance = NhInsurance::findOrFail($insurance_id);
$networkConfig = $insurance->nhNetworkConfig;
$monthPrice = $networkConfig->monthsPricesGrid()->where('number_of_months', $insurance->number_of_months)->first();
$beneficiaries = array_merge($insurance->beneficiaries->toArray(), $request->input('beneficiaries', []));
} else { } else {
$networkConfig = NhNetworksConfig::where('network_id', $request->input('network_id'))->first(); $networkConfig = NhNetworksConfig::where('network_id', $request->input('network_id'))->first();
if (!isset($networkConfig) || $networkConfig->configWallet->type != 'ilink_sante') if (!isset($networkConfig) || $networkConfig->configWallet->type != 'ilink_sante')