update api user dan export alamr center client
This commit is contained in:
@@ -2,13 +2,21 @@
|
||||
|
||||
namespace Modules\Client\Http\Controllers\Api;
|
||||
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\Claim;
|
||||
use App\Models\CorporateEmployee;
|
||||
use App\Models\Icd;
|
||||
use App\Models\ClaimHistoryCare;
|
||||
use App\Models\Corporate;
|
||||
use App\Services\ClaimService;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Modules\Client\Transformers\ClaimShowResource;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
||||
|
||||
class ClaimController extends Controller
|
||||
{
|
||||
@@ -133,4 +141,124 @@ class ClaimController extends Controller
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
public function export($corporate_id){
|
||||
$corporate = Corporate::where('id', $corporate_id)->with(['currentPolicy'])->first();
|
||||
$member_id = CorporateEmployee::where('corporate_id', $corporate_id)->get('member_id')->toArray();
|
||||
// dd($member_id);
|
||||
$claim = Claim::whereIn('member_id', $member_id)->with(['member', 'member.plans'])->get();
|
||||
$data = [];
|
||||
|
||||
if (count( $claim) > 0){
|
||||
$temp = [];
|
||||
foreach($claim as $c) {
|
||||
|
||||
$diagnosis = ClaimHistoryCare::where('claim_id', 34)->with('icd')->get();
|
||||
$diagnosisName = '';
|
||||
if (count($diagnosis) > 0){
|
||||
$tempDiagnosis = [];
|
||||
foreach($diagnosis as $key => $d){
|
||||
$diagnosis = Icd::where('id', $d['main_diagnosis_id'])->first();
|
||||
array_push($tempDiagnosis, $diagnosis->name);
|
||||
}
|
||||
|
||||
$diagnosisName = implode(", ", $tempDiagnosis);
|
||||
|
||||
}
|
||||
$temp['id'] = $c['id'];
|
||||
$temp['plan_id'] = $c['member']['plans'][0]['code'];
|
||||
$temp['payor_id'] = $c['member']['payor_id'];
|
||||
$temp['corporate_id'] = $corporate->name;
|
||||
$temp['policy_number'] = $corporate->currentPolicy->code;
|
||||
$temp['member_id'] = $c['member']['member_id'];
|
||||
$temp['benefit_code'] = $c['benefit_code'];
|
||||
$temp['benefit_desc'] = $c['benefit_desc'];
|
||||
$temp['amount_incurred'] = $c['amount_incurred'];
|
||||
$temp['amount_approved'] = $c['amount_approved'];
|
||||
$temp['amount_not_approved'] = $c['amount_not_approved'];
|
||||
$temp['excess_paid'] = $c['excess_paid'];
|
||||
$temp['diganosis'] = $diagnosisName;
|
||||
array_push($data, $temp);
|
||||
}
|
||||
|
||||
$headers = [
|
||||
['value' => 'Plan ID', 'cell' => 'A1', 'mergeCell' => false, 'mergeToCell' => ''],
|
||||
['value' => 'Payor ID', 'cell' => 'B1', 'mergeCell' => false, 'mergeToCell' => ''],
|
||||
['value' => 'Corporate ID', 'cell' => 'C1', 'mergeCell' => false, 'mergeToCell' => ''],
|
||||
['value' => 'Policy Number', 'cell' => 'D1', 'mergeCell' => false, 'mergeToCell' => ''],
|
||||
['value' => 'Member ID', 'cell' => 'E1', 'mergeCell' => false, 'mergeToCell' => ''],
|
||||
['value' => 'Benefit Code', 'cell' => 'F1', 'mergeCell' => false, 'mergeToCell' => ''],
|
||||
['value' => 'Benefit Desc', 'cell' => 'G1', 'mergeCell' => false, 'mergeToCell' => ''],
|
||||
['value' => 'Amt Incurred', 'cell' => 'H1', 'mergeCell' => false, 'mergeToCell' => ''],
|
||||
['value' => 'Amt Approved', 'cell' => 'I1', 'mergeCell' => false, 'mergeToCell' => ''],
|
||||
['value' => 'Amt Not Approved', 'cell' => 'J1', 'mergeCell' => false, 'mergeToCell' => ''],
|
||||
['value' => 'Excess Paid', 'cell' => 'K1', 'mergeCell' => false, 'mergeToCell' => ''],
|
||||
['value' => 'Diagnosis', 'cell' => 'L1', 'mergeCell' => false, 'mergeToCell' => 'J2'],
|
||||
|
||||
];
|
||||
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
foreach ($headers as $header) {
|
||||
$sheet->setCellValue($header['cell'], $header['value']);
|
||||
|
||||
if ($header['mergeCell'] === true) {
|
||||
$sheet->mergeCells($header['cell'] . ':' . $header['mergeToCell']);
|
||||
}
|
||||
|
||||
$sheet->getStyle($header['cell'])->getFont()->setBold(true);
|
||||
$sheet->getStyle($header['cell'])->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER)->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
|
||||
}
|
||||
|
||||
$startFrom = 2;
|
||||
|
||||
foreach($data as $i => $d){
|
||||
$sheet->setCellValue('A' . $startFrom, $d['plan_id'] ?? '-');
|
||||
$sheet->setCellValue('B' . $startFrom, $d['payor_id'] ?? '-');
|
||||
$sheet->setCellValue('C' . $startFrom, $d['corporate_id'] ?? '-');
|
||||
$sheet->setCellValue('D' . $startFrom, $d['policy_number'] ?? '-');
|
||||
$sheet->setCellValue('E' . $startFrom, $d['member_id'] ?? '-');
|
||||
$sheet->setCellValue('F' . $startFrom, $d['benefit_code'] ?? '-');
|
||||
$sheet->setCellValue('G' . $startFrom, $d['benefit_desc'] ?? '-');
|
||||
$sheet->setCellValue('H' . $startFrom, $d['amount_incurred'] ?? '-');
|
||||
$sheet->setCellValue('I' . $startFrom, $d['amount_approved'] ?? '-');
|
||||
$sheet->setCellValue('J' . $startFrom, $d['amount_not_approved'] ?? '-');
|
||||
$sheet->setCellValue('K' . $startFrom, $d['excess_paid'] ?? '-');
|
||||
$sheet->setCellValue('L' . $startFrom, $d['diganosis'] ?? '-');
|
||||
|
||||
$startFrom++;
|
||||
}
|
||||
|
||||
foreach (['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J','K'] as $header) {
|
||||
if ($header === 'A') {
|
||||
$spreadsheet->getActiveSheet()->getColumnDimension($header)->setWidth(35, 'px');
|
||||
} elseif ($header === 'H' || $header === 'I') {
|
||||
$spreadsheet->getActiveSheet()->getColumnDimension($header)->setWidth(100, 'px');
|
||||
} else {
|
||||
$spreadsheet->getActiveSheet()->getColumnDimension($header)->setAutoSize(true);
|
||||
}
|
||||
}
|
||||
|
||||
$spreadsheet->getActiveSheet()->getStyle('A2:A' . $startFrom)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER)->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
|
||||
|
||||
$sheet->getDefaultRowDimension()->setRowHeight(-1);
|
||||
$sheet->setTitle('Alarm Center Report');
|
||||
|
||||
$writer = new Xlsx($spreadsheet);
|
||||
ob_start();
|
||||
$writer->save('php://output');
|
||||
$content = ob_get_contents();
|
||||
ob_end_clean();
|
||||
|
||||
$fileName = 'result-' . now()->getPreciseTimestamp(3) . '-alarm-center-report.xlsx';
|
||||
Storage::disk('public')->put('temp/' . $fileName, $content);
|
||||
|
||||
$fileUrl = url('storage/temp/' . $fileName);
|
||||
|
||||
return Helper::responseJson([
|
||||
"file_url" => $fileUrl
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ class ClaimRequestController extends Controller
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
private static $code_prefix = 'CRQ-C';
|
||||
private static $code_prefix = 'CP';
|
||||
public function index()
|
||||
{
|
||||
return view('client::index');
|
||||
|
||||
@@ -6,6 +6,7 @@ use App\Helpers\Helper;
|
||||
use App\Models\Member;
|
||||
use App\Models\Claim;
|
||||
use App\Models\ClaimRequest;
|
||||
use App\Models\CorporateEmployee;
|
||||
use App\Services\CorporateMemberService;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
@@ -115,8 +116,9 @@ class CorporateMemberController extends Controller
|
||||
public function serviceMonitoring($corporate_id, $claim_id)
|
||||
{
|
||||
$data = Claim::where('id', $claim_id)->first();
|
||||
|
||||
|
||||
return Helper::responseJson(DataServiceMonitoring::make($data));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -52,6 +52,7 @@ Route::prefix('client')->group(function () {
|
||||
Route::get('service-monitoring/{id}', [CorporateMemberController::class, 'serviceMonitoring']);
|
||||
Route::get('claims/status', [ClaimController::class, 'status']);
|
||||
Route::get('claims', [ClaimController::class, 'index']);
|
||||
Route::get('claims/export', [ClaimController::class, 'export']);
|
||||
Route::get('claims/{claim_id}/encounters', [ClaimEncounterController::class, 'getEncounterData']);
|
||||
Route::get('topup', [TopUpController::class, 'index']);
|
||||
// Route::get('topup', [TopUpController::class, 'get']);
|
||||
@@ -63,6 +64,8 @@ Route::prefix('client')->group(function () {
|
||||
|
||||
Route::get('corporate', [CorporateCurrentController::class, 'index']);
|
||||
Route::put('corporate-update', [CorporateCurrentController::class, 'update']);
|
||||
|
||||
|
||||
});
|
||||
Route::get('claims/{id}', [ClaimController::class, 'show']);
|
||||
|
||||
|
||||
@@ -3,11 +3,22 @@
|
||||
namespace Modules\Client\Transformers\AlarmCenter;
|
||||
|
||||
use App\Models\ClaimRequest;
|
||||
use App\Models\DiagnosisSecondaryClaimHistoryCare;
|
||||
use App\Models\ClaimEncounter;
|
||||
use App\Models\ClaimHistoryCare;
|
||||
use App\Models\Encounter;
|
||||
use App\Models\Member;
|
||||
use App\Models\Icd;
|
||||
use App\Models\Organization;
|
||||
use App\Models\MedicalPlan;
|
||||
use App\Models\CorporateEmployee;
|
||||
use App\Models\DailyMonitoring;
|
||||
use App\Models\LaboratoriumResult;
|
||||
|
||||
|
||||
use App\Helpers\Helper;
|
||||
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
@@ -24,14 +35,87 @@ class DataServiceMonitoring extends JsonResource
|
||||
$claim_request = ClaimRequest::findOrFail($this->claim_request_id);
|
||||
$member = Member::findOrFail($this->member_id);
|
||||
|
||||
$encounter = ClaimEncounter::where('claim_id', $this->id)->first();
|
||||
if ($encounter) {
|
||||
$final_encounter = Encounter::findOrFail($this->final_encounter_id);
|
||||
$data = Organization::findOrFail($final_encounter->healthcare_id);
|
||||
$hospital = $data->name;
|
||||
|
||||
// History Care Hospital
|
||||
$historyCareHospital = ClaimHistoryCare::where('claim_id', $this->id)->first();
|
||||
if ($historyCareHospital) {
|
||||
$hospital = Organization::findOrFail($historyCareHospital->organization_id)->name;
|
||||
$mainDianosis = Icd::findOrFail($historyCareHospital->main_diagnosis_id)->name;
|
||||
$mainDianosisCode = Icd::findOrFail($historyCareHospital->main_diagnosis_id)->code;
|
||||
|
||||
$comporatationDiagnosis = DiagnosisSecondaryClaimHistoryCare::where('claim_history_care_id', $historyCareHospital->id)->first();
|
||||
|
||||
$comporatationDiagnosisName = Icd::findOrFail($comporatationDiagnosis->icd_id)->name;
|
||||
$comporatationDiagnosisCode = Icd::findOrFail($comporatationDiagnosis->icd_id)->code;
|
||||
|
||||
$admissionDate = $historyCareHospital->admission_date;
|
||||
$dischargeDate = $historyCareHospital->discharge_date;
|
||||
$serviceCode = $historyCareHospital->service_code;
|
||||
} else {
|
||||
$hospital = '-';
|
||||
$hospital = '-';
|
||||
$mainDianosis = '-';
|
||||
$mainDianosisCode = '-';
|
||||
$comporatationDiagnosisName = '-';
|
||||
$comporatationDiagnosisCode = '-';
|
||||
$admissionDate = '-';
|
||||
$dischargeDate = '-';
|
||||
$serviceCode = '-';
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
$dailyMonitoring = DailyMonitoring::where('claim_id', $claim_request->claim_id)->get()->toArray();
|
||||
$laboratoriumResult = LaboratoriumResult::where('claim_id', $claim_request->claim_id)->get()->toArray();
|
||||
|
||||
// Handle Daily Monitoring
|
||||
$dataDailyMonitoring = [];
|
||||
if (count($dailyMonitoring) > 0){
|
||||
$temp = [];
|
||||
foreach($dailyMonitoring as $data){
|
||||
$temp['date'] = Helper::formatDateOnly($data['created_at']);
|
||||
$temp['time'] = Helper::formatTimeOnly($data['created_at']);
|
||||
$temp['status'] = 'Done';
|
||||
$temp['subject_title'] = $data['subject'];
|
||||
$temp['body_temperature'] = $data['body_temperature']. 'mm[Hg]';
|
||||
$temp['sistole'] = $data['sistole']. 'mm[Hg]';
|
||||
$temp['diastole'] = $data['diastole']. 'mm[Hg]';
|
||||
$temp['respiration_rate'] = $data['respiration_rate']. 'mm[Hg]';
|
||||
$temp['analisis_title'] = $data['analysis'];
|
||||
|
||||
$medicalPlan = MedicalPlan::where('claim_daily_monitoring_id', $data['id'])->get('plan')->toArray();
|
||||
if (count( $medicalPlan) > 0){
|
||||
$temp['Perencanaan'] = [];
|
||||
foreach($medicalPlan as $item){
|
||||
array_push($temp['Perencanaan'], $item['plan']);
|
||||
}
|
||||
|
||||
} else {
|
||||
$temp['Perencanaan'] = [];
|
||||
}
|
||||
array_push($dataDailyMonitoring, $temp);
|
||||
}
|
||||
}
|
||||
|
||||
// Handle Laboratorium Result
|
||||
$dataLaboratoruiumResult = [];
|
||||
if (count($laboratoriumResult) > 0){
|
||||
$tempLab = [];
|
||||
foreach($laboratoriumResult as $data){
|
||||
$tempLab['datetime'] = $data['date'];
|
||||
$tempLab['reimbursement_code'] = "RE-0" . $data['id'];
|
||||
$tempLab['examination'] = $data['examination'];
|
||||
$tempLab['location'] = $data['location'];
|
||||
|
||||
if (count($data['lab_result_file']) > 0){
|
||||
$tempLab['file'] = $data['lab_result_file'][0]['lab_result_file_obj']->path; // masih dumy untuk download nya belum bisa multiple
|
||||
}
|
||||
array_push($dataLaboratoruiumResult, $tempLab);
|
||||
}
|
||||
}
|
||||
|
||||
$data = [
|
||||
"id" => $this->id,
|
||||
"company_name" => $member->currentCorporate->name,
|
||||
@@ -41,82 +125,56 @@ class DataServiceMonitoring extends JsonResource
|
||||
"phone" => $member->person->phone,
|
||||
"email" => $member->email,
|
||||
"birth_date" => $member->birth_date,
|
||||
"symptoms" => "Nyeri dada",
|
||||
"sign" => "Sesak Nafas",
|
||||
"main_diagnose" => "Chest pain on breathing",
|
||||
"main_diagnose_code" => "R07.1",
|
||||
"comparative_diagnosis" => "Abnormalities of breathing",
|
||||
"comparative_diagnosis_code" => "R06",
|
||||
"medical_evacuation" => "Land Transportation",
|
||||
"symptoms" => $historyCareHospital->symptoms ? $historyCareHospital->symptoms : '-' ,
|
||||
"sign" => $historyCareHospital->sign ? $historyCareHospital->sign : '-',
|
||||
"main_diagnose" => $mainDianosis,
|
||||
"main_diagnose_code" => $mainDianosisCode,
|
||||
"comparative_diagnosis" => $comporatationDiagnosisName,
|
||||
"comparative_diagnosis_code" => $comporatationDiagnosisCode,
|
||||
"service_name" => $serviceCode,
|
||||
"benefit_name" => "Konsultasi Dokter",
|
||||
"hospital" => $hospital,
|
||||
"admission_date" => $claim_request->submission_date,
|
||||
"discharge_date" => $claim_request->submission_date,
|
||||
"dialy_monitoring" => [
|
||||
"0" => [
|
||||
"date" => "2023-10-05",
|
||||
"time" => "09:10",
|
||||
"status" => "Done",
|
||||
"subject_title" => "Pasien mengalami sesak napas dan nyeri dada",
|
||||
"body_temperature" => "36.5",
|
||||
"sistole" => "110 mm[Hg]",
|
||||
"diastole" => "110 mm[Hg]",
|
||||
"respiration_rate" => "20/min",
|
||||
"analisis_title" => "Asthma bronkial dengan perbaikan",
|
||||
"Perencanaan" => [
|
||||
"O2 4L/min", "IVDL RL 2 kolf/6 jam", "Rencana tes sputum"
|
||||
]
|
||||
],
|
||||
"1" => [
|
||||
"date" => "2023-10-04",
|
||||
"time" => "09:10",
|
||||
"status" => "Done",
|
||||
"subject_title" => "Pasien mengalami sesak napas dan nyeri dada",
|
||||
"body_temperature" => "36.5",
|
||||
"sistole" => "110 mm[Hg]",
|
||||
"diastole" => "110 mm[Hg]",
|
||||
"respiration_rate" => "20/min",
|
||||
"analisis_title" => "Asthma bronkial dengan perbaikan",
|
||||
"Perencanaan" => [
|
||||
"O2 4L/min", "IVDL RL 2 kolf/6 jam", "Rencana tes sputum"
|
||||
]
|
||||
]
|
||||
],
|
||||
"laboratorium_result" => [
|
||||
"0" => [
|
||||
[
|
||||
"datetime" => "2023-10-05 10:00",
|
||||
"reimbursement_code" => "RE-011",
|
||||
"examination" => "SGOT",
|
||||
"location" => "Pramita Jakarta Ragunan",
|
||||
"files" => "https:://test.com"
|
||||
],
|
||||
[
|
||||
"datetime" => "2023-10-05 09:00",
|
||||
"reimbursement_code" => "RE-010",
|
||||
"examination" => "SGOT",
|
||||
"location" => "Pramita Jakarta Ragunan",
|
||||
"files" => "https:://test.com"
|
||||
],
|
||||
],
|
||||
"1" => [
|
||||
[
|
||||
"datetime" => "2023-10-04 10:00",
|
||||
"reimbursement_code" => "RE-09",
|
||||
"examination" => "Hematologi Lengkap",
|
||||
"location" => "Pramita Jakarta Ragunan",
|
||||
"files" => "https:://test.com"
|
||||
],
|
||||
[
|
||||
"datetime" => "2023-10-04 09:00",
|
||||
"reimbursement_code" => "RE-08",
|
||||
"examination" => "Hematologi Lengkap",
|
||||
"location" => "Pramita Jakarta Ragunan",
|
||||
"files" => "https:://test.com"
|
||||
]
|
||||
]
|
||||
"admission_date" => $admissionDate,
|
||||
"discharge_date" => $dischargeDate,
|
||||
"dialy_monitoring" => $dataDailyMonitoring,
|
||||
// "laboratorium_result" => [
|
||||
// "0" => [
|
||||
// [
|
||||
// "datetime" => "2023-10-05 10:00",
|
||||
// "reimbursement_code" => "RE-011",
|
||||
// "examination" => "SGOT",
|
||||
// "location" => "Pramita Jakarta Ragunan",
|
||||
// "files" => "https:://test.com"
|
||||
// ],
|
||||
// [
|
||||
// "datetime" => "2023-10-05 09:00",
|
||||
// "reimbursement_code" => "RE-010",
|
||||
// "examination" => "SGOT",
|
||||
// "location" => "Pramita Jakarta Ragunan",
|
||||
// "files" => "https:://test.com"
|
||||
// ],
|
||||
// ],
|
||||
// "1" => [
|
||||
// [
|
||||
// "datetime" => "2023-10-04 10:00",
|
||||
// "reimbursement_code" => "RE-09",
|
||||
// "examination" => "Hematologi Lengkap",
|
||||
// "location" => "Pramita Jakarta Ragunan",
|
||||
// "files" => "https:://test.com"
|
||||
// ],
|
||||
// [
|
||||
// "datetime" => "2023-10-04 09:00",
|
||||
// "reimbursement_code" => "RE-08",
|
||||
// "examination" => "Hematologi Lengkap",
|
||||
// "location" => "Pramita Jakarta Ragunan",
|
||||
// "files" => "https:://test.com"
|
||||
// ]
|
||||
// ]
|
||||
|
||||
]
|
||||
// ],
|
||||
|
||||
"laboratorium_result" => [$dataLaboratoruiumResult], //
|
||||
|
||||
|
||||
];
|
||||
|
||||
|
||||
@@ -69,6 +69,7 @@ class DailyMonitoringController extends Controller
|
||||
->leftJoin('members', 'claims.member_id', '=', 'members.id')
|
||||
->select('claims.id AS claim_id','claim_history_cares.admission_date','claim_history_cares.discharge_date','claim_requests.code AS claim_code','services.name AS service_type','claims.status AS claim_status','members.member_id',)
|
||||
->where("claims.member_id", "=", $memberDetail->id)
|
||||
->where("claim_requests.claim_id", "!=",null)
|
||||
->orderBy("claims.created_at", "desc")
|
||||
->get();
|
||||
|
||||
@@ -116,7 +117,7 @@ class DailyMonitoringController extends Controller
|
||||
public function AddDetailMonitoringList(Request $request, $claim_code)
|
||||
{
|
||||
$request->merge(['claim_code' => $claim_code]);
|
||||
|
||||
|
||||
// validation rule
|
||||
$validator = Validator::make($request->all(),[
|
||||
'claim_code' => 'required|exists:claim_requests,code',
|
||||
@@ -143,15 +144,13 @@ class DailyMonitoringController extends Controller
|
||||
->select('id')
|
||||
->where('code', $claim_code)
|
||||
->first();
|
||||
|
||||
|
||||
// get claim
|
||||
$claim = DB::table('claims')
|
||||
->select('id')
|
||||
->where('claim_request_id', $claim_request->id)
|
||||
->first();
|
||||
|
||||
DB::beginTransaction();
|
||||
|
||||
try {
|
||||
// insert claim daily monitoring
|
||||
$db_response = DailyMonitoring::create([
|
||||
@@ -165,6 +164,7 @@ class DailyMonitoringController extends Controller
|
||||
'complaints' => $request->complaints,
|
||||
]);
|
||||
|
||||
|
||||
// cek medical plan
|
||||
$num_medical_plan = 0;
|
||||
|
||||
@@ -204,7 +204,6 @@ class DailyMonitoringController extends Controller
|
||||
}
|
||||
catch (Exception $e) {
|
||||
DB::rollBack();
|
||||
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => $e->getMessage(),
|
||||
|
||||
@@ -5,126 +5,126 @@ namespace Modules\Linksehat\Http\Controllers\Api;
|
||||
use App\Helpers\Helper;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Person;
|
||||
use App\Models\User;
|
||||
use App\Models\OLDLMS\User;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Laravel\Socialite\Facades\Socialite;
|
||||
use Modules\Linksehat\Transformers\UserProfileResource;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Validator;
|
||||
|
||||
class AuthController extends Controller
|
||||
{
|
||||
public function otpRequest(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
// 'phone' => 'required'
|
||||
'phone_or_email' => 'required'
|
||||
]);
|
||||
private $url;
|
||||
|
||||
if (filter_var($request->phone_or_email, FILTER_VALIDATE_EMAIL)) {
|
||||
$user = User::updateOrCreate([
|
||||
'email' => $request->phone_or_email
|
||||
], [
|
||||
'email' => $request->phone_or_email,
|
||||
'otp' => rand(1000, 9999),
|
||||
'otp_created_at' => now()
|
||||
]);
|
||||
|
||||
$person = Person::query()->create([
|
||||
'owner_user_id' => $user->id,
|
||||
'email' => $request->phone_or_email,
|
||||
'created_by' => $user->id,
|
||||
]);
|
||||
|
||||
User::query()->find($user->id)->update([
|
||||
'person_id' => $person->id
|
||||
]);
|
||||
} else {
|
||||
$user = User::updateOrCreate([
|
||||
'phone' => $request->phone_or_email
|
||||
], [
|
||||
'phone' => $request->phone_or_email,
|
||||
'otp' => rand(1000, 9999),
|
||||
'otp_created_at' => now()
|
||||
]);
|
||||
|
||||
$person = Person::query()->create([
|
||||
'owner_user_id' => $user->id,
|
||||
'phone' => $request->phone_or_email,
|
||||
'created_by' => $user->id,
|
||||
]);
|
||||
|
||||
User::query()->find($user->id)->update([
|
||||
'person_id' => $person->id
|
||||
]);
|
||||
}
|
||||
|
||||
if (!$user) {
|
||||
$message = filter_var($request->phone_or_email, FILTER_VALIDATE_EMAIL) ? "User dengan alamat email " . $request->phone_or_email . " tidak ditemukan" : "User dengan nomor telepon " . $request->phone_or_email . " tidak ditemukan";
|
||||
|
||||
return Helper::responseJson(statusCode: Response::HTTP_NOT_FOUND, message: $message);
|
||||
}
|
||||
|
||||
// TODO Send the OTP
|
||||
if (filter_var($request->phone_or_email, FILTER_VALIDATE_EMAIL)) {
|
||||
// Send Email
|
||||
} else {
|
||||
// Send Whatsapp
|
||||
}
|
||||
|
||||
return Helper::responseJson(message: 'OTP Terkirim');
|
||||
public function __construct() {
|
||||
$this->url = $_ENV['LMS_APP_URL'];
|
||||
}
|
||||
|
||||
public function login(Request $request)
|
||||
{
|
||||
{
|
||||
$request->validate([
|
||||
// 'email' => 'email',
|
||||
// 'password' => 'required_with:email',
|
||||
'phone_or_email' => 'required',
|
||||
// 'phone' => '',
|
||||
// 'otp' => 'required_with:phone',
|
||||
'phone_or_email' => 'required',
|
||||
'otp' => 'required'
|
||||
'password' => 'required',
|
||||
// 'otp' => 'required'
|
||||
]);
|
||||
|
||||
$loginType = filter_var($request->phone_or_email, FILTER_VALIDATE_EMAIL) ? 'email' : 'phone';
|
||||
// Login hit ke API linksehat, karena encrypt nya pake CI
|
||||
$response = Http::post($this->url.'login', [
|
||||
'sEmail' => $request->phone_or_email,
|
||||
'sPassword' => $request->password,
|
||||
'sRemember' => $request->remember
|
||||
]);
|
||||
|
||||
if ($loginType == 'email') {
|
||||
$user = User::query()
|
||||
->where('email', $request->phone_or_email)
|
||||
->first();
|
||||
}
|
||||
|
||||
if ($loginType == 'phone') {
|
||||
$user = User::query()
|
||||
->where('phone', $request->phone_or_email)
|
||||
->first();
|
||||
}
|
||||
|
||||
if (!isset($user) || empty($user)) {
|
||||
return response(['message' => 'User Tidak Ditemukan'], 404);
|
||||
}
|
||||
|
||||
if ($loginType == 'email') {
|
||||
if ($request->otp != $user->otp) {
|
||||
return response(['message' => 'OTP Salah, Silahkan Cek Kembali Email Anda'], 403);
|
||||
}
|
||||
} else if ($loginType == 'phone') {
|
||||
if ($request->otp != $user->otp) {
|
||||
return response(['message' => 'OTP Salah'], 403);
|
||||
}
|
||||
$response = $response->json();
|
||||
if ($response['success']){
|
||||
$user = User::with('detail')
|
||||
->where('sEmail', $request->phone_or_email)
|
||||
->first();
|
||||
return Helper::responseJson(
|
||||
data: [
|
||||
'token' => $user->createToken('app')->plainTextToken,
|
||||
'user' => UserProfileResource::make($user),
|
||||
],
|
||||
message: 'Selamat Datang'
|
||||
);
|
||||
} else {
|
||||
return response(['message' => 'Mode Login Tidak Dikenal'], 403);
|
||||
return response(['message' => 'Email atau Password salah, Silahkan Cek Kembali'], 403);
|
||||
};
|
||||
}
|
||||
|
||||
public function loginPhone(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'phone_or_email' => 'required',
|
||||
'otp' => 'required',
|
||||
]);
|
||||
|
||||
$user = User::with('detail')
|
||||
->where([
|
||||
'sPhone' => $request->phone_or_email,
|
||||
'sVerificationCode' => $request->otp
|
||||
])
|
||||
->first();
|
||||
|
||||
if ($user){
|
||||
|
||||
$updateVericationCode = User::with('detail')
|
||||
->where([
|
||||
'sPhone' => $request->phone_or_email,
|
||||
'sVerificationCode' => $request->otp
|
||||
])->update([
|
||||
'sVerificationCode' => null,
|
||||
]);
|
||||
return Helper::responseJson(
|
||||
data: [
|
||||
'token' => $user->createToken('app')->plainTextToken,
|
||||
'user' => UserProfileResource::make($user),
|
||||
],
|
||||
message: 'Selamat Datang'
|
||||
);
|
||||
} else {
|
||||
return response(['message' => 'Email atau Password salah, Silahkan Cek Kembali'], 403);
|
||||
};
|
||||
}
|
||||
|
||||
public function otpRequest(Request $request)
|
||||
{
|
||||
|
||||
$user = User::with('detail')
|
||||
->where('sPhone', $request->phone_or_email)
|
||||
->first();
|
||||
|
||||
if ($user){
|
||||
// Request OTP ke API linksehat
|
||||
$response = Http::post($this->url.'generate_code', [
|
||||
'sPhone' => $request->phone_or_email
|
||||
]);
|
||||
|
||||
$response = $response->json();
|
||||
|
||||
return Helper::responseJson(
|
||||
data: [
|
||||
'otp' => $response['message'],
|
||||
],
|
||||
message: 'Kode OTP'
|
||||
);
|
||||
} else {
|
||||
return Helper::responseJson(
|
||||
data: [
|
||||
'otp' => null,
|
||||
],
|
||||
message: 'Nomor tidak ditemukan'
|
||||
);
|
||||
}
|
||||
|
||||
return Helper::responseJson(
|
||||
data: [
|
||||
'token' => $user->createToken('app')->plainTextToken,
|
||||
'user' => UserProfileResource::make($user),
|
||||
],
|
||||
message: 'Selamat Datang'
|
||||
);
|
||||
|
||||
|
||||
}
|
||||
|
||||
public function register(Request $request)
|
||||
@@ -163,6 +163,7 @@ class AuthController extends Controller
|
||||
return Helper::responseJson(message: 'Behasil Logout.');
|
||||
}
|
||||
|
||||
|
||||
public function mockOtp(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
namespace Modules\Linksehat\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\User;
|
||||
use App\Models\OLDLMS\User;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
@@ -16,9 +16,11 @@ class ProfileController extends Controller
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function index()
|
||||
public function index(Request $request, $id)
|
||||
{
|
||||
$user = Auth::user()->load('person');
|
||||
$user = User::where('nID', $id);
|
||||
|
||||
dd($user);
|
||||
|
||||
return Helper::responseJson(new UserProfileResource($user));
|
||||
}
|
||||
|
||||
@@ -35,6 +35,7 @@ Route::prefix('linksehat')->group(function () {
|
||||
Route::post('otp-request', 'otpRequest');
|
||||
Route::post('mock-otp', 'mockOtp');
|
||||
Route::post('login', 'login');
|
||||
Route::post('login-phone', 'loginPhone');
|
||||
Route::post('register', 'register');
|
||||
Route::get('social-login/{provider}', 'redirectSocialLogin');
|
||||
Route::get('social-login/{provider}/callback', 'handleSocialLoginCallback');
|
||||
@@ -59,7 +60,7 @@ Route::prefix('linksehat')->group(function () {
|
||||
|
||||
|
||||
Route::middleware('auth:sanctum')->group(function () {
|
||||
Route::get('profile', [ProfileController::class, 'index'])->name('profile');
|
||||
Route::get('profile/{id}', [ProfileController::class, 'index'])->name('profile');
|
||||
Route::post('profile', [ProfileController::class, 'update'])->name('profile.update');
|
||||
Route::post('notification-tokens/delete/{id}', [NotificationTokenController::class, 'destroy'])->name('profile.delete.token');
|
||||
Route::post('notification-tokens', [NotificationTokenController::class, 'store'])->name('profile.store.token');
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
namespace Modules\Linksehat\Transformers;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use App\Models\OLDLMS\User;
|
||||
use App\Models\OLDLMS\UserDetail;
|
||||
use DB;
|
||||
|
||||
|
||||
class UserProfileResource extends JsonResource
|
||||
{
|
||||
@@ -12,25 +16,44 @@ class UserProfileResource extends JsonResource
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
|
||||
protected $connection = 'oldlms';
|
||||
|
||||
public function toArray($request)
|
||||
{
|
||||
$memberProfile = User::with('detail')->where('nIDUser', $this->nID)->get()->toArray();
|
||||
$dataMemberProfile = [];
|
||||
|
||||
if (count($memberProfile) > 0){
|
||||
foreach($memberProfile as $m){
|
||||
$urlAvatarDefault = $m['detail']['nIDJenisKelamin'] == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/male-avatar.png';
|
||||
$avatarMember = $m['detail']['sImage'] ?? $urlAvatarDefault;
|
||||
$relationship = DB::connection('oldlms')->table('tm_hubungan_keluarga')->where('nID', $m['nIDHubunganKeluarga'])->first('sHubunganKeluarga');
|
||||
|
||||
$data = [
|
||||
'id' => $m['nID'],
|
||||
'name' => $m['full_name'],
|
||||
'relationship' => $relationship->sHubunganKeluarga,
|
||||
'avatar' => $avatarMember,
|
||||
|
||||
];
|
||||
|
||||
array_push( $dataMemberProfile, $data);
|
||||
}
|
||||
}
|
||||
|
||||
// Principal
|
||||
$urlAvatarDefault = $this->detail->nIDJenisKelamin == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/male-avatar.png';
|
||||
$avatar = $this->detail->sImage ?? $urlAvatarDefault;
|
||||
|
||||
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'email' => $this->email,
|
||||
'phone' => $this->phone,
|
||||
'email_verified_at' => $this->email_verified_at,
|
||||
'nik' => $this->person->nik ?? null,
|
||||
'name_prefix' => $this->person->name_prefix ?? null,
|
||||
'name' => $this->person->name ?? null,
|
||||
'name_suffix' => $this->person->name_suffix ?? null,
|
||||
'full_name' => $this->person->full_name ?? null,
|
||||
'gender' => $this->person->gender ?? null,
|
||||
'birth_date' => $this->person->birth_date ?? null,
|
||||
'age' => $this->person->age ?? null,
|
||||
'is_deceased' => $this->person->is_deceased ?? null,
|
||||
'deceased_at' => $this->person->deceased_at ?? null,
|
||||
'marital_status' => $this->person->marital_status ?? null,
|
||||
'preferred_lang' => $this->meta->preferred_lang ?? 'id',
|
||||
'id' => $this->nID,
|
||||
'full_name' => $this->sFirstName . ' '. $this->sLastName,
|
||||
'avatar' => $avatar,
|
||||
'member_type' => $this->nIDUser ? 'Dependent' : 'Principal',
|
||||
'member_profile' => $dataMemberProfile,
|
||||
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user