736 Commits

Author SHA1 Message Date
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
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
2348 changed files with 102749 additions and 55760 deletions

0
.editorconfig Executable file → Normal file
View File

83
.env-example Normal file
View File

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

View File

@@ -1,59 +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=
OLDLMS_DB_CONNECTION=mysql
OLDLMS_DB_HOST=127.0.0.1
OLDLMS_DB_PORT=3306
OLDLMS_DB_DATABASE=linksehat
OLDLMS_DB_USERNAME=mysql
OLDLMS_DB_PASSWORD=password
BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DISK=local
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
MEMCACHED_HOST=127.0.0.1
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
AWS_USE_PATH_STYLE_ENDPOINT=false
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

0
.gitattributes vendored Executable file → Normal file
View File

0
.gitignore vendored Executable file → Normal file
View File

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

0
Modules/Client/Config/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Config/config.php Executable file → Normal file
View File

0
Modules/Client/Console/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Database/Migrations/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Database/Seeders/.gitkeep Executable file → Normal file
View File

View File

0
Modules/Client/Database/factories/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Entities/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Http/Controllers/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Http/Controllers/Api/AuthController.php Executable file → Normal file
View File

View File

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

View File

@@ -2,62 +2,275 @@
namespace Modules\Client\Http\Controllers\Api;
use Illuminate\Http\Request;
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
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
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)
]);
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
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;
$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();
$results['documents'] = $documents;
return Helper::responseJson($results);
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
public function requestFiles(Request $request, $corporate_id, $claim_id)
{
//
$claim_id = Crypt::decrypt($claim_id);
if ($request->hasFile('fileDiagnosis')) {
foreach ($request->fileDiagnosis as $file) {
$pathFile = File::storeFile('claim-diagnosis', $claim_id, $file);
File::updateOrCreate([
'fileable_type'=>'App\Models\ClaimRequest',
'fileable_id' => $claim_id,
'type' => 'claim-diagnosis',
'name' => File::getFileName('claim-diagnosis', $claim_id, $file),
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
}
}
if ($request->hasFile('fileKondisis')) {
foreach ($request->fileKondisis as $file) {
$pathFile = File::storeFile('claim-kondisi', $claim_id, $file);
File::updateOrCreate([
'fileable_type'=>'App\Models\ClaimRequest',
'fileable_id' => $claim_id,
'type' => 'claim-kondisi',
'name' => File::getFileName('claim-kondisi', $claim_id, $file),
'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) {
$pathFile = File::storeFile('claim-result', $claim_id, $file);
File::updateOrCreate([
'fileable_type'=>'App\Models\ClaimRequest',
'fileable_id' => $claim_id,
'type' => 'claim-result',
'name' => File::getFileName('claim-result', $claim_id, $file),
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
}
}
return Helper::responseJson(data: $request->toArray(), message: 'Invoice Success Uploaded');
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
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);
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
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,254 @@
<?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 = 'CP';
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,
'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,
'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,
'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_number = ClaimRequest::max('code');
// $next_number = empty($last_number) ? 1 : ((int) explode('-', $last_number)[2] + 1);
// return self::makeCode($next_number);
$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);
// Menghasilkan kode dengan format yang diinginkan
return self::$code_prefix . '-' . str_pad($next_number, 5, '0', STR_PAD_LEFT);
}
}

View File

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

View File

@@ -37,7 +37,10 @@ class CorporateManageController extends Controller
*/
public function show($corporate_id)
{
//
$userLogin = Auth::user();
$corporate = $userLogin->managedCorporates()->where('corporates.id', $corporate_id)->first();
return response()->json($corporate);
}
/**

View File

@@ -4,109 +4,242 @@ 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\MemberResources;
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;
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)
{
$limit = $request->has('per_page') ? $request->per_page : 10;
$members = Member::query()
->whereHas('employeds', function ($corporateEmployee) use ($corporate_id) {
$corporateEmployee->where('corporate_id', $corporate_id);
})->when($request->input('search'), function ($query, $search) {
$query->where('member_id', 'like', "%" . $search . "%")
->orWhere('name', 'like', "%" . $search . "%");
});
if ($request->input('claimMember') === 'false') {
$members = $members->when($request->input('division'), function ($division, $division_id) {
$division->whereHas('division', function ($corporateEmployee) use ($division_id) {
$corporateEmployee->where('division_id', $division_id);
});
})->when($request->has('orderBy'), function ($query) use ($request) {
$query->orderBy($request->orderBy, $request->order);
});
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)));
}
// else {
// $members = $members->get();
// return response()->json(MemberResources::collection($members));
// }
$members->with('currentPlan');
$members->withSum('claims', 'total_claim');
$members = $members->paginate($limit);
// return $members;
return response()->json(Helper::paginateResources(MemberResources::collection($members)));
}
/**
* Show the form for creating a new resource.
* @return Renderable
*/
public function create()
public function show($corporate_id, $person_id)
{
return view('client::create');
$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));
}
/**
* Store a newly created resource in storage.
* @param Request $request
* @return Renderable
*/
public function store(Request $request)
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')
]);
}
/**
* Show the specified resource.
* @param int $id
* @return Renderable
*/
public function show($id)
public function showPerMember(Request $request, $corporate_id, $member_id)
{
return view('client::show');
$per_page = $request->has('per_page') ? $request->input('per_page') : 10;
$data = Member::query()
->with(['requestLogs'])
->whereHas('currentCorporate', function ($query) use ($corporate_id) {
$query->where('corporate_id', $corporate_id);
})
->find($member_id);
return response()->json(['full_name' => $data->full_name ?? null, 'paginations' => Helper::paginateResources(DataListClaimMemberResource::collection($data->requestLogs()->paginate($per_page)))]);
}
/**
* Show the form for editing the specified resource.
* @param int $id
* @return Renderable
*/
public function edit($id)
public function serviceMonitoring(int $corporate_id, int $request_log_id)
{
return view('client::edit');
}
$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,created_at,subject,body_temperature,sistole,diastole,respiration_rate,analysis,lab_date,provider,examination' => [
'requestLogMedicalPlans:request_log_daily_monitoring_id,plan,type'
],
'service:code,name',
])
->find($request_log_id, ['id', 'submission_date', 'discharge_date', 'member_id', 'service_code', 'organization_id']);
/**
* Update the specified resource in storage.
* @param Request $request
* @param int $id
* @return Renderable
*/
public function update(Request $request, $id)
{
//
}
$dataBenefit = [];
if (count($data->requestLogBenefits) > 0) {
$totalIncurred = 0;
$totalApprove = 0;
$totalNotApporve = 0;
$totalExcess = 0;
/**
* Remove the specified resource from storage.
* @param int $id
* @return Renderable
*/
public function destroy($id)
{
//
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));
}
}

View File

@@ -2,11 +2,12 @@
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 CorporatePolicyController extends Controller
{
@@ -14,25 +15,15 @@ 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);
$data = LimitResources::make($currentCorporate);
return response()->json($data);
}
/**
* 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,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

@@ -0,0 +1,93 @@
<?php
namespace Modules\Client\Http\Controllers\Api;
use App\Models\Member;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
class MemberController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function index(Request $request)
{
return Member::query()
->when($request->search, function ($query, $search) {
return $query->where('name', 'LIKE', '%' . $search . '%')
->orWhere('member_id', 'LIKE', '%' . $search . '%');
})
->with('currentPlan', 'currentCorporate')
->paginate();
}
/**
* Show the form for creating a new resource.
* @return Renderable
*/
public function create()
{
return view('internal::create');
}
/**
* Store a newly created resource in storage.
* @param Request $request
* @return Renderable
*/
public function store(Request $request)
{
//
}
/**
* Show the specified resource.
* @param int $id
* @return Renderable
*/
public function show($id)
{
return view('internal::show');
}
/**
* Show the form for editing the specified resource.
* @param int $id
* @return Renderable
*/
public function edit($id)
{
return view('internal::edit');
}
/**
* Update the specified resource in storage.
* @param Request $request
* @param int $id
* @return Renderable
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
* @param int $id
* @return Renderable
*/
public function destroy($id)
{
//
}
public function benefits($member_id)
{
$member = Member::findOrFail($member_id);
return response()->json($member->currentPlan->benefits()->select(['description', 'code', 'id'])->get());
}
}

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)
{
//
}
}

0
Modules/Client/Http/Controllers/Api/UserController.php Executable file → Normal file
View File

0
Modules/Client/Http/Controllers/ClientController.php Executable file → Normal file
View File

0
Modules/Client/Http/Middleware/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Http/Requests/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Providers/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Providers/ClientServiceProvider.php Executable file → Normal file
View File

0
Modules/Client/Providers/RouteServiceProvider.php Executable file → Normal file
View File

0
Modules/Client/Resources/assets/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Resources/assets/js/app.js Executable file → Normal file
View File

0
Modules/Client/Resources/assets/sass/app.scss Executable file → Normal file
View File

0
Modules/Client/Resources/lang/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Resources/views/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Resources/views/index.blade.php Executable file → Normal file
View File

View File

0
Modules/Client/Routes/.gitkeep Executable file → Normal file
View File

35
Modules/Client/Routes/api.php Executable file → Normal file
View File

