1757 Commits

Author SHA1 Message Date
9456e9ccb7 add email example dan mempertahankan addHeaderKey 2026-05-15 14:44:37 +07:00
6e22cfbe29 test(postman): add route test and postman collections 2026-05-15 11:44:16 +07:00
6d58cc8585 feat(provider-online): add billingsementara endpoint and mapping fixes 2026-05-15 11:42:14 +07:00
2aca3693f3 feat(provider-integrations): move ProviderOnline endpoints to new module 2026-05-15 11:41:35 +07:00
8cd1385a21 chore: update hospital portal route mappings for bridging endpoints 2026-05-14 16:00:25 +07:00
46ac5c8651 fix: guard missing logo files in request/final log PDF templates 2026-05-14 15:58:21 +07:00
4fea68e542 feat: align ProviderOnline bridging flows and LOG code generation 2026-05-14 15:57:58 +07:00
4027d6f687 feat: add provider model and bridging schemas 2026-05-14 15:57:40 +07:00
f343f31075 docs: add AGENTS and sync AI agent guides for ASO 2026-05-14 15:57:24 +07:00
Iqbal
7a72e6674f remove console log 2026-05-12 13:46:11 +07:00
Fadila
a7b1c78cc5 handle corporate code pada benevit 2026-05-12 13:27:56 +07:00
Iqbal
843ddd0201 Merge branch 'feature/report-primayan' 2026-05-11 15:25:02 +07:00
Iqbal
80204a7abb feat: add Indonesian log type mapping and color chips to report 2026-05-11 15:01:44 +07:00
Iqbal
682edcd50e Update signature logic for VALEIND with LinkSehat penjamin 2026-05-11 13:45:23 +07:00
Iqbal
d96e439b2a Update Primayan Medicare report search and layout 2026-05-11 11:36:13 +07:00
Iqbal
21a909aacb Add Primayan Medicare report frontend and navigation 2026-05-11 09:10:33 +07:00
Iqbal
5dc04d01e2 Add Primayan Medicare report with LOG codes and aggregated amounts 2026-05-11 09:10:13 +07:00
Iqbal
429ef68f09 Merge branch 'feature/report-primayan' 2026-05-09 13:07:15 +07:00
Iqbal
d935445ebc fix: update signature logic for VALEIND with LinkSehat penjamin 2026-05-09 13:06:55 +07:00
Iqbal
597e52dc56 remove debugbar 2026-05-09 12:27:24 +07:00
Iqbal
9cbc65ade9 add prune 2026-05-09 12:24:30 +07:00
Iqbal
4160021ffb Add Laravel Telescope for debugging and monitoring 2026-05-09 10:59:17 +07:00
Fadila
8e375c2764 menampilkan keterangan nama pasien 2026-05-08 14:29:25 +07:00
Iqbal
eddfcd2b21 Merge branch 'feature/flag-log-status' into staging 2026-05-07 13:24:18 +07:00
Iqbal
0ee868e071 fix: update log_type from final to consultation in final log table and sync command 2026-05-07 13:23:48 +07:00
Iqbal
7478064d5f Merge branch 'feature/flag-log-status' into staging 2026-05-06 19:57:21 +07:00
Iqbal
2ae56ce039 filter flag final type log 2026-05-06 19:57:07 +07:00
Iqbal
63698bc1d1 Merge branch 'feature/flag-log-status' into staging 2026-05-05 14:35:21 +07:00
Iqbal
0938444926 feat: add log type column to final log table 2026-05-05 14:07:48 +07:00
Iqbal
ff11db177f feat: add sync command for log_type from telemedicine 2026-05-05 14:07:33 +07:00
Iqbal
89506b8491 feat: save log_type when creating request log from Primaya 2026-05-05 14:07:17 +07:00
Iqbal
51018456bc feat: add log type and final log status columns to request log table 2026-05-05 13:44:39 +07:00
Iqbal
ad111bc61f feat: add translation keys for log type and final log status 2026-05-05 13:44:15 +07:00
Iqbal
e494fbb800 feat: return log_type field in getRequestLog API 2026-05-05 13:44:01 +07:00
Iqbal
c32e0dd779 feat: add log_type column to request_logs table 2026-05-05 13:43:35 +07:00
Iqbal
f42266258f fix sign 2026-04-28 14:50:41 +07:00
Fadila
18edec5393 tambah keterangan at pada approved dan approved final log 2026-04-25 08:29:38 +07:00
ivan-sim
14e0182709 update revisi 2026-04-14 16:23:22 +07:00
ivan-sim
7dad4e8004 add edit provider prime center 2026-04-13 14:48:29 +07:00
ivan-sim
5dbad1f6a2 update benefit import 2026-04-10 13:52:02 +07:00
ivan-sim
88be6605c2 DPPJ 2026-04-09 16:16:01 +07:00
ivan-sim
8eba77dc2f edit final log update 2026-04-09 14:22:47 +07:00
ivan-sim
63de17a98f Edit Final LOG 2026-04-09 14:20:29 +07:00
ivan-sim
e4a6a58e17 update member 2026-04-08 16:42:10 +07:00
ivan-sim
5725178c1f ketinggalan konflik 2026-04-08 10:46:45 +07:00
ivan-sim
492bdf6cc6 Update Serice member bug 2026-04-08 10:31:23 +07:00
Server D3 Linksehat
daddb3ba74 Ketinggalan konflik 2026-04-07 21:21:22 +07:00
ivan-sim
f119948c63 Merge branch 'feature/add-input-benefit-hsp' 2026-04-07 20:57:18 +07:00
ivan-sim
8de1f2baa0 Merge branch 'feature/primaya' 2026-04-07 20:51:26 +07:00
ivan-sim
f98c3c836c add approved_at request log awal 2026-04-07 20:45:28 +07:00
ivan-sim
4ed1a3246e add approved_at request log awal 2026-04-07 20:45:04 +07:00
R
e62d0b2181 Fix Makassar 2026-04-02 16:51:07 +07:00
Iqbal
5a4257e22a Merge branch 'feature/primaya' 2026-04-01 21:32:39 +07:00
Iqbal
d3d47292dd Merge branch 'feature/primaya' into staging 2026-04-01 21:32:10 +07:00
Iqbal
cd3d285082 update status to approved 2026-04-01 21:31:14 +07:00
Iqbal
256a630872 Merge branch 'feature/primaya' 2026-04-01 21:00:40 +07:00
Iqbal
9c01a5fdf7 Merge branch 'feature/primaya' into staging 2026-04-01 20:59:29 +07:00
Iqbal
25453eeeda feat: add image 2026-04-01 20:56:42 +07:00
Iqbal
63117263a6 feat: add pdf for primayan medicare 2026-04-01 20:56:34 +07:00
R
8b50b8d14a Merge commit '23e201d50ca14ecb3cb4dee157304c730062589d' 2026-04-01 20:02:33 +07:00
ivan-sim
23e201d50c Update ReqLogAwal 2026-04-01 17:07:49 +07:00
R
31b0a7811b Hotfix 2026-04-01 02:07:07 +07:00
R
5bf5a05698 Hotfix 2026-04-01 02:06:09 +07:00
Server D3 Linksehat
5994aae990 ignore 2026-03-31 14:00:05 +07:00
Server D3 Linksehat
0c9ec123fb fix public folder after wrong gitignore 2026-03-31 13:59:42 +07:00
Server D3 Linksehat
ebafd8697d resolve conflict keep env.development 2026-03-31 13:47:39 +07:00
Server D3 Linksehat
19c7fdd3e0 git ignore 2026-03-31 13:44:13 +07:00
Server D3 Linksehat
97a68e3d4f update 2026-03-31 13:43:46 +07:00
Server D3 Linksehat
3554e680ce detail kurang 2026-03-31 13:33:01 +07:00
ivan-sim
85200b27ba Merge branch 'feature/add-input-benefit-hsp' into staging 2026-03-31 13:29:58 +07:00
ivan-sim
3d9fe9cec0 Merge branch 'feature/primaya' into staging 2026-03-31 13:29:08 +07:00
ivan-sim
36653c4751 update sisa limit 2026-03-31 13:15:57 +07:00
ivan-sim
20fa3fbc02 update Hide Approve dan Persetujuan 2026-03-31 11:43:34 +07:00
ivan-sim
765d1a5ef3 Update ENV 2026-03-31 10:02:29 +07:00
ivan-sim
48bd2af847 hide persetujuan tindakan 2026-03-31 10:02:13 +07:00
ivan-sim
63c169ae61 Merge branch 'feature/add-input-benefit-hsp' into staging 2026-03-30 08:47:55 +07:00
ivan-sim
0370302fe6 Update Organitation 2026-03-02 11:01:35 +07:00
ivan-sim
b0b34df1b0 calculate-benefit 2026-03-02 09:38:49 +07:00
ivan-sim
928cb37289 update hospital 2026-02-27 16:08:57 +07:00
ivan-sim
ba4fba8380 update 2026-02-27 16:05:11 +07:00
ivan-sim
e889eaadbf update 2026-02-27 15:39:31 +07:00
R
30e8dd3cda Merge branch 'feature/primaya' into staging 2026-02-26 14:08:43 +07:00
R
77c8d7200d Change LMS for Primaya jwt generate diluar 2026-02-26 14:08:13 +07:00
R
7c2a8496af Merge remote-tracking branch 'origin/feature/primaya' into staging 2026-02-26 08:35:27 +07:00
ivan-sim
6ffc1bcfa5 Update Request LOG 2026-02-25 14:05:08 +07:00
ivan-sim
d81d38ada4 jwt 2026-02-24 15:55:37 +07:00
ivan-sim
2bb8091082 Update authenticate 2026-02-24 11:07:33 +07:00
ivan-sim
f82c6177a3 Update JWT Token 2026-02-24 07:51:20 +07:00
Server D3 Linksehat
7bae2cee54 Rebuild git tracking based on .gitignore 2026-02-20 10:08:35 +07:00
ivan-sim
8eb82a171c Add Middlewhere 2026-02-20 10:01:20 +07:00
ivan-sim
3534818c60 Update Pisah API 2026-02-20 09:03:50 +07:00
ivan-sim
bc8a088d8b feature primaya 2026-02-20 08:55:03 +07:00
ivan-sim
127ef3ff50 Update Add Input Hospital Portal 2026-02-10 10:05:06 +07:00
ivan-sim
8084a83c3d Update Add Input Hospital Portal 2026-02-10 10:03:28 +07:00
Server D3 Linksehat
7e42a5ecfd Merge branch 'origin/production' of https://dev.sismedika.online/tubagus/aso into origin/production 2026-02-04 14:40:21 +07:00
Server D3 Linksehat
8077284d3b Server Changes, Ambil semuanya 2026-02-04 14:39:20 +07:00
ivan-sim
f10589eb85 Update Dashboard Client Portal 2026-01-21 17:13:45 +07:00
ivan-sim
b8a72b8119 TEst Update Search claim 2026-01-13 10:48:37 +07:00
ivan-sim
e81998cbe2 Update benefit deleted is null 2026-01-13 10:39:10 +07:00
ivan-sim
833e158c19 update cek invoice jg 2026-01-13 10:33:01 +07:00
ivan-sim
37d96ddb37 Update jg cek deleted by create invoice 2026-01-13 10:29:15 +07:00
ivan-sim
8d84b123f7 cek deleted by di claim management 2026-01-13 10:12:53 +07:00
ivan-sim
eaf7c94f7a Principal id name 2026-01-05 15:59:19 +07:00
ivan-sim
e178682fcf Export Excel Invoice & Imporve Invoice 2025-12-18 09:53:01 +07:00
ivan-sim
9333e37dfe update gitignore 2025-12-11 15:01:42 +07:00
Fadila
9976e8e438 tambah kolom kode livechat export mountly report livechat 2025-10-22 10:17:13 +07:00
Fadila
14ddbf48f3 tambah kolom kode livechat 2025-10-21 16:08:07 +07:00
Fadila
c6d0015c07 ubah alamat menjadi .com ketika update no sjp 2025-09-29 16:38:56 +07:00
ivan-sim
d547b6d374 Update Status Livechat 2025-09-25 14:16:07 +07:00
Server D3 Linksehat
179f4b3088 Merge remote-tracking branch 'origin/staging' into origin/production 2025-09-22 16:07:43 +07:00
Server D3 Linksehat
04752ffcd7 update 2025-09-22 16:02:58 +07:00
Fadila
42ea2e108d tambah table log update np sjp 2025-09-22 09:19:52 +07:00
Fadila
a29c39086a set cron job update no sjp 2025-09-22 09:04:00 +07:00
b27682f5b3 update 2025-09-15 15:13:13 +07:00
acfc8d1288 update approval di list approval 2025-09-12 11:28:15 +07:00
c65a95ce09 list dan detail approval pov apporoval 2025-09-12 09:29:31 +07:00
6a885c84ac penyesuaian url 2025-09-11 10:03:01 +07:00
3c9066edc6 backend dan penyesian upload file dinamis approval notifikasi 2025-09-11 09:47:42 +07:00
6a4aaff628 frontend approval 2025-09-04 08:37:21 +07:00
Server D3 Linksehat
ff5c1de363 Merge remote-tracking branch 'origin/staging' into origin/production 2025-09-02 08:40:50 +07:00
Server D3 Linksehat
5f701af321 update composer 2025-09-02 08:39:39 +07:00
Server D3 Linksehat
14f2da6909 Merge remote-tracking branch 'origin/staging' into origin/production 2025-09-02 08:38:49 +07:00
Server D3 Linksehat
b2580c49ab update path daily monitoring 2025-09-01 11:37:56 +07:00
Server D3 Linksehat
ea4059766e update import tetap dari local 2025-09-01 10:05:07 +07:00
Server D3 Linksehat
a9423e8b0a bugs fix ambil path di list provider 2025-08-27 16:30:44 +07:00
Server D3 Linksehat
9900c00b8d updat bugs fix upload dan tampil file di dailymonitoring 2025-08-27 11:23:50 +07:00
Server D3 Linksehat
633c9aeae0 update migrasi upload file to s3 amazon 2025-08-25 10:29:46 +07:00
Server D3 Linksehat
ba2490147f migrasi upload file ke s3 amazon 2025-08-25 09:14:11 +07:00
Server D3 Linksehat
fa29494a67 Merge remote-tracking branch 'origin/staging' into origin/production 2025-08-19 09:42:45 +07:00
Server D3 Linksehat
9634b12f11 update 2025-08-19 09:39:37 +07:00
df02dc0c5f tambah flag untuk file 2025-08-19 09:33:26 +07:00
Fadila
80fe484b09 tambah data total_premi dan limit_rules pada page request log halaman dashboard 2025-07-24 16:31:51 +07:00
60f5f38ffe update status manual jika ada cancel / waiting billing 2025-07-18 09:59:27 +07:00
05bed90598 cronjob update status otomatis 2025-07-18 09:22:33 +07:00
Server D3 Linksehat
b6e8bbb79b Merge commit '664f2a7faa1345f59f91b68e09449be6d39f5548' into staging 2025-06-05 09:27:55 +07:00
Server D3 Linksehat
664f2a7faa tambah field livechat 2025-06-05 09:25:17 +07:00
Server D3 Linksehat
bec3c2bf17 penyesuaian report livechat 2025-05-26 09:07:29 +07:00
Server D3 Linksehat
5482ca3ae8 Merge remote-tracking branch 'origin/staging' into origin/production 2025-05-13 08:44:52 +07:00
eaa508ad74 add image 2025-05-13 08:43:51 +07:00
Server D3 Linksehat
eb0c34293e Merge remote-tracking branch 'origin/staging' into origin/production 2025-05-13 08:41:49 +07:00
a480b6e133 update 2025-05-13 08:41:16 +07:00
Server D3 Linksehat
2a4a6f2ca2 Merge remote-tracking branch 'origin/staging' into origin/production 2025-05-13 08:37:27 +07:00
84caa2265d update final log 2025-05-13 08:36:41 +07:00
Server D3 Linksehat
202df9064f update 2025-05-06 14:28:17 +07:00
Server D3 Linksehat
8b06eb77d1 Merge remote-tracking branch 'origin/staging' into origin/production 2025-05-05 11:25:21 +07:00
Server D3 Linksehat
9bc2ecac96 update 2025-05-05 11:24:46 +07:00
a3e0c72908 update penjagaan import member 2025-05-05 10:38:46 +07:00
06bba125c8 update 2025-05-05 10:00:37 +07:00
Server D3 Linksehat
7ae6a89ff9 Merge remote-tracking branch 'origin/staging' into origin/production 2025-04-21 16:16:04 +07:00
e657e3f75a prescription 2025-04-21 15:56:58 +07:00
Server D3 Linksehat
45aeb8faee Merge remote-tracking branch 'origin/staging' into origin/production 2025-04-03 10:32:00 +07:00
af20355b31 update 2025-04-03 10:24:33 +07:00
Server D3 Linksehat
b9f0bffbc3 Merge remote-tracking branch 'origin/staging' into origin/production 2025-04-03 10:03:12 +07:00
8597ce1fff Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2025-04-03 09:22:05 +07:00
efc46c0f92 update 2025-04-03 09:21:18 +07:00
Server D3 Linksehat
86ed6b5bb1 report monthly 2025-03-27 17:11:26 +07:00
Server D3 Linksehat
6ffd34a409 update 2025-03-24 13:25:45 +07:00
Server D3 Linksehat
61ed988f50 Merge remote-tracking branch 'refs/remotes/origin/staging' into staging 2025-03-24 13:22:41 +07:00
Server D3 Linksehat
29eb4fd3ef drugs list 2025-03-24 13:22:13 +07:00
Server D3 Linksehat
277802c708 Merge remote-tracking branch 'origin/staging' into origin/production 2025-03-24 13:19:45 +07:00
ab3d850bd4 view report prescription 2025-03-24 10:06:19 +07:00
dc2f40e5ad navigation seeder 2025-03-24 10:05:33 +07:00
e2c9a4bad0 prescription 2025-03-24 10:04:02 +07:00
Server D3 Linksehat
a661ee7f25 Merge remote-tracking branch 'origin/staging' into origin/production 2025-03-14 15:16:21 +07:00
b587e53f7a bug fix 2025-03-14 15:15:16 +07:00
Server D3 Linksehat
ad93252997 Merge remote-tracking branch 'origin/staging' into origin/production 2025-03-14 14:36:58 +07:00
c8efb2d82b report monthly 2025-03-14 14:21:28 +07:00
Server D3 Linksehat
418631380a report 2025-03-14 13:43:35 +07:00
e3369542f4 permision dan navigation 2025-03-11 08:37:34 +07:00
58d2c70839 Merge commit '21dc2a8df8671b269eae9b6d9eff94a482cb3ffa' into staging 2025-03-11 08:24:13 +07:00
Fadila
21dc2a8df8 buat path menjadi daily-monitoring 2025-03-06 16:17:25 +07:00
1644002c11 Merge remote-tracking branch 'origin/feature/daily-monitoring-client-portal' into staging 2025-03-06 16:00:16 +07:00
Fadila
47ab0d2d61 tambah menu daily monitoring pada client portal 2025-03-06 15:23:54 +07:00
8956804351 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2025-03-06 11:24:17 +07:00
ca2c397c51 update dashboard 2025-03-06 11:24:03 +07:00
ivan-sim
6c170c19de Update filter 2025-02-28 09:33:39 +07:00
ivan-sim
6deaf27bca Invoice Payment 2025-02-27 16:55:36 +07:00
Server D3 Linksehat
3fc44c56f5 Merge remote-tracking branch 'origin/staging' into origin/production 2025-02-26 16:53:26 +07:00
Server D3 Linksehat
dc02745c5a autocomplite 2025-02-26 16:48:42 +07:00
Server D3 Linksehat
246fc11438 Merge remote-tracking branch 'origin/staging' into origin/production 2025-02-25 15:00:22 +07:00
4e3bf6d11e update penambahan specialist dan dppj di request final log 2025-02-25 14:43:19 +07:00
9811ccd92d maping drugs 2025-02-25 11:30:27 +07:00
Server D3 Linksehat
6fdc228b6f Merge remote-tracking branch 'origin/staging' into origin/production 2025-02-24 17:47:39 +07:00
6e2e630780 update 2025-02-24 17:44:38 +07:00
Server D3 Linksehat
e856a5873d Merge remote-tracking branch 'origin/staging' into origin/production 2025-02-24 17:00:29 +07:00
46c7c5c0cb update 2025-02-24 16:59:31 +07:00
Server D3 Linksehat
b66494194e Merge remote-tracking branch 'origin/staging' into origin/production 2025-02-24 16:03:57 +07:00
Server D3 Linksehat
66762055da update 2025-02-24 16:01:49 +07:00
ccd39e4d77 update 2025-02-24 15:54:03 +07:00
51ce855408 Update 2025-02-24 15:28:44 +07:00
9810a28774 update 2025-02-24 10:33:57 +07:00
ce2c417045 update 2025-02-24 10:18:38 +07:00
8ed6700339 bugs fix approve 2025-02-24 09:20:23 +07:00
74acd90709 bugs fix 2025-02-20 17:09:45 +07:00
1a90cefb04 update 2025-02-20 16:57:47 +07:00
cfab2f37ea update 2025-02-20 16:17:32 +07:00
a0a7c3b735 maping drugs 2025-02-20 16:17:05 +07:00
e56910e0c1 update 2025-02-20 08:26:40 +07:00
cb2a335989 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2025-02-18 11:16:26 +07:00
ffaef03945 view, search dan tambah daily monitoring 2025-02-18 11:07:55 +07:00
ivan-sim
d6a84ce9f2 Add Spesialis & DPPJ 2025-02-13 13:42:11 +07:00
Server D3 Linksehat
7ed8acd064 Merge remote-tracking branch 'origin/staging' into origin/production 2025-02-12 10:10:02 +07:00
a7c7dd8d8f update 2025-02-12 09:57:18 +07:00
9090c16a6a export code log 2025-02-12 09:49:16 +07:00
b163ba5547 tambah kolom dan fitur search code log 2025-02-12 09:38:56 +07:00
Server D3 Linksehat
5a8fa432d2 Merge remote-tracking branch 'origin/staging' into origin/production 2025-01-23 15:41:30 +07:00
Server D3 Linksehat
7470f01466 update navigation 2025-01-23 15:41:00 +07:00
7e41f543ae bugs fix 2025-01-23 15:32:06 +07:00
f75f8ddb51 tambah fitur dokter online 2025-01-23 14:55:58 +07:00
Server D3 Linksehat
4fde6fa756 Merge remote-tracking branch 'origin/staging' into origin/production 2025-01-21 15:43:59 +07:00
d297fc6ab2 update 2025-01-21 15:39:28 +07:00
3b228a96fb update delete member by id 2025-01-21 15:02:08 +07:00
Server D3 Linksehat
ac4e59996d Merge remote-tracking branch 'origin/staging' into origin/production 2024-12-18 16:22:26 +07:00
c8994caaf5 bugs fix export excel 2024-12-18 16:20:49 +07:00
Server D3 Linksehat
43065ed30c Merge remote-tracking branch 'origin/staging' into origin/production 2024-12-18 16:08:49 +07:00
67b6b3a605 Tambah kolom Deskripsi Diagnosis 2024-12-18 15:59:56 +07:00
a94972d14d tambah form edit tom 2024-12-18 15:59:15 +07:00
Server D3 Linksehat
9db7037c31 Merge remote-tracking branch 'origin/staging' into origin/production 2024-12-17 17:10:29 +07:00
7dcc816af1 validasi code otomatis 2024-12-17 16:58:26 +07:00
Server D3 Linksehat
922551a2b8 Merge remote-tracking branch 'origin/staging' into origin/production 2024-12-11 16:55:38 +07:00
ced9e6ac32 tambah kolom type of member 2024-12-11 16:53:36 +07:00
5c1befd7ab update validasi 2024-12-11 16:47:26 +07:00
Server D3 Linksehat
6689449fb0 Merge remote-tracking branch 'origin/staging' into origin/production 2024-12-11 15:34:33 +07:00
5b869a4ee8 validasi wajib type of member 2024-12-09 15:25:01 +07:00
33bfb8ede9 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-12-09 14:28:53 +07:00
2860f44d10 update type member 2024-12-09 14:25:52 +07:00
Server D3 Linksehat
118ce107ec Merge remote-tracking branch 'origin/staging' into origin/production 2024-12-05 16:11:15 +07:00
Server D3 Linksehat
a2fbabf457 Merge remote-tracking branch 'refs/remotes/origin/staging' into staging 2024-12-05 15:54:29 +07:00
Server D3 Linksehat
e0b58e23b2 update backend 2024-12-05 15:53:54 +07:00
59278de3a6 Merge remote-tracking branch 'refs/remotes/origin/staging' into staging 2024-12-05 15:52:48 +07:00
c629765afd update omt / non omt 2024-12-05 15:51:51 +07:00
Server D3 Linksehat
697c41eb70 update 2024-12-05 14:41:08 +07:00
ivan-sim
d211bb7924 Update 2024-10-17 15:09:10 +07:00
ivan-sim
8e9492f98b Update 2024-10-17 15:00:53 +07:00
ivan-sim
7a885ef4a1 Update 2024-10-17 14:55:36 +07:00
ivan-sim
888a364a22 Update 2024-10-17 14:35:42 +07:00
ivan-sim
e4253756e4 Update 2024-10-17 14:14:05 +07:00
ivan-sim
81a47bfb07 Update 2024-10-17 14:08:14 +07:00
Server D3 Linksehat
f6dfef61e3 Merge remote-tracking branch 'origin/staging' into origin/production 2024-10-16 14:14:14 +07:00
ivan-sim
5cb26d9553 Update 2024-10-16 12:02:33 +07:00
Server D3 Linksehat
fc8cf3f6b1 Merge remote-tracking branch 'origin/staging' into origin/production 2024-10-16 10:56:59 +07:00
2bbbbc8fef update 2024-10-16 10:53:02 +07:00
0ab8ec85d3 filter dan flag file di inpatient monitoring 2024-10-16 10:52:29 +07:00
a436f8550b Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-10-16 10:38:14 +07:00
de2a481bbe update 2024-10-16 10:38:05 +07:00
Server D3 Linksehat
f521e8b6fa Merge remote-tracking branch 'origin/staging' into origin/production 2024-10-16 10:33:14 +07:00
ivan-sim
de86988cf0 Update 2024-10-16 10:30:51 +07:00
979c1e06d2 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-10-16 10:26:27 +07:00
5f7893c8de tambah filter dan flag files 2024-10-16 10:26:18 +07:00
ivan-sim
b69588ae65 Update 2024-10-16 09:01:06 +07:00
Server D3 Linksehat
18e0b13335 Merge remote-tracking branch 'origin/staging' into origin/production 2024-10-16 08:37:01 +07:00
de644e5db8 update role client porta 2024-10-15 15:01:16 +07:00
fb70bc4206 update permission 2024-10-15 14:33:45 +07:00
ivan-sim
828910752a Update Hospital Portal 2024-10-15 13:57:50 +07:00
ivan-sim
e430c446fd Update 2024-10-15 08:30:47 +07:00
Server D3 Linksehat
3a76e7f7cf Merge remote-tracking branch 'origin/staging' into origin/production 2024-10-14 11:31:59 +07:00
Server D3 Linksehat
5bd8e4d8e7 update 2024-10-14 11:14:53 +07:00
Server D3 Linksehat
e5c647bb7c update 2024-10-14 11:11:36 +07:00
Server D3 Linksehat
9128ff3b86 update 2024-10-14 10:55:36 +07:00
Server D3 Linksehat
659b28fde7 update 2024-10-14 10:37:57 +07:00
Server D3 Linksehat
013c57d00a update 2024-10-14 10:35:21 +07:00
Server D3 Linksehat
67e4306f10 Merge remote-tracking branch 'refs/remotes/origin/staging' into staging 2024-10-14 10:13:46 +07:00
Server D3 Linksehat
6225c1c0e4 record log delivery 2024-10-14 10:13:09 +07:00
4c72d9ab21 penjagaan organisasi dan apotek 2024-10-11 16:47:33 +07:00
f3fd02671f update corporate manager nya 2024-10-11 15:49:21 +07:00
772c91ef00 update role penjagaan file 2024-10-11 14:25:27 +07:00
55a1ae3c71 tambah permission 2024-10-11 13:29:06 +07:00
Server D3 Linksehat
7bc76bf1fd Merge remote-tracking branch 'refs/remotes/origin/staging' into staging 2024-10-10 08:50:33 +07:00
Server D3 Linksehat
999ba3eb61 update root 2024-10-10 08:50:03 +07:00
ivan-sim
5e79feabb9 Update 2024-10-09 15:03:30 +07:00
Server D3 Linksehat
a8bfde8132 Merge remote-tracking branch 'refs/remotes/origin/staging' into staging 2024-10-09 14:34:33 +07:00
Server D3 Linksehat
8c66a4cd31 update 2024-10-09 14:34:11 +07:00
ivan-sim
0233058e66 Update 2024-10-09 11:05:55 +07:00
ivan-sim
9a4e9db798 Update 2024-10-09 10:31:33 +07:00
ivan-sim
0c8feec075 Update 2024-10-07 17:01:00 +07:00
ivan-sim
3fb8dbb091 Update 2024-10-07 15:22:53 +07:00
ivan-sim
39bc02b224 Update 2024-10-07 15:11:49 +07:00
ivan-sim
82eca4b58a Update 2024-10-07 15:04:50 +07:00
ivan-sim
f676f4a244 Update 2024-10-07 13:35:16 +07:00
ivan-sim
c57605b554 update 2024-10-07 12:00:17 +07:00
ivan-sim
9e0507690a Update 2024-10-07 11:38:54 +07:00
ivan-sim
8d5c7e4cb4 Update 2024-10-04 10:46:03 +07:00
ivan-sim
2663a7bfbe Update 2024-10-04 09:00:59 +07:00
ivan-sim
d46e40e7b1 update 2024-10-04 08:57:19 +07:00
ivan-sim
0f30c9c4b8 Update 2024-10-03 16:32:19 +07:00
ivan-sim
d184ba07b6 Update 2024-10-03 16:19:33 +07:00
ivan-sim
0758a70434 GRAB X APOTEK X Hospital PORTAL 2024-10-03 16:14:11 +07:00
Server D3 Linksehat
611689235b update report livechat 2024-09-30 11:52:42 +07:00
ivan-sim
15138f7edf Update 2024-09-23 09:20:20 +07:00
Server D3 Linksehat
59e38b969e update 2024-09-13 16:07:18 +07:00
Muhammad Fajar
ac5bd92fe2 update excel inhealth organization 2024-09-13 09:42:15 +07:00
Muhammad Fajar
578a8847a2 Update Data Organization Inhealth 2024-09-13 09:41:05 +07:00
Server D3 Linksehat
99478f2b2c Merge remote-tracking branch 'refs/remotes/origin/staging' into staging 2024-09-02 17:37:44 +07:00
Server D3 Linksehat
d534d94e6f update api drugs 2024-09-02 17:35:22 +07:00
ivan-sim
c3e1e4061e Update 2024-09-02 16:11:43 +07:00
Server D3 Linksehat
bfa21b97e4 mandiri inhealth 2024-08-31 15:03:52 +07:00
Server D3 Linksehat
3087d30e16 update bugs impor member 2024-08-24 07:15:48 +07:00
Server D3 Linksehat
4381fe6141 update 2024-08-21 14:37:06 +07:00
Server D3 Linksehat
4034db6323 Merge remote-tracking branch 'refs/remotes/origin/staging' into staging 2024-08-21 14:26:12 +07:00
Server D3 Linksehat
fc0b004fbd update 2024-08-21 14:20:53 +07:00
e4d54ab78c update 2024-08-21 13:44:24 +07:00
ff05c31914 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-07-22 10:54:53 +07:00
9c396d1b36 improvement add/edit dialog 2024-07-22 10:54:39 +07:00
Server D3 Linksehat
f6d068c91b ignore /public/files 2024-07-18 16:06:30 +07:00
Server D3 Linksehat
1bf608b1ed Server 103 Commit 2024-07-18 16:05:33 +07:00
Linksehat Staging Server
6473788765 report excel 2024-07-12 10:47:41 +07:00
195265deee Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-07-12 08:56:34 +07:00
836fab1c9a update report rujukan online 2024-07-12 08:53:44 +07:00
Linksehat Staging Server
4f4a2e7136 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-07-12 08:48:13 +07:00
Linksehat Staging Server
70fc1579e7 update 2024-07-12 08:41:18 +07:00
48f63ede25 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-07-12 08:27:14 +07:00
8e8aa9cb41 update report resep online 2024-07-12 08:23:11 +07:00
ivan-sim
6d56e5cdf0 Update 2024-07-10 10:11:19 +07:00
ivan-sim
4287f7a436 Update 2024-07-09 14:23:12 +07:00
ivan-sim
d08acc5645 Update 2024-07-09 14:05:22 +07:00
18946128aa update 2024-07-09 09:29:22 +07:00
ee067f8080 Report Riwayat Medis Pasien dan excel 2024-07-09 09:27:39 +07:00
ebcba27eee Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-07-09 09:24:55 +07:00
59efa4a140 tambah field untuk phone number perusahaan, phone alarm center dan deskripsi alarm center 2024-07-09 09:24:48 +07:00
ivan-sim
514fa323be Update 2024-07-09 09:11:15 +07:00
ivan-sim
b144cbd1a9 update 2024-07-09 09:01:40 +07:00
ivan-sim
517455fd34 Update 2024-07-09 08:51:17 +07:00
ivan-sim
dc4bc41864 Update git ignire 2024-07-08 11:01:28 +07:00
ivan-sim
7f904b2449 Update 2024-07-08 10:38:44 +07:00
ivan-sim
e3609a69b8 Update 2024-07-08 09:46:12 +07:00
ivan-sim
29180eee15 Update 2024-07-05 13:43:37 +07:00
ivan-sim
ee6a1afc4b Add user access user role client portal 2024-07-05 13:29:29 +07:00
ivan-sim
9b643cd7dd Update E Card Client Portal 2024-07-04 14:45:02 +07:00
3ef3132251 update dialog isi otomatis not approve dan excess 2024-07-02 11:46:02 +07:00
f941903dcd bugs fix hitung realtime 2024-07-02 09:16:03 +07:00
bb57d7f69a update 2024-07-02 08:46:35 +07:00
740eae1a58 update perhitungan limit 2024-07-02 08:29:26 +07:00
f67ab6897c update limit 2024-07-01 17:54:34 +07:00
de62cfff31 update penjagaan limit 2024-07-01 14:42:56 +07:00
97b1b841d3 update penjagaan limit level plan 2024-07-01 10:52:58 +07:00
4ceaf41a7d update login dan password 2024-06-27 14:43:01 +07:00
32a45814b8 perhitungan realtime ketika di delete 2024-06-26 10:23:39 +07:00
0252664e63 update penjagaan delete item 2024-06-26 09:53:57 +07:00
pajri
493076a71b delete comment 2024-06-25 16:52:13 +07:00
pajri
851cf7b435 up 2024-06-25 16:49:42 +07:00
pajri
0411f8c7e5 dashboard 2024-06-25 16:29:13 +07:00
13d54063e4 penjagaan limit realtime 2024-06-25 13:29:40 +07:00
150216fb87 update 2024-06-21 09:02:07 +07:00
fd7b31dfac Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-06-21 08:52:26 +07:00
e7163c5a13 update import member 2024-06-21 08:52:19 +07:00
Linksehat Staging Server
18732053a1 update enrollment 2024-06-20 16:11:10 +07:00
Linksehat Staging Server
5ae872a5be Merge remote-tracking branch 'origin/staging' into origin/production 2024-06-20 16:10:13 +07:00
ivan-sim
e18afa93bf Update ASO 2024-06-20 11:03:03 +07:00
18a1350787 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-06-20 09:47:50 +07:00
fdf87ef59a tambah api list hospital 2024-06-20 09:46:35 +07:00
ivan-sim
46f3dec3a6 Update 2024-06-19 16:31:44 +07:00
ivan-sim
b1185093f1 Update 2024-06-19 16:04:15 +07:00
ivan-sim
f0c996ee80 Update 2024-06-19 16:02:13 +07:00
ivan-sim
8ad9e870b9 Update 2024-06-19 15:01:31 +07:00
Linksehat Staging Server
20a10b4c23 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-06-19 11:04:37 +07:00
Linksehat Staging Server
721e318997 update 2024-06-19 11:01:13 +07:00
ivan-sim
533f63c6e7 Update client Portal 2024-06-19 10:55:26 +07:00
pajri
c3341eef8d verification code 2024-06-19 10:53:59 +07:00
ivan-sim
3fcaa6a4be Update hapus debug 2024-06-19 08:46:46 +07:00
pajri
0ddf3ee1d8 Add data user to db old lms 2024-06-18 17:44:24 +07:00
ivan-sim
cff897aee2 Update 2024-06-18 16:57:23 +07:00
ivan-sim
4ab48219ab Update 2024-06-18 16:38:06 +07:00
ivan-sim
605fc72e89 Dashboard Client - Portal 2024-06-18 08:51:33 +07:00
Linksehat Staging Server
0690eae429 Merge remote-tracking branch 'origin/staging' into origin/production 2024-06-14 08:32:47 +07:00
pajri
c886cfa801 Url Out sanctum 2024-06-10 10:37:41 +07:00
8474c59834 kirim notification 2024-06-10 10:05:33 +07:00
03d94905fa update 2024-06-10 10:01:00 +07:00
8956d8c13f update message summary 2024-06-10 10:00:46 +07:00
36ca4925d9 update data seeder 2024-06-09 13:04:52 +07:00
377a9002b4 update bugs fix 2024-06-09 12:59:33 +07:00
58740ece16 path nullable 2024-06-09 12:53:20 +07:00
fce657412e User access dan user role dinamis 2024-06-09 12:49:40 +07:00
1eb6eb9cf3 imporve first message 2024-06-03 11:09:51 +07:00
Linksehat Staging Server
6f711b592e resep dokter 2024-06-03 09:14:21 +07:00
Linksehat Staging Server
4b7337f7cb bugs fix send notification 2024-06-03 09:09:16 +07:00
Linksehat Staging Server
5e0d0cac1b tambah kolom import drugs 2024-06-03 09:08:11 +07:00
Linksehat Staging Server
6ce4282a3b bugs fix livechat 2024-06-03 09:07:12 +07:00
Linksehat Staging Server
490ec57b06 Merge remote-tracking branch 'origin/staging' into origin/production 2024-05-30 13:54:16 +07:00
6fb7034e2e update komisi 2024-05-30 13:52:17 +07:00
Linksehat Staging Server
1a7515e478 Merge remote-tracking branch 'origin/staging' into origin/production 2024-05-30 13:47:21 +07:00
8b797f7a29 penyesuaian perhitungan komisi 2024-05-30 13:46:03 +07:00
36b16d71b0 update fitur export report 2024-05-30 11:33:00 +07:00
Linksehat Staging Server
a1c21e2abf Merge remote-tracking branch 'origin/staging' into origin/production 2024-05-30 10:40:08 +07:00
a8beac0f90 update 2024-05-30 10:37:02 +07:00
Linksehat Staging Server
9c185908da Merge remote-tracking branch 'origin/staging' into origin/production 2024-05-30 10:35:29 +07:00
53f0fd725b update data 2024-05-30 10:33:36 +07:00
Linksehat Staging Server
8f23ee34e3 Merge remote-tracking branch 'origin/staging' into origin/production 2024-05-30 10:28:04 +07:00
3c5bdbdece Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-05-30 10:26:39 +07:00
aa32540fd8 update report 2024-05-30 10:22:27 +07:00
Linksehat Staging Server
6c712d15d2 Merge remote-tracking branch 'origin/staging' into origin/production 2024-05-28 10:56:28 +07:00
Linksehat Staging Server
bec92fc641 update catatan 2024-05-28 10:56:03 +07:00
Linksehat Staging Server
151248d448 update bugs user notification 2024-05-28 09:00:27 +07:00
2645a7d785 tambah field fcm token 2024-05-27 09:18:27 +07:00
5b9514fa77 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-05-24 09:43:29 +07:00
59524159b6 update package fcm 2024-05-24 09:43:20 +07:00
Linksehat Staging Server
fdfc8113f8 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-05-24 09:13:36 +07:00
Linksehat Staging Server
35c1a2be50 update 2024-05-24 09:13:03 +07:00
8af376cd37 update send notification fcm 2024-05-24 09:09:21 +07:00
Linksehat Staging Server
8ae6e44680 bugs fix callback 2024-05-22 14:17:01 +07:00
Linksehat Staging Server
ebd880d9c8 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-05-22 10:02:30 +07:00
Linksehat Staging Server
492c3a2b05 update notification 2024-05-22 10:02:22 +07:00
ivan-sim
117b81f92f Update Import Billing & Invoice 2024-05-22 09:43:47 +07:00
ivan-sim
6fef852e2c Update Import Billing & Invoice 2024-05-21 17:02:18 +07:00
pajri
81311928da api token firebase 2024-05-21 14:49:24 +07:00
ivan-sim
f50a4f6409 Update Add user hospital portal 2024-05-21 10:36:39 +07:00
ivan-sim
0cd2cf71fc Update Add user hospital portal 2024-05-20 11:35:31 +07:00
ivan-sim
6c2a4dae1b Update Add user hospital portal 2024-05-20 11:33:57 +07:00
Linksehat Staging Server
ffb7e0bc08 Merge remote-tracking branch 'origin/staging' into origin/production 2024-05-20 08:49:14 +07:00
Linksehat Staging Server
15cc88403f update prod 2024-05-20 08:46:04 +07:00
f83a7954aa update 2024-05-17 15:59:51 +07:00
664f015c94 update autocomplite 2024-05-17 15:40:27 +07:00
ba55866203 update pagination livechat 2024-05-17 14:00:24 +07:00
504f152876 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-05-16 17:13:00 +07:00
f838b37045 update 2024-05-16 17:12:51 +07:00
0ac3e4d451 api chat, send summary, health sertificate, callback duitku 2024-05-16 17:12:29 +07:00
ivan-sim
fa160aa2de Update 2024-05-15 15:13:10 +07:00
ivan-sim
4cc3df9859 Update 2024-05-15 14:58:25 +07:00
ivan-sim
c4cf1bc64e Update Formularium 2024-05-15 14:44:14 +07:00
8bcc3fe15d fixing private channel 2024-05-15 10:13:05 +07:00
9d116e8765 fixing 2024-05-15 10:04:46 +07:00
b8fdaf2ada fix private channel 2024-05-15 09:56:18 +07:00
86034f6e5e Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-05-14 15:11:40 +07:00
04fb81c1f2 update 2024-05-14 15:11:31 +07:00
ivan-sim
3ede40b559 Add Column Price to Table Drug 2024-05-14 15:10:41 +07:00
db0850b835 public channel 2024-05-14 15:01:39 +07:00
f4a6a65e83 update 2024-05-14 14:34:54 +07:00
4264eb71cb update 2024-05-14 14:20:42 +07:00
7fc28d775d update 2024-05-14 14:13:32 +07:00
afdd92a0f2 update channel private 2024-05-14 14:01:21 +07:00
c07241397f update pusher 2024-05-14 13:22:16 +07:00
cd9fff3265 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-05-14 11:08:32 +07:00
e113802776 API Chat 2024-05-14 11:07:57 +07:00
ivan-sim
e67b48a8da Penambahan kondisi tebus obat atau tidak 2024-05-14 09:33:25 +07:00
618fd9bf91 tambah mendelete request item 2024-05-06 14:00:55 +07:00
2317d36779 update 2024-05-06 11:47:23 +07:00
7ee4aceaa6 update 2024-05-06 11:44:38 +07:00
092b8375d9 update 2024-05-06 11:36:22 +07:00
9d79118e47 update 2024-05-06 11:16:04 +07:00
5dd0f24af9 update 2024-05-06 10:58:05 +07:00
daa7176ff5 update 2024-05-06 10:46:49 +07:00
15df89e703 update eprescription 2024-05-06 10:46:26 +07:00
7516e475d6 update home dokter 2024-05-06 08:15:58 +07:00
738bba88a5 livechat 2024-05-03 14:22:39 +07:00
a7bce13ec3 filter dokter only yang bisa merespkan 2024-05-02 15:08:49 +07:00
8cb30ddedd update 2024-05-02 11:33:13 +07:00
9f55783508 update 2024-05-02 10:56:23 +07:00
3ed0242963 update 2024-05-02 10:25:34 +07:00
04b0b2943d update 2024-05-02 08:21:56 +07:00
9168af67b6 fixing add prescription 2024-04-30 17:03:44 +07:00
f3064d306c Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-04-30 10:11:20 +07:00
8aa67c1864 update create e-prescription 2024-04-30 10:11:11 +07:00
ivan-sim
2b9553d003 Update 2024-04-29 08:52:43 +07:00
ivan-sim
15295ea963 Update case sensitif 2024-04-29 08:50:49 +07:00
ivan-sim
6a13d7aa1f Update case sensitif 2024-04-26 14:03:51 +07:00
2c4fe723dc tambah field invoice biiling di client portal 2024-04-26 08:57:57 +07:00
60af8f21ce tambah field invoice no dan billing no 2024-04-25 17:05:00 +07:00
0b7a8191bf Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-04-24 16:47:43 +07:00
85544a7f0e api duitku dan profile add 2024-04-24 16:47:25 +07:00
ivan-sim
1cb3b2d3f0 API APP DOCTOR 2024-04-23 16:30:55 +07:00
2cf00ac927 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-04-22 11:26:14 +07:00
a424721d89 payment api 2024-04-22 11:26:00 +07:00
ivan-sim
5bc4158cfb Update redirect duitku 2024-04-18 15:31:32 +07:00
ivan-sim
fe486b1593 Update payload check status duitku 2024-04-18 15:06:57 +07:00
ivan-sim
d242339635 Update insert callbak ke api logs 2024-04-18 13:51:47 +07:00
ivan-sim
b55fcaf235 Testing callback on server 2024-04-18 11:24:40 +07:00
3cfca98846 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-04-18 08:47:10 +07:00
1f26289b7a API Home dan Linking 2024-04-18 08:46:49 +07:00
ivan-sim
9710ce9977 Download zip 2024-04-16 16:00:23 +07:00
Linksehat Staging Server
6c4317b800 Merge remote-tracking branch 'origin/staging' into origin/production 2024-04-15 10:25:07 +07:00
ivan-sim
de59a1e69e update 2024-04-15 10:24:35 +07:00
Linksehat Staging Server
d5ccd04cdf Merge remote-tracking branch 'origin/staging' into origin/production 2024-04-15 10:22:54 +07:00
ivan-sim
e8dd5134c1 update export excel 2024-04-15 10:22:24 +07:00
Linksehat Staging Server
07ddcd91c2 Merge remote-tracking branch 'origin/staging' into origin/production 2024-04-15 10:17:36 +07:00
ivan-sim
df5fa2dc95 Update export client portal 2024-04-15 10:08:35 +07:00
Linksehat Staging Server
7be9d12504 Merge remote-tracking branch 'origin/staging' into origin/production 2024-04-15 09:43:13 +07:00
ivan-sim
4dc5fdbd2c Update exportexcel bug date 2024-04-15 09:35:59 +07:00
Linksehat Staging Server
f3e3d24153 Merge remote-tracking branch 'origin/staging' into origin/production 2024-04-04 14:36:08 +07:00
666712f015 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-04-04 14:34:06 +07:00
a92f62c5a3 update tarif layanan 2024-04-04 14:33:57 +07:00
Linksehat Staging Server
f1447d2783 Merge remote-tracking branch 'origin/staging' into origin/production 2024-04-02 08:36:04 +07:00
ivan-sim
f816ebd839 Bug SUM Approved 2024-04-02 08:34:46 +07:00
Linksehat Staging Server
7cd38a637a Merge remote-tracking branch 'origin/staging' into origin/production 2024-04-01 08:17:40 +07:00
ivan-sim
6d5421e664 Menambahkan service di export excel client portal 2024-03-26 08:27:55 +07:00
Linksehat Staging Server
ace40b0baa Merge remote-tracking branch 'origin/staging' into origin/production 2024-03-18 13:39:20 +07:00
ivan-sim
fdac5feac4 Remove example value 2024-03-18 13:38:21 +07:00
Linksehat Staging Server
4698acb7c9 Merge remote-tracking branch 'origin/staging' into origin/production 2024-03-18 10:20:32 +07:00
ivan-sim
c7aa8ad493 Remove Title Case di Provider 2024-03-18 10:20:06 +07:00
Linksehat Staging Server
5f0c794ac6 Merge remote-tracking branch 'origin/staging' into origin/production 2024-03-18 10:11:28 +07:00
ivan-sim
72ca483f1c Rubah nama submission ke admission 2024-03-18 10:08:11 +07:00
Linksehat Staging Server
ae1269a9ab Merge remote-tracking branch 'origin/staging' into origin/production 2024-03-13 14:18:35 +07:00
e0f6ebef8f file upload sama dengan nana file nya 2024-03-13 14:15:33 +07:00
Linksehat Staging Server
d31602fea1 Merge remote-tracking branch 'origin/staging' into origin/production 2024-03-12 15:55:17 +07:00
f19eb5743f update view texteditor 2024-03-12 15:23:42 +07:00
ace5035879 service monitoring 2024-03-12 10:34:32 +07:00
8ed2425a55 update texteditor 2024-03-12 10:16:03 +07:00
Linksehat Staging Server
7baca28205 Merge remote-tracking branch 'origin/staging' into origin/production 2024-03-12 09:05:39 +07:00
9f42583e9d update 2024-03-12 09:00:20 +07:00
58a1f4c95a input jadi textarea 2024-03-12 08:44:08 +07:00
8e947c3949 input images 2024-03-12 08:17:05 +07:00
Linksehat Staging Server
01166dfc4f Merge remote-tracking branch 'origin/staging' into origin/production 2024-03-08 15:30:38 +07:00
9206189434 rename 2024-03-08 15:27:42 +07:00
Linksehat Staging Server
1245e44178 Merge remote-tracking branch 'origin/staging' into origin/production 2024-03-08 14:09:39 +07:00
0c65434c29 ordering 2024-03-08 14:05:15 +07:00
8294542f98 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-03-08 11:20:53 +07:00
b09a225a58 update 2024-03-08 11:20:46 +07:00
Linksehat Staging Server
aaeea495a5 Merge remote-tracking branch 'origin/staging' into origin/production 2024-03-08 11:12:01 +07:00
Linksehat Staging Server
802fb7d16a Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-03-08 11:04:41 +07:00
Linksehat Staging Server
0a4e534ba2 update 2024-03-08 11:04:02 +07:00
150aba4b0f update list inpatient monitoring 2024-03-08 11:00:48 +07:00
6369e07d95 fixing tombol cancel 2024-03-07 16:22:42 +07:00
a964e243e6 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-03-07 16:11:56 +07:00
e1bab4dd8e add fitur delete file dan update daily monitoring 2024-03-07 16:11:46 +07:00
ivan-sim
44c8e3e5f3 Update 2024-03-07 10:21:41 +07:00
a056915ae1 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-03-06 11:58:30 +07:00
bc95fbd51c update header reason 2024-03-06 11:58:23 +07:00
ivan-sim
5bd2195081 Update import 2024-03-06 11:14:47 +07:00
Linksehat Staging Server
59d9f22e67 Merge remote-tracking branch 'origin/staging' into origin/production 2024-03-06 09:08:32 +07:00
39398d718b bugs fix tampil data diagnosis 2024-03-06 08:55:50 +07:00
Linksehat Staging Server
cc75e54028 bugs fix export claim request 2024-03-05 14:48:55 +07:00
Linksehat Staging Server
ccbded5e4e Merge remote-tracking branch 'origin/staging' into origin/production 2024-03-05 13:41:28 +07:00
Linksehat Staging Server
3fbc4c2cd1 bugs fixi di production 2024-03-05 13:20:35 +07:00
Linksehat Staging Server
c1b1270972 Merge remote-tracking branch 'origin/staging' into origin/production 2024-03-05 13:14:56 +07:00
339eec9727 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-03-05 11:37:48 +07:00
e358623716 tambah keterangan di detail alarm center 2024-03-05 11:37:36 +07:00
ivan-sim
e3f08a44f3 Update import claim management 2024-03-05 10:36:01 +07:00
ivan-sim
39ccf2a0b5 Update Hospital portal 2024-03-04 09:54:09 +07:00
3bae411dc6 fitur is reversal 2024-03-04 09:36:26 +07:00
ab65d53aca update 2024-03-01 11:08:07 +07:00
7ff889919d update if data null 2024-03-01 10:45:44 +07:00
e138e9553f update 2024-03-01 10:27:35 +07:00
e74ab0cbd4 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-03-01 10:20:11 +07:00
28e11ac0e7 update 2024-03-01 10:20:03 +07:00
Linksehat Staging Server
874c510fc5 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-03-01 10:14:48 +07:00
Linksehat Staging Server
99e53fed81 update 2024-03-01 10:14:27 +07:00
0c9a0aebc6 filter tanggal sama 2024-03-01 10:11:16 +07:00
1937a3e572 update 2024-03-01 09:26:36 +07:00
19bddcdd22 export import claim request 2024-03-01 09:17:30 +07:00
547ecc0271 update tombol submit claim 2024-02-29 16:13:36 +07:00
c57b4e63a9 bugs fix export excel 2024-02-29 12:12:42 +07:00
b8cdfc1d74 update bugs fix hospital 2024-02-29 09:30:46 +07:00
c60d1bfe65 Update status 2024-02-29 09:15:10 +07:00
72a97957b5 update listing 2024-02-28 09:43:32 +07:00
e7d0cf2400 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-27 15:22:36 +07:00
41449fa6b1 update filter 2024-02-27 15:22:30 +07:00
ivan-sim
a0aa57ebe4 Update 2024-02-27 15:13:09 +07:00
ivan-sim
e612309347 Update 2024-02-27 15:06:40 +07:00
5c2eba0c19 update 2024-02-27 13:44:32 +07:00
be122a1162 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-27 13:37:45 +07:00
ivan-sim
c82bd31d57 Update Bulk request claim 2024-02-27 14:20:08 +07:00
82a715d9f1 update import 2024-02-27 13:37:38 +07:00
7c5fdaef78 update template 2024-02-27 12:26:40 +07:00
26e3cd5ac9 update template claim 2024-02-27 11:30:19 +07:00
5c4e1e6c96 update 2024-02-27 11:27:16 +07:00
f043165b15 Import Claim Request 2024-02-27 10:47:25 +07:00
40fb595673 tambah upload extensen img 2024-02-27 10:45:41 +07:00
9de0edd4f1 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-27 10:32:33 +07:00
cdb7873986 bugs fix search 2024-02-27 10:32:18 +07:00
ivan-sim
3ba4889713 Update code claim management 2024-02-26 21:55:45 +07:00
ivan-sim
79a097c958 Update claim management migrasi table 2024-02-23 16:05:23 +07:00
841a26e22d Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-23 14:53:26 +07:00
1af8e0d27d update penjagaan 2024-02-23 14:53:19 +07:00
ivan-sim
bca43e3030 Claim Management Report 2024-02-23 13:48:39 +07:00
4dfbb8f867 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-23 11:01:41 +07:00
ccf7bee67a bugs fix dan fitur submission di claim request 2024-02-23 11:01:25 +07:00
ivan-sim
09c976ce3b Update 2024-02-22 17:01:02 +07:00
a8dd5f866c update softdelete 2024-02-22 15:29:02 +07:00
abc1c92c50 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-22 15:28:42 +07:00
0e7d9467ce update kalkulator, edit benefit item, dan delete benefit item 2024-02-22 15:28:32 +07:00
Linksehat Staging Server
2c9977c860 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-22 14:38:19 +07:00
ivan-sim
f2365922fc Update sortir xport xcel 2024-02-22 14:14:41 +07:00
Linksehat Staging Server
1299a03cdc Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-22 13:38:22 +07:00
ivan-sim
693c7db324 Update xport xc tot bill 0 dan log req 2024-02-22 13:36:27 +07:00
dcf1eead2d update bugs 2024-02-22 11:23:46 +07:00
1e49344207 update bugs fix 2024-02-22 11:06:31 +07:00
9667961b8c Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-22 10:59:50 +07:00
d7a78337fa bugs fix edit hospital 2024-02-22 10:59:42 +07:00
Linksehat Staging Server
2a0aadadb2 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-22 09:15:19 +07:00
ivan-sim
4eba294f5a Update 2024-02-22 09:14:53 +07:00
Linksehat Staging Server
5e87495439 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-22 09:07:40 +07:00
ivan-sim
d6197330d3 Update 2024-02-22 09:07:12 +07:00
Linksehat Staging Server
917822506f Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-22 08:52:24 +07:00
ivan-sim
b493b8c0a6 Update loading terus menerus 2024-02-22 08:51:49 +07:00
Linksehat Staging Server
8faab96fb1 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-22 08:38:39 +07:00
ivan-sim
16e6aa08dd Update penjamin export excel 2024-02-22 08:36:37 +07:00
2b38a904d0 detail dan add document dan hapus di claim request 2024-02-21 11:25:37 +07:00
806e6d2749 delete daily monitoring 2024-02-20 16:42:17 +07:00
2c868c00ec add fitur search, edit dan filter claim request 2024-02-20 14:54:02 +07:00
8895311a8f penyesuaian kode claim 2024-02-20 09:00:36 +07:00
Linksehat Staging Server
be0544b31b Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-19 16:30:48 +07:00
9cfbfec8c0 update 2024-02-19 15:41:54 +07:00
a79b7b53e3 update bugs fix 2024-02-19 15:18:00 +07:00
1e7576a5ce tambah field objective 2024-02-19 13:57:45 +07:00
Linksehat Staging Server
35cffa9928 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-19 10:34:35 +07:00
15a99b95b9 update daily monitoring 2024-02-19 10:29:13 +07:00
Linksehat Staging Server
4781bb146e update bugs fix 2024-02-19 09:49:13 +07:00
Linksehat Staging Server
cf85af68fe bugs fix search dan daily monitoring 2024-02-19 08:50:22 +07:00
Linksehat Staging Server
785f20e235 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-18 09:54:29 +07:00
8f904a8ce8 update penjagaan date di alarm center 2024-02-18 08:36:40 +07:00
Linksehat Staging Server
f8021fbd0b Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-17 11:28:16 +07:00
4b0b68b58d update import 2024-02-17 11:25:54 +07:00
Linksehat Staging Server
b8f6532cfb Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-17 10:40:12 +07:00
99bab5e75d update 2024-02-16 10:14:56 +07:00
688e5db39e update set custom upload 2024-02-16 09:51:25 +07:00
Linksehat Staging Server
40ad1ecc82 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-15 14:57:44 +07:00
Linksehat Staging Server
baa45b9ea7 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-15 14:00:19 +07:00
e64b243fd6 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-15 14:00:05 +07:00
b500c9244b optimize daily monitoring 2024-02-15 13:59:42 +07:00
ivan-sim
dd72af8cc9 Update bug final LOG 2024-02-15 13:57:51 +07:00
Linksehat Staging Server
c1047ee8d1 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-15 13:54:38 +07:00
Linksehat Staging Server
47e3d248b7 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-15 13:29:15 +07:00
c90095d4ca update 2024-02-15 12:52:45 +07:00
f37657b154 tambah informasi provider 2024-02-15 12:26:48 +07:00
14949a47f9 tambah pagination dan search daily monitoring 2024-02-15 10:43:32 +07:00
814eb014f7 sort di final log dan menampilkan admission 2024-02-13 11:40:35 +07:00
ccb374da85 update function sort di client portal 2024-02-13 11:32:00 +07:00
Linksehat Staging Server
1d666e81ef Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-12 17:17:55 +07:00
f1f4fed33c update filter sesuai tanggal admission 2024-02-12 17:16:18 +07:00
Linksehat Staging Server
be99463417 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-12 15:27:46 +07:00
7474d199e4 update perhitungan document qty 2024-02-12 14:49:42 +07:00
Linksehat Staging Server
3d9fe45989 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-12 13:09:44 +07:00
ef1b3d1301 add member link document 2024-02-12 12:14:53 +07:00
Linksehat Staging Server
44cc8ccb74 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-12 11:20:37 +07:00
98f5d04b4d update seeder link dokument 2024-02-12 11:17:04 +07:00
Linksehat Staging Server
4891162765 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-12 08:50:36 +07:00
aec0b75a5b update migration database 2024-02-12 08:47:21 +07:00
Linksehat Staging Server
1f7a945432 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-11 07:23:15 +07:00
Linksehat Staging Server
1e7468fc02 penyesuaian ambil data submission ke created at 2024-02-11 07:19:18 +07:00
2dad400486 add fitur delete dan upload ulang file di FINAL log 2024-02-09 16:58:03 +07:00
Linksehat Staging Server
f8f9356d4d Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-09 14:49:57 +07:00
7809e8828f update name hasil penunjang 2024-02-09 14:33:47 +07:00
5d3a41c81b Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-09 10:10:05 +07:00
7b7b24c842 update file name 2024-02-09 10:09:59 +07:00
ivan-sim
7effdd3429 Update Test 2024-02-09 09:57:28 +07:00
81ad0f4dc6 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-09 09:47:31 +07:00
fd5ad65487 Update improvement client portal daily monitoring 2024-02-09 09:47:24 +07:00
ivan-sim
e2e0fc52fc test erro 2024-02-09 09:46:50 +07:00
ivan-sim
90c7460c7b test error 2024-02-09 09:45:00 +07:00
ivan-sim
f7e45bd155 Update 2024-02-09 09:42:49 +07:00
ivan-sim
323e7fa2de Bug 2024-02-09 09:39:23 +07:00
ivan-sim
6ed3e0c382 Update 2024-02-09 09:36:48 +07:00
ivan-sim
37e61e4ae0 Update 2024-02-09 09:17:24 +07:00
ivan-sim
cc44f1f84e Update 2024-02-09 09:16:01 +07:00
ivan-sim
984232a926 Update 2024-02-09 09:13:41 +07:00
ivan-sim
d7fe8a8d83 Update 2024-02-09 09:07:47 +07:00
ivan-sim
6ceceb65ce Update file format image 2024-02-09 08:57:08 +07:00
ivan-sim
c3a39cedd0 Update Keterangan Kebalik dengan Catatan 2024-02-09 08:30:49 +07:00
Linksehat Staging Server
0b4f5fd478 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-07 15:08:35 +07:00
0c9f92a1fb update penjagaan approved 2024-02-07 13:58:12 +07:00
Linksehat Staging Server
1acd57bf66 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-07 11:17:27 +07:00
a8b712e3a1 update soft delete request log 2024-02-07 11:15:48 +07:00
Linksehat Staging Server
c2e2e5d0df Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-07 11:12:01 +07:00
a68e3d0cd4 update reflek diagnosis 2024-02-07 10:57:00 +07:00
16a93b23ee bugs fix 2024-02-07 10:36:36 +07:00
f389ec2438 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-07 10:29:27 +07:00
22d2410508 bugs fix 2024-02-07 10:29:20 +07:00
Linksehat Staging Server
c4388bd473 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-07 10:09:28 +07:00
ivan-sim
dd81dbaa6f Update Export excel alrm Center 2024-02-07 10:06:34 +07:00
062d70d3c2 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-06 13:48:59 +07:00
af53a504da [Improvement] input Daily Monitoring 2024-02-06 13:48:48 +07:00
Linksehat Staging Server
e6556e5a90 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-06 13:48:01 +07:00
ivan-sim
a0b0e47b4d Upload file max size 2024-02-06 13:46:55 +07:00
Linksehat Staging Server
02cecd1f41 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-06 11:04:54 +07:00
ivan-sim
1c52addf99 Test Update 2024-02-06 11:04:25 +07:00
Linksehat Staging Server
61138b823d Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-06 11:02:07 +07:00
ivan-sim
9b96c38b6f Update 2024-02-06 11:00:58 +07:00
Linksehat Staging Server
664bbc2c5a Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-06 10:42:06 +07:00
ivan-sim
dba3e9a542 Update setting PHP ini 2024-02-06 10:40:26 +07:00
Linksehat Staging Server
6d51ac6417 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-06 10:28:16 +07:00
ivan-sim
975cd46f58 Max size upload file 2024-02-06 10:27:10 +07:00
826d4eb2a3 teupdate data submission date 2024-02-06 09:40:17 +07:00
3f151f7753 update bugs 2024-02-05 17:08:00 +07:00
b9a9b53918 tambah listing file di client portal 2024-02-05 16:57:52 +07:00
Linksehat Staging Server
7103d74314 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-05 09:03:27 +07:00
ivan-sim
a9c14088c6 Update 2024-02-05 09:02:48 +07:00
Linksehat Staging Server
3769c05ac2 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-02 15:09:57 +07:00
adf97d049a update kolom approve gl 2024-02-02 15:05:16 +07:00
Linksehat Staging Server
25a3ace8e2 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-02 14:55:43 +07:00
f83d07db84 tombol loading 2024-02-02 14:46:29 +07:00
Linksehat Staging Server
6a57849705 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-02 14:36:06 +07:00
73411013c6 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-02 14:22:44 +07:00
8caed2469c menambahkan filter report request log 2024-02-02 14:22:36 +07:00
Linksehat Staging Server
806ce91998 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-02 13:36:13 +07:00
ivan-sim
74d5da95a4 Create Rekanan Hospital Portal 2024-02-02 13:31:22 +07:00
Linksehat Staging Server
951125b5b6 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-01 17:03:55 +07:00
1dc7b99d42 tambah informasi partner / rekanan hospital 2024-02-01 15:54:29 +07:00
Linksehat Staging Server
92c6957be8 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-01 11:59:24 +07:00
0657448ef8 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-02-01 11:51:07 +07:00
177896a5aa role akses admin 2024-02-01 11:51:01 +07:00
Linksehat Staging Server
78ec25e660 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-01 11:05:31 +07:00
ivan-sim
e3ea1a3854 Update Penjamin 2024-02-01 11:04:58 +07:00
Linksehat Staging Server
2845588300 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-01 10:54:43 +07:00
5e38fdf154 submision date 2024-02-01 10:46:49 +07:00
12fee09c65 penyesuaian approved at 2024-02-01 10:43:40 +07:00
Linksehat Staging Server
525d7db795 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-01 10:37:56 +07:00
8a7fac07ff update type script dan nambah kolom member code 2024-02-01 10:31:38 +07:00
Linksehat Staging Server
0ed5ad7e48 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-01 10:18:37 +07:00
254e9e0624 update 2024-02-01 10:16:29 +07:00
Linksehat Staging Server
910622f5d6 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-01 10:05:05 +07:00
Linksehat Staging Server
85749e4743 Merge remote-tracking branch 'origin/staging' into origin/production 2024-02-01 09:52:37 +07:00
30cb0d7eeb update 2024-02-01 09:50:43 +07:00
53763674fd add kolom import system 2024-02-01 09:42:43 +07:00
135c0987ab Update tambah field rekanan di hospital 2024-02-01 09:07:54 +07:00
Linksehat Staging Server
64cca9bca0 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-31 15:28:17 +07:00
Linksehat Staging Server
7e56fb4b77 update export excel request log 2024-01-31 14:52:04 +07:00
0e9694101f update migration 2024-01-31 14:38:20 +07:00
Linksehat Staging Server
932b20eba6 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-31 13:58:11 +07:00
Linksehat Staging Server
10852a22e9 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-31 13:24:14 +07:00
Linksehat Staging Server
1d5b5ee19b Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-31 13:18:16 +07:00
dd57cb45fb time zone asia/jakarta 2024-01-31 13:00:47 +07:00
f8e6ba0c51 update php ini 2024-01-31 12:24:49 +07:00
a544ed442f update helper service name 2024-01-31 12:13:10 +07:00
Linksehat Staging Server
a7618b5bfe Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-31 11:55:54 +07:00
1721631ae6 [New Feature] Export Excel Request LOG 2024-01-31 11:51:57 +07:00
Linksehat Staging Server
e0aadace17 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-31 10:34:24 +07:00
3ccb9c0a4c update 2024-01-31 10:32:08 +07:00
914e907e0c update list 2024-01-31 10:24:37 +07:00
26519cb895 update 2024-01-31 10:07:33 +07:00
a794379973 update list 2024-01-31 09:47:01 +07:00
aaac2f0a87 update submit fgl 2024-01-31 09:26:59 +07:00
f23d6ab476 update fgl create 2024-01-31 09:20:00 +07:00
c734a8ce6c bugs fix create at final log 2024-01-31 08:50:50 +07:00
529cb5c483 update start date menghitung final log 2024-01-30 16:54:54 +07:00
1cd65a9077 update 2024-01-30 14:52:15 +07:00
88aa3459cb update file report 2024-01-30 14:50:08 +07:00
db9f07932e update 2024-01-30 14:48:38 +07:00
a80bbf4a43 update 2024-01-30 14:44:49 +07:00
e83121bbb4 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-30 14:26:47 +07:00
d92e2aba2e Report Request LOG dan Final LOG 2024-01-30 14:26:14 +07:00
Linksehat Staging Server
217d793a7b Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-30 14:10:06 +07:00
ivan-sim
f34498ced5 Update Tanggal 2024-01-30 14:09:23 +07:00
Linksehat Staging Server
55ff788dd6 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-29 17:06:41 +07:00
c41181b93b [improvement] update quick member 2024-01-29 10:55:54 +07:00
c9d0e85449 update penjagaan edit log 2024-01-29 10:46:05 +07:00
2ce4a1efd1 bugs fix 2024-01-26 13:00:06 +07:00
9b225289a6 update 2024-01-26 12:47:22 +07:00
74f87e150a [Improvement] add fitur delete request log 2024-01-26 11:07:13 +07:00
Linksehat Staging Server
ccbc515686 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-25 17:06:39 +07:00
908a8aff0a update key 2024-01-25 15:52:17 +07:00
a6dd301fbb Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-25 14:57:21 +07:00
f8be2ce0be tambah fitur kalkulator / total benefit 2024-01-25 14:57:13 +07:00
Linksehat Staging Server
aa1579707c Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-25 14:42:49 +07:00
ivan-sim
82d41265fc Update 2024-01-25 14:42:11 +07:00
Linksehat Staging Server
4e24f104f8 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-25 13:28:54 +07:00
Linksehat Staging Server
453ff3ec90 bugs fix 2024-01-25 13:27:42 +07:00
Linksehat Staging Server
d0b8c25b7d Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-25 13:24:50 +07:00
ivan-sim
1c688806ff Update 2024-01-25 11:56:18 +07:00
ivan-sim
1d6c952487 Update Final LOG 2024-01-25 11:41:23 +07:00
3d4aa9ec8a Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-25 11:11:57 +07:00
423fe7b182 update template import request log 2024-01-25 11:11:41 +07:00
Linksehat Staging Server
1878455d7d Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-25 10:49:43 +07:00
ivan-sim
f3b69c4540 Update data 2024-01-25 10:47:03 +07:00
Linksehat Staging Server
b7847bf7aa Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-25 09:43:15 +07:00
ivan-sim
d76865f336 Update query 2024-01-25 09:42:31 +07:00
Linksehat Staging Server
9a4fefc91a Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-25 09:28:23 +07:00
ivan-sim
08bdea979b Update get final LOG 2024-01-25 09:25:31 +07:00
Linksehat Staging Server
5934e95ae3 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-24 15:47:24 +07:00
667c08dc0c update navigate after edit 2024-01-24 14:00:16 +07:00
9b74bbcb5c update 2024-01-24 13:59:37 +07:00
e2e3cfd5ff update auditrail request log 2024-01-24 13:59:18 +07:00
ffa3c21972 update navigate edit final log 2024-01-24 13:47:28 +07:00
bd3d817955 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-24 12:59:23 +07:00
9274f86bb8 Import request LOG 2024-01-24 12:59:16 +07:00
Linksehat Staging Server
73ae4a99a0 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-24 10:37:00 +07:00
ivan-sim
b2a6cd873a Update 2024-01-24 10:36:15 +07:00
Linksehat Staging Server
53d9e6aaeb Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-24 10:30:46 +07:00
ivan-sim
5c941f768e Update 2024-01-24 10:29:48 +07:00
Linksehat Staging Server
fb87a39ff2 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-24 09:38:51 +07:00
ivan-sim
f027970987 Update 2024-01-24 09:37:55 +07:00
e83bfedee1 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-23 17:00:05 +07:00
d8fed82bcf Fitur edit di final LOG 2024-01-23 16:59:57 +07:00
Linksehat Staging Server
6bbb0e7ad8 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-23 13:40:50 +07:00
ivan-sim
60c6550565 Update 2024-01-23 13:39:54 +07:00
12102f4757 update 2024-01-23 12:34:38 +07:00
741f44f2a4 add kolom keterangan dan catatan 2024-01-23 12:31:14 +07:00
612cb3c1cb update penjagaan no identitas 2024-01-23 11:27:00 +07:00
46bb594080 penjagaan ketika update request log 2024-01-23 11:20:50 +07:00
38bc838083 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-23 11:05:16 +07:00
286ccf64e3 add fitur edit hak kamar, penempatan dan submission date 2024-01-23 11:05:08 +07:00
Linksehat Staging Server
08b5b6ea20 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-23 09:38:44 +07:00
ivan-sim
0d23184935 Update status export excel alarm center 2024-01-23 09:37:25 +07:00
Linksehat Staging Server
784d5808fb Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-23 09:19:24 +07:00
ivan-sim
2a6440dd1a Update ExportAlarmCenter 2024-01-23 09:17:02 +07:00
Linksehat Staging Server
32638eef56 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-22 13:47:21 +07:00
4e0e801e95 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-22 13:45:23 +07:00
7b37a06e20 Bug fix update alamat hospital 2024-01-22 13:45:16 +07:00
Linksehat Staging Server
1d0f2fa0fd Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-22 11:53:36 +07:00
ivan-sim
a0e560631a Update Discharge Date Di Final LOG 2024-01-22 11:52:49 +07:00
Linksehat Staging Server
0fa6850852 update where 2024-01-22 11:10:33 +07:00
Linksehat Staging Server
ae83980255 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-22 11:06:27 +07:00
ivan-sim
d4c6bfcc09 Update Address 2024-01-22 11:05:28 +07:00
Linksehat Staging Server
9776cb3d45 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-22 09:50:47 +07:00
ivan-sim
a54d9107f8 Request untuk Tanggal Pengajuan LOG bisa dipilih 2024-01-22 09:46:09 +07:00
Linksehat Staging Server
a770136b10 Merge branch 'origin/production' of https://dev.sismedika.online/febio/aso into origin/production 2024-01-22 08:31:21 +07:00
R
31fb5694ac Add Seeder UpdateTarifLMSSeeder 2024-01-22 08:21:26 +07:00
R
3f1c620742 UpdateTarifLMSSeeder add adm_rajal 2024-01-19 16:42:07 +07:00
R
b182272de3 Add Seeder UpdateTarifLMSSeeder 2024-01-19 14:25:15 +07:00
Linksehat Staging Server
a9296f5c01 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-19 14:12:57 +07:00
R
1c8240b43e Merge branch 'staging' of ssh://dev.sismedika.online:2222/febio/aso into staging 2024-01-19 14:11:10 +07:00
R
543a1cb715 Add Seeder UpdateTarifLMSSeeder 2024-01-19 14:10:49 +07:00
ivan-sim
efe0d86169 Update 2024-01-19 14:09:21 +07:00
R
b74ef82239 Add Seeder UpdateTarifLMSSeeder 2024-01-19 14:06:18 +07:00
R
fd1a8cffac Add Seeder UpdateTarifLMSSeeder 2024-01-19 14:03:11 +07:00
R
1d1392c2d0 Add Seeder UpdateTarifLMSSeeder 2024-01-19 11:19:54 +07:00
R
7695650739 Add Seeder UpdateTarifLMSSeeder 2024-01-19 10:58:58 +07:00
Linksehat Staging Server
2ded7b8b0a Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-19 09:59:29 +07:00
abc6c33717 update 2024-01-19 09:57:22 +07:00
ce3257e9cb update division 2024-01-19 09:55:05 +07:00
c82e3063c5 add division recode mode 2 2024-01-19 09:49:21 +07:00
Linksehat Staging Server
675e352869 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-19 09:22:02 +07:00
430c1a5ad5 update 2024-01-19 09:18:06 +07:00
Linksehat Staging Server
081eaf6356 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-19 08:49:56 +07:00
e331c692bb update 2024-01-19 08:48:08 +07:00
6d47a7723d Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-18 11:24:36 +07:00
8ac9bc78a7 update discharge date 2024-01-18 11:24:25 +07:00
Linksehat Staging Server
4a61537f50 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-18 10:14:56 +07:00
ivan-sim
d6185c014d Update Rename Export PDF 2024-01-18 10:14:19 +07:00
Linksehat Staging Server
ba03ca350e update template 2024-01-18 09:50:36 +07:00
Linksehat Staging Server
b9f89ad36b update template 2024-01-18 09:46:34 +07:00
Linksehat Staging Server
6fcb1e71a7 update incurred 2024-01-18 09:42:52 +07:00
f170745521 update 2024-01-18 09:14:58 +07:00
04f63cc0ec Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-18 08:59:52 +07:00
7648a7b16e bugs fix discharge date 2024-01-18 08:59:42 +07:00
Linksehat Staging Server
2b083c01bc Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-18 08:33:06 +07:00
ivan-sim
13eb8df193 Update 2024-01-18 08:32:26 +07:00
Linksehat Staging Server
6b2455fc5b Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 18:11:56 +07:00
ivan-sim
df24b4fd89 Update 2024-01-17 18:11:09 +07:00
Linksehat Staging Server
beaea79224 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 17:33:10 +07:00
ivan-sim
f413a2a3d1 Update 2024-01-17 17:32:42 +07:00
Linksehat Staging Server
7c51aba819 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 16:59:07 +07:00
ivan-sim
259096f90b Update 2024-01-17 16:57:42 +07:00
Linksehat Staging Server
ff7e87f770 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 16:55:26 +07:00
ivan-sim
94204781a7 Center 2024-01-17 16:54:34 +07:00
Linksehat Staging Server
8173ae03cc Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 16:25:41 +07:00
Linksehat Staging Server
ddf3b0eeff Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 16:18:18 +07:00
ivan-sim
8c8b7e71a7 Update 2024-01-17 16:15:31 +07:00
Linksehat Staging Server
1260c1240e Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 16:03:10 +07:00
ivan-sim
e0709184b4 Update 2024-01-17 16:01:45 +07:00
Linksehat Staging Server
0bd28f19a5 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 15:50:08 +07:00
ivan-sim
3f6a41cbb1 Update 2024-01-17 15:44:40 +07:00
Linksehat Staging Server
9a7ffce2ee Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 15:42:14 +07:00
d0277a9c4a Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-17 15:31:32 +07:00
0a85653a20 bugs fix search 2024-01-17 15:31:24 +07:00
Linksehat Staging Server
4ee29d78f8 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 15:05:40 +07:00
ivan-sim
5c514a0bbc Update 2024-01-17 15:03:28 +07:00
Linksehat Staging Server
d0a85abd1b Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 14:57:50 +07:00
ivan-sim
a3285aed02 Update 2024-01-17 14:56:39 +07:00
1d791a2643 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-17 14:49:58 +07:00
df0ebe5c82 tambah loading export 2024-01-17 14:49:46 +07:00
Linksehat Staging Server
98ae27a306 update 2024-01-17 14:48:25 +07:00
Linksehat Staging Server
fc7d2fe809 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 13:56:13 +07:00
ivan-sim
9a721de5ab Update Test 2024-01-17 13:54:02 +07:00
c140a3bbe2 update 2024-01-17 13:04:53 +07:00
06f4f97e33 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-17 13:02:10 +07:00
ivan-sim
4298c2b869 Update Hospital Portal 2024-01-17 13:39:08 +07:00
dc1eb8769b tambahan date submission dan date discharge 2024-01-17 13:02:02 +07:00
45d3641539 update order by submission 2024-01-17 12:40:30 +07:00
844a098226 add code 6 angka 2024-01-17 10:47:32 +07:00
Linksehat Staging Server
4977ef8666 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-17 10:24:06 +07:00
Linksehat Staging Server
6718f6ea83 update pdf final log dan request log 2024-01-17 10:23:11 +07:00
Linksehat Staging Server
000da0acf4 setting upload 2024-01-17 10:20:52 +07:00
51960c62c9 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-17 10:17:02 +07:00
3e383dffcf tambah status cancel 2024-01-17 10:16:50 +07:00
ivan-sim
01da7593c3 Update Hospital 2024-01-17 09:59:46 +07:00
726058067e Update Header 2024-01-17 09:48:43 +07:00
Linksehat Staging Server
e62f5f14d6 Merge branch 'origin/production' of https://dev.sismedika.online/febio/aso into origin/production 2024-01-16 22:07:08 +07:00
Linksehat Staging Server
26ca75bf79 bugs fix ttd final log 2024-01-16 22:06:59 +07:00
4ec126de89 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-16 16:50:08 +07:00
ivan-sim
96381e4a82 Update Export 2024-01-16 17:20:38 +07:00
12ef4c167f validasi tanggal 2024-01-16 16:48:57 +07:00
9169c06897 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-16 16:07:25 +07:00
ivan-sim
bbe055bd8d Update 2024-01-16 16:22:09 +07:00
ivan-sim
d90abffedf Update Export Excel Alrm Center 2024-01-16 16:21:39 +07:00
d88dce5b9e update 2024-01-16 16:07:17 +07:00
9c3e44f625 update 2024-01-16 11:55:19 +07:00
cb6a98607a update improvement 2024-01-16 11:13:36 +07:00
439daf4e2e Update import request log 2024-01-16 10:33:07 +07:00
c4d2a32cf8 Merge remote-tracking branch 'origin/origin/production' into staging 2024-01-16 09:12:32 +07:00
c484c643f4 Merge branch 'origin/production' of https://dev.sismedika.online/febio/aso into origin/production 2024-01-16 09:10:01 +07:00
85b61e2d4c update tambah column diagnosis request log 2024-01-16 09:09:53 +07:00
ivan-sim
a3927d3770 Update TTD 2024-01-15 14:36:54 +07:00
Linksehat Staging Server
ce9c6b198f Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-15 14:14:49 +07:00
Linksehat Staging Server
17b1ac678c Merge branch 'origin/production' of https://dev.sismedika.online/febio/aso into origin/production 2024-01-15 14:12:57 +07:00
ivan-sim
0c5cab5904 Update TTD 2024-01-15 14:06:24 +07:00
ivan-sim
7f031e3a48 Update TTD 2024-01-15 13:38:00 +07:00
Linksehat Staging Server
4ef4f47d85 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-15 13:10:09 +07:00
ivan-sim
74b109ee58 Update TTD 2024-01-15 12:58:55 +07:00
248456881d tambah item benefit total 2024-01-15 12:02:18 +07:00
546534e5cc hide menu Claim Submit dan Claim Report 2024-01-15 11:13:44 +07:00
Linksehat Staging Server
d125d1bb38 [Production] Build 2024-01-14 12:06:54 +07:00
Muhammad Fajar
62d5dce772 [Clien Portal] Alarm Center - Service Monitoring 2024-01-14 11:35:44 +07:00
ivan-sim
d5d5584ffa Update 2024-01-14 01:48:07 +07:00
ivan-sim
092bc6188f Update ttd 2024-01-14 01:35:31 +07:00
Linksehat Staging Server
d659e8fd4e [Client Portal] - tambah feild item benefit di service monitoring (tb fajri) 2024-01-13 19:28:42 +07:00
Linksehat Staging Server
50fbdc02bc Merge branch 'origin/production' of https://dev.sismedika.online/febio/aso into origin/production 2024-01-13 18:19:21 +07:00
Linksehat Staging Server
0bda72da48 [Client Portal] Penyesuaian get data alarm center 2024-01-13 18:19:12 +07:00
Muhammad Fajar
26ac5c4cc7 [Client Portal] Fix Alarm Center Query 2024-01-13 15:01:37 +07:00
Linksehat Staging Server
30cfcce4af Merge branch 'origin/production' of https://dev.sismedika.online/febio/aso into origin/production 2024-01-13 14:49:36 +07:00
Muhammad Fajar
1661dfc123 [Client Portal] Fix Corporate Manage 2024-01-13 14:39:50 +07:00
Linksehat Staging Server
5baa18bf5f Merge branch 'origin/production' of https://dev.sismedika.online/febio/aso into origin/production 2024-01-13 14:27:12 +07:00
Muhammad Fajar
30fc2201bd [Client Portal] Fix Alarm Center Query 2024-01-13 14:26:31 +07:00
Linksehat Staging Server
bc7225e8cd Merge branch 'origin/production' of https://dev.sismedika.online/febio/aso into origin/production 2024-01-13 14:11:56 +07:00
Muhammad Fajar
e85c62de06 [Client Portal] Fix Alarm Center 2024-01-13 14:11:44 +07:00
Linksehat Staging Server
bf82c7e83a Merge branch 'origin/production' of https://dev.sismedika.online/febio/aso into origin/production 2024-01-13 14:00:05 +07:00
Muhammad Fajar
a42d444b82 [Client Portal] Alarm Center 2024-01-13 13:58:49 +07:00
Linksehat Staging Server
48f74d4d1a Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-13 10:54:51 +07:00
Linksehat Staging Server
f16e1510d8 update import benefit 2024-01-12 16:02:47 +07:00
Linksehat Staging Server
118aae8e6d update import request log 2024-01-12 15:23:32 +07:00
Linksehat Staging Server
d1465ae554 update bugs fix 2024-01-12 14:19:17 +07:00
Linksehat Staging Server
bb63e3c0c0 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-12 10:36:02 +07:00
13699a3f03 bugs fix request log 2024-01-12 09:34:15 +07:00
4fe9d768b2 update 2024-01-12 08:00:33 +07:00
86d68ae43b update bugs fix import request log 2024-01-12 06:56:54 +07:00
81fb10fbf0 fitur import request log dan final log 2024-01-12 06:46:10 +07:00
Muhammad Fajar
627b038e23 [Client Portal] Cleanup Corporate 2024-01-12 02:39:03 +07:00
Muhammad Fajar
e58290dbb7 [Client Portal] Fix Dashboard change url & first default corporate & table loading 2024-01-12 01:41:38 +07:00
Linksehat Staging Server
46eda07625 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-11 14:25:57 +07:00
Linksehat Staging Server
2bd20a5742 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-11 14:00:45 +07:00
Linksehat Staging Server
1d927c0ae6 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-11 13:41:00 +07:00
52f7cacfd8 update 2024-01-11 12:54:59 +07:00
339da7f136 update 2024-01-11 12:33:53 +07:00
2318a9d844 optimize 2024-01-11 12:01:02 +07:00
Linksehat Staging Server
dc3b79430e Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-11 10:22:17 +07:00
ec6b6679bb optimize import member 2024-01-11 10:20:32 +07:00
ivan-sim
209df80458 Update 2024-01-10 15:32:44 +07:00
ivan-sim
82f66151fc Update 2024-01-10 11:59:06 +07:00
Linksehat Staging Server
f53c47f277 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-10 11:37:26 +07:00
ivan-sim
0a2c617581 Update 2024-01-10 11:22:10 +07:00
a8686c07a7 update default 2024-01-10 10:54:14 +07:00
Linksehat Staging Server
d1fcc868a9 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-10 10:46:49 +07:00
322ee1501a update no identitas 2024-01-10 10:40:41 +07:00
Linksehat Staging Server
8860f83ec9 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-10 09:46:37 +07:00
Linksehat Staging Server
cb9a9f0c71 update 2024-01-10 09:45:15 +07:00
38d6abbd99 delete no identitas 2024-01-10 09:43:09 +07:00
Linksehat Staging Server
45ecad258d Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-10 08:50:07 +07:00
4b4611c9cc Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-10 08:47:32 +07:00
66f13fe134 comment auto approve request log 2024-01-10 08:47:17 +07:00
ivan-sim
3bf77ff6e4 Update Hospital Portal TTD 2024-01-09 13:34:19 +07:00
Linksehat Staging Server
57bdfb9727 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-09 11:21:59 +07:00
ba4aa586b3 update 2024-01-09 11:16:45 +07:00
Linksehat Staging Server
147b2619c4 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-09 09:32:05 +07:00
3a60aa5206 update 2024-01-09 09:24:16 +07:00
e2be94f0d0 tambah kolom provider di final log dan request log 2024-01-09 09:15:16 +07:00
Linksehat Staging Server
095a9212e3 update request log pdf 2024-01-08 17:13:32 +07:00
Linksehat Staging Server
88baf6be3d Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-08 17:04:16 +07:00
ivan-sim
b5862650cb Update Hospital portal 2024-01-08 16:49:45 +07:00
Linksehat Staging Server
834c6c9c0f Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-08 14:45:21 +07:00
ivan-sim
1afbcdfcb3 Update 2024-01-08 14:08:04 +07:00
Linksehat Staging Server
c148b6ebb5 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-08 13:27:32 +07:00
Linksehat Staging Server
046193d9e2 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-08 11:49:23 +07:00
Linksehat Staging Server
c02b2a80cc Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-08 11:48:15 +07:00
ivan-sim
ac6589e424 Update 2024-01-08 11:48:10 +07:00
Linksehat Staging Server
2de59a24c4 logo request log 2024-01-08 11:47:31 +07:00
ivan-sim
8f45808078 Update Hospital 2024-01-08 11:34:09 +07:00
Linksehat Staging Server
4a6454f88c Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-08 11:06:06 +07:00
ivan-sim
55f4aafadb Update Hospital Portal 2024-01-08 09:04:05 +07:00
2de9372308 update 2024-01-07 22:51:07 +07:00
2d3e482b76 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-07 22:47:21 +07:00
ivan-sim
390352d255 Update 2024-01-08 13:26:49 +07:00
e2f9efe952 update hide foto 2024-01-07 22:47:10 +07:00
2ae0f2d19b Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-07 22:26:01 +07:00
f05716756b update fix listing final log 2024-01-07 22:25:52 +07:00
Linksehat Staging Server
2d0ff3a5cb Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-07 13:04:11 +07:00
Linksehat Staging Server
3a394c8800 Merge remote-tracking branch 'origin' into origin/production 2024-01-07 13:01:31 +07:00
5c26076806 update request log 2024-01-07 12:03:55 +07:00
0bc965f96e update field pdf request log 2024-01-07 09:20:30 +07:00
Linksehat Staging Server
474ee19f2a update bugs fix detail final log 2024-01-07 09:08:00 +07:00
43991c1069 update bugs final log 2024-01-07 08:14:38 +07:00
Linksehat Staging Server
d057021ef9 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-07 07:51:45 +07:00
ivan-sim
7ae5775919 Update 2024-01-06 17:23:25 +07:00
Linksehat Staging Server
899f1436e5 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-06 16:31:30 +07:00
Linksehat Staging Server
4b412fa5d2 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-06 16:29:27 +07:00
c99bb1cc91 bugs fix filter 2024-01-06 16:03:02 +07:00
c7ca83bd57 update 2024-01-06 15:58:13 +07:00
8e8b123f08 update bux service monitoring 2024-01-06 15:52:27 +07:00
Linksehat Staging Server
887fa4aa71 typo 2024-01-06 15:49:04 +07:00
ed10e2ad4a bugs fix alarm center 2024-01-06 15:48:06 +07:00
ae9a1f70fc bugs fix tanggal start end date alarm center 2024-01-06 15:40:33 +07:00
Linksehat Staging Server
931245cae9 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-06 15:05:32 +07:00
7db0af3bef update fix member detail 2024-01-06 14:13:13 +07:00
Linksehat Staging Server
ece4e796da Client Portal Build 2024-01-06 13:58:03 +07:00
Muhammad Fajar
aacd93fe6a Fix Member name 2024-01-06 13:52:52 +07:00
Muhammad Fajar
eb662f7c34 Fix SQL & Member Eloquent 2024-01-06 13:52:41 +07:00
Muhammad Fajar
494c13aea8 test sql 2024-01-06 13:09:15 +07:00
Muhammad Fajar
46adf39a4a commit 2024-01-06 12:39:03 +07:00
Muhammad Fajar
8d0dd6fa38 Fix SQL User Profile Client Portal 2024-01-06 12:36:29 +07:00
5c5ad8bae7 update ecard dan enrolment 2 2024-01-06 12:35:58 +07:00
Muhammad Fajar
6c83a43696 Fix Getting Family 2024-01-06 12:33:45 +07:00
Muhammad Fajar
577be2ea63 Test Sql 2024-01-06 12:23:16 +07:00
Muhammad Fajar
b865802806 Client Portal - Fix Employee Data 2024-01-06 12:17:39 +07:00
Muhammad Fajar
562f3121c5 Fix Employee Data - Client Portal 2024-01-06 11:54:34 +07:00
Linksehat Staging Server
2e852f7203 Merge branch 'origin/production' of https://dev.sismedika.online/febio/aso into origin/production 2024-01-06 11:44:12 +07:00
Muhammad Fajar
23081382ce Client Portal - Employee Data 2024-01-06 11:40:40 +07:00
Linksehat Staging Server
fe71286728 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-06 11:38:35 +07:00
a9c48f63a4 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-06 11:24:19 +07:00
eb1f215bdb fixing recode mode 2, history member plan dan register 2024-01-06 11:24:11 +07:00
Linksehat Staging Server
37b8229fc2 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-06 09:59:46 +07:00
Linksehat Staging Server
214bf5b116 update ecard 2024-01-06 09:56:23 +07:00
ivan-sim
55d5d006e3 Update 2024-01-05 17:38:12 +07:00
ivan-sim
a9c68fffc9 Update 2024-01-05 17:28:49 +07:00
c899c40ef1 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-05 17:11:59 +07:00
ivan-sim
efdc0853d8 Update 2024-01-05 17:14:19 +07:00
f410b547db update 2024-01-05 17:11:50 +07:00
ivan-sim
63e684f363 Update 2024-01-05 17:08:42 +07:00
ivan-sim
9a14690bd7 Update 2024-01-05 17:06:45 +07:00
ivan-sim
38c94a32da Update 2024-01-05 17:04:15 +07:00
ivan-sim
f6d69b8e6f Update 2024-01-05 17:03:06 +07:00
ivan-sim
bc0d29f42a Update 2024-01-05 17:01:26 +07:00
251c8509be Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-05 16:48:14 +07:00
ivan-sim
f9075b2bd2 Update Revisi Hospital Portal 2024-01-05 16:55:07 +07:00
e45a4b6f7b update bugs fix record mode 2 2024-01-05 16:48:03 +07:00
7d729f295b Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-05 12:23:05 +07:00
87f2788cdd update bugs fix medicine, user record update-delete, user login 2024-01-05 12:22:56 +07:00
ivan-sim
723d4030ab Update insert 2024-01-04 15:34:39 +07:00
ivan-sim
cf3280cd7a Update add provider 2024-01-04 14:15:17 +07:00
Muhammad Fajar
f208f0b133 fix employee data export 2024-01-04 08:39:53 +07:00
Linksehat Staging Server
3580c93c02 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-04 06:36:47 +07:00
Linksehat Staging Server
2e7ab0e1a1 update ecard dan index claim submit 2024-01-04 06:33:32 +07:00
7c820547c0 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-03 17:06:15 +07:00
baabebe9ed update 2024-01-03 17:05:25 +07:00
82b155fd70 update 2024-01-03 17:03:49 +07:00
ivan-sim
b5afefd71d Update Export Members dan Hide client portal 2024-01-03 16:57:28 +07:00
Linksehat Staging Server
a157c41462 update client 2024-01-03 14:58:25 +07:00
ivan-sim
a9a342f6dd Update Add Provider 2024-01-03 14:37:15 +07:00
Linksehat Staging Server
0b79c76428 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-03 11:48:35 +07:00
Linksehat Staging Server
c68b1f3e61 update composer 2024-01-03 11:48:28 +07:00
Linksehat Staging Server
bdf1c664c5 update 2024-01-03 11:46:52 +07:00
700dbff199 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2024-01-03 11:41:32 +07:00
4e096715c5 update 2024-01-03 11:41:24 +07:00
Muhammad Fajar
290a18737d up 2024-01-03 10:42:22 +07:00
Linksehat Staging Server
2800da9255 Merge remote-tracking branch 'origin/staging' into origin/production 2024-01-03 15:02:22 +07:00
Linksehat Staging Server
f6258fb0df update 2024-01-03 10:27:15 +07:00
Muhammad Fajar
2839d537bd client portal update 2024-01-02 23:29:05 +07:00
ivan-sim
519c8e5ed8 Update FINAL LOG 2024-01-02 16:23:23 +07:00
ivan-sim
3a0c7fc06a Update LOG Awal 2024-01-02 15:47:10 +07:00
Linksehat Staging Server
4e988200b2 update 2024-01-02 14:05:48 +07:00
Muhammad Fajar
df4bd6946f hide notification dashboard & add search employee data 2024-01-02 11:31:39 +07:00
Muhammad Fajar
b7ff05bc87 hide notification 2024-01-02 08:56:26 +07:00
Linksehat Staging Server
4135da3103 client portal build 2024-01-01 01:58:18 +07:00
Muhammad Fajar
64ca019c2c remove client portal 2024-01-01 00:07:35 +07:00
Muhammad Fajar
96034d069a fix cleint portal employee-data, dashboard, hide notification 2023-12-31 23:44:43 +07:00
Linksehat Staging Server
ae884f8cd0 Merge remote-tracking branch 'origin/staging' into origin/production 2023-12-30 09:32:07 +07:00
1660db5123 update 2023-12-30 09:29:41 +07:00
Linksehat Staging Server
9a011beb8c Merge remote-tracking branch 'origin/staging' into origin/production 2023-12-30 08:29:31 +07:00
98233656d5 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2023-12-30 08:24:21 +07:00
2b2fae44fc update 2023-12-30 08:24:03 +07:00
9db32ef482 update 2023-12-30 08:23:01 +07:00
Linksehat Staging Server
2d7a5aba1b composer 2023-12-30 07:23:48 +07:00
Linksehat Staging Server
8741f4344f Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2023-12-30 07:21:43 +07:00
Linksehat Staging Server
dc3ee65f34 merge 2023-12-30 07:21:14 +07:00
7e836bd9f3 update dokumen log dan final log 2023-12-30 07:17:09 +07:00
Linksehat Staging Server
1aa984b7eb update 2023-12-29 17:47:11 +07:00
Linksehat Staging Server
6b57919bba Merge remote-tracking branch 'origin/staging' into origin/production 2023-12-29 16:06:48 +07:00
ivan-sim
31baf87202 Update alamat users 2023-12-29 15:22:17 +07:00
37558d0198 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2023-12-29 14:51:57 +07:00
fe9101a881 update composer 2023-12-29 14:51:42 +07:00
Linksehat Staging Server
e7911cb7d5 Merge remote-tracking branch 'origin/staging' into origin/production 2023-12-29 13:57:34 +07:00
ivan-sim
7c2df15a9f Update cetak final LOG 2023-12-29 13:35:06 +07:00
Linksehat Staging Server
f85f002a8e Merge remote-tracking branch 'origin/staging' into origin/production 2023-12-29 09:09:23 +07:00
ivan-sim
2134de863a Update 2023-12-29 08:58:31 +07:00
62270b6847 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2023-12-28 15:51:11 +07:00
19e9e334e2 update ecard dan daily monitoring 2023-12-28 15:50:56 +07:00
ivan-sim
770da6c1f3 Update req log 2023-12-28 13:35:53 +07:00
ivan-sim
9dc60b9141 Update Req LOG Template 2023-12-27 16:11:07 +07:00
ivan-sim
841b319aeb test update2 2023-12-26 16:41:45 +07:00
ivan-sim
b5c8d8c3b6 test update1 2023-12-26 11:51:07 +07:00
ivan-sim
a2a65ec353 test update 2023-12-26 11:43:33 +07:00
ivan-sim
fd49cd9a12 Detail Claim 2023-12-26 10:44:12 +07:00
10f702f2f0 report dan design ecard 2023-12-25 09:54:15 +07:00
c3a4d948a6 Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2023-12-25 09:52:13 +07:00
5a439922d9 send email dan daily monitoring 2023-12-25 09:52:03 +07:00
Linksehat Staging Server
fd15e4f377 Merge remote-tracking branch 'origin/staging' into origin/production 2023-12-25 09:43:39 +07:00
ivan-sim
89f879cfcc Update image 2023-12-20 19:05:01 +07:00
ivan-sim
5702ea7a15 Add Column in Claim Request 2023-12-20 18:49:52 +07:00
Linksehat Staging Server
b48b6bfa3e Merge branch 'staging' of https://dev.sismedika.online/febio/aso into staging 2023-12-20 16:44:47 +07:00
ivan-sim
4defd4fa2f Update Claim, Final LOG, Request LOG 2023-12-20 16:27:57 +07:00
40371bd53a Update customer service 2023-12-19 08:56:18 +07:00
e76c480ce9 update final log 2023-12-12 14:35:12 +07:00
Linksehat Staging Server
f4f83b3c7b build 2023-12-07 10:44:41 +07:00
Linksehat Staging Server
f9b970fbd1 tb 2023-12-07 09:31:41 +07:00
Link Medis Sehat
6edf7311f3 tb 2023-12-07 09:29:02 +07:00
ivan-sim
c7d67467a2 Update Request LOG 2023-11-30 11:38:10 +07:00
91b7a10f86 update request log service 2023-11-30 09:05:49 +07:00
dc582244a5 update import/export excel request log 2023-11-29 16:22:00 +07:00
a208d5f11e update requst dan final log 2023-11-29 14:18:35 +07:00
Linksehat Staging Server
a04153fa2a bugs fix forget password 2023-11-23 11:20:08 +07:00
49afc1d28d forget password, reset password 2023-11-23 09:38:59 +07:00
ivan-sim
6d72b1b789 Update notifikasi send email 2023-11-21 12:07:51 +07:00
ivan-sim
0b211e12a4 Update Notification 2023-11-20 17:28:16 +07:00
ivan-sim
676e541385 Notification Hospital Portal 2023-11-20 16:36:27 +07:00
ivan-sim
13ef733010 Update Hospital Portal 2023-11-17 17:16:47 +07:00
Linksehat Staging Server
00b8fa763e Update Final LOG 2023-11-17 08:57:48 +07:00
Linksehat Staging Server
e3aacbb5d5 update import 2023-11-16 10:26:22 +07:00
8be552c141 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-11-16 10:24:20 +07:00
f5ebb303c6 update improvement 2023-11-16 10:24:17 +07:00
ivan-sim
77fdb46c46 Update pengecekan hospital corporate 2023-11-16 09:24:31 +07:00
0dc10587a8 cek all spesialis 2023-11-15 14:18:05 +07:00
ivan-sim
643fd2b6cd Update 2023-11-14 17:26:26 +07:00
ivan-sim
a1a235f1bb Update 2023-11-14 17:15:50 +07:00
ivan-sim
8f77d8bec0 Update service hospital dan prime center 2023-11-14 16:53:12 +07:00
Linksehat Staging Server
c3b140d1f8 improvement api mobile 2023-11-14 15:06:28 +07:00
c5e103fc57 improvement uat 1 2023-11-14 13:57:33 +07:00
7284354f47 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-11-13 15:21:48 +07:00
Linksehat Staging Server
d6831f3bfa update 2023-11-13 15:29:00 +07:00
d3c5bfb527 update 2023-11-13 15:21:45 +07:00
Linksehat Staging Server
db275c152d autolinking dan manual linking 2023-11-13 10:23:45 +07:00
Linksehat Staging Server
3a83f90ee3 update error message 2023-11-13 09:00:13 +07:00
Linksehat Staging Server
6bd48241f0 bugs fix avatar 2023-11-10 15:36:15 +07:00
Linksehat Staging Server
bc73088e4a bugs fix relation 2023-11-10 14:06:13 +07:00
Linksehat Staging Server
0c9f69aaad manual linking apps 2023-11-10 11:23:20 +07:00
134caa2d2c manual linking 2023-11-10 09:21:18 +07:00
2587650c2e autocomplete inactive 2023-11-10 09:16:21 +07:00
10e1dc72d7 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-11-09 17:25:21 +07:00
cea8b476e0 update fitur delete all import 2023-11-09 17:25:16 +07:00
Linksehat Staging Server
b8b308a89f update user model linksehat 2023-11-09 15:36:33 +07:00
Linksehat Staging Server
28fefd82e5 update bugs fix api mobile 2023-11-09 15:27:53 +07:00
3100a1a1b2 update 2023-11-09 14:30:16 +07:00
9a147f32da Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-11-09 14:30:07 +07:00
1fde7999a5 update 2023-11-09 14:29:58 +07:00
ivan-sim
7cd4f2c929 Update Hospitals Corporate Bisa Import 2023-11-09 11:36:10 +07:00
a9929ad7a2 update api dan template corporate 2023-11-09 11:32:09 +07:00
9c2677771c api update profile 2023-11-09 11:08:29 +07:00
1fcdc6a4b9 update bugs fix 2023-11-08 10:39:25 +07:00
ead5ac35f4 push 2023-11-08 10:19:32 +07:00
e3087e7cbb update origin cros 2023-11-08 09:43:54 +07:00
089fd62bf3 update cross origin 2023-11-08 09:23:36 +07:00
6176b21386 add user manager 2023-11-08 08:31:01 +07:00
8908400d50 bugs fix import claim 2023-11-07 13:18:58 +07:00
c329df499f bugs fix 2023-11-07 12:24:31 +07:00
16454d32cc typo status pernikahan 2023-11-07 12:13:57 +07:00
40ac4feeaa update change profile 2023-11-06 17:03:55 +07:00
1389875c8b Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-11-06 16:32:12 +07:00
e65c017685 update autocomplete 2023-11-06 16:32:06 +07:00
ivan-sim
754f2ab336 Update Edit History Hospital Care 2023-11-06 16:08:44 +07:00
f4e17d4aec update API profile member 2023-11-06 15:13:41 +07:00
4aa6eaa889 update api user dan export alamr center client 2023-11-06 13:19:05 +07:00
ivan-sim
23886c52d2 Update Claim Request Files 2023-11-03 15:42:56 +07:00
ivan-sim
ec3327b5af Update Upload File Request Dashboard PrimeCenter 2023-11-03 13:57:26 +07:00
korospace
79c8e475e8 finishing benefit configuration 2023-11-03 11:32:09 +07:00
sangpenciptajs
bc429b6d52 import rhf and reusable components from his v3 2023-11-03 08:49:18 +07:00
korospace
16449bd18b fix bug upload file claim request 2023-11-03 08:38:22 +07:00
korospace
186312bb6a Merge branch 'feature/dashboard-create-claim-request' into staging 2023-11-02 20:05:41 +07:00
korospace
bf8bb86857 finishing feature/dashboard-create-claim-request 2023-11-02 20:05:12 +07:00
korospace
22e3061564 progress 2 feature/dashboard-create-claim-request 2023-11-02 17:40:33 +07:00
cff928409d update 2023-11-01 22:47:17 +07:00
e24cb39ff3 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-11-01 22:47:06 +07:00
ivan-sim
c9a2acff35 Update Timeline 2023-11-02 13:17:11 +07:00
ivan-sim
d2e1bb93f0 Update Re-Open Claims 2023-11-02 11:37:35 +07:00
ivan-sim
5384f3ecf2 Update Claims 2023-11-02 11:19:59 +07:00
ivan-sim
01fcaf7181 Update Approve Claim 2023-11-02 10:35:58 +07:00
5b3cddf5fe merge claim detail 2023-11-01 22:46:59 +07:00
korospace
b934fb0727 progress 1 dashboard-create-claim-request 2023-10-31 18:29:05 +07:00
ivan-sim
cd1835d836 Update Claim Services 2023-10-31 12:01:59 +07:00
Linksehat Staging Server
924131534c Update claim services 2023-10-31 10:31:37 +07:00
Linksehat Staging Server
c6940ee83d Update Claims Services 2023-10-31 09:58:53 +07:00
ivan-sim
c38167a50a Claim Services 2023-10-31 09:28:29 +07:00
korospace
de476ad3be finishing slicing ui client benefit config 2023-10-30 18:32:50 +07:00
korospace
e34ec97d27 Merge branch 'feature/laboratorium-result' into staging 2023-10-30 11:02:59 +07:00
korospace
557b8713dd membuat rhf datepicker v2 2023-10-30 11:01:32 +07:00
4fec5df5e6 master formularium 2023-10-30 10:04:54 +07:00
019f4ae066 Merge branch 'staging' of http://itcorp.primaya.id:3000/rajif/aso into staging 2023-10-30 10:02:19 +07:00
759e692465 add update function to master formularium 2023-10-30 09:59:03 +07:00
korospace
f625d4225f target blank untuk list dokumen laboratorium 2023-10-28 19:07:04 +07:00
korospace
b76a9b56f0 finishing part 1 2023-10-28 19:00:04 +07:00
korospace
b6095f1301 progress feature/laboratorium-result 2023-10-27 18:09:27 +07:00
korospace
08cf8b5c9b Merge branch 'feature/daily-monitoring' into staging 2023-10-27 16:05:02 +07:00
korospace
4ec2ca9bb2 memperbaiki handle error front end feature/daily-monitoring 2023-10-27 16:04:38 +07:00
korospace
1da3884fee Merge branch 'feature/daily-monitoring' into staging 2023-10-27 15:43:46 +07:00
korospace
0eff99c456 finishing part 2 2023-10-27 15:43:32 +07:00
korospace
f44e50c52b Merge branch 'feature/daily-monitoring' into staging 2023-10-27 15:30:08 +07:00
korospace
670f62328b membuat endpoint daily monitoring 2023-10-27 15:28:02 +07:00
korospace
0585f9f5f0 finishing part 1 2023-10-27 15:23:16 +07:00
239e95f5df add kolom active 2023-10-27 13:57:24 +07:00
495a73770e Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-10-27 09:31:28 +07:00
63af52cb85 update backend claim history hospital 2023-10-27 09:28:08 +07:00
ivan-sim
0c5960275c Update 2023-10-27 09:07:29 +07:00
adibwp
87864a496c Merge branch 'staging' of http://itcorp.primaya.id:3000/rajif/aso into staging 2023-10-26 17:44:55 +07:00
adibwp
010e971b69 add list master formularium 2023-10-26 17:43:47 +07:00
ivan-sim
1c71edd3ed Detail Claim Management 2023-10-26 17:24:41 +07:00
ivan-sim
bf0001ced6 Update Logs Claim 2023-10-26 11:48:42 +07:00
a53a546f1f Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-10-26 11:35:32 +07:00
8d94ebf524 update bugs fix 2023-10-26 11:35:29 +07:00
ivan-sim
9188e0c882 Update 2023-10-26 11:08:17 +07:00
3ec7727981 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-10-26 10:33:53 +07:00
adcb4e508d update listing dan edit claim management 2023-10-26 10:32:43 +07:00
korospace
435afb6b61 Merge branch 'ui/master-diagnosis' into staging 2023-10-26 10:18:57 +07:00
korospace
995f1f76f8 finishing UI adjustment - 1 2023-10-26 10:17:17 +07:00
ivan-sim
39486af45c Update Claim Request 2023-10-26 10:09:57 +07:00
ivan-sim
053ef5f8e3 Detail Claim Request 2023-10-26 09:54:40 +07:00
adibwp
0abcaea006 Merge branch 'staging' of http://itcorp.primaya.id:3000/rajif/aso into staging 2023-10-25 10:31:31 +07:00
adibwp
f91a8de670 update status function 2023-10-25 10:31:01 +07:00
fb099b352f Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-10-25 08:48:16 +07:00
2d5c870527 update 2023-10-25 08:47:13 +07:00
5265aecd05 tuning import. listing, edit 2023-10-25 08:46:42 +07:00
ivan-sim
06c4bf6930 Drug Update 2023-10-24 17:12:22 +07:00
ivan-sim
115c284f85 Drug Update 2023-10-24 16:47:30 +07:00
ivan-sim
134cdb072d Drug 2023-10-24 16:10:53 +07:00
adibwp
d7e1cc0a98 add create formularium func 2023-10-24 15:17:05 +07:00
adibwp
33d3bdab37 rebase 2023-10-23 17:12:05 +07:00
adibwp
14427c2d7f integrate data api to detail table 2023-10-23 17:10:55 +07:00
f53945e4a0 backend filter plan 2023-10-23 14:39:24 +07:00
78765225bc update status benefit dan exlusion 2023-10-21 12:04:24 +07:00
8a9870d7ae Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-10-21 11:09:07 +07:00
9c1f682adf update 2023-10-21 11:07:56 +07:00
ivan-sim
77175e979e Update Member & Hospital 2023-10-20 18:29:34 +07:00
ivan-sim
4708cb3cf8 Typo add hospital 2023-10-20 16:54:27 +07:00
ivan-sim
f8a7e3b2b9 Update Member & Hospital 2023-10-20 16:52:15 +07:00
korospace
9962f160f8 solve conflict 2023-10-20 15:47:18 +07:00
korospace
a1362b5362 finishing - tuning Diagnosis Exclusion 2023-10-20 15:40:30 +07:00
8373885df8 update 2023-10-20 12:31:14 +07:00
e0d68aa01a Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-10-20 11:22:13 +07:00
614156bbe7 update 2023-10-20 11:22:11 +07:00
ivan-sim
257af7ca9c Member & Hospital 2023-10-20 11:05:42 +07:00
Linksehat Staging Server
51deb0f810 update 2023-10-20 11:03:22 +07:00
Linksehat Staging Server
c380eccc56 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-10-20 10:54:41 +07:00
Linksehat Staging Server
64fcebdad0 package-lock 2023-10-20 10:54:03 +07:00
03afed696e update 2023-10-20 10:51:29 +07:00
f330607f14 backend formularium 2023-10-20 10:50:10 +07:00
adibwp
aa6df1bdae Merge branch 'staging' of http://itcorp.primaya.id:3000/rajif/aso into staging 2023-10-20 09:20:18 +07:00
adibwp
39f7e16fa4 add create corporate formularium 2023-10-20 09:20:11 +07:00
d10b7da080 update 2023-10-20 09:05:02 +07:00
d75638df86 update 2023-10-20 09:04:02 +07:00
8df8269512 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-10-20 08:58:09 +07:00
853cb334ca update 2023-10-20 08:55:06 +07:00
a08aa05d1e Slicing service dan benefit 2023-10-20 08:51:41 +07:00
korospace
8a3b0f3d11 progress - membuat update activate 2023-10-19 15:12:08 +07:00
korospace
7134f0ff86 progress - membuat update activate 2023-10-19 15:09:14 +07:00
ivan-sim
031291b1f0 Update Devisions pada Prime Center 2023-10-18 08:25:47 +07:00
ivan-sim
7bd574db7d LMSN-218
Improve Slicing bagian detail dashboard di Corporate Prime Center
2023-10-17 10:49:51 +07:00
ivan-sim
f2e5a22c64 LMSN-217
Update slicing hospital portal
2023-10-16 16:21:47 +07:00
ivan-sim
827ce472ba LMSN-217
Improve Slicing tampilan pada hospital portal (List Claim, Detail, Search Member)
2023-10-16 09:55:24 +07:00
c3b745e23b update componen label 2023-10-13 16:15:52 +07:00
a694bc03f3 update claim submit 2023-10-13 10:57:42 +07:00
3e908471cf Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-10-13 10:47:26 +07:00
54019e998d update fitur alarm center 2023-10-13 10:47:22 +07:00
ivan-sim
44b1a153b1 LMSN-212
Update
2023-10-13 08:35:14 +07:00
ivan-sim
740d113bd0 LMSN-212
Update remove card employee data
2023-10-12 15:43:36 +07:00
ivan-sim
909231a697 LMSN-212
Update image not load
2023-10-12 15:07:15 +07:00
ivan-sim
c9cb5c20e2 LMSN-212
Update render error
2023-10-12 14:56:22 +07:00
ivan-sim
101056ead0 LMSN-212
Update sql
2023-10-12 14:51:54 +07:00
ivan-sim
b77c1e2c74 LMSN-212
Update sql
2023-10-12 14:48:04 +07:00
ivan-sim
6b931a904d LMSN-212
Client/User dapat melihat Claim Report di client portal
2023-10-12 14:38:16 +07:00
ivan-sim
c767c676f4 Update familymember 2023-10-10 13:29:42 +07:00
ivan-sim
ffdf5013fc LMSN-213
Update disbrusment hide dulu
2023-10-10 11:28:51 +07:00
Linksehat Staging Server
b1a109cc89 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-10-10 10:37:02 +07:00
Linksehat Staging Server
7f4901163c update name dokumen 2023-10-10 10:34:31 +07:00
ivan-sim
49dfb0d02b LMSN-213
Client/User dapat melihat List Claim dan Total Claim
2023-10-10 10:14:12 +07:00
a9e6a750ad Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-10-10 07:31:23 +07:00
b76739a86b update package json 2023-10-10 07:27:39 +07:00
lasteinsa
1700e8ebfb implement claim submit 2023-10-09 17:25:16 +07:00
b49f78858f update name 2023-10-09 16:12:11 +07:00
1a182aaf9e update bugs fix corporate 2023-10-09 14:10:03 +07:00
a8828b2d79 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-10-09 13:18:42 +07:00
d69b610c5f pengajuan claim 2023-10-09 13:18:38 +07:00
ivan-sim
4fc196e226 LMSN-191
hapus console log
2023-10-09 10:20:08 +07:00
ivan-sim
55b2945154 LMSN-191
Update
2023-10-09 10:16:23 +07:00
ivan-sim
7e917222aa LMSN-191
Update
2023-10-09 10:04:37 +07:00
ivan-sim
dcc25a02ce LMSN-191
Update
2023-10-09 09:59:46 +07:00
ivan-sim
1527d64033 LMSN-191
Update sort untuk end date
2023-10-09 09:27:29 +07:00
ivan-sim
9a5eb0e74b LMSN-191
Data corporate & member linking ke client portal
2023-10-09 09:15:35 +07:00
84cf41dba8 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-10-06 14:58:36 +07:00
5376873552 update 2023-10-06 14:57:33 +07:00
ivan-sim
271c8610e3 Update request date 2023-09-29 17:13:22 +07:00
1d11e06178 update 2023-09-29 14:41:34 +07:00
bb8ab6e9e4 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-09-29 14:40:05 +07:00
50762a0581 typo 2023-09-29 14:40:02 +07:00
Muhammad Fajar
f2414e6577 Update Claim Request 2023-09-29 14:17:38 +07:00
ivan-sim
c8afe73c46 Update text date 2023-09-29 14:04:09 +07:00
ivan-sim
e0b2dec912 Update tanggal claim report 2023-09-29 13:53:45 +07:00
ivan-sim
9df7c68ea5 Update Search Member Family 2023-09-29 11:29:09 +07:00
ivan-sim
2673f6fc8b LMSN-191
Update code yang kosong
2023-09-29 09:01:50 +07:00
601a8e5aff update claim management 2023-09-28 17:28:22 +07:00
0fd79b8284 update requeset 2023-09-28 16:00:36 +07:00
Muhammad Fajar
9b4579e8f1 fix claim report 2023-09-27 19:18:31 +07:00
Muhammad Fajar
52783b191a commit 2023-09-27 17:49:36 +07:00
ivan-sim
544eb32a81 LMSN-191
Data corporate & member linking ke client portal
2023-09-27 17:37:46 +07:00
Muhammad Fajar
1abb9b2539 add pdf custom file 2023-09-27 15:54:00 +07:00
Muhammad Fajar
c8dd135558 update uploading file claim report client portal 2023-09-27 15:48:59 +07:00
Muhammad Fajar
2f7a450d28 commit client portal 2023-09-27 15:39:20 +07:00
3f54e07fb5 update package 2023-09-27 15:10:52 +07:00
a83115ea65 update 2023-09-27 15:08:23 +07:00
a916dc4a44 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-09-27 15:04:37 +07:00
975c5169e3 update bugs upload file 2023-09-27 15:04:34 +07:00
Linksehat Staging Server
927700b528 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-09-27 12:07:56 +07:00
Linksehat Staging Server
5d614d604a update 2023-09-27 12:07:30 +07:00
23ce443b52 update input transaksi 2023-09-27 12:04:59 +07:00
4a6d11f5d3 update 2023-09-26 17:24:34 +07:00
8ef4de1157 penyesuiaan data claim 2023-09-26 17:23:00 +07:00
48ba75ffe3 update log 2023-09-26 11:16:39 +07:00
314c4ec5a2 update table 2023-09-26 10:10:28 +07:00
3059a4ae0e debug aso 2023-09-26 09:42:50 +07:00
78ad8d1538 update 2023-09-25 17:27:51 +07:00
cfb2943ed2 update code 2023-09-25 16:59:21 +07:00
3ddf40a608 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-09-25 16:40:29 +07:00
551bea37a1 update 2023-09-25 16:40:24 +07:00
Linksehat Staging Server
6c800bb716 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-09-25 16:25:28 +07:00
Linksehat Staging Server
b3188f0ca7 update 2023-09-25 16:25:10 +07:00
738392c143 Update Master Formularium dan Corporate formularium 2023-09-25 16:21:38 +07:00
72958019f1 update history corporate 2023-09-22 10:53:03 +07:00
969eb93509 update rename 2023-09-21 18:23:28 +07:00
e8c2396442 Update exclusion corporate setting 2023-09-21 18:06:34 +07:00
ae1b213ff0 update name 2023-09-21 11:54:40 +07:00
9fb0cc3eb6 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-09-21 11:33:03 +07:00
c262919449 update name 2023-09-21 11:32:59 +07:00
Linksehat Staging Server
7b2223545f Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-09-21 11:03:10 +07:00
Linksehat Staging Server
bddd076db0 update 2023-09-21 11:02:58 +07:00
0b354dcf22 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-09-21 10:56:09 +07:00
0f60176c35 update master icd 2023-09-21 10:55:57 +07:00
ivan-sim
c5043d56f0 LMSN-188
Update text T&C
2023-09-19 17:07:17 +07:00
ivan-sim
c03b628735 Bug case 2023-09-19 17:04:02 +07:00
ivan-sim
3224804424 Bug case 2023-09-19 17:01:11 +07:00
3ef29c1de6 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-09-19 16:27:32 +07:00
26fca92966 update active 2023-09-19 16:27:28 +07:00
Linksehat Staging Server
848ddb4d8a Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-09-19 15:01:26 +07:00
Linksehat Staging Server
fffd02d600 update 2023-09-19 15:01:17 +07:00
219aa35693 Merge branches 'staging' and 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-09-19 14:54:29 +07:00
7ee4a3ef38 Update fitur impor dan history exlusion 2023-09-19 14:54:19 +07:00
ivan-sim
25cb97250b LMSN-188
Update model files doc
2023-09-19 14:12:22 +07:00
ivan-sim
21e146da7e LMSN-188
LMS dapat upload dokumen TC corporate
2023-09-19 13:42:05 +07:00
ivan-sim
ed2d5ee90a Update logo 2023-09-18 09:04:33 +07:00
ivan-sim
6ed5983175 Update setBirthDate 2023-09-18 08:49:49 +07:00
ivan-sim
9c2956c733 Update locale language json 2023-09-18 08:23:23 +07:00
ivan-sim
08cd475d90 'update' 2023-09-15 13:29:24 +07:00
e8f90772de update 2023-09-15 11:25:23 +07:00
4a155b2b70 update exclusion 2023-09-15 11:20:27 +07:00
Linksehat Staging Server
c365e6b021 Merge remote-tracking branch 'origin/staging' into origin/production 2023-09-14 13:46:26 +07:00
9f3b59a634 bugs end chat 2023-09-14 13:45:12 +07:00
Linksehat Staging Server
450cf57339 Merge remote-tracking branch 'origin/staging' into origin/production 2023-09-14 13:31:34 +07:00
c0322eac3b update range report livechat 2023-09-14 13:30:35 +07:00
Linksehat Staging Server
a7c7a961c7 Merge remote-tracking branch 'origin/staging' into origin/production 2023-09-11 09:02:13 +07:00
e8fb41a57d update 2023-09-11 09:00:28 +07:00
Linksehat Staging Server
a64ed344ee Merge remote-tracking branch 'origin/staging' into origin/production 2023-09-10 19:12:55 +07:00
5e8bcab6ac update time request 2023-09-10 19:06:17 +07:00
Linksehat Staging Server
fdb382f90b Merge remote-tracking branch 'origin/staging' into origin/production 2023-09-10 07:22:43 +07:00
45d52ed655 update fix 2023-09-10 07:19:50 +07:00
afda88cea7 update 2023-09-10 07:16:12 +07:00
03e33fb375 update 2023-09-10 07:15:11 +07:00
115dfbda4d update 2023-09-10 07:14:02 +07:00
78e3211bdd update data 2023-09-10 07:11:10 +07:00
Linksehat Staging Server
690d2b2ed7 Merge remote-tracking branch 'origin/staging' into origin/production 2023-09-09 16:16:51 +07:00
f021d672a0 update time 2023-09-09 16:16:00 +07:00
23685cd87c update time 2023-09-09 15:56:57 +07:00
Linksehat Staging Server
ee20c120e2 Merge remote-tracking branch 'origin/staging' into origin/production 2023-09-09 15:46:28 +07:00
8287bff759 Update metode pembayaran 2023-09-09 15:42:51 +07:00
375a22ef69 report update 2023-09-09 14:01:59 +07:00
Linksehat Staging Server
4f33f2258a Merge remote-tracking branch 'origin/staging' into origin/production 2023-09-09 12:36:30 +07:00
25b668ad2b update name 2023-09-09 10:42:43 +07:00
cff5dba314 Update Report Livechat 2023-09-09 10:36:01 +07:00
Linksehat Staging Server
4df8409e60 merge 2023-09-04 15:28:21 +07:00
Linksehat Staging Server
8011d117d6 Merge remote-tracking branch 'origin/staging' into origin/production 2023-09-04 15:07:09 +07:00
Linksehat Staging Server
4a8079e667 Merge commit ' into origin/production 2023-09-04 15:02:15 +07:00
Muhammad Fajar
ab194600c2 comment nIDAppointment 2023-09-04 14:22:56 +07:00
Lasteinsa
565c6cbbfc Merge branch 'staging' of http://itcorp.primaya.id:3000/rajif/aso into staging 2023-09-04 13:34:35 +07:00
Lasteinsa
7051758b12 several changes 2023-09-04 13:34:04 +07:00
Muhammad Fajar
05f26145f8 update appointmentDetail null export 2023-09-04 11:15:41 +07:00
Muhammad Fajar
510269c9ee export excel livechat 2023-09-04 11:07:12 +07:00
Linksehat Staging Server
f7777954a4 corporate export 2023-09-01 16:02:54 +07:00
Linksehat Staging Server
df6b3f5c59 bugs fixs 2023-09-01 15:12:45 +07:00
Linksehat Staging Server
e0f3a38be0 report livechat 2023-08-31 16:39:03 +07:00
Muhammad Fajar
26b82db77b datetime to date filter 2023-08-31 15:54:01 +07:00
Lasteinsa
290de81ee8 list date 2023-08-31 14:28:37 +07:00
Lasteinsa
83de998900 format time 2023-08-31 14:27:37 +07:00
Lasteinsa
5db9121a16 Merge branch 'staging' of http://itcorp.primaya.id:3000/rajif/aso into staging 2023-08-31 13:45:58 +07:00
Lasteinsa
96ee80f681 several detail changes 2023-08-31 13:45:49 +07:00
Linksehat Staging Server
18d46f09c7 Update livechat 2023-08-31 13:42:04 +07:00
8f74be633e update 2023-08-31 11:36:10 +07:00
7df5586258 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-08-31 09:59:27 +07:00
42a116e9ac bugs fix division 2023-08-31 09:58:44 +07:00
Linksehat Staging Server
07589caba1 Merge remote-tracking branch 'refs/remotes/origin/staging' into staging 2023-08-30 17:43:19 +07:00
Linksehat Staging Server
fc52c7ece6 update 2023-08-30 17:41:59 +07:00
d3fb049c97 Update Bugs Fix Import 2023-08-30 17:39:35 +07:00
a5dd6dfca3 Merge branch 'staging' of itcorp.primaya.id:ra 2023-08-30 11:09:12 +07:00
2f336955ab merge 2023-08-30 11:08:01 +07:00
Linksehat Staging Server
a54708abb5 updated 2023-08-14 16:57:46 +07:00
Linksehat Staging Server
9057e5d00f update 2023-08-14 16:56:18 +07:00
kevin
db4b0193dd rating 2023-08-14 16:55:34 +07:00
kevin
f05a2c879e Merge remote-tracking branch 'refs/remotes/origin/staging' into staging 2023-08-09 09:40:49 +07:00
kevin
137b0a5fb6 test 2023-08-09 09:39:15 +07:00
kevin
3bfe8547a7 test 2023-08-09 09:34:40 +07:00
Linksehat Staging Server
0c673a4cfb Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-31 16:57:29 +07:00
ivan
8ecbcb1a5c Update 2023-07-31 16:56:50 +07:00
Linksehat Staging Server
cf4ce17ffc Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-31 16:46:08 +07:00
ivan
9327c6b45f update 2023-07-31 16:45:01 +07:00
Linksehat Staging Server
53bacd1397 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-31 16:25:49 +07:00
ivan
c1f34dcb26 Update 2023-07-31 16:25:22 +07:00
Linksehat Staging Server
b11829bc7e Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-31 16:15:46 +07:00
ivan
cfa44187c1 update 2023-07-31 16:12:24 +07:00
Linksehat Staging Server
73b9834fe9 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-31 16:10:09 +07:00
ivan
6b52078dc9 Update 2023-07-31 16:09:52 +07:00
Linksehat Staging Server
baf5fe7f89 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-31 16:07:40 +07:00
ivan
73416c3e46 Update 2023-07-31 16:07:05 +07:00
Linksehat Staging Server
7250d13455 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-31 16:03:53 +07:00
ivan
e87d7e334f Update 2023-07-31 16:02:39 +07:00
Linksehat Staging Server
6b6b0e5059 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-31 15:42:57 +07:00
ivan
b770de761a Update 2023-07-31 15:40:41 +07:00
Linksehat Staging Server
13315465b9 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-31 12:01:58 +07:00
ivan
c23defa5fc Update 2023-07-31 12:01:02 +07:00
Linksehat Staging Server
fce14eeb14 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-31 11:57:08 +07:00
ivan
2e78d99b5a Update 2023-07-31 11:56:52 +07:00
Linksehat Staging Server
62f57e8161 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-31 11:54:44 +07:00
ivan
d9ac3bfd60 Update 2023-07-31 11:54:31 +07:00
Linksehat Staging Server
3d2b08c104 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-31 11:51:35 +07:00
ivan
460e2e6c03 Update 2023-07-31 11:51:16 +07:00
Linksehat Staging Server
58ce71c561 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-31 11:48:23 +07:00
ivan
318d4437a6 Update 2023-07-31 11:47:35 +07:00
Linksehat Staging Server
4f0daaceff Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-31 11:34:01 +07:00
ivan
0a214723cb Update hospital-portal 2023-07-31 11:32:25 +07:00
Linksehat Staging Server
49fe9864cd Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-28 16:22:12 +07:00
ivan
786a0a24b3 update 2023-07-28 16:09:34 +07:00
Linksehat Staging Server
ba93c9cba6 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-28 16:00:47 +07:00
ivan
886d8e6321 Update 2023-07-28 16:00:25 +07:00
Linksehat Staging Server
3e9bba2941 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-28 15:34:54 +07:00
ivan
1b15a7428c Test language 2023-07-28 15:34:22 +07:00
Linksehat Staging Server
9c0109fd89 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-28 15:30:13 +07:00
ivan
d8e7ea771b Test load flag 2023-07-28 15:28:43 +07:00
Linksehat Staging Server
3cf302abe8 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-28 10:30:59 +07:00
c858b20028 delete debug firstname 2023-07-28 10:29:45 +07:00
Linksehat Staging Server
7e2cd73536 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-28 10:24:42 +07:00
dccd4f70b9 update real-time ke lms 2023-07-28 10:23:28 +07:00
Linksehat Staging Server
6201fbe2c8 update edit member 2023-07-27 11:32:09 +07:00
Linksehat Staging Server
bff6c1bc61 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-27 11:30:09 +07:00
24a4710318 actived comment 2023-07-27 11:29:55 +07:00
Linksehat Staging Server
6ced3a0f9f Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-27 11:21:50 +07:00
b763a2bec0 update 2023-07-27 11:21:08 +07:00
Linksehat Staging Server
5092569f48 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-27 10:47:22 +07:00
ivan
bcf801fdf1 update plan id 2023-07-27 10:46:39 +07:00
b2ae4a63c4 update plan id 2023-07-27 10:45:19 +07:00
ivan
51c5fe813f Search pada member belum bisa 2023-07-27 10:42:49 +07:00
Linksehat Staging Server
aed9d5d4ad Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-27 10:38:44 +07:00
ivan
d58ad05cbd Search pada member belum bisa 2023-07-27 10:38:30 +07:00
Linksehat Staging Server
0a8a8c94f3 Merge remote-tracking branch 'origin/staging' 2023-07-27 09:45:54 +07:00
Linksehat Staging Server
0eaae544d1 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-27 09:32:57 +07:00
cb7e0bb484 update bugs listing member 2023-07-27 09:32:17 +07:00
Linksehat Staging Server
055b0d234d Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-27 09:12:37 +07:00
ivan
bc949dcea7 Update where corporat_id yang terkomen 2023-07-27 09:11:34 +07:00
Linksehat Staging Server
396c05a4d2 update 2023-07-26 18:03:02 +07:00
Linksehat Staging Server
7240e9803e Merge branch 'master' of itcorp.primaya.id:rajif/aso 2023-07-26 17:58:02 +07:00
Linksehat Staging Server
4ff72d3819 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-26 17:47:40 +07:00
ivan
5127d8a73b Update 2023-07-26 17:47:28 +07:00
Linksehat Staging Server
7e21e20d0d Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-26 17:44:01 +07:00
ivan
2c3e720c83 update 2023-07-26 17:43:49 +07:00
Linksehat Staging Server
f26b5d2e9b Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-26 17:42:55 +07:00
ivan
ec5ef5eb87 Update 2023-07-26 17:42:44 +07:00
Linksehat Staging Server
4e6d4abb06 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-26 17:40:50 +07:00
ivan
8ea3a1d2e5 Update 2023-07-26 17:40:40 +07:00
Linksehat Staging Server
c011fc3c0d Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-26 17:38:52 +07:00
ivan
13d4fac65c Update 2023-07-26 17:38:33 +07:00
Linksehat Staging Server
bc1c209b07 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-26 17:35:29 +07:00
ivan
af9864d89f Update 2023-07-26 17:35:08 +07:00
eb3e3fa981 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-26 17:30:45 +07:00
Linksehat Staging Server
ebf2dc8c0f Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-26 17:29:39 +07:00
ivan
6f7e94e901 Update 2023-07-26 17:29:28 +07:00
875a932c23 update member 2023-07-26 17:28:28 +07:00
Linksehat Staging Server
af7dc0e122 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-26 17:28:17 +07:00
ivan
aa85d03ba8 Update 2023-07-26 17:28:07 +07:00
Linksehat Staging Server
8f4827efc0 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-26 17:27:06 +07:00
ivan
cae869f326 Update 2023-07-26 17:26:55 +07:00
Linksehat Staging Server
40aab73ca0 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-26 17:23:24 +07:00
ivan
621ce08924 Update 2023-07-26 17:22:57 +07:00
Linksehat Staging Server
6f1bba1c33 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-26 17:15:22 +07:00
ivan
0f3ab9d6b5 Update 2023-07-26 17:14:59 +07:00
Linksehat Staging Server
f89bd8423b Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-26 17:04:17 +07:00
ivan
96ed61c0b6 Update group by person_id 2023-07-26 17:02:40 +07:00
Linksehat Staging Server
b7a897a1c0 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-20 17:55:59 +07:00
ivan
e25f313b58 Update reload dataTable 2023-07-20 17:34:11 +07:00
ivan
23d75000b9 Update api url hospital-portal 2023-07-20 17:03:35 +07:00
ivan
59c56ae90f Update histori file MCU 2023-07-20 16:52:08 +07:00
Linksehat Staging Server
3726513af7 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-20 13:42:48 +07:00
ivan
4c8570b542 Update validation, dll Hospital-Portal 2023-07-20 11:51:44 +07:00
Linksehat Staging Server
033625c34e Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-18 14:56:18 +07:00
Muhammad Fajar
5632e9ff29 LMSN-36
Request - Fitur attachment MCU di Prime Center
2023-07-18 11:58:55 +07:00
Linksehat Staging Server
45661cdc78 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-07-11 11:57:07 +07:00
pajri
40da45c9ff update data di service monitoring, dan alarm center benefit summary 2023-07-07 10:30:17 +07:00
Linksehat Staging Server
7e9c6cf028 merger 2023-07-04 10:05:53 +07:00
Linksehat Staging Server
ae8925be0a merge 2023-07-04 10:05:05 +07:00
kevin
2157c14f8d Merge remote-tracking branch 'refs/remotes/origin/staging' into staging 2023-07-04 09:42:37 +07:00
kevin
c942856933 Prescription 2023-07-04 09:35:33 +07:00
Ivan Julian
46416cb6ac commit permission 2023-07-03 11:39:08 +07:00
12f8828f9f env local 2023-07-03 11:32:41 +07:00
ff89f2ac8b update aso 2023-06-19 10:50:29 +07:00
kevin
b05f052848 request 2023-06-16 10:26:56 +07:00
Linksehat Staging Server
2ffb62b564 Merge remote-tracking branch 'origin/staging' 2023-06-15 14:56:11 +07:00
b550349835 update 2023-06-15 14:55:23 +07:00
Linksehat Staging Server
5410404141 update 2023-06-15 11:38:47 +07:00
Linksehat Staging Server
dcd97386b0 Merge remote-tracking branch 'origin/staging' 2023-06-15 11:37:41 +07:00
914b9b0c94 update 2023-06-14 14:35:37 +07:00
4c59fd21b5 update 2023-06-14 11:10:04 +07:00
569d356b6b automatic linking 2023-06-14 10:47:11 +07:00
554d0048e7 update 2023-06-13 14:15:01 +07:00
dbdeed0d5b update 2023-06-13 13:42:06 +07:00
d49ef7d99e update 2023-06-13 13:31:35 +07:00
Linksehat Staging Server
1e8fa839f4 Merge remote-tracking branch 'origin/staging' 2023-06-13 11:39:11 +07:00
Linksehat Staging Server
6ab1adce5e add 2023-06-13 11:37:15 +07:00
8f532e655f update 2023-06-13 11:33:42 +07:00
cbc7dfdb99 update colom service code, policy id dan claim reques 2023-06-09 15:17:39 +07:00
40d4500651 tambah field payment type 2023-06-09 15:11:44 +07:00
kevin
3a8a7438ba update banyak 2023-06-09 13:52:54 +07:00
684e63cd6f update reason 2023-06-09 12:54:59 +07:00
1cebcdb8f8 update 2023-06-09 12:32:18 +07:00
1db1c20531 update claim 2023-06-09 12:29:29 +07:00
7182b0107c update 2023-06-09 12:26:34 +07:00
01727bd02b add export report 2023-06-09 12:00:51 +07:00
20c2bea127 claim request 2023-06-08 13:35:58 +07:00
f7e8cd550b Update limit dashboard 2023-06-08 13:03:37 +07:00
778d2b5bb5 Update Claim 2023-06-08 11:41:19 +07:00
afafed11d5 update kolom center 2023-06-07 09:32:44 +07:00
ff3ac11071 update icon history 2023-06-07 09:27:02 +07:00
7a83409028 Update reason benefit 2023-06-06 09:28:22 +07:00
4cc2ae24b8 add reason in corporate, plan, service 2023-06-05 09:01:43 +07:00
Linksehat Staging Server
4fb2bab64e build 2023-05-26 09:35:23 +07:00
10af60c4b4 update validasi 2023-05-25 11:04:48 +07:00
Fajar
d17513da44 build 2023-05-24 17:14:37 +07:00
Fajar
57125b06af disable show.tsx src/pages/claims 2023-05-24 17:10:26 +07:00
root
d999d86959 update 2023-05-24 16:55:56 +07:00
Linksehat Staging Server
fff9b7cb18 merge 2023-05-24 10:06:46 +07:00
Linksehat Staging Server
cb87cffbb5 merge 2023-05-24 10:02:13 +07:00
f7838352b0 update validasi benefit & plan 2023-05-24 09:56:47 +07:00
6f49e54631 update messsage 2023-05-22 16:30:34 +07:00
7c40b61a3c update lagi 2023-05-22 16:28:53 +07:00
726cf2e192 update validasi member 2023-05-22 15:00:35 +07:00
9f49f0e825 update bugs fixing doble log 2023-05-22 09:14:38 +07:00
a56182aed1 add column recode mode in data member list 2023-05-17 16:10:54 +07:00
e29e635cb6 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-05-17 15:43:10 +07:00
cde3ced75b download membership 2023-05-17 15:42:36 +07:00
Linksehat Staging Server
ed3474ac47 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-05-17 15:38:47 +07:00
Linksehat Staging Server
cf05966f96 merge 2023-05-17 15:38:07 +07:00
c82475da2f update 2023-05-17 15:35:24 +07:00
e057de3f62 update enrollment 2023-05-17 15:32:07 +07:00
b377625805 update 2023-05-17 15:22:07 +07:00
31423c255e Update 2023-05-17 15:19:24 +07:00
a10fa9db21 update validasi date terminated 2023-05-17 11:35:40 +07:00
3f40170043 update 2023-05-17 11:29:02 +07:00
da68ae3e05 add validasi import member ship 2023-05-17 09:16:42 +07:00
a454461449 update member 2023-05-15 14:31:39 +07:00
ca9ebdb3a1 update 2023-05-15 14:25:56 +07:00
02e84b262f update enrollment 2023-05-15 11:28:39 +07:00
414d9de369 update 2023-05-15 11:15:47 +07:00
ee0db6d2ab update 2023-05-15 11:12:54 +07:00
51fd8f57b3 migration 2023-05-15 11:11:58 +07:00
342725ebcc Update Validasi 2023-05-15 11:10:16 +07:00
Linksehat Staging Server
7d8e5800d1 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-05-10 16:33:02 +07:00
Linksehat Staging Server
a2eac07c67 Build 2023-05-10 16:32:58 +07:00
5042cd7800 Merge branch 'staging' 2023-05-10 11:50:22 +07:00
70b0d880fc update harga 2023-05-10 11:50:02 +07:00
Linksehat Staging Server
079641e87b Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-05-10 11:04:12 +07:00
6c65b58481 update enrolement benefit 2023-05-10 11:02:00 +07:00
Linksehat Staging Server
e2d64faf55 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-05-08 11:20:06 +07:00
6a94e46f52 update harga 2023-05-08 11:19:30 +07:00
b3e78850d3 Merge branch 'staging' 2023-05-08 08:59:43 +07:00
Linksehat Staging Server
2016ba1726 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-05-08 08:51:08 +07:00
Linksehat Staging Server
ce024c2bcd merge 2023-05-08 08:50:15 +07:00
5df1a85e7c add filter ketika klik all 2023-05-08 08:47:36 +07:00
pajri
c8b06f67d1 Table Component Alarm Center 2023-05-05 17:02:40 +07:00
pajri
49f3a8558d view table alarm-center 2023-05-04 16:59:18 +07:00
12fbef2a12 update biaya 2023-05-04 09:19:47 +07:00
e455fbfbea update 2023-05-04 09:14:37 +07:00
a55b7f4148 update tarif rs awal bros 2023-05-04 08:43:28 +07:00
4f8745d726 Merge branch 'staging' 2023-05-02 14:43:09 +07:00
f5de316768 add filter corporate benefit active 2023-05-02 14:41:10 +07:00
Linksehat Staging Server
d22fa1848f merge 2023-05-02 09:21:30 +07:00
Linksehat Staging Server
cc5201ca3e merge with staging 2023-05-02 09:12:26 +07:00
bb925503f0 Merge branch 'staging' 2023-05-02 09:04:09 +07:00
be5e8950c1 update limit go 2023-05-02 09:03:30 +07:00
Linksehat Staging Server
aefddcbff2 build dashboard fronted & config wkhtmltopdf 2023-04-28 16:16:12 +07:00
5333a65495 Merge branch 'staging' 2023-04-28 14:24:01 +07:00
91be43263a add image di log 2023-04-28 14:23:09 +07:00
947952340d Merge branch 'staging' 2023-04-28 11:04:12 +07:00
affb54b62d update deskripsi 2023-04-28 11:01:56 +07:00
67cd7cdce0 Merge branch 'staging' 2023-04-28 10:08:59 +07:00
27c1bfd6e3 update composer 2023-04-28 09:54:08 +07:00
5c6e7f3122 update 2023-04-26 15:15:19 +07:00
pajri
83e3ff6345 fix bugs Card Policy 2023-04-25 14:47:22 +07:00
3e2c9015ed update validasi 2023-04-20 08:52:59 +07:00
3a5fd67778 update import plans and benefit 2023-04-18 16:15:07 +07:00
0d73222a04 menambah validasi saat input corporate 2023-04-18 15:28:54 +07:00
85f7eeda18 add endpoint member alarm center 2023-04-13 14:17:26 +07:00
R
e91304bb4b Merge branch 'master' of itcorp.primaya.id:rajif/aso 2023-04-06 17:23:46 +07:00
R
da87a53623 Sementara Fix Filter Date 2023-04-06 17:23:25 +07:00
Fajar
70a2cbff9e Merge remote-tracking branch 'origin/master' into feature/client-portal 2023-04-06 15:31:34 +07:00
Fajar
85039893a8 Change Permission & WIP Dashboard Client Portal 2023-04-06 15:30:22 +07:00
R
7d198583a4 Fix Commision 2023-04-06 07:32:47 +07:00
R
3ff0cc1b29 Fix Komisi 2023-04-06 06:49:04 +07:00
R
97486da90f Fix Komisi 2023-04-06 06:25:52 +07:00
R
53075d0ce8 Add Accounting dummy password 2023-04-06 05:06:35 +07:00
R
a2cbc0a270 Merge branch 'master' of itcorp.primaya.id:rajif/aso 2023-04-06 05:04:18 +07:00
R
cca2310f54 [WIP] Add Linksehat Payment Report 2023-04-06 05:03:38 +07:00
R
d54288106b Remove Unused Files 2023-04-04 16:41:59 +07:00
Fajar
4a7c3ebdda [WIP] Claim Report & Dashboard 2023-03-25 16:15:26 +07:00
Fajar
59e7394d13 Merge branch 'feature/client-portal-dashboard' into staging 2023-03-24 15:25:05 +07:00
Fajar
127cdf8708 fixing table filter and search on dashboard 2023-03-24 15:23:41 +07:00
R
c2d084b4ea Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-03-24 14:41:29 +07:00
R
7b9a341ccd [WIP] Claim Encounters 2023-03-24 14:41:02 +07:00
Fajar
606b3c871a refactoring member model 2023-03-24 10:33:59 +07:00
Fajar
5fd33b3784 Merge branch 'feature/client-portal-claim-reports' into staging 2023-03-24 09:23:27 +07:00
Fajar
588b66c050 Merge branch 'feature/client-portal-dashboard' into staging 2023-03-24 09:22:32 +07:00
Fajar
86bb5860f3 create table for claim report from component 2023-03-24 09:20:03 +07:00
Fajar
677a349d4c remove old table dashboard 2023-03-24 09:15:37 +07:00
Fajar
3c5f06ef26 create table component & connect api for dashboard 2023-03-24 09:14:49 +07:00
Fajar
d5dfc7d36c update package and install pusher-js 2023-03-24 09:11:14 +07:00
R
229908e492 [WIP] Encounter 2023-03-16 14:27:53 +07:00
R
f65b28107c [WIP] Encounter 2023-03-16 14:27:25 +07:00
R
e06447bf00 [WIP] Add Diagnosa 2023-03-14 18:19:57 +07:00
R
c35442e652 Add Remove User Insurance 2023-03-12 18:50:07 +07:00
R
26290912ef [WIP] Hotfix Claim Coverage Limit 2023-03-12 14:25:56 +07:00
R
53b35e86c2 [WIP] Copy Claims Pages from Dashboard 2023-03-08 03:13:13 +07:00
R
254420bdae [Hotfix] Date Parsing 2023-03-08 02:23:57 +07:00
R
8c86794340 [Hotfix] Handle undefined relation 2023-03-08 02:22:41 +07:00
R
2b1f5c97df [Hotfix] Final LOG Gender 2023-03-08 02:19:59 +07:00
R
b587178c85 [WIP] Update Dashboard Claim Final LOG 2023-03-08 02:02:15 +07:00
R
ed96878dda [WIP] Update Show Hide Button 2023-03-06 02:22:11 +07:00
R
35119ee8ec [WIP] Update Claim 2023-03-06 02:10:08 +07:00
R
91ba718a50 [WIP] Update 2023-03-03 08:44:08 +07:00
R
9e322c4ee5 Change LOG Detail Benefit 2023-03-01 14:50:07 +07:00
R
5741789ddb Change LOG Detail Benefit 2023-03-01 14:48:51 +07:00
R
d0ee09a6e4 [Hotfix] Create Claim 2023-03-01 12:16:27 +07:00
R
89cd2a9d37 [WIP] A 2023-03-01 12:07:03 +07:00
R
ce0fde18dc Ingest Providers 2023-03-01 12:04:25 +07:00
R
acf9fa348e Change Benefit Display 2023-02-24 11:59:22 +07:00
R
74dd65efde Fix Wrong Loading 2023-02-24 10:56:05 +07:00
R
edc5ba9822 Change 999999999 to As Charge 2023-02-24 10:52:01 +07:00
R
8902718523 Add Dummy Notification Data 2023-02-24 10:45:03 +07:00
R
1c4f03ea83 Separate Invoice Upload 2023-02-24 09:47:35 +07:00
R
627904abba Update Show Claim Request 2023-02-24 09:40:37 +07:00
R
bd3f53b596 Fix Upload Files 2023-02-23 16:18:44 +07:00
R
69919878fa Fix Claim Request Null 2023-02-23 10:13:16 +07:00
R
f3bdf12bc4 Merge branch 'staging' of itcorp.primaya.id:rajif/aso into staging 2023-02-23 09:42:05 +07:00
R
eb1211cde7 Add Plan Limit & Usage 2023-02-23 09:41:58 +07:00
Linksehat Staging Server
b8ed27f2ff [Server Build] Rebuild Dashboard Staging 2023-02-22 08:51:59 +00:00
R
74cfcfa16b Ignore Build Folder 2023-02-22 13:36:15 +07:00
R
9f95e89a9a Merge branch 'feature/aso-digital-card' into staging 2023-02-22 13:21:50 +07:00
R
e51068b0a6 Fix Generate LOG 2023-02-22 12:30:02 +07:00
R
5cd23ff343 [Build] Dashboard Staging 2023-02-21 17:07:28 +07:00
R
615330bb46 Merge branch 'feature/generate-log' into staging 2023-02-21 17:02:53 +07:00
R
bcf6662db6 Update Generate Log 2023-02-21 17:01:57 +07:00
R
be43f8a4a4 Merge branch 'feature/aso-digital-card' into staging 2023-02-20 15:03:14 +07:00
R
dba421ad0b Update Digital Card Get Member Detail 2023-02-20 15:03:05 +07:00
R
c3a78f8a40 [Build] Dashboard Staging 2023-02-17 14:39:12 +07:00
R
6c6a7c3919 Merge branch 'feature/aso-digital-card' into staging 2023-02-17 14:31:02 +07:00
R
5c71b556a0 Update Linking With ASO 2023-02-17 14:29:50 +07:00
R
63c53d18d1 [Build] Staging Dashboard & Hospital Portal 2023-02-15 12:54:43 +07:00
R
a5db01bd25 Fix Download LOG 2023-02-15 12:50:46 +07:00
R
5d4033a9ca Display Uploaded Files 2023-02-15 12:30:35 +07:00
R
912edcdae7 [Build] Dashboard Production 2023-02-15 10:47:39 +07:00
R
5a7695b404 Add Appointment Type 2023-02-15 10:46:37 +07:00
R
5f05f191c6 [Build] Dashboard Prod 2023-02-15 10:14:20 +07:00
R
46af57b17c Show additional patient information in Dashboard Appointment 2023-02-15 10:13:07 +07:00
R
016bd3f605 [Hotfix] No PaymentDetail 2023-02-15 10:02:49 +07:00
R
093f8160d2 [Build] Additional Information 2023-02-15 10:00:53 +07:00
R
d8f493103c Add Additional Information 2023-02-15 09:57:00 +07:00
R
7f77deb09e Order Appointment & Livechat by newset 2023-02-15 09:10:22 +07:00
R
d38bc8dbfc [Build] Dashboard 2023-02-15 09:07:33 +07:00
R
b225084991 Update OLDLMS Appointment & Livechat Status 2023-02-15 09:03:13 +07:00
R
d8a98f4648 Merge remote-tracking branch 'origin/feature/appointment' 2023-02-15 08:08:51 +07:00
R
27523b8cce [WIP] Fix Upload Document from Hospital Portal 2023-02-15 08:00:14 +07:00
R
f6117743ad Fix Filter 2023-02-14 16:32:38 +07:00
R
8c97df9fc4 Remove Dummy Notifications 2023-02-14 15:31:57 +07:00
R
4f2bb19d8a [Build] Dashboard & Hospital Portal 2023-02-14 13:48:59 +07:00
R
13764a3766 [Build] Staging - Hospital Portal 2023-02-14 13:31:49 +07:00
R
ed273fdafa Merge branch 'feature/hospital-portal' 2023-02-14 13:09:14 +07:00
R
d706bf0623 [WIP] Add Approve Button 2023-02-14 13:07:17 +07:00
R
13542cd3c0 [WIP] Add Claim Request 2023-02-14 12:39:51 +07:00
pajri
f309f4039c list dan show appointment 2023-02-10 16:55:24 +07:00
pajri
387658a992 CRUD Doctor Hospital 2023-02-09 13:15:45 +07:00
R
6491f4d3e3 Add corporate Manager soft delete 2023-02-04 08:48:52 +07:00
R
5028b2d82b Fix Division by Zero 2023-02-04 08:46:44 +07:00
R
5d56434aa2 [Build] Client Portal 2023-02-04 08:38:46 +07:00
R
8e05280b7d Fix Name & User Avatar 2023-02-04 08:36:59 +07:00
R
e3de0a3c04 Hide Burger 2023-02-04 08:14:51 +07:00
R
c3a425c93d Fix Error on opening Add Claim Modal 2023-02-04 08:12:53 +07:00
R
431070efc3 Fix OTP Client Portal to 4444 2023-02-04 08:05:03 +07:00
R
e8c3decf85 Change Title 2023-02-01 20:27:53 +07:00
R
99c488baf3 Update Guaranted Letter 2023-02-01 20:21:03 +07:00
R
0b50e4c980 Update Guaranted Letter Styling 2023-02-01 20:17:32 +07:00
R
ba310a21c1 [Build] Both 2023-02-01 19:39:33 +07:00
R
5a0136acf8 Fix Download Blob Pdf 2023-02-01 19:35:30 +07:00
R
75c9781a22 [Build] Staging 2023-02-01 19:20:09 +07:00
R
2a1f0c854a [Build] Production 2023-02-01 19:16:50 +07:00
R
f0c787fede Add Download LOG 2023-02-01 19:15:31 +07:00
pajri
a7e688a52c hospital portal 2023-02-01 16:22:03 +07:00
R
8d5f4bb0bd Fix Import Benefit selecting wrong plan from another corporate 2023-02-01 01:37:53 +07:00
R
248047006e [Build] Staging 2023-02-01 01:16:44 +07:00
R
2c535b4021 [Build] Production 2023-02-01 00:56:17 +07:00
R
59dd63a78f Add name,dob linking tools 2023-02-01 00:51:14 +07:00
R
21282be7b3 Merge remote-tracking branch 'origin/feature/prices' 2023-02-01 00:42:44 +07:00
pajri
8cbfb1929b update csv 2023-02-01 11:52:19 +07:00
R
b8152e6b3f Fix Date Time Write 2023-01-30 12:40:04 +07:00
R
cfbe108629 Remove error sting 2023-01-30 12:20:14 +07:00
R
a8821dfb3c Fix Seeder 2023-01-30 12:08:49 +07:00
pajri
1ce2655b65 update schedule dokter 2023-01-28 09:44:14 +07:00
pajri
335e24b17c add biaya admin 2023-01-27 13:26:42 +07:00
pajri
4776eb5b0a seeder prices jadwal dokter 2023-01-27 09:52:31 +07:00
R
17daf20167 Add MCU 2023-01-26 14:51:32 +07:00
R
18ace75fc7 Add OLDLMS .env.example 2023-01-26 07:35:08 +07:00
R
ad743de98d Fix Bug Member Import 2023-01-19 15:09:32 +07:00
R
96a40842bd [Build] Import Loading Button 2023-01-19 14:43:16 +07:00
R
137fd07a28 Add Loading Button when Import 2023-01-19 14:41:56 +07:00
R
21dc0b1fc1 [Build] Frontend Dashboard 2023-01-19 10:15:55 +07:00
R
f56361de62 [Build] Frontend Dashboard 2023-01-19 10:15:00 +07:00
R
85f319878a Fix Regex Kode Corporate 2023-01-19 10:09:53 +07:00
R
23436164c2 Fix Corporate Create & Update Validation remove allow spaces 2023-01-17 12:40:15 +07:00
R
b19e0876e5 Change Specialities Button 2023-01-15 12:19:31 +07:00
R
704c5ecc44 [Bug Fix] Update Validation : Is there laravel validation update ? 2023-01-15 12:07:44 +07:00
R
9087580138 Add File Import Example Download 2023-01-15 11:28:07 +07:00
R
7ff199a3c1 [Fix] Member Benefit Specific 2023-01-13 14:48:15 +07:00
R
08a2502fb1 Enable Claim Softdeletes 2023-01-13 12:19:00 +07:00
R
65c9153fee [Build] Frontend 2023-01-13 12:14:00 +07:00
R
775f471a07 [WIP] Update Postponed 2023-01-13 12:08:57 +07:00
R
f09eaef5ad [Fix] Display Claim Postponed 2023-01-13 11:50:31 +07:00
R
e116fb814a [WIP] Fix Medicine 2023-01-13 08:19:43 +07:00
R
2f10f913c0 [WIP] Change Check Coverage Appointment 2023-01-13 00:43:58 +07:00
R
3a2dd84500 Fix Breadcrumbs Links 2023-01-12 15:10:59 +07:00
R
7d1872ef1e [Build] Update 2023-01-11 14:49:16 +07:00
R
552a2367f5 [WIP] Cashless 2023-01-11 14:29:02 +07:00
R
804ac883fa [WIP] ASO Payment 2023-01-05 18:28:45 +07:00
pajri
0fdad5a6c2 rubah tampilan menu profile 2022-12-29 11:52:09 +07:00
pajri
40ad4a22c7 forget password 2022-12-29 11:38:55 +07:00
R
0781e1ea00 [WIP] Move Listener to Boot 2022-12-29 09:56:03 +07:00
pajri
cb834d10bb WIP email notification 2022-12-29 09:22:28 +07:00
pajri
77f67fca1e Profile Admin 2022-12-28 17:09:35 +07:00
pajri
1884d32c4b delete diagnosis exclusion 2022-12-28 10:42:21 +07:00
pajri
55ae0efc66 add exclusion diagnosis done 2022-12-27 15:55:21 +07:00
pajri
9400145990 form exclusion specialities done 2022-12-24 15:10:13 +07:00
pajri
e15dda0955 bugs checked, exclusin age, masih ada bugs value 2022-12-23 17:16:31 +07:00
pajri
3c49b98721 Merge branch 'master' into pajri 2022-12-23 14:12:44 +07:00
R
9fe12b5948 add Corporate Context Provider 2022-12-23 11:53:27 +07:00
pajri
2321e708c5 add config msc (belum kelar) 2022-12-22 19:13:24 +07:00
pajri
b1c908a6f6 upload foto, dan bugs import 2022-12-21 17:22:45 +07:00
pajri
88ad144921 table member dan table benefit 2022-12-20 17:48:28 +07:00
pajri
da14589328 perbaili list table corporate, dan table plan 2022-12-19 18:00:24 +07:00
pajri
2bf3ae7b2b Merge branch 'master' into pajri 2022-12-19 11:21:48 +07:00
R
7c4886d57f Change Benefit Table Structure 2022-12-19 09:33:34 +07:00
pajri
0d6c2ab30b Data Docter dan Hospital dnegan Filter di dashboard 2022-12-16 15:57:40 +07:00
pajri
1857653ce0 list dokter, list RS 2022-12-15 17:10:25 +07:00
R
1baaf80b2b Calc Limit 2022-12-14 13:16:01 +07:00
R
74aa5f0486 Auto Assign to manager one 2022-12-14 13:03:26 +07:00
R
ad46f5a2f0 ReBuild Client Portal 2022-12-14 12:15:42 +07:00
R
9ae069718e Fix Benefit Import 2022-12-14 12:13:54 +07:00
R
ad090112eb Add Default Service when create corporate 2022-12-14 09:45:58 +07:00
R
96dc557a59 Release Dashboard 2022-12-13 13:34:27 +07:00
R
c67026413f Merge branch 'master' of http://itcorp.primaya.id:3000/rajif/aso 2022-12-13 12:49:46 +07:00
R
9d261d4dfc Merge branch 'master' of http://itcorp.primaya.id:3000/rajif/aso 2022-12-13 12:49:27 +07:00
R
37b1b24551 Merge branch 'master' of http://itcorp.primaya.id:3000/rajif/aso 2022-12-13 12:47:26 +07:00
R
6a4447a549 [WIP] Claims 2022-12-13 12:47:12 +07:00
Muhammad Fajar
6d6439cc94 Merge remote-tracking branch 'origin/master' into mhmfajar 2022-12-12 08:46:02 +07:00
Muhammad Fajar
a3760b8757 fixing auth, switching corporate, table member 2022-12-12 08:41:53 +07:00
R
23468df422 Disable Division Creation 2022-12-08 14:44:48 +07:00
R
5100a72bbd Fix API Check Membership 2022-12-08 14:34:24 +07:00
R
cd77ed8c3b Corporate Division 2022-12-08 14:17:01 +07:00
R
ab7f19dc17 Fix Duplicate Division 2022-12-08 14:14:46 +07:00
R
3d9dab502b Merge remote-tracking branch 'origin/mhmfajar' 2022-12-08 12:44:47 +07:00
R
83408f4431 Merge branch 'master' of http://itcorp.primaya.id:3000/rajif/aso 2022-12-08 12:27:25 +07:00
R
32efc28043 [WIP] Claim 2022-12-08 12:26:29 +07:00
Muhammad Fajar
f164317b58 remove unused 2022-12-08 09:00:05 +07:00
Muhammad Fajar
7a421e0619 remove import & create button dashboard 2022-12-08 08:59:42 +07:00
Muhammad Fajar
9526092860 Merge remote-tracking branch 'origin/mhmfajar' 2022-12-08 08:53:58 +07:00
Muhammad Fajar
0c9362334c add switch corporate & fix table & fix policy 2022-12-08 08:51:25 +07:00
R
7d8a60f207 [WIP] Claims 2022-12-07 17:29:48 +07:00
R
aac9fcf58b [WIP] Claims 2022-12-07 12:00:58 +07:00
2440 changed files with 242612 additions and 45743 deletions

