Compare commits
2 Commits
feature/in
...
feature/in
| Author | SHA1 | Date | |
|---|---|---|---|
| a08cdd56c8 | |||
| cf831c4602 |
88
.env-example
88
.env-example
@@ -1,88 +0,0 @@
|
||||
APP_NAME=Laravel
|
||||
APP_ENV=local
|
||||
APP_KEY=base64:axfmcy3qUMuukm8emaW6G0x/7SS3wWcLITXo+YAyCps=
|
||||
APP_DEBUG=true
|
||||
APP_URL=http://localhost:8000
|
||||
|
||||
LOG_CHANNEL=stack
|
||||
LOG_DEPRECATIONS_CHANNEL=null
|
||||
LOG_LEVEL=debug
|
||||
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=aso_two
|
||||
DB_USERNAME=mysql
|
||||
DB_PASSWORD=password
|
||||
|
||||
OLDLMS_DB_CONNECTION=mysql
|
||||
OLDLMS_DB_HOST=127.0.0.1
|
||||
OLDLMS_DB_PORT=3306
|
||||
OLDLMS_DB_DATABASE=linksehat
|
||||
OLDLMS_DB_USERNAME=mysql
|
||||
OLDLMS_DB_PASSWORD=password
|
||||
|
||||
BROADCAST_DRIVER=pusher
|
||||
CACHE_DRIVER=file
|
||||
FILESYSTEM_DISK=local
|
||||
QUEUE_CONNECTION=sync
|
||||
SESSION_DRIVER=file
|
||||
SESSION_LIFETIME=120
|
||||
|
||||
MEMCACHED_HOST=127.0.0.1
|
||||
|
||||
REDIS_HOST=127.0.0.1
|
||||
REDIS_PASSWORD=null
|
||||
REDIS_PORT=6379
|
||||
|
||||
#MAIL_DRIVER=smtp
|
||||
#MAIL_HOST=smtp.gmail.com
|
||||
#MAIL_PORT=587
|
||||
#MAIL_USERNAME=tumbaltumbal11@gmail.com
|
||||
#MAIL_PASSWORD="pxrrksphndlvkgca"
|
||||
|
||||
#MAIL_USERNAME=noreply@primayahospital.com
|
||||
#MAIL_PASSWORD="eqplciswxchsaart"
|
||||
|
||||
MAIL_MAILER=smtp
|
||||
MAIL_HOST=smtp.mailtrap.io
|
||||
MAIL_PORT=2525
|
||||
MAIL_USERNAME=b488d13fde4349
|
||||
MAIL_PASSWORD=63b64761d270ba
|
||||
MAIL_ENCRYPTION=tls
|
||||
|
||||
MAIL_ENCRYPTION=TLS
|
||||
MAIL_FROM_ADDRESS="hello@example.com"
|
||||
MAIL_FROM_NAME="${APP_NAME}"
|
||||
|
||||
AWS_ACCESS_KEY_ID=
|
||||
AWS_SECRET_ACCESS_KEY=
|
||||
AWS_DEFAULT_REGION=us-east-1
|
||||
AWS_BUCKET=
|
||||
AWS_USE_PATH_STYLE_ENDPOINT=false
|
||||
|
||||
|
||||
PUSHER_APP_ID="app-id"
|
||||
PUSHER_APP_KEY="app-key"
|
||||
PUSHER_APP_SECRET="app-secret"
|
||||
PUSHER_HOST=localhost
|
||||
PUSHER_PORT=6001
|
||||
PUSHER_SCHEME=http
|
||||
# PUSHER_APP_CLUSTER=mt1
|
||||
|
||||
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
|
||||
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
||||
|
||||
LMS_API_URL="http://lmsapi.primaya.id"
|
||||
|
||||
DUITKU_MERCHANT_KEY=
|
||||
DUITKU_MERCHANT_CODE=
|
||||
DUITKU_IS_SANDBOX=TRUE
|
||||
|
||||
WKHTML_PDF_BINARY=/var/www/aso/vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64
|
||||
WKHTML_IMG_BINARY=
|
||||
|
||||
EMAIL = helpdesk@linksehat.com
|
||||
PW_EMAIL = vsfcvwxcgldhhkdm
|
||||
NAME_EMAIL = "LinkSehat"
|
||||
PROVIDER_ONLINE_NOTIFICATION_EMAIL=helpdesk@linksehat.com
|
||||
59
.env.example
Normal file
59
.env.example
Normal file
@@ -0,0 +1,59 @@
|
||||
APP_NAME=Laravel
|
||||
APP_ENV=local
|
||||
APP_KEY=
|
||||
APP_DEBUG=true
|
||||
APP_URL=http://localhost
|
||||
|
||||
LOG_CHANNEL=stack
|
||||
LOG_DEPRECATIONS_CHANNEL=null
|
||||
LOG_LEVEL=debug
|
||||
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=laravel
|
||||
DB_USERNAME=root
|
||||
DB_PASSWORD=
|
||||
|
||||
OLDLMS_DB_CONNECTION=mysql
|
||||
OLDLMS_DB_HOST=127.0.0.1
|
||||
OLDLMS_DB_PORT=3306
|
||||
OLDLMS_DB_DATABASE=linksehat
|
||||
OLDLMS_DB_USERNAME=mysql
|
||||
OLDLMS_DB_PASSWORD=password
|
||||
|
||||
BROADCAST_DRIVER=log
|
||||
CACHE_DRIVER=file
|
||||
FILESYSTEM_DISK=local
|
||||
QUEUE_CONNECTION=sync
|
||||
SESSION_DRIVER=file
|
||||
SESSION_LIFETIME=120
|
||||
|
||||
MEMCACHED_HOST=127.0.0.1
|
||||
|
||||
REDIS_HOST=127.0.0.1
|
||||
REDIS_PASSWORD=null
|
||||
REDIS_PORT=6379
|
||||
|
||||
MAIL_MAILER=smtp
|
||||
MAIL_HOST=mailhog
|
||||
MAIL_PORT=1025
|
||||
MAIL_USERNAME=null
|
||||
MAIL_PASSWORD=null
|
||||
MAIL_ENCRYPTION=null
|
||||
MAIL_FROM_ADDRESS="hello@example.com"
|
||||
MAIL_FROM_NAME="${APP_NAME}"
|
||||
|
||||
AWS_ACCESS_KEY_ID=
|
||||
AWS_SECRET_ACCESS_KEY=
|
||||
AWS_DEFAULT_REGION=us-east-1
|
||||
AWS_BUCKET=
|
||||
AWS_USE_PATH_STYLE_ENDPOINT=false
|
||||
|
||||
PUSHER_APP_ID=
|
||||
PUSHER_APP_KEY=
|
||||
PUSHER_APP_SECRET=
|
||||
PUSHER_APP_CLUSTER=mt1
|
||||
|
||||
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
|
||||
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
||||
15
.gitignore
vendored
15
.gitignore
vendored
@@ -15,18 +15,3 @@ yarn-error.log
|
||||
|
||||
/public/dashboard
|
||||
/public/dashboard-staging
|
||||
/public/dashboard-copy
|
||||
/public/dashboard-copy2
|
||||
|
||||
/public/client-portal
|
||||
/public/client-portal-staging
|
||||
|
||||
/public/hospital-portal
|
||||
/public/hospital-portal-staging
|
||||
|
||||
/public/files
|
||||
|
||||
/Modules/Internal/vendor
|
||||
composer.lock
|
||||
/frontend/dashboard/.env.*
|
||||
/frontend/hospital-portal/.env.*
|
||||
182
AGENTS.md
182
AGENTS.md
@@ -1,182 +0,0 @@
|
||||
# AGENTS.md
|
||||
|
||||
File ini berisi instruksi untuk AI coding agent yang bekerja di repository ini.
|
||||
|
||||
## Project Overview
|
||||
|
||||
Project name: ASO (Laravel + Modules)
|
||||
Purpose: Platform operasional health insurance/managed care untuk pengelolaan member, corporate policy, claim, monitoring, livechat, dan pelaporan.
|
||||
Main users: Tim internal operasional, portal client corporate, portal hospital.
|
||||
Business domain: Healthtech / asuransi kesehatan / manajemen klaim dan layanan kesehatan.
|
||||
|
||||
## Tech Stack
|
||||
|
||||
Backend: PHP 8+, Laravel 9, `nwidart/laravel-modules`.
|
||||
Frontend: React + TypeScript + Vite (utama di `frontend/dashboard` dan `frontend/client-portal`), plus aset root Laravel (`resources/`, Vite/Mix).
|
||||
Database: MySQL/MariaDB (via Eloquent ORM + Laravel migrations).
|
||||
Queue/background jobs: Laravel Queue (`jobs` table tersedia; default testing `sync`).
|
||||
Cache: Laravel cache (driver mengikuti `.env`, testing pakai `array`).
|
||||
Auth: Laravel Sanctum, Spatie Permission (`role`/`permission` middleware), sebagian flow JWT untuk integrasi tertentu.
|
||||
Deployment: Build frontend ke `public/dashboard` dan `public/client-portal`; backend Laravel standar.
|
||||
Package manager: Composer (PHP), npm/yarn/pnpm (frontend, mixed antar subproject).
|
||||
|
||||
## Local Setup
|
||||
|
||||
Install dependencies:
|
||||
|
||||
```bash
|
||||
composer install
|
||||
npm install
|
||||
cd frontend/dashboard && yarn install
|
||||
cd ../client-portal && yarn install
|
||||
```
|
||||
|
||||
Run app:
|
||||
|
||||
```bash
|
||||
php artisan serve
|
||||
npm run dev
|
||||
cd frontend/dashboard && yarn start
|
||||
cd ../client-portal && yarn start
|
||||
```
|
||||
|
||||
Run tests:
|
||||
|
||||
```bash
|
||||
php artisan test
|
||||
```
|
||||
|
||||
Run lint:
|
||||
|
||||
```bash
|
||||
cd frontend/dashboard && yarn lint
|
||||
cd ../client-portal && yarn lint
|
||||
```
|
||||
|
||||
Run typecheck:
|
||||
|
||||
```bash
|
||||
# Belum ada script typecheck standar di root/subproject.
|
||||
# Jika diperlukan, gunakan tsc manual per frontend setelah konfirmasi tim.
|
||||
```
|
||||
|
||||
Run build:
|
||||
|
||||
```bash
|
||||
npm run production
|
||||
cd frontend/dashboard && yarn build
|
||||
cd ../client-portal && yarn build
|
||||
```
|
||||
|
||||
Run migrations:
|
||||
|
||||
```bash
|
||||
php artisan migrate
|
||||
```
|
||||
|
||||
## Repository Structure
|
||||
|
||||
```text
|
||||
app/ # Core Laravel app (models, services, middleware, controllers)
|
||||
routes/ # Root web/api routes
|
||||
Modules/ # Domain/module-based backend (Client, Internal, Linksehat, Primaya, HospitalPortal)
|
||||
Modules/*/Routes/ # Route entry point tiap module
|
||||
Modules/*/Http/Controllers/Api/
|
||||
database/migrations/ # Root migrations
|
||||
frontend/dashboard/ # React TS admin/internal dashboard
|
||||
frontend/client-portal/ # React TS client portal
|
||||
resources/ # Blade/views/assets untuk app Laravel utama
|
||||
public/ # Public assets + output build frontend
|
||||
tests/ # PHPUnit tests (Feature/Unit)
|
||||
```
|
||||
|
||||
## Architecture Rules
|
||||
|
||||
- Tempatkan business logic di layer service/domain yang sudah ada (`app/Services`, `Modules/*/Services`) dan jaga controller tetap tipis.
|
||||
- API layer mengikuti pemisahan module: endpoint module didefinisikan di `Modules/<ModuleName>/Routes/api.php` dengan controller module terkait.
|
||||
- Untuk perubahan schema, gunakan migration baru; jangan ubah migration lama kecuali ada instruksi eksplisit.
|
||||
- Untuk frontend, ikuti pattern existing per app (`src/pages`, `src/components`, `src/hooks`, `src/sections`) dan hindari cross-import antar app dashboard/client-portal.
|
||||
- Testing backend utama menggunakan PHPUnit (`tests/Feature`, `tests/Unit`); tambah regression test untuk perubahan behavior penting.
|
||||
|
||||
## Coding Standards
|
||||
|
||||
- Ikuti pattern existing project sebelum membuat pattern baru.
|
||||
- Buat perubahan kecil dan fokus.
|
||||
- Jangan lakukan refactor yang tidak berhubungan.
|
||||
- Jangan hardcode secrets.
|
||||
- Jangan bypass validation.
|
||||
- Jangan bypass auth/permission checks.
|
||||
- Pilih code yang eksplisit dan mudah dibaca dibanding code yang terlalu clever.
|
||||
- Tambahkan atau update test jika behavior berubah.
|
||||
|
||||
## Git Rules
|
||||
|
||||
- Jangan commit kecuali user secara eksplisit meminta.
|
||||
- Jangan push kecuali user secara eksplisit meminta.
|
||||
- Jangan rewrite git history kecuali user secara eksplisit meminta.
|
||||
- Tampilkan file yang berubah di final response.
|
||||
|
||||
## Security Rules
|
||||
|
||||
- Jangan pernah print secrets.
|
||||
- Jangan ubah nilai `.env` asli kecuali diminta secara eksplisit.
|
||||
- Gunakan `.env-example`/`.env.example` untuk dokumentasi environment variables.
|
||||
- Validasi auth, permissions, dan scoping corporate/member untuk protected data.
|
||||
- Untuk endpoint API, pertahankan middleware auth yang ada (`auth:sanctum`, role/permission, middleware khusus module).
|
||||
- Minta konfirmasi sebelum destructive data changes.
|
||||
|
||||
## Database Rules
|
||||
|
||||
- Gunakan migration system project ini.
|
||||
- Jangan edit historical migrations kecuali project ini memang mengizinkan.
|
||||
- Sertakan rollback/safety notes untuk schema changes.
|
||||
- Pertimbangkan existing production data.
|
||||
- Perhatikan migrasi dapat berasal dari root `database/migrations` dan modul tertentu.
|
||||
|
||||
## Testing Rules
|
||||
|
||||
Sebelum selesai, jalankan command yang relevan:
|
||||
|
||||
```bash
|
||||
php artisan test
|
||||
cd frontend/dashboard && yarn lint
|
||||
cd frontend/client-portal && yarn lint
|
||||
```
|
||||
|
||||
Jika command tidak bisa dijalankan, jelaskan alasannya dan command apa yang harus dijalankan manual.
|
||||
|
||||
## AI Agent Workflow
|
||||
|
||||
Untuk feature work:
|
||||
|
||||
1. Baca file ini.
|
||||
2. Inspect pattern yang sudah ada.
|
||||
3. Tulis plan singkat untuk pekerjaan non-trivial.
|
||||
4. Tanya klarifikasi jika requirement kurang jelas.
|
||||
5. Implement perubahan kecil dan fokus.
|
||||
6. Jalankan test/lint/typecheck/build yang relevan.
|
||||
7. Rangkum file yang berubah, command yang dijalankan, dan risiko.
|
||||
|
||||
Untuk debugging:
|
||||
|
||||
1. Reproduce atau inspect issue.
|
||||
2. Identifikasi root cause sebelum mengubah code.
|
||||
3. Buat fix minimal yang aman.
|
||||
4. Tambahkan regression test jika memungkinkan.
|
||||
5. Jalankan verification.
|
||||
|
||||
## Final Response Format
|
||||
|
||||
```text
|
||||
Summary:
|
||||
- ...
|
||||
|
||||
Files changed:
|
||||
- ...
|
||||
|
||||
Commands run:
|
||||
- ...
|
||||
|
||||
Risks / notes:
|
||||
- ...
|
||||
```
|
||||
0
Modules/Client/Config/.gitkeep
Executable file → Normal file
0
Modules/Client/Config/.gitkeep
Executable file → Normal file
0
Modules/Client/Config/config.php
Executable file → Normal file
0
Modules/Client/Config/config.php
Executable file → Normal file
0
Modules/Client/Console/.gitkeep
Executable file → Normal file
0
Modules/Client/Console/.gitkeep
Executable file → Normal file
0
Modules/Client/Database/Migrations/.gitkeep
Executable file → Normal file
0
Modules/Client/Database/Migrations/.gitkeep
Executable file → Normal file
0
Modules/Client/Database/Seeders/.gitkeep
Executable file → Normal file
0
Modules/Client/Database/Seeders/.gitkeep
Executable file → Normal file
0
Modules/Client/Database/Seeders/ClientDatabaseSeeder.php
Executable file → Normal file
0
Modules/Client/Database/Seeders/ClientDatabaseSeeder.php
Executable file → Normal file
0
Modules/Client/Database/factories/.gitkeep
Executable file → Normal file
0
Modules/Client/Database/factories/.gitkeep
Executable file → Normal file
0
Modules/Client/Entities/.gitkeep
Executable file → Normal file
0
Modules/Client/Entities/.gitkeep
Executable file → Normal file
0
Modules/Client/Http/Controllers/.gitkeep
Executable file → Normal file
0
Modules/Client/Http/Controllers/.gitkeep
Executable file → Normal file
75
Modules/Client/Http/Controllers/Api/AuthController.php
Executable file → Normal file
75
Modules/Client/Http/Controllers/Api/AuthController.php
Executable file → Normal file
@@ -8,17 +8,14 @@ use App\Models\User;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Illuminate\Support\Facades\View;
|
||||
|
||||
class AuthController extends Controller
|
||||
{
|
||||
public function login(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'phoneOrEmail' => 'required',
|
||||
'password' => 'required'
|
||||
'phoneOrEmail' => 'required'
|
||||
]);
|
||||
|
||||
$user = User::query()
|
||||
@@ -35,60 +32,28 @@ class AuthController extends Controller
|
||||
return Helper::responseJson(statusCode: Response::HTTP_NOT_FOUND, message: $message);
|
||||
}
|
||||
|
||||
|
||||
// $token = rand(1000, 9999); // Menghasilkan angka acak antara 100000 dan 999999
|
||||
// if($request->phoneOrEmail == 'manager+one@gmail.com' || $request->phoneOrEmail == 'manager+two@gmail.com')
|
||||
// {
|
||||
// $token = 4444;
|
||||
// }
|
||||
// if (filter_var($request->phoneOrEmail, FILTER_VALIDATE_EMAIL)) {
|
||||
// User::query()->find($user->id)->update([
|
||||
// 'email' => $request->phoneOrEmail,
|
||||
// 'otp' => $token,
|
||||
// 'otp_created_at' => now()
|
||||
// ]);
|
||||
// } else {
|
||||
// User::query()->find($user->id)->update([
|
||||
// 'phone' => $request->phoneOrEmail,
|
||||
// 'otp' => $token,
|
||||
// 'otp_created_at' => now()
|
||||
// ]);
|
||||
// }
|
||||
|
||||
// // TODO Send the OTP
|
||||
// if (filter_var($request->phoneOrEmail, FILTER_VALIDATE_EMAIL)) {
|
||||
// // Send Email
|
||||
// //send to alarm
|
||||
// if($request->phoneOrEmail != 'manager+one@gmail.com' && $request->phoneOrEmail != 'manager+two@gmail.com')
|
||||
// {
|
||||
// $nameTo = 'User';
|
||||
// $dataEmail = [
|
||||
// 'email' => $request->phoneOrEmail,
|
||||
// 'name' => $nameTo,
|
||||
// 'subject' => 'OTP Login Client Portal Tanggal '. date('Y-m-d H:i:s'),
|
||||
// 'body' => View::make('email/forgot_password', ['token' => $token])->render(),
|
||||
// ];
|
||||
// Helper::sendEmail($dataEmail);
|
||||
// }
|
||||
// } else {
|
||||
// // Send Whatsapp
|
||||
// }
|
||||
|
||||
// return Helper::responseJson(message: 'OTP Terkirim');
|
||||
|
||||
|
||||
if (!Hash::check($request->password, $user->password)) {
|
||||
return response(['message' => 'Password Salah'], 403);
|
||||
if (filter_var($request->phoneOrEmail, FILTER_VALIDATE_EMAIL)) {
|
||||
User::query()->find($user->id)->update([
|
||||
'email' => $request->phoneOrEmail,
|
||||
'otp' => 4444, //rand(1000, 9999),
|
||||
'otp_created_at' => now()
|
||||
]);
|
||||
} else {
|
||||
User::query()->find($user->id)->update([
|
||||
'phone' => $request->phoneOrEmail,
|
||||
'otp' => 4444,//rand(1000, 9999),
|
||||
'otp_created_at' => now()
|
||||
]);
|
||||
}
|
||||
|
||||
return Helper::responseJson(
|
||||
data: [
|
||||
'token' => $user->createToken('app')->plainTextToken,
|
||||
'user' => $user,
|
||||
],
|
||||
message: 'Selamat Datang'
|
||||
);
|
||||
// TODO Send the OTP
|
||||
if (filter_var($request->phoneOrEmail, FILTER_VALIDATE_EMAIL)) {
|
||||
// Send Email
|
||||
} else {
|
||||
// Send Whatsapp
|
||||
}
|
||||
|
||||
return Helper::responseJson(message: 'OTP Terkirim');
|
||||
}
|
||||
|
||||
public function validateOtp(Request $request)
|
||||
|
||||
@@ -1,286 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Http\Controllers\Api;
|
||||
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class BillingSummaryController extends Controller
|
||||
{
|
||||
public function index(Request $request, $corporate_id)
|
||||
{
|
||||
$year = $request->year ?? now()->year;
|
||||
$status = $request->status;
|
||||
$bn = $request->bn;
|
||||
$payorId = $request->payorId;
|
||||
$service = $request->service;
|
||||
$billing = $request->billing;
|
||||
$search = $request->search;
|
||||
|
||||
$rows = DB::table('invoice_payments')
|
||||
->join('invoice_payment_details', 'invoice_payment_details.invoice_payment_id', '=', 'invoice_payments.id')
|
||||
->join('claim_requests', 'claim_requests.id', '=', 'invoice_payment_details.claim_request_id')
|
||||
->join('request_logs', 'request_logs.id', '=', 'claim_requests.request_log_id')
|
||||
->join('corporate_employees', 'corporate_employees.member_id', '=', 'request_logs.member_id')
|
||||
->join('organizations', 'organizations.id', '=', 'request_logs.organization_id')
|
||||
->leftJoin('members', 'members.id', '=', 'request_logs.member_id')
|
||||
->whereYear('invoice_payments.created_at', $year)
|
||||
->where('corporate_employees.corporate_id', '=', $corporate_id)
|
||||
// FILTERS
|
||||
->when($status, fn ($q) =>
|
||||
$q->where('invoice_payments.status', $status)
|
||||
)
|
||||
->when($bn, fn ($q) =>
|
||||
$q->where('members.member_id', $bn)
|
||||
)
|
||||
->when($payorId, fn ($q) =>
|
||||
$q->where('members.payor_id', $payorId)
|
||||
)
|
||||
->when($service, fn ($q) =>
|
||||
$q->where('claim_requests.service_code', $service)
|
||||
)
|
||||
->when($billing, fn ($q) =>
|
||||
$q->where('invoice_payments.invoice_number', $billing)
|
||||
)
|
||||
|
||||
// 🔍 SEARCH PROVIDER (LIKE)
|
||||
->when($search, fn ($q) =>
|
||||
$q->where('organizations.name', 'like', '%' . $search . '%')
|
||||
)
|
||||
|
||||
->selectRaw("
|
||||
MONTH(invoice_payments.created_at) as month_number,
|
||||
organizations.name as provider,
|
||||
SUM(request_logs.nominal) as total
|
||||
")
|
||||
->groupBy('month_number', 'organizations.name')
|
||||
->orderBy('month_number')
|
||||
->get();
|
||||
|
||||
return response()->json(
|
||||
$this->formatMonthly($rows)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
protected function formatMonthly($rows): array
|
||||
{
|
||||
$months = [
|
||||
1 => 'Januari', 2 => 'Februari', 3 => 'Maret',
|
||||
4 => 'April', 5 => 'Mei', 6 => 'Juni',
|
||||
7 => 'Juli', 8 => 'Agustus', 9 => 'September',
|
||||
10 => 'Oktober', 11 => 'November', 12 => 'Desember',
|
||||
];
|
||||
|
||||
return collect($rows)
|
||||
->groupBy('month_number')
|
||||
->map(function ($items, $monthNumber) use ($months) {
|
||||
return [
|
||||
'month' => $months[$monthNumber],
|
||||
'total' => $items->sum('total'),
|
||||
'items' => $items->map(fn ($item) => [
|
||||
'provider' => $item->provider,
|
||||
'total' => (float) $item->total,
|
||||
])->values(),
|
||||
];
|
||||
})
|
||||
->values()
|
||||
->toArray();
|
||||
}
|
||||
|
||||
public function providerSummary(Request $request, $corporate_id)
|
||||
{
|
||||
$year = $request->year ?? now()->year;
|
||||
$status = $request->status;
|
||||
$bn = $request->bn;
|
||||
$payorId = $request->payorId;
|
||||
$service = $request->service;
|
||||
$billing = $request->billing;
|
||||
$search = $request->search;
|
||||
|
||||
$query = DB::table('invoice_payments')
|
||||
->join('invoice_payment_details', 'invoice_payment_details.invoice_payment_id', '=', 'invoice_payments.id')
|
||||
->join('claim_requests', 'claim_requests.id', '=', 'invoice_payment_details.claim_request_id')
|
||||
->join('request_logs', 'request_logs.id', '=', 'claim_requests.request_log_id')
|
||||
->join('corporate_employees', 'corporate_employees.member_id', '=', 'request_logs.member_id')
|
||||
->join('organizations', 'organizations.id', '=', 'request_logs.organization_id')
|
||||
->leftJoin('members', 'members.id', '=', 'request_logs.member_id')
|
||||
->whereYear('invoice_payments.created_at', $year)
|
||||
->where('corporate_employees.corporate_id', '=', $corporate_id)
|
||||
// FILTER
|
||||
->when($status, fn ($q) =>
|
||||
$q->where('invoice_payments.status', $status)
|
||||
)
|
||||
->when($bn, fn ($q) =>
|
||||
$q->where('members.member_id', $bn)
|
||||
)
|
||||
->when($payorId, fn ($q) =>
|
||||
$q->where('members.payor_id', $payorId)
|
||||
)
|
||||
->when($service, fn ($q) =>
|
||||
$q->where('claim_requests.service_code', $service)
|
||||
)
|
||||
->when($billing, fn ($q) =>
|
||||
$q->where('invoice_payments.invoice_number', $billing)
|
||||
)
|
||||
->when($search, fn ($q) =>
|
||||
$q->where('organizations.name', 'like', '%' . $search . '%')
|
||||
);
|
||||
|
||||
$items = $query
|
||||
->selectRaw("
|
||||
organizations.name as provider,
|
||||
SUM(request_logs.nominal) as total
|
||||
")
|
||||
->groupBy('organizations.name')
|
||||
->orderByDesc('total')
|
||||
->get()
|
||||
->map(fn ($row) => [
|
||||
'provider' => $row->provider,
|
||||
'total' => (float) $row->total,
|
||||
]);
|
||||
|
||||
return response()->json([
|
||||
'total' => $items->sum('total'),
|
||||
'items' => $items,
|
||||
]);
|
||||
}
|
||||
|
||||
public function topDiagnosis(Request $request, $corporate_id)
|
||||
{
|
||||
$year = $request->year ?? now()->year;
|
||||
$status = $request->status;
|
||||
$bn = $request->bn;
|
||||
$payorId = $request->payorId;
|
||||
$service = $request->service;
|
||||
$billing = $request->billing;
|
||||
$search = $request->search;
|
||||
|
||||
$rows = DB::table('invoice_payments')
|
||||
->join('invoice_payment_details', 'invoice_payment_details.invoice_payment_id', '=', 'invoice_payments.id')
|
||||
->join('claim_requests', 'claim_requests.id', '=', 'invoice_payment_details.claim_request_id')
|
||||
->join('request_logs', 'request_logs.id', '=', 'claim_requests.request_log_id')
|
||||
->join('corporate_employees', 'corporate_employees.member_id', '=', 'request_logs.member_id')
|
||||
// 🔥 ICD JOIN
|
||||
->leftJoin(
|
||||
'icd',
|
||||
DB::raw("icd.code"),
|
||||
'=',
|
||||
DB::raw("SUBSTRING_INDEX(request_logs.diagnosis, ',', 1)")
|
||||
)
|
||||
|
||||
->leftJoin('members', 'members.id', '=', 'request_logs.member_id')
|
||||
->where('corporate_employees.corporate_id', '=', $corporate_id)
|
||||
->whereYear('invoice_payments.created_at', $year)
|
||||
|
||||
// FILTER
|
||||
->when($status, fn ($q) =>
|
||||
$q->where('invoice_payments.status', $status)
|
||||
)
|
||||
->when($bn, fn ($q) =>
|
||||
$q->where('members.member_id', $bn)
|
||||
)
|
||||
->when($payorId, fn ($q) =>
|
||||
$q->where('members.payor_id', $payorId)
|
||||
)
|
||||
->when($service, fn ($q) =>
|
||||
$q->where('claim_requests.service_code', $service)
|
||||
)
|
||||
->when($billing, fn ($q) =>
|
||||
$q->where('invoice_payments.invoice_number', $billing)
|
||||
)
|
||||
|
||||
->selectRaw("
|
||||
SUBSTRING_INDEX(request_logs.diagnosis, ',', 1) as code_diagnosis,
|
||||
icd.name as diagnosis,
|
||||
COUNT(request_logs.id) as total_case,
|
||||
SUM(request_logs.nominal) as total_billing
|
||||
")
|
||||
->groupBy('code_diagnosis', 'icd.name')
|
||||
->orderByDesc('total_case')
|
||||
->limit(10)
|
||||
->get();
|
||||
|
||||
return response()->json(
|
||||
$rows->map(fn ($row) => [
|
||||
'code' => $row->code_diagnosis,
|
||||
'diagnosis' => $row->diagnosis ?? '-',
|
||||
'total_case' => (int) $row->total_case,
|
||||
'total_billing' => (float) $row->total_billing,
|
||||
])
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
// public function index()
|
||||
// {
|
||||
// return view('client::index');
|
||||
// }
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view('client::create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
* @param Request $request
|
||||
* @return Renderable
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the specified resource.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
return view('client::show');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function edit($id)
|
||||
{
|
||||
return view('client::edit');
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
* @param Request $request
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
506
Modules/Client/Http/Controllers/Api/ClaimController.php
Executable file → Normal file
506
Modules/Client/Http/Controllers/Api/ClaimController.php
Executable file → Normal file
@@ -2,26 +2,13 @@
|
||||
|
||||
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;
|
||||
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
|
||||
use Box\Spout\Writer\Common\Creator\Style\StyleBuilder;
|
||||
use Box\Spout\Common\Entity\Style\CellAlignment;
|
||||
use Box\Spout\Common\Entity\Style\Color;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class ClaimController extends Controller
|
||||
{
|
||||
@@ -33,7 +20,7 @@ class ClaimController extends Controller
|
||||
{
|
||||
$claims = $this->claimService->getCountClaimRequestPerStatus($corporate_id);
|
||||
|
||||
// dd($claims);
|
||||
dd($claims);
|
||||
|
||||
return Helper::responseJson([
|
||||
'count_requested' => 0,
|
||||
@@ -146,495 +133,4 @@ 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
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
public function exportAlrmCenter($corporate_id, $start, $end)
|
||||
{
|
||||
$writer = WriterEntityFactory::createXLSXWriter();
|
||||
$writer->openToFile(public_path('files/Report-Data-Alarm-Center-'.$start.'-'.$end.'.xlsx'));
|
||||
$header = [
|
||||
'No',
|
||||
'Code',
|
||||
'Date Submission',
|
||||
'Date Admission',
|
||||
'Date Discharge',
|
||||
'Provider',
|
||||
'Member ID (BN)',
|
||||
'Member Name',
|
||||
'Member Name Principal',
|
||||
'Plan Code',
|
||||
'Service',
|
||||
'Payor ID',
|
||||
'Corporate name',
|
||||
'Policy Number',
|
||||
'Total Billing',
|
||||
'Benefit Code',
|
||||
'Benefit Desc',
|
||||
'Amt Incurred',
|
||||
'Amt Approved',
|
||||
'Amt Not Approved',
|
||||
'Excess Paid',
|
||||
'Diagnosis',
|
||||
'Keterangan',
|
||||
'Catatan',
|
||||
'Invoice No',
|
||||
'Billing No',
|
||||
'Type Of Member',
|
||||
'Deskripsi Diagnosis'
|
||||
];
|
||||
$style = (new StyleBuilder())
|
||||
->setFontBold()
|
||||
// ->setFontSize(15)
|
||||
// ->setFontColor(Color::BLUE)
|
||||
// ->setShouldWrapText()
|
||||
->setCellAlignment(CellAlignment::LEFT)
|
||||
// ->setBackgroundColor(Color::YELLOW)
|
||||
->build();
|
||||
|
||||
$headerRow = WriterEntityFactory::createRowFromArray($header, $style);
|
||||
$writer->addRow($headerRow);
|
||||
|
||||
$data = DB::table('request_logs')
|
||||
->leftJoin('members', 'members.id', '=', 'request_logs.member_id')
|
||||
->leftJoin('corporate_employees','corporate_employees.member_id','=','members.id')
|
||||
->where('corporate_employees.corporate_id', '=', $corporate_id)
|
||||
// ->where('request_logs.status_final_log', '=', 'approved')
|
||||
->where('request_logs.deleted_at', '=', null)
|
||||
->when($start != 'all' && $end != 'all', function ($query) use ($start, $end) {
|
||||
$query->where('request_logs.submission_date', '>=',$start. ' 00:00:00')
|
||||
->where('request_logs.submission_date', '<=',$end. ' 23:59:59');
|
||||
})
|
||||
->select(
|
||||
DB::raw('1 AS no'),
|
||||
'request_logs.submission_date',
|
||||
'request_logs.created_at',
|
||||
'request_logs.discharge_date',
|
||||
'request_logs.organization_id',
|
||||
'request_logs.id',
|
||||
'request_logs.member_id',
|
||||
'request_logs.service_code',
|
||||
'request_logs.code',
|
||||
'request_logs.diagnosis',
|
||||
'request_logs.keterangan',
|
||||
'request_logs.catatan',
|
||||
DB::raw('
|
||||
(Select SUM(request_log_benefits.amount_approved) as tot_bill FROM request_log_benefits
|
||||
WHERE request_log_benefits.request_log_id = request_logs.id AND request_log_benefits.deleted_at IS NULL LIMIT 1) AS tot_bill
|
||||
'),
|
||||
'request_logs.invoice_no',
|
||||
'request_logs.billing_no',
|
||||
'request_logs.type_of_member',
|
||||
)
|
||||
->groupBy(
|
||||
'request_logs.submission_date',
|
||||
'request_logs.created_at',
|
||||
'request_logs.discharge_date',
|
||||
'request_logs.organization_id',
|
||||
'request_logs.id',
|
||||
'request_logs.member_id',
|
||||
'request_logs.service_code',
|
||||
'request_logs.code',
|
||||
'request_logs.diagnosis',
|
||||
'request_logs.keterangan',
|
||||
'request_logs.catatan',
|
||||
'tot_bill'
|
||||
)
|
||||
->orderBy('request_logs.submission_date', 'desc')
|
||||
->get();
|
||||
|
||||
if (isset($data) && count($data) > 0)
|
||||
{
|
||||
$dataRow = array();
|
||||
$no = 0;
|
||||
foreach ($data as $item)
|
||||
{
|
||||
//Provider
|
||||
$dataRumahSakit = DB::table('organizations')
|
||||
->leftJoin('addresses', 'addresses.addressable_id', '=', 'organizations.id')
|
||||
->where('organizations.id', '=', $item->organization_id)
|
||||
->where('addresses.addressable_type', '=', 'App\Models\Organization')
|
||||
->select('organizations.name AS nama_rumahsakit', 'addresses.text AS alamat_rumahsakit', 'organizations.corporate_id_partner')
|
||||
->first();
|
||||
//Data Member
|
||||
$dataMember = DB::table('members')
|
||||
->where('members.id', '=', $item->member_id)
|
||||
->select(
|
||||
'members.nric',
|
||||
'members.id',
|
||||
'members.principal_id',
|
||||
'members.name',
|
||||
'members.birth_date',
|
||||
'members.member_id',
|
||||
'members.gender',
|
||||
DB::raw('
|
||||
(Select persons.nik FROM persons WHERE persons.id = members.person_id LIMIT 1) AS nik
|
||||
'),
|
||||
// DB::raw('
|
||||
// "LinkSehat" AS penjamin
|
||||
// '),
|
||||
DB::raw('
|
||||
(Select corporates.name FROM corporates
|
||||
LEFT JOIN corporate_employees ON corporate_employees.corporate_id = corporates.id
|
||||
WHERE corporate_employees.member_id = members.id LIMIT 1) AS nama_perusahaan
|
||||
'),
|
||||
DB::raw('
|
||||
(Select corporates.id FROM corporates
|
||||
LEFT JOIN corporate_employees ON corporate_employees.corporate_id = corporates.id
|
||||
WHERE corporate_employees.member_id = members.id LIMIT 1) AS id_perusahaan
|
||||
'),
|
||||
DB::raw('
|
||||
(Select corporates.code FROM corporates
|
||||
LEFT JOIN corporate_employees ON corporate_employees.corporate_id = corporates.id
|
||||
WHERE corporate_employees.member_id = members.id LIMIT 1) AS code_perusahaan
|
||||
'),
|
||||
DB::raw('
|
||||
(Select services.name FROM services
|
||||
WHERE services.code = "'.$item->service_code.'" LIMIT 1) AS jenis_perawatan
|
||||
'),
|
||||
DB::raw('
|
||||
(Select member_policies.policy_id FROM member_policies WHERE member_policies.member_id = members.member_id LIMIT 1) AS no_polis
|
||||
'),
|
||||
DB::raw('
|
||||
(Select member_policies.status FROM member_policies WHERE member_policies.member_id = members.member_id LIMIT 1) AS status_polis
|
||||
'),
|
||||
DB::raw('
|
||||
(Select plans.code FROM member_plans
|
||||
LEFT JOIN plans ON plans.id = member_plans.plan_id
|
||||
WHERE member_plans.member_id = members.id AND plans.service_code = "'.$item->service_code.'" LIMIT 1) AS code_plan
|
||||
'),
|
||||
DB::raw('
|
||||
(Select plans.limit_rules FROM member_plans
|
||||
LEFT JOIN plans ON plans.id = member_plans.plan_id
|
||||
WHERE member_plans.member_id = members.id LIMIT 1) AS limit_rules
|
||||
'),
|
||||
DB::raw('
|
||||
"IDR" AS mata_uang
|
||||
'),
|
||||
'members.members_effective_date AS mulai',
|
||||
'members.members_expire_date AS akhir'
|
||||
)
|
||||
->first();
|
||||
|
||||
//get penjamin
|
||||
$penjamin = 'LinkSehat';
|
||||
if(!empty($dataRumahSakit->corporate_id_partner))
|
||||
{
|
||||
$corporate_id_partners = explode(',', $dataRumahSakit->corporate_id_partner);
|
||||
$valueToCheck = $dataMember->id_perusahaan;
|
||||
|
||||
if (in_array($valueToCheck, $corporate_id_partners)) {
|
||||
$penjamin = $dataMember->nama_perusahaan;
|
||||
}
|
||||
}
|
||||
|
||||
//Nama Karyawan
|
||||
$data['namaKaryawan'] = '';
|
||||
if($dataMember->principal_id)
|
||||
{
|
||||
$dataNamaKaryawan = DB::table('members')
|
||||
->where('members.principal_id', '=', $dataMember->principal_id)
|
||||
->select('members.name')
|
||||
->first();
|
||||
$data['namaKaryawan'] = $dataNamaKaryawan->name;
|
||||
}
|
||||
else{
|
||||
$data['namaKaryawan'] = $dataMember->name;
|
||||
}
|
||||
|
||||
//Data Benefit
|
||||
$dataClaimLog = DB::table('request_log_benefits')
|
||||
->where('request_log_benefits.request_log_id', '=', $item->id)
|
||||
->where('request_log_benefits.deleted_at', null)
|
||||
->select(
|
||||
'*',
|
||||
DB::raw('
|
||||
(Select benefits.description FROM benefits
|
||||
WHERE benefits.id = request_log_benefits.benefit_id LIMIT 1) AS benfit
|
||||
'),
|
||||
DB::raw('
|
||||
(Select benefits.code FROM benefits
|
||||
WHERE benefits.id = request_log_benefits.benefit_id LIMIT 1) AS code
|
||||
')
|
||||
)
|
||||
->get();
|
||||
|
||||
// Description Diagnosi
|
||||
$diagnosis = explode(",", $item->diagnosis);
|
||||
$descriptionDiagnosis = '-';
|
||||
if ($diagnosis){
|
||||
$dataDiagnosises = DB::table('icd')->whereIn('code',$diagnosis)->get();
|
||||
$descriptionDiagnosis = "";
|
||||
foreach($dataDiagnosises as $dataDiagnosis){
|
||||
$descriptionDiagnosis .= $dataDiagnosis->name ." ";
|
||||
}
|
||||
}
|
||||
$check_first_id = 0;
|
||||
if($check_first_id != $item->id)
|
||||
{
|
||||
$no += $item->no;
|
||||
}
|
||||
|
||||
$total_billing = 0;
|
||||
$lastIndex = count($dataClaimLog) - 1;
|
||||
$firtIndex = 0;
|
||||
if (isset($dataClaimLog) && count($dataClaimLog) > 0)
|
||||
{
|
||||
foreach ($dataClaimLog as $index => $item_benefit)
|
||||
{
|
||||
$total_billing += !empty($item_benefit->amount_approved) ? $item_benefit->amount_approved : 0;
|
||||
$rowData = [
|
||||
$check_first_id != $item->id ? $no : $no,
|
||||
!empty($item->code) ? $item->code : '',
|
||||
!empty($item->created_at) ? $item->created_at : '',
|
||||
!empty($item->submission_date) ? $item->submission_date : '',
|
||||
!empty($item->discharge_date) ? $item->discharge_date : '',
|
||||
!empty($dataRumahSakit->nama_rumahsakit) ? $dataRumahSakit->nama_rumahsakit : '',
|
||||
!empty($dataMember->member_id) ? $dataMember->member_id : '',
|
||||
!empty($dataMember->name) ? $dataMember->name : '',
|
||||
$data['namaKaryawan'],
|
||||
($firtIndex == $index ? (!empty($dataMember->code_plan) ? $dataMember->code_plan : '') : ''),
|
||||
!empty($dataMember->jenis_perawatan) ? $dataMember->jenis_perawatan : '',
|
||||
$penjamin,
|
||||
!empty($dataMember->nama_perusahaan) ? $dataMember->nama_perusahaan : '',
|
||||
!empty($dataMember->no_polis) ? $dataMember->no_polis : '',
|
||||
($firtIndex == $index ? $item->tot_bill : ''),
|
||||
!empty($item_benefit->code) ? $item_benefit->code : '',
|
||||
!empty($item_benefit->benfit) ? $item_benefit->benfit : '',
|
||||
!empty($item_benefit->amount_incurred) ? $item_benefit->amount_incurred : '',
|
||||
!empty($item_benefit->amount_approved) ? $item_benefit->amount_approved : '',
|
||||
!empty($item_benefit->amount_not_approved) ? $item_benefit->amount_not_approved : '',
|
||||
!empty($item_benefit->excess_paid) ? $item_benefit->excess_paid : '',
|
||||
!empty($item->diagnosis) ? $item->diagnosis : '',
|
||||
!empty($item->keterangan) ? $item->keterangan : '',
|
||||
!empty($item->catatan) ? $item->catatan : '',
|
||||
!empty($item->invoice_no) ? $item->invoice_no : '',
|
||||
!empty($item->billing_no) ? $item->billing_no : '',
|
||||
!empty($item->type_of_member) ? $item->type_of_member : '',
|
||||
$descriptionDiagnosis,
|
||||
|
||||
];
|
||||
array_push($dataRow,$rowData);
|
||||
|
||||
$check_first_id = $item->id;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$rowData = [
|
||||
$check_first_id != $item->id ? $no : '',
|
||||
!empty($item->code) ? $item->code : '',
|
||||
!empty($item->created_at) ? $item->created_at : '',
|
||||
!empty($item->submission_date) ? $item->submission_date : '',
|
||||
!empty($item->discharge_date) ? $item->discharge_date : '',
|
||||
!empty($dataRumahSakit->nama_rumahsakit) ? $dataRumahSakit->nama_rumahsakit : '',
|
||||
!empty($dataMember->member_id) ? $dataMember->member_id : '',
|
||||
!empty($dataMember->name) ? $dataMember->name : '',
|
||||
$data['namaKaryawan'],
|
||||
!empty($dataMember->code_plan) ? $dataMember->code_plan : '',
|
||||
!empty($dataMember->jenis_perawatan) ? $dataMember->jenis_perawatan : '',
|
||||
$penjamin,
|
||||
!empty($dataMember->nama_perusahaan) ? $dataMember->nama_perusahaan : '',
|
||||
!empty($dataMember->no_polis) ? $dataMember->no_polis : '',
|
||||
'0',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
!empty($item->invoice_no) ? $item->invoice_no : '',
|
||||
!empty($item->billing_no) ? $item->billing_no : '',
|
||||
!empty($item->type_of_member) ? $item->type_of_member : '',
|
||||
$descriptionDiagnosis,
|
||||
|
||||
];
|
||||
array_push($dataRow,$rowData);
|
||||
|
||||
}
|
||||
}
|
||||
$style = (new StyleBuilder())
|
||||
//->setFontBold()
|
||||
// ->setFontSize(15)
|
||||
// ->setFontColor(Color::BLUE)
|
||||
// ->setShouldWrapText()
|
||||
->setCellAlignment(CellAlignment::LEFT)
|
||||
// ->setBackgroundColor(Color::YELLOW)
|
||||
->build();
|
||||
$grand_total_billing = 0;
|
||||
foreach ($dataRow as $rowData) {
|
||||
if (is_numeric($rowData[14])) {
|
||||
// Jumlahkan nilai angka ke total
|
||||
$grand_total_billing += $rowData[14];
|
||||
}
|
||||
$row = WriterEntityFactory::createRowFromArray($rowData, $style);
|
||||
$writer->addRow($row);
|
||||
}
|
||||
//Footer
|
||||
$footer = [
|
||||
'Total',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
$grand_total_billing,
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
''
|
||||
];
|
||||
$style = (new StyleBuilder())
|
||||
->setFontBold()
|
||||
// ->setFontSize(15)
|
||||
// ->setFontColor(Color::BLUE)
|
||||
// ->setShouldWrapText()
|
||||
->setCellAlignment(CellAlignment::LEFT)
|
||||
// ->setBackgroundColor(Color::YELLOW)
|
||||
->build();
|
||||
|
||||
$footerRow = WriterEntityFactory::createRowFromArray($footer, $style);
|
||||
$writer->addRow($footerRow);
|
||||
}
|
||||
$writer->close();
|
||||
|
||||
return Helper::responseJson([
|
||||
'file_name' => 'Report-Data-Alarm-Center-'. $start.'-'.$end,
|
||||
"file_url" => url('files/Report-Data-Alarm-Center-'. $start.'-'.$end.'.xlsx')
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
330
Modules/Client/Http/Controllers/Api/ClaimReportController.php
Executable file → Normal file
330
Modules/Client/Http/Controllers/Api/ClaimReportController.php
Executable file → Normal file
@@ -2,312 +2,62 @@
|
||||
|
||||
namespace Modules\Client\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\ClaimRequest;
|
||||
use Modules\Client\Transformers\ClaimReport\ShowResources;
|
||||
use Illuminate\Support\Facades\Crypt;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Models\File;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
|
||||
class ClaimReportController extends Controller
|
||||
{
|
||||
public function claimStatus($corporateId)
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$requesteds = ClaimRequest::query()
|
||||
->whereHas('member', function ($query) use ($corporateId) {
|
||||
$query->whereHas('employeds', function ($corporateEmployee) use ($corporateId) {
|
||||
$corporateEmployee->where('corporate_id', $corporateId);
|
||||
});
|
||||
})
|
||||
->where('status', 'requested')
|
||||
->get();
|
||||
$approveds = ClaimRequest::query()
|
||||
->whereHas('member', function ($query) use ($corporateId) {
|
||||
$query->whereHas('employeds', function ($corporateEmployee) use ($corporateId) {
|
||||
$corporateEmployee->where('corporate_id', $corporateId);
|
||||
});
|
||||
})
|
||||
->whereHas('claim', fn ($query) => $query->where('status', 'approved'))
|
||||
->where('status', 'approved')
|
||||
->get();
|
||||
|
||||
$rejecteds = ClaimRequest::query()
|
||||
->whereHas('member', function ($query) use ($corporateId) {
|
||||
$query->whereHas('employeds', function ($corporateEmployee) use ($corporateId) {
|
||||
$corporateEmployee->where('corporate_id', $corporateId);
|
||||
});
|
||||
})
|
||||
->whereHas('claim', fn ($query) => $query->where('status', 'declined'))
|
||||
->where('status', 'approved')
|
||||
->get();
|
||||
|
||||
$disbrusments = ClaimRequest::query()
|
||||
->whereHas('member', function ($query) use ($corporateId) {
|
||||
$query->whereHas('employeds', function ($corporateEmployee) use ($corporateId) {
|
||||
$corporateEmployee->where('corporate_id', $corporateId);
|
||||
});
|
||||
})
|
||||
->whereHas('claim', fn ($query) => $query->where('status', 'disbrusmented'))
|
||||
->where('status', 'approved')
|
||||
->get();
|
||||
|
||||
return Helper::responseJson([
|
||||
'requesteds' => count($requesteds),
|
||||
'approveds' => count($approveds),
|
||||
'rejecteds' => count($rejecteds),
|
||||
'disbrusments' => count($disbrusments)
|
||||
]);
|
||||
}
|
||||
|
||||
public function claimDetail($corporate_id, $claimRequestId)
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$claimRequestId = Crypt::decrypt($claimRequestId);
|
||||
|
||||
$status = DB::table('claim_requests')
|
||||
->leftJoin('claims', 'claim_requests.id', '=', 'claims.claim_request_id')
|
||||
->leftJoin('members', 'claim_requests.member_id', '=', 'members.id')
|
||||
->leftJoin('corporate_employees', 'members.id', '=', 'corporate_employees.member_id')
|
||||
->leftJoin('corporate_divisions', 'corporate_employees.division_id', '=', 'corporate_divisions.id')
|
||||
->where('corporate_employees.corporate_id', '=', $corporate_id)
|
||||
->where('claim_requests.id', '=', $claimRequestId)
|
||||
->select(
|
||||
'claim_requests.submission_date',
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN claim_requests.status = "requested" THEN "requested"
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "approved" THEN "approved"
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "declined" THEN "declined"
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "disbrusmented" THEN "disbrusmented"
|
||||
/*WHEN claim_requests.status = "approved" AND claims.status = "received" THEN "pending"*/
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "received" THEN "reviewed"
|
||||
ELSE ""
|
||||
END AS status
|
||||
')
|
||||
)
|
||||
->first();
|
||||
$results['status'] = $status;
|
||||
$timeline = DB::table('claim_logs')
|
||||
->where('claim_logs.claim_request_id', '=', $claimRequestId)
|
||||
->select(
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN claim_logs.status = "requested" THEN "Request"
|
||||
WHEN claim_logs.status = "reviewed" THEN "Review"
|
||||
WHEN claim_logs.status = "approved" THEN "Approval"
|
||||
WHEN claim_logs.status = "declined" THEN "Decline"
|
||||
ELSE "-"
|
||||
END AS txt_status
|
||||
'),
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN claim_logs.status = "requested" THEN "#159C9C"
|
||||
WHEN claim_logs.status = "reviewed" THEN "#0C53B7"
|
||||
WHEN claim_logs.status = "approved" THEN "#229A16"
|
||||
WHEN claim_logs.status = "declined" THEN "#FF4842"
|
||||
ELSE "-"
|
||||
END AS txt_status_color
|
||||
'),
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN claim_logs.status = "requested" THEN "#00AB5529"
|
||||
WHEN claim_logs.status = "reviewed" THEN "#1890FF29"
|
||||
WHEN claim_logs.status = "approved" THEN "#54D62C29"
|
||||
WHEN claim_logs.status = "declined" THEN "#FF48427A"
|
||||
ELSE "-"
|
||||
END AS txt_status_backgroundColor
|
||||
'),
|
||||
'claim_logs.date',
|
||||
'claim_logs.description',
|
||||
'claim_logs.status'
|
||||
)
|
||||
->orderBy('claim_logs.id', 'desc')
|
||||
->get();
|
||||
$results['timeline'] = $timeline;
|
||||
$request_files = DB::table('claim_request_files')
|
||||
->where('claim_request_files.claim_request_id', '=', $claimRequestId)
|
||||
->select(
|
||||
'claim_request_files.*',
|
||||
DB::raw('(SELECT files.fileable_id FROM files WHERE files.fileable_id = claim_request_files.claim_request_id AND files.type = claim_request_files.type LIMIT 1) AS check_files'),
|
||||
)
|
||||
->get();
|
||||
$results['request_files'] = $request_files;
|
||||
|
||||
// Jika path kosong, kembalikan null
|
||||
if (!$row->path) {
|
||||
return null;
|
||||
}
|
||||
// $documents = DB::table('files')
|
||||
// ->where('fileable_type', 'App\Models\ClaimRequest')
|
||||
// ->where('fileable_id', $claimRequestId)
|
||||
// ->select('original_name', \DB::raw("CONCAT('" . env('APP_URL') . "/storage/', path) as path"), 'type')
|
||||
// ->orderBy('id', 'desc')
|
||||
// ->get();
|
||||
|
||||
$documents = DB::table('files')
|
||||
->where('fileable_type', 'App\Models\ClaimRequest')
|
||||
->where('fileable_id', $claimRequestId)
|
||||
->select('id', 'original_name', 'path', 'source', 'type')
|
||||
->orderBy('id', 'desc')
|
||||
->get()
|
||||
->map(function ($row) {
|
||||
// default null kalau tidak ada path
|
||||
if (!$row->path) {
|
||||
$row->path = null; // atau bisa $row->url = null
|
||||
return $row;
|
||||
}
|
||||
|
||||
if ($row->source === 's3') {
|
||||
try {
|
||||
$row->path = Storage::disk('s3')->temporaryUrl(
|
||||
$row->path,
|
||||
now()->addMinutes(60)
|
||||
);
|
||||
} catch (\Exception $e) {
|
||||
$row->path = Storage::disk('s3')->url($row->path);
|
||||
}
|
||||
} else {
|
||||
$row->path = Storage::disk('public')->url($row->path);
|
||||
}
|
||||
|
||||
return $row;
|
||||
});
|
||||
$results['documents'] = $documents;
|
||||
|
||||
return Helper::responseJson($results);
|
||||
//
|
||||
}
|
||||
|
||||
public function requestFiles(Request $request, $corporate_id, $claim_id)
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
$claim_id = Crypt::decrypt($claim_id);
|
||||
if ($request->hasFile('fileDiagnosis')) {
|
||||
foreach ($request->fileDiagnosis as $file) {
|
||||
$fileData = File::storeFile('claim-diagnosis', $claim_id, $file);
|
||||
File::updateOrCreate([
|
||||
'fileable_type'=>'App\Models\ClaimRequest',
|
||||
'fileable_id' => $claim_id,
|
||||
'type' => 'claim-diagnosis',
|
||||
'name' => $fileData['name'],
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $fileData['path'],
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
if ($request->hasFile('fileKondisis')) {
|
||||
foreach ($request->fileKondisis as $file) {
|
||||
$fileData = File::storeFile('claim-kondisi', $claim_id, $file);
|
||||
File::updateOrCreate([
|
||||
'fileable_type'=>'App\Models\ClaimRequest',
|
||||
'fileable_id' => $claim_id,
|
||||
'type' => 'claim-kondisi',
|
||||
'name' => $fileData['name'],
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $fileData['path'],
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
if ($request->hasFile('fileResults')) {
|
||||
foreach ($request->fileResults as $file) {
|
||||
$pathFile = File::storeFile('claim-result', $claim_id, $file);
|
||||
File::updateOrCreate([
|
||||
'fileable_type'=>'App\Models\ClaimRequest',
|
||||
'fileable_id' => $claim_id,
|
||||
'type' => 'claim-result',
|
||||
'name' => $fileData['name'],
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $fileData['path'],
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
return Helper::responseJson(data: $request->toArray(), message: 'Invoice Success Uploaded');
|
||||
//
|
||||
}
|
||||
|
||||
public function claimDetailHistory($corporate_id, $claimRequestId)
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$claimRequestId = Crypt::decrypt($claimRequestId);
|
||||
|
||||
$member = DB::table('claim_requests')
|
||||
->leftJoin('claims', 'claim_requests.id', '=', 'claims.claim_request_id')
|
||||
->leftJoin('members', 'claim_requests.member_id', '=', 'members.id')
|
||||
->leftJoin('corporate_employees', 'members.id', '=', 'corporate_employees.member_id')
|
||||
->leftJoin('corporate_divisions', 'corporate_employees.division_id', '=', 'corporate_divisions.id')
|
||||
->where('corporate_employees.corporate_id', '=', $corporate_id)
|
||||
->where('claim_requests.id', '=', $claimRequestId)
|
||||
->select(
|
||||
'claim_requests.code','members.member_id', 'members.name'
|
||||
)
|
||||
->first();
|
||||
$results['member'] = $member;
|
||||
$claim_item = DB::table('claim_items')
|
||||
->leftJoin('claims','claim_items.claim_id', '=', 'claims.id')
|
||||
->leftJoin('benefits', 'claim_items.claim_itemable_id', '=', 'benefits.id')
|
||||
->leftJoin('claim_requests', 'claims.claim_request_id', '=', 'claim_requests.id')
|
||||
->leftJoin('members', 'claim_requests.member_id', '=', 'members.id')
|
||||
->leftJoin('corporate_employees', 'members.id', '=', 'corporate_employees.member_id')
|
||||
->where('corporate_employees.corporate_id', '=', $corporate_id)
|
||||
->where('claim_requests.id', '=', $claimRequestId)
|
||||
->select(
|
||||
'claim_items.nominal_ditagihkan',
|
||||
'claim_items.nominal_dicover',
|
||||
'benefits.description',
|
||||
'claim_requests.submission_date'
|
||||
)
|
||||
->orderBy('claim_items.id', 'desc')
|
||||
->get();
|
||||
$results['claim_item'] = $claim_item;
|
||||
$tot_claim_item = DB::table('claim_items')
|
||||
->leftJoin('claims','claim_items.claim_id', '=', 'claims.id')
|
||||
->leftJoin('benefits', 'claim_items.claim_itemable_id', '=', 'benefits.id')
|
||||
->leftJoin('claim_requests', 'claims.claim_request_id', '=', 'claim_requests.id')
|
||||
->leftJoin('members', 'claim_requests.member_id', '=', 'members.id')
|
||||
->leftJoin('corporate_employees', 'members.id', '=', 'corporate_employees.member_id')
|
||||
->where('corporate_employees.corporate_id', '=', $corporate_id)
|
||||
->where('claim_requests.id', '=', $claimRequestId)
|
||||
->select(
|
||||
DB::raw('SUM(claim_items.nominal_ditagihkan) AS nominal_ditagihkan'),
|
||||
DB::raw('SUM(claim_items.nominal_dicover) AS nominal_dicover'),
|
||||
DB::raw('(SUM(claim_items.nominal_ditagihkan) - SUM(claim_items.nominal_dicover)) AS difference'),
|
||||
)
|
||||
->groupBy('claim_items.id')
|
||||
->orderBy('claim_items.id', 'desc')
|
||||
->first();
|
||||
$results['tot_claim_item'] = $tot_claim_item;
|
||||
|
||||
|
||||
return Helper::responseJson($results);
|
||||
//
|
||||
}
|
||||
|
||||
public function show($corporateId, $claimRequestId)
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param int $id
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
$data = ClaimRequest::query()
|
||||
->with([
|
||||
'histories:historiable_type,historiable_id,title,description,created_at',
|
||||
'member:id,person_id,name_prefix,name,name_suffix' => [
|
||||
'person:id,name_prefix,name,name_suffix,gender'
|
||||
],
|
||||
'claim:id,status',
|
||||
'claimResults',
|
||||
'claimConditions',
|
||||
'claimDiagnosis'
|
||||
])
|
||||
->find($claimRequestId, ['id', 'submission_date', 'member_id', 'claim_id', 'status']);
|
||||
|
||||
return Helper::responseJson(new ShowResources($data));
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,259 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Http\Controllers\Api;
|
||||
|
||||
use App\Events\ClaimRequested;
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\File;
|
||||
use App\Models\Member;
|
||||
use App\Models\ClaimRequest;
|
||||
use App\Services\ClaimRequestService;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class ClaimRequestController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
private static $code_prefix = 'CLAIM';
|
||||
public function index()
|
||||
{
|
||||
return view('client::index');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view('client::create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
* @param Request $request
|
||||
* @return Renderable
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'member_id' => 'required|array',
|
||||
'member_id.*' => 'required',
|
||||
'service_code.*' => 'required|in:OP,IP'
|
||||
]);
|
||||
if ($request->member_id){
|
||||
foreach($request->member_id as $key => $member_id){
|
||||
|
||||
$code = $this->getNextCode();
|
||||
$member = Member::find($member_id);
|
||||
|
||||
DB::beginTransaction();
|
||||
|
||||
try {
|
||||
$newClaimRequest = ClaimRequestService::storeClaimRequest(
|
||||
row: [],
|
||||
code: $code,
|
||||
member: $member,
|
||||
paymentType: 'reimbursement',
|
||||
serviceCode: $request->service_code[$key],
|
||||
);
|
||||
|
||||
// ClaimRequested::dispatch($newClaimRequest);
|
||||
|
||||
// Log History
|
||||
$newClaimRequest->histories()->create([
|
||||
'title' => 'New Claim Requested',
|
||||
'description' => "Claim Requested for Member : {$member->member_id} - ({$member->full_name})",
|
||||
'type' => 'info',
|
||||
'system_origin' => 'client-portal'
|
||||
]);
|
||||
|
||||
// Claim Log
|
||||
DB::table('claim_logs')
|
||||
->insert([
|
||||
'claim_request_id' => $newClaimRequest->id,
|
||||
'status' => 'requested',
|
||||
'date' => date('Y-m-d H:i:s'),
|
||||
'description' => "Claim Requested for Member : {$member->member_id} - ({$member->full_name})",
|
||||
'system_origin' => 'hospital-portal',
|
||||
'created_by' => auth()->user()->id,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at'=> date('Y-m-d H:i:s'),
|
||||
]);
|
||||
|
||||
$storage_path = storage_path() . "/app/public";
|
||||
$folder = "claim/";
|
||||
|
||||
if (is_dir($storage_path . "/" . $folder) == false) {
|
||||
mkdir($storage_path . "/" . $folder, 0770, true);
|
||||
}
|
||||
|
||||
if (isset($_FILES['laboratorium'])) {
|
||||
foreach ($_FILES['laboratorium']['error']["member_" .$member_id] as $key => $value) {
|
||||
if ($value == 0) {
|
||||
$new_file_name = "claim-result-" . time() . "-" . uniqid();
|
||||
$ekstension = "." . explode("/", $_FILES['laboratorium']['type']["member_" .$member_id][$key])[1];
|
||||
$pathFile = $folder . $new_file_name . $ekstension;
|
||||
|
||||
$tmp_name = $_FILES['laboratorium']['tmp_name']["member_" .$member_id][$key];
|
||||
$full_path = $_FILES['laboratorium']['full_path']["member_" .$member_id][$key];
|
||||
|
||||
if (move_uploaded_file($tmp_name, $storage_path . "/" . $pathFile)) {
|
||||
$newClaimRequest->files()->updateOrCreate([
|
||||
'type' => 'claim-result',
|
||||
'name' => $new_file_name,
|
||||
'original_name' => $full_path,
|
||||
'extension' => $ekstension,
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_FILES['prescription'])) {
|
||||
foreach ($_FILES['prescription']['error']["member_" .$member_id] as $key => $value) {
|
||||
if ($value == 0) {
|
||||
$new_file_name = "claim-diagnosis-" . time() . "-" . uniqid();
|
||||
$ekstension = "." . explode("/", $_FILES['prescription']['type']["member_" .$member_id][$key])[1];
|
||||
$pathFile = $folder . $new_file_name . $ekstension;
|
||||
|
||||
$tmp_name = $_FILES['prescription']['tmp_name']["member_" .$member_id][$key];
|
||||
$full_path = $_FILES['prescription']['full_path']["member_" .$member_id][$key];
|
||||
|
||||
if (move_uploaded_file($tmp_name, $storage_path . "/" . $pathFile)) {
|
||||
$newClaimRequest->files()->updateOrCreate([
|
||||
'type' => 'claim-diagnosis',
|
||||
'name' => $new_file_name,
|
||||
'original_name' => $full_path,
|
||||
'extension' => $ekstension,
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_FILES['invoice'])) {
|
||||
foreach ($_FILES['invoice']['error']["member_" .$member_id] as $key => $value) {
|
||||
if ($value == 0) {
|
||||
$new_file_name = "claim-kondisi-" . time() . "-" . uniqid();
|
||||
$ekstension = "." . explode("/", $_FILES['invoice']['type']["member_" .$member_id][$key])[1];
|
||||
$pathFile = $folder . $new_file_name . $ekstension;
|
||||
|
||||
$tmp_name = $_FILES['invoice']['tmp_name']["member_" .$member_id][$key];
|
||||
$full_path = $_FILES['invoice']['full_path']["member_" .$member_id][$key];
|
||||
|
||||
if (move_uploaded_file($tmp_name, $storage_path . "/" . $pathFile)) {
|
||||
$newClaimRequest->files()->updateOrCreate([
|
||||
'type' => 'claim-kondisi',
|
||||
'name' => $new_file_name,
|
||||
'original_name' => $full_path,
|
||||
'extension' => $ekstension,
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DB::commit();
|
||||
}
|
||||
catch (\Throwable $th) {
|
||||
DB::rollBack();
|
||||
|
||||
return Helper::responseJson(status: 'failed', statusCode: 500, message: $th->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Helper::responseJson(data: $request->toArray(), message: 'Claim Request berhasil ajukan!');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the specified resource.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
return view('client::show');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function edit($id)
|
||||
{
|
||||
return view('client::edit');
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
* @param Request $request
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
public static function getNextCode()
|
||||
{
|
||||
$last_numeric_code = ClaimRequest::select(DB::raw('MAX(CAST(SUBSTRING_INDEX(code, "-", -1) AS SIGNED)) as max_numeric_code'))
|
||||
->whereRaw('SUBSTRING_INDEX(code, "-", -1) REGEXP "^[0-9]+$"')
|
||||
->value('max_numeric_code');
|
||||
// $next_number = 1;
|
||||
if ($last_numeric_code) {
|
||||
// // Jika ada kode sebelumnya, pecah kode dan tambahkan 1 ke angka terakhir
|
||||
// $parts = explode('-', $last_code);
|
||||
// $last_number = (int) end($parts);
|
||||
$next_number = $last_numeric_code + 1;
|
||||
}
|
||||
|
||||
return self::makeCode($next_number);
|
||||
}
|
||||
|
||||
|
||||
public static function makeCode($next_number)
|
||||
{
|
||||
// Pastikan $next_number adalah integer positif
|
||||
$next_number = max(1, (int) $next_number);
|
||||
$requestLogData = RequestLog::where('id', $request_log_id)->first();
|
||||
$organization = Organization::where(['id' => $requestLogData->organization_id, 'type' => 'hospital'])->first('code');
|
||||
$provideCode = $organization ? $organization->code : '';
|
||||
$member = Member::with('currentCorporate')->where(['id' => $requestLogData->member_id])->first();
|
||||
$sparator = '.';
|
||||
$date = date('ymd');
|
||||
// Menghasilkan kode dengan format yang diinginkan
|
||||
return self::$code_prefix . $sparator. 'H' . $sparator. $provideCode . $sparator. $date. $sparator . $member->currentPolicy->code . $sparator. $member->member_id . $sparator. str_pad($next_number, 6, '0', STR_PAD_LEFT);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,88 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\Member;
|
||||
use App\Models\Corporate;
|
||||
use App\Models\File;
|
||||
use App\Services\CorporateMemberService;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Modules\Client\Transformers\ClaimReport\MemberResources as ClaimReportMemberResources;
|
||||
use Modules\Client\Transformers\Dashboard\MemberResources as ClaimSubmitMemberResources;
|
||||
use Modules\Client\Transformers\Dashboard\MemberResources as DashboardMemberResources;
|
||||
use Modules\Client\Transformers\Dashboard\MemberAlarmCenterResources as DashboardMemberAlarmResources;
|
||||
use Modules\Client\Transformers\DataMemberResource;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class CorporateCurrentController extends Controller
|
||||
{
|
||||
public function __construct(public CorporateMemberService $corporateMemberService)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function index(Request $request, $id)
|
||||
{
|
||||
$corporates = Corporate::query()
|
||||
->with('currentPolicy', 'subCorporates')
|
||||
->withCount([
|
||||
'employees',
|
||||
'corporateBenefits',
|
||||
'corporatePlans',
|
||||
|
||||
// 'claims'
|
||||
])
|
||||
// ->where('type', 'corporate')
|
||||
->where('id', $id)
|
||||
->paginate(1);
|
||||
|
||||
return $corporates;
|
||||
}
|
||||
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
|
||||
$validate = $request->validate([
|
||||
'reason' => 'required',
|
||||
]);
|
||||
|
||||
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
//karena pake formdata
|
||||
$linkingRules = $request->linking_rules;
|
||||
$linkingRules = explode(',', $linkingRules);
|
||||
$corporate = Corporate::findOrFail($id);
|
||||
$corporate->fill($request->all());
|
||||
$corporate->linking_rules = $linkingRules;
|
||||
$corporate->save();
|
||||
|
||||
if ($request->hasFile('logo')) {
|
||||
$pathFileAvatar = File::storeFile('avatar', $corporate->id, $request->file('logo'));
|
||||
|
||||
$corporate->files()->updateOrCreate([
|
||||
'type' => 'avatar',
|
||||
'name' => File::getFileName('avatar', $corporate->id, $request->file('logo')),
|
||||
'extension' => $request->file('logo')->getClientOriginalExtension(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $pathFileAvatar,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
|
||||
DB::commit();
|
||||
} catch (\Exception $e) {
|
||||
DB::rollBack();
|
||||
throw $e;
|
||||
}
|
||||
|
||||
return $corporate;
|
||||
}
|
||||
}
|
||||
0
Modules/Client/Http/Controllers/Api/CorporateDivisionController.php
Executable file → Normal file
0
Modules/Client/Http/Controllers/Api/CorporateDivisionController.php
Executable file → Normal file
5
Modules/Client/Http/Controllers/Api/CorporateManageController.php
Executable file → Normal file
5
Modules/Client/Http/Controllers/Api/CorporateManageController.php
Executable file → Normal file
@@ -37,10 +37,7 @@ class CorporateManageController extends Controller
|
||||
*/
|
||||
public function show($corporate_id)
|
||||
{
|
||||
$userLogin = Auth::user();
|
||||
$corporate = $userLogin->managedCorporates()->where('corporates.id', $corporate_id)->first();
|
||||
|
||||
return response()->json($corporate);
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
414
Modules/Client/Http/Controllers/Api/CorporateMemberController.php
Executable file → Normal file
414
Modules/Client/Http/Controllers/Api/CorporateMemberController.php
Executable file → Normal file
@@ -3,36 +3,18 @@
|
||||
namespace Modules\Client\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\Member;
|
||||
use App\Models\Claim;
|
||||
use App\Models\ClaimRequest;
|
||||
use App\Models\RequestLog;
|
||||
use App\Services\CorporateMemberService;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Modules\Client\Transformers\ClaimReport\MemberResources as ClaimReportMemberResources;
|
||||
use Modules\Client\Transformers\AlarmCenter\DataListClaimMemberResource;
|
||||
use Modules\Client\Transformers\AlarmCenter\DataServiceMonitoring;
|
||||
use Modules\Client\Transformers\Dashboard\MemberResources as ClaimSubmitMemberResources;
|
||||
use Modules\Client\Transformers\Dashboard\MemberResources as DashboardMemberResources;
|
||||
use Modules\Client\Transformers\Dashboard\MemberAlarmCenterResources as DashboardMemberAlarmResources;
|
||||
use Modules\Client\Transformers\Dashboard\MemberEmployeeDataResources as DashboardMemberEmployeeDataResources;
|
||||
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
|
||||
use Modules\Client\Transformers\EmployeeData\UserProfile\DataMemberResource as EmployeeDataProfileMemberResource;
|
||||
use Modules\Internal\Services\MemberEnrollmentService;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Dompdf\Dompdf;
|
||||
use Dompdf\Options;
|
||||
use PDF;
|
||||
|
||||
class CorporateMemberController extends Controller
|
||||
{
|
||||
public $memberEnrollmentService;
|
||||
|
||||
public function __construct(public CorporateMemberService $corporateMemberService, MemberEnrollmentService $memberEnrollmentService)
|
||||
public function __construct(public CorporateMemberService $corporateMemberService)
|
||||
{
|
||||
$this->memberEnrollmentService = $memberEnrollmentService;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -42,408 +24,18 @@ class CorporateMemberController extends Controller
|
||||
public function index(Request $request, $corporate_id)
|
||||
{
|
||||
switch ($request->input('type')) {
|
||||
case 'employee-data':
|
||||
$members = $this->corporateMemberService->getAllMemberEmployeeData($corporate_id, $request);
|
||||
return response()->json(Helper::paginateResources(DashboardMemberEmployeeDataResources::collection($members)));
|
||||
case 'claim-report':
|
||||
$members = $this->corporateMemberService->getAllMemberClaimReports($corporate_id, $request);
|
||||
return response()->json(Helper::paginateResources(ClaimReportMemberResources::collection($members)));
|
||||
case 'claim-submit':
|
||||
$members = $this->corporateMemberService->getAllMemberClaimSubmits($corporate_id, $request);
|
||||
return response()->json(Helper::paginateResources(ClaimSubmitMemberResources::collection($members)));
|
||||
$members = $this->corporateMemberService->getAllMemberClaimReports($corporate_id, $request);
|
||||
return response()->json(Helper::paginateResources(ClaimReportMemberResources::collection($members)));
|
||||
case 'alarm-center':
|
||||
$members = $this->corporateMemberService->getAllMemberAlarmCenter($corporate_id, $request);
|
||||
return response()->json(Helper::paginateResources(DashboardMemberAlarmResources::collection($members)));
|
||||
case 'service-monitoring':
|
||||
$members = $this->corporateMemberService->getAllEncounter($corporate_id, $request);
|
||||
return response()->json(Helper::paginateResources(DashboardMemberAlarmResources::collection($members)));
|
||||
default:
|
||||
$members = $this->corporateMemberService->getAllMemberDashboards($corporate_id, $request);
|
||||
return response()->json(Helper::paginateResources(DashboardMemberResources::collection($members)));
|
||||
}
|
||||
}
|
||||
|
||||
public function show($corporate_id, $person_id)
|
||||
{
|
||||
$data = Member::query()
|
||||
->with(['person'])
|
||||
->where('person_id', $person_id)
|
||||
->whereHas('currentCorporate', function ($query) use ($corporate_id) {
|
||||
$query->where('corporate_id', $corporate_id);
|
||||
})
|
||||
->firstOrFail();
|
||||
|
||||
// Get Families
|
||||
$data->families = Member::query()
|
||||
->with(['person'])
|
||||
->where('principal_id', $data->member_id)
|
||||
->get();
|
||||
|
||||
return response()->json(EmployeeDataProfileMemberResource::make($data));
|
||||
}
|
||||
|
||||
public function generateMemberList($corporate_id)
|
||||
{
|
||||
// Mendapatkan data yang akan diekspor (misalnya, dari database)
|
||||
$data = Member::with(['currentPlan', 'currentCorporate', 'division', 'employeds', 'currentPolicy'])
|
||||
// ->filter($request->all())
|
||||
// ->where('corporate_id', $corporate_id)
|
||||
->whereHas('employeds', function ($employeds) use ($corporate_id) {
|
||||
$employeds->where('corporate_id', $corporate_id);
|
||||
})->get()->toArray();
|
||||
// Membuat penulis entitas Spout
|
||||
$writer = WriterEntityFactory::createXLSXWriter();
|
||||
|
||||
// Membuka penulis untuk menulis ke file
|
||||
$writer->openToFile(public_path('files/CorporateMembershipList.xlsx'));
|
||||
// Menulis header kolom
|
||||
$headers_map_to_table_fields = $this->memberEnrollmentService->listing_doc_headers;
|
||||
$headerRow = WriterEntityFactory::createRowFromArray($headers_map_to_table_fields);
|
||||
|
||||
$writer->addRow($headerRow);
|
||||
|
||||
// Menulis data
|
||||
if (!empty($data)) {
|
||||
foreach ($data as $item) {
|
||||
$rowData = [
|
||||
$item['record_mode'], // Recode Mode
|
||||
$item['record_type'], // Recode Type
|
||||
$item['payor_id'], // Payor ID
|
||||
$item['member_id'], // Member ID
|
||||
$item['principal_id'], // Mapping ID
|
||||
NULL, // Link Medis Member ID
|
||||
$item['current_corporate']['code'] ?? null, // Corporate ID
|
||||
$item['employeds'][0]['nik'] ?? null, // NIK
|
||||
$item['division']['code'] ?? null, // Devision
|
||||
$item['employeds'][0]['branch_code'] ?? null, // Branch Code
|
||||
$item['bank_info'], // Bank Info
|
||||
$item['language'], // Language
|
||||
null, // Type of Work
|
||||
$item['race'], // Race
|
||||
$item['current_policy']['code'] ?? null, // Policy Number
|
||||
$item['marital_status'], // Marital Status
|
||||
$item['relation_with_principal'], // Relationship
|
||||
str_replace('-', '', $item['members_effective_date']), // Member effective date
|
||||
str_replace('-', '', $item['members_expire_date']), // Member expiry date
|
||||
NULL, // Faskes FKTP (First Level Provider) or Individual preferred provider
|
||||
NULL, // Faskes FKRTL (Next Level Provider) or Individual group preferred provider
|
||||
$item['bpjs_class'], // The Right Classes Room of BPJS Participants
|
||||
NULL, // Name of Faskes
|
||||
NULL, // Rule BPJSK
|
||||
NULL, // Internal Use
|
||||
$item['full_name'], // Member Name
|
||||
$item['address1'], // Address1
|
||||
$item['address2'], // Address2
|
||||
$item['address3'], // Address3
|
||||
$item['address4'], // Address4
|
||||
$item['city'], // City
|
||||
NULL, // State
|
||||
$item['postal_code'], // Post Code
|
||||
NULL, // Telephone - Mobile
|
||||
NULL, // Telephone - Res
|
||||
NULL, // Telephone - Office
|
||||
$item['nric'], // NRIC
|
||||
$item['passport_no'], // Passport No
|
||||
$item['passport_country'], // Passport Country
|
||||
$item['email'], // Email
|
||||
$item['identification_code'], // Identification Code
|
||||
$item['birth_date'], // Date of Birth
|
||||
$item['gender_code'], // Sex
|
||||
NULL, // Internal Use
|
||||
$item['current_plan']['code'] ?? null, // Plan-ID
|
||||
NULL, // Employment-Status
|
||||
NULL, // Internal Use
|
||||
NULL, // Internal Use
|
||||
NULL, // Internal Use
|
||||
str_replace('-', '', $item['terminated_date']), // Date Terminated
|
||||
$item['pre_existing'], // Pre Existing
|
||||
$item['bpjs_id'], // BPJS ID
|
||||
$item['endorsement_date'], // Endorsement Date
|
||||
$item['remarks'], // Remarks
|
||||
NULL, // Internal Use
|
||||
NULL, // Member Since
|
||||
NULL, // Internal Use
|
||||
$item['policy_in_force'], // Policy Inforce
|
||||
NULL, // Member Suspended
|
||||
str_replace('-', '', $item['activation_date']), // Activation Date
|
||||
NULL, // Internal Use
|
||||
$item['start_no_claim'], // StartNoClaim
|
||||
$item['end_no_claim'], // EndNoClaim
|
||||
NULL, // Option Mode
|
||||
];
|
||||
$row = WriterEntityFactory::createRowFromArray($rowData);
|
||||
$writer->addRow($row);
|
||||
}
|
||||
}
|
||||
|
||||
// Menutup penulis
|
||||
$writer->close();
|
||||
// dd('test');
|
||||
// Mengembalikan response untuk mengunduh file
|
||||
$filePath = public_path('files/CorporateMembershipList.xlsx');
|
||||
// dd($filePath);
|
||||
// Mengembalikan response untuk mengunduh file
|
||||
return Helper::responseJson([
|
||||
'file_name' => "Corporate Plan & Benefit List " . date('Y-m-d h:i:s'),
|
||||
"file_url" => url('files/CorporateMembershipList.xlsx')
|
||||
]);
|
||||
}
|
||||
|
||||
public function showPerMember(Request $request, $corporate_id, $member_id)
|
||||
{
|
||||
$per_page = $request->has('per_page') ? $request->input('per_page') : 10;
|
||||
$member = Member::query()
|
||||
->whereHas('currentCorporate', function ($query) use ($corporate_id) {
|
||||
$query->where('corporate_id', $corporate_id);
|
||||
})
|
||||
->find($member_id);
|
||||
$data = RequestLog::where([
|
||||
'member_id' => $member->id,
|
||||
'deleted_at' => null
|
||||
])
|
||||
->when($request->has('orderBy'), function ($query) use ($request) {
|
||||
$orderBy = match ($request->input('orderBy')) {
|
||||
'admission_date' => 'request_logs.submission_date',
|
||||
'discharge_date' => 'request_logs.discharge_date',
|
||||
'code' => 'request_logs.code',
|
||||
default => ''
|
||||
};
|
||||
$query->getQuery()->orderBy($orderBy, $request->order);
|
||||
})
|
||||
->when($request->search, function ($q, $search) {
|
||||
$q->where('code', 'LIKE', "%".$search."%");
|
||||
$q->orWhereHas('member', function ($subQuery) use ($search) {
|
||||
$subQuery->where('name', 'LIKE', "%".$search."%");
|
||||
});
|
||||
})
|
||||
->when($request->status, function ($q, $search) {
|
||||
if ($search == 'kondisi') {
|
||||
$q->whereHas('files', function ($subQuery) {
|
||||
$subQuery->where('type', 'final-log-kondisi');
|
||||
});
|
||||
} elseif ($search == 'diagnosa') {
|
||||
$q->whereHas('files', function ($subQuery) {
|
||||
$subQuery->where('type', 'final-log-diagnosis');
|
||||
});
|
||||
} elseif ($search == 'result') {
|
||||
$q->whereHas('files', function ($subQuery) {
|
||||
$subQuery->where('type', 'final-log-result');
|
||||
});
|
||||
} elseif ($search == 'none') {
|
||||
$q->doesntHave('files');
|
||||
}
|
||||
})
|
||||
->with(['member','files'])
|
||||
->paginate($per_page);
|
||||
return response()->json(['full_name' => $member->full_name?? null, 'paginations' => Helper::paginateResources(DataListClaimMemberResource::collection($data))]);
|
||||
}
|
||||
|
||||
public function serviceMonitoring(int $corporate_id, int $request_log_id)
|
||||
{
|
||||
$data = RequestLog::query()
|
||||
->with([
|
||||
'member:id,member_id,person_id,birth_date,email,name_prefix,name,name_suffix' => [
|
||||
'currentCorporate',
|
||||
'person:id,email,name_prefix,name,name_suffix,phone'
|
||||
],
|
||||
'organization:id,name',
|
||||
'requestLogBenefits:id,request_log_id,benefit_id,amount_incurred,amount_approved,amount_not_approved,excess_paid,keterangan' => [
|
||||
'benefit'
|
||||
],
|
||||
'requestLogDailyMonitorings:id,request_log_id,submission_date,subject,object,body_temperature,sistole,diastole,respiration_rate,analysis,lab_date,provider,examination' => [
|
||||
'requestLogMedicalPlans:request_log_daily_monitoring_id,plan,type',
|
||||
// 'document'
|
||||
],
|
||||
'service:code,name',
|
||||
'files',
|
||||
])
|
||||
->find($request_log_id, ['id', 'submission_date', 'discharge_date', 'member_id', 'service_code', 'organization_id', 'diagnosis', 'keterangan', 'catatan']);
|
||||
|
||||
$dataBenefit = [];
|
||||
if (count($data->requestLogBenefits) > 0) {
|
||||
$totalIncurred = 0;
|
||||
$totalApprove = 0;
|
||||
$totalNotApporve = 0;
|
||||
$totalExcess = 0;
|
||||
|
||||
foreach ($data->requestLogBenefits as $itemBenefit) {
|
||||
$totalIncurred += $itemBenefit->amount_incurred;
|
||||
$totalApprove += $itemBenefit->amount_approved;
|
||||
$totalNotApporve += $itemBenefit->amount_not_approved;
|
||||
$totalExcess += $itemBenefit->excess_paid;
|
||||
}
|
||||
|
||||
$dataBenefit['totalIncurred'] = $totalIncurred;
|
||||
$dataBenefit['totalApprove'] = $totalApprove;
|
||||
$dataBenefit['totalNotApprove'] = $totalNotApporve;
|
||||
$dataBenefit['totalExcess'] = $totalExcess;
|
||||
}
|
||||
|
||||
$data->benefitTotal = $dataBenefit;
|
||||
|
||||
return Helper::responseJson(DataServiceMonitoring::make($data));
|
||||
}
|
||||
|
||||
public function getDeposit($corporate_id)
|
||||
{
|
||||
$deposit = DB::table('corporate_policies')
|
||||
->select('total_premi',
|
||||
'minimal_deposit_percentage',
|
||||
'minimal_deposit_net',
|
||||
'minimal_alert_percentage',
|
||||
'minimal_alert_net',
|
||||
'minimal_stop_service_net',
|
||||
'minimal_stop_service_percentage')
|
||||
->where('corporate_id','=', $corporate_id)
|
||||
->first();
|
||||
$usage = DB::table('corporate_employees')
|
||||
->join('request_logs', 'request_logs.member_id', '=', 'corporate_employees.member_id')
|
||||
->join('request_log_benefits', 'request_log_benefits.request_log_id', '=', 'request_logs.id')
|
||||
->where('corporate_employees.corporate_id', '=', $corporate_id)
|
||||
->whereNull('request_log_benefits.deleted_at')
|
||||
->sum('request_log_benefits.amount_approved');
|
||||
// Ganti dengan logika Anda untuk mendapatkan data deposit
|
||||
$deposit = [
|
||||
'deposit' => $deposit->total_premi,
|
||||
'limit' => $deposit->total_premi - $usage,
|
||||
'usage' => $usage,
|
||||
'minimal_deposit_percentage' => $deposit->minimal_deposit_percentage,
|
||||
'minimal_deposit_net' => $deposit->minimal_deposit_net,
|
||||
'minimal_alert_percentage' => $deposit->minimal_alert_percentage,
|
||||
'minimal_alert_net' => $deposit->minimal_alert_net,
|
||||
'minimal_stop_service_net' => $deposit->minimal_stop_service_net,
|
||||
'minimal_stop_service_percentage' => $deposit->minimal_stop_service_percentage
|
||||
];
|
||||
|
||||
return response()->json($deposit);
|
||||
}
|
||||
|
||||
public function getLimits($corporate_id, $member_id)
|
||||
{
|
||||
$deposit = DB::table('corporate_policies')
|
||||
->select('total_premi')
|
||||
->where('corporate_id','=', $corporate_id)
|
||||
->first();
|
||||
$usage = DB::table('corporate_employees')
|
||||
->join('request_logs', 'request_logs.member_id', '=', 'corporate_employees.member_id')
|
||||
->join('request_log_benefits', 'request_log_benefits.request_log_id', '=', 'request_logs.id')
|
||||
->where('corporate_employees.corporate_id', '=', $corporate_id)
|
||||
->where('request_logs.member_id', '=', $member_id)
|
||||
->whereNull('request_logs.deleted_at')
|
||||
->whereNull('request_log_benefits.deleted_at')
|
||||
->sum('request_log_benefits.amount_approved');
|
||||
|
||||
$services = DB::table('member_plans')
|
||||
->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id')
|
||||
->leftJoin('services', 'services.code', '=', 'plans.service_code')
|
||||
->where('member_plans.member_id', '=', $member_id)
|
||||
->whereNull('member_plans.deleted_at')
|
||||
->select(
|
||||
'plans.service_code',
|
||||
'services.name as title',
|
||||
'plans.limit_rules as total',
|
||||
DB::raw("
|
||||
(
|
||||
IFNULL(
|
||||
(
|
||||
SELECT SUM(request_log_benefits.amount_approved)
|
||||
FROM request_logs
|
||||
INNER JOIN request_log_benefits
|
||||
ON request_log_benefits.request_log_id = request_logs.id
|
||||
WHERE request_logs.member_id = $member_id
|
||||
AND request_logs.service_code = plans.service_code
|
||||
AND request_log_benefits.deleted_at IS NULL
|
||||
), 0
|
||||
)
|
||||
) as current
|
||||
")
|
||||
|
||||
)
|
||||
->get();
|
||||
$total_premi = 0;
|
||||
foreach ($services as $value)
|
||||
{
|
||||
if($value->total > 0 && $value->total != 999999999)
|
||||
{
|
||||
$total_premi += $value->total;
|
||||
}
|
||||
else if($value->total == 999999999)
|
||||
{
|
||||
$total_premi = 999999999;
|
||||
}
|
||||
|
||||
}
|
||||
// Ganti dengan logika Anda untuk mendapatkan data deposit
|
||||
$deposit = [
|
||||
'deposit' => $total_premi,
|
||||
'usage' => $usage,
|
||||
'services' => $services
|
||||
];
|
||||
|
||||
return response()->json($deposit);
|
||||
}
|
||||
|
||||
public function downloadEcard($corporate_id, $member_id)
|
||||
{
|
||||
$member = Member::with([
|
||||
'currentPlan',
|
||||
'currentPolicy',
|
||||
'currentCorporate',
|
||||
'currentCorporate.files',
|
||||
// 'currentPlan.corporateBenefits.benefit'
|
||||
])->find($member_id);
|
||||
$dataMember['member'] = $member;
|
||||
|
||||
$pdf = new Dompdf();
|
||||
|
||||
$options = new Options();
|
||||
$options->set('isHtml5ParserEnabled', true);
|
||||
$options->set('isPhpEnabled', true);
|
||||
$options->set(['isRemoteEnabled' => true]);
|
||||
$pdf->setOptions($options);
|
||||
|
||||
$pdf->setPaper('A5', 'portrait');
|
||||
|
||||
if ($member->currentCorporate->id == 5){ // Vale
|
||||
$html1 = view('pdf.ecard', $dataMember);
|
||||
} else {
|
||||
$html1 = view('pdf.ecard-lms', $dataMember);
|
||||
}
|
||||
|
||||
// Halaman 2
|
||||
// $html2 = view('pdf.req_log_page_2', $data);
|
||||
|
||||
// Gabung konten HTML dari dua tampilan
|
||||
// $htmlCombined = $html1 . $html2;
|
||||
$htmlCombined = $html1;
|
||||
|
||||
$pdf->loadHtml($htmlCombined);
|
||||
$pdf->render();
|
||||
|
||||
$headers = [
|
||||
'Content-Type' => 'application/pdf',
|
||||
'Content-Disposition' => 'inline; filename="file.pdf"',
|
||||
];
|
||||
|
||||
return response($pdf->output(), 200, $headers);
|
||||
}
|
||||
|
||||
public function viewECard($corporate_id, $member_id){
|
||||
$member = Member::with([
|
||||
'currentPlan',
|
||||
'currentPolicy',
|
||||
'currentCorporate',
|
||||
'currentCorporate.files',
|
||||
// 'currentPlan.corporateBenefits.benefit'
|
||||
])->find($member_id);
|
||||
|
||||
if ($member->currentCorporate->id == 5){ // Vale
|
||||
$pdf = PDF::loadView('pdf.ecard', compact('member'))->setPaper('A5', 'portrait');
|
||||
} else {
|
||||
$pdf = PDF::loadView('pdf.ecard-lms', compact('member'))->setPaper('A5', 'portrait');
|
||||
}
|
||||
return $pdf->download('Ecard - '.$member->full_name.'.pdf');
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
2
Modules/Client/Http/Controllers/Api/CorporatePolicyController.php
Executable file → Normal file
2
Modules/Client/Http/Controllers/Api/CorporatePolicyController.php
Executable file → Normal file
@@ -18,7 +18,7 @@ class CorporatePolicyController extends Controller
|
||||
public function index($corporate_id)
|
||||
{
|
||||
$currentCorporate = Auth::user()->managedCorporates()
|
||||
->with(['currentPolicy'])
|
||||
->with(['currentPolicy', 'employees'])
|
||||
->find($corporate_id);
|
||||
|
||||
$data = LimitResources::make($currentCorporate);
|
||||
|
||||
@@ -1,905 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Http\Controllers\Api;
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\DailyMonitoring;
|
||||
use App\Models\RequestDailyMonitoring;
|
||||
use App\Models\MedicalPlan;
|
||||
use App\Models\File;
|
||||
use DB;
|
||||
use Exception;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Support\Facades\File as Files;
|
||||
use Modules\Internal\Transformers\DailyMonitoringResource;
|
||||
use Carbon\Carbon;
|
||||
|
||||
|
||||
/**
|
||||
* Bagaskoro BSD 27-10-2023
|
||||
*
|
||||
* Controller untuk daily monitoring
|
||||
*/
|
||||
class DailyMonitoringController extends Controller
|
||||
{
|
||||
protected $path_for_store = 'public/lab_result';
|
||||
protected function messages()
|
||||
{
|
||||
return [
|
||||
'required' => ':attribute harus diisi',
|
||||
'integer' => ':attribute harus angka',
|
||||
'unique' => ':attribute (:input) sudah ada',
|
||||
'max' => ':attribute maximal :max karakter',
|
||||
'exists' => ':attribute (:input) tidak ditemukan',
|
||||
'numeric' => ':attribute harus angka',
|
||||
'digits_between'=> ':attribute maximal :max digit minimal :min digit'
|
||||
];
|
||||
}
|
||||
|
||||
public function GetMemberList(Request $request)
|
||||
{
|
||||
$startDate = $request->start_date ? Carbon::parse($request->start_date) : Carbon::today();
|
||||
$endDate = $request->end_date ? Carbon::parse($request->end_date)->addDay() : Carbon::today()->addDay();
|
||||
|
||||
$memberList = DB::table('request_log_daily_monitorings')
|
||||
->leftJoin('request_logs', 'request_log_daily_monitorings.request_log_id', '=', 'request_logs.id')
|
||||
->leftJoin('members', 'request_logs.member_id', '=', 'members.id')
|
||||
->leftJoin('organizations', 'organizations.id', '=', 'request_logs.organization_id')
|
||||
->select(
|
||||
'members.member_id',
|
||||
'members.name',
|
||||
'members.birth_date',
|
||||
'request_logs.type_of_member as member_type',
|
||||
'members.members_effective_date AS startdate',
|
||||
'members.members_expire_date AS enddate',
|
||||
'request_logs.submission_date as addmision_date',
|
||||
'organizations.name as provider',
|
||||
'request_logs.organization_id',
|
||||
'request_logs.code',
|
||||
// Using a subquery to fetch medical_plan
|
||||
DB::raw('(SELECT plan FROM request_log_medical_plan rdm WHERE rdm.request_log_daily_monitoring_id = request_log_daily_monitorings.id AND type = 1 LIMIT 1) as medical_plan'),
|
||||
DB::raw('(SELECT plan FROM request_log_medical_plan rdm WHERE rdm.request_log_daily_monitoring_id = request_log_daily_monitorings.id AND type = 2 LIMIT 1) as non_medical_plan'),
|
||||
'request_log_daily_monitorings.*'
|
||||
)
|
||||
->whereNull('request_logs.deleted_at') // Use whereNull() for checking NULL
|
||||
->when($request->search, function ($q, $search) {
|
||||
$q->where(function ($subQ) use ($search) {
|
||||
$subQ->where('members.member_id', 'LIKE', "%{$search}%");
|
||||
$subQ->orWhere('members.name', 'LIKE', "%{$search}%");
|
||||
});
|
||||
})
|
||||
->when($startDate, function ($q) use ($startDate) {
|
||||
$q->where('request_log_daily_monitorings.submission_date', '>=', $startDate);
|
||||
})
|
||||
->when($endDate, function ($q) use ($endDate) {
|
||||
$q->where('request_log_daily_monitorings.submission_date', '<=', Carbon::parse($endDate)->addDay());
|
||||
})
|
||||
->orderBy('request_logs.created_at', 'desc')
|
||||
->paginate();
|
||||
|
||||
return Helper::paginateResources(DailyMonitoringResource::collection($memberList));
|
||||
}
|
||||
|
||||
/**
|
||||
* Claim List - by member id
|
||||
*/
|
||||
public function GetClaimList(Request $request, $member_id)
|
||||
{
|
||||
$memberDetail = DB::table('members')
|
||||
->select('id','member_id','name')
|
||||
->where('member_id', $member_id)
|
||||
->first();
|
||||
|
||||
$claimList = DB::table('request_logs')
|
||||
->leftJoin('services', 'services.code', '=', 'request_logs.service_code')
|
||||
->leftJoin('members', 'members.id', '=', 'request_logs.member_id')
|
||||
->select('request_logs.id','request_logs.submission_date AS admission_date','request_logs.discharge_date','request_logs.code','services.name as service_name','request_logs.status','members.name', 'members.member_id')
|
||||
->where('request_logs.service_code', 'IP')
|
||||
->where('request_logs.deleted_at', null)
|
||||
// ->where('request_logs.status_final_log', 'approved')
|
||||
->where("request_logs.member_id", "=", $memberDetail->id)
|
||||
->where("request_logs.organization_id", "=", $request->organization_id)
|
||||
->when($request->search, function ($q, $search) {
|
||||
$q->where('request_logs.code', 'LIKE', "%".$search."%");
|
||||
})
|
||||
->orderBy("request_logs.created_at", "desc")
|
||||
// ->get()
|
||||
->paginate();
|
||||
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'message' => "success",
|
||||
'data' => [
|
||||
'member_detail'=> $memberDetail,
|
||||
'claim_list' => $claimList,
|
||||
]
|
||||
],200);
|
||||
}
|
||||
|
||||
/**
|
||||
* Detail Monitoring List - by claim_code
|
||||
*/
|
||||
public function GetDetailMonitoringList(Request $request, $request_code)
|
||||
{
|
||||
// get id request log
|
||||
$request_logs = DB::table('request_logs')
|
||||
->select('id','organization_id')
|
||||
->where('code', $request_code)
|
||||
->first();
|
||||
|
||||
$detail_list = RequestDailyMonitoring::where('request_log_id', empty($request_logs) == false ? $request_logs->id : '')
|
||||
->orderBy("submission_date", "desc")
|
||||
->get();
|
||||
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'message' => "success",
|
||||
'data' => [
|
||||
'detail_list'=> $detail_list,
|
||||
'organization_id' => $request_logs ? $request_logs->organization_id : 0
|
||||
]
|
||||
],200);
|
||||
}
|
||||
|
||||
public function GetDetailMonitoringListbyID(Request $request, $id)
|
||||
{
|
||||
|
||||
$detail = RequestDailyMonitoring::where('id', $id)
|
||||
->orderBy("created_at", "desc")
|
||||
->first();
|
||||
|
||||
if ($detail) {
|
||||
// Ubah menjadi array agar bisa dimodifikasi
|
||||
$detailArray = $detail->toArray();
|
||||
|
||||
// Ubah nama key dari request_log_id menjadi log_id
|
||||
$detailArray['log_code'] = $detailArray['request_log_id'];
|
||||
unset($detailArray['request_log_id']);
|
||||
} else {
|
||||
$detailArray = null;
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'message' => "success",
|
||||
'data' => $detailArray,
|
||||
], 200);
|
||||
|
||||
}
|
||||
|
||||
public function UpdateDetailMonitoringbyID(Request $request)
|
||||
{
|
||||
// validation rule
|
||||
$validator = Validator::make($request->all(),[
|
||||
'log_code' => 'required',
|
||||
'reason' => 'required',
|
||||
],$this->messages());
|
||||
|
||||
// validation error
|
||||
if ($validator->fails()) {
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => $validator->getMessageBag()
|
||||
],400);
|
||||
}
|
||||
try {
|
||||
// insert claim daily monitoring
|
||||
$db_response = RequestDailyMonitoring::where('id', $request->id)
|
||||
->update([
|
||||
'request_log_id' => $request->log_code,
|
||||
'submission_date' => $request->submission_date,
|
||||
'subject' => $request->subject,
|
||||
'object' => $request->objective,
|
||||
'sistole' => $request->sistole,
|
||||
'diastole' => $request->diastole,
|
||||
'body_temperature' => $request->body_temperature,
|
||||
'respiration_rate' => $request->respiration_rate,
|
||||
'analysis' => $request->analysis,
|
||||
'lab_date' => $request->lab_date,
|
||||
'provider' => $request->provider,
|
||||
'examination' => $request->examination,
|
||||
'doctor_1' => $request->doctor_1,
|
||||
'doctor_2' => $request->doctor_2,
|
||||
'temp_diagnosis' => $request->temp_diagnosis,
|
||||
'final_diagnosis' => $request->final_diagnosis,
|
||||
'approval_pendamping' => $request->approval_pendamping,
|
||||
'description' => $request->keterangan,
|
||||
'note' => $request->catatan,
|
||||
'reason' => $request->reason,
|
||||
'created_by' => auth()->user()->id,
|
||||
]);
|
||||
|
||||
// cek medical plan
|
||||
$num_medical_plan = 0;
|
||||
foreach ($request->medical_plan as $row) {
|
||||
if ($row['medical_plan_str']) {
|
||||
$num_medical_plan++;
|
||||
}
|
||||
}
|
||||
|
||||
if ($num_medical_plan == 0) {
|
||||
DB::rollBack();
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => [
|
||||
'medical_plan' => ['medical plan harus diisi']
|
||||
],
|
||||
'data' => []
|
||||
],400);
|
||||
}
|
||||
if ($request->medical_plan){
|
||||
// delete medical plan
|
||||
DB::table('request_log_medical_plan')
|
||||
->where([
|
||||
'request_log_daily_monitoring_id' => $request->id,
|
||||
'type' => 1
|
||||
])
|
||||
->delete();
|
||||
// insert medical plan
|
||||
foreach ($request->medical_plan as $row) {
|
||||
DB::table('request_log_medical_plan')->insert([
|
||||
'request_log_daily_monitoring_id' => $request->id,
|
||||
'plan' => $row['medical_plan_str'],
|
||||
'type' => 1,
|
||||
'created_at' => date('Y-m-d'),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
if ($request->non_medikamentosa_plan){
|
||||
// delete medical plan
|
||||
DB::table('request_log_medical_plan')
|
||||
->where([
|
||||
'request_log_daily_monitoring_id' => $request->id,
|
||||
'type' => 2
|
||||
])
|
||||
->delete();
|
||||
// insert non medical plan
|
||||
foreach ($request->non_medikamentosa_plan as $row) {
|
||||
DB::table('request_log_medical_plan')->insert([
|
||||
'request_log_daily_monitoring_id' => $request->id,
|
||||
'plan' => $row['non_medikamentosa_plan_str'],
|
||||
'type' => 2,
|
||||
'created_at' => date('Y-m-d'),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
// insert file result
|
||||
if ($request->confirmation_medical_leter){
|
||||
// $fileCurrents = File::where([
|
||||
// 'fileable_id' => $request->id,
|
||||
// 'type' => 'confirmation-medical-letter',
|
||||
// ])->get();
|
||||
// if ($fileCurrents){
|
||||
// foreach($fileCurrents as $fileCurrent){
|
||||
// if (Files::exists($fileCurrent->path)) {
|
||||
// Files::delete();
|
||||
// }
|
||||
// File::find($fileCurrent->id)->delete();
|
||||
// }
|
||||
// }
|
||||
foreach ($request->confirmation_medical_leter as $file) {
|
||||
$fileData = File::storeFile('confirmation-medical-letter', $request->id, $file);
|
||||
File::create([
|
||||
'fileable_type' => 'App\Models\LaboratoriumResult',
|
||||
'fileable_id' => $request->id,
|
||||
'type' => 'confirmation-medical-letter',
|
||||
'name' => $fileData['name'],
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $fileData['path'],
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
|
||||
}
|
||||
}
|
||||
if ($request->medical_action_letter){
|
||||
// $fileCurrents = File::where([
|
||||
// 'fileable_id' => $request->id,
|
||||
// 'type' => 'medical-action-letter',
|
||||
// ])->get();
|
||||
// if ($fileCurrents){
|
||||
// foreach($fileCurrents as $fileCurrent){
|
||||
// if (Files::exists($fileCurrent->path)) {
|
||||
// Files::delete();
|
||||
// }
|
||||
// File::find($fileCurrent->id)->delete();
|
||||
// }
|
||||
// }
|
||||
foreach ($request->medical_action_letter as $file) {
|
||||
$fileData = File::storeFile('medical-action-letter', $request->id, $file);
|
||||
File::create([
|
||||
'fileable_type' => 'App\Models\LaboratoriumResult',
|
||||
'fileable_id' => $request->id,
|
||||
'type' => 'medical-action-letter',
|
||||
'name' => $fileData['name'],
|
||||
'original_name' => $orignalName,
|
||||
'extension' => $file->getClientOriginalName(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $fileData['path'],
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
// $file->storeAs($this->path_for_store, $fileName);
|
||||
}
|
||||
}
|
||||
if ($request->result){
|
||||
// $fileCurrents = File::where([
|
||||
// 'fileable_id' => $request->id,
|
||||
// 'type' => 'laboratorium-result',
|
||||
// ])->get();
|
||||
// if ($fileCurrents){
|
||||
// foreach($fileCurrents as $fileCurrent){
|
||||
// if (Files::exists($fileCurrent->path)) {
|
||||
// Files::delete();
|
||||
// }
|
||||
// File::find($fileCurrent->id)->delete();
|
||||
// }
|
||||
// }
|
||||
foreach ($request->result as $file) {
|
||||
$fileData = File::storeFile('laboratorium-result', $request->id, $file);
|
||||
File::create([
|
||||
'fileable_type' => 'App\Models\LaboratoriumResult',
|
||||
'fileable_id' => $request->id,
|
||||
'type' => 'laboratorium-result',
|
||||
'name' => $fileData['name'],
|
||||
'original_name' => $orignalName,
|
||||
'extension' => $file->getClientOriginalName(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $fileData['path'],
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
|
||||
// $file->storeAs($this->path_for_store, $fileName);
|
||||
}
|
||||
}
|
||||
DB::commit();
|
||||
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'message' => "success",
|
||||
'data' => []
|
||||
],200);
|
||||
}
|
||||
catch (Exception $e) {
|
||||
DB::rollBack();
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => $e->getMessage(),
|
||||
'data' => []
|
||||
],500);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add Detail Monitoring List
|
||||
*/
|
||||
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',
|
||||
'subject' => 'required',
|
||||
'sistole' => 'required|numeric',
|
||||
'diastole' => 'required|numeric',
|
||||
'body_temperature' => 'required|numeric',
|
||||
'respiration_rate' => 'required|numeric',
|
||||
'analysis' => 'required',
|
||||
'complaints' => 'required',
|
||||
'medical_plan' => 'required',
|
||||
],$this->messages());
|
||||
|
||||
// validation error
|
||||
if ($validator->fails()) {
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => $validator->getMessageBag()
|
||||
],400);
|
||||
}
|
||||
|
||||
// get claim request
|
||||
$claim_request = DB::table('claim_requests')
|
||||
->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([
|
||||
'claim_id' => $claim->id,
|
||||
'subject' => $request->subject,
|
||||
'objective' => $request->objective,
|
||||
'sistole' => $request->sistole,
|
||||
'diastole' => $request->diastole,
|
||||
'body_temperature' => $request->body_temperature,
|
||||
'respiration_rate' => $request->respiration_rate,
|
||||
'analysis' => $request->analysis,
|
||||
'complaints' => $request->complaints,
|
||||
]);
|
||||
|
||||
|
||||
// cek medical plan
|
||||
$num_medical_plan = 0;
|
||||
|
||||
foreach ($request->medical_plan as $row) {
|
||||
if ($row['medical_plan_str']) {
|
||||
$num_medical_plan++;
|
||||
}
|
||||
}
|
||||
|
||||
if ($num_medical_plan == 0) {
|
||||
DB::rollBack();
|
||||
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => [
|
||||
'medical_plan' => ['medical plan harus diisi']
|
||||
],
|
||||
'data' => []
|
||||
],400);
|
||||
}
|
||||
|
||||
// insert medical plan
|
||||
foreach ($request->medical_plan as $row) {
|
||||
MedicalPlan::create([
|
||||
'claim_daily_monitoring_id' => $db_response->id,
|
||||
'plan' => $row['medical_plan_str'],
|
||||
]);
|
||||
}
|
||||
|
||||
DB::commit();
|
||||
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'message' => "success",
|
||||
'data' => []
|
||||
],200);
|
||||
}
|
||||
catch (Exception $e) {
|
||||
DB::rollBack();
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => $e->getMessage(),
|
||||
'data' => []
|
||||
],500);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add Detail Request LOG LIST
|
||||
*/
|
||||
public function AddDetailMonitoringListRequestLog(Request $request, $request_code)
|
||||
{
|
||||
$request->merge(['request_code' => $request_code]);
|
||||
|
||||
// validation rule
|
||||
$validator = Validator::make($request->all(),[
|
||||
'request_code' => 'required|exists:request_logs,code',
|
||||
'subject' => 'required',
|
||||
'submission_date' => 'required',
|
||||
'body_temperature' => 'required',
|
||||
'sistole' => 'required',
|
||||
'diastole' => 'required',
|
||||
'respiration_rate' => 'required',
|
||||
'analysis' => 'required',
|
||||
'medical_plan' => 'required',
|
||||
'non_medikamentosa_plan' => 'required',
|
||||
],$this->messages());
|
||||
|
||||
// validation error
|
||||
if ($validator->fails()) {
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => $validator->getMessageBag()
|
||||
],400);
|
||||
}
|
||||
|
||||
// get claim request
|
||||
$request_log = DB::table('request_logs')
|
||||
->select('id')
|
||||
->where('code', $request_code)
|
||||
->first();
|
||||
DB::beginTransaction();
|
||||
try {
|
||||
// insert claim daily monitoring
|
||||
$db_response = RequestDailyMonitoring::create([
|
||||
'request_log_id' => $request_log->id,
|
||||
'submission_date' => $request->submission_date,
|
||||
'subject' => $request->subject,
|
||||
'object' => $request->objective,
|
||||
'sistole' => $request->sistole,
|
||||
'diastole' => $request->diastole,
|
||||
'body_temperature' => $request->body_temperature,
|
||||
'respiration_rate' => $request->respiration_rate,
|
||||
'analysis' => $request->analysis,
|
||||
'lab_date' => $request->lab_date,
|
||||
'provider' => $request->provider,
|
||||
'examination' => $request->examination,
|
||||
'created_by' => auth()->user()->id,
|
||||
]);
|
||||
|
||||
|
||||
// cek medical plan
|
||||
$num_medical_plan = 0;
|
||||
foreach ($request->medical_plan as $row) {
|
||||
if ($row['medical_plan_str']) {
|
||||
$num_medical_plan++;
|
||||
}
|
||||
}
|
||||
|
||||
if ($num_medical_plan == 0) {
|
||||
DB::rollBack();
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => [
|
||||
'medical_plan' => ['medical plan harus diisi']
|
||||
],
|
||||
'data' => []
|
||||
],400);
|
||||
}
|
||||
|
||||
// insert medical plan
|
||||
foreach ($request->medical_plan as $row) {
|
||||
DB::table('request_log_medical_plan')->insert([
|
||||
'request_log_daily_monitoring_id' => $db_response->id,
|
||||
'plan' => $row['medical_plan_str'],
|
||||
'type' => 1,
|
||||
'created_at' => date('Y-m-d'),
|
||||
]);
|
||||
}
|
||||
|
||||
// insert non medical plan
|
||||
foreach ($request->non_medikamentosa_plan as $row) {
|
||||
DB::table('request_log_medical_plan')->insert([
|
||||
'request_log_daily_monitoring_id' => $db_response->id,
|
||||
'plan' => $row['non_medikamentosa_plan_str'],
|
||||
'type' => 2,
|
||||
'created_at' => date('Y-m-d'),
|
||||
]);
|
||||
}
|
||||
|
||||
// insert file result
|
||||
if ($request->confirmation_medical_leter){
|
||||
foreach ($request->confirmation_medical_leter as $file) {
|
||||
$fileData = File::storeFile('confirmation-medical-letter', $db_response->id, $file);
|
||||
File::create([
|
||||
'fileable_type' => 'App\Models\LaboratoriumResult',
|
||||
'fileable_id' => $db_response->id,
|
||||
'type' => 'confirmation-medical-letter',
|
||||
'name' => $fileData['name'],
|
||||
'original_name' => $orignalName,
|
||||
'extension' => $file->getClientOriginalName(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $fileData['path'],
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
|
||||
}
|
||||
}
|
||||
if ($request->medical_action_letter){
|
||||
foreach ($request->medical_action_letter as $file) {
|
||||
$fileData = File::storeFile('medical-action-letter', $db_response->id, $file);
|
||||
File::create([
|
||||
'fileable_type' => 'App\Models\LaboratoriumResult',
|
||||
'fileable_id' => $db_response->id,
|
||||
'type' => 'medical-action-letter',
|
||||
'name' => $fileData['name'],
|
||||
'original_name' => $orignalName,
|
||||
'extension' => $file->getClientOriginalName(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $fileData['path'],
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
|
||||
// $file->storeAs($this->path_for_store, $fileName);
|
||||
}
|
||||
}
|
||||
if ($request->result){
|
||||
foreach ($request->result as $file) {
|
||||
$fileData = File::storeFile('laboratorium-result', $db_response->id, $file);
|
||||
File::create([
|
||||
'fileable_type' => 'App\Models\LaboratoriumResult',
|
||||
'fileable_id' => $db_response->id,
|
||||
'type' => 'laboratorium-result',
|
||||
'name' => $fileData['name'],
|
||||
'original_name' => $orignalName,
|
||||
'extension' => $file->getClientOriginalName(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $fileData['path'],
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
|
||||
// $file->storeAs($this->path_for_store, $fileName);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DB::commit();
|
||||
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'message' => "success",
|
||||
'data' => []
|
||||
],200);
|
||||
}
|
||||
catch (Exception $e) {
|
||||
DB::rollBack();
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => $e->getMessage(),
|
||||
'data' => []
|
||||
],500);
|
||||
}
|
||||
}
|
||||
|
||||
public function AddListRequestLog(Request $request)
|
||||
{
|
||||
// validation rule
|
||||
$validator = Validator::make($request->all(),[
|
||||
'log_code' => 'required|exists:request_logs,id',
|
||||
'subject' => 'required',
|
||||
'submission_date' => 'required',
|
||||
'body_temperature' => 'required',
|
||||
'sistole' => 'required',
|
||||
'diastole' => 'required',
|
||||
'respiration_rate' => 'required',
|
||||
'analysis' => 'required',
|
||||
'medical_plan' => 'required',
|
||||
'non_medikamentosa_plan' => 'required',
|
||||
],$this->messages());
|
||||
|
||||
// validation error
|
||||
if ($validator->fails()) {
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => $validator->getMessageBag()
|
||||
],400);
|
||||
}
|
||||
|
||||
// get claim request
|
||||
$request_log = DB::table('request_logs')
|
||||
->select('id')
|
||||
->where('id', $request->log_code)
|
||||
->first();
|
||||
DB::beginTransaction();
|
||||
try {
|
||||
// insert claim daily monitoring
|
||||
$db_response = RequestDailyMonitoring::create([
|
||||
'request_log_id' => $request->log_code,
|
||||
'submission_date' => $request->submission_date,
|
||||
'doctor_1' => $request->doctor_1,
|
||||
'doctor_2' => $request->doctor_2,
|
||||
'temp_diagnosis' => $request->temp_diagnosis,
|
||||
'final_diagnosis' => $request->final_diagnosis,
|
||||
'approval_pendamping' => $request->approval_pendamping,
|
||||
'description' => $request->keterangan,
|
||||
'note' => $request->catatan,
|
||||
'subject' => $request->subject,
|
||||
'object' => $request->objective,
|
||||
'sistole' => $request->sistole,
|
||||
'diastole' => $request->diastole,
|
||||
'body_temperature' => $request->body_temperature,
|
||||
'respiration_rate' => $request->respiration_rate,
|
||||
'analysis' => $request->analysis,
|
||||
'lab_date' => $request->lab_date,
|
||||
'provider' => $request->provider,
|
||||
'examination' => $request->examination,
|
||||
'created_by' => auth()->user()->id,
|
||||
]);
|
||||
|
||||
|
||||
// cek medical plan
|
||||
$num_medical_plan = 0;
|
||||
foreach ($request->medical_plan as $row) {
|
||||
if ($row['medical_plan_str']) {
|
||||
$num_medical_plan++;
|
||||
}
|
||||
}
|
||||
|
||||
if ($num_medical_plan == 0) {
|
||||
DB::rollBack();
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => [
|
||||
'medical_plan' => ['medical plan harus diisi']
|
||||
],
|
||||
'data' => []
|
||||
],400);
|
||||
}
|
||||
|
||||
// insert medical plan
|
||||
foreach ($request->medical_plan as $row) {
|
||||
DB::table('request_log_medical_plan')->insert([
|
||||
'request_log_daily_monitoring_id' => $db_response->id,
|
||||
'plan' => $row['medical_plan_str'],
|
||||
'type' => 1,
|
||||
'created_at' => date('Y-m-d'),
|
||||
]);
|
||||
}
|
||||
|
||||
// insert non medical plan
|
||||
foreach ($request->non_medikamentosa_plan as $row) {
|
||||
DB::table('request_log_medical_plan')->insert([
|
||||
'request_log_daily_monitoring_id' => $db_response->id,
|
||||
'plan' => $row['non_medikamentosa_plan_str'],
|
||||
'type' => 2,
|
||||
'created_at' => date('Y-m-d'),
|
||||
]);
|
||||
}
|
||||
|
||||
// insert file result
|
||||
if ($request->confirmation_medical_leter){
|
||||
foreach ($request->confirmation_medical_leter as $file) {
|
||||
$fileData = File::storeFile('confirmation-medical-letter', $db_response->id, $file);
|
||||
File::create([
|
||||
'fileable_type' => 'App\Models\LaboratoriumResult',
|
||||
'fileable_id' => $db_response->id,
|
||||
'type' => 'confirmation-medical-letter',
|
||||
'name' => $fileData['name'],
|
||||
'original_name' => $orignalName,
|
||||
'extension' => $file->getClientOriginalName(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $fileData['path'],
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
|
||||
}
|
||||
}
|
||||
if ($request->medical_action_letter){
|
||||
foreach ($request->medical_action_letter as $file) {
|
||||
$fileData = File::storeFile('medical-action-letter', $db_response->id, $file);
|
||||
File::create([
|
||||
'fileable_type' => 'App\Models\LaboratoriumResult',
|
||||
'fileable_id' => $db_response->id,
|
||||
'type' => 'medical-action-letter',
|
||||
'name' => $fileData['name'],
|
||||
'original_name' => $orignalName,
|
||||
'extension' => $file->getClientOriginalName(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $fileData['path'],
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
|
||||
// $file->storeAs($this->path_for_store, $fileName);
|
||||
}
|
||||
}
|
||||
if ($request->result){
|
||||
foreach ($request->result as $file) {
|
||||
$fileData = File::storeFile('laboratorium-result', $db_response->id, $file);
|
||||
File::create([
|
||||
'fileable_type' => 'App\Models\LaboratoriumResult',
|
||||
'fileable_id' => $db_response->id,
|
||||
'type' => 'laboratorium-result',
|
||||
'name' => $fileData['name'],
|
||||
'original_name' => $orignalName,
|
||||
'extension' => $file->getClientOriginalName(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $fileData['path'],
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
|
||||
]);
|
||||
|
||||
// $file->storeAs($this->path_for_store, $fileName);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DB::commit();
|
||||
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'message' => "success",
|
||||
'data' => []
|
||||
],200);
|
||||
}
|
||||
catch (Exception $e) {
|
||||
DB::rollBack();
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => $e->getMessage(),
|
||||
'data' => []
|
||||
],500);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete Listing Daily Monitoring
|
||||
*/
|
||||
public function deleteDetailMonitoringListRequestLog(Request $request, $id)
|
||||
{
|
||||
$listDailyMonitoring = RequestDailyMonitoring::find($id);
|
||||
$listDailyMonitoring->reason = $request->reason;
|
||||
$listDailyMonitoring->save();
|
||||
|
||||
if (!$listDailyMonitoring) {
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => "Data not found.",
|
||||
], 404);
|
||||
}
|
||||
|
||||
$listDailyMonitoring->delete();
|
||||
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'message' => "Delete success",
|
||||
'data' => $listDailyMonitoring
|
||||
], 200);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete File Daily Monitoring
|
||||
*/
|
||||
public function deleteFileDetailMonitoringListRequestLog(Request $request, $id){
|
||||
$fileCurrent = File::where([
|
||||
'id' => $id,
|
||||
])->first();
|
||||
if ($fileCurrent){
|
||||
if (Files::exists($fileCurrent->path)) {
|
||||
Files::delete();
|
||||
}
|
||||
$fileCurrent->deleted_at = now();
|
||||
$fileCurrent->reason = $request->reason;
|
||||
$fileCurrent->deleted_by = auth()->user()->id;
|
||||
$fileCurrent->save();
|
||||
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'message' => "Delete success",
|
||||
'data' => $fileCurrent
|
||||
], 200);
|
||||
} else {
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => "Data not found.",
|
||||
], 404);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update Status Request LOG
|
||||
*/
|
||||
public function UpdateListRequestLog(Request $request, $request_code)
|
||||
{
|
||||
// get claim request
|
||||
$request_log = DB::table('request_logs')
|
||||
->where('code', $request_code)
|
||||
->update([
|
||||
'discharge_date' => now(),
|
||||
'updated_by' => auth()->user()->id,
|
||||
'updated_at' => now()
|
||||
]);
|
||||
if ($request_log) {
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'message' => "success",
|
||||
'data' => []
|
||||
], 200);
|
||||
} else {
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => $e->getMessage(),
|
||||
'data' => []
|
||||
],500);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,68 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Http\Controllers\Api;
|
||||
|
||||
use App\Models\Person;
|
||||
use App\Models\Member;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
|
||||
class DataController extends Controller
|
||||
{
|
||||
public function show($id)
|
||||
{
|
||||
try {
|
||||
$data = Person::findOrFail($id);
|
||||
return response()->json($data);
|
||||
} catch (\Exception $e) {
|
||||
return response()->json(['error' => 'Member not found'], 404);
|
||||
}
|
||||
}
|
||||
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
try {
|
||||
$data = Person::findOrFail($id);
|
||||
$data->update($request->all());
|
||||
|
||||
return response()->json(['message' => 'Data updated successfully']);
|
||||
} catch (\Exception $e) {
|
||||
return response()->json(['error' => 'Failed to update data'], 500);
|
||||
}
|
||||
}
|
||||
|
||||
public function updateFamily(Request $request)
|
||||
{
|
||||
try {
|
||||
// Ambil data keluarga dari payload
|
||||
$familyData = $request->json()->all();
|
||||
|
||||
// Loop melalui data keluarga
|
||||
foreach ($familyData as $familyMember) {
|
||||
// Ambil ID anggota keluarga dari payload
|
||||
$person_id = $familyMember['person_id'];
|
||||
|
||||
// Perbarui data anggota keluarga sesuai dengan payload
|
||||
Member::where('person_id', $person_id)->update([
|
||||
'name' => $familyMember['name'],
|
||||
'email' => $familyMember['email'],
|
||||
'relation_with_principal' => $familyMember['relation_with_principal'],
|
||||
'birth_date' => $familyMember['birth_date'],
|
||||
]);
|
||||
|
||||
Person::where('id', $person_id)->update([
|
||||
'name' => $familyMember['name'],
|
||||
'email' => $familyMember['email'],
|
||||
'phone' => $familyMember['phone'],
|
||||
'birth_date' => $familyMember['birth_date']
|
||||
]);
|
||||
}
|
||||
|
||||
// Respon sukses jika pembaruan berhasil
|
||||
return response()->json([$person_id => 'Data keluarga berhasil diperbarui'], 200);
|
||||
} catch (\Exception $e) {
|
||||
// Tangani kesalahan jika ada yang terjadi
|
||||
return response()->json(['error' => 'Gagal memperbarui data keluarga: ' . $e->getMessage()], 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,93 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Http\Controllers\Api;
|
||||
|
||||
use App\Models\Member;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
|
||||
class MemberController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
return Member::query()
|
||||
->when($request->search, function ($query, $search) {
|
||||
return $query->where('name', 'LIKE', '%' . $search . '%')
|
||||
->orWhere('member_id', 'LIKE', '%' . $search . '%');
|
||||
})
|
||||
->with('currentPlan', 'currentCorporate')
|
||||
->paginate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view('internal::create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
* @param Request $request
|
||||
* @return Renderable
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the specified resource.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
return view('internal::show');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function edit($id)
|
||||
{
|
||||
return view('internal::edit');
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
* @param Request $request
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
public function benefits($member_id)
|
||||
{
|
||||
$member = Member::findOrFail($member_id);
|
||||
|
||||
return response()->json($member->currentPlan->benefits()->select(['description', 'code', 'id'])->get());
|
||||
}
|
||||
}
|
||||
37
Modules/Client/Http/Controllers/Api/TopUpController.php
Executable file → Normal file
37
Modules/Client/Http/Controllers/Api/TopUpController.php
Executable file → Normal file
@@ -3,7 +3,6 @@
|
||||
namespace Modules\Client\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\CorporatePolicy;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
@@ -20,7 +19,7 @@ class TopUpController extends Controller
|
||||
{
|
||||
$data = Auth::user()
|
||||
->managedCorporates()
|
||||
->with(['currentPolicy'])
|
||||
->with(['currentPolicy', 'employees'])
|
||||
->withCount(['employees', 'claims' => function ($query) {
|
||||
$query->where('claims.status', 'paid');
|
||||
}])
|
||||
@@ -34,22 +33,9 @@ class TopUpController extends Controller
|
||||
* @param Request $request
|
||||
* @return Renderable
|
||||
*/
|
||||
public function store(Request $request, $corporate_id)
|
||||
public function store(Request $request)
|
||||
{
|
||||
|
||||
$data = $request->validate([
|
||||
'topup' => 'required|numeric',
|
||||
]);
|
||||
|
||||
$corporatePolicy = CorporatePolicy::query()->where('corporate_id', $corporate_id)->firstOrFail();
|
||||
if (!$corporatePolicy) {
|
||||
return response()->json(['message' => 'Corporate policy not found'], 404);
|
||||
}
|
||||
|
||||
$corporatePolicy->total_premi += $data['topup'];
|
||||
$corporatePolicy->save();
|
||||
|
||||
return response()->json(['message' => 'Amount added to total_premi successfully'], 200);
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -62,23 +48,6 @@ class TopUpController extends Controller
|
||||
return view('client::show');
|
||||
}
|
||||
|
||||
public function get($corporate_id)
|
||||
{
|
||||
$data = CorporatePolicy::query()
|
||||
->where('corporate_id', $corporate_id)
|
||||
->with(['currentPolicy', 'employees'])
|
||||
->withCount(['employees', 'claims' => function ($query) {
|
||||
$query->where('claims.status', 'paid');
|
||||
}])
|
||||
->first();
|
||||
|
||||
if (!$data) {
|
||||
return response()->json(['message' => 'Corporate policy not found'], 404);
|
||||
}
|
||||
|
||||
return Helper::responseJson(TopUpLimitResources::make($data));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
* @param Request $request
|
||||
|
||||
0
Modules/Client/Http/Controllers/Api/UserController.php
Executable file → Normal file
0
Modules/Client/Http/Controllers/Api/UserController.php
Executable file → Normal file
0
Modules/Client/Http/Controllers/ClientController.php
Executable file → Normal file
0
Modules/Client/Http/Controllers/ClientController.php
Executable file → Normal file
0
Modules/Client/Http/Middleware/.gitkeep
Executable file → Normal file
0
Modules/Client/Http/Middleware/.gitkeep
Executable file → Normal file
0
Modules/Client/Http/Requests/.gitkeep
Executable file → Normal file
0
Modules/Client/Http/Requests/.gitkeep
Executable file → Normal file
0
Modules/Client/Providers/.gitkeep
Executable file → Normal file
0
Modules/Client/Providers/.gitkeep
Executable file → Normal file
0
Modules/Client/Providers/ClientServiceProvider.php
Executable file → Normal file
0
Modules/Client/Providers/ClientServiceProvider.php
Executable file → Normal file
0
Modules/Client/Providers/RouteServiceProvider.php
Executable file → Normal file
0
Modules/Client/Providers/RouteServiceProvider.php
Executable file → Normal file
0
Modules/Client/Resources/assets/.gitkeep
Executable file → Normal file
0
Modules/Client/Resources/assets/.gitkeep
Executable file → Normal file
0
Modules/Client/Resources/assets/js/app.js
Executable file → Normal file
0
Modules/Client/Resources/assets/js/app.js
Executable file → Normal file
0
Modules/Client/Resources/assets/sass/app.scss
Executable file → Normal file
0
Modules/Client/Resources/assets/sass/app.scss
Executable file → Normal file
0
Modules/Client/Resources/lang/.gitkeep
Executable file → Normal file
0
Modules/Client/Resources/lang/.gitkeep
Executable file → Normal file
0
Modules/Client/Resources/views/.gitkeep
Executable file → Normal file
0
Modules/Client/Resources/views/.gitkeep
Executable file → Normal file
0
Modules/Client/Resources/views/index.blade.php
Executable file → Normal file
0
Modules/Client/Resources/views/index.blade.php
Executable file → Normal file
0
Modules/Client/Resources/views/layouts/master.blade.php
Executable file → Normal file
0
Modules/Client/Resources/views/layouts/master.blade.php
Executable file → Normal file
0
Modules/Client/Routes/.gitkeep
Executable file → Normal file
0
Modules/Client/Routes/.gitkeep
Executable file → Normal file
91
Modules/Client/Routes/api.php
Executable file → Normal file
91
Modules/Client/Routes/api.php
Executable file → Normal file
@@ -1,29 +1,13 @@
|
||||
<?php
|
||||
|
||||
use Modules\Client\Http\Controllers\Api\AuthController;
|
||||
use Modules\Client\Http\Controllers\Api\BillingSummaryController;
|
||||
use Modules\Client\Http\Controllers\Api\CorporateDivisionController;
|
||||
use Modules\Client\Http\Controllers\Api\CorporateManageController;
|
||||
use Modules\Client\Http\Controllers\Api\CorporateMemberController;
|
||||
use Modules\Client\Http\Controllers\Api\CorporateCurrentController;
|
||||
use Modules\Client\Http\Controllers\Api\MemberController;
|
||||
use Modules\Client\Http\Controllers\Api\CorporatePolicyController;
|
||||
use Modules\Client\Http\Controllers\Api\UserController;
|
||||
use Modules\Client\Http\Controllers\Api\ClaimController;
|
||||
use Modules\Client\Http\Controllers\Api\TopUpController;
|
||||
use Modules\Internal\Http\Controllers\ClaimEncounterController;
|
||||
use Modules\Client\Http\Controllers\Api\ClaimReportController;
|
||||
use Modules\Client\Http\Controllers\Api\ClaimRequestController;
|
||||
use Modules\Client\Http\Controllers\Api\DataController;
|
||||
use Modules\Internal\Http\Controllers\Api\FormulariumController;
|
||||
use Modules\Internal\Http\Controllers\Api\FormulariumTemplateController;
|
||||
use Modules\Internal\Http\Controllers\Api\AuditTrailController;
|
||||
use Modules\Internal\Http\Controllers\Api\CorporateController;
|
||||
use Modules\Internal\Http\Controllers\Api\NavigationController;
|
||||
use Modules\Client\Http\Controllers\Api\DailyMonitoringController;
|
||||
use Modules\Internal\Http\Controllers\Api\RequestLogController;
|
||||
|
||||
use Modules\Internal\Http\Controllers\Api\UserManagementController;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
@@ -38,8 +22,6 @@ use Modules\Internal\Http\Controllers\Api\UserManagementController;
|
||||
|
||||
Route::prefix('client')->group(function () {
|
||||
|
||||
Route::get('codeLog', [RequestLogController::class, 'codeLog']);
|
||||
|
||||
Route::controller(AuthController::class)->group(function () {
|
||||
Route::post('login', 'login');
|
||||
Route::post('verify-code', 'validateOtp');
|
||||
@@ -48,90 +30,19 @@ Route::prefix('client')->group(function () {
|
||||
Route::middleware('auth:sanctum')->group(function () {
|
||||
Route::post('logout', [AuthController::class, 'logout'])->name('logout');
|
||||
Route::get('user', [UserController::class, 'index']);
|
||||
Route::get('data/{id}', [DataController::class, 'show']);
|
||||
Route::put('data/{id}', [DataController::class, 'update']);
|
||||
Route::post('update-family', [DataController::class, 'updateFamily']);
|
||||
|
||||
Route::get('corporate-manage', [CorporateManageController::class, 'index']);
|
||||
Route::get('corporate-manage/{corporate_id}', [CorporateManageController::class, 'show']);
|
||||
Route::prefix('{corporate_id}')->group(function () {
|
||||
Route::post('search-member', [MemberController::class, 'index']);
|
||||
Route::get('policy', [CorporatePolicyController::class, 'index']);
|
||||
Route::get('division', [CorporateDivisionController::class, 'index']);
|
||||
Route::get('members', [CorporateMemberController::class, 'index']);
|
||||
Route::get('members/{id}', [CorporateMemberController::class, 'show']);
|
||||
Route::get('export-members/list', [CorporateMemberController::class, 'generateMemberList']);
|
||||
Route::get('alarm-center-members/{id}', [CorporateMemberController::class, 'showPerMember']);
|
||||
Route::get('service-monitoring/{request_log_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/exportAlrmCenter/{start}/{end}', [ClaimController::class, 'exportAlrmCenter']);
|
||||
Route::get('claims/{claim_id}/encounters', [ClaimEncounterController::class, 'getEncounterData']);
|
||||
|
||||
Route::get('topup', [TopUpController::class, 'index']);
|
||||
// Route::get('topup', [TopUpController::class, 'get']);
|
||||
Route::post('topup', [TopUpController::class, 'store']);
|
||||
Route::get('claim-report/claim-status', [ClaimReportController::class, 'claimStatus']);
|
||||
Route::get('claim-report/detail/{id}', [ClaimReportController::class, 'claimDetail']);
|
||||
Route::get('claim-report/detail-history/{id}', [ClaimReportController::class, 'claimDetailHistory']);
|
||||
Route::post('claim-report/{id}/request-files', [ClaimReportController::class, 'requestFiles']);
|
||||
|
||||
Route::get('corporate', [CorporateCurrentController::class, 'index']);
|
||||
Route::put('corporate-update', [CorporateCurrentController::class, 'update']);
|
||||
Route::get('get-deposits', [CorporateMemberController::class, 'getDeposit']);
|
||||
Route::get('billing/summary', [BillingSummaryController::class, 'index']);
|
||||
Route::get('/billing/provider-summary', [BillingSummaryController::class, 'providerSummary']);
|
||||
Route::get('/billing/top-diagnosis', [BillingSummaryController::class, 'topDiagnosis']);
|
||||
|
||||
Route::get('get-limits/{member_id}', [CorporateMemberController::class, 'getLimits']);
|
||||
|
||||
Route::get('download-ecard/{member_id}', [CorporateMemberController::class, 'downloadEcard']);
|
||||
Route::get('view_card/{member_id}', [CorporateMemberController::class, 'viewECard']);
|
||||
});
|
||||
|
||||
Route::get('memberlist', [DailyMonitoringController::class, 'GetMemberList']);
|
||||
|
||||
// Daily Monitoring
|
||||
Route::prefix('daily_monitoring')->group(function () {
|
||||
Route::get('detail/{claim_code}/list', [DailyMonitoringController::class, 'GetDetailMonitoringList']);
|
||||
Route::get('detail/{id}/edit', [DailyMonitoringController::class, 'GetDetailMonitoringListbyID']);
|
||||
});
|
||||
|
||||
Route::get('claims/{id}', [ClaimController::class, 'show']);
|
||||
|
||||
Route::post('claim-requests', [ClaimRequestController::class, 'store'])->name('claim-requests.store');
|
||||
Route::post('claim-requests/{id}', [ClaimRequestController::class, 'show'])->name('claim-requests.show');
|
||||
|
||||
Route::get('master/formulariums/{formulariums_template_id}', [FormulariumController::class, 'index']);
|
||||
Route::post('master/formulariums/{formulariums_template_id}', [FormulariumController::class, 'store']);
|
||||
Route::post('master/formulariums/{formulariums_template_id}/import', [FormulariumController::class, 'import']);
|
||||
Route::get('master/formulariums/{formulariums_template_id}/list', [FormulariumController::class, 'generateFormulariumList']);
|
||||
|
||||
Route::get('master/formularium-template', [FormulariumTemplateController::class, 'index']);
|
||||
Route::get('master/formularium-template/search', [FormulariumTemplateController::class, 'search']);
|
||||
Route::post('master/formularium-template/store', [FormulariumTemplateController::class, 'store']);
|
||||
Route::put('master/formularium-template/{id}/activation', [FormulariumTemplateController::class, 'activation']);
|
||||
Route::get('master/formularium-template/{id}/edit', [FormulariumTemplateController::class, 'edit']);
|
||||
Route::put('master/formularium-template/{id}/update', [FormulariumTemplateController::class, 'update']);
|
||||
|
||||
Route::get('audittrail/{corporate_id}', [AuditTrailController::class, 'index']);
|
||||
Route::get('corporates/import-document-example/{document_type}', [CorporateController::class, 'importDocumentExample']);
|
||||
|
||||
// Navigation
|
||||
Route::get('navigations', [NavigationController::class, 'index']);
|
||||
|
||||
// User Management Role
|
||||
Route::get('user/role', [UserManagementController::class, 'index']);
|
||||
Route::post('user/role', [UserManagementController::class, 'store']);
|
||||
Route::get('user/role/{id}', [UserManagementController::class, 'edit']);
|
||||
Route::put('user/role/{id}', [UserManagementController::class, 'update']);
|
||||
Route::get('permission_list', [UserManagementController::class, 'permission_list']);
|
||||
|
||||
// User Role Access
|
||||
Route::get('user/access', [UserManagementController::class, 'list_access']);
|
||||
Route::post('user/access', [UserManagementController::class, 'store_access']);
|
||||
Route::get('user/access/{id}', [UserManagementController::class, 'edit_access']);
|
||||
Route::put('user/access/{id}', [UserManagementController::class, 'update_access']);
|
||||
Route::get('role-list', [UserManagementController::class, 'list_role']);
|
||||
});
|
||||
});
|
||||
|
||||
0
Modules/Client/Routes/web.php
Executable file → Normal file
0
Modules/Client/Routes/web.php
Executable file → Normal file
0
Modules/Client/Tests/Feature/.gitkeep
Executable file → Normal file
0
Modules/Client/Tests/Feature/.gitkeep
Executable file → Normal file
0
Modules/Client/Tests/Unit/.gitkeep
Executable file → Normal file
0
Modules/Client/Tests/Unit/.gitkeep
Executable file → Normal file
@@ -1,54 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Transformers\AlarmCenter;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use App\Models\Service;
|
||||
use App\Models\Organization;
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class DataListClaimMemberResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
$filesGroupByType = $this->files->mapToGroups(function($file) {
|
||||
return [Str::slug($file->type, '_') => $file];
|
||||
});
|
||||
$serviceData = Service::where('code', $this->service_code)->first();
|
||||
$organization = Organization::where('id', $this->organization_id)->first();
|
||||
$organizationName = '-';
|
||||
if ($organization){
|
||||
$organizationName = $organization->name;
|
||||
}
|
||||
if ($serviceData) {
|
||||
$serviceName = $serviceData->name;
|
||||
} else {
|
||||
$serviceName = $this->service_code;
|
||||
}
|
||||
|
||||
if ($this->status == 'approved' && $this->status_final_log ){
|
||||
$status = 'Done';
|
||||
} else if ($this->status == 'declined' || $this->status_final_log == 'declined') {
|
||||
$status = 'Declined';
|
||||
} else {
|
||||
$status = 'Ongoing';
|
||||
}
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'admission_date' => $this->submission_date ?? null,
|
||||
'discharge_date' => $this->discharge_date ?? null,
|
||||
'code' => $this->code ?? null,
|
||||
'provider_name' => $organizationName ?? null,
|
||||
'service_type' => $serviceName,
|
||||
'status' => $status,
|
||||
'files_by_type' => $filesGroupByType
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,264 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Transformers\AlarmCenter;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use Illuminate\Support\Carbon;
|
||||
use App\Models\Icd;
|
||||
use DB;
|
||||
|
||||
class DataServiceMonitoring extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
$files = [];
|
||||
$filesFinalLogResult = [];
|
||||
$filesFinalLogDiagnosis = [];
|
||||
$filesFinalLogKondisi = [];
|
||||
if (count($this->files)>0){
|
||||
foreach ($this->files as $key => $value) {
|
||||
/*
|
||||
Sementara di buat satu dulu, jangan di hapus..
|
||||
karena suka labil client nya, tiba2 hide tiba2 munculin fitur :D
|
||||
*/
|
||||
|
||||
// if($value->type == 'final-log-result'){
|
||||
array_push($filesFinalLogResult, $value);
|
||||
// };
|
||||
|
||||
// if($value->type == 'final-log-diagnosis'){
|
||||
// array_push($filesFinalLogDiagnosis, $value);
|
||||
// }
|
||||
|
||||
// if($value->type == 'final-log-kondisi'){
|
||||
// array_push($filesFinalLogKondisi, $value);
|
||||
// }
|
||||
}
|
||||
|
||||
$files = [
|
||||
'result' => $filesFinalLogResult,
|
||||
'diagnosis' => $filesFinalLogDiagnosis,
|
||||
'kondisi' => $filesFinalLogKondisi,
|
||||
|
||||
];
|
||||
} else {
|
||||
$files = [
|
||||
'result' => [],
|
||||
'diagnosis' => [],
|
||||
'kondisi' => [],
|
||||
|
||||
];
|
||||
}
|
||||
|
||||
$diagnosis = '-';
|
||||
$main_diagnosis = '-';
|
||||
if ($this->diagnosis){
|
||||
$diagnosis = explode(',', $this->diagnosis);
|
||||
if (count($diagnosis)>0){
|
||||
|
||||
foreach($diagnosis as $key => $d){
|
||||
$icd = Icd::where('code', $d)->first('name');
|
||||
if($key == 0){
|
||||
if ($icd){
|
||||
$main_diagnosis = $icd->name;
|
||||
} else {
|
||||
$main_diagnosis = $d;
|
||||
}
|
||||
$diagnosis = '-';
|
||||
}
|
||||
|
||||
if ($key > 0){
|
||||
if ($icd) {
|
||||
$diagnosis .= $icd->name . ', ';
|
||||
} else {
|
||||
$diagnosis .= $d .', ';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return [
|
||||
'companyName' => $this->member->currentCorporate->name ?? null,
|
||||
'serviceCode' => $this->service_code ?? null,
|
||||
'member_id' => $this->member->id ?? null,
|
||||
'memberId' => $this->member->member_id ?? null,
|
||||
'fullName' => $this->member->full_name ?? null,
|
||||
'dateOfBirth' => $this->member->birth_date ?? null,
|
||||
'phoneNumber' => $this->person->phone ?? null,
|
||||
'email' => $this->member->email ?? ($this->member->person->email ?? null),
|
||||
'serviceName' => $this->service->name ?? ($this->service_code ?? null),
|
||||
'files' => $files,
|
||||
'mainDiagnose' => $main_diagnosis,
|
||||
'comparativeDiagnosis' => $diagnosis,
|
||||
'benefits' => collect($this->requestLogBenefits)->map(function ($requestLogBenefit) {
|
||||
return [
|
||||
'amountIncurred' => $requestLogBenefit->amount_incurred,
|
||||
'amountApproved' => $requestLogBenefit->amount_approved,
|
||||
'amountNotAprroved' => $requestLogBenefit->amount_not_approved,
|
||||
'excessPaid' => $requestLogBenefit->excess_paid,
|
||||
'description' => $requestLogBenefit->keterangan,
|
||||
'name' => $requestLogBenefit->benefit->description,
|
||||
];
|
||||
})->all() ?? null,
|
||||
'keterangan' => $this->keterangan ?? null,
|
||||
'catatan' => $this->catatan ?? null,
|
||||
'benefitTotal' => $this->benefitTotal ?? null,
|
||||
'hospital' => $this->organization->name ?? null,
|
||||
'admissionDate' => $this->submission_date ?? null,
|
||||
'dischargeDate' => $this->discharge_date ?? null,
|
||||
'dailyMonitorings' => $this->when($this->service_code === 'IP', collect($this->requestLogDailyMonitorings)
|
||||
->groupBy(function ($requestLogDailyMonitoring) {
|
||||
return Carbon::parse($requestLogDailyMonitoring->submission_date)->format('d M Y');
|
||||
})
|
||||
->map(function ($groupedItems) {
|
||||
return collect($groupedItems)
|
||||
->map(function ($requestLogDailyMonitoring) {
|
||||
$arr_document = [];
|
||||
$document = DB::table('files')
|
||||
->where([
|
||||
'fileable_type' => 'App\Models\LaboratoriumResult',
|
||||
'fileable_id' => $requestLogDailyMonitoring->id,
|
||||
'deleted_at' => null
|
||||
])
|
||||
->whereIn('type', ['medical-action-letter', 'confirmation-medical-letter'])
|
||||
->get();
|
||||
if ($document){
|
||||
foreach($document as $d){
|
||||
// Jika path kosong, kembalikan null
|
||||
if (!$row->path) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Cek nilai 'source'. Jika 's3', gunakan disk S3.
|
||||
// Selain itu (termasuk null atau 'local'), gunakan disk 'public'.
|
||||
if ($row->source === 's3') {
|
||||
try {
|
||||
$path = Storage::disk('s3')->temporaryUrl(
|
||||
$row->path,
|
||||
now()->addMinutes(60) // expired 1 jam
|
||||
);
|
||||
} catch (\Exception $e) {
|
||||
$path = Storage::disk('s3')->url($row->path); // fallback kalau public
|
||||
}
|
||||
} else {
|
||||
$path = Storage::disk('public')->url($row->path);
|
||||
}
|
||||
$arr_document[]= [
|
||||
'path' => $path,
|
||||
'type' => $d->type,
|
||||
'original_name' => $d->original_name,
|
||||
'name' => $d->name,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return [
|
||||
'time' => Carbon::parse($requestLogDailyMonitoring->submission_date)->format('H:i') ?? null,
|
||||
'status' => 'Done' ?? null,
|
||||
'subject' => $requestLogDailyMonitoring->subject ?? null,
|
||||
'object' => $requestLogDailyMonitoring->object ?? null,
|
||||
'bodyTemperature' => $requestLogDailyMonitoring->body_temperature ?? null,
|
||||
'sistole' => $requestLogDailyMonitoring->sistole ?? null,
|
||||
'diastole' => $requestLogDailyMonitoring->diastole ?? null,
|
||||
'respirationRate' => $requestLogDailyMonitoring->respiration_rate ?? null,
|
||||
'analysis' => $requestLogDailyMonitoring->analysis ?? null,
|
||||
'complaints' => $requestLogDailyMonitoring->complaints ?? null,
|
||||
'plans' => $this->when($requestLogDailyMonitoring->requestLogMedicalPlans, collect($requestLogDailyMonitoring->requestLogMedicalPlans)
|
||||
->map(function ($requestLogMedicalPlan) {
|
||||
return [
|
||||
'type' => $requestLogMedicalPlan->type,
|
||||
'plan' => $requestLogMedicalPlan->plan
|
||||
];
|
||||
})
|
||||
->sortBy('type')
|
||||
->all()) ?? null,
|
||||
'files' => $arr_document
|
||||
];
|
||||
})
|
||||
->sortByDesc(function ($item) {
|
||||
return $item['time'];
|
||||
})
|
||||
->values();
|
||||
})
|
||||
->sortByDesc(function ($groupedItems, $date) {
|
||||
return Carbon::createFromFormat('d M Y', $date)->format('Y-m-d');
|
||||
})
|
||||
->all()) ?? null,
|
||||
'laboratoriumResults' => $this->when($this->service_code === 'IP', collect($this->requestLogDailyMonitorings)
|
||||
->groupBy(function ($requestLogDailyMonitoring) {
|
||||
return Carbon::parse($requestLogDailyMonitoring->lab_date)->format('d M Y');
|
||||
})
|
||||
->filter(function ($groupedItems) {
|
||||
return !is_null($groupedItems->first()->lab_date);
|
||||
})
|
||||
->map(function ($groupedItems) {
|
||||
return collect($groupedItems)
|
||||
|
||||
->map(function ($test) {
|
||||
$arr_document = [];
|
||||
$document = DB::table('files')
|
||||
->where([
|
||||
'fileable_type' => 'App\Models\LaboratoriumResult',
|
||||
'fileable_id' => $test->id,
|
||||
'deleted_at' => null
|
||||
])
|
||||
->whereIn('type', ['laboratorium-result'])
|
||||
->get();
|
||||
if ($document){
|
||||
foreach($document as $d){
|
||||
// Jika path kosong, kembalikan null
|
||||
if (!$row->path) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Cek nilai 'source'. Jika 's3', gunakan disk S3.
|
||||
// Selain itu (termasuk null atau 'local'), gunakan disk 'public'.
|
||||
if ($row->source === 's3') {
|
||||
try {
|
||||
$path = Storage::disk('s3')->temporaryUrl(
|
||||
$row->path,
|
||||
now()->addMinutes(60) // expired 1 jam
|
||||
);
|
||||
} catch (\Exception $e) {
|
||||
$path = Storage::disk('s3')->url($row->path); // fallback kalau public
|
||||
}
|
||||
} else {
|
||||
$path = Storage::disk('public')->url($row->path);
|
||||
}
|
||||
|
||||
$arr_document[]= [
|
||||
'path' => $path,
|
||||
'type' => $d->type,
|
||||
'original_name' => $d->original_name,
|
||||
'name' => $d->name,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
'code' => $test->code,
|
||||
'date' => Carbon::parse($test->lab_date)->format('d M Y') ?? null,
|
||||
'examination' => $test->examination ?? null,
|
||||
'location' => $test->provider ?? null,
|
||||
'files' => $arr_document
|
||||
];
|
||||
})
|
||||
->sortByDesc(function ($item) {
|
||||
return $item['code'];
|
||||
})
|
||||
->values();
|
||||
})
|
||||
->sortByDesc(function ($groupedItems, $date) {
|
||||
return Carbon::createFromFormat('d M Y', $date)->format('Y-m-d');
|
||||
})
|
||||
->all()) ?? null
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Transformers\ClaimReport;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class ClaimReportFileShowResources extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'fileName' => $this->name,
|
||||
'fileUrl' => url(Storage::url($this->path))
|
||||
];
|
||||
}
|
||||
}
|
||||
13
Modules/Client/Transformers/ClaimReport/MemberResources.php
Executable file → Normal file
13
Modules/Client/Transformers/ClaimReport/MemberResources.php
Executable file → Normal file
@@ -3,7 +3,6 @@
|
||||
namespace Modules\Client\Transformers\ClaimReport;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use Illuminate\Support\Facades\Crypt;
|
||||
|
||||
class MemberResources extends JsonResource
|
||||
{
|
||||
@@ -17,13 +16,11 @@ class MemberResources extends JsonResource
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'code' => $this->code,
|
||||
'member_id' => $this->member_id,
|
||||
'full_name' => $this->full_name,
|
||||
'division_name' => $this->division_name ?? '',
|
||||
'status' => $this->status,
|
||||
'claimRequestId' => Crypt::encrypt($this->claim_request_id),
|
||||
'submission_date' => $this->submission_date,
|
||||
'memberId' => $this->member_id,
|
||||
'fullName' => $this->full_name,
|
||||
'division' => $this->division_name ?? '',
|
||||
'submission_date' => '',
|
||||
'status' => $this->active,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Transformers\ClaimReport;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class ShowResources extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'claimRequestId' => $this->id,
|
||||
'claimId' => $this->claim_id,
|
||||
'submissionDate' => $this->submission_date,
|
||||
'histories' => $this->whenLoaded('histories'),
|
||||
'fullName' => $this->whenLoaded('member', $this->member->full_name),
|
||||
'status' => $this->status,
|
||||
'files' => [
|
||||
'claimResults' => ClaimReportFileShowResources::collection($this->whenLoaded('claimResults')),
|
||||
'claimConditions' => ClaimReportFileShowResources::collection($this->whenLoaded('claimConditions')),
|
||||
'claimDiagnosis' => ClaimReportFileShowResources::collection($this->whenLoaded('claimDiagnosis'))
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
12
Modules/Client/Transformers/ClaimShowResource.php
Executable file → Normal file
12
Modules/Client/Transformers/ClaimShowResource.php
Executable file → Normal file
@@ -1,4 +1,4 @@
|
||||
<?php
|
||||
c<?php
|
||||
|
||||
namespace Modules\Client\Transformers;
|
||||
|
||||
@@ -25,7 +25,7 @@ class ClaimShowResource extends JsonResource
|
||||
$itemData['nominal_dicover'] = $item['nominal_dicover'] ?? 0;
|
||||
$itemData['nominal_ditagihkan'] = $item['nominal_ditagihkan'] ?? 0;
|
||||
$itemData['nominal_total'] = $item['nominal_total'] ?? 0;
|
||||
|
||||
|
||||
// For React Frotnend
|
||||
$itemData['biaya_diajukan'] = $itemData['nominal_ditagihkan'];
|
||||
$itemData['biaya_disetujui'] = $itemData['nominal_dicover'];
|
||||
@@ -33,12 +33,8 @@ class ClaimShowResource extends JsonResource
|
||||
return $itemData;
|
||||
});
|
||||
|
||||
$data['primary_diagnosis'] = $this->diagnoses->filter(function ($diagnosis) {
|
||||
return $diagnosis->type == 'primary';
|
||||
})->values();
|
||||
$data['secondary_diagnosis'] = $this->diagnoses->filter(function ($diagnosis) {
|
||||
return $diagnosis->type == 'secondary';
|
||||
})->values();
|
||||
$data['primary_diagnosis'] = $this->diagnoses->filter(function($diagnosis){ return $diagnosis->type == 'primary';})->values();
|
||||
$data['secondary_diagnosis'] = $this->diagnoses->filter(function($diagnosis){ return $diagnosis->type == 'secondary';})->values();
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
0
Modules/Client/Transformers/Dashboard/LimitResources.php
Executable file → Normal file
0
Modules/Client/Transformers/Dashboard/LimitResources.php
Executable file → Normal file
6
Modules/Client/Transformers/Dashboard/MemberAlarmCenterResources.php
Executable file → Normal file
6
Modules/Client/Transformers/Dashboard/MemberAlarmCenterResources.php
Executable file → Normal file
@@ -15,13 +15,11 @@ class MemberAlarmCenterResources extends JsonResource
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'personId' => $this->person_id,
|
||||
'memberId' => $this->member_id,
|
||||
'link_document' => $this->link_document,
|
||||
'fullName' => $this->full_name,
|
||||
'service' => $this->service_code,
|
||||
'start_date' => $this->members_effective_date,
|
||||
'end_date' => $this->members_expire_date,
|
||||
'start_date' => $this->start_date,
|
||||
'end_date' => $this->end_date,
|
||||
'status' => $this->active,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Transformers\Dashboard;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class MemberEmployeeDataResources extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'personId' => $this->person_id,
|
||||
'memberId' => $this->member_id,
|
||||
'fullName' => $this->full_name,
|
||||
// 'service' => $this->service_code,
|
||||
'start_date' => $this->start_date,
|
||||
'end_date' => $this->end_date,
|
||||
'status' => $this->active,
|
||||
];
|
||||
}
|
||||
}
|
||||
2
Modules/Client/Transformers/Dashboard/MemberResources.php
Executable file → Normal file
2
Modules/Client/Transformers/Dashboard/MemberResources.php
Executable file → Normal file
@@ -14,7 +14,6 @@ class MemberResources extends JsonResource
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
// dd($this->currentPlans);
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'memberId' => $this->member_id,
|
||||
@@ -26,7 +25,6 @@ class MemberResources extends JsonResource
|
||||
'percentage' => (!empty($this->currentPlan->limit_rules ?? 0)) ? (($this->claims_sum_total_claim / $this->currentPlan->limit_rules) * 100) : 0
|
||||
],
|
||||
'status' => $this->active,
|
||||
// 'service_type' => $this->currentPlans,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
0
Modules/Client/Transformers/Dashboard/TopUpLimitResources.php
Executable file → Normal file
0
Modules/Client/Transformers/Dashboard/TopUpLimitResources.php
Executable file → Normal file
@@ -1,92 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Transformers;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class DataMemberResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
// return parent::toArray($request);
|
||||
$data = [
|
||||
'id' => $this->id,
|
||||
'person_id' => $this->person_id,
|
||||
'user_id' => $this->user_id,
|
||||
'member_id' => $this->member_id,
|
||||
'payor_id' => $this->payor_id,
|
||||
'name_prefix' => $this->name_prefix,
|
||||
'name' => $this->name,
|
||||
'name_suffix' => $this->name_suffix,
|
||||
'birth_date' => $this->birth_date,
|
||||
'birth_place' => $this->person->birth_place,
|
||||
'last_weight_kg' => $this->person->last_weight_kg,
|
||||
'last_height_cm'=> $this->person->last_height_cm,
|
||||
'phone' => $this->person->phone,
|
||||
'nik' => $this->person->nik,
|
||||
'religion' => $this->person->religion,
|
||||
'marital_status' => $this->person->marital_status,
|
||||
'last_education' => $this->person->last_education,
|
||||
'current_employment' => $this->person->current_employment,
|
||||
'main_address_id' => $this->person->currentAddress->text,
|
||||
'family' => $this->family,
|
||||
'claim_history' => $this->claim_history,
|
||||
'gender' => $this->gender,
|
||||
'language' => $this->language,
|
||||
'race' => $this->race,
|
||||
'record_type' => $this->record_type,
|
||||
'principal_id' => $this->principal_id,
|
||||
'relation_with_principal' => $this->relation_with_principal,
|
||||
'bpjs_class' => $this->bpjs_class,
|
||||
'nric' => $this->nric,
|
||||
'email' => $this->email,
|
||||
'bank_info' => $this->bank_info,
|
||||
'agent_code' => $this->agent_code,
|
||||
'address1' => $this->address1,
|
||||
'address2' => $this->address2,
|
||||
'address3' => $this->address3,
|
||||
'address4' => $this->address4,
|
||||
'city' => $this->city,
|
||||
'state' => $this->state,
|
||||
'postal_code' => $this->postal_code,
|
||||
'record_mode' => $this->record_mode,
|
||||
'telephone_mobile' => $this->telephone_mobile,
|
||||
'telephone_res' => $this->telephone_res,
|
||||
'telephone_office' => $this->telephone_office,
|
||||
'passport_no' => $this->passport_no,
|
||||
'passport_country' => $this->passport_country,
|
||||
'identification_code' => $this->identification_code,
|
||||
'pre_existing' => $this->pre_existing,
|
||||
'bpjs_id' => $this->bpjs_id,
|
||||
'endorsement_date' => $this->endorsement_date,
|
||||
'members_effective_date' => $this->members_effective_date,
|
||||
'members_expire_date' => $this->members_expire_date,
|
||||
'activation_date' => $this->activation_date,
|
||||
'terminated_date' => $this->terminated_date,
|
||||
'remarks' => $this->remarks,
|
||||
'policy_in_force' => $this->policy_in_force,
|
||||
'start_no_claim' => $this->start_no_claim,
|
||||
'end_no_claim' => $this->end_no_claim,
|
||||
'active' => $this->active,
|
||||
'reason' => $this->reason,
|
||||
'total_claims' => $this->total_claims,
|
||||
'full_name' => $this->full_name,
|
||||
'age' => $this->age,
|
||||
'gender_code' => $this->gender_code,
|
||||
'limit' => [
|
||||
'current' => $this->total_claims ?? 0,
|
||||
'total' => (int)$this->currentPlan->limit_rules ?? 0,
|
||||
'percentage' => (!empty($this->currentPlan->limit_rules ?? 0)) ? (($this->total_claims / $this->currentPlan->limit_rules) * 100) : 0
|
||||
],
|
||||
'benefits' => $this->currentPlan->benefits,
|
||||
|
||||
];
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Transformers\EmployeeData\UserProfile;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class DataMemberResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'person' => [
|
||||
'name' => $this->full_name ?? null,
|
||||
'weight' => $this->person->last_weight_kg ?? null,
|
||||
'height' => $this->person->last_height_kg ?? null,
|
||||
'placeOfBirth' => ucwords($this->person->birth_place) ?? null,
|
||||
'dateOfBirth' => $this->birth_date ?? $this->person->birth_date,
|
||||
'gender' => ucwords(strtolower($this->gender ?? $this->person->gender)),
|
||||
'phoneNumber' => $this->person->phone ?? null,
|
||||
'email' => $this->email ?? ($this->person->email ?? null),
|
||||
'address' => $this->person->last_height_kg ?? null,
|
||||
'idNumber' => $this->person->nik ?? null,
|
||||
'religion' => ucwords(strtolower($this->person->religion)) ?? null,
|
||||
'maritalStatus' => $this->marital_status,
|
||||
'education' => ucwords(strtolower($this->person->last_education)) ?? null,
|
||||
'occupation' => null,
|
||||
],
|
||||
'families' => collect($this->families)->map(function ($family) {
|
||||
return [
|
||||
'name' => $family->full_name ?? null,
|
||||
'relationship' => $family->relationship ?? null,
|
||||
'dateOfBirth' => $family->birth_date ?? $family->person->birth_date,
|
||||
'email' => $this->email ?? ($this->person->email ?? null),
|
||||
'phoneNumber' => $this->person->phone ?? null,
|
||||
'status' => $this->status ?? null
|
||||
];
|
||||
})->all()
|
||||
];
|
||||
}
|
||||
}
|
||||
0
Modules/Client/composer.json
Executable file → Normal file
0
Modules/Client/composer.json
Executable file → Normal file
0
Modules/Client/module.json
Executable file → Normal file
0
Modules/Client/module.json
Executable file → Normal file
0
Modules/Client/package.json
Executable file → Normal file
0
Modules/Client/package.json
Executable file → Normal file
0
Modules/Client/webpack.mix.js
Executable file → Normal file
0
Modules/Client/webpack.mix.js
Executable file → Normal file
0
Modules/HospitalPortal/Config/.gitkeep
Executable file → Normal file
0
Modules/HospitalPortal/Config/.gitkeep
Executable file → Normal file
0
Modules/HospitalPortal/Config/config.php
Executable file → Normal file
0
Modules/HospitalPortal/Config/config.php
Executable file → Normal file
0
Modules/HospitalPortal/Console/.gitkeep
Executable file → Normal file
0
Modules/HospitalPortal/Console/.gitkeep
Executable file → Normal file
0
Modules/HospitalPortal/Database/Migrations/.gitkeep
Executable file → Normal file
0
Modules/HospitalPortal/Database/Migrations/.gitkeep
Executable file → Normal file
0
Modules/HospitalPortal/Database/Seeders/.gitkeep
Executable file → Normal file
0
Modules/HospitalPortal/Database/Seeders/.gitkeep
Executable file → Normal file
0
Modules/HospitalPortal/Database/Seeders/HospitalPortalDatabaseSeeder.php
Executable file → Normal file
0
Modules/HospitalPortal/Database/Seeders/HospitalPortalDatabaseSeeder.php
Executable file → Normal file
0
Modules/HospitalPortal/Database/factories/.gitkeep
Executable file → Normal file
0
Modules/HospitalPortal/Database/factories/.gitkeep
Executable file → Normal file
0
Modules/HospitalPortal/Entities/.gitkeep
Executable file → Normal file
0
Modules/HospitalPortal/Entities/.gitkeep
Executable file → Normal file
@@ -1,21 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\HospitalPortal\Helpers;
|
||||
|
||||
class ApiResponse
|
||||
{
|
||||
public static function apiResponse(string $status, array|object $data = null, string|array|object $message = null, int $statusCode)
|
||||
{
|
||||
if ($message instanceof \Illuminate\Support\MessageBag) {
|
||||
$message = $message->first();
|
||||
}
|
||||
return response()->json([
|
||||
'meta' => [
|
||||
'status' => $status,
|
||||
'code' => $statusCode,
|
||||
'message' => $message
|
||||
],
|
||||
'data' => $data,
|
||||
], $statusCode);
|
||||
}
|
||||
}
|
||||
@@ -1,93 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\HospitalPortal\Helpers;
|
||||
|
||||
use GuzzleHttp\Client;
|
||||
use GuzzleHttp\Psr7\Request;
|
||||
use DateTime;
|
||||
use DateTimeZone;
|
||||
|
||||
class GrabHelper
|
||||
{
|
||||
protected $client;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->client = new Client();
|
||||
}
|
||||
|
||||
public function getToken()
|
||||
{
|
||||
$url = env('TOKEN_URL_GRAB');
|
||||
$headers = [
|
||||
'Content-Type' => 'application/json',
|
||||
];
|
||||
$body = json_encode([
|
||||
'client_id' => env('CLIENT_ID_GRAB'),
|
||||
'client_secret' => env('CLIENT_SECRET_GRAB'),
|
||||
'grant_type' => 'client_credentials',
|
||||
'scope' => 'grab_express.partner_deliveries',
|
||||
]);
|
||||
|
||||
$request = new Request('POST', $url, $headers, $body);
|
||||
$response = $this->client->send($request);
|
||||
$data = json_decode($response->getBody()->getContents(), true);
|
||||
|
||||
return $data['access_token'] ?? null;
|
||||
}
|
||||
|
||||
public function createDelivery($token,$body)
|
||||
{
|
||||
$url = env('BASE_URL_GRAB').'/v1/deliveries';
|
||||
$headers = [
|
||||
'Content-Type' => 'application/json',
|
||||
'Authorization' => 'Bearer ' . $token,
|
||||
];
|
||||
$request = new Request('POST', $url, $headers, $body);
|
||||
$response = $this->client->send($request);
|
||||
|
||||
return $response->getBody()->getContents();
|
||||
}
|
||||
|
||||
public function normalizePhoneNumber($phoneNumber) {
|
||||
// Remove any non-digit characters (e.g., '+', '-', spaces)
|
||||
$phoneNumber = preg_replace('/\D/', '', $phoneNumber);
|
||||
|
||||
// Check if the cleaned phone number is numeric
|
||||
if (!is_numeric($phoneNumber)) {
|
||||
return null; // Return false or handle the error as needed
|
||||
}
|
||||
|
||||
// Handle phone numbers starting with '62' or '+62'
|
||||
if (substr($phoneNumber, 0, 2) === '62') {
|
||||
$phoneNumber = '0' . substr($phoneNumber, 2);
|
||||
}
|
||||
|
||||
// Handle phone numbers that already start with '8'
|
||||
if (substr($phoneNumber, 0, 1) === '8') {
|
||||
$phoneNumber = '0' . $phoneNumber;
|
||||
}
|
||||
|
||||
return $phoneNumber;
|
||||
}
|
||||
|
||||
public function getScheduleTimes()
|
||||
{
|
||||
// Create a DateTime object for the current time in Jakarta timezone
|
||||
$pickupTimeFrom = new DateTime('now', new DateTimeZone('Asia/Jakarta'));
|
||||
|
||||
// Add 30 minutes to the current time for pickupTimeFrom
|
||||
$pickupTimeFrom->modify('+30 minutes');
|
||||
|
||||
// Clone the pickupTimeFrom to calculate pickupTimeTo
|
||||
$pickupTimeTo = clone $pickupTimeFrom;
|
||||
// Add 1 hour to pickupTimeFrom for pickupTimeTo
|
||||
$pickupTimeTo->modify('+1 hour');
|
||||
|
||||
// Format the times to ISO 8601 format (e.g., 2024-10-02T12:37:28+07:00)
|
||||
return [
|
||||
"pickupTimeFrom" => $pickupTimeFrom->format(DateTime::ATOM),
|
||||
"pickupTimeTo" => $pickupTimeTo->format(DateTime::ATOM),
|
||||
];
|
||||
}
|
||||
}
|
||||
0
Modules/HospitalPortal/Http/Controllers/.gitkeep
Executable file → Normal file
0
Modules/HospitalPortal/Http/Controllers/.gitkeep
Executable file → Normal file
271
Modules/HospitalPortal/Http/Controllers/Api/AuthController.php
Executable file → Normal file
271
Modules/HospitalPortal/Http/Controllers/Api/AuthController.php
Executable file → Normal file
@@ -12,58 +12,41 @@ use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Modules\Internal\Emails\SendVerifyEmail;
|
||||
use Modules\Internal\Events\ForgetPassword;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Modules\HospitalPortal\Helpers\ApiResponse;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Helpers\Helper;
|
||||
use Illuminate\Support\Facades\View;
|
||||
|
||||
class AuthController extends Controller
|
||||
{
|
||||
public function login(Request $request)
|
||||
{
|
||||
$data = [
|
||||
'email' => $request->email,
|
||||
'password' => $request->password
|
||||
];
|
||||
$validator = Validator::make($request->all(), [
|
||||
$request->validate([
|
||||
'email' => 'required|email',
|
||||
'password' => 'required'
|
||||
], [
|
||||
'email.required' => trans('Validation.required',['attribute' => 'Email']),
|
||||
'email.email' => trans('Validation.email'),
|
||||
'password.required' => trans('Validation.required',['attribute' => 'Password']),
|
||||
]);
|
||||
|
||||
if ($validator->fails())
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
|
||||
$user = User::query()
|
||||
->where('email', $request->email)
|
||||
->first();
|
||||
|
||||
if (!$user) {
|
||||
return response(['message' => 'User Tidak Ditemukan'], 404);
|
||||
}
|
||||
else
|
||||
{
|
||||
$user = User::where('email', $request->email)->first();
|
||||
if (!$user) {
|
||||
return ApiResponse::apiResponse('Not Found', $data, trans('Message.not_found'), 404);
|
||||
}
|
||||
|
||||
if (!Hash::check($request->password, $user->password)) {
|
||||
return ApiResponse::apiResponse('Bad Request', $data, trans('Message.password'), 400);
|
||||
}
|
||||
|
||||
$res_data = [
|
||||
'user' => $user,
|
||||
'token' => $user->createToken('app')->plainTextToken
|
||||
];
|
||||
|
||||
return ApiResponse::apiResponse("Success", $res_data, trans('Message.success'), 200);
|
||||
if (!Hash::check($request->password, $user->password)) {
|
||||
return response(['message' => 'Password Salah'], 403);
|
||||
}
|
||||
|
||||
return response([
|
||||
'message' => 'Selamat Datang',
|
||||
'user' => $user,
|
||||
'token' => $user->createToken('app')->plainTextToken
|
||||
]);
|
||||
}
|
||||
|
||||
public function logout(Request $request)
|
||||
{
|
||||
$request->user()->tokens()->delete();
|
||||
$token = $request->bearerToken();
|
||||
Auth::user()->tokens()->where('id', $token)->delete();
|
||||
|
||||
return ApiResponse::apiResponse('Success', [], trans('Message.logout'), 200);
|
||||
return response(['message' => 'Berhasil Logout.']);
|
||||
}
|
||||
|
||||
public function resetPassword(Request $request)
|
||||
@@ -77,12 +60,12 @@ class AuthController extends Controller
|
||||
]);
|
||||
|
||||
if (!Hash::check($request['old_password'], $user->password)) {
|
||||
return response(['Message' => 'Password Salah'], 403);
|
||||
return response(['message' => 'Password Salah'], 403);
|
||||
}
|
||||
|
||||
if ($request["new_password"] != $request["confirm_new_password"]) {
|
||||
return response([
|
||||
'Message' => "Password Tidak Sama"
|
||||
'message' => "Password Tidak Sama"
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -94,202 +77,52 @@ class AuthController extends Controller
|
||||
|
||||
public function verifyEmail(Request $request)
|
||||
{
|
||||
$data = [
|
||||
'email' => $request->email,
|
||||
];
|
||||
|
||||
$validator = Validator::make($request->all(), [
|
||||
$request->validate([
|
||||
'email' => 'required|email',
|
||||
], [
|
||||
'email.required' => trans('Validation.required',['attribute' => 'Email']),
|
||||
'email.email' => trans('Validation.email'),
|
||||
]);
|
||||
|
||||
if ($validator->fails())
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
|
||||
}
|
||||
else
|
||||
{
|
||||
$user = User::where('email', $request->email)->first();
|
||||
if (!$user) {
|
||||
return ApiResponse::apiResponse('Not Found', $data, trans('Message.not_found'), 404);
|
||||
}
|
||||
|
||||
//send email
|
||||
// Insert data notifications
|
||||
$emailTo = $request->email;
|
||||
$dataNotif = [
|
||||
'user_id' => $user->id,
|
||||
'email' => $emailTo,
|
||||
'title' => 'Forgot Password',
|
||||
'description' => 'Request forgot password from Hospital Portal',
|
||||
'type' => 1,
|
||||
'isUnRead' => true,
|
||||
'created_by' => auth()->check() ? auth()->user()->id : null,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
];
|
||||
$sendNotif = Helper::insertNotification($dataNotif);
|
||||
//Insert data password reset
|
||||
$token = mt_rand(100000, 999999); // Menghasilkan angka acak antara 100000 dan 999999
|
||||
$p_resets = DB::table('password_resets')
|
||||
->insert([
|
||||
'email' => $request->email,
|
||||
'token' => $token,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
]);
|
||||
// Send Email after insert notifications
|
||||
if($sendNotif && $p_resets)
|
||||
{
|
||||
//send to alarm
|
||||
$nameTo = 'User';
|
||||
$dataEmail = [
|
||||
'email' => $emailTo,
|
||||
'name' => $nameTo,
|
||||
'subject' => 'Request Forgot Password from Hospital Portal Date '. date('Y-m-d H:i:s'),
|
||||
'body' => View::make('email/forgot_password', ['token' => $token])->render(),
|
||||
];
|
||||
Helper::sendEmail($dataEmail);
|
||||
|
||||
$res = DB::table('password_resets')
|
||||
->where('email', '=', $request->email)
|
||||
->where('token', '=', $token)
|
||||
->first();
|
||||
|
||||
return ApiResponse::apiResponse("Success", $res, trans('Message.success'), 200);
|
||||
}
|
||||
else
|
||||
{
|
||||
return ApiResponse::apiResponse("Internal Server Error", $data, trans('Message.server_error'), 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function verifCode(Request $request)
|
||||
{
|
||||
$data = [
|
||||
'email' => $request->email,
|
||||
'token' => $request->token,
|
||||
];
|
||||
|
||||
$validator = Validator::make($request->all(), [
|
||||
'email' => 'required|email',
|
||||
'token' => 'required|numeric',
|
||||
], [
|
||||
'email.required' => trans('Validation.required',['attribute' => 'Email']),
|
||||
'email.email' => trans('Validation.email'),
|
||||
'token.required' => trans('Validation.required',['attribute' => 'Token']),
|
||||
'token.numeric' => trans('Validation.required',['attribute' => 'Code Numeric']),
|
||||
]);
|
||||
|
||||
if ($validator->fails())
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Check Time
|
||||
$check = DB::table('password_resets')
|
||||
->where('email', '=', $request->email)
|
||||
->where('token', '=', $request->token)
|
||||
->select('created_at')
|
||||
$user = User::query()
|
||||
->where('email', $request->email)
|
||||
->first();
|
||||
|
||||
if($check)
|
||||
{
|
||||
$created_at = strtotime($check->created_at); // Konversi string waktu ke UNIX timestamp
|
||||
$now = time(); // Waktu sekarang dalam UNIX timestamp
|
||||
|
||||
// Hitung selisih waktu dalam menit
|
||||
$diffInMinutes = ($now - $created_at) / 60;
|
||||
|
||||
if ($diffInMinutes > 60) {
|
||||
return ApiResponse::apiResponse('Not Found', $data, trans('Message.token_expired'), 404);
|
||||
} else {
|
||||
// Lanjutkan dengan proses pemulihan kata sandi
|
||||
return ApiResponse::apiResponse("Success", $data, trans('Message.success'), 200);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return ApiResponse::apiResponse('Not Found', $data, trans('Message.not_found'), 404);
|
||||
}
|
||||
if (!$user) {
|
||||
return response(['message' => 'User Tidak Ditemukan'], 404);
|
||||
}
|
||||
|
||||
Event(new ForgetPassword($user));
|
||||
|
||||
// Mail::to($user->email)->send(new SendVerifyEmail($user));
|
||||
|
||||
return response()->json($user);
|
||||
}
|
||||
|
||||
public function forgetPassword(Request $request)
|
||||
{
|
||||
$data = [
|
||||
'email' => $request->email,
|
||||
'token' => $request->token,
|
||||
'new_password' => $request->new_password
|
||||
];
|
||||
|
||||
$validator = Validator::make($request->all(), [
|
||||
'email' => 'required|email',
|
||||
'token' => 'required|numeric',
|
||||
'new_password' => [
|
||||
'required',
|
||||
'min:8',
|
||||
'regex:/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$/'
|
||||
]
|
||||
], [
|
||||
'email.required' => trans('Validation.required',['attribute' => 'Email']),
|
||||
'email.email' => trans('Validation.email'),
|
||||
'token.required' => trans('Validation.required',['attribute' => 'Token']),
|
||||
'new_password.required' => trans('Validation.required',['attribute' => 'New Password']),
|
||||
'new_password.min' => trans('Validation.min',['attribute' => 'New Password']),
|
||||
'new_password.regex' => trans('Validation.regex',['attribute' => 'New Password']),
|
||||
$request->validate([
|
||||
'new_password' => 'required',
|
||||
'confirm_new_password' => 'required'
|
||||
]);
|
||||
|
||||
if($request->new_password != $request->confirm_new_password)
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', $data, 'Confirm password is not the same', 400);
|
||||
}
|
||||
else if ($validator->fails())
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Check Time
|
||||
$check = DB::table('password_resets')
|
||||
->where('email', '=', $request->email)
|
||||
->where('token', '=', $request->token)
|
||||
->select('created_at')
|
||||
$token = Crypt::decryptString($request->token);
|
||||
$email = explode('|', $token)[0];
|
||||
|
||||
$user = User::query()
|
||||
->where('email', $email)
|
||||
->first();
|
||||
|
||||
if($check)
|
||||
{
|
||||
$created_at = strtotime($check->created_at); // Konversi string waktu ke UNIX timestamp
|
||||
$now = time(); // Waktu sekarang dalam UNIX timestamp
|
||||
|
||||
// Hitung selisih waktu dalam menit
|
||||
$diffInMinutes = ($now - $created_at) / 60;
|
||||
|
||||
if ($diffInMinutes > 60) {
|
||||
return ApiResponse::apiResponse('Not Found', $data, trans('Message.token_expired'), 404);
|
||||
} else {
|
||||
// Lanjutkan dengan proses pemulihan kata sandi
|
||||
$user = User::where('email', $request->email)->first();
|
||||
if ($user)
|
||||
{
|
||||
$newPassword = Hash::make($request->new_password);
|
||||
$user->password = $newPassword;
|
||||
$user->save();
|
||||
return ApiResponse::apiResponse("Success", $data, trans('Message.success'), 200);
|
||||
}
|
||||
else
|
||||
{
|
||||
return ApiResponse::apiResponse('Not Found', $data, trans('Message.token_expired'), 404);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return ApiResponse::apiResponse('Not Found', $data, trans('Message.not_found'), 404);
|
||||
}
|
||||
if (!$user) {
|
||||
return response(['message' => 'User Tidak Ditemukan'], 404);
|
||||
}
|
||||
|
||||
if ($request["new_password"] != $request["confirm_new_password"]) {
|
||||
return response([
|
||||
'message' => "Password Tidak Sama"
|
||||
], 404);
|
||||
}
|
||||
|
||||
$user->update([
|
||||
'password' => Hash::make($request->confirm_new_password),
|
||||
]);
|
||||
return response()->json($user);
|
||||
}
|
||||
}
|
||||
|
||||
430
Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php
Executable file → Normal file
430
Modules/HospitalPortal/Http/Controllers/Api/ClaimRequestController.php
Executable file → Normal file
@@ -7,9 +7,6 @@ use App\Helpers\Helper;
|
||||
use App\Models\ClaimRequest;
|
||||
use App\Models\File;
|
||||
use App\Models\Member;
|
||||
use App\Models\RequestLog;
|
||||
use App\Models\Organization;
|
||||
|
||||
use App\Services\ClaimRequestService;
|
||||
use App\Services\ClaimService;
|
||||
use Exception;
|
||||
@@ -19,9 +16,6 @@ use Illuminate\Routing\Controller;
|
||||
use Modules\HospitalPortal\Transformers\ClaimRequestResource;
|
||||
use Modules\HospitalPortal\Transformers\ClaimRequestShowResource;
|
||||
use PDF;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Modules\HospitalPortal\Helpers\ApiResponse;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
|
||||
class ClaimRequestController extends Controller
|
||||
{
|
||||
@@ -29,7 +23,6 @@ class ClaimRequestController extends Controller
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
private static $code_prefix = 'CLAIM';
|
||||
public function index(request $request)
|
||||
{
|
||||
$claimRequests = ClaimRequest::query()
|
||||
@@ -67,110 +60,70 @@ class ClaimRequestController extends Controller
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
$data = [
|
||||
'request_logs_id' => $request->request_logs_id,
|
||||
'member_id' => $request->member_id,
|
||||
'service_code' => $request->service_code
|
||||
];
|
||||
$validator = Validator::make($request->all(), [
|
||||
'request_logs_id' => 'required',
|
||||
$request->validate([
|
||||
'member_id' => 'required',
|
||||
'service_code' => 'required'
|
||||
], [
|
||||
'request_logs_id.required' => trans('Validation.required',['attribute' => 'Request Log ID']),
|
||||
'member_id.required' => trans('Validation.required',['attribute' => 'Member ID']),
|
||||
'service_code.required' => trans('Validation.required',['attribute' => 'Service Code'])
|
||||
'service_code' => 'required|in:OP,IP'
|
||||
]);
|
||||
if ($validator->fails())
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
|
||||
}
|
||||
else
|
||||
{
|
||||
$check_claim_requests = DB::table('claim_requests')
|
||||
->where('claim_requests.request_log_id', '=', $request->request_logs_id)
|
||||
->first();
|
||||
if(!$check_claim_requests)
|
||||
{
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
$code = $this->getNextCode($request->request_logs_id);
|
||||
$member = Member::find($request->member_id);
|
||||
$requestLogData = RequestLog::where('id',$request->request_logs_id)->first();
|
||||
$organization = Organization::where(['id' => $requestLogData->organization_id, 'type' => 'hospital'])->first('code');
|
||||
$provideCode = $organization ? $organization->code : '';
|
||||
|
||||
$newClaimRequest = ClaimRequestService::storeClaimRequest(
|
||||
row: [],
|
||||
code: $code,
|
||||
member: $member,
|
||||
paymentType: 'cashless',
|
||||
serviceCode: $request->service_code,
|
||||
requestLogID: $request->request_logs_id,
|
||||
organization_code: $provideCode,
|
||||
);
|
||||
// Log History
|
||||
$newClaimRequest->histories()->create([
|
||||
'title' => 'New Claim Requested',
|
||||
'description' => "Claim Requested for Member : {$member->member_id} - ({$member->full_name})",
|
||||
'type' => 'info',
|
||||
'system_origin' => 'hospital-portal'
|
||||
]);
|
||||
|
||||
// Claim Log
|
||||
DB::table('claim_logs')
|
||||
->insert([
|
||||
'claim_request_id' => $newClaimRequest->id,
|
||||
'status' => 'requested',
|
||||
'date' => date('Y-m-d H:i:s'),
|
||||
'description' => "Claim Requested for Member : {$member->member_id} - ({$member->full_name})",
|
||||
'system_origin' => 'hospital-portal',
|
||||
'created_by' => auth()->user()->id,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at'=> date('Y-m-d H:i:s'),
|
||||
]);
|
||||
|
||||
|
||||
if ($request->hasFile('additional_files')) {
|
||||
foreach ($request->additional_files as $file) {
|
||||
$fileData = File::storeFile('additional-files', $request->request_logs_id, $file);
|
||||
// $newClaimRequest->files()->updateOrCreate([
|
||||
// 'type' => 'additional-files',
|
||||
// 'name' => File::getFileName('additional-files', $newClaimRequest->id, $file),
|
||||
// 'original_name' => $file->getClientOriginalName(),
|
||||
// 'extension' => $file->getClientOriginalExtension(),
|
||||
// 'path' => $pathFile,
|
||||
// 'created_by' => auth()->user()->id,
|
||||
// 'updated_by' => auth()->user()->id,
|
||||
// ]);
|
||||
File::updateOrCreate([
|
||||
'fileable_type' => 'App\Models\RequestLog',
|
||||
'fileable_id' => $request->request_logs_id,
|
||||
'type' => 'additional-files',
|
||||
'name' => $fileData['name'],
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $fileData['path'],
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
DB::commit();
|
||||
return ApiResponse::apiResponse('Success', $data, trans('Message.success'), 200);
|
||||
}
|
||||
catch (\Exception $e) {
|
||||
DB::rollback();
|
||||
return ApiResponse::apiResponse("Error", $data, $e->getMessage(), 500);
|
||||
}
|
||||
$member = Member::find($request->member_id);
|
||||
$newClaimRequest = ClaimRequestService::storeClaimRequest(member: $member, paymentType: 'reimbursement', serviceCode: $request->service_code);
|
||||
|
||||
ClaimRequested::dispatch($newClaimRequest);
|
||||
|
||||
// Log History
|
||||
$newClaimRequest->histories()->create([
|
||||
'title' => 'New Claim Requested',
|
||||
'description' => "Claim Requested for Member : {$member->member_id} - ({$member->full_name})",
|
||||
'type' => 'info',
|
||||
'system_origin' => 'hospital-portal'
|
||||
]);
|
||||
|
||||
if ($request->hasFile('result_files')) {
|
||||
foreach ($request->result_files as $file) {
|
||||
$pathFile = File::storeFile('claim-result', $newClaimRequest->id, $file);
|
||||
$newClaimRequest->files()->updateOrCreate([
|
||||
'type' => 'claim-result',
|
||||
'name' => File::getFileName('claim-result', $newClaimRequest->id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
else
|
||||
{
|
||||
return ApiResponse::apiResponse("Error", $data, trans('Message.already_exists'), 409);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if ($request->hasFile('diagnosa_files')) {
|
||||
foreach ($request->diagnosa_files as $file) {
|
||||
$pathFile = File::storeFile('claim-diagnosis', $newClaimRequest->id, $file);
|
||||
$newClaimRequest->files()->updateOrCreate([
|
||||
'type' => 'claim-diagnosis',
|
||||
'name' => File::getFileName('claim-diagnosis', $newClaimRequest->id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
if ($request->hasFile('result_files')) {
|
||||
foreach ($request->result_files as $file) {
|
||||
$pathFile = File::storeFile('claim-kondisi', $newClaimRequest->id, $file);
|
||||
$newClaimRequest->files()->updateOrCreate([
|
||||
'type' => 'claim-kondisi',
|
||||
'name' => File::getFileName('claim-kondisi', $newClaimRequest->id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
return Helper::responseJson(data: $request->toArray(), message: 'Claim Request berhasil ajukan!');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -184,8 +137,7 @@ class ClaimRequestController extends Controller
|
||||
$claimRequest->load([
|
||||
'histories' => function ($history) {
|
||||
$history->latest();
|
||||
},
|
||||
'files',
|
||||
}
|
||||
]);
|
||||
|
||||
return Helper::responseJson(data: ClaimRequestShowResource::make($claimRequest));
|
||||
@@ -226,276 +178,16 @@ class ClaimRequestController extends Controller
|
||||
{
|
||||
$claimRequest = ClaimRequest::findOrFail($claim_request_id);
|
||||
|
||||
$service_code = $claimRequest->service_code;
|
||||
if ($claimRequest->status != 'approved') {
|
||||
throw new Exception("Belum Teverifikasi", 1);
|
||||
}
|
||||
|
||||
$member = Member::findOrFail($claimRequest->member_id)
|
||||
->load([
|
||||
// 'currentPlan',
|
||||
'currentPlan' => function ($plan) use ($claim_request_id, $service_code) {
|
||||
$plan->where('plans.service_code', $service_code);
|
||||
},
|
||||
'currentPolicy',
|
||||
'currentPlan.corporateBenefits',
|
||||
'currentPlan.corporateBenefits.benefit'
|
||||
]);
|
||||
->load(['currentPlan', 'currentPolicy', 'currentPlan.corporateBenefits', 'currentPlan.corporateBenefits.benefit']);
|
||||
|
||||
$pdf = PDF::loadView('pdf.guaranted_leter', compact('member', 'claimRequest'));
|
||||
return $pdf->download('Guaranted Letter - '.$member->full_name.'.pdf');
|
||||
|
||||
return $claimRequest;
|
||||
}
|
||||
|
||||
public static function getNextCode($request_log_id = 0)
|
||||
{
|
||||
$last_numeric_code = ClaimRequest::select(DB::raw('MAX(CAST(SUBSTRING_INDEX(code, ".", -1) AS SIGNED)) as max_numeric_code'))
|
||||
->whereRaw('SUBSTRING_INDEX(code, ".", -1) REGEXP "^[0-9]+$"')
|
||||
->value('max_numeric_code');
|
||||
// $next_number = 1;
|
||||
if ($last_numeric_code) {
|
||||
// // Jika ada kode sebelumnya, pecah kode dan tambahkan 1 ke angka terakhir
|
||||
// $parts = explode('-', $last_code);
|
||||
// $last_number = (int) end($parts);
|
||||
$next_number = $last_numeric_code + 1;
|
||||
} else {
|
||||
$next_number = 1;
|
||||
}
|
||||
return self::makeCode($next_number, $request_log_id);
|
||||
}
|
||||
|
||||
public static function makeCode($next_number, $request_log_id)
|
||||
{
|
||||
// Pastikan $next_number adalah integer positif
|
||||
$next_number = max(1, (int) $next_number);
|
||||
$requestLogData = RequestLog::where('id', $request_log_id)->first();
|
||||
$organization = Organization::where(['id' => $requestLogData->organization_id, 'type' => 'hospital'])->first('code');
|
||||
$provideCode = $organization ? $organization->code : '';
|
||||
$member = Member::with('currentCorporate')->where(['id' => $requestLogData->member_id])->first();
|
||||
$sparator = '.';
|
||||
$date = date('ymd');
|
||||
// Menghasilkan kode dengan format yang diinginkan
|
||||
return self::$code_prefix . $sparator. 'H' . $sparator. $provideCode . $sparator. $date. $sparator . $member->currentPolicy->code . $sparator. $member->member_id . $sparator. str_pad($next_number, 5, '0', STR_PAD_LEFT);
|
||||
}
|
||||
|
||||
public function get_claim_requests(Request $request)
|
||||
{
|
||||
|
||||
$limit = $request->has('per_page') ? $request->input('per_page') : 10;
|
||||
|
||||
$results = DB::table('claim_requests')
|
||||
->leftJoin('claims', 'claim_requests.id', '=', 'claims.claim_request_id')
|
||||
->leftJoin('members', 'claim_requests.member_id', '=', 'members.id')
|
||||
->leftJoin('corporate_employees', 'members.id', '=', 'corporate_employees.member_id')
|
||||
->leftJoin('corporate_divisions', 'corporate_employees.division_id', '=', 'corporate_divisions.id')
|
||||
->when($request->input('search'), function ($query, $search) {
|
||||
$query->where(function ($query) use ($search) {
|
||||
$query->orWhere('claim_requests.code', 'like', "%" . ($search == 'outpatient' || $search == 'Outpatient' ? 'OP' : 'IP') . "%")
|
||||
->orWhere('members.member_id', 'like', "%" . $search . "%")
|
||||
->orWhere('members.name', 'like', "%" . $search . "%")
|
||||
->orWhere('corporate_divisions.name', 'like', "%" . $search . "%")
|
||||
->orWhere('claim_requests.status', 'like', "%" . $search . "%")
|
||||
->orWhere('claim_requests.submission_date', 'like', "%" . $search . "%")
|
||||
->orWhere('claims.status', 'like', "%" . $search . "%");
|
||||
});
|
||||
})
|
||||
->when($request->has('orderBy'), function ($query) use ($request) {
|
||||
$orderBy = $request->orderBy;
|
||||
$direction = $request->order ?? 'asc';
|
||||
|
||||
$query->orderBy($orderBy, $direction);
|
||||
})
|
||||
->when($request->input('start_date') && !$request->input('end_date'), function ($query, $start_date) {
|
||||
$query->where(function ($query) use ($start_date) {
|
||||
$query->where('claim_requests.submission_date', '<', $start_date);
|
||||
});
|
||||
})
|
||||
->when($request->input('status'), function ($query, $status) {
|
||||
$query->where(function ($query) use ($status) {
|
||||
|
||||
if ($status === 'requested') {
|
||||
$query->where('claim_requests.status', '=', 'requested');
|
||||
}
|
||||
|
||||
if ($status === 'reviewed') {
|
||||
$query->where('claim_requests.status', '=', 'approved');
|
||||
$query->where('claims.status', '=', 'received');
|
||||
}
|
||||
|
||||
if ($status === 'approved') {
|
||||
$query->where('claim_requests.status', '=', 'approved');
|
||||
$query->where('claims.status', '=', 'approved');
|
||||
}
|
||||
|
||||
if ($status === 'declined') {
|
||||
$query->where('claim_requests.status', '=', 'approved');
|
||||
$query->where('claims.status', '=', 'declined');
|
||||
}
|
||||
|
||||
});
|
||||
})
|
||||
->select(
|
||||
'members.id',
|
||||
'claim_requests.code',
|
||||
'members.member_id',
|
||||
'members.name as full_name',
|
||||
'corporate_divisions.name AS division_name',
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN claim_requests.status = "requested" THEN "requested"
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "approved" THEN "approved"
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "declined" THEN "declined"
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "disbrusmented" THEN "disbrusmented"
|
||||
/*WHEN claim_requests.status = "approved" AND claims.status = "received" THEN "pending"*/
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "received" THEN "reviewed"
|
||||
ELSE ""
|
||||
END AS status
|
||||
'),
|
||||
'claim_requests.id AS claim_request_id',
|
||||
'claim_requests.submission_date',
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN service_code = "OP" THEN "Outpatient"
|
||||
WHEN service_code = "IP" THEN "Inpatient"
|
||||
ELSE ""
|
||||
END AS service_type
|
||||
')
|
||||
)
|
||||
->paginate($limit);
|
||||
return response()->json(Helper::paginateResources($results));
|
||||
}
|
||||
|
||||
public function detail_claim_requests($claimRequestId)
|
||||
{
|
||||
|
||||
$status = DB::table('claim_requests')
|
||||
->leftJoin('claims', 'claim_requests.id', '=', 'claims.claim_request_id')
|
||||
->leftJoin('members', 'claim_requests.member_id', '=', 'members.id')
|
||||
->leftJoin('corporate_employees', 'members.id', '=', 'corporate_employees.member_id')
|
||||
->leftJoin('corporate_divisions', 'corporate_employees.division_id', '=', 'corporate_divisions.id')
|
||||
->where('claim_requests.id', '=', $claimRequestId)
|
||||
->select(
|
||||
'claim_requests.submission_date',
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN claim_requests.status = "requested" THEN "requested"
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "approved" THEN "approved"
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "declined" THEN "declined"
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "disbrusmented" THEN "disbrusmented"
|
||||
/*WHEN claim_requests.status = "approved" AND claims.status = "received" THEN "pending"*/
|
||||
WHEN claim_requests.status = "approved" AND claims.status = "received" THEN "reviewed"
|
||||
ELSE ""
|
||||
END AS status
|
||||
')
|
||||
)
|
||||
->first();
|
||||
$results['status'] = $status;
|
||||
$timeline = DB::table('claim_logs')
|
||||
->where('claim_logs.claim_request_id', '=', $claimRequestId)
|
||||
->select(
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN claim_logs.status = "requested" THEN "Request"
|
||||
WHEN claim_logs.status = "reviewed" THEN "Review"
|
||||
WHEN claim_logs.status = "approved" THEN "Approval"
|
||||
WHEN claim_logs.status = "declined" THEN "Decline"
|
||||
ELSE "-"
|
||||
END AS txt_status
|
||||
'),
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN claim_logs.status = "requested" THEN "#159C9C"
|
||||
WHEN claim_logs.status = "reviewed" THEN "#0C53B7"
|
||||
WHEN claim_logs.status = "approved" THEN "#229A16"
|
||||
WHEN claim_logs.status = "declined" THEN "#FF4842"
|
||||
ELSE "-"
|
||||
END AS txt_status_color
|
||||
'),
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN claim_logs.status = "requested" THEN "#00AB5529"
|
||||
WHEN claim_logs.status = "reviewed" THEN "#1890FF29"
|
||||
WHEN claim_logs.status = "approved" THEN "#54D62C29"
|
||||
WHEN claim_logs.status = "declined" THEN "#FF48427A"
|
||||
ELSE "-"
|
||||
END AS txt_status_backgroundColor
|
||||
'),
|
||||
'claim_logs.date',
|
||||
'claim_logs.description',
|
||||
'claim_logs.status'
|
||||
)
|
||||
->orderBy('claim_logs.id', 'desc')
|
||||
->get();
|
||||
$results['timeline'] = $timeline;
|
||||
$request_files = DB::table('claim_request_files')
|
||||
->where('claim_request_files.claim_request_id', '=', $claimRequestId)
|
||||
->select(
|
||||
'claim_request_files.*',
|
||||
DB::raw('(SELECT files.fileable_id FROM files WHERE files.fileable_id = claim_request_files.claim_request_id AND files.type = claim_request_files.type LIMIT 1) AS check_files'),
|
||||
)
|
||||
->get();
|
||||
$results['request_files'] = $request_files;
|
||||
|
||||
return Helper::responseJson($results);
|
||||
}
|
||||
|
||||
public function requestFiles(Request $request, $claim_id)
|
||||
{
|
||||
|
||||
if ($request->hasFile('fileDiagnosis')) {
|
||||
foreach ($request->fileDiagnosis as $file) {
|
||||
$fileData = File::storeFile('claim-diagnosis', $claim_id, $file);
|
||||
File::updateOrCreate([
|
||||
'fileable_type'=>'App\Models\ClaimRequest',
|
||||
'fileable_id' => $claim_id,
|
||||
'type' => 'claim-diagnosis',
|
||||
'name' => $fileData['name'],
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $fileData['path'],
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
if ($request->hasFile('fileKondisis')) {
|
||||
foreach ($request->fileKondisis as $file) {
|
||||
$fileData = File::storeFile('claim-kondisi', $claim_id, $file);
|
||||
File::updateOrCreate([
|
||||
'fileable_type'=>'App\Models\ClaimRequest',
|
||||
'fileable_id' => $claim_id,
|
||||
'type' => 'claim-kondisi',
|
||||
'name' => $fileData['name'],
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
if ($request->hasFile('fileResults')) {
|
||||
foreach ($request->fileResults as $file) {
|
||||
$fileData = File::storeFile('claim-result', $claim_id, $file);
|
||||
File::updateOrCreate([
|
||||
'fileable_type'=>'App\Models\ClaimRequest',
|
||||
'fileable_id' => $claim_id,
|
||||
'type' => 'claim-result',
|
||||
'name' => $fileData['name'],
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $fileData['path'],
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
return Helper::responseJson(data: $request->toArray(), message: 'Invoice Success Uploaded');
|
||||
}
|
||||
}
|
||||
|
||||
220
Modules/HospitalPortal/Http/Controllers/Api/MemberController.php
Executable file → Normal file
220
Modules/HospitalPortal/Http/Controllers/Api/MemberController.php
Executable file → Normal file
@@ -7,12 +7,6 @@ use App\Models\Member;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Modules\HospitalPortal\Helpers\ApiResponse;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Models\CorporateBenefit;
|
||||
use App\Models\MemberPlan;
|
||||
use App\Models\Plan;
|
||||
|
||||
class MemberController extends Controller
|
||||
{
|
||||
@@ -22,208 +16,26 @@ class MemberController extends Controller
|
||||
*/
|
||||
public function search(Request $request)
|
||||
{
|
||||
$data = [
|
||||
'no_polis' => $request->no_polis,
|
||||
'birth_date' => $request->birth_date
|
||||
];
|
||||
$validator = Validator::make($request->all(), [
|
||||
$request->validate([
|
||||
'no_polis' => 'required',
|
||||
'birth_date' => 'required'
|
||||
], [
|
||||
'no_polis.required' => trans('Validation.required',['attribute' => 'Member ID']),
|
||||
'birth_date.required' => trans('Validation.required',['attribute' => 'Birth Date']),
|
||||
]);
|
||||
if ($validator->fails())
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
|
||||
}
|
||||
else
|
||||
{
|
||||
$members = DB::table('members')
|
||||
->leftJoin('member_policies', 'member_policies.member_id','=', 'members.member_id')
|
||||
->leftJoin('persons', 'persons.id', '=', 'members.person_id')
|
||||
->where('members.member_id', '=', $request->no_polis)
|
||||
->where('members.birth_date', '=', $request->birth_date)
|
||||
->select(
|
||||
'members.id',
|
||||
'members.name',
|
||||
'members.member_id',
|
||||
'member_policies.policy_id',
|
||||
'persons.nik',
|
||||
'members.email',
|
||||
'members.birth_date',
|
||||
'members.gender',
|
||||
'members.marital_status',
|
||||
'members.language',
|
||||
'members.race',
|
||||
'members.relation_with_principal')
|
||||
->first();
|
||||
if($members)
|
||||
{
|
||||
$res_data['members'] = $members;
|
||||
|
||||
$benefits = DB::table('member_plans')
|
||||
->leftJoin('corporate_benefits','corporate_benefits.plan_id', '=', 'member_plans.plan_id')
|
||||
->leftJoin('benefits', 'benefits.id', '=', 'corporate_benefits.benefit_id')
|
||||
->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id')
|
||||
->leftJoin('services', 'services.code', '=', 'plans.service_code')
|
||||
->where('member_plans.member_id', '=', $members->id)
|
||||
->select(
|
||||
'benefits.description',
|
||||
'benefits.code',
|
||||
'corporate_benefits.corporate_id',
|
||||
'plans.service_code'
|
||||
)
|
||||
->get();
|
||||
$res_data['benefits'] = $benefits;
|
||||
$member = Member::query()
|
||||
->where('member_id', $request->no_polis)
|
||||
->where('birth_date', $request->birth_date)
|
||||
->with(['person', 'currentCorporate',
|
||||
// 'currentCorporate.corporateServices' => function ($corporateService) {
|
||||
// $corporateService->where('status', 'active');
|
||||
// },
|
||||
// 'currentCorporate.corporateServices.service'
|
||||
// 'currentPlan.benefits',
|
||||
// 'currentPlan.corporateBenefit.plan',
|
||||
'currentPlan.corporateBenefits.benefit'
|
||||
])
|
||||
->firstOrFail();
|
||||
|
||||
$services = DB::table('member_plans')
|
||||
->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id')
|
||||
->leftJoin('services', 'services.code', '=', 'plans.service_code')
|
||||
->where('member_plans.member_id', $members->id)
|
||||
->whereNull('member_plans.deleted_at')
|
||||
->select('plans.service_code', 'services.name')
|
||||
->get();
|
||||
$res_data['services'] = $services;
|
||||
|
||||
// Group Services
|
||||
$groupServices = [];
|
||||
foreach ($res_data['benefits'] as $benefit) {
|
||||
$serviceCode = $benefit->service_code;
|
||||
$groupServices[$serviceCode][] = [
|
||||
'description' => $benefit->description,
|
||||
'code' => $benefit->code,
|
||||
];
|
||||
}
|
||||
|
||||
$res_data['groupServices'] = $groupServices;
|
||||
|
||||
$res_data['type'] = $request->type;
|
||||
|
||||
// Provider
|
||||
$providers = DB::table('organizations')
|
||||
->where('organizations.type', '=', 'hospital')
|
||||
->where('organizations.corporate_id_partner', '!=', 8)
|
||||
->orWhere('organizations.corporate_id_partner', NULL)
|
||||
->where('status', '=', 'active')
|
||||
->orderBy('organizations.name','asc')
|
||||
->select(
|
||||
'organizations.id',
|
||||
'organizations.name'
|
||||
)
|
||||
->get();
|
||||
|
||||
$res_data['providers'] = $providers;
|
||||
|
||||
//company
|
||||
$companies = DB::table('corporates')
|
||||
->where('corporates.active', '=', 1)
|
||||
->select(
|
||||
'corporates.id',
|
||||
'corporates.name'
|
||||
)
|
||||
->get();
|
||||
|
||||
$res_data['companies'] = $companies;
|
||||
|
||||
//company
|
||||
$companies = DB::table('corporates')
|
||||
->where('corporates.active', '=', 1)
|
||||
->select(
|
||||
'corporates.id',
|
||||
'corporates.name'
|
||||
)
|
||||
->get();
|
||||
|
||||
$res_data['companies'] = $companies;
|
||||
|
||||
$corporateEmployee = DB::table('corporate_employees')
|
||||
->leftJoin('corporates', 'corporates.id', '=', 'corporate_employees.corporate_id')
|
||||
->leftJoin('corporate_policies', 'corporate_policies.corporate_id', '=', 'corporates.id')
|
||||
// ->where('corporate_employees.status', 'ACTIVE')
|
||||
->where('corporates.active', 1)
|
||||
->where('corporate_policies.active', 1)
|
||||
->where('corporate_employees.member_id', $members->id)
|
||||
->select(
|
||||
'corporate_policies.total_premi',
|
||||
'corporate_employees.corporate_id'
|
||||
)
|
||||
->first();
|
||||
|
||||
$res_data['total_premi'] = $corporateEmployee ?? 0;
|
||||
|
||||
$limitRules = DB::table('member_plans')
|
||||
->leftJoin('plans', 'plans.id', '=', 'member_plans.plan_id')
|
||||
->where('member_plans.member_id', $members->id)
|
||||
->where('member_plans.status', 'active')
|
||||
->where('plans.active', 1)
|
||||
->value('plans.limit_rules');
|
||||
|
||||
$res_data['limit_rules'] = $limitRules ?? 0;
|
||||
|
||||
$planMember = MemberPlan::where('member_id', $members->id)->get('plan_id');
|
||||
|
||||
$planId = Plan::whereIn('id', $planMember)->where('service_code', 'OP')->first();
|
||||
$benefit = CorporateBenefit::with(['benefit', 'plan'])->where('plan_id', $planId->id)->get()->toArray();
|
||||
$benefitData = [];
|
||||
if (count($benefit)){
|
||||
foreach($benefit as $data){
|
||||
$data['benefit']['plan_id'] = $data['plan_id'];
|
||||
$data['benefit']['limit_amount'] = $data['limit_amount'];
|
||||
$data['benefit']['family_plan'] = $planId->family_plan;
|
||||
$data['benefit']['max_frequency_period'] = $data['max_frequency_period'];
|
||||
$data['benefit']['limit_amount_plan'] = $data['plan']['limit_rules'];
|
||||
$data['benefit']['family_plan_plans'] = $data['plan']['family_plan'];
|
||||
array_push($benefitData, $data['benefit']);
|
||||
}
|
||||
}
|
||||
$memberUsage = Helper::getUsageMember($corporateEmployee->corporate_id, $members->id, $benefitData);;
|
||||
|
||||
$res_data['used_limit'] = json_decode($memberUsage);
|
||||
|
||||
$usedLimit = json_decode($memberUsage, true); // jadi array
|
||||
|
||||
$totalUsed = 0;
|
||||
|
||||
if (is_array($usedLimit)) {
|
||||
foreach ($usedLimit as $value) {
|
||||
$totalUsed += (int) $value;
|
||||
}
|
||||
}
|
||||
|
||||
$limitRules = (int) $limitRules;
|
||||
|
||||
// hitung sisa
|
||||
$remainingLimit = $limitRules - $totalUsed;
|
||||
|
||||
// biar gak minus
|
||||
if ($remainingLimit < 0) {
|
||||
$remainingLimit = 0;
|
||||
}
|
||||
|
||||
// set ke response
|
||||
$res_data['remaining_limit'] = $remainingLimit;
|
||||
$res_data['total_used_limit'] = $totalUsed;
|
||||
|
||||
// specialities
|
||||
$specialities = DB::table('specialities')
|
||||
->select(
|
||||
'specialities.id',
|
||||
'specialities.name'
|
||||
)
|
||||
->orderBy('specialities.name','asc')
|
||||
->get();
|
||||
|
||||
$res_data['specialities'] = $specialities;
|
||||
|
||||
|
||||
return ApiResponse::apiResponse("Success", $res_data, trans('Message.success'), 200);
|
||||
}
|
||||
else
|
||||
{
|
||||
return ApiResponse::apiResponse("Data Not Found", $data, trans('Message.not_found'), 404);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return Helper::responseJson($member);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,87 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\HospitalPortal\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\Claim;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Modules\HospitalPortal\Helpers\ApiResponse;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class NotificationController extends Controller
|
||||
{
|
||||
public function getNotifications(Request $request, $user_id)
|
||||
{
|
||||
$data = [
|
||||
'user_id' => $user_id,
|
||||
];
|
||||
if (!$user_id)
|
||||
{
|
||||
return ApiResponse::apiResponse('Not Found', $data, trans('Message.not_found'), 404);
|
||||
}
|
||||
else
|
||||
{
|
||||
try {
|
||||
$notifications = DB::table('notifications')
|
||||
->join('notification_types', 'notification_types.id', '=', 'notifications.type')
|
||||
->select(
|
||||
'notifications.id',
|
||||
'notifications.title',
|
||||
'notifications.description',
|
||||
'notifications.avatar',
|
||||
'notification_types.type',
|
||||
DB::raw('DATE_FORMAT(notifications.created_at, "%Y-%m-%dT%H:%i:%s.000+07:00") as createdAt'),
|
||||
'notifications.isUnRead',
|
||||
)
|
||||
->where('user_id', '=', $user_id)
|
||||
->orderBy('id', 'DESC')
|
||||
->get();
|
||||
$res_data['notifications'] = $notifications;
|
||||
return ApiResponse::apiResponse("Success", $res_data, trans('Message.success'), 200);
|
||||
}
|
||||
catch (\Exception $e) {
|
||||
return ApiResponse::apiResponse("Error", $data, $e->getMessage(), 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function setReadNotification(Request $request)
|
||||
{
|
||||
$data = [
|
||||
'user_id' => $request->user_id,
|
||||
'id' => $request->id,
|
||||
'isUnRead'=> 0,
|
||||
];
|
||||
$validator = Validator::make($request->all(), [
|
||||
'user_id' => 'required',
|
||||
'id' => 'required'
|
||||
], [
|
||||
'user_id.required' => trans('Validation.required',['attribute' => 'Hospital ID']),
|
||||
'id.required' => trans('Validation.required',['attribute' => 'ID']),
|
||||
]);
|
||||
if ($validator->fails())
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
|
||||
}
|
||||
else
|
||||
{
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
DB::table('notifications')
|
||||
->where('notifications.id', '=', $request->id)
|
||||
->update($data);
|
||||
DB::commit();
|
||||
return ApiResponse::apiResponse("Success", $data, trans('Message.read_notification'), 200);
|
||||
|
||||
}
|
||||
catch (\Exception $e) {
|
||||
DB::rollback();
|
||||
return ApiResponse::apiResponse("Error", $data, $e->getMessage(), 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,25 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\ProviderIntegrations\Http\Controllers\Api;
|
||||
namespace Modules\HospitalPortal\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\Benefit;
|
||||
use App\Models\CorporateBenefit;
|
||||
use App\Models\Member;
|
||||
use App\Models\MemberPlan;
|
||||
use App\Models\Organization;
|
||||
use App\Models\Plan;
|
||||
use App\Models\Provider;
|
||||
use App\Models\RequestLog;
|
||||
use App\Models\RequestLogBenefit;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Str;
|
||||
use Modules\HospitalPortal\Http\Controllers\Api\RequestLogController;
|
||||
use PDF;
|
||||
use Throwable;
|
||||
|
||||
class ProviderOnlineController extends Controller
|
||||
@@ -77,7 +73,7 @@ class ProviderOnlineController extends Controller
|
||||
'p_token' => 'required|string',
|
||||
]);
|
||||
|
||||
[, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
|
||||
[$provider, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
|
||||
if ($authError) {
|
||||
return $authError;
|
||||
}
|
||||
@@ -94,7 +90,7 @@ class ProviderOnlineController extends Controller
|
||||
$benefits = $member->memberPlans
|
||||
->map(function (MemberPlan $memberPlan) {
|
||||
$plan = $memberPlan->plan;
|
||||
if (!$plan || empty($plan->code)) {
|
||||
if (!$plan) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -105,7 +101,6 @@ class ProviderOnlineController extends Controller
|
||||
];
|
||||
})
|
||||
->filter()
|
||||
->unique('kodebenefit')
|
||||
->values();
|
||||
|
||||
return response()->json([
|
||||
@@ -150,7 +145,7 @@ class ProviderOnlineController extends Controller
|
||||
'p_token' => 'required|string',
|
||||
]);
|
||||
|
||||
[, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
|
||||
[$provider, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
|
||||
if ($authError) {
|
||||
return $authError;
|
||||
}
|
||||
@@ -159,16 +154,13 @@ class ProviderOnlineController extends Controller
|
||||
->with(['person', 'currentCorporate', 'currentPolicy'])
|
||||
->where('member_id', $request->nokartu)
|
||||
->first();
|
||||
|
||||
if (!$member) {
|
||||
return $this->statusError('Peserta tidak ditemukan');
|
||||
}
|
||||
|
||||
$plan = $this->resolvePlan($member, $request->kodebenefit);
|
||||
$generatedLogCode = $this->generateNextRequestLogCode($organization, $member);
|
||||
|
||||
$requestLog = RequestLog::query()->create([
|
||||
'code' => $generatedLogCode,
|
||||
'organization_id' => $organization->id,
|
||||
'member_id' => $member->id,
|
||||
'plan_id' => optional($plan)->id,
|
||||
@@ -210,17 +202,49 @@ class ProviderOnlineController extends Controller
|
||||
'namasubbenefit' => optional($corporateBenefit->benefit)->description,
|
||||
'batasan' => (string) ($corporateBenefit->limit_amount ?? 0),
|
||||
];
|
||||
})
|
||||
->filter(function (array $item) {
|
||||
return !empty($item['kodesubbenefit']);
|
||||
});
|
||||
}
|
||||
|
||||
$this->sendProviderOnlineEmail('pendaftaran baru', $requestLog, $organization);
|
||||
|
||||
return response()->json([
|
||||
'Status' => $this->okStatus(),
|
||||
'Data' => [$this->buildClaimHeader($requestLog, $organization)],
|
||||
'Data' => [[
|
||||
'noklaim' => $requestLog->code,
|
||||
'namapeserta' => $member->full_name,
|
||||
'tanggallahir' => $this->isoDate($member->birth_date),
|
||||
'nokartu' => $member->member_id,
|
||||
'nopolis' => optional($member->currentPolicy)->code,
|
||||
'nobpjs' => $member->bpjs_id,
|
||||
'nosep' => $requestLog->nomor_sep,
|
||||
'nomorrujukan' => $requestLog->nomor_rujukan,
|
||||
'planid' => optional($plan)->code,
|
||||
'masapolis' => optional($member->currentPolicy)->end ? Carbon::parse($member->currentPolicy->end)->format('d/m/Y') : null,
|
||||
'namaperusahaan' => optional($member->currentCorporate)->name,
|
||||
'namapenjamin' => $organization->name,
|
||||
'tanggalmasuk' => $this->isoDate($requestLog->admission_date),
|
||||
'tanggalkeluar' => $this->isoDate($requestLog->discharge_date),
|
||||
'hakkamar' => $requestLog->penempatan_kamar,
|
||||
'hakicu' => null,
|
||||
'nosuratjaminan' => $requestLog->code,
|
||||
'namapegawai' => null,
|
||||
'namabenefit' => optional($plan)->corporate_plan_id,
|
||||
'kodediagnosa' => $requestLog->diagnosis,
|
||||
'keterangan' => $requestLog->keterangan,
|
||||
'catatanTC1' => null,
|
||||
'catatanTC2' => null,
|
||||
'catatanTC3' => null,
|
||||
'catatanTC4' => null,
|
||||
'catatanTC5' => null,
|
||||
'catatanTC6' => null,
|
||||
'catatanTC7' => null,
|
||||
'catatanTC8' => null,
|
||||
'catatanTC9' => null,
|
||||
'catatanTC10' => null,
|
||||
'statusrujukan' => $requestLog->status_rujukan,
|
||||
'statusklaim' => 0,
|
||||
'notransaksiprovider' => $requestLog->no_transaksi_provider,
|
||||
'inacbgscode' => $requestLog->inacbgs_code,
|
||||
'inacbgsamount' => (float) ($requestLog->inacbgs_amount ?? 0),
|
||||
]],
|
||||
'LimitSubBenefit' => $limitSubBenefit->values(),
|
||||
]);
|
||||
}
|
||||
@@ -241,7 +265,7 @@ class ProviderOnlineController extends Controller
|
||||
'p_token' => 'required|string',
|
||||
]);
|
||||
|
||||
[, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
|
||||
[$provider, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
|
||||
if ($authError) {
|
||||
return $authError;
|
||||
}
|
||||
@@ -251,16 +275,10 @@ class ProviderOnlineController extends Controller
|
||||
->where('code', $request->noklaim)
|
||||
->where('organization_id', $organization->id)
|
||||
->first();
|
||||
|
||||
if (!$requestLog) {
|
||||
return $this->statusError('Nomor klaim tidak ditemukan');
|
||||
}
|
||||
|
||||
$benefitsByCode = $this->resolveBenefitCodes($request->daftarbiaya ?? []);
|
||||
if (isset($benefitsByCode['error'])) {
|
||||
return $this->statusError($benefitsByCode['error']);
|
||||
}
|
||||
|
||||
$requestLog->update([
|
||||
'status_final_log' => 'approve',
|
||||
'final_log' => true,
|
||||
@@ -271,7 +289,10 @@ class ProviderOnlineController extends Controller
|
||||
]);
|
||||
|
||||
foreach (($request->daftarbiaya ?? []) as $biaya) {
|
||||
$benefit = $benefitsByCode[$biaya['kodesubbenefit']];
|
||||
$benefit = Benefit::query()->where('code', $biaya['kodesubbenefit'])->first();
|
||||
if (!$benefit) {
|
||||
continue;
|
||||
}
|
||||
|
||||
RequestLogBenefit::query()->updateOrCreate(
|
||||
[
|
||||
@@ -304,78 +325,50 @@ class ProviderOnlineController extends Controller
|
||||
];
|
||||
})->values();
|
||||
|
||||
$this->sendProviderOnlineEmail('pengesahan', $requestLog, $organization);
|
||||
|
||||
return response()->json([
|
||||
'Status' => $this->okStatus(),
|
||||
'Data' => [$this->buildClaimHeader($requestLog, $organization)],
|
||||
'Data' => [[
|
||||
'noklaim' => $requestLog->code,
|
||||
'namapeserta' => optional($requestLog->member)->full_name,
|
||||
'tanggallahir' => $this->isoDate(optional($requestLog->member)->birth_date),
|
||||
'nokartu' => optional($requestLog->member)->member_id,
|
||||
'nopolis' => optional(optional($requestLog->member)->currentPolicy)->code,
|
||||
'nobpjs' => optional($requestLog->member)->bpjs_id,
|
||||
'nosep' => $requestLog->nomor_sep,
|
||||
'nomorrujukan' => $requestLog->nomor_rujukan,
|
||||
'planid' => optional($requestLog->plan)->code,
|
||||
'masapolis' => optional(optional($requestLog->member)->currentPolicy)->end ? Carbon::parse($requestLog->member->currentPolicy->end)->format('d/m/Y') : null,
|
||||
'namaperusahaan' => optional(optional($requestLog->member)->currentCorporate)->name,
|
||||
'namapenjamin' => $organization->name,
|
||||
'tanggalmasuk' => $this->isoDate($requestLog->admission_date),
|
||||
'tanggalkeluar' => $this->isoDate($requestLog->discharge_date),
|
||||
'hakkamar' => $requestLog->penempatan_kamar,
|
||||
'hakicu' => null,
|
||||
'nosuratjaminan' => $requestLog->code,
|
||||
'namapegawai' => null,
|
||||
'namabenefit' => optional($requestLog->plan)->corporate_plan_id,
|
||||
'kodediagnosa' => $requestLog->diagnosis,
|
||||
'keterangan' => $requestLog->keterangan,
|
||||
'catatanTC1' => null,
|
||||
'catatanTC2' => null,
|
||||
'catatanTC3' => null,
|
||||
'catatanTC4' => null,
|
||||
'catatanTC5' => null,
|
||||
'catatanTC6' => null,
|
||||
'catatanTC7' => null,
|
||||
'catatanTC8' => null,
|
||||
'catatanTC9' => null,
|
||||
'catatanTC10' => null,
|
||||
'statusrujukan' => $requestLog->status_rujukan,
|
||||
'statusklaim' => 0,
|
||||
'notransaksiprovider' => $requestLog->no_transaksi_provider,
|
||||
'inacbgscode' => $requestLog->inacbgs_code,
|
||||
'inacbgsamount' => (float) ($requestLog->inacbgs_amount ?? 0),
|
||||
]],
|
||||
'Biaya' => $biayaResponse,
|
||||
]);
|
||||
}
|
||||
|
||||
public function upsertBillingSementara(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'noklaim' => 'required|string',
|
||||
'kodeprovider' => 'required|string',
|
||||
'tanggalkeluar' => 'nullable|date',
|
||||
'kodediagnosa' => 'nullable|string',
|
||||
'daftarbiaya' => 'nullable|array',
|
||||
'daftarbiaya.*.kodesubbenefit' => 'required_with:daftarbiaya|string',
|
||||
'daftarbiaya.*.biayaaju' => 'required_with:daftarbiaya|numeric',
|
||||
'p_user_no' => 'required',
|
||||
'p_token' => 'required|string',
|
||||
]);
|
||||
|
||||
[, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
|
||||
if ($authError) {
|
||||
return $authError;
|
||||
}
|
||||
|
||||
$requestLog = RequestLog::query()
|
||||
->where('code', $request->noklaim)
|
||||
->where('organization_id', $organization->id)
|
||||
->first();
|
||||
|
||||
if (!$requestLog) {
|
||||
return $this->statusError('Nomor klaim tidak ditemukan');
|
||||
}
|
||||
|
||||
$benefitsByCode = $this->resolveBenefitCodes($request->daftarbiaya ?? []);
|
||||
if (isset($benefitsByCode['error'])) {
|
||||
return $this->statusError($benefitsByCode['error']);
|
||||
}
|
||||
|
||||
$requestLog->update([
|
||||
'discharge_date' => $request->tanggalkeluar,
|
||||
'diagnosis' => $request->kodediagnosa,
|
||||
]);
|
||||
|
||||
foreach (($request->daftarbiaya ?? []) as $biaya) {
|
||||
$benefit = $benefitsByCode[$biaya['kodesubbenefit']];
|
||||
|
||||
RequestLogBenefit::query()->updateOrCreate(
|
||||
[
|
||||
'request_log_id' => $requestLog->id,
|
||||
'benefit_id' => $benefit->id,
|
||||
],
|
||||
[
|
||||
'amount_incurred' => $biaya['biayaaju'],
|
||||
'amount_approved' => 0,
|
||||
'amount_not_approved' => 0,
|
||||
'excess_paid' => 0,
|
||||
'keterangan' => null,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
$this->sendProviderOnlineEmail('upsert billing sementara', $requestLog, $organization);
|
||||
|
||||
return response()->json([
|
||||
'Status' => $this->okStatus(),
|
||||
]);
|
||||
}
|
||||
|
||||
public function getRincianBiayaKlaim(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
@@ -385,17 +378,16 @@ class ProviderOnlineController extends Controller
|
||||
'p_token' => 'required|string',
|
||||
]);
|
||||
|
||||
[, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
|
||||
[$provider, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
|
||||
if ($authError) {
|
||||
return $authError;
|
||||
}
|
||||
|
||||
$requestLog = RequestLog::query()
|
||||
->with(['member.person', 'member.currentCorporate', 'member.currentPolicy', 'plan', 'requestLogBenefits.benefit'])
|
||||
->with(['plan', 'requestLogBenefits.benefit'])
|
||||
->where('code', $request->noklaim)
|
||||
->where('organization_id', $organization->id)
|
||||
->first();
|
||||
|
||||
if (!$requestLog) {
|
||||
return $this->statusError('Nomor klaim tidak ditemukan');
|
||||
}
|
||||
@@ -416,7 +408,13 @@ class ProviderOnlineController extends Controller
|
||||
|
||||
return response()->json([
|
||||
'Status' => $this->okStatus(),
|
||||
'Data' => [$this->buildClaimHeader($requestLog, $organization)],
|
||||
'Data' => [
|
||||
'noklaim' => $requestLog->code,
|
||||
'kodeprovider' => $organization->code,
|
||||
'nosep' => $requestLog->nomor_sep,
|
||||
'keterangan' => $requestLog->keterangan,
|
||||
'statusklaim' => $requestLog->status,
|
||||
],
|
||||
'Biaya' => $biaya,
|
||||
]);
|
||||
}
|
||||
@@ -430,29 +428,25 @@ class ProviderOnlineController extends Controller
|
||||
'p_token' => 'required|string',
|
||||
]);
|
||||
|
||||
[, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
|
||||
[$provider, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
|
||||
if ($authError) {
|
||||
return $authError;
|
||||
}
|
||||
|
||||
$requestLog = RequestLog::query()
|
||||
->where('code', $request->noklaim)
|
||||
->where('organization_id', $organization->id)
|
||||
->first();
|
||||
|
||||
$requestLog = RequestLog::query()->where('code', $request->noklaim)->where('organization_id', $organization->id)->first();
|
||||
if (!$requestLog) {
|
||||
return $this->statusError('Nomor klaim tidak ditemukan');
|
||||
}
|
||||
|
||||
try {
|
||||
return (new RequestLogController())->downlodLog($requestLog->id);
|
||||
} catch (Throwable $e) {
|
||||
$fallbackUrl = url('api/v1/hospitalportal/download-log/' . $requestLog->id);
|
||||
$member = Member::findOrFail($requestLog->member_id)
|
||||
->load(['currentPlan', 'currentPolicy', 'currentPlan.corporateBenefits', 'currentPlan.corporateBenefits.benefit']);
|
||||
$dateOfAdmission = $requestLog->admission_date ? Carbon::parse($requestLog->admission_date) : now();
|
||||
|
||||
return $this->statusError(
|
||||
'Gagal generate PDF struk pendaftaran: ' . $e->getMessage() . '. request_log_id=' . $requestLog->id . ', fallback_url=' . $fallbackUrl,
|
||||
500
|
||||
);
|
||||
try {
|
||||
$pdf = PDF::loadView('pdf.guaranted_leter', compact('member', 'dateOfAdmission'));
|
||||
return $pdf->download('Struk-Pendaftaran-' . $requestLog->code . '.pdf');
|
||||
} catch (Throwable $e) {
|
||||
return $this->statusError('Gagal generate PDF struk pendaftaran: ' . $e->getMessage(), 500);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -465,29 +459,25 @@ class ProviderOnlineController extends Controller
|
||||
'p_token' => 'required|string',
|
||||
]);
|
||||
|
||||
[, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
|
||||
[$provider, $organization, $authError] = $this->resolveProvider($request->kodeprovider, $request->p_user_no, $request->p_token);
|
||||
if ($authError) {
|
||||
return $authError;
|
||||
}
|
||||
|
||||
$requestLog = RequestLog::query()
|
||||
->where('code', $request->noklaim)
|
||||
->where('organization_id', $organization->id)
|
||||
->first();
|
||||
|
||||
$requestLog = RequestLog::query()->where('code', $request->noklaim)->where('organization_id', $organization->id)->first();
|
||||
if (!$requestLog) {
|
||||
return $this->statusError('Nomor klaim tidak ditemukan');
|
||||
}
|
||||
|
||||
try {
|
||||
return (new RequestLogController())->downlodFinalLog($requestLog->id);
|
||||
} catch (Throwable $e) {
|
||||
$fallbackUrl = url('api/v1/hospitalportal/download-final-log/' . $requestLog->id);
|
||||
$member = Member::findOrFail($requestLog->member_id)
|
||||
->load(['currentPlan', 'currentPolicy', 'currentPlan.corporateBenefits', 'currentPlan.corporateBenefits.benefit']);
|
||||
$dateOfAdmission = $requestLog->discharge_date ? Carbon::parse($requestLog->discharge_date) : now();
|
||||
|
||||
return $this->statusError(
|
||||
'Gagal generate PDF struk pengesahan: ' . $e->getMessage() . '. request_log_id=' . $requestLog->id . ', fallback_url=' . $fallbackUrl,
|
||||
500
|
||||
);
|
||||
try {
|
||||
$pdf = PDF::loadView('pdf.guaranted_leter', compact('member', 'dateOfAdmission'));
|
||||
return $pdf->download('Struk-Pengesahan-' . $requestLog->code . '.pdf');
|
||||
} catch (Throwable $e) {
|
||||
return $this->statusError('Gagal generate PDF struk pengesahan: ' . $e->getMessage(), 500);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -504,7 +494,6 @@ class ProviderOnlineController extends Controller
|
||||
->where('code', $kodeProvider)
|
||||
->where('status', 'active')
|
||||
->first();
|
||||
|
||||
if (!$provider) {
|
||||
return [null, null, $this->statusError('User provider tidak ditemukan')];
|
||||
}
|
||||
@@ -516,10 +505,9 @@ class ProviderOnlineController extends Controller
|
||||
return [$provider, $organization, null];
|
||||
}
|
||||
|
||||
private function resolvePlan(Member $member, string $serviceCode): ?Plan
|
||||
private function resolvePlan(Member $member, string $serviceCode)
|
||||
{
|
||||
$memberPlan = $member->memberPlans()
|
||||
->with('plan')
|
||||
$memberPlan = $member->memberPlans()->with('plan')
|
||||
->where('status', 'active')
|
||||
->orderByDesc('id')
|
||||
->get()
|
||||
@@ -534,117 +522,6 @@ class ProviderOnlineController extends Controller
|
||||
return optional($member->memberPlans()->with('plan')->orderByDesc('id')->first())->plan;
|
||||
}
|
||||
|
||||
private function resolveBenefitCodes(array $daftarBiaya): array
|
||||
{
|
||||
$codes = collect($daftarBiaya)
|
||||
->pluck('kodesubbenefit')
|
||||
->filter()
|
||||
->unique()
|
||||
->values();
|
||||
|
||||
if ($codes->isEmpty()) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$benefits = Benefit::query()
|
||||
->whereIn('code', $codes)
|
||||
->get()
|
||||
->keyBy('code');
|
||||
|
||||
$missing = $codes->filter(function (string $code) use ($benefits) {
|
||||
return !$benefits->has($code);
|
||||
});
|
||||
|
||||
if ($missing->isNotEmpty()) {
|
||||
return [
|
||||
'error' => 'Kode sub benefit tidak valid: ' . $missing->implode(', '),
|
||||
];
|
||||
}
|
||||
|
||||
return $benefits->all();
|
||||
}
|
||||
|
||||
private function buildClaimHeader(RequestLog $requestLog, Organization $organization): array
|
||||
{
|
||||
$requestLog->loadMissing(['member.currentCorporate', 'member.currentPolicy', 'plan']);
|
||||
|
||||
return [
|
||||
'noklaim' => $requestLog->code,
|
||||
'namapeserta' => optional($requestLog->member)->full_name,
|
||||
'tanggallahir' => $this->isoDate(optional($requestLog->member)->birth_date),
|
||||
'nokartu' => optional($requestLog->member)->member_id,
|
||||
'nopolis' => optional(optional($requestLog->member)->currentPolicy)->code,
|
||||
'nobpjs' => optional($requestLog->member)->bpjs_id,
|
||||
'nosep' => $requestLog->nomor_sep,
|
||||
'nomorrujukan' => $requestLog->nomor_rujukan,
|
||||
'planid' => optional($requestLog->plan)->code,
|
||||
'masapolis' => optional(optional($requestLog->member)->currentPolicy)->end
|
||||
? Carbon::parse($requestLog->member->currentPolicy->end)->format('d/m/Y')
|
||||
: null,
|
||||
'namaperusahaan' => optional(optional($requestLog->member)->currentCorporate)->name,
|
||||
'namapenjamin' => $organization->name,
|
||||
'tanggalmasuk' => $this->isoDate($requestLog->admission_date),
|
||||
'tanggalkeluar' => $this->isoDate($requestLog->discharge_date),
|
||||
'hakkamar' => $requestLog->penempatan_kamar,
|
||||
'hakicu' => null,
|
||||
'nosuratjaminan' => $requestLog->code,
|
||||
'namapegawai' => null,
|
||||
'namabenefit' => optional($requestLog->plan)->corporate_plan_id,
|
||||
'kodediagnosa' => $requestLog->diagnosis,
|
||||
'keterangan' => $requestLog->keterangan,
|
||||
'catatanTC1' => null,
|
||||
'catatanTC2' => null,
|
||||
'catatanTC3' => null,
|
||||
'catatanTC4' => null,
|
||||
'catatanTC5' => null,
|
||||
'catatanTC6' => null,
|
||||
'catatanTC7' => null,
|
||||
'catatanTC8' => null,
|
||||
'catatanTC9' => null,
|
||||
'catatanTC10' => null,
|
||||
'statusrujukan' => $requestLog->status_rujukan,
|
||||
'statusklaim' => 0,
|
||||
'notransaksiprovider' => $requestLog->no_transaksi_provider,
|
||||
'inacbgscode' => $requestLog->inacbgs_code,
|
||||
'inacbgsamount' => (float) ($requestLog->inacbgs_amount ?? 0),
|
||||
];
|
||||
}
|
||||
|
||||
private function sendProviderOnlineEmail(string $eventName, RequestLog $requestLog, Organization $organization): void
|
||||
{
|
||||
$email = trim((string) ($organization->email ?: env('PROVIDER_ONLINE_NOTIFICATION_EMAIL', 'helpdesk@linksehat.com')));
|
||||
if (!$email || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$name = $organization->name ?: 'Provider';
|
||||
$subject = sprintf('[ProviderOnline] %s - %s', ucfirst($eventName), $requestLog->code);
|
||||
$body = sprintf(
|
||||
'<p>Halo %s,</p><p>Event <strong>%s</strong> berhasil diproses untuk nomor klaim <strong>%s</strong>.</p><p>Waktu: %s</p>',
|
||||
e($name),
|
||||
e($eventName),
|
||||
e($requestLog->code),
|
||||
now()->format('Y-m-d H:i:s')
|
||||
);
|
||||
|
||||
try {
|
||||
Helper::sendEmail([
|
||||
'email' => $email,
|
||||
'name' => $name,
|
||||
'subject' => $subject,
|
||||
'body' => $body,
|
||||
]);
|
||||
} catch (Throwable $throwable) {
|
||||
Log::warning('ProviderOnline notification email failed', [
|
||||
'event' => $eventName,
|
||||
'request_log_id' => $requestLog->id,
|
||||
'request_log_code' => $requestLog->code,
|
||||
'organization_id' => $organization->id,
|
||||
'error' => $throwable->getMessage(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
private function okStatus(): array
|
||||
{
|
||||
return [
|
||||
@@ -685,39 +562,4 @@ class ProviderOnlineController extends Controller
|
||||
|
||||
return Carbon::parse($date)->toISOString();
|
||||
}
|
||||
|
||||
private function generateNextRequestLogCode(Organization $organization, Member $member): string
|
||||
{
|
||||
$data = [
|
||||
'source' => 'H',
|
||||
'provideCode' => $organization->code ?? '',
|
||||
'date' => date('ymd'),
|
||||
'policy' => optional($member->currentPolicy)->code ?? '-',
|
||||
'member_code' => $member->member_id ?? '-',
|
||||
];
|
||||
|
||||
$lastNumericCode = RequestLog::query()
|
||||
->select(DB::raw('MAX(CAST(SUBSTRING_INDEX(code, ".", -1) AS SIGNED)) as max_numeric_code'))
|
||||
->whereRaw('SUBSTRING_INDEX(code, ".", -1) REGEXP "^[0-9]+$"')
|
||||
->value('max_numeric_code');
|
||||
|
||||
$nextNumber = $lastNumericCode ? ((int) $lastNumericCode + 1) : 1;
|
||||
|
||||
return $this->makeRequestLogCode($nextNumber, $data);
|
||||
}
|
||||
|
||||
private function makeRequestLogCode(int $nextNumber, array $data): string
|
||||
{
|
||||
$nextNumber = max(1, $nextNumber);
|
||||
|
||||
return implode('.', [
|
||||
'LOG',
|
||||
$data['source'],
|
||||
$data['provideCode'],
|
||||
$data['date'],
|
||||
$data['policy'],
|
||||
$data['member_code'],
|
||||
str_pad((string) $nextNumber, 5, '0', STR_PAD_LEFT),
|
||||
]);
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,721 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\HospitalPortal\Http\Controllers;
|
||||
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use App\Helpers\Helper;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Modules\HospitalPortal\Helpers\ApiResponse;
|
||||
use Modules\HospitalPortal\Helpers\GrabHelper;
|
||||
use Ramsey\Uuid\Uuid;
|
||||
use Ramsey\Uuid\Exception\UnsatisfiedDependencyException;
|
||||
|
||||
class ApotekController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$limit = $request->has('per_page') ? $request->input('per_page') : 10;
|
||||
|
||||
$results = DB::connection('oldlms')->table('tx_prescriptions')
|
||||
->join('tx_prescription_orders', 'tx_prescription_orders.nIDPrescription', '=', 'tx_prescriptions.nID')
|
||||
->join('tm_users', 'tm_users.nID', '=', 'tx_prescriptions.nIDUser')
|
||||
->when(auth()->user()->organization_id, function ($query, $organizationId) {
|
||||
$query->where('tx_prescription_orders.nIDApotek', '=', $organizationId);
|
||||
})
|
||||
->when($request->input('search'), function ($query, $search) {
|
||||
$query->where(function ($query) use ($search) {
|
||||
$query->orWhere('tx_prescriptions.sKodeResep', 'like', "%" . $search . "%")
|
||||
->orWhere('tm_users.sFirstName', 'like', "%" . $search . "%");
|
||||
});
|
||||
})
|
||||
->when($request->has('orderBy'), function ($query) use ($request) {
|
||||
$orderBy = $request->orderBy;
|
||||
$direction = $request->order ?? 'asc';
|
||||
|
||||
if($orderBy == 'apotek')
|
||||
{
|
||||
$orderBy = 'nIDApotek';
|
||||
}
|
||||
|
||||
$query->orderBy($orderBy, $direction);
|
||||
})
|
||||
->when($request->input('start_date') && !$request->input('end_date'), function ($query, $start_date) {
|
||||
$query->where(function ($query) use ($start_date) {
|
||||
$query->where('tx_prescriptions.dTanggalresep', '<', $start_date);
|
||||
});
|
||||
})
|
||||
->when($request->input('status'), function ($query, $status) {
|
||||
// Apply the filter if 'status' has a value
|
||||
if ($status !== 'all') {
|
||||
$query->where(function ($query) use ($status) {
|
||||
$query->where('tx_prescription_orders.sStatus', '=', $status);
|
||||
});
|
||||
}
|
||||
})
|
||||
->select(
|
||||
'tx_prescriptions.nID as id',
|
||||
'tx_prescription_orders.nID as nID_orders',
|
||||
'tx_prescriptions.nIDUser',
|
||||
'tx_prescriptions.sKodeResep as no_resep',
|
||||
'tx_prescriptions.dTanggalResep as tanggal',
|
||||
'tx_prescription_orders.nIDApotek',
|
||||
'tx_prescription_orders.sStatus as status',
|
||||
'tx_prescription_orders.sStatus',
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN TIMESTAMPDIFF(HOUR, tx_prescriptions.dTanggalResep, NOW()) > 72 THEN ""
|
||||
WHEN TIMESTAMPDIFF(HOUR, tx_prescriptions.dTanggalResep, NOW()) > 1 AND tx_prescription_orders.sStatus = "waiting_pharmacy" THEN "1"
|
||||
WHEN TIMESTAMPDIFF(HOUR, tx_prescriptions.dTanggalResep, NOW()) > 2 AND tx_prescription_orders.sStatus = "order_prepared" THEN "2"
|
||||
WHEN TIMESTAMPDIFF(HOUR, tx_prescriptions.dTanggalResep, NOW()) > 3 AND tx_prescription_orders.sStatus = "ready" THEN "3"
|
||||
ELSE ""
|
||||
END AS alert
|
||||
'),
|
||||
DB::raw('
|
||||
CASE
|
||||
WHEN tx_prescription_orders.sStatus = "waiting_pharmacy" THEN "Diterima"
|
||||
WHEN tx_prescription_orders.sStatus = "order_prepared" THEN "Siap Diambil"
|
||||
WHEN tx_prescription_orders.sStatus = "ready" THEN "Cari Kurir"
|
||||
WHEN tx_prescription_orders.sStatus = "failed" THEN "Cari Kurir"
|
||||
WHEN tx_prescription_orders.sStatus = "waiting_for_courir" THEN "Pesanan Diambil"
|
||||
WHEN tx_prescription_orders.sStatus = "package_picked_up" THEN "Sedang Diantar"
|
||||
WHEN tx_prescription_orders.sStatus = "package_on_delivery" THEN "Selesai"
|
||||
ELSE ""
|
||||
END AS button_accept'),
|
||||
DB::raw('CONCAT(
|
||||
COALESCE(tm_users.sFirstName, ""),
|
||||
" ",
|
||||
COALESCE(tm_users.sMiddleName, ""),
|
||||
" ",
|
||||
COALESCE(tm_users.sLastName, "")
|
||||
) as pasien'),
|
||||
DB::raw('
|
||||
(SELECT CONCAT(
|
||||
COALESCE(u.sFirstName, ""),
|
||||
" ",
|
||||
COALESCE(u.sMiddleName, ""),
|
||||
" ",
|
||||
COALESCE(u.sLastName, "")
|
||||
)
|
||||
FROM tm_dokter d
|
||||
LEFT JOIN tm_users u ON u.nID = d.nIDUser
|
||||
WHERE d.nID = tx_prescriptions.nIDDokter LIMIT 1) AS nama_dokter
|
||||
'),
|
||||
DB::raw('
|
||||
(SELECT s.sSpesialis
|
||||
FROM tm_dokter d
|
||||
LEFT JOIN tm_spesialis s ON s.nID = d.nIDSpesialis
|
||||
WHERE d.nID = tx_prescriptions.nIDDokter LIMIT 1) AS spesialis
|
||||
'),
|
||||
DB::raw('
|
||||
(SELECT t.sSIP
|
||||
FROM tm_dokter d
|
||||
LEFT JOIN tx_jadwal_dokter t ON t.nIDDokter = d.nID
|
||||
WHERE d.nID = tx_prescriptions.nIDDokter LIMIT 1) AS sip
|
||||
'),
|
||||
DB::raw('
|
||||
(SELECT u.sPhone
|
||||
FROM tm_dokter d
|
||||
LEFT JOIN tm_users u ON u.nID = d.nIDUser
|
||||
WHERE d.nID = tx_prescriptions.nIDDokter LIMIT 1) AS no_ponsel_dokter
|
||||
'),
|
||||
DB::raw('
|
||||
(SELECT tm_users_detail.dTanggalLahir
|
||||
FROM tm_users_detail
|
||||
WHERE tm_users_detail.nIDUser = tm_users.nID LIMIT 1) AS tgl_lahir_pasien
|
||||
'),
|
||||
DB::raw('
|
||||
(SELECT CASE
|
||||
WHEN tm_users_detail.nIDJenisKelamin = 1 THEN "Male"
|
||||
ELSE "Female"
|
||||
END
|
||||
FROM tm_users_detail
|
||||
WHERE tm_users_detail.nIDUser = tm_users.nID LIMIT 1) AS jenis_kelamin_pasien
|
||||
'),
|
||||
DB::raw('
|
||||
(SELECT CONCAT(tm_users_detail.sHeight, "/", tm_users_detail.sWeight)
|
||||
FROM tm_users_detail
|
||||
WHERE tm_users_detail.nIDUser = tm_users.nID LIMIT 1) AS tinggi_berat
|
||||
'),
|
||||
DB::raw('
|
||||
(SELECT tm_users_insurance.sNoPolis
|
||||
FROM tm_users_insurance
|
||||
LEFT JOIN tm_insurance ON tm_users_insurance.nIDInsurance = tm_insurance.nID
|
||||
WHERE tm_users_insurance.nIDUser = tx_prescriptions.nIDUser LIMIT 1) AS no_polis
|
||||
'),
|
||||
DB::raw('
|
||||
(SELECT tm_insurance.sInsurance
|
||||
FROM tm_users_insurance
|
||||
LEFT JOIN tm_insurance ON tm_users_insurance.nIDInsurance = tm_insurance.nID
|
||||
WHERE tm_users_insurance.nIDUser = tx_prescriptions.nIDUser LIMIT 1) AS perusahaan_asuransi
|
||||
'),
|
||||
DB::raw('
|
||||
(SELECT tm_users_insurance.sCorporateName
|
||||
FROM tm_users_insurance
|
||||
LEFT JOIN tm_insurance ON tm_users_insurance.nIDInsurance = tm_insurance.nID
|
||||
WHERE tm_users_insurance.nIDUser = tx_prescriptions.nIDUser LIMIT 1) AS nama_perusahaan
|
||||
'),
|
||||
DB::raw('
|
||||
(SELECT tm_users_insurance.sProductCode
|
||||
FROM tm_users_insurance
|
||||
LEFT JOIN tm_insurance ON tm_users_insurance.nIDInsurance = tm_insurance.nID
|
||||
WHERE tm_users_insurance.nIDUser = tx_prescriptions.nIDUser LIMIT 1) AS kode_produk
|
||||
'),
|
||||
DB::raw('
|
||||
(
|
||||
SELECT
|
||||
CASE
|
||||
WHEN tm_users_insurance.sPlanCode = "A" THEN "Alba"
|
||||
WHEN tm_users_insurance.sPlanCode = "B" THEN "Blue"
|
||||
WHEN tm_users_insurance.sPlanCode = "S" THEN "Silver"
|
||||
WHEN tm_users_insurance.sPlanCode = "G" THEN "Gold"
|
||||
WHEN tm_users_insurance.sPlanCode = "P" THEN "Platinum"
|
||||
WHEN tm_users_insurance.sPlanCode = "D" THEN "Diamond"
|
||||
ELSE ""
|
||||
END AS kelas_asuransi
|
||||
FROM tm_users_insurance
|
||||
LEFT JOIN tm_insurance ON tm_users_insurance.nIDInsurance = tm_insurance.nID
|
||||
WHERE tm_users_insurance.nIDUser = tx_prescriptions.nIDUser
|
||||
LIMIT 1
|
||||
) AS kelas_asuransi
|
||||
'),
|
||||
DB::raw('
|
||||
(
|
||||
SELECT
|
||||
CASE
|
||||
WHEN tm_hubungan_keluarga.sHubunganKeluarga = "Husband" THEN "S"
|
||||
WHEN tm_hubungan_keluarga.sHubunganKeluarga = "Wife" THEN "I"
|
||||
WHEN tm_hubungan_keluarga.sHubunganKeluarga = "Child" THEN "A"
|
||||
ELSE "P"
|
||||
END AS tipe_member
|
||||
FROM tm_hubungan_keluarga
|
||||
WHERE tm_hubungan_keluarga.nID = tm_users.nIDHubunganKeluarga
|
||||
LIMIT 1
|
||||
) AS tipe_member
|
||||
'),
|
||||
'tx_prescription_orders.sAddress AS alamat_penerima',
|
||||
'tx_prescription_orders.sDeliveryMethod AS pengiriman',
|
||||
'tx_prescription_orders.nTotalPrice AS total_kirim',
|
||||
'tx_prescriptions.sNoRefProvider AS noref_dokter',
|
||||
DB::raw('DATE_ADD(tx_prescriptions.dTanggalResep, INTERVAL 1 DAY) as valid_tanggal'),
|
||||
'tx_prescriptions.sNomorPenjamin AS nomor_penjamin',
|
||||
DB::raw('
|
||||
(SELECT tx_livechat.dCreateOn
|
||||
FROM tx_livechat
|
||||
WHERE tx_livechat.nID = tx_prescriptions.nIDLivechat LIMIT 1) AS tgl_livechat
|
||||
'),
|
||||
'tx_prescriptions.sDiagnose as diagnosa',
|
||||
'tx_prescription_orders.nDeliveryID',
|
||||
'tx_prescription_orders.sDeliveryStatus'
|
||||
)
|
||||
->paginate($limit);
|
||||
|
||||
// Secret key for generating the token
|
||||
$secret_key = env('SECRET_KEY_LMS');
|
||||
|
||||
// Transform the results to include the download link
|
||||
$results->getCollection()->transform(function ($item) use ($secret_key) {
|
||||
// Generate the token with the timestamp
|
||||
$expiry_time = time() + 86400; // Token expiry time (1 day)
|
||||
$token = hash_hmac('sha256', $item->id . $expiry_time, $secret_key);
|
||||
|
||||
// Construct the download link
|
||||
$path = 'prescription/barcode-print-pdf/' . $item->id . '?token=' . urlencode($token) . '&expiry=' . $expiry_time;
|
||||
$host = $_SERVER['HTTP_HOST']; // This will give you the host like 'linksehat.dev' or 'linksehat.com'
|
||||
$base_url = "https://m.linksehat.dev/";
|
||||
// Check if the host contains '.dev'
|
||||
if (strpos($host, '.com') !== false) {
|
||||
$base_url = "https://m.linksehat.com/";
|
||||
}
|
||||
$item->link_download = $base_url.$path;
|
||||
|
||||
return $item;
|
||||
});
|
||||
|
||||
$apotekIds = $results->pluck(value: 'nIDApotek')->unique()->filter();
|
||||
$organizations = DB::connection('mysql')->table('organizations')
|
||||
->whereIn('id', $apotekIds)
|
||||
->pluck('name', 'id');
|
||||
$results->getCollection()->transform(function ($item) use ($organizations) {
|
||||
$item->apotek = $organizations->get($item->nIDApotek, '-'); // Default to 'Unknown' if not found
|
||||
return $item;
|
||||
});
|
||||
$apotek_phone = DB::connection('mysql')->table('organizations')
|
||||
// ->leftJoin('addresses', 'addresses.id','=', 'organizations.main_address_id')
|
||||
->whereIn('organizations.id', $apotekIds)
|
||||
->pluck('organizations.phone', 'organizations.id');
|
||||
$results->getCollection()->transform(function ($item) use ($apotek_phone) {
|
||||
$item->phone_apotek = $apotek_phone->get($item->nIDApotek, '-'); // Default to 'Unknown' if not found
|
||||
return $item;
|
||||
});
|
||||
// Transform results to include allergies
|
||||
$results->getCollection()->transform(function ($item) use ($organizations) {
|
||||
// Get the allergies for each user
|
||||
$allergies = $this->getAllergies($item->nIDUser);
|
||||
|
||||
// Concatenate the allergy description
|
||||
$alergi_desc = '';
|
||||
foreach ($allergies as $row) {
|
||||
$alergi_desc .= $row->sAlergi . ' - ' . $row->sKeterangan . ', ';
|
||||
}
|
||||
|
||||
// Set apotek and allergies data
|
||||
$item->apotek = $organizations->get($item->nIDApotek, '-'); // Default to 'Unknown' if not found
|
||||
$item->alergi_desc = rtrim($alergi_desc, ', '); // Remove the trailing comma
|
||||
|
||||
return $item;
|
||||
});
|
||||
// Extract unique Prescription IDs from the results
|
||||
$prescriptionIDs = $results->pluck('id')->unique()->filter();
|
||||
|
||||
// Fetch prescription items based on Prescription IDs
|
||||
$items = DB::connection('oldlms')->table('tx_prescription_items')
|
||||
->whereIn('nIDPrescription', $prescriptionIDs)
|
||||
->select('nIDPrescription', 'sItemName', 'sSigna', 'sTiming', 'sDuration', 'nQty', 'sNote')
|
||||
->get()
|
||||
->groupBy('nIDPrescription'); // Group items by their Prescription ID
|
||||
// Final transformation: Attach prescription items to each prescription
|
||||
$results->getCollection()->transform(function ($item) use ($items) {
|
||||
$item->prescription_items = $items->get($item->id, collect())->map(function ($prescriptionItem) {
|
||||
return [
|
||||
'sItemName' => $prescriptionItem->sItemName,
|
||||
'sSigna' => $prescriptionItem->sSigna,
|
||||
'sTiming' => $prescriptionItem->sTiming,
|
||||
'sDuration' => $prescriptionItem->sDuration,
|
||||
'nQty' => $prescriptionItem->nQty,
|
||||
'sNote' => $prescriptionItem->sNote,
|
||||
];
|
||||
});
|
||||
return $item;
|
||||
});
|
||||
return response()->json(Helper::paginateResources($results));
|
||||
}
|
||||
|
||||
public function getAllergies($nIDUser) {
|
||||
return DB::connection('oldlms')
|
||||
->table('tx_alergi_users as txa')
|
||||
->join('tm_alergi as ta', 'ta.nID', '=', 'txa.nIDAlergi')
|
||||
->select('ta.sAlergi', 'ta.sKeterangan')
|
||||
->where('txa.nIDUser', $nIDUser)
|
||||
->get();
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view('hospitalportal::create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
* @param Request $request
|
||||
* @return Renderable
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the specified resource.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
return view('hospitalportal::show');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function edit($id)
|
||||
{
|
||||
return view('hospitalportal::edit');
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
* @param Request $request
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$data = ['sStatus' => $request->sStatus];
|
||||
$validator = Validator::make($request->all(), [
|
||||
'sStatus' => 'required|string|max:255',
|
||||
], [
|
||||
'sStatus.required' => trans('Validation.required',['attribute' => 'Status']),
|
||||
]);
|
||||
|
||||
if ($validator->fails())
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
|
||||
}
|
||||
else
|
||||
{
|
||||
try {
|
||||
// Define the valid transitions
|
||||
$valid_transitions = [
|
||||
'waiting_for_payment' => 'waiting_pharmacy',
|
||||
'waiting_pharmacy' => 'order_prepared',
|
||||
'order_prepared' => 'ready',
|
||||
'ready' => 'waiting_for_courir',
|
||||
'waiting_for_courir' => 'package_picked_up',
|
||||
'package_picked_up' => 'package_on_delivery',
|
||||
'package_on_delivery' => 'package_delivered'
|
||||
];
|
||||
|
||||
// Get the current status from the request
|
||||
$inputStatus = $request->sStatus;
|
||||
|
||||
// Check if the input status has a valid next status in the map
|
||||
if (isset($valid_transitions[$inputStatus])) {
|
||||
// Get the next status
|
||||
$status = $valid_transitions[$inputStatus];
|
||||
|
||||
// Start the transaction
|
||||
DB::connection('oldlms')->beginTransaction();
|
||||
|
||||
// Update the status in the database
|
||||
DB::connection('oldlms')->table('tx_prescription_orders')
|
||||
->where('tx_prescription_orders.nID', '=', $id)
|
||||
->update([
|
||||
'sStatus' => $status,
|
||||
'sUpdateBy' => auth()->user()->id,
|
||||
'dUpdateOn' => date('Y-m-d H:i:s'),
|
||||
]);
|
||||
|
||||
// Insert the log
|
||||
$prescriptionOrder = DB::connection('oldlms')
|
||||
->table('tx_prescription_orders')
|
||||
->where('tx_prescription_orders.nID', '=', $id)
|
||||
->join('tx_delivery_orders', 'tx_delivery_orders.nIDPrescriptionOrder', '=', 'tx_prescription_orders.nID')
|
||||
->select('tx_prescription_orders.*', 'tx_delivery_orders.*', 'tx_delivery_orders.nID as nIDDelivery') // Add specific columns you want to select
|
||||
->first();
|
||||
|
||||
if ($prescriptionOrder) {
|
||||
$createdBy = $prescriptionOrder->sCreateBy;
|
||||
$nIDPrescription = $prescriptionOrder->nIDPrescription;
|
||||
$nIDDeliveryOrder = $prescriptionOrder->nIDDelivery;
|
||||
|
||||
// Insert data into the tx_delivery_log table
|
||||
DB::connection('oldlms')->table('tx_delivery_log')->insert([
|
||||
'sStatus' => $prescriptionOrder->sDeliveryStatus,
|
||||
'sStatusPrescription' => $status,
|
||||
'nIDDeliveryOrder' => $nIDDeliveryOrder,
|
||||
'nIDPrescription' => $nIDPrescription,
|
||||
'dCreatedOn' => now(),
|
||||
]);
|
||||
}
|
||||
|
||||
// Commit the transaction
|
||||
DB::connection('oldlms')->commit();
|
||||
|
||||
// Return success response
|
||||
return ApiResponse::apiResponse("Success", $data, trans('Message.success'), 200);
|
||||
} else {
|
||||
// If the input status is not valid, return an error
|
||||
return ApiResponse::apiResponse('Invalid Status', $data, 'The input status is not valid.', 400);
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
// Rollback the transaction if an error occurs
|
||||
DB::connection('oldlms')->rollBack();
|
||||
|
||||
// Handle error, could log or return as response
|
||||
return ApiResponse::apiResponse('Server Error', $data, $e->getMessage(), 500);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public function getDriver(Request $request, $id)
|
||||
{
|
||||
$data = ['sStatus' => $request->sStatus];
|
||||
|
||||
// Validation
|
||||
$validator = Validator::make($request->all(), [
|
||||
'sStatus' => 'required|string|max:255',
|
||||
], [
|
||||
'sStatus.required' => trans('Validation.required', ['attribute' => 'Status']),
|
||||
]);
|
||||
|
||||
if ($validator->fails()) {
|
||||
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
|
||||
}
|
||||
|
||||
try {
|
||||
// Fetch prescription data
|
||||
$prescriptions = DB::connection('oldlms')->table('tx_prescription_orders')
|
||||
->leftJoin('tx_prescriptions', 'tx_prescriptions.nID', '=', 'tx_prescription_orders.nIDPrescription')
|
||||
->where('tx_prescription_orders.nID', '=', $id)
|
||||
->select(
|
||||
'tx_prescriptions.nIDUser',
|
||||
'tx_prescriptions.nID as id_prescription',
|
||||
'tx_prescriptions.sKodeResep as merchantOrderID',
|
||||
'tx_prescription_orders.nIDApotek'
|
||||
)
|
||||
->first();
|
||||
|
||||
if (!$prescriptions) {
|
||||
return ApiResponse::apiResponse('Not Found', [], 'Prescription not found', 404);
|
||||
}
|
||||
|
||||
// Fetch prescription items (medicine data)
|
||||
$items = DB::connection('oldlms')->table('tx_prescription_items')
|
||||
->where('nIDPrescription', $prescriptions->id_prescription)
|
||||
->select('nIDPrescription', 'sItemName', 'nQty', 'nHarga')
|
||||
->get();
|
||||
|
||||
$packages = [];
|
||||
foreach ($items as $item) {
|
||||
$packages[] = [
|
||||
'name' => $item->sItemName,
|
||||
'description' => $item->sItemName,
|
||||
'quantity' => (float)$item->nQty,
|
||||
'price' => (float)$item->nHarga,
|
||||
'dimensions' => [
|
||||
'height' => 0,
|
||||
'width' => 0,
|
||||
'depth' => 0,
|
||||
'weight' => 0,
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
// Fetch pharmacy (apotek) data
|
||||
$apotek = DB::connection('mysql')->table('organizations')
|
||||
->leftJoin('addresses', 'addresses.id', '=', 'organizations.main_address_id')
|
||||
->where('organizations.id', '=', $prescriptions->nIDApotek)
|
||||
->select('organizations.name as nama_apotek',
|
||||
'addresses.text as alamat_apotek',
|
||||
'addresses.lat',
|
||||
'addresses.lng',
|
||||
'organizations.phone',
|
||||
'organizations.email')
|
||||
->first();
|
||||
|
||||
// Fetch patient (pasien) data
|
||||
$pasien = DB::connection('oldlms')->table('tm_users')
|
||||
->leftJoin('tm_users_detail', 'tm_users_detail.nIDuser', '=', 'tm_users.nID')
|
||||
->where('tm_users.nID', '=', $prescriptions->nIDUser)
|
||||
->select(
|
||||
DB::raw('CONCAT(
|
||||
COALESCE(tm_users.sFirstName, ""),
|
||||
" ",
|
||||
COALESCE(tm_users.sMiddleName, ""),
|
||||
" ",
|
||||
COALESCE(tm_users.sLastName, "")
|
||||
) as nama_pasien'),
|
||||
'tm_users.sFirstName as firstname',
|
||||
'tm_users.sLastName as lastname',
|
||||
'tm_users.sEmail as email',
|
||||
'tm_users.sPhone as phone',
|
||||
'tm_users_detail.sLatitude as latitude',
|
||||
'tm_users_detail.sLongitude as longitude',
|
||||
'tm_users_detail.sAlamatMap',
|
||||
DB::raw('(SELECT tm_provinsi.sProvinsi FROM tm_provinsi WHERE tm_provinsi.nID = tm_users_detail.nIDProvinsi LIMIT 1) AS provinsi'),
|
||||
DB::raw('(SELECT tm_kota.sKota FROM tm_kota WHERE tm_kota.nID = tm_users_detail.nIDKota LIMIT 1) AS kota'),
|
||||
DB::raw('(SELECT tm_kecamatan.sKecamatan FROM tm_kecamatan WHERE tm_kecamatan.nID = tm_users_detail.nIDKecamatan LIMIT 1) AS kecamatan'),
|
||||
DB::raw('(SELECT tm_kelurahan.sKelurahan FROM tm_kelurahan WHERE tm_kelurahan.nID = tm_users_detail.nIDKelurahan LIMIT 1) AS kelurahan'),
|
||||
DB::raw('(SELECT tm_kelurahan.nKodePos FROM tm_kelurahan WHERE tm_kelurahan.nID = tm_users_detail.nIDKelurahan LIMIT 1) AS kode_pos')
|
||||
)
|
||||
->first();
|
||||
|
||||
if (!$pasien) {
|
||||
return ApiResponse::apiResponse('Not Found', [], 'Patient not found', 404);
|
||||
}
|
||||
|
||||
if(!$pasien->email)
|
||||
{
|
||||
return ApiResponse::apiResponse('Not Found', [], 'Email Patient not found', 404);
|
||||
}
|
||||
|
||||
if(!$pasien->phone)
|
||||
{
|
||||
return ApiResponse::apiResponse('Not Found', [], 'Phone Patient not found', 404);
|
||||
}
|
||||
|
||||
// Use GrabHelper to handle the API calls
|
||||
$grabHelper = new GrabHelper();
|
||||
$token = $grabHelper->getToken();
|
||||
$serviceType = 'INSTANT';
|
||||
$body = json_encode([
|
||||
"merchantOrderID" => $prescriptions->merchantOrderID,
|
||||
"serviceType" => $serviceType,
|
||||
"vehicleType" => "BIKE",
|
||||
"codType" => "REGULAR",
|
||||
"paymentMethod" => "CASHLESS",
|
||||
"highValue" => false,
|
||||
"packages" => $packages,
|
||||
"origin" => [
|
||||
"address" => $apotek->alamat_apotek,
|
||||
"coordinates" => [
|
||||
"latitude" => (float)$apotek->lat,
|
||||
"longitude" => (float)$apotek->lng
|
||||
]
|
||||
],
|
||||
"destination" => [
|
||||
"address" => $pasien->sAlamatMap,
|
||||
"coordinates" => [
|
||||
"latitude" => (float)$pasien->latitude,
|
||||
"longitude" => (float)$pasien->longitude
|
||||
]
|
||||
],
|
||||
"recipient" => [
|
||||
"firstName" => $pasien->firstname,
|
||||
"lastName" => $pasien->lastname,
|
||||
"email" => $pasien->email,
|
||||
"phone" => $grabHelper->normalizePhoneNumber($pasien->phone),
|
||||
"smsEnabled" => true
|
||||
],
|
||||
"sender" => [
|
||||
"firstName" => $apotek->nama_apotek,
|
||||
"companyName" => $apotek->nama_apotek,
|
||||
"email" => $apotek->email,
|
||||
"phone" => $apotek->phone,
|
||||
"smsEnabled" => true
|
||||
],
|
||||
"schedule" => $grabHelper->getScheduleTimes()
|
||||
]);
|
||||
|
||||
// Create the delivery request
|
||||
$response = $grabHelper->createDelivery($token, $body);
|
||||
$data_grab = json_decode($response, true);
|
||||
|
||||
// Transaction to update status
|
||||
DB::connection('oldlms')->beginTransaction();
|
||||
|
||||
//insert to api logs
|
||||
$data_logs = [
|
||||
'sType' => 'out',
|
||||
'sContext' => 'grab',
|
||||
'sTarget' => 'deliveries/create-grab',
|
||||
'sRequest' => $body,
|
||||
'sResponse' => $response,
|
||||
'sCreateBy' => auth()->user()->id,
|
||||
'dCreateOn' => now(),
|
||||
];
|
||||
|
||||
DB::connection('oldlms')->table('api_logs')
|
||||
->insert($data_logs);
|
||||
|
||||
|
||||
DB::connection('oldlms')->table('tx_prescription_orders')
|
||||
->where('tx_prescription_orders.nID', '=', $id)
|
||||
->update([
|
||||
'nDeliveryID' => $data_grab['deliveryID'],
|
||||
'sDeliveryStatus' => $data_grab['status'],
|
||||
'sStatus' => 'waiting_for_courir',
|
||||
'sUpdateBy' => auth()->user()->id,
|
||||
'dUpdateOn' => now(),
|
||||
]);
|
||||
//insert to delivery order
|
||||
$tm_delivery_statuses = DB::connection('oldlms')->table('tm_delivery_statuses')
|
||||
->where('tm_delivery_statuses.sStatus', 'LIKE', '%' . $data_grab['status'] . '%')
|
||||
->where('tm_delivery_statuses.nIDDelivery', '=', 3)
|
||||
->select('tm_delivery_statuses.sStatusDescription')
|
||||
->first();
|
||||
$data_delivery_orders = [
|
||||
'nIDPrescriptionOrder' => $id,
|
||||
'sUUID' => $this->generateUuid($id),
|
||||
'nIDDelivery' => 3, //grab
|
||||
'sType' => $serviceType,
|
||||
'nOrderID' => $data_grab['deliveryID'],
|
||||
'nVehicleTypeID' => null,
|
||||
'sCreatedDateTime' => $data_grab['schedule']['pickupTimeFrom'],
|
||||
'sFinishDateTime' => $data_grab['schedule']['pickupTimeTo'],
|
||||
'sStatus' => $data_grab['status'],
|
||||
'sStatusDescription' => $tm_delivery_statuses->sStatusDescription,
|
||||
'sMatter' => 'medicine',
|
||||
'nTotalWeightKg' => 0,
|
||||
'nPaymentAmount' => $data_grab['quote']['amount'],
|
||||
'nDeliveryFeeAmount' => $data_grab['quote']['amount'],
|
||||
'sPaymentMethod' => 'cash',
|
||||
'sCreateBy' => auth()->user()->id,
|
||||
'dCreateOn' => now(),
|
||||
];
|
||||
// Use insertGetId to insert the data and get the last inserted ID
|
||||
$lastInsertId = DB::connection('oldlms')->table('tx_delivery_orders')->insertGetId($data_delivery_orders);
|
||||
$data_points = [
|
||||
'origin' => [
|
||||
'nIDDeliveryOrder' => $lastInsertId,
|
||||
'sUUID' => $this->generateUuid($lastInsertId),
|
||||
'nDeliveryID' => $data_grab['deliveryID'],
|
||||
'nPointID' => 1,
|
||||
'nType' => 1,
|
||||
'sAddress' => $data_grab['quote']['origin']['address'],
|
||||
'nLatitude' => $data_grab['quote']['origin']['coordinates']['latitude'] ?? null,
|
||||
'nLongitude' => $data_grab['quote']['origin']['coordinates']['longitude'] ?? null,
|
||||
'sName' => $data_grab['sender']['companyName'],
|
||||
'sPhone' => $data_grab['sender']['phone'],
|
||||
'sTrackingUrl' => null,
|
||||
'sCreateBy' => auth()->user()->id,
|
||||
'dCreateOn' => now(),
|
||||
],
|
||||
'destination' => [
|
||||
'nIDDeliveryOrder' => $lastInsertId,
|
||||
'sUUID' => $this->generateUuid($lastInsertId),
|
||||
'nDeliveryID' => $data_grab['deliveryID'],
|
||||
'nPointID' => 2,
|
||||
'nType' => 2,
|
||||
'sAddress' => $data_grab['quote']['destination']['address'],
|
||||
'nLatitude' => $data_grab['quote']['destination']['coordinates']['latitude'] ?? null,
|
||||
'nLongitude' => $data_grab['quote']['destination']['coordinates']['longitude'] ?? null,
|
||||
'sName' => $data_grab['recipient']['firstName'] . " " . $data_grab['recipient']['lastName'],
|
||||
'sPhone' => $data_grab['recipient']['phone'],
|
||||
'sTrackingUrl' => null,
|
||||
'sCreateBy' => auth()->user()->id,
|
||||
'dCreateOn' => now(),
|
||||
]
|
||||
];
|
||||
|
||||
foreach ($data_points as $value_point) {
|
||||
DB::connection('oldlms')->table('tx_delivery_order_points')->insert($value_point);
|
||||
}
|
||||
|
||||
DB::connection('oldlms')->commit();
|
||||
|
||||
// Return success response
|
||||
return ApiResponse::apiResponse("Success", $data_grab, trans('Message.success'), 200);
|
||||
|
||||
} catch (\Exception $e) {
|
||||
// Rollback transaction on error
|
||||
DB::connection('oldlms')->rollBack();
|
||||
|
||||
return ApiResponse::apiResponse('Server Error', [], $e->getMessage(), 500);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
public function generateUuid($id_prescription_order)
|
||||
{
|
||||
// Define the namespace (using DNS in this example)
|
||||
$namespace = Uuid::NAMESPACE_DNS;
|
||||
|
||||
$uuidV5 = Uuid::uuid5($namespace, $id_prescription_order);
|
||||
return $uuidV5->toString();
|
||||
}
|
||||
|
||||
}
|
||||
0
Modules/HospitalPortal/Http/Controllers/ClaimController.php
Executable file → Normal file
0
Modules/HospitalPortal/Http/Controllers/ClaimController.php
Executable file → Normal file
0
Modules/HospitalPortal/Http/Controllers/HospitalPortalController.php
Executable file → Normal file
0
Modules/HospitalPortal/Http/Controllers/HospitalPortalController.php
Executable file → Normal file
0
Modules/HospitalPortal/Http/Middleware/.gitkeep
Executable file → Normal file
0
Modules/HospitalPortal/Http/Middleware/.gitkeep
Executable file → Normal file
@@ -1,65 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\HospitalPortal\Http\Middleware;
|
||||
use Modules\HospitalPortal\Helpers\ApiResponse;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Illuminate\Support\Facades\App;
|
||||
|
||||
class Authentication
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
|
||||
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
$acceptHeader = $request->header('Accept');
|
||||
$contentType = $request->header('Content-Type');
|
||||
$locale = $request->header('Accept-Language');
|
||||
|
||||
// Add language
|
||||
if(!$locale)
|
||||
{
|
||||
return ApiResponse::apiResponse('Unauthorized', null, trans('validation.required', ['attribute' => 'Accept-Language']), 401);
|
||||
}
|
||||
if($locale !== 'en-US' && $locale !== 'id-ID')
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', null, trans('validation.invalid', ['attribute' => 'Accept-Language']), 400);
|
||||
}
|
||||
if ($locale === 'en-US')
|
||||
{
|
||||
App::setLocale('en');
|
||||
} elseif ($locale === 'id-ID')
|
||||
{
|
||||
App::setLocale('id');
|
||||
} else
|
||||
{
|
||||
App::setLocale('en');
|
||||
}
|
||||
|
||||
// Validate type accept & content type
|
||||
if (!$acceptHeader)
|
||||
{
|
||||
return ApiResponse::apiResponse('Unauthorized', null, trans('validation.required', ['attribute' => 'Accept']), 401);
|
||||
}
|
||||
if (!$contentType)
|
||||
{
|
||||
return ApiResponse::apiResponse('Unauthorized', null, trans('validation.required', ['attribute' => 'Content-Type']), 401);
|
||||
}
|
||||
if ($acceptHeader !== 'application/json')
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', null, trans('validation.invalid', ['attribute' => 'Accept']), 400);
|
||||
}
|
||||
if($contentType !== 'application/json')
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', null, trans('validation.invalid', ['attribute' => 'Content-Type']), 400);
|
||||
}
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -1,71 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\HospitalPortal\Http\Middleware;
|
||||
use Modules\HospitalPortal\Helpers\ApiResponse;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Illuminate\Support\Facades\App;
|
||||
|
||||
class Authorization
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
|
||||
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
$acceptHeader = $request->header('Accept');
|
||||
$contentType = $request->header('Content-Type');
|
||||
$locale = $request->header('Accept-Language');
|
||||
$authorization = $request->header('Authorization');
|
||||
|
||||
// Add language
|
||||
if(!$locale)
|
||||
{
|
||||
return ApiResponse::apiResponse('Unauthorized', null, trans('Validation.required', ['attribute' => 'Accept-Language']), 401);
|
||||
}
|
||||
if($locale !== 'en-US' && $locale !== 'id-ID')
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', null, trans('Validation.invalid', ['attribute' => 'Accept-Language']), 400);
|
||||
}
|
||||
if ($locale === 'en-US')
|
||||
{
|
||||
App::setLocale('en');
|
||||
} elseif ($locale === 'id-ID')
|
||||
{
|
||||
App::setLocale('id');
|
||||
} else
|
||||
{
|
||||
App::setLocale('en');
|
||||
}
|
||||
|
||||
// Validate authorization
|
||||
if (empty($authorization) || strpos($authorization, 'Bearer ') !== 0) {
|
||||
return ApiResponse::apiResponse('Unauthorized', null, trans('Validation.required', ['attribute' => 'Authorization']), 401);
|
||||
}
|
||||
|
||||
// Validate type accept & content type
|
||||
if (!$acceptHeader)
|
||||
{
|
||||
return ApiResponse::apiResponse('Unauthorized', null, trans('Validation.required', ['attribute' => 'Accept']), 401);
|
||||
}
|
||||
if (!$contentType && $request->isMethod('post'))
|
||||
{
|
||||
return ApiResponse::apiResponse('Unauthorized', null, trans('Validation.required', ['attribute' => 'Content-Type']), 401);
|
||||
}
|
||||
if ($acceptHeader !== 'application/json')
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', null, trans('Validation.invalid', ['attribute' => 'Accept']), 400);
|
||||
}
|
||||
if($contentType !== 'application/json' && $request->isMethod('post'))
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', null, trans('Validation.invalid', ['attribute' => 'Content-Type']), 400);
|
||||
}
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
0
Modules/HospitalPortal/Http/Requests/.gitkeep
Executable file → Normal file
0
Modules/HospitalPortal/Http/Requests/.gitkeep
Executable file → Normal file
0
Modules/HospitalPortal/Providers/.gitkeep
Executable file → Normal file
0
Modules/HospitalPortal/Providers/.gitkeep
Executable file → Normal file
0
Modules/HospitalPortal/Providers/HospitalPortalServiceProvider.php
Executable file → Normal file
0
Modules/HospitalPortal/Providers/HospitalPortalServiceProvider.php
Executable file → Normal file
0
Modules/HospitalPortal/Providers/RouteServiceProvider.php
Executable file → Normal file
0
Modules/HospitalPortal/Providers/RouteServiceProvider.php
Executable file → Normal file
0
Modules/HospitalPortal/Resources/assets/.gitkeep
Executable file → Normal file
0
Modules/HospitalPortal/Resources/assets/.gitkeep
Executable file → Normal file
0
Modules/HospitalPortal/Resources/assets/js/app.js
Executable file → Normal file
0
Modules/HospitalPortal/Resources/assets/js/app.js
Executable file → Normal file
0
Modules/HospitalPortal/Resources/assets/sass/app.scss
Executable file → Normal file
0
Modules/HospitalPortal/Resources/assets/sass/app.scss
Executable file → Normal file
0
Modules/HospitalPortal/Resources/lang/.gitkeep
Executable file → Normal file
0
Modules/HospitalPortal/Resources/lang/.gitkeep
Executable file → Normal file
0
Modules/HospitalPortal/Resources/views/.gitkeep
Executable file → Normal file
0
Modules/HospitalPortal/Resources/views/.gitkeep
Executable file → Normal file
0
Modules/HospitalPortal/Resources/views/index.blade.php
Executable file → Normal file
0
Modules/HospitalPortal/Resources/views/index.blade.php
Executable file → Normal file
0
Modules/HospitalPortal/Resources/views/layouts/master.blade.php
Executable file → Normal file
0
Modules/HospitalPortal/Resources/views/layouts/master.blade.php
Executable file → Normal file
0
Modules/HospitalPortal/Routes/.gitkeep
Executable file → Normal file
0
Modules/HospitalPortal/Routes/.gitkeep
Executable file → Normal file
143
Modules/HospitalPortal/Routes/api.php
Executable file → Normal file
143
Modules/HospitalPortal/Routes/api.php
Executable file → Normal file
@@ -4,19 +4,8 @@ use Illuminate\Http\Request;
|
||||
use Modules\HospitalPortal\Http\Controllers\Api\AuthController;
|
||||
use Modules\HospitalPortal\Http\Controllers\Api\ClaimRequestController;
|
||||
use Modules\HospitalPortal\Http\Controllers\Api\MemberController;
|
||||
use Modules\HospitalPortal\Http\Controllers\Api\ProviderOnlineController;
|
||||
use Modules\HospitalPortal\Http\Controllers\ClaimController;
|
||||
use Modules\HospitalPortal\Http\Controllers\Api\NotificationController;
|
||||
use Modules\HospitalPortal\Http\Controllers\Api\RequestLogController;
|
||||
use Modules\Internal\Http\Controllers\Api\RequestLogController as RequestLogControllerInternal;
|
||||
use Modules\Internal\Http\Controllers\Api\RequestLogBenefitController;
|
||||
use Modules\Internal\Http\Controllers\Api\RequestLogMedicineController;
|
||||
|
||||
use Modules\HospitalPortal\Http\Controllers\ApotekController;
|
||||
use Modules\HospitalPortal\Http\Middleware\Authentication;
|
||||
use Modules\HospitalPortal\Http\Middleware\Authorization;
|
||||
use Modules\Internal\Http\Controllers\Api\NavigationController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\AutocompleteController;
|
||||
use Modules\Primaya\Http\Controllers\Api\MasterController;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
@@ -28,111 +17,39 @@ use Modules\Primaya\Http\Controllers\Api\MasterController;
|
||||
| is assigned the "api" middleware group. Enjoy building your API!
|
||||
|
|
||||
*/
|
||||
Route::prefix('v1')->group(function() {
|
||||
Route::prefix('hospitalportal')->group(function () {
|
||||
|
||||
Route::middleware(Authentication::class)->group(function () {
|
||||
Route::controller(AuthController::class)->group(function () {
|
||||
Route::post('login', 'login');
|
||||
});
|
||||
Route::prefix('hospitalportal')->group(function () {
|
||||
|
||||
Route::post('login', [AuthController::class, 'login'])->name('login');
|
||||
Route::post('forget-password', [AuthController::class, 'forgetPassword'])->name('forget-password');
|
||||
Route::post('verify-email', [AuthController::class, 'verifyEmail'])->name('verify-email');
|
||||
|
||||
|
||||
Route::middleware('auth:sanctum')->group(function () {
|
||||
|
||||
Route::post('logout', [AuthController::class, 'logout'])->name('logout');
|
||||
Route::get('/user', function (Request $request) {
|
||||
return $request->user();
|
||||
});
|
||||
Route::put('reset-password', [AuthController::class, 'resetPassword'])->name('resetPassword');
|
||||
|
||||
Route::post('forget-password', [AuthController::class, 'forgetPassword']);
|
||||
Route::post('verify-email', [AuthController::class, 'verifyEmail'])->name('verify-email');
|
||||
Route::post('verify-code', [AuthController::class, 'verifCode']);
|
||||
|
||||
Route::get('service-member/{id}', [AutocompleteController::class, 'serviceCode']);
|
||||
Route::get('specialis', [AutocompleteController::class, 'specialisList']);
|
||||
Route::get('diagnosis', [RequestLogControllerInternal::class, 'diagnosis']);
|
||||
|
||||
Route::middleware('auth:sanctum')->group(function () {
|
||||
|
||||
//dari Internal Prime center
|
||||
Route::get('customer-service/request', [RequestLogControllerInternal::class, 'index']);
|
||||
Route::post('customer-service/request', [RequestLogControllerInternal::class, 'createNew']);
|
||||
Route::put('customer-service/request/{id}', [RequestLogControllerInternal::class, 'update']);
|
||||
Route::get('customer-service/request/{id}', [RequestLogControllerInternal::class, 'show']);
|
||||
Route::put('customer-service/request/delete/{id}', [RequestLogControllerInternal::class, 'destroy']);
|
||||
Route::put('customer-service/request/final_log/{id}', [RequestLogControllerInternal::class, 'deleteFinalLog']);
|
||||
Route::get('customer-service/request/{id}/download', [RequestLogControllerInternal::class, 'generateRequestLog']);
|
||||
Route::post('customer-service/request/import', [RequestLogControllerInternal::class, 'importRequestLog']);
|
||||
Route::post('customer-service/request/import-invoice', [RequestLogControllerInternal::class, 'importInvoice']);
|
||||
Route::post('customer-service/request/exportFiledInvoice', [RequestLogControllerInternal::class, 'exportFiledInvoice']);
|
||||
Route::get('customer-service/request/data', [RequestLogControllerInternal::class, 'generateDataRequestLogExcel']);
|
||||
Route::post('customer-service/request/{id}/add_file', [RequestLogControllerInternal::class, 'requestFiles']);
|
||||
Route::post('customer-service/request/{id}/approval_files', [RequestLogControllerInternal::class, 'approvalFiles']);
|
||||
Route::post('customer-service/request/{id}/delete_file', [RequestLogControllerInternal::class, 'deleteFiles']);
|
||||
|
||||
Route::post('customer-service/request/final-log', [RequestLogControllerInternal::class, 'updateFinalLog']);
|
||||
|
||||
// insert benefit
|
||||
Route::post('customer-service/request/insert-benefit', [RequestLogBenefitController::class, 'store']);
|
||||
Route::post('customer-service/request/benefit_data/{id}', [RequestLogBenefitController::class, 'destroy']);
|
||||
Route::put('customer-service/request/benefit_data/{id}', [RequestLogBenefitController::class, 'update']);
|
||||
|
||||
// insert medicine
|
||||
Route::post('customer-service/request/medicine-data', [RequestLogMedicineController::class, 'store']);
|
||||
Route::delete('customer-service/request/medicine-data/{id}', [RequestLogMedicineController::class, 'destroy']);
|
||||
Route::put('customer-service/request/medicine-data/{id}', [RequestLogMedicineController::class, 'update']);
|
||||
// end prime center
|
||||
|
||||
// Navigation
|
||||
Route::get('navigations', [NavigationController::class, 'index']);
|
||||
|
||||
|
||||
Route::post('logout', [AuthController::class, 'logout'])->name('logout');
|
||||
Route::get('/user', function (Request $request) {
|
||||
return $request->user();
|
||||
});
|
||||
Route::put('reset-password', [AuthController::class, 'resetPassword'])->name('resetPassword');
|
||||
|
||||
Route::get('claims', [ClaimController::class, 'index']);
|
||||
|
||||
Route::middleware(Authorization::class)->group(function () {
|
||||
//Search Member
|
||||
Route::controller(MemberController::class)->group(function () {
|
||||
Route::post('search-member', 'search');
|
||||
});
|
||||
// Request LOG
|
||||
Route::controller(RequestLogController::class)->group(function () {
|
||||
Route::post('request-log', 'requestLog');
|
||||
Route::get('get-request-log', 'getRequestLog');
|
||||
Route::get('get-final-log', 'getFinalLog');
|
||||
Route::post('request-final-log', 'requestFinalLog');
|
||||
Route::get('download-log/{request_log_id}', 'downlodLog');
|
||||
Route::get('download-final-log/{request_log_id}', 'downlodFinalLog');
|
||||
Route::post('submit-claims', 'submitClaims');
|
||||
});
|
||||
//Notification
|
||||
Route::controller(NotificationController::class)->group(function() {
|
||||
//get notifications
|
||||
Route::get('notifications/{user_id}', 'getNotifications');
|
||||
//Set read notification
|
||||
Route::post('set-read-notification', 'setReadNotification');
|
||||
});
|
||||
Route::get('get-prescription-orders',[ApotekController::class, 'index']);
|
||||
Route::put('put-prescription-orders/{id}',[ApotekController::class, 'update']);
|
||||
Route::put('put-driver-prescription-orders/{id}',[ApotekController::class, 'getDriver']);
|
||||
});
|
||||
// Request Final LOG
|
||||
Route::controller(RequestLogController::class)->group(function () {
|
||||
Route::post('request-final-log', 'requestFinalLog');
|
||||
});
|
||||
// Claim Submit
|
||||
Route::controller(ClaimRequestController::class)->group(function () {
|
||||
Route::post('claim-requests', 'store');
|
||||
});
|
||||
Route::get('claim-requests', [ClaimRequestController::class, 'index'])->name('claim-requests.index');
|
||||
// Route::post('claim-requests', [ClaimRequestController::class, 'store'])->name('claim-requests.store');
|
||||
Route::get('claim-requests/{claim_request_id}/log', [ClaimRequestController::class, 'generateLog'])->name('claim-requests.generate-log');
|
||||
Route::get('claim-requests/{id}', [ClaimRequestController::class, 'show'])->name('claim-requests.show');
|
||||
Route::get('get-claim-requests', [ClaimRequestController::class, 'get_claim_requests'])->name('claim-requests.get_claim_requests');
|
||||
Route::get('detail-claim-requests/{id}', [ClaimRequestController::class, 'detail_claim_requests'])->name('claim-requests.detail_claim_requests');
|
||||
Route::post('claim-requests/{id}/request-files', [ClaimRequestController::class, 'requestFiles']);
|
||||
|
||||
Route::get('organizations', [MasterController::class, 'organizations']);
|
||||
});
|
||||
Route::get('claims', [ClaimController::class, 'index']);
|
||||
|
||||
Route::post('search-member', [MemberController::class, 'search']);
|
||||
|
||||
Route::get('claim-requests', [ClaimRequestController::class, 'index'])->name('claim-requests.index');
|
||||
Route::post('claim-requests', [ClaimRequestController::class, 'store'])->name('claim-requests.store');
|
||||
Route::get('claim-requests/{claim_request_id}/log', [ClaimRequestController::class, 'generateLog'])->name('claim-requests.generate-log');
|
||||
Route::get('claim-requests/{id}', [ClaimRequestController::class, 'show'])->name('claim-requests.show');
|
||||
});
|
||||
});
|
||||
|
||||
Route::prefix('v1/bridging-service/ProviderOnline')->group(function () {
|
||||
Route::post('HeaderKey', [ProviderOnlineController::class, 'getHeaderKey']);
|
||||
Route::post('EligibilitasPeserta', [ProviderOnlineController::class, 'checkEligibilitasPeserta']);
|
||||
Route::post('Pendaftaran', [ProviderOnlineController::class, 'createPendaftaran']);
|
||||
Route::post('Pengesahan', [ProviderOnlineController::class, 'createPengesahan']);
|
||||
Route::post('RincianBiayaKlaim', [ProviderOnlineController::class, 'getRincianBiayaKlaim']);
|
||||
Route::post('StrukPendaftaran', [ProviderOnlineController::class, 'downloadStrukPendaftaran']);
|
||||
Route::post('StrukPengesahan', [ProviderOnlineController::class, 'downloadStrukPengesahan']);
|
||||
});
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user