@@ -4,8 +4,16 @@ use Modules\Client\Http\Controllers\Api\AuthController;
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;
/*
|--------------------------------------------------------------------------
@@ -28,12 +36,39 @@ Route::prefix('client')->group(function () {
Route::middleware('auth:sanctum')->group(function () {
Route::post('logout', [AuthController::class, 'logout'])->name('logout');
Route::get('user', [UserController::class, 'index']);
Route::get('data/{id}', [DataController::class, 'show']);
Route::put('data/{id}', [DataController::class, 'update']);
Route::post('update-family', [DataController::class, 'updateFamily']);
Route::get('corporate-manage', [CorporateManageController::class, 'index']);
Route::get('corporate-manage/{corporate_id}', [CorporateManageController::class, 'show']);
Route::prefix('{corporate_id}')->group(function () {
Route::post('search-member', [MemberController::class, 'index']);
Route::get('policy', [CorporatePolicyController::class, 'index']);
Route::get('division', [CorporateDivisionController::class, 'index']);
Route::get('members', [CorporateMemberController::class, 'index']);
Route::get('members/{id}', [CorporateMemberController::class, 'show']);
Route::get('export-members/list', [CorporateMemberController::class, 'generateMemberList']);
Route::get('alarm-center-members/{id}', [CorporateMemberController::class, 'showPerMember']);
Route::get('service-monitoring/{request_log_id}', [CorporateMemberController::class, 'serviceMonitoring']);
Route::get('claims/status', [ClaimController::class, 'status']);
Route::get('claims', [ClaimController::class, 'index']);
Route::get('claims/export', [ClaimController::class, 'export']);
Route::get('claims/{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('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');
});
});

0
Modules/Client/Routes/web.php Executable file → Normal file
View File

0
Modules/Client/Tests/Feature/.gitkeep Executable file → Normal file
View File

0
Modules/Client/Tests/Unit/.gitkeep Executable file → Normal file
View File

View File

@@ -0,0 +1,41 @@
<?php
namespace Modules\Client\Transformers\AlarmCenter;
use Illuminate\Http\Resources\Json\JsonResource;
use App\Models\Service;
class DataListClaimMemberResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
$serviceData = Service::where('code', $this->service_code)->first();
if ($serviceData) {
$serviceName = $serviceData->name;
} else {
$serviceName = $this->service_cod;
}
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,
'service_type' => $serviceName,
'status' => $status,
];
}
}

View File

@@ -0,0 +1,103 @@
<?php
namespace Modules\Client\Transformers\AlarmCenter;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\Carbon;
class DataServiceMonitoring extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
return [
'companyName' => $this->member->currentCorporate->name ?? null,
'serviceCode' => $this->service_code ?? 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),
'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,
'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 $requestLogDailyMonitoring->created_at->format('d M Y');
})
->map(function ($groupedItems) {
return collect($groupedItems)
->map(function ($requestLogDailyMonitoring) {
return [
'time' => $requestLogDailyMonitoring->created_at->format('H:i') ?? null,
'status' => 'Done' ?? null,
'subject' => $requestLogDailyMonitoring->subject ?? null,
'bodyTemperature' => $requestLogDailyMonitoring->body_temperature ?? null,
'sistole' => $requestLogDailyMonitoring->sistole . 'mm[Hg]' ?? null,
'diastole' => $requestLogDailyMonitoring->diastole . 'mm[Hg]' ?? null,
'respirationRate' => $requestLogDailyMonitoring->respiration_rate . '/min' ?? 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,
];
})
->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->whenLoaded('requestLogDailyMonitorings', collect($this->requestLogDailyMonitorings)
->groupBy(function ($requestLogDailyMonitoring) {
return Carbon::parse($requestLogDailyMonitoring->lab_date)->format('d M Y');
})
->map(function ($groupedItems) {
return collect($groupedItems)
->map(function ($requestLogDailyMonitoring) {
return [
'code' => $requestLogDailyMonitoring->code,
'date' => Carbon::parse($requestLogDailyMonitoring->lab_date)->format('d M Y') ?? null,
'examination' => $requestLogDailyMonitoring->examination ?? null,
'location' => $requestLogDailyMonitoring->provider ?? null,
];
})
->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' => $myLimitTotal ? (($myLimitBalance / $myLimitTotal) * 100) : 0,
],
'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,27 @@
<?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,
'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

@@ -1,6 +1,6 @@
<?php
namespace Modules\Client\Transformers;
namespace Modules\Client\Transformers\Dashboard;
use Illuminate\Http\Resources\Json\JsonResource;
@@ -14,19 +14,19 @@ class MemberResources extends JsonResource
*/
public function toArray($request)
{
// dd($this->currentPlans);
return [
'id' => $this->id,
'memberId' => $this->member_id,
'fullName' => $this->full_name,
$this->mergeWhen($request->input('claimMember') === 'false', [
'division' => $this->division->name ?? '',
'status' => $this->active
]),
'division' => $this->division_name ?? '',
'limit' => [
'current' => $this->claims_sum_total_claim,
'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()
];
}
}

0
Modules/Client/composer.json Executable file → Normal file
View File

0
Modules/Client/module.json Executable file → Normal file
View File

0
Modules/Client/package.json Executable file → Normal file
View File

0
Modules/Client/webpack.mix.js Executable file → Normal file
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

@@ -12,33 +12,48 @@ 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;
class AuthController extends Controller
{
public function login(Request $request)
{
$request->validate([
$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']),
]);
$user = User::query()
->where('email', $request->email)
->first();
if (!$user) {
return response(['message' => 'User Tidak Ditemukan'], 404);
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 response(['message' => 'Password Salah'], 403);
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);
}
return response([
'message' => 'Selamat Datang',
'user' => $user,
'token' => $user->createToken('app')->plainTextToken
]);
}
public function logout(Request $request)

View File

@@ -16,6 +16,9 @@ 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
{
@@ -23,6 +26,7 @@ class ClaimRequestController extends Controller
* Display a listing of the resource.
* @return Renderable
*/
private static $code_prefix = 'CRQ-H';
public function index(request $request)
{
$claimRequests = ClaimRequest::query()
@@ -60,69 +64,93 @@ class ClaimRequestController extends Controller
*/
public function store(Request $request)
{
$request->validate([
$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'])
]);
$member = Member::find($request->member_id);
$newClaimRequest = ClaimRequestService::storeClaimRequest(member: $member);
ClaimRequested::dispatch($newClaimRequest);
// Log History
$newClaimRequest->histories()->create([
'title' => 'New Claim Requested',
'description' => "Claim Requested for Member : {$member->member_id} - ({$member->full_name})",
'type' => 'info',
'system_origin' => 'hospital-portal'
]);
if ($request->hasFile('result_files')) {
foreach ($request->result_files as $file) {
$pathFile = File::storeFile('claim-result', $newClaimRequest->id, $file);
$newClaimRequest->files()->updateOrCreate([
'type' => 'claim-result',
'name' => File::getFileName('claim-result', $newClaimRequest->id, $file),
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
}
if ($validator->fails())
{
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
}
if ($request->hasFile('diagnosa_files')) {
foreach ($request->result_files as $file) {
$pathFile = File::storeFile('claim-diagnosis', $newClaimRequest->id, $file);
$newClaimRequest->files()->updateOrCreate([
'type' => 'claim-diagnosis',
'name' => File::getFileName('claim-diagnosis', $newClaimRequest->id, $file),
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
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();
$member = Member::find($request->member_id);
$newClaimRequest = ClaimRequestService::storeClaimRequest(
row: [],
code: $code,
member: $member,
paymentType: 'reimbursement',
serviceCode: $request->service_code,
requestLogID: $request->request_logs_id,
);
// 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) {
$pathFile = File::storeFile('additional-files', $newClaimRequest->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,
]);
}
}
DB::commit();
return ApiResponse::apiResponse('Success', $data, trans('Message.success'), 200);
}
catch (\Exception $e) {
DB::rollback();
return ApiResponse::apiResponse("Error", $data, $e->getMessage(), 500);
}
}
}
if ($request->hasFile('kondisi_files')) {
foreach ($request->result_files as $file) {
$pathFile = File::storeFile('claim-kondisi', $newClaimRequest->id, $file);
$newClaimRequest->files()->updateOrCreate([
'type' => 'claim-kondisi',
'name' => File::getFileName('claim-kondisi', $newClaimRequest->id, $file),
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
else
{
return ApiResponse::apiResponse("Error", $data, trans('Message.already_exists'), 409);
}
}
return Helper::responseJson(data: $request->toArray(), message: 'Claim Request berhasil ajukan!');
}
/**
@@ -136,7 +164,8 @@ class ClaimRequestController extends Controller
$claimRequest->load([
'histories' => function ($history) {
$history->latest();
}
},
'files',
]);
return Helper::responseJson(data: ClaimRequestShowResource::make($claimRequest));
@@ -177,16 +206,260 @@ class ClaimRequestController extends Controller
{
$claimRequest = ClaimRequest::findOrFail($claim_request_id);
$service_code = $claimRequest->service_code;
if ($claimRequest->status != 'approved') {
throw new Exception("Belum Teverifikasi", 1);
}
$member = Member::findOrFail($claimRequest->member_id)
->load(['currentPlan', 'currentPolicy', 'currentPlan.corporateBenefits', 'currentPlan.corporateBenefits.benefit']);
->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()
{
$last_number = ClaimRequest::withTrashed()->max('code');
$last_number_parts = explode('-', $last_number);
$next_number = count($last_number_parts) < 3 ? 1 : ((int) $last_number_parts[2] + 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);
// Menghasilkan kode dengan format yang diinginkan
return self::$code_prefix . '-' . 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) {
$pathFile = File::storeFile('claim-diagnosis', $claim_id, $file);
File::updateOrCreate([
'fileable_type'=>'App\Models\ClaimRequest',
'fileable_id' => $claim_id,
'type' => 'claim-diagnosis',
'name' => File::getFileName('claim-diagnosis', $claim_id, $file),
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
}
}
if ($request->hasFile('fileKondisis')) {
foreach ($request->fileKondisis as $file) {
$pathFile = File::storeFile('claim-kondisi', $claim_id, $file);
File::updateOrCreate([
'fileable_type'=>'App\Models\ClaimRequest',
'fileable_id' => $claim_id,
'type' => 'claim-kondisi',
'name' => File::getFileName('claim-kondisi', $claim_id, $file),
'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) {
$pathFile = File::storeFile('claim-result', $claim_id, $file);
File::updateOrCreate([
'fileable_type'=>'App\Models\ClaimRequest',
'fileable_id' => $claim_id,
'type' => 'claim-result',
'name' => File::getFileName('claim-result', $claim_id, $file),
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
}
}
return Helper::responseJson(data: $request->toArray(), message: 'Invoice Success Uploaded');
}
}

View File

@@ -7,6 +7,9 @@ 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;
class MemberController extends Controller
{
@@ -16,26 +19,103 @@ class MemberController extends Controller
*/
public function search(Request $request)
{
$request->validate([
$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;
$member = Member::query()
->where('member_id', $request->no_polis)
->where('birth_date', $request->birth_date)
->with(['person', 'currentCorporate',
// 'currentCorporate.corporateServices' => function ($corporateService) {
// $corporateService->where('status', 'active');
// },
// 'currentCorporate.corporateServices.service'
// 'currentPlan.benefits',
// 'currentPlan.corporateBenefit.plan',
'currentPlan.corporateBenefits.benefit'
])
->firstOrFail();
$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')
->select(
'organizations.id',
'organizations.name'
)
->get();
$res_data['providers'] = $providers;
return ApiResponse::apiResponse("Success", $res_data, trans('Message.success'), 200);
}
else
{
return ApiResponse::apiResponse("Data Not Found", $data, trans('Message.not_found'), 404);
}
return Helper::responseJson($member);
}
}
}

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);
}
}
}
}

