Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging
This commit is contained in:
@@ -5,7 +5,10 @@ namespace Modules\Linksehat\Http\Controllers\Api;
|
||||
use App\Helpers\Helper;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Person;
|
||||
use App\Models\Corporate;
|
||||
use App\Models\Member;
|
||||
use App\Models\OLDLMS\User;
|
||||
use App\Models\OLDLMS\UserInsurance;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
@@ -13,7 +16,10 @@ use Laravel\Socialite\Facades\Socialite;
|
||||
use Modules\Linksehat\Transformers\User\UserProfileResource;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Validator;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use App\Http\Resources\OLDLMS\MemberResource;
|
||||
use App\Rules\NikRule;
|
||||
|
||||
|
||||
class LinkingController extends Controller
|
||||
{
|
||||
@@ -23,17 +29,110 @@ class LinkingController extends Controller
|
||||
$this->url = $_ENV['LMS_APP_URL'];
|
||||
}
|
||||
|
||||
public function manualLinking(Request $request){
|
||||
$request->validate([
|
||||
public function linkingValidate(Request $request)
|
||||
{
|
||||
$validator = Validator::make($request->all(), [
|
||||
'corporate_id' => 'required',
|
||||
'user_id' => 'required',
|
||||
'company_id' => 'required',
|
||||
]);
|
||||
|
||||
$corporate = Corporate::find($request->company_id)->where('active', 1);
|
||||
if (!$corporate){
|
||||
return response(['message' => 'Corporate Not Found or non active'], 403);
|
||||
// $request->validate($validationRules);
|
||||
if ($validator->fails()) {
|
||||
return response()->json(['errors' => $validator->errors()], 422);
|
||||
}
|
||||
|
||||
|
||||
$corporate = Corporate::findOrFail($request->corporate_id);
|
||||
// Make Validation from Linking Rules
|
||||
$linkingRulesArr = $corporate->linking_rules->toArray();
|
||||
|
||||
$validationRules = [];
|
||||
foreach ($linkingRulesArr as $field) {
|
||||
$rules = ['required']; // Default is required if in the linking_rules
|
||||
if ($field == 'email') {
|
||||
$rules[] = 'email';
|
||||
}
|
||||
|
||||
if ($field == 'nric') {
|
||||
$rules[] = new NikRule;
|
||||
}
|
||||
|
||||
$validationRules[$field] = $rules;
|
||||
}
|
||||
|
||||
$validator = Validator::make($request->all(),$validationRules);
|
||||
|
||||
// $request->validate($validationRules);
|
||||
if ($validator->fails()) {
|
||||
return Helper::responseJson(data: [], message: 'Member Tidak ditemukan', statusCode: 422, status: 'error');
|
||||
}
|
||||
|
||||
$member = Member::query()
|
||||
->when(in_array('nric', $linkingRulesArr), function($q) use ($request) {
|
||||
$q->where('nric', $request->nric);
|
||||
})
|
||||
->when(in_array('member_id', $linkingRulesArr), function($q) use ($request) {
|
||||
$q->where('member_id', $request->member_id);
|
||||
})
|
||||
->when(in_array('name', $linkingRulesArr), function($q) use ($request) {
|
||||
$q->where('name', $request->name);
|
||||
})
|
||||
->when(in_array('dob', $linkingRulesArr), function($q) use ($request) {
|
||||
$q->where('birth_date', $request->dob);
|
||||
})
|
||||
->when(in_array('phone', $linkingRulesArr), function($q) use ($request) {
|
||||
$q->whereHas('person', function ($person) use ($request) {
|
||||
$person->where('phone', $request->phone);
|
||||
});
|
||||
})
|
||||
->when(in_array('email', $linkingRulesArr), function($q) use ($request) {
|
||||
$q->where('email', $request->email);
|
||||
})
|
||||
->when(in_array('nik', $linkingRulesArr), function($q) use ($request) {
|
||||
$q->whereHas('employeds', function ($employed) use ($request) {
|
||||
$employed->where('corporate_id', $request->corporate_id)
|
||||
->where('nik', $request->nik);
|
||||
});
|
||||
})
|
||||
|
||||
->with([
|
||||
'memberPlans' => function ($memberPlan) {
|
||||
$memberPlan->latest();
|
||||
},
|
||||
|
||||
])
|
||||
|
||||
->first();
|
||||
|
||||
if ($member) {
|
||||
// Insert into database linksehat
|
||||
$insurance = UserInsurance::updateOrCreate(
|
||||
[
|
||||
'nIDUser' => $request->user_id,
|
||||
],
|
||||
[
|
||||
'nIDUser' => $request->user_id,
|
||||
'nIDInsurance' => $_ENV['LINKSEHAT_ASO_INSURANCE_ID'],
|
||||
'sNoPolis' => $member->member_id,
|
||||
'sNamaPeserta' => $member->fullName,
|
||||
'sKartuPeserta' => '',
|
||||
'sLayanan' => 'RJ,TC',
|
||||
'dStartDate' => $member->members_effective_date,
|
||||
'dExpireDate' => $member->members_expire_date,
|
||||
'dTanggalLahir' => $member->birth_date,
|
||||
'nNoKTP' => $member->nric != '' ? $member->nric : 0 ,
|
||||
'sIsConfrimed' => 1,
|
||||
'sStatus' => 1,
|
||||
]);
|
||||
$message = $member->currentPolicy->corporate->welcome_message;
|
||||
return Helper::responseJson(data: MemberResource::make($member), message: $message);
|
||||
}
|
||||
|
||||
return Helper::responseJson(data: [], message: 'Member Tidak ditemukan', statusCode: 404, status: 'error');
|
||||
}
|
||||
|
||||
public function card($member_id){
|
||||
$member = Member::where('member_id', $member_id)->get()->first();
|
||||
$message = $member->currentPolicy->corporate->welcome_message;
|
||||
return Helper::responseJson(data: MemberResource::make($member), message: $message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ use Modules\Linksehat\Http\Controllers\Api\PersonController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\ProfileController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\SearchController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\SpecialityController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\LinkingController;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
@@ -75,5 +76,9 @@ Route::prefix('linksehat')->group(function () {
|
||||
Route::get('autocomplete/relationship', [AutocompleteController::class, 'relationship']);
|
||||
Route::get('autocomplete/corporate', [AutocompleteController::class, 'corporate']);
|
||||
|
||||
Route::post('manual-linking', [LinkingController::class, 'linkingValidate']);
|
||||
|
||||
Route::get('card/{member_id}', [LinkingController::class, 'card']);
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
@@ -5,6 +5,7 @@ namespace Modules\Linksehat\Transformers\User;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use App\Models\OLDLMS\User;
|
||||
use App\Models\OLDLMS\UserDetail;
|
||||
use App\Models\OLDLMS\UserInsurance;
|
||||
use DB;
|
||||
|
||||
|
||||
@@ -53,6 +54,11 @@ class ShowProfileResource extends JsonResource
|
||||
$relationship = DB::connection('oldlms')->table('tm_hubungan_keluarga')->where('nID', $this->nIDHubunganKeluarga)->first('sHubunganKeluarga');
|
||||
// dd( $this->detail->nIDGolonganDarah);
|
||||
|
||||
$userInsurance = UserInsurance::where('nIDUser', $this->nID)->get()->first();
|
||||
$memberId = Null;
|
||||
if($userInsurance){
|
||||
$memberId = $userInsurance->sNoPolis;
|
||||
}
|
||||
return [
|
||||
'id' => $this->nID,
|
||||
'first_name' => $this->sFirstName,
|
||||
@@ -67,6 +73,7 @@ class ShowProfileResource extends JsonResource
|
||||
'relationship' => $relationship ? $relationship->sHubunganKeluarga : '-',
|
||||
'weight' => $this->detail->sWeight,
|
||||
'height' => $this->detail->sHeight,
|
||||
'member_id' => $memberId,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,11 @@ namespace Modules\Linksehat\Transformers\User;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use App\Models\OLDLMS\User;
|
||||
use App\Models\OLDLMS\UserDetail;
|
||||
use App\Models\OLDLMS\UserInsurance;
|
||||
use App\Models\Member;
|
||||
use App\Models\Person;
|
||||
use App\Models\CorporateEmployee;
|
||||
use App\Models\Corporate;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
use DB;
|
||||
@@ -26,14 +31,60 @@ class UserProfileResource extends JsonResource
|
||||
$memberProfile = User::with('detail')->where('nIDUser', $this->nID)->get()->toArray();
|
||||
$dataMemberProfile = [];
|
||||
|
||||
$userInsurance = UserInsurance::where('nIDUser', $this->nID)->get()->first();
|
||||
$memberId = null;
|
||||
$linking = false;
|
||||
if($userInsurance){
|
||||
$memberId = $userInsurance->sNoPolis;
|
||||
$linking = true;
|
||||
} else {
|
||||
$member = Member::where('email', $this->sEmail)->get()->first();
|
||||
$person = Person::where('phone', $this->sPhone)->get()->first();
|
||||
if ($member || $person){ // Autolinking
|
||||
$corporateEmployee = CorporateEmployee::where('member_id', $member->id)->get()->first(); // cek corporate id empolyee/member
|
||||
if ($corporateEmployee){
|
||||
$corporate = Corporate::findOrFail($corporateEmployee->corporate_id)->automatic_linking; // cek autocomplete
|
||||
if ($corporate){
|
||||
if($member) {
|
||||
// Insert into database linksehat
|
||||
$insurance = UserInsurance::updateOrCreate(
|
||||
[
|
||||
'nIDUser' => $this->nID,
|
||||
],
|
||||
[
|
||||
'nIDUser' => $this->nID,
|
||||
'nIDInsurance' => $_ENV['LINKSEHAT_ASO_INSURANCE_ID'],
|
||||
'sNoPolis' => $member->member_id,
|
||||
'sNamaPeserta' => $member->fullName,
|
||||
'sKartuPeserta' => '',
|
||||
'sLayanan' => 'RJ,TC',
|
||||
'dStartDate' => $member->members_effective_date,
|
||||
'dExpireDate' => $member->members_expire_date,
|
||||
'dTanggalLahir' => $member->birth_date,
|
||||
'nNoKTP' => $member->nric != '' ? $member->nric : 0 ,
|
||||
'sIsConfrimed' => 1,
|
||||
'sStatus' => 1,
|
||||
]);
|
||||
$message = $member->currentPolicy->corporate->welcome_message;
|
||||
$linking = true;
|
||||
|
||||
$memberId = $member->member_id;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if (count($memberProfile) > 0){
|
||||
|
||||
$urlAvatarDefault = $this->detail->nIDJenisKelamin == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/male-avatar.png';
|
||||
$avatarMember = $this->detail->sImage ?? $urlAvatarDefault;
|
||||
$relationship = DB::connection('oldlms')->table('tm_hubungan_keluarga')->where('nID', $this->nIDHubunganKeluarga)->first('sHubunganKeluarga');
|
||||
|
||||
$dataUser = [
|
||||
'id' => $this->nID,
|
||||
'name' => $this->sFirstName . ' ' . $this->sLastName,
|
||||
'relationship' => 'Me',
|
||||
'relationship' => $relationship ? $relationship->sHubunganKeluarga : '-',
|
||||
'avatar' => $avatarMember
|
||||
];
|
||||
|
||||
@@ -56,21 +107,28 @@ class UserProfileResource extends JsonResource
|
||||
|
||||
|
||||
} else {
|
||||
$nID = (Auth::user()->nID);
|
||||
$nID = $this->nIDUser ? $this->nIDUser : $this->nID;
|
||||
if ($nID){
|
||||
$memberProfile = User::with('detail')->where('nIDUser', $nID)->get()->toArray();
|
||||
|
||||
$dataMember = User::with('detail')->where('nID', $nID)->get()->first();
|
||||
|
||||
$urlAvatarDefault = $dataMember->detail->nIDJenisKelamin == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/male-avatar.png';
|
||||
|
||||
if ($this->detail){
|
||||
$urlAvatarDefault = $this->detail->nIDJenisKelamin == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/male-avatar.png';
|
||||
} else {
|
||||
$urlAvatarDefault = 'https://linksehat.dev/assets/img/users/male-avatar.png';
|
||||
}
|
||||
$avatar = $this->detail->sImage ?? $urlAvatarDefault;
|
||||
|
||||
$avatarMember = $dataMember->detail->sImage ?? $urlAvatarDefault;
|
||||
$relationship = DB::connection('oldlms')->table('tm_hubungan_keluarga')->where('nID', $this->nIDHubunganKeluarga)->first('sHubunganKeluarga');
|
||||
|
||||
$dataUser = [
|
||||
'id' => $dataMember->nID,
|
||||
'name' => $dataMember->sFirstName . ' ' . $dataMember->sLastName,
|
||||
'relationship' => 'Me',
|
||||
'relationship' => $relationship ? $relationship->sHubunganKeluarga : '-',
|
||||
'avatar' => $avatarMember
|
||||
];
|
||||
|
||||
array_push($dataMemberProfile, $dataUser);
|
||||
|
||||
if (count($memberProfile) > 0){
|
||||
@@ -84,17 +142,22 @@ class UserProfileResource extends JsonResource
|
||||
'name' => $m['full_name'],
|
||||
'relationship' => $relationship->sHubunganKeluarga,
|
||||
'avatar' => $avatarMember,
|
||||
|
||||
];
|
||||
|
||||
array_push( $dataMemberProfile, $data);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Principal
|
||||
$urlAvatarDefault = $this->detail->nIDJenisKelamin == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/male-avatar.png';
|
||||
if ($this->detail){
|
||||
$urlAvatarDefault = $this->detail->nIDJenisKelamin == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/male-avatar.png';
|
||||
} else {
|
||||
$urlAvatarDefault = 'https://linksehat.dev/assets/img/users/male-avatar.png';
|
||||
}
|
||||
$avatar = $this->detail->sImage ?? $urlAvatarDefault;
|
||||
|
||||
|
||||
@@ -103,8 +166,9 @@ class UserProfileResource extends JsonResource
|
||||
'full_name' => $this->sFirstName . ' '. $this->sLastName,
|
||||
'avatar' => $avatar,
|
||||
'member_type' => $this->nIDUser ? 'Dependent' : 'Principal',
|
||||
'member_profile' => $dataMemberProfile,
|
||||
|
||||
'member_profile' => $dataMemberProfile,
|
||||
'member_id' => $memberId,
|
||||
'linking' => $linking,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,8 +3,10 @@
|
||||
namespace App\Http\Resources\OLDLMS;
|
||||
|
||||
use App\Services\ClaimService;
|
||||
use App\Models\Corporate;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
|
||||
class MemberResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
@@ -21,28 +23,17 @@ class MemberResource extends JsonResource
|
||||
$limitTelecon = $this->totalUsage >= 6 ? null : $limitTelecon;
|
||||
|
||||
$data = [
|
||||
'id' => $this->id,
|
||||
'member_name' => $this->full_name,
|
||||
'member_id' => $this->member_id,
|
||||
'birth_date' => $this->birth_date,
|
||||
'email' => $this->email,
|
||||
'phone' => $this->person->phone ?? null,
|
||||
'full_name' => $this->full_name,
|
||||
'nric' => $this->nric,
|
||||
'plan' => $currentMemberPlan ? [
|
||||
'code' => $currentMemberPlan->plan->code ?? null,
|
||||
'start' => $currentMemberPlan->start,
|
||||
'end' => $currentMemberPlan->end,
|
||||
'limit' => $this->currentPlan->limit_rules,
|
||||
'limit_consultation' => 6
|
||||
] : null,
|
||||
'policy_code' => $this->currentPolicy?->code ?? null,
|
||||
'corporate' => [
|
||||
'code' => $this->currentPolicy?->corporate->code ?? null,
|
||||
'name' => $this->currentPolicy?->corporate->name,
|
||||
'welcome_message' => $this->currentPolicy?->corporate->welcome_message,
|
||||
'help_text' => $this->currentPolicy?->corporate?->help_text,
|
||||
'avatar_url' => $this->currentpolicy?->corporate?->avatar_url
|
||||
],
|
||||
'limit_usage' => $this->totalUsage ?? null
|
||||
'policy_holder' => $this->currentPolicy->corporate->name,
|
||||
'policy_number' => $this->currentPolicy->code ?? null,
|
||||
'date_of_birth' => $this->birth_date,
|
||||
'gender' => $this->gender,
|
||||
'start_date' => $this->members_effective_date,
|
||||
'corporate_logo' => $_ENV['LMS_APP_STORAGE'] . $this->corporateLogo,
|
||||
'valid_until' => $this->members_expire_date,
|
||||
|
||||
];
|
||||
return $data;
|
||||
}
|
||||
|
||||
@@ -252,5 +252,20 @@ class Member extends Model
|
||||
get: fn () => $this->person->gender ?? null
|
||||
);
|
||||
}
|
||||
|
||||
protected function corporateLogo(): Attribute
|
||||
{
|
||||
$avatar = File::where(['type' => 'avatar', 'fileable_id' => $this->currentPolicy->corporate->id])->orderBy('id', 'desc')->get()->first();
|
||||
if ($avatar){
|
||||
$path = $_ENV['LMS_APP_STORAGE'] . $avatar->path ? $avatar->path :'';
|
||||
return Attribute::make(
|
||||
get: fn () => $avatar ? $path : null
|
||||
);
|
||||
} else {
|
||||
return Attribute::make(
|
||||
get: fn () => null
|
||||
);
|
||||
}
|
||||
}
|
||||
/* -------------------------------------------------------------------------- */
|
||||
}
|
||||
|
||||
@@ -26,5 +26,7 @@ class UserInsurance extends Model
|
||||
'dTanggalLahir',
|
||||
'nNoKTP',
|
||||
'sNoPolis',
|
||||
'nIDInsurance',
|
||||
'sLayanan',
|
||||
];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user