Update Member Enrollment
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user