0
..env.swp Normal file
View File

0
.editorconfig Executable file → Normal file
View File

88
.env-example Normal file
View File

@@ -0,0 +1,88 @@
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

View File

@@ -1,52 +0,0 @@
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=
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}"

0
.gitattributes vendored Executable file → Normal file
View File

18
.gitignore vendored Executable file → Normal file
View File

@@ -12,3 +12,21 @@ npm-debug.log
yarn-error.log
/.idea
/.vscode
/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.*

0
.styleci.yml Executable file → Normal file
View File

182
AGENTS.md Normal file
View File

@@ -0,0 +1,182 @@
# 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:
- ...
```

View File

@@ -8,14 +8,17 @@ 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'
'phoneOrEmail' => 'required',
'password' => 'required'
]);
$user = User::query()
@@ -32,28 +35,60 @@ class AuthController extends Controller
return Helper::responseJson(statusCode: Response::HTTP_NOT_FOUND, message: $message);
}
if (filter_var($request->phoneOrEmail, FILTER_VALIDATE_EMAIL)) {
User::query()->find($user->id)->update([
'email' => $request->phoneOrEmail,
'otp' => rand(1000, 9999),
'otp_created_at' => now()
]);
} else {
User::query()->find($user->id)->update([
'phone' => $request->phoneOrEmail,
'otp' => rand(1000, 9999),
'otp_created_at' => now()
]);
// $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);
}
// TODO Send the OTP
if (filter_var($request->phoneOrEmail, FILTER_VALIDATE_EMAIL)) {
// Send Email
} else {
// Send Whatsapp
}
return Helper::responseJson(
data: [
'token' => $user->createToken('app')->plainTextToken,
'user' => $user,
],
message: 'Selamat Datang'
);
return Helper::responseJson(message: 'OTP Terkirim');
}
public function validateOtp(Request $request)

View File

@@ -0,0 +1,286 @@
<?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)
{
//
}
}

View File

@@ -0,0 +1,640 @@
<?php
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
{
public function __construct(public ClaimService $claimService)
{
}
public function status($corporate_id)
{
$claims = $this->claimService->getCountClaimRequestPerStatus($corporate_id);
// dd($claims);
return Helper::responseJson([
'count_requested' => 0,
'count_approval' => 0,
'count_disbrushment' => 0,
'count_rejected' => 0,
]);
}
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index(Request $request, $corporate_id)
{
$claims = Claim::query()
->when($request->search ?? null, function ($query, $search) {
$query->where('code', 'LIKE', '%' . $search . '%');
})
->with([
'member',
'diagnoses' => function ($diagnosis) {
return $diagnosis->where('type', 'primary');
},
'diagnoses.icd',
'plan',
'benefit',
'claimRequest',
'claimRequest.service'
])
->paginate(10);
return Helper::responseJson($claims);
}
/**
* 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)
{
$claim = Claim::query()
->with([
'member',
'member.currentPlan',
'member.currentPlan.benefits',
'member.currentCorporate',
'member.currentPolicy',
'diagnosis',
'diagnoses',
'benefit',
'files',
'claimRequest',
'claimRequest.files',
'items',
'items.claim_itemable',
])
->findOrFail($id);
return Helper::responseJson(ClaimShowResource::make($claim));
}
/**
* 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 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')
]);
}
}

View File

@@ -0,0 +1,313 @@
<?php
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;
class ClaimReportController extends Controller
{
public function claimStatus($corporateId)
{
$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)
{
$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)
{
$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)
{
$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)
{
$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));
}
}

View File

@@ -0,0 +1,259 @@
<?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);
}
}

View File

@@ -0,0 +1,88 @@
<?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;
}
}

View File

@@ -9,23 +9,19 @@ use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\Rule;
class DivisionController extends Controller
class CorporateDivisionController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index(Request $request)
public function index(Request $request, $corporate_id)
{
$user = Auth::user();
$corporate = $user->managedCorporates()->where('active', 1)->first();
$benefits = CorporateDivision::query()
->where('corporate_id', $corporate->id)
$division = CorporateDivision::query()
->where('corporate_id', $corporate_id)
->get(['id', 'name']);
return $benefits;
return response()->json($division);
}
/**

View File

@@ -7,7 +7,7 @@ use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Auth;
class CorporateController extends Controller
class CorporateManageController extends Controller
{
/**
* Display a listing of the resource.
@@ -18,8 +18,6 @@ class CorporateController extends Controller
$userLogin = Auth::user();
$corporate = $userLogin->managedCorporates()->select(['corporates.id', 'corporates.name'])->get();
// corporate policy, all member list, notification
return response()->json($corporate);
}
@@ -39,7 +37,10 @@ class CorporateController extends Controller
*/
public function show($corporate_id)
{
//
$userLogin = Auth::user();
$corporate = $userLogin->managedCorporates()->where('corporates.id', $corporate_id)->first();
return response()->json($corporate);
}
/**

View File

@@ -0,0 +1,449 @@
<?php
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)
{
$this->memberEnrollmentService = $memberEnrollmentService;
}
/**
* Display a listing of the resource.
* @return Renderable
*/
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)));
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');
}
}

View File

@@ -2,37 +2,28 @@
namespace Modules\Client\Http\Controllers\Api;
use App\Helpers\Helper;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Auth;
use Modules\Client\Transformers\DashboardResources;
use Modules\Client\Transformers\Dashboard\LimitResources;
class DashboardController extends Controller
class CorporatePolicyController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index(Request $request, $corporate_id)
public function index($corporate_id)
{
$user = Auth::user();
$currentCorporate = $user->managedCorporates()
->with(['currentPolicy', 'employees'])
$currentCorporate = Auth::user()->managedCorporates()
->with(['currentPolicy'])
->find($corporate_id);
$data = DashboardResources::make($currentCorporate);
return response()->json($data);
}
$data = LimitResources::make($currentCorporate);
/**
* Show the form for creating a new resource.
* @return Renderable
*/
public function create()
{
return view('client::create');
return Helper::responseJson($data);
}
/**

View File

@@ -0,0 +1,905 @@
<?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);
}
}
}

View File

@@ -0,0 +1,68 @@
<?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);
}
}
}

View File

@@ -2,7 +2,6 @@
namespace Modules\Client\Http\Controllers\Api;
use App\Helpers\Helper;
use App\Models\Member;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
@@ -16,27 +15,13 @@ class MemberController extends Controller
*/
public function index(Request $request)
{
$user = auth()->user();
$corporate = $user->managedCorporates()->first();
// $plans =
$members = Member::query()
->whereHas('employeds', function($corporateEmployee) use ($corporate) {
$corporateEmployee->where('corporate_id', $corporate->id);
});
if ($request->has('search')) {
$members
->where('member_id', 'like', "%" . $request->search . "%")
->orWhere('payor_id', 'like', "%" . $request->search . "%")
->orWhere('name', 'like', "%" . $request->search . "%");
}
$members = $members->paginate();
return response()->json([
'members' => Helper::paginateResources($members)
]);
return Member::query()
->when($request->search, function ($query, $search) {
return $query->where('name', 'LIKE', '%' . $search . '%')
->orWhere('member_id', 'LIKE', '%' . $search . '%');
})
->with('currentPlan', 'currentCorporate')
->paginate();
}
/**
@@ -45,7 +30,7 @@ class MemberController extends Controller
*/
public function create()
{
return view('client::create');
return view('internal::create');
}
/**
@@ -65,7 +50,7 @@ class MemberController extends Controller
*/
public function show($id)
{
return view('client::show');
return view('internal::show');
}
/**
@@ -75,7 +60,7 @@ class MemberController extends Controller
*/
public function edit($id)
{
return view('client::edit');
return view('internal::edit');
}
/**
@@ -98,4 +83,11 @@ class MemberController extends Controller
{
//
}
public function benefits($member_id)
{
$member = Member::findOrFail($member_id);
return response()->json($member->currentPlan->benefits()->select(['description', 'code', 'id'])->get());
}
}

View File

@@ -0,0 +1,102 @@
<?php
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;
use Illuminate\Support\Facades\Auth;
use Modules\Client\Transformers\Dashboard\TopUpLimitResources;
class TopUpController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index($corporate_id)
{
$data = Auth::user()
->managedCorporates()
->with(['currentPolicy'])
->withCount(['employees', 'claims' => function ($query) {
$query->where('claims.status', 'paid');
}])
->find($corporate_id);
return Helper::responseJson(TopUpLimitResources::make($data));
}
/**
* Store a newly created resource in storage.
* @param Request $request
* @return Renderable
*/
public function store(Request $request, $corporate_id)
{
$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);
}
/**
* Show the specified resource.
* @param int $id
* @return Renderable
*/
public function show($id)
{
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
* @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)
{
//
}
}

View File

@@ -1,11 +1,29 @@
<?php
use Modules\Client\Http\Controllers\Api\AuthController;
use Modules\Client\Http\Controllers\Api\CorporateController;
use Modules\Client\Http\Controllers\Api\DashboardController;
use Modules\Client\Http\Controllers\Api\DivisionController;
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;
/*
|--------------------------------------------------------------------------
@@ -20,27 +38,100 @@ use Modules\Client\Http\Controllers\Api\UserController;
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');
});
Route::middleware('auth:sanctum')->group(function () {
Route::post('logout', [AuthController::class, 'logout'])->name('logout');
Route::get('user', [UserController::class, 'index']);
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::prefix('{corporate_id}')->group(function() {
Route::get('asd', function ($corporate_id) {
return $corporate_id;
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('dashboard', [DashboardController::class, 'index']);
Route::get('corporate', [CorporateController::class, 'index']);
Route::get('corporate/{corporate_id}', [CorporateController::class, 'show']);
Route::get('division', [DivisionController::class, 'index']);
Route::get('members', [MemberController::class, 'index']);
});
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']);
});
});

View File

@@ -0,0 +1,54 @@
<?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
];
}
}

View File

@@ -0,0 +1,264 @@
<?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
];
}
}

View File

@@ -0,0 +1,24 @@
<?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))
];
}
}

View File

@@ -0,0 +1,29 @@
<?php
namespace Modules\Client\Transformers\ClaimReport;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\Facades\Crypt;
class MemberResources extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
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,
];
}
}

View File

@@ -0,0 +1,31 @@
<?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'))
]
];
}
}

View File

@@ -0,0 +1,45 @@
<?php
namespace Modules\Client\Transformers;
use Illuminate\Http\Resources\Json\JsonResource;
class ClaimShowResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
$data = parent::toArray($request);
// $data['']
$data['benefit_items'] = $this->items
->filter(function ($item) {
return $item->claim_itemable_type == Benefit::class;
})
->map(function ($item) {
$itemData = $item->claim_itemable->toArray();
$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'];
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();
return $data;
}
}

View File

@@ -1,11 +1,10 @@
<?php
namespace Modules\Client\Transformers;
namespace Modules\Client\Transformers\Dashboard;
use App\Helpers\Helper;
use Illuminate\Http\Resources\Json\JsonResource;
class DashboardResources extends JsonResource
class LimitResources extends JsonResource
{
/**
* Transform the resource into an array.
@@ -22,17 +21,15 @@ class DashboardResources extends JsonResource
$lockPercentage = (int)$this->currentPolicy->minimal_stop_service_percentage;
return [
'policy' => [
'myLimit' => [
'balance' => $myLimitBalance,
'total' => $myLimitTotal,
'percentage' => ($myLimitBalance / $myLimitTotal) * 100,
],
'lockLimit' => [
'balance' => $lockBalance,
'percentage' => $lockPercentage
]
'myLimit' => [
'balance' => $myLimitBalance,
'total' => $myLimitTotal,
'percentage' => $myLimitTotal ? round(($myLimitBalance / $myLimitTotal) * 100, 2) : 0,
],
'lockLimit' => [
'balance' => $lockBalance,
'percentage' => $lockPercentage
]
];
}
}

View File

@@ -0,0 +1,28 @@
<?php
namespace Modules\Client\Transformers\Dashboard;
use Illuminate\Http\Resources\Json\JsonResource;
class MemberAlarmCenterResources 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,
'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,
'status' => $this->active,
];
}
}

View File

@@ -0,0 +1,28 @@
<?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,
];
}
}

View File

@@ -0,0 +1,32 @@
<?php
namespace Modules\Client\Transformers\Dashboard;
use Illuminate\Http\Resources\Json\JsonResource;
class MemberResources extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
*/
public function toArray($request)
{
// dd($this->currentPlans);
return [
'id' => $this->id,
'memberId' => $this->member_id,
'fullName' => $this->full_name,
'division' => $this->division_name ?? '',
'limit' => [
'current' => $this->claims_sum_total_claim ?? 0,
'total' => $this->currentPlan->limit_rules ?? 0,
'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,
];
}
}

View File

@@ -0,0 +1,33 @@
<?php
namespace Modules\Client\Transformers\Dashboard;
use Illuminate\Http\Resources\Json\JsonResource;
class TopUpLimitResources extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
$myLimitBalance = (int)$this->currentPolicy->limit_balance;
$myLimitTotal = (int)$this->currentPolicy->total_premi;
return [
'companyName' => $this->name,
'policyNumber' => $this->currentPolicy->code,
'totalMembers' => $this->employees_count,
'totalCases' => $this->claims_count,
'myLimit' => [
'balance' => $myLimitBalance,
'total' => $myLimitTotal,
'percentage' => $myLimitTotal ? round(($myLimitBalance / $myLimitTotal) * 100, 2) : 0,
],
'maxTopUp' => ($myLimitTotal - $myLimitBalance)
];
}
}

View File

@@ -0,0 +1,92 @@
<?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;
}
}

View File

@@ -0,0 +1,46 @@
<?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()
];
}
}

View File

@@ -1,25 +0,0 @@
<?php
namespace Modules\Client\Transformers;
use Illuminate\Http\Resources\Json\JsonResource;
class MemberResources 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 [
'memberId' => $this->member_id,
'full_name' => $this->full_name,
'division' => $this->division->name,
'employeeLimit' => '',
'status' => $this->active
];
}
}

View File

View File

@@ -0,0 +1,5 @@
<?php
return [
'name' => 'HospitalPortal'
];

View File

View File

@@ -0,0 +1,21 @@
<?php
namespace Modules\HospitalPortal\Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class HospitalPortalDatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Model::unguard();
// $this->call("OthersTableSeeder");
}
}

View File

View File

@@ -0,0 +1,21 @@
<?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);
}
}

View File

@@ -0,0 +1,93 @@
<?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),
];
}
}

View File

@@ -0,0 +1,295 @@
<?php
namespace Modules\HospitalPortal\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\User;
use Crypt;
use Error;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
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(), [
'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);
}
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);
}
}
public function logout(Request $request)
{
$request->user()->tokens()->delete();
return ApiResponse::apiResponse('Success', [], trans('Message.logout'), 200);
}
public function resetPassword(Request $request)
{
$user = Auth::user();
$request->validate([
'old_password' => 'required',
'new_password' => 'required',
'confirm_new_password' => 'required'
]);
if (!Hash::check($request['old_password'], $user->password)) {
return response(['Message' => 'Password Salah'], 403);
}
if ($request["new_password"] != $request["confirm_new_password"]) {
return response([
'Message' => "Password Tidak Sama"
]);
}
$user->update([
'password' => Hash::make($request->confirm_new_password),
]);
return response()->json($user);
}
public function verifyEmail(Request $request)
{
$data = [
'email' => $request->email,
];
$validator = Validator::make($request->all(), [
'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')
->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);
}
}
}
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']),
]);
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')
->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);
}
}
}
}

View File

@@ -0,0 +1,501 @@
<?php
namespace Modules\HospitalPortal\Http\Controllers\Api;
use App\Events\ClaimRequested;
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;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
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
{
/**
* Display a listing of the resource.
* @return Renderable
*/
private static $code_prefix = 'CLAIM';
public function index(request $request)
{
$claimRequests = ClaimRequest::query()
->when($request->search, function ($q, $search) {
$q->where('code', 'LIKE', "%".$search."%");
})
->when($request->orderBy, function ($q, $orderBy) use ($request) {
if (in_array($orderBy, ['submission_date', 'code'])) {
$q->orderBy($orderBy, $request->order);
}
})
->when($request->status, function($q, $status) {
$q->where('status', $status);
})
->with(['member'])
->orderBy('created_at', 'DESC')
->paginate();
return Helper::responseJson($claimRequests);
}
/**
* 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)
{
$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',
'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'])
]);
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);
}
}
else
{
return ApiResponse::apiResponse("Error", $data, trans('Message.already_exists'), 409);
}
}
}
/**
* Show the specified resource.
* @param int $id
* @return Renderable
*/
public function show($id)
{
$claimRequest = ClaimRequest::findOrFail($id);
$claimRequest->load([
'histories' => function ($history) {
$history->latest();
},
'files',
]);
return Helper::responseJson(data: ClaimRequestShowResource::make($claimRequest));
}
/**
* 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)
{
//
}
/**
* Remove the specified resource from storage.
* @param int $id
* @return Renderable
*/
public function destroy($id)
{
//
}
public function generateLog($claim_request_id)
{
$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'
]);
$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');
}
}

View File

@@ -0,0 +1,229 @@
<?php
namespace Modules\HospitalPortal\Http\Controllers\Api;
use App\Helpers\Helper;
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
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function search(Request $request)
{
$data = [
'no_polis' => $request->no_polis,
'birth_date' => $request->birth_date
];
$validator = Validator::make($request->all(), [
'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;
$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);
}
}
}
}

View File

@@ -0,0 +1,87 @@
<?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);
}
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,721 @@
<?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();
}
}

View File

@@ -0,0 +1,83 @@
<?php
namespace Modules\HospitalPortal\Http\Controllers;
use App\Helpers\Helper;
use App\Models\Claim;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
class ClaimController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index()
{
$claims = Claim::where('deleted_at', 'ASD')->paginate(5);
return Helper::responseJson($claims);
}
/**
* 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)
{
//
}
/**
* Remove the specified resource from storage.
* @param int $id
* @return Renderable
*/
public function destroy($id)
{
//
}
}

View File

@@ -0,0 +1,79 @@
<?php
namespace Modules\HospitalPortal\Http\Controllers;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
class HospitalPortalController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index()
{
return view('hospitalportal::index');
}
/**
* 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)
{
//
}
/**
* Remove the specified resource from storage.
* @param int $id
* @return Renderable
*/
public function destroy($id)
{
//
}
}

View File

@@ -0,0 +1,65 @@
<?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);
}
}

View File

@@ -0,0 +1,71 @@
<?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);
}
}

View File

View File

View File

@@ -0,0 +1,112 @@
<?php
namespace Modules\HospitalPortal\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Database\Eloquent\Factory;
class HospitalPortalServiceProvider extends ServiceProvider
{
/**
* @var string $moduleName
*/
protected $moduleName = 'HospitalPortal';
/**
* @var string $moduleNameLower
*/
protected $moduleNameLower = 'hospitalportal';
/**
* Boot the application events.
*
* @return void
*/
public function boot()
{
$this->registerTranslations();
$this->registerConfig();
$this->registerViews();
$this->loadMigrationsFrom(module_path($this->moduleName, 'Database/Migrations'));
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
$this->app->register(RouteServiceProvider::class);
}
/**
* Register config.
*
* @return void
*/
protected function registerConfig()
{
$this->publishes([
module_path($this->moduleName, 'Config/config.php') => config_path($this->moduleNameLower . '.php'),
], 'config');
$this->mergeConfigFrom(
module_path($this->moduleName, 'Config/config.php'), $this->moduleNameLower
);
}
/**
* Register views.
*
* @return void
*/
public function registerViews()
{
$viewPath = resource_path('views/modules/' . $this->moduleNameLower);
$sourcePath = module_path($this->moduleName, 'Resources/views');
$this->publishes([
$sourcePath => $viewPath
], ['views', $this->moduleNameLower . '-module-views']);
$this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), $this->moduleNameLower);
}
/**
* Register translations.
*
* @return void
*/
public function registerTranslations()
{
$langPath = resource_path('lang/modules/' . $this->moduleNameLower);
if (is_dir($langPath)) {
$this->loadTranslationsFrom($langPath, $this->moduleNameLower);
} else {
$this->loadTranslationsFrom(module_path($this->moduleName, 'Resources/lang'), $this->moduleNameLower);
}
}
/**
* Get the services provided by the provider.
*
* @return array
*/
public function provides()
{
return [];
}
private function getPublishableViewPaths(): array
{
$paths = [];
foreach (\Config::get('view.paths') as $path) {
if (is_dir($path . '/modules/' . $this->moduleNameLower)) {
$paths[] = $path . '/modules/' . $this->moduleNameLower;
}
}
return $paths;
}
}

View File

@@ -0,0 +1,69 @@
<?php
namespace Modules\HospitalPortal\Providers;
use Illuminate\Support\Facades\Route;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
class RouteServiceProvider extends ServiceProvider
{
/**
* The module namespace to assume when generating URLs to actions.
*
* @var string
*/
protected $moduleNamespace = 'Modules\HospitalPortal\Http\Controllers';
/**
* Called before routes are registered.
*
* Register any model bindings or pattern based filters.
*
* @return void
*/
public function boot()
{
parent::boot();
}
/**
* Define the routes for the application.
*
* @return void
*/
public function map()
{
$this->mapApiRoutes();
$this->mapWebRoutes();
}
/**
* Define the "web" routes for the application.
*
* These routes all receive session state, CSRF protection, etc.
*
* @return void
*/
protected function mapWebRoutes()
{
Route::middleware('web')
->namespace($this->moduleNamespace)
->group(module_path('HospitalPortal', '/Routes/web.php'));
}
/**
* Define the "api" routes for the application.
*
* These routes are typically stateless.
*
* @return void
*/
protected function mapApiRoutes()
{
Route::prefix('api')
->middleware('api')
->namespace($this->moduleNamespace)
->group(module_path('HospitalPortal', '/Routes/api.php'));
}
}

View File

View File

@@ -0,0 +1,9 @@
@extends('hospitalportal::layouts.master')
@section('content')
<h1>Hello World</h1>
<p>
This view is loaded from module: {!! config('hospitalportal.name') !!}
</p>
@endsection

View File

@@ -0,0 +1,19 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Module HospitalPortal</title>
{{-- Laravel Mix - CSS File --}}
{{-- <link rel="stylesheet" href="{{ mix('css/hospitalportal.css') }}"> --}}
</head>
<body>
@yield('content')
{{-- Laravel Mix - JS File --}}
{{-- <script src="{{ mix('js/hospitalportal.js') }}"></script> --}}
</body>
</html>

View File

View File

@@ -0,0 +1,138 @@
<?php
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\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;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| 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::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']);
});
});
});

View File

@@ -0,0 +1,17 @@
<?php
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::prefix('hospitalportal')->group(function() {
Route::get('/', 'HospitalPortalController@index');
Route::get('download-log/{id}', 'HospitalPortalController@downloadLog');
});

View File

View File

View File

@@ -0,0 +1,31 @@
<?php
namespace Modules\HospitalPortal\Transformers;
use Illuminate\Http\Resources\Json\JsonResource;
class ClaimRequestResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
$data = parent::toArray($request);
$historiesGroupByDate = $this->histories->mapToGroups(function($history) {
return [$history->created_at->format('Y-m-d') => $history];
});
$data['histories_by_date'] = [];
foreach ($historiesGroupByDate as $date => $histories) {
$data['histories_by_date'][] = [
'date' => $date,
'histories' => $histories
];
}
return $data; //parent::toArray($request);
}
}

View File

@@ -0,0 +1,38 @@
<?php
namespace Modules\HospitalPortal\Transformers;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\Str;
class ClaimRequestShowResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
$data = parent::toArray($request);
$historiesGroupByDate = $this->histories->mapToGroups(function($history) {
return [$history->created_at->format('Y-m-d') => $history];
});
$data['histories_by_date'] = [];
foreach ($historiesGroupByDate as $date => $histories) {
$data['histories_by_date'][] = [
'date' => $date,
'histories' => $histories
];
}
// Map Files by type
$filesGroupByType = $this->files->mapToGroups(function($file) {
return [Str::slug($file->type, '_') => $file];
});
$data['files_by_type'] = $filesGroupByType;
return $data;
}
}

View File

@@ -0,0 +1,23 @@
{
"name": "nwidart/hospitalportal",
"description": "",
"authors": [
{
"name": "Nicolas Widart",
"email": "n.widart@gmail.com"
}
],
"extra": {
"laravel": {
"providers": [],
"aliases": {
}
}
},
"autoload": {
"psr-4": {
"Modules\\HospitalPortal\\": ""
}
}
}

View File

@@ -0,0 +1,13 @@
{
"name": "HospitalPortal",
"alias": "hospitalportal",
"description": "",
"keywords": [],
"priority": 0,
"providers": [
"Modules\\HospitalPortal\\Providers\\HospitalPortalServiceProvider"
],
"aliases": {},
"files": [],
"requires": []
}

View File

@@ -0,0 +1,21 @@
{
"private": true,
"scripts": {
"dev": "npm run development",
"development": "mix",
"watch": "mix watch",
"watch-poll": "mix watch -- --watch-options-poll=1000",
"hot": "mix watch --hot",
"prod": "npm run production",
"production": "mix --production"
},
"devDependencies": {
"axios": "^0.21.4",
"dotenv": "^10.0.0",
"dotenv-expand": "^5.1.0",
"laravel-mix": "^6.0.31",
"laravel-mix-merge-manifest": "^2.0.0",
"lodash": "^4.17.21",
"postcss": "^8.3.7"
}
}

View File

@@ -0,0 +1,14 @@
const dotenvExpand = require('dotenv-expand');
dotenvExpand(require('dotenv').config({ path: '../../.env'/*, debug: true*/}));
const mix = require('laravel-mix');
require('laravel-mix-merge-manifest');
mix.setPublicPath('../../public').mergeManifest();
mix.js(__dirname + '/Resources/assets/js/app.js', 'js/hospitalportal.js')
.sass( __dirname + '/Resources/assets/sass/app.scss', 'css/hospitalportal.css');
if (mix.inProduction()) {
mix.version();
}

View File

@@ -0,0 +1,37 @@
<?php
namespace Modules\Internal\Emails;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class SendVerifyEmail extends Mailable
{
use Queueable, SerializesModels;
public $data;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($data)
{
$this->data = $data;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
$this->subject('Verify Email')
->markdown('verify_email');
return $this;
}
}

View File

@@ -0,0 +1,33 @@
<?php
namespace Modules\Internal\Events;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class ForgetPassword
{
use Dispatchable, SerializesModels;
public $data;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct($data)
{
$this->data = $data;
}
/**
* Get the channels the event should be broadcast on.
*
* @return array
*/
public function broadcastOn()
{
return new PrivateChannel('channel-name');
}
}

View File

@@ -0,0 +1,89 @@
<?php
namespace Modules\Internal\Http\Controllers\Api;
use App\Helpers\Helper;
use App\Models\OLDLMS\Appointment;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\Internal\Transformers\AppointmentResource;
class AppointmentController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index()
{
$appointments = Appointment::query()
->with('doctor.user', 'doctor.speciality', 'appointmentDetail', 'healthCare', 'user', 'user.detail')
->latest()
->paginate(15);
return response()->json(Helper::paginateResources(AppointmentResource::collection($appointments)));
}
/**
* 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)
{
$appointments = Appointment::query()
->with('doctor.user', 'doctor.speciality', 'appointmentDetail', 'healthCare')
->where('nID', $id)
->first();
return response()->json(new AppointmentResource($appointments));
}
/**
* 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)
{
//
}
}

View File

@@ -0,0 +1,91 @@
<?php
namespace Modules\Internal\Http\Controllers\Api;
use App\Helpers\Helper;
use App\Models\AuditTrail;
use App\Models\ExclusionRules;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\Internal\Transformers\AuditTrailResource;
class AuditTrailController extends Controller {
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index(Request $request, $id)
{
$audittrails = AuditTrail::query()
->where('model', '=', $request->model)
->where('model_id', '=', $id)
->latest()
->paginate(1000);
return response()->json(Helper::paginateResources(AuditTrailResource::collection($audittrails)));
}
/**
* 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)
{
$appointments = Appointment::query()
->with('doctor.user', 'doctor.speciality', 'appointmentDetail', 'healthCare')
->where('nID', $id)
->first();
return response()->json(new AppointmentResource($appointments));
}
/**
* 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)
{
//
}
}
?>

View File

@@ -4,23 +4,34 @@ namespace Modules\Internal\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\User;
use App\Models\Person;
use Crypt;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Mail;
use Modules\Internal\Emails\SendVerifyEmail;
use Modules\Internal\Events\ForgetPassword;
use App\Helpers\Helper;
use Validator;
class AuthController extends Controller
{
public function login(Request $request)
{
$request->validate([
'email' => 'required|email',
'email' => 'required',
'password' => 'required'
]);
$user = User::query()
->where('email', $request->email)
->where(function ($query) use ($request) {
$query->where('email', $request->email)
->orWhere('username', $request->email);
})
->first();
if (!$user) {
return response(['message' => 'User Tidak Ditemukan'], 404);
}
@@ -43,4 +54,124 @@ class AuthController extends Controller
return response(['message' => 'Berhasil Logout.']);
}
public function resetPassword(Request $request)
{
$user = Auth::user();
$request->validate([
'old_password' => 'required',
'new_password' => 'required',
'confirm_new_password' => 'required'
]);
if (!Hash::check($request['old_password'], $user->password)) {
return response(['message' => 'Password Salah'], 403);
}
if ($request["new_password"] != $request["confirm_new_password"]) {
return response([
'message' => "Password Tidak Sama"
]);
}
$user->update([
'password' => Hash::make($request->confirm_new_password),
]);
return response()->json($user);
}
public function verifyEmail(Request $request)
{
$request->validate([
'email' => 'required|email',
]);
$user = User::query()
->where('email', $request->email)
->first();
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)
{
$request->validate([
'new_password' => 'required',
'confirm_new_password' => 'required'
]);
$token = Crypt::decryptString($request->token);
$email = explode('|', $token)[0];
$user = User::query()
->where('email', $email)
->first();
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);
}
public function register(Request $request)
{
$validator = Validator::make($request->all(), [
'email' => 'required|email|unique:users,email',
'username' => 'required|unique:users,username',
'name' => 'required',
'password' => [
'required',
'min:5',
// 'regex:/.*[0-9].*/',
// 'regex:/.*[a-z].*/',
// 'regex:/.*[A-Z].*/',
]
], [
// 'password.regex' => "Password harus minimal 8 karakter, kombinasi huruf besar kecil dan angka"
])->validate();
try {
$user = User::create([
'email' => $request->email,
'username' => $request->username,
'password' => Hash::make($request->password),
]);
$person = Person::updateOrCreate(
[
'id' => $user->person_id
],
[
'name' => $request->name ?? null
]
);
$user->person_id = $person->id;
$user->save();
return response()->json($user);
} catch (\Exception $e) {
return response()->json([
'message' => 'Terjadi masalah ketika mendaftar'
]);
}
}
}

View File

@@ -3,6 +3,7 @@
namespace Modules\Internal\Http\Controllers\Api;
use App\Models\Benefit;
use App\Models\CorporateBenefit;
use App\Models\MemberBenefit;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
@@ -18,12 +19,13 @@ class BenefitController extends Controller
*/
public function index(Request $request, $corporate_id)
{
$benefits = Benefit::query()
->filter($request->all())
->where('corporate_id', $corporate_id)
->paginate()
->appends($request->all());
$benefits = CorporateBenefit::query()
->filter($request->all())
->where('corporate_id', $corporate_id)
->with('benefit', 'plan')
->paginate()
->appends($request->all());
return $benefits;
}
@@ -89,59 +91,59 @@ class BenefitController extends Controller
public function memberBenefitImport(Request $request, $corporate_id)
{
$request->validate([
'file' => 'required|file|mimes:xls,xlsx,csv,txt',
]);
$file_name = now()->getPreciseTimestamp(3).'-'.$request->file('file')->getClientOriginalName();
$file = $request->file('file')->storeAs('temp', $file_name);
// $request->validate([
// 'file' => 'required|file|mimes:xls,xlsx,csv,txt',
// ]);
// $file_name = now()->getPreciseTimestamp(3).'-'.$request->file('file')->getClientOriginalName();
// $file = $request->file('file')->storeAs('temp', $file_name);
$reader = ReaderEntityFactory::createReaderFromFile(Storage::path('temp/'.$file_name));
$reader->open(Storage::path('temp/'.$file_name));
// $reader = ReaderEntityFactory::createReaderFromFile(Storage::path('temp/'.$file_name));
// $reader->open(Storage::path('temp/'.$file_name));
$headers_map_to_table_fields = Benefit::$doc_headers_to_field_map;
// $headers_map_to_table_fields = Benefit::$doc_headers_to_field_map;
$imported_benefit_data = 0;
$failed_benefit_data = [];
foreach ($reader->getSheetIterator() as $sheet) {
$doc_headers_indexes = [];
foreach ($sheet->getRowIterator() as $index => $row) {
if ($index == 1) { // First Row Must be Header
foreach ($row->getCells() as $index => $cell) {
$doc_headers_indexes[$index] = rtrim($cell->getValue());
}
} else { // Next Row Should be Data
$new_benefit_data = [];
foreach ($row->getCells() as $index => $cell) {
$new_benefit_data[$headers_map_to_table_fields[$doc_headers_indexes[$index]]] = $cell->getValue();
}
// $imported_benefit_data = 0;
// $failed_benefit_data = [];
// foreach ($reader->getSheetIterator() as $sheet) {
// $doc_headers_indexes = [];
// foreach ($sheet->getRowIterator() as $index => $row) {
// if ($index == 1) { // First Row Must be Header
// foreach ($row->getCells() as $index => $cell) {
// $doc_headers_indexes[$index] = rtrim($cell->getValue());
// }
// } else { // Next Row Should be Data
// $new_benefit_data = [];
// foreach ($row->getCells() as $index => $cell) {
// $new_benefit_data[$headers_map_to_table_fields[$doc_headers_indexes[$index]]] = $cell->getValue();
// }
// $imported_plan_data[] = $new_row; // Insert to Array
// Create Directly
$new_benefit_data['corporate_id'] = $corporate_id;
try {
Benefit::updateOrCreate([
'corporate_id' => $corporate_id,
'code' => $new_benefit_data['code']
], $new_benefit_data);
// // $imported_plan_data[] = $new_row; // Insert to Array
// // Create Directly
// $new_benefit_data['corporate_id'] = $corporate_id;
// try {
// Benefit::updateOrCreate([
// 'corporate_id' => $corporate_id,
// 'code' => $new_benefit_data['code']
// ], $new_benefit_data);
$imported_benefit_data++;
} catch(\Exception $e) {
$new_benefit_data['error'] = $e->getMessage();
$failed_benefit_data[] = $new_benefit_data;
}
}
}
break; //only read first sheet
}
$reader->close();
Storage::delete('temp/'.$file_name);
// throw(404);
// $imported_benefit_data++;
// } catch(\Exception $e) {
// $new_benefit_data['error'] = $e->getMessage();
// $failed_benefit_data[] = $new_benefit_data;
// }
// }
// }
return [
'total_successed_row' => $imported_benefit_data,
'total_failed_row' => count($failed_benefit_data),
'failed_row' => $failed_benefit_data
];
// break; //only read first sheet
// }
// $reader->close();
// Storage::delete('temp/'.$file_name);
// // throw(404);
// return [
// 'total_successed_row' => $imported_benefit_data,
// 'total_failed_row' => count($failed_benefit_data),
// 'failed_row' => $failed_benefit_data
// ];
}
}

View File

@@ -0,0 +1,86 @@
<?php
namespace Modules\Internal\Http\Controllers\Api;
use App\Models\City;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
class CityController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index(Request $request)
{
$city = City::where('province_id', $request->province_id)->orderBy('name', 'asc')->get();
if (!$city) {
return response(['message' => 'Tidak ada data'], 404);
} else {
return response(['message' => 'Data ditemukan', 'data' => $city]);
}
}
/**
* 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)
{
//
}
}

1740
Modules/Internal/Http/Controllers/Api/ClaimController.php Normal file → Executable file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -18,14 +18,32 @@ class CorporateBenefitController extends Controller
public function index(Request $request, $corporate_id)
{
$benefits = CorporateBenefit::query()
->filter($request->all())
->where('corporate_id', $corporate_id)
->paginate(0)
->appends($request->all());
->filter($request->all())
->where('corporate_id', $corporate_id)
->with('benefit', 'plan')
->paginate(10)
->appends($request->all());
return $benefits;
}
public function activation(Request $request, $benefit_id)
{
$request->validate([
'active' => 'required'
]);
// abort(404);
$benefit = CorporateBenefit::find($benefit_id);
$benefit->active = $request->active == 1 ? 0 : 1;
$benefit->reason = $request->reason;
if ($benefit->save()) {
return response()->json([
'benefit' => $benefit,
'message' => 'Status Updated Successfully'
]);
}
}
/**
* Show the form for creating a new resource.
* @return Renderable
@@ -91,18 +109,15 @@ class CorporateBenefitController extends Controller
{
$corporateBenefit = CorporateBenefit::findOrFail($id);
$request->validate([
'code' => [
'budget' => [
'required',
Rule::unique('corporate_plans')->where('corporate_id', $corporate_id)->ignore($corporateBenefit->id)
],
'name' => 'required'
]);
$corporateBenefit->fill([
'code' => $request->code,
'name' => $request->name,
'active' => $request->active,
'budget' => $request->budget,
])->save();
return $corporateBenefit;

View File

@@ -3,10 +3,15 @@
namespace Modules\Internal\Http\Controllers\Api;
use App\Exceptions\ImportRowException;
use App\Helpers\Helper;
use App\Imports\PlansImport;
use App\Models\Benefit;
use App\Models\Claim;
use App\Models\Corporate;
use App\Models\CorporateBenefit;
use App\Models\Plan;
use App\Models\Service;
use App\Models\User;
use App\Services\ImportService;
use DB;
use Illuminate\Contracts\Support\Renderable;
@@ -14,8 +19,13 @@ use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Maatwebsite\Excel\Facades\Excel;
use Box\Spout\Reader\Common\Creator\ReaderEntityFactory;
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
use App\Models\File;
use Illuminate\Support\Facades\File as FacadesFile;
use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Storage;
use Modules\Internal\Services\CorporateService;
use App\Models\FilesDoc;
class CorporateController extends Controller
{
@@ -34,6 +44,9 @@ class CorporateController extends Controller
->withCount([
'employees',
'corporateBenefits',
'corporatePlans',
// 'claims'
])
->where('type', 'corporate')
->paginate(10);
@@ -66,9 +79,11 @@ class CorporateController extends Controller
*/
public function store(Request $request)
{
$request->validate([
'code' => 'required',
'code' => 'required|regex:/^[a-zA-Z0-9_]+$/',
'name' => 'required',
'payor_id' => 'required',
// 'logo' => 'required',
'policy_code' => 'required_with:policy_id',
'policy_total_premi' => 'required_with:policy_code',
@@ -79,7 +94,6 @@ class CorporateController extends Controller
'policy_stop_service_percentage' => 'required_with:policy_code',
'policy_stop_service_net' => 'required_with:policy_code',
]);
try {
DB::beginTransaction();
$corporate_data = $request->all();
@@ -87,9 +101,9 @@ class CorporateController extends Controller
$newCorporate = Corporate::create($request->all());
if ($request->has('policy_code') && !empty($request->policy_code)) {
// dd($request->policy_code, 'fuck you');
$newCorporate->policies()->create([
'code' => $request->policy_code ?? NULL,
'payor_id' => $request->payor_id ?? NULL,
'total_premi' => $request->policy_total_premi ?? NULL,
'minimal_deposit_percentage' => $request->policy_minimal_deposit_percentage ?? NULL,
'minimal_deposit_net' => $request->policy_minimal_deposit_net ?? NULL,
@@ -103,6 +117,136 @@ class CorporateController extends Controller
]);
}
// Service
$services = [
[
'id' => 1,
'name' => 'Outpatient',
'code' => 'OP',
'description' => 'Outpatient',
],
[
'id' => 2,
'name' => 'Inpatient',
'code' => 'IP',
'description' => 'Inpatient',
],
[
'id' => 3,
'name' => 'Dental',
'code' => 'DE',
'description' => 'Dental',
],
[
'id' => 4,
'name' => 'Maternal',
'code' => 'MA',
'description' => 'Maternal',
],
[
'id' => 5,
'name' => 'Optical',
'code' => 'OPT',
'description' => 'Optical',
],
[
'id' => 6,
'name' => 'Medical Check Up',
'code' => 'MCU',
'description' => 'Medical Check Up',
],
];
foreach ($services as $service) {
$corporateService = $newCorporate->corporateServices()->create([
'service_code' => $service['code'],
'status' => 'inactive'
]);
$corporateService->configs()->insert([
[
'corporate_service_id' => $corporateService->id,
'name' => 'gp_external_doctor_online',
'value' => false,
],
[
'corporate_service_id' => $corporateService->id,
'name' => 'gp_external_doctor_offline',
'value' => false,
],
[
'corporate_service_id' => $corporateService->id,
'name' => 'gp_internal_doctor_online',
'value' => false,
],
[
'corporate_service_id' => $corporateService->id,
'name' => 'gp_internal_doctor_offline',
'value' => false,
],
[
'corporate_service_id' => $corporateService->id,
'name' => 'sp_external_doctor_online',
'value' => false,
],
[
'corporate_service_id' => $corporateService->id,
'name' => 'sp_external_doctor_offline',
'value' => false,
],
[
'corporate_service_id' => $corporateService->id,
'name' => 'sp_internal_doctor_online',
'value' => false,
],
[
'corporate_service_id' => $corporateService->id,
'name' => 'sp_internal_doctor_offline',
'value' => false,
],
[
'corporate_service_id' => $corporateService->id,
'name' => 'vitamins',
'value' => false,
],
[
'corporate_service_id' => $corporateService->id,
'name' => 'delivery_fee',
'value' => false,
],
[
'corporate_service_id' => $corporateService->id,
'name' => 'general_practitioner_fee',
'value' => false,
],
[
'corporate_service_id' => $corporateService->id,
'name' => 'specialist_practitioner_fee',
'value' => false,
],
]);
}
// TODO Remove This
// Assign Managed to Manager one
$managerOne = User::where('email', 'manager+one@gmail.com')->first();
$managerOne->managedCorporates()->attach($newCorporate);
if ($request->hasFile('logo')) {
$pathFileAvatar = File::storeFile('avatar', $newCorporate->id, $request->file('logo'));
$newCorporate->files()->updateOrCreate([
'type' => 'avatar',
'name' => File::getFileName('avatar', $newCorporate->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();
@@ -119,7 +263,25 @@ class CorporateController extends Controller
*/
public function show($id)
{
return view('internal::show');
$corporate = Corporate::query()
->with(['currentPolicy', 'plans'])
->withCount('corporatePlans')
->withCount('employees')
// ->withCount('employees.claims')
->findOrFail($id);
$plans = $corporate['plans']->map(function ($plan) {
return [
'id' => $plan['id'],
'code' => $plan['code'],
'corporate_id' => $plan['corporate_id'],
'corporate_plan_id' => $plan['corporate_plan_id'],
];
});
unset($corporate['plans']);
$corporate['plans'] = $plans;
return response()->json($corporate);
}
/**
@@ -143,7 +305,8 @@ class CorporateController extends Controller
public function update(Request $request, $id)
{
$request->validate([
'code' => 'required',
'code' => 'required|regex:/^[a-zA-Z0-9_]+$/',
'payor_id' => 'required',
'name' => 'required',
'policy_code' => 'required_with:policy_id',
'policy_total_premi' => 'required_with:policy_code',
@@ -157,15 +320,20 @@ class CorporateController extends Controller
try {
DB::beginTransaction();
//karena pake formdata
$linkingRules = $request->linking_rules;
$linkingRules = explode(',', $linkingRules);
$corporate = Corporate::findOrFail($id);
$corporate->fill($request->toArray());
$corporate->fill($request->all());
$corporate->linking_rules = $linkingRules;
$corporate->save();
$corporate->policies()->updateOrCreate(
['id' => $request->policy_id],
[
'code' => $request->policy_code ?? NULL,
'payor_id' => $request->payor_id ?? NULL,
'total_premi' => $request->policy_total_premi ?? NULL,
'minimal_deposit_percentage' => $request->policy_minimal_deposit_percentage ?? NULL,
'minimal_deposit_net' => $request->policy_minimal_deposit_net ?? NULL,
@@ -179,6 +347,20 @@ class CorporateController extends Controller
]
);
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();
@@ -201,13 +383,15 @@ class CorporateController extends Controller
public function activation(Request $request, $corporate_id)
{
$request->validate([
'active' => 'required'
'active' => 'required',
'reason' => 'required'
]);
// abort(404);
$corporate = Corporate::findOrFail($corporate_id);
$corporate->active = $request->active == '1';
$corporate->active = $request->active == 0 ? 1 : 0;
$corporate->reason = $request->reason;
if ($corporate->save()) {
return response()->json([
@@ -222,14 +406,17 @@ class CorporateController extends Controller
$request->validate([
'file' => 'required|file|mimes:xls,xlsx,csv,txt',
]);
// dd($request->toArray());
$file_name = now()->getPreciseTimestamp(3) . '-' . $request->file('file')->getClientOriginalName();
$file = $request->file('file')->storeAs('temp', $file_name);
$corporate = Corporate::findOrFail($corporate_id);
// 🚀 Paksa simpan ke local/public
$file = $request->file('file')->storeAs('temp', $file_name, 'public');
$corporate = Corporate::with(['plans'])->findOrFail($corporate_id);
$fileWrite = Storage::disk('public')->path('temp/result-' . $file_name);
$fileRead = Storage::disk('public')->path('temp/' . $file_name);
$import = new ImportService();
$import->read(Storage::path('temp/' . $file_name));
$import->write(Storage::disk('public')->path('temp/result-' . $file_name), 'xsls');
$import->read($fileRead);
$import->write($fileWrite, 'xsls');
foreach ($import->sheetsIterator() as $sheetIndex => $sheet) {
if (!in_array($sheet->getName(), ['Plan', 'Benefit'])) {
@@ -246,15 +433,17 @@ class CorporateController extends Controller
if ($sheet->getName() == 'Plan') {
$headers_map_to_table_fields = Plan::$doc_headers_to_field_map;
} else if ($sheet->getName() == 'Benefit') {
$headers_map_to_table_fields = Benefit::$doc_headers_to_field_map;
$headers_map_to_table_fields = CorporateBenefit::$doc_headers_to_field_map;
}
// Write Header to File
$result_headers = array_keys($headers_map_to_table_fields);
$result_headers = array_merge($result_headers, ['Ingest Code', 'Ingest Note']);
// $import->read($fileRead);
// $import->write($fileWrite, 'xsls');
$import->addArrayToRow($result_headers);
}
$doc_headers_indexes = [];
foreach ($sheet->getRowIterator() as $index => $row) {
if ($index == 1) { // First Row Must be Header
@@ -269,12 +458,10 @@ class CorporateController extends Controller
// TODO Validate if First Row not Header
} else { // Next Row Should be Data
$row_data = [];
foreach ($row->getCells() as $header_index => $cell) {
if (isset($headers_map_to_table_fields[$doc_headers_indexes[$header_index]]))
$row_data[$headers_map_to_table_fields[$doc_headers_indexes[$header_index]]] = $cell->getValue();
}
try { // Process the Row Data
$corporateService = new CorporateService();
if ($sheet->getName() == 'Plan') {
@@ -282,14 +469,17 @@ class CorporateController extends Controller
} else if ($sheet->getName() == 'Benefit') {
$corporateService->handleBenefitRow($corporate, $row_data);
}
// Write Success Result to File
$import->addArrayToRow(array_merge($row_data, [
'Ingest Code' => 200,
'Ingest Note' => 'Success',
]), $sheet->getName());
// $import->read($fileRead);
// $import->write($fileWrite, 'xsls');
$result_headers = array_merge($row_data, ['Ingest Code' =>200, 'Ingest Note' => 'Success']);
$import->addArrayToRow($result_headers, $sheet->getName());
} catch (ImportRowException $e) {
// Write Data Validation Error to File
// $import->read($fileRead);
// $import->write($fileWrite, 'xsls');
$import->addArrayToRow(array_merge($row_data, [
'Ingest Code' => $e->getCode(),
'Ingest Note' => $e->getMessage(),
@@ -297,6 +487,8 @@ class CorporateController extends Controller
} catch (\Exception $e) {
// throw new \Exception($e);
// Write Server Error to File
// $import->read($fileRead);
// $import->write($fileWrite, 'xsls');
$import->addArrayToRow(array_merge($row_data, [
'Ingest Code' => 500,
'Ingest Note' => env('APP_DEBUG') ? $e->getMessage() : 'Server Error',
@@ -319,4 +511,336 @@ class CorporateController extends Controller
]
];
}
public function deleteAllImportPlanBenefit(Request $request, $corporate_id){
$deleteBenefit = CorporateBenefit::where('corporate_id', $corporate_id)->delete();
$deletePlan = Plan::where('corporate_id', $corporate_id)->delete();
if ( $deleteBenefit && $deletePlan ){
return Helper::responseJson(data: [], message: 'Berhasil delete semua benefit');
} else {
return Helper::responseJson(data: [], message: 'Gagal delete semua benefit', statusCode:404);
}
}
public function importDocumentExample($document_type)
{
switch ($document_type) {
case 'plan-benefit':
return Helper::responseJson([
'file_name' => "Corporate Plan & Benefit Import.xlsx",
"file_url" => url('files/Corporate Plan & Benefit Import.xlsx')
]);
break;
case 'member':
return Helper::responseJson([
'file_name' => "Corporate Membership Import.xlsx",
"file_url" => url('files/Corporate Membership Import.xlsx')
]);
break;
case 'diagnosis-exclusion':
return Helper::responseJson([
'file_name' => "Corporate Exclusion Import.xlsx",
"file_url" => url('files/Corporate Exclusion Import.xlsx')
]);
break;
case 'master-icd':
return Helper::responseJson([
'file_name' => "Template - ICD.xlsx",
"file_url" => url('files/Template - ICD.xlsx')
]);
break;
case 'master-formularium':
return Helper::responseJson([
'file_name' => "Template - Formularium.xlsx",
"file_url" => url('files/Template - Formularium.xlsx')
]);
break;
case 'master-formularium-corporate':
return Helper::responseJson([
'file_name' => "Template - Formularium.xlsx",
"file_url" => url('files/Template - Formularium - Corporate.xlsx')
]);
break;
case 'claim-request':
return Helper::responseJson([
'file_name' => "Template Claim Request.xlsx",
"file_url" => url('files/Template Claim Request.xlsx')
]);
break;
case 'request-log':
return Helper::responseJson([
'file_name' => "Template Update Status Request LOG.xlsx",
"file_url" => url('files/Template Update Status Request LOG.xlsx')
]);
break;
case 'template-request-log':
return Helper::responseJson([
'file_name' => "Template Import Request LOG.xlsx",
"file_url" => url('files/Template Import Request LOG.xlsx')
]);
break;
case 'final-log-invoice':
return Helper::responseJson([
'file_name' => "Template Import Invoice.xlsx",
"file_url" => url('files/Template Import Invoice.xlsx')
]);
break;
default:
return Helper::responseJson([], 'error', 404);
break;
}
}
public function dataPlanBenefit(Request $request, $corporate_id){
$file_name = 'Corporate Plan and Benefit';
// Membuat penulis entitas Spout
$writer = WriterEntityFactory::createXLSXWriter();
// Membuka penulis untuk menulis ke file
$writer->openToFile(public_path('files/CorporatePlan&BenefitImportData.xlsx'));
// Sheet 1
$writer->getCurrentSheet()->setName('Plans');
$headers_map_to_table_fields = Plan::$listing_doc_headers;
$headerRow = WriterEntityFactory::createRowFromArray($headers_map_to_table_fields);
$writer->addRow($headerRow);
$dataPlans = Plan::query()
->filter($request->all())
->where('corporate_id', $corporate_id)
// ->whereHas('corporatePlan', function ($corporatePlan) use ($corporate_id) {
// $corporatePlan->where('corporate_id', $corporate_id);
// })
// ->with('corporatePlan')
->orderBy('corporate_plan_id', 'asc')
->get()->toArray();
foreach ($dataPlans as $index => $row){
$rowData = [
$row['service_code'], // Service
$row['corporate_plan_id'], // Plan
$row['code'], // Customer plans
$row['type'], // Plan Type
$row['start'], // Start Date of Plan
$row['end'], // End Date of Plan
$row['require_referral'], // Referral
$row['referral_source'], // Referral Source
$row['referral_duration'], // Referral Duration
$row['family_plan'], // Family Plan
$row['family_plan_share_rules'], // Family Sharing Overflow
$row['limit_rules'], // Plan Limit
$row['layer'], // Layer ID
$row['layer_conditions'], // Layer Condition
$row['budget_type'], // Budget Type
$row['budget_code'], // Budget Code
$row['budget_conditions'], // Budget Condition
$row['surgery_limit'], // Surgery
$row['non_surgery_limit'], // Non Surgery
$row['max_claim_limit'], // Max/Claim
$row['max_claim_count'], // Max Count of Claim
$row['area_limit'], // Area
$row['limit_shared_plans'], // Shared Plan
$row['limit_shared_plan_type'], // Shared Plan Type
$row['cashless_percentage'], // Cashless(%)
$row['reimbursement_percentage'], // Reimbursement(%)
$row['digital_percentage'], // Digital(%)
$row['co_share_m_percentage'], // CoShareM(%)
$row['co_share_s_percentage'], // CoShareS(%)
$row['co_share_c_percentage'], // CoShareC(%)
$row['cashless_deductible'], // Cashless Deductible
$row['cashless_deductible'], // Reimbursement Deductible
$row['digital_deductible'], // Digital Deductible
$row['co_share_m_deductible'], // DeductibleM
$row['co_share_s_deductible'], // DeductibleS
$row['co_share_c_deductible'], // DeductibleC
$row['co_share_deductible_condition'], // Co-share & Deductible Condition
$row['msc'], // MSC
$row['genders'], // Gender
$row['min_age'], // Min Age
$row['max_age'], // Max Age
$row['rule_of_excess'], // Rule of Excess
$row['max_excess_covered'], // Max Excess Covered
$row['prorate_type'], // Prorate Type
$row['prorate_lookup'], // Prorate Lookup
$row['currency'], // Currency
$row['max_surgery_reinstatement_days'], // Reinstatement days for Surgery NonSurgery
$row['max_surgery_periode_days'], // Max Periode of Surgery Non Surgery
];
$row = WriterEntityFactory::createRowFromArray($rowData);
$writer->addRow($row);
}
// Menutup penulis
// Sheet 2
$writer->addNewSheetAndMakeItCurrent();
$writer->getCurrentSheet()->setName('Benefit');
$headers_map_to_table_fields = CorporateBenefit::$listing_doc_headers;
$headerRow = WriterEntityFactory::createRowFromArray($headers_map_to_table_fields);
$writer->addRow($headerRow);
$dataBenfit = CorporateBenefit::query()
->where('corporate_id', $corporate_id)
->with('benefit', 'plan')
->orderBy('plan_id', 'asc')
->get()->toArray();
// dd($dataBenfit);
foreach($dataBenfit as $index => $row){
$rowData = [
$row['benefit']['service_code'] ?? NULL, // "Service",
$row['plan']['type'] ?? NULL, // "Plan",
$row['benefit']['code'] ?? NULL, // "Benefit Code",
$row['benefit']['code'] ?? NULL, // "Customer Benefit Code",
$row['benefit']['description'] ?? NULL, // "Detail Benefit",
$row['budget'], // "ASO/Budget",
$row['budget_conditions'], // "Budget Condition",
$row['budget_code'], // "Budget Code",
$row['primary_benefit_code'], // "Primary benefit",
$row['benefit_mode'], // "Benefit Mode",
$row['room_class_coverage'], // "Room Class",
$row['max_bed_coverage'], // "Max Bed",
$row['tolerance_parameter'], // "Tolerance Paramater",
$row['max_room_class'], // "Max. Room Class",
$row['limit_amount'], // "Limit Value",
$row['area_limit'], // "Area",
$row['shared_benefit'], // "Shared Benefit With",
$row['shared_benefit_type'], // "Shared Benefit Type",
$row['msc'], // "MSC",
$row['genders'], // "Gender",
$row['min_age'], // "Min Age",
$row['max_age'], // "Max Age",
$row['max_frequency_period'], // "Freq. Period",
$row['daily_frequency'], // "Daily Frequency",
$row['weekly_frequency'], // "Weekly Frequency",
$row['monthly_frequency'], // "Monthly Frequency",
$row['yearly_frequency'], // "Yearly Frequency",
$row['custom_frequency_days'], // "Custom Duration",
$row['custom_duration_value'], // "Custom Duration Value",
NULL, // "Cashless, Reimbursement",
$row['high_plan_factor'], // "High Plan Factor",
$row['pre_post_treatment'], // "Pre Post Treatment",
$row['pre_treatment_days'], // "Pre Treatment",
$row['post_treatment_days'], // "Post Treatment",
$row['layer_type_1'], // "Layer Type 1",
$row['layer_value_1'], // "Layer Value 1",
$row['layer_type_2'], // "Layer Type 2",
$row['layer_value_2'], // "Layer Value 2",
$row['cashless_percentage'], // "Cashless (%)",
$row['reimbursement_percentage'], // "Reimburse (%)",
$row['digital_percentage'], // "Digital (%)",
$row['co_share_m_percentage'], // "CoShareM (%)",
$row['co_share_s_percentage'], // "CoShareS (%)",
$row['co_share_c_deductible'], // "CoShareC (%)",
$row['cashless_deductible'], // "Cashless Deductible",
$row['reimbursement_deductible'], // "Reimbursement Deductible",
$row['digital_deductible'], // "Digital Deductible",
$row['co_share_m_deductible'], // "DeductibleM",
$row['co_share_s_deductible'], // "DeductibleS",
$row['co_share_c_deductible'], // "DeductibleC",
$row['prorate_type'], // "Prorate Type",
$row['prorate_lookup'], // "Prorate Lookup",
$row['max_days_for_disability'], // "Max Days for Disability",
$row['max_period_for_disability'], // "Max Periode of Disability",
$row['limit_free_tc'], // "Currency",
$row['currency'], // "Currency",
$row['show_benefit_item'], // "Show Benefit Item",
$row['show_benefit_value'], // "Show Benefit Value",
];
$row = WriterEntityFactory::createRowFromArray($rowData);
$writer->addRow($row);
}
$writer->close();
return Helper::responseJson([
'file_name' => "Data Corporate Plan & Benefit List " . date('Y-m-d h:i:s'),
"file_url" => url('files/CorporatePlan&BenefitImportData.xlsx')
]);
}
public function corporateCode(Request $request){
$corporates = Corporate::query()
->when($request->search, function ($query, $search) {
return $query->where('name', 'LIKE', '%' . $search . '%')
->orWhere('code', 'LIKE', '%' . $search . '%');
})
->with('currentPolicy', 'subCorporates')
->withCount([
'employees',
'corporateBenefits',
'corporatePlans',
// 'claims'
])
->where('active', 1)
->get()
->pluck('code');
return $corporates;
}
public function addFilesDoc(Request $request)
{
$request->validate([
'corporate_id' => 'required'
]);
if ($request->hasFile('result_files')) {
$pathFile = File::storeFile('docs', $request->corporate_id, $request->result_files);
$data = [
'corporate_id' => $request->corporate_id,
'original_name' => $request->result_files->getClientOriginalName(),
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id
];
FilesDoc::create($data);
return Helper::responseJson(data: $request->toArray(), message: 'Berhasil tambah file '.$data['original_name']);
}
else
{
return Helper::responseJson(data: $request->toArray(), message: 'Tidak ada file yang ditambahkan');
}
}
public function getFilesDoc(Request $request)
{
$request->validate([
'corporate_id' => 'required'
]);
$datas = FilesDoc::where('corporate_id', $request->corporate_id)
->select('original_name', \DB::raw("CONCAT('" . env('APP_URL') . "/storage/', path) as path"), 'status_download')
->orderBy('id', 'desc')
//->limit(1)
->get();
if ($datas->isEmpty()) {
return Helper::responseJson(data: [], message: 'Tidak ada data');
}
return Helper::responseJson(data: $datas, message: 'Berhasil mendapatkan data');
}
public function updateStatusFilesDoc(Request $request)
{
$request->validate([
'status_download' => 'required',
'corporate_id' => 'required'
]);
$data_requests = [
'status_download' => $request->status_download
];
FilesDoc::where('corporate_id', $request->corporate_id)
->update($data_requests);
$datas = FilesDoc::where('corporate_id', $request->corporate_id)
->select('status_download')
->orderBy('id', 'desc')
->limit(1)
->get();
return Helper::responseJson(data: $datas, message: 'Berhasil update status download menjadi '.($request->status_download == 0 ? 'Inactive' : 'Active'));
}
}

View File

@@ -2,13 +2,25 @@
namespace Modules\Internal\Http\Controllers\Api;
use App\Exceptions\ImportRowException;
use App\Helpers\Helper;
use App\Models\CorporateFormularium;
use App\Models\Formularium;
use App\Models\FormulariumTemplate;
use App\Services\ImportService;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Storage;
use Modules\Internal\Transformers\CorporateFormulariumResource;
use Modules\Internal\Services\FormulariumService;
use Box\Spout\Reader\Common\Creator\ReaderEntityFactory;
use Box\Spout\Writer\Common\Creator\Style\StyleBuilder;
use Box\Spout\Common\Entity\Style\CellAlignment;
use Box\Spout\Common\Entity\Style\Color;
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
use Box\Spout\Common\Entity\Row;
class CorporateFormulariumController extends Controller
{
@@ -16,25 +28,24 @@ class CorporateFormulariumController extends Controller
* Display a listing of the resource.
* @return Renderable
*/
public function __construct(FormulariumService $formulariumService)
{
$this->formulariumService = $formulariumService;
}
public function index(Request $request, $corporate_id)
{
$formulariums = Formularium::query()
->filter($request->all());
if (!empty($request->status) && $request->status == 'inactive') {
$formulariums = $formulariums->whereDoesntHave('corporateFormulariums');
} else if (!empty($request->status) && $request->status == 'all') {
} else { // Active or Default
$formulariums->whereHas('corporateFormulariums', function ($corporateFormularium) use ($corporate_id){
$corporateFormularium->where('corporate_id', $corporate_id);
});
}
$formulariums = $formulariums->with(['corporateFormulariums' => function ($query) use ($corporate_id) {
$query->where('corporate_id', $corporate_id);
}])
->withCount('items')
->paginate();
$formulariums = CorporateFormularium::query()
->where('corporate_id', $corporate_id)
->paginate(15);
// if (!empty($request->status) && $request->status == 'inactive') {
// $formulariums = $formulariums->whereDoesntHave('corporateFormulariums');
// } else if (!empty($request->status) && $request->status == 'all') {
// } else { // Active or Default
// $formulariums->whereHas('corporateFormulariums', function ($corporateFormularium) use ($corporate_id){
// $corporateFormularium->where('corporate_id', $corporate_id);
// });
// }
return Helper::paginateResources(CorporateFormulariumResource::collection($formulariums));
}
@@ -42,9 +53,16 @@ class CorporateFormulariumController extends Controller
* Show the form for creating a new resource.
* @return Renderable
*/
public function create()
public function create(Request $request, $corporate_id)
{
return view('internal::create');
$data = CorporateFormularium::where('corporate_id', $corporate_id)->pluck('formularium_template_id')->toArray(); // agar tidak dobel
$formularium_template = FormulariumTemplate::whereNotIn('id', $data)->get();
$respone = [
"status" => 200,
"message" => 'data berhasil diambil',
"data" => $formularium_template
];
return $respone;
}
/**
@@ -52,9 +70,36 @@ class CorporateFormulariumController extends Controller
* @param Request $request
* @return Renderable
*/
public function store(Request $request)
public function store(Request $request, $corporate_id)
{
//
$request->validate([
'id' => 'required'
]);
$checkFormularium = FormulariumTemplate::find($request->id);
if (!$checkFormularium){
$respone = [
"status" => 404,
"message" => "data master formularium tidak ditemukan",
"data" => []
];
return $respone;
}
$newCorporateFormularium = CorporateFormularium::create([
'corporate_id' => $corporate_id,
'formularium_template_id' => $request->id,
'active' => 1
]);
if ($newCorporateFormularium){
$respone = [
"status" => 200,
"message" => "data berhasil disimpan"
];
return $respone;
}
return $newCorporatePlan;
}
/**
@@ -62,9 +107,15 @@ class CorporateFormulariumController extends Controller
* @param int $id
* @return Renderable
*/
public function show($id)
public function show(Request $request, $corporate_id, $id)
{
return view('internal::show');
$data = Formularium::where('formularium_template_id', $id)->get();
$respone = [
"status" => 200,
"message" => 'data berhasil diambil',
"data" => $data
];
return $respone;
}
/**
@@ -72,9 +123,16 @@ class CorporateFormulariumController extends Controller
* @param int $id
* @return Renderable
*/
public function edit($id)
public function edit(Request $request, $corporate_id)
{
return view('internal::edit');
$data = CorporateFormularium::where('corporate_id', $corporate_id)->pluck('formularium_template_id')->toArray(); // agar tidak dobel
$formularium_template = FormulariumTemplate::whereNotIn('id', $data)->get();
$respone = [
"status" => 200,
"message" => 'data berhasil diambil',
"data" => $formularium_template
];
return $respone;
}
/**
@@ -101,7 +159,7 @@ class CorporateFormulariumController extends Controller
public function updateStatus($corporate_id, $formularium_id , $status)
{
if ($status == 'activate') {
$corporateFormularium = CorporateFormularium::firstOrCreate([
$corporateFormularium = CorporateFormularium::updateOrCreate([
'corporate_id' => $corporate_id,
'formularium_id' => $formularium_id
], [
@@ -128,4 +186,213 @@ class CorporateFormulariumController extends Controller
]);
}
}
public function active(Request $request, $corporate_id, $id)
{
$corporateFormularium = CorporateFormularium::find($id);
$corporateFormularium->fill([
'active' => $request->active,
])->save();
$respone = [
"status" => 200,
"message" => 'data berhasil diedit',
"data" => $corporateFormularium
];
return $respone;
}
public function import(Request $request, $id)
{
$request->validate([
'file' => 'required|file|mimes:xls,xlsx,csv,txt',
]);
// dd($request->toArray());
$file_name = now()->getPreciseTimestamp(3).'-'.$request->file('file')->getClientOriginalName();
$file = $request->file('file')->storeAs('temp', $file_name, 'public'); // 🚀 Paksa simpan ke local/public
// $importLog = $corporate->importLogs()->create([
// 'type' => 'diagnosis-exclusions',
// 'file_path' => $file,
// 'status' => 'pending',
// 'progress' => 0,
// ]);
$import = new ImportService();
$import->read(Storage::disk('public')->path('temp/'.$file_name));
$import->write(Storage::disk('public')->path('temp/result-'.$file_name), 'xsls');
foreach ($import->sheetsIterator() as $sheetIndex => $sheet) {
$doc_headers_indexes = [];
foreach ($sheet->getRowIterator() as $index => $row) {
if ($index == 1) { // First Row Must be Header
foreach ($row->getCells() as $index => $cell) {
$title = $cell->getValue();
$title = preg_replace( "/\r|\n/", " ", $title );
$title = preg_replace('/\xc2\xa0/', " ", $title );
$title = rtrim($title);
$title = ltrim($title);
$doc_headers_indexes[$index] = $title;
}
// Write Header to File
// $result_headers = array_merge($doc_headers_indexes, ['Ingest Code', 'Ingest Note']);
// Tambahkan 'Ingest Code' dan 'Ingest Note' ke akhir array
$doc_headers_indexes[] = 'Ingest Code';
$doc_headers_indexes[] = 'Ingest Note';
$import->addArrayToRow($doc_headers_indexes);
// TODO Validate if First Row not Header
} else { // Next Row Should be Data
$row_data = [];
$row_map = [
0 => 'code',
1 => 'active',
];
foreach ($row->getCells() as $header_index => $cell) {
if (isset($row_map[$header_index])) {
$value = $cell->getValue();
$value = preg_replace( "/\r|\n/", " ", $value );
$value = preg_replace('/\xc2\xa0/', " ", $value );
$value = rtrim($value);
$value = ltrim($value);
$row_data[$row_map[$header_index]] = $cell->getValue();
}
}
try { // Process the Row Data
if (empty($row_data['code'])){
throw new ImportRowException(__('Internal Code is REQUIRED'), 405, null, $row_data);
}
if (
// empty($row_data['code']) &&
// empty($row_data['description']) &&
empty($row_data['code']) &&
empty($row_data['active'])
) {
continue;
}
// Save the Row
$formulariums = Formularium::where('code', $row_data['code'])->first();
if ($formulariums){
$row_data['formularium_id'] = $formulariums->id;
} else {
throw new ImportRowException(__('Internal Code is Not Found'), 405, null, $row_data);
}
$formulariumService = new FormulariumService();
$formulariumService->handleFormuariumCorporateRow($row_data, $id);
// Write Success Result to File
$import->addArrayToRow(array_merge($row_data, [
'Ingest Code' => 200,
'Ingest Note' => 'Success',
]), $sheet->getName());
} catch (ImportRowException $e) {
// Write Data Validation Error to File
$import->addArrayToRow(array_merge($row_data, [
'Ingest Code' => $e->getCode(),
'Ingest Note' => $e->getMessage(),
]), $sheet->getName());
} catch (\Exception $e) {
throw new \Exception($e);
// Write Server Error to File
$import->addArrayToRow(array_merge($row_data, [
'Ingest Code' => 500,
'Ingest Note' => env('APP_DEBUG') ? $e->getMessage() : 'Server Error',
]), $sheet->getName());
}
}
}
break; // Only Read First Row
}
$import->reader->close();
Storage::delete('temp/'.$file_name);
$import->writer->close();
return [
// 'total_successed_row' => $imported_plan_data,
// 'total_failed_row' => count($failed_plan_data),
// 'failed_row' => $failed_plan_data,
'result_file' => [
'url' => Storage::disk('public')->url('temp/result-'.$file_name),
'name' => 'result-'.$file_name,
]
];
}
public function generateFormulariumList(Request $request, $id){
// Mendapatkan data yang akan diekspor (misalnya, dari database)
// $data = Formularium::get()->toArray();
$formulariums = Formularium::query()
->filter($request->all());
// if (!empty($request->status) && $request->status == 'inactive') {
// $formulariums = $formulariums->whereDoesntHave('corporateFormulariums');
// } else if (!empty($request->status) && $request->status == 'all') {
// } else { // Active or Default
// $formulariums->whereHas('corporateFormulariums', function ($corporateFormularium) use ($corporate_id){
// $corporateFormularium->where('corporate_id', $corporate_id);
// });
// }
$data = $formulariums->with(['corporateFormulariums' => function ($query) use ($id) {
$query->where('corporate_id', $id);
}])->get()->toArray();
// Membuat penulis entitas Spout
$writer = WriterEntityFactory::createXLSXWriter();
// Membuka penulis untuk menulis ke file
$writer->openToFile(public_path('files/TemplateFormulariumList.xlsx'));
/** Create a style with the StyleBuilder */
$style = (new StyleBuilder())
->setFontBold()
->build();
// Menulis header kolom
$headers_map_to_table_fields = $this->formulariumService->listing_doc_headers;
$headerRow = WriterEntityFactory::createRowFromArray($headers_map_to_table_fields, $style);
$writer->addRow($headerRow);
// Menulis data
if (!empty($data)) {
foreach ($data as $item) {
$rowData = [
$item['code'], // code
$item['name'], // name
$item['description'], // Description
$item['manufacturer'], // manufacturer
$item['category_name'], // category_name
$item['kategori_obat'], // kategori_obat
$item['uom'], // uom
$item['general_indication'], // Description
$item['composition'], // composition
$item['atc_code'], // atc_code
$item['class'], // class
$item['bpom_registration'], // bpom_registration
$item['classifications'], // classifications
$item['cat_for'], // cat_for
];
$row = WriterEntityFactory::createRowFromArray($rowData);
$writer->addRow($row);
}
}
// Menutup penulis
$writer->close();
// Mengembalikan response untuk mengunduh file
$filePath = public_path('files/TemplateFormulariumList.xlsx');
return Helper::responseJson([
'file_name' => "Formularium List " . date('Y-m-d h:i:s'),
"file_url" => url('files/TemplateFormulariumList.xlsx')
]);
}
}

View File

@@ -0,0 +1,82 @@
<?php
namespace Modules\Internal\Http\Controllers\Api;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Auth;
use App\Models\User;
use App\Models\CorporateManager;
use Modules\Internal\Transformers\CorporateManageResource;
class CorporateManageController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index(Request $request)
{
$userCorporateManage = CorporateManager::with(['user', 'corporate'])->get();
return response()->json($userCorporateManage);
}
public function store(Request $request)
{
$request->validate([
'user_id' => [
'required',
],
'corporate_id' => 'required'
]);
$newCorporateManage = CorporateManager::create([
'corporate_id' => $request->corporate_id,
'user_id' => $request->user_id,
]);
return $newCorporateManage;
}
/**
* Update the specified resource in storage.
* @param Request $request
* @param int $id
* @return Renderable
*/
public function update(Request $request, $id)
{
$updateCorporateManage = CorporateManager::findOrFail($id);
$request->validate([
'user_id' => [
'required',
],
'corporate_id' => 'required'
]);
$updateCorporateManage->fill([
'corporate_id' => $request->corporate_id,
'user_id' => $request->user_id,
])->save();
return $updateCorporateManage;
}
/**
* Remove the specified resource from storage.
* @param int $id
* @return Renderable
*/
public function destroy($id)
{
// Soft delete model
$corporateManage = CorporateManager::find($id);
$corporateManage->delete();
return $corporateManage;
}
}

View File

@@ -3,16 +3,26 @@
namespace Modules\Internal\Http\Controllers\Api;
use App\Exceptions\ImportRowException;
use App\Helpers\Helper;
use App\Http\Resources\MemberDataTableResource;
use App\Models\Corporate;
use App\Models\CorporateEmployee;
use App\Models\Member;
use Box\Spout\Reader\Common\Creator\ReaderEntityFactory;
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
use Box\Spout\Common\Entity\Row;
use Carbon\Carbon;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Storage;
use Illuminate\Console\Command;
use Modules\Internal\Services\MemberEnrollmentService;
use PDF;
use Illuminate\Support\Facades\DB;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\File;
use Spatie\Browsershot\Browsershot;
class CorporateMemberController extends Controller
{
@@ -24,26 +34,67 @@ class CorporateMemberController extends Controller
* Display a listing of the resource.
* @return Renderable
*/
public function index(Request $request, $corporate_id)
public function index(Request $request, $corporate_id )
{
$members = Member::query()
->filter($request->all())
// ->where('corporate_id', $corporate_id)
->whereHas('employeds', function ($employeds) use ($corporate_id) {
$employeds->where('corporate_id', $corporate_id);
})
->joinCorporateEmployees('left')
->where('corporate_employees.corporate_id', $corporate_id)
->with([
'employeds',
'currentPolicy',
// 'claims' => function ($claim) {
// return $claim->used();
// }
// 'claims',
'claims' => function ($claim) {
// return $claim->whereBetween('requested_at', [now()->startOfYear(), now()->endOfYear()]);
// return $claim->used(now()->startOfYear(), now()->endOfYear());
},
'currentPlans',
'currentPlan',
// 'currentPlan' => function ($currentPlan) use ($service_code){
// return $currentPlan->where([
// 'plans.service_code' => $service_code
// ]);
// },
'currentPlan.benefits' => function ($benefit) use ($corporate_id){
return $benefit->where([
'corporate_benefits.active' => 1,
'corporate_benefits.corporate_id' => $corporate_id,
// 'corporate_benefits.plan_id' => $corporate_id,
]);
}
])
->with('currentPlan')
->when($request->input('search'), function (Builder $query, $search) {
$query->where(function (Builder $query) use ($search) {
$query->orWhere('members.member_id', 'like', "%" . $search . "%")
->orWhere('members.name', 'like', "%" . $search . "%");
});
})
->select('members.*')
->selectRaw('(SELECT GROUP_CONCAT(files_mcu.original_name SEPARATOR ", ") AS file_mcu_names from files_mcu WHERE files_mcu.memberid = members.id) AS file_mcu_names')
->groupBy('corporate_employees.member_id')
->paginate()
->appends($request->all());
return Helper::paginateResources(MemberDataTableResource::collection($members));
}
return $members;
public function activation(Request $request, $member_id)
{
$request->validate([
'active' => 'required',
'reason' => 'required',
]);
// abort(404);
$member = Member::findOrFail($member_id);
$member->active = $request->active;
$member->reason = $request->reason;
if ($member->save()) {
return response()->json([
'member' => $member,
'message' => 'Status Updated Successfully'
]);
}
}
/**
@@ -91,11 +142,30 @@ class CorporateMemberController extends Controller
* @param int $id
* @return Renderable
*/
public function update(Request $request, $id)
public function update(Request $request)
{
//
$member = Member::where('member_id', $request->member_id)->first();
if ($member) {
$member->update([
'birth_date' => $request->birth_date,
'gender' => $request->gender,
'principal_id' => $request->principal_id,
]);
return response()->json([
'member' => $member,
'message' => 'Status by member id Updated Successfully'
]);
} else {
return response()->json([
'member' => null,
'message' => 'Gagal update, member tidak ditemukan'
]);
}
}
/**
* Remove the specified resource from storage.
* @param int $id
@@ -103,22 +173,29 @@ class CorporateMemberController extends Controller
*/
public function destroy($id)
{
//
$member = Member::findOrFail($id);
// Menghapus member
$member->delete();
// Mengembalikan respons setelah penghapusan (misalnya sukses)
return response()->json(['message' => 'Member deleted successfully'], 200);
}
public function import(Request $request, $corporate_id)
{
// setting tambahan php
Helper::setCustomPHPIniSettings();
$request->validate([
'file' => 'required|file|mimes:xls,xlsx,csv,txt',
]);
$corporate = Corporate::findOrFail($corporate_id)->load('currentPolicy');
$file_name = now()->getPreciseTimestamp(3) . '-' . $request->file('file')->getClientOriginalName();
$file = $request->file('file')->storeAs('temp', $file_name);
$file = $request->file('file')->storeAs('temp', $file_name, 'public');
$reader = ReaderEntityFactory::createReaderFromFile(Storage::path('temp/' . $file_name));
$reader->open(Storage::path('temp/' . $file_name));
$reader = ReaderEntityFactory::createXLSXReader(Storage::path('temp/' . $file_name));
$reader->open(Storage::disk('public')->path('temp/' . $file_name));
$writer = WriterEntityFactory::createXLSXWriter();
$writer->openToFile(Storage::disk('public')->path('temp/result-' . $file_name));
@@ -132,6 +209,7 @@ class CorporateMemberController extends Controller
$imported_member_data = 0;
$failed_member_data = [];
foreach ($reader->getSheetIterator() as $sheet) {
$doc_headers_indexes = [];
foreach ($sheet->getRowIterator() as $index => $row) {
@@ -155,9 +233,7 @@ class CorporateMemberController extends Controller
}
try {
// dd($new_member_data);
$rowResponse = $this->memberEnrollmentService->handleImportRow($corporate, $new_member_data);
// Write Success Result to File
$singleRow = WriterEntityFactory::createRow($this->memberEnrollmentService->makeResultRowWithResultFormat($rowResponse));
$writer->addRow($singleRow);
@@ -168,9 +244,12 @@ class CorporateMemberController extends Controller
'ingestion_code' => $e->getCode(),
'ingestion_status' => $e->getMessage(),
]);
$singleRow = WriterEntityFactory::createRow($this->memberEnrollmentService->makeResultRowWithResultFormat($new_member_data));
$writer->addRow($singleRow);
$failed_member_data[] = ['row_number' => $index, 'error' => $e->getMessage()];
// try {
$singleRow = WriterEntityFactory::createRow($this->memberEnrollmentService->makeResultRowWithResultFormat($new_member_data));
$writer->addRow($singleRow);
// } catch (\Exception $e) {
$failed_member_data[] = ['row_number' => $index, 'error' => $e->getMessage(), 'data' => $new_member_data];
// }
} catch (\Exception $e) {
// Write Server Error to File
$new_member_data = array_merge($new_member_data, [
@@ -186,11 +265,11 @@ class CorporateMemberController extends Controller
break; //only read first sheet
}
$reader->close();
$writer->close();
Storage::delete('temp/' . $file_name);
// throw(404);
return [
'total_success_row' => $imported_member_data,
'total_failed_row' => count($failed_member_data),
@@ -201,4 +280,220 @@ class CorporateMemberController extends Controller
]
];
}
public function generateLog(Request $request, $member_id)
{
$corporate_id = CorporateEmployee::where('member_id', $member_id)->value('corporate_id');
// $member = Member::findOrFail($member_id)
// ->load([
// 'currentPlan',
// 'currentPolicy',
// 'currentPlan.corporateBenefits' => function ($benefit) use ($request) {
// return $benefit->when($request->benefit_ids, function ($q, $ids) {
// $q->whereIn('benefit_id', $ids)
// ->where([
// 'corporate_benefits.active' => 1,
// 'corporate_benefits.corporate_id' => $corporate_id,
// ]);
// });
// },
// // 'currentPlan.corporateBenefits.benefit'
// ]);
$member = Member::with([
'currentPlan',
'currentPolicy',
'currentPlan.corporateBenefits' => function ($query) use ($request, $corporate_id) {
$query->when($request->benefit_ids, function ($q, $ids) use ($corporate_id) {
$q->whereIn('benefit_id', $ids)
->where('active', 1)
->where('corporate_id', $corporate_id);
});
},
// 'currentPlan.corporateBenefits.benefit'
])->findOrFail($member_id);
$dateOfAdmission = $request->date_of_admission ? Carbon::parse($request->date_of_admission) : now();
// return view('pdf.guaranted_leter', compact('member'));
$pdf = PDF::loadView('pdf.guaranted_leter', compact(['member', 'dateOfAdmission']));
return $pdf->download('Guaranted Letter - '.$member->full_name.'.pdf');
}
public function generateMemberList(Request $request, $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);
// dd('test');
// 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 sendAllECard(Request $request, $corporate_id){
$members = Member::with([
'currentPlan',
'currentPolicy',
'currentCorporate',
// 'currentPlan.corporateBenefits.benefit'
])->whereHas('currentCorporate', function ($query) use ($corporate_id) {
$query->where('corporate_id', $corporate_id);
})->get();
$data = [];
$countSuccesSend = 0;
foreach($members as $member){
// Simpan file PDF ke direktori yang diinginkan
$pdfPath = storage_path('app/pdf/ecards/E-card-' . $member->name. '.pdf');
// Cek apakah file sudah ada
if (!File::exists($pdfPath)) {
$pdf = PDF::loadView('pdf.ecard', compact('member'))->setPaper('A5', 'portrait');
$pdf->save($pdfPath);
}
$dataEmail = [
// 'email' => $member->email,
'email' => 'tbfajri',
'name' => $member->name,
'subject' => 'Digital E Card '. $member->name,
'body' => '<h1>Hi ' . $member->name . '</h1> <br> ini adalah uji coba kirim e-card' ,
'attach' => $pdfPath,
];
$sendEmail = Helper::sendEmailattachData($dataEmail);
if ($sendEmail === true){
$countSuccesSend ++;
File::delete($pdfPath);
} else {
$dataFaild = [
'email' => $member->email,
'name' => $member->name,
'message' => $sendEmail
];
array_push($data, $dataFaild);
}
}
$response = [
'data_fail_send' => count($data),
'message' => $data,
'data_succes_send' => $countSuccesSend,
];
return response()->json($response);
}
public function viewECard(Request $request, $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');
}
}

View File

@@ -17,14 +17,59 @@ class CorporatePlanController extends Controller
public function index(Request $request, $corporate_id)
{
$benefits = CorporatePlan::query()
->filter($request->all())
->where('corporate_id', $corporate_id)
->paginate(0)
->appends($request->all());
->filter($request->all())
->where('corporate_id', $corporate_id)
->paginate(0)
->appends($request->all());
return $benefits;
}
public function filter(Request $request, $corporate_id){
$benefits = CorporatePlan::query()
->filter($request->all())
->where('corporate_id', $corporate_id);
// ->where('type', $request->type)
// ->where('code', $request->code);
if ($request->has('service_code') && is_array($request->service_code) && count($request->service_code) > 0) {
$benefits->whereIn('service_code', $request->service_code);
}
if ($request->has('type') && is_array($request->type) && count($request->type) > 0) {
$benefits->whereIn('type', $request->type);
}
if ($request->has('code') && is_array($request->code) && count($request->code) > 0) {
$benefits->whereIn('code', $request->code);
}
$benefits = $benefits->paginate(0)->appends($request->all());
return $benefits;
}
public function activation(Request $request, $plan_id)
{
$request->validate([
'active' => 'required'
]);
// abort(404);
$plan = CorporatePlan::findOrFail($plan_id);
$plan->active = $request->active == 1 ? 0 : 1;
$plan->reason = $request->reason;
if ($plan->save()) {
return response()->json([
'plan' => $plan,
'message' => 'Status Updated Successfully'
]);
}
}
/**
* Show the form for creating a new resource.
* @return Renderable
@@ -90,21 +135,21 @@ class CorporatePlanController extends Controller
public function update(Request $request, $corporate_id, $id)
{
$corporatePlan = CorporatePlan::findOrFail($id);
$request->validate([
'code' => [
'required',
Rule::unique('corporate_plans')->where('corporate_id', $corporate_id)->ignore($corporatePlan->id)
// Rule::unique('corporate_plans')->where('corporate_id', $corporate_id)->ignore($corporatePlan->id)
],
'name' => 'required'
]);
$corporatePlan->fill([
'code' => $request->code,
'name' => $request->name,
'active' => $request->active,
'description' => $request->description
'corporate_plan_id' => $request->plan,
'service_code' => $request->service,
'type' => $request->type,
'limit_rules' => $request->limit
])->save();
return $corporatePlan;
}

View File

@@ -12,6 +12,7 @@ use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Modules\Internal\Transformers\CorporateServiceConfigResource;
use Termwind\Components\Dd;
class CorporateServiceController extends Controller
{
@@ -74,6 +75,7 @@ class CorporateServiceController extends Controller
public function update(Request $request, $corporate_id)
{
$corporateService = CorporateService::where('corporate_id', $corporate_id)->where('service_code', $request->service_code)->first();
$corporateServiceConfig = $corporateService->configs()->updateOrCreate([
'corporate_service_id' => $corporateService->id,
'name' => $request->config_name
@@ -97,19 +99,32 @@ class CorporateServiceController extends Controller
public function corporateServiceIndex($corporate_id, $service_code)
{
$corporate = Corporate::findOrFail($corporate_id);
$corporate = Corporate::findOrFail($corporate_id)->with(['plans'])->first();
$plans = $corporate['plans']->map(function ($plan) {
return [
'id' => $plan['id'],
'code' => $plan['code'],
'corporate_id' => $plan['corporate_id'],
'corporate_plan_id' => $plan['corporate_plan_id'],
];
});
unset($corporate['plans']);
$corporate['plans'] = $plans;
$corporateService = CorporateService::query()
->where('corporate_id', $corporate_id)
->where('service_code', $service_code)
->with(['configs', 'service',
'specialities' => function($speciality) {
$speciality->where('status', 'active');
},
'specialities.speciality'])
->first();
->where('corporate_id', $corporate_id)
->where('service_code', $service_code)
->with([
'configs', 'service',
'corporateServiceSpecialities',
'corporateServiceSpecialities.speciality',
'corporateServiceSpecialities.exclusions.rules'
])
->first();
// $service = CorporateServiceConfigResource::make($corporateService);
$specialities = Speciality::get();
return response()->json(
[
'corporate' => $corporate,
@@ -121,14 +136,16 @@ class CorporateServiceController extends Controller
public function corporateServiceUpdate(Request $request, $corporate_id, $service_code)
{
// dd($request->all);
// $corporate = Corporate::findOrFail($corporate_id);
$corporateService = CorporateService::query()
->where('corporate_id', $corporate_id)
->where('service_code', $service_code)
// ->with('configs', 'service')
->first();
->where('corporate_id', $corporate_id)
->where('service_code', $service_code)
// ->with('configs', 'service')
->first();
$corporateService->fill([
'status' => $request->status == 'active' ? 'active' : 'inactive'
'status' => $request->status == 'active' ? 'inactive' : 'active',
'reason' => $request->reason
]);
$corporateService->save();
@@ -137,26 +154,395 @@ class CorporateServiceController extends Controller
public function corporateServiceSpecialityUpdate(Request $request, $corporate_id, $service_code)
{
// return response()->json([$request->checked, $request->value, $request->speciality_id]);
$corporateService = CorporateService::query()
->where('corporate_id', $corporate_id)
->where('service_code', $service_code)
->first();
CorporateServiceSpeciality::updateOrCreate([
->where('corporate_id', $corporate_id)
->where('service_code', $service_code)
->first();
$corporateServiceSpeciality = CorporateServiceSpeciality::updateOrCreate([
'corporate_service_id' => $corporateService->id,
'speciality_id' => $request->speciality_id,
], [
'corporate_service_id' => $corporateService->id,
'speciality_id' => $request->speciality_id,
'status' => $request->status
'active' => $request->active
]);
$exclusion = $corporateServiceSpeciality->exclusions()->updateOrCreate([
'corporate_id' => $corporate_id,
'service_code' => $service_code,
], [
'corporate_id' => $corporate_id,
'service_code' => $service_code,
'type' => 'speciality',
]);
$selected_specialities = CorporateServiceSpeciality::query()
->where('corporate_service_id', $corporateService->id)
->where('status', 'active')
->with('speciality')
->get()
->pluck('speciality.name', 'speciality.id');
->where('corporate_service_id', $corporateService->id)
->where('active', true)
->with('speciality')
->get()
->pluck('speciality.name', 'speciality.id');
return response()->json($selected_specialities);
}
public function corporateServiceSpecialityAllUpdate(Request $request, $corporate_id, $service_code)
{
// return response()->json([$request->checked, $request->value, $request->speciality_id]);
$corporateService = CorporateService::query()
->where('corporate_id', $corporate_id)
->where('service_code', $service_code)
->first();
$specialities = Speciality::get()->toArray();
if ($specialities){
foreach($specialities as $s){
$corporateServiceSpeciality = CorporateServiceSpeciality::updateOrCreate([
'corporate_service_id' => $corporateService->id,
'speciality_id' => $s['id'],
], [
'corporate_service_id' => $corporateService->id,
'speciality_id' => $s['id'],
'active' => $request->active
]);
$corporateServiceSpeciality = CorporateServiceSpeciality::updateOrCreate([
'corporate_service_id' => $corporateService->id,
'speciality_id' => $s['id'],
], [
'corporate_service_id' => $corporateService->id,
'speciality_id' => $s['id'],
'active' => $request->active
]);
$corporateServiceSpecialityRule = CorporateServiceSpeciality::where('corporate_service_id', $corporateService->id)
->where('speciality_id', $s['id'])
->with('exclusions.rules')
->first();
// Exclusion Rules
if (empty($corporateServiceSpecialityRule)) {
$corporateServiceSpecialityRule = CorporateServiceSpeciality::create([
'corporate_service_id' => $corporateService->id,
'speciality_id' => $s['id'],
'active' => false,
]);
$corporateServiceSpecialityRule->exclusions()->updateOrCreate([
'corporate_id' => $corporate_id,
'service_code' => $service_code,
], [
'corporate_id' => $corporate_id,
'service_code' => $service_code,
'type' => 'speciality',
]);
} else {
$corporateServiceSpecialityRule->exclusions()->updateOrCreate([
'corporate_id' => $corporate_id,
'service_code' => $service_code,
], [
'corporate_id' => $corporate_id,
'service_code' => $service_code,
'type' => 'speciality',
]);
}
$exclusion = $corporateServiceSpecialityRule->exclusions()->where('corporate_id', $corporate_id)->where('service_code', $service_code)->first();
// if($exclusion){
$exclusion_rule = $exclusion->rules()->updateOrCreate([
'exclusion_id' => $exclusion->id,
'name' => 'msc',
], [
'name' => 'msc',
'values' => $request->active ? 'm,s,c' : '',
]);
$exclusion_rule = $exclusion->rules()->updateOrCreate([
'exclusion_id' => $exclusion->id,
'name' => 'gender',
], [
'name' => 'gender',
'values' => $request->active ? 'male,female' : '',
]);
// }
}
}
$exclusion = $corporateServiceSpeciality->exclusions()->updateOrCreate([
'corporate_id' => $corporate_id,
'service_code' => $service_code,
], [
'corporate_id' => $corporate_id,
'service_code' => $service_code,
'type' => 'speciality',
]);
$selected_specialities = CorporateServiceSpeciality::query()
->where('corporate_service_id', $corporateService->id)
->where('active', true)
->with('speciality')
->get()
->pluck('speciality.name', 'speciality.id');
// return response()->json($selected_specialities);
return response()->json([
'selected_specialities' => $selected_specialities,
'service' => CorporateServiceConfigResource::make($corporateService),
]);
}
public function storeExclusion(Request $request, $corporate_id, $service_code)
{
$corporateService = CorporateService::query()
->where('corporate_id', $corporate_id)
->where('service_code', $service_code)
->first();
$corporateServiceSpeciality = CorporateServiceSpeciality::where('corporate_service_id', $corporateService->id)
->where('speciality_id', $request->speciality_id)
->with('exclusions.rules')
->first();
if (empty($corporateServiceSpeciality)) {
$corporateServiceSpeciality = CorporateServiceSpeciality::create([
'corporate_service_id' => $corporateService->id,
'speciality_id' => $request->speciality_id,
'active' => false,
]);
$corporateServiceSpeciality->exclusions()->updateOrCreate([
'corporate_id' => $corporate_id,
'service_code' => $service_code,
], [
'corporate_id' => $corporate_id,
'service_code' => $service_code,
'type' => 'speciality',
]);
}
$exclusion = $corporateServiceSpeciality->exclusions()->where('corporate_id', $corporate_id)->where('service_code', $service_code)->first();
if ($request->type == 'msc') {
$value_input = $request->value;
$current_msc = $exclusion->rules()->where('name', 'msc')->first()->values ?? null;
if (!empty($current_msc)) {
$values = "";
if ($request->value == 'm' && $request->checked == "1") {
$values = $current_msc . "," . $value_input;
}
if ($request->value == 's' && $request->checked == "1") {
$values = $current_msc . "," . $value_input;
}
if ($request->value == 'c' && $request->checked == "1") {
$values = $current_msc . "," . $value_input;
}
if ($request->value == 'm' && $request->checked == "0") {
$values = str_replace($value_input, "", $current_msc);
$values = str_replace(",,", ",", $values);
$values = trim($values, ",");
}
if ($request->value == 's' && $request->checked == "0") {
$values = str_replace($value_input, "", $current_msc);
$values = str_replace(",,", ",", $values);
$values = trim($values, ",");
}
if ($request->value == 'c' && $request->checked == "0") {
$values = str_replace($value_input, "", $current_msc);
$values = str_replace(",,", ",", $values);
$values = trim($values, ",");
}
$exclusion_rule = $exclusion->rules()->updateOrCreate([
'exclusion_id' => $exclusion->id,
'name' => 'msc',
], [
'name' => 'msc',
'values' => $values,
]);
} else {
if ($request->value == 'm' && $request->checked == "1") {
$values = $value_input;
}
if ($request->value == 's' && $request->checked == "1") {
$values = $value_input;
}
if ($request->value == 'c' && $request->checked == "1") {
$values = $value_input;
}
$exclusion_rule = $exclusion->rules()->updateOrCreate([
'exclusion_id' => $exclusion->id,
'name' => 'msc',
], [
'name' => 'msc',
'values' => $values,
]);
}
}
if ($request->type == 'gender') {
$value_input = $request->value;
$current_gender = $exclusion->rules()->where('name', 'gender')->first()->values ?? null;
if (!empty($current_gender)) {
$values = "";
if ($request->value == 'male' && $request->checked == "1") {
$values = $current_gender . "," . $value_input;
}
if ($request->value == 'female' && $request->checked == "1") {
$values = $current_gender . "," . $value_input;
}
if ($request->value == 'male' && $request->checked == "0") {
if (substr($current_gender, 0, 4) == "male") {
$values = str_replace($value_input, "", $value_input) . substr($current_gender, 5, 10);
} else {
$values = str_replace($value_input, "", $value_input) . substr($current_gender, 0, 6);
}
}
if ($request->value == 'female' && $request->checked == "0") {
$values = str_replace($value_input, "", $current_gender);
$values = str_replace(",,", ",", $values);
$values = trim($values, ",");
}
$exclusion_rule = $exclusion->rules()->updateOrCreate([
'exclusion_id' => $exclusion->id,
'name' => 'gender',
], [
'name' => 'gender',
'values' => $values,
]);
} else {
if ($request->value == 'male' && $request->checked == "1") {
$values = $value_input;
}
if ($request->value == 'female' && $request->checked == "1") {
$values = $value_input;
}
$exclusion_rule = $exclusion->rules()->updateOrCreate([
'exclusion_id' => $exclusion->id,
'name' => 'gender',
], [
'name' => 'gender',
'values' => $values,
]);
}
}
if ($request->type == "min_age") {
$exclusion_rule = $exclusion->rules()->updateOrCreate([
'exclusion_id' => $exclusion->id,
'name' => 'min_age',
], [
'name' => 'min_age',
'values' => $request->value,
]);
}
if ($request->type == "max_age") {
$exclusion_rule = $exclusion->rules()->updateOrCreate([
'exclusion_id' => $exclusion->id,
'name' => 'max_age',
], [
'name' => 'max_age',
'values' => $request->value,
]);
}
if ($request->type == "plan") {
$value = $request->value;
foreach ($value as $key => $val) {
$item[] = $val['value'];
}
$plan = implode(",", $item);
$exclusion_rule = $exclusion->rules()->updateOrCreate([
'exclusion_id' => $exclusion->id,
'name' => 'plan',
], [
'name' => 'plan',
'values' => $plan ?? '',
]);
}
if ($request->type == "one_row") {
$data = $request->one_row;
$exclusion->rules()->updateOrCreate([
'exclusion_id' => $exclusion->id,
'name' => 'min_age',
], [
'name' => 'min_age',
'values' => $data['min_age'] ?? '',
]);
$exclusion->rules()->updateOrCreate([
'exclusion_id' => $exclusion->id,
'name' => 'max_age',
], [
'name' => 'max_age',
'values' => $data['max_age'] ?? '',
]);
$exclusion->rules()->updateOrCreate([
'exclusion_id' => $exclusion->id,
'name' => 'plan',
], [
'name' => 'plan',
'values' => $data['plan'] ?? '',
]);
}
$selected_specialities = CorporateServiceSpeciality::query()
->where('corporate_service_id', $corporateService->id)
->where('active', true)
->with('speciality')
->get()
->pluck('speciality.name', 'speciality.id');
$corporateService = CorporateService::query()
->where('corporate_id', $corporate_id)
->where('service_code', $service_code)
->with([
'configs', 'service',
'corporateServiceSpecialities',
'corporateServiceSpecialities.speciality',
'corporateServiceSpecialities.exclusions.rules'
])
->first();
return response()->json([
'selected_specialities' => $selected_specialities,
'service' => CorporateServiceConfigResource::make($corporateService),
]);
}
}

View File

@@ -0,0 +1,903 @@
<?php
namespace Modules\Internal\Http\Controllers\Api;
use App\Helpers\Helper;
use App\Models\DailyMonitoring;
use App\Models\RequestDailyMonitoring;
use App\Models\MedicalPlan;
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 App\Models\File;
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('confirmation-medical-letter', $db_response->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,
]);
// $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', $db_response->id, $file);
File::create([
'fileable_type' => 'App\Models\LaboratoriumResult',
'fileable_id' => $request->id,
'type' => 'laboratorium-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,
]);
// $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' => $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){
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' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'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' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'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' => $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){
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' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'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' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'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);
}
}
}

View File

@@ -0,0 +1,501 @@
<?php
namespace Modules\Internal\Http\Controllers\Api;
use App\Helpers\Helper;
use App\Models\OLDLMS\Livechat;
use App\Models\OLDLMS\Dokter;
use Illuminate\Http\Request;
use Carbon\Carbon;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Storage;
class DashboardController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index(Request $request)
{
$start_date = $request->start_date
? Carbon::parse($request->start_date)->startOfDay()->toDateTimeString()
: null;
$end_date = $request->end_date
? Carbon::parse($request->end_date)->endOfDay()->toDateTimeString()
: null;
$type = $request->type; // 0 = harian, 1 = mingguan, 2 = bulanan
$status = $request->status; // 0 = semua, 1 = berhasil, 2 = abandon, 3 = gagal
// Menyesuaikan filter berdasarkan type (harian, mingguan, bulanan)
// if ($type == 1) {
// // Filter mingguan
// $start_date = Carbon::now()->startOfWeek()->toDateTimeString();
// $end_date = Carbon::now()->endOfWeek()->toDateTimeString();
// } elseif ($type == 2) {
// // Filter bulanan
// $start_date = Carbon::now()->startOfMonth()->toDateTimeString();
// $end_date = Carbon::now()->endOfMonth()->toDateTimeString();
// }
// Query awal
$query = Livechat::query();
// Filter berdasarkan tanggal
if ($start_date && $end_date) {
$query->whereBetween('dRequestTime', [$start_date, $end_date]);
}
// Filter berdasarkan status
if ($status == 1) {
$query->where('sStatus', '2'); // Berhasil
} elseif ($status == 2) {
$query->where('sStatus', '1'); // Abandon
} elseif ($status == 3) {
$query->whereNotIn('sStatus', ['1', '2']); // Gagal (selain 1 dan 2)
}
$liveChat = $query->get();
// Mapping status transaksi
$statusMapping = [
"2" => "Berhasil",
"1" => "Abandon",
];
// Inisialisasi counter status
$statusCount = [
"Berhasil" => 0,
"Abandon" => 0,
"Gagal" => 0,
];
// Hitung jumlah status
foreach ($liveChat as $chat) {
$statusLabel = isset($statusMapping[$chat->sStatus])
? $statusMapping[$chat->sStatus]
: "Gagal";
$statusCount[$statusLabel]++;
}
// Format response seperti yang diminta
$transaksiData = [
["name" => "Berhasil", "value" => $statusCount["Berhasil"], "color" => "#4CAF50"],
["name" => "Gagal", "value" => $statusCount["Gagal"], "color" => "#F44336"],
["name" => "Abandon", "value" => $statusCount["Abandon"], "color" => "#9E9E9E"],
];
return response()->json($transaksiData);
}
public function listBarChart(Request $request)
{
$start_date = $request->start_date
? Carbon::parse($request->start_date)->startOfDay()
: Carbon::now()->startOfMonth();
$end_date = $request->end_date
? Carbon::parse($request->end_date)->endOfDay()
: Carbon::now()->endOfMonth();
$status = $request->status; // 0 = semua, 1 = berhasil, 2 = abandon, 3 = gagal
$type = $request->type; // 0 = harian, 1 = mingguan, 2 = bulanan
// Query awal
$query = Livechat::query();
// Filter berdasarkan rentang tanggal yang dimasukkan user
$query->whereBetween('dRequestTime', [$start_date, $end_date]);
// Filter berdasarkan status
if ($status == 1) {
$query->where('sStatus', '2'); // Berhasil
} elseif ($status == 2) {
$query->where('sStatus', '1'); // Abandon
} elseif ($status == 3) {
$query->whereNotIn('sStatus', ['1', '2']); // Gagal (selain 1 dan 2)
}
$liveChat = $query->get();
// Mengelompokkan data berdasarkan tipe request (harian, mingguan, atau bulanan)
$groupedData = [];
foreach ($liveChat as $chat) {
if ($type == 1) {
// Mingguan (contoh: "01 Jan 2025 - 07 Jan 2025")
$weekStart = Carbon::parse($chat->dRequestTime)->startOfWeek();
$weekEnd = Carbon::parse($chat->dRequestTime)->endOfWeek();
$groupKey = $weekStart->format('d M Y') . ' - ' . $weekEnd->format('d M Y');
} elseif ($type == 2) {
// Bulanan (contoh: "Jan 2025")
$groupKey = Carbon::parse($chat->dRequestTime)->translatedFormat('M Y');
} else {
// Harian (format "1 Jan 2025 - 2 Feb 2025")
$groupKey = Carbon::parse($chat->dRequestTime)->format('j M Y');
}
if (!isset($groupedData[$groupKey])) {
$groupedData[$groupKey] = [
"date" => $groupKey,
"Berhasil" => 0,
"Abandon" => 0,
"Gagal" => 0,
];
}
if ($chat->sStatus == "2") {
$groupedData[$groupKey]["Berhasil"]++;
} elseif ($chat->sStatus == "1") {
$groupedData[$groupKey]["Abandon"]++;
} else {
$groupedData[$groupKey]["Gagal"]++;
}
}
// Konversi hasil ke dalam array untuk response JSON
$result = array_values($groupedData);
return response()->json($result);
}
public function listDokter(Request $request)
{
$idDokter = [
'120866',
'107922',
'107921',
'107920',
'101192',
'99232',
'99230',
]; // List dokter
$listDokters = Dokter::with([])->whereIn('nIDUser', $idDokter)->get();
$result = $listDokters->map(function ($dokter) {
return [
'id' => $dokter->nIDUser,
'code' => $dokter->nIDUser,
'name' => $dokter->user ? $dokter->user->fullName : '-',
'online' => $dokter->sIsOnline,
];
});
return response()->json($result);
}
public function listPerformaDokter(Request $request)
{
$start_date = $request->start_date
? Carbon::parse($request->start_date)->startOfDay()
: Carbon::now()->startOfMonth();
$end_date = $request->end_date
? Carbon::parse($request->end_date)->endOfDay()
: Carbon::now()->endOfMonth();
$status = $request->status; // 0 = semua, 1 = berhasil, 2 = abandon, 3 = gagal
$type = $request->type; // 0 = harian, 1 = mingguan, 2 = bulanan
$nIDDokter = $request->nIDDokter;
// Query awal
$query = Livechat::with('doctor');
// Filter berdasarkan rentang tanggal yang dimasukkan user
$query->whereBetween('dRequestTime', [$start_date, $end_date]);
if (!empty($nIDDokter)) {
$query->whereIn('nIDDokter', $nIDDokter);
}
// Filter berdasarkan status
if ($status == 1) {
$query->where('sStatus', '2'); // Berhasil
} elseif ($status == 2) {
$query->where('sStatus', '1'); // Abandon
} elseif ($status == 3) {
$query->whereNotIn('sStatus', ['1', '2']); // Gagal
}
// Ambil data livechat
$liveChats = $query->get();
// Data akhir yang akan dikembalikan
$groupedData = [];
foreach ($liveChats as $chat) {
$dokterId = $chat->nIDDokter;
$dokterName = $chat->doctor->user->fullName ?? 'Unknown'; // Ambil nama dokter dari relasi
if (!isset($groupedData[$dokterId])) {
$groupedData[$dokterId] = [
"name" => $dokterName,
"Berhasil" => 0,
"Abandon" => 0,
"Gagal" => 0,
];
}
if ($chat->sStatus == "2") {
$groupedData[$dokterId]["Berhasil"]++;
} elseif ($chat->sStatus == "1") {
$groupedData[$dokterId]["Abandon"]++;
} else {
$groupedData[$dokterId]["Gagal"]++;
}
}
// Konversi hasil ke dalam array untuk response JSON
$result = array_values($groupedData);
return response()->json($result);
}
/**
* 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 search(Request $request)
{
return Icd::when($request->search ?? null, function($icd, $search) {
$icd->where('name', 'LIKE', '%'.$search.'%')
->orWhere('code', 'LIKE', '%'.$search.'%');
})->limit(10)->get();
}
public function import(Request $request, $id)
{
$request->validate([
'file' => 'required|file|mimes:xls,xlsx,csv,txt',
]);
$file_name = now()->getPreciseTimestamp(3).'-'.$request->file('file')->getClientOriginalName();
$file = $request->file('file')->storeAs('temp', $file_name);
$import = new ImportService();
$import->read(Storage::path('temp/'.$file_name));
$import->write(Storage::disk('public')->path('temp/result-'.$file_name), 'xsls');
$imported_icd_data = 0;
$failed_icd_data = [];
foreach ($import->sheetsIterator() as $sheetIndex => $sheet) {
$doc_headers_indexes = [];
foreach ($sheet->getRowIterator() as $index => $row) {
if ($index == 1) { // First Row Must be Header
foreach ($row->getCells() as $index => $cell) {
$title = $cell->getValue();
$title = preg_replace( "/\r|\n/", " ", $title );
$title = preg_replace('/\xc2\xa0/', " ", $title );
$title = rtrim($title);
$title = ltrim($title);
$doc_headers_indexes[$index] = $title;
}
// Write Header to File
$result_headers = array_merge($doc_headers_indexes, ['Ingest Code', 'Ingest Note']);
$import->addArrayToRow($result_headers);
// TODO Validate if First Row not Header
} else { // Next Row Should be Data
$row_data = [];
$row_map = [
0 => 'ICD_Code',
1 => 'Description',
];
foreach ($row->getCells() as $header_index => $cell) {
if (isset($row_map[$header_index])) {
$value = $cell->getValue();
$value = preg_replace( "/\r|\n/", " ", $value );
$value = preg_replace('/\xc2\xa0/', " ", $value );
$value = rtrim($value);
$value = ltrim($value);
$row_data[$row_map[$header_index]] = $cell->getValue();
}
}
try { // Process the Row Data
if (
empty($row_data['ICD_Code']) &&
empty($row_data['Description'])
) {
continue;
}
// Save the Row
$icdService = new IcdService();
$icdService->handleIcdRow($row_data, $id);
// Write Success Result to File
$import->addArrayToRow(array_merge($row_data, [
'Ingest Code' => 200,
'Ingest Note' => 'Success',
]), $sheet->getName());
$imported_icd_data++;
} catch (ImportRowException $e) {
// Write Data Validation Error to File
$import->addArrayToRow(array_merge($row_data, [
'Ingest Code' => $e->getCode(),
'Ingest Note' => $e->getMessage(),
]), $sheet->getName());
$failed_icd_data[] = ['row_number' => $index, 'error' => $e->getMessage(), 'data' => $row_data];
} catch (\Exception $e) {
throw new \Exception($e);
// Write Server Error to File
$import->addArrayToRow(array_merge($row_data, [
'Ingest Code' => 500,
'Ingest Note' => env('APP_DEBUG') ? $e->getMessage() : 'Server Error',
]), $sheet->getName());
$failed_icd_data[] = ['row_number' => $index, 'error' => $e->getMessage(), 'data' => $row_data];
}
}
}
break; // Only Read First Row
}
$import->reader->close();
Storage::delete('temp/'.$file_name);
$import->writer->close();
return [
'total_successed_row' => $imported_icd_data,
'total_failed_row' => count($failed_icd_data),
'failed_row' => $failed_icd_data,
'result_file' => [
'url' => Storage::disk('public')->url('temp/result-'.$file_name),
'name' => 'result-'.$file_name,
]
];
}
public function activation(Request $request, $diagnosis_id)
{
$request->validate([
'active' => 'required'
]);
$Icd = Icd::findOrFail($diagnosis_id);
$Icd->active = $request->active == '1';
if ($Icd->save()) {
return response()->json([
'icd' => $Icd,
'message' => 'Status Updated Successfully'
]);
}
}
public function generateIcdList(Request $request, $diagnosis_id){
// Mendapatkan data yang akan diekspor (misalnya, dari database)
$data = Icd::where('icd_template_id', $diagnosis_id)->get()->toArray();
// Membuat penulis entitas Spout
$writer = WriterEntityFactory::createXLSXWriter();
// Membuka penulis untuk menulis ke file
$writer->openToFile(public_path('files/TemplateICDList.xlsx'));
/** Create a style with the StyleBuilder */
$style = (new StyleBuilder())
->setFontBold()
->build();
// Menulis header kolom
$headers_map_to_table_fields = $this->icdService->listing_doc_headers;
$headerRow = WriterEntityFactory::createRowFromArray($headers_map_to_table_fields, $style);
$writer->addRow($headerRow);
// Menulis data
if (!empty($data)) {
foreach ($data as $item) {
$rowData = [
// $item['rev'], // Rev
// $item['version'], // Version
$item['code'], // Code
// $item['parent_code'], // Parent Code
$item['name'], // Name
// $item['description'], // Description
// $item['active'] == 1 ? 'Active' : 'Inactive', // Status
// $item['type'], // Type
];
$row = WriterEntityFactory::createRowFromArray($rowData);
$writer->addRow($row);
}
}
// Menutup penulis
$writer->close();
// Mengembalikan response untuk mengunduh file
$filePath = public_path('files/TemplateICDList.xlsx');
return Helper::responseJson([
'file_name' => "Diagnosis ICD List " . date('Y-m-d h:i:s'),
"file_url" => url('files/TemplateICDList.xlsx')
]);
}
}

View File

@@ -3,20 +3,40 @@
namespace Modules\Internal\Http\Controllers\Api;
use App\Models\Icd;
use App\Services\ImportService;
use App\Helpers\Helper;
use Illuminate\Contracts\Support\Renderable;
use Box\Spout\Reader\Common\Creator\ReaderEntityFactory;
use Box\Spout\Writer\Common\Creator\Style\StyleBuilder;
use Box\Spout\Common\Entity\Style\CellAlignment;
use Box\Spout\Common\Entity\Style\Color;
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
use Box\Spout\Common\Entity\Row;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Storage;
use Modules\Internal\Services\IcdService;
class DiagnosisController extends Controller
{
public function __construct(IcdService $icdService)
{
$this->icdService = $icdService;
}
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index(Request $request)
public function index(Request $request, $diagnosis_template_id)
{
$diagnosis = Icd::withTrashed()->filter($request->toArray())->paginate();
$diagnosis = Icd::query()
->filter($request->toArray())
->where('icd_template_id', '=', $diagnosis_template_id)
->orderBy('code', 'ASC')
->paginate(15);
return $diagnosis;
}
@@ -87,4 +107,178 @@ class DiagnosisController extends Controller
->orWhere('code', 'LIKE', '%'.$search.'%');
})->limit(10)->get();
}
public function import(Request $request, $id)
{
$request->validate([
'file' => 'required|file|mimes:xls,xlsx,csv,txt',
]);
$file_name = now()->getPreciseTimestamp(3).'-'.$request->file('file')->getClientOriginalName();
$file = $request->file('file')->storeAs('temp', $file_name, 'public'); // 🚀 Paksa simpan ke local/public
$import = new ImportService();
$import->read(Storage::disk('public')->path('temp/'.$file_name));
$import->write(Storage::disk('public')->path('temp/result-'.$file_name), 'xsls');
$imported_icd_data = 0;
$failed_icd_data = [];
foreach ($import->sheetsIterator() as $sheetIndex => $sheet) {
$doc_headers_indexes = [];
foreach ($sheet->getRowIterator() as $index => $row) {
if ($index == 1) { // First Row Must be Header
foreach ($row->getCells() as $index => $cell) {
$title = $cell->getValue();
$title = preg_replace( "/\r|\n/", " ", $title );
$title = preg_replace('/\xc2\xa0/', " ", $title );
$title = rtrim($title);
$title = ltrim($title);
$doc_headers_indexes[$index] = $title;
}
// Write Header to File
$result_headers = array_merge($doc_headers_indexes, ['Ingest Code', 'Ingest Note']);
$import->addArrayToRow($result_headers);
// TODO Validate if First Row not Header
} else { // Next Row Should be Data
$row_data = [];
$row_map = [
0 => 'ICD_Code',
1 => 'Description',
];
foreach ($row->getCells() as $header_index => $cell) {
if (isset($row_map[$header_index])) {
$value = $cell->getValue();
$value = preg_replace( "/\r|\n/", " ", $value );
$value = preg_replace('/\xc2\xa0/', " ", $value );
$value = rtrim($value);
$value = ltrim($value);
$row_data[$row_map[$header_index]] = $cell->getValue();
}
}
try { // Process the Row Data
if (
empty($row_data['ICD_Code']) &&
empty($row_data['Description'])
) {
continue;
}
// Save the Row
$icdService = new IcdService();
$icdService->handleIcdRow($row_data, $id);
// Write Success Result to File
$import->addArrayToRow(array_merge($row_data, [
'Ingest Code' => 200,
'Ingest Note' => 'Success',
]), $sheet->getName());
$imported_icd_data++;
} catch (ImportRowException $e) {
// Write Data Validation Error to File
$import->addArrayToRow(array_merge($row_data, [
'Ingest Code' => $e->getCode(),
'Ingest Note' => $e->getMessage(),
]), $sheet->getName());
$failed_icd_data[] = ['row_number' => $index, 'error' => $e->getMessage(), 'data' => $row_data];
} catch (\Exception $e) {
throw new \Exception($e);
// Write Server Error to File
$import->addArrayToRow(array_merge($row_data, [
'Ingest Code' => 500,
'Ingest Note' => env('APP_DEBUG') ? $e->getMessage() : 'Server Error',
]), $sheet->getName());
$failed_icd_data[] = ['row_number' => $index, 'error' => $e->getMessage(), 'data' => $row_data];
}
}
}
break; // Only Read First Row
}
$import->reader->close();
Storage::delete('temp/'.$file_name);
$import->writer->close();
return [
'total_successed_row' => $imported_icd_data,
'total_failed_row' => count($failed_icd_data),
'failed_row' => $failed_icd_data,
'result_file' => [
'url' => Storage::disk('public')->url('temp/result-'.$file_name),
'name' => 'result-'.$file_name,
]
];
}
public function activation(Request $request, $diagnosis_id)
{
$request->validate([
'active' => 'required'
]);
$Icd = Icd::findOrFail($diagnosis_id);
$Icd->active = $request->active == '1';
if ($Icd->save()) {
return response()->json([
'icd' => $Icd,
'message' => 'Status Updated Successfully'
]);
}
}
public function generateIcdList(Request $request, $diagnosis_id){
// Mendapatkan data yang akan diekspor (misalnya, dari database)
$data = Icd::where('icd_template_id', $diagnosis_id)->get()->toArray();
// Membuat penulis entitas Spout
$writer = WriterEntityFactory::createXLSXWriter();
// Membuka penulis untuk menulis ke file
$writer->openToFile(public_path('files/TemplateICDList.xlsx'));
/** Create a style with the StyleBuilder */
$style = (new StyleBuilder())
->setFontBold()
->build();
// Menulis header kolom
$headers_map_to_table_fields = $this->icdService->listing_doc_headers;
$headerRow = WriterEntityFactory::createRowFromArray($headers_map_to_table_fields, $style);
$writer->addRow($headerRow);
// Menulis data
if (!empty($data)) {
foreach ($data as $item) {
$rowData = [
// $item['rev'], // Rev
// $item['version'], // Version
$item['code'], // Code
// $item['parent_code'], // Parent Code
$item['name'], // Name
// $item['description'], // Description
// $item['active'] == 1 ? 'Active' : 'Inactive', // Status
// $item['type'], // Type
];
$row = WriterEntityFactory::createRowFromArray($rowData);
$writer->addRow($row);
}
}
// Menutup penulis
$writer->close();
// Mengembalikan response untuk mengunduh file
$filePath = public_path('files/TemplateICDList.xlsx');
return Helper::responseJson([
'file_name' => "Diagnosis ICD List " . date('Y-m-d h:i:s'),
"file_url" => url('files/TemplateICDList.xlsx')
]);
}
}

Some files were not shown because too many files have changed in this diff Show More