Compare commits
667 Commits
feature/in
...
origin/pro
| Author | SHA1 | Date | |
|---|---|---|---|
| c484c643f4 | |||
| 85b61e2d4c | |||
|
|
ce9c6b198f | ||
|
|
17b1ac678c | ||
|
|
0c5cab5904 | ||
|
|
7f031e3a48 | ||
|
|
4ef4f47d85 | ||
|
|
74b109ee58 | ||
| 248456881d | |||
| 546534e5cc | |||
|
|
d125d1bb38 | ||
|
|
62d5dce772 | ||
|
|
d5d5584ffa | ||
|
|
092bc6188f | ||
|
|
d659e8fd4e | ||
|
|
50fbdc02bc | ||
|
|
0bda72da48 | ||
|
|
26ac5c4cc7 | ||
|
|
30cfcce4af | ||
|
|
1661dfc123 | ||
|
|
5baa18bf5f | ||
|
|
30fc2201bd | ||
|
|
bc7225e8cd | ||
|
|
e85c62de06 | ||
|
|
bf82c7e83a | ||
|
|
a42d444b82 | ||
|
|
48f74d4d1a | ||
|
|
f16e1510d8 | ||
|
|
118aae8e6d | ||
|
|
d1465ae554 | ||
|
|
bb63e3c0c0 | ||
| 13699a3f03 | |||
| 4fe9d768b2 | |||
| 86d68ae43b | |||
| 81fb10fbf0 | |||
|
|
627b038e23 | ||
|
|
e58290dbb7 | ||
|
|
46eda07625 | ||
|
|
2bd20a5742 | ||
|
|
1d927c0ae6 | ||
| 52f7cacfd8 | |||
| 339da7f136 | |||
| 2318a9d844 | |||
|
|
dc3b79430e | ||
| ec6b6679bb | |||
|
|
209df80458 | ||
|
|
82f66151fc | ||
|
|
f53c47f277 | ||
|
|
0a2c617581 | ||
| a8686c07a7 | |||
|
|
d1fcc868a9 | ||
| 322ee1501a | |||
|
|
8860f83ec9 | ||
|
|
cb9a9f0c71 | ||
| 38d6abbd99 | |||
|
|
45ecad258d | ||
| 4b4611c9cc | |||
| 66f13fe134 | |||
|
|
3bf77ff6e4 | ||
|
|
57bdfb9727 | ||
| ba4aa586b3 | |||
|
|
147b2619c4 | ||
| 3a60aa5206 | |||
| e2be94f0d0 | |||
|
|
095a9212e3 | ||
|
|
88baf6be3d | ||
|
|
b5862650cb | ||
|
|
834c6c9c0f | ||
|
|
1afbcdfcb3 | ||
|
|
c148b6ebb5 | ||
|
|
046193d9e2 | ||
|
|
c02b2a80cc | ||
|
|
ac6589e424 | ||
|
|
2de59a24c4 | ||
|
|
8f45808078 | ||
|
|
4a6454f88c | ||
|
|
55f4aafadb | ||
| 2de9372308 | |||
| 2d3e482b76 | |||
|
|
390352d255 | ||
| e2f9efe952 | |||
| 2ae0f2d19b | |||
| f05716756b | |||
|
|
2d0ff3a5cb | ||
|
|
3a394c8800 | ||
| 5c26076806 | |||
| 0bc965f96e | |||
|
|
474ee19f2a | ||
| 43991c1069 | |||
|
|
d057021ef9 | ||
|
|
7ae5775919 | ||
|
|
899f1436e5 | ||
|
|
4b412fa5d2 | ||
| c99bb1cc91 | |||
| c7ca83bd57 | |||
| 8e8b123f08 | |||
|
|
887fa4aa71 | ||
| ed10e2ad4a | |||
| ae9a1f70fc | |||
|
|
931245cae9 | ||
| 7db0af3bef | |||
|
|
ece4e796da | ||
|
|
aacd93fe6a | ||
|
|
eb662f7c34 | ||
|
|
494c13aea8 | ||
|
|
46adf39a4a | ||
|
|
8d0dd6fa38 | ||
| 5c5ad8bae7 | |||
|
|
6c83a43696 | ||
|
|
577be2ea63 | ||
|
|
b865802806 | ||
|
|
562f3121c5 | ||
|
|
2e852f7203 | ||
|
|
23081382ce | ||
|
|
fe71286728 | ||
| a9c48f63a4 | |||
| eb1f215bdb | |||
|
|
37b8229fc2 | ||
|
|
214bf5b116 | ||
|
|
55d5d006e3 | ||
|
|
a9c68fffc9 | ||
| c899c40ef1 | |||
|
|
efdc0853d8 | ||
| f410b547db | |||
|
|
63e684f363 | ||
|
|
9a14690bd7 | ||
|
|
38c94a32da | ||
|
|
f6d69b8e6f | ||
|
|
bc0d29f42a | ||
| 251c8509be | |||
|
|
f9075b2bd2 | ||
| e45a4b6f7b | |||
| 7d729f295b | |||
| 87f2788cdd | |||
|
|
723d4030ab | ||
|
|
cf3280cd7a | ||
|
|
f208f0b133 | ||
|
|
3580c93c02 | ||
|
|
2e7ab0e1a1 | ||
| 7c820547c0 | |||
| baabebe9ed | |||
| 82b155fd70 | |||
|
|
b5afefd71d | ||
|
|
a157c41462 | ||
|
|
a9a342f6dd | ||
|
|
0b79c76428 | ||
|
|
c68b1f3e61 | ||
|
|
bdf1c664c5 | ||
| 700dbff199 | |||
| 4e096715c5 | |||
|
|
290a18737d | ||
|
|
2800da9255 | ||
|
|
f6258fb0df | ||
|
|
2839d537bd | ||
|
|
519c8e5ed8 | ||
|
|
3a0c7fc06a | ||
|
|
4e988200b2 | ||
|
|
df4bd6946f | ||
|
|
b7ff05bc87 | ||
|
|
4135da3103 | ||
|
|
64ca019c2c | ||
|
|
96034d069a | ||
|
|
ae884f8cd0 | ||
| 1660db5123 | |||
|
|
9a011beb8c | ||
| 98233656d5 | |||
| 2b2fae44fc | |||
| 9db32ef482 | |||
|
|
2d7a5aba1b | ||
|
|
8741f4344f | ||
|
|
dc3ee65f34 | ||
| 7e836bd9f3 | |||
|
|
1aa984b7eb | ||
|
|
6b57919bba | ||
|
|
31baf87202 | ||
| 37558d0198 | |||
| fe9101a881 | |||
|
|
e7911cb7d5 | ||
|
|
7c2df15a9f | ||
|
|
f85f002a8e | ||
|
|
2134de863a | ||
| 62270b6847 | |||
| 19e9e334e2 | |||
|
|
770da6c1f3 | ||
|
|
9dc60b9141 | ||
|
|
841b319aeb | ||
|
|
b5c8d8c3b6 | ||
|
|
a2a65ec353 | ||
|
|
fd49cd9a12 | ||
| 10f702f2f0 | |||
| c3a4d948a6 | |||
| 5a439922d9 | |||
|
|
fd15e4f377 | ||
|
|
89f879cfcc | ||
|
|
5702ea7a15 | ||
|
|
b48b6bfa3e | ||
|
|
4defd4fa2f | ||
| 40371bd53a | |||
| e76c480ce9 | |||
|
|
f4f83b3c7b | ||
|
|
f9b970fbd1 | ||
|
|
6edf7311f3 | ||
|
|
c7d67467a2 | ||
| 91b7a10f86 | |||
| dc582244a5 | |||
| a208d5f11e | |||
|
|
a04153fa2a | ||
| 49afc1d28d | |||
|
|
6d72b1b789 | ||
|
|
0b211e12a4 | ||
|
|
676e541385 | ||
|
|
13ef733010 | ||
|
|
00b8fa763e | ||
|
|
e3aacbb5d5 | ||
| 8be552c141 | |||
| f5ebb303c6 | |||
|
|
77fdb46c46 | ||
| 0dc10587a8 | |||
|
|
643fd2b6cd | ||
|
|
a1a235f1bb | ||
|
|
8f77d8bec0 | ||
|
|
c3b140d1f8 | ||
| c5e103fc57 | |||
| 7284354f47 | |||
|
|
d6831f3bfa | ||
| d3c5bfb527 | |||
|
|
db275c152d | ||
|
|
3a83f90ee3 | ||
|
|
6bd48241f0 | ||
|
|
bc73088e4a | ||
|
|
0c9f69aaad | ||
| 134caa2d2c | |||
| 2587650c2e | |||
| 10e1dc72d7 | |||
| cea8b476e0 | |||
|
|
b8b308a89f | ||
|
|
28fefd82e5 | ||
| 3100a1a1b2 | |||
| 9a147f32da | |||
| 1fde7999a5 | |||
|
|
7cd4f2c929 | ||
| a9929ad7a2 | |||
| 9c2677771c | |||
| 1fcdc6a4b9 | |||
| ead5ac35f4 | |||
| e3087e7cbb | |||
| 089fd62bf3 | |||
| 6176b21386 | |||
| 8908400d50 | |||
| c329df499f | |||
| 16454d32cc | |||
| 40ac4feeaa | |||
| 1389875c8b | |||
| e65c017685 | |||
|
|
754f2ab336 | ||
| f4e17d4aec | |||
| 4aa6eaa889 | |||
|
|
23886c52d2 | ||
|
|
ec3327b5af | ||
|
|
79c8e475e8 | ||
|
|
bc429b6d52 | ||
|
|
16449bd18b | ||
|
|
186312bb6a | ||
|
|
bf8bb86857 | ||
|
|
22e3061564 | ||
| cff928409d | |||
| e24cb39ff3 | |||
|
|
c9a2acff35 | ||
|
|
d2e1bb93f0 | ||
|
|
5384f3ecf2 | ||
|
|
01fcaf7181 | ||
| 5b3cddf5fe | |||
|
|
b934fb0727 | ||
|
|
cd1835d836 | ||
|
|
924131534c | ||
|
|
c6940ee83d | ||
|
|
c38167a50a | ||
|
|
de476ad3be | ||
|
|
e34ec97d27 | ||
|
|
557b8713dd | ||
| 4fec5df5e6 | |||
| 019f4ae066 | |||
| 759e692465 | |||
|
|
f625d4225f | ||
|
|
b76a9b56f0 | ||
|
|
b6095f1301 | ||
|
|
08cf8b5c9b | ||
|
|
4ec2ca9bb2 | ||
|
|
1da3884fee | ||
|
|
0eff99c456 | ||
|
|
f44e50c52b | ||
|
|
670f62328b | ||
|
|
0585f9f5f0 | ||
| 239e95f5df | |||
| 495a73770e | |||
| 63af52cb85 | |||
|
|
0c5960275c | ||
|
|
87864a496c | ||
|
|
010e971b69 | ||
|
|
1c71edd3ed | ||
|
|
bf0001ced6 | ||
| a53a546f1f | |||
| 8d94ebf524 | |||
|
|
9188e0c882 | ||
| 3ec7727981 | |||
| adcb4e508d | |||
|
|
435afb6b61 | ||
|
|
995f1f76f8 | ||
|
|
39486af45c | ||
|
|
053ef5f8e3 | ||
|
|
0abcaea006 | ||
|
|
f91a8de670 | ||
| fb099b352f | |||
| 2d5c870527 | |||
| 5265aecd05 | |||
|
|
06c4bf6930 | ||
|
|
115c284f85 | ||
|
|
134cdb072d | ||
|
|
d7e1cc0a98 | ||
|
|
33d3bdab37 | ||
|
|
14427c2d7f | ||
| f53945e4a0 | |||
| 78765225bc | |||
| 8a9870d7ae | |||
| 9c1f682adf | |||
|
|
77175e979e | ||
|
|
4708cb3cf8 | ||
|
|
f8a7e3b2b9 | ||
|
|
9962f160f8 | ||
|
|
a1362b5362 | ||
| 8373885df8 | |||
| e0d68aa01a | |||
| 614156bbe7 | |||
|
|
257af7ca9c | ||
|
|
51deb0f810 | ||
|
|
c380eccc56 | ||
|
|
64fcebdad0 | ||
| 03afed696e | |||
| f330607f14 | |||
|
|
aa6df1bdae | ||
|
|
39f7e16fa4 | ||
| d10b7da080 | |||
| d75638df86 | |||
| 8df8269512 | |||
| 853cb334ca | |||
| a08aa05d1e | |||
|
|
8a3b0f3d11 | ||
|
|
7134f0ff86 | ||
|
|
031291b1f0 | ||
|
|
7bd574db7d | ||
|
|
f2e5a22c64 | ||
|
|
827ce472ba | ||
| c3b745e23b | |||
| a694bc03f3 | |||
| 3e908471cf | |||
| 54019e998d | |||
|
|
44b1a153b1 | ||
|
|
740d113bd0 | ||
|
|
909231a697 | ||
|
|
c9cb5c20e2 | ||
|
|
101056ead0 | ||
|
|
b77c1e2c74 | ||
|
|
6b931a904d | ||
|
|
c767c676f4 | ||
|
|
ffdf5013fc | ||
|
|
b1a109cc89 | ||
|
|
7f4901163c | ||
|
|
49dfb0d02b | ||
| a9e6a750ad | |||
| b76739a86b | |||
|
|
1700e8ebfb | ||
| b49f78858f | |||
| 1a182aaf9e | |||
| a8828b2d79 | |||
| d69b610c5f | |||
|
|
4fc196e226 | ||
|
|
55b2945154 | ||
|
|
7e917222aa | ||
|
|
dcc25a02ce | ||
|
|
1527d64033 | ||
|
|
9a5eb0e74b | ||
| 84cf41dba8 | |||
| 5376873552 | |||
|
|
271c8610e3 | ||
| 1d11e06178 | |||
| bb8ab6e9e4 | |||
| 50762a0581 | |||
|
|
f2414e6577 | ||
|
|
c8afe73c46 | ||
|
|
e0b2dec912 | ||
|
|
9df7c68ea5 | ||
|
|
2673f6fc8b | ||
| 601a8e5aff | |||
| 0fd79b8284 | |||
|
|
9b4579e8f1 | ||
|
|
52783b191a | ||
|
|
544eb32a81 | ||
|
|
1abb9b2539 | ||
|
|
c8dd135558 | ||
|
|
2f7a450d28 | ||
| 3f54e07fb5 | |||
| a83115ea65 | |||
| a916dc4a44 | |||
| 975c5169e3 | |||
|
|
927700b528 | ||
|
|
5d614d604a | ||
| 23ce443b52 | |||
| 4a6d11f5d3 | |||
| 8ef4de1157 | |||
| 48ba75ffe3 | |||
| 314c4ec5a2 | |||
| 3059a4ae0e | |||
| 78ad8d1538 | |||
| cfb2943ed2 | |||
| 3ddf40a608 | |||
| 551bea37a1 | |||
|
|
6c800bb716 | ||
|
|
b3188f0ca7 | ||
| 738392c143 | |||
| 72958019f1 | |||
| 969eb93509 | |||
| e8c2396442 | |||
| ae1b213ff0 | |||
| 9fb0cc3eb6 | |||
| c262919449 | |||
|
|
7b2223545f | ||
|
|
bddd076db0 | ||
| 0b354dcf22 | |||
| 0f60176c35 | |||
|
|
c5043d56f0 | ||
|
|
c03b628735 | ||
|
|
3224804424 | ||
| 3ef29c1de6 | |||
| 26fca92966 | |||
|
|
848ddb4d8a | ||
|
|
fffd02d600 | ||
| 219aa35693 | |||
| 7ee4a3ef38 | |||
|
|
25cb97250b | ||
|
|
21e146da7e | ||
|
|
ed2d5ee90a | ||
|
|
6ed5983175 | ||
|
|
9c2956c733 | ||
|
|
08cd475d90 | ||
| e8f90772de | |||
| 4a155b2b70 | |||
|
|
c365e6b021 | ||
| 9f3b59a634 | |||
|
|
450cf57339 | ||
| c0322eac3b | |||
|
|
a7c7a961c7 | ||
| e8fb41a57d | |||
|
|
a64ed344ee | ||
| 5e8bcab6ac | |||
|
|
fdb382f90b | ||
| 45d52ed655 | |||
| afda88cea7 | |||
| 03e33fb375 | |||
| 115dfbda4d | |||
| 78e3211bdd | |||
|
|
690d2b2ed7 | ||
| f021d672a0 | |||
| 23685cd87c | |||
|
|
ee20c120e2 | ||
| 8287bff759 | |||
| 375a22ef69 | |||
|
|
4f33f2258a | ||
| 25b668ad2b | |||
| cff5dba314 | |||
|
|
4df8409e60 | ||
|
|
8011d117d6 | ||
|
|
4a8079e667 | ||
|
|
ab194600c2 | ||
|
|
565c6cbbfc | ||
|
|
7051758b12 | ||
|
|
05f26145f8 | ||
|
|
510269c9ee | ||
|
|
f7777954a4 | ||
|
|
df6b3f5c59 | ||
|
|
e0f3a38be0 | ||
|
|
26b82db77b | ||
|
|
290de81ee8 | ||
|
|
83de998900 | ||
|
|
5db9121a16 | ||
|
|
96ee80f681 | ||
|
|
18d46f09c7 | ||
| 8f74be633e | |||
| 7df5586258 | |||
| 42a116e9ac | |||
|
|
07589caba1 | ||
|
|
fc52c7ece6 | ||
| d3fb049c97 | |||
| a5dd6dfca3 | |||
| 2f336955ab | |||
|
|
a54708abb5 | ||
|
|
9057e5d00f | ||
|
|
db4b0193dd | ||
|
|
f05a2c879e | ||
|
|
137b0a5fb6 | ||
|
|
3bfe8547a7 | ||
|
|
0c673a4cfb | ||
|
|
8ecbcb1a5c | ||
|
|
cf4ce17ffc | ||
|
|
9327c6b45f | ||
|
|
53bacd1397 | ||
|
|
c1f34dcb26 | ||
|
|
b11829bc7e | ||
|
|
cfa44187c1 | ||
|
|
73b9834fe9 | ||
|
|
6b52078dc9 | ||
|
|
baf5fe7f89 | ||
|
|
73416c3e46 | ||
|
|
7250d13455 | ||
|
|
e87d7e334f | ||
|
|
6b6b0e5059 | ||
|
|
b770de761a | ||
|
|
13315465b9 | ||
|
|
c23defa5fc | ||
|
|
fce14eeb14 | ||
|
|
2e78d99b5a | ||
|
|
62f57e8161 | ||
|
|
d9ac3bfd60 | ||
|
|
3d2b08c104 | ||
|
|
460e2e6c03 | ||
|
|
58ce71c561 | ||
|
|
318d4437a6 | ||
|
|
4f0daaceff | ||
|
|
0a214723cb | ||
|
|
49fe9864cd | ||
|
|
786a0a24b3 | ||
|
|
ba93c9cba6 | ||
|
|
886d8e6321 | ||
|
|
3e9bba2941 | ||
|
|
1b15a7428c | ||
|
|
9c0109fd89 | ||
|
|
d8e7ea771b | ||
|
|
3cf302abe8 | ||
| c858b20028 | |||
|
|
7e2cd73536 | ||
| dccd4f70b9 | |||
|
|
6201fbe2c8 | ||
|
|
bff6c1bc61 | ||
| 24a4710318 | |||
|
|
6ced3a0f9f | ||
| b763a2bec0 | |||
|
|
5092569f48 | ||
|
|
bcf801fdf1 | ||
| b2ae4a63c4 | |||
|
|
51c5fe813f | ||
|
|
aed9d5d4ad | ||
|
|
d58ad05cbd | ||
|
|
0a8a8c94f3 | ||
|
|
0eaae544d1 | ||
| cb7e0bb484 | |||
|
|
055b0d234d | ||
|
|
bc949dcea7 | ||
|
|
396c05a4d2 | ||
|
|
7240e9803e | ||
|
|
4ff72d3819 | ||
|
|
5127d8a73b | ||
|
|
7e21e20d0d | ||
|
|
2c3e720c83 | ||
|
|
f26b5d2e9b | ||
|
|
ec5ef5eb87 | ||
|
|
4e6d4abb06 | ||
|
|
8ea3a1d2e5 | ||
|
|
c011fc3c0d | ||
|
|
13d4fac65c | ||
|
|
bc1c209b07 | ||
|
|
af9864d89f | ||
| eb3e3fa981 | |||
|
|
ebf2dc8c0f | ||
|
|
6f7e94e901 | ||
| 875a932c23 | |||
|
|
af7dc0e122 | ||
|
|
aa85d03ba8 | ||
|
|
8f4827efc0 | ||
|
|
cae869f326 | ||
|
|
40aab73ca0 | ||
|
|
621ce08924 | ||
|
|
6f1bba1c33 | ||
|
|
0f3ab9d6b5 | ||
|
|
f89bd8423b | ||
|
|
96ed61c0b6 | ||
|
|
b7a897a1c0 | ||
|
|
e25f313b58 | ||
|
|
23d75000b9 | ||
|
|
59c56ae90f | ||
|
|
3726513af7 | ||
|
|
4c8570b542 | ||
|
|
033625c34e | ||
|
|
5632e9ff29 | ||
|
|
45661cdc78 | ||
|
|
40da45c9ff | ||
|
|
7e9c6cf028 | ||
|
|
ae8925be0a | ||
|
|
2157c14f8d | ||
|
|
c942856933 | ||
|
|
46416cb6ac | ||
| 12f8828f9f | |||
| ff89f2ac8b | |||
|
|
b05f052848 | ||
|
|
2ffb62b564 | ||
| b550349835 | |||
|
|
5410404141 | ||
|
|
dcd97386b0 | ||
| 914b9b0c94 | |||
| 4c59fd21b5 | |||
| 569d356b6b | |||
| 554d0048e7 | |||
| dbdeed0d5b | |||
| d49ef7d99e | |||
|
|
1e8fa839f4 | ||
|
|
6ab1adce5e | ||
| 8f532e655f | |||
| cbc7dfdb99 | |||
| 40d4500651 | |||
|
|
3a8a7438ba | ||
| 684e63cd6f | |||
| 1cebcdb8f8 | |||
| 1db1c20531 | |||
| 7182b0107c | |||
| 01727bd02b | |||
| 20c2bea127 | |||
| f7e8cd550b | |||
| 778d2b5bb5 | |||
| afafed11d5 | |||
| ff3ac11071 | |||
| 7a83409028 | |||
| 4cc2ae24b8 | |||
|
|
4fb2bab64e | ||
| 10af60c4b4 | |||
|
|
d17513da44 | ||
|
|
57125b06af | ||
|
|
d999d86959 | ||
|
|
fff9b7cb18 | ||
|
|
cb87cffbb5 | ||
| f7838352b0 | |||
| 6f49e54631 | |||
| 7c40b61a3c | |||
| 726cf2e192 | |||
| 9f49f0e825 | |||
| a56182aed1 | |||
| e29e635cb6 | |||
| cde3ced75b | |||
|
|
ed3474ac47 | ||
|
|
cf05966f96 | ||
| c82475da2f | |||
| e057de3f62 | |||
| b377625805 | |||
| 31423c255e | |||
| a10fa9db21 | |||
| 3f40170043 | |||
| da68ae3e05 | |||
| a454461449 | |||
| ca9ebdb3a1 | |||
| 02e84b262f | |||
| 414d9de369 | |||
| ee0db6d2ab | |||
| 51fd8f57b3 | |||
| 342725ebcc | |||
|
|
7d8e5800d1 | ||
|
|
a2eac07c67 | ||
|
|
079641e87b | ||
|
|
e2d64faf55 | ||
|
|
2016ba1726 | ||
|
|
ce024c2bcd |
83
.env-example
Normal file
83
.env-example
Normal 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=
|
||||
59
.env.example
59
.env.example
@@ -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}"
|
||||
@@ -2,13 +2,21 @@
|
||||
|
||||
namespace Modules\Client\Http\Controllers\Api;
|
||||
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\Claim;
|
||||
use App\Models\CorporateEmployee;
|
||||
use App\Models\Icd;
|
||||
use App\Models\ClaimHistoryCare;
|
||||
use App\Models\Corporate;
|
||||
use App\Services\ClaimService;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Modules\Client\Transformers\ClaimShowResource;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
||||
|
||||
class ClaimController extends Controller
|
||||
{
|
||||
@@ -20,7 +28,7 @@ class ClaimController extends Controller
|
||||
{
|
||||
$claims = $this->claimService->getCountClaimRequestPerStatus($corporate_id);
|
||||
|
||||
dd($claims);
|
||||
// dd($claims);
|
||||
|
||||
return Helper::responseJson([
|
||||
'count_requested' => 0,
|
||||
@@ -133,4 +141,124 @@ class ClaimController extends Controller
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
public function export($corporate_id){
|
||||
$corporate = Corporate::where('id', $corporate_id)->with(['currentPolicy'])->first();
|
||||
$member_id = CorporateEmployee::where('corporate_id', $corporate_id)->get('member_id')->toArray();
|
||||
// dd($member_id);
|
||||
$claim = Claim::whereIn('member_id', $member_id)->with(['member', 'member.plans'])->get();
|
||||
$data = [];
|
||||
|
||||
if (count( $claim) > 0){
|
||||
$temp = [];
|
||||
foreach($claim as $c) {
|
||||
|
||||
$diagnosis = ClaimHistoryCare::where('claim_id', 34)->with('icd')->get();
|
||||
$diagnosisName = '';
|
||||
if (count($diagnosis) > 0){
|
||||
$tempDiagnosis = [];
|
||||
foreach($diagnosis as $key => $d){
|
||||
$diagnosis = Icd::where('id', $d['main_diagnosis_id'])->first();
|
||||
array_push($tempDiagnosis, $diagnosis->name);
|
||||
}
|
||||
|
||||
$diagnosisName = implode(", ", $tempDiagnosis);
|
||||
|
||||
}
|
||||
$temp['id'] = $c['id'];
|
||||
$temp['plan_id'] = $c['member']['plans'][0]['code'];
|
||||
$temp['payor_id'] = $c['member']['payor_id'];
|
||||
$temp['corporate_id'] = $corporate->name;
|
||||
$temp['policy_number'] = $corporate->currentPolicy->code;
|
||||
$temp['member_id'] = $c['member']['member_id'];
|
||||
$temp['benefit_code'] = $c['benefit_code'];
|
||||
$temp['benefit_desc'] = $c['benefit_desc'];
|
||||
$temp['amount_incurred'] = $c['amount_incurred'];
|
||||
$temp['amount_approved'] = $c['amount_approved'];
|
||||
$temp['amount_not_approved'] = $c['amount_not_approved'];
|
||||
$temp['excess_paid'] = $c['excess_paid'];
|
||||
$temp['diganosis'] = $diagnosisName;
|
||||
array_push($data, $temp);
|
||||
}
|
||||
|
||||
$headers = [
|
||||
['value' => 'Plan ID', 'cell' => 'A1', 'mergeCell' => false, 'mergeToCell' => ''],
|
||||
['value' => 'Payor ID', 'cell' => 'B1', 'mergeCell' => false, 'mergeToCell' => ''],
|
||||
['value' => 'Corporate ID', 'cell' => 'C1', 'mergeCell' => false, 'mergeToCell' => ''],
|
||||
['value' => 'Policy Number', 'cell' => 'D1', 'mergeCell' => false, 'mergeToCell' => ''],
|
||||
['value' => 'Member ID', 'cell' => 'E1', 'mergeCell' => false, 'mergeToCell' => ''],
|
||||
['value' => 'Benefit Code', 'cell' => 'F1', 'mergeCell' => false, 'mergeToCell' => ''],
|
||||
['value' => 'Benefit Desc', 'cell' => 'G1', 'mergeCell' => false, 'mergeToCell' => ''],
|
||||
['value' => 'Amt Incurred', 'cell' => 'H1', 'mergeCell' => false, 'mergeToCell' => ''],
|
||||
['value' => 'Amt Approved', 'cell' => 'I1', 'mergeCell' => false, 'mergeToCell' => ''],
|
||||
['value' => 'Amt Not Approved', 'cell' => 'J1', 'mergeCell' => false, 'mergeToCell' => ''],
|
||||
['value' => 'Excess Paid', 'cell' => 'K1', 'mergeCell' => false, 'mergeToCell' => ''],
|
||||
['value' => 'Diagnosis', 'cell' => 'L1', 'mergeCell' => false, 'mergeToCell' => 'J2'],
|
||||
|
||||
];
|
||||
|
||||
$spreadsheet = new Spreadsheet();
|
||||
$sheet = $spreadsheet->getActiveSheet();
|
||||
|
||||
foreach ($headers as $header) {
|
||||
$sheet->setCellValue($header['cell'], $header['value']);
|
||||
|
||||
if ($header['mergeCell'] === true) {
|
||||
$sheet->mergeCells($header['cell'] . ':' . $header['mergeToCell']);
|
||||
}
|
||||
|
||||
$sheet->getStyle($header['cell'])->getFont()->setBold(true);
|
||||
$sheet->getStyle($header['cell'])->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER)->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
|
||||
}
|
||||
|
||||
$startFrom = 2;
|
||||
|
||||
foreach($data as $i => $d){
|
||||
$sheet->setCellValue('A' . $startFrom, $d['plan_id'] ?? '-');
|
||||
$sheet->setCellValue('B' . $startFrom, $d['payor_id'] ?? '-');
|
||||
$sheet->setCellValue('C' . $startFrom, $d['corporate_id'] ?? '-');
|
||||
$sheet->setCellValue('D' . $startFrom, $d['policy_number'] ?? '-');
|
||||
$sheet->setCellValue('E' . $startFrom, $d['member_id'] ?? '-');
|
||||
$sheet->setCellValue('F' . $startFrom, $d['benefit_code'] ?? '-');
|
||||
$sheet->setCellValue('G' . $startFrom, $d['benefit_desc'] ?? '-');
|
||||
$sheet->setCellValue('H' . $startFrom, $d['amount_incurred'] ?? '-');
|
||||
$sheet->setCellValue('I' . $startFrom, $d['amount_approved'] ?? '-');
|
||||
$sheet->setCellValue('J' . $startFrom, $d['amount_not_approved'] ?? '-');
|
||||
$sheet->setCellValue('K' . $startFrom, $d['excess_paid'] ?? '-');
|
||||
$sheet->setCellValue('L' . $startFrom, $d['diganosis'] ?? '-');
|
||||
|
||||
$startFrom++;
|
||||
}
|
||||
|
||||
foreach (['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J','K'] as $header) {
|
||||
if ($header === 'A') {
|
||||
$spreadsheet->getActiveSheet()->getColumnDimension($header)->setWidth(35, 'px');
|
||||
} elseif ($header === 'H' || $header === 'I') {
|
||||
$spreadsheet->getActiveSheet()->getColumnDimension($header)->setWidth(100, 'px');
|
||||
} else {
|
||||
$spreadsheet->getActiveSheet()->getColumnDimension($header)->setAutoSize(true);
|
||||
}
|
||||
}
|
||||
|
||||
$spreadsheet->getActiveSheet()->getStyle('A2:A' . $startFrom)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER)->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
|
||||
|
||||
$sheet->getDefaultRowDimension()->setRowHeight(-1);
|
||||
$sheet->setTitle('Alarm Center Report');
|
||||
|
||||
$writer = new Xlsx($spreadsheet);
|
||||
ob_start();
|
||||
$writer->save('php://output');
|
||||
$content = ob_get_contents();
|
||||
ob_end_clean();
|
||||
|
||||
$fileName = 'result-' . now()->getPreciseTimestamp(3) . '-alarm-center-report.xlsx';
|
||||
Storage::disk('public')->put('temp/' . $fileName, $content);
|
||||
|
||||
$fileUrl = url('storage/temp/' . $fileName);
|
||||
|
||||
return Helper::responseJson([
|
||||
"file_url" => $fileUrl
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
254
Modules/Client/Http/Controllers/Api/ClaimRequestController.php
Normal file
254
Modules/Client/Http/Controllers/Api/ClaimRequestController.php
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -3,18 +3,32 @@
|
||||
namespace Modules\Client\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\Member;
|
||||
use App\Models\Claim;
|
||||
use App\Models\ClaimRequest;
|
||||
use App\Models\RequestLog;
|
||||
use App\Services\CorporateMemberService;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Modules\Client\Transformers\ClaimReport\MemberResources as ClaimReportMemberResources;
|
||||
use Modules\Client\Transformers\AlarmCenter\DataListClaimMemberResource;
|
||||
use Modules\Client\Transformers\AlarmCenter\DataServiceMonitoring;
|
||||
use Modules\Client\Transformers\Dashboard\MemberResources as ClaimSubmitMemberResources;
|
||||
use Modules\Client\Transformers\Dashboard\MemberResources as DashboardMemberResources;
|
||||
use Modules\Client\Transformers\Dashboard\MemberAlarmCenterResources as DashboardMemberAlarmResources;
|
||||
use Modules\Client\Transformers\Dashboard\MemberEmployeeDataResources as DashboardMemberEmployeeDataResources;
|
||||
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
|
||||
use Modules\Client\Transformers\EmployeeData\UserProfile\DataMemberResource as EmployeeDataProfileMemberResource;
|
||||
use Modules\Internal\Services\MemberEnrollmentService;
|
||||
|
||||
class CorporateMemberController extends Controller
|
||||
{
|
||||
public function __construct(public CorporateMemberService $corporateMemberService)
|
||||
public $memberEnrollmentService;
|
||||
|
||||
public function __construct(public CorporateMemberService $corporateMemberService, MemberEnrollmentService $memberEnrollmentService)
|
||||
{
|
||||
$this->memberEnrollmentService = $memberEnrollmentService;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -24,18 +38,208 @@ class CorporateMemberController extends Controller
|
||||
public function index(Request $request, $corporate_id)
|
||||
{
|
||||
switch ($request->input('type')) {
|
||||
case 'employee-data':
|
||||
$members = $this->corporateMemberService->getAllMemberEmployeeData($corporate_id, $request);
|
||||
return response()->json(Helper::paginateResources(DashboardMemberEmployeeDataResources::collection($members)));
|
||||
case 'claim-report':
|
||||
$members = $this->corporateMemberService->getAllMemberClaimReports($corporate_id, $request);
|
||||
return response()->json(Helper::paginateResources(ClaimReportMemberResources::collection($members)));
|
||||
case 'claim-submit':
|
||||
$members = $this->corporateMemberService->getAllMemberClaimReports($corporate_id, $request);
|
||||
return response()->json(Helper::paginateResources(ClaimReportMemberResources::collection($members)));
|
||||
$members = $this->corporateMemberService->getAllMemberClaimSubmits($corporate_id, $request);
|
||||
return response()->json(Helper::paginateResources(ClaimSubmitMemberResources::collection($members)));
|
||||
case 'alarm-center':
|
||||
$members = $this->corporateMemberService->getAllMemberAlarmCenter($corporate_id, $request);
|
||||
return response()->json(Helper::paginateResources(DashboardMemberAlarmResources::collection($members)));
|
||||
case 'service-monitoring':
|
||||
$members = $this->corporateMemberService->getAllEncounter($corporate_id, $request);
|
||||
return response()->json(Helper::paginateResources(DashboardMemberAlarmResources::collection($members)));
|
||||
default:
|
||||
$members = $this->corporateMemberService->getAllMemberDashboards($corporate_id, $request);
|
||||
return response()->json(Helper::paginateResources(DashboardMemberResources::collection($members)));
|
||||
}
|
||||
}
|
||||
|
||||
public function show($corporate_id, $person_id)
|
||||
{
|
||||
$data = Member::query()
|
||||
->with(['person'])
|
||||
->where('person_id', $person_id)
|
||||
->whereHas('currentCorporate', function ($query) use ($corporate_id) {
|
||||
$query->where('corporate_id', $corporate_id);
|
||||
})
|
||||
->firstOrFail();
|
||||
|
||||
// Get Families
|
||||
$data->families = Member::query()
|
||||
->with(['person'])
|
||||
->where('principal_id', $data->member_id)
|
||||
->get();
|
||||
|
||||
return response()->json(EmployeeDataProfileMemberResource::make($data));
|
||||
}
|
||||
|
||||
public function generateMemberList($corporate_id)
|
||||
{
|
||||
// Mendapatkan data yang akan diekspor (misalnya, dari database)
|
||||
$data = Member::with(['currentPlan', 'currentCorporate', 'division', 'employeds', 'currentPolicy'])
|
||||
// ->filter($request->all())
|
||||
// ->where('corporate_id', $corporate_id)
|
||||
->whereHas('employeds', function ($employeds) use ($corporate_id) {
|
||||
$employeds->where('corporate_id', $corporate_id);
|
||||
})->get()->toArray();
|
||||
// Membuat penulis entitas Spout
|
||||
$writer = WriterEntityFactory::createXLSXWriter();
|
||||
|
||||
// Membuka penulis untuk menulis ke file
|
||||
$writer->openToFile(public_path('files/CorporateMembershipList.xlsx'));
|
||||
// Menulis header kolom
|
||||
$headers_map_to_table_fields = $this->memberEnrollmentService->listing_doc_headers;
|
||||
$headerRow = WriterEntityFactory::createRowFromArray($headers_map_to_table_fields);
|
||||
|
||||
$writer->addRow($headerRow);
|
||||
|
||||
// Menulis data
|
||||
if (!empty($data)) {
|
||||
foreach ($data as $item) {
|
||||
$rowData = [
|
||||
$item['record_mode'], // Recode Mode
|
||||
$item['record_type'], // Recode Type
|
||||
$item['payor_id'], // Payor ID
|
||||
$item['member_id'], // Member ID
|
||||
$item['principal_id'], // Mapping ID
|
||||
NULL, // Link Medis Member ID
|
||||
$item['current_corporate']['code'] ?? null, // Corporate ID
|
||||
$item['employeds'][0]['nik'] ?? null, // NIK
|
||||
$item['division']['code'] ?? null, // Devision
|
||||
$item['employeds'][0]['branch_code'] ?? null, // Branch Code
|
||||
$item['bank_info'], // Bank Info
|
||||
$item['language'], // Language
|
||||
null, // Type of Work
|
||||
$item['race'], // Race
|
||||
$item['current_policy']['code'] ?? null, // Policy Number
|
||||
$item['marital_status'], // Marital Status
|
||||
$item['relation_with_principal'], // Relationship
|
||||
str_replace('-', '', $item['members_effective_date']), // Member effective date
|
||||
str_replace('-', '', $item['members_expire_date']), // Member expiry date
|
||||
NULL, // Faskes FKTP (First Level Provider) or Individual preferred provider
|
||||
NULL, // Faskes FKRTL (Next Level Provider) or Individual group preferred provider
|
||||
$item['bpjs_class'], // The Right Classes Room of BPJS Participants
|
||||
NULL, // Name of Faskes
|
||||
NULL, // Rule BPJSK
|
||||
NULL, // Internal Use
|
||||
$item['full_name'], // Member Name
|
||||
$item['address1'], // Address1
|
||||
$item['address2'], // Address2
|
||||
$item['address3'], // Address3
|
||||
$item['address4'], // Address4
|
||||
$item['city'], // City
|
||||
NULL, // State
|
||||
$item['postal_code'], // Post Code
|
||||
NULL, // Telephone - Mobile
|
||||
NULL, // Telephone - Res
|
||||
NULL, // Telephone - Office
|
||||
$item['nric'], // NRIC
|
||||
$item['passport_no'], // Passport No
|
||||
$item['passport_country'], // Passport Country
|
||||
$item['email'], // Email
|
||||
$item['identification_code'], // Identification Code
|
||||
$item['birth_date'], // Date of Birth
|
||||
$item['gender_code'], // Sex
|
||||
NULL, // Internal Use
|
||||
$item['current_plan']['code'] ?? null, // Plan-ID
|
||||
NULL, // Employment-Status
|
||||
NULL, // Internal Use
|
||||
NULL, // Internal Use
|
||||
NULL, // Internal Use
|
||||
str_replace('-', '', $item['terminated_date']), // Date Terminated
|
||||
$item['pre_existing'], // Pre Existing
|
||||
$item['bpjs_id'], // BPJS ID
|
||||
$item['endorsement_date'], // Endorsement Date
|
||||
$item['remarks'], // Remarks
|
||||
NULL, // Internal Use
|
||||
NULL, // Member Since
|
||||
NULL, // Internal Use
|
||||
$item['policy_in_force'], // Policy Inforce
|
||||
NULL, // Member Suspended
|
||||
str_replace('-', '', $item['activation_date']), // Activation Date
|
||||
NULL, // Internal Use
|
||||
$item['start_no_claim'], // StartNoClaim
|
||||
$item['end_no_claim'], // EndNoClaim
|
||||
NULL, // Option Mode
|
||||
];
|
||||
$row = WriterEntityFactory::createRowFromArray($rowData);
|
||||
$writer->addRow($row);
|
||||
}
|
||||
}
|
||||
|
||||
// Menutup penulis
|
||||
$writer->close();
|
||||
// dd('test');
|
||||
// Mengembalikan response untuk mengunduh file
|
||||
$filePath = public_path('files/CorporateMembershipList.xlsx');
|
||||
// dd($filePath);
|
||||
// Mengembalikan response untuk mengunduh file
|
||||
return Helper::responseJson([
|
||||
'file_name' => "Corporate Plan & Benefit List " . date('Y-m-d h:i:s'),
|
||||
"file_url" => url('files/CorporateMembershipList.xlsx')
|
||||
]);
|
||||
}
|
||||
|
||||
public function showPerMember(Request $request, $corporate_id, $member_id)
|
||||
{
|
||||
$per_page = $request->has('per_page') ? $request->input('per_page') : 10;
|
||||
|
||||
$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)))]);
|
||||
}
|
||||
|
||||
public function serviceMonitoring(int $corporate_id, int $request_log_id)
|
||||
{
|
||||
$data = RequestLog::query()
|
||||
->with([
|
||||
'member:id,member_id,person_id,birth_date,email,name_prefix,name,name_suffix' => [
|
||||
'currentCorporate',
|
||||
'person:id,email,name_prefix,name,name_suffix,phone'
|
||||
],
|
||||
'organization:id,name',
|
||||
'requestLogBenefits:id,request_log_id,benefit_id,amount_incurred,amount_approved,amount_not_approved,excess_paid,keterangan' => [
|
||||
'benefit'
|
||||
],
|
||||
'requestLogDailyMonitorings:id,request_log_id,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']);
|
||||
|
||||
$dataBenefit = [];
|
||||
if (count($data->requestLogBenefits) > 0) {
|
||||
$totalIncurred = 0;
|
||||
$totalApprove = 0;
|
||||
$totalNotApporve = 0;
|
||||
$totalExcess = 0;
|
||||
|
||||
foreach ($data->requestLogBenefits as $itemBenefit) {
|
||||
$totalIncurred += $itemBenefit->amount_incurred;
|
||||
$totalApprove += $itemBenefit->amount_approved;
|
||||
$totalNotApporve += $itemBenefit->amount_not_approved;
|
||||
$totalExcess += $itemBenefit->excess_paid;
|
||||
}
|
||||
|
||||
$dataBenefit['totalIncurred'] = $totalIncurred;
|
||||
$dataBenefit['totalApprove'] = $totalApprove;
|
||||
$dataBenefit['totalNotApprove'] = $totalNotApporve;
|
||||
$dataBenefit['totalExcess'] = $totalExcess;
|
||||
}
|
||||
|
||||
$data->benefitTotal = $dataBenefit;
|
||||
|
||||
return Helper::responseJson(DataServiceMonitoring::make($data));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ class CorporatePolicyController extends Controller
|
||||
public function index($corporate_id)
|
||||
{
|
||||
$currentCorporate = Auth::user()->managedCorporates()
|
||||
->with(['currentPolicy', 'employees'])
|
||||
->with(['currentPolicy'])
|
||||
->find($corporate_id);
|
||||
|
||||
$data = LimitResources::make($currentCorporate);
|
||||
|
||||
68
Modules/Client/Http/Controllers/Api/DataController.php
Normal file
68
Modules/Client/Http/Controllers/Api/DataController.php
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
93
Modules/Client/Http/Controllers/Api/MemberController.php
Normal file
93
Modules/Client/Http/Controllers/Api/MemberController.php
Normal 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());
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@
|
||||
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;
|
||||
@@ -19,7 +20,7 @@ class TopUpController extends Controller
|
||||
{
|
||||
$data = Auth::user()
|
||||
->managedCorporates()
|
||||
->with(['currentPolicy', 'employees'])
|
||||
->with(['currentPolicy'])
|
||||
->withCount(['employees', 'claims' => function ($query) {
|
||||
$query->where('claims.status', 'paid');
|
||||
}])
|
||||
@@ -33,9 +34,22 @@ class TopUpController extends Controller
|
||||
* @param Request $request
|
||||
* @return Renderable
|
||||
*/
|
||||
public function store(Request $request)
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -48,6 +62,23 @@ class TopUpController extends Controller
|
||||
return view('client::show');
|
||||
}
|
||||
|
||||
public function get($corporate_id)
|
||||
{
|
||||
$data = CorporatePolicy::query()
|
||||
->where('corporate_id', $corporate_id)
|
||||
->with(['currentPolicy', 'employees'])
|
||||
->withCount(['employees', 'claims' => function ($query) {
|
||||
$query->where('claims.status', 'paid');
|
||||
}])
|
||||
->first();
|
||||
|
||||
if (!$data) {
|
||||
return response()->json(['message' => 'Corporate policy not found'], 404);
|
||||
}
|
||||
|
||||
return Helper::responseJson(TopUpLimitResources::make($data));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
* @param Request $request
|
||||
|
||||
@@ -4,10 +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;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
@@ -30,19 +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,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,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -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))
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace Modules\Client\Transformers\ClaimReport;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use Illuminate\Support\Facades\Crypt;
|
||||
|
||||
class MemberResources extends JsonResource
|
||||
{
|
||||
@@ -16,11 +17,13 @@ class MemberResources extends JsonResource
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'memberId' => $this->member_id,
|
||||
'fullName' => $this->full_name,
|
||||
'division' => $this->division_name ?? '',
|
||||
'submission_date' => '',
|
||||
'status' => $this->active,
|
||||
'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,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
31
Modules/Client/Transformers/ClaimReport/ShowResources.php
Normal file
31
Modules/Client/Transformers/ClaimReport/ShowResources.php
Normal 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'))
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
c<?php
|
||||
<?php
|
||||
|
||||
namespace Modules\Client\Transformers;
|
||||
|
||||
@@ -25,7 +25,7 @@ class ClaimShowResource extends JsonResource
|
||||
$itemData['nominal_dicover'] = $item['nominal_dicover'] ?? 0;
|
||||
$itemData['nominal_ditagihkan'] = $item['nominal_ditagihkan'] ?? 0;
|
||||
$itemData['nominal_total'] = $item['nominal_total'] ?? 0;
|
||||
|
||||
|
||||
// For React Frotnend
|
||||
$itemData['biaya_diajukan'] = $itemData['nominal_ditagihkan'];
|
||||
$itemData['biaya_disetujui'] = $itemData['nominal_dicover'];
|
||||
@@ -33,8 +33,12 @@ class ClaimShowResource extends JsonResource
|
||||
return $itemData;
|
||||
});
|
||||
|
||||
$data['primary_diagnosis'] = $this->diagnoses->filter(function($diagnosis){ return $diagnosis->type == 'primary';})->values();
|
||||
$data['secondary_diagnosis'] = $this->diagnoses->filter(function($diagnosis){ return $diagnosis->type == 'secondary';})->values();
|
||||
$data['primary_diagnosis'] = $this->diagnoses->filter(function ($diagnosis) {
|
||||
return $diagnosis->type == 'primary';
|
||||
})->values();
|
||||
$data['secondary_diagnosis'] = $this->diagnoses->filter(function ($diagnosis) {
|
||||
return $diagnosis->type == 'secondary';
|
||||
})->values();
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
@@ -15,11 +15,12 @@ class MemberAlarmCenterResources extends JsonResource
|
||||
{
|
||||
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,
|
||||
'start_date' => $this->members_effective_date,
|
||||
'end_date' => $this->members_expire_date,
|
||||
'status' => $this->active,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -14,6 +14,7 @@ class MemberResources extends JsonResource
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
// dd($this->currentPlans);
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'memberId' => $this->member_id,
|
||||
@@ -25,6 +26,7 @@ class MemberResources extends JsonResource
|
||||
'percentage' => (!empty($this->currentPlan->limit_rules ?? 0)) ? (($this->claims_sum_total_claim / $this->currentPlan->limit_rules) * 100) : 0
|
||||
],
|
||||
'status' => $this->active,
|
||||
// 'service_type' => $this->currentPlans,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
92
Modules/Client/Transformers/DataMemberResource.php
Normal file
92
Modules/Client/Transformers/DataMemberResource.php
Normal 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;
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
];
|
||||
}
|
||||
}
|
||||
21
Modules/HospitalPortal/Helpers/ApiResponse.php
Normal file
21
Modules/HospitalPortal/Helpers/ApiResponse.php
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -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,70 +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|in:OP,IP'
|
||||
'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, paymentType: 'reimbursement', serviceCode: $request->service_code);
|
||||
|
||||
ClaimRequested::dispatch($newClaimRequest);
|
||||
|
||||
// Log History
|
||||
$newClaimRequest->histories()->create([
|
||||
'title' => 'New Claim Requested',
|
||||
'description' => "Claim Requested for Member : {$member->member_id} - ({$member->full_name})",
|
||||
'type' => 'info',
|
||||
'system_origin' => 'hospital-portal'
|
||||
]);
|
||||
|
||||
if ($request->hasFile('result_files')) {
|
||||
foreach ($request->result_files as $file) {
|
||||
$pathFile = File::storeFile('claim-result', $newClaimRequest->id, $file);
|
||||
$newClaimRequest->files()->updateOrCreate([
|
||||
'type' => 'claim-result',
|
||||
'name' => File::getFileName('claim-result', $newClaimRequest->id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
}
|
||||
if ($validator->fails())
|
||||
{
|
||||
return ApiResponse::apiResponse('Bad Request', $data, $validator->errors(), 400);
|
||||
}
|
||||
|
||||
if ($request->hasFile('diagnosa_files')) {
|
||||
foreach ($request->diagnosa_files as $file) {
|
||||
$pathFile = File::storeFile('claim-diagnosis', $newClaimRequest->id, $file);
|
||||
$newClaimRequest->files()->updateOrCreate([
|
||||
'type' => 'claim-diagnosis',
|
||||
'name' => File::getFileName('claim-diagnosis', $newClaimRequest->id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
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('result_files')) {
|
||||
foreach ($request->result_files as $file) {
|
||||
$pathFile = File::storeFile('claim-kondisi', $newClaimRequest->id, $file);
|
||||
$newClaimRequest->files()->updateOrCreate([
|
||||
'type' => 'claim-kondisi',
|
||||
'name' => File::getFileName('claim-kondisi', $newClaimRequest->id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
]);
|
||||
else
|
||||
{
|
||||
return ApiResponse::apiResponse("Error", $data, trans('Message.already_exists'), 409);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return Helper::responseJson(data: $request->toArray(), message: 'Claim Request berhasil ajukan!');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -137,7 +164,8 @@ class ClaimRequestController extends Controller
|
||||
$claimRequest->load([
|
||||
'histories' => function ($history) {
|
||||
$history->latest();
|
||||
}
|
||||
},
|
||||
'files',
|
||||
]);
|
||||
|
||||
return Helper::responseJson(data: ClaimRequestShowResource::make($claimRequest));
|
||||
@@ -178,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');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
65
Modules/HospitalPortal/Http/Middleware/Authentication.php
Normal file
65
Modules/HospitalPortal/Http/Middleware/Authentication.php
Normal 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);
|
||||
}
|
||||
}
|
||||
71
Modules/HospitalPortal/Http/Middleware/Authorization.php
Normal file
71
Modules/HospitalPortal/Http/Middleware/Authorization.php
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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']);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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,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)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -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'
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -4,15 +4,29 @@ namespace Modules\Internal\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\ClaimRequest;
|
||||
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 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
|
||||
@@ -22,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'])) {
|
||||
@@ -34,7 +51,7 @@ class ClaimRequestController extends Controller
|
||||
->when($request->status, function($q, $status) {
|
||||
$q->where('status', $status);
|
||||
})
|
||||
->with(['member', 'files', 'service'])
|
||||
->with(['member', 'files', 'service', 'member.currentPolicy'])
|
||||
->paginate();
|
||||
|
||||
return Helper::paginateResources(ClaimRequestResource::collection($claimRequests));
|
||||
@@ -50,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());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -71,7 +225,10 @@ class ClaimRequestController extends Controller
|
||||
'histories' => function ($history) {
|
||||
$history->latest();
|
||||
},
|
||||
'files'
|
||||
'files',
|
||||
'member',
|
||||
'claim',
|
||||
'organization',
|
||||
]);
|
||||
|
||||
return Helper::responseJson(data: ClaimRequestShowResource::make($claimRequest));
|
||||
@@ -95,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);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -112,17 +345,17 @@ class ClaimRequestController extends Controller
|
||||
{
|
||||
$claimRequest = ClaimRequest::findOrFail($id);
|
||||
$member = $claimRequest->member;
|
||||
|
||||
|
||||
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([
|
||||
@@ -133,11 +366,408 @@ class ClaimRequestController extends Controller
|
||||
'system_origin' => 'primecenter'
|
||||
]);
|
||||
|
||||
} catch (\Exception $e) {
|
||||
// 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');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,10 +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',
|
||||
@@ -100,6 +103,7 @@ class CorporateController extends Controller
|
||||
if ($request->has('policy_code') && !empty($request->policy_code)) {
|
||||
$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,
|
||||
@@ -117,9 +121,9 @@ class CorporateController extends Controller
|
||||
$services = [
|
||||
[
|
||||
'id' => 1,
|
||||
'name' => 'Out Patient',
|
||||
'name' => 'Outpatient',
|
||||
'code' => 'OP',
|
||||
'description' => 'Out Patient',
|
||||
'description' => 'Outpatient',
|
||||
],
|
||||
[
|
||||
'id' => 2,
|
||||
@@ -300,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',
|
||||
@@ -327,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,
|
||||
@@ -375,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([
|
||||
@@ -399,10 +407,11 @@ class CorporateController extends Controller
|
||||
$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'])) {
|
||||
@@ -425,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
|
||||
@@ -442,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') {
|
||||
@@ -455,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(),
|
||||
@@ -470,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',
|
||||
@@ -493,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':
|
||||
@@ -507,17 +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'));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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')
|
||||
]);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
@@ -155,9 +182,10 @@ class CorporateMemberController extends Controller
|
||||
$result_headers = $this->memberEnrollmentService->result_doc_headers;
|
||||
$singleRow = WriterEntityFactory::createRow($this->memberEnrollmentService->makeResultRow($result_headers));
|
||||
$writer->addRow($singleRow);
|
||||
|
||||
|
||||
$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 {
|
||||
|
||||
$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');
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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),
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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')
|
||||
]);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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')
|
||||
]);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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,8 +93,6 @@ class DivisionController extends Controller
|
||||
$request->validate([
|
||||
'code' => [
|
||||
'required',
|
||||
// Rule::unique('corporate_plans')->where('corporate_id', $corporate_id)->ignore($corporatePlan->id)
|
||||
Rule::unique('corporate_divisions')->where('corporate_id', $corporate_id)
|
||||
],
|
||||
'name' => 'required'
|
||||
]);
|
||||
@@ -100,7 +100,7 @@ class DivisionController extends Controller
|
||||
$corporatePlan->fill([
|
||||
'code' => $request->code,
|
||||
'name' => $request->name,
|
||||
'active' => $request->active,
|
||||
'description' => $request->description,
|
||||
])->save();
|
||||
|
||||
return $corporatePlan;
|
||||
|
||||
103
Modules/Internal/Http/Controllers/Api/DoctorRatingController.php
Normal file
103
Modules/Internal/Http/Controllers/Api/DoctorRatingController.php
Normal 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)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,8 @@ use App\Models\Drug;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use App\Helpers\Helper;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
|
||||
class DrugController extends Controller
|
||||
{
|
||||
@@ -15,8 +17,11 @@ class DrugController extends Controller
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$drugs = Drug::withTrashed()->filter($request->toArray())->paginate();
|
||||
|
||||
$drugs = Drug::query()
|
||||
->filter($request->all())
|
||||
->orderBy('id', 'DESC')
|
||||
->paginate(0)
|
||||
->appends($request->all());
|
||||
return $drugs;
|
||||
}
|
||||
|
||||
@@ -79,4 +84,110 @@ class DrugController extends Controller
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
public function activation(Request $request, $drug_id)
|
||||
{
|
||||
$request->validate([
|
||||
'active' => 'required',
|
||||
'reason' => 'required',
|
||||
]);
|
||||
|
||||
$drug = Drug::findOrFail($drug_id);
|
||||
$drug->active = $request->active;
|
||||
$drug->reason = $request->reason;
|
||||
|
||||
if ($drug->save()) {
|
||||
return response()->json([
|
||||
'hostpital' => $drug,
|
||||
'message' => 'Status Updated Successfully'
|
||||
]);
|
||||
}
|
||||
}
|
||||
public function downloadTemplate()
|
||||
{
|
||||
return Helper::responseJson([
|
||||
'file_name' => "Template - Drugs.xlsx",
|
||||
"file_url" => url('files/Template - Drugs.xlsx')
|
||||
]);
|
||||
}
|
||||
public function import(Request $request)
|
||||
{
|
||||
if ($request->hasFile('file')) {
|
||||
$file = $request->file('file');
|
||||
$data = Excel::toArray([], $file);
|
||||
|
||||
$processedData = $this->processCategoryNames($data);
|
||||
|
||||
$importedRows = 0;
|
||||
$failedRows = [];
|
||||
|
||||
foreach ($processedData as $row) {
|
||||
try {
|
||||
Drug::create(
|
||||
[
|
||||
'name' => $row['name'],
|
||||
'code' => $row['code'],
|
||||
'generic_name' => $row['generic_name'],
|
||||
'description' => $row['description'],
|
||||
'mims_class' => $row['mims_class'],
|
||||
'indications' => $row['indications'],
|
||||
'atc_code' => $row['atc_code'],
|
||||
'segmentation' => $row['segmentation'],
|
||||
'type' => $row['type'],
|
||||
'dosage' => $row['dosage'],
|
||||
'remark' => $row['remark'],
|
||||
]
|
||||
);
|
||||
$importedRows++;
|
||||
} catch (\Exception $e) {
|
||||
$failedRows[] = $row;
|
||||
}
|
||||
}
|
||||
|
||||
$response = [
|
||||
'message' => 'File uploaded and data saved to database',
|
||||
'data' => [
|
||||
'total_success_row' => $importedRows,
|
||||
'total_failed_row' => count($failedRows),
|
||||
'failed_rows' => $failedRows,
|
||||
],
|
||||
];
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
return response()->json(['error' => 'No file uploaded.']);
|
||||
}
|
||||
|
||||
private function processCategoryNames($data)
|
||||
{
|
||||
$header = [];
|
||||
$row = [];
|
||||
for ($i = 1; $i < count($data[0]); $i++) {
|
||||
$row[] = $data[0][$i];
|
||||
$header[] = $data[0][0];
|
||||
}
|
||||
|
||||
$filed = [];
|
||||
foreach ($header[0] as $value)
|
||||
{
|
||||
$modelColumn = strtolower(preg_replace('/\s+/', '_', trim($value)));
|
||||
$modelColumn = str_replace(['*', ' '], '', $modelColumn);
|
||||
if($modelColumn)
|
||||
{
|
||||
$filed[] = $modelColumn;
|
||||
}
|
||||
}
|
||||
|
||||
$result = [];
|
||||
foreach ($row as $subarray) {
|
||||
$trimmedSubarray = [];
|
||||
for ($i = 0; $i < count($filed); $i++) {
|
||||
$trimmedSubarray[$filed[$i]] = $subarray[$i] ? $subarray[$i] : null;
|
||||
}
|
||||
|
||||
$result[] = $trimmedSubarray;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,9 +3,21 @@
|
||||
namespace Modules\Internal\Http\Controllers\Api;
|
||||
|
||||
use App\Models\Formularium;
|
||||
use App\Services\ImportService;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use App\Helpers\Helper;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
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 FormulariumController extends Controller
|
||||
{
|
||||
@@ -13,10 +25,27 @@ class FormulariumController extends Controller
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function index(Request $request)
|
||||
public function __construct(FormulariumService $formulariumService)
|
||||
{
|
||||
$formulariums = Formularium::withTrashed()->withCount('items')->filter($request->toArray())->paginate();
|
||||
|
||||
$this->formulariumService = $formulariumService;
|
||||
}
|
||||
public function index(Request $request, $id)
|
||||
{
|
||||
if ($request->search) {
|
||||
return Formularium::when($request->search ?? null, function ($formularium) use ($request, $id) {
|
||||
$formularium->where('formularium_template_id', $id)
|
||||
->where('name', 'LIKE', '%' . $request->search . '%')
|
||||
->orWhere('code', 'LIKE', '%' . $request->search . '%');
|
||||
})->paginate(15);
|
||||
}
|
||||
else {
|
||||
$formulariums = Formularium::query()
|
||||
// ->filter($request->toArray())
|
||||
->where('formularium_template_id', $id)
|
||||
->orderBy('name', 'ASC')
|
||||
->paginate(15);
|
||||
return $formulariums;
|
||||
}
|
||||
return $formulariums;
|
||||
}
|
||||
|
||||
@@ -34,7 +63,7 @@ class FormulariumController extends Controller
|
||||
* @param Request $request
|
||||
* @return Renderable
|
||||
*/
|
||||
public function store(Request $request)
|
||||
public function store(Request $request, $id)
|
||||
{
|
||||
$request->validate([
|
||||
'name' => 'required|string|max:255',
|
||||
@@ -87,7 +116,7 @@ class FormulariumController extends Controller
|
||||
//
|
||||
}
|
||||
|
||||
public function import(Request $request)
|
||||
public function import(Request $request, $id)
|
||||
{
|
||||
$request->validate([
|
||||
'file' => 'required|file|mimes:xls,xlsx,csv,txt',
|
||||
@@ -95,7 +124,6 @@ class FormulariumController extends Controller
|
||||
// dd($request->toArray());
|
||||
$file_name = now()->getPreciseTimestamp(3).'-'.$request->file('file')->getClientOriginalName();
|
||||
$file = $request->file('file')->storeAs('temp', $file_name);
|
||||
$corporate = Corporate::findOrFail($corporate_id);
|
||||
|
||||
// $importLog = $corporate->importLogs()->create([
|
||||
// 'type' => 'diagnosis-exclusions',
|
||||
@@ -107,7 +135,6 @@ class FormulariumController extends Controller
|
||||
$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) {
|
||||
@@ -130,16 +157,19 @@ class FormulariumController extends Controller
|
||||
$row_data = [];
|
||||
$row_map = [
|
||||
0 => 'code',
|
||||
1 => 'description',
|
||||
2 => 'ip_exclusion',
|
||||
3 => 'op_exclusion',
|
||||
4 => 'de_exclusion',
|
||||
5 => 'ma_exclusion',
|
||||
6 => 'sp_exclusion',
|
||||
7 => 'pre_exist_exclusion',
|
||||
8 => 'op_de_exclusion',
|
||||
9 => 'keterangan',
|
||||
10 => 'maternity_waiting'
|
||||
1 => 'name',
|
||||
2 => 'description',
|
||||
3 => 'manufacturer',
|
||||
4 => 'category_name',
|
||||
5 => 'kategori_obat',
|
||||
6 => 'uom',
|
||||
7 => 'general_indication',
|
||||
8 => 'composition',
|
||||
9 => 'atc_code',
|
||||
10 => 'class',
|
||||
11 => 'bpom_registration',
|
||||
12 => 'classifications',
|
||||
13 => 'cat_for',
|
||||
];
|
||||
|
||||
foreach ($row->getCells() as $header_index => $cell) {
|
||||
@@ -157,20 +187,27 @@ class FormulariumController extends Controller
|
||||
if (
|
||||
// empty($row_data['code']) &&
|
||||
// empty($row_data['description']) &&
|
||||
empty($row_data['ip_exclusion']) &&
|
||||
empty($row_data['op_exclusion']) &&
|
||||
empty($row_data['de_exclusion']) &&
|
||||
empty($row_data['ma_exclusion']) &&
|
||||
empty($row_data['sp_exclusion']) &&
|
||||
empty($row_data['pre_exis_exclusion']) &&
|
||||
empty($row_data['op_de_exclusion']) &&
|
||||
empty($row_data['maternity_waiting'])) {
|
||||
empty($row_data['code']) &&
|
||||
empty($row_data['name']) &&
|
||||
empty($row_data['description']) &&
|
||||
empty($row_data['manufacturer']) &&
|
||||
empty($row_data['category_name']) &&
|
||||
empty($row_data['kategori_obat']) &&
|
||||
empty($row_data['uom']) &&
|
||||
empty($row_data['general_indication']) &&
|
||||
empty($row_data['composition']) &&
|
||||
empty($row_data['atc_code']) &&
|
||||
empty($row_data['class']) &&
|
||||
empty($row_data['bpom_registration']) &&
|
||||
empty($row_data['classifications']) &&
|
||||
empty($row_data['cat_for'])
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Save the Row
|
||||
$exclusionService = new ExclusionService();
|
||||
$exclusionService->handleDiagnosisExclusionRow($corporate, $row_data);
|
||||
$formulariumService = new FormulariumService();
|
||||
$formulariumService->handleFormuariumTemplateRow($row_data, $id);
|
||||
|
||||
// Write Success Result to File
|
||||
$import->addArrayToRow(array_merge($row_data, [
|
||||
@@ -211,4 +248,64 @@ class FormulariumController extends Controller
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
public function generateFormulariumList(Request $request)
|
||||
{
|
||||
// Mendapatkan data yang akan diekspor (misalnya, dari database)
|
||||
$data = Formularium::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')
|
||||
]);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,316 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Internal\Http\Controllers\Api;
|
||||
|
||||
use App\Models\Formularium;
|
||||
use App\Models\FormulariumTemplate;
|
||||
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 FormulariumTemplateController extends Controller
|
||||
{
|
||||
public function index(Request $request)
|
||||
{
|
||||
if ($request->search){
|
||||
return FormulariumTemplate::when($request->search ?? null, function($icd, $search) {
|
||||
$icd->where('name', 'LIKE', '%'.$search.'%')
|
||||
->orWhere('description', 'LIKE', '%'.$search.'%');
|
||||
})->paginate(15);
|
||||
} else {
|
||||
$diagnosisTemplate = FormulariumTemplate::query()
|
||||
// ->filter($request->toArray())
|
||||
->orderBy('name', '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 = FormulariumTemplate::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)
|
||||
{
|
||||
$FormulariumTemplate = FormulariumTemplate::findOrFail($id);
|
||||
|
||||
return $FormulariumTemplate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
* @param Request $request
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
$FormulariumTemplate = FormulariumTemplate::findOrFail($id);
|
||||
$request->validate([
|
||||
'name' => 'required'
|
||||
]);
|
||||
$FormulariumTemplate->fill([
|
||||
// 'code' => $request->code,
|
||||
'name' => $request->name,
|
||||
'description' => $request->description,
|
||||
'active' => $request->active,
|
||||
])->save();
|
||||
|
||||
return $FormulariumTemplate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
public function search(Request $request)
|
||||
{
|
||||
return FormulariumTemplate::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'
|
||||
]);
|
||||
$formulariumTemplate = FormulariumTemplate::find($id);
|
||||
|
||||
$formulariumTemplate->active = $request->active == 1 ? 0 : 1;
|
||||
|
||||
if ($formulariumTemplate->save()) {
|
||||
return response()->json([
|
||||
'data' => $formulariumTemplate,
|
||||
'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')
|
||||
]);
|
||||
|
||||
}
|
||||
}
|
||||
266
Modules/Internal/Http/Controllers/Api/HospitalController.php
Normal file
266
Modules/Internal/Http/Controllers/Api/HospitalController.php
Normal file
@@ -0,0 +1,266 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Internal\Http\Controllers\Api;
|
||||
|
||||
use App\Models\CorporateHospital;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Helpers\Helper;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
|
||||
class HospitalController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function index(Request $request, $corporate_id)
|
||||
{
|
||||
$datas = CorporateHospital::query()
|
||||
->filter($request->all())
|
||||
->where('corporate_id', $corporate_id)
|
||||
->orderBy('id', 'DESC')
|
||||
->paginate(0)
|
||||
->appends($request->all());
|
||||
|
||||
return $datas;
|
||||
}
|
||||
|
||||
public function activation(Request $request, $hospital_id)
|
||||
{
|
||||
$request->validate([
|
||||
'active' => 'required',
|
||||
'reason' => 'required',
|
||||
]);
|
||||
|
||||
// abort(404);
|
||||
|
||||
$hostpital = CorporateHospital::findOrFail($hospital_id);
|
||||
$hostpital->active = $request->active;
|
||||
$hostpital->reason = $request->reason;
|
||||
|
||||
if ($hostpital->save()) {
|
||||
return response()->json([
|
||||
'hostpital' => $hostpital,
|
||||
'message' => 'Status Updated Successfully'
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
public function dataHospital(Request $request, $corporate_id)
|
||||
{
|
||||
$data = DB::table('organizations')
|
||||
->where('type', 'hospital')
|
||||
->where('status', 'active')
|
||||
->orderBy('id', 'desc')
|
||||
->get();
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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, $corporate_id)
|
||||
{
|
||||
$request->validate([
|
||||
'corporate_id' => 'required',
|
||||
'code' => 'required',
|
||||
'name' => 'required',
|
||||
'organization_id' => 'required',
|
||||
]);
|
||||
|
||||
$newCorporateHospital = CorporateHospital::create([
|
||||
'corporate_id' => $corporate_id,
|
||||
'code' => $request->code,
|
||||
'name' => $request->name,
|
||||
'organization_id' => $request->organization_id,
|
||||
'description' => $request->description ? $request->description : null,
|
||||
]);
|
||||
|
||||
return $newCorporateHospital;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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($corporate_id, $id)
|
||||
{
|
||||
$corporatePlan = CorporateDivision::findOrFail($id);
|
||||
|
||||
return $corporatePlan;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
* @param Request $request
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function update(Request $request, $corporate_id, $id)
|
||||
{
|
||||
$corporatePlan = CorporateHospital::findOrFail($id);
|
||||
$request->validate([
|
||||
'corporate_id' => 'required',
|
||||
'code' => 'required',
|
||||
'name' => 'required',
|
||||
'organization_id' => 'required',
|
||||
]);
|
||||
|
||||
$corporatePlan->fill([
|
||||
'corporate_id' => $corporate_id,
|
||||
'code' => $request->code,
|
||||
'name' => $request->name,
|
||||
'organization_id' => $request->organization_id,
|
||||
'description' => $request->description ? $request->description : null,
|
||||
])->save();
|
||||
|
||||
return $corporatePlan;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
//
|
||||
}
|
||||
public function downloadTemplate()
|
||||
{
|
||||
return Helper::responseJson([
|
||||
'file_name' => "Template - Hospitals.xlsx",
|
||||
"file_url" => url('files/Template - Hospitals.xlsx')
|
||||
]);
|
||||
}
|
||||
|
||||
public function import(Request $request, $corporate_id)
|
||||
{
|
||||
if ($request->hasFile('file')) {
|
||||
$file = $request->file('file');
|
||||
$data = Excel::toArray([], $file);
|
||||
|
||||
$processedData = $this->processCategoryNames($data);
|
||||
|
||||
$importedRows = 0;
|
||||
$failedRows = [];
|
||||
|
||||
foreach ($processedData as $row) {
|
||||
$q_check = DB::table('corporate_hospitals')
|
||||
->where('code', '=', $row['code'])
|
||||
->select('code')
|
||||
->first();
|
||||
$q = DB::table('organizations')
|
||||
->where('code', '=', $row['code'])
|
||||
->where('type', '=', 'hospital')
|
||||
->where('status', '=', 'active')
|
||||
->select('id', 'code', 'name')
|
||||
->first();
|
||||
try {
|
||||
if($q_check)
|
||||
{
|
||||
DB::table('corporate_hospitals')
|
||||
->where('code','=', $q_check->code)
|
||||
->update(
|
||||
[
|
||||
'corporate_id' => $corporate_id,
|
||||
'code' => $q->code,
|
||||
'name' => $q->name,
|
||||
'organization_id' => $q->id,
|
||||
'description' => $request->description ? $request->description : null,
|
||||
'updated_by' =>auth()->user()->id,
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
]
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
CorporateHospital::create(
|
||||
[
|
||||
'corporate_id' => $corporate_id,
|
||||
'code' => $q->code,
|
||||
'name' => $q->name,
|
||||
'organization_id' => $q->id,
|
||||
'description' => $request->description ? $request->description : null,
|
||||
]
|
||||
);
|
||||
}
|
||||
$importedRows++;
|
||||
} catch (\Exception $e) {
|
||||
$failedRows[] = $row;
|
||||
}
|
||||
}
|
||||
|
||||
$response = [
|
||||
'message' => 'File uploaded and data saved to database',
|
||||
'data' => [
|
||||
'total_success_row' => $importedRows,
|
||||
'total_failed_row' => count($failedRows),
|
||||
'failed_rows' => $failedRows,
|
||||
],
|
||||
];
|
||||
|
||||
return response()->json($response);
|
||||
}
|
||||
|
||||
return response()->json(['error' => 'No file uploaded.']);
|
||||
}
|
||||
|
||||
private function processCategoryNames($data)
|
||||
{
|
||||
$header = [];
|
||||
$row = [];
|
||||
for ($i = 1; $i < count($data[0]); $i++) {
|
||||
$row[] = $data[0][$i];
|
||||
$header[] = $data[0][0];
|
||||
}
|
||||
|
||||
$filed = [];
|
||||
foreach ($header[0] as $value)
|
||||
{
|
||||
$modelColumn = strtolower(preg_replace('/\s+/', '_', trim($value)));
|
||||
$modelColumn = str_replace(['*', ' '], '', $modelColumn);
|
||||
if($modelColumn)
|
||||
{
|
||||
$filed[] = $modelColumn;
|
||||
}
|
||||
}
|
||||
|
||||
$result = [];
|
||||
foreach ($row as $subarray) {
|
||||
$trimmedSubarray = [];
|
||||
for ($i = 0; $i < count($filed); $i++) {
|
||||
$trimmedSubarray[$filed[$i]] = $subarray[$i] ? $subarray[$i] : null;
|
||||
}
|
||||
|
||||
$result[] = $trimmedSubarray;
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,148 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Internal\Http\Controllers\Api;
|
||||
|
||||
use App\Models\File;
|
||||
use App\Models\LaboratoriumResult;
|
||||
use App\Models\MedicalPlan;
|
||||
use DB;
|
||||
use Exception;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
|
||||
/**
|
||||
* Bagaskoro BSD 28-10-2023
|
||||
*
|
||||
* Controller untuk laboratorium result
|
||||
*/
|
||||
class LaboratoriumResultController 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'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Detail Lab Result List - by claim_code
|
||||
*/
|
||||
public function GetDetailLabResultList(Request $request, $claim_code)
|
||||
{
|
||||
// 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', empty($claim_request)==false ? $claim_request->id : '')
|
||||
->first();
|
||||
|
||||
$detail_list = LaboratoriumResult::where('claim_id', empty($claim) == false ? $claim->id : '')->orderBy("created_at", "desc")->get()->makeHidden(['updated_at']);
|
||||
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'message' => "success",
|
||||
'data' => [
|
||||
'lab_result_list'=> $detail_list,
|
||||
]
|
||||
],200);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add Detail Lab Result List
|
||||
*/
|
||||
public function AddDetailLabResultList(Request $request, $claim_code)
|
||||
{
|
||||
$request->merge(['claim_code' => $claim_code]);
|
||||
|
||||
// validation rule
|
||||
$validator = Validator::make($request->all(),[
|
||||
'claim_code' => 'required|exists:claim_requests,code',
|
||||
'date' => 'required',
|
||||
'location' => 'required',
|
||||
'examination' => 'required',
|
||||
'lab_result_file' => '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 lab result
|
||||
$db_response = LaboratoriumResult::create([
|
||||
'claim_id' => $claim->id,
|
||||
'date' => $request->date,
|
||||
'location' => $request->location,
|
||||
'examination' => $request->examination,
|
||||
]);
|
||||
|
||||
// insert file result
|
||||
foreach ($request->lab_result_file as $file) {
|
||||
$name = 'labresult-' . uniqid();
|
||||
$extension= $file->getClientOriginalExtension();
|
||||
$fileName = $name . '.' . $extension;
|
||||
|
||||
File::create([
|
||||
'fileable_type' => 'App\Models\LaboratoriumResult',
|
||||
'fileable_id' => $db_response->id,
|
||||
'type' => 'laboratorium-result',
|
||||
'name' => $name,
|
||||
'original_name' => $fileName,
|
||||
'extension' => $extension,
|
||||
'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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -55,8 +55,8 @@ class PaymentController extends Controller
|
||||
// });
|
||||
|
||||
$appointments = $appointments->where(function($q) use ($request) {
|
||||
$q->where('dAgreeOn', '>=', $request->appointment_start)
|
||||
->where('dAgreeOn', '<=', $request->appointment_end);
|
||||
$q->where('dCreateOn', '>=', $request->appointment_start)
|
||||
->where('dCreateOn', '<=', $request->appointment_end);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -4,10 +4,16 @@ namespace Modules\Internal\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\OLDLMS\Livechat;
|
||||
use App\Models\OLDLMS\Appointment;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Modules\Internal\Transformers\LivechatResource;
|
||||
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
|
||||
|
||||
class LivechatController extends Controller
|
||||
{
|
||||
@@ -15,34 +21,29 @@ class LivechatController extends Controller
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function index()
|
||||
public function index(Request $request)
|
||||
{
|
||||
$livechat = Livechat::with('doctor.user', 'doctor.speciality', 'appointment.appointmentDetail', 'healthCare')
|
||||
->where('nIDAppointment', '!=', null)->where('nIDAppointment', '!=', '')
|
||||
->latest()
|
||||
->paginate(15);
|
||||
$startDate = $request->startDate;
|
||||
$endDate = $request->endDate;
|
||||
|
||||
$livechat = Livechat::with('doctor.user', 'doctor.speciality', 'appointment.appointmentDetail', 'healthCare');
|
||||
// ->where('nIDAppointment', '!=', null)
|
||||
// ->where('nIDAppointment', '!=', '');
|
||||
|
||||
|
||||
if ($startDate) {
|
||||
$livechat = $livechat->where('dCreateOn', '>=', $startDate);
|
||||
}
|
||||
|
||||
if ($endDate) {
|
||||
$endDate = date('Y-m-d', strtotime($endDate . ' +1 day'));
|
||||
$livechat = $livechat->where('dCreateOn', '<', $endDate);
|
||||
}
|
||||
$livechat = $livechat->latest()->paginate(15);
|
||||
|
||||
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
|
||||
@@ -57,34 +58,159 @@ class LivechatController extends Controller
|
||||
return response()->json(new LivechatResource($livechat));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for editing the specified resource.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function edit($id)
|
||||
public function export(Request $request)
|
||||
{
|
||||
return view('internal::edit');
|
||||
}
|
||||
$startDate = $request->has('startDate') ? $request->input('startDate') : '';
|
||||
$endDate = $request->has('endDate') ? $request->input('endDate') : '';
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
* @param Request $request
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function update(Request $request, $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
$liveChats = Livechat::with('user:nID,sFirstName,sLastName,sEmail,sPhone,nIDUser', 'doctor:nID,nIDSpesialis,nIDUser', 'doctor.user:nID,sFirstName,sLastName', 'appointment:nID,sPaymentStatus,sPaymentMethod', 'appointment.appointmentDetail:nID,nIDAppointment,dTanggalAppointment,tTimeAppointment', 'healthCare:nID,sHealthCare')
|
||||
->where(function (Builder $query) use ($startDate, $endDate) {
|
||||
// $query->where('nIDAppointment', '!=', null);
|
||||
// $query->where('nIDAppointment', '!=', '');
|
||||
if ($startDate) {
|
||||
$query->where('dCreateOn', '>=', $startDate);
|
||||
}
|
||||
if ($endDate) {
|
||||
$endDate = date('Y-m-d', strtotime($endDate . ' +1 day'));
|
||||
$query->where('dCreateOn', '<', $endDate);
|
||||
}
|
||||
})
|
||||
->orderBy('nID', 'desc')
|
||||
->get(['nID', 'nIDUser', 'nIDDokter', 'nIDHealthCare', 'nIDAppointment', 'sStatus', 'sMediaDokter', 'sMedia', 'dCreateOn']);
|
||||
|
||||
$headers = [
|
||||
['value' => 'No', 'cell' => 'A1', 'mergeCell' => true, 'mergeToCell' => 'A2'],
|
||||
['value' => 'Kode TC', 'cell' => 'B1', 'mergeCell' => true, 'mergeToCell' => 'B2'],
|
||||
['value' => 'Tanggal', 'cell' => 'C1', 'mergeCell' => true, 'mergeToCell' => 'C2'],
|
||||
['value' => 'Waktu', 'cell' => 'D1', 'mergeCell' => true, 'mergeToCell' => 'D2'],
|
||||
['value' => 'Faskes', 'cell' => 'E1', 'mergeCell' => true, 'mergeToCell' => 'E2'],
|
||||
['value' => 'Nama Dokter', 'cell' => 'F1', 'mergeCell' => true, 'mergeToCell' => 'F2'],
|
||||
['value' => 'Spesialis', 'cell' => 'G1', 'mergeCell' => true, 'mergeToCell' => 'G2'],
|
||||
['value' => 'Chat Via App/Website', 'cell' => 'H1', 'mergeCell' => true, 'mergeToCell' => 'I1'],
|
||||
['value' => 'Pasien', 'cell' => 'H2', 'mergeCell' => false, 'mergeToCell' => ''],
|
||||
['value' => 'Dokter', 'cell' => 'I2', 'mergeCell' => false, 'mergeToCell' => ''],
|
||||
['value' => 'nIDUser', 'cell' => 'J1', 'mergeCell' => true, 'mergeToCell' => 'J2'],
|
||||
['value' => 'Nama Pasien', 'cell' => 'K1', 'mergeCell' => true, 'mergeToCell' => 'K2'],
|
||||
['value' => 'No Telepon Pasien', 'cell' => 'L1', 'mergeCell' => true, 'mergeToCell' => 'L2'],
|
||||
['value' => 'Email Pasien', 'cell' => 'M1', 'mergeCell' => true, 'mergeToCell' => 'M2'],
|
||||
['value' => 'Status', 'cell' => 'N1', 'mergeCell' => true, 'mergeToCell' => 'N2'],
|
||||
['value' => 'Record Type', 'cell' => 'O1', 'mergeCell' => true, 'mergeToCell' => 'O2'],
|
||||
['value' => 'nID Principal', 'cell' => 'P1', 'mergeCell' => true, 'mergeToCell' => 'P2'],
|
||||
['value' => 'Metode Pembayaran', 'cell' => 'Q1', 'mergeCell' => true, 'mergeToCell' => 'Q2'],
|
||||
];
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
//
|
||||
$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 = 3;
|
||||
foreach ($liveChats as $indexLiveChat => $liveChat) {
|
||||
$phone = $liveChat->user->sPhone ?? '-';
|
||||
$status = $liveChat->sStatus;
|
||||
$nIDUser = $liveChat->user->nIDUser ?? 0; // Principal or Dependent
|
||||
$paymentMethod = $liveChat->appointment ? Helper::sPaymentMethod($liveChat->appointment->sPaymentMethod) : 'N/A';
|
||||
$fullNameDoctor = '-';
|
||||
if ($liveChat->doctor->user !== null) {
|
||||
$fullNameDoctor = '';
|
||||
|
||||
if ($liveChat->doctor->user->detail !== null) {
|
||||
if ($liveChat->doctor->user->detail->sTitlePrefix !== null) {
|
||||
$fullNameDoctor .= $liveChat->doctor->user->detail->sTitlePrefix . '. ';
|
||||
}
|
||||
|
||||
if ($liveChat->doctor->user->full_name !== null) {
|
||||
$fullNameDoctor .= $liveChat->doctor->user->full_name . ' ';
|
||||
}
|
||||
|
||||
if ($liveChat->doctor->user->detail->sTitleSuffix !== null) {
|
||||
$fullNameDoctor .= $liveChat->doctor->user->detail->sTitleSuffix;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$recordType = 'P';
|
||||
if ($nIDUser){
|
||||
$recordType = 'D';
|
||||
}
|
||||
switch ($status) {
|
||||
case 0:
|
||||
$statusLivechat = "Request TC";
|
||||
break;
|
||||
case 1:
|
||||
$statusLivechat = "Accepted by Doctor but User not Payment";
|
||||
break;
|
||||
case 2:
|
||||
$statusLivechat = "Payment Success";
|
||||
break;
|
||||
case 3:
|
||||
$statusLivechat = "Decline by Doctor";
|
||||
break;
|
||||
case 4:
|
||||
$statusLivechat = "Payment Expired";
|
||||
break;
|
||||
default:
|
||||
$statusLivechat = "Cancel by Patient";
|
||||
}
|
||||
|
||||
$sheet->setCellValue('A' . $startFrom, $indexLiveChat + 1);
|
||||
$sheet->setCellValue('B' . $startFrom, $liveChat->nID ?? '-');
|
||||
$sheet->setCellValue('C' . $startFrom, Carbon::parse($liveChat->dCreateOn)->format('d-m-Y'));
|
||||
$sheet->setCellValue('D' . $startFrom, Carbon::parse($liveChat->dCreateOn)->format('H:i:s'));
|
||||
// $sheet->setCellValue('D' . $startFrom, Carbon::parse($liveChat->dRequestTime)->format('H:i:s'));
|
||||
$sheet->setCellValue('E' . $startFrom, $liveChat->healthCare->sHealthCare ?? '-');
|
||||
$sheet->setCellValue('F' . $startFrom, $fullNameDoctor);
|
||||
$sheet->setCellValue('G' . $startFrom, $liveChat->doctor->speciality->sSpesialis ?? '-');
|
||||
$sheet->setCellValue('H' . $startFrom, $liveChat->sMedia ?? '-');
|
||||
$sheet->setCellValue('I' . $startFrom, $liveChat->sMediaDokter ?? '-');
|
||||
$sheet->setCellValue('J' . $startFrom, $liveChat->user->nID ?? '-');
|
||||
$sheet->setCellValue('K' . $startFrom, $liveChat->user->full_name ?? '-');
|
||||
$sheet->setCellValue('L' . $startFrom, preg_replace('/(\d{3})(\d{4})(\d{3})/', '$1$2$3', $phone));
|
||||
$sheet->setCellValue('M' . $startFrom, $liveChat->user->sEmail ?? '-');
|
||||
$sheet->setCellValue('N' . $startFrom, $statusLivechat);
|
||||
$sheet->setCellValue('O' . $startFrom, $recordType);
|
||||
$sheet->setCellValue('P' . $startFrom, $nIDUser ?? '-');
|
||||
$sheet->setCellValue('Q' . $startFrom, $paymentMethod ?? '-');
|
||||
$startFrom++;
|
||||
}
|
||||
|
||||
foreach (['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J','K', 'L', 'M', 'O', 'P'] 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('A3:A' . $startFrom)->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER)->setVertical(\PhpOffice\PhpSpreadsheet\Style\Alignment::VERTICAL_CENTER);
|
||||
|
||||
$sheet->getDefaultRowDimension()->setRowHeight(-1);
|
||||
$sheet->setTitle('Live Chat Report');
|
||||
|
||||
$writer = new Xlsx($spreadsheet);
|
||||
ob_start();
|
||||
$writer->save('php://output');
|
||||
$content = ob_get_contents();
|
||||
ob_end_clean();
|
||||
|
||||
$fileName = 'result-' . now()->getPreciseTimestamp(3) . '-livechat-report.xlsx';
|
||||
Storage::disk('public')->put('temp/' . $fileName, $content);
|
||||
|
||||
$fileUrl = url('storage/temp/' . $fileName);
|
||||
|
||||
return Helper::responseJson([
|
||||
"file_url" => $fileUrl
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,10 +13,14 @@ class MemberController extends Controller
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function index()
|
||||
public function index(Request $request)
|
||||
{
|
||||
return Member::query()
|
||||
->with('currentPlan')
|
||||
->when($request->search, function ($query, $search) {
|
||||
return $query->where('name', 'LIKE', '%' . $search . '%')
|
||||
->orWhere('member_id', 'LIKE', '%' . $search . '%');
|
||||
})
|
||||
->with('currentPlan', 'currentCorporate')
|
||||
->paginate();
|
||||
}
|
||||
|
||||
|
||||
@@ -120,7 +120,6 @@ class PlanController extends Controller
|
||||
$result_headers = array_keys($headers_map_to_table_fields);
|
||||
array_push($result_headers, ['Ingest Code', 'Ingest Note']);
|
||||
$import->addArrayToRow($result_headers);
|
||||
die('fuck');
|
||||
|
||||
$imported_plan_data = 0;
|
||||
$failed_plan_data = [];
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Internal\Http\Controllers\Api;
|
||||
|
||||
|
||||
use App\Models\OLDLMS\Prescription;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\Routing\Controller;
|
||||
|
||||
class PrescriptionController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* @param int|null $id
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index($id = null)
|
||||
{
|
||||
$query = Prescription::query();
|
||||
if ($id !== null) {
|
||||
$query->where('nID', $id);
|
||||
}
|
||||
|
||||
$prescriptions = $query->select('nID','nIDLiveChat', 'nIDLiveChatSummary', 'nIDDokter', 'sDokterName', 'dTanggalResep', 'sSource', 'nIDUser', 'sKodeResep', 'sDiagnose', 'sStatus')
|
||||
->get();
|
||||
|
||||
// $prescriptions->toArray();
|
||||
// dd($prescriptions);
|
||||
|
||||
return response()->json($prescriptions);
|
||||
// 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)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Internal\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\RequestLogBenefit;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Carbon\Carbon;
|
||||
|
||||
|
||||
class RequestLogBenefitController extends Controller
|
||||
{
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view('internal::create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the specified resource.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
* @param Request $request
|
||||
* @return Renderable
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
|
||||
$customMessages = [
|
||||
'required' => 'Kolom :attribute wajib diisi.',
|
||||
'numeric' => 'Kolom :attribute harus berupa angka.',
|
||||
];
|
||||
|
||||
$validator = Validator::make($request->all(), [
|
||||
'benefit_data' => 'required|array',
|
||||
'benefit_data.*' => 'required',
|
||||
], $customMessages);
|
||||
|
||||
if ($validator->fails()) {
|
||||
return Helper::responseJson([],'error', 400, $validator->errors());
|
||||
} else {
|
||||
$benefitData = $request->benefit_data;
|
||||
|
||||
if (count($benefitData)>0){
|
||||
// BeginTransaction
|
||||
DB::beginTransaction();
|
||||
foreach($benefitData as $key => $value){
|
||||
$data = [
|
||||
'request_log_id' => $value['request_log_id'],
|
||||
'benefit_id' => $value['benefit_id'],
|
||||
'amount_incurred' => $value['amount_incurred'],
|
||||
'amount_approved' => $value['amount_approved'],
|
||||
'amount_not_approved' => $value['amount_not_approved'],
|
||||
'excess_paid' => $value['excess_paid'],
|
||||
'keterangan' => $value['keterangan'],
|
||||
'created_by' => auth()->user()->id,
|
||||
|
||||
];
|
||||
// Insert Data
|
||||
try {
|
||||
RequestLogBenefit::create($data);
|
||||
} catch (\Throwable $th) {
|
||||
DB::rollBack();
|
||||
return Helper::responseJson(status: 'failed', statusCode: 500, message: $th->getMessage());
|
||||
}
|
||||
}
|
||||
DB::commit();
|
||||
return Helper::responseJson(status: 'success', statusCode: 201, message: 'success', data: $request->toArray());
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
$requestLogBenefit = RequestLogBenefit::insert($data);
|
||||
return $requestLogBenefit;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
$requestLogBenefit = requestLogBenefit::findOrFail($id);
|
||||
$requestLogBenefit->amount_approved = $request->amount_approved;
|
||||
$requestLogBenefit->amount_incurred = $request->amount_incurred;
|
||||
$requestLogBenefit->amount_not_approved = $request->amount_not_approved;
|
||||
$requestLogBenefit->excess_paid = $request->excess_paid;
|
||||
$requestLogBenefit->keterangan = $request->keterangan;
|
||||
$requestLogBenefit->updated_by = auth()->user()->id;
|
||||
$requestLogBenefit->updated_at = Carbon::now();
|
||||
|
||||
$requestLogBenefit->save();
|
||||
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'message' => 'Update succses',
|
||||
'data' => $requestLogBenefit],
|
||||
200);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
$requestLogBenefit = RequestLogBenefit::findOrFail($id);
|
||||
$requestLogBenefit->delete();
|
||||
}
|
||||
|
||||
}
|
||||
837
Modules/Internal/Http/Controllers/Api/RequestLogController.php
Normal file
837
Modules/Internal/Http/Controllers/Api/RequestLogController.php
Normal file
@@ -0,0 +1,837 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Internal\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\RequestLog;
|
||||
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 Modules\Internal\Transformers\RequestLogResource;
|
||||
use Modules\Internal\Transformers\RequestLogShowResource;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use App\Exceptions\ImportRowException;
|
||||
use App\Events\RequestLoged;
|
||||
use Carbon\Carbon;
|
||||
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
use Box\Spout\Reader\Common\Creator\ReaderEntityFactory;
|
||||
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
|
||||
|
||||
|
||||
use Exception;
|
||||
use PDF;
|
||||
|
||||
|
||||
|
||||
use App\Models\File;
|
||||
use App\Models\FilesMcu;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Models\Member;
|
||||
use Modules\Internal\Services\RequestLogService;
|
||||
use App\Services\RequestLogService as AppRequestLogService;
|
||||
|
||||
class RequestLogController extends Controller
|
||||
{
|
||||
private static $code_prefix = 'LOG';
|
||||
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->requestLogService = New RequestLogService;
|
||||
}
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$requestLog = RequestLog::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'])) {
|
||||
$q->orderBy($orderBy, $request->order);
|
||||
}
|
||||
})
|
||||
->when(empty($request->orderBy), function ($q) {
|
||||
$q->orderBy('created_at', 'desc');
|
||||
})
|
||||
->when($request->final_log, function($q, $final_log) {
|
||||
$q->where('final_log', $final_log);
|
||||
})
|
||||
->when($request->service_code, function($q, $service_code) {
|
||||
if ($service_code == 'IP'){ // Penjagaan sementara agar ini hanya muncul di inpatient monitoring
|
||||
$q->where('service_code', $service_code);
|
||||
} else {
|
||||
$q->where('service_code', '!=', 'IP'); // Dan selain IP muncul di final LOG
|
||||
}
|
||||
})
|
||||
// ->where('status', $request->status)
|
||||
->with(['member', 'files', 'service', 'member.currentPolicy'])
|
||||
->paginate();
|
||||
|
||||
return Helper::paginateResources(RequestLogResource::collection($requestLog));
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view('internal::create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Create New Request Request
|
||||
*
|
||||
* Tb, BSD 28 November 2023
|
||||
*/
|
||||
public function createNew(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'member_id' => 'required',
|
||||
'service_code' => 'required',
|
||||
]);
|
||||
|
||||
if ($request->member_id){
|
||||
$code = $this->getNextCode($request);
|
||||
$member = Member::find($request->member_id);
|
||||
|
||||
$memberValid = false;
|
||||
if ($member){
|
||||
if (($member->members_effective_date <= date('Y-m-d')) &&
|
||||
($member->members_expire_date >= date('Y-m-d')) &&
|
||||
($member->active == 1) &&
|
||||
($member->suspended == 'N')
|
||||
){
|
||||
DB::beginTransaction();
|
||||
try {
|
||||
$newRequestLog = AppRequestLogService::storeRequestLog(
|
||||
row: [],
|
||||
code: $code,
|
||||
member: $member,
|
||||
paymentType: 'cashless',
|
||||
serviceCode: $request->service_code,
|
||||
submissionDate: null,
|
||||
// status: 'approved',
|
||||
status: 'requested', // di nonaktifkan dulu auto approved
|
||||
organization_id: $request->organization_id,
|
||||
source: $request->source
|
||||
);
|
||||
|
||||
DB::commit();
|
||||
}
|
||||
catch (\Throwable $th) {
|
||||
DB::rollBack();
|
||||
|
||||
return Helper::responseJson(status: 'failed', statusCode: 500, message: $th->getMessage());
|
||||
}
|
||||
} else {
|
||||
DB::beginTransaction();
|
||||
try {
|
||||
$newRequestLog = AppRequestLogService::storeRequestLog(
|
||||
row: [],
|
||||
code: $code,
|
||||
member: $member,
|
||||
paymentType: 'cashless',
|
||||
serviceCode: $request->service_code,
|
||||
submissionDate: null,
|
||||
status: 'requested',
|
||||
organization_id: $request->organization_id,
|
||||
source: $request->source
|
||||
);
|
||||
|
||||
DB::commit();
|
||||
}
|
||||
catch (\Throwable $th) {
|
||||
DB::rollBack();
|
||||
|
||||
return Helper::responseJson(status: 'failed', statusCode: 500, message: $th->getMessage());
|
||||
}
|
||||
// return Helper::responseJson(status: 'failed', statusCode: 500, message: 'Member Not Valid');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return Helper::responseJson(status: 'success', statusCode: 200, message: 'Request LOG berhasil ajukan!', data: $request->toArray());
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the specified resource.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
$claimRequest = RequestLog::findOrFail($id);
|
||||
$claimRequest->load([
|
||||
'histories' => function ($history) {
|
||||
$history->latest();
|
||||
},
|
||||
'files',
|
||||
'member',
|
||||
'member.currentPlan' => function($memberPlan) {
|
||||
$memberPlan->join('request_logs', 'request_logs.service_code', '=', 'plans.service_code');
|
||||
},
|
||||
// 'member.current_policy',
|
||||
'claim',
|
||||
'organization',
|
||||
|
||||
]);
|
||||
|
||||
return Helper::responseJson(data: RequestLogShowResource::make($claimRequest));
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
$requestLog = RequestLog::findOrFail($id);
|
||||
$requestLog->keterangan = $request->keterangan;
|
||||
$requestLog->hak_kamar_pasien = $request->hak_kamar_pasien;
|
||||
$requestLog->penempatan_kamar = $request->penempatan_kamar;
|
||||
$requestLog->catatan = $request->catatan;
|
||||
|
||||
$requestLog->status = $request->status;
|
||||
$requestLog->approved_by = auth()->user()->id;
|
||||
$requestLog->approved_at = Carbon::now();
|
||||
$requestLog->save();
|
||||
|
||||
// update nirc member
|
||||
$member = Member::findOrFail($requestLog->member_id);
|
||||
$member->nric = $request->no_identitas;
|
||||
$member->save();
|
||||
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'message' => 'Update succses',
|
||||
'data' => $requestLog],
|
||||
200);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate Request LOG PDF
|
||||
*/
|
||||
public function generateRequestLog($id)
|
||||
{
|
||||
$requestLog = RequestLog::find($id);
|
||||
$service_code = $requestLog->service_code;
|
||||
if ($requestLog->status != 'approved') {
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => 'LOG Belum Terverifikasi',
|
||||
'data' => $requestLog],
|
||||
200);
|
||||
}
|
||||
|
||||
$member = Member::findOrFail($requestLog->member_id)
|
||||
->load([
|
||||
// 'currentPlan',
|
||||
'currentPlan' => function ($plan) use ($id, $service_code) {
|
||||
$plan->where('plans.service_code', $service_code);
|
||||
},
|
||||
'currentPolicy',
|
||||
'currentPlan.corporateBenefits',
|
||||
'currentPlan.corporateBenefits.benefit'
|
||||
]);
|
||||
|
||||
$pdf = PDF::loadView('pdf.guaranted_leter', compact('member', 'requestLog'));
|
||||
return $pdf->download('Guaranted Letter - '.$member->full_name.'.pdf');
|
||||
|
||||
return $requestLog;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate Export Excel Request LOG
|
||||
*/
|
||||
|
||||
public function generateDataRequestLogExcel(){
|
||||
$file_name = 'Data Request LOG';
|
||||
// Membuat penulis entitas Spout
|
||||
$writer = WriterEntityFactory::createXLSXWriter();
|
||||
// Membuka penulis untuk menulis ke file
|
||||
$writer->openToFile(public_path('files/Data Request LOG.xlsx'));
|
||||
|
||||
// Sheet 1
|
||||
$writer->getCurrentSheet()->setName('Data');
|
||||
$headers_map_to_table_fields = RequestLog::$listing_data_doc_headers;
|
||||
$headerRow = WriterEntityFactory::createRowFromArray($headers_map_to_table_fields);
|
||||
$writer->addRow($headerRow);
|
||||
|
||||
$dataRequestLog = RequestLog::query()
|
||||
// ->whereHas('corporatePlan', function ($corporatePlan) use ($corporate_id) {
|
||||
// $corporatePlan->where('corporate_id', $corporate_id);
|
||||
// })
|
||||
->with('member')
|
||||
->orderBy('id', 'desc')
|
||||
->get()->toArray();
|
||||
|
||||
// dd($dataRequestLog);
|
||||
foreach ($dataRequestLog as $index => $row){
|
||||
$serviceType = $this->getServiceName($row['service_code']);
|
||||
|
||||
$rowData = [
|
||||
$row['id'], // id
|
||||
$row['code'], // code
|
||||
$row['member']['name'], // name
|
||||
$row['submission_date'], // submission date
|
||||
$serviceType, // service type
|
||||
$row['payment_type_name'], // service type
|
||||
$row['status'], // service type
|
||||
];
|
||||
$row = WriterEntityFactory::createRowFromArray($rowData);
|
||||
$writer->addRow($row);
|
||||
}
|
||||
$writer->close();
|
||||
|
||||
return Helper::responseJson([
|
||||
'file_name' => "Data Request Log " . date('Y-m-d h:i:s'),
|
||||
"file_url" => url('files/Data Request LOG.xlsx')
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Submit Request LOG to Final LOG
|
||||
*/
|
||||
public function updateFinalLog(Request $request)
|
||||
{
|
||||
$id = $request->id;
|
||||
$requestLog = RequestLog::findOrFail($id);
|
||||
$status = $request->status ?? 'requested';
|
||||
|
||||
|
||||
// Update Request LOG untuk lanjut ke Final LOG
|
||||
$requestLog->catatan = $request->catatan;
|
||||
$requestLog->final_log = 1;
|
||||
$requestLog->status_final_log = $status;
|
||||
$requestLog->approved_final_log_by = auth()->user()->id;
|
||||
$requestLog->approved_final_log_at = Carbon::now();
|
||||
$requestLog->save();
|
||||
|
||||
|
||||
if ($request->hasFile('result_files')) {
|
||||
foreach ($request->result_files as $file) {
|
||||
$pathFile = File::storeFile('final-log-result', $id, $file);
|
||||
$requestLog->files()->updateOrCreate([
|
||||
'type' => 'final-log-result',
|
||||
'name' => File::getFileName('final-log-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('final-log-diagnosis', $id, $file);
|
||||
$requestLog->files()->updateOrCreate([
|
||||
'type' => 'final-log-diagnosis',
|
||||
'name' => File::getFileName('final-log-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('final-log-kondisi', $id, $file);
|
||||
$requestLog->files()->updateOrCreate([
|
||||
'type' => 'final-log-kondisi',
|
||||
'name' => File::getFileName('final-log-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' => $requestLog],
|
||||
200);
|
||||
|
||||
}
|
||||
|
||||
public function updateStatus($id)
|
||||
{
|
||||
$requestLog = RequestLog::findOrFail($id);
|
||||
$member = $requestLog->member;
|
||||
|
||||
try {
|
||||
|
||||
// Update Request LOG Status & Link with Claim
|
||||
$requestLog->status = 'approved';
|
||||
$requestLog->save();
|
||||
|
||||
// Store Generated Documents LOG
|
||||
$logContent = view('pdf.guaranted_leter', compact('member', 'requestLog'));
|
||||
$requestLog->generatedDocuments()->create([
|
||||
'type' => 'guarantee_letter',
|
||||
'title' => 'Guarantee Letter for '. $member->full_name,
|
||||
'document_type' => 'type',
|
||||
'html_content' => $logContent,
|
||||
'system_origin' => 'primecenter'
|
||||
]);
|
||||
|
||||
|
||||
} 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 importRequestLog(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);
|
||||
|
||||
$reader = ReaderEntityFactory::createXLSXReader(Storage::path('temp/' . $file_name));
|
||||
$reader->open(Storage::path('temp/' . $file_name));
|
||||
|
||||
$writer = WriterEntityFactory::createXLSXWriter();
|
||||
$writer->openToFile(Storage::disk('public')->path('temp/result-' . $file_name));
|
||||
|
||||
$headers_map_to_table_fields = $this->requestLogService->doc_headers_to_field_map;
|
||||
|
||||
// Write Header to File with certain Format from MemberEnrollmentService::$result_doc_headers
|
||||
$result_headers = $this->requestLogService->listing_doc_headers;
|
||||
$singleRow = WriterEntityFactory::createRow($this->requestLogService->makeResultRow($result_headers));
|
||||
$writer->addRow($singleRow);
|
||||
|
||||
$imported_member_data = 0;
|
||||
$failed_member_data = [];
|
||||
|
||||
foreach ($reader->getSheetIterator() as $sheet) {
|
||||
$doc_headers_indexes = [];
|
||||
foreach ($sheet->getRowIterator() as $index => $row) {
|
||||
if ($index == 1) { // First Row Must be Header
|
||||
foreach ($row->getCells() as $index => $cell) {
|
||||
// Clear up the string and remove all spaces
|
||||
$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;
|
||||
}
|
||||
} else { // Next Row Should be Data
|
||||
// Collecting Values from table rows and map it to correct fields
|
||||
$requestLog = [];
|
||||
foreach ($row->getCells() as $header_index => $cell) {
|
||||
if (isset($headers_map_to_table_fields[$doc_headers_indexes[$header_index]])) {
|
||||
$requestLog[$headers_map_to_table_fields[$doc_headers_indexes[$header_index]]] = $cell->getValue();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
$rowResponse = $this->requestLogService->handleImportRow($requestLog);
|
||||
// Write Success Result to File
|
||||
$singleRow = WriterEntityFactory::createRow($this->requestLogService->makeResultRowWithResultFormat($rowResponse));
|
||||
$writer->addRow($singleRow);
|
||||
$imported_member_data++;
|
||||
} catch (ImportRowException $e) {
|
||||
// Write Data Validation Error to File
|
||||
$requestLog = array_merge($requestLog, [
|
||||
'ingestion_code' => $e->getCode(),
|
||||
'ingestion_status' => $e->getMessage(),
|
||||
]);
|
||||
// try {
|
||||
$singleRow = WriterEntityFactory::createRow($this->requestLogService->makeResultRowWithResultFormat($requestLog));
|
||||
$writer->addRow($singleRow);
|
||||
// } catch (\Exception $e) {
|
||||
$failed_member_data[] = ['row_number' => $index, 'error' => $e->getMessage(), 'data' => $requestLog];
|
||||
// }
|
||||
} catch (\Exception $e) {
|
||||
// Write Server Error to File
|
||||
$requestLog = array_merge($requestLog, [
|
||||
'ingestion_code' => $e->getCode(),
|
||||
'ingestion_status' => $e->getMessage(),
|
||||
]);
|
||||
$singleRow = WriterEntityFactory::createRow($this->requestLogService->makeResultRowWithResultFormat($requestLog));
|
||||
$writer->addRow($singleRow);
|
||||
$failed_member_data[] = ['row_number' => $index, 'error' => $e->getMessage()];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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),
|
||||
'failed_row' => $failed_member_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\RequestLog')
|
||||
->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\RequestLog',
|
||||
'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 function getServiceName($code){
|
||||
$service = DB::table('services')
|
||||
->select('name')
|
||||
->where('code', $code)
|
||||
->get()
|
||||
->first();
|
||||
return $service->name;
|
||||
}
|
||||
|
||||
public static function getNextCode(Request $request)
|
||||
{
|
||||
// $last_number = RequestLog::max('code');
|
||||
// $next_number = empty($last_number) ? 1 : ((int) explode('-', $last_number)[2] + 1);
|
||||
// return self::makeCode($next_number);
|
||||
|
||||
$source = $request->source == 'client-portal' ? 'C' : 'H';
|
||||
$organization = Organization::where(['id' => $request->organization_id, 'type' => 'hospital'])->first('code');
|
||||
$provideCode = $organization ? $organization->code : '';
|
||||
$member = Member::with('currentCorporate')->where(['id' => $request->member_id])->first();
|
||||
|
||||
$data = [
|
||||
'source' => $source,
|
||||
'provideCode' => $provideCode,
|
||||
'date' => date('ymd'),
|
||||
'policy' => $member->currentPolicy->code,
|
||||
'member_code' => $member->member_id,
|
||||
];
|
||||
|
||||
$last_numeric_code = RequestLog::select(DB::raw('MAX(CAST(SUBSTRING_INDEX(code, ".", -1) AS SIGNED)) as max_numeric_code'))
|
||||
->whereRaw('SUBSTRING_INDEX(code, ".", -1) REGEXP "^[0-9]+$"')
|
||||
->value('max_numeric_code');
|
||||
// $next_number = 1;
|
||||
|
||||
if ($last_numeric_code) {
|
||||
// // Jika ada kode sebelumnya, pecah kode dan tambahkan 1 ke angka terakhir
|
||||
// $parts = explode('-', $last_code);
|
||||
// $last_number = (int) end($parts);
|
||||
$next_number = $last_numeric_code + 1;
|
||||
} else {
|
||||
$next_number = 1;
|
||||
}
|
||||
return self::makeCode($next_number, $data);
|
||||
}
|
||||
|
||||
|
||||
public static function makeCode($next_number, $data)
|
||||
{
|
||||
$sparator = '.';
|
||||
// Pastikan $next_number adalah integer positif
|
||||
$next_number = max(1, (int) $next_number);
|
||||
// Menghasilkan kode dengan format yang diinginkan
|
||||
return self::$code_prefix . $sparator. $data['source'] . $sparator. $data['provideCode'] . $sparator. $data['date'] . $sparator . $data['policy'] . $sparator. $data['member_code'] . $sparator. 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\RequestLog',
|
||||
'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\RequestLog',
|
||||
'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\RequestLog',
|
||||
'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');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,136 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Internal\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\RequestLogMedicine;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
|
||||
class RequestLogMedicineController extends Controller
|
||||
{
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the form for creating a new resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view('internal::create');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the specified resource.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
* @param Request $request
|
||||
* @return Renderable
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
|
||||
$customMessages = [
|
||||
'required' => 'Kolom :attribute wajib diisi.',
|
||||
'numeric' => 'Kolom :attribute harus berupa angka.',
|
||||
];
|
||||
|
||||
$validator = Validator::make($request->all(), [
|
||||
'medicine' => 'required|array',
|
||||
'medicine.*' => 'required',
|
||||
], $customMessages);
|
||||
|
||||
if ($validator->fails()) {
|
||||
return Helper::responseJson([],'error', 400, $validator->errors());
|
||||
} else {
|
||||
$medicine = $request->medicine;
|
||||
|
||||
if (count($medicine)>0){
|
||||
// BeginTransaction
|
||||
DB::beginTransaction();
|
||||
foreach($medicine as $key => $value){
|
||||
$data = [
|
||||
'request_log_id' => $value['request_log_id'],
|
||||
'medicine' => $value['medicine_name'],
|
||||
'price' => $value['medicine_price'],
|
||||
];
|
||||
// Insert Data
|
||||
try {
|
||||
RequestLogMedicine::create($data);
|
||||
} catch (\Throwable $th) {
|
||||
DB::rollBack();
|
||||
return Helper::responseJson(status: 'failed', statusCode: 500, message: $th->getMessage());
|
||||
}
|
||||
}
|
||||
DB::commit();
|
||||
return Helper::responseJson(status: 'success', statusCode: 201, message: 'success', data: $request->toArray());
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
$requestLogMedicine = RequestLogMedicine::insert($data);
|
||||
return $requestLogMedicine;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
$requestLogBenefit = requestLogBenefit::findOrFail($id);
|
||||
$requestLogBenefit->amount_approved = $request->amount_approved;
|
||||
$requestLogBenefit->amount_incurred = $request->amount_incurred;
|
||||
$requestLogBenefit->amount_not_approved = $request->amount_not_approved;
|
||||
$requestLogBenefit->excess_paid = $request->excess_paid;
|
||||
$requestLogBenefit->keterangan = $request->keterangan;
|
||||
|
||||
$requestLogBenefit->save();
|
||||
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'message' => 'Update succses',
|
||||
'data' => $requestLogBenefit],
|
||||
200);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
* @param int $id
|
||||
* @return Renderable
|
||||
*/
|
||||
public function destroy($id)
|
||||
{
|
||||
$RequestLogMedicine = RequestLogMedicine::findOrFail($id);
|
||||
$RequestLogMedicine->delete();
|
||||
}
|
||||
|
||||
}
|
||||
86
Modules/Internal/Http/Controllers/Api/ServiceController.php
Normal file
86
Modules/Internal/Http/Controllers/Api/ServiceController.php
Normal file
@@ -0,0 +1,86 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Internal\Http\Controllers\Api;
|
||||
|
||||
use App\Models\Service;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
|
||||
class ServiceController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$service = Service::orderBy('name', 'ASC')->get();
|
||||
|
||||
if (empty($service)) {
|
||||
return response(['message' => 'Tidak ada data'], 404);
|
||||
} else {
|
||||
return response(['message' => 'Data ditemukan', "status" => 200, 'data' => $service]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Internal\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use App\Models\User;
|
||||
|
||||
class UserManagemet extends Controller
|
||||
{
|
||||
public function index(Request $request){
|
||||
$user = User::all();
|
||||
return Helper::responseJson(data: $user);
|
||||
}
|
||||
}
|
||||
@@ -12,6 +12,7 @@ use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Modules\Internal\Transformers\EncounterResource;
|
||||
|
||||
|
||||
class ClaimEncounterController extends Controller
|
||||
{
|
||||
/**
|
||||
@@ -31,6 +32,13 @@ class ClaimEncounterController extends Controller
|
||||
{
|
||||
return view('internal::create');
|
||||
}
|
||||
public function getAllData()
|
||||
{
|
||||
$encounters = Encounter::with('claim.member')->get();
|
||||
|
||||
return Helper::responseJson(data: EncounterResource::collection($encounters), message: 'Data berhasil diambil');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
@@ -255,6 +263,22 @@ class ClaimEncounterController extends Controller
|
||||
}
|
||||
}
|
||||
|
||||
public function xcounters($claim_id)
|
||||
{
|
||||
$claim = Claim::findOrFail($claim_id);
|
||||
$encounters = $claim->encounters()->get();
|
||||
return response()->json($encounters);
|
||||
}
|
||||
|
||||
public function getEncounterData($encounter_id)
|
||||
{
|
||||
$encounter = Encounter::with('claim.member')->findOrFail($encounter_id);
|
||||
|
||||
return Helper::responseJson(data: EncounterResource::make($encounter), message: 'Data berhasil diambil');
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
* @param int $id
|
||||
|
||||
@@ -8,6 +8,9 @@ use Modules\Internal\Http\Controllers\Api\BenefitController;
|
||||
use Modules\Internal\Http\Controllers\Api\CityController;
|
||||
use Modules\Internal\Http\Controllers\Api\ClaimController;
|
||||
use Modules\Internal\Http\Controllers\Api\ClaimRequestController;
|
||||
use Modules\Internal\Http\Controllers\Api\RequestLogController;
|
||||
use Modules\Internal\Http\Controllers\Api\RequestLogBenefitController;
|
||||
use Modules\Internal\Http\Controllers\Api\RequestLogMedicineController;
|
||||
use Modules\Internal\Http\Controllers\Api\CorporateBenefitController;
|
||||
use Modules\Internal\Http\Controllers\Api\CorporateController;
|
||||
use Modules\Internal\Http\Controllers\Api\CorporateFormulariumController;
|
||||
@@ -15,12 +18,16 @@ use Modules\Internal\Http\Controllers\Api\CorporateMemberController;
|
||||
use Modules\Internal\Http\Controllers\Api\CorporatePlanController;
|
||||
use Modules\Internal\Http\Controllers\Api\CorporateServiceController;
|
||||
use Modules\Internal\Http\Controllers\Api\DiagnosisController;
|
||||
use Modules\Internal\Http\Controllers\Api\DiagnosisTemplateController;
|
||||
use Modules\Internal\Http\Controllers\Api\DiagnosisExclusionController;
|
||||
use Modules\Internal\Http\Controllers\Api\DistrictController;
|
||||
use Modules\Internal\Http\Controllers\Api\DivisionController;
|
||||
use Modules\Internal\Http\Controllers\Api\HospitalController;
|
||||
use Modules\Internal\Http\Controllers\Api\DoctorController;
|
||||
use Modules\Internal\Http\Controllers\Api\DoctorRatingController;
|
||||
use Modules\Internal\Http\Controllers\Api\DrugController;
|
||||
use Modules\Internal\Http\Controllers\Api\FormulariumController;
|
||||
use Modules\Internal\Http\Controllers\Api\FormulariumTemplateController;
|
||||
use Modules\Internal\Http\Controllers\Api\Linksehat\PaymentController;
|
||||
use Modules\Internal\Http\Controllers\Api\LivechatController;
|
||||
use Modules\Internal\Http\Controllers\Api\MemberController;
|
||||
@@ -28,10 +35,17 @@ use Modules\Internal\Http\Controllers\Api\OptionController;
|
||||
use Modules\Internal\Http\Controllers\Api\OrganizationController;
|
||||
use Modules\Internal\Http\Controllers\Api\PlanController;
|
||||
use Modules\Internal\Http\Controllers\Api\ProvinceController;
|
||||
use Modules\Internal\Http\Controllers\Api\ServiceController;
|
||||
use Modules\Internal\Http\Controllers\Api\PrescriptionController;
|
||||
use Modules\Internal\Http\Controllers\Api\SpecialityController;
|
||||
use Modules\Internal\Http\Controllers\Api\VillageController;
|
||||
use Modules\Internal\Http\Controllers\Api\AuditTrailController;
|
||||
use Modules\Internal\Http\Controllers\Api\DailyMonitoringController;
|
||||
use Modules\Internal\Http\Controllers\Api\LaboratoriumResultController;
|
||||
use Modules\Internal\Http\Controllers\Api\CorporateManageController;
|
||||
use Modules\Internal\Http\Controllers\ClaimEncounterController;
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| API Routes
|
||||
@@ -47,6 +61,7 @@ use Modules\Internal\Http\Controllers\ClaimEncounterController;
|
||||
Route::prefix('internal')->group(function () {
|
||||
|
||||
Route::post('login', [AuthController::class, 'login'])->name('login');
|
||||
Route::post('register', [AuthController::class, 'register'])->name('register');
|
||||
Route::post('forget-password', [AuthController::class, 'forgetPassword'])->name('forget-password');
|
||||
Route::post('verify-email', [AuthController::class, 'verifyEmail'])->name('verify-email');
|
||||
|
||||
@@ -66,11 +81,16 @@ Route::prefix('internal')->group(function () {
|
||||
Route::get('corporates/import-document-example/{document_type}', [CorporateController::class, 'importDocumentExample']);
|
||||
Route::put('corporates/{corporate_id}/activation', [CorporateController::class, 'activation']);
|
||||
Route::post('corporates/{corporate_id}/import-plan-benefit', [CorporateController::class, 'importPlanBenefit']);
|
||||
Route::post('corporates/{corporate_id}/delete-import-plan-benefit', [CorporateController::class, 'deleteAllImportPlanBenefit']);
|
||||
Route::get('corporates/{corporate_id}/data-plan-benefit', [CorporateController::class, 'dataPlanBenefit']);
|
||||
Route::get('corporates/{corporate_id}/code', [CorporateController::class, 'corporateCode']);
|
||||
Route::get('corporates/{corporate_id}/payor_id', [CorporateController::class, 'corporatePayorId']);
|
||||
|
||||
Route::get('corporates/{corporate_id}/corporate-plans', [CorporatePlanController::class, 'index']);
|
||||
Route::post('corporates/{corporate_id}/corporate-plans', [CorporatePlanController::class, 'store']);
|
||||
Route::get('corporates/{corporate_id}/corporate-plans/{id}/edit', [CorporatePlanController::class, 'edit']);
|
||||
Route::put('corporates/{corporate_id}/corporate-plans/{id}', [CorporatePlanController::class, 'update']);
|
||||
Route::post('corporates/{corporate_id}/corporate-plans/filter', [CorporatePlanController::class, 'filter']);
|
||||
Route::put('plans/{plan_id}/activation', [CorporatePlanController::class, 'activation']);
|
||||
|
||||
Route::get('corporates/{corporate_id}/plans', [PlanController::class, 'index']);
|
||||
@@ -90,13 +110,27 @@ Route::prefix('internal')->group(function () {
|
||||
Route::get('corporates/{corporate_id}/divisions/{id}/edit', [DivisionController::class, 'edit']);
|
||||
Route::put('corporates/{corporate_id}/divisions/{id}', [DivisionController::class, 'update']);
|
||||
|
||||
Route::get('corporates/{corporate_id}/hospitals', [HospitalController::class, 'index']);
|
||||
Route::put('hospitals/{hospital_id}/activation', [HospitalController::class, 'activation']);
|
||||
Route::get('corporates/{corporate_id}/hospitals/data', [HospitalController::class, 'dataHospital']);
|
||||
Route::post('corporates/{corporate_id}/hospitals/save', [HospitalController::class, 'store']);
|
||||
Route::put('corporates/{corporate_id}/hospitals/{id}/edit', [HospitalController::class, 'update']);
|
||||
Route::get('corporates/hospitals/download-template', [HospitalController::class, 'downloadTemplate']);
|
||||
Route::post('corporates/{corporate_id}/hospitals/import', [HospitalController::class, 'import']);
|
||||
|
||||
|
||||
Route::get('corporates/{corporate_id}/members', [CorporateMemberController::class, 'index']);
|
||||
Route::get('corporates/{corporate_id}/members/list', [CorporateMemberController::class, 'generateMemberList']);
|
||||
Route::post('corporates/{corporate_id}/members/import', [CorporateMemberController::class, 'import']);
|
||||
Route::put('members/{member_id}/activation', [CorporateMemberController::class, 'activation']);
|
||||
|
||||
|
||||
Route::get('corporates/{corporate_id}/diagnosis', [DiagnosisExclusionController::class, 'listDiagnosis']);
|
||||
|
||||
Route::get('corporates/{corporate_id}/diagnosis-exclusions', [DiagnosisExclusionController::class, 'index']);
|
||||
Route::get('corporates/{corporate_id}/diagnosis-exclusions/{id_exclusion}', [DiagnosisExclusionController::class, 'detilExclusion']); // By Bagaskoro, get detil exclusion
|
||||
Route::post('corporates/{corporate_id}/diagnosis-exclusions/store', [DiagnosisExclusionController::class, 'storeExclusion']);
|
||||
Route::put('corporates/diagnosis-exclusions/update_activation', [DiagnosisExclusionController::class, 'updateActivation']); // By Bagaskoro, edit status aktif
|
||||
Route::delete('diagnosis-exclusions/{id}', [DiagnosisExclusionController::class, 'destroy']);
|
||||
Route::post('corporates/{corporate_id}/diagnosis-exclusions/import', [DiagnosisExclusionController::class, 'import']);
|
||||
|
||||
@@ -105,20 +139,88 @@ Route::prefix('internal')->group(function () {
|
||||
Route::get('corporates/{corporate_id}/services/{service_code}', [CorporateServiceController::class, 'corporateServiceIndex']);
|
||||
Route::put('corporates/{corporate_id}/services/{service_code}', [CorporateServiceController::class, 'corporateServiceUpdate']);
|
||||
Route::post('corporates/{corporate_id}/services/{service_code}/specialities', [CorporateServiceController::class, 'corporateServiceSpecialityUpdate']);
|
||||
Route::post('corporates/{corporate_id}/services/{service_code}/specialities-all', [CorporateServiceController::class, 'corporateServiceSpecialityAllUpdate']);
|
||||
Route::post('corporates/{corporate_id}/services/{service_code}/specialities/exclusion', [CorporateServiceController::class, 'storeExclusion']);
|
||||
|
||||
Route::get('corporates/{corporate_id}/formulariums', [CorporateFormulariumController::class, 'index']);
|
||||
Route::get('corporates/{corporate_id}/formulariums/{formularium_id}', [CorporateFormulariumController::class, 'show']);
|
||||
Route::get('corporates/{corporate_id}/formulariums-create', [CorporateFormulariumController::class, 'create']);
|
||||
Route::post('corporates/{corporate_id}/formulariums', [CorporateFormulariumController::class, 'store']);
|
||||
Route::get('corporates/{corporate_id}/formulariums/list', [CorporateFormulariumController::class, 'generateFormulariumList']);
|
||||
Route::post('corporates/{corporate_id}/formulariums/import', [CorporateFormulariumController::class, 'import']);
|
||||
Route::put('corporates/{corporate_id}/formulariums-update-status/{id}', [CorporateFormulariumController::class, 'active']);
|
||||
Route::put('corporates/{corporate_id}/formulariums/{formularium_id}/{action}', [CorporateFormulariumController::class, 'updateStatus']);
|
||||
|
||||
|
||||
Route::controller(CorporateController::class)->group(function () {
|
||||
Route::post('add-files-doc', 'addFilesDoc');
|
||||
Route::post('get-files-doc', 'getFilesDoc');
|
||||
Route::post('update-status-files-doc', 'updateStatusFilesDoc');
|
||||
});
|
||||
|
||||
// Route::get('corporates/{corporate_id}/diagnosis-exclusions', [DiagnosisExclusionController::class, 'index']);
|
||||
// Route::get('corporates/{corporate_id}/diagnosis-exclusions/import', [DiagnosisExclusionController::class, 'import']);
|
||||
|
||||
Route::get('master/diagnosis', [DiagnosisController::class, 'index']);
|
||||
Route::get('master/diagnosis/search', [DiagnosisController::class, 'search']);
|
||||
// Audittrail
|
||||
Route::get('audittrail/{corporate_id}', [AuditTrailController::class, 'index']);
|
||||
|
||||
Route::prefix('case_management')->group(function () {
|
||||
Route::get('memberlist', [DailyMonitoringController::class, 'GetMemberList']);
|
||||
Route::get('claimlist/{member_id}', [DailyMonitoringController::class, 'GetClaimList']);
|
||||
|
||||
// Daily Monitoring
|
||||
Route::prefix('daily_monitoring')->group(function () {
|
||||
Route::get('detail/{claim_code}/list', [DailyMonitoringController::class, 'GetDetailMonitoringList']);
|
||||
Route::post('detail/{claim_code}/add', [DailyMonitoringController::class, 'AddDetailMonitoringList']);
|
||||
Route::post('detail/{claim_code}/add-request', [DailyMonitoringController::class, 'AddDetailMonitoringListRequestLog']);
|
||||
Route::post('detail/{claim_code}/update-status', [DailyMonitoringController::class, 'UpdateListRequestLog']);
|
||||
});
|
||||
|
||||
// Laboratorium Result
|
||||
Route::prefix('laboratorium_result')->group(function () {
|
||||
Route::get('detail/{claim_code}/list', [LaboratoriumResultController::class, 'GetDetailLabResultList']);
|
||||
Route::post('detail/{claim_code}/add', [LaboratoriumResultController::class, 'AddDetailLabResultList']);
|
||||
});
|
||||
});
|
||||
|
||||
Route::prefix('user_management')->group(function () {
|
||||
Route::get('/', [CorporateManageController::class, 'index']);
|
||||
Route::post('/', [CorporateManageController::class, 'store']);
|
||||
Route::post('/{id}', [CorporateManageController::class, 'update']);
|
||||
Route::post('/delete/{id}', [CorporateManageController::class, 'destroy']);
|
||||
});
|
||||
|
||||
|
||||
Route::get('master/diagnosis-template', [DiagnosisTemplateController::class, 'index']);
|
||||
Route::get('master/diagnosis-template/search', [DiagnosisTemplateController::class, 'search']);
|
||||
Route::post('master/diagnosis-template/store', [DiagnosisTemplateController::class, 'store']);
|
||||
Route::put('master/diagnosis-template/{id}/activation', [DiagnosisTemplateController::class, 'activation']);
|
||||
Route::get('master/diagnosis-template/{id}/edit', [DiagnosisTemplateController::class, 'edit']);
|
||||
Route::put('master/diagnosis-template/{id}/update', [DiagnosisTemplateController::class, 'update']);
|
||||
|
||||
Route::get('master/formulariums/{formulariums_template_id}', [FormulariumController::class, 'index']);
|
||||
Route::post('master/formulariums/{formulariums_template_id}', [FormulariumController::class, 'store']);
|
||||
Route::post('master/formulariums/{formulariums_template_id}/import', [FormulariumController::class, 'import']);
|
||||
Route::get('master/formulariums/{formulariums_template_id}/list', [FormulariumController::class, 'generateFormulariumList']);
|
||||
|
||||
Route::get('master/formularium-template', [FormulariumTemplateController::class, 'index']);
|
||||
Route::get('master/formularium-template/search', [FormulariumTemplateController::class, 'search']);
|
||||
Route::post('master/formularium-template/store', [FormulariumTemplateController::class, 'store']);
|
||||
Route::put('master/formularium-template/{id}/activation', [FormulariumTemplateController::class, 'activation']);
|
||||
Route::get('master/formularium-template/{id}/edit', [FormulariumTemplateController::class, 'edit']);
|
||||
Route::put('master/formularium-template/{id}/update', [FormulariumTemplateController::class, 'update']);
|
||||
|
||||
Route::get('master/diagnosis/{diagnosis_template_id}', [DiagnosisController::class, 'index']);
|
||||
Route::get('master/diagnosis/{diagnosis_template_id}/search', [DiagnosisController::class, 'search']);
|
||||
Route::post('master/diagnosis/{diagnosis_template_id}/import', [DiagnosisController::class, 'import']);
|
||||
Route::get('master/diagnosis/{diagnosis_template_id}/list', [DiagnosisController::class, 'generateIcdList']);
|
||||
Route::put('master/diagnosis/{diagnosis_template_id}/activation', [DiagnosisController::class, 'activation']);
|
||||
|
||||
Route::get('master/drugs', [DrugController::class, 'index']);
|
||||
Route::get('master/formulariums', [FormulariumController::class, 'index']);
|
||||
Route::post('master/formulariums', [FormulariumController::class, 'store']);
|
||||
Route::post('master/formulariums/import', [FormulariumController::class, 'import']);
|
||||
Route::put('master/drugs/{drug_id}/activation', [DrugController::class, 'activation']);
|
||||
Route::get('master/drugs/download-template', [DrugController::class, 'downloadTemplate']);
|
||||
Route::post('master/drugs/import', [DrugController::class, 'import']);
|
||||
|
||||
|
||||
Route::get('members', [MemberController::class, 'index']);
|
||||
Route::get('members/{member_id}/benefits', [MemberController::class, 'benefits']);
|
||||
@@ -133,26 +235,85 @@ Route::prefix('internal')->group(function () {
|
||||
Route::post('claims/{id}/decline', [ClaimController::class, 'decline'])->name('claim.decline');
|
||||
Route::post('claims/{id}/approve', [ClaimController::class, 'approve'])->name('claim.approve');
|
||||
Route::post('claims/{id}/re-open', [ClaimController::class, 'reOpen'])->name('claim.re-open');
|
||||
|
||||
Route::post('claims/{id}/carehistory', [ClaimController::class, 'storeHistoryCare']);
|
||||
Route::post('claims/carehistory/{id}/update', [ClaimController::class, 'updateHistoryCare']);
|
||||
Route::get('claims/carehistory/{id}', [ClaimController::class, 'showHistoryCare']);
|
||||
Route::post('claims/carehistory/approval', [ClaimController::class, 'approvalHistoryCare']);
|
||||
|
||||
Route::post('claims', [ClaimController::class, 'store']);
|
||||
Route::get('claims/{id}', [ClaimController::class, 'show']);
|
||||
Route::put('claims/{id}', [ClaimController::class, 'update']);
|
||||
Route::get('claims/{id}/edit', [ClaimController::class, 'edit']);
|
||||
Route::post('check-limit', [ClaimController::class, 'checkLimit']);
|
||||
Route::get('claims/1/data-claim', [ClaimController::class, 'dataClaimReport']);
|
||||
Route::get('claims/detail/{id}', [ClaimController::class, 'getDetailClaims']);
|
||||
Route::post('claims/request-documents', [ClaimController::class, 'requestDocuments']);
|
||||
Route::get('claims/get-services/{id}', [ClaimController::class, 'getServices']);
|
||||
Route::post('claims/save-services', [ClaimController::class, 'saveServices']);
|
||||
Route::get('claims/{id}/benefit-configuration', [ClaimController::class, 'getBenefitConfiguration']); // Bagaskoro, BSD 03 November 2023
|
||||
Route::put('claims/benefit-configuration/edit/{id}', [ClaimController::class, 'editBenefitConfiguration']); // Bagaskoro, BSD 03 November 2023
|
||||
|
||||
Route::get('customer-service/request', [RequestLogController::class, 'index']);
|
||||
Route::post('customer-service/request', [RequestLogController::class, 'createNew']);
|
||||
Route::put('customer-service/request/{id}', [RequestLogController::class, 'update']);
|
||||
Route::get('customer-service/request/{id}', [RequestLogController::class, 'show']);
|
||||
Route::get('customer-service/request/{id}/download', [RequestLogController::class, 'generateRequestLog']);
|
||||
Route::post('customer-service/request/import', [RequestLogController::class, 'importRequestLog']);
|
||||
Route::get('customer-service/request/data', [RequestLogController::class, 'generateDataRequestLogExcel']);
|
||||
|
||||
Route::post('customer-service/request/final-log', [RequestLogController::class, 'updateFinalLog']);
|
||||
|
||||
// insert benefit
|
||||
Route::post('customer-service/request/insert-benefit', [RequestLogBenefitController::class, 'store']);
|
||||
Route::delete('customer-service/request/benefit_data/{id}', [RequestLogBenefitController::class, 'destroy']);
|
||||
Route::put('customer-service/request/benefit_data/{id}', [RequestLogBenefitController::class, 'update']);
|
||||
|
||||
// insert medicine
|
||||
Route::post('customer-service/request/medicine-data', [RequestLogMedicineController::class, 'store']);
|
||||
Route::delete('customer-service/request/medicine-data/{id}', [RequestLogMedicineController::class, 'destroy']);
|
||||
Route::put('customer-service/request/medicine-data/{id}', [RequestLogMedicineController::class, 'update']);
|
||||
|
||||
Route::get('search-organizations', [OrganizationController::class, 'searchOrganization']);
|
||||
Route::get('search-specialities', [SpecialityController::class, 'searchSpeciality']);
|
||||
Route::resource('organizations', OrganizationController::class);
|
||||
Route::resource('appointments', AppointmentController::class);
|
||||
Route::get('live-chat/export', [LivechatController::class, 'export']);
|
||||
Route::resource('live-chat', LivechatController::class);
|
||||
Route::get('prescription', [PrescriptionController::class, 'index']);
|
||||
Route::get('prescription/{id}', [PrescriptionController::class, 'index']);
|
||||
Route::get('doctorrating', [DoctorRatingController::class, 'index']);
|
||||
Route::get('doctorrating/{id}', [PrescriptionController::class, 'index']);
|
||||
|
||||
Route::resource('doctors', DoctorController::class);
|
||||
|
||||
Route::post('generate-log/{member_id}', [CorporateMemberController::class, 'generateLog']);
|
||||
|
||||
|
||||
Route::get('send_card/{corporate_id}', [CorporateMemberController::class, 'sendAllECard']);
|
||||
Route::get('view_card/{member_id}', [CorporateMemberController::class, 'viewECard']);
|
||||
Route::controller(ClaimRequestController::class)->group(function () {
|
||||
Route::post('files-mcu', 'filesMcu');
|
||||
});
|
||||
|
||||
|
||||
Route::get('claim-requests', [ClaimRequestController::class, 'index'])->name('claim-requests.index');
|
||||
Route::get('claim-requests/list-member', [ClaimRequestController::class, 'getClaimMemberInfiniteScroll']); // Bagaskoro, BSD 31 Oktober 2023
|
||||
Route::post('claim-requests/{id}/approve', [ClaimRequestController::class, 'approve'])->name('claim-requests.approve');
|
||||
Route::get('claim-requests/{id}', [ClaimRequestController::class, 'show'])->name('claim-requests.show');
|
||||
Route::post('claim-requests', [ClaimRequestController::class, 'createNew']); // Bagaskoro, BSD 2 November 2023
|
||||
Route::put('claim-requests/{id}', [ClaimRequestController::class, 'update'])->name('claim-requests.update');
|
||||
Route::post('claim-requests/import', [ClaimRequestController::class, 'importClaim'])->name('claim-requests.importClaim');
|
||||
Route::get('claim-requests/detail/{id}', [ClaimRequestController::class, 'claimRequestDetail']);
|
||||
Route::post('claim-requests/{id}/invoice-files', [ClaimRequestController::class, 'invoiceFiles']);
|
||||
Route::post('claim-requests/{id}/request-files', [ClaimRequestController::class, 'requestFiles']);
|
||||
|
||||
Route::get('claim-requests/service/{id}', [ClaimRequestController::class, 'getServiceMember']);
|
||||
|
||||
|
||||
});
|
||||
|
||||
Route::get('province', [ProvinceController::class, 'index']);
|
||||
Route::get('service', [ServiceController::class, 'index']);
|
||||
Route::get('city', [CityController::class, 'index']);
|
||||
Route::get('district', [DistrictController::class, 'index']);
|
||||
Route::get('village', [VillageController::class, 'index']);
|
||||
|
||||
@@ -6,27 +6,131 @@ use App\Exceptions\ImportRowException;
|
||||
use App\Models\Benefit;
|
||||
use App\Models\Corporate;
|
||||
use App\Models\CorporateBenefit;
|
||||
use App\Models\CorporatePolicy;
|
||||
use App\Models\Plan;
|
||||
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
|
||||
|
||||
class CorporateService
|
||||
{
|
||||
protected function validatePlanRow($row)
|
||||
/*
|
||||
Refer to Coverage code :
|
||||
MEDIVAC = Medical evacuation
|
||||
MSO = Medical second opinion
|
||||
PAC = Personal Assistant Concierge
|
||||
OPDE = Outpatient Dental
|
||||
IP=Inpatient
|
||||
OP=Outpatient
|
||||
MA=Maternity
|
||||
ANC = Ante/Post Natal Care
|
||||
DE=Dental
|
||||
GL=Glasses
|
||||
SP=Special Treatment
|
||||
PF=Pooled Fund
|
||||
MCU=Medical Check Up
|
||||
KB-VACC = Family Planning/Vaccination
|
||||
LAB = Test Diagnostic
|
||||
PHAR = Pharmacy
|
||||
**/
|
||||
protected $service_code = ['MEDIVAC', 'MSO', 'PAC', 'OPDE', 'IP', 'OP', 'MA', 'ANC', 'DE', 'GL', 'SP', 'PF', 'MCU', 'KB-VACC', 'LAB', 'PHAR'];
|
||||
|
||||
protected function corporatePlansId($corporate_id){
|
||||
$plans = Plan::where('corporate_id', $corporate_id)->get()->toArray();
|
||||
$current_corporate_plans_id = [];
|
||||
if($plans){
|
||||
foreach($plans as $plan){
|
||||
array_push($current_corporate_plans_id,$plan['corporate_plan_id']);
|
||||
}
|
||||
}
|
||||
return $current_corporate_plans_id;
|
||||
}
|
||||
|
||||
protected function validatePlanRow($row, $corporate_id)
|
||||
{
|
||||
// $corporate_policy = CorporatePolicy::where('corporate_id', $corporateId)->get();
|
||||
$plans = Plan::where('corporate_id', $corporate_id)->get()->toArray();
|
||||
$current_corporate_plans = $this->corporatePlansId($corporate_id);
|
||||
|
||||
$plan_code = [1, 2, 3, 4];
|
||||
$prorate_type = [0, 1, 2];
|
||||
$family_plan = ['F', 'S', 'N'];
|
||||
|
||||
if (empty($row['service_code'])) {
|
||||
throw new ImportRowException(__('plan.RECORD_TYPE_REQUIRED'), 0, null, $row);
|
||||
throw new ImportRowException(__('plan.REQUIRED', [
|
||||
'attribute' => 'Service Code'
|
||||
] ), 0, null, $row);
|
||||
} else if (!in_array($row['service_code'], $this->service_code)){
|
||||
throw new ImportRowException(__('plan.NOT_MATCH', [
|
||||
'attribute' => 'Service Code',
|
||||
'code' => $row['service_code']
|
||||
]), 0, null, $row);
|
||||
}
|
||||
|
||||
if (empty($row['corporate_plan_id'])) {
|
||||
throw new ImportRowException(__('plan.REQUIRED', [
|
||||
'attribute' => 'Plan'
|
||||
]), 0, null, $row);
|
||||
} else if(!in_array($row['corporate_plan_id'], $current_corporate_plans)){
|
||||
// throw new ImportRowException(__('plan.NOT_MATCH', [
|
||||
// 'attribute' => 'Plans',
|
||||
// 'code' => $row['corporate_plan_id']
|
||||
// ]), 0, null, $row);
|
||||
}
|
||||
|
||||
if (empty($row['code'])) {
|
||||
throw new ImportRowException(__('plan.CODE_REQUIRED'), 0, null, $row);
|
||||
throw new ImportRowException(__('plan.REQUIRED', [
|
||||
'attribute' => 'Customer Plan'
|
||||
]), 0, null, $row);
|
||||
}
|
||||
|
||||
if (empty($row['type'])) {
|
||||
throw new ImportRowException(__('plan.TYPE_REQUIRED'), 0, null, $row);
|
||||
if (!in_array($row['type'], $plan_code)){
|
||||
throw new ImportRowException(__('plan.NOT_MATCH', [
|
||||
'attribute' => 'Plan Type',
|
||||
'code' => $row['type']
|
||||
]), 0, null, $row);
|
||||
} else if ($row['type'] == 2 && $row['limit_rules'] != 999999999){
|
||||
throw new ImportRowException(__('plan.LIMIT_PLAN'), 0, null, $row);
|
||||
}
|
||||
|
||||
// if (!empty($row['start'])) {
|
||||
// throw new ImportRowException(__('plan.REQUIRED', [
|
||||
// 'attribute' => 'Start Date of Plan'
|
||||
// ]), 0, null, $row);
|
||||
// }
|
||||
|
||||
// if (empty($row['type'])) {
|
||||
// throw new ImportRowException(__('plan.TYPE_REQUIRED'), 0, null, $row);
|
||||
// } else if (!in_array($row['type'],$plan_code)){
|
||||
// throw new ImportRowException(__('plan.NOT_MATCH', [
|
||||
// 'attribute' => 'Plan Type',
|
||||
// 'code' => $row['code']
|
||||
// ]), 0, null, $row);
|
||||
// }
|
||||
|
||||
if (!empty($row['family_plan']) && !in_array($row['family_plan'],$family_plan)) {
|
||||
throw new ImportRowException(__('plan.NOT_MATCH', [
|
||||
'attribute' => 'Family Plan',
|
||||
'code' => $row['family_plan']
|
||||
]), 0, null, $row);
|
||||
}
|
||||
|
||||
if (!empty($row['prorate_type']) && !in_array($row['prorate_type'], $prorate_type)) {
|
||||
throw new ImportRowException(__('plan.NOT_MATCH', [
|
||||
'attribute' => 'Prorate Type',
|
||||
'code' => $row['prorate_type']
|
||||
]), 0, null, $row);
|
||||
}
|
||||
|
||||
if (!empty($row['prorate_lookup']) && !in_array($row['prorate_lookup'], $prorate_type)) {
|
||||
throw new ImportRowException(__('plan.NOT_MATCH', [
|
||||
'attribute' => 'Prorate Lookup',
|
||||
'code' => $row['prorate_lookup']
|
||||
]), 0, null, $row);
|
||||
}
|
||||
|
||||
if (empty($row['limit_rules'])) {
|
||||
throw new ImportRowException(__('plan.PLAN_LIMIT_REQUIRED'), 0, null, $row);
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
if (empty($row['msc'])) {
|
||||
@@ -34,12 +138,13 @@ class CorporateService
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public function handlePlanRow(Corporate $corporate, $row)
|
||||
{
|
||||
try {
|
||||
$plan_data = $row;
|
||||
$this->validatePlanRow($plan_data, $corporate->id);
|
||||
$plan_data["corporate_id"] = $corporate->id;
|
||||
$this->validatePlanRow($plan_data);
|
||||
$plan = $corporate->plans()->updateOrCreate([
|
||||
'corporate_plan_id' => $plan_data['corporate_plan_id'],
|
||||
// 'active' => 0,
|
||||
@@ -51,68 +156,111 @@ class CorporateService
|
||||
}
|
||||
}
|
||||
|
||||
protected function validateBenefitRow($row)
|
||||
protected function validateBenefitRow($row, $corporate_id)
|
||||
{
|
||||
$max_frequence = 7;
|
||||
$budget_aso = [1,2];
|
||||
$current_corporate_plans = $this->corporatePlansId($corporate_id);
|
||||
if (empty($row['service_code'])) {
|
||||
throw new ImportRowException(__('benefit.SERVICE_CODE_REQUIRED'), 0, null, $row);
|
||||
throw new ImportRowException(__('plan.REQUIRED', [
|
||||
'attribute' => 'Service Code'
|
||||
]), 0, null, $row);
|
||||
} else if (!in_array($row['service_code'], $this->service_code)){
|
||||
throw new ImportRowException(__('plan.NOT_MATCH', [
|
||||
'attribute' => 'Service Code',
|
||||
'code' => $row['service_code']
|
||||
]), 0, null, $row);
|
||||
}
|
||||
|
||||
if (empty($row['plan_code'])) {
|
||||
throw new ImportRowException(__('benefit.PLAN_CODE_REQUIRED'), 0, null, $row);
|
||||
} else if (!in_array($row['plan_code'], $current_corporate_plans)){
|
||||
// throw new ImportRowException(__('plan.NOT_MATCH', [
|
||||
// 'attribute' => 'Plan',
|
||||
// 'code' => $row['plan_code']
|
||||
// ]), 0, null, $row);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (empty($row['code'])) {
|
||||
throw new ImportRowException(__('benefit.BENEFIT_CODE_REQUIRED'), 0, null, $row);
|
||||
throw new ImportRowException(__('plan.REQUIRED', [
|
||||
'attribute' => 'Benefit Code'
|
||||
]), 0, null, $row);
|
||||
}
|
||||
|
||||
if (empty($row['corporate_benefit_code'])) {
|
||||
throw new ImportRowException(__('benefit.CUSTOMER_BENEFIT_CODE_REQUIRED'), 0, null, $row);
|
||||
throw new ImportRowException(__('Customer Benefit Code Required', [
|
||||
'attribute' => 'Customer Benefit Code'
|
||||
]), 0, null, $row);
|
||||
}
|
||||
|
||||
|
||||
if (empty($row['description'])) {
|
||||
throw new ImportRowException(__('benefit.DESCRIPTION_REQUIRED'), 0, null, $row);
|
||||
throw new ImportRowException(__('plan.REQUIRED', [
|
||||
'attribute' => 'Description'
|
||||
]), 0, null, $row);
|
||||
}
|
||||
if (empty($row['limit_amount'])) {
|
||||
throw new ImportRowException(__('benefit.LIMIT_AMOUNT_REQUIRED'), 0, null, $row);
|
||||
throw new ImportRowException(__('plan.REQUIRED', [
|
||||
'attribute' => 'Limit Amount'
|
||||
]), 0, null, $row);
|
||||
}
|
||||
if (empty($row['msc'])) {
|
||||
throw new ImportRowException(__('benefit.MSC_REQUIRED'), 0, null, $row);
|
||||
throw new ImportRowException(__('plan.REQUIRED', [
|
||||
'attribute' => 'MSC'
|
||||
]), 0, null, $row);
|
||||
}
|
||||
if (empty($row['genders'])) {
|
||||
throw new ImportRowException(__('benefit.GENDER_REQUIRED'), 0, null, $row);
|
||||
throw new ImportRowException(__('plan.REQUIRED', [
|
||||
'attribute' => 'Gender'
|
||||
]), 0, null, $row);
|
||||
}
|
||||
if (!empty($row['max_frequency_period']) && $row['max_frequency_period'] >= $max_frequence){ // jenis frequence
|
||||
throw new ImportRowException(__('plan.MAX_FREQUENCY'), 0, null, $row);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (!empty($row['budget']) && !in_array($budget_aso)) {
|
||||
throw new ImportRowException(__('plan.MAX_FREQUENCY'), 0, null, $row);
|
||||
}
|
||||
|
||||
|
||||
// if (empty($row['limit_free_tc'])){
|
||||
// throw new ImportRowException(__('plan.REQUIRED', [
|
||||
// 'attribute' => 'Limit Free TC'
|
||||
// ]), 0, null, $row);
|
||||
// }
|
||||
}
|
||||
|
||||
public function handleBenefitRow(Corporate $corporate, $row)
|
||||
{
|
||||
|
||||
try {
|
||||
$row['limit_free_tc'] = 0;
|
||||
$benefit_data = $row;
|
||||
$this->validateBenefitRow($benefit_data, $corporate->id);
|
||||
$benefit_data["corporate_id"] = $corporate->id;
|
||||
$this->validateBenefitRow($benefit_data);
|
||||
|
||||
|
||||
$plan = $corporate->plans()
|
||||
->where('corporate_plan_id', $benefit_data['plan_code'])
|
||||
->first();
|
||||
|
||||
// $corporate->plans->where('corporate_plan_id', $benefit_data['plan_code'])->first();
|
||||
$benefit_data['plan_code'] = $plan->id;
|
||||
|
||||
$benefit = Benefit::updateOrCreate([
|
||||
'code' => $benefit_data['code'],
|
||||
'service_code' => $plan->service_code,
|
||||
], [
|
||||
'code' => $benefit_data['code'],
|
||||
'service_code' => $plan->service_code,
|
||||
'active' => 1,
|
||||
'description' => $benefit_data['description'],
|
||||
]);
|
||||
|
||||
$corporateBenefit = $corporate->corporateBenefits()->updateOrCreate([
|
||||
'benefit_id' => $benefit->id,
|
||||
'plan_id' => $plan->id
|
||||
'plan_id' => $plan->id,
|
||||
'corporate_id' => $corporate->id,
|
||||
], $benefit_data);
|
||||
|
||||
return $corporateBenefit;
|
||||
} catch (\Exception $e) {
|
||||
// dd($e->getMessage());
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ use App\Exceptions\ImportRowException;
|
||||
use App\Models\Benefit;
|
||||
use App\Models\Corporate;
|
||||
use App\Models\Icd;
|
||||
use App\Models\Exclusion;
|
||||
use App\Models\Plan;
|
||||
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
|
||||
|
||||
@@ -13,23 +14,21 @@ class ExclusionService
|
||||
{
|
||||
protected function validateDiagnosisExclusionRow($row)
|
||||
{
|
||||
// if (empty($row['service_code'])) {
|
||||
// throw new ImportRowException(__('plan.RECORD_TYPE_REQUIRED'), 0, null, $row);
|
||||
// }
|
||||
if (empty($row['service_code'])) {
|
||||
throw new ImportRowException(__('plan.REQUIRED'), 0, null, $row);
|
||||
}
|
||||
}
|
||||
|
||||
public function handleDiagnosisExclusionRow(Corporate $corporate, $row)
|
||||
{
|
||||
try {
|
||||
$this->validateDiagnosisExclusionRow($row);
|
||||
|
||||
if (!empty($row['ip_exclusion'])) {
|
||||
$excl_array = explode('|', $row['ip_exclusion']);
|
||||
if ($excl_array[0] == '3') {
|
||||
$icd = Icd::where('code', $row['code'])->first();
|
||||
$exclusion = $icd->exclusions()->create([
|
||||
'corporate_id' => $corporate->id,
|
||||
'service_code' => 'OP',
|
||||
'service_code' => 'IP',
|
||||
'type' => 'diagnosis'
|
||||
]);
|
||||
|
||||
@@ -89,7 +88,8 @@ class ExclusionService
|
||||
$exclusion = $icd->exclusions()->create([
|
||||
'corporate_id' => $corporate->id,
|
||||
'service_code' => 'OP',
|
||||
'type' => 'diagnosis'
|
||||
'type' => 'diagnosis',
|
||||
'active' => 1
|
||||
]);
|
||||
|
||||
if (!empty($excl_array[1])) { //msc
|
||||
@@ -130,11 +130,35 @@ class ExclusionService
|
||||
]);
|
||||
}
|
||||
if (!empty($excl_array[5])) { //plans
|
||||
$exclusion->rules()->create([
|
||||
'name' => 'plan',
|
||||
'values' => $excl_array[5]
|
||||
]);
|
||||
$codePlan = explode(',', $excl_array[5]);
|
||||
collect($codePlan)->each(function ($codePlan) use ($corporate, $exclusion) {
|
||||
$isCodeplan = Plan::where(['code' => $codePlan, 'corporate_id' => $corporate->id])->first();
|
||||
if (!$isCodeplan) {
|
||||
throw new ImportRowException(__('codePlan.NOT_FOUND'), 0, NULL, $codePlan);
|
||||
}
|
||||
|
||||
$exclusion->rules()->create([
|
||||
'name' => 'plan',
|
||||
'values' => $codePlan
|
||||
]);
|
||||
});
|
||||
}
|
||||
} else if (!$excl_array[0]){
|
||||
$icd = Icd::where(['code' => $row['code']])->first();
|
||||
if (!$icd) {
|
||||
throw new ImportRowException(__('icd.NOT_FOUND'), 0, NULL, $row);
|
||||
}
|
||||
// Cari entitas Exclusion yang sesuai dengan kriteria tertentu
|
||||
$exclusion = Exclusion::where([
|
||||
'corporate_id' => $corporate->id,
|
||||
'exclusionable_id' => $icd->id,
|
||||
])->first();
|
||||
|
||||
// Jika entitas ditemukan, perbarui nilai 'active' menjadi 0
|
||||
if ($exclusion) {
|
||||
$exclusion->update(['active' => 0]);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -144,7 +168,7 @@ class ExclusionService
|
||||
$icd = Icd::where('code', $row['code'])->first();
|
||||
$exclusion = $icd->exclusions()->create([
|
||||
'corporate_id' => $corporate->id,
|
||||
'service_code' => 'OP',
|
||||
'service_code' => 'DE',
|
||||
'type' => 'diagnosis'
|
||||
]);
|
||||
|
||||
@@ -196,7 +220,6 @@ class ExclusionService
|
||||
|
||||
if (!empty($row['ma_exclusion'])) {
|
||||
$excl_array = explode('|', $row['ma_exclusion']);
|
||||
dd($excl_array);
|
||||
if ($excl_array[0]) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,10 +7,11 @@ use App\Models\Benefit;
|
||||
use App\Models\Corporate;
|
||||
use App\Models\Drug;
|
||||
use App\Models\Formularium;
|
||||
use App\Models\CorporateFormularium;
|
||||
use App\Models\Plan;
|
||||
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
|
||||
|
||||
class CorporateService
|
||||
class FormulariumService
|
||||
{
|
||||
protected function validateFormulariumRow($row)
|
||||
{
|
||||
@@ -45,4 +46,75 @@ class CorporateService
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
public function handleFormuariumTemplateRow($row, $id)
|
||||
{
|
||||
try {
|
||||
$formularium = Formularium::updateOrCreate(
|
||||
[
|
||||
'code' => $row['code'],
|
||||
'formularium_template_id' => $id
|
||||
],
|
||||
[
|
||||
'code' => $row['code'],
|
||||
'name' => $row['name'],
|
||||
'description' => $row['description'],
|
||||
'manufacturer' => $row['manufacturer'],
|
||||
'category_name' => $row['category_name'],
|
||||
'kategori_obat' => $row['kategori_obat'],
|
||||
'uom' => $row['uom'],
|
||||
'composition' => $row['composition'],
|
||||
'general_indication' => $row['general_indication'],
|
||||
'atc_code' => $row['atc_code'],
|
||||
'class' => $row['class'],
|
||||
'bpom_registration' => $row['bpom_registration'],
|
||||
'classifications' => $row['classifications'],
|
||||
'cat_for' => $row['cat_for'],
|
||||
'formularium_template_id' => $id,
|
||||
]);
|
||||
|
||||
return $formularium;
|
||||
} catch (\Exception $e) {
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
public function handleFormuariumCorporateRow($row, $id)
|
||||
{
|
||||
try {
|
||||
$formularium = CorporateFormularium::updateOrCreate(
|
||||
[
|
||||
'formularium_id' => $row['formularium_id'],
|
||||
'corporate_id' => $id
|
||||
],
|
||||
[
|
||||
'formularium_id' => $row['formularium_id'],
|
||||
'corporate_id' => $id,
|
||||
'active' => $row['active']
|
||||
]);
|
||||
|
||||
return $formularium;
|
||||
} catch (\Exception $e) {
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
public $listing_doc_headers = [
|
||||
"Internal Code",
|
||||
"Name",
|
||||
"Description",
|
||||
"Manufacturer",
|
||||
"Category Name",
|
||||
"Kategori Obat",
|
||||
"UOM",
|
||||
"Composition",
|
||||
"General Indication",
|
||||
"ATC Code",
|
||||
"Class",
|
||||
"BPOM Registration",
|
||||
"Classifications",
|
||||
"Cat For (O = obat, VS = Vitamin Suplemen, H=herbal, M=makanan, etc) ",
|
||||
];
|
||||
|
||||
|
||||
}
|
||||
|
||||
53
Modules/Internal/Services/IcdService.php
Normal file
53
Modules/Internal/Services/IcdService.php
Normal file
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Internal\Services;
|
||||
|
||||
use App\Exceptions\ImportRowException;
|
||||
use App\Models\Benefit;
|
||||
use App\Models\Corporate;
|
||||
use App\Models\Icd;
|
||||
use App\Models\Plan;
|
||||
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
|
||||
|
||||
class IcdService
|
||||
{
|
||||
protected function validateDiagnosisExclusionRow($row)
|
||||
{
|
||||
if (empty($row['ICD_Code'])) {
|
||||
throw new ImportRowException(__('ICD_Code is REQUIRED'), 0, null, $row);
|
||||
}
|
||||
}
|
||||
|
||||
public function handleIcdRow($row, $id)
|
||||
{
|
||||
try {
|
||||
$this->validateDiagnosisExclusionRow($row);
|
||||
$icd = Icd::updateOrCreate([
|
||||
'code' => $row['ICD_Code']
|
||||
], [
|
||||
"code" => $row['ICD_Code'],
|
||||
"parent_code" => null,
|
||||
"rev" => '',
|
||||
"name" => $row['Description'] ?? null,
|
||||
"version" => null,
|
||||
"active" => 1,
|
||||
"icd_template_id" => $id,
|
||||
]);
|
||||
|
||||
return true;
|
||||
} catch (\Exception $e) {
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
public $listing_doc_headers = [
|
||||
// "Rev",
|
||||
// "Version",
|
||||
"Code",
|
||||
// "Parent Code",
|
||||
// "Name",
|
||||
"Description",
|
||||
// "Status",
|
||||
// "Type"
|
||||
];
|
||||
}
|
||||
@@ -7,11 +7,17 @@ use App\Helpers\Helper;
|
||||
use App\Models\Corporate;
|
||||
use App\Models\CorporateEmployee;
|
||||
use App\Models\CorporateDivision;
|
||||
use App\Models\CorporatePolicy;
|
||||
use App\Models\CorporatePlan;
|
||||
use App\Models\Member;
|
||||
use App\Models\MemberPolicy;
|
||||
use App\Models\MemberPlan;
|
||||
use App\Models\Person;
|
||||
use App\Models\Plan;
|
||||
use App\Models\OLDLMS\User;
|
||||
use App\Models\OLDLMS\UserDetail;
|
||||
use App\Models\OLDLMS\UserInsurance;
|
||||
use App\Models\OLDLMS\UserInsuranceDetail;
|
||||
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
|
||||
use Box\Spout\Common\Entity\Row;
|
||||
use Carbon\Carbon;
|
||||
@@ -26,7 +32,7 @@ class MemberEnrollmentService
|
||||
"Payor ID" => "payor_id",
|
||||
"Member ID" => "member_id",
|
||||
"Mapping ID" => "principal_id",
|
||||
"Halodoc Member ID" => "halodoc_member_id",
|
||||
"LinkSehat Member ID" => "halodoc_member_id",
|
||||
"Corporate ID" => "corporate_id",
|
||||
"NIK" => "nik",
|
||||
"Division" => "division_name",
|
||||
@@ -50,7 +56,7 @@ class MemberEnrollmentService
|
||||
"Agent Code / intermediary code" => "agent_code",
|
||||
"Member Name" => "name",
|
||||
"Address1" => "address1",
|
||||
"Address 1" => "address1",
|
||||
// "Address 1" => "address1",
|
||||
"Address2" => "address2",
|
||||
"Address3" => "address3",
|
||||
"Address4" => "address4",
|
||||
@@ -90,12 +96,13 @@ class MemberEnrollmentService
|
||||
"Member Suspended" => "member_suspended",
|
||||
"Activation Date" => "activation_date",
|
||||
"Internal Use" => "internal_use_6",
|
||||
"Date Terminated" => "date_terminated",
|
||||
"StartNoClaim" => "start_no_claim",
|
||||
"EndNoClaim" => "end_no_claim",
|
||||
"Option Mode" => "option_mode",
|
||||
"Policy Inforce" => "policy_in_force",
|
||||
"Renewal activation date" => "renewal_activation_date",
|
||||
"Renewal Activation Date" => "renewal_activation_date",
|
||||
// "Renewal Activation Date" => "renewal_activation_date",
|
||||
"Ingestion Code" => "ingestion_code", // TODO I think this should not be here because if user uploading result then ingestion code and status will be filled
|
||||
"Ingestion Status" => "ingestion_status",
|
||||
];
|
||||
@@ -106,7 +113,7 @@ class MemberEnrollmentService
|
||||
"payor_id" => "Payor ID",
|
||||
"member_id" => "Member ID",
|
||||
"principal_id" => "Mapping ID",
|
||||
"halodoc_member_id" => "Halodoc Member ID",
|
||||
"halodoc_member_id" => "LinkSehat Member ID",
|
||||
"corporate_id" => "Corporate ID",
|
||||
"nik" => "NIK",
|
||||
"division_name" => "Division",
|
||||
@@ -129,7 +136,7 @@ class MemberEnrollmentService
|
||||
"agent_code" => "Agent Code / intermediary code",
|
||||
"name" => "Member Name",
|
||||
"address1" => "Address1",
|
||||
"address1" => "Address 1",
|
||||
// "address1" => "Address 1",
|
||||
"address2" => "Address2",
|
||||
"address3" => "Address3",
|
||||
"address4" => "Address4",
|
||||
@@ -168,17 +175,18 @@ class MemberEnrollmentService
|
||||
"start_no_claim" => "StartNoClaim",
|
||||
"end_no_claim" => "EndNoClaim",
|
||||
"option_mode" => "Option Mode",
|
||||
"renewal_activation_date" => "Renewal Activation Date",
|
||||
// "renewal_activation_date" => "Renewal Activation Date",
|
||||
"ingestion_code" => "Ingestion Code",
|
||||
"ingestion_status" => "Ingestion Status",
|
||||
];
|
||||
|
||||
public $result_doc_headers = [
|
||||
"Record Mode",
|
||||
"Record Type",
|
||||
"Payor ID",
|
||||
"Member ID",
|
||||
"Mapping ID",
|
||||
"Halodoc Member ID",
|
||||
"LinkSehat Member ID",
|
||||
"Corporate ID",
|
||||
"NIK",
|
||||
"Division",
|
||||
@@ -201,7 +209,7 @@ class MemberEnrollmentService
|
||||
"Internal Use",
|
||||
"Member Name",
|
||||
"Address1",
|
||||
"Address 1",
|
||||
// "Address 1",
|
||||
"Address2",
|
||||
"Address3",
|
||||
"Address4",
|
||||
@@ -239,22 +247,127 @@ class MemberEnrollmentService
|
||||
"StartNoClaim",
|
||||
"EndNoClaim",
|
||||
"Option Mode",
|
||||
"Renewal Activation Date",
|
||||
// "Renewal Activation Date",
|
||||
"Ingestion Code",
|
||||
"Ingestion Status",
|
||||
];
|
||||
|
||||
public $listing_doc_headers = [
|
||||
"Record Mode",
|
||||
"Record Type",
|
||||
"Payor ID",
|
||||
"Member ID",
|
||||
"Mapping ID",
|
||||
"LinkSehat Member ID",
|
||||
"Corporate ID",
|
||||
"NIK",
|
||||
"Division",
|
||||
"Branch Code",
|
||||
"Bank Info",
|
||||
"Language",
|
||||
"Type of work",
|
||||
"Race",
|
||||
"Policy Number",
|
||||
// "Policy No.",
|
||||
"Marital Status",
|
||||
"Relationship",
|
||||
"Member's Effective Date",
|
||||
"Member's Expiry Date",
|
||||
"Faskes FKTP (First Level Provider) or Individual preferred provider",
|
||||
"Faskes FKRTL (Next Level Provider) or Individual group preferred provider",
|
||||
"The Right Classes Room of BPJS Participants",
|
||||
"Name of Faskes",
|
||||
"Rule BPJSK",
|
||||
"Internal Use",
|
||||
"Member Name",
|
||||
"Address1",
|
||||
// "Address 1",
|
||||
"Address2",
|
||||
"Address3",
|
||||
"Address4",
|
||||
"City",
|
||||
"State",
|
||||
"Post Code",
|
||||
"Telephone - Mobile",
|
||||
"Telephone - Res",
|
||||
"Telephone - Office",
|
||||
"NRIC",
|
||||
"Passport No",
|
||||
"Passport Country",
|
||||
"Email",
|
||||
"Identification Code",
|
||||
"Date of Birth",
|
||||
"Sex",
|
||||
"Internal Use",
|
||||
"Plan-ID",
|
||||
"Employment-Status",
|
||||
"Internal Use",
|
||||
"Internal Use",
|
||||
"Internal Use",
|
||||
"Date Terminated",
|
||||
"Pre Existing",
|
||||
"BPJS ID",
|
||||
"Endorsement Date",
|
||||
"Remarks",
|
||||
"Internal Use",
|
||||
"Member Since",
|
||||
"Internal Use",
|
||||
"Policy Inforce",
|
||||
"Member Suspended",
|
||||
"Activation Date",
|
||||
"Internal Use",
|
||||
"StartNoClaim",
|
||||
"EndNoClaim",
|
||||
"Option Mode",
|
||||
// "Renewal Activation Date",
|
||||
// "Ingestion Code",
|
||||
// "Ingestion Status",
|
||||
];
|
||||
|
||||
public $doc_headers_send_email = [
|
||||
"Name",
|
||||
"Email",
|
||||
"Message"
|
||||
];
|
||||
|
||||
public function __construct(Member $member)
|
||||
{
|
||||
app()->setLocale('en');
|
||||
$this->member = $member;
|
||||
}
|
||||
|
||||
public function dateParser($date_from_row) {
|
||||
return is_string($date_from_row) ? Carbon::parse(strtotime($date_from_row)) : Carbon::parse($date_from_row);
|
||||
|
||||
if ($date_from_row instanceof DateTime) {
|
||||
return $date_from_row->format('Y-m-d');
|
||||
} else if ($date_from_row != null) {
|
||||
return date('Y-m-d', strtotime($date_from_row));
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function validateDate($dateString, $dateFormat = 'Ymd'){
|
||||
$date = DateTime::createFromFormat($dateFormat, $dateString);
|
||||
if ($date && ($date->format($dateFormat) == $dateString)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
protected function validateRow($row)
|
||||
{
|
||||
$title =[
|
||||
'member_effective_date' => 'Member Effective Date',
|
||||
'member_expiry_date' => 'Member Expired Date',
|
||||
'activation_date' => 'Activation Date',
|
||||
'date_of_birth' => 'Date of Birth',
|
||||
'date_terminated' => 'Date Terminated',
|
||||
|
||||
];
|
||||
|
||||
if (empty($row['record_type'])) {
|
||||
throw new ImportRowException(__('enrollment.RECORD_TYPE_REQUIRED'), 0, null, $row);
|
||||
}
|
||||
@@ -267,6 +380,10 @@ class MemberEnrollmentService
|
||||
throw new ImportRowException(__('enrollment.MEMBER_ID_REQUIRED'), 0, null, $row);
|
||||
}
|
||||
|
||||
if (empty($row['plan_id'])) {
|
||||
throw new ImportRowException(__('Plan ID Required'), 0, null, $row);
|
||||
}
|
||||
|
||||
if ($row['record_type'] == 'P') {
|
||||
if (!empty($row['principal_id'])) {
|
||||
throw new ImportRowException(__('enrollment.PRINCIPAL_ID_NOT_REQUIRED'), 0, null, $row);
|
||||
@@ -278,9 +395,31 @@ class MemberEnrollmentService
|
||||
}
|
||||
|
||||
if ($row['record_type'] == 'D') {
|
||||
$member = Member::query()
|
||||
->where('member_id', $row['principal_id'])
|
||||
// ->whereHas('employeds', function ($query) use ($corporate) {
|
||||
// $query->where('corporate_id', $corporate->id);
|
||||
// })
|
||||
->first();
|
||||
|
||||
if(empty($member)){
|
||||
// throw new ImportRowException(__('enrollment.PRINCIPAL_NOT_IN_MEMBER_ID'), 0, null, $row);
|
||||
} else {
|
||||
// if ($member['record_type'] != 'P'){
|
||||
// throw new ImportRowException(__('enrollment.PRINCIPAL_ID_NOT_SAME_MEMBER_ID'), 0, null, $row);
|
||||
// }
|
||||
}
|
||||
if (empty($row['principal_id'])) {
|
||||
throw new ImportRowException(__('enrollment.PRINCIPAL_ID_REQUIRED'), 0, null, $row);
|
||||
}
|
||||
// if (empty($row['relationship_with_principal'])){
|
||||
// throw new ImportRowException(__('enrollment.RELATIONSHIP_WITH_PRICIPAL_REQUIRED'), 0, null, $row);
|
||||
// }
|
||||
// if (!empty($row['relationship_with_principal']) && !in_array($row['relationship_with_principal'], ['H', 'W', 'D', 'S'])){
|
||||
// throw new ImportRowException(__('enrollment.RELATIONSHIP_WITH_PRICIPAL_NOT_VALID'), 0, null, $row);
|
||||
// }
|
||||
|
||||
|
||||
}
|
||||
|
||||
// TODO RECORD BCA ONLY
|
||||
@@ -293,85 +432,141 @@ class MemberEnrollmentService
|
||||
// throw new ImportRowException(__('enrollment.BRANCH_CODE_NOT_REQUIRED'), 0, null, $row);
|
||||
// }
|
||||
|
||||
if (!empty($row['language']) && !in_array($row['language'], ['M', 'E', 'C', 'I', 'O'])) {
|
||||
throw new ImportRowException(__('enrollment.INVALID_LANGUAGE'), 0, null, $row);
|
||||
}
|
||||
// if (!empty($row['language']) && !in_array($row['language'], ['M', 'E', 'C', 'I', 'O'])) {
|
||||
// throw new ImportRowException(__('enrollment.INVALID_LANGUAGE'), 0, null, $row);
|
||||
// }
|
||||
|
||||
if (!empty($row['type_of_work']) && !in_array($row['type_of_work'], ['0', '1', '2', '3'])) {
|
||||
throw new ImportRowException(__('enrollment.INVALID_TYPE_OF_WORK'), 0, null, $row);
|
||||
}
|
||||
// if (!empty($row['type_of_work']) && !in_array($row['type_of_work'], ['0', '1', '2', '3'])) {
|
||||
// throw new ImportRowException(__('enrollment.INVALID_TYPE_OF_WORK'), 0, null, $row);
|
||||
// }
|
||||
|
||||
if (!empty($row['race']) && !in_array($row['race'], ['M', 'C', 'I', 'O'])) {
|
||||
throw new ImportRowException(__('enrollment.INVALID_RACE'), 0, null, $row);
|
||||
}
|
||||
// if (!empty($row['race']) && !in_array($row['race'], ['M', 'C', 'I', 'O'])) {
|
||||
// throw new ImportRowException(__('enrollment.INVALID_RACE'), 0, null, $row);
|
||||
// }
|
||||
|
||||
if (empty($row['policy_number'])) {
|
||||
throw new ImportRowException(__('enrollment.POLICY_NUMBER_REQUIRED'), 0, null, $row);
|
||||
}
|
||||
|
||||
if (!empty($row['marital_status']) && !in_array($row['marital_status'], ['S', 'M', 'D'])) {
|
||||
throw new ImportRowException(__('enrollment.INVALID_MARITAL_STATUS'), 0, null, $row);
|
||||
}
|
||||
// if (!empty($row['marital_status']) && !in_array($row['marital_status'], ['S', 'M', 'D'])) {
|
||||
// throw new ImportRowException(__('enrollment.INVALID_MARITAL_STATUS'), 0, null, $row);
|
||||
// }
|
||||
|
||||
// TODO EFFECTIVE DATE VALIDATION
|
||||
if (empty($row['member_effective_date'])) {
|
||||
throw new ImportRowException(__('enrollment.MEMBER_EFFECTIVE_REQUIRED'), 0, null, $row);
|
||||
}
|
||||
// TODO EFFECTIVE DATE VALIDATION
|
||||
// if(!$this->validateDate($row['member_effective_date'])){
|
||||
// throw new ImportRowException(__('enrollment.INVALID_DATE', [
|
||||
// 'title' => $title['member_effective_date']
|
||||
// ]), 0, null, $row);
|
||||
// }
|
||||
|
||||
if (empty($row['member_expiry_date'])) {
|
||||
throw new ImportRowException(__('enrollment.MEMBER_EXPIRY_REQUIRED'), 0, null, $row);
|
||||
}
|
||||
// TODO EFFECTIVE DATE VALIDATION
|
||||
// if(!$this->validateDate($row['member_expiry_date'])){
|
||||
// throw new ImportRowException(__('enrollment.INVALID_DATE', [
|
||||
// 'title' => $title['member_expiry_date']
|
||||
// ]), 0, null, $row);
|
||||
// }
|
||||
|
||||
// TODO EFFECTIVE DATE VALIDATION
|
||||
// if (empty($row['activation_date'])) {
|
||||
// throw new ImportRowException(__('enrollment.ACTIVATION_DATE_REQUIRED'), 0, null, $row);
|
||||
// }
|
||||
// if(!empty($row['activation_date'])){
|
||||
// if(!$this->validateDate($row['activation_date'])){
|
||||
// throw new ImportRowException(__('enrollment.INVALID_DATE', [
|
||||
// 'title' => $title['activation_date']
|
||||
// ]), 0, null, $row);
|
||||
// }
|
||||
// }
|
||||
// TODO FKTP VALIDATION
|
||||
// TODO FKRTL VALIDATION
|
||||
|
||||
if (!empty($row['marital_status']) && !in_array($row['marital_status'], ['S', 'M', 'D'])) {
|
||||
throw new ImportRowException(__('enrollment.INVALID_MARITAL_STATUS'), 0, null, $row);
|
||||
}
|
||||
// if (!empty($row['marital_status']) && !in_array($row['marital_status'], ['S', 'M', 'D'])) {
|
||||
// throw new ImportRowException(__('enrollment.INVALID_MARITAL_STATUS'), 0, null, $row);
|
||||
// }
|
||||
|
||||
if (empty($row['name'])) {
|
||||
throw new ImportRowException(__('enrollment.NAME_REQUIRED'), 0, null, $row);
|
||||
}
|
||||
|
||||
if (
|
||||
!empty($row['telephone_mobile'])
|
||||
&& !(substr($row['telephone_mobile'], 0, 4) == '+628' || substr($row['telephone_mobile'], 0, 3) == '628')
|
||||
) {
|
||||
throw new ImportRowException(__('enrollment.PHONE_INVALID'), 0, null, $row);
|
||||
}
|
||||
// if (!Helper::validatePhoneNumber($row['telephone_mobile'])){
|
||||
// throw new ImportRowException(__('enrollment.PHONE_INVALID'), 0, null, $row);
|
||||
// }
|
||||
|
||||
if (
|
||||
!empty($row['email'])
|
||||
&& !filter_var($row['email'], FILTER_VALIDATE_EMAIL)
|
||||
) {
|
||||
throw new ImportRowException(__('enrollment.EMAIL_INVALID'), 0, null, $row);
|
||||
}
|
||||
// if (
|
||||
// !empty($row['telephone_mobile'])
|
||||
// && !(substr($row['telephone_mobile'], 0, 4) == '+628' || substr($row['telephone_mobile'], 0, 3) == '628')
|
||||
// ) {
|
||||
// throw new ImportRowException(__('enrollment.PHONE_INVALID'), 0, null, $row);
|
||||
// }
|
||||
|
||||
if (empty($row['date_of_birth'])) {
|
||||
throw new ImportRowException(__('enrollment.DATE_OF_BIRTH_REQUIRED'), 0, null, $row);
|
||||
}
|
||||
// if (
|
||||
// !empty($row['email'])
|
||||
// && !filter_var($row['email'], FILTER_VALIDATE_EMAIL)
|
||||
// ) {
|
||||
// throw new ImportRowException(__('enrollment.EMAIL_INVALID'), 0, null, $row);
|
||||
// }
|
||||
|
||||
// if (empty($row['date_of_birth'])) {
|
||||
// throw new ImportRowException(__('enrollment.DATE_OF_BIRTH_REQUIRED'), 0, null, $row);
|
||||
// }
|
||||
// if(!$this->validateDate($row['date_of_birth'])){
|
||||
// throw new ImportRowException(__('enrollment.INVALID_DATE', [
|
||||
// 'title' => $title['date_of_birth']
|
||||
// ]), 0, null, $row);
|
||||
// }
|
||||
|
||||
// if (empty($row['date_terminated'])) {
|
||||
// throw new ImportRowException(__('enrollment.DATE_OF_TERMINATED'), 0, null, $row);
|
||||
// }
|
||||
// if (!empty($row['date_terminated'])) {
|
||||
// if(!$this->validateDate($row['date_terminated'])){
|
||||
// throw new ImportRowException(__('enrollment.INVALID_DATE', [
|
||||
// 'title' => $title['date_terminated']
|
||||
// ]), 0, null, $row);
|
||||
// }
|
||||
// }
|
||||
// TODO DOB FORMAT VALIDATION
|
||||
|
||||
if (empty($row['sex'])) {
|
||||
throw new ImportRowException(__('enrollment.SEX_REQUIRED'), 0, null, $row);
|
||||
}
|
||||
// if (empty($row['sex'])) {
|
||||
// throw new ImportRowException(__('enrollment.SEX_REQUIRED'), 0, null, $row);
|
||||
// }
|
||||
|
||||
// if (!in_array($row['sex'], ['F', 'M'])){
|
||||
// throw new ImportRowException(__('enrollment.SEX_CODE_NOT_VALID'), 0, null, $row);
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
public function handleImportRow(Corporate $corporate, $row)
|
||||
{
|
||||
try {
|
||||
$activation_date = NULL;
|
||||
if (!empty($row['activation_date'])){
|
||||
$activation_date = $row['activation_date'];
|
||||
}
|
||||
$date_terminated = NULL;
|
||||
if(!empty($row['date_terminated'])){
|
||||
$date_terminated = $row['date_terminated'];
|
||||
}
|
||||
|
||||
$member_data = [
|
||||
"name" => $row['name'] ?? null,
|
||||
"member_id" => $row['member_id'] ?? null,
|
||||
"payor_id" => $row['payor_id'] ?? null,
|
||||
"nik" => $row['nik'] ?? null,
|
||||
// "birth_date" => $row['date_of_birth'] ? date("Y-m-d",$row['date_of_birth']) : null,
|
||||
"birth_date" => $this->dateParser($row['date_of_birth']),
|
||||
"gender" => Helper::genderNormalization($row['sex']),
|
||||
// "language" => $row['language'] ?? null,
|
||||
// "race" => $row['race'] ?? null,
|
||||
"language" => $row['language'] ?? null,
|
||||
"race" => $row['race'] ?? null,
|
||||
"marital_status" => $row['marital_status'] ?? null,
|
||||
"record_type" => $row['record_type'] ?? null,
|
||||
"record_mode" => $row['record_mode'] ?? null,
|
||||
"principal_id" => $row['principal_id'] ?? null,
|
||||
"relation_with_principal" => $row['relationship_with_principal'] ?? null,
|
||||
"bpjs_class" => $row['bpjs_class'] ?? null,
|
||||
@@ -396,23 +591,137 @@ class MemberEnrollmentService
|
||||
"policy_in_force" => $row['policy_in_force'] ?? null,
|
||||
"start_no_claim" => $row['start_no_claim'] ?? null,
|
||||
"end_no_claim" => $row['end_no_claim'] ?? null,
|
||||
];
|
||||
"plan_id" => $row['plan_id'] ?? null,
|
||||
|
||||
"members_effective_date" => $row['member_effective_date'] ?? null,
|
||||
"members_expire_date" => $row['member_expiry_date'] ?? null,
|
||||
"activation_date" => $activation_date,
|
||||
"terminated_date" => $date_terminated,
|
||||
|
||||
"telephone_mobile" => $row['telephone_mobile'] ?? null,
|
||||
"telephone_res" => $row['telephone_res'] ?? null,
|
||||
"telephone_office" => $row['telephone_office'] ?? null,
|
||||
"suspended" => $row['member_suspended'] ?? null,
|
||||
|
||||
"active" => $row['employment_status'] == 'INACTIVE' ? 0 : 1,
|
||||
|
||||
"employee_status" => $row['employment_status']
|
||||
];
|
||||
// $this->validateRow($row);
|
||||
if (!isset($corporate->currentPolicy) || $corporate->currentPolicy->code != $row['policy_number']) {
|
||||
throw new ImportRowException(__('enrollment.POLICY_NUMBER_NOT_MATCH', [
|
||||
'policy_id' => $row['policy_number']
|
||||
]), 0, null, $row);
|
||||
}
|
||||
|
||||
// validasi member efektif date range date in periode date coroporate
|
||||
// $member_effective_date = date("Y-m-d", strtotime($row['member_effective_date']));
|
||||
// $date_terminated = date("Y-m-d", strtotime($row['date_terminated']));
|
||||
|
||||
$member_effective_date = $this->dateParser($row['member_effective_date']);
|
||||
$date_terminated = $this->dateParser($row['date_terminated']);
|
||||
|
||||
|
||||
if(!empty($row['activation_date'])){
|
||||
// $activation_date = date("Y-m-d", strtotime($row['activation_date']));
|
||||
// if (($activation_date == $date_terminated) && ($activation_date == $member_effective_date)) {
|
||||
// throw new ImportRowException(__('enrollment.MORE_THAN', [
|
||||
// 'date_param' => 'Activation Date',
|
||||
// 'date' => $activation_date,
|
||||
// 'date_param2' => 'Member Effective Date',
|
||||
// 'start' => $activation_date
|
||||
// ]), 0, null, $row);
|
||||
// }
|
||||
}
|
||||
if (!empty($row['date_terminated'])){
|
||||
// $date_terminated = date("Y-m-d", strtotime($row['date_terminated']));
|
||||
// if($date_terminated){
|
||||
// if ($date_terminated <= $member_effective_date && ($date_terminated != $member_effective_date)) {
|
||||
// throw new ImportRowException(__('enrollment.MORE_THAN', [
|
||||
// 'date_param' => 'Date Terminated Date',
|
||||
// 'date' => $date_terminated,
|
||||
// 'date_param2' => 'Member Effective Date',
|
||||
// 'start' => $member_effective_date
|
||||
// ]), 0, null, $row);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
// validasi member expried date range date in periode date coroporate
|
||||
// $members_expire_date = date("Y-m-d", strtotime($row['member_expiry_date']));
|
||||
// validasi member expried date must less date member effective
|
||||
// $members_expire_date = date("Y-m-d", strtotime($row['member_expiry_date']));
|
||||
// $members_expire_date = date("Y-m-d", strtotime($row['member_expiry_date']));
|
||||
|
||||
// if ($member_effective_date <= $corporate->currentPolicy->start && ($member_effective_date != $corporate->currentPolicy->start)) {
|
||||
// throw new ImportRowException(__('enrollment.MORE_THAN', [
|
||||
// 'date_param' => 'Member Effective Date',
|
||||
// 'date' => $member_effective_date,
|
||||
// 'date_param2' => 'Start Period Date',
|
||||
// 'start' => $corporate->currentPolicy->start
|
||||
// ]), 0, null, $row);
|
||||
// }
|
||||
|
||||
// if ($member_effective_date >= $corporate->currentPolicy->end && ($member_effective_date != $corporate->currentPolicy->end)) {
|
||||
// throw new ImportRowException(__('enrollment.LESS_THAN', [
|
||||
// 'date_param' => 'Member Effective Date',
|
||||
// 'date' => $member_effective_date,
|
||||
// 'date_param2' => 'End Period Date',
|
||||
// 'end' => $corporate->currentPolicy->end
|
||||
// ]), 0, null, $row);
|
||||
// }
|
||||
|
||||
// if ($member_effective_date >= $corporate->currentPolicy->end && ($member_effective_date != $corporate->currentPolicy->end)) {
|
||||
// throw new ImportRowException(__('enrollment.LESS_THAN', [
|
||||
// 'date_param' => 'Member Effective Date',
|
||||
// 'date' => $member_effective_date,
|
||||
// 'date_param2' => 'End Period Date',
|
||||
// 'end' => $corporate->currentPolicy->end
|
||||
// ]), 0, null, $row);
|
||||
// }
|
||||
// if ($members_expire_date <= $corporate->currentPolicy->start && ($members_expire_date != $corporate->currentPolicy->start) ) {
|
||||
// throw new ImportRowException(__('enrollment.MORE_THAN', [
|
||||
// 'date_param' => 'Member Expired Date',
|
||||
// 'date' => $members_expire_date,
|
||||
// 'date_param2' => 'Start Period Date',
|
||||
// 'start' => $corporate->currentPolicy->start
|
||||
// ]), 0, null, $row);
|
||||
// }
|
||||
|
||||
// if ($members_expire_date >= $corporate->currentPolicy->end && ($members_expire_date != $corporate->currentPolicy->end)) {
|
||||
// throw new ImportRowException(__('enrollment.LESS_THAN', [
|
||||
// 'date_param' => 'Member Expired Date',
|
||||
// 'date' => $members_expire_date,
|
||||
// 'date_param2' => 'END Period Date',
|
||||
// 'end' => $corporate->currentPolicy->end
|
||||
// ]), 0, null, $row);
|
||||
// }
|
||||
|
||||
|
||||
// if ($members_expire_date <= $member_effective_date && ($members_expire_date != $member_effective_date)) {
|
||||
// throw new ImportRowException(__('enrollment.MORE_THAN', [
|
||||
// 'date_param' => 'Member Expired Date',
|
||||
// 'date' => $members_expire_date,
|
||||
// 'date_param2' => 'Member Effective Date',
|
||||
// 'start' => $member_effective_date
|
||||
// ]), 0, null, $row);
|
||||
// }
|
||||
|
||||
|
||||
if($corporate->code != $row['corporate_id']){
|
||||
throw new ImportRowException(__('enrollment.CORPORATE_CODE_NOT_MATCH', [
|
||||
'corporate_id' => $row['corporate_id']
|
||||
]), 0, null, $row);
|
||||
}
|
||||
|
||||
switch ($row['record_mode']) {
|
||||
case "1": // New Member
|
||||
$this->validateRow($row);
|
||||
$member = Member::query()
|
||||
->where('member_id', $row['member_id'])
|
||||
// ->whereHas('employeds', function ($query) use ($corporate) {
|
||||
// $query->where('corporate_id', $corporate->id);
|
||||
// })
|
||||
->first();
|
||||
|
||||
// Validate If Exist Member
|
||||
if ($member) {
|
||||
$person = Person::updateOrCreate(
|
||||
@@ -421,10 +730,11 @@ class MemberEnrollmentService
|
||||
],
|
||||
[
|
||||
'name' => $row['name'] ?? null,
|
||||
'birth_date' => $this->dateParser($row['date_of_birth']),
|
||||
'gender' => Helper::genderPerson($row['sex']),
|
||||
'birth_date' => $this->dateParser($row['date_of_birth']) ?? null,
|
||||
'gender' => Helper::genderNormalization($row['sex']),
|
||||
'language' => $row['language'] ?? null,
|
||||
'race' => $row['race'] ?? null,
|
||||
'phone' => $row['telephone_mobile'] ?? null
|
||||
]
|
||||
);
|
||||
$member->person_id = $person->id;
|
||||
@@ -450,29 +760,40 @@ class MemberEnrollmentService
|
||||
|
||||
// Validate If Plan Exist
|
||||
// TODO validate corporate plan
|
||||
$plan = Plan::query()
|
||||
->where('code', $row['plan_id'])
|
||||
->where('corporate_id', $corporate->id)
|
||||
->first();
|
||||
if (!$plan) {
|
||||
throw new ImportRowException(__('enrollment.PLAN_NOT_FOUND'), 0, null, $row);
|
||||
$plans = explode(",",$row['plan_id']);
|
||||
if (count($plans) > 0) {
|
||||
foreach($plans as $d){
|
||||
$plan = Plan::query()
|
||||
->where('code', $d)
|
||||
->where('corporate_id', $corporate->id)
|
||||
->first();
|
||||
if (!$plan) {
|
||||
throw new ImportRowException(__('enrollment.PLAN_NOT_FOUND'), 0, null, $row);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$plan = Plan::query()
|
||||
->where('code', $row['plan_id'])
|
||||
->where('corporate_id', $corporate->id)
|
||||
->first();
|
||||
if (!$plan) {
|
||||
throw new ImportRowException(__('enrollment.PLAN_NOT_FOUND'), 0, null, $row);
|
||||
}
|
||||
}
|
||||
|
||||
$this->validateRow($row);
|
||||
|
||||
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
$member->fill($member_data);
|
||||
if ($member->save()) {
|
||||
|
||||
$person = Person::create([
|
||||
'name' => $row['name'],
|
||||
'birth_date' => $this->dateParser($row['date_of_birth']),
|
||||
'gender' => Helper::genderPerson($row['sex']),
|
||||
'birth_date' => $this->dateParser($row['date_of_birth']) ?? null,
|
||||
'gender' => Helper::genderNormalization($row['sex']) ?? '-',
|
||||
'language' => $row['language'] ?? null,
|
||||
'race' => $row['race'] ?? null,
|
||||
'phone' => $row['telephone_mobile'],
|
||||
]);
|
||||
|
||||
$member->person_id = $person->id;
|
||||
$member->save();
|
||||
|
||||
@@ -484,6 +805,7 @@ class MemberEnrollmentService
|
||||
'end' => $this->dateParser($row['member_expiry_date']),
|
||||
'status' => 'active'
|
||||
]);
|
||||
|
||||
$memberPolicy->save();
|
||||
|
||||
if (!empty($row['division_name'])) {
|
||||
@@ -499,7 +821,7 @@ class MemberEnrollmentService
|
||||
$division_id = $division->id;
|
||||
}
|
||||
}
|
||||
|
||||
// Bisa disini penyebab data dobel
|
||||
$member->employeds()->create([
|
||||
'corporate_id' => $corporate->id,
|
||||
'branch_code' => $row['branch_code'],
|
||||
@@ -507,13 +829,41 @@ class MemberEnrollmentService
|
||||
'nik' => $row['nik'],
|
||||
'status' => $row['employment_status']
|
||||
]);
|
||||
// Bisa disini penyebab data dobel
|
||||
|
||||
$plans = explode(",",$row['plan_id']);
|
||||
if (count($plans) > 0) {
|
||||
foreach($plans as $d){
|
||||
$plan = Plan::query()
|
||||
->where('code', $d)
|
||||
->where('corporate_id', $corporate->id)
|
||||
->first();
|
||||
if (!$plan) {
|
||||
throw new ImportRowException(__('enrollment.PLAN_NOT_FOUND'), 0, null, $row);
|
||||
}
|
||||
$member->memberPlans()->create([
|
||||
'plan_id' => $plan->id,
|
||||
'status' => 'active',
|
||||
'start' => $this->dateParser($row['member_effective_date']),
|
||||
'end' => $this->dateParser($row['member_expiry_date']),
|
||||
]);
|
||||
}
|
||||
} else {
|
||||
$plan = Plan::query()
|
||||
->where('code', $row['plan_id'])
|
||||
->where('corporate_id', $corporate->id)
|
||||
->first();
|
||||
if (!$plan) {
|
||||
throw new ImportRowException(__('enrollment.PLAN_NOT_FOUND'), 0, null, $row);
|
||||
}
|
||||
$member->memberPlans()->create([
|
||||
'plan_id' => $plan->id,
|
||||
'status' => 'active',
|
||||
'start' => $this->dateParser($row['member_effective_date']),
|
||||
'end' => $this->dateParser($row['member_expiry_date']),
|
||||
]);
|
||||
}
|
||||
|
||||
$member->memberPlans()->create([
|
||||
'plan_id' => $plan->id,
|
||||
'status' => 'active',
|
||||
'start' => $this->dateParser($row['member_effective_date']),
|
||||
'end' => $this->dateParser($row['member_expiry_date']),
|
||||
]);
|
||||
}
|
||||
DB::commit();
|
||||
} catch (\Exception $e) {
|
||||
@@ -522,11 +872,13 @@ class MemberEnrollmentService
|
||||
}
|
||||
break;
|
||||
case "2": // Member Information Update (Without Replacement Card)
|
||||
|
||||
$this->validateRow($row);
|
||||
$member = Member::query()
|
||||
->where('member_id', $row['member_id'])
|
||||
->first();
|
||||
|
||||
// Validate If Exist Member
|
||||
// // Validate If Exist Member
|
||||
if (!$member) {
|
||||
throw new ImportRowException(__('enrollment.MEMBER_NOT_FOUND', [
|
||||
'member_id' => $row['member_id'],
|
||||
@@ -534,13 +886,195 @@ class MemberEnrollmentService
|
||||
]), 0, null, $row);
|
||||
}
|
||||
|
||||
|
||||
$person = Person::updateOrCreate(
|
||||
[
|
||||
'id' => $member->person_id
|
||||
],
|
||||
[
|
||||
'name' => $row['name'] ?? null,
|
||||
'birth_date' => $this->dateParser($row['date_of_birth']),
|
||||
'gender' => Helper::genderPerson($row['sex']),
|
||||
'language' => $row['language'] ?? null,
|
||||
'race' => $row['race'] ?? null,
|
||||
'phone' => $row['telephone_mobile']
|
||||
]
|
||||
);
|
||||
|
||||
$member->person_id = $person->id;
|
||||
|
||||
$member->name = $row['name'];
|
||||
$member->employee_status = $row['employment_status'];
|
||||
$member->gender = Helper::genderPerson($row['sex']);
|
||||
$member->relation_with_principal = $row['relationship_with_principal'];
|
||||
$member->marital_status = $row['marital_status'];
|
||||
$member->birth_date = $this->dateParser($row['date_of_birth']);
|
||||
|
||||
$member->save();
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
$memberPolicy = MemberPolicy::query()
|
||||
->where('policy_id', $row['policy_number'])
|
||||
->where('member_id', $row['member_id'])
|
||||
->with('member')
|
||||
->first();
|
||||
|
||||
// Pengecekan jika ada perubahan di plan
|
||||
// $plan = Plan::query()
|
||||
// ->where('code', $row['plan_id'])
|
||||
// ->first();
|
||||
// if ($plan){
|
||||
// $memberPlan = MemberPlan::query()
|
||||
// ->where('member_id', $member->id)
|
||||
// ->first();
|
||||
// $memberPlan->plan_id = $plan->id;
|
||||
// $memberPlan->save();
|
||||
// }
|
||||
|
||||
// // Pengecekan jika ada perubahan di plan
|
||||
// $plan = Plan::query()
|
||||
// ->where('code', $row['plan_id'])
|
||||
// ->first();
|
||||
// if ($plan){
|
||||
// $memberPlan = MemberPlan::query()
|
||||
// ->where('member_id', $member->id)
|
||||
// ->first();
|
||||
// $memberPlan->plan_id = $plan->id;
|
||||
// $memberPlan->save();
|
||||
// }
|
||||
|
||||
// Hapus Member plan terkait
|
||||
$delete = MemberPlan::where('member_id', $member->id)->delete();
|
||||
//Update plan
|
||||
$plans = explode(",",$row['plan_id']);
|
||||
if (count($plans) > 0) {
|
||||
foreach($plans as $d){
|
||||
$plan = Plan::query()
|
||||
->where('code', $d)
|
||||
->where('corporate_id', $corporate->id)
|
||||
->first();
|
||||
if (!$plan) {
|
||||
throw new ImportRowException(__('enrollment.PLAN_NOT_FOUND'), 0, null, $row);
|
||||
}
|
||||
$member->memberPlans()->updateOrCreate([
|
||||
'member_id' => $member->id,
|
||||
'plan_id' => $plan->id,
|
||||
],
|
||||
[
|
||||
'plan_id' => $plan->id,
|
||||
'status' => 'active',
|
||||
'start' => $this->dateParser($row['member_effective_date']),
|
||||
'end' => $this->dateParser($row['member_expiry_date']),
|
||||
]);
|
||||
}
|
||||
} else {
|
||||
$plan = Plan::query()
|
||||
->where('code', $row['plan_id'])
|
||||
->where('corporate_id', $corporate->id)
|
||||
->first();
|
||||
if (!$plan) {
|
||||
throw new ImportRowException(__('enrollment.PLAN_NOT_FOUND'), 0, null, $row);
|
||||
}
|
||||
$member->memberPlans()->updateOrCreate([
|
||||
'member_id' => $member->id,
|
||||
'plan_id' => $plan->id,
|
||||
],
|
||||
[
|
||||
'plan_id' => $plan->id,
|
||||
'status' => 'active',
|
||||
'start' => $this->dateParser($row['member_effective_date']),
|
||||
'end' => $this->dateParser($row['member_expiry_date']),
|
||||
]);
|
||||
}
|
||||
// end update plan
|
||||
|
||||
// Update jika ada perubahaan di ASO maka akan teriflek ke LMS juga
|
||||
$userInsuranceLms = UserInsurance::query()
|
||||
->where('sNoPolis', $row['member_id'])
|
||||
->first();
|
||||
if ($userInsuranceLms){
|
||||
$userInsuranceLms->sNamaPeserta = $row['name'];
|
||||
$userInsuranceLms->dStartDate = $row['member_effective_date'];
|
||||
$userInsuranceLms->dExpireDate = $row['member_expiry_date'];
|
||||
$nIDUser = $userInsuranceLms->nIDUser;
|
||||
|
||||
UserInsurance::updateOrCreate(
|
||||
['nIDUser' => $nIDUser],
|
||||
[
|
||||
'sNamaPeserta' => $row['name'],
|
||||
'dStartDate' => $row['member_effective_date'],
|
||||
'dExpireDate' => $row['member_expiry_date'],
|
||||
'dTanggalLahir' => $row['date_of_birth'] ? $this->dateParser($row['date_of_birth']) : null,
|
||||
// 'nNoKTP' => $row['nric'] ?? ,
|
||||
]
|
||||
);
|
||||
/* Lihat ID Marital status di table tm_status_pernikahan Linksehat */
|
||||
if ($row['relationship_with_principal'] == 'H'){
|
||||
$sMartialStatus= 6;
|
||||
$nIDHubunganKeluarga = 3;
|
||||
} else if ($row['relationship_with_principal'] == 'W'){
|
||||
$sMartialStatus = 7;
|
||||
$nIDHubunganKeluarga = 4;
|
||||
} else if ($row['relationship_with_principal'] == 'S'){
|
||||
$sMartialStatus = 4;
|
||||
$nIDHubunganKeluarga = 5;
|
||||
} else if ($row['relationship_with_principal'] == 'D'){
|
||||
$sMartialStatus = 5;
|
||||
$nIDHubunganKeluarga = 5;
|
||||
} else {
|
||||
$sMartialStatus = 0;
|
||||
$nIDHubunganKeluarga = 0;
|
||||
}
|
||||
|
||||
|
||||
if($row['sex'] == 'M'){
|
||||
$nIDJenisKelamin = 1;
|
||||
} else {
|
||||
$nIDJenisKelamin = 2;
|
||||
};
|
||||
// $ip_address = $CI->_prepare_ip($CI->input->ip_address());
|
||||
$name = explode(" ", $row['name']);
|
||||
// First name
|
||||
$first_name = isset($name[0]) ? $name[0] : '';
|
||||
// Middle name
|
||||
$middle_name = isset($name[1]) ? $name[1] : '';
|
||||
// Last name
|
||||
$last_name = '';
|
||||
if (count($name) > 2) {
|
||||
$last_name = implode(" ", array_slice($name, 2));
|
||||
}
|
||||
$userLms = User::updateOrCreate(
|
||||
[
|
||||
'nID' => $nIDUser // Kondisi untuk mencari data dengan 'nID' yang sesuai dengan $nIDUser
|
||||
],
|
||||
[
|
||||
'sFirstName' => $first_name,
|
||||
'sLastName' => $middle_name . ' ' .$last_name, // Ubah ini dengan variabel yang sesuai dengan nama belakang (last name)
|
||||
'sPhone' => $row['telephone_mobile'],
|
||||
'sEmail' => str_replace(' ', '', $row['email']),
|
||||
'nIDHubunganKeluarga' => $nIDHubunganKeluarga !== 0 ? $nIDHubunganKeluarga : null,
|
||||
'dUpdateOn' => date('Y-m-d H:i:s'),
|
||||
]
|
||||
);
|
||||
|
||||
$userLmsDetail = UserDetail::updateOrCreate(
|
||||
[
|
||||
'nIDUser' => $nIDUser
|
||||
],
|
||||
[
|
||||
'nIDUser' => $nIDUser,
|
||||
// 'dTanggalLahir' => $row['date_of_birth'],
|
||||
'dTanggalLahir' => $this->dateParser($row['date_of_birth']),
|
||||
'dCreateOn' => date('Y-m-d H:i:s'),
|
||||
'sMartialStatus' => $sMartialStatus != 0 ? $sMartialStatus : null,
|
||||
'nIDJenisKelamin' => $nIDJenisKelamin,
|
||||
'sCreateBy' => $nIDUser,
|
||||
'sKTP' => $row['nric'] ?? null,
|
||||
]
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
if (!$memberPolicy) {
|
||||
throw new ImportRowException(__('enrollment.MEMBER_NOT_EXISTS', [
|
||||
'member_id' => $row['member_id'],
|
||||
@@ -561,6 +1095,14 @@ class MemberEnrollmentService
|
||||
}
|
||||
|
||||
$memberPolicy->member->save();
|
||||
$member->save();
|
||||
// update informasi person
|
||||
$person = Person::query()
|
||||
->where('id', $member->person_id)
|
||||
->first();
|
||||
$person->fill($member_data);
|
||||
$person->save();
|
||||
|
||||
DB::commit();
|
||||
} catch (\Exception $e) {
|
||||
DB::rollback();
|
||||
@@ -580,6 +1122,7 @@ class MemberEnrollmentService
|
||||
'policy_id' => $row['policy_number']
|
||||
]), 0, null, $row);
|
||||
}
|
||||
$this->validateRow($row);
|
||||
|
||||
$memberPolicy = MemberPolicy::query()
|
||||
->where('policy_id', $row['policy_number'])
|
||||
@@ -696,7 +1239,7 @@ class MemberEnrollmentService
|
||||
|
||||
// if (empty($row["option_mode"])) {
|
||||
// throw new ImportRowException(__('enrollment.OPTION_MODE_INVALID_FORMAT', [
|
||||
// 'member_id' => $row['member_id'],
|
||||
// 'member_id' => $row['member_id'],
|
||||
// 'policy_id' => $row['policy_number']
|
||||
// ]), 0, null, $row);
|
||||
// }
|
||||
@@ -709,7 +1252,7 @@ class MemberEnrollmentService
|
||||
// // Validate
|
||||
// if ( !in_array($option_mode[0], ['P', 'D']) || empty($corp_code) || empty($policy_number) || empty($member_id) ) {
|
||||
// throw new ImportRowException(__('enrollment.OPTION_MODE_INVALID_FORMAT', [
|
||||
// 'member_id' => $row['member_id'],
|
||||
// 'member_id' => $row['member_id'],
|
||||
// 'policy_id' => $row['policy_number']
|
||||
// ]), 0, null, $row);
|
||||
// }
|
||||
@@ -771,7 +1314,7 @@ class MemberEnrollmentService
|
||||
// $memberPolicy->member->record_type == $row['record_type']
|
||||
// ) {
|
||||
// throw new ImportRowException(__('enrollment.UNIQUE_CHANGE_PRINCIPAL_INVALID', [
|
||||
// 'member_id' => $row['member_id'],
|
||||
// 'member_id' => $row['member_id'],
|
||||
// 'policy_id' => $row['policy_number']
|
||||
// ]), 0, null, $row);
|
||||
// }
|
||||
@@ -784,7 +1327,7 @@ class MemberEnrollmentService
|
||||
// $memberPolicy->member->payor_id == $row['payor_id']
|
||||
// ) {
|
||||
// throw new ImportRowException(__('enrollment.UNIQUE_CHANGE_DEPENDANT_INVALID', [
|
||||
// 'member_id' => $row['member_id'],
|
||||
// 'member_id' => $row['member_id'],
|
||||
// 'policy_id' => $row['policy_number']
|
||||
// ]), 0, null, $row);
|
||||
// }
|
||||
@@ -1024,10 +1567,10 @@ class MemberEnrollmentService
|
||||
$value = $row_data[$this->doc_headers_to_field_map[$header]] ?? null;
|
||||
if (is_string($value)) {
|
||||
$cells[] = WriterEntityFactory::createCell($value);
|
||||
}
|
||||
}
|
||||
else if ($value instanceof DateTime) {
|
||||
$cells[] = WriterEntityFactory::createCell(Carbon::parse($value)->format('Ymd'));
|
||||
}
|
||||
}
|
||||
else {
|
||||
$cells[] = WriterEntityFactory::createCell($value);
|
||||
}
|
||||
@@ -1036,6 +1579,17 @@ class MemberEnrollmentService
|
||||
return $cells;
|
||||
}
|
||||
|
||||
// This validation for range date in period corporate // validasi untuk range tanggal dalam period corporate yang ditentukan
|
||||
public function validateRangePeriode($dates){
|
||||
$date = date("Y-m-d", strtotime($dates));
|
||||
if (!isset($corporate->currentPolicy) || $corporate->currentPolicy->start <= $date) {
|
||||
|
||||
}
|
||||
if (!isset($corporate->currentPolicy) || $corporate->currentPolicy->end >= $date) {
|
||||
dd($corporate->currentPolicy->end, $dates);
|
||||
}
|
||||
}
|
||||
|
||||
// This returning row with format or order as it is
|
||||
public function makeResultRow($row_data)
|
||||
{
|
||||
|
||||
284
Modules/Internal/Services/RequestLogService.php
Normal file
284
Modules/Internal/Services/RequestLogService.php
Normal file
@@ -0,0 +1,284 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Internal\Services;
|
||||
|
||||
use App\Exceptions\ImportRowException;
|
||||
use App\Models\Member;
|
||||
use App\Models\Benefit;
|
||||
use App\Models\RequestLog;
|
||||
use App\Models\RequestLogBenefit;
|
||||
use App\Models\Corporate;
|
||||
use App\Models\Service;
|
||||
use App\Models\Plan;
|
||||
use Box\Spout\Writer\Common\Creator\WriterEntityFactory;
|
||||
use Box\Spout\Common\Entity\Row;
|
||||
use Carbon\Carbon;
|
||||
use DateTime;
|
||||
use DB;
|
||||
|
||||
class RequestLogService
|
||||
{
|
||||
private static $code_prefix = 'LOG';
|
||||
|
||||
public $doc_headers_to_field_map = [
|
||||
"Date Of Request" => "submission_date",
|
||||
"Date Addmission" => "submission_date",
|
||||
"Member ID Peserta" => "member_id",
|
||||
"Type of patient" => "service",
|
||||
"Provider Name" => "organization_id",
|
||||
"End Of Claim Numbers" => "code",
|
||||
"Remarks" => "keterangan",
|
||||
"Diagnosis" => "catatan",
|
||||
"Tgl Billing dari RS" => "approved_final_log_at",
|
||||
"Benefit Item" => "benefit_id",
|
||||
"Total Billing" => "total_billing",
|
||||
"Amount Approval" => "amount_approval",
|
||||
"Amount Not Approval" => "amount_not_approval",
|
||||
"QC 1" => "status_final_log",
|
||||
"Ingestion Code" => "ingestion_code", // TODO I think this should not be here because if user uploading result then ingestion code and status will be filled
|
||||
"Ingestion Status" => "ingestion_status",
|
||||
|
||||
];
|
||||
|
||||
public $field_to_doc_headers_map = [
|
||||
"submission_date" => "Date Of Request",
|
||||
"submission_date" => "Date Addmission",
|
||||
"member_id" => "Member ID Peserta",
|
||||
"service" => "Type of patient",
|
||||
"organization_id" => "Provider Name",
|
||||
"code" => "End Of Claim Numbers",
|
||||
"keterangan" => "Remarks",
|
||||
"catatan" => "Diagnosis",
|
||||
"approved_final_log_at" => "Tgl Billing dari RS",
|
||||
"benefit_id" => "Benefit Item",
|
||||
"total_billing" => "Total Billing",
|
||||
"amount_approval" => "Amount Approval",
|
||||
"amount_not_approval" => "Amount Not Approval",
|
||||
"status_final_log" => "QC 1" ,
|
||||
"ingestion_code" => "Ingestion Code",
|
||||
"ingestion_status" => "Ingestion Status",
|
||||
];
|
||||
|
||||
public $result_doc_headers = [
|
||||
"Date Of Request",
|
||||
"Date Addmission",
|
||||
"Member ID Peserta",
|
||||
"Type of patient",
|
||||
"Provider Name",
|
||||
"End Of Claim Numbers",
|
||||
"Remarks",
|
||||
"Diagnosis",
|
||||
"Tgl Billing dari RS",
|
||||
"Benefit Item",
|
||||
"Total Billing",
|
||||
"Amount Approval",
|
||||
"Amount Not Approval",
|
||||
"QC 1",
|
||||
"Ingestion Code",
|
||||
"Ingestion Status",
|
||||
];
|
||||
|
||||
public $listing_doc_headers = [
|
||||
"Date Of Request",
|
||||
"Date Addmission",
|
||||
"Member ID Peserta",
|
||||
"Type of patient",
|
||||
"Provider Name",
|
||||
"End Of Claim Numbers",
|
||||
"Remarks",
|
||||
"Diagnosis",
|
||||
"Tgl Billing dari RS",
|
||||
"Benefit Item",
|
||||
"Total Billing",
|
||||
"Amount Approval",
|
||||
"Amount Not Approval",
|
||||
"QC 1",
|
||||
"Ingestion Code",
|
||||
"Ingestion Status",
|
||||
];
|
||||
|
||||
public function dateParser($date_from_row) {
|
||||
|
||||
if ($date_from_row instanceof DateTime) {
|
||||
return $date_from_row->format('Y-m-d');
|
||||
} else if ($date_from_row != null) {
|
||||
return date('Y-m-d', strtotime($date_from_row));
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function dateParserCode($date_from_row) {
|
||||
|
||||
if ($date_from_row instanceof DateTime) {
|
||||
return $date_from_row->format('ymd');
|
||||
} else if ($date_from_row != null) {
|
||||
return date('ymd', strtotime($date_from_row));
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function handleImportRow($row)
|
||||
{
|
||||
try {
|
||||
// Memulai transaksi
|
||||
DB::beginTransaction();
|
||||
$member = Member::with('currentCorporate')->where(['member_id' => $row['member_id']])->first();
|
||||
|
||||
// // Validate If Exist Member
|
||||
if (!$member) {
|
||||
throw new ImportRowException(__('MEMBER_NOT_FOUND', [
|
||||
'member_id' => $row['member_id'],
|
||||
]), 0, null, $row);
|
||||
}
|
||||
// Membuat singkatan dari nama rumah sakit
|
||||
$singkatan = "";
|
||||
$words = explode(' ', $row['organization_id']);
|
||||
|
||||
foreach ($words as $word) {
|
||||
$singkatan .= strtoupper(substr($word, 0, 1));
|
||||
}
|
||||
|
||||
// Membuat kode organisasi
|
||||
$kodeOrganisasi = "ORG000" . $singkatan;
|
||||
// Insert data ke tabel organizations
|
||||
$organization = DB::table('organizations')->where('code', $kodeOrganisasi)->first();
|
||||
// dd( $organization);
|
||||
if ($organization) {
|
||||
$organization_id = $organization->id;
|
||||
} else {
|
||||
$organization_id = DB::table('organizations')
|
||||
->insertGetId([
|
||||
'name' => $row['organization_id'],
|
||||
'code' => $kodeOrganisasi,
|
||||
'type' => 'hospital',
|
||||
'created_at' => now(),
|
||||
'created_by' => auth()->user()->id
|
||||
]);
|
||||
}
|
||||
|
||||
$data = [
|
||||
'source' => 'H',
|
||||
'provideCode' => $kodeOrganisasi ,
|
||||
'date' => $this->dateParserCode($row['submission_date']),
|
||||
'policy' => $member->currentPolicy->code,
|
||||
'member_code' => $row['member_id']
|
||||
];
|
||||
|
||||
$code = $this->makeCode($row['code'], $data);
|
||||
$status = $row['status_final_log'] == 'Y' ? 'approved' : 'requested';
|
||||
$service = Service::where('name', $row['service'])->first();
|
||||
if ($service){
|
||||
$serviceCode = $service->code;
|
||||
} else {
|
||||
$serviceCode = 'Unk';
|
||||
}
|
||||
|
||||
$benefit = Benefit::where('code', $row['benefit_id'])->first();
|
||||
|
||||
if (!$benefit){
|
||||
$statusFinalLog = 'requested';
|
||||
$final_log = 0;
|
||||
} else {
|
||||
$statusFinalLog = $status;
|
||||
$final_log = 1;
|
||||
}
|
||||
|
||||
$requestLog = RequestLog::updateOrCreate(
|
||||
[
|
||||
'code' => $code
|
||||
],
|
||||
[
|
||||
'code' => $code,
|
||||
'member_id' => $member->id,
|
||||
'submission_date' => $row['submission_date'],
|
||||
'discharge_date' => $row['submission_date'],
|
||||
'payment_type' => 'cashless',
|
||||
'status' => $status,
|
||||
'status_final_log' => $statusFinalLog,
|
||||
'final_log' =>$final_log,
|
||||
'import_system' =>TRUE,
|
||||
'catatan' => $row['catatan'],
|
||||
'policy_id' => $member->currentPolicy->id ?? null,
|
||||
'organization_id' => $organization_id,
|
||||
'service_code' => $serviceCode,
|
||||
'approved_final_log_at' => $row['approved_final_log_at'],
|
||||
]);
|
||||
|
||||
|
||||
if ($benefit) { // jika tidak ada benefit nya maka belum ngisi benefit nya
|
||||
RequestLogBenefit::updateOrCreate(
|
||||
[
|
||||
'request_log_id' => $requestLog->id,
|
||||
],
|
||||
[
|
||||
'request_log_id' => $requestLog->id,
|
||||
'benefit_id' => $benefit->id,
|
||||
'amount_incurred' => $row['total_billing'],
|
||||
'amount_approved' => $row['amount_approval'],
|
||||
'amount_not_approved' => $row['amount_not_approval'],
|
||||
'excess_paid' => $row['amount_not_approval'],
|
||||
'created_by' => auth()->user()->id,
|
||||
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
// Commit transaksi
|
||||
DB::commit();
|
||||
} catch (\Exception $e) {
|
||||
DB::rollback();
|
||||
throw new ImportRowException($e->getMessage(), $e->getCode(), $e, $row);
|
||||
}
|
||||
|
||||
$row['ingestion_code'] = "200";
|
||||
$row['ingestion_status'] = "SUCCESS";
|
||||
|
||||
return $row;
|
||||
}
|
||||
|
||||
// This returning row with format or order as it is
|
||||
public function makeResultRow($row_data)
|
||||
{
|
||||
$cells = [];
|
||||
foreach ($row_data as $cellValue) {
|
||||
$cells[] = WriterEntityFactory::createCell($cellValue);
|
||||
}
|
||||
|
||||
return $cells;
|
||||
}
|
||||
|
||||
// This returning row with format or order following $result_doc_headers
|
||||
public function makeResultRowWithResultFormat($row_data)
|
||||
{
|
||||
$cells = [];
|
||||
foreach ($this->result_doc_headers as $header) {
|
||||
$value = $row_data[$this->doc_headers_to_field_map[$header]] ?? null;
|
||||
if (is_string($value)) {
|
||||
$cells[] = WriterEntityFactory::createCell($value);
|
||||
}
|
||||
else if ($value instanceof DateTime) {
|
||||
$cells[] = WriterEntityFactory::createCell(Carbon::parse($value)->format('Ymd'));
|
||||
}
|
||||
else {
|
||||
$cells[] = WriterEntityFactory::createCell($value);
|
||||
}
|
||||
}
|
||||
|
||||
return $cells;
|
||||
}
|
||||
|
||||
|
||||
public function makeCode($next_number, $data)
|
||||
{
|
||||
$sparator = '.';
|
||||
// Pastikan $next_number adalah integer positif
|
||||
$next_number = max(1, (int) $next_number);
|
||||
// Menghasilkan kode dengan format yang diinginkan
|
||||
return self::$code_prefix . $sparator. $data['source'] . $sparator. $data['provideCode'] . $sparator. $data['date'] . $sparator . $data['policy'] . $sparator. $data['member_code'] . $sparator. str_pad($next_number, 5, '0', STR_PAD_LEFT);
|
||||
}
|
||||
|
||||
}
|
||||
30
Modules/Internal/Transformers/AuditTrailResource.php
Normal file
30
Modules/Internal/Transformers/AuditTrailResource.php
Normal file
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Internal\Transformers;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class AuditTrailResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
$audit_trail = [
|
||||
'id' => $this->id,
|
||||
'old_values' => json_decode($this->old_values),
|
||||
'new_values' => json_decode($this->new_values),
|
||||
'action' => $this->action,
|
||||
'user_id' => $this->user->email,
|
||||
'created_at' => $this->created_at,
|
||||
'updated_at' => $this->updated_at,
|
||||
];
|
||||
|
||||
return $audit_trail;
|
||||
}
|
||||
}
|
||||
36
Modules/Internal/Transformers/ClaimEditResource.php
Normal file
36
Modules/Internal/Transformers/ClaimEditResource.php
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Internal\Transformers;
|
||||
|
||||
use App\Models\Benefit;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class ClaimEditResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
$value = parent::toArray($request);
|
||||
$data['id'] = $value['id'];
|
||||
$data['plan_id'] = $value['plan'] ? $value['plan']['code'] : '-';
|
||||
$data['payor_id'] = $value['member'] ? $value['member']['current_corporate']['payor_id'] : '-';
|
||||
$data['corporate_id'] = $value['member'] ? $value['member']['current_corporate']['code'] : '-';
|
||||
$data['policy_number'] = $value['member'] ? $value['member']['current_policy']['code'] : '-';
|
||||
$data['member_id'] = $value['member'] ? $value['member']['member_id'] : '-';
|
||||
// $data['benefit_code'] = $value['benefit'] ? $value['benefit']['code'] : '-';
|
||||
// $data['benefit_desc'] = $value['benefit'] ? $value['benefit']['description'] : '-';
|
||||
$data['benefit_code'] = $value['benefit_code'];
|
||||
$data['benefit_desc'] = $value['benefit_desc'];
|
||||
$data['amount_incurred'] = $value['amount_incurred'];
|
||||
$data['amount_approved'] = $value['amount_approved'];
|
||||
$data['amount_not_approved'] = $value['amount_not_approved'];
|
||||
$data['excess_paid'] = $value['excess_paid'];
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
44
Modules/Internal/Transformers/ClaimHistoryCareResource.php
Normal file
44
Modules/Internal/Transformers/ClaimHistoryCareResource.php
Normal file
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Internal\Transformers;
|
||||
use App\Models\DiagnosisSecondaryClaimHistoryCare;
|
||||
use App\Models\Icd;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class ClaimHistoryCareResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
$claim = parent::toArray($request);
|
||||
|
||||
$secondaryDiagnosis = DiagnosisSecondaryClaimHistoryCare::where('claim_history_care_id', $claim['id'])->with(['icd'])->get()->toArray();
|
||||
|
||||
$data = [
|
||||
'id' => $claim['id'],
|
||||
'service_code' => $claim['service_code'],
|
||||
'admission_date' => $claim['admission_date'],
|
||||
'discharge_date' => $claim['discharge_date'],
|
||||
'claim_id' => $claim['claim_id'],
|
||||
'organization_id' => $claim['organization_id'],
|
||||
'organization_name' => $claim['organization'] ? $claim['organization']['name'] : '-',
|
||||
'practitioner_id' => $claim['practitioner_id'],
|
||||
'practitioner_name' => $claim['practitioner'] ? $claim['practitioner']['person']['name'] : '-',
|
||||
'medical_record_number' => $claim['medical_record_number'],
|
||||
'symptoms' => $claim['symptoms'],
|
||||
'sign' => $claim['sign'],
|
||||
'main_diagnosis_id' => $claim['main_diagnosis_id'],
|
||||
'main_diagnosis_name' => $claim['icd'] ? $claim['icd']['name'] : '-',
|
||||
'status' => $claim['status'],
|
||||
'secondary_diagnosis' => $secondaryDiagnosis,
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@
|
||||
namespace Modules\Internal\Transformers;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class ClaimRequestResource extends JsonResource
|
||||
{
|
||||
@@ -15,7 +16,7 @@ class ClaimRequestResource extends JsonResource
|
||||
public function toArray($request)
|
||||
{
|
||||
$filesGroupByType = $this->files->mapToGroups(function($file) {
|
||||
return [$file->type => $file];
|
||||
return [Str::slug($file->type, '_') => $file];
|
||||
});
|
||||
|
||||
$data = [
|
||||
@@ -24,7 +25,7 @@ class ClaimRequestResource extends JsonResource
|
||||
'submission_date' => $this->submission_date,
|
||||
'member' => $this->member,
|
||||
'status' => $this->status ?? 'unknown',
|
||||
'service_name' => $this->service->name,
|
||||
'service_name' => $this->service ? $this->service->name : '',
|
||||
'payment_type' => $this->payment_type,
|
||||
'payment_type_name' => $this->payment_type_name,
|
||||
'files_by_type' => $filesGroupByType
|
||||
|
||||
@@ -3,6 +3,9 @@
|
||||
namespace Modules\Internal\Transformers;
|
||||
|
||||
use App\Models\Benefit;
|
||||
use App\Models\CorporateEmployee;
|
||||
use App\Models\ClaimRequest;
|
||||
use App\Models\Icd;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class ClaimShowResource extends JsonResource
|
||||
@@ -15,34 +18,55 @@ class ClaimShowResource extends JsonResource
|
||||
*/
|
||||
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'];
|
||||
$claim = parent::toArray($request);
|
||||
|
||||
return $itemData;
|
||||
});
|
||||
$member_data = CorporateEmployee::where('member_id', $claim['member_id'])->first();
|
||||
$claim_request = ClaimRequest::where('id', $claim['claim_request_id'])->first();
|
||||
|
||||
$data['primary_diagnosis'] = $this->diagnoses->filter(function($diagnosis){ return $diagnosis->type == 'primary';})->values();
|
||||
$data['secondary_diagnosis'] = $this->diagnoses->filter(function($diagnosis){ return $diagnosis->type == 'secondary';})->values();
|
||||
|
||||
$data['encounters'] = $this->encounters->map(function($encounter) {
|
||||
$encounterData = EncounterResource::make($encounter);
|
||||
return $encounterData;
|
||||
});
|
||||
|
||||
// $memberDiagnosisHistories = $this->member->
|
||||
$data = [
|
||||
'id' => $claim['id'],
|
||||
'uuid' => $claim['uuid'],
|
||||
'code' => $claim['code'],
|
||||
'claim_request_id' => $claim['claim_request_id'],
|
||||
'member_id' => $claim['member_id'],
|
||||
'currency' => $claim['currency'],
|
||||
'total_claim' => $claim['total_claim'],
|
||||
'plan_id' => $claim['plan_id'],
|
||||
'benefit_id' => $claim['benefit_id'],
|
||||
'organization_id' => $claim['organization_id'],
|
||||
'benefit_code' => $claim['benefit_code'],
|
||||
'benefit_desc' => $claim['benefit_desc'],
|
||||
'amount_incurred' => $claim['amount_incurred'],
|
||||
'amount_approved' => $claim['amount_approved'],
|
||||
'amount_not_approved' => $claim['amount_not_approved'],
|
||||
'excess_paid' => $claim['excess_paid'],
|
||||
'final_encounter_id' => $claim['final_encounter_id'],
|
||||
'status' => $claim['status'],
|
||||
'created_at' => $claim['created_at'],
|
||||
'corporate_id' => $member_data->corporate_id,
|
||||
'service_code' => $claim_request->service_code
|
||||
// "uuid" => "9a59bff7-857f-4e48-8c6b-242ad1286395"
|
||||
// "" => "CLM-00035"
|
||||
// "" => 66
|
||||
// "member_id" => 3
|
||||
// "" => "IDR"
|
||||
// "" => null
|
||||
// "" => 1
|
||||
// "" => null
|
||||
// "" => 0
|
||||
// "benefit_code" => ""
|
||||
// "benefit_desc" => "erwraf"
|
||||
// "" => 10000
|
||||
// "" => 123000
|
||||
// "amount_not_approved" => 122000
|
||||
// "excess_paid" => 230000
|
||||
// "final_encounter_id" => null
|
||||
// "status" => "received"
|
||||
// "created_at" => "2023-10-12T09:23:54.000000Z"
|
||||
];
|
||||
// $data['benefit_items'] = $this->items
|
||||
$data['history_hospital_care'] = $claim['history_hospital_care'];
|
||||
// $data['main_diagnosis']
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
@@ -16,11 +16,10 @@ class CorporateFormulariumResource extends JsonResource
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'code' => $this->code,
|
||||
'name' => $this->name,
|
||||
'items_count' => $this->items_count,
|
||||
'status' => $this->corporateFormulariums->count() ? 'active' : 'inactive',
|
||||
'corporate_formulariums' => $this->coporateFormulariums,
|
||||
'formulaurium_category_id' => $this->formularium_template->id,
|
||||
'category' => $this->formularium_template->name,
|
||||
'description' => $this->formularium_template->description,
|
||||
'active' => $this->active == 1 ? 'Active' : 'Inactive',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
29
Modules/Internal/Transformers/CorporateManageResource.php
Normal file
29
Modules/Internal/Transformers/CorporateManageResource.php
Normal file
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Internal\Transformers;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class CorporateManageResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
$data = [];
|
||||
// dd($this);
|
||||
// if(count($this) > 0){
|
||||
$temp = [];
|
||||
foreach($this as $d){
|
||||
dd($d);
|
||||
// $temp['user'] = []
|
||||
}
|
||||
// }
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
@@ -41,38 +41,97 @@ class CorporateServiceConfigResource extends JsonResource
|
||||
];
|
||||
|
||||
$list_msc = $this->corporateServiceSpecialities->map(function ($speciality) {
|
||||
return explode(',', $speciality->exclusions->first()->rules->where('name', 'msc')->first()->values ?? '');
|
||||
})->map(function ($item) {
|
||||
$exclusions = $speciality->exclusions->first();
|
||||
|
||||
if ($exclusions) {
|
||||
$rules = $exclusions->rules->where('name', 'msc')->first();
|
||||
|
||||
if ($rules) {
|
||||
$values = $rules->values ?? '';
|
||||
$item = explode(',', $values);
|
||||
} else {
|
||||
// Handle case where 'rules' with name 'msc' is not found
|
||||
$item = [];
|
||||
}
|
||||
} else {
|
||||
// Handle case where 'exclusions' is not found
|
||||
$item = [];
|
||||
}
|
||||
|
||||
return [
|
||||
'm' => in_array('m', $item),
|
||||
's' => in_array('s', $item),
|
||||
'c' => in_array('c', $item),
|
||||
];
|
||||
});
|
||||
|
||||
|
||||
$list_gender = $this->corporateServiceSpecialities->map(function ($speciality) {
|
||||
// dd($speciality->exclusions->first()->rules);
|
||||
return explode(',', $speciality->exclusions->first()->rules->where('name', 'gender')->first()->values ?? '');
|
||||
})->map(function ($item) {
|
||||
|
||||
$exclusions = $speciality->exclusions->first();
|
||||
|
||||
if ($exclusions) {
|
||||
$rules = $exclusions->rules->where('name', 'gender')->first();
|
||||
|
||||
if ($rules) {
|
||||
$values = $rules->values ?? '';
|
||||
$item = explode(',', $values);
|
||||
} else {
|
||||
// Handle case where 'rules' with name 'gender' is not found
|
||||
$item = [];
|
||||
}
|
||||
} else {
|
||||
// Handle case where 'exclusions' is not found
|
||||
$item = [];
|
||||
}
|
||||
|
||||
return [
|
||||
'male' => in_array('male', $item),
|
||||
'female' => in_array('female', $item),
|
||||
];
|
||||
});
|
||||
|
||||
|
||||
$min_age = $this->corporateServiceSpecialities->map(function ($speciality) {
|
||||
return $speciality->exclusions->first()->rules->where('name', 'min_age')->first()->values ?? '';
|
||||
$exclusions = $speciality->exclusions->first();
|
||||
|
||||
if ($exclusions) {
|
||||
$rules = $exclusions->rules->where('name', 'min_age')->first();
|
||||
|
||||
if ($rules) {
|
||||
return $rules->values ?? '';
|
||||
}
|
||||
}
|
||||
|
||||
return '';
|
||||
});
|
||||
|
||||
|
||||
$max_age = $this->corporateServiceSpecialities->map(function ($speciality) {
|
||||
return $speciality->exclusions->first()->rules->where('name', 'max_age')->first()->values ?? '';
|
||||
$exclusions = $speciality->exclusions->first();
|
||||
|
||||
if ($exclusions) {
|
||||
$rules = $exclusions->rules->where('name', 'max_age')->first();
|
||||
|
||||
if ($rules) {
|
||||
return $rules->values ?? '';
|
||||
}
|
||||
}
|
||||
|
||||
return '';
|
||||
});
|
||||
|
||||
|
||||
$plan = $this->corporateServiceSpecialities->map(function ($speciality) {
|
||||
return $speciality->exclusions->first()->rules->where('name', 'plan')->first()->values ?? null;
|
||||
$exclusions = $speciality->exclusions->first();
|
||||
|
||||
if ($exclusions) {
|
||||
$rules = $exclusions->rules->where('name', 'plan')->first();
|
||||
|
||||
if ($rules) {
|
||||
return $rules->values ?? null;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
});
|
||||
|
||||
|
||||
$data['exclusions'] = $data['exclusions']->map(function ($item, $key) use (
|
||||
$list_msc,
|
||||
$list_gender,
|
||||
|
||||
@@ -21,6 +21,7 @@ class DiagnosisExclusionResource extends JsonResource
|
||||
'diagnosis_type' => $this->exclusionable->type,
|
||||
'service_code' => $this->service_code,
|
||||
'type' => $this->type,
|
||||
'active' => $this->active,
|
||||
'rules' => $this->rules->mapToGroups(function ($item, $key) {
|
||||
return [$item['name'] => $item['values']];
|
||||
})
|
||||
|
||||
@@ -4,6 +4,7 @@ namespace Modules\Internal\Transformers;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use App\Helpers\Helper;
|
||||
|
||||
class LivechatResource extends JsonResource
|
||||
{
|
||||
@@ -17,13 +18,19 @@ class LivechatResource extends JsonResource
|
||||
{
|
||||
$livechat = [
|
||||
'id' => $this->nID,
|
||||
'doctor_name' => isset($this->doctor->user->sFirstName) ? $this->doctor->user->sFirstName . ' ' . $this->doctor->user->sLastName : null,
|
||||
'doctor_name' => isset($this->doctor->user->sFirstName) ? $this->doctor->user->detail->sTitlePrefix . '. ' . $this->doctor->user->sFirstName . ' ' . $this->doctor->user->sLastName . ' ' . $this->doctor->user->detail->sTitleSuffix : null,
|
||||
'pasien_name' => isset($this->user->sFirstName) ? $this->user->sFirstName . ' ' . $this->user->sLastName : null,
|
||||
'pasien_phone' => isset($this->user->sPhone) ? $this->user->sPhone : '-',
|
||||
'pasien_email' => isset($this->user->sEmail) ? $this->user->sEmail : '-',
|
||||
'speciality' => $this->doctor->speciality->sKeterangan ?? null,
|
||||
'health_care' => $this->healthCare->sHealthCare ?? null,
|
||||
'date_appointment' => Carbon::parse($this->appointment->appointmentDetail->dTanggalAppointment)->format('d-m-Y')
|
||||
. ' ' . $this->appointment->appointmentDetail->tTimeAppointment ?? null,
|
||||
'status_appointment' => $this->appointment->status_name ?? null,
|
||||
'date_created' => Carbon::parse($this->appointment->dCreateOn)->format('d-m-Y H:i:s') ?? null,
|
||||
'date_appointment' => $this->appointment !== null ?
|
||||
Carbon::parse($this->appointment->appointmentDetail->dTanggalAppointment)->format('d-m-Y')
|
||||
. ' ' . $this->appointment->appointmentDetail->tTimeAppointment :
|
||||
null,
|
||||
'status_appointment' => $this->appointment->paymentStatus ?? null,
|
||||
'date_created' => Carbon::parse($this->dCreateOn)->format('d-m-Y') ?? null,
|
||||
'time_request' => Carbon::parse($this->dCreateOn)->format('H:i:s') ?? null,
|
||||
'patient_media' => $this->sMedia ?? null,
|
||||
'doctor_media' => $this->sMediaDokter ?? null,
|
||||
'appointment_media' => $this->appointment->sMedia ?? null,
|
||||
@@ -46,11 +53,12 @@ class LivechatResource extends JsonResource
|
||||
$livechat['duration'] = $data_duration;
|
||||
|
||||
$payment_detail = null;
|
||||
if ($this->appointment->appointmentDetail->sPaymentDetails != null) {
|
||||
|
||||
if ($this->appointment !== null && $this->appointment->appointmentDetail->sPaymentDetails !== null) {
|
||||
$payment_detail = [
|
||||
'payment_type' => $this->appointment->appointmentDetail->sPaymentDetails['payment_type'],
|
||||
'transaction_time' => $this->appointment->appointmentDetail->sPaymentDetails['transaction_time'],
|
||||
'gross_amount' => $this->appointment->appointmentDetail->sPaymentDetails['gross_amount'],
|
||||
'gross_amount' => Helper::formatRupiah($this->appointment->appointmentDetail->sPaymentDetails['gross_amount']),
|
||||
'currency' => $this->appointment->appointmentDetail->sPaymentDetails['currency'],
|
||||
'status_message' => $this->appointment->appointmentDetail->sPaymentDetails['status_message'],
|
||||
];
|
||||
|
||||
40
Modules/Internal/Transformers/RequestLogResource.php
Normal file
40
Modules/Internal/Transformers/RequestLogResource.php
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Internal\Transformers;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use Illuminate\Support\Str;
|
||||
use App\Models\Organization;
|
||||
|
||||
class RequestLogResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
$filesGroupByType = $this->files->mapToGroups(function($file) {
|
||||
return [Str::slug($file->type, '_') => $file];
|
||||
});
|
||||
$provider = Organization::where('id', $this->organization_id)->first();
|
||||
|
||||
$data = [
|
||||
'id' => $this->id,
|
||||
'code' => $this->code,
|
||||
'submission_date' => $this->submission_date,
|
||||
'member_name' => $this->member->name,
|
||||
'status' => $this->status ?? 'unknown',
|
||||
'provider' => $provider ? $provider->name : '-',
|
||||
'status_final_log' => $this->status_final_log ?? 'unknown',
|
||||
'service_name' => $this->service ? $this->service->name : '',
|
||||
'payment_type' => $this->payment_type,
|
||||
'payment_type_name' => $this->payment_type_name,
|
||||
'files_by_type' => $filesGroupByType
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
122
Modules/Internal/Transformers/RequestLogShowResource.php
Normal file
122
Modules/Internal/Transformers/RequestLogShowResource.php
Normal file
@@ -0,0 +1,122 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Internal\Transformers;
|
||||
|
||||
use App\Models\Plan;
|
||||
use App\Models\CorporateBenefit;
|
||||
use App\Models\MemberPlan;
|
||||
use App\Models\CorporateService;
|
||||
use App\Models\RequestLogBenefit;
|
||||
use App\Models\RequestLogMedicine;
|
||||
use App\Models\Organization;
|
||||
use App\Models\Exclusion;
|
||||
use App\Models\Icd;
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\CorporatePolicy;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class RequestLogShowResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
|
||||
$requestLog = parent::toArray($request);
|
||||
$corporateId = $requestLog['member']['current_plan']['corporate_id'] ?? 0;
|
||||
$member_id = $requestLog['member_id'];
|
||||
$planMember = MemberPlan::where('member_id', $member_id)->get('plan_id');
|
||||
|
||||
$planId = Plan::whereIn('id', $planMember)->where('service_code', $requestLog['service_code'])->first();
|
||||
$benefit = CorporateBenefit::with('benefit')->where('plan_id', $planId->id)->get()->toArray();
|
||||
$benefitDetailLog = RequestLogBenefit::with('benefit')->where('request_log_id', $requestLog['id'])->get()->toArray();
|
||||
$medicineDetailLog = RequestLogMedicine::where('request_log_id', $requestLog['id'])->get()->toArray();
|
||||
$provider = Organization::where('id', $requestLog['organization_id'])->first();
|
||||
|
||||
if ($provider){
|
||||
$providerName = $provider->name;
|
||||
} else {
|
||||
$providerName = '-';
|
||||
}
|
||||
|
||||
$benefitData = [];
|
||||
|
||||
if (count($benefit)){
|
||||
foreach($benefit as $data){
|
||||
array_push($benefitData, $data['benefit']);
|
||||
}
|
||||
}
|
||||
|
||||
// Medicine
|
||||
$medicineData = [];
|
||||
if (count($medicineDetailLog)){
|
||||
foreach($medicineDetailLog as $data){
|
||||
array_push($medicineData, $data);
|
||||
}
|
||||
}
|
||||
|
||||
// Service Rule
|
||||
$corporateService = CorporateService::query()
|
||||
->where('corporate_id', $corporateId)
|
||||
->where('service_code', $requestLog['service_code'])
|
||||
->with(['configs'])
|
||||
->first();
|
||||
$config = [];
|
||||
if ($corporateService) {
|
||||
$config = $corporateService->configs->pluck('value', 'name')->toArray();
|
||||
}
|
||||
|
||||
// Exclusion Service or diagnosis
|
||||
$exclusions = Exclusion::query()
|
||||
->where('corporate_id', $corporateId)
|
||||
->where('type', 'diagnosis')
|
||||
->with(['exclusionable', 'rules'])
|
||||
->get()->toArray();
|
||||
|
||||
// Policy Number
|
||||
$policyNumber = CorporatePolicy::query()
|
||||
->where('corporate_id', $corporateId)
|
||||
->first();
|
||||
|
||||
|
||||
$data = [
|
||||
'id' => $requestLog['id'],
|
||||
'code' => $requestLog['code'],
|
||||
'member_id' => $requestLog['member']['member_id'],
|
||||
'policy_number' =>$policyNumber->code ? $policyNumber->code : '-',
|
||||
'name' => $requestLog['member']['name'],
|
||||
'date_of_birth' => $requestLog['member']['birth_date'],
|
||||
'gender' => $requestLog['member']['gender'],
|
||||
'marital_status' => $requestLog['member']['status_marital'],
|
||||
'member_type' => Helper::memberType($requestLog['member']['record_type']),
|
||||
'principal_id' => $requestLog['member']['principal_id'] ? $requestLog['member']['principal_id'] : '-',
|
||||
'principal_name' => $requestLog['member']['principal_id'] ? Helper::principalName($requestLog['member']['principal_id']) : '-',
|
||||
'relation_with_principal' => Helper::relationWithPrincipal($requestLog['member']['relation_with_principal']),
|
||||
'submission_date' => $requestLog['submission_date'],
|
||||
'service_type' => Helper::serviceName($requestLog['service_code']),
|
||||
'claim_method' => $requestLog['payment_type'],
|
||||
'status' => $requestLog['status'],
|
||||
'status_final_log' => $requestLog['status_final_log'],
|
||||
'benefit' => $benefitData,
|
||||
'benefit_data' => $benefitDetailLog,
|
||||
'config_service' => $config,
|
||||
'exclusion' => $exclusions,
|
||||
'medicine' => $medicineData,
|
||||
'files' => $requestLog['files'],
|
||||
'provider' => $providerName,
|
||||
'no_identitas' => $requestLog['member']['nric'],
|
||||
'keterangan' => $requestLog['keterangan'],
|
||||
'hak_kamar_pasien' => $requestLog['hak_kamar_pasien'],
|
||||
'penempatan_kamar' => $requestLog['penempatan_kamar'],
|
||||
'catatan' => $requestLog['catatan'],
|
||||
|
||||
|
||||
];
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
@@ -5,126 +5,172 @@ namespace Modules\Linksehat\Http\Controllers\Api;
|
||||
use App\Helpers\Helper;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Person;
|
||||
use App\Models\User;
|
||||
use App\Models\OLDLMS\User;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Laravel\Socialite\Facades\Socialite;
|
||||
use Modules\Linksehat\Transformers\UserProfileResource;
|
||||
use Modules\Linksehat\Transformers\User\UserProfileResource;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Validator;
|
||||
|
||||
class AuthController extends Controller
|
||||
{
|
||||
public function otpRequest(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
// 'phone' => 'required'
|
||||
'phone_or_email' => 'required'
|
||||
]);
|
||||
private $url;
|
||||
|
||||
if (filter_var($request->phone_or_email, FILTER_VALIDATE_EMAIL)) {
|
||||
$user = User::updateOrCreate([
|
||||
'email' => $request->phone_or_email
|
||||
], [
|
||||
'email' => $request->phone_or_email,
|
||||
'otp' => rand(1000, 9999),
|
||||
'otp_created_at' => now()
|
||||
]);
|
||||
|
||||
$person = Person::query()->create([
|
||||
'owner_user_id' => $user->id,
|
||||
'email' => $request->phone_or_email,
|
||||
'created_by' => $user->id,
|
||||
]);
|
||||
|
||||
User::query()->find($user->id)->update([
|
||||
'person_id' => $person->id
|
||||
]);
|
||||
} else {
|
||||
$user = User::updateOrCreate([
|
||||
'phone' => $request->phone_or_email
|
||||
], [
|
||||
'phone' => $request->phone_or_email,
|
||||
'otp' => rand(1000, 9999),
|
||||
'otp_created_at' => now()
|
||||
]);
|
||||
|
||||
$person = Person::query()->create([
|
||||
'owner_user_id' => $user->id,
|
||||
'phone' => $request->phone_or_email,
|
||||
'created_by' => $user->id,
|
||||
]);
|
||||
|
||||
User::query()->find($user->id)->update([
|
||||
'person_id' => $person->id
|
||||
]);
|
||||
}
|
||||
|
||||
if (!$user) {
|
||||
$message = filter_var($request->phone_or_email, FILTER_VALIDATE_EMAIL) ? "User dengan alamat email " . $request->phone_or_email . " tidak ditemukan" : "User dengan nomor telepon " . $request->phone_or_email . " tidak ditemukan";
|
||||
|
||||
return Helper::responseJson(statusCode: Response::HTTP_NOT_FOUND, message: $message);
|
||||
}
|
||||
|
||||
// TODO Send the OTP
|
||||
if (filter_var($request->phone_or_email, FILTER_VALIDATE_EMAIL)) {
|
||||
// Send Email
|
||||
} else {
|
||||
// Send Whatsapp
|
||||
}
|
||||
|
||||
return Helper::responseJson(message: 'OTP Terkirim');
|
||||
public function __construct() {
|
||||
$this->url = $_ENV['LMS_APP_URL'];
|
||||
}
|
||||
|
||||
public function login(Request $request)
|
||||
{
|
||||
{
|
||||
$request->validate([
|
||||
// 'email' => 'email',
|
||||
// 'password' => 'required_with:email',
|
||||
'phone_or_email' => 'required',
|
||||
// 'phone' => '',
|
||||
// 'otp' => 'required_with:phone',
|
||||
'phone_or_email' => 'required',
|
||||
'otp' => 'required'
|
||||
'password' => 'required',
|
||||
// 'otp' => 'required'
|
||||
]);
|
||||
|
||||
$loginType = filter_var($request->phone_or_email, FILTER_VALIDATE_EMAIL) ? 'email' : 'phone';
|
||||
// Login hit ke API linksehat, karena encrypt nya pake CI
|
||||
$response = Http::post($this->url.'login', [
|
||||
'sEmail' => $request->phone_or_email,
|
||||
'sPassword' => $request->password,
|
||||
'sRemember' => $request->remember
|
||||
]);
|
||||
|
||||
if ($loginType == 'email') {
|
||||
$user = User::query()
|
||||
->where('email', $request->phone_or_email)
|
||||
->first();
|
||||
}
|
||||
|
||||
if ($loginType == 'phone') {
|
||||
$user = User::query()
|
||||
->where('phone', $request->phone_or_email)
|
||||
->first();
|
||||
}
|
||||
|
||||
if (!isset($user) || empty($user)) {
|
||||
return response(['message' => 'User Tidak Ditemukan'], 404);
|
||||
}
|
||||
|
||||
if ($loginType == 'email') {
|
||||
if ($request->otp != $user->otp) {
|
||||
return response(['message' => 'OTP Salah, Silahkan Cek Kembali Email Anda'], 403);
|
||||
}
|
||||
} else if ($loginType == 'phone') {
|
||||
if ($request->otp != $user->otp) {
|
||||
return response(['message' => 'OTP Salah'], 403);
|
||||
}
|
||||
$response = $response->json();
|
||||
if ($response['success']){
|
||||
$user = User::with('detail')
|
||||
->where('sEmail', $request->phone_or_email)
|
||||
->first();
|
||||
return Helper::responseJson(
|
||||
data: [
|
||||
'token' => $user->createToken('app')->plainTextToken,
|
||||
'user' => UserProfileResource::make($user),
|
||||
],
|
||||
message: 'Selamat Datang'
|
||||
);
|
||||
} else {
|
||||
return response(['message' => 'Mode Login Tidak Dikenal'], 403);
|
||||
return response(['message' => 'Email atau Password salah, Silahkan Cek Kembali'], 403);
|
||||
};
|
||||
}
|
||||
|
||||
public function forgetPassword(Request $request){
|
||||
$request->validate([
|
||||
'email' => 'required|email',
|
||||
]);
|
||||
|
||||
// Login hit ke API linksehat, karena encrypt nya pake CI
|
||||
$response = Http::post($this->url.'forgot_password', [
|
||||
'sEmail' => $request->email,
|
||||
]);
|
||||
|
||||
$response = $response->json();
|
||||
if ($response['success']){
|
||||
return Helper::responseJson(
|
||||
data: [],
|
||||
message: 'Message has been sent.'
|
||||
);
|
||||
} else {
|
||||
return response(['message' => 'Email atau Password salah, Silahkan Cek Kembali'], 403);
|
||||
};
|
||||
}
|
||||
|
||||
public function resetPassword(Request $request){
|
||||
$request->validate([
|
||||
'email' => 'required|email',
|
||||
'code' => 'required',
|
||||
'password' => 'required',
|
||||
]);
|
||||
|
||||
// Login hit ke API linksehat, karena encrypt nya pake CI
|
||||
$response = Http::post($this->url.'reset_password', [
|
||||
'sCode' => $request->code,
|
||||
'sEmail' => $request->email,
|
||||
'sPassword' => $request->password,
|
||||
]);
|
||||
|
||||
$response = $response->json();
|
||||
if ($response['success']){
|
||||
return Helper::responseJson(
|
||||
data: [],
|
||||
message: 'Password telah di reset'
|
||||
);
|
||||
} else {
|
||||
return response(['message' => $response['message']], 403);
|
||||
};
|
||||
}
|
||||
|
||||
public function loginPhone(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'phone_or_email' => 'required',
|
||||
'otp' => 'required',
|
||||
]);
|
||||
|
||||
$user = User::with('detail')
|
||||
->where([
|
||||
'sPhone' => $request->phone_or_email,
|
||||
'sVerificationCode' => $request->otp
|
||||
])
|
||||
->first();
|
||||
|
||||
if ($user){
|
||||
|
||||
$updateVericationCode = User::with('detail')
|
||||
->where([
|
||||
'sPhone' => $request->phone_or_email,
|
||||
'sVerificationCode' => $request->otp
|
||||
])->update([
|
||||
'sVerificationCode' => null,
|
||||
]);
|
||||
return Helper::responseJson(
|
||||
data: [
|
||||
'token' => $user->createToken('app')->plainTextToken,
|
||||
'user' => UserProfileResource::make($user),
|
||||
],
|
||||
message: 'Selamat Datang'
|
||||
);
|
||||
} else {
|
||||
return response(['message' => 'Email atau Password salah, Silahkan Cek Kembali'], 403);
|
||||
};
|
||||
}
|
||||
|
||||
public function otpRequest(Request $request)
|
||||
{
|
||||
|
||||
$user = User::with('detail')
|
||||
->where('sPhone', $request->phone_or_email)
|
||||
->first();
|
||||
|
||||
if ($user){
|
||||
// Request OTP ke API linksehat
|
||||
$response = Http::post($this->url.'generate_code', [
|
||||
'sPhone' => $request->phone_or_email
|
||||
]);
|
||||
|
||||
$response = $response->json();
|
||||
|
||||
return Helper::responseJson(
|
||||
data: [
|
||||
'otp' => $response['message'],
|
||||
],
|
||||
message: 'Kode OTP'
|
||||
);
|
||||
} else {
|
||||
return Helper::responseJson(
|
||||
data: [
|
||||
'otp' => null,
|
||||
],
|
||||
message: 'Nomor tidak ditemukan'
|
||||
);
|
||||
}
|
||||
|
||||
return Helper::responseJson(
|
||||
data: [
|
||||
'token' => $user->createToken('app')->plainTextToken,
|
||||
'user' => UserProfileResource::make($user),
|
||||
],
|
||||
message: 'Selamat Datang'
|
||||
);
|
||||
|
||||
|
||||
}
|
||||
|
||||
public function register(Request $request)
|
||||
@@ -163,6 +209,7 @@ class AuthController extends Controller
|
||||
return Helper::responseJson(message: 'Behasil Logout.');
|
||||
}
|
||||
|
||||
|
||||
public function mockOtp(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Linksehat\Http\Controllers\Api;
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\OLDLMS\User;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Modules\Linksehat\Transformers\User\ShowProfileResource;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
|
||||
class AutocompleteController extends Controller {
|
||||
|
||||
public function maritalStatus(){
|
||||
$maritalStatus = DB::connection('oldlms')->table('tm_status_pernikahan')->get()->toArray();
|
||||
|
||||
$data = [];
|
||||
|
||||
if ($maritalStatus){
|
||||
$temp = [];
|
||||
foreach($maritalStatus as $d){
|
||||
$temp['id'] = $d->nID;
|
||||
$temp['value'] = $d->sStatusPernikahan;
|
||||
|
||||
array_push($data, $temp);
|
||||
}
|
||||
|
||||
}
|
||||
return Helper::responseJson($data);
|
||||
}
|
||||
|
||||
public function bloodType() {
|
||||
$bloodType = DB::connection('oldlms')->table('tm_golongan_darah')->get()->toArray();
|
||||
|
||||
$data = [];
|
||||
|
||||
if ($bloodType){
|
||||
$temp = [];
|
||||
foreach($bloodType as $d){
|
||||
$temp['id'] = $d->nID;
|
||||
$temp['value'] = $d->sGolonganDarah;
|
||||
|
||||
array_push($data, $temp);
|
||||
}
|
||||
|
||||
}
|
||||
return Helper::responseJson($data);
|
||||
}
|
||||
|
||||
public function relationship() {
|
||||
$relation = DB::connection('oldlms')->table('tm_hubungan_keluarga')->get()->toArray();
|
||||
|
||||
$data = [];
|
||||
|
||||
if ($relation){
|
||||
$temp = [];
|
||||
foreach($relation as $d){
|
||||
$temp['id'] = $d->nID;
|
||||
$temp['value'] = $d->sHubunganKeluarga;
|
||||
|
||||
array_push($data, $temp);
|
||||
}
|
||||
|
||||
}
|
||||
return Helper::responseJson($data);
|
||||
}
|
||||
|
||||
public function corporate(Request $request) {
|
||||
$search = $request->search;
|
||||
$corporate = DB::table('corporates')
|
||||
->where('active', 1)
|
||||
->where(function ($query) use ($search) {
|
||||
$query->where('name', 'like', "%$search%")
|
||||
->orWhere('code', 'like', "%$search%");
|
||||
})
|
||||
->get()
|
||||
->toArray();
|
||||
|
||||
$data['company'] = [];
|
||||
|
||||
if ($corporate){
|
||||
$temp = [];
|
||||
foreach($corporate as $d){
|
||||
$temp['id'] = $d->id;
|
||||
$temp['name'] = $d->name;
|
||||
$temp['linking_rule'] = json_decode($d->linking_rules);
|
||||
|
||||
array_push($data['company'], $temp);
|
||||
}
|
||||
|
||||
}
|
||||
return Helper::responseJson($data);
|
||||
}
|
||||
}
|
||||
|
||||
138
Modules/Linksehat/Http/Controllers/Api/LinkingController.php
Normal file
138
Modules/Linksehat/Http/Controllers/Api/LinkingController.php
Normal file
@@ -0,0 +1,138 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Linksehat\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Person;
|
||||
use App\Models\Corporate;
|
||||
use App\Models\Member;
|
||||
use App\Models\OLDLMS\User;
|
||||
use App\Models\OLDLMS\UserInsurance;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Laravel\Socialite\Facades\Socialite;
|
||||
use Modules\Linksehat\Transformers\User\UserProfileResource;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use App\Http\Resources\OLDLMS\MemberResource;
|
||||
use App\Rules\NikRule;
|
||||
|
||||
|
||||
class LinkingController extends Controller
|
||||
{
|
||||
private $url;
|
||||
|
||||
public function __construct() {
|
||||
$this->url = $_ENV['LMS_APP_URL'];
|
||||
}
|
||||
|
||||
public function linkingValidate(Request $request)
|
||||
{
|
||||
$validator = Validator::make($request->all(), [
|
||||
'corporate_id' => 'required',
|
||||
'user_id' => 'required',
|
||||
]);
|
||||
|
||||
// $request->validate($validationRules);
|
||||
if ($validator->fails()) {
|
||||
return response()->json(['errors' => $validator->errors()], 422);
|
||||
}
|
||||
|
||||
$corporate = Corporate::findOrFail($request->corporate_id);
|
||||
// Make Validation from Linking Rules
|
||||
$linkingRulesArr = $corporate->linking_rules->toArray();
|
||||
|
||||
$validationRules = [];
|
||||
foreach ($linkingRulesArr as $field) {
|
||||
$rules = ['required']; // Default is required if in the linking_rules
|
||||
if ($field == 'email') {
|
||||
$rules[] = 'email';
|
||||
}
|
||||
|
||||
if ($field == 'nric') {
|
||||
$rules[] = new NikRule;
|
||||
}
|
||||
|
||||
$validationRules[$field] = $rules;
|
||||
}
|
||||
|
||||
$validator = Validator::make($request->all(),$validationRules);
|
||||
|
||||
// $request->validate($validationRules);
|
||||
if ($validator->fails()) {
|
||||
return Helper::responseJson(data: [], message: 'Member Tidak ditemukan', statusCode: 422, status: 'error');
|
||||
}
|
||||
|
||||
$member = Member::query()
|
||||
->when(in_array('nric', $linkingRulesArr), function($q) use ($request) {
|
||||
$q->where('nric', $request->nric);
|
||||
})
|
||||
->when(in_array('member_id', $linkingRulesArr), function($q) use ($request) {
|
||||
$q->where('member_id', $request->member_id);
|
||||
})
|
||||
->when(in_array('name', $linkingRulesArr), function($q) use ($request) {
|
||||
$q->where('name', $request->name);
|
||||
})
|
||||
->when(in_array('dob', $linkingRulesArr), function($q) use ($request) {
|
||||
$q->where('birth_date', $request->dob);
|
||||
})
|
||||
->when(in_array('phone', $linkingRulesArr), function($q) use ($request) {
|
||||
$q->whereHas('person', function ($person) use ($request) {
|
||||
$person->where('phone', $request->phone);
|
||||
});
|
||||
})
|
||||
->when(in_array('email', $linkingRulesArr), function($q) use ($request) {
|
||||
$q->where('email', $request->email);
|
||||
})
|
||||
->when(in_array('nik', $linkingRulesArr), function($q) use ($request) {
|
||||
$q->whereHas('employeds', function ($employed) use ($request) {
|
||||
$employed->where('corporate_id', $request->corporate_id)
|
||||
->where('nik', $request->nik);
|
||||
});
|
||||
})
|
||||
|
||||
->with([
|
||||
'memberPlans' => function ($memberPlan) {
|
||||
$memberPlan->latest();
|
||||
},
|
||||
|
||||
])
|
||||
|
||||
->first();
|
||||
|
||||
if ($member) {
|
||||
// Insert into database linksehat
|
||||
$insurance = UserInsurance::updateOrCreate(
|
||||
[
|
||||
'nIDUser' => $request->user_id,
|
||||
],
|
||||
[
|
||||
'nIDUser' => $request->user_id,
|
||||
'nIDInsurance' => $_ENV['LINKSEHAT_ASO_INSURANCE_ID'],
|
||||
'sNoPolis' => $member->member_id,
|
||||
'sNamaPeserta' => $member->fullName,
|
||||
'sKartuPeserta' => '',
|
||||
'sLayanan' => 'RJ,TC',
|
||||
'dStartDate' => $member->members_effective_date,
|
||||
'dExpireDate' => $member->members_expire_date,
|
||||
'dTanggalLahir' => $member->birth_date,
|
||||
'nNoKTP' => $member->nric != '' ? $member->nric : 0 ,
|
||||
'sIsConfrimed' => 1,
|
||||
'sStatus' => 1,
|
||||
]);
|
||||
$message = $member->currentPolicy->corporate->welcome_message;
|
||||
return Helper::responseJson(data: MemberResource::make($member), message: $message);
|
||||
}
|
||||
|
||||
return Helper::responseJson(data: [], message: 'Member Tidak ditemukan', statusCode: 404, status: 'error');
|
||||
}
|
||||
|
||||
public function card($member_id){
|
||||
$member = Member::where('member_id', $member_id)->get()->first();
|
||||
$message = $member->currentPolicy->corporate->welcome_message;
|
||||
return Helper::responseJson(data: MemberResource::make($member), message: $message);
|
||||
}
|
||||
}
|
||||
@@ -3,12 +3,16 @@
|
||||
namespace Modules\Linksehat\Http\Controllers\Api;
|
||||
|
||||
use App\Helpers\Helper;
|
||||
use App\Models\User;
|
||||
use App\Models\OLDLMS\User;
|
||||
use App\Models\OLDLMS\UserDetail;
|
||||
use Illuminate\Contracts\Support\Renderable;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Modules\Linksehat\Transformers\UserProfileResource;
|
||||
use Modules\Linksehat\Transformers\User\ShowProfileResource;
|
||||
use Modules\Linksehat\Transformers\User\UserProfileResource;
|
||||
|
||||
|
||||
class ProfileController extends Controller
|
||||
{
|
||||
@@ -16,11 +20,11 @@ class ProfileController extends Controller
|
||||
* Display a listing of the resource.
|
||||
* @return Renderable
|
||||
*/
|
||||
public function index()
|
||||
public function index(Request $request, $id)
|
||||
{
|
||||
$user = Auth::user()->load('person');
|
||||
$user = User::with(['detail'])->where('nID', $id)->get()->first();
|
||||
|
||||
return Helper::responseJson(new UserProfileResource($user));
|
||||
return Helper::responseJson(new ShowProfileResource($user));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -70,58 +74,90 @@ class ProfileController extends Controller
|
||||
*/
|
||||
public function update(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'nik' => 'numeric',
|
||||
'name_prefix' => '',
|
||||
'name' => '',
|
||||
'name_suffix' => '',
|
||||
'gender' => 'in:P,L',
|
||||
'birth_date' => 'sometimes:date',
|
||||
// 'is_deceased' => '',
|
||||
'deceased_at' => 'sometimes:date',
|
||||
'marital_status' => 'in:S,M,C',
|
||||
'preferred_lang' => 'in:id,en'
|
||||
$validator = Validator::make($request->all(), [
|
||||
'id' => 'required',
|
||||
'first_name' => 'required',
|
||||
'last_name' => 'required',
|
||||
'date_of_birth' => 'required',
|
||||
// 'email' => 'required',
|
||||
]);
|
||||
|
||||
|
||||
$user = Auth::user();
|
||||
if ($user->person) { // Update Profile
|
||||
$user->person->fill($request->only([
|
||||
'nik', 'name_prefix', 'name', 'name_suffix', 'gender', 'birth_date', 'deceased_at', 'marital_status'
|
||||
]))->save();
|
||||
if ($validator->fails()) {
|
||||
return response()->json(['errors' => $validator->errors()], 422);
|
||||
}
|
||||
|
||||
if ($request->has('preferred_lang')) {
|
||||
$user->metas()->updateOrCreate([
|
||||
'type' => 'preferred_lang'
|
||||
], [
|
||||
'system' => 'default',
|
||||
'type' => 'preferred_lang',
|
||||
'value' => $request->preferred_lang,
|
||||
]);
|
||||
}
|
||||
} else { // Create If Not Exist
|
||||
$newPerson = array_merge(
|
||||
$request->only([
|
||||
'nik', 'name_prefix', 'name', 'name_suffix', 'gender', 'birth_date', 'deceased_at', 'marital_status'
|
||||
]),
|
||||
['user_owner_id' => $user->id]
|
||||
);
|
||||
$newPerson = $user->person()->create($newPerson);
|
||||
$user->person_id = $newPerson->id;
|
||||
$user->save();
|
||||
$user = User::find($request->id);
|
||||
$userDetail = UserDetail::where('nIDUser', $request->id)->first();
|
||||
// Array asosiatif yang menghubungkan field dengan nama kolom di tabel
|
||||
$userFields = [
|
||||
'first_name' => 'sFirstName',
|
||||
'last_name' => 'sLastName',
|
||||
'phone' => 'sPhone',
|
||||
'email' => 'sEmail',
|
||||
'relationship' => 'nIDHubunganKeluarga',
|
||||
];
|
||||
|
||||
if ($request->has('preferred_lang')) {
|
||||
$user->metas()->updateOrCreate([
|
||||
'type' => 'preferred_lang'
|
||||
], [
|
||||
'system' => 'default',
|
||||
'type' => 'preferred_lang',
|
||||
'value' => $request->preferred_lang,
|
||||
]);
|
||||
$userDetailFields = [
|
||||
'date_of_birth' => 'dTanggalLahir',
|
||||
'gender' => 'nIDJenisKelamin',
|
||||
'blood_type' => 'nIDGolonganDarah',
|
||||
'marital_status' => 'sMartialStatus',
|
||||
'weight' => 'sWeight',
|
||||
'height' => 'sHeight',
|
||||
];
|
||||
|
||||
// Update user data
|
||||
foreach ($userFields as $requestField => $column) {
|
||||
if ($request->filled($requestField)) {
|
||||
$user->update([$column => $request->$requestField]);
|
||||
}
|
||||
}
|
||||
|
||||
$user = User::find($user->id); // ReLoad User Data
|
||||
return Helper::responseJson(['users' => new UserProfileResource($user)]);
|
||||
// Update user detail
|
||||
if($userDetail){
|
||||
foreach ($userDetailFields as $requestField => $column) {
|
||||
if ($request->filled($requestField)) {
|
||||
$userDetail->update([$column => $request->$requestField]);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
UserDetail::create([
|
||||
'nIDUser' => $request->id,
|
||||
'dTanggalLahir' => $request->date_of_birth,
|
||||
'nIDJenisKelamin' => $request->gender,
|
||||
'nIDGolonganDarah' => $request->blood_type,
|
||||
'sMartialStatus' => $request->marital_status,
|
||||
'sWeight' => $request->weight,
|
||||
'sHeight' => $request->height,
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
// poto profile
|
||||
// if ($request->hasFile('avatar')) {
|
||||
// $pathFileAvatar = File::storeFile('photo_profile_lms', $newCorporate->id, $request->file('avatar'));
|
||||
// $newCorporate->files()->updateOrCreate([
|
||||
// 'type' => 'photo_profile_lms',
|
||||
// 'name' => File::getFileName('photo_profile_lms', $newCorporate->id, $request->file('avatar')),
|
||||
// 'extension' => $request->file('avatar')->getClientOriginalExtension(),
|
||||
// 'path' => $pathFileAvatar,
|
||||
// 'created_by' => auth()->user()->id,
|
||||
// 'updated_by' => auth()->user()->id,
|
||||
// ]);
|
||||
// }
|
||||
|
||||
$data['data'] = [
|
||||
'status' => 200,
|
||||
'message' => 'data berhasil di edit',
|
||||
'error' => 'false'
|
||||
|
||||
];
|
||||
|
||||
|
||||
return response()->json($data);
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -133,4 +169,17 @@ class ProfileController extends Controller
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
public function changeProfile($id){
|
||||
$user = User::with('detail')
|
||||
->where('nID', $id)
|
||||
->first();
|
||||
return Helper::responseJson(
|
||||
data: [
|
||||
// 'token' => $user->createToken('app')->plainTextToken,
|
||||
'user' => UserProfileResource::make($user),
|
||||
],
|
||||
message: 'Selamat Datang'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
use Modules\Linksehat\Http\Controllers\Api\AppointmentController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\AuthController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\DashboardController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\AutocompleteController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\DoctorController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\HospitalController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\NotificationTokenController;
|
||||
@@ -10,6 +11,7 @@ use Modules\Linksehat\Http\Controllers\Api\PersonController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\ProfileController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\SearchController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\SpecialityController;
|
||||
use Modules\Linksehat\Http\Controllers\Api\LinkingController;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
@@ -35,7 +37,11 @@ Route::prefix('linksehat')->group(function () {
|
||||
Route::post('otp-request', 'otpRequest');
|
||||
Route::post('mock-otp', 'mockOtp');
|
||||
Route::post('login', 'login');
|
||||
Route::post('logout', 'logout');
|
||||
Route::post('login-phone', 'loginPhone');
|
||||
Route::post('register', 'register');
|
||||
Route::post('forget-password', 'forgetPassword');
|
||||
Route::post('reset-password', 'resetPassword');
|
||||
Route::get('social-login/{provider}', 'redirectSocialLogin');
|
||||
Route::get('social-login/{provider}/callback', 'handleSocialLoginCallback');
|
||||
});
|
||||
@@ -59,11 +65,22 @@ Route::prefix('linksehat')->group(function () {
|
||||
|
||||
|
||||
Route::middleware('auth:sanctum')->group(function () {
|
||||
Route::get('profile', [ProfileController::class, 'index'])->name('profile');
|
||||
Route::get('profile/{id}', [ProfileController::class, 'index'])->name('profile');
|
||||
Route::get('change-profile/{id}', [ProfileController::class, 'changeProfile'])->name('change-profile');
|
||||
Route::post('profile', [ProfileController::class, 'update'])->name('profile.update');
|
||||
Route::post('notification-tokens/delete/{id}', [NotificationTokenController::class, 'destroy'])->name('profile.delete.token');
|
||||
Route::post('notification-tokens', [NotificationTokenController::class, 'store'])->name('profile.store.token');
|
||||
Route::apiResource('appointment', AppointmentController::class);
|
||||
Route::apiResource('families', PersonController::class)->except(['destroy']);
|
||||
|
||||
Route::get('autocomplete/marital_status', [AutocompleteController::class, 'maritalStatus']);
|
||||
Route::get('autocomplete/blood_type', [AutocompleteController::class, 'bloodType']);
|
||||
Route::get('autocomplete/relationship', [AutocompleteController::class, 'relationship']);
|
||||
Route::get('autocomplete/corporate', [AutocompleteController::class, 'corporate']);
|
||||
|
||||
Route::post('manual-linking', [LinkingController::class, 'linkingValidate']);
|
||||
|
||||
Route::get('card/{member_id}', [LinkingController::class, 'card']);
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
90
Modules/Linksehat/Transformers/User/ShowProfileResource.php
Normal file
90
Modules/Linksehat/Transformers/User/ShowProfileResource.php
Normal file
@@ -0,0 +1,90 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Linksehat\Transformers\User;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use App\Models\OLDLMS\User;
|
||||
use App\Models\OLDLMS\UserDetail;
|
||||
use App\Models\OLDLMS\UserInsurance;
|
||||
use DB;
|
||||
|
||||
|
||||
class ShowProfileResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
|
||||
protected $connection = 'oldlms';
|
||||
|
||||
public function toArray($request)
|
||||
{
|
||||
|
||||
// Principal
|
||||
if ($this->detail){
|
||||
switch ($this->detail->nIDGolonganDarah) {
|
||||
case 1:
|
||||
$goldar = 'A';
|
||||
break;
|
||||
case 2:
|
||||
$goldar = 'B';
|
||||
break;
|
||||
case 3:
|
||||
$goldar = 'AB';
|
||||
break;
|
||||
case 4:
|
||||
$goldar = 'O';
|
||||
break;
|
||||
|
||||
default:
|
||||
$goldar = '-';
|
||||
break;
|
||||
}
|
||||
$urlAvatarDefault = $this->detail->nIDJenisKelamin == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/female-avatar.png';
|
||||
// Marital Status
|
||||
$maritalStatus = DB::connection('oldlms')->table('tm_status_pernikahan')->where('nID', $this->detail->sMartialStatus)->first('sStatusPernikahan');
|
||||
|
||||
// Hubungan Keluarga
|
||||
$relationship = DB::connection('oldlms')->table('tm_hubungan_keluarga')->where('nID', $this->nIDHubunganKeluarga)->first('sHubunganKeluarga');
|
||||
// dd( $this->detail->nIDGolonganDarah);
|
||||
$sWeight = $this->detail->sWeight ? $this->detail->sWeight : 0;
|
||||
$sHeight = $this->detail->sHeight ? $this->detail->sHeight : 0;
|
||||
$nIDJenisKelamin = $this->detail->nIDJenisKelamin == 1 ? 'Male' : 'Female';
|
||||
} else {
|
||||
$urlAvatarDefault = 'https://linksehat.dev/assets/img/users/male-avatar.png';
|
||||
$goldar = '-';
|
||||
$relationship = false;
|
||||
$maritalStatus = false;
|
||||
$sWeight = 0;
|
||||
$sHeight = 0;
|
||||
$nIDJenisKelamin = false;
|
||||
}
|
||||
$avatar = $this->detail->sImage ?? $urlAvatarDefault;
|
||||
|
||||
|
||||
$userInsurance = UserInsurance::where('nIDUser', $this->nID)->get()->first();
|
||||
$memberId = Null;
|
||||
if($userInsurance){
|
||||
$memberId = $userInsurance->sNoPolis;
|
||||
}
|
||||
return [
|
||||
'id' => $this->nID,
|
||||
'first_name' => $this->sFirstName,
|
||||
'last_name' => $this->sLastName,
|
||||
'date_of_birth' => $this->detail ? $this->detail->dTanggalLahir : null,
|
||||
'avatar' => $avatar,
|
||||
'gender' => $nIDJenisKelamin ? $nIDJenisKelamin : '-',
|
||||
'phone' => $this->sPhone,
|
||||
'email' => $this->sEmail,
|
||||
'blood_type' => $goldar,
|
||||
'marital_status' => $maritalStatus ? $maritalStatus->sStatusPernikahan : '-',
|
||||
'relationship' => $relationship ? $relationship->sHubunganKeluarga : '-',
|
||||
'weight' => $sWeight,
|
||||
'height' => $sHeight,
|
||||
'member_id' => $memberId,
|
||||
];
|
||||
}
|
||||
}
|
||||
174
Modules/Linksehat/Transformers/User/UserProfileResource.php
Normal file
174
Modules/Linksehat/Transformers/User/UserProfileResource.php
Normal file
@@ -0,0 +1,174 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Linksehat\Transformers\User;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use App\Models\OLDLMS\User;
|
||||
use App\Models\OLDLMS\UserDetail;
|
||||
use App\Models\OLDLMS\UserInsurance;
|
||||
use App\Models\Member;
|
||||
use App\Models\Person;
|
||||
use App\Models\CorporateEmployee;
|
||||
use App\Models\Corporate;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
use DB;
|
||||
|
||||
|
||||
class UserProfileResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
|
||||
protected $connection = 'oldlms';
|
||||
|
||||
public function toArray($request)
|
||||
{
|
||||
$memberProfile = User::with('detail')->where('nIDUser', $this->nID)->get()->toArray();
|
||||
$dataMemberProfile = [];
|
||||
|
||||
$userInsurance = UserInsurance::where('nIDUser', $this->nID)->get()->first();
|
||||
$memberId = null;
|
||||
$linking = false;
|
||||
if($userInsurance){
|
||||
$memberId = $userInsurance->sNoPolis;
|
||||
$linking = true;
|
||||
} else {
|
||||
$member = Member::where('email', $this->sEmail)->get()->first();
|
||||
$person = Person::where('phone', $this->sPhone)->get()->first();
|
||||
if ($member || $person){ // Autolinking
|
||||
$corporateEmployee = CorporateEmployee::where('member_id', $member->id)->get()->first(); // cek corporate id empolyee/member
|
||||
if ($corporateEmployee){
|
||||
$corporate = Corporate::findOrFail($corporateEmployee->corporate_id)->automatic_linking; // cek autocomplete
|
||||
if ($corporate){
|
||||
if($member) {
|
||||
// Insert into database linksehat
|
||||
$insurance = UserInsurance::updateOrCreate(
|
||||
[
|
||||
'nIDUser' => $this->nID,
|
||||
],
|
||||
[
|
||||
'nIDUser' => $this->nID,
|
||||
'nIDInsurance' => $_ENV['LINKSEHAT_ASO_INSURANCE_ID'],
|
||||
'sNoPolis' => $member->member_id,
|
||||
'sNamaPeserta' => $member->fullName,
|
||||
'sKartuPeserta' => '',
|
||||
'sLayanan' => 'RJ,TC',
|
||||
'dStartDate' => $member->members_effective_date,
|
||||
'dExpireDate' => $member->members_expire_date,
|
||||
'dTanggalLahir' => $member->birth_date,
|
||||
'nNoKTP' => $member->nric != '' ? $member->nric : 0 ,
|
||||
'sIsConfrimed' => 1,
|
||||
'sStatus' => 1,
|
||||
]);
|
||||
$message = $member->currentPolicy->corporate->welcome_message;
|
||||
$linking = true;
|
||||
|
||||
$memberId = $member->member_id;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if (count($memberProfile) > 0){
|
||||
|
||||
$urlAvatarDefault = $this->detail->nIDJenisKelamin == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/female-avatar.png';
|
||||
$avatarMember = $this->detail->sImage ?? $urlAvatarDefault;
|
||||
$relationship = DB::connection('oldlms')->table('tm_hubungan_keluarga')->where('nID', $this->nIDHubunganKeluarga)->first('sHubunganKeluarga');
|
||||
|
||||
$dataUser = [
|
||||
'id' => $this->nID,
|
||||
'name' => $this->sFirstName . ' ' . $this->sLastName,
|
||||
'relationship' => $relationship ? $relationship->sHubunganKeluarga : '-',
|
||||
'avatar' => $avatarMember
|
||||
];
|
||||
|
||||
array_push($dataMemberProfile, $dataUser);
|
||||
|
||||
foreach($memberProfile as $m){
|
||||
$urlAvatarDefault = $m['detail']['nIDJenisKelamin'] == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/female-avatar.png';
|
||||
$avatarMember = $m['detail']['sImage'] ?? $urlAvatarDefault;
|
||||
$relationship = DB::connection('oldlms')->table('tm_hubungan_keluarga')->where('nID', $m['nIDHubunganKeluarga'])->first('sHubunganKeluarga');
|
||||
|
||||
$data = [
|
||||
'id' => $m['nID'],
|
||||
'name' => $m['full_name'],
|
||||
'relationship' => $relationship ? $relationship->sHubunganKeluarga : '-',
|
||||
'avatar' => $avatarMember,
|
||||
];
|
||||
|
||||
array_push( $dataMemberProfile, $data);
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
$nID = $this->nIDUser ? $this->nIDUser : $this->nID;
|
||||
if ($nID){
|
||||
$memberProfile = User::with('detail')->where('nIDUser', $nID)->get()->toArray();
|
||||
|
||||
$dataMember = User::with('detail')->where('nID', $nID)->get()->first();
|
||||
|
||||
if ($this->detail){
|
||||
$urlAvatarDefault = $this->detail->nIDJenisKelamin == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/female-avatar.png';
|
||||
} else {
|
||||
$urlAvatarDefault = 'https://linksehat.dev/assets/img/users/male-avatar.png';
|
||||
}
|
||||
$avatar = $this->detail->sImage ?? $urlAvatarDefault;
|
||||
|
||||
$avatarMember = $dataMember->detail->sImage ?? $urlAvatarDefault;
|
||||
$relationship = DB::connection('oldlms')->table('tm_hubungan_keluarga')->where('nID', $this->nIDHubunganKeluarga)->first('sHubunganKeluarga');
|
||||
|
||||
$dataUser = [
|
||||
'id' => $dataMember->nID,
|
||||
'name' => $dataMember->sFirstName . ' ' . $dataMember->sLastName,
|
||||
'relationship' => 'Me',
|
||||
'avatar' => $avatarMember
|
||||
];
|
||||
array_push($dataMemberProfile, $dataUser);
|
||||
|
||||
if (count($memberProfile) > 0){
|
||||
foreach($memberProfile as $m){
|
||||
$urlAvatarDefault = $m['detail']['nIDJenisKelamin'] == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/female-avatar.png';
|
||||
$avatarMember = $m['detail']['sImage'] ?? $urlAvatarDefault;
|
||||
$relationship = DB::connection('oldlms')->table('tm_hubungan_keluarga')->where('nID', $m['nIDHubunganKeluarga'])->first('sHubunganKeluarga');
|
||||
|
||||
$data = [
|
||||
'id' => $m['nID'],
|
||||
'name' => $m['full_name'],
|
||||
'relationship' => $relationship->sHubunganKeluarga,
|
||||
'avatar' => $avatarMember,
|
||||
];
|
||||
|
||||
array_push( $dataMemberProfile, $data);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Principal
|
||||
if ($this->detail){
|
||||
$urlAvatarDefault = $this->detail->nIDJenisKelamin == 1 ? 'https://linksehat.dev/assets/img/users/male-avatar.png' : 'https://linksehat.dev/assets/img/users/female-avatar.png';
|
||||
} else {
|
||||
$urlAvatarDefault = 'https://linksehat.dev/assets/img/users/male-avatar.png';
|
||||
}
|
||||
$avatar = $this->detail->sImage ?? $urlAvatarDefault;
|
||||
|
||||
|
||||
return [
|
||||
'id' => $this->nID,
|
||||
'full_name' => $this->sFirstName . ' '. $this->sLastName,
|
||||
'avatar' => $avatar,
|
||||
'member_type' => $this->nIDUser ? 'Dependent' : 'Principal',
|
||||
'member_profile' => $dataMemberProfile,
|
||||
'member_id' => $memberId,
|
||||
'linking' => $linking,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Linksehat\Transformers;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class UserProfileResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'email' => $this->email,
|
||||
'phone' => $this->phone,
|
||||
'email_verified_at' => $this->email_verified_at,
|
||||
'nik' => $this->person->nik ?? null,
|
||||
'name_prefix' => $this->person->name_prefix ?? null,
|
||||
'name' => $this->person->name ?? null,
|
||||
'name_suffix' => $this->person->name_suffix ?? null,
|
||||
'full_name' => $this->person->full_name ?? null,
|
||||
'gender' => $this->person->gender ?? null,
|
||||
'birth_date' => $this->person->birth_date ?? null,
|
||||
'age' => $this->person->age ?? null,
|
||||
'is_deceased' => $this->person->is_deceased ?? null,
|
||||
'deceased_at' => $this->person->deceased_at ?? null,
|
||||
'marital_status' => $this->person->marital_status ?? null,
|
||||
'preferred_lang' => $this->meta->preferred_lang ?? 'id',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -24,9 +24,24 @@ class MemberBuilder extends Builder
|
||||
|
||||
public function joinCorporateEmployees(string $value = 'join'): static
|
||||
{
|
||||
// return match ($value) {
|
||||
// 'join' => $this->join('corporate_employees', 'members.id', '=', 'corporate_employees.member_id'),
|
||||
// 'left' => $this->leftJoin('corporate_employees', 'members.id', '=', 'corporate_employees.member_id')
|
||||
// };
|
||||
|
||||
return match ($value) {
|
||||
'join' => $this->join('corporate_employees', 'members.id', '=', 'corporate_employees.member_id'),
|
||||
'left' => $this->leftJoin('corporate_employees', 'members.id', '=', 'corporate_employees.member_id')
|
||||
'join' => $this->join('corporate_employees', function ($join) {
|
||||
$join->on('members.id', '=', 'corporate_employees.member_id')
|
||||
->orWhere('members.principal_id', '=', 'corporate_employees.member_id');
|
||||
}),
|
||||
'left' => $this->leftJoin('corporate_employees', function ($join) {
|
||||
$join->on('members.id', '=', 'corporate_employees.member_id')
|
||||
->orWhere('members.principal_id', '=', 'corporate_employees.member_id');
|
||||
}),
|
||||
'right' => $this->rightJoin('corporate_employees', function ($join) {
|
||||
$join->on('members.id', '=', 'corporate_employees.member_id')
|
||||
->orWhere('members.principal_id', '=', 'corporate_employees.member_id');
|
||||
})
|
||||
};
|
||||
}
|
||||
|
||||
@@ -40,11 +55,31 @@ class MemberBuilder extends Builder
|
||||
|
||||
public function joinClaimRequests(string $value = 'join'): static
|
||||
{
|
||||
// return match ($value) {
|
||||
// 'join' => $this->join('claim_requests', 'members.id', '=', 'claim_requests.member_id'),
|
||||
// 'left' => $this->leftJoin('claim_requests', 'members.id', '=', 'claim_requests.member_id'),
|
||||
// // 'right' => $this->rightJoin('claim_requests', 'members.id', '=', 'claim_requests.member_id')
|
||||
// 'right' => $this->rightJoin('claim_requests', function ($join) {
|
||||
// $join->on('members.id', '=', 'claim_requests.member_id')
|
||||
// ->orWhere('members.principal_id', '=', 'claim_requests.member_id');
|
||||
// })
|
||||
// };
|
||||
|
||||
return match ($value) {
|
||||
'join' => $this->join('claim_requests', 'members.id', '=', 'claim_requests.member_id'),
|
||||
'left' => $this->leftJoin('claim_requests', 'members.id', '=', 'claim_requests.member_id'),
|
||||
'right' => $this->rightJoin('claim_requests', 'members.id', '=', 'claim_requests.member_id')
|
||||
'join' => $this->join('claim_requests', function ($join) {
|
||||
$join->on('members.id', '=', 'claim_requests.member_id')
|
||||
->orWhere('members.principal_id', '=', 'claim_requests.member_id');
|
||||
}),
|
||||
'left' => $this->leftJoin('claim_requests', function ($join) {
|
||||
$join->on('members.id', '=', 'claim_requests.member_id')
|
||||
->orWhere('members.principal_id', '=', 'claim_requests.member_id');
|
||||
}),
|
||||
'right' => $this->rightJoin('claim_requests', function ($join) {
|
||||
$join->on('members.id', '=', 'claim_requests.member_id')
|
||||
->orWhere('members.principal_id', '=', 'claim_requests.member_id');
|
||||
})
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
public function joinMemberPlans(string $value = 'join'): static
|
||||
|
||||
@@ -6,11 +6,16 @@ use Carbon\Carbon;
|
||||
use Carbon\CarbonPeriod;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use PHPMailer\PHPMailer\PHPMailer;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Models\Member;
|
||||
use App\Models\Service;
|
||||
|
||||
class Helper
|
||||
{
|
||||
public static function genderNormalization($anyGenderCode)
|
||||
public static function genderNormalization($anyGenderCode = '-')
|
||||
{
|
||||
|
||||
if ($anyGenderCode == 'M') {
|
||||
return 'male';
|
||||
} else if ($anyGenderCode == 'F') {
|
||||
@@ -20,7 +25,20 @@ class Helper
|
||||
} else if ($anyGenderCode == 'U') {
|
||||
return 'unknown';
|
||||
} else {
|
||||
return null;
|
||||
return '-';
|
||||
}
|
||||
}
|
||||
|
||||
public static function maritalNormalization($code)
|
||||
{
|
||||
if ($code == 'M') {
|
||||
return 'Married';
|
||||
} else if ($code == 'D') {
|
||||
return 'Divorced';
|
||||
} else if ($code == 'S') {
|
||||
return 'Single';
|
||||
} else {
|
||||
return '-';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,10 +53,48 @@ class Helper
|
||||
} else if ($anyGenderCode == 'U') {
|
||||
return 'unknown';
|
||||
} else {
|
||||
return null;
|
||||
return '-';
|
||||
}
|
||||
}
|
||||
|
||||
public static function memberType($code)
|
||||
{
|
||||
if ($code == 'P') {
|
||||
return 'Principal';
|
||||
} else if ($code == 'D') {
|
||||
return 'Dependent';
|
||||
} else {
|
||||
'-';
|
||||
}
|
||||
}
|
||||
|
||||
public static function relationWithPrincipal($code)
|
||||
{
|
||||
if ($code == 'H') {
|
||||
return 'Husbund';
|
||||
} else if ($code == 'W') {
|
||||
return 'Wife';
|
||||
} else if ($code == 'S') {
|
||||
return 'Son';
|
||||
} else if ($code == 'D') {
|
||||
return 'Daughter';
|
||||
} else {
|
||||
'-';
|
||||
}
|
||||
}
|
||||
|
||||
public static function principalName($code)
|
||||
{
|
||||
$principalName = Member::where('member_id', $code)->get()->first();
|
||||
return $principalName->name;
|
||||
}
|
||||
|
||||
public static function serviceName($code)
|
||||
{
|
||||
$serviceName = Service::where('code', $code)->get()->first();
|
||||
return $serviceName->name;
|
||||
}
|
||||
|
||||
public static function paginateResources($resource)
|
||||
{
|
||||
return [
|
||||
@@ -184,4 +240,161 @@ class Helper
|
||||
'data' => $data,
|
||||
], $statusCode);
|
||||
}
|
||||
|
||||
public static function validatePhoneNumber($phoneNumber)
|
||||
{
|
||||
// Menghapus semua karakter selain angka dan +
|
||||
$cleanedNumber = preg_replace('/[^0-9+]/', '', $phoneNumber);
|
||||
|
||||
// Memeriksa apakah nomor telepon hanya terdiri dari angka dan +
|
||||
if ($cleanedNumber == $phoneNumber) {
|
||||
// Nomor telepon valid
|
||||
return true;
|
||||
} else {
|
||||
// Nomor telepon tidak valid
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static function formatRupiah($angka)
|
||||
{
|
||||
return "Rp " . number_format($angka, 0, ',', '.');
|
||||
}
|
||||
|
||||
public static function sPaymentMethod($id)
|
||||
{
|
||||
$sPaymentMethod = [
|
||||
1 => 'Pribadi',
|
||||
2 => 'On-Site Payment',
|
||||
3 => 'OVO',
|
||||
4 => 'Asuransi',
|
||||
5 => 'Voucher',
|
||||
6 => 'ASO'
|
||||
];
|
||||
|
||||
return $sPaymentMethod[$id];
|
||||
}
|
||||
|
||||
public static function formatDateDB($date)
|
||||
{
|
||||
$convertedDate = Carbon::createFromFormat('d-m-Y', $date)->format('Y-m-d H:i:s');
|
||||
return $convertedDate;
|
||||
}
|
||||
|
||||
|
||||
public static function formatDateOnly($date)
|
||||
{
|
||||
// Membuat objek Carbon dengan tanggal asli dan zona waktu UTC
|
||||
$carbonDate = Carbon::createFromFormat('Y-m-d\TH:i:s.u\Z', $date, 'UTC');
|
||||
|
||||
// Mengonversi tanggal ke zona waktu yang diinginkan
|
||||
$carbonDate->setTimezone('Asia/Jakarta');
|
||||
|
||||
$convertedDate = $carbonDate->toDateString();
|
||||
return $convertedDate;
|
||||
}
|
||||
|
||||
public static function formatTimeOnly($date)
|
||||
{
|
||||
// Membuat objek Carbon dengan tanggal asli dan zona waktu UTC
|
||||
$carbonDate = Carbon::createFromFormat('Y-m-d\TH:i:s.u\Z', $date, 'UTC');
|
||||
|
||||
// Mengonversi tanggal ke zona waktu yang diinginkan
|
||||
$carbonDate->setTimezone('Asia/Jakarta');
|
||||
|
||||
$convertedDate = $carbonDate->toTimeString();
|
||||
return $convertedDate;
|
||||
}
|
||||
|
||||
public static function insertNotification($data = array())
|
||||
{
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
DB::table('notifications')->insert($data);
|
||||
DB::commit();
|
||||
return true;
|
||||
} catch (\Exception $e) {
|
||||
DB::rollback();
|
||||
return $e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
public static function sendEmail($data = array())
|
||||
{
|
||||
// Buat instance PHPMailer
|
||||
$mail = new PHPMailer(true);
|
||||
try {
|
||||
// Server settings
|
||||
$mail->isSMTP();
|
||||
$mail->Host = 'smtp.gmail.com';
|
||||
$mail->SMTPAuth = true;
|
||||
$mail->Username = env('EMAIL');
|
||||
$mail->Password = env('PW_EMAIL');
|
||||
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
|
||||
$mail->Port = 465;
|
||||
$mail->SMTPSecure = "ssl";
|
||||
|
||||
// Penerima email
|
||||
$mail->setFrom(env('EMAIL'), env('NAME_EMAIL'));
|
||||
$mail->addAddress($data['email'], $data['name']);
|
||||
|
||||
// Konten email
|
||||
$mail->isHTML(true);
|
||||
$mail->Subject = $data['subject'];
|
||||
$mail->Body = $data['body'];
|
||||
|
||||
// Kirim email
|
||||
$mail->send();
|
||||
return true;
|
||||
} catch (\Exception $e) {
|
||||
dd($e);
|
||||
return ($mail->ErrorInfo);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static function sendEmailattachData($data = array())
|
||||
{
|
||||
// Buat instance PHPMailer
|
||||
$mail = new PHPMailer(true);
|
||||
try {
|
||||
// Server settings
|
||||
$mail->isSMTP();
|
||||
$mail->Host = 'smtp.gmail.com';
|
||||
$mail->SMTPAuth = true;
|
||||
$mail->Username = env('EMAIL');
|
||||
$mail->Password = env('PW_EMAIL');
|
||||
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
|
||||
$mail->Port = 465;
|
||||
$mail->SMTPSecure = "ssl";
|
||||
|
||||
// Penerima email
|
||||
$mail->setFrom(env('EMAIL'), env('NAME_EMAIL'));
|
||||
$mail->addAddress($data['email'], $data['name']);
|
||||
|
||||
// Konten email
|
||||
$mail->isHTML(true);
|
||||
$mail->Subject = $data['subject'];
|
||||
$mail->Body = $data['body'];
|
||||
$mail->addAttachment($data['attach'], 'e-card.pdf');
|
||||
|
||||
// Kirim email
|
||||
$mail->send();
|
||||
return true;
|
||||
} catch (\Exception $e) {
|
||||
dd($mail->ErrorInfo);
|
||||
return ($mail->ErrorInfo);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static function setCustomPHPIniSettings()
|
||||
{
|
||||
ini_set('max_execution_time', '-1'); // Waktu untuk execution suatu function atau script
|
||||
ini_set('post_max_size', '32M'); // Batas post Yang di Upload
|
||||
ini_set('upload_max_filesize', '10M'); // Batas File yang di Upload
|
||||
ini_set('max_input_time ', '-1'); // Batas max time menunggu input max 5 menit
|
||||
ini_set('memory_limit', '256M');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -261,6 +261,27 @@ class MembershipController extends Controller
|
||||
return Helper::responseJson(data: MemberResource::make($member));
|
||||
}
|
||||
|
||||
public function automaticLinking(Request $request)
|
||||
{
|
||||
$member = Member::query()
|
||||
->when(in_array('email', $linkingRulesArr), function($q) use ($request) {
|
||||
$q->where('email', $request->email);
|
||||
})
|
||||
->with([
|
||||
'memberPlans' => function ($memberPlan) {
|
||||
$memberPlan->latest();
|
||||
},
|
||||
])
|
||||
|
||||
->first();
|
||||
|
||||
if ($member) {
|
||||
$message = $member->currentPolicy->corporate->welcome_message;
|
||||
return Helper::responseJson(data: MemberResource::make($member), message: $message);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function removeInsurance($email)
|
||||
{
|
||||
$user = User::where('sEmail', $email)->firstOrFail();
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Auth\Middleware\Authenticate as Middleware;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class Authenticate extends Middleware
|
||||
{
|
||||
@@ -18,4 +20,13 @@ class Authenticate extends Middleware
|
||||
return route('login');
|
||||
}
|
||||
}
|
||||
|
||||
public function handle($request, Closure $next, ...$guards)
|
||||
{
|
||||
if (Auth::guard('sanctum')->guest()) {
|
||||
return response()->json(['error' => 'Bearer Authorization is required'], 401);
|
||||
}
|
||||
|
||||
return parent::handle($request, $next, ...$guards);
|
||||
}
|
||||
}
|
||||
|
||||
32
app/Http/Resources/MemberListResource.php
Normal file
32
app/Http/Resources/MemberListResource.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class MemberListResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
$data = parent::toArray($request);
|
||||
$data['claim_grouped_by_status'] = $this->claims->groupBy('status');
|
||||
$data['total_claims'] = [
|
||||
'draft' => count($data['claim_grouped_by_status']['draft'] ?? []),
|
||||
'requested' => count($data['claim_grouped_by_status']['requested'] ?? []),
|
||||
'received' => count($data['claim_grouped_by_status']['received'] ?? []),
|
||||
'approved' => count($data['claim_grouped_by_status']['approved'] ?? []),
|
||||
'paid' => count($data['claim_grouped_by_status']['paid'] ?? []),
|
||||
'declined' => count($data['claim_grouped_by_status']['declined'] ?? [])
|
||||
];
|
||||
|
||||
// $data = ['fuck' => 'you'];
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
@@ -3,8 +3,10 @@
|
||||
namespace App\Http\Resources\OLDLMS;
|
||||
|
||||
use App\Services\ClaimService;
|
||||
use App\Models\Corporate;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
|
||||
class MemberResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
@@ -17,29 +19,21 @@ class MemberResource extends JsonResource
|
||||
{
|
||||
// $data = parent::toArray($request);
|
||||
$currentMemberPlan = $this->memberPlans?->first();
|
||||
$limitTelecon = $currentMemberPlan->plan->limit_telecon ?? null;
|
||||
$limitTelecon = $this->totalUsage >= 6 ? null : $limitTelecon;
|
||||
|
||||
$data = [
|
||||
'id' => $this->id,
|
||||
'member_name' => $this->full_name,
|
||||
'member_id' => $this->member_id,
|
||||
'birth_date' => $this->birth_date,
|
||||
'email' => $this->email,
|
||||
'phone' => $this->person->phone ?? null,
|
||||
'full_name' => $this->full_name,
|
||||
'nric' => $this->nric,
|
||||
'plan' => $currentMemberPlan ? [
|
||||
'code' => $currentMemberPlan->plan->code ?? null,
|
||||
'start' => $currentMemberPlan->start,
|
||||
'end' => $currentMemberPlan->end,
|
||||
'limit' => $this->currentPlan->limit_rules
|
||||
] : null,
|
||||
'policy_code' => $this->currentPolicy?->code ?? null,
|
||||
'corporate' => [
|
||||
'code' => $this->currentPolicy?->corporate->code ?? null,
|
||||
'name' => $this->currentPolicy?->corporate->name,
|
||||
'welcome_message' => $this->currentPolicy?->corporate->welcome_message,
|
||||
'help_text' => $this->currentPolicy?->corporate?->help_text,
|
||||
'avatar_url' => $this->currentpolicy?->corporate?->avatar_url
|
||||
],
|
||||
'limit_usage' => $this->totalUsage ?? null
|
||||
'policy_holder' => $this->currentPolicy->corporate->name,
|
||||
'policy_number' => $this->currentPolicy->code ?? null,
|
||||
'date_of_birth' => $this->birth_date,
|
||||
'gender' => $this->gender,
|
||||
'start_date' => $this->members_effective_date,
|
||||
'corporate_logo' => $_ENV['LMS_APP_STORAGE'] . $this->corporateLogo,
|
||||
'valid_until' => $this->members_expire_date,
|
||||
|
||||
];
|
||||
return $data;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user