View File

@@ -0,0 +1,754 @@
<?php
namespace Modules\HospitalPortal\Http\Controllers\Api;
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 Modules\Internal\Http\Controllers\Api\RequestLogController as primeCenterRequestLog;
use App\Helpers\Helper;
use App\Models\File;
use Dompdf\Dompdf;
use Dompdf\Options;
use Illuminate\Support\Facades\View;
class RequestLogController extends Controller
{
/**
* Display a listing of the resource.
* @return Renderable
*/
public function requestLog(Request $request)
{
$data = [
'member_id' => $request->member_id,
'service_code' => $request->service_code,
'organization_id' => $request->organization_id,
'organization_name' => $request->organization_name,
'address_provider' => $request->address_provider
];
$validator = Validator::make($request->all(), [
'member_id' => 'required',
'service_code' => 'required'
], [
'member_id.required' => trans('Validation.required',['attribute' => 'Member ID']),
'service_code.required' => trans('Validation.required',['attribute' => 'Service Code']),
]);
if($request->organization_id)
{
$validator = Validator::make($request->all(), [
'organization_id' => 'required',
'member_id' => 'required',
'service_code' => 'required'
], [
'organization_id.required' => trans('Validation.required',['attribute' => 'Provider 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
{
//insert data to organization
try {
if(!$request->organization_id)
{
// Memulai transaksi
DB::beginTransaction();
// Membuat singkatan dari nama rumah sakit
$singkatan = "";
$words = explode(' ', $request->organization_name);
foreach ($words as $word) {
$singkatan .= strtoupper(substr($word, 0, 1));
}
// Membuat kode organisasi
$kodeOrganisasi = "ORG000" . $singkatan;
// Insert data ke tabel organizations
$organization_id = DB::table('organizations')
->insertGetId([
'name' => $request->organization_name,
'code' => $kodeOrganisasi,
'type' => 'hospital',
'created_at' => now(),
'created_by' => auth()->user()->id
]);
// Insert data ke tabel addresses
$address_id = DB::table('addresses')
->insertGetId([
'text'=> $request->address_provider,
'addressable_type' => 'App\Models\Organization',
'addressable_id' => $organization_id,
'type' => 'hospital',
'created_at' => now(),
'created_by' => auth()->user()->id
]);
// Update main_address_id di tabel organizations
DB::table('organizations')
->where('organizations.id', '=', $organization_id)
->update(['main_address_id' => $address_id]);
// Commit transaksi
DB::commit();
$request->merge(['organization_id' => $organization_id]);
}
$requestLogControllerInstance = new PrimeCenterRequestLog();
$response = $requestLogControllerInstance->createNew($request);
if($response->original['statusCode'] == 200)
{
//send email
// Insert data notifications
$emailTo = 'alarm.center@linksehat.com';
$dataNotif = [
'email' => $emailTo,
'title' => 'Request LOG',
'description' => 'Request LOG from Hospital Portal',
'type' => 1,
'isUnRead' => true,
'created_by' => auth()->user()->id,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
];
$sendNotif = Helper::insertNotification($dataNotif);
// Send Email after insert notifications
if($sendNotif)
{
//send to alarm
$nameTo = 'Admin LinkSehat';
$dataEmail = [
'email' => $emailTo,
'name' => $nameTo,
'subject' => 'Request LOG from Hospital Portal'. ' '.date('Y-m-d H:i:s'),
'body' => View::make('email/notif_email', ['name' => $nameTo, 'link' => 'https://primecenter.linksehat.com/'])->render(),
];
Helper::sendEmail($dataEmail);
}
return ApiResponse::apiResponse("Success", $data, trans('Message.success'), 200);
}
else
{
return ApiResponse::apiResponse('Server Error', $data, trans('Message.server_error'), 500);
}
} catch (\Exception $e) {
// Rollback transaksi jika terjadi kesalahan
DB::rollBack();
// Handle error, bisa di-log atau dikembalikan sebagai response
return ApiResponse::apiResponse('Server Error', $data, $e->getMessage(), 500);
}
}
}
public function getRequestLog(Request $request)
{
$limit = $request->has('per_page') ? $request->input('per_page') : 10;
$results = DB::table('request_logs')
->leftJoin('members', 'request_logs.member_id', '=', 'members.id')
->when($request->input('search'), function ($query, $search) {
$query->where(function ($query) use ($search) {
$query->orWhere('request_logs.code', 'like', "%" . $search . "%")
->orWhere('members.name', 'like', "%" . $search . "%")
->orWhere('request_logs.submission_date', '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('request_logs.submission_date', '<', $start_date);
});
})
->when($request->input('status'), function ($query, $status) {
$query->where(function ($query) use ($status) {
if ($status === 'requested') {
$query->where('request_logs.status', '=', 'requested');
}
if ($status === 'reviewed') {
$query->where('request_logs.status', '=', 'approved');
}
if ($status === 'approved') {
$query->where('request_logs.status', '=', 'approved');
}
if ($status === 'declined') {
$query->where('request_logs.status', '=', 'declined');
}
});
})
->select(
'request_logs.id',
'request_logs.member_id',
'request_logs.final_log',
'request_logs.code',
'members.name as full_name',
'members.member_id as no_polis',
'members.birth_date',
DB::raw('
CASE
WHEN request_logs.status = "requested" THEN "requested"
WHEN request_logs.status = "approved" THEN "approved"
WHEN request_logs.status = "declined" THEN "declined"
WHEN request_logs.status = "reviewed" THEN "reviewed"
ELSE ""
END AS status
'),
DB::raw('
(SELECT organizations.name FROM organizations WHERE organizations.id = request_logs.organization_id LIMIT 1) AS provider
'),
'request_logs.submission_date')
->paginate($limit);
return response()->json(Helper::paginateResources($results));
}
public function getFinalLog(Request $request)
{
$limit = $request->has('per_page') ? $request->input('per_page') : 10;
$results = DB::table('request_logs')
->leftJoin('members', 'request_logs.member_id', '=', 'members.id')
->when($request->input('search'), function ($query, $search) {
$query->where(function ($query) use ($search) {
$query->orWhere('request_logs.code', 'like', "%" . $search . "%")
->orWhere('members.name', 'like', "%" . $search . "%")
->orWhere('request_logs.submission_date', 'like', "%" . $search . "%")
->orWhere('request_logs.service_code', 'like', "%" . ($search == 'outpatient' || $search == 'Outpatient' ? 'OP' : 'IP') . "%");
});
})
->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('request_logs.submission_date', '<', $start_date);
});
})
->when($request->input('status'), function ($query, $status) {
$query->where(function ($query) use ($status) {
if ($status === 'requested') {
$query->where('request_logs.status_final_log', '=', 'requested');
}
if ($status === 'reviewed') {
$query->where('request_logs.status_final_log', '=', 'approved');
}
if ($status === 'approved') {
$query->where('request_logs.status_final_log', '=', 'approved');
}
if ($status === 'declined') {
$query->where('request_logs.status_final_log', '=', 'declined');
}
});
})
->where('request_logs.final_log', '=', 1)
->select(
'request_logs.id',
'request_logs.final_log',
'request_logs.code',
'members.name as full_name',
'members.member_id as no_polis',
'members.id AS member_id',
'request_logs.service_code',
'members.birth_date',
DB::raw('
CASE
WHEN request_logs.status_final_log = "requested" THEN "requested"
WHEN request_logs.status_final_log = "approved" THEN "approved"
WHEN request_logs.status_final_log = "declined" THEN "declined"
WHEN request_logs.status_final_log = "reviewed" THEN "reviewed"
ELSE ""
END AS status
'),
'request_logs.submission_date',
DB::raw('
CASE
WHEN service_code = "OP" THEN "Outpatient"
WHEN service_code = "IP" THEN "Inpatient"
ELSE ""
END AS service_type
'),
DB::raw('
(SELECT organizations.name FROM organizations WHERE organizations.id = request_logs.organization_id LIMIT 1) AS provider
'),
DB::raw('
(Select request_log_id FROM claim_requests WHERE claim_requests.request_log_id = request_logs.id LIMIT 1) AS check_claim
')
)
->paginate($limit);
return response()->json(Helper::paginateResources($results));
}
public function requestFinalLog(Request $request)
{
$data = [
'request_logs_id' => $request->request_logs_id
];
$validator = Validator::make($request->all(), [
'request_logs_id' => 'required'
], [
'request_logs_id.required' => trans('Validation.required',['attribute' => 'Request Logs ID'])
]);
if ($validator->fails())
{
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
}
else
{
try {
DB::beginTransaction();
DB::table('request_logs')
->where('request_logs.id', '=', $request->request_logs_id)
->update([
'status_final_log' => 'requested',
'final_log' => 1
]);
if ($request->hasFile('result_files')) {
foreach ($request->result_files as $file) {
$pathFile = File::storeFile('final-log-result', $request->request_logs_id, $file);
File::updateOrCreate([
'fileable_type' => 'App\Models\RequestLog',
'fileable_id' => $request->request_logs_id,
'type' => 'final-log-result',
'name' => File::getFileName('final-log-result', $request->request_logs_id, $file),
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
}
}
if ($request->hasFile('diagnosa_files')) {
foreach ($request->diagnosa_files as $file) {
$pathFile = File::storeFile('final-log-diagnosis', $request->request_logs_id, $file);
File::updateOrCreate([
'fileable_type' => 'App\Models\RequestLog',
'fileable_id' => $request->request_logs_id,
'type' => 'final-log-diagnosis',
'name' => File::getFileName('final-log-diagnosis', $request->request_logs_id, $file),
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
}
}
if ($request->hasFile('kondisi_files')) {
foreach ($request->kondisi_files as $file) {
$pathFile = File::storeFile('final-log-kondisi', $request->request_logs_id, $file);
File::updateOrCreate([
'fileable_type' => 'App\Models\RequestLog',
'fileable_id' => $request->request_logs_id,
'type' => 'final-log-kondisi',
'name' => File::getFileName('final-log-kondisi', $request->request_logs_id, $file),
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
}
}
DB::commit();
//send email
// Insert data notifications
$emailTo = 'alarm.center@linksehat.com';
$dataNotif = [
'email' => $emailTo,
'title' => 'Request Final LOG',
'description' => 'Request Final LOG from Hospital Portal',
'type' => 1,
'isUnRead' => true,
'created_by' => auth()->user()->id,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s'),
];
$sendNotif = Helper::insertNotification($dataNotif);
// Send Email after insert notifications
if($sendNotif)
{
//send to alarm
$nameTo = 'Admin LinkSehat';
$dataEmail = [
'email' => $emailTo,
'name' => $nameTo,
'subject' => 'Request Final LOG from Hospital Portal'. ' '.date('Y-m-d H:i:s'),
'body' => View::make('email/notif_email', ['name' => $nameTo, 'link' => 'https://primecenter.linksehat.com/'])->render(),
];
Helper::sendEmail($dataEmail);
}
return ApiResponse::apiResponse('Success', $data, trans('Message.success'), 200);
}
catch (\Exception $e) {
DB::rollback();
return ApiResponse::apiResponse("Error", $data, $e->getMessage(), 500);
}
}
}
public function downlodLog($request_log_id)
{
$dataRequestLog = DB::table('request_logs')
->where('request_logs.id', '=', $request_log_id)
->first();
$data['dataRequestLog'] = $dataRequestLog;
$dataMember = DB::table('members')
->where('members.id', '=', $dataRequestLog->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 = "'.$dataRequestLog->service_code.'" LIMIT 1) AS jenis_perwatan
'),
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 = "'.$dataRequestLog->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();
$data['namaKaryawan'] = '';
if($dataMember->principal_id)
{
$dataNamaKaryawan = DB::table('members')
->where('members.member_id', '=', $dataMember->principal_id)
->select('members.name')
->first();
$data['namaKaryawan'] = $dataNamaKaryawan->name;
}
else{
$data['namaKaryawan'] = $dataMember->name;
}
$data['dataMember'] = $dataMember;
$data['request_logs'] = $dataRequestLog;
$dataRumahSakit = DB::table('organizations')
->leftJoin('addresses', 'addresses.addressable_id', '=', 'organizations.id')
->where('organizations.id', '=', $dataRequestLog->organization_id)
->where('addresses.addressable_type', '=', 'App\Models\Organization')
->select('organizations.name AS nama_rumahsakit', 'addresses.text AS alamat_rumahsakit')
->first();
$data['rumahSakit'] = $dataRumahSakit;
$logoPerusahaan = DB::table('files')
->leftJoin('corporate_employees', 'corporate_employees.corporate_id', '=', 'files.fileable_id')
->leftJoin('corporates', 'corporate_employees.corporate_id', '=', 'corporates.id')
->where('corporate_employees.member_id', '=', $dataMember->id)
->where('files.fileable_type', '=', 'App\Models\Corporate')
->select('files.path', 'corporates.code', 'corporates.name')
->orderBy('files.id', 'desc')
->first();
$data['logoPerusahaan'] = $logoPerusahaan;
$signatureDr = DB::table('signatures')
->leftJoin('corporate_manager', 'corporate_manager.user_id', '=', 'signatures.user_id')
->leftJoin('files', 'files.fileable_id', '=', 'signatures.id')
->where('files.fileable_type', '=', 'App\Models\Signature')
->where('signatures.type', '=', 1)
->where('corporate_manager.corporate_id', '=', $dataMember->id_perusahaan)
->select('files.path')
->first();
$data['signatureDr'] = $signatureDr;
$signatureAd = DB::table('signatures')
->leftJoin('files', 'files.fileable_id', '=', 'signatures.id')
->where('files.fileable_type', '=', 'App\Models\Signature')
->where('signatures.type', '=', 2)
->where('signatures.user_id', '=', $dataRequestLog->approved_by)
->select(
'files.path',
DB::raw('
(Select persons.name FROM users
LEFT JOIN persons ON users.person_id = persons.id
WHERE users.id = "'.$dataRequestLog->approved_by.'" LIMIT 1) AS name_approve
')
)
->first();
$data['signatureAd'] = $signatureAd;
$pdf = new Dompdf();
$options = new Options();
$options->set('isHtml5ParserEnabled', true);
$options->set('isPhpEnabled', true);
$options->set(['isRemoteEnabled' => true]);
$pdf->setOptions($options);
$pdf->setPaper('A4', 'portrait');
// Halaman 1
$html1 = view('pdf.req_log_page_1', $data);
// 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 downlodFinalLog($request_log_id)
{
$dataRequestLog = DB::table('request_logs')
->where('request_logs.id', '=', $request_log_id)
->first();
$data['dataRequestLog'] = $dataRequestLog;
$dataMember = DB::table('members')
->where('members.id', '=', $dataRequestLog->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 = "'.$dataRequestLog->service_code.'" LIMIT 1) AS jenis_perwatan
'),
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 = "'.$dataRequestLog->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();
$data['namaKaryawan'] = '';
if($dataMember->principal_id)
{
$dataNamaKaryawan = DB::table('members')
->where('members.member_id', '=', $dataMember->principal_id)
->select('members.name')
->limit(1)
->first();
$data['namaKaryawan'] = $dataNamaKaryawan->name;
}
else{
$data['namaKaryawan'] = $dataMember->name;
}
$data['dataMember'] = $dataMember;
$data['request_logs'] = $dataRequestLog;
$dataClaimLog = DB::table('request_log_benefits')
->where('request_log_benefits.request_log_id', '=', $request_log_id)
->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();
$data['dataClaimLog'] = $dataClaimLog;
$dataRumahSakit = DB::table('organizations')
->leftJoin('addresses', 'addresses.addressable_id', '=', 'organizations.id')
->where('organizations.id', '=', $dataRequestLog->organization_id)
->where('addresses.addressable_type', '=', 'App\Models\Organization')
->select('organizations.name AS nama_rumahsakit', 'addresses.text AS alamat_rumahsakit')
->first();
$data['rumahSakit'] = $dataRumahSakit;
$logoPerusahaan = DB::table('files')
->leftJoin('corporate_employees', 'corporate_employees.corporate_id', '=', 'files.fileable_id')
->leftJoin('corporates', 'corporate_employees.corporate_id', '=', 'corporates.id')
->where('corporate_employees.member_id', '=', $dataMember->id)
->where('files.fileable_type', '=', 'App\Models\Corporate')
->select('files.path', 'corporates.code', 'corporates.name')
->orderBy('files.id', 'desc')
->first();
$data['logoPerusahaan'] = $logoPerusahaan;
$signatureDr = DB::table('signatures')
->leftJoin('corporate_manager', 'corporate_manager.user_id', '=', 'signatures.user_id')
->leftJoin('files', 'files.fileable_id', '=', 'signatures.id')
->where('files.fileable_type', '=', 'App\Models\Signature')
->where('signatures.type', '=', 1)
->where('corporate_manager.corporate_id', '=', $dataMember->id_perusahaan)
->select('files.path')
->first();
$data['signatureDr'] = $signatureDr;
$signatureAd = DB::table('signatures')
->leftJoin('files', 'files.fileable_id', '=', 'signatures.id')
->where('files.fileable_type', '=', 'App\Models\Signature')
->where('signatures.type', '=', 2)
->where('signatures.user_id', '=', $dataRequestLog->approved_by)
->select(
'files.path',
DB::raw('
(Select persons.name FROM users
LEFT JOIN persons ON users.person_id = persons.id
WHERE users.id = "'.$dataRequestLog->approved_by.'" LIMIT 1) AS name_approve
')
)
->first();
$data['signatureAd'] = $signatureAd;
$pdf = new Dompdf();
$options = new Options();
$options->set('isHtml5ParserEnabled', true);
$options->set('isPhpEnabled', true);
$options->set(['isRemoteEnabled' => true]);
$pdf->setOptions($options);
// Halaman 1
$html1 = view('pdf.final_log_page_1', $data);
// Halaman 2
$html2 = view('pdf.final_log_page_2', $data);
// Gabung konten HTML dari dua tampilan
$htmlCombined = $html1 . $html2;
$pdf->loadHtml($htmlCombined);
$pdf->render();
$headers = [
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'inline; filename="file.pdf"',
];
return response($pdf->output(), 200, $headers);
}
}

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

@@ -5,6 +5,10 @@ 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\HospitalPortal\Http\Middleware\Authentication;
use Modules\HospitalPortal\Http\Middleware\Authorization;
/*
|--------------------------------------------------------------------------
@@ -16,29 +20,66 @@ use Modules\HospitalPortal\Http\Controllers\ClaimController;
| is assigned the "api" middleware group. Enjoy building your API!
|
*/
Route::prefix('v1')->group(function() {
Route::prefix('hospitalportal')->group(function () {
Route::prefix('hospitalportal')->group(function () {
Route::post('login', [AuthController::class, 'login'])->name('login');
Route::post('forget-password', [AuthController::class, 'forgetPassword'])->name('forget-password');
Route::post('verify-email', [AuthController::class, 'verifyEmail'])->name('verify-email');
Route::middleware('auth:sanctum')->group(function () {
Route::post('logout', [AuthController::class, 'logout'])->name('logout');
Route::get('/user', function (Request $request) {
return $request->user();
Route::middleware(Authentication::class)->group(function () {
Route::controller(AuthController::class)->group(function () {
Route::post('login', 'login');
});
});
Route::put('reset-password', [AuthController::class, 'resetPassword'])->name('resetPassword');
//Route::post('forget-password', [AuthController::class, 'forgetPassword'])->name('forget-password');
//Route::post('verify-email', [AuthController::class, 'verifyEmail'])->name('verify-email');
Route::get('claims', [ClaimController::class, 'index']);
Route::post('search-member', [MemberController::class, 'search']);
Route::middleware('auth:sanctum')->group(function () {
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::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');
});
//Notification
Route::controller(NotificationController::class)->group(function() {
//get notifications
Route::get('notifications/{user_id}', 'getNotifications');
//Set read notification
Route::post('set-read-notification', 'setReadNotification');
});
});
// 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']);
});
});
});

View File

@@ -3,6 +3,7 @@
namespace Modules\HospitalPortal\Transformers;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\Str;
class ClaimRequestShowResource extends JsonResource
{
@@ -25,6 +26,12 @@ class ClaimRequestShowResource extends JsonResource
'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;
}

0
Modules/Internal/Config/.gitkeep Executable file → Normal file
View File

0
Modules/Internal/Config/config.php Executable file → Normal file
View File

0
Modules/Internal/Console/.gitkeep Executable file → Normal file
View File

0
Modules/Internal/Database/Migrations/.gitkeep Executable file → Normal file
View File

0
Modules/Internal/Database/Seeders/.gitkeep Executable file → Normal file
View File

View File

0
Modules/Internal/Database/factories/.gitkeep Executable file → Normal file
View File

0
Modules/Internal/Entities/.gitkeep Executable file → Normal file
View File

0
Modules/Internal/Http/Controllers/.gitkeep Executable file → Normal file
View File

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,27 +4,33 @@ namespace Modules\Internal\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\User;
use App\Models\Person;
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 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)
->first();
->where(function ($query) use ($request) {
$query->where('email', $request->email)
->orWhere('username', $request->email);
})
->first();
if (!$user) {
return response(['message' => 'User Tidak Ditemukan'], 404);
@@ -91,7 +97,7 @@ class AuthController extends Controller
Event(new ForgetPassword($user));
// Mail::to($user->email)->send(new SendVerifyEmail($user));
Mail::to($user->email)->send(new SendVerifyEmail($user));
return response()->json($user);
}
@@ -125,4 +131,47 @@ class AuthController extends Controller
]);
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

File diff suppressed because it is too large Load Diff

View File

@@ -4,17 +4,29 @@ namespace Modules\Internal\Http\Controllers\Api;
use App\Helpers\Helper;
use App\Models\ClaimRequest;
use App\Models\Member;
use Exception;
use App\Models\Organization;
use App\Services\ClaimService;
use App\Services\ImportService;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Knp\Snappy\Pdf;
use Modules\Internal\Transformers\ClaimRequestResource;
use Modules\Internal\Transformers\ClaimRequestShowResource;
use Illuminate\Support\Facades\Storage;
use App\Services\ClaimRequestService;
use App\Exceptions\ImportRowException;
use App\Events\ClaimRequested;
use App\Models\File;
use App\Models\FilesMcu;
use Illuminate\Support\Facades\DB;
use App\Models\Member;
class ClaimRequestController extends Controller
{
private static $code_prefix = 'CRQ-C';
/**
* Display a listing of the resource.
* @return Renderable
@@ -24,6 +36,9 @@ class ClaimRequestController extends Controller
$claimRequests = ClaimRequest::query()
->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->orderBy, function ($q, $orderBy) use ($request) {
if (in_array($orderBy, ['submission_date', 'code'])) {
@@ -36,7 +51,7 @@ class ClaimRequestController extends Controller
->when($request->status, function($q, $status) {
$q->where('status', $status);
})
->with(['member', 'files'])
->with(['member', 'files', 'service', 'member.currentPolicy'])
->paginate();
return Helper::paginateResources(ClaimRequestResource::collection($claimRequests));
@@ -52,13 +67,150 @@ class ClaimRequestController extends Controller
}
/**
* Store a newly created resource in storage.
* @param Request $request
* @return Renderable
* Create New Calim Request
*
* Bagaskoro, BSD 03 November 2023
*/
public function store(Request $request)
public function createNew(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['file_penunjang'])) {
foreach ($_FILES['file_penunjang']['error']["member_" .$member_id] as $key => $value) {
if ($value == 0) {
$new_file_name = "claim-result-" . time() . "-" . uniqid();
$ekstension = "." . explode("/", $_FILES['file_penunjang']['type']["member_" .$member_id][$key])[1];
$pathFile = $folder . $new_file_name . $ekstension;
$tmp_name = $_FILES['file_penunjang']['tmp_name']["member_" .$member_id][$key];
$full_path = $_FILES['file_penunjang']['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,
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
}
}
}
}
if (isset($_FILES['file_diagnosa'])) {
foreach ($_FILES['file_diagnosa']['error']["member_" .$member_id] as $key => $value) {
if ($value == 0) {
$new_file_name = "claim-diagnosis-" . time() . "-" . uniqid();
$ekstension = "." . explode("/", $_FILES['file_diagnosa']['type']["member_" .$member_id][$key])[1];
$pathFile = $folder . $new_file_name . $ekstension;
$tmp_name = $_FILES['file_diagnosa']['tmp_name']["member_" .$member_id][$key];
$full_path = $_FILES['file_diagnosa']['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,
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
}
}
}
}
if (isset($_FILES['file_kondisi'])) {
foreach ($_FILES['file_kondisi']['error']["member_" .$member_id] as $key => $value) {
if ($value == 0) {
$new_file_name = "claim-kondisi-" . time() . "-" . uniqid();
$ekstension = "." . explode("/", $_FILES['file_kondisi']['type']["member_" .$member_id][$key])[1];
$pathFile = $folder . $new_file_name . $ekstension;
$tmp_name = $_FILES['file_kondisi']['tmp_name']["member_" .$member_id][$key];
$full_path = $_FILES['file_kondisi']['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,
'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(status: 'success', statusCode: 201, message: 'Claim Request berhasil ajukan!', data: $request->toArray());
}
/**
@@ -73,7 +225,10 @@ class ClaimRequestController extends Controller
'histories' => function ($history) {
$history->latest();
},
'files'
'files',
'member',
'claim',
'organization',
]);
return Helper::responseJson(data: ClaimRequestShowResource::make($claimRequest));
@@ -97,7 +252,83 @@ class ClaimRequestController extends Controller
*/
public function update(Request $request, $id)
{
//
$claimRequest = ClaimRequest::findOrFail($id);
$claimRequest->load([
'histories' => function ($history) {
$history->latest();
},
'files',
'member',
'claim',
'organization',
]);
$organization = Organization::where('code', $request->provider_code)->first();
if (!$organization) {
return response()->json(['error' => true, 'message' => 'Data tidak ditemukan'], 404);
}
$updateClaimRequest = ClaimRequestService::updateClaimRequest(organization_id: $organization->id, claim_request_id: $id);
ClaimRequested::dispatch($updateClaimRequest);
// Log History
$updateClaimRequest->histories()->create([
'title' => 'Update Claim Requested',
'description' => "Update Claim Requested for Member : {$claimRequest->member->member_id} - ({$claimRequest->member->full_name})",
'type' => 'update',
'system_origin' => 'prime-center'
]);
if ($request->hasFile('result_files')) {
foreach ($request->result_files as $file) {
$pathFile = File::storeFile('claim-result', $id, $file);
$updateClaimRequest->files()->updateOrCreate([
'type' => 'claim-result',
'name' => File::getFileName('claim-result', $id, $file),
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
}
}
if ($request->hasFile('diagnosa_files')) {
foreach ($request->diagnosa_files as $file) {
$pathFile = File::storeFile('claim-diagnosis', $id, $file);
$updateClaimRequest->files()->updateOrCreate([
'type' => 'claim-diagnosis',
'name' => File::getFileName('claim-diagnosis', $id, $file),
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
}
}
if ($request->hasFile('kondisi_files')) {
foreach ($request->kondisi_files as $file) {
$pathFile = File::storeFile('claim-kondisi', $id, $file);
$updateClaimRequest->files()->updateOrCreate([
'type' => 'claim-kondisi',
'name' => File::getFileName('claim-kondisi', $id, $file),
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
}
}
return response()->json([
'error' => false,
'message' => 'Update succses',
'data' => $updateClaimRequest],
200);
}
/**
@@ -114,20 +345,429 @@ class ClaimRequestController extends Controller
{
$claimRequest = ClaimRequest::findOrFail($id);
$member = $claimRequest->member;
$claimRequest->status = 'approved';
$claimRequest->save();
// Store Generated Documents
$logContent = view('pdf.guaranted_leter', compact('member', 'claimRequest'));
$claimRequest->generatedDocuments()->create([
'type' => 'guarantee_letter',
'title' => 'Guarantee Letter for '. $member->full_name,
'document_type' => 'type',
'html_content' => $logContent,
'system_origin' => 'primecenter'
]);
try {
// Create New Claim
$newClaim = ClaimService::storeClaim(member: $member, status: 'received', claimRequest: $claimRequest);
// Update Claim Request Status & Link with Claim
$claimRequest->status = 'approved';
$claimRequest->claim_id = $newClaim->id;
$claimRequest->save();
// Store Generated Documents LOG
$logContent = view('pdf.guaranted_leter', compact('member', 'claimRequest'));
$claimRequest->generatedDocuments()->create([
'type' => 'guarantee_letter',
'title' => 'Guarantee Letter for '. $member->full_name,
'document_type' => 'type',
'html_content' => $logContent,
'system_origin' => 'primecenter'
]);
// Claim Log
DB::table('claim_logs')
->insert([
'claim_request_id' => $id,
'status' => 'reviewed',
'date' => date('Y-m-d H:i:s'),
'description' => "Claim Requested Successfully Reviewed",
'system_origin' => 'prime-center',
'created_by' => auth()->user()->id,
'created_at' => date('Y-m-d H:i:s'),
'updated_at'=> date('Y-m-d H:i:s'),
]);
} catch (\Exception $e) {
return $e->getMessage();
}
return $claimRequest;
}
public function filesMcu(Request $request)
{
$request->validate([
'id' => 'required',
'memberid' => 'required'
]);
if ($request->hasFile('result_files')) {
$pathFile = File::storeFile('claim-result', $request->id, $request->result_files);
$data = [
'memberid' => $request->id,
'original_name' => $request->result_files->getClientOriginalName(),
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id
];
FilesMcu::create($data);
return Helper::responseJson(data: $request->toArray(), message: 'Berhasil tambah file MemberID '.$request->memberid.', silahkan lihat dilaporan');
}
else
{
return Helper::responseJson(data: $request->toArray(), message: 'Tidak ada file member yang ditambahkan');
}
}
public function importClaim(Request $request)
{
$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);
$fileWrite = Storage::disk('public')->path('temp/result-' . $file_name);
$fileRead = Storage::path('temp/' . $file_name);
$import = new ImportService();
$import->read($fileRead);
$import->write($fileWrite, 'xsls');
foreach ($import->sheetsIterator() as $sheetIndex => $sheet) {
if ($sheetIndex == 1) { // Rename First Sheet to Writer
$firstWriterSheet = $import->writer->getCurrentSheet();
$firstWriterSheet->setName($sheet->getName());
} else { // Add New Sheet to Writer
$nextWriterSheet = $import->writer->addNewSheetAndMakeItCurrent();
$nextWriterSheet->setName($sheet->getName());
}
$headers_map_to_table_fields = ClaimRequest::$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->addArrayToRow($result_headers);
$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;
}
// 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
$claimRequestService = new ClaimRequestService();
$claimRequestService->handleClaimRequestRow($row_data);
// Write Success Result to File
// $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(),
]), $sheet->getName());
}
// catch (\Exception $e) {
// // throw new \Exception($e);
// // Write Server Error to File
// // $import->read($fileRead);
// // $import->write($fileWrite, 'xsls');
// dd( $e->getMessage());
// $import->addArrayToRow(array_merge($row_data, [
// 'Ingest Code' => 500,
// 'Ingest Note' => env('APP_DEBUG') ? $e->getMessage() : 'Server Error',
// ]), $sheet->getName());
// }
}
}
}
$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 claimRequestDetail($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',
'claim_requests.code',
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;
$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();
$results['documents'] = $documents;
$dialog_submits = DB::table('claim_requests')
->leftJoin('members', 'claim_requests.member_id','=', 'members.id')
->where('claim_requests.id', $claimRequestId)
->select('claim_requests.code', 'members.name', 'claim_requests.submission_date', 'claim_requests.service_code','claim_requests.status')
->first();
$results['dialog_submits'] = $dialog_submits;
return Helper::responseJson($results);
}
public function invoiceFiles(Request $request, $claim_id)
{
if ($request->hasFile('invoice_files')) {
foreach ($request->invoice_files as $file) {
$pathFile = File::storeFile('claim-invoice', $claim_id, $file);
File::updateOrCreate([
'fileable_type'=>'App\Models\ClaimRequest',
'fileable_id' => $claim_id,
'type' => 'claim-invoice',
'name' => File::getFileName('claim-invoice', $claim_id, $file),
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
}
}
if($request->date)
{
DB::table('claim_requests')
->where('id', $claim_id)
->update(['invoice_date' => $request->date]);
}
return Helper::responseJson(data: $request->toArray(), message: 'Invoice Success Uploaded');
}
/**
* Get Claim Member - Infinite Scroll
*
* Bagaskoro, BSD 31 Oktober 2023
*/
public function getClaimMemberInfiniteScroll(Request $request)
{
$offset = 0;
$limit = 10;
$page = $request->get('page');
$keyword = $request->get('keyword');
if ($page > 1) {
$offset = ($page*$limit)-$limit;
}
$memberList = DB::table('members')
->select('id','member_id','name')
->where("name", "like", "%$keyword%")
->orWhere("member_id", "like", "%$keyword%")
->orderBy('created_at', 'asc')
->offset($offset)
->limit($limit)
->get();
$data = [];
if(count($memberList)>0){
$temp = [];
foreach($memberList as $d){
$serviceType = $this->getServiceMember($d->id);
$temp['id'] = $d->id;
$temp['member_id'] = $d->member_id;
$temp['name'] = $d->name;
$temp['service_type'] = $serviceType;
array_push($data, $temp);
}
}
return response()->json([
'error' => false,
'message' => "success",
'data' => [
'member_list'=> $data,
]
],200);
}
public function getServiceMember($id){
$service = DB::table('member_plans')
->select('plans.service_code as code', 'services.name')
->join('plans', 'member_plans.plan_id', '=', 'plans.id')
->join('services', 'plans.service_code', '=', 'services.code')
->where('member_id', $id)
->get()
->toArray();
return $service;
}
public static function getNextCode()
{
// $last_number = ClaimRequest::max('code');
// $next_number = empty($last_number) ? 1 : ((int) explode('-', $last_number)[2] + 1);
// return self::makeCode($next_number);
$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);
// Menghasilkan kode dengan format yang diinginkan
return self::$code_prefix . '-' . str_pad($next_number, 5, '0', STR_PAD_LEFT);
}
public function requestFiles(Request $request, $claim_id)
{
if ($request->hasFile('fileDiagnosis')) {
foreach ($request->fileDiagnosis as $file) {
$pathFile = File::storeFile('claim-diagnosis', $claim_id, $file);
File::updateOrCreate([
'fileable_type'=>'App\Models\ClaimRequest',
'fileable_id' => $claim_id,
'type' => 'claim-diagnosis',
'name' => File::getFileName('claim-diagnosis', $claim_id, $file),
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
}
}
if ($request->hasFile('fileKondisis')) {
foreach ($request->fileKondisis as $file) {
$pathFile = File::storeFile('claim-kondisi', $claim_id, $file);
File::updateOrCreate([
'fileable_type'=>'App\Models\ClaimRequest',
'fileable_id' => $claim_id,
'type' => 'claim-kondisi',
'name' => File::getFileName('claim-kondisi', $claim_id, $file),
'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) {
$pathFile = File::storeFile('claim-result', $claim_id, $file);
File::updateOrCreate([
'fileable_type'=>'App\Models\ClaimRequest',
'fileable_id' => $claim_id,
'type' => 'claim-result',
'name' => File::getFileName('claim-result', $claim_id, $file),
'original_name' => $file->getClientOriginalName(),
'extension' => $file->getClientOriginalExtension(),
'path' => $pathFile,
'created_by' => auth()->user()->id,
'updated_by' => auth()->user()->id,
]);
}
}
return Helper::responseJson(data: $request->toArray(), message: 'Invoice Success Uploaded');
}
}

View File

@@ -20,10 +20,12 @@ class CorporateBenefitController extends Controller
$benefits = CorporateBenefit::query()
->filter($request->all())
->where('corporate_id', $corporate_id)
->paginate(0)
->with('benefit', 'plan')
->paginate(10)
->appends($request->all());
return $benefits;
}
public function activation(Request $request, $benefit_id)
{
$request->validate([
@@ -31,9 +33,9 @@ class CorporateBenefitController extends Controller
]);
// abort(404);
$benefit = CorporateBenefit::findOrFail($benefit_id);
$benefit->active = $request->active == '1';
$benefit = CorporateBenefit::find($benefit_id);
$benefit->active = $request->active == 1 ? 0 : 1;
$benefit->reason = $request->reason;
if ($benefit->save()) {
return response()->json([
@@ -107,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

@@ -19,11 +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
{
@@ -77,9 +79,11 @@ class CorporateController extends Controller
*/
public function store(Request $request)
{
$request->validate([
'code' => 'required|regex:/^[a-zA-Z0-9]+$/',
'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',
@@ -90,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();
@@ -98,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,
@@ -118,9 +121,9 @@ class CorporateController extends Controller
$services = [
[
'id' => 1,
'name' => 'Out Patient',
'name' => 'Outpatient',
'code' => 'OP',
'description' => 'Out Patient',
'description' => 'Outpatient',
],
[
'id' => 2,
@@ -301,7 +304,8 @@ class CorporateController extends Controller
public function update(Request $request, $id)
{
$request->validate([
'code' => 'required|regex:/^[a-zA-Z0-9]+$/',
'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',
@@ -328,6 +332,7 @@ class CorporateController extends Controller
['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,
@@ -376,13 +381,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([
@@ -397,14 +404,14 @@ 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::with(['plans'])->findOrFail($corporate_id);
$fileWrite = Storage::disk('public')->path('temp/result-' . $file_name);
$fileRead = Storage::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'])) {
@@ -427,9 +434,11 @@ class CorporateController extends Controller
// 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
@@ -444,12 +453,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') {
@@ -457,14 +464,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(),
@@ -472,6 +482,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',
@@ -495,7 +507,18 @@ class CorporateController extends Controller
];
}
public function importDocumentExample($document_type)
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':
@@ -509,16 +532,304 @@ class CorporateController extends Controller
'file_name' => "Corporate Membership Import.xlsx",
"file_url" => url('files/Corporate Membership Import.xlsx')
]);
break;
break;
case 'diagnosis-exclusion':
return Helper::responseJson([
'file_name' => "Corporate Exclusion Import.xlsx",
"file_url" => url('files/Corporate Exclusion Import.xlsx')
]);
break;
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 Format Claim.xlsx",
"file_url" => url('files/Template Format Claim.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.xlsx",
"file_url" => url('files/Template Import Request LOG.xlsx.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);
// $importLog = $corporate->importLogs()->create([
// 'type' => 'diagnosis-exclusions',
// 'file_path' => $file,
// 'status' => 'pending',
// 'progress' => 0,
// ]);
$import = new ImportService();
$import->read(Storage::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

@@ -6,6 +6,7 @@ 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;
@@ -15,8 +16,13 @@ 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
{
@@ -28,14 +34,11 @@ 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',
@@ -44,25 +47,46 @@ class CorporateMemberController extends Controller
// return $claim->whereBetween('requested_at', [now()->startOfYear(), now()->endOfYear()]);
// return $claim->used(now()->startOfYear(), now()->endOfYear());
},
'currentPlans',
'currentPlan',
'currentPlan.benefits'
// '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,
]);
}
])
->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')
->paginate()
->appends($request->all());
return Helper::paginateResources(MemberDataTableResource::collection($members));
}
public function activation(Request $request, $member_id)
{
$request->validate([
'active' => 'required'
'active' => 'required',
'reason' => 'required',
]);
// abort(404);
$member = Member::findOrFail($member_id);
$member->active = $request->active == '1';
$member->active = $request->active;
$member->reason = $request->reason;
if ($member->save()) {
return response()->json([
@@ -135,6 +159,9 @@ class CorporateMemberController extends Controller
public function import(Request $request, $corporate_id)
{
// setting tambahan php
Helper::setCustomPHPIniSettings();
$request->validate([
'file' => 'required|file|mimes:xls,xlsx,csv,txt',
]);
@@ -143,7 +170,7 @@ class CorporateMemberController extends Controller
$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 = ReaderEntityFactory::createXLSXReader(Storage::path('temp/' . $file_name));
$reader->open(Storage::path('temp/' . $file_name));
$writer = WriterEntityFactory::createXLSXWriter();
@@ -158,6 +185,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) {
@@ -181,9 +209,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);
@@ -215,11 +241,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),
@@ -234,16 +260,35 @@ class CorporateMemberController extends Controller
public function generateLog(Request $request, $member_id)
{
$member = Member::findOrFail($member_id)
->load([
'currentPlan',
'currentPolicy',
'currentPlan.corporateBenefits' => function ($benefit) use ($request) {
return $benefit->when($request->benefit_ids, function ($q, $ids) {
return $q->whereIn('benefit_id', $ids);
});
},
'currentPlan.corporateBenefits.benefit']);
$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();
@@ -251,4 +296,180 @@ class CorporateMemberController extends Controller
$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

@@ -25,6 +25,31 @@ class CorporatePlanController extends Controller
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([
@@ -34,7 +59,8 @@ class CorporatePlanController extends Controller
// abort(404);
$plan = CorporatePlan::findOrFail($plan_id);
$plan->active = $request->active == '1';
$plan->active = $request->active == 1 ? 0 : 1;
$plan->reason = $request->reason;
if ($plan->save()) {
return response()->json([
@@ -109,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

@@ -136,6 +136,7 @@ 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)
@@ -143,7 +144,8 @@ class CorporateServiceController extends Controller
// ->with('configs', 'service')
->first();
$corporateService->fill([
'status' => $request->status == 'active' ? 'active' : 'inactive'
'status' => $request->status == 'active' ? 'inactive' : 'active',
'reason' => $request->reason
]);
$corporateService->save();
@@ -152,8 +154,6 @@ 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()
@@ -161,7 +161,6 @@ class CorporateServiceController extends Controller
->where('service_code', $service_code)
->first();
$corporateServiceSpeciality = CorporateServiceSpeciality::updateOrCreate([
'corporate_service_id' => $corporateService->id,
'speciality_id' => $request->speciality_id,
@@ -191,6 +190,116 @@ class CorporateServiceController extends Controller
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)
{
@@ -225,12 +334,10 @@ class CorporateServiceController extends Controller
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;
@@ -436,4 +543,6 @@ class CorporateServiceController extends Controller
'service' => CorporateServiceConfigResource::make($corporateService),
]);
}
}

View File

@@ -0,0 +1,410 @@
<?php
namespace Modules\Internal\Http\Controllers\Api;
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 App\Models\File;
/**
* 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'
];
}
/**
* Member List
*/
public function GetMemberList()
{
$memberList = DB::table('request_logs')
->leftJoin('members', 'request_logs.member_id', '=', 'members.id')
->leftJoin('member_plans', 'request_logs.member_id', '=', 'member_plans.member_id')
->leftJoin('organizations', 'organizations.id', '=', 'request_logs.organization_id')
->select('members.member_id','members.name','members.members_effective_date AS startdate','members.members_expire_date AS enddate', 'request_logs.submission_date as addmision_date', 'organizations.name as provider' )
->where('request_logs.service_code', 'IP')
->where('request_logs.status_final_log', 'approved')
->groupBy('request_logs.member_id')
->orderBy('request_logs.created_at', 'desc')
->get();
return response()->json([
'error' => false,
'message' => "success",
'data' => [
'member_list'=> $memberList,
]
],200);
}
/**
* 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.status_final_log', 'approved')
->where("request_logs.member_id", "=", $memberDetail->id)
->orderBy("request_logs.created_at", "desc")
->get();
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')
->where('code', $request_code)
->first();
$detail_list = RequestDailyMonitoring::where('request_log_id', empty($request_logs) == false ? $request_logs->id : '')
->orderBy("created_at", "desc")
->get();
return response()->json([
'error' => false,
'message' => "success",
'data' => [
'detail_list'=> $detail_list,
]
],200);
}
/**
* 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,
'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',
'body_temperature' => 'required|numeric',
'sistole' => 'required|numeric',
'diastole' => 'required|numeric',
'respiration_rate' => 'required|numeric',
'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,
'subject' => $request->subject,
'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) {
$name = 'labresult-' . uniqid();
$extension= $file->getClientOriginalExtension();
$fileName = $name . '.' . $extension;
$path = $file->storeAs($this->path_for_store, $fileName);
File::create([
'fileable_type' => 'App\Models\LaboratoriumResult',
'fileable_id' => $db_response->id,
'type' => 'confirmation-medical-letter',
'name' => $name,
'original_name' => $fileName,
'extension' => $extension,
'path' => $path,
]);
}
}
if ($request->medical_action_letter){
foreach ($request->medical_action_letter as $file) {
$name = 'labresult-' . uniqid();
$extension= $file->getClientOriginalExtension();
$fileName = $name . '.' . $extension;
$path = $file->storeAs($this->path_for_store, $fileName);
File::create([
'fileable_type' => 'App\Models\LaboratoriumResult',
'fileable_id' => $db_response->id,
'type' => 'medical-action-letter',
'name' => $name,
'original_name' => $fileName,
'extension' => $extension,
'path' => $path,
]);
// $file->storeAs($this->path_for_store, $fileName);
}
}
if ($request->result){
foreach ($request->result as $file) {
$name = 'labresult-' . uniqid();
$extension= $file->getClientOriginalExtension();
$fileName = $name . '.' . $extension;
$path = $file->storeAs($this->path_for_store, $fileName);
File::create([
'fileable_type' => 'App\Models\LaboratoriumResult',
'fileable_id' => $db_response->id,
'type' => 'laboratorium-result',
'name' => $name,
'original_name' => $fileName,
'extension' => $extension,
'path' => $path,
]);
// $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);
}
}
/**
* 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

@@ -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);
$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

@@ -7,6 +7,7 @@ use App\Helpers\Helper;
use App\Models\Corporate;
use App\Models\CorporateService;
use App\Models\Exclusion;
use App\Models\ExclusionImport;
use App\Models\Icd;
use App\Models\ImportLog;
use App\Services\ImportService;
@@ -17,6 +18,8 @@ use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Storage;
use Modules\Internal\Services\ExclusionService;
use Modules\Internal\Transformers\DiagnosisExclusionResource;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class DiagnosisExclusionController extends Controller
{
@@ -37,6 +40,22 @@ class DiagnosisExclusionController extends Controller
return Helper::paginateResources(DiagnosisExclusionResource::collection($exclusions));
}
public function listDiagnosis(Request $request, $corporate_id){
$exclusion = Exclusion::query()
->where('corporate_id', $corporate_id)
->where('type', 'diagnosis')
->where('deleted_at', null)
// ->with(['rules'])
->get('exclusionable_id')->toArray();
$icd = Icd::query()
->whereNotIn('id', $exclusion)
->limit(100)
->get()
->toArray();
return Helper::responseJson($icd);
}
/**
* Show the form for creating a new resource.
* @return Renderable
@@ -216,7 +235,13 @@ class DiagnosisExclusionController extends Controller
$import->reader->close();
Storage::delete('temp/' . $file_name);
$import->writer->close();
ExclusionImport::updateOrCreate([
'corporate_id' => $corporate_id
],[
'file_name' => $file_name,
'file_path' => 'temp/result-' . $file_name,
]);
return [
// 'total_successed_row' => $imported_plan_data,
// 'total_failed_row' => count($failed_plan_data),
@@ -268,6 +293,7 @@ class DiagnosisExclusionController extends Controller
$gender = implode(",", $gender);
$gender = trim($gender, ",");
$exclusion->rules()->corporate_id = $corporate_id;
$exclusion->rules()->updateOrCreate([
'exclusion_id' => $exclusion->id,
@@ -293,7 +319,6 @@ class DiagnosisExclusionController extends Controller
'values' => $data['min_age'] ?? '',
]);
$exclusion->rules()->updateOrCreate([
'exclusion_id' => $exclusion->id,
'name' => 'max_age',
@@ -320,4 +345,85 @@ class DiagnosisExclusionController extends Controller
// return $exclusions;
return Helper::paginateResources(DiagnosisExclusionResource::collection($exclusions));
}
/**
* Bagaskoro BSD 20-10-2023
*
* Fungsi untuk get detil exclusion
*/
public function detilExclusion(Request $request, $corporate_id, $id_exclusion)
{
$corporate = Corporate::query()
->with(['currentPolicy', 'plans'])
->withCount('corporatePlans')
->withCount('employees')
->findOrFail($corporate_id);
$plans = $corporate['plans']->map(function ($plan) {
return $plan['code'];
});
$exclusions = Exclusion::query()
->where('id', $id_exclusion)
->where('type', 'diagnosis')
->where('deleted_at', null)
->with(['rules'])
->get();
$exclusion = DiagnosisExclusionResource::collection($exclusions);
return response()->json([
'error' => false,
'messages' => "success",
'data' => [
'exclusion' => empty($exclusion) ? [] : $exclusion[0],
'plans' => $plans,
]
],200);
}
/**
* Bagaskoro BSD 19-10-2023
*
* Fungsi untuk update status active
*/
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',
'digits_between'=> ':attribute maximal :max digit minimal :min digit'
];
}
public function updateActivation(Request $request)
{
// validation rule
$validator = Validator::make($request->all(),[
'id' => 'required|exists:exclusions',
'active' => 'required|in:0,1',
],$this->messages());
// validation error
if ($validator->fails()) {
return response()->json([
'error' => true,
'messages' => $validator->getMessageBag()
],400);
}
Exclusion::where('id', $request->id)->update([
'active' => $request->active == 1 ? 0 : 1,
'reason' => $request->reason
]);
return response()->json([
'error' => false,
'messages' => "status berhasil diupdate",
'data' => []
],200);
}
}

View File

@@ -0,0 +1,314 @@
<?php
namespace Modules\Internal\Http\Controllers\Api;
use App\Models\Icd;
use App\Models\IcdTemplate;
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 DiagnosisTemplateController extends Controller
{
public function index(Request $request)
{
if ($request->search){
return IcdTemplate::when($request->search ?? null, function($icd, $search) {
$icd->where('name', 'LIKE', '%'.$search.'%')
->orWhere('code', 'LIKE', '%'.$search.'%');
})->paginate(15);
} else {
$diagnosisTemplate = IcdTemplate::query()
// ->filter($request->toArray())
->orderBy('code', 'ASC')
->paginate(15);
return $diagnosisTemplate;
}
}
/**
* 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)
{
$request->validate([
'name' => 'required'
]);
$newDiagnosisTemplate = IcdTemplate::create($request->all());
return $newDiagnosisTemplate;
}
/**
* 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)
{
$IcdTemplate = IcdTemplate::findOrFail($id);
return $IcdTemplate;
}
/**
* Update the specified resource in storage.
* @param Request $request
* @param int $id
* @return Renderable
*/
public function update(Request $request, $id)
{
$IcdTemplate = IcdTemplate::findOrFail($id);
$request->validate([
'name' => 'required'
]);
$IcdTemplate->fill([
// 'code' => $request->code,
'name' => $request->name,
'description' => $request->description,
'active' => $request->active,
])->save();
return $IcdTemplate;
}
/**
* Remove the specified resource from storage.
* @param int $id
* @return Renderable
*/
public function destroy($id)
{
//
}
public function search(Request $request)
{
return IcdTemplate::when($request->search ?? null, function($icd, $search) {
$icd->where('name', 'LIKE', '%'.$search.'%')
->orWhere('code', 'LIKE', '%'.$search.'%');
})->limit(10)->get();
}
public function import(Request $request)
{
$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 => 'code',
1 => 'parent_code',
2 => 'reff_exc',
3 => 'description_en',
4 => 'description_id',
5 => 'keywords',
6 => 'version',
7 => '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']) &&
empty($row_data['parent_code']) &&
empty($row_data['reff_exc']) &&
empty($row_data['description_en']) &&
empty($row_data['description_id']) &&
empty($row_data['keywords']) &&
empty($row_data['version']) &&
empty($row_data['active'])
) {
continue;
}
// Save the Row
$icdService = new IcdService();
$icdService->handleIcdRow($row_data);
// 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, $id)
{
$request->validate([
'active' => 'required'
]);
$Icd = IcdTemplate::findOrFail($id);
$Icd->active = $request->active == '1';
if ($Icd->save()) {
return response()->json([
'icd' => $Icd,
'message' => 'Status Updated Successfully'
]);
}
}
public function generateIcdList(Request $request){
// Mendapatkan data yang akan diekspor (misalnya, dari database)
$data = Icd::get()->toArray();
// Membuat penulis entitas Spout
$writer = WriterEntityFactory::createXLSXWriter();
// Membuka penulis untuk menulis ke file
$writer->openToFile(public_path('files/CorporateMembershipList.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/CorporateMembershipList.xlsx');
return Helper::responseJson([
'file_name' => "Diagnosis ICD List " . date('Y-m-d h:i:s'),
"file_url" => url('files/CorporateMembershipList.xlsx')
]);
}
}

View File

@@ -19,6 +19,7 @@ class DivisionController extends Controller
$benefits = CorporateDivision::query()
->filter($request->all())
->where('corporate_id', $corporate_id)
->orderBy('id', 'DESC')
->paginate(0)
->appends($request->all());
@@ -52,6 +53,7 @@ class DivisionController extends Controller
'corporate_id' => $corporate_id,
'code' => $request->code,
'name' => $request->name,
'description' => $request->description ? $request->description : null,
]);
return $newCorporatePlan;
@@ -91,7 +93,6 @@ class DivisionController extends Controller
$request->validate([
'code' => [
'required',
Rule::unique('corporate_plans')->where('corporate_id', $corporate_id)->ignore($corporatePlan->id)
],
'name' => 'required'
]);
@@ -99,7 +100,7 @@ class DivisionController extends Controller
$corporatePlan->fill([
'code' => $request->code,
'name' => $request->name,
'active' => $request->active,
'description' => $request->description,
])->save();
return $corporatePlan;

View File

@@ -0,0 +1,103 @@
<?php
namespace Modules\Internal\Http\Controllers\Api;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Routing\Controller;
use App\Models\OLDLMS\DoctorRating;
class DoctorRatingController extends Controller
{
/**
* Display a listing of the resource.
* @param int|null $id
* @return \Illuminate\Http\JsonResponse
*/
public function index($id = null)
{
$query = DoctorRating::query();
if ($id !== null) {
$query->where('nID', $id);
}
$doctorRatings = $query->with([
'user' => function ($query) {
$query->select('nID', 'sFirstName'); // Select only necessary columns
}
])
->select('nIDUser', 'nIDDokter', 'nRating', 'sNotes', 'dCreateOn')
->get();
// $prescriptions->toArray();
// dd($prescriptions);
return response()->json($doctorRatings);
// return response()->json(Helper::paginateResources(LivechatResource::collection($livechat)));
}
/**
* 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)
{
}
/**
* 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)
{
//
}
}

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