manual linking apps

This commit is contained in:
Linksehat Staging Server
2023-11-10 11:23:20 +07:00
parent 134caa2d2c
commit 0c9f69aaad
5 changed files with 127 additions and 29 deletions

View File

@@ -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,104 @@ 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 response()->json(['errors' => $validator->errors()], 422);
}
$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');
}
}

View File

@@ -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,7 @@ 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']);
});
});

View File

@@ -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' => $this->full_name,
'valid_until' => $this->members_expire_date,
];
return $data;
}

View File

@@ -246,5 +246,14 @@ 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();
$path = $_ENV['LMS_APP_STORAGE'] . $avatar->path;
return Attribute::make(
get: fn () => $avatar ? $path : null
);
}
/* -------------------------------------------------------------------------- */
}

View File

@@ -26,5 +26,7 @@ class UserInsurance extends Model
'dTanggalLahir',
'nNoKTP',
'sNoPolis',
'nIDInsurance',
'sLayanan',
];
}