Compare commits

...

482 Commits

Author SHA1 Message Date
shancheas 064112e731 feat: add clear couch transaction API 2025-04-14 12:06:05 +07:00
shancheas d6a238a224 fix: time not null when save queue 2025-04-03 22:11:19 +07:00
shancheas dc5e938f75 feat: add configuration to show estimation queue time 2025-04-03 21:54:35 +07:00
shancheas eb4da7ccc4 temp: remove multiple admin login validation from queue admin 2025-04-03 21:54:04 +07:00
shancheas 46caaba6bd fix: add error log to whatsapp service 2025-01-30 07:01:52 +07:00
shancheas 7953c7dbbd fix: validate display uuid
continuous-integration/drone/push Build is passing Details
2025-01-23 22:15:26 +07:00
shancheas 6911f6f0a2 fix: don't send whatsapp notification when phone is null
continuous-integration/drone/push Build is passing Details
2025-01-23 22:11:15 +07:00
shancheas 762340a72b fix: throw error when display id is undefined
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2025-01-23 21:49:33 +07:00
shancheas 61cbbf81ef feat: add text to speech api
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2025-01-16 12:12:26 +07:00
shancheas 4ea53f7088 fix: average time from float to bigint
continuous-integration/drone/push Build is passing Details
2025-01-15 10:49:56 +07:00
shancheas 0548141e5f fix: add optional id when map transaction
continuous-integration/drone/push Build is passing Details
2025-01-13 17:19:50 +07:00
shancheas 29e4dc5400 fix: code not generate because vip pass
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2025-01-13 14:10:32 +07:00
shancheas f9d8f85179 fix: moment js when generate
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2025-01-13 13:31:19 +07:00
shancheas 769e8174f4 fix: don't create queue from POS
continuous-integration/drone/push Build is passing Details
2025-01-13 12:59:30 +07:00
shancheas 3ace59c450 feat: create queue using API
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2025-01-13 12:42:57 +07:00
shancheas 187555a543 fix: play estimation to numeric
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2025-01-03 17:40:21 +07:00
shancheas 551bd12f5b fix: call time stop when time is more than estimation
continuous-integration/drone/push Build is passing Details
2024-12-25 04:57:28 +07:00
shancheas 1692c8234a fix: error when send to null phone number
continuous-integration/drone/push Build is passing Details
2024-12-25 04:26:12 +07:00
shancheas 903b7cfd18 fix: whatsapp notification not show
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-12-22 09:33:22 +07:00
shancheas 26a6af2044 fix: register queue still sen notification
continuous-integration/drone/push Build is passing Details
2024-12-22 05:42:28 +07:00
shancheas d7ed77934d temp: remove log
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-12-21 05:26:16 +07:00
shancheas 66720c5b8b feat: implement requiring call notification 2024-12-21 05:20:25 +07:00
shancheas 44e74de315 feat: whatsapp notification
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-12-21 04:01:54 +07:00
shancheas 82e7879969 feat: add configuration for whatsapp service 2024-12-21 03:56:13 +07:00
shancheas d612b6725a fix: login by new transaction receipt id
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-12-17 19:27:07 +07:00
shancheas 54b9658075 fix: show queue only same day 2024-12-17 19:26:22 +07:00
shancheas 661dbb8cf2 fix: add peak level
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-12-10 15:55:27 +07:00
shancheas 6dc6579450 feat: add item id
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is failing Details
2024-12-10 14:19:24 +07:00
shancheas e3db958e0d fix: error ticket not found when split queue
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is failing Details
2024-12-10 14:00:38 +07:00
shancheas d73752252a feat: peak level base on configuration
continuous-integration/drone/push Build is passing Details
2024-12-10 13:51:28 +07:00
shancheas b38c489777 fix: last item queue time
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-12-10 12:27:34 +07:00
shancheas 8cfc003261 feat: add query name filter to items
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-12-10 11:57:33 +07:00
shancheas 55e89426d9 feat(SPG-1078): summary all item queue
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-12-03 14:27:12 +07:00
shancheas 5f6214eeb6 feat: add max peak level and call prepare call time to item queue
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-12-03 11:21:44 +07:00
shancheas d71c2096b8 fix: done queue not update call time 2024-12-03 11:05:03 +07:00
shancheas f661276c58 fix: calculate average time when no queue
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-28 17:18:33 +07:00
shancheas 4a3e77043e fix: parent qty not reduce when split QR
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-28 11:24:31 +07:00
shancheas b4f141e628 feat(SPG-1061): add bundling to queue
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-26 12:40:02 +07:00
shancheas 9db5c4b326 feat: add queue recommendations
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-26 10:31:06 +07:00
shancheas f7e3d5399c fix(SPG-1055): update QR when customer and phone exist
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-22 18:51:22 +07:00
shancheas 7305dfd068 fix(SPG-1060): order queue by time
continuous-integration/drone/push Build is passing Details
2024-11-22 17:27:05 +07:00
shancheas b4bc31463e fix(SPG-1049): add order to queue item
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-22 14:49:42 +07:00
shancheas 83d53847d7 feat: add estimation time
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-22 10:54:51 +07:00
shancheas e09190df42 fix: time empty when no queue
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-21 18:48:49 +07:00
shancheas 61045a39ab fix(SPG-1027): total ticket not match
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-21 18:28:25 +07:00
shancheas 60b5bcf638 fix: time calculation customer
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-21 17:51:45 +07:00
shancheas 4eedca12e7 fix(SPG-1044): validate split QR when phone and username exist
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-21 11:31:29 +07:00
shancheas cb452cf5f3 fix(SPG-1045): send rest qty instead all qty 2024-11-21 11:30:31 +07:00
shancheas ea25e0cae1 fix(SPG-1047): merge item queue with same item 2024-11-21 10:39:20 +07:00
shancheas 5e4401a974 fix: queue time string to number
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-20 18:06:28 +07:00
shancheas c05af5c16b fix: admin queue time
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-20 17:51:47 +07:00
shancheas 5988a592ac fix: merge new order queue
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-20 17:41:29 +07:00
shancheas 1148a72481 fix: total QR header
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-20 17:33:00 +07:00
shancheas 3b7d7ea80b fix: don't merge queue when customer name is empty
continuous-integration/drone/push Build is passing Details
2024-11-20 14:44:19 +07:00
shancheas 3b19484f29 fix(SPG-1030): merge queue when user is exits
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-20 12:50:58 +07:00
shancheas 4dc21c4ebd fix(SPG-1036): remove queue if empty
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-20 11:46:19 +07:00
shancheas 99d0fc8560 fix(SPG-1035): grouping queue information
continuous-integration/drone/push Build is passing Details
2024-11-20 11:38:23 +07:00
shancheas ac3fde14e3 feat: add total_queue_item to summary ticket
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-20 10:40:23 +07:00
shancheas 8d54c686fc fix(SPG-1027): Total QR not same with total ticket 2024-11-20 10:40:00 +07:00
shancheas c0a68db9f1 fix: total activities, now merge by item queue
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-19 13:33:45 +07:00
shancheas 3cf4fbdada fix: exclude privilege from admin queue 2024-11-19 13:33:29 +07:00
shancheas 9eacb7dca5 feat: add done status queue 2024-11-19 13:16:52 +07:00
shancheas eae529bce9 fix: vip pass queue register for 1 queue
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-19 11:13:53 +07:00
shancheas a0de16575f fix: empty queue id in time formula
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-15 13:51:12 +07:00
shancheas 53ef4656eb fix: change queue time formula to manager
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-15 12:37:43 +07:00
shancheas ec916ab574 fix: queue time calculation
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-15 11:16:29 +07:00
shancheas 72827aa83e feat: calculate time queue
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-15 11:05:34 +07:00
shancheas 0e9ae569ba debug: add log time to queue admin
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-15 10:23:06 +07:00
shancheas 37334ecb19 fix: queue admin item not show 2024-11-14 16:10:31 +07:00
shancheas 86c73058fd feat: add information to queue item for display
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-14 15:05:39 +07:00
shancheas fb7f925c78 feat: add session to admin queue 2024-11-14 14:24:56 +07:00
shancheas 2b132c53a8 feat: add average item queue time
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-14 10:06:51 +07:00
shancheas e9535749d4 fix: vip code prefix
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build was killed Details
2024-11-13 18:18:04 +07:00
shancheas 94696e765d fix: request ticket item 2024-11-13 18:17:53 +07:00
shancheas 9805b9903a feat: add pos item ticket
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-13 16:49:05 +07:00
shancheas af9818d44c feat: cancel order, delete queue
continuous-integration/drone/push Build is passing Details
2024-11-13 15:48:54 +07:00
shancheas 2bcd7a34fb feat: create summary ticket function 2024-11-13 15:48:30 +07:00
shancheas 577f8ea9ea feat: login by receipt
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-13 14:30:23 +07:00
shancheas 1878d03c0f feat: vip auto generate queue 2024-11-13 14:30:10 +07:00
shancheas 6807d00cbe fix: add empty user to base 2024-11-13 14:29:35 +07:00
shancheas ad3e3593fd feat: add gate log
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-13 10:00:37 +07:00
shancheas 8e7e43b09d fix: vip from booking generate queue
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-11 16:34:58 +07:00
shancheas 6c53610ec4 feat: vip auto enter queue
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-11 14:43:15 +07:00
shancheas c129a59d47 feat: merge item queue 2024-11-11 14:29:17 +07:00
shancheas d413f1fa7b fix: QR queue and date booking
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-08 15:13:33 +07:00
shancheas bf5914af92 fix: queue bucket item id
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-06 12:01:49 +07:00
shancheas 28c1ab36da fix: summary ticket without order
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-06 11:38:51 +07:00
shancheas 3ed25e1366 fix: admin queue order item
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-06 11:28:54 +07:00
shancheas 4c403293db fix: admin queue order item
continuous-integration/drone/push Build is passing Details
2024-11-06 11:28:02 +07:00
shancheas dac42b754c fix: missing logic
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-06 11:06:14 +07:00
shancheas 5ef7521e9b feat: add queue active summary
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-05 14:43:04 +07:00
shancheas ba7b81c320 feat: add login by invoice code
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-04 16:34:17 +07:00
shancheas 7137b98043 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into development
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-04 15:06:24 +07:00
shancheas 3ddd837622 fix: customer and phone in split queue 2024-11-04 15:06:09 +07:00
firmanr 217362193a Merge pull request 'feat/report-demography' (#113) from feat/report-demography into development
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #113
2024-11-04 07:08:22 +00:00
Firman Ramdhani a3647b536b feat: update report demography
continuous-integration/drone/push Build is passing Details
2024-11-04 14:01:37 +07:00
shancheas 5f46432327 feat: login customer
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-04 12:35:53 +07:00
shancheas 319d9eecef Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into development
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-11-01 13:33:43 +07:00
shancheas 50e7f66bb7 feat: split QR customer 2024-11-01 13:33:25 +07:00
shancheas 492a4ca2ba wip: queue bucket 2024-11-01 13:32:59 +07:00
Supan Adit Pratama 4ed7ecce5e ci: fix filtering
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-10-30 14:38:11 +07:00
Supan Adit Pratama e6787aed89 ci: fix duplicate step name
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build was killed Details
2024-10-30 14:37:42 +07:00
Supan Adit Pratama 1d54b709b6 ci: build k8s only
continuous-integration/drone/push Build encountered an error Details
continuous-integration/drone/tag Build encountered an error Details
2024-10-30 14:37:07 +07:00
Supan Adit Pratama bd32d4fbdd ci: fix depends
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build was killed Details
2024-10-30 14:34:27 +07:00
Supan Adit Pratama 78fb5b7fac ci: update pipeline for kustomize auto
continuous-integration/drone/push Build encountered an error Details
continuous-integration/drone/tag Build encountered an error Details
2024-10-30 14:33:50 +07:00
shancheas dea9989914 fix: queue not generate from POS
continuous-integration/drone/push Build is passing Details
2024-10-30 13:54:09 +07:00
shancheas c8d0b32cc6 feat: add list order queue
continuous-integration/drone/push Build is passing Details
2024-10-29 14:15:37 +07:00
shancheas 93b1208278 refactor: change code to manager
continuous-integration/drone/push Build is passing Details
2024-10-29 10:30:57 +07:00
shancheas 86251f43a2 fix: change register ticket body
continuous-integration/drone/push Build is passing Details
2024-10-28 17:16:41 +07:00
shancheas 9977a7456a feat: item queue id in response ticket
continuous-integration/drone/push Build is passing Details
2024-10-28 16:03:13 +07:00
shancheas 487f59ae93 feat: add register queue
continuous-integration/drone/push Build is passing Details
2024-10-28 15:09:27 +07:00
shancheas e9de46fff8 fix: change response queue to pagination
continuous-integration/drone/push Build is passing Details
2024-10-25 16:11:43 +07:00
shancheas 5b507a1c3c feat: add queue admin list
continuous-integration/drone/push Build is passing Details
2024-10-25 14:49:56 +07:00
shancheas 143bf76417 fix: ticket item request url
continuous-integration/drone/push Build is passing Details
2024-10-24 16:05:42 +07:00
shancheas ac86289182 feat: add detail item ticket
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-10-24 13:25:56 +07:00
shancheas 32d4064f0a feat: add detail queue item
continuous-integration/drone/push Build is passing Details
2024-10-23 17:16:28 +07:00
shancheas 01b2796c26 feat: order tickets
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-10-23 11:56:21 +07:00
shancheas e9d864c922 feat: add login queue customer 2024-10-23 10:30:14 +07:00
shancheas d6c02ac29f fix: on delete queue item
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-10-22 14:36:14 +07:00
shancheas 4f0b378ec6 fix: missing transaction handler
continuous-integration/drone/push Build encountered an error Details
2024-10-22 13:30:49 +07:00
shancheas efa245048a feat: item queue module
continuous-integration/drone/push Build encountered an error Details
continuous-integration/drone/tag Build is passing Details
2024-10-22 11:47:55 +07:00
shancheas 2d0ccf67f2 WIP: module Queue 2024-10-22 11:47:22 +07:00
shancheas 77cf19c06e fix: unused code 2024-10-22 11:45:44 +07:00
shancheas 77a6afbbbc fix: add video extension
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-10-21 12:59:44 +07:00
irfan fea0420ae4 Merge pull request 'development' (#112) from development into production
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #112
2024-10-19 18:35:05 +00:00
shancheas 3eee8d73f4 fix: recap transaction
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-10-20 01:33:31 +07:00
shancheas 07d2ec3b46 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into development
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-10-17 15:28:01 +07:00
shancheas 8ba5646bb6 fix: show video url in item and vip pass in vip category 2024-10-17 15:27:43 +07:00
irfan ce1aa86944 Merge pull request 'development' (#111) from development into production
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #111
2024-10-16 15:42:27 +00:00
irfan 4d20955764 Merge pull request 'feat: update filter report' (#110) from feat/update-filter-report into development
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #110
2024-10-16 12:31:48 +00:00
Firman Ramdhani 6a8816aa90 feat: update filter report
continuous-integration/drone/push Build is passing Details
2024-10-16 18:31:55 +07:00
shancheas 8f43907091 feat: add vip pass and video url to item
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-10-16 17:01:47 +07:00
irfan 7afe06e96c Merge pull request 'fix: get tax formula active only' (#109) from development into production
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #109
2024-10-14 19:18:00 +00:00
shancheas c0a0b2316d fix: get tax formula active only
continuous-integration/drone/push Build is passing Details
2024-10-15 02:17:13 +07:00
irfan 95ee8dce8d Merge pull request 'development' (#108) from development into production
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #108
2024-10-09 18:22:03 +00:00
Firman Ramdhani 55ddc9b605 feat(SPG-997): add report vip code
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-10-09 17:59:20 +07:00
Firman Ramdhani e2a6878e71 feat(SPG-997): add report vip code
continuous-integration/drone/push Build is passing Details
2024-10-09 17:48:31 +07:00
Firman Ramdhani f2c409fc35 feat: adjustment default sorting on report income per item and report per item master
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-10-09 15:58:13 +07:00
Firman Ramdhani 7213e7915b feat: adjustment default sorting on report income per item and report per item master
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build was killed Details
2024-10-09 14:57:20 +07:00
Firman Ramdhani 0e65fb8a9a feat(SPG-992): penyesuaian kolom total tunai di report reconcile
continuous-integration/drone/push Build is passing Details
2024-10-09 14:49:22 +07:00
shancheas 6efe5618cb Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into development
continuous-integration/drone/tag Build is passing Details
continuous-integration/drone/push Build is passing Details
2024-10-09 12:49:56 +07:00
shancheas 60167cd807 fix: change bundling item edit from item_id to total_net_price 2024-10-09 12:49:34 +07:00
Firman Ramdhani 0dfaeb2045 feat: add low level order
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-10-08 20:00:09 +07:00
shancheas 18dc15e442 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into development
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-10-08 16:27:20 +07:00
shancheas 198dcb4933 feat: add discount value to vip code 2024-10-08 16:26:40 +07:00
shancheas 901c67137b feat: calculate discount for bundling 2024-10-08 15:40:54 +07:00
Firman Ramdhani 411458fe4c feat: add pos name and pos number at report reconciliation
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-10-07 12:58:31 +07:00
Firman Ramdhani d911f80ff9 feat: add pos name and pos number at report reconciliation
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-10-07 10:40:47 +07:00
irfan 79f3966b49 Merge pull request 'development' (#107) from development into production
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #107
2024-10-06 23:00:03 +00:00
shancheas e6066b534c fix: add capture error when calculate pos formula
continuous-integration/drone/push Build is passing Details
2024-10-07 05:58:45 +07:00
shancheas c5590ab7b1 fix: pos formula calculation
continuous-integration/drone/push Build is passing Details
2024-10-07 05:54:06 +07:00
irfan 1a633cc574 Merge pull request 'development' (#105) from development into production
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #105
2024-10-04 04:12:22 +00:00
firmanr 1348f5a79b Merge pull request 'feat: create report demography' (#106) from feat/report-realtime into development
continuous-integration/drone/push Build is passing Details
Reviewed-on: #106
2024-10-04 03:38:51 +00:00
Firman Ramdhani 90ab3668b4 feat: create report demography
continuous-integration/drone/push Build is passing Details
2024-10-04 10:38:12 +07:00
firmanr 49b98cd56c Merge pull request 'feat: add module report summary' (#104) from feat/report-realtime into development
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #104
2024-10-01 15:05:38 +00:00
Firman Ramdhani d6ae891de4 feat: add module report summary
continuous-integration/drone/push Build is passing Details
2024-10-01 22:03:59 +07:00
irfan 9026f85a66 Merge pull request 'development' (#103) from development into production
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #103
2024-09-29 12:01:23 +00:00
shancheas d40261e919 fix: report query from text to uuid
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-09-29 10:59:55 +07:00
shancheas e1c6b809e4 fix: add cookie when request superset token
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-09-28 12:45:13 +07:00
irfan c47f1e2616 Merge pull request 'feat: add cancel transaction report' (#102) from development into production
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #102
2024-09-27 10:17:42 +00:00
shancheas df0536157a feat: add cancel transaction report
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-09-25 06:40:03 +07:00
irfan 92bf8fc342 Merge pull request 'fix: discount percent calculation' (#101) from development into production
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #101
2024-09-21 18:10:34 +00:00
shancheas 437793a2a1 fix: discount percent calculation
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build was killed Details
2024-09-22 01:09:54 +07:00
irfan 48a48e6e7a Merge pull request 'development' (#100) from development into production
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #100
2024-09-21 16:08:58 +00:00
shancheas 22f4e732db fix: transaction NaN without discount
continuous-integration/drone/push Build is passing Details
2024-09-21 23:04:59 +07:00
shancheas 34ae5964c4 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into development
continuous-integration/drone/push Build is passing Details
2024-09-21 07:24:34 +07:00
shancheas f2fef65f20 fix: change total price to net price 2024-09-21 07:24:16 +07:00
firmanr 039531de3b Merge pull request 'feat: move tipe item' (#99) from feat/adjustment-report into development
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #99
2024-09-20 12:01:57 +00:00
Firman Ramdhani 0b8bb72392 feat: move tipe item
continuous-integration/drone/push Build is passing Details
2024-09-20 19:01:18 +07:00
firmanr 256c8f38bd Merge pull request 'feat: update report' (#98) from feat/adjustment-report into development
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #98
2024-09-20 11:36:16 +00:00
Firman Ramdhani 109898b076 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into feat/adjustment-report
continuous-integration/drone/push Build is passing Details
2024-09-20 18:34:58 +07:00
shancheas b2be2e0160 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into development
continuous-integration/drone/push Build is passing Details
2024-09-20 18:33:11 +07:00
shancheas b4266d5d68 fix: add discount to calculator 2024-09-20 18:32:52 +07:00
Firman Ramdhani f23a9f3510 feat: update report
continuous-integration/drone/push Build is passing Details
2024-09-20 18:32:17 +07:00
firmanr 91370940d7 Merge pull request 'feat: fix filter report' (#97) from feat/adjustment-report into development
continuous-integration/drone/push Build is passing Details
Reviewed-on: #97
2024-09-20 10:51:25 +00:00
Firman Ramdhani c15b4d8079 feat: fix filter report
continuous-integration/drone/push Build is passing Details
2024-09-20 17:25:28 +07:00
shancheas b16edb73e3 fix: report wrong non bundling profit share key
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-09-20 13:01:38 +07:00
firmanr ea58096287 Merge pull request 'feat/adjustment-report' (#96) from feat/adjustment-report into development
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #96
2024-09-20 04:50:52 +00:00
Firman Ramdhani 1dfcaf7b15 feat(SPG-969): feat set default payment_date_bank
continuous-integration/drone/push Build is passing Details
2024-09-20 11:50:34 +07:00
Firman Ramdhani 8b58598955 feat(SPG-969): feat set default payment_date_bank
continuous-integration/drone/push Build is passing Details
2024-09-20 11:49:58 +07:00
firmanr 5eb50c952f Merge pull request 'feat/adjustment-report' (#95) from feat/adjustment-report into development
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #95
2024-09-20 04:33:19 +00:00
Firman Ramdhani aaa0ca6f76 feat: fix report bug and create report tax
continuous-integration/drone/push Build is passing Details
2024-09-20 11:32:48 +07:00
irfan 3de7bfbbe5 Merge pull request 'fix/price-calculator' (#94) from fix/price-calculator into development
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #94
2024-09-20 04:07:24 +00:00
shancheas 60c03fefa0 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into fix/price-calculator
continuous-integration/drone/push Build is passing Details
2024-09-20 11:06:31 +07:00
shancheas b34d54e7d0 fix: item bundling replace when edit 2024-09-20 11:06:09 +07:00
Firman Ramdhani 3fd97b8879 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into feat/adjustment-report
continuous-integration/drone/push Build is passing Details
2024-09-20 09:46:25 +07:00
irfan 93c822f34e Merge pull request 'fix/price-calculator' (#93) from fix/price-calculator into development
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #93
2024-09-19 12:34:03 +00:00
shancheas e09c76309e fix: formula calculation
continuous-integration/drone/push Build is passing Details
2024-09-19 19:33:28 +07:00
Firman Ramdhani 43deb04d92 feat(SPG-966): fix report income
continuous-integration/drone/push Build is passing Details
2024-09-19 18:22:19 +07:00
shancheas 23043fb7f9 feat: change logic to save formula 2024-09-19 17:52:50 +07:00
Firman Ramdhani 1d377b574c feat(SPG-966): fix report income
continuous-integration/drone/push Build is passing Details
2024-09-19 17:50:11 +07:00
Firman Ramdhani 7d9f619858 feat(SPG-966): fix report income 2024-09-19 17:49:35 +07:00
shancheas c06a2a0a2b Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into fix/price-calculator 2024-09-19 14:07:37 +07:00
shancheas cc71814648 fix: bulk transaction action
continuous-integration/drone/push Build is passing Details
2024-09-18 17:25:07 +07:00
irfan 004dfc9de5 Merge pull request 'feat/adjustment-report' (#92) from feat/adjustment-report into development
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #92
2024-09-18 10:14:59 +00:00
Firman Ramdhani 09d6dbaab2 feat: remove console on auth
continuous-integration/drone/push Build is passing Details
2024-09-18 16:30:23 +07:00
Firman Ramdhani c76594d767 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into feat/adjustment-report
continuous-integration/drone/push Build is passing Details
2024-09-18 16:25:39 +07:00
Firman Ramdhani f4cf5178b8 feat: change auth concept
continuous-integration/drone/push Build is passing Details
2024-09-18 16:25:29 +07:00
shancheas ffbbf6e140 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into development
continuous-integration/drone/push Build is passing Details
2024-09-18 13:55:57 +07:00
shancheas 614a9346fb feat: price calculator 2024-09-18 13:55:47 +07:00
irfan f7c49d27d5 Merge pull request 'fix/income-report' (#91) from fix/income-report into development
continuous-integration/drone/push Build was killed Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #91
2024-09-13 10:39:52 +00:00
irfan 2ee96a617f fix: income item breakdown report
continuous-integration/drone/push Build was killed Details
2024-09-13 10:39:04 +00:00
irfan 10049abc55 fix: income item report
continuous-integration/drone/push Build is passing Details
2024-09-13 10:38:32 +00:00
irfan 01fbedab77 fix: income report
continuous-integration/drone/push Build is passing Details
2024-09-13 10:37:15 +00:00
irfan b2659def9a ci: rollback to yarn, NPM is s*ck
continuous-integration/drone/push Build is passing Details
2024-09-13 03:55:52 +00:00
firmanr d597734467 Merge pull request 'feat: exclude privilege logout' (#90) from feat/adjustment-report into development
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is failing Details
Reviewed-on: #90
2024-09-13 03:49:40 +00:00
Firman Ramdhani 27a0c56af7 feat: exclude privilege logout
continuous-integration/drone/push Build is passing Details
2024-09-13 10:48:45 +07:00
irfan 50ac2d97a4 ci: update Docker file use NPM instead of Yarn
continuous-integration/drone/push Build is passing Details
2024-09-13 03:27:14 +00:00
firmanr d788a9f1a1 Merge pull request 'feat(SPG-953): penyesuaian API Create dan Update pengguna baru dengan menambahkan opsi admin antrian' (#89) from feat/adjustment-report into development
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #89
2024-09-12 12:19:09 +00:00
Firman Ramdhani c897e4fcde feat(SPG-885): add validation login admin queue
continuous-integration/drone/push Build is passing Details
2024-09-12 19:17:46 +07:00
Firman Ramdhani 14dd2880bc feat(SPG-885): add api get item queue
continuous-integration/drone/push Build is passing Details
2024-09-12 17:54:48 +07:00
Firman Ramdhani 3e920755bd feat: create feature log user login and create auth admin queue
continuous-integration/drone/push Build is passing Details
2024-09-12 17:16:56 +07:00
Firman Ramdhani 88b4c66139 feat: adjustment column dpp and total pajak at income item master
continuous-integration/drone/push Build is passing Details
2024-09-11 18:15:16 +07:00
Firman Ramdhani 52c82a9a41 feat(SPG-953): penyesuaian API Create dan Update pengguna baru dengan menambahkan opsi admin antrian
continuous-integration/drone/push Build is passing Details
2024-09-11 16:43:03 +07:00
shancheas 19494b3328 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into development 2024-09-11 16:12:36 +07:00
shancheas e1f2cdfa4d wip: calculate share item 2024-09-11 16:12:22 +07:00
firmanr 918055beb9 Merge pull request 'feat: add enum queue admin' (#88) from feat/adjustment-report into development
continuous-integration/drone/push Build is passing Details
Reviewed-on: #88
2024-09-11 07:57:35 +00:00
Firman Ramdhani 283b783007 feat: add enum queue admin
continuous-integration/drone/push Build is passing Details
2024-09-11 14:56:55 +07:00
firmanr a2be2bb331 Merge pull request 'feat/adjustment-report' (#87) from feat/adjustment-report into development
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #87
2024-09-11 05:44:29 +00:00
Firman Ramdhani d708ef9eee feat: add column pos name
continuous-integration/drone/push Build is passing Details
2024-09-11 12:42:09 +07:00
Firman Ramdhani 9709c4719b feat: add column pos name
continuous-integration/drone/push Build is passing Details
2024-09-11 12:38:16 +07:00
firmanr d2db62339f Merge pull request 'feat: penyesuaian error validasi create items' (#86) from feat/adjustment-report into development
continuous-integration/drone/push Build is passing Details
Reviewed-on: #86
2024-09-11 04:05:56 +00:00
Firman Ramdhani 07d1cc78e2 feat: penyesuaian error validasi create items
continuous-integration/drone/push Build is passing Details
2024-09-11 11:05:36 +07:00
firmanr 8f430574ed Merge pull request 'feat: rename label button email template midtrans' (#85) from feat/adjustment-report into development
continuous-integration/drone/push Build is passing Details
Reviewed-on: #85
2024-09-11 03:58:36 +00:00
Firman Ramdhani f7198010d3 feat: rename label button email template midtrans
continuous-integration/drone/push Build is passing Details
2024-09-11 10:57:25 +07:00
firmanr a1641504f1 Merge pull request 'feat/adjustment-report' (#84) from feat/adjustment-report into development
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #84
2024-09-11 03:52:02 +00:00
Firman Ramdhani 6c5019f814 feat: adjustment dpp and total pajak di report icom per transaction
continuous-integration/drone/push Build is passing Details
2024-09-11 10:51:10 +07:00
Firman Ramdhani ff0ef28783 feat: create report tenant
continuous-integration/drone/push Build is passing Details
2024-09-11 10:40:44 +07:00
firmanr 40aafaf571 Merge pull request 'feat: ignore sync delete data from POS data' (#83) from feat/adjustment-report into development
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #83
2024-09-10 10:26:19 +00:00
Firman Ramdhani 6fbb2e33b2 feat: ignore sync delete data from POS data
continuous-integration/drone/push Build is passing Details
2024-09-10 17:25:59 +07:00
firmanr b20385dacc Merge pull request 'feat/adjustment-report' (#82) from feat/adjustment-report into development
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is failing Details
Reviewed-on: #82
2024-09-10 10:17:42 +00:00
Firman Ramdhani 6e5b19380b feat(SPG-935): add column payment_date_bank
continuous-integration/drone/push Build is passing Details
2024-09-10 17:15:52 +07:00
Firman Ramdhani ab9ec4ac0e feat(SPG-935): add column payment_date_bank
continuous-integration/drone/push Build is passing Details
2024-09-10 17:11:20 +07:00
firmanr 0457fc9e1d Merge pull request 'feat/adjustment-report' (#81) from feat/adjustment-report into development
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #81
2024-09-10 04:49:35 +00:00
Firman Ramdhani 3658ae4cdf feat: adjustment filter pos no
continuous-integration/drone/push Build is passing Details
2024-09-10 11:48:44 +07:00
Firman Ramdhani d1b20e6b96 feat: create report tenant
continuous-integration/drone/push Build is passing Details
2024-09-10 11:38:46 +07:00
Firman Ramdhani f4ecbf0e66 feat: add net pedapatan di report rekonsiliasi
continuous-integration/drone/push Build is passing Details
2024-09-10 10:55:13 +07:00
Firman Ramdhani 7da22277f1 feat: remove MDR column on income
continuous-integration/drone/push Build is passing Details
2024-09-10 10:37:48 +07:00
Firman Ramdhani bf73cb6b43 feat: adjustment to measure at column income report
continuous-integration/drone/push Build is passing Details
2024-09-10 10:29:31 +07:00
Firman Ramdhani 6fb582204a Merge branch 'feat/fix-couch-transaction' of ssh://git.eigen.co.id:2222/eigen/pos-be into feat/adjustment-report
continuous-integration/drone/push Build is passing Details
2024-09-09 14:30:53 +07:00
Firman Ramdhani d283caa898 feat: rename label header
continuous-integration/drone/push Build is passing Details
2024-09-09 14:26:49 +07:00
Firman Ramdhani 1320492bf1 Merge branch 'production' of ssh://git.eigen.co.id:2222/eigen/pos-be into feat/adjustment-report
continuous-integration/drone/push Build is passing Details
2024-09-09 11:26:48 +07:00
firmanr 4c25b2cbec Merge pull request 'feat: open guard cancel recap recon and add new logic for recap recon cancel handler and change logic recap handler' (#79) from feat/reconciliation into production
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build encountered an error Details
Reviewed-on: #79
2024-09-06 11:42:28 +00:00
irfan a6b1e5f49f Update Dockerfile
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-09-06 11:05:32 +00:00
firmanr ac3ee266b9 Merge pull request 'feat: open guard cancel recap recon and add new logic for recap recon cancel handler and change logic recap handler' (#80) from feat/reconciliation into development
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #80
2024-09-06 10:58:46 +00:00
Firman Ramdhani 3720df31d8 feat: open guard cancel recap recon and add new logic for recap recon cancel handler and change logic recap handler
continuous-integration/drone/push Build is passing Details
2024-09-06 17:57:51 +07:00
Firman Ramdhani 7fb2995f38 feat: update query report income and merge with development branch
continuous-integration/drone/push Build is passing Details
2024-09-04 18:26:40 +07:00
Firman Ramdhani 07e7b86cd4 feat: update query report income and merge with development branch
continuous-integration/drone/push Build is passing Details
2024-09-04 18:21:08 +07:00
Firman Ramdhani db57b1973e Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into feat/fix-couch-transaction 2024-09-04 18:20:13 +07:00
Firman Ramdhani 92d60d4496 feat: update query report income
continuous-integration/drone/push Build is passing Details
2024-09-04 18:19:42 +07:00
firmanr b716c75a2c Merge pull request 'feat/fix-couch-transaction' (#78) from feat/fix-couch-transaction into development
continuous-integration/drone/push Build is passing Details
Reviewed-on: #78
2024-09-04 10:26:33 +00:00
Firman Ramdhani 45306dde57 feat: update import couch module
continuous-integration/drone/push Build is passing Details
2024-09-04 15:22:42 +07:00
irfan 539676aa30 chore: add label to apm
continuous-integration/drone/tag Build is passing Details
continuous-integration/drone/push Build is passing Details
2024-09-03 11:45:30 +00:00
shancheas 1a2a37d185 chore: add label to APM 2024-09-03 18:44:04 +07:00
irfan 5666c31dfa Merge pull request 'pre-production' (#77) from pre-production into production
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #77
2024-09-03 11:16:58 +00:00
shancheas 665eacd39f feat: add reject QR gate
continuous-integration/drone/tag Build is passing Details
2024-09-03 10:23:02 +07:00
shancheas 9d98003a2d feat: add detail formula api getter
continuous-integration/drone/tag Build is passing Details
2024-09-03 09:45:23 +07:00
shancheas 45c4bde838 feat: add gate scanner module
continuous-integration/drone/tag Build is passing Details
2024-09-02 13:59:19 +07:00
shancheas b9927da0c4 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into development
continuous-integration/drone/tag Build is passing Details
2024-09-02 13:07:38 +07:00
Firman Ramdhani d523009acd feat: add report income per item master
continuous-integration/drone/tag Build is failing Details
2024-08-30 19:32:03 +07:00
Firman Ramdhani 457ce30cc1 feat: update email template
continuous-integration/drone/tag Build is passing Details
2024-08-30 15:27:24 +07:00
shancheas e7a7ffb2bc feat: add variable config to formula 2024-08-29 17:19:24 +07:00
Firman Ramdhani 2527437577 feat: update validation unique data on payment method module
continuous-integration/drone/tag Build is passing Details
2024-08-29 13:31:24 +07:00
shancheas ce372de1fd fix: remove event when update privilege
continuous-integration/drone/tag Build is passing Details
2024-08-28 19:48:08 +07:00
firmanr 7e7d40ea1a Merge pull request 'feat/superset' (#76) from feat/superset into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #76
2024-08-27 02:53:05 +00:00
Firman Ramdhani 8590165755 feat: setup superset BE 2024-08-27 09:50:54 +07:00
Firman Ramdhani cb9421622d feat: setup env for superset BE 2024-08-27 09:44:49 +07:00
Firman Ramdhani dc97d5e14a feat: setup superset BE 2024-08-27 09:37:38 +07:00
firmanr 79adf156db Merge pull request 'feat: setup superset BE' (#75) from feat/superset into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #75
2024-08-26 12:04:40 +00:00
Firman Ramdhani 9f50d56cea feat: setup superset BE 2024-08-26 19:04:06 +07:00
Supan Adit Pratama 4a13730231 ci: fix production env
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2024-08-23 10:06:24 +07:00
shancheas c3950c7041 fix: update demography enum 2024-08-21 20:34:07 +07:00
shancheas 464c10722c fix: update item to update item rate 2024-08-21 18:42:53 +07:00
shancheas 9815c667f0 feat: create api to bulk update privileges
continuous-integration/drone/tag Build is passing Details
2024-08-21 17:06:20 +07:00
shancheas 84b829a7fa feat: add breakdown bundling to item transaction
continuous-integration/drone/tag Build is passing Details
2024-08-21 16:46:36 +07:00
shancheas eaf0f43a24 fix: add bundling to booking couch db
continuous-integration/drone/tag Build is passing Details
2024-08-21 11:14:41 +07:00
shancheas 22b418b257 fix: update price bundling items 2024-08-21 10:56:57 +07:00
shancheas d5adc48d9b fix: breakdown item rates wrong value
continuous-integration/drone/tag Build is passing Details
2024-08-21 10:30:05 +07:00
shancheas 009576c841 feat: add bundling relation for couch db
continuous-integration/drone/tag Build is passing Details
2024-08-20 18:37:10 +07:00
shancheas 7c7b121b49 fix: fix break down bundling item rates
continuous-integration/drone/tag Build is passing Details
2024-08-20 17:16:14 +07:00
shancheas 8abdbb7b55 fix: add mix nationality to demography 2024-08-20 15:44:32 +07:00
shancheas fc15cb9db6 fix: update transaction
continuous-integration/drone/tag Build is passing Details
2024-08-20 13:22:04 +07:00
shancheas 9a72c40984 feat: add bundling item to refund
continuous-integration/drone/tag Build is passing Details
2024-08-20 12:05:36 +07:00
shancheas f2bc4dd46d feat: add breakdown item to transaction 2024-08-20 11:52:20 +07:00
shancheas f4387767a8 fix: add item rate to bundling breakdown
continuous-integration/drone/tag Build is passing Details
2024-08-16 18:46:10 +07:00
shancheas 8b82f9b7db feat: estimation play to item 2024-08-16 16:44:04 +07:00
shancheas ee232447b6 fix: add breakdown bundling response to item and item rate
continuous-integration/drone/tag Build is passing Details
2024-08-16 15:11:15 +07:00
shancheas a2a9c16619 wip: add transaction demography model 2024-08-16 14:21:36 +07:00
shancheas 6227555671 wip: demography data 2024-08-15 17:12:35 +07:00
shancheas fa286820fc fix: add breakdown bundling and profit to response
continuous-integration/drone/tag Build is passing Details
2024-08-15 17:12:12 +07:00
shancheas e966de6158 feat: add bundling breakdown type 2024-08-15 16:04:15 +07:00
shancheas 50e8951b71 feat: add share profit to item
continuous-integration/drone/tag Build is passing Details
2024-08-15 14:27:54 +07:00
firmanr cefeef8854 Merge pull request 'feat: fixed midtrans' (#73) from fix/bug-firman into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #73
2024-08-12 13:01:13 +00:00
Firman Ramdhani f30a23d3c4 feat: fixed midtrans 2024-08-12 20:00:47 +07:00
shancheas dcf0a55dfc fix: remove payment_type_method_id when cancel
continuous-integration/drone/tag Build was killed Details
2024-08-12 19:59:57 +07:00
firmanr 3678353f34 Merge pull request 'feat: fixed midtrans' (#72) from fix/bug-firman into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #72
2024-08-12 12:51:36 +00:00
Firman Ramdhani ab903d4554 feat: fixed midtrans 2024-08-12 19:51:17 +07:00
shancheas bd13f50bc0 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into development
continuous-integration/drone/tag Build is passing Details
2024-08-12 19:47:21 +07:00
shancheas f4939ffe89 fix: cancel data payment 2024-08-12 19:47:10 +07:00
firmanr 4fe385bca1 Merge pull request 'feat: fixed midtrans' (#71) from fix/bug-firman into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #71
2024-08-12 12:41:38 +00:00
Firman Ramdhani be7c74ec72 feat: fixed midtrans 2024-08-12 19:40:54 +07:00
shancheas 88cc9f4bc3 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into development
continuous-integration/drone/tag Build is passing Details
2024-08-12 19:34:54 +07:00
shancheas dc595dfb07 fix: mapping transaction cancel 2024-08-12 19:34:34 +07:00
firmanr 211a1e8a3c Merge pull request 'feat: fixed midtrans' (#70) from fix/bug-firman into development
Reviewed-on: #70
2024-08-12 12:30:39 +00:00
Firman Ramdhani 08e018e16b Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into fix/bug-firman 2024-08-12 19:30:20 +07:00
Firman Ramdhani cc62910493 feat: fixed midtrans 2024-08-12 19:29:21 +07:00
firmanr ff44be66e2 Merge pull request 'feat: fixed midtrans' (#69) from fix/bug-firman into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #69
2024-08-12 12:27:03 +00:00
Firman Ramdhani b9b1695dc5 feat: fixed midtrans 2024-08-12 19:26:39 +07:00
firmanr 617a08e3f2 Merge pull request 'feat: fixed midtrans' (#68) from fix/bug-firman into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #68
2024-08-12 12:14:51 +00:00
Firman Ramdhani aaf6f97e57 feat: fixed midtrans 2024-08-12 19:14:25 +07:00
shancheas 538bd0e58e Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into development
continuous-integration/drone/tag Build is passing Details
2024-08-12 18:41:45 +07:00
shancheas ceae06779e fix: booking date undefined 2024-08-12 18:41:28 +07:00
firmanr 5e78669b6c Merge pull request 'feat: fixed midtrans' (#67) from fix/bug-firman into development
continuous-integration/drone/tag Build was killed Details
Reviewed-on: #67
2024-08-12 11:40:21 +00:00
Firman Ramdhani a015353990 feat: fixed midtrans 2024-08-12 18:37:37 +07:00
firmanr 01b4ee2bbd Merge pull request 'feat(SPG-851): fix midtrans' (#66) from fix/bug-firman into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #66
2024-08-12 11:02:49 +00:00
Firman Ramdhani c65f0dc9dc feat(SPG-851): fix midtrans 2024-08-12 18:01:59 +07:00
firmanr c98b8da9ba Merge pull request 'feat:' (#65) from fix/bug-firman into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #65
2024-08-12 09:18:08 +00:00
Firman Ramdhani bca3682826 feat: 2024-08-12 16:17:36 +07:00
irfan 11aeb44bac Update .drone.yml 2024-08-12 09:04:29 +00:00
irfan 07347c9244 Update .drone.yml 2024-08-12 09:03:32 +00:00
shancheas 29cc6dfae6 fix: add parameter payment total value greater than 0
continuous-integration/drone/tag Build is passing Details
2024-08-12 15:54:21 +07:00
shancheas f9937d84ab fix(SPG-848): exclude counter transaction with null payment type 2024-08-12 15:46:53 +07:00
shancheas a14119719c ci: change mattermost token 2024-08-12 13:56:45 +07:00
shancheas ae75578b65 ci: remove timeout
continuous-integration/drone/tag Build is passing Details
2024-08-12 13:45:56 +07:00
shancheas 93fa32df80 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into development
continuous-integration/drone/tag Build is failing Details
2024-08-12 13:42:03 +07:00
shancheas f7d7fba267 ci: change pipeline formula 2024-08-12 13:41:43 +07:00
firmanr ebcc5515e5 Merge pull request 'fix/bug-firman' (#64) from fix/bug-firman into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #64
2024-08-12 03:52:05 +00:00
Firman Ramdhani b597a2f184 feat(SPG-265): report reconciliation 2024-08-12 10:50:02 +07:00
Firman Ramdhani 7a6c784612 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into fix/bug-firman 2024-08-09 17:38:47 +07:00
Firman Ramdhani d6fc817cef feat: remove unused report 2024-08-09 17:38:35 +07:00
firmanr 89aa2a68b4 Merge pull request 'fix/bug-firman' (#63) from fix/bug-firman into development
Reviewed-on: #63
2024-08-09 10:23:54 +00:00
Firman Ramdhani 64d812bef1 feat(SPG-267): report cash withdrawals 2024-08-09 17:21:12 +07:00
Firman Ramdhani 3b8310581b feat(SPG-266): report cashier log 2024-08-09 16:10:57 +07:00
Firman Ramdhani 21b9549b52 feat(SPG-264): report refund 2024-08-09 16:06:17 +07:00
Firman Ramdhani 76b518614f feat(SPG-263): report pemesanan 2024-08-09 15:52:53 +07:00
Firman Ramdhani 841f8889ec Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into fix/bug-firman 2024-08-09 15:43:25 +07:00
Firman Ramdhani bc8476a56e feat(SPG-268): report pemberian diskon 2024-08-09 15:43:13 +07:00
shancheas fe6572a770 fix: only check transaction more than 1 day
continuous-integration/drone/tag Build is passing Details
2024-08-09 15:23:20 +07:00
shancheas acf8861823 feat: add sync midtrans transaction 2024-08-09 15:18:43 +07:00
Firman Ramdhani a319b64abe feat(SPG-259): report pendapatan per item 2024-08-09 15:14:37 +07:00
firmanr 3938504fd3 Merge pull request 'feat: fix access control download' (#62) from fix/bug-firman into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #62
2024-08-09 04:27:43 +00:00
Firman Ramdhani 3b07c8de99 feat: fix access control download 2024-08-09 11:27:00 +07:00
firmanr fc67c222f8 Merge pull request 'feat(SPG-258): create report income and fix calculate hpp on transaction' (#61) from fix/bug-firman into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #61
2024-08-09 04:18:33 +00:00
Firman Ramdhani f0c1410532 feat(SPG-258): create report income and fix calculate hpp on transaction 2024-08-09 11:16:56 +07:00
shancheas c5fdca615f fix(SPG-816): add payment date and payment method
continuous-integration/drone/tag Build is passing Details
2024-08-08 18:24:59 +07:00
shancheas e00a6aae31 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into development
continuous-integration/drone/tag Build is passing Details
2024-08-08 18:10:32 +07:00
shancheas f5425ccfb1 feat: add change status midtrans 2024-08-08 18:10:18 +07:00
firmanr 995f4b963c Merge pull request 'fix/bug-firman' (#60) from fix/bug-firman into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #60
2024-08-08 10:29:37 +00:00
Firman Ramdhani 13895394b3 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into fix/bug-firman 2024-08-08 17:28:42 +07:00
Firman Ramdhani b36e35ea00 feat(SPG-823): add item access control 2024-08-08 17:28:17 +07:00
shancheas e9c819987e fix: add payment_midtrans_url to transactions
continuous-integration/drone/tag Build was killed Details
2024-08-08 17:27:51 +07:00
shancheas a61f8b853d fix(SPG-817): invoice expired not send email
continuous-integration/drone/tag Build is passing Details
2024-08-08 17:07:03 +07:00
shancheas efe5661a57 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into development
continuous-integration/drone/tag Build is passing Details
2024-08-08 15:47:53 +07:00
shancheas 30d3d91bba fix(SPG-817): send email when status expired 2024-08-08 15:47:39 +07:00
firmanr 1fa4d315be Merge pull request 'fix/bug-firman' (#59) from fix/bug-firman into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #59
2024-08-08 08:42:34 +00:00
shancheas bcdf656d5d fix: midtrans error total != qty * price 2024-08-08 15:34:34 +07:00
Firman Ramdhani 63152ec90e feat(SPG-833): add key refund_type on get index 2024-08-08 15:24:35 +07:00
Firman Ramdhani 990d73bdb1 feat(SPG-837): validate delete and in active when data session type has relation 2024-08-08 15:07:38 +07:00
Firman Ramdhani 1dae9ec356 feat(SPG-780): sync data session type 2024-08-08 14:51:38 +07:00
Firman Ramdhani 8de744bc58 feat(SPG-782): update base price at item rate when price on item rate not edited before 2024-08-08 13:19:03 +07:00
Firman Ramdhani f8618ec0cd Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into fix/bug-firman 2024-08-08 11:28:54 +07:00
shancheas 1e8a07ec55 fix: change pos transaction event from update to change status 2024-08-08 11:27:20 +07:00
Firman Ramdhani 810a1c5bf5 feat: add planning comment for handle change status from multiple tabs 2024-08-07 22:18:19 +07:00
firmanr 1d8a3d7ff9 Merge pull request 'feat(SPG-818): fix condition transaction status change handler' (#58) from fix/bug-firman into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #58
2024-08-07 11:47:44 +00:00
Firman Ramdhani b57da1d21a feat(SPG-818): fix condition transaction status change handler 2024-08-07 18:47:08 +07:00
shancheas 8dd36042eb fix(SPG-804): cancel transaction to pending booking
continuous-integration/drone/tag Build is passing Details
2024-08-07 18:04:53 +07:00
firmanr 72e47c2486 Merge pull request 'feat(SPG-737): fix filter reconciliation' (#57) from fix/bug-firman into development
Reviewed-on: #57
2024-08-07 10:46:32 +00:00
Firman Ramdhani cfb0d3c60f feat(SPG-792) : fix sync transaction data 2024-08-07 17:46:14 +07:00
Firman Ramdhani 0c3abc6a8f feat: add get data on couch service 2024-08-07 16:41:13 +07:00
Firman Ramdhani 1fcbe57018 feat: remove console 2024-08-07 16:33:20 +07:00
Firman Ramdhani ba6ee4a408 feat(SPG-737): fix filter reconciliation 2024-08-07 14:47:19 +07:00
shancheas e4a631b929 fix: move google credential to folder
continuous-integration/drone/tag Build is passing Details
2024-08-07 12:30:55 +07:00
shancheas dbdc7a0203 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into development
continuous-integration/drone/tag Build is passing Details
2024-08-07 11:48:55 +07:00
shancheas fcaf4a07a1 log: add APM to handler 2024-08-07 11:48:39 +07:00
firmanr 9efa56b2bc Merge pull request 'feat(SPG-800): add validation delete on data booking transaction' (#56) from fix/bug-firman into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #56
2024-08-07 04:32:44 +00:00
Firman Ramdhani 0658b503bd feat(SPG-656): allow input number on formula 2024-08-07 11:05:37 +07:00
Firman Ramdhani 9802d983bb feat(SPG-800): add validation delete on data booking transaction 2024-08-07 10:31:19 +07:00
firmanr 583b754315 Merge pull request 'Update env/env.production' (#55) from fix/bug-firman into development
Reviewed-on: #55
2024-08-06 10:40:09 +00:00
Firman Ramdhani 4ef139b2f5 Update env/env.production 2024-08-06 17:39:53 +07:00
irfan b137e1abce Update env/env.development
continuous-integration/drone/tag Build is passing Details
2024-08-06 10:38:18 +00:00
shancheas e8baaa12d2 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into development 2024-08-06 16:06:43 +07:00
shancheas 6ca74ad6f7 fix: lint 2024-08-06 16:06:30 +07:00
firmanr 955f00cc9d Merge pull request 'feat(SPG-793): fix time at report log' (#54) from fix/bug-firman into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #54
2024-08-06 09:05:27 +00:00
Firman Ramdhani b48a469720 feat(SPG-772): fix key settlement date on booking module 2024-08-06 16:04:20 +07:00
shancheas 61d8f56385 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into development
continuous-integration/drone/tag Build was killed Details
2024-08-06 16:04:13 +07:00
shancheas 2a42d85814 chore: add vscode debug configuration 2024-08-06 16:03:55 +07:00
shancheas bacdb1773b fix: item rates not generated when create period season 2024-08-06 16:03:42 +07:00
Firman Ramdhani 655157239d feat(SPG-793): fix time at report log 2024-08-06 13:23:21 +07:00
firmanr 33014394d1 Merge pull request 'feat(SPG-773): set item name to unique' (#53) from fix/bug-firman into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #53
2024-08-06 05:48:50 +00:00
Firman Ramdhani aaee458df6 feat(SPG-773): set item name to unique 2024-08-06 12:47:09 +07:00
firmanr ffcbf65d9d Merge pull request 'feat/report' (#52) from feat/report into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #52
2024-08-06 05:35:06 +00:00
Firman Ramdhani 2f19db8dd7 feat(SPG-777): add validation delete for tenant item bundling 2024-08-06 11:40:18 +07:00
Firman Ramdhani e7664be8a8 feat(SPG-777): add validation delete for tenant item bundling 2024-08-06 11:39:40 +07:00
Firman Ramdhani a2c1af2a65 merge 2024-08-06 11:38:17 +07:00
Firman Ramdhani 26db7d2745 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into feat/report 2024-08-06 11:37:59 +07:00
Firman Ramdhani e922db827d feat(SPG-777): add validation delete for tenant item bundling 2024-08-06 11:33:51 +07:00
shancheas 5dde995ab8 fix: fail to cancel transaction
continuous-integration/drone/tag Build is passing Details
2024-08-06 10:37:56 +07:00
shancheas 79d1c564ff log: add APM log to couch handler
continuous-integration/drone/tag Build is passing Details
2024-08-06 06:16:10 +07:00
shancheas e7abc7db13 fix: move mail template to assets folder 2024-08-06 06:13:13 +07:00
shancheas 81a463e761 chore: update file location
continuous-integration/drone/tag Build is passing Details
2024-08-05 15:37:27 +07:00
shancheas c741a55577 fix: move image from file to base64 string
continuous-integration/drone/tag Build is passing Details
2024-08-05 15:18:24 +07:00
shancheas 81dad9a69c fix: change logo image location
continuous-integration/drone/tag Build is passing Details
2024-08-05 15:00:13 +07:00
shancheas 8999ed1bf0 fix: error image and typo
continuous-integration/drone/tag Build is passing Details
2024-08-05 14:43:42 +07:00
aswin ebfcbb85fe Merge pull request 'feat/pdf-generator' (#51) from feat/pdf-generator into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #51
2024-08-03 19:52:58 +00:00
Aswin Ashar Abdullah feee9a3439 fix(SPG-494) PDF Generator 2024-08-04 02:51:11 +07:00
aswin b05e6fab5a Merge pull request 'development' (#50) from development into feat/pdf-generator
Reviewed-on: #50
2024-08-02 12:01:09 +00:00
aswin 37350e454f Merge pull request 'fix/data' (#49) from fix/data into development
Reviewed-on: #49
2024-08-02 12:00:23 +00:00
Aswin Ashar Abdullah b08325a53c fix(email) checkpoint email service 2024-08-02 18:59:31 +07:00
Aswin Ashar Abdullah a1f7108bc5 feat(SPG-233) Integration Google Calendar API 2024-08-02 18:36:42 +07:00
Aswin Ashar Abdullah 2e4d5df17a fix(SPG-762) BE - integrasi dengan API Midtrans - untuk update status pembayaran 2024-08-02 18:11:36 +07:00
Aswin Ashar Abdullah 4fcd852d8d fix(SPG-769) save edit data terkena validasi status transaksi settled 2024-08-02 17:59:30 +07:00
Aswin Ashar Abdullah 0f05656ca2 fix(booking) perbaikan column payment type counter 2024-08-02 17:54:12 +07:00
Aswin Ashar Abdullah 0bec3c6590 fix(SPG-750) Ketika sales di PoS di cancel, pada rekondiliasi - recap, valuenya tidak berkurang 2024-08-02 17:53:29 +07:00
Aswin Ashar Abdullah 8eee99fce5 fix(SPG-745) Data booking status active dan settled (tipe pembayaran selain counter) belum masuk PoS 2024-08-02 17:49:11 +07:00
Aswin Ashar Abdullah 239e2d778a feat(SPG-760) Validasi Bundling dan Item active inactive 2024-08-02 17:12:12 +07:00
Aswin Ashar Abdullah cc01b23e2a fix(SPG-754) Di hak akses PoS, penjualan seharusnya tidak ada check box delete 2024-08-02 16:56:34 +07:00
Aswin Ashar Abdullah 0b502188af fix(SPG-687) Booking status pending seharusnya bisa di cancel 2024-08-02 16:08:26 +07:00
Aswin Ashar Abdullah e38fbc65bd fix(SPG-759) Ketika ada item baru dibuat ( kondisi sudah ada data item rate untuk product lain ) 2024-08-02 16:00:05 +07:00
Aswin Ashar Abdullah 0e47b99ca7 fix(SPG-756) Untuk value field sales margin (%) seharusnya bisa mempunyai value dibelakang koma 2024-08-02 15:28:56 +07:00
Aswin Ashar Abdullah e401a1bf4c fix(SPG-742) Filter status, sumber, tipe pembayaran, pembayaran via, bank, tgl konfirmasi belum jalan 2024-08-02 15:16:43 +07:00
Aswin Ashar Abdullah 1636f6b930 fix(SPG-743) Refund dengan code invoice yang sama terkena validasi 2024-08-02 14:38:36 +07:00
aswin d1892e7aa5 Merge pull request 'development' (#48) from development into feat/pdf-generator
Reviewed-on: #48
2024-08-02 06:32:20 +00:00
Firman Ramdhani d14d9101ae feat: add report CashierLogReport and CashWithdrawalsReport
continuous-integration/drone/tag Build is passing Details
2024-08-01 18:09:40 +07:00
Firman Ramdhani 746e24feb6 feat: add migration for table pos log
continuous-integration/drone/tag Build is passing Details
2024-08-01 17:48:21 +07:00
Firman Ramdhani 39d7eb28b9 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into development 2024-08-01 17:45:55 +07:00
Firman Ramdhani 9d0d76120e feat: update model pos log 2024-08-01 17:45:33 +07:00
aswin 971407612c Merge pull request 'fix/data' (#47) from fix/data into development
Reviewed-on: #47
2024-08-01 10:37:35 +00:00
Aswin Ashar Abdullah 03ec533e86 fix(SPG-736) Cancel rekon statu Pending terkena validasi data pemesanan harus settled 2024-08-01 17:33:36 +07:00
Aswin Ashar Abdullah d413bd771b fix(SPG-735) Ketika recap di click berkali kali, transaksi menggunakan tipe cash jadi duplicate 2024-08-01 17:25:12 +07:00
Aswin Ashar Abdullah 11171b2859 fix(SPG-729) pemesanan data seharusnya berstatus proses refund ketika data refund berstatus draft 2024-08-01 17:01:39 +07:00
Firman Ramdhani 1e9cc9da4f feat: add default condition for type on booking report 2024-08-01 15:13:00 +07:00
Firman Ramdhani 46307774e1 Merge branch 'development' of ssh://git.eigen.co.id:2222/eigen/pos-be into development 2024-08-01 14:43:43 +07:00
Firman Ramdhani 62eccf29a5 feat: rename header title report 2024-08-01 14:43:37 +07:00
Aswin Ashar Abdullah 383fdce9f7 feat(pdf) checkpoint pdf 2024-08-01 14:36:20 +07:00
Aswin Ashar Abdullah 1ae7f4e097 fix(booking) perbaikan event deleted booking 2024-08-01 14:27:57 +07:00
aswin 33f955c209 Merge pull request 'fix/data' (#46) from fix/data into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #46
2024-08-01 07:01:41 +00:00
Aswin Ashar Abdullah d4bd3d746c fix(filter) perbaikan filter season period 2024-08-01 14:00:14 +07:00
Aswin Ashar Abdullah 45f11003f2 fix(privilege) perbaikan privilege constants 2024-08-01 13:33:02 +07:00
Aswin Ashar Abdullah 2188d63943 fix(SPG-726) Update image pada item status active, data image tidak ter sync ke PoS 2024-07-31 19:05:08 +07:00
Aswin Ashar Abdullah 3af56fa5d5 fix(SPG-652) Item Tipe Bundling - validasi 2024-07-31 18:51:31 +07:00
aswin 77d8e7ae1e Merge pull request 'fix/data' (#45) from fix/data into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #45
2024-07-31 11:27:39 +00:00
Aswin Ashar Abdullah c49bb379bd fix(item price) perbaikan price item 2024-07-31 18:25:28 +07:00
Aswin Ashar Abdullah 0648eeffee fix(SPG-711) Internal server error sering sekali ketika confirm status draft ke status pending 2024-07-31 18:24:47 +07:00
Aswin Ashar Abdullah e8deba2882 fix(SPG-709) Data summary transaksi PoS tidak muncul di halaman rekonsiliasi setelah click button recap 2024-07-31 17:58:33 +07:00
Aswin Ashar Abdullah 19386c336e fix(SPG-710) ganti warning cancel jadi bahasa indonesia 2024-07-31 17:58:01 +07:00
Aswin Ashar Abdullah 58cf3f7ab0 fix(SPG-718) Validasi perubahan tipe wahana seharusnya tidak memvalidasi perubahan namanya 2024-07-31 16:29:04 +07:00
Aswin Ashar Abdullah d7c4b27749 feat(SPG-719) Season Period - API Index - tambahkan filter berdasarkan season type 2024-07-31 16:19:30 +07:00
Aswin Ashar Abdullah 0ac5754170 fix(SPG-703) Sync account superadmin ke Pouch Couch supaya bisa login di PoS 2024-07-31 16:11:59 +07:00
Aswin Ashar Abdullah b7557a5f19 fix(SPG-663) Pos Privileges - pemesanan seharusnya tidak ada create 2024-07-31 15:53:41 +07:00
aswin 1590080468 Merge pull request 'fix(transaction) perbaikan data' (#44) from fix/data into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #44
2024-07-30 12:26:06 +00:00
Aswin Ashar Abdullah 61c512f7f4 fix(transaction) perbaikan data 2024-07-30 19:25:22 +07:00
aswin 30ffdca550 Merge pull request 'fix/data' (#43) from fix/data into development
continuous-integration/drone/tag Build is failing Details
Reviewed-on: #43
2024-07-30 11:33:11 +00:00
Aswin Ashar Abdullah c154af6cb7 fix(SPG-708) Muncul error saat meng cancel status pending - warninnya hanya bisa meng cancel status pending juga 2024-07-30 18:26:50 +07:00
Aswin Ashar Abdullah 197b3478ae fix(SPG_693) di hak akses pos pada bagian penjualan seharusnya ada checkbox pada kolom cancel dan ada hak akses reprint receipt 2024-07-30 18:22:23 +07:00
Aswin Ashar Abdullah c6be42299e fix(SPG-697) Pada index booking seharusnya transaksi pos tidak muncul, dan sesuaikan alur booking dengan pembayaran counter 2024-07-30 17:12:55 +07:00
Firman Ramdhani 9bcc72a69e feat: fix set false bookmark report
continuous-integration/drone/tag Build is passing Details
2024-07-30 16:59:11 +07:00
Aswin Ashar Abdullah dc6476a66f fix(SPG-687) Booking status pending seharusnya bisa di cancel, tapi ketika di cancel muncul error message, hanya status active yang bisa di cancel 2024-07-30 14:44:12 +07:00
Aswin Ashar Abdullah 4a9ca5eb5b fix(SPG-688) Ketika tgl booking di rubah web admin, tanggal booking pada PoS tidak ikut terupdate 2024-07-30 14:36:49 +07:00
aswin e1004b3843 Merge pull request 'fix/data' (#42) from fix/data into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #42
2024-07-30 06:56:07 +00:00
Aswin Ashar Abdullah 6632222c4b fix(SPG-677) Pada Index tgl invoice belum ada datanya, invoice data = tgl ketika booking di confirm ke status pending 2024-07-30 13:54:00 +07:00
Aswin Ashar Abdullah 945edbf76d fix(SPG-659) Muncul error get data saat confirm transaksi status draft ke pending 2024-07-30 13:50:23 +07:00
Aswin Ashar Abdullah 190f42d598 fix(SPG-645) Button generate price belum berfungsi 2024-07-30 13:46:57 +07:00
Aswin Ashar Abdullah d9bbe1290d fix(SPG-675) Error saat confirm status pending ( hanya bisa refund status settled ) padahal status sudah berubah ke proces refund 2024-07-30 13:08:50 +07:00
Aswin Ashar Abdullah 3e85d40885 feat(SPG-651) BE Reason Refund Request 2024-07-30 13:00:49 +07:00
Aswin Ashar Abdullah 7e38a67e80 fix(SPG-667) Kategori item status inactive seharusnya tidak terpanggil 2024-07-30 12:44:57 +07:00
Aswin Ashar Abdullah b91d9f7da8 fix(SPG-671) Item Bundling - validasi / warning jika item dalam bundling diinactivekan sedangkan masih berelasi, bundling harus di inactivekan dulu atau didelete 2024-07-30 12:24:31 +07:00
irfan bf8987242b Merge pull request 'fix: change query runner to repository from base manager' (#41) from fix/base-query into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #41
2024-07-29 09:47:00 +00:00
shancheas 57f2700c94 fix: change query runner to repository from base manager 2024-07-29 16:44:23 +07:00
Aswin Ashar Abdullah b3f0752ca0 fix(SPG-662) Search title banner belum jalan 2024-07-29 14:53:22 +07:00
Aswin Ashar Abdullah 33438f37ec fix(SPG-669) Validasi perubahan tipe wahana jika sudah mempunyai item yang berelasi 2024-07-29 14:48:05 +07:00
Aswin Ashar Abdullah 593955574a fix(SPG-664) admin Privilles - rekonsiliasi seharusnya tidak ada create 2024-07-29 14:37:46 +07:00
Aswin Ashar Abdullah 4ac711add5 fix(SPG-663) Pos Privilleges - pemesanan seharusnya tidak ada create 2024-07-29 14:37:12 +07:00
aswin c7fa402663 Merge pull request 'fix/data' (#40) from fix/data into development
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #40
2024-07-26 10:20:47 +00:00
Aswin Ashar Abdullah 6096771597 fix(SPG-658) Validasi - tidak bisa confirm dari status pending ke waiting, ketika data pembayaran booking belum diisi ( untuk pembayaran bank transfer dan QRIS saja) 2024-07-26 17:14:04 +07:00
Aswin Ashar Abdullah 76fa380f1e fix(SPG-657) Kode Pembayaran - ketika booking status waiting di confirm di rekonsiliasi, kode pembayaran tidak muncul 2024-07-26 16:49:52 +07:00
Aswin Ashar Abdullah 1f4bf80908 fix(SPG-661) Filter rekonsiliasi exclude status draft 2024-07-26 16:28:25 +07:00
Aswin Ashar Abdullah 66c481c9b0 fix(SPG-645) Button generate price belum berfungsi 2024-07-26 16:20:22 +07:00
Aswin Ashar Abdullah 9cd50ad817 fix(SPG-655) Item Rate saat filter harga jadi mengambil base price (kemungkinan ada salah ambil priority 2024-07-26 15:43:34 +07:00
Aswin Ashar Abdullah 82105e8214 fix(rate) perbaikan update rate 2024-07-26 15:05:28 +07:00
Aswin Ashar Abdullah e68524380a fix(SPG-652) Item Tipe Bundling - Item yang sudah berrelasi atau dipakai pada bundling tidak dapat di delete atau di inactivekan sampai di lepas dari bundling nya 2024-07-26 15:03:37 +07:00
aswin d333ba03a7 Merge pull request 'fix(season) update fix priority' (#39) from fix/data into development
Reviewed-on: #39
2024-07-26 07:04:31 +00:00
Aswin Ashar Abdullah a63eaf0110 fix(season) update fix priority 2024-07-26 14:03:38 +07:00
462 changed files with 33435 additions and 1175 deletions

View File

@ -1,38 +1,109 @@
kind: pipeline
type: docker
name: build
name: server
steps:
- name: build-dev
# - name: build
# image: appleboy/drone-ssh
# settings:
# host:
# - 172.10.10.10
# username: eigen
# key:
# from_secret: DEVOPS_SSH_PRIVATE_OPEN
# port: 22
# script:
# - cd /home/eigen/PROJECT/POS/POS.DEV/BE
# - sh build.sh
# when:
# ref:
# - refs/tags/devel_*
# - refs/tags/*-alpha.*
- name: build-testing
image: plugins/docker
settings:
registry: registry.eigen.co.id
repo: registry.eigen.co.id/eigen/${DRONE_REPO_NAME}
build_args:
- env_target=env.development
tags: latest
tags: ${DRONE_TAG}
custom_dns: 172.10.10.16
trigger:
when:
ref:
- refs/tags/devel_*
- refs/tags/*-alpha.*
- name: build-production
image: plugins/docker
settings:
registry: registry.eigen.co.id
repo: registry.eigen.co.id/eigen/${DRONE_REPO_NAME}
tags: ${DRONE_TAG}
custom_dns: 172.10.10.16
when:
ref:
- refs/tags/*-production.*
- name: send-message
image: plugins/webhook
settings:
urls: https://mattermost.eigen.co.id/api/v4/posts
content_type: application/json
headers:
- Authorization=Bearer 5zubexudb38uuradfa36qy98ca
template: |
{
"channel_id": "s1ekqde1c3du5p35g6budnuotc",
"message": "Build {{repo.name}} sudah selesai"
}
trigger:
event:
exclude:
- promote
---
kind: pipeline
type: docker
name: deployment
name: kustomize
clone:
disable: true
steps:
- name: deployment
image: alpine
failure: ignore
- name: kustomize-testing
image: registry.k8s.io/kustomize/kustomize:v5.0.0
environment:
DEVOPS_SSH_PRIVATE:
from_secret: DEVOPS_SSH_PRIVATE
DEVOPS_SSH_PUBLIC:
from_secret: DEVOPS_SSH_PUBLIC
INFRASTRUCTURE_REPO: "k8s-kustomize-external"
DIRECTORY_NAME: "weplay-pos-testing"
commands:
- apk add --no-cache curl
- curl -X POST https://manager.sky.eigen.co.id/api/webhooks/806de7e2-1d3e-4889-b472-a59af0a5eb33
- mkdir -p ~/.ssh &&
- echo $DEVOPS_SSH_PRIVATE | base64 -d > ~/.ssh/id_rsa &&
- echo $DEVOPS_SSH_PUBLIC | base64 -d > ~/.ssh/id_rsa.pub &&
- ssh-keyscan -H -p 2222 git.eigen.co.id >> ~/.ssh/known_hosts &&
- chmod 700 ~/.ssh/ &&
- chmod 600 ~/.ssh/id_rsa &&
- git clone ssh://git@git.eigen.co.id:2222/eigen/$INFRASTRUCTURE_REPO.git &&
- cd $INFRASTRUCTURE_REPO/$DIRECTORY_NAME
- kustomize edit set image registry.eigen.co.id/eigen/$DRONE_REPO_NAME=registry.eigen.co.id/eigen/$DRONE_REPO_NAME:$DRONE_TAG &&
- git add . &&
- |-
git commit -m "feat: update $DRONE_REPO_NAME testing to $DRONE_TAG" &&
- git push origin master
- name: send-message
image: harbor.eigen.co.id/docker.com/plugins/webhook
settings:
urls: https://mattermost.eigen.co.id/api/v4/posts
content_type: application/json
headers:
- Authorization=Bearer 5zubexudb38uuradfa36qy98ca
template: |
{
"channel_id": "s1ekqde1c3du5p35g6budnuotc",
"message": "ALERT: {{ repo.name }} gagal update dengan tag ${DRONE_TAG}"
}
when:
status:
- failure
trigger:
ref:
- refs/tags/devel_*
event:
exclude:
- promote
include:
- refs/tags/*-alpha.*
depends_on:
- build
- server

38
.drone.yml.old Normal file
View File

@ -0,0 +1,38 @@
kind: pipeline
type: docker
name: build
steps:
- name: build-dev
image: plugins/docker
settings:
registry: registry.eigen.co.id
repo: registry.eigen.co.id/eigen/${DRONE_REPO_NAME}
build_args:
- env_target=env.development
tags: latest
custom_dns: 172.10.10.16
trigger:
ref:
- refs/tags/devel_*
event:
exclude:
- promote
---
kind: pipeline
type: docker
name: deployment
steps:
- name: deployment
image: alpine
failure: ignore
commands:
- apk add --no-cache curl
- curl -X POST https://manager.sky.eigen.co.id/api/webhooks/806de7e2-1d3e-4889-b472-a59af0a5eb33
trigger:
ref:
- refs/tags/devel_*
event:
exclude:
- promote
depends_on:
- build

20
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,20 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Debug Nest Framework",
"runtimeExecutable": "npm",
"runtimeArgs": ["run", "start:debug", "--", "--inspect-brk"],
"autoAttachChildProcesses": true,
"restart": true,
"sourceMaps": true,
"stopOnEntry": false,
"console": "integratedTerminal"
}
]
}

View File

@ -5,12 +5,13 @@ COPY . .
RUN yarn install
RUN yarn build
FROM node:18.17-alpine
ARG env_target
# ARG env_target
WORKDIR /app
RUN echo ${env_target}
COPY env/$env_target /app/.env
COPY --from=builder /app/env/$env_target .env
# RUN echo ${env_target}
# COPY env/$env_target /app/.env
# COPY --from=builder /app/env/$env_target .env
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/assets ./assets
COPY --from=builder /app/package.json ./package.json
CMD ["node", "--max-old-space-size=8192","--max-http-header-size", "512000", "-r", "dotenv/config", "dist/main"]

View File

@ -4,7 +4,7 @@
<head>
<meta name="viewport" content="width=device-width" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Email Ibunda</title>
<title>Email Confirmation</title>
<style>
/* -------------------------------------
GLOBAL RESETS
@ -364,45 +364,36 @@
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<p>Halo {{customer_name}}</p>
<p>Pemesanan tiket telah berhasil dengan nomor invoice {{invoice_code}}, Silahkan lakukan pembayaran</p>
<p class="mb0"><b>Dear,</b></p>
<p class="mb0">{{customer_name}}</p>
<p>{{customer_phone}}</p>
<p class="mb0">Great News! We've successfully updated your booking date as per your request.</p>
<p>We're excited to accommodate your new plans and ensure evertyhing goes smoothly.</p>
<p class="mb0">Here are your updated booking details</p>
<b class="mb0">Original Booking Date: {{booking_date_before}}</b>
<b>New Booking Date: {{booking_date}}</b>
<p class="mb0">For yout convenience, we've attached a new confirmation receipt reflecting these changes.</p>
<p><b>Please be sure to bring this updated receipt with you on the new date</b></p>
<p class="mb0">To keep the good times rolling, our friendly support team is just a call away at</p>
<b>{{phone_cs}}</b>
<br>
<p>
<b>PEMBAYARAN DAPAT MELALUI</b>
<ul>
{{#each payment_methods}}
<li>
<p>
<b>{{issuer_name}}</b><br>
<span>Name: <b>{{account_name}}</b></span><br>
<span>Number: <b>{{account_number}}</b></span>
</p>
</li>
{{/each}}
</ul>
</p>
<p>Thank you and we can't wait to see you and make sure you have an amazing time!</p>
<br><br>
<b>Best Regrads,</b><br>
<b>WEplayground</b>
</td>
</tr>
</table>
</td>
</tr>
<!-- END MAIN CONTENT AREA -->
</table>
<!-- START FOOTER -->
<div class="footer">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="content-block powered-by">
Powered by Skyworld
</td>
</tr>
</table>
</div>
<!-- END FOOTER -->
<!-- END CENTERED WHITE CONTAINER -->
</div>
</td>
<td>&nbsp;</td>

View File

@ -0,0 +1,412 @@
<!doctype html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Email Confirmation</title>
<style>
/* -------------------------------------
GLOBAL RESETS
------------------------------------- */
img {
border: none;
-ms-interpolation-mode: bicubic;
max-width: 100%;
}
body {
background-color: #f6f6f6;
font-family: sans-serif;
-webkit-font-smoothing: antialiased;
font-size: 14px;
line-height: 1.4;
margin: 0;
padding: 0;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
table {
border-collapse: separate;
mso-table-lspace: 0pt;
width: 100%;
}
table td {
font-family: sans-serif;
font-size: 14px;
vertical-align: top;
}
/* -------------------------------------
BODY & CONTAINER
------------------------------------- */
.body {
background-color: #f6f6f6;
width: 100%;
}
/* Set a max-width, and make it display as block so it will automatically stretch to that width, but will also shrink
down on a phone or something */
.container {
display: block;
Margin: 0 auto !important;
/* makes it centered */
max-width: 580px;
padding: 10px;
width: 580px;
}
/* This should also be a block element, so that it will fill 100% of the .container */
.content {
box-sizing: border-box;
display: block;
Margin: 0 auto;
max-width: 580px;
padding: 10px;
}
/* -------------------------------------
HEADER, FOOTER, MAIN
------------------------------------- */
.main {
background: #ffffff;
border-radius: 3px;
width: 100%;
}
.wrapper {
box-sizing: border-box;
padding: 20px;
}
.content-block {
padding-bottom: 10px;
padding-top: 10px;
}
.footer {
clear: both;
Margin-top: 10px;
text-align: center;
width: 100%;
}
.footer td,
.footer p,
.footer span,
.footer a {
color: #999999;
font-size: 12px;
text-align: center;
}
/* -------------------------------------
TYPOGRAPHY
------------------------------------- */
h1,
h2,
h3,
h4 {
color: #000000;
font-family: sans-serif;
font-weight: 400;
line-height: 1.4;
margin: 0;
Margin-bottom: 30px;
}
h1 {
font-size: 35px;
font-weight: 300;
text-align: center;
text-transform: capitalize;
}
p,
ul,
ol {
font-family: sans-serif;
font-size: 14px;
font-weight: normal;
margin: 0;
Margin-bottom: 15px;
}
p li,
ul li,
ol li {
list-style-position: inside;
margin-left: 5px;
}
a {
color: #3498db;
text-decoration: underline;
}
/* -------------------------------------
BUTTONS
------------------------------------- */
.btn {
box-sizing: border-box;
width: 100%;
}
.btn>tbody>tr>td {
padding-bottom: 15px;
}
.btn table {
width: auto;
}
.btn table td {
background-color: #ffffff;
border-radius: 5px;
text-align: center;
}
.btn a {
background-color: #ffffff;
border: solid 1px #3498db;
border-radius: 5px;
box-sizing: border-box;
color: #3498db;
cursor: pointer;
display: inline-block;
font-size: 14px;
font-weight: bold;
margin: 0;
padding: 12px 25px;
text-decoration: none;
text-transform: capitalize;
}
.btn-primary table td {
background-color: #3498db;
}
.btn-primary a {
background-color: #3498db;
border-color: #3498db;
color: #ffffff;
}
/* -------------------------------------
OTHER STYLES THAT MIGHT BE USEFUL
------------------------------------- */
.last {
margin-bottom: 0;
}
.first {
margin-top: 0;
}
.align-center {
text-align: center;
}
.align-right {
text-align: right;
}
.align-left {
text-align: left;
}
.clear {
clear: both;
}
.mt0 {
margin-top: 0;
}
.mb0 {
margin-bottom: 0;
}
.preheader {
color: transparent;
display: none;
height: 0;
max-height: 0;
max-width: 0;
opacity: 0;
overflow: hidden;
visibility: hidden;
width: 0;
}
.powered-by a {
text-decoration: none;
}
hr {
border: 0;
border-bottom: 1px solid #f6f6f6;
Margin: 20px 0;
}
/* -------------------------------------
RESPONSIVE AND MOBILE FRIENDLY STYLES
------------------------------------- */
@media only screen and (max-width: 620px) {
table[class=body] h1 {
font-size: 28px !important;
margin-bottom: 10px !important;
}
table[class=body] p,
table[class=body] ul,
table[class=body] ol,
table[class=body] td,
table[class=body] span,
table[class=body] a {
font-size: 16px !important;
}
table[class=body] .wrapper,
table[class=body] .article {
padding: 10px !important;
}
table[class=body] .content {
padding: 0 !important;
}
table[class=body] .container {
padding: 0 !important;
width: 100% !important;
}
table[class=body] .main {
border-left-width: 0 !important;
border-radius: 0 !important;
border-right-width: 0 !important;
}
table[class=body] .btn table {
width: 100% !important;
}
table[class=body] .btn a {
width: 100% !important;
}
table[class=body] .img-responsive {
height: auto !important;
max-width: 100% !important;
width: auto !important;
}
}
/* -------------------------------------
PRESERVE THESE STYLES IN THE HEAD
------------------------------------- */
@media all {
.ExternalClass {
width: 100%;
}
.ExternalClass,
.ExternalClass p,
.ExternalClass span,
.ExternalClass font,
.ExternalClass td,
.ExternalClass div {
line-height: 100%;
}
.apple-link a {
color: inherit !important;
font-family: inherit !important;
font-size: inherit !important;
font-weight: inherit !important;
line-height: inherit !important;
text-decoration: none !important;
}
.btn-primary table td:hover {
background-color: #34495e !important;
}
.btn-primary a:hover {
background-color: #34495e !important;
border-color: #34495e !important;
}
}
ol {
padding: 0 0 0 1em;
}
ol li {
margin: 1em 0;
}
</style>
</head>
<body class="">
<table border="0" cellpadding="0" cellspacing="0" class="body">
<tr>
<td>&nbsp;</td>
<td class="container">
<div class="content">
<table class="main">
<!-- START MAIN CONTENT AREA -->
<tr>
<td class="wrapper">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<p class="mb0"><b>Dear,</b></p>
<p class="mb0">{{customer_name}}</p>
<p>{{customer_phone}}</p>
<p>Thank you fot choosing us! We're absolutelty thrilled and can't wait to embark on this exciting day with you. See you soon for fun times ahead</p>
<p class="mb0">Here's a quick recap of your invoice:</p>
<p class="mb0">Booking Date: {{booking_date}}</p>
<p>Total Invoice: {{payment_total}}</p>
<p class="mb0">Just a friendly reminder that your invoice will expire on {{expire_date}}</p>
<p>To keep things running smoothly, please ensure your payment is completed before this data</p>
<p>
For your convenience, here is a list of our account details:
<ul>
{{#each payment_methods}}
<li>
<p>{{issuer_name}} {{account_number}} a/n >{{account_name}}</p>
</li>
{{/each}}
</ul>
</p>
<p class="mb0">Once you've made the payment, please kindly email or send the proof of payment so we can proceed with your booking promptly</p>
<p class="mb0">If you have any questions or need assistance, feel free to reach out to our support team at</p>
<b>{{phone_cs}}</b>
<br><br>
<b>Best Regrads,</b><br>
<b>WEplayground</b>
</td>
</tr>
</table>
</td>
</tr>
<!-- END MAIN CONTENT AREA -->
</table>
</div>
</td>
<td>&nbsp;</td>
</tr>
</table>
</body>
</html>

View File

@ -4,7 +4,7 @@
<head>
<meta name="viewport" content="width=device-width" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Email Ibunda</title>
<title>Email Confirmation</title>
<style>
/* -------------------------------------
GLOBAL RESETS
@ -364,36 +364,32 @@
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<p>Halo {{customer_name}}</p>
<p>Pemesanan tiket telah berhasil dengan nomor invoice {{invoice_code}}, Silahkan lakukan pembayaran dengan klik button dibawah ini</p>
</td>
</tr>
<tr>
<td align="center"
style="font-family: 'Lato', sans-serif; font-size:22px; color:#e5eaf5; line-height:24px; font-weight: 600;">
<a href="{{payment_midtrans_url}}">Lanjutkan Pembayaran</a>
<p class="mb0"><b>Dear,</b></p>
<p class="mb0">{{customer_name}}</p>
<p>{{customer_phone}}</p>
<p>We hope this message finds you well!</p>
<p class="mb0">Uh-oh! it looks like your invoice, dated {{invoice_date}}, has officially expired as of {{expired_date}}</p>
<p>But no worries, we can fix this together!</p>
<p class="mb0">To keep the good times rolling, our friendly support team is just a call away at</p>
<b>{{phone_cs}}</b>
<p class="mb0">Here are the details of the expired invoice:</p>
<p class="mb0">Booking Date: {{booking_date}}</p>
<p>Total Invoice: {{total_payment}}</p>
<br><br>
<b>Best Regrads,</b><br>
<b>WEplayground</b>
</td>
</tr>
</table>
</td>
</tr>
<!-- END MAIN CONTENT AREA -->
</table>
<!-- START FOOTER -->
<div class="footer">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="content-block powered-by">
Powered by Skyworld
</td>
</tr>
</table>
</div>
<!-- END FOOTER -->
<!-- END CENTERED WHITE CONTAINER -->
</div>
</td>
<td>&nbsp;</td>

View File

@ -0,0 +1,419 @@
<!doctype html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Email Confirmation</title>
<style>
/* -------------------------------------
GLOBAL RESETS
------------------------------------- */
img {
border: none;
-ms-interpolation-mode: bicubic;
max-width: 100%;
}
body {
background-color: #f6f6f6;
font-family: sans-serif;
-webkit-font-smoothing: antialiased;
font-size: 14px;
line-height: 1.4;
margin: 0;
padding: 0;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
table {
border-collapse: separate;
mso-table-lspace: 0pt;
width: 100%;
}
table td {
font-family: sans-serif;
font-size: 14px;
vertical-align: top;
}
/* -------------------------------------
BODY & CONTAINER
------------------------------------- */
.body {
background-color: #f6f6f6;
width: 100%;
}
/* Set a max-width, and make it display as block so it will automatically stretch to that width, but will also shrink
down on a phone or something */
.container {
display: block;
Margin: 0 auto !important;
/* makes it centered */
max-width: 580px;
padding: 10px;
width: 580px;
}
/* This should also be a block element, so that it will fill 100% of the .container */
.content {
box-sizing: border-box;
display: block;
Margin: 0 auto;
max-width: 580px;
padding: 10px;
}
/* -------------------------------------
HEADER, FOOTER, MAIN
------------------------------------- */
.main {
background: #ffffff;
border-radius: 3px;
width: 100%;
}
.wrapper {
box-sizing: border-box;
padding: 20px;
}
.content-block {
padding-bottom: 10px;
padding-top: 10px;
}
.footer {
clear: both;
Margin-top: 10px;
text-align: center;
width: 100%;
}
.footer td,
.footer p,
.footer span,
.footer a {
color: #999999;
font-size: 12px;
text-align: center;
}
/* -------------------------------------
TYPOGRAPHY
------------------------------------- */
h1,
h2,
h3,
h4 {
color: #000000;
font-family: sans-serif;
font-weight: 400;
line-height: 1.4;
margin: 0;
Margin-bottom: 30px;
}
h1 {
font-size: 35px;
font-weight: 300;
text-align: center;
text-transform: capitalize;
}
p,
ul,
ol {
font-family: sans-serif;
font-size: 14px;
font-weight: normal;
margin: 0;
Margin-bottom: 15px;
}
p li,
ul li,
ol li {
list-style-position: inside;
margin-left: 5px;
}
a {
color: #3498db;
text-decoration: underline;
}
/* -------------------------------------
BUTTONS
------------------------------------- */
.btn {
box-sizing: border-box;
width: 100%;
}
.btn>tbody>tr>td {
padding-bottom: 15px;
}
.btn table {
width: auto;
}
.btn table td {
background-color: #ffffff;
border-radius: 5px;
text-align: center;
}
.btn a {
background-color: #ffffff;
border: solid 1px #3498db;
border-radius: 5px;
box-sizing: border-box;
color: #3498db;
cursor: pointer;
display: inline-block;
font-size: 14px;
font-weight: bold;
margin: 0;
padding: 12px 25px;
text-decoration: none;
text-transform: capitalize;
}
.btn-primary table td {
background-color: #3498db;
}
.btn-primary a {
background-color: #3498db;
border-color: #3498db;
color: #ffffff;
}
/* -------------------------------------
OTHER STYLES THAT MIGHT BE USEFUL
------------------------------------- */
.last {
margin-bottom: 0;
}
.first {
margin-top: 0;
}
.align-center {
text-align: center;
}
.align-right {
text-align: right;
}
.align-left {
text-align: left;
}
.clear {
clear: both;
}
.mt0 {
margin-top: 0;
}
.mb0 {
margin-bottom: 0;
}
.preheader {
color: transparent;
display: none;
height: 0;
max-height: 0;
max-width: 0;
opacity: 0;
overflow: hidden;
visibility: hidden;
width: 0;
}
.powered-by a {
text-decoration: none;
}
hr {
border: 0;
border-bottom: 1px solid #f6f6f6;
Margin: 20px 0;
}
/* -------------------------------------
RESPONSIVE AND MOBILE FRIENDLY STYLES
------------------------------------- */
@media only screen and (max-width: 620px) {
table[class=body] h1 {
font-size: 28px !important;
margin-bottom: 10px !important;
}
table[class=body] p,
table[class=body] ul,
table[class=body] ol,
table[class=body] td,
table[class=body] span,
table[class=body] a {
font-size: 16px !important;
}
table[class=body] .wrapper,
table[class=body] .article {
padding: 10px !important;
}
table[class=body] .content {
padding: 0 !important;
}
table[class=body] .container {
padding: 0 !important;
width: 100% !important;
}
table[class=body] .main {
border-left-width: 0 !important;
border-radius: 0 !important;
border-right-width: 0 !important;
}
table[class=body] .btn table {
width: 100% !important;
}
table[class=body] .btn a {
width: 100% !important;
}
table[class=body] .img-responsive {
height: auto !important;
max-width: 100% !important;
width: auto !important;
}
}
/* -------------------------------------
PRESERVE THESE STYLES IN THE HEAD
------------------------------------- */
@media all {
.ExternalClass {
width: 100%;
}
.ExternalClass,
.ExternalClass p,
.ExternalClass span,
.ExternalClass font,
.ExternalClass td,
.ExternalClass div {
line-height: 100%;
}
.apple-link a {
color: inherit !important;
font-family: inherit !important;
font-size: inherit !important;
font-weight: inherit !important;
line-height: inherit !important;
text-decoration: none !important;
}
.btn-primary table td:hover {
background-color: #34495e !important;
}
.btn-primary a:hover {
background-color: #34495e !important;
border-color: #34495e !important;
}
}
ol {
padding: 0 0 0 1em;
}
ol li {
margin: 1em 0;
}
</style>
</head>
<body class="">
<table border="0" cellpadding="0" cellspacing="0" class="body">
<tr>
<td>&nbsp;</td>
<td class="container">
<div class="content">
<table class="main">
<!-- START MAIN CONTENT AREA -->
<tr>
<td class="wrapper">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<p class="mb0"><b>Dear,</b></p>
<p class="mb0">{{customer_name}}</p>
<p>{{customer_phone}}</p>
<p>Thank you fot choosing us! We're absolutelty thrilled and can't wait to embark on this exciting day with you. See you soon for fun times ahead</p>
<p class="mb0">Here's a quick recap of your invoice:</p>
<p class="mb0">Booking Date: {{booking_date}}</p>
<p>Total Invoice: {{payment_total}}</p>
<p class="mb0">Just a friendly reminder that your invoice will expire on {{expire_date}}</p>
<p>To keep things running smoothly, please ensure your payment is completed before this data</p>
<p class="mb0">For your convenience, here is a list of our account details:</p>
<a href="{{payment_midtrans_url}}">{{payment_midtrans_url}}</a>
<br><br>
<p class="mb0">Once you've made the payment, please kindly email or send the proof of payment so we can proceed with your booking promptly</p>
<p class="mb0">If you have any questions or need assistance, feel free to reach out to our support team at</p>
<b>{{phone_cs}}</b>
<br><br>
<b>Best Regrads,</b><br>
<b>WEplayground</b>
</td>
</tr>
</table>
</td>
</tr>
<!-- END MAIN CONTENT AREA -->
</table>
<!-- START FOOTER -->
<!-- <div class="footer">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="content-block powered-by">
Powered by Skyworld
</td>
</tr>
</table>
</div> -->
<!-- END FOOTER -->
<!-- END CENTERED WHITE CONTAINER -->
</div>
</td>
<td>&nbsp;</td>
</tr>
</table>
</body>
</html>

View File

@ -0,0 +1,412 @@
<!doctype html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Email Confirmation</title>
<style>
/* -------------------------------------
GLOBAL RESETS
------------------------------------- */
img {
border: none;
-ms-interpolation-mode: bicubic;
max-width: 100%;
}
body {
background-color: #f6f6f6;
font-family: sans-serif;
-webkit-font-smoothing: antialiased;
font-size: 14px;
line-height: 1.4;
margin: 0;
padding: 0;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
table {
border-collapse: separate;
mso-table-lspace: 0pt;
width: 100%;
}
table td {
font-family: sans-serif;
font-size: 14px;
vertical-align: top;
}
/* -------------------------------------
BODY & CONTAINER
------------------------------------- */
.body {
background-color: #f6f6f6;
width: 100%;
}
/* Set a max-width, and make it display as block so it will automatically stretch to that width, but will also shrink
down on a phone or something */
.container {
display: block;
Margin: 0 auto !important;
/* makes it centered */
max-width: 580px;
padding: 10px;
width: 580px;
}
/* This should also be a block element, so that it will fill 100% of the .container */
.content {
box-sizing: border-box;
display: block;
Margin: 0 auto;
max-width: 580px;
padding: 10px;
}
/* -------------------------------------
HEADER, FOOTER, MAIN
------------------------------------- */
.main {
background: #ffffff;
border-radius: 3px;
width: 100%;
}
.wrapper {
box-sizing: border-box;
padding: 20px;
}
.content-block {
padding-bottom: 10px;
padding-top: 10px;
}
.footer {
clear: both;
Margin-top: 10px;
text-align: center;
width: 100%;
}
.footer td,
.footer p,
.footer span,
.footer a {
color: #999999;
font-size: 12px;
text-align: center;
}
/* -------------------------------------
TYPOGRAPHY
------------------------------------- */
h1,
h2,
h3,
h4 {
color: #000000;
font-family: sans-serif;
font-weight: 400;
line-height: 1.4;
margin: 0;
Margin-bottom: 30px;
}
h1 {
font-size: 35px;
font-weight: 300;
text-align: center;
text-transform: capitalize;
}
p,
ul,
ol {
font-family: sans-serif;
font-size: 14px;
font-weight: normal;
margin: 0;
Margin-bottom: 15px;
}
p li,
ul li,
ol li {
list-style-position: inside;
margin-left: 5px;
}
a {
color: #3498db;
text-decoration: underline;
}
/* -------------------------------------
BUTTONS
------------------------------------- */
.btn {
box-sizing: border-box;
width: 100%;
}
.btn>tbody>tr>td {
padding-bottom: 15px;
}
.btn table {
width: auto;
}
.btn table td {
background-color: #ffffff;
border-radius: 5px;
text-align: center;
}
.btn a {
background-color: #ffffff;
border: solid 1px #3498db;
border-radius: 5px;
box-sizing: border-box;
color: #3498db;
cursor: pointer;
display: inline-block;
font-size: 14px;
font-weight: bold;
margin: 0;
padding: 12px 25px;
text-decoration: none;
text-transform: capitalize;
}
.btn-primary table td {
background-color: #3498db;
}
.btn-primary a {
background-color: #3498db;
border-color: #3498db;
color: #ffffff;
}
/* -------------------------------------
OTHER STYLES THAT MIGHT BE USEFUL
------------------------------------- */
.last {
margin-bottom: 0;
}
.first {
margin-top: 0;
}
.align-center {
text-align: center;
}
.align-right {
text-align: right;
}
.align-left {
text-align: left;
}
.clear {
clear: both;
}
.mt0 {
margin-top: 0;
}
.mb0 {
margin-bottom: 0;
}
.preheader {
color: transparent;
display: none;
height: 0;
max-height: 0;
max-width: 0;
opacity: 0;
overflow: hidden;
visibility: hidden;
width: 0;
}
.powered-by a {
text-decoration: none;
}
hr {
border: 0;
border-bottom: 1px solid #f6f6f6;
Margin: 20px 0;
}
/* -------------------------------------
RESPONSIVE AND MOBILE FRIENDLY STYLES
------------------------------------- */
@media only screen and (max-width: 620px) {
table[class=body] h1 {
font-size: 28px !important;
margin-bottom: 10px !important;
}
table[class=body] p,
table[class=body] ul,
table[class=body] ol,
table[class=body] td,
table[class=body] span,
table[class=body] a {
font-size: 16px !important;
}
table[class=body] .wrapper,
table[class=body] .article {
padding: 10px !important;
}
table[class=body] .content {
padding: 0 !important;
}
table[class=body] .container {
padding: 0 !important;
width: 100% !important;
}
table[class=body] .main {
border-left-width: 0 !important;
border-radius: 0 !important;
border-right-width: 0 !important;
}
table[class=body] .btn table {
width: 100% !important;
}
table[class=body] .btn a {
width: 100% !important;
}
table[class=body] .img-responsive {
height: auto !important;
max-width: 100% !important;
width: auto !important;
}
}
/* -------------------------------------
PRESERVE THESE STYLES IN THE HEAD
------------------------------------- */
@media all {
.ExternalClass {
width: 100%;
}
.ExternalClass,
.ExternalClass p,
.ExternalClass span,
.ExternalClass font,
.ExternalClass td,
.ExternalClass div {
line-height: 100%;
}
.apple-link a {
color: inherit !important;
font-family: inherit !important;
font-size: inherit !important;
font-weight: inherit !important;
line-height: inherit !important;
text-decoration: none !important;
}
.btn-primary table td:hover {
background-color: #34495e !important;
}
.btn-primary a:hover {
background-color: #34495e !important;
border-color: #34495e !important;
}
}
ol {
padding: 0 0 0 1em;
}
ol li {
margin: 1em 0;
}
</style>
</head>
<body class="">
<table border="0" cellpadding="0" cellspacing="0" class="body">
<tr>
<td>&nbsp;</td>
<td class="container">
<div class="content">
<table class="main">
<!-- START MAIN CONTENT AREA -->
<tr>
<td class="wrapper">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<p class="mb0"><b>Dear,</b></p>
<p class="mb0">{{customer_name}}</p>
<p>{{customer_phone}}</p>
<p class="mb0">We are excited to inform you that your payment has been successfully received!</p>
<p class="mb0">Attached to this email, you will find your confirmatin receipt</p>
<p class="mb0">Please keep this safe as you will need to show it at the entrance upon your arrival</p>
<p>It's your golden ticket to all the fun and excitement awaiting you!</p>
<br>
<p class="mb0">Here's a quick recap:</p>
<p class="mb0">Booking Date: {{booking_date}}</p>
<p class="mb0">Invoice Code: {{invoice_code}}</p>
<p class="mb0">Payment Date: {{payment_date}}</p>
<p class="mb0">Payment Code: {{payment_code}}</p>
<p class="mb0">Payment Via: {{payment_via}}</p>
<p class="mb0">Account No: {{account_no}}</p>
<p>On Behalf Of: {{account_name}}</p>
<br>
<p class="mb0">If you have any questions or need assistance, feel free to reach out to our support team at</p>
<b>{{phone_cs}}</b>
<br>
<p class="mb0">Font forget to bring a smile and your confirmation receipt (attached) for a smooth entry</p>
<p>We can't wait to see you and ensure you have an amazing time with us!</p>
<br><br>
<b>Best Regrads,</b><br>
<b>WEplayground</b>
</td>
</tr>
</table>
</td>
</tr>
<!-- END MAIN CONTENT AREA -->
</table>
</div>
</td>
<td>&nbsp;</td>
</tr>
</table>
</body>
</html>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,415 @@
<!doctype html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Email Confirmation</title>
<style>
/* -------------------------------------
GLOBAL RESETS
------------------------------------- */
img {
border: none;
-ms-interpolation-mode: bicubic;
max-width: 100%;
}
body {
background-color: #f6f6f6;
font-family: sans-serif;
-webkit-font-smoothing: antialiased;
font-size: 14px;
line-height: 1.4;
margin: 0;
padding: 0;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
table {
border-collapse: separate;
mso-table-lspace: 0pt;
width: 100%;
}
table td {
font-family: sans-serif;
font-size: 14px;
vertical-align: top;
}
/* -------------------------------------
BODY & CONTAINER
------------------------------------- */
.body {
background-color: #f6f6f6;
width: 100%;
}
/* Set a max-width, and make it display as block so it will automatically stretch to that width, but will also shrink
down on a phone or something */
.container {
display: block;
Margin: 0 auto !important;
/* makes it centered */
max-width: 580px;
padding: 10px;
width: 580px;
}
/* This should also be a block element, so that it will fill 100% of the .container */
.content {
box-sizing: border-box;
display: block;
Margin: 0 auto;
max-width: 580px;
padding: 10px;
}
/* -------------------------------------
HEADER, FOOTER, MAIN
------------------------------------- */
.main {
background: #ffffff;
border-radius: 3px;
width: 100%;
}
.wrapper {
box-sizing: border-box;
padding: 20px;
}
.content-block {
padding-bottom: 10px;
padding-top: 10px;
}
.footer {
clear: both;
Margin-top: 10px;
text-align: center;
width: 100%;
}
.footer td,
.footer p,
.footer span,
.footer a {
color: #999999;
font-size: 12px;
text-align: center;
}
/* -------------------------------------
TYPOGRAPHY
------------------------------------- */
h1,
h2,
h3,
h4 {
color: #000000;
font-family: sans-serif;
font-weight: 400;
line-height: 1.4;
margin: 0;
Margin-bottom: 30px;
}
h1 {
font-size: 35px;
font-weight: 300;
text-align: center;
text-transform: capitalize;
}
p,
ul,
ol {
font-family: sans-serif;
font-size: 14px;
font-weight: normal;
margin: 0;
Margin-bottom: 15px;
}
p li,
ul li,
ol li {
list-style-position: inside;
margin-left: 5px;
}
a {
color: #3498db;
text-decoration: underline;
}
/* -------------------------------------
BUTTONS
------------------------------------- */
.btn {
box-sizing: border-box;
width: 100%;
}
.btn>tbody>tr>td {
padding-bottom: 15px;
}
.btn table {
width: auto;
}
.btn table td {
background-color: #ffffff;
border-radius: 5px;
text-align: center;
}
.btn a {
background-color: #ffffff;
border: solid 1px #3498db;
border-radius: 5px;
box-sizing: border-box;
color: #3498db;
cursor: pointer;
display: inline-block;
font-size: 14px;
font-weight: bold;
margin: 0;
padding: 12px 25px;
text-decoration: none;
text-transform: capitalize;
}
.btn-primary table td {
background-color: #3498db;
}
.btn-primary a {
background-color: #3498db;
border-color: #3498db;
color: #ffffff;
}
/* -------------------------------------
OTHER STYLES THAT MIGHT BE USEFUL
------------------------------------- */
.last {
margin-bottom: 0;
}
.first {
margin-top: 0;
}
.align-center {
text-align: center;
}
.align-right {
text-align: right;
}
.align-left {
text-align: left;
}
.clear {
clear: both;
}
.mt0 {
margin-top: 0;
}
.mb0 {
margin-bottom: 0;
}
.preheader {
color: transparent;
display: none;
height: 0;
max-height: 0;
max-width: 0;
opacity: 0;
overflow: hidden;
visibility: hidden;
width: 0;
}
.powered-by a {
text-decoration: none;
}
hr {
border: 0;
border-bottom: 1px solid #f6f6f6;
Margin: 20px 0;
}
/* -------------------------------------
RESPONSIVE AND MOBILE FRIENDLY STYLES
------------------------------------- */
@media only screen and (max-width: 620px) {
table[class=body] h1 {
font-size: 28px !important;
margin-bottom: 10px !important;
}
table[class=body] p,
table[class=body] ul,
table[class=body] ol,
table[class=body] td,
table[class=body] span,
table[class=body] a {
font-size: 16px !important;
}
table[class=body] .wrapper,
table[class=body] .article {
padding: 10px !important;
}
table[class=body] .content {
padding: 0 !important;
}
table[class=body] .container {
padding: 0 !important;
width: 100% !important;
}
table[class=body] .main {
border-left-width: 0 !important;
border-radius: 0 !important;
border-right-width: 0 !important;
}
table[class=body] .btn table {
width: 100% !important;
}
table[class=body] .btn a {
width: 100% !important;
}
table[class=body] .img-responsive {
height: auto !important;
max-width: 100% !important;
width: auto !important;
}
}
/* -------------------------------------
PRESERVE THESE STYLES IN THE HEAD
------------------------------------- */
@media all {
.ExternalClass {
width: 100%;
}
.ExternalClass,
.ExternalClass p,
.ExternalClass span,
.ExternalClass font,
.ExternalClass td,
.ExternalClass div {
line-height: 100%;
}
.apple-link a {
color: inherit !important;
font-family: inherit !important;
font-size: inherit !important;
font-weight: inherit !important;
line-height: inherit !important;
text-decoration: none !important;
}
.btn-primary table td:hover {
background-color: #34495e !important;
}
.btn-primary a:hover {
background-color: #34495e !important;
border-color: #34495e !important;
}
}
ol {
padding: 0 0 0 1em;
}
ol li {
margin: 1em 0;
}
</style>
</head>
<body class="">
<table border="0" cellpadding="0" cellspacing="0" class="body">
<tr>
<td>&nbsp;</td>
<td class="container">
<div class="content">
<table class="main">
<!-- START MAIN CONTENT AREA -->
<tr>
<td class="wrapper">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<p class="mb0"><b>Dear,</b></p>
<p class="mb0">{{customer_name}}</p>
<p>{{customer_phone}}</p>
<p class="mb-0">Good News!</p>
<p>We've successfully processed your refund for:</p>
<p class="mb0">Here are the details of your refund:</p>
<p class="mb0">Transaction Date: <b>{{booking_date}}</b></p>
<p class="mb0">Transaction Code: <b>{{invoice_code}}</b></p>
<p class="mb0">Total Refund: <b>{{refund.refund_total}}</b></p>
<p>{{{refund_items}}}</p>
<p class="mb0">Transaction Number: <b>{{invoice_code}}</b></p>
<p class="mb0">Refund Processed Date: <b>{{refund.refund_date}}</b></p>
<p class="mb0">Bank Account: <b>{{refund.bank_name}}</b></p>
<p class="mb0">Account Number: <b>{{refund.bank_account_number}}</b></p>
<p>Account Name: <b>{{refund.bank_account_name}}</b></p>
<p class="mb0">We hope this helps make things right, and we're here to assist if you need anything else</p>
<p>You should see the refund in your account within 3 business days</p>
<p class="mb0">Thank you for your patience and understanding</p>
<p>If you have any questions or need further assistance, don't hesitate to reach out us at</p>
<b>{{phone_cs}}</b>
<br>
<p class="mb0">Thank you and we can't wait to see you and make sure you have an amazing time!</p>
<br><br>
<b>Best Regrads,</b><br>
<b>WEplayground</b>
</td>
</tr>
</table>
</td>
</tr>
<!-- END MAIN CONTENT AREA -->
</table>
</div>
</td>
<td>&nbsp;</td>
</tr>
</table>
</body>
</html>

View File

@ -0,0 +1,409 @@
<!doctype html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Email Confirmation</title>
<style>
/* -------------------------------------
GLOBAL RESETS
------------------------------------- */
img {
border: none;
-ms-interpolation-mode: bicubic;
max-width: 100%;
}
body {
background-color: #f6f6f6;
font-family: sans-serif;
-webkit-font-smoothing: antialiased;
font-size: 14px;
line-height: 1.4;
margin: 0;
padding: 0;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
table {
border-collapse: separate;
mso-table-lspace: 0pt;
width: 100%;
}
table td {
font-family: sans-serif;
font-size: 14px;
vertical-align: top;
}
/* -------------------------------------
BODY & CONTAINER
------------------------------------- */
.body {
background-color: #f6f6f6;
width: 100%;
}
/* Set a max-width, and make it display as block so it will automatically stretch to that width, but will also shrink
down on a phone or something */
.container {
display: block;
Margin: 0 auto !important;
/* makes it centered */
max-width: 580px;
padding: 10px;
width: 580px;
}
/* This should also be a block element, so that it will fill 100% of the .container */
.content {
box-sizing: border-box;
display: block;
Margin: 0 auto;
max-width: 580px;
padding: 10px;
}
/* -------------------------------------
HEADER, FOOTER, MAIN
------------------------------------- */
.main {
background: #ffffff;
border-radius: 3px;
width: 100%;
}
.wrapper {
box-sizing: border-box;
padding: 20px;
}
.content-block {
padding-bottom: 10px;
padding-top: 10px;
}
.footer {
clear: both;
Margin-top: 10px;
text-align: center;
width: 100%;
}
.footer td,
.footer p,
.footer span,
.footer a {
color: #999999;
font-size: 12px;
text-align: center;
}
/* -------------------------------------
TYPOGRAPHY
------------------------------------- */
h1,
h2,
h3,
h4 {
color: #000000;
font-family: sans-serif;
font-weight: 400;
line-height: 1.4;
margin: 0;
Margin-bottom: 30px;
}
h1 {
font-size: 35px;
font-weight: 300;
text-align: center;
text-transform: capitalize;
}
p,
ul,
ol {
font-family: sans-serif;
font-size: 14px;
font-weight: normal;
margin: 0;
Margin-bottom: 15px;
}
p li,
ul li,
ol li {
list-style-position: inside;
margin-left: 5px;
}
a {
color: #3498db;
text-decoration: underline;
}
/* -------------------------------------
BUTTONS
------------------------------------- */
.btn {
box-sizing: border-box;
width: 100%;
}
.btn>tbody>tr>td {
padding-bottom: 15px;
}
.btn table {
width: auto;
}
.btn table td {
background-color: #ffffff;
border-radius: 5px;
text-align: center;
}
.btn a {
background-color: #ffffff;
border: solid 1px #3498db;
border-radius: 5px;
box-sizing: border-box;
color: #3498db;
cursor: pointer;
display: inline-block;
font-size: 14px;
font-weight: bold;
margin: 0;
padding: 12px 25px;
text-decoration: none;
text-transform: capitalize;
}
.btn-primary table td {
background-color: #3498db;
}
.btn-primary a {
background-color: #3498db;
border-color: #3498db;
color: #ffffff;
}
/* -------------------------------------
OTHER STYLES THAT MIGHT BE USEFUL
------------------------------------- */
.last {
margin-bottom: 0;
}
.first {
margin-top: 0;
}
.align-center {
text-align: center;
}
.align-right {
text-align: right;
}
.align-left {
text-align: left;
}
.clear {
clear: both;
}
.mt0 {
margin-top: 0;
}
.mb0 {
margin-bottom: 0;
}
.preheader {
color: transparent;
display: none;
height: 0;
max-height: 0;
max-width: 0;
opacity: 0;
overflow: hidden;
visibility: hidden;
width: 0;
}
.powered-by a {
text-decoration: none;
}
hr {
border: 0;
border-bottom: 1px solid #f6f6f6;
Margin: 20px 0;
}
/* -------------------------------------
RESPONSIVE AND MOBILE FRIENDLY STYLES
------------------------------------- */
@media only screen and (max-width: 620px) {
table[class=body] h1 {
font-size: 28px !important;
margin-bottom: 10px !important;
}
table[class=body] p,
table[class=body] ul,
table[class=body] ol,
table[class=body] td,
table[class=body] span,
table[class=body] a {
font-size: 16px !important;
}
table[class=body] .wrapper,
table[class=body] .article {
padding: 10px !important;
}
table[class=body] .content {
padding: 0 !important;
}
table[class=body] .container {
padding: 0 !important;
width: 100% !important;
}
table[class=body] .main {
border-left-width: 0 !important;
border-radius: 0 !important;
border-right-width: 0 !important;
}
table[class=body] .btn table {
width: 100% !important;
}
table[class=body] .btn a {
width: 100% !important;
}
table[class=body] .img-responsive {
height: auto !important;
max-width: 100% !important;
width: auto !important;
}
}
/* -------------------------------------
PRESERVE THESE STYLES IN THE HEAD
------------------------------------- */
@media all {
.ExternalClass {
width: 100%;
}
.ExternalClass,
.ExternalClass p,
.ExternalClass span,
.ExternalClass font,
.ExternalClass td,
.ExternalClass div {
line-height: 100%;
}
.apple-link a {
color: inherit !important;
font-family: inherit !important;
font-size: inherit !important;
font-weight: inherit !important;
line-height: inherit !important;
text-decoration: none !important;
}
.btn-primary table td:hover {
background-color: #34495e !important;
}
.btn-primary a:hover {
background-color: #34495e !important;
border-color: #34495e !important;
}
}
ol {
padding: 0 0 0 1em;
}
ol li {
margin: 1em 0;
}
</style>
</head>
<body class="">
<table border="0" cellpadding="0" cellspacing="0" class="body">
<tr>
<td>&nbsp;</td>
<td class="container">
<div class="content">
<table class="main">
<!-- START MAIN CONTENT AREA -->
<tr>
<td class="wrapper">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<p class="mb0"><b>Dear,</b></p>
<p class="mb0">{{customer_name}}</p>
<p>{{customer_phone}}</p>
<p class="mb0">We're trully sorry for any inconvenience that led to this request</p>
<p>We've received your refund request for :</p>
<p class="mb0">Transaction Date: <b>{{booking_date}}</b></p>
<p class="mb0">Transaction Code: <b>{{invoice_code}}</b></p>
<p class="mb0">Refund Code: <b>{{refund.code}}</b></p>
<p class="mb0">Total Refund: <b>{{refund.refund_total}}</b></p>
<p>{{{refund_items}}}</p>
<p class="mb0">Your satisfaction is important to us, and we're commited to resolving this as quickly as possible</p>
<p class="mb0">Our team is already on it and will process your refund request promptly</p>
<p>We'll keep you updated and notify you once the refund has been processed</p>
<p class="mb0">If you have any questions or need assistance, feel free to reach out to our support team at</p>
<b>{{phone_cs}}</b>
<br>
<p class="mb0">Thank you for your patience and understanding</p>
<p>We appriciate your feedback and are here to make things right</p>
<br><br>
<b>Best Regrads,</b><br>
<b>WEplayground</b>
</td>
</tr>
</table>
</td>
</tr>
<!-- END MAIN CONTENT AREA -->
</table>
</div>
</td>
<td>&nbsp;</td>
</tr>
</table>
</body>
</html>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
assets/image/logo.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

BIN
assets/image/we.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 504 KiB

14
env/env.development vendored
View File

@ -24,8 +24,11 @@ CRON_EVERY_HOUR="0 * * * *"
EMAIL_HOST=smtp.gmail.com
EMAIL_POST=465
EMAIL_USER=developer@eigen.co.id
EMAIL_TOKEN=bitqkbkzjzfywxqx
EMAIL_USER=weplayground.app@gmail.com
EMAIL_TOKEN="sonv vwiu khse vtmv"
// nama email yang akan muncul ke user sebagai pengirim
EMAIL_SENDER=no-reply@eigen.co.id
MIDTRANS_URL=https://app.sandbox.midtrans.com
MIDTRANS_PRODUCTION=false
@ -37,3 +40,10 @@ ASSETS="https://asset.sky.eigen.co.id/"
GOOGLE_CALENDAR_KEY="AIzaSyCSg4P3uC9Z7kD1P4f3rf1BbBaz4Q-M55o"
GOOGLE_CALENDAR_ID="326464ac296874c7121825f5ef2e2799baa90b51da240f0045aae22beec10bd5@group.calendar.google.com"
SUPERSET_URL=https://dashboard.weplayground.eigen.co.id
SUPERSET_ADMIN_USERNAME=admin
SUPERSET_ADMIN_PASSWORD=admin
WHATSAPP_BUSINESS_ACCOUNT_NUMBER_ID=604883366037548
WHATSAPP_BUSINESS_ACCESS_TOKEN=EAAINOvRRiEEBO9yQsYDnYtjHZB7q1nZCwbBpRcxIGMDWajKZBtmWxNRKvPYkS95KQZBsZBOvSFyjiEg5CcCZBZBtaSZApxyV8fiA3cEyVwf7iVZBQP2YCTPRQZArMFeeXbO0uq5TGygmjsIz3M4YxcUHxPzKO4pKxIyxnzcoUZCqCSo1NqQSLVf3a0JyZAwgDXGL55dV

9
env/env.production vendored
View File

@ -25,7 +25,7 @@ CRON_EVERY_HOUR="0 * * * *"
EMAIL_HOST=smtp.gmail.com
EMAIL_POST=465
EMAIL_USER=weplayground.app@gmail.com
EMAIL_TOKEN=sonvvwiukhsevtmv
EMAIL_TOKEN="sonv vwiu khse vtmv"
MIDTRANS_URL=https://app.midtrans.com
MIDTRANS_PRODUCTION=true
@ -37,3 +37,10 @@ ASSETS="https://asset.sky.eigen.co.id/"
GOOGLE_CALENDAR_KEY="AIzaSyCSg4P3uC9Z7kD1P4f3rf1BbBaz4Q-M55o"
GOOGLE_CALENDAR_ID="326464ac296874c7121825f5ef2e2799baa90b51da240f0045aae22beec10bd5@group.calendar.google.com"
SUPERSET_URL=https://dashboard.weplayground.eigen.co.id
SUPERSET_ADMIN_USERNAME=admin
SUPERSET_ADMIN_PASSWORD=admin
WHATSAPP_BUSINESS_ACCOUNT_NUMBER_ID=604883366037548
WHATSAPP_BUSINESS_ACCESS_TOKEN=EAAINOvRRiEEBO9yQsYDnYtjHZB7q1nZCwbBpRcxIGMDWajKZBtmWxNRKvPYkS95KQZBsZBOvSFyjiEg5CcCZBZBtaSZApxyV8fiA3cEyVwf7iVZBQP2YCTPRQZArMFeeXbO0uq5TGygmjsIz3M4YxcUHxPzKO4pKxIyxnzcoUZCqCSo1NqQSLVf3a0JyZAwgDXGL55dV

View File

@ -28,6 +28,7 @@
},
"dependencies": {
"@faker-js/faker": "^8.4.1",
"@nestjs/axios": "^3.0.3",
"@nestjs/common": "^10.0.0",
"@nestjs/config": "^3.2.2",
"@nestjs/core": "^10.0.0",
@ -39,6 +40,7 @@
"@nestjs/typeorm": "^10.0.2",
"@types/multer": "^1.4.11",
"algebra.js": "^0.2.6",
"axios": "^1.7.5",
"bcrypt": "^5.1.1",
"class-transformer": "^0.5.1",
"class-validator": "^0.14.1",
@ -47,12 +49,14 @@
"exceljs": "^4.4.0",
"fs-extra": "^11.2.0",
"googleapis": "^140.0.0",
"gtts": "^0.2.1",
"handlebars": "^4.7.8",
"mathjs": "^13.0.2",
"midtrans-client": "^1.3.1",
"moment": "^2.30.1",
"nano": "^10.1.3",
"nodemailer": "^6.9.14",
"pdfmake": "^0.2.10",
"pg": "^8.11.5",
"plop": "^4.0.1",
"reflect-metadata": "^0.2.0",

View File

@ -44,7 +44,12 @@ import { ItemRateModel } from './modules/item-related/item-rate/data/models/item
import { GoogleCalendarModule } from './modules/configuration/google-calendar/google-calendar.module';
import { TransactionModule } from './modules/transaction/transaction/transaction.module';
import { TransactionModel } from './modules/transaction/transaction/data/models/transaction.model';
import { TransactionItemModel } from './modules/transaction/transaction/data/models/transaction-item.model';
import {
TransactionBreakdownTaxModel,
TransactionItemBreakdownModel,
TransactionItemModel,
TransactionItemTaxModel,
} from './modules/transaction/transaction/data/models/transaction-item.model';
import { TransactionTaxModel } from './modules/transaction/transaction/data/models/transaction-tax.model';
import { ReconciliationModule } from './modules/transaction/reconciliation/reconciliation.module';
import { ReportModule } from './modules/reports/report/report.module';
@ -70,6 +75,24 @@ import { BannerModule } from './modules/web-information/banner/banner.module';
import { BannerModel } from './modules/web-information/banner/data/models/banner.model';
import { MailModule } from './modules/configuration/mail/mail.module';
import { PosLogModel } from './modules/configuration/log/data/models/pos-log.model';
import { ExportModule } from './modules/configuration/export/export.module';
import { TransactionDemographyModel } from './modules/transaction/transaction/data/models/transaction-demography.model';
import { SupersetModule } from './modules/configuration/superset/superset.module';
import { GateScanModule } from './modules/gates/gate.module';
import { UserLoginModel } from './modules/user-related/user/data/models/user-login.model';
import { LogUserLoginModel } from './modules/configuration/log/data/models/log-user-login.model';
import { AuthService } from './core/guards/domain/services/auth.service';
import { ReportSummaryModule } from './modules/reports/report-summary/report-summary.module';
import { QueueModule } from './modules/queue/queue.module';
import {
QueueOrderModel,
QueueTicketModel,
QueueItemModel,
QueueModel,
} from './modules/queue/data/models/queue.model';
import { ItemQueueModule } from './modules/item-related/item-queue/item-queue.module';
import { ItemQueueModel } from './modules/item-related/item-queue/data/models/item-queue.model';
import { QueueBucketModel } from './modules/queue/data/models/queue-bucket.model';
@Module({
imports: [
@ -94,7 +117,9 @@ import { PosLogModel } from './modules/configuration/log/data/models/pos-log.mod
ItemModel,
ItemCategoryModel,
ItemRateModel,
ItemQueueModel,
LogModel,
LogUserLoginModel,
NewsModel,
PaymentMethodModel,
PosLogModel,
@ -108,13 +133,26 @@ import { PosLogModel } from './modules/configuration/log/data/models/pos-log.mod
TransactionModel,
TransactionItemModel,
TransactionTaxModel,
TransactionDemographyModel,
TransactionItemBreakdownModel,
TransactionItemTaxModel,
TransactionBreakdownTaxModel,
UserModel,
UserLoginModel,
VipCategoryModel,
VipCodeModel,
// report
ReportBookmarkModel,
ExportReportHistoryModel,
// Queue
QueueOrderModel,
QueueTicketModel,
QueueItemModel,
QueueModel,
QueueBucketModel,
],
synchronize: false,
}),
@ -123,6 +161,7 @@ import { PosLogModel } from './modules/configuration/log/data/models/pos-log.mod
CqrsModule,
CouchModule,
CronModule,
ExportModule,
GoogleCalendarModule,
LogModule,
MailModule,
@ -139,6 +178,7 @@ import { PosLogModel } from './modules/configuration/log/data/models/pos-log.mod
ItemCategoryModule,
ItemModule,
ItemRateModule,
ItemQueueModule,
// transaction
PaymentMethodModule,
@ -166,9 +206,18 @@ import { PosLogModel } from './modules/configuration/log/data/models/pos-log.mod
ReportModule,
ReportBookmarkModule,
ReportExportModule,
ReportSummaryModule,
// superset
SupersetModule,
GateScanModule,
QueueModule,
],
controllers: [],
providers: [
AuthService,
PrivilegeService,
/**
* By default all request from client will protect by JWT

View File

@ -7,10 +7,10 @@ import {
UnauthorizedException,
} from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import { Observable } from 'rxjs';
import { SessionService, UsersSession } from 'src/core/sessions';
import { UNPROTECTED_URL } from '../constants';
import { PrivilegeService } from './services/privilege.service';
import { AuthService } from './services/auth.service';
@Injectable({ scope: Scope.REQUEST })
export class JWTGuard implements CanActivate {
@ -18,14 +18,13 @@ export class JWTGuard implements CanActivate {
protected readonly session: SessionService,
protected readonly reflector: Reflector,
protected readonly privilege: PrivilegeService,
protected readonly authService: AuthService,
) {}
protected isPublic = false;
protected userSession: UsersSession;
canActivate(
context: ExecutionContext,
): boolean | Promise<boolean> | Observable<boolean> {
async canActivate(context: ExecutionContext) {
/**
* Check if access url is protected or not
* By default `isUnprotected` equals `false`
@ -61,9 +60,29 @@ export class JWTGuard implements CanActivate {
*/
try {
this.userSession = this.session.verifyToken(token);
await this.authService.verifyRegisteredLoginToken(token);
Logger.log(`Access from ${this.userSession.name}`, 'AuthGuard');
return true;
} catch (error) {
const expiredError = error.message;
if (expiredError === 'jwt expired') {
const [, body] = token.split('.');
const bodyToken = JSON.parse(atob(body));
const user = {
role: bodyToken.role,
user_id: bodyToken.id,
username: bodyToken.username,
user_privilege_id: bodyToken.user_privilege_id,
item_id: bodyToken.item_id,
item_name: bodyToken.item_name,
source: bodyToken.source,
};
this.authService.logoutUser(user, token);
}
throw new UnauthorizedException({
code: 10001,
message:

View File

@ -9,7 +9,7 @@ import { MAIN_MENU } from '../constants';
@Injectable()
export class RolesGuard extends JWTGuard {
async canActivate(context: ExecutionContext): Promise<boolean> {
super.canActivate(context);
await super.canActivate(context);
// jika endpoint tersebut bukan public, maka lakukan check lanjutan
if (!this.isPublic) {
@ -25,7 +25,7 @@ export class RolesGuard extends JWTGuard {
if (isNotAllow) {
throw new ForbiddenException({
statusCode: 10003,
message: `Forbidden Access, you don't have access to this module!`,
message: `Akses Terlarang, anda tidak punya akses ke module ini!`,
error: 'ACCESS_FORBIDDEN',
});
}

View File

@ -0,0 +1,78 @@
import {
HttpStatus,
Injectable,
Scope,
UnauthorizedException,
} from '@nestjs/common';
import { InjectDataSource } from '@nestjs/typeorm';
import {
CONNECTION_NAME,
OPERATION,
} from 'src/core/strings/constants/base.constants';
import { DataSource } from 'typeorm';
import { UserRole } from 'src/modules/user-related/user/constants';
import { UserModel } from 'src/modules/user-related/user/data/models/user.model';
import { AppSource, LogUserType } from 'src/core/helpers/constant';
import { EventBus } from '@nestjs/cqrs';
import { LogUserLoginEvent } from 'src/modules/configuration/log/domain/entities/log-user-login.event';
import { UserLoginModel } from 'src/modules/user-related/user/data/models/user-login.model';
interface UserEntity {
user_id: string;
username: string;
role: UserRole;
user_privilege_id: string;
item_id: string;
item_name: string;
source: AppSource;
}
@Injectable({ scope: Scope.REQUEST })
export class AuthService {
constructor(
@InjectDataSource(CONNECTION_NAME.DEFAULT)
protected readonly dataSource: DataSource,
private eventBus: EventBus,
) {}
get repository() {
return this.dataSource.getRepository(UserLoginModel);
}
async logoutUser(user: UserEntity, token: string) {
await this.repository.delete({ login_token: token });
const userLogout = {
type: LogUserType.logout,
created_at: new Date().getTime(),
name: user.username,
user_privilege_id: user.user_privilege_id,
...user,
};
this.eventBus.publish(
new LogUserLoginEvent({
id: user.user_id,
old: null,
data: userLogout,
user: userLogout as any,
description: 'Logout',
module: UserModel.name,
op: OPERATION.UPDATE,
}),
);
}
async verifyRegisteredLoginToken(token: string) {
const data = await this.repository.findOneBy({ login_token: token });
if (!data) {
throw new UnauthorizedException({
statusCode: HttpStatus.UNAUTHORIZED,
message: `Invalid token`,
error: 'Unauthorized',
});
}
}
}

View File

@ -52,7 +52,7 @@ export class PrivilegeService {
if (!moduleKey) {
throw new ForbiddenException({
statusCode: 10005,
message: `Forbidden Access, access Module is Require!`,
message: `Akses Terlarang, anda tidak punya akses ke module ini!`,
error: 'MODULE_KEY_NOT_FOUND',
});
}

View File

@ -0,0 +1,11 @@
export enum LogUserType {
login = 'login',
logout = 'logout',
}
export enum AppSource {
POS_ADMIN = 'POS_ADMIN',
POS_COUNTER = 'POS_COUNTER',
QUEUE_ADMIN = 'QUEUE_ADMIN',
QUEUE_CUSTOMER = 'QUEUE_CUSTOMER',
}

View File

@ -8,7 +8,9 @@ import { diskStorage } from 'multer';
const MB = 1024 * 1024;
const fileFilter = (req, file, callback) => {
if (file.mimetype.match(/\/(jpg|jpeg|png)$/)) {
if (
file.mimetype.match(/\/(jpg|jpeg|png|flv|mp4|m3u8|ts|3gp|mov|avi|wmv)$/)
) {
callback(null, true);
} else {
callback(

View File

@ -43,9 +43,9 @@ export class CheckDuplicateHelper {
if (data_exists > 0) {
throw new UnprocessableEntityException({
statusCode: HttpStatus.UNPROCESSABLE_ENTITY,
message: `Entity with ${columnCheck.column} : ${
message: `Gagal! Data dengan ${columnCheck.column} : ${
this.entity[columnCheck.column]
} already exist`,
} telah ada`,
error: 'Unprocessable Entity',
});
}

View File

@ -20,12 +20,16 @@ export class SpecificSearchFilter<Entity = any> {
new Brackets((qb) => {
params.forEach((param) => {
const { cols, data, additional, leftJoin } = param;
const columns = cols.split('.');
let arr = data;
const arr = data?.map((el) =>
if (!columns.includes('status::text')) {
arr = data?.map((el) =>
el.includes("'")
? `'%${el.trim().replace(/'/g, "''").replace(/\s+/g, ' ')}%'`
: `'%${el.trim().replace(/\s+/g, ' ')}%'`,
);
}
const aliases = !cols.match(/\./g)
? this.table.concat(`.${cols}`)

View File

@ -17,8 +17,8 @@ export abstract class BaseDataService<Entity> {
entityTarget: EntityTarget<Entity>,
entity: Entity,
): Promise<Entity> {
const newEntity = queryRunner.manager.create(entityTarget, entity);
return await queryRunner.manager.save(newEntity);
// const newEntity = this.repository.create(entityTarget, entity);
return await this.repository.save(entity);
}
async createMany(
@ -26,8 +26,8 @@ export abstract class BaseDataService<Entity> {
entityTarget: EntityTarget<Entity>,
entity: Entity[],
): Promise<Entity[]> {
const newEntity = queryRunner.manager.create(entityTarget, entity);
return await queryRunner.manager.save(newEntity);
// const newEntity = this.repository.create(entityTarget, entity);
return await this.repository.save(entity);
}
async createBatch(
@ -35,8 +35,8 @@ export abstract class BaseDataService<Entity> {
entityTarget: EntityTarget<Entity>,
entity: Entity[],
): Promise<Entity[]> {
const newEntity = queryRunner.manager.create(entityTarget, entity);
return await queryRunner.manager.save(newEntity);
// const newEntity = this.repository.create(entityTarget, entity);
return await this.repository.save(entity);
}
async update(
@ -45,13 +45,13 @@ export abstract class BaseDataService<Entity> {
filterUpdate: any,
entity: Entity,
): Promise<Entity> {
const newEntity = await queryRunner.manager.findOne(entityTarget, {
const newEntity = await this.repository.findOne({
where: filterUpdate,
});
if (!newEntity) throw new Error('Data not found!');
Object.assign(newEntity, entity);
return await queryRunner.manager.save(newEntity);
return await this.repository.save(newEntity);
}
async deleteById(
@ -59,7 +59,15 @@ export abstract class BaseDataService<Entity> {
entityTarget: EntityTarget<Entity>,
id: string,
): Promise<void> {
await queryRunner.manager.delete(entityTarget, { id });
await this.repository.delete(id);
}
async deleteByIds(
queryRunner: QueryRunner,
entityTarget: EntityTarget<Entity>,
ids: string[],
): Promise<void> {
await this.repository.delete(ids);
}
async deleteByOptions(
@ -67,11 +75,8 @@ export abstract class BaseDataService<Entity> {
entityTarget: EntityTarget<Entity>,
findManyOptions: FindManyOptions<Entity>,
): Promise<void> {
const datas = await queryRunner.manager.find(entityTarget, findManyOptions);
await queryRunner.manager.delete(
entityTarget,
datas?.map((item) => item['id']),
);
const datas = await this.repository.find(findManyOptions);
await this.repository.delete(datas?.map((item) => item['id']));
}
async getOneByOptions(findOneOptions): Promise<Entity> {

View File

@ -1,3 +1,3 @@
export interface BaseCoreEntity {
id: string;
id?: string;
}

View File

@ -22,6 +22,7 @@ export interface Param {
data: string[];
additional?: any[];
leftJoin?: any[];
isStatus?: boolean;
}
export interface RelationParam {

View File

@ -32,7 +32,7 @@ export abstract class BaseManager {
setUser() {
try {
this.user = this.userProvider?.user;
this.user = this.userProvider?.user ?? BLANK_USER;
} catch (error) {
this.user = BLANK_USER;
}
@ -60,7 +60,7 @@ export abstract class BaseManager {
try {
this.setUser();
// this.queryRunner.startTransaction();
this.queryRunner.startTransaction();
this.baseLog.verbose('prepareData');
await this.prepareData();
@ -80,13 +80,13 @@ export abstract class BaseManager {
this.baseLog.verbose('afterProcess');
await this.afterProcess();
// this.baseLog.verbose('commitTransaction');
// await this.queryRunner.commitTransaction();
// await this.queryRunner.release();
this.baseLog.verbose('commitTransaction');
await this.queryRunner.commitTransaction();
} catch (e) {
if (e.response) throw new Error(JSON.stringify(e.response));
else throw new Error(e.message);
} finally {
await this.queryRunner.release();
}
}

View File

@ -38,7 +38,7 @@ export abstract class BaseBatchDeleteManager<Entity> extends BaseManager {
if (!entity) {
throw new NotFoundException({
statusCode: HttpStatus.NOT_FOUND,
message: `Failed! Entity with id ${id} not found`,
message: `Gagal! data dengan id ${id} tidak ditemukan`,
error: 'Entity Not Found',
});
}

View File

@ -15,6 +15,26 @@ export abstract class BaseBatchUpdateStatusManager<Entity> extends BaseManager {
abstract get entityTarget(): any;
setData(ids: string[], status: STATUS): void {
/**
* // TODO: Handle case confirm multiple tabs;
* Pola ids yang dikirim dirubah menjadi data_id___updated_at
* Untuk mendapatkan value id nya saja dan menghindari breaking change
* karena sudah digunakan sebelumnya lakukan split dari data ids yang dikirim
* Example:
* this.dataIds = ids.map((i)=> {
* return i.split('___')[0]
* })
*
* Simpan data ids yang mempunyai update_at kedalam valiable baru
* Example:
* this.dataIdsWithDate = ids.map((i)=> {
* return {
* id: i.split('___')[0],
* updated_at: i.split('___')[1]
* }
* })
*/
this.dataIds = ids;
this.dataStatus = status;
}
@ -32,8 +52,21 @@ export abstract class BaseBatchUpdateStatusManager<Entity> extends BaseManager {
let totalSuccess = 0;
const messages = [];
/**
* // TODO: Handle case confirm multiple tabs;
* Lopping data diambil dari dataIdsWithDate
* exp: for (const item of this.dataIdsWithDate)
*/
for (const id of this.dataIds) {
try {
/**
* // TODO: Handle case confirm multiple tabs;
* buat variable:
* const id = item.id
* const updated_at = item.updated_at
*/
const entity = await this.dataService.getOneByOptions({
where: {
id: id,
@ -44,19 +77,19 @@ export abstract class BaseBatchUpdateStatusManager<Entity> extends BaseManager {
if (!entity) {
throw new NotFoundException({
statusCode: HttpStatus.NOT_FOUND,
message: `Failed! Entity with id ${id} not found`,
message: `Gagal! data dengan id ${id} tidak ditemukan`,
error: 'Entity Not Found',
});
}
this.oldData = _.cloneDeep(entity);
await this.validateData(entity);
Object.assign(entity, {
status: this.dataStatus,
editor_id: this.user.id,
editor_name: this.user.name,
updated_at: new Date().getTime(),
});
await this.validateData(entity);
await new ValidateRelationHelper(
id,
this.dataService,
@ -64,6 +97,14 @@ export abstract class BaseBatchUpdateStatusManager<Entity> extends BaseManager {
this.tableName,
).execute();
/**
* // TODO: Handle case confirm multiple tabs;
* lakukan update data dengan where condition id dan updated_at
* EXPECTATION => status akan berubah jika updated_at yang dikirim dari FE sama dengen yang di database
* IF => updated_at beda tidak perlu melakukan update status dan tidak perlu memanggil eventBus tetapi tetap dihitung sebagai aksi yang berhasil
* IF => FE tidak menambahkan updated_at makan lakukan update dan publishEvent
*/
const result = await this.dataService.update(
this.queryRunner,
this.entityTarget,

View File

@ -29,7 +29,7 @@ export abstract class BaseChangePosition<Entity> extends BaseManager {
if (!this.data?.end || this.data.start == this.data?.end) {
throw new UnprocessableEntityException({
statusCode: HttpStatus.UNPROCESSABLE_ENTITY,
message: 'Please drag to another position',
message: 'Gagal! tolong pindahkan ke posisi lain',
error: 'Unprocessable Entity',
});
}
@ -43,7 +43,7 @@ export abstract class BaseChangePosition<Entity> extends BaseManager {
if (!this.startData) {
throw new UnprocessableEntityException({
statusCode: HttpStatus.UNPROCESSABLE_ENTITY,
message: `Entity with id : ${this.data.start} not found`,
message: `Gagal! data dengan id : ${this.data.start} tidak ditemukan`,
error: 'Unprocessable Entity',
});
}
@ -57,7 +57,7 @@ export abstract class BaseChangePosition<Entity> extends BaseManager {
if (!this.endData) {
throw new UnprocessableEntityException({
statusCode: HttpStatus.UNPROCESSABLE_ENTITY,
message: `Entity with id : ${this.data.end} not found`,
message: `Gagal! data dengan id : ${this.data.end} tidak ditemukan`,
error: 'Unprocessable Entity',
});
}

View File

@ -71,7 +71,7 @@ export abstract class BaseCreateManager<Entity> extends BaseManager {
}
async publishEvents() {
this.eventBus.publish(
this.eventBus?.publish(
new RecordLog({
id: this.result['id'],
old: null,
@ -97,7 +97,7 @@ export abstract class BaseCreateManager<Entity> extends BaseManager {
this.eventBus.publishAll([
new topic.topic({
id: data?.['id'] ?? topic?.data?.['id'],
id: this.result['id'],
old: null,
data: data ?? topic.data,
user: this.user,

View File

@ -23,7 +23,7 @@ export abstract class BaseDeleteManager<Entity> extends BaseManager {
if (!this.data)
throw new UnprocessableEntityException({
statusCode: HttpStatus.UNPROCESSABLE_ENTITY,
message: `Data with id ${this.dataId} not found`,
message: `Gagal! Data denga id ${this.dataId} tidak ditemukan`,
error: 'Unprocessable Entity',
});

View File

@ -50,13 +50,17 @@ export abstract class BaseIndexManager<Entity> extends BaseReadManager {
// jika searching status terdapat dalam enum, maka dia mencari specific data
// ? karena jika tidak, ketika dia search "active" maka "inactive" juga ikut
return STATUS[statusData.toUpperCase()] ?? statusData;
return `'${STATUS[statusData.toUpperCase()]}'`;
});
const exist = specificFilter.find((item) => item.isStatus);
if (!exist) {
specificFilter.push({
cols: `${this.tableName}.status::text`,
data: data,
});
}
}
new SpecificSearchFilter<Entity>(
this.queryBuilder,

View File

@ -1,6 +1,10 @@
import { ValidateRelationHelper } from 'src/core/helpers/validation/validate-relation.helper';
import { BaseManager } from '../base.manager';
import { OPERATION, STATUS } from 'src/core/strings/constants/base.constants';
import {
OPERATION,
QUEUE_STATUS,
STATUS,
} from 'src/core/strings/constants/base.constants';
import * as _ from 'lodash';
import { RecordLog } from 'src/modules/configuration/log/domain/entities/log.event';
@ -8,12 +12,28 @@ export abstract class BaseUpdateStatusManager<Entity> extends BaseManager {
protected dataId: string;
protected result: Entity;
protected oldData: Entity;
protected dataStatus: STATUS;
protected dataStatus: STATUS | QUEUE_STATUS;
protected relations = [];
protected duplicateColumn: string[];
abstract get entityTarget(): any;
setData(id: string, status: STATUS): void {
setData(id: string, status: STATUS | QUEUE_STATUS): void {
/**
* // TODO: Handle case confirm multiple tabs;
* Pola id yang dikirim dirubah menjadi data_id___updated_at
* Untuk mendapatkan value id nya saja dan menghindari breaking change
* karena sudah digunakan sebelumnya lakukan split dari data ids yang dikirim
* Example:
* this.dataId = id.split('___')[0]
*
* Simpan data id yang mempunyai update_at kedalam valiable baru
* Example:
* this.dataIdsWithDate = {
* id: id.split('___')[0],
* updated_at: id.split('___')[1]
* }
*/
this.dataId = id;
this.dataStatus = status;
}
@ -43,6 +63,16 @@ export abstract class BaseUpdateStatusManager<Entity> extends BaseManager {
this.tableName,
).execute();
/**
* // TODO: Handle case confirm multiple tabs;
* IF => updated_at sama dengen data yang di database
* THEN =>
* - Lakukan update data dengan where condition id dan updated_at
* - EXPECTATION = > status akan berubah jika updated_at yang dikirim dari FE sama dengen yang di database
* IF => updated_at beda maka retun curent data tanpa harus malakukan update status dan publish event
* IF => FE tidak menambahkan updated_at makan lakukan update dan publishEvent
*/
this.result = await this.dataService.update(
this.queryRunner,
this.entityTarget,

View File

@ -27,7 +27,7 @@ export abstract class BaseUpdateManager<Entity> extends BaseManager {
if (!this.oldData) {
throw new NotFoundException({
statusCode: HttpStatus.NOT_FOUND,
message: `Failed! Entity with id ${this.dataId} not found`,
message: `Gagal! Data denga id ${this.dataId} tidak ditemukan`,
error: 'Entity Not Found',
});
}

View File

@ -23,6 +23,7 @@ export class BaseFilterDto implements BaseFilterEntity {
@IsNumber()
limit = 10;
@ApiProperty({ type: String, required: false })
q: string;
@ApiProperty({ type: ['string'], required: false })

View File

@ -1 +1,2 @@
export const PAGINATION_RESPONSE = 'PAGINATION_RESPONSE';
export const GATE_RESPONSE = 'GATE_RESPONSE';

View File

@ -1,5 +1,5 @@
import { SetMetadata } from '@nestjs/common';
import { PAGINATION_RESPONSE } from '../../constants';
import { GATE_RESPONSE, PAGINATION_RESPONSE } from '../../constants';
/**
* This decorator will tell the response,
@ -7,3 +7,5 @@ import { PAGINATION_RESPONSE } from '../../constants';
*/
export const Pagination = (isPagination = true) =>
SetMetadata(PAGINATION_RESPONSE, isPagination);
export const Gate = () => SetMetadata(GATE_RESPONSE, true);

View File

@ -8,13 +8,20 @@ import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { Request } from 'express';
import { Reflector } from '@nestjs/core';
import { PAGINATION_RESPONSE } from '../constants';
import { GATE_RESPONSE, PAGINATION_RESPONSE } from '../constants';
import { createPaginationResponse } from './utils/pagination-meta.helper';
@Injectable()
export class TransformInterceptor implements NestInterceptor {
constructor(protected readonly reflector: Reflector) {}
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
const isGate = this.reflector.getAllAndOverride<boolean>(GATE_RESPONSE, [
context.getHandler(),
context.getClass(),
]);
if (isGate) return next.handle();
const isPagination = this.reflector.getAllAndOverride<boolean>(
PAGINATION_RESPONSE,
[context.getHandler(), context.getClass()],

View File

@ -1,8 +1,11 @@
import { AppSource } from 'src/core/helpers/constant';
import { UserRole } from 'src/modules/user-related/user/constants';
export interface UsersSession {
id: number;
name: string;
role: UserRole;
source?: AppSource;
item_id?: string;
user_privilege_id: string;
}

View File

@ -23,4 +23,9 @@ export class UserProvider {
const [, token] = this.request.headers['authorization'].split(' ');
return this.session.verifyToken(token);
}
get token(): string {
const [, token] = this.request.headers['authorization'].split(' ');
return token;
}
}

View File

@ -15,11 +15,26 @@ export enum STATUS {
WAITING = 'waiting',
}
export enum QUEUE_STATUS {
DONE = 'done',
CALLED = 'called',
}
export enum ORDER_TYPE {
ASC = 'ASC',
DESC = 'DESC',
}
export const DAY = [
'minggu',
'senin',
'selasa',
'rabu',
'kamis',
'jumat',
'sabtu',
];
export enum CONNECTION_NAME {
DEFAULT = 'default',
}

View File

@ -4,6 +4,7 @@ export enum MODULE_NAME {
GATE = 'gates',
ITEM = 'items',
ITEM_CATEGORY = 'item-categories',
ITEM_QUEUE = 'item-queues',
ITEM_RATE = 'item-rates',
NEWS = 'news',
PAYMENT_METHOD = 'payment-methods',
@ -24,4 +25,7 @@ export enum MODULE_NAME {
REPORT = 'report',
REPORT_BOOKMARK = 'report-bookmark',
REPORT_EXPORT = 'report-export',
REPORT_SUMMARY = 'report-summary',
QUEUE = 'queue',
}

View File

@ -51,7 +51,6 @@ export const PrivilegeAdminConstant = [
menu_label: 'Rekonsiliasi',
actions: [
PrivilegeAction.VIEW,
PrivilegeAction.CREATE,
PrivilegeAction.CONFIRM,
PrivilegeAction.DELETE,
PrivilegeAction.CANCEL,
@ -137,6 +136,12 @@ export const PrivilegeAdminConstant = [
actions: [PrivilegeAction.CREATE],
index: 13,
},
{
menu: 'DOWNLOAD_POS_APP',
menu_label: 'Download POS App',
actions: [PrivilegeAction.VIEW],
index: 20,
},
];
export const PrivilegePOSConstant = [
@ -146,8 +151,8 @@ export const PrivilegePOSConstant = [
actions: [
PrivilegeAction.VIEW,
PrivilegeAction.CREATE,
PrivilegeAction.DELETE,
PrivilegeAction.EDIT,
PrivilegeAction.CANCEL,
],
index: 14,
},
@ -160,7 +165,7 @@ export const PrivilegePOSConstant = [
{
menu: 'BOOKING',
menu_label: 'Pemesanan',
actions: [PrivilegeAction.VIEW, PrivilegeAction.CREATE],
actions: [PrivilegeAction.VIEW],
index: 16,
},
{
@ -175,4 +180,10 @@ export const PrivilegePOSConstant = [
actions: [PrivilegeAction.CREATE],
index: 18,
},
{
menu: 'PRINT_RECEIPT',
menu_label: 'Print Receipt',
actions: [PrivilegeAction.CREATE],
index: 19,
},
];

View File

@ -4,6 +4,7 @@ export enum TABLE_NAME {
FAQ = 'faqs',
ITEM = 'items',
ITEM_CATEGORY = 'item_categories',
ITEM_QUEUE = 'item_queues',
ITEM_RATE = 'item_rates',
GATE = 'gates',
LOG = 'logs',
@ -20,8 +21,14 @@ export enum TABLE_NAME {
TENANT = 'tenants',
TRANSACTION = 'transactions',
TRANSACTION_ITEM = 'transaction_items',
TRANSACTION_ITEM_BREAKDOWN = 'transaction_item_breakdowns',
TRANSACTION_TAX = 'transaction_taxes',
TRANSACTION_ITEM_TAX = 'transaction_item_taxes',
TRANSACTION_ITEM_BREAKDOWN_TAX = 't_breakdown_item_taxes',
TRANSACTION_DEMOGRAPHY = 'transaction_demographies',
USER = 'users',
USER_LOGIN = 'users_login',
LOG_USER_LOGIN = 'log_users_login',
USER_PRIVILEGE = 'user_privileges',
USER_PRIVILEGE_CONFIGURATION = 'user_privilege_configurations',
VIP_CATEGORY = 'vip_categories',
@ -29,4 +36,10 @@ export enum TABLE_NAME {
REPORT_BOOKMARK = 'report_bookmark',
EXPORT_REPORT_HISTORY = 'export_report_history',
QUEUE = 'queues',
QUEUE_ORDER = 'queue_orders',
QUEUE_TICKET = 'queue_tickets',
QUEUE_ITEM = 'queue_items',
QUEUE_BUCKET = 'queue_bucket',
}

View File

@ -0,0 +1,27 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class AddColumnToRefundTable1722318939681 implements MigrationInterface {
name = 'AddColumnToRefundTable1722318939681';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TYPE "public"."refunds_refund_reason_type_enum" AS ENUM('weather', 'ride malfunction', 'other')`,
);
await queryRunner.query(
`ALTER TABLE "refunds" ADD "refund_reason_type" "public"."refunds_refund_reason_type_enum" NOT NULL DEFAULT 'ride malfunction'`,
);
await queryRunner.query(`ALTER TABLE "refunds" ADD "refund_reason" text`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "refunds" DROP COLUMN "refund_reason"`,
);
await queryRunner.query(
`ALTER TABLE "refunds" DROP COLUMN "refund_reason_type"`,
);
await queryRunner.query(
`DROP TYPE "public"."refunds_refund_reason_type_enum"`,
);
}
}

View File

@ -0,0 +1,25 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class UpdateColumnToTransactionTable1722334034920
implements MigrationInterface
{
name = 'UpdateColumnToTransactionTable1722334034920';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "transaction_items" ADD "qr_image_url" character varying`,
);
await queryRunner.query(
`ALTER TABLE "transactions" ADD "payment_code" character varying`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "transactions" DROP COLUMN "payment_code"`,
);
await queryRunner.query(
`ALTER TABLE "transaction_items" DROP COLUMN "qr_image_url"`,
);
}
}

View File

@ -0,0 +1,21 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class PosLogAddColumnDownBy1722509262047 implements MigrationInterface {
name = 'PosLogAddColumnDownBy1722509262047';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "logs_pos" ADD "drawn_by_name" character varying`,
);
await queryRunner.query(
`ALTER TABLE "logs_pos" ADD "drawn_by_id" character varying`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "logs_pos" DROP COLUMN "drawn_by_id"`);
await queryRunner.query(
`ALTER TABLE "logs_pos" DROP COLUMN "drawn_by_name"`,
);
}
}

View File

@ -0,0 +1,49 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class UpdateRelationTableTransaction1722581313837
implements MigrationInterface
{
name = 'UpdateRelationTableTransaction1722581313837';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "refunds" DROP CONSTRAINT "FK_8bb3b7579f49990d2e77684acd4"`,
);
await queryRunner.query(
`ALTER TABLE "refunds" DROP CONSTRAINT "REL_8bb3b7579f49990d2e77684acd"`,
);
await queryRunner.query(
`ALTER TABLE "refund_items" DROP CONSTRAINT "FK_07b481a163c219f5de8fb1c90b3"`,
);
await queryRunner.query(
`ALTER TABLE "refund_items" DROP CONSTRAINT "REL_07b481a163c219f5de8fb1c90b"`,
);
await queryRunner.query(
`ALTER TABLE "refunds" ADD CONSTRAINT "FK_8bb3b7579f49990d2e77684acd4" FOREIGN KEY ("transaction_id") REFERENCES "transactions"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
);
await queryRunner.query(
`ALTER TABLE "refund_items" ADD CONSTRAINT "FK_07b481a163c219f5de8fb1c90b3" FOREIGN KEY ("transaction_item_id") REFERENCES "transaction_items"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "refund_items" DROP CONSTRAINT "FK_07b481a163c219f5de8fb1c90b3"`,
);
await queryRunner.query(
`ALTER TABLE "refunds" DROP CONSTRAINT "FK_8bb3b7579f49990d2e77684acd4"`,
);
await queryRunner.query(
`ALTER TABLE "refund_items" ADD CONSTRAINT "REL_07b481a163c219f5de8fb1c90b" UNIQUE ("transaction_item_id")`,
);
await queryRunner.query(
`ALTER TABLE "refund_items" ADD CONSTRAINT "FK_07b481a163c219f5de8fb1c90b3" FOREIGN KEY ("transaction_item_id") REFERENCES "transaction_items"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
);
await queryRunner.query(
`ALTER TABLE "refunds" ADD CONSTRAINT "REL_8bb3b7579f49990d2e77684acd" UNIQUE ("transaction_id")`,
);
await queryRunner.query(
`ALTER TABLE "refunds" ADD CONSTRAINT "FK_8bb3b7579f49990d2e77684acd4" FOREIGN KEY ("transaction_id") REFERENCES "transactions"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
);
}
}

View File

@ -0,0 +1,17 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class UpdateTypeColumnItemTable1722587128195
implements MigrationInterface
{
name = 'UpdateTypeColumnItemTable1722587128195';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "items" DROP COLUMN "sales_margin"`);
await queryRunner.query(`ALTER TABLE "items" ADD "sales_margin" numeric`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "items" DROP COLUMN "sales_margin"`);
await queryRunner.query(`ALTER TABLE "items" ADD "sales_margin" integer`);
}
}

View File

@ -0,0 +1,23 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class UpdateTableTransaction1722595038215 implements MigrationInterface {
name = 'UpdateTableTransaction1722595038215';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TYPE "public"."transactions_payment_type_counter_enum" AS ENUM('midtrans', 'bank transfer', 'qris', 'counter', 'cash', 'credit card', 'debit', 'e-money')`,
);
await queryRunner.query(
`ALTER TABLE "transactions" ADD "payment_type_counter" "public"."transactions_payment_type_counter_enum"`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "transactions" DROP COLUMN "payment_type_counter"`,
);
await queryRunner.query(
`DROP TYPE "public"."transactions_payment_type_counter_enum"`,
);
}
}

View File

@ -0,0 +1,19 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class AddColumnToTransactionsTable1722693550579
implements MigrationInterface
{
name = 'AddColumnToTransactionsTable1722693550579';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "transactions" ADD "booking_date_before" date`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "transactions" DROP COLUMN "booking_date_before"`,
);
}
}

View File

@ -0,0 +1,29 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class UniqueNameItem1722922766205 implements MigrationInterface {
name = 'UniqueNameItem1722922766205';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "item_bundlings" DROP CONSTRAINT "FK_a50e7abf2caba4d0394f3726b86"`,
);
await queryRunner.query(
`ALTER TABLE "items" ADD CONSTRAINT "UQ_213736582899b3599acaade2cd1" UNIQUE ("name")`,
);
await queryRunner.query(
`ALTER TABLE "item_bundlings" ADD CONSTRAINT "FK_a50e7abf2caba4d0394f3726b86" FOREIGN KEY ("item_bundling_id") REFERENCES "items"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "item_bundlings" DROP CONSTRAINT "FK_a50e7abf2caba4d0394f3726b86"`,
);
await queryRunner.query(
`ALTER TABLE "items" DROP CONSTRAINT "UQ_213736582899b3599acaade2cd1"`,
);
await queryRunner.query(
`ALTER TABLE "item_bundlings" ADD CONSTRAINT "FK_a50e7abf2caba4d0394f3726b86" FOREIGN KEY ("item_bundling_id") REFERENCES "items"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
);
}
}

View File

@ -0,0 +1,13 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class AddItemProfit1723706764654 implements MigrationInterface {
name = 'AddItemProfit1723706764654';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "items" ADD "share_profit" numeric`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "items" DROP COLUMN "share_profit"`);
}
}

View File

@ -0,0 +1,85 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class AddItemProfit1723706764654 implements MigrationInterface {
name = 'AddOtherType1723706764655';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "items" ADD "breakdown_bundling" boolean NOT NULL DEFAULT false`,
);
await queryRunner.query(
`ALTER TYPE "public"."item_categories_item_type_enum" RENAME TO "item_categories_item_type_enum_old"`,
);
await queryRunner.query(
`CREATE TYPE "public"."item_categories_item_type_enum" AS ENUM('tiket masuk', 'wahana', 'bundling', 'free gift', 'other')`,
);
await queryRunner.query(
`ALTER TABLE "item_categories" ALTER COLUMN "item_type" DROP DEFAULT`,
);
await queryRunner.query(
`ALTER TABLE "item_categories" ALTER COLUMN "item_type" TYPE "public"."item_categories_item_type_enum" USING "item_type"::"text"::"public"."item_categories_item_type_enum"`,
);
await queryRunner.query(
`ALTER TABLE "item_categories" ALTER COLUMN "item_type" SET DEFAULT 'tiket masuk'`,
);
await queryRunner.query(
`DROP TYPE "public"."item_categories_item_type_enum_old"`,
);
await queryRunner.query(
`ALTER TYPE "public"."items_item_type_enum" RENAME TO "items_item_type_enum_old"`,
);
await queryRunner.query(
`CREATE TYPE "public"."items_item_type_enum" AS ENUM('tiket masuk', 'wahana', 'bundling', 'free gift', 'other')`,
);
await queryRunner.query(
`ALTER TABLE "items" ALTER COLUMN "item_type" DROP DEFAULT`,
);
await queryRunner.query(
`ALTER TABLE "items" ALTER COLUMN "item_type" TYPE "public"."items_item_type_enum" USING "item_type"::"text"::"public"."items_item_type_enum"`,
);
await queryRunner.query(
`ALTER TABLE "items" ALTER COLUMN "item_type" SET DEFAULT 'tiket masuk'`,
);
await queryRunner.query(`DROP TYPE "public"."items_item_type_enum_old"`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TYPE "public"."items_item_type_enum_old" AS ENUM('bundling', 'free gift', 'tiket masuk', 'wahana')`,
);
await queryRunner.query(
`ALTER TABLE "items" ALTER COLUMN "item_type" DROP DEFAULT`,
);
await queryRunner.query(
`ALTER TABLE "items" ALTER COLUMN "item_type" TYPE "public"."items_item_type_enum_old" USING "item_type"::"text"::"public"."items_item_type_enum_old"`,
);
await queryRunner.query(
`ALTER TABLE "items" ALTER COLUMN "item_type" SET DEFAULT 'tiket masuk'`,
);
await queryRunner.query(`DROP TYPE "public"."items_item_type_enum"`);
await queryRunner.query(
`ALTER TYPE "public"."items_item_type_enum_old" RENAME TO "items_item_type_enum"`,
);
await queryRunner.query(
`CREATE TYPE "public"."item_categories_item_type_enum_old" AS ENUM('bundling', 'free gift', 'tiket masuk', 'wahana')`,
);
await queryRunner.query(
`ALTER TABLE "item_categories" ALTER COLUMN "item_type" DROP DEFAULT`,
);
await queryRunner.query(
`ALTER TABLE "item_categories" ALTER COLUMN "item_type" TYPE "public"."item_categories_item_type_enum_old" USING "item_type"::"text"::"public"."item_categories_item_type_enum_old"`,
);
await queryRunner.query(
`ALTER TABLE "item_categories" ALTER COLUMN "item_type" SET DEFAULT 'tiket masuk'`,
);
await queryRunner.query(
`DROP TYPE "public"."item_categories_item_type_enum"`,
);
await queryRunner.query(
`ALTER TYPE "public"."item_categories_item_type_enum_old" RENAME TO "item_categories_item_type_enum"`,
);
await queryRunner.query(
`ALTER TABLE "items" DROP COLUMN "breakdown_bundling"`,
);
}
}

View File

@ -0,0 +1,23 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class AddDemographyTransaction1723713873756
implements MigrationInterface
{
name = 'AddDemographyTransaction1723713873756';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TABLE "transaction_demographies" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "man" integer NOT NULL DEFAULT '0', "woman" integer NOT NULL DEFAULT '0', "teen" integer NOT NULL DEFAULT '0', "child" integer NOT NULL DEFAULT '0', "local" integer NOT NULL DEFAULT '0', "foreign" integer NOT NULL DEFAULT '0', "transaction_id" uuid, CONSTRAINT "PK_84083b782ebc2c6cb2a2dab8e2d" PRIMARY KEY ("id"))`,
);
await queryRunner.query(
`ALTER TABLE "transaction_demographies" ADD CONSTRAINT "FK_a2b705884bca06c148e3b35ab04" FOREIGN KEY ("transaction_id") REFERENCES "transactions"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "transaction_demographies" DROP CONSTRAINT "FK_a2b705884bca06c148e3b35ab04"`,
);
await queryRunner.query(`DROP TABLE "transaction_demographies"`);
}
}

View File

@ -0,0 +1,49 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class FixDemographyNationality1723716561482
implements MigrationInterface
{
name = 'FixDemographyNationality1723716561482';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "transaction_demographies" DROP COLUMN "local"`,
);
await queryRunner.query(
`ALTER TABLE "transaction_demographies" DROP COLUMN "foreign"`,
);
await queryRunner.query(
`CREATE TYPE "public"."transaction_demographies_nationality_enum" AS ENUM('local', 'foreign', 'mix')`,
);
await queryRunner.query(
`ALTER TABLE "transaction_demographies" ADD "nationality" "public"."transaction_demographies_nationality_enum" NOT NULL DEFAULT 'local'`,
);
await queryRunner.query(
`ALTER TABLE "transaction_demographies" DROP CONSTRAINT "FK_a2b705884bca06c148e3b35ab04"`,
);
await queryRunner.query(
`ALTER TABLE "transaction_demographies" ADD CONSTRAINT "FK_a2b705884bca06c148e3b35ab04" FOREIGN KEY ("transaction_id") REFERENCES "transactions"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "transaction_demographies" DROP CONSTRAINT "FK_a2b705884bca06c148e3b35ab04"`,
);
await queryRunner.query(
`ALTER TABLE "transaction_demographies" ADD CONSTRAINT "FK_a2b705884bca06c148e3b35ab04" FOREIGN KEY ("transaction_id") REFERENCES "transactions"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
);
await queryRunner.query(
`ALTER TABLE "transaction_demographies" DROP COLUMN "nationality"`,
);
await queryRunner.query(
`DROP TYPE "public"."transaction_demographies_nationality_enum"`,
);
await queryRunner.query(
`ALTER TABLE "transaction_demographies" ADD "foreign" integer NOT NULL DEFAULT '0'`,
);
await queryRunner.query(
`ALTER TABLE "transaction_demographies" ADD "local" integer NOT NULL DEFAULT '0'`,
);
}
}

View File

@ -0,0 +1,17 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class AddEstimationToItem1723801180604 implements MigrationInterface {
name = 'AddEstimationToItem1723801180604';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "items" ADD "play_estimation" numeric`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "items" DROP COLUMN "play_estimation"`,
);
}
}

View File

@ -0,0 +1,23 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class AddBreakdownItemTransaction1724127202672
implements MigrationInterface
{
name = 'AddBreakdownItemTransaction1724127202672';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TABLE "transaction_item_breakdowns" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "item_id" character varying NOT NULL, "item_name" character varying NOT NULL, "hpp" bigint, "base_price" bigint, "item_rates" bigint, "transaction_item_id" uuid, CONSTRAINT "PK_e04a30c648d3ba8778e9fb67fdd" PRIMARY KEY ("id"))`,
);
await queryRunner.query(
`ALTER TABLE "transaction_item_breakdowns" ADD CONSTRAINT "FK_b8c63b1f3ecace500587da713ae" FOREIGN KEY ("transaction_item_id") REFERENCES "transaction_items"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "transaction_item_breakdowns" DROP CONSTRAINT "FK_b8c63b1f3ecace500587da713ae"`,
);
await queryRunner.query(`DROP TABLE "transaction_item_breakdowns"`);
}
}

View File

@ -0,0 +1,19 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class AddBreakdownToTransactionItem1724233193743
implements MigrationInterface
{
name = 'AddBreakdownToTransactionItem1724233193743';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "transaction_items" ADD "breakdown_bundling" boolean NOT NULL DEFAULT false`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "transaction_items" DROP COLUMN "breakdown_bundling"`,
);
}
}

View File

@ -0,0 +1,47 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class AddValueToDemography1724240624025 implements MigrationInterface {
name = 'AddValueToDemography1724240624025';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TYPE "public"."transaction_demographies_nationality_enum" RENAME TO "transaction_demographies_nationality_enum_old"`,
);
await queryRunner.query(
`CREATE TYPE "public"."transaction_demographies_nationality_enum" AS ENUM('local', 'foreign', 'mix', 'foreigner')`,
);
await queryRunner.query(
`ALTER TABLE "transaction_demographies" ALTER COLUMN "nationality" DROP DEFAULT`,
);
await queryRunner.query(
`ALTER TABLE "transaction_demographies" ALTER COLUMN "nationality" TYPE "public"."transaction_demographies_nationality_enum" USING "nationality"::"text"::"public"."transaction_demographies_nationality_enum"`,
);
await queryRunner.query(
`ALTER TABLE "transaction_demographies" ALTER COLUMN "nationality" SET DEFAULT 'local'`,
);
await queryRunner.query(
`DROP TYPE "public"."transaction_demographies_nationality_enum_old"`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TYPE "public"."transaction_demographies_nationality_enum_old" AS ENUM('local', 'foreign', 'mix')`,
);
await queryRunner.query(
`ALTER TABLE "transaction_demographies" ALTER COLUMN "nationality" DROP DEFAULT`,
);
await queryRunner.query(
`ALTER TABLE "transaction_demographies" ALTER COLUMN "nationality" TYPE "public"."transaction_demographies_nationality_enum_old" USING "nationality"::"text"::"public"."transaction_demographies_nationality_enum_old"`,
);
await queryRunner.query(
`ALTER TABLE "transaction_demographies" ALTER COLUMN "nationality" SET DEFAULT 'local'`,
);
await queryRunner.query(
`DROP TYPE "public"."transaction_demographies_nationality_enum"`,
);
await queryRunner.query(
`ALTER TYPE "public"."transaction_demographies_nationality_enum_old" RENAME TO "transaction_demographies_nationality_enum"`,
);
}
}

View File

@ -0,0 +1,19 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class AddValueVariableFormula1724926316235
implements MigrationInterface
{
name = 'AddValueVariableFormula1724926316235';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "price_formulas" ADD "value_for" character varying NOT NULL DEFAULT 'dpp'`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "price_formulas" DROP COLUMN "value_for"`,
);
}
}

View File

@ -0,0 +1,19 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class AddPaymentDateBankColumnAtTransaction1725962197762
implements MigrationInterface
{
name = 'AddPaymentDateBankColumnAtTransaction1725962197762';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "transactions" ADD "payment_date_bank" date`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "transactions" DROP COLUMN "payment_date_bank"`,
);
}
}

View File

@ -0,0 +1,21 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class AddPosNameColumn1726033041774 implements MigrationInterface {
name = 'AddPosNameColumn1726033041774';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "transactions" ADD "creator_counter_name" character varying`,
);
await queryRunner.query(
`ALTER TABLE "logs_pos" ADD "pos_name" character varying`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "logs_pos" DROP COLUMN "pos_name"`);
await queryRunner.query(
`ALTER TABLE "transactions" DROP COLUMN "creator_counter_name"`,
);
}
}

View File

@ -0,0 +1,43 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class AddFlagRoleQueue1726041175749 implements MigrationInterface {
name = 'AddFlagRoleQueue1726041175749';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TYPE "public"."users_role_enum" RENAME TO "users_role_enum_old"`,
);
await queryRunner.query(
`CREATE TYPE "public"."users_role_enum" AS ENUM('superadmin', 'staff', 'tenant', 'queue_admin')`,
);
await queryRunner.query(
`ALTER TABLE "users" ALTER COLUMN "role" DROP DEFAULT`,
);
await queryRunner.query(
`ALTER TABLE "users" ALTER COLUMN "role" TYPE "public"."users_role_enum" USING "role"::"text"::"public"."users_role_enum"`,
);
await queryRunner.query(
`ALTER TABLE "users" ALTER COLUMN "role" SET DEFAULT 'staff'`,
);
await queryRunner.query(`DROP TYPE "public"."users_role_enum_old"`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TYPE "public"."users_role_enum_old" AS ENUM('superadmin', 'staff', 'tenant')`,
);
await queryRunner.query(
`ALTER TABLE "users" ALTER COLUMN "role" DROP DEFAULT`,
);
await queryRunner.query(
`ALTER TABLE "users" ALTER COLUMN "role" TYPE "public"."users_role_enum_old" USING "role"::"text"::"public"."users_role_enum_old"`,
);
await queryRunner.query(
`ALTER TABLE "users" ALTER COLUMN "role" SET DEFAULT 'staff'`,
);
await queryRunner.query(`DROP TYPE "public"."users_role_enum"`);
await queryRunner.query(
`ALTER TYPE "public"."users_role_enum_old" RENAME TO "users_role_enum"`,
);
}
}

View File

@ -0,0 +1,73 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class AddTaxItemTransaction1726045820711 implements MigrationInterface {
name = 'AddTaxItemTransaction1726045820711';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TABLE "transaction_item_taxes" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "tax_id" character varying, "tax_name" character varying, "taxt_value" numeric, "tax_total_value" numeric, "transaction_id" uuid, CONSTRAINT "PK_fc5f6da61b24eb5bfdd503b0a0d" PRIMARY KEY ("id"))`,
);
await queryRunner.query(
`CREATE TABLE "t_breakdown_item_taxes" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "tax_id" character varying, "tax_name" character varying, "taxt_value" numeric, "tax_total_value" numeric, "transaction_id" uuid, CONSTRAINT "PK_a1ef08d2c68169a50102aa70eca" PRIMARY KEY ("id"))`,
);
await queryRunner.query(
`ALTER TABLE "transaction_items" ADD "total_profit_share" numeric`,
);
await queryRunner.query(
`ALTER TABLE "transaction_item_breakdowns" ADD "total_profit_share" numeric`,
);
await queryRunner.query(
`ALTER TABLE "transaction_item_taxes" ADD CONSTRAINT "FK_f5c4966a381d903899cafb4b5ba" FOREIGN KEY ("transaction_id") REFERENCES "transaction_items"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
);
await queryRunner.query(
`ALTER TABLE "t_breakdown_item_taxes" ADD CONSTRAINT "FK_74bedce7e94f6707ddf26ef0c0f" FOREIGN KEY ("transaction_id") REFERENCES "transaction_item_breakdowns"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
);
await queryRunner.query(
`ALTER TABLE "transaction_items" ADD "payment_total_dpp" numeric`,
);
await queryRunner.query(
`ALTER TABLE "transaction_item_breakdowns" ADD "payment_total_dpp" numeric`,
);
await queryRunner.query(
`ALTER TABLE "transaction_items" ADD "payment_total_tax" numeric`,
);
await queryRunner.query(
`ALTER TABLE "transaction_item_breakdowns" ADD "payment_total_tax" numeric`,
);
await queryRunner.query(
`ALTER TABLE "transaction_item_breakdowns" ADD "total_share_tenant" numeric`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "t_breakdown_item_taxes" DROP CONSTRAINT "FK_74bedce7e94f6707ddf26ef0c0f"`,
);
await queryRunner.query(
`ALTER TABLE "transaction_item_taxes" DROP CONSTRAINT "FK_f5c4966a381d903899cafb4b5ba"`,
);
await queryRunner.query(
`ALTER TABLE "transaction_item_breakdowns" DROP COLUMN "total_profit_share"`,
);
await queryRunner.query(
`ALTER TABLE "transaction_items" DROP COLUMN "total_profit_share"`,
);
await queryRunner.query(`DROP TABLE "t_breakdown_item_taxes"`);
await queryRunner.query(`DROP TABLE "transaction_item_taxes"`);
await queryRunner.query(
`ALTER TABLE "transaction_item_breakdowns" DROP COLUMN "payment_total_dpp"`,
);
await queryRunner.query(
`ALTER TABLE "transaction_items" DROP COLUMN "payment_total_dpp"`,
);
await queryRunner.query(
`ALTER TABLE "transaction_item_breakdowns" DROP COLUMN "payment_total_tax"`,
);
await queryRunner.query(
`ALTER TABLE "transaction_items" DROP COLUMN "payment_total_tax"`,
);
await queryRunner.query(
`ALTER TABLE "transaction_item_breakdowns" DROP COLUMN "total_share_tenant"`,
);
}
}

View File

@ -0,0 +1,21 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class AddTableUserLogin1726115025759 implements MigrationInterface {
name = 'AddTableUserLogin1726115025759';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TABLE "users_login" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "login_date" bigint NOT NULL, "login_token" character varying, "user_id" uuid, CONSTRAINT "REL_2a80a213b51423ce5b8211f058" UNIQUE ("user_id"), CONSTRAINT "PK_e564194a9a22f8c623354284f75" PRIMARY KEY ("id"))`,
);
await queryRunner.query(
`ALTER TABLE "users_login" ADD CONSTRAINT "FK_2a80a213b51423ce5b8211f0584" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "users_login" DROP CONSTRAINT "FK_2a80a213b51423ce5b8211f0584"`,
);
await queryRunner.query(`DROP TABLE "users_login"`);
}
}

View File

@ -0,0 +1,23 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class UpdateTableUserLogin1726122619596 implements MigrationInterface {
name = 'UpdateTableUserLogin1726122619596';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "users_login" DROP CONSTRAINT "FK_2a80a213b51423ce5b8211f0584"`,
);
await queryRunner.query(
`ALTER TABLE "users_login" ADD CONSTRAINT "FK_2a80a213b51423ce5b8211f0584" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "users_login" DROP CONSTRAINT "FK_2a80a213b51423ce5b8211f0584"`,
);
await queryRunner.query(
`ALTER TABLE "users_login" ADD CONSTRAINT "FK_2a80a213b51423ce5b8211f0584" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE NO ACTION ON UPDATE NO ACTION`,
);
}
}

View File

@ -0,0 +1,23 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class AddTableLogUserLogin1726123955427 implements MigrationInterface {
name = 'AddTableLogUserLogin1726123955427';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TYPE "public"."log_users_login_type_enum" AS ENUM('login', 'logout')`,
);
await queryRunner.query(
`CREATE TYPE "public"."log_users_login_role_enum" AS ENUM('superadmin', 'staff', 'tenant', 'queue_admin')`,
);
await queryRunner.query(
`CREATE TABLE "log_users_login" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "type" "public"."log_users_login_type_enum", "role" "public"."log_users_login_role_enum", "user_id" uuid, "username" character varying, "created_at" bigint, CONSTRAINT "PK_75141588aa6ee560504f7d3adce" PRIMARY KEY ("id"))`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`DROP TABLE "log_users_login"`);
await queryRunner.query(`DROP TYPE "public"."log_users_login_role_enum"`);
await queryRunner.query(`DROP TYPE "public"."log_users_login_type_enum"`);
}
}

View File

@ -0,0 +1,17 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class AddColumnItemId1726139426994 implements MigrationInterface {
name = 'AddColumnItemId1726139426994';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "users_login" ADD "item_id" uuid`);
await queryRunner.query(`ALTER TABLE "log_users_login" ADD "item_id" uuid`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "log_users_login" DROP COLUMN "item_id"`,
);
await queryRunner.query(`ALTER TABLE "users_login" DROP COLUMN "item_id"`);
}
}

View File

@ -0,0 +1,23 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class AddColumnItemName1726141393404 implements MigrationInterface {
name = 'AddColumnItemName1726141393404';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "users_login" ADD "item_name" character varying`,
);
await queryRunner.query(
`ALTER TABLE "log_users_login" ADD "item_name" character varying`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "log_users_login" DROP COLUMN "item_name"`,
);
await queryRunner.query(
`ALTER TABLE "users_login" DROP COLUMN "item_name"`,
);
}
}

View File

@ -0,0 +1,17 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class AddFormulaToTax1726365023179 implements MigrationInterface {
name = 'AddFormulaToTax1726365023179';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "taxes" ADD "formula_render" json`);
await queryRunner.query(
`ALTER TABLE "taxes" ADD "formula_string" character varying`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "taxes" DROP COLUMN "formula_string"`);
await queryRunner.query(`ALTER TABLE "taxes" DROP COLUMN "formula_render"`);
}
}

View File

@ -0,0 +1,35 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class ChangeUserLoginRelation1726642119207
implements MigrationInterface
{
name = 'ChangeUserLoginRelation1726642119207';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "users" DROP COLUMN "refresh_token"`);
await queryRunner.query(
`ALTER TABLE "users_login" DROP CONSTRAINT "FK_2a80a213b51423ce5b8211f0584"`,
);
await queryRunner.query(
`ALTER TABLE "users_login" DROP CONSTRAINT "REL_2a80a213b51423ce5b8211f058"`,
);
await queryRunner.query(
`ALTER TABLE "users_login" ADD CONSTRAINT "FK_2a80a213b51423ce5b8211f0584" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "users_login" DROP CONSTRAINT "FK_2a80a213b51423ce5b8211f0584"`,
);
await queryRunner.query(
`ALTER TABLE "users_login" ADD CONSTRAINT "REL_2a80a213b51423ce5b8211f058" UNIQUE ("user_id")`,
);
await queryRunner.query(
`ALTER TABLE "users_login" ADD CONSTRAINT "FK_2a80a213b51423ce5b8211f0584" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE`,
);
await queryRunner.query(
`ALTER TABLE "users" ADD "refresh_token" character varying`,
);
}
}

View File

@ -0,0 +1,29 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class AddColumnSourceAtUserLogin1726642499135
implements MigrationInterface
{
name = 'AddColumnSourceAtUserLogin1726642499135';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TYPE "public"."users_login_role_enum" AS ENUM('superadmin', 'staff', 'tenant', 'queue_admin')`,
);
await queryRunner.query(
`ALTER TABLE "users_login" ADD "role" "public"."users_login_role_enum"`,
);
await queryRunner.query(
`CREATE TYPE "public"."users_login_source_enum" AS ENUM('POS_ADMIN', 'POS_COUNTER', 'QUEUE_ADMIN', 'QUEUE_CUSTOMER')`,
);
await queryRunner.query(
`ALTER TABLE "users_login" ADD "source" "public"."users_login_source_enum"`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`ALTER TABLE "users_login" DROP COLUMN "source"`);
await queryRunner.query(`DROP TYPE "public"."users_login_source_enum"`);
await queryRunner.query(`ALTER TABLE "users_login" DROP COLUMN "role"`);
await queryRunner.query(`DROP TYPE "public"."users_login_role_enum"`);
}
}

View File

@ -0,0 +1,21 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class AddSourceOnLogLogin1726647442006 implements MigrationInterface {
name = 'AddSourceOnLogLogin1726647442006';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`CREATE TYPE "public"."log_users_login_source_enum" AS ENUM('POS_ADMIN', 'POS_COUNTER', 'QUEUE_ADMIN', 'QUEUE_CUSTOMER')`,
);
await queryRunner.query(
`ALTER TABLE "log_users_login" ADD "source" "public"."log_users_login_source_enum"`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "log_users_login" DROP COLUMN "source"`,
);
await queryRunner.query(`DROP TYPE "public"."log_users_login_source_enum"`);
}
}

View File

@ -0,0 +1,43 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class AddDiscountForItemTransaction1726824289989
implements MigrationInterface
{
name = 'AddDiscountForItemTransaction1726824289989';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "transaction_items" ADD "subtotal" numeric`,
);
await queryRunner.query(
`ALTER TABLE "transaction_items" ADD "discount_value" numeric`,
);
await queryRunner.query(
`ALTER TABLE "transaction_item_breakdowns" ADD "subtotal" numeric`,
);
await queryRunner.query(
`ALTER TABLE "transaction_item_breakdowns" ADD "discount_value" numeric`,
);
await queryRunner.query(
`ALTER TABLE "transaction_item_breakdowns" ADD "total_price" numeric`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "transaction_item_breakdowns" DROP COLUMN "total_price"`,
);
await queryRunner.query(
`ALTER TABLE "transaction_item_breakdowns" DROP COLUMN "discount_value"`,
);
await queryRunner.query(
`ALTER TABLE "transaction_item_breakdowns" DROP COLUMN "subtotal"`,
);
await queryRunner.query(
`ALTER TABLE "transaction_items" DROP COLUMN "discount_value"`,
);
await queryRunner.query(
`ALTER TABLE "transaction_items" DROP COLUMN "subtotal"`,
);
}
}

View File

@ -0,0 +1,23 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class ChangeColumnName1726830293878 implements MigrationInterface {
name = 'ChangeColumnName1726830293878';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "transaction_items" RENAME COLUMN "subtotal" TO "total_net_price"`,
);
await queryRunner.query(
`ALTER TABLE "transaction_item_breakdowns" RENAME COLUMN "subtotal" TO "total_net_price"`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "transaction_item_breakdowns" RENAME COLUMN "total_net_price" TO "subtotal"`,
);
await queryRunner.query(
`ALTER TABLE "transaction_items" RENAME COLUMN "total_net_price" TO "subtotal"`,
);
}
}

View File

@ -0,0 +1,25 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
export class AddDiscountValueToVoucher1728377112337
implements MigrationInterface
{
name = 'AddDiscountValueToVoucher1728377112337';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "vip_codes" ADD "discount_value" numeric`,
);
await queryRunner.query(
`ALTER TABLE "vip_codes" ALTER COLUMN "discount" DROP NOT NULL`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "vip_codes" ALTER COLUMN "discount" SET NOT NULL`,
);
await queryRunner.query(
`ALTER TABLE "vip_codes" DROP COLUMN "discount_value"`,
);
}
}

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