Update Member Enrollment

This commit is contained in:
R
2022-09-02 13:12:23 +07:00
parent 2215f61db4
commit b2ef1bfd57
30 changed files with 229 additions and 74 deletions

View File

@@ -5,6 +5,7 @@ namespace Modules\Internal\Services;
use App\Exceptions\ImportRowException;
use App\Helpers\Helper;
use App\Models\Corporate;
use App\Models\CorporateEmployee;
use App\Models\CorporateDivision;
use App\Models\CorporatePlan;
use App\Models\Member;
@@ -89,7 +90,7 @@ class MemberEnrollmentService
"StartNoClaim" => "start_no_claim",
"EndNoClaim" => "end_no_claim",
"Option Mode" => "option_mode",
"Policy Inforce" => "policy_inforce",
"Policy Inforce" => "policy_in_force",
"Renewal activation date" => "renewal_activation_date",
"Renewal Activation Date" => "renewal_activation_date",
"Ingestion Code" => "ingestion_code", // TODO I think this should not be here because if user uploading result then ingestion code and status will be filled
@@ -156,6 +157,7 @@ class MemberEnrollmentService
"internal_use_4" => "Internal Use",
"member_since" => "Member Since",
"internal_use_5" => "Internal Use",
"policy_inforce" => "Policy Inforce",
"policy_in_force" => "Policy In Force",
"member_suspended" => "Member Suspended",
"activation_date" => "Activation Date",
@@ -163,7 +165,6 @@ class MemberEnrollmentService
"start_no_claim" => "StartNoClaim",
"end_no_claim" => "EndNoClaim",
"option_mode" => "Option Mode",
"policy_inforce" => "Policy Inforce",
"renewal_activation_date" => "Renewal Activation Date",
"ingestion_code" => "Ingestion Code",
"ingestion_status" => "Ingestion Status",
@@ -228,14 +229,13 @@ class MemberEnrollmentService
"Internal Use",
"Member Since",
"Internal Use",
"Policy In Force",
"Policy Inforce",
"Member Suspended",
"Activation Date",
"Internal Use",
"StartNoClaim",
"EndNoClaim",
"Option Mode",
"Policy Inforce",
"Renewal Activation Date",
"Ingestion Code",
"Ingestion Status",
@@ -276,7 +276,7 @@ class MemberEnrollmentService
}
}
// TOOD RECORD BCA ONLY
// TODO RECORD BCA ONLY
if ($row['record_type'] == 'D' && !empty($row['branch_code'])) {
throw new ImportRowException(__('enrollment.BRANCH_CODE_NOT_REQUIRED'), 0, null, $row);
}
@@ -402,6 +402,7 @@ class MemberEnrollmentService
// })
->first();
// Validate If Exist Member
if ($member) {
throw new ImportRowException(__('enrollment.MEMBER_UNIQUE', [
'member_id' => $row['member_id'],
@@ -530,12 +531,14 @@ class MemberEnrollmentService
]), 0, null, $row);
}
if (Carbon::parse(strtotime($row['member_effective_date'])) > Carbon::parse(strtotime($row['member_expiry_date']))) {
throw new ImportRowException(__('enrollment.MEMBER_EXPIRY_DATE_INVALID'), 0, null, $row);
}
if (Carbon::parse($memberPolicy->end) > Carbon::parse(strtotime($row['member_expiry_date'])
|| $memberPolicy->end > Carbon::parse(strtotime($row['member_expiry_date'])))) {
if (Carbon::parse($memberPolicy->end) > Carbon::parse(strtotime($row['member_expiry_date']))
|| $memberPolicy->end > Carbon::parse(strtotime($row['member_expiry_date']))
) {
throw new ImportRowException(__('enrollment.MEMBER_RENEWAL_STILL_ACTIVE'), 0, null, $row);
}
@@ -575,8 +578,9 @@ class MemberEnrollmentService
throw new ImportRowException(__('enrollment.MEMBER_EXPIRY_DATE_INVALID'), 0, null, $row);
}
if (Carbon::parse($memberPolicy->end) > Carbon::parse(strtotime($row['member_expiry_date'])
|| $memberPolicy->end > Carbon::parse(strtotime($row['member_expiry_date'])))) {
if (Carbon::parse($memberPolicy->end) > Carbon::parse(strtotime($row['member_expiry_date']))
|| $memberPolicy->end > Carbon::parse(strtotime($row['member_expiry_date']))
) {
throw new ImportRowException(__('enrollment.MEMBER_RENEWAL_STILL_ACTIVE'), 0, null, $row);
}
@@ -593,61 +597,153 @@ class MemberEnrollmentService
break;
case "7": // Requesting to Change the Unique Data of the Member
// if (empty($row["option_mode"])) {
// throw new ImportRowException(__('enrollment.OPTION_MODE_INVALID_FORMAT', [
// 'member_id' => $row['member_id'],
// 'policy_id' => $row['policy_number']
// ]), 0, null, $row);
// }
// // Read Option Mode
// $option_mode = explode('!', $row['option_mode']);
// $corp_code = $option_mode[1] ?? null;
// $policy_number = $option_mode[2] ?? null;
// $member_id = $option_mode[3] ?? null;
// // Validate
// if ( !in_array($option_mode[0], ['P', 'D']) || empty($corp_code) || empty($policy_number) || empty($member_id) ) {
// throw new ImportRowException(__('enrollment.OPTION_MODE_INVALID_FORMAT', [
// 'member_id' => $row['member_id'],
// 'policy_id' => $row['policy_number']
// ]), 0, null, $row);
// }
$record_type = explode('>', $row['record_type']);
$record_type_old = $record_type[0] ?? null;
$record_type_new = $record_type[1] ?? null;
$corp_code = explode('>', $row['corporate_id']);
$corp_code_old = $corp_code[0] ?? null;
$corp_code_new = $corp_code[1] ?? null;
$policy_number = explode('>', $row['policy_number']);
$policy_number_old = $policy_number[0] ?? null;
$policy_number_new = $policy_number[1] ?? null;
$member_id = explode('>', $row['member_id']);
$member_id_old = $member_id[0] ?? null;
$member_id_new = $member_id[1] ?? null;
$memberPolicy = MemberPolicy::query()
->where('policy_id', $row['policy_number'])
->where('member_id', $row['member_id'])
->where('policy_id', $policy_number_old)
->where('member_id', $member_id_old)
->with('member')
->first();
if (!$memberPolicy) {
throw new ImportRowException(__('enrollment.MEMBER_NOT_EXISTS', [
'member_id' => $row['member_id'],
'policy_id' => $row['policy_number']
'member_id' => $member_id_old,
'policy_id' => $policy_number_old
]), 0, null, $row);
}
if ($memberPolicy->status != 'active') {
throw new ImportRowException(__('enrollment.MEMBER_INACTIVE', [
'member_id' => $row['member_id'],
'policy_id' => $row['policy_number']
'member_id' => $member_id_old,
'policy_id' => $policy_number_old
]), 0, null, $row);
}
// TODO OPTION MODE FORMAT VALIDATION
if (empty($row["option_mode"])) {
throw new ImportRowException(__('enrollment.OPTION_MODE_INVALID_FORMAT', [
'member_id' => $row['member_id'],
'policy_id' => $row['policy_number']
]), 0, null, $row);
if ($record_type_new == 'P') {
if (!empty($row['principal_id'])) {
throw new ImportRowException(__('enrollment.PRINCIPAL_ID_NOT_REQUIRED'), 0, null, $row);
}
if (empty($row['corporate_id'])) {
throw new ImportRowException(__('enrollment.CORPORATE_ID_REQUIRED'), 0, null, $row);
}
}
if ($record_type_new == 'D') {
if (empty($row['principal_id'])) {
throw new ImportRowException(__('enrollment.PRINCIPAL_ID_REQUIRED'), 0, null, $row);
}
}
if (
$row['record_type'] == 'P' &&
$memberPolicy->member->corporate->code == $row["corporate_id"] &&
$memberPolicy->policy_id == $row['policy_number'] &&
$memberPolicy->member_id == $row['member_id'] &&
$memberPolicy->member->record_type == $row['record_type']
) {
throw new ImportRowException(__('enrollment.UNIQUE_CHANGE_PRINCIPAL_INVALID', [
'member_id' => $row['member_id'],
'policy_id' => $row['policy_number']
]), 0, null, $row);
// if (
// $record_type_new == 'P' &&
// $memberPolicy->member->corporate->code == $row["corporate_id"] &&
// $memberPolicy->policy_id == $row['policy_number'] &&
// $memberPolicy->member_id == $row['member_id'] &&
// $memberPolicy->member->record_type == $row['record_type']
// ) {
// throw new ImportRowException(__('enrollment.UNIQUE_CHANGE_PRINCIPAL_INVALID', [
// 'member_id' => $row['member_id'],
// 'policy_id' => $row['policy_number']
// ]), 0, null, $row);
// }
// if (
// $record_type_new == 'D' &&
// $memberPolicy->member->corporate->code == $row["corporate_id"] &&
// $memberPolicy->policy_id == $row['policy_number'] &&
// $memberPolicy->member->record_type == $row['record_type'] &&
// $memberPolicy->member->payor_id == $row['payor_id']
// ) {
// throw new ImportRowException(__('enrollment.UNIQUE_CHANGE_DEPENDANT_INVALID', [
// 'member_id' => $row['member_id'],
// 'policy_id' => $row['policy_number']
// ]), 0, null, $row);
// }
try {
DB::beginTransaction();
if ( !empty($record_type_new) ) {
$member = $memberPolicy->member;
$member->record_type = $record_type_new;
$member->principal_id = $row['principal_id'];
$member->save();
}
if ( !empty($corp_code_new) ) {
$oldCorporate = Corporate::where('code', $corp_code_old)->first();
$newCorporate = Corporate::where('code', $corp_code_new)->first();
if (!$newCorporate) {
throw new ImportRowException(__('enrollment.CORPORATE_NOT_FOUND'), 0, null, $row);
}
$corporateEmployee = CorporateEmployee::where('corporate_id', $oldCorporate->id)
->where('member_id', $memberPolicy->member->id)
->first();
$newCorporateEmployee = CorporateEmployee::updateOrCreate([
'corporate_id' => $oldCorporate->id,
'member_id' => $memberPolicy->member->id
],
[
'corporate_id' => $newCorporate->id,
'member_id' => $memberPolicy->member->id
]);
}
if ( !empty($policy_number_new) ) {
$memberPolicy->policy_id = $policy_number_new;
$memberPolicy->save();
}
if ( !empty($member_id_new) ) {
$memberPolicy->member_id = $member_id_new;
$memberPolicy->save();
$member = $memberPolicy->member;
$member->member_id = $member_id_new;
$member->save();
}
DB::commit();
} catch (\Exception $e) {
DB::rollback();
throw new ImportRowException($e->getMessage(), $e->getCode(), $e, $row);
}
if (
$row['record_type'] == 'D' &&
$memberPolicy->member->corporate->code == $row["corporate_id"] &&
$memberPolicy->policy_id == $row['policy_number'] &&
$memberPolicy->member->record_type == $row['record_type'] &&
$memberPolicy->member->payor_id == $row['payor_id']
) {
throw new ImportRowException(__('enrollment.UNIQUE_CHANGE_DEPENDANT_INVALID', [
'member_id' => $row['member_id'],
'policy_id' => $row['policy_number']
]), 0, null, $row);
}
throw new ImportRowException(__('MODE 7 NOT HANDLED PROPERLY'), 0, null, $row);
break;
case "9": // Member Reactivation and Personal information update (Without replacement Card)
$memberPolicy = MemberPolicy::query()
@@ -678,12 +774,38 @@ class MemberEnrollmentService
$memberPolicy->save();
break;
case "13": // Advance Renewal with OLD Card No. (NO PRINT)
// ASDASDASD
throw new ImportRowException(__('MODE 13 NOT HANDLED PROPERLY'), 0, null, $row);
$memberPolicy = MemberPolicy::query()
->where('policy_id', $row['policy_number'])
->where('member_id', $row['member_id'])
->first();
if (!$memberPolicy) {
throw new ImportRowException(__('enrollment.MEMBER_NOT_EXISTS', [
'member_id' => $row['member_id'],
'policy_id' => $row['policy_number']
]), 0, null, $row);
}
if ($memberPolicy->status != 'active') {
throw new ImportRowException(__('enrollment.MEMBER_INACTIVE', [
'member_id' => $row['member_id'],
'policy_id' => $row['policy_number']
]), 0, null, $row);
}
$newMemberPolicy = new MemberPolicy();
$newMemberPolicy->fill([
'member_id' => $row['member_id'],
'policy_id' => $row['policy_number'],
'start' => Carbon::parse(strtotime($row['member_effective_date'])),
'end' => Carbon::parse(strtotime($row['member_expiry_date'])),
'status' => 'active'
]);
$newMemberPolicy->save();
break;
// THESE MODES BELOW ARE DISABLED
case "4": // Member Update Start and End Date
@@ -789,10 +911,10 @@ class MemberEnrollmentService
}
// Should be success then returning new member data with extra ingestion code & status
$member_data['ingestion_code'] = "200";
$member_data['ingestion_status'] = "SUCCESS";
$row['ingestion_code'] = "200";
$row['ingestion_status'] = "SUCCESS";
return $member_data;
return $row;
}