Compare commits

..

314 Commits

Author SHA1 Message Date
edmondlang 5b485e8480 v0.0.0 2021-09-01 19:21:36 +08:00
omair saleh 7d47ac14d0 fix reschedule containers etd bug 2021-09-01 17:15:06 +08:00
omair saleh 5083ee83ad disable email verification temp 2021-09-01 15:55:15 +08:00
omair saleh 8363b8ca10 debug registration 2021-09-01 15:54:30 +08:00
omair saleh 0a89451889 debug registration 2021-09-01 15:33:34 +08:00
omair saleh 59730e21d2 debug registration 2021-09-01 15:32:35 +08:00
omair saleh 3887512721 debug registration 2021-09-01 15:29:35 +08:00
omair saleh e11cc64f89 debug registration 2021-09-01 15:27:47 +08:00
omair saleh 5ca3a927c1 debug registration 2021-09-01 15:26:07 +08:00
omair saleh 4246795e14 debug registration 2021-09-01 15:24:29 +08:00
omair saleh d0a9f1aa9f debug registration 2021-09-01 15:23:54 +08:00
omair saleh e8a7812583 debug registration 2021-09-01 15:23:19 +08:00
omair saleh c651b6ca09 debug registration 2021-09-01 15:22:28 +08:00
omair saleh d9f3ad74ca change registration loading section 2021-09-01 15:18:57 +08:00
omair saleh 278145e211 regenerate customers marking 2021-08-30 19:16:14 +08:00
omair saleh 7f0236d8d5 regenerate customers marking 2021-08-30 19:14:37 +08:00
omair saleh 414a042199 regenerate customers marking 2021-08-30 18:56:14 +08:00
omair saleh a85aeb00d7 regenerate customers marking 2021-08-30 18:55:12 +08:00
omair saleh a31d7b7b8b regenerate customers marking 2021-08-30 18:54:01 +08:00
omair saleh aa210c0b6f regenerate customers marking 2021-08-30 18:32:02 +08:00
omair saleh bf0d61c862 regenerate customers marking 2021-08-30 18:31:25 +08:00
omair saleh fae47f4a75 regenerate customers marking 2021-08-30 17:52:10 +08:00
omair saleh 53575cf59a regenerate customers marking 2021-08-30 16:58:49 +08:00
omair saleh 06db3ddf7b regenerate customers marking 2021-08-30 16:57:50 +08:00
omair saleh 15650f53ad regenerate customers marking 2021-08-30 16:56:52 +08:00
omair saleh 514364bb08 regenerate customers marking 2021-08-30 16:35:45 +08:00
omair saleh 46bfe78b77 regenerate customers marking 2021-08-30 16:23:13 +08:00
omair saleh 64ab158991 regenerate customers marking 2021-08-30 16:12:17 +08:00
omair saleh 0255b39f4b regenerate customers marking 2021-08-30 16:09:33 +08:00
omair saleh 94cf4dee1b regenerate customers marking 2021-08-30 16:08:35 +08:00
omair saleh 0a32af0dab regenerate customers marking 2021-08-30 16:07:10 +08:00
omair saleh 3f48d85e31 update packinglists from vt portal jobs and schedule 2021-08-30 01:46:56 +08:00
omair saleh 5e44386b24 update packinglists from vt portal jobs and schedule 2021-08-30 01:41:47 +08:00
omair saleh 11572a5627 update packinglists from vt portal jobs and schedule 2021-08-30 01:40:05 +08:00
omair saleh 30224f9114 update packinglists from vt portal jobs and schedule 2021-08-30 01:27:54 +08:00
omair saleh bf99141304 update packinglists from vt portal jobs and schedule 2021-08-30 01:23:54 +08:00
omair saleh 5b8bfa32d3 update packinglists from vt portal jobs and schedule 2021-08-30 01:22:17 +08:00
omair saleh dd4ecbe743 update packinglists from vt portal jobs and schedule 2021-08-30 01:21:23 +08:00
omair saleh 52cae7f877 update packinglists from vt portal jobs and schedule 2021-08-30 01:16:21 +08:00
omair saleh 5355b31bcb update packinglists from vt portal jobs and schedule 2021-08-30 01:09:16 +08:00
omair saleh c71727c9c0 update packinglists from vt portal jobs and schedule 2021-08-30 00:57:04 +08:00
omair saleh c6e621c4ab update packinglists from vt portal jobs and schedule 2021-08-30 00:52:23 +08:00
omair saleh 7279779377 update packinglists from vt portal jobs and schedule 2021-08-30 00:44:17 +08:00
omair saleh f90f5f7370 update packinglists from vt portal jobs and schedule 2021-08-30 00:40:54 +08:00
omair saleh d353a8629f update packinglists from vt portal jobs and schedule 2021-08-30 00:32:59 +08:00
omair saleh 9c62a792b7 update packinglists from vt portal jobs and schedule 2021-08-30 00:31:29 +08:00
omair saleh 32d3523190 update packinglists from vt portal jobs and schedule 2021-08-30 00:23:22 +08:00
omair saleh b5e2f47b31 update packinglists from vt portal jobs and schedule 2021-08-30 00:03:26 +08:00
omair saleh 82162026b3 update packinglists from vt portal jobs and schedule 2021-08-29 23:55:09 +08:00
omair saleh 3582654861 update packinglists from vt portal jobs and schedule 2021-08-29 23:46:00 +08:00
omair saleh 0772173dd9 update packinglists from vt portal jobs and schedule 2021-08-29 23:40:38 +08:00
omair saleh 61c11aef26 update packinglists from vt portal jobs and schedule 2021-08-29 21:20:49 +08:00
omair saleh 66c3b532cb update packinglists from vt portal jobs and schedule 2021-08-29 19:57:27 +08:00
omair saleh eac5c6d104 update packinglists from vt portal jobs and schedule 2021-08-29 19:50:35 +08:00
omair saleh 46b5d19331 update packinglists from vt portal jobs and schedule 2021-08-29 19:44:52 +08:00
omair saleh bea3836df8 update packinglists from vt portal jobs and schedule 2021-08-29 19:33:04 +08:00
omair saleh c07bcb6334 update packinglists from vt portal jobs and schedule 2021-08-23 10:52:25 +08:00
omair saleh c79443eb62 update packinglists from vt portal jobs and schedule 2021-08-23 10:45:06 +08:00
omair saleh 572cb4ac1d update packinglists from vt portal jobs and schedule 2021-08-23 10:43:02 +08:00
omair saleh 25c95f0843 update packinglists from vt portal jobs and schedule 2021-08-23 09:36:00 +08:00
omair saleh a3cdae6815 update packinglists from vt portal jobs and schedule 2021-08-23 09:35:37 +08:00
omair saleh 276e12679d update packinglists from vt portal 2021-08-23 08:39:59 +08:00
omair saleh d24fea2910 add wechat id to registration form, and fix loading bug on registration 2021-08-19 23:48:23 +08:00
omair saleh b15dce4fde run old companies migration only in production 2021-08-19 12:35:34 +08:00
omair saleh ab747b3403 large commit 2021-08-18 15:54:38 +08:00
omair saleh 9e9de73d65 large commit 2021-08-18 06:57:29 +08:00
omair saleh 2033ef9ef6 large commit 2021-08-18 06:13:58 +08:00
omair saleh 14cbcfd6f5 large commit 2021-08-18 06:02:14 +08:00
omair saleh bdf3759dd5 update address form reference input label, and add login about us 2021-08-17 15:07:55 +08:00
omair saleh 94dde7bf7b update favicons 2021-08-16 09:17:02 +08:00
omair saleh d8c767c670 Large commit 2021-08-16 08:59:43 +08:00
Fairuz e2874f7199 Merge branch 'responsive-dashboard' into 'master'
responsive banner dashboard

See merge request CIEFWorldwideSdnBhd/shipping-portal!43
2021-08-15 12:00:39 +00:00
Amirul Amin 9cfc6e7cdf responsive banner dashboard 2021-08-15 16:29:52 +08:00
omair saleh 3c1ba6a780 temp fix destination warehouse reference 2021-08-15 14:58:47 +08:00
omair saleh 75be0ab0cc temp fix destination warehouse reference 2021-08-15 14:57:11 +08:00
omair saleh da8259ab4d Merge branch 'scrap-cookie' into 'master'
Scrap cookie

See merge request CIEFWorldwideSdnBhd/shipping-portal!42
2021-08-14 17:33:22 +00:00
omair saleh 2edb793765 Merge branch 'pdf-demo' into 'master'
demo

See merge request CIEFWorldwideSdnBhd/shipping-portal!41
2021-08-14 17:32:42 +00:00
Fairuz 05bdb9b91d Merge branch 'responsive-login' into 'master'
responsive login

See merge request CIEFWorldwideSdnBhd/shipping-portal!40
2021-08-14 14:29:28 +00:00
Amirul Amin c0e596a1eb responsive login 2021-08-14 21:46:22 +08:00
glovetleong cea018220f demo 2021-08-14 11:05:12 +08:00
omair saleh 8c4bac81e6 General fixes to table design, added state and district seeder for china, made changes to create order process, and ui and vue js components changes for registration, dashboard and registration 2021-08-14 09:28:36 +08:00
omair saleh dda0cf0b02 Merge remote-tracking branch 'origin/master' 2021-08-12 15:01:38 +08:00
omair saleh fc0786264a fix dashboard and order ui & fix address select component and added reference to addresses 2021-08-12 15:01:16 +08:00
Fairuz 7010bd3574 Merge branch 'modify_order_step' into 'master'
Modify order step relationship

See merge request CIEFWorldwideSdnBhd/shipping-portal!39
2021-08-12 06:45:32 +00:00
Fairuz c49136a94d Update order step, nullable relationship 2021-08-12 14:16:38 +08:00
Fairuz b0246ccfda Update relation for order steps 2021-08-12 13:41:27 +08:00
glovetleong 8ff3d73227 scrap job 2021-08-12 09:19:35 +08:00
glovetleong 984b486cfd scrap cookie script 2021-08-11 09:29:40 +08:00
Fairuz f876cc5822 Merge branch 'tracking' into 'master'
wip tracking page responsive

See merge request CIEFWorldwideSdnBhd/shipping-portal!38
2021-08-10 01:42:11 +00:00
Amirul Amin 25789deefd wip tracking page responsive 2021-08-09 22:38:54 +08:00
Fairuz 5e26fa7a82 Merge branch '284-address' into 'master'
feat: address component

See merge request CIEFWorldwideSdnBhd/shipping-portal!37
2021-08-09 09:12:52 +00:00
weichien00 053760701b feat: add addressComponent and related action component ex. deleteAddress and setDefaultAddress component. add new/edit form/ 2021-08-09 02:25:01 +08:00
weichien00 4f5054c55f feat: add addresslist component and include in address index.blade 2021-08-09 02:19:19 +08:00
weichien00 7a2f2e87b2 update: change to save default address based on company module id 2021-08-09 02:16:24 +08:00
Fairuz db12b2f26c Merge branch 'order-details' into 'master'
responsive order details

See merge request CIEFWorldwideSdnBhd/shipping-portal!36
2021-08-07 04:23:00 +00:00
Amirul Amin 4e910203d0 wip responsive order details 2021-08-06 21:19:51 +08:00
Fairuz efdc6c0e46 Merge branch '272-dashboard-first-order' into 'master'
272 dashboard first order

See merge request CIEFWorldwideSdnBhd/shipping-portal!35
2021-08-05 03:25:50 +00:00
weichien00 1005ec9c83 fix: getterstate. 2021-08-05 11:18:43 +08:00
weichien00 7c1f5ffaf8 revert tab active show manipulation. 2021-08-05 11:17:00 +08:00
Fairuz 1139c77101 Merge branch '248_order_steps_apis' into 'master'
Completes Order Steps on Unity

See merge request CIEFWorldwideSdnBhd/shipping-portal!34
2021-08-05 02:54:27 +00:00
Fairuz 06efb4c169 Completes Order Steps on Unity 2021-08-05 10:52:26 +08:00
weichien00 93e5371882 fix: order list tab visibility based on condition. 2021-08-05 03:38:24 +08:00
weichien00 e0df8ac524 fix: remove new-order param in localstorage when logout 2021-08-05 03:36:57 +08:00
weichien00 a18c9afe3e update: routes and it respective blade files/ 2021-08-05 03:05:51 +08:00
weichien00 efae44cfb0 update: add onboarding create order flow component. 2021-08-05 03:02:26 +08:00
weichien00 3b1218e1ea style: validation component. - remove border. 2021-08-05 02:59:43 +08:00
weichien00 6d3b4bc4f0 update: vuex module for order operation. 2021-08-05 02:59:14 +08:00
weichien00 96342f6e01 add: component of create order. 2021-08-05 02:58:35 +08:00
weichien00 60210fc676 fix: save address with companyModule polymorph relationship. 2021-08-05 02:49:20 +08:00
weichien00 73505b140c add: eloquent polymorph with companyModule filter. 2021-08-05 02:45:58 +08:00
Fairuz d9935ff6a1 Merge branch 'address-form' into 'master'
responsive radio customize design for address

See merge request CIEFWorldwideSdnBhd/shipping-portal!32
2021-08-04 05:49:13 +00:00
LEE WC b128a92740 Merge branch '248_order_steps_apis' into '272-dashboard-first-order'
merge 248_order_steps_apis to my working branch

See merge request CIEFWorldwideSdnBhd/shipping-portal!33
2021-08-03 16:45:59 +00:00
Amirul Amin cc9bb9976f responsive radio customize design for address 2021-08-04 00:18:00 +08:00
Fairuz fe52f0471b Merge branch '248_order_steps_apis' into 'master'
Add address to create order resources

See merge request CIEFWorldwideSdnBhd/shipping-portal!31
2021-08-03 02:57:49 +00:00
Fairuz 503a550637 Add address to create order resources 2021-08-03 10:57:11 +08:00
Fairuz 49f58659f6 Merge branch '248_order_steps_apis' into 'master'
248 order steps apis

See merge request CIEFWorldwideSdnBhd/shipping-portal!30
2021-08-02 18:07:27 +00:00
Fairuz 3427ad025c Merge branch 'master' into 248_order_steps_apis 2021-08-03 02:04:58 +08:00
Fairuz ec673e7d02 Add company id to address 2021-08-03 02:03:57 +08:00
Fairuz 3f70ead69a Activate contract 2021-08-03 02:01:20 +08:00
Fairuz ec1e338870 Activate contract 2021-08-03 01:43:22 +08:00
Fairuz 7e9b3259c3 Added contract entity, address to Orders 2021-08-03 01:18:34 +08:00
Fairuz af38004595 Added contract entity, address to Orders 2021-08-03 01:17:54 +08:00
LEE WC 4f896fe1cf Merge branch 'master' into '272-dashboard-first-order'
merge Master to my working branch

See merge request CIEFWorldwideSdnBhd/shipping-portal!29
2021-08-02 15:44:43 +00:00
weichien00 decb6265eb add: list order api. 2021-08-02 23:42:51 +08:00
omair saleh 2b3cdb3290 fix dashboard web route 2021-08-02 13:40:13 +08:00
omair saleh 6466c4724e fix dashboard web route 2021-08-02 13:39:41 +08:00
omair saleh a2d050e072 fix dashboard web route 2021-08-02 13:38:43 +08:00
omair saleh 79cc00a37f registration ui fixes, and clean up header menu and footer 2021-08-02 12:15:58 +08:00
omair saleh aab1da6c12 Merge remote-tracking branch 'origin/master' 2021-08-02 12:08:57 +08:00
omair saleh dfbfd04d31 registration ui fixes, and clean up header menu and footer 2021-08-02 12:08:30 +08:00
Fairuz 8e9a3ef05f Merge branch '248_order_steps_apis' into 'master'
248 order steps apis

See merge request CIEFWorldwideSdnBhd/shipping-portal!28
2021-08-02 03:51:04 +00:00
Fairuz fa5d063ea2 Merge branch 'master' into 248_order_steps_apis 2021-08-02 11:49:24 +08:00
Fairuz 58d8367bc7 WIP Unity Order APIs 2021-08-02 11:48:29 +08:00
Fairuz 1c8caac730 Merge branch 'data-table' into 'master'
Data table

See merge request CIEFWorldwideSdnBhd/shipping-portal!27
2021-08-02 02:26:55 +00:00
Amirul Amin 5d09b66e78 wip : data table responsive 2021-08-02 01:20:33 +08:00
Amirul Amin a7c1ac9982 Merge branch 'master' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into data-table 2021-08-02 01:18:02 +08:00
Amirul Amin 817c30fe19 wip : data table container responsive 2021-08-02 01:17:38 +08:00
omair saleh ea9955c269 Merge remote-tracking branch 'origin/master' 2021-07-30 21:23:59 +08:00
omair saleh 41d59d9a80 fix migration files and add admin user seeder 2021-07-30 21:23:43 +08:00
Fairuz 2ad01a4195 Merge branch 'master' into 248_order_steps_apis 2021-07-30 19:07:59 +08:00
Fairuz e5814fcd01 Assign contract obligations at Unity 2021-07-30 19:06:38 +08:00
Fairuz 126c75df19 Merge branch '252/253/254-account-registration-vue' into 'master'
252/253/254 account registration vue

See merge request CIEFWorldwideSdnBhd/shipping-portal!26
2021-07-30 06:56:04 +00:00
weichien00 a3daef7203 add: vue emailVerification component. 2021-07-30 14:47:05 +08:00
weichien00 3e8265fe3a update: return company_module_id after login success. 2021-07-30 14:45:45 +08:00
weichien00 0dc68cea5a update: return number of order when login. 2021-07-30 14:26:11 +08:00
weichien00 7fe6009669 add: missing blade for email verification and reset password. 2021-07-30 03:37:23 +08:00
weichien00 8b5dd24a14 update: integrate header,side menu to blade+vuejs. 2021-07-30 02:10:37 +08:00
LEE WC ad7dae69c6 Merge branch 'side-menu' into '252/253/254-account-registration-vue'
Side menu to my working branch

See merge request CIEFWorldwideSdnBhd/shipping-portal!25
2021-07-29 05:01:01 +00:00
Fairuz 0681738d58 Merge branch 'side-menu' into 'master'
add side menu and header skeleton

See merge request CIEFWorldwideSdnBhd/shipping-portal!24
2021-07-29 03:26:02 +00:00
Amirul Amin dd51cf4f4c add side menu and header skeleton 2021-07-29 00:15:41 +08:00
weichien00 40af7bb690 fix: add missing class. 2021-07-26 15:04:51 +08:00
weichien00 693bd68726 fix: bank migration file typo. 2021-07-26 15:04:21 +08:00
Fairuz 238897e3eb Merge branch 'master' into 248_order_steps_apis 2021-07-26 14:21:07 +08:00
Fairuz 9edbdc3744 Merge branch '252/253/254-account-registration-vue' into 'master'
252/253/254 account registration vue

See merge request CIEFWorldwideSdnBhd/shipping-portal!22
2021-07-26 06:18:56 +00:00
LEE WC 04778859c4 Merge branch 'master' into '252/253/254-account-registration-vue'
Master to my working branch

See merge request CIEFWorldwideSdnBhd/shipping-portal!23
2021-07-26 05:17:35 +00:00
Fairuz fde433d60c Created contract at Unity 2021-07-26 13:14:43 +08:00
weichien00 bcdcac2382 fix: login and registration. 2021-07-26 12:50:16 +08:00
weichien00 a55272f556 update: add create acount link below login form 2021-07-26 12:13:22 +08:00
omair saleh 97ec698983 update gitignore 2021-07-25 14:36:09 +08:00
Fairuz 06de032867 Merge branch '248_order_steps_apis' into 'master'
248 Remaining APIs

See merge request CIEFWorldwideSdnBhd/shipping-portal!21
2021-07-24 08:25:01 +00:00
Fairuz 51e1127fd6 Merge branch 'master' into 248_order_steps_apis 2021-07-24 16:22:29 +08:00
Fairuz e12e5a460e WIP - Order steps & remaining APIs 2021-07-24 16:21:11 +08:00
Fairuz 9296c321f3 WIP - Order steps & remaining APIs 2021-07-24 15:17:54 +08:00
Fairuz 805ae4ff2b WIP - Order steps & remaining APIs 2021-07-24 13:40:21 +08:00
Fairuz 7ae581300d WIP - Order steps & remaining APIs 2021-07-24 11:39:40 +08:00
Fairuz 1281990b08 WIP - Order steps & remaining APIs 2021-07-24 00:11:59 +08:00
weichien00 a2e16193aa fix: resolve merge issue. 2021-07-23 23:44:29 +08:00
LEE WC 684a34c3f3 Merge branch 'master-merge-252/253/254-account-registration-vue' into '252/253/254-account-registration-vue'
Master merge 252/253/254 account registration vue

See merge request CIEFWorldwideSdnBhd/shipping-portal!20
2021-07-23 15:08:14 +00:00
weichien00 7106a44432 update to match master. 2021-07-23 23:06:11 +08:00
Fairuz 4eaf1917fa WIP - Order steps & remaining APIs 2021-07-23 21:27:18 +08:00
Fairuz d5dd26ae73 WIP - Order steps & remaining APIs 2021-07-23 18:31:52 +08:00
Fairuz 6ae3c64b3b WIP - Order steps & remaining APIs 2021-07-23 16:36:37 +08:00
Fairuz d65b630560 WIP - Order steps & remaining APIs 2021-07-23 16:14:54 +08:00
Fairuz 1fe25476ce WIP - Order steps & remaining APIs 2021-07-23 15:07:05 +08:00
Fairuz d7131dd5f8 WIP - Order steps & remaining APIs 2021-07-23 12:41:06 +08:00
Fairuz 67e104d7e7 WIP - Order steps & remaining APIs 2021-07-23 01:25:48 +08:00
Fairuz d74d12da96 WIP - Order steps & remaining APIs 2021-07-23 01:16:19 +08:00
Fairuz d87c4f7df4 WIP - Order steps & remaining APIs 2021-07-22 16:53:52 +08:00
Fairuz 3dfa087831 WIP - Order steps & remaining APIs 2021-07-22 14:28:02 +08:00
Fairuz adf9896410 WIP - Order steps & remaining APIs 2021-07-22 13:00:11 +08:00
Fairuz 6278ddb16b WIP - Order steps & remaining APIs 2021-07-22 11:28:58 +08:00
Fairuz d308ab4045 WIP - Order steps & remaining APIs 2021-07-22 11:25:00 +08:00
omair saleh e61bda751b Merge remote-tracking branch 'origin/master' 2021-07-21 16:10:27 +08:00
omair saleh 8b51cdc1dc login page, and forget password page 2021-07-21 16:10:07 +08:00
omair saleh 4f7b4ab9aa clean public folder 2021-07-21 16:09:25 +08:00
weichien00 398ceaa14f update: add filecomponent to registrationForm component 2021-07-21 09:53:46 +08:00
weichien00 fbb21df45b add: registration section and related component - 1 checkemail , 2 register form. 2021-07-21 02:58:55 +08:00
weichien00 54daf59e7c add: login form component. 2021-07-21 02:53:54 +08:00
weichien00 8d56e3af63 update: add login.blade file. 2021-07-21 02:48:09 +08:00
Fairuz ed157150e7 Merge branch '229_order_apis' into 'master'
Order APIs & Unity Service

See merge request CIEFWorldwideSdnBhd/shipping-portal!18
2021-07-17 10:55:48 +00:00
Fairuz 95660069c9 Order APIs & Unity services 2021-07-17 18:44:22 +08:00
Fairuz 9c0772bf65 Orders APIs WIP 2021-07-15 17:30:12 +08:00
Fairuz ac288981f5 Resolved conflict with Master branch 2021-07-15 10:50:03 +08:00
Fairuz d4acea78c0 Merge branch '223-company-api' into 'master'
223 company api

See merge request CIEFWorldwideSdnBhd/shipping-portal!17
2021-07-15 02:38:56 +00:00
Fairuz a7eec812c9 Orders APIs WIP 2021-07-15 10:33:12 +08:00
Fairuz 562ea1ff7b Orders APIs WIP 2021-07-14 15:18:25 +08:00
weichien00 b0a02a8c27 swagger - Add create company API. 2021-07-14 11:01:01 +08:00
weichien00 3715e9128d swagger: add new tag "Flow - Registration" and include related api. 2021-07-14 10:50:19 +08:00
Fairuz 4bae6e063e Merge branch 'hotfix-user-model-typo' into 'master'
hotfix: typo issue that cause login failed.

See merge request CIEFWorldwideSdnBhd/shipping-portal!15
2021-07-14 02:10:01 +00:00
weichien00 13b99f01ee fix: company list api - parameter "filter" change to "filters". update description. 2021-07-13 23:54:11 +08:00
LEE WC a8ac1b8cb1 Merge branch 'hotfix-user-model-typo' into '223-company-api'
hotfix: typo issue that cause login failed.

See merge request CIEFWorldwideSdnBhd/shipping-portal!16
2021-07-13 15:38:09 +00:00
weichien00 5fca745e58 hotfix: typo issue that cause login failed. 2021-07-13 23:32:03 +08:00
weichien00 8cde051869 fix: User Model - typo on companyModule. 2021-07-13 23:25:31 +08:00
weichien00 fa2f0bb56f update: account registration api - add new input field : business_type. 2021-07-13 23:07:36 +08:00
weichien00 d254b56629 fix: include business_type for company_module process in create_customer logic. 2021-07-13 22:23:56 +08:00
weichien00 b0b3f27738 update: add create company_module processsor in create company logic. #7 2021-07-13 22:22:45 +08:00
weichien00 a9c921b8cf fix: save businessType as type in company_module table. 2021-07-13 22:20:54 +08:00
weichien00 7700d863d6 update: CompanyModule Model - add belongto relationship with company. 2021-07-13 22:09:00 +08:00
Fairuz ddbf83465e Orders APIs WIP 2021-07-13 11:58:03 +08:00
weichien00 bbfd905e5d update: add company relationship with company module. 2021-07-12 16:51:43 +08:00
weichien00 ab5202d8bb fix: company seeder create company module along with creating new compaany 2021-07-12 16:50:12 +08:00
weichien00 7acda23f3d new: eloquent filter for company_module.type. 2021-07-12 16:48:39 +08:00
Fairuz e6fa91f696 Merge branch 'master' into 229_order_apis 2021-07-12 14:24:03 +08:00
Fairuz 1ada18c33f Order API progress 2021-07-12 10:19:05 +08:00
Fairuz ec2896fbbe Merge branch 'swagger_registration_flow' into 'master'
Swagger registration flow

See merge request CIEFWorldwideSdnBhd/shipping-portal!14
2021-07-12 02:18:41 +00:00
Fairuz ccb8e630ce Merge branch 'master' into 229_order_apis 2021-07-11 13:59:45 +08:00
Fairuz 0fa316a7ce Merge branch 'swagger_address' into 'master'
Missing resources address, district & swagger docs for it

See merge request CIEFWorldwideSdnBhd/shipping-portal!10
2021-07-09 10:55:58 +00:00
Fairuz 3cf303f33f Merge branch 'master' into swagger_address 2021-07-09 18:54:49 +08:00
Fairuz 487d0d353c Merge branch '222-restructur-table' into 'master'
add: new migration files -...

See merge request CIEFWorldwideSdnBhd/shipping-portal!11
2021-07-09 10:53:40 +00:00
weichien00 9c66821135 update swagger: default set to 2 and put remark on type field in account registration api. 2021-07-09 11:36:14 +08:00
weichien00 785a3a5a85 swagger - add check email existance, company list api 2021-07-09 02:11:13 +08:00
LEE WC a9bcf46d2f Merge branch 'swagger_address' into 'swagger_registration_flow'
Missing resources address, district & swagger docs for it

See merge request CIEFWorldwideSdnBhd/shipping-portal!12
2021-07-08 17:50:06 +00:00
weichien00 db5294332c update: address,conpanyModule,user models . 2021-07-09 00:34:07 +08:00
Fairuz 861341ce3a Migration file for orders 2021-07-08 16:30:10 +08:00
weichien00 5c432dbf6a update : address model add polymorphic relationship 2021-07-08 11:40:54 +08:00
weichien00 3ac76cfc99 add: service class required when creating new address. 2021-07-08 04:00:23 +08:00
weichien00 6cc27d1c43 fix: address table with column default set with default value false. 2021-07-08 03:59:14 +08:00
weichien00 29b43ee69b add: country,state and district seeder files. 2021-07-08 03:58:17 +08:00
weichien00 37f60792f2 update: company model. 2021-07-08 03:33:52 +08:00
weichien00 7ee83bad51 update: company route. 2021-07-08 03:32:16 +08:00
weichien00 10a7bd3421 new: copy remaining company module classes from exhange2.0. 2021-07-08 03:31:33 +08:00
weichien00 8da79a2017 update: add doctrine/dbal dependency to modify column in migration. 2021-07-08 02:02:07 +08:00
weichien00 14e35e2110 update: changes on Account Module based on changes #6 2021-07-08 01:59:09 +08:00
weichien00 8dc45d0848 update: changes on Company Module based on changes #6 2021-07-08 01:58:32 +08:00
weichien00 0866509107 add: contact interface #6 related to dc11a1f8 2021-07-08 01:56:36 +08:00
weichien00 dc11a1f8d5 update: changes on Contacts Module based on changes #6 2021-07-08 01:53:14 +08:00
weichien00 45077c953e add: company module classes. #7 2021-07-08 01:47:58 +08:00
weichien00 13988d1021 fix: company_employees table set primay key on company_module_id and user_id 2021-07-08 01:33:52 +08:00
weichien00 0e057a8832 update: Company,Contact,User model files - change accordingly based on new db structure. 2021-07-08 01:13:37 +08:00
weichien00 644339a224 add: copy serviceType models file from exchange2.0. 2021-07-08 01:10:49 +08:00
weichien00 99b173c4c8 add: new model files, CompanyEmployee and CompanyModule based on new tables. 2021-07-08 01:07:49 +08:00
weichien00 7f0d5843f5 remove: employee model. 2021-07-08 00:44:10 +08:00
weichien00 c7719eb787 update: contacts migration - default column with default value set to false. 2021-07-08 00:37:15 +08:00
Fairuz f603ef53c4 Missing resources address, district & swagger docs for it 2021-07-07 17:17:56 +08:00
weichien00 1351724030 new: add companiesTableSeeder - sample warehouse. 2021-07-07 00:29:05 +08:00
weichien00 a2f2b42ff4 remove: employee table migration file. 2021-07-07 00:27:04 +08:00
weichien00 6dfff29d02 add: new migration files - company_modules,company_employees,company_connections,connection_segments. 2021-07-07 00:26:35 +08:00
weichien00 04ebda1c6a update migration companies,address,contact,segments,segment_constants,segment_companies. 2021-07-07 00:25:10 +08:00
Fairuz c3d0cba20c Merge branch '209-document-api' into 'master'
209 document api

See merge request CIEFWorldwideSdnBhd/shipping-portal!8
2021-07-05 09:52:54 +00:00
weichien00 3dbbe743eb update: swagger - add identification_no and file input field. 2021-07-05 11:00:06 +08:00
Fairuz 4b330afc60 Merge branch '219_transactions_module' into 'master'
Copied transaction, receipt & currecny module from Exchange

See merge request CIEFWorldwideSdnBhd/shipping-portal!6
2021-07-04 04:51:27 +00:00
Fairuz bc8ec2854a Copied transaction, receipt & currecny module from Exchange 2021-07-04 11:52:31 +08:00
weichien00 aa4bee875c new: migration file to create documents and files table. #5 2021-07-03 02:40:17 +08:00
weichien00 a3ce7c14a1 update: filesystem config for upload document. 2021-07-03 02:39:22 +08:00
weichien00 da4b6cd850 update: return TypeError exception with ApiResponseObject . #4 2021-07-03 02:38:52 +08:00
weichien00 56c42fe8f9 update: createCustomerLogic - add upload identity document processor. related #5 2021-07-03 00:59:25 +08:00
weichien00 aaf0ff7645 new: Add classes required to upload identity document during account registration. #5 2021-07-03 00:58:24 +08:00
Fairuz 9bcb45e5cc Merge branch 'add_public_folder' into 'master'
Add public folder & Swagger Header Token

See merge request CIEFWorldwideSdnBhd/shipping-portal!5
2021-06-29 03:20:43 +00:00
Fairuz a3fc6895e8 Fixes for swagger to add bearer token to header 2021-06-29 11:18:45 +08:00
Fairuz 6bfcb11bb2 Add public folder, accidentally included in gitignore & remove swagger.json 2021-06-29 08:04:29 +08:00
Fairuz f29b8c4554 Merge branch '202-authentication-apis' into 'master'
add registration , user and authentication related api.

See merge request CIEFWorldwideSdnBhd/shipping-portal!4
2021-06-28 13:10:03 +00:00
weichien00 8ee5bb0f4d update: add valid.token to use in middleware on route with user prefix. 2021-06-28 20:06:09 +08:00
weichien00 aff5262a96 update: remove company_name from required field. 2021-06-27 03:02:09 +08:00
weichien00 c7da41b3e0 update: swagger - add registration and login API 2021-06-27 02:41:06 +08:00
weichien00 7fda7a4584 update: add route for user CRUD API 2021-06-27 01:14:04 +08:00
weichien00 42b58ce68c new:[user apis]add classes required for update user API #3 2021-06-27 01:13:23 +08:00
weichien00 d1065f0f39 new:[user apis]add classes required to delete a user API #3 2021-06-27 00:49:30 +08:00
weichien00 8697fb7a18 new:[user apis]add classes required to create admin user API #3 2021-06-27 00:41:06 +08:00
weichien00 eaa0b2d382 new:[user apis]add classes required to fetch a user API #3 2021-06-27 00:08:02 +08:00
weichien00 570fd257bf new:[User apis]add classes required for user listing API #3 2021-06-27 00:05:09 +08:00
weichien00 7beead2300 new:[authentication apis]add classes required for resend verification email API #2 2021-06-26 18:45:58 +08:00
weichien00 ce4b45708d new:[authentication apis]add classes required for email verification API #2 2021-06-26 18:30:35 +08:00
weichien00 116248b346 new:[authentication apis]add classes required for password reset API #2 2021-06-26 18:19:54 +08:00
weichien00 9248592417 new:[authentication apis]add classes required for request password reset API #2 2021-06-26 18:04:30 +08:00
weichien00 38cccef2fd new:[authentication apis]add classes required for refresh token API #2 2021-06-26 17:16:01 +08:00
weichien00 e0f72c25fb update: include logout route. #2 2021-06-26 03:46:30 +08:00
weichien00 38153de7c6 update: JWT auth config. 2021-06-26 03:45:56 +08:00
weichien00 3426d6b157 new:[authentication apis]add classes required for logout API #2 2021-06-26 03:45:00 +08:00
weichien00 287e72e714 new: [authentication apis]add classes required for login API #2 2021-06-26 02:46:08 +08:00
weichien00 9821c0e306 new: [authentication apis]add classes required for check email API #2 2021-06-26 02:39:41 +08:00
weichien00 da205cc706 clear: debug log message. 2021-06-26 02:03:07 +08:00
weichien00 be967ced3d fix: route - dummy login route(for verification email route reference.) 2021-06-26 01:55:31 +08:00
weichien00 26bf40b954 fix: routes - remove unnecessary route at this moment. 2021-06-26 01:43:49 +08:00
weichien00 f12ceac557 fix: add missing classes required to run seeder. 2021-06-26 01:25:59 +08:00
weichien00 e36ffdb8df update: route required when generate verification email. 2021-06-26 00:59:56 +08:00
weichien00 d4dc18b45f fix: add index.php in public folder. 2021-06-26 00:58:47 +08:00
weichien00 dda0879db2 new: add class required to authenticate user after registration success. #1 2021-06-26 00:55:01 +08:00
weichien00 2b02acf6eb new: verification email template. #1 2021-06-26 00:49:46 +08:00
weichien00 1ddeb1cac6 new: Add models currency, passwordReset, segmentCompany, segmentConstant. #1 2021-06-26 00:43:21 +08:00
weichien00 0e1ea69515 new :add classes required to send verification email after user registered. #1 2021-06-26 00:36:37 +08:00
weichien00 d3fa2170f7 new: assign segment to company created. #1 2021-06-26 00:27:55 +08:00
weichien00 b6f56ffebd delete: remove redundant migration files. 2021-06-26 00:17:01 +08:00
weichien00 e6b615e0b5 fix: remove classmap - error when run composer install 2021-06-26 00:14:32 +08:00
weichien00 741b4a89b4 Merge branch 'master' into 199-user-registration-api
# Conflicts:
#	routes/api.php
2021-06-25 13:00:07 +08:00
Fairuz a294287c5a Merge branch 'address' into 'master'
Address

See merge request CIEFWorldwideSdnBhd/shipping-portal!2
2021-06-25 02:22:35 +00:00
Fairuz 17c8b4f77c Merge branch 'swagger_apidocs' into 'master'
Swagger API docs initial setup

See merge request CIEFWorldwideSdnBhd/shipping-portal!1
2021-06-25 02:22:22 +00:00
weichien00 f59b3cba47 new: add classes required to assign user as an employee to a company. #1 2021-06-25 04:04:34 +08:00
weichien00 bac5622fe2 new: add classes required to create contact along with new user registration #1 2021-06-25 03:53:59 +08:00
weichien00 49cad624f1 new: add company model required by 55a25275 #1 2021-06-25 03:48:20 +08:00
weichien00 55a2527506 new: add classes required to create company along with new user registration. #1 2021-06-25 03:44:29 +08:00
weichien00 718a7bbf43 new: add classes required to create basic user entry. #1 2021-06-25 03:34:47 +08:00
weichien00 de9fb4d4f2 new: Add CreateCustomerLogic - Main class to create a account with other related infomation. 2021-06-25 03:21:40 +08:00
weichien00 923b0b581e new: add register account api route. #1 2021-06-25 03:16:23 +08:00
weichien00 96125d5dc8 update: DatabaseSeeder - run seeder added 5fbd5ef7 2021-06-25 03:13:00 +08:00
weichien00 5fbd5ef78a new: add country,currency,segment and segment constant seed #1 2021-06-25 03:10:47 +08:00
weichien00 0fbbfdaa3e update: Additional column on country table. #1 2021-06-25 03:07:23 +08:00
weichien00 0e73012be2 new:create job,segment,segment_constant,segment_company and currency migration file . #1 2021-06-25 03:06:30 +08:00
weichien00 168881e98a new: Add Account/CreateCustomerController. 2021-06-25 00:43:02 +08:00
unknown 28f8a7c44a new: create country, company,contact, user_email_verification ,employee table . and modify user table migration file. 2021-06-24 15:16:33 +08:00
Hafiz 1640e6ef26 fixed address branch as comments 2021-06-24 11:32:13 +08:00
unknown 5bfd4731ba auto prefixed on controller route declaration. 2021-06-24 11:05:03 +08:00
Hafiz f33c316ba5 Add address API,Model,Controller 2021-06-23 21:58:07 +08:00
Fairuz 3b9c28dcbd Swagger API docs initial setup 2021-06-22 13:02:19 +08:00
Fairuz ee1a7a12cc Initial setup 2021-06-17 20:12:08 +08:00
837 changed files with 1660 additions and 41107 deletions
-4
View File
@@ -51,7 +51,3 @@ MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
UNITY_APP_URL="https://unity.izyim.com"
EXCHANGE_URL=https://dev.exchange.cief-malaysia.com/
MIX_EXCHANGE_URL="${EXCHANGE_URL}"
YD_API_CODE=''
+1 -2
View File
@@ -24,5 +24,4 @@ db/*
docker-compose.yml
package-lock.json
public/*
/public/*
storage/framework/laravel-excel/*
/public/*
-807
View File
File diff suppressed because one or more lines are too long
-1
View File
@@ -1 +0,0 @@
yarnPath: ".yarn/releases/yarn-berry.cjs"
@@ -63,7 +63,7 @@ abstract class AbstractControllerLogic
} catch (ErrorException|GeneralExceptions|TypeError $exception){
return (new ApiResponseObject($this->getNotificationTitle().' failed', $exception->getMessage(),
!in_array($exception->getCode(), [0, 42000]) ? $exception->getCode() : HttpStatus::SERVER_ERROR))->handler();
$exception->getCode() ? $exception->getCode() : HttpStatus::SERVER_ERROR))->handler();
}
}
@@ -39,13 +39,8 @@ abstract class AbstractListRecord extends AbstractGetRecord
$query = $query->orderBy($filters->get('order_by')->column, $filters->get('order_by')->DESC ? 'DESC': 'ASC');
}
if($filters->has('group_by')){
$query = $query->groupBy($filters->get('group_by')->column);
}
//dd($query->toSql());
return $filters->has('per_page') ? $query->paginate($filters->get('per_page')) : $query->get();
}
}
}
@@ -18,10 +18,7 @@ abstract class AbstractUpdateRecord
public function handler(Model $model){
try{
if($model->save()) {
return $model;
}
if($model->save()){ return $model; }
} catch (QueryException $exception){
throw new MalformedRequestException($exception);
@@ -1,20 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class ClaimantId implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('claimant_id', $value);
}
}
@@ -1,21 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Builder;
class CreatedAfter implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('created_at', '>', Carbon::parse($value));
}
}
@@ -1,37 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\SegmentConstants;
use App\Classes\ValueObjects\Constants\TransactionType;
use Illuminate\Database\Eloquent\Builder;
class CreditTerm implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder;
return $builder->whereHas('packingLists.owner', function($query) use($value) {
$query->whereHas('companyModule.connections', function($query) use($value){
if ($value) {
$query->whereHas('segments', function($query) {
$query->where('segments.id' , 3);
});
}else{
$query->whereDoesntHave('segments', function($query) {
$query->where('segments.id' , 3);
});
}
});
});
}
}
@@ -1,32 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\PackingListType;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Carbon;
class Delivered implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('packingList', function($packingList){
return $packingList->where('type', PackingListType::SHIPPING_PACKING_LIST)->where('status', ApprovalStatus::APPROVED);
})->whereHas('container',
function($container) {
return $container->where('containers.status', ApprovalStatus::COMPLETED);
}
)->whereHas('deliverySchedules',
function($schedule) {
return $schedule->where('eta', '<', Carbon::now())->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
}
);
}
}
@@ -1,23 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Builder;
class DoesNotHaveTransactionType implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereDoesntHave('transactions', function (Builder $query) use($value) {
$query->where('type', $value);
})->whereHas('containers', function ($query){
return $query->whereDate('loading_date', '>=', Carbon::parse('20-09-2022'));
});
}
}
@@ -1,20 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class HasInvoiceStatusIn implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('transactions', function (Builder $query) use($value) {
$query->where('type', 1)->whereIn('status', $value);
});
}
}
@@ -1,24 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class HasPendingDelivery implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $value ? $builder->whereHas('packingLists', function (Builder $query) use($value) {
$query->whereDoesntHave('transports');
}) : $builder->whereDoesntHave('packingLists', function (Builder $query) use($value) {
$query->whereDoesntHave('transports');
});
}
}
@@ -1,20 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class HasTransactionType implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('transactions', function (Builder $query) use($value) {
$query->where('type', $value);
});
}
}
@@ -1,32 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\PackingListType;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Carbon;
class InDestinationWarehouse implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('packingList', function($packingList){
return $packingList->where('type', PackingListType::SHIPPING_PACKING_LIST)->where('status', ApprovalStatus::APPROVED);
})->whereHas('container',
function($container) {
return $container->where('containers.status', ApprovalStatus::COMPLETED);
}
)->whereDoesntHave('deliverySchedules',
function($schedule) {
return $schedule->where('etd', '<', Carbon::now())->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
}
);
}
}
@@ -1,29 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\PackingListType;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Carbon;
class InOriginWarehouse implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('packingList', function($packingList){
return $packingList->where('type', PackingListType::SHIPPING_PACKING_LIST)->where('status', ApprovalStatus::APPROVED);
})->whereDoesntHave('shippingSchedules',
function($schedule) {
return $schedule->where('etd', '<', Carbon::now())
->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
}
);
}
}
@@ -1,33 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\PackingListType;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Carbon;
class InTransit implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('packingList', function($packingList){
return $packingList->where('type', PackingListType::SHIPPING_PACKING_LIST)->where('status', ApprovalStatus::APPROVED);
})->whereHas('container',
function($container) {
return $container->where('containers.status', ApprovalStatus::PENDING_VERIFICATION);
}
)->whereHas('shippingSchedules',
function($schedule) {
return $schedule->where('etd', '<', Carbon::now())
->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
}
);
}
}
@@ -1,21 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Builder;
class IsPublished implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereDate('starting_on', '<=', Carbon::now())
->whereDate('ending_on', '>=', Carbon::now());
}
}
@@ -1,20 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class OwnerId implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('owner_id', $value);
}
}
@@ -1,20 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class OwnerIdNotIn implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereNotIn('owner_id', $value);
}
}
@@ -1,31 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use Illuminate\Support\Carbon;
use Illuminate\Database\Eloquent\Builder;
class PackingListDeliveryStatus implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $value == 1 ? $builder->whereHas('containers', function ($query){
$query->where('containers.status', ApprovalStatus::COMPLETED);
})->whereDoesntHave('transports') : ($value == 2 ? $builder->whereHas('transports', function (Builder $query) use ($value) {
$query->whereDoesntHave('schedules', function (Builder $query) use ($value) {
$query->where('status', '!=', ApprovalStatus::EXPIRED)->where('eta', '<=', Carbon::now());
});
}) : $builder->whereHas('transports', function (Builder $query) use ($value) {
$query->whereHas('schedules', function (Builder $query) use ($value) {
$query->where('status', '!=', ApprovalStatus::EXPIRED)->where('eta', '<=', Carbon::now());
});
}));
}
}
@@ -1,29 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\SegmentConstants;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Models\PackingList;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\DB;
class PackingListOrderedByInvoiceDate implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->select('packing_lists.*')->join('transactions', function($join){
$join->on('transactions.owner_id', '=', 'packing_lists.id');
$join->where('transactions.owner_type', '=', PackingList::class);
$join->where('transactions.status', '=', ApprovalStatus::APPROVED);
})->orderBy('transactions.updated_at', 'DESC');
}
}
@@ -1,20 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class PackingListStatus implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('packing_lists.status', $value);
}
}
@@ -1,20 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class PackingListType implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('packing_lists.type', $value);
}
}
@@ -1,24 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Builder;
class PaymentDay implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('transactions', function (Builder $query) use($value) {
$query->where('transactions.type', 1)->where('status', ApprovalStatus::APPROVED)->whereDate('updated_at', '<=', Carbon::now()->subdays($value));
});
}
}
@@ -1,20 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class PaymentReference implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('payment_reference', '=', $value);
}
}
@@ -14,7 +14,7 @@ class Reference implements Filter
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('reference', '=', $value);
return $builder->where('Reference', '=', $value);
}
}
@@ -1,20 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class ReferenceLike implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('reference', 'LIKE', '%'.$value.'%');
}
}
@@ -1,20 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class SegmentIdIn implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereIn('segment_id', $value);
}
}
@@ -1,21 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use App\Models\User;
use Illuminate\Database\Eloquent\Builder;
class TargetId implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('target_type', User::class)->where('target_id', $value);
}
}
@@ -1,20 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class TypeIn implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereIn('type', $value);
}
}
@@ -1,24 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\PackingListType;
use Illuminate\Database\Eloquent\Builder;
class WarehouseParcels implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('packingList', function ($query){
return $query->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->where('status', ApprovalStatus::APPROVED);
});
}
}
@@ -1,22 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\DB;
class WithArrivalDate implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->leftJoin('transport_arrangements', function ($join) {
$join->on('packing_lists.id', '=', 'transport_arrangements.owner_id')->where('transport_arrangements.owner_type', 'App\Models\PackingList');
})->addSelect(['packing_lists.*', DB::raw('transport_arrangements.drop_date as arrival_date')]);
}
}
@@ -1,20 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class WithConfirmedOrders implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('parcels');
}
}
@@ -1,20 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class WithOwner implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->with('owner');
}
}
@@ -1,20 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class WithPackingLists implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->with('packingLists');
}
}
@@ -1,20 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class WithoutConfirmedOrders implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereDoesntHave('parcels');
}
}
-36
View File
@@ -1,36 +0,0 @@
<?php
namespace App\Classes\General\Eloquent;
use Illuminate\Support\Facades\Schema;
use DB;
trait logData
{
public static function boot()
{
parent::boot();
static::updating(function($model)
{
if (!Schema::hasTable(''.$model->table.'log')) {
DB::statement('CREATE TABLE '.$model->table.'log LIKE '.$model->table);
DB::statement('ALTER TABLE '.$model->table.'log DROP COLUMN id');
DB::statement('ALTER TABLE '.$model->table.'log ADD id INTEGER FIRST');
}
DB::table(''.$model->table.'log')->insert($model->getRawOriginal());
});
}
public function logs($model){
$result = DB::table(''.$model->table.'log')
->where('id', $model->id)
->get();
return $result;
}
}
-87
View File
@@ -1,87 +0,0 @@
<?php
namespace App\Classes\General;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Cache;
class ExcelHandel
{
function __construct()
{
}
public static function generateFolder($path = '')
{
$folder = \Storage::disk('public')->makeDirectory($path);
return $folder;
}
public static function insertExcel($path = '', $base64Set = [])
{
$file_info = [];
$folder_path = ExcelHandel::generateFolder('excels/' . $path);
foreach ($base64Set as $key => $row) {
$exceldata = $row;
$filename = (string) Str::uuid();
$f = finfo_open();
$mime_type = finfo_file($f, $exceldata, FILEINFO_MIME_TYPE);
$extension = 'xls';
switch ($mime_type) {
case 'application/vnd.ms-excel':
$extension = 'xls';
break;
case 'application/zip':
$extension = 'xlsx';
break;
}
if (empty($extension)) {
return false;
}
$exceldata = explode('base64,', $exceldata);
$exceldata = base64_decode($exceldata[1]);
$filename_with_ext = $filename . '.' . $extension;
$file = ExcelHandel::generateExcel($path, $exceldata, $filename, $extension);
$file_info[] = [
'path' => $path,
'filename' => $filename_with_ext,
'mime_type' => $mime_type,
'extension' => $extension,
'file_info' => empty($file) ? [] : $file,
];
}
return $file_info;
}
public static function generateExcel($path = '', $exceldata = '', $filename = '', $extension = '')
{
$file_info = [];
$file = \Storage::disk('public')->put('excels/' . $path . '/' . $filename . '.' . $extension, $exceldata);
$file_info['original']['file'] = storage_path('app/public/excels/' . $path . '/' . $filename . '.' . $extension);
return $file_info;
}
public static function removeExcel($excel_info = [])
{
$excel_info = json_decode(json_encode($excel_info), true);
foreach ($excel_info as $key => $row) {
if (!empty($row['path'])) {
\File::delete([$row['file_info']['original']['file']]);
}
}
return true;
}
}
@@ -1,15 +0,0 @@
<?php
namespace App\Classes\General\Interfaces;
use Illuminate\Database\Eloquent\Relations\MorphTo;
interface Notifiable
{
public function subject(): MorphTo;
public function target(): MorphTo;
public function causer(): MorphTo;
}
@@ -7,6 +7,7 @@ use Illuminate\Database\Eloquent\Relations\MorphMany;
interface Packable
{
public function packingLists(): morphMany;
}
@@ -1,13 +0,0 @@
<?php
namespace App\Classes\General\Interfaces;
use Illuminate\Database\Eloquent\Relations\MorphMany;
interface Remarkable
{
public function remarks(): morphMany;
}
@@ -1,13 +0,0 @@
<?php
namespace App\Classes\General\Interfaces;
use Illuminate\Database\Eloquent\Relations\MorphMany;
interface Transactionable
{
public function transactions(): morphMany;
}
+94
View File
@@ -0,0 +1,94 @@
<?php
namespace App\Classes\Jobs;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class CurlContainerListJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
private $page;
public function __construct($page = 1)
{
$this->page = $page;
}
/**
* Execute the job.
*
* @return void
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function handle()
{
$cookies = $this->getCookie();
$headers = [
'Content-Type' => 'application/json',
'Cookie' => $cookies,
];
$last_two_month = Carbon::now()->subMonth(2)->format('Y-m-d');
$client = new \GuzzleHttp\Client(['headers' => $headers]);
$res = $client->post('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', [\GuzzleHttp\RequestOptions::JSON => json_decode('{"controller":"VCustomercontainer","view":"grid1","request":{"PageIndex":' . $this->page . ',"PageSize":10,"PageOffset":0,"SortExpression":"CreatedOn DESC","GroupExpression":"","Filter":["LoadedTime:<=%js%\"' . $last_two_month . 'T00:00:00.000\"\u0000"],"ContextKey":"view1","FilterIsExternal":false,"LookupContextFieldName":null,"LookupContextController":null,"LookupContextView":null,"LookupContext":null,"Inserting":false,"LastCommandName":null,"ExternalFilter":[],"DoesNotRequireData":false,"LastView":"grid1","Tag":null,"RequiresFirstLetters":false,"ViewType":"Grid","SupportsCaching":true,"SystemFilter":null,"RequiresRowCount":true,"QuickFindHint":null,"RequiresPivot":false,"PivotDefinitions":null,"RequiresMetaData":true}}')]);
$data = json_decode($res->getBody()->getContents());
if (!empty($data->d->Rows)) {
// insert data here
// next page
$this->page = $this->page > 0 ? $this->page + 1 : 1;
CurlContainerListJob::dispatch($this->page + 1)
->delay(Carbon::now()->addSeconds(10));
}
}
public function getCookie()
{
// get latest cookies
$client = new \GuzzleHttp\Client(['cookies' => true]);
$r = $client->request('GET', 'https://portalvt.azurewebsites.net');
$call_cookie = $client->getConfig('cookies');
$call_cookie = $call_cookie->toArray();
$latest_cookie = [];
foreach ($call_cookie as $key => $row) {
$latest_cookie[] = $row['Name'] . '=' . $row['Value'];
}
$latest_cookie = implode(';', $latest_cookie);
// get access token
$headers = [
'Content-Type' => 'application/json',
'Cookie' => $latest_cookie,
];
$client = new \GuzzleHttp\Client(['headers' => $headers]);
$res = $client->post('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/Login', [\GuzzleHttp\RequestOptions::JSON => [
"username" => "CIEF",
"password" => "0122120880",
"createPersistentCookie" => true,
]]);
$token = json_decode($res->getBody()->getContents());
$token = $token->d->AccessToken;
$latest_cookie = $latest_cookie . ';AppVTCC=' . $token;
return $latest_cookie;
}
}
@@ -1,32 +0,0 @@
<?php
namespace App\Classes\Jobs;
use App\Classes\Modules\PackingLists\Processors\FetchOrderListsFromYdPortalProcessor;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class FetchOrdersFromYDPortalJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $timeout = 900;
/**
* Execute the job.
*
* @return void
* @throws \Illuminate\Contracts\Container\BindingResolutionException
*/
public function handle()
{
(App()->make(FetchOrderListsFromYdPortalProcessor::class))->execute();
}
}
@@ -1,78 +0,0 @@
<?php
namespace App\Classes\Modules\Accounts\ControllersLogic;
use App\Classes\Exceptions\ResourceConflictException;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Accounts\Processors\CreateUserProcessor;
use App\Classes\Modules\Accounts\Processors\GenerateEmailVerificationAttemptProcessor;
use App\Classes\Modules\Companies\DataTransferObjects\EmploymentObject;
use App\Classes\Modules\Companies\Processors\AssignEmployeeProcessor;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Http\Resources\UserResource;
use Illuminate\Database\QueryException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class AddNewMemberLogic extends AbstractControllerLogic
{
public function notification(): array
{
return [
'title' => 'Updated Email',
'message' => 'Successfully updated email'
];
}
/**
* @var AssignEmployeeProcessor
*/
private $assignEmployeeProcessor;
/**
* @var GenerateEmailVerificationAttemptProcessor
*/
private $generateEmailVerificationAttemptProcessor;
/**
* AddNewMemberLogic constructor.
* @param AssignEmployeeProcessor $assignEmployeeProcessor
* @param GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor
*/
public function __construct(AssignEmployeeProcessor $assignEmployeeProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor)
{
$this->assignEmployeeProcessor = $assignEmployeeProcessor;
$this->generateEmailVerificationAttemptProcessor = $generateEmailVerificationAttemptProcessor;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ResourceConflictException
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request): JsonResponse
{
try {
$user = Auth::user()->replicate();
$user->email = $request->input('email');
$user->status = ApprovalStatus::PENDING_VERIFICATION;
$user->save();
} catch (QueryException $exception){
throw new ResourceConflictException('Unable to change your email address as it already exists');
}
if($company = Auth::user()->companyModule()->first()){
$Object = new EmploymentObject($company, $user);
$this->assignEmployeeProcessor->execute($Object);
}
$this->generateEmailVerificationAttemptProcessor->execute($user);
return $this->resourceResponse(new UserResource($user));
}
}
@@ -15,7 +15,6 @@ use App\Classes\Modules\Companies\Processors\CreateCompanyModuleProcessor;
use App\Classes\Modules\Companies\DataTransferObjects\EmploymentObject;
use App\Classes\Modules\Companies\Services\ApprovesCompanyConnection;
use App\Classes\Modules\Companies\Services\CreatesCompanyConnection;
use App\Classes\Modules\Companies\Services\FetchesCompanyModule;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
use App\Classes\Modules\Documents\Processors\UploadIdentityDocumentProcessor;
@@ -77,9 +76,6 @@ class CreateCustomerLogic extends AbstractControllerLogic
/** @var GenerateEmailVerificationAttemptProcessor */
private $generateEmailVerificationAttemptProcessor;
/** @var FetchesCompanyModule */
private $fetchesCompanyModule;
/**
* CreateCustomerLogic constructor.
* @param CreateUserProcessor $createUserProcessor
@@ -92,9 +88,8 @@ class CreateCustomerLogic extends AbstractControllerLogic
* @param UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor
* @param AuthenticationProcessor $authenticationProcessor
* @param GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor
* @param FetchesCompanyModule $fetchesCompanyModule
*/
public function __construct(CreateUserProcessor $createUserProcessor, CreateCompanyProcessor $createCompanyProcessor, CreateCompanyModuleProcessor $createCompanyModuleProcessor, CreateContactProcessor $createContactProcessor, CreatesCompanyConnection $createsCompanyConnection, ApprovesCompanyConnection $approvesCompanyConnection, AssignEmployeeProcessor $assignEmployeeProcessor, UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor, AuthenticationProcessor $authenticationProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor, FetchesCompanyModule $fetchesCompanyModule)
public function __construct(CreateUserProcessor $createUserProcessor, CreateCompanyProcessor $createCompanyProcessor, CreateCompanyModuleProcessor $createCompanyModuleProcessor, CreateContactProcessor $createContactProcessor, CreatesCompanyConnection $createsCompanyConnection, ApprovesCompanyConnection $approvesCompanyConnection, AssignEmployeeProcessor $assignEmployeeProcessor, UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor, AuthenticationProcessor $authenticationProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor)
{
$this->createUserProcessor = $createUserProcessor;
$this->createCompanyProcessor = $createCompanyProcessor;
@@ -106,7 +101,6 @@ class CreateCustomerLogic extends AbstractControllerLogic
$this->uploadIdentityDocumentProcessor = $uploadIdentityDocumentProcessor;
$this->authenticationProcessor = $authenticationProcessor;
$this->generateEmailVerificationAttemptProcessor = $generateEmailVerificationAttemptProcessor;
$this->fetchesCompanyModule = $fetchesCompanyModule;
}
/**
@@ -132,9 +126,7 @@ class CreateCustomerLogic extends AbstractControllerLogic
/** @var CompanyModule $companyModule */
$companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::IMPORTER);
$inviter = $this->fetchesCompanyModule->execute(['reference'=>'CIEF']);
$connectionObject = new CompanyConnectionObject($companyModule, $inviter, mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate(), 'CIEF');
$connectionObject = new CompanyConnectionObject($companyModule, 'CIEF', mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate());
$connection = $this->createsCompanyConnection->execute($connectionObject);
@@ -1,105 +0,0 @@
<?php
namespace App\Classes\Modules\Accounts\ControllersLogic;
use App\Classes\Exceptions\AccessForbiddenException;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Accounts\Processors\AuthenticationProcessor;
use App\Classes\Modules\Accounts\Processors\CreateUserProcessor;
use App\Classes\Modules\Companies\Processors\AssignEmployeeProcessor;
use App\Classes\Modules\Companies\DataTransferObjects\EmploymentObject;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\RoleTypes;
use App\Models\Company;
use App\Models\CompanyModule;
use App\Models\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
class CreateInvitedCustomerLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification(): array
{
return [
'title' => 'Created User',
'message' => 'You have successfully created a new User'
];
}
/** @var CreateUserProcessor */
private $createUserProcessor;
/** @var CreateContactProcessor */
private $createContactProcessor;
/** @var FetchesCompany */
private $fetchesCompany;
/** @var AssignEmployeeProcessor */
private $assignEmployeeProcessor;
/** @var AuthenticationProcessor */
private $authenticationProcessor;
/**
* CreateInvitedCustomerLogic constructor.
* @param CreateUserProcessor $createUserProcessor
* @param CreateContactProcessor $createContactProcessor
* @param FetchesCompany $fetchesCompany
* @param AssignEmployeeProcessor $assignEmployeeProcessor
* @param AuthenticationProcessor $authenticationProcessor
*/
public function __construct(CreateUserProcessor $createUserProcessor, CreateContactProcessor $createContactProcessor, FetchesCompany $fetchesCompany, AssignEmployeeProcessor $assignEmployeeProcessor, AuthenticationProcessor $authenticationProcessor)
{
$this->createUserProcessor = $createUserProcessor;
$this->createContactProcessor = $createContactProcessor;
$this->fetchesCompany = $fetchesCompany;
$this->assignEmployeeProcessor = $assignEmployeeProcessor;
$this->authenticationProcessor = $authenticationProcessor;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\AccessUnauthorisedException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request): JsonResponse
{
/** @var Company $company */
$company = $this->fetchesCompany->execute(['id' => $request->input('company_id')]);
/** @var CompanyModule $companyModule */
$companyModule = $company->companyModules()->first();
if($companyModule->employees()->exists()){
throw new AccessForbiddenException('This company\'s account has been claimed by another user already!');
}
/** @var User $user */
$user = $this->createUserProcessor->execute($request, RoleTypes::USER, !App::environment(['production']) ? ApprovalStatus::APPROVED : ApprovalStatus::PENDING_VERIFICATION);
$contactObject = new ContactObject($request->input('name'), $request->input('phone'), $request->input('contact_email'), $request->input('wechat_id'));
$this->createContactProcessor->execute($contactObject, $company);
$Object = new EmploymentObject($companyModule, $user);
$this->assignEmployeeProcessor->execute($Object);
return $this->response($this->authenticationProcessor->execute($request));
}
}
@@ -1,44 +0,0 @@
<?php
namespace App\Classes\Modules\Accounts\ControllersLogic;
use App\Classes\Modules\Accounts\Processors\CrossAuthenticationProcessor;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CrossAuthenticateUserLogic extends AbstractControllerLogic
{
protected function notification():array {
return [
'title' => 'Cross Authentication',
'message' => 'You have successfully logged in to your account'
];
}
/** @var CrossAuthenticationProcessor */
private $crossAuthenticationProcessor;
/**
* CrossAuthenticateUserLogic constructor.
* @param CrossAuthenticationProcessor $authenticationProcessor
*/
public function __construct(CrossAuthenticationProcessor $crossAuthenticationProcessor)
{
$this->crossAuthenticationProcessor = $crossAuthenticationProcessor;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\AccessUnauthorisedException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function logic(Request $request): JsonResponse {
return $this->response($this->crossAuthenticationProcessor->execute($request));
}
}
@@ -12,7 +12,6 @@ use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\ValueObjects\Constants\Notifications;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
class GeneratePasswordResetLogic extends AbstractControllerLogic
{
@@ -27,6 +27,7 @@ class LogoutUserLogic extends AbstractControllerLogic
*/
public function __construct(InvalidatesAuthenticationToken $invalidatesAuthenticationToken)
{
logger("logout user logic");
$this->invalidatesAuthenticationToken = $invalidatesAuthenticationToken;
}
@@ -36,6 +37,7 @@ class LogoutUserLogic extends AbstractControllerLogic
*/
protected function logic(Request $request): JsonResponse {
logger("logout");
$this->invalidatesAuthenticationToken->execute();
return $this->response();
@@ -1,43 +0,0 @@
<?php
namespace App\Classes\Modules\Accounts\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
class CrossAuthenticationCredentialsObject implements DataTransferObject
{
/** @var string */
private $access_token;
/** @var string */
private $platform;
/**
* CrossAuthenticationCredentialsObject constructor.
* @param string $access_token
* @param string $platform
*/
public function __construct(string $access_token, int $platform)
{
$this->access_token = $access_token;
$this->platform = $platform;
}
/**
* @return string
*/
public function getAccessToken(): string
{
return $this->access_token;
}
/**
* @return string
*/
public function getPlatform(): int
{
return $this->platform;
}
}
@@ -1,54 +0,0 @@
<?php
namespace App\Classes\Modules\Accounts\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
use App\Models\User;
class UserSocialAccountObject implements DataTransferObject
{
/** @var String */
private $app_id;
/** @var User */
private $user;
/** @var integer */
private $platform;
/**
* UserSocialAccountObject constructor.
* @param String $token
* @param String $app_id
*/
public function __construct(String $app_id, User $user, int $platform)
{
$this->app_id = $app_id;
$this->user = $user;
$this->platform = $platform;
}
/**
* @return string
*/
public function getAppId(): String
{
return $this->app_id;
}
/**
* @return User
*/
public function getUser(): User
{
return $this->user;
}
/**
* @return int
*/
public function getPlatform(): int
{
return $this->platform;
}
}
@@ -67,4 +67,4 @@ class AuthenticationProcessor
}
}
}
@@ -1,211 +0,0 @@
<?php
namespace App\Classes\Modules\Accounts\Processors;
use App\Classes\Modules\Accounts\DataTransferObjects\CrossAuthenticationCredentialsObject;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyConnectionObject;
use App\Classes\Modules\Companies\DataTransferObjects\EmploymentObject;
use App\Classes\Modules\Accounts\DataTransferObjects\UserSocialAccountObject;
use App\Classes\Modules\Accounts\Services\CrossAuthenticatesUser;
use App\Classes\Modules\Accounts\Services\AuthenticationRedirect;
use App\Classes\Modules\Accounts\Services\FetchesUser;
use App\Classes\Modules\Accounts\Services\GeneratesAuthenticationToken;
use App\Classes\Modules\Accounts\Standards\Rules\CanCrossAuthenticateUser;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Accounts\Processors\CreateUserProcessor;
use App\Classes\Modules\Companies\Processors\CreateCompanyProcessor;
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
use App\Classes\Modules\Companies\Processors\CreateCompanyModuleProcessor;
use App\Classes\Modules\Companies\Services\CreatesCompanyConnection;
use App\Classes\General\Services\GeneratesInitials;
use App\Classes\Modules\Companies\Services\ApprovesCompanyConnection;
use App\Classes\Modules\Companies\Processors\AssignEmployeeProcessor;
use App\Classes\Modules\Documents\Processors\UploadIdentityDocumentProcessor;
use App\Classes\Modules\Accounts\Services\CreatesUserSocialAccount;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Classes\ValueObjects\Constants\CompanyType;
use App\Classes\ValueObjects\Constants\RoleTypes;
use Illuminate\Http\Request;
use App\Models\UserSocialAccount;
class CrossAuthenticationProcessor
{
/** @var CanCrossAuthenticateUser */
private $canCrossAuthenticateUser;
/** @var CrossAuthenticatesUser */
private $authenticatesUser;
/** @var GeneratesAuthenticationToken */
private $generatesAuthenticationToken;
/** @var FetchesUser */
private $fetchesUser;
/** @var AuthenticationRedirect */
private $authenticationRedirect;
/** @var CreateUserProcessor */
private $createUserProcessor;
/** @var CreateCompanyProcessor */
private $createCompanyProcessor;
/** @var CreateContactProcessor */
private $createContactProcessor;
/** @var CreateCompanyModuleProcessor */
private $createCompanyModuleProcessor;
/** @var CreatesCompanyConnection */
private $createsCompanyConnection;
/** @var ApprovesCompanyConnection */
private $approvesCompanyConnection;
/** @var AssignEmployeeProcessor */
private $assignEmployeeProcessor;
/** @var UploadIdentityDocumentProcessor */
private $uploadIdentityDocumentProcessor;
/** @var CreatesUserSocialAccount */
private $createsUserSocialAccount;
/**
* CrossAuthenticationProcessor constructor.
* @param CanCrossAuthenticateUser $canCrossAuthenticateUser
* @param CrossAuthenticatesUser $crossAuthenticatesUser
* @param GeneratesAuthenticationToken $generatesAuthenticationToken
* @param FetchesUser $fetchesUser
* @param AuthenticationRedirect $authenticationRedirect
* @param CreateUserProcessor $createUserProcessor
* @param CreateCompanyProcessor $createCompanyProcessor
* @param CreateContactProcessor $createContactProcessor
* @param CreateCompanyModuleProcessor $createCompanyModuleProcessor
* @param CreatesCompanyConnection $createsCompanyConnection
* @param ApprovesCompanyConnection $approvesCompanyConnection
* @param AssignEmployeeProcessor $assignEmployeeProcessor
* @param UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor
* @param CreatesUserSocialAccount $createsUserSocialAccount
*/
public function __construct(
CanCrossAuthenticateUser $canCrossAuthenticateUser,
CrossAuthenticatesUser $crossAuthenticatesUser,
GeneratesAuthenticationToken $generatesAuthenticationToken,
FetchesUser $fetchesUser,
AuthenticationRedirect $authenticationRedirect,
CreateUserProcessor $createUserProcessor,
CreateCompanyProcessor $createCompanyProcessor,
CreateContactProcessor $createContactProcessor,
CreateCompanyModuleProcessor $createCompanyModuleProcessor,
CreatesCompanyConnection $createsCompanyConnection,
ApprovesCompanyConnection $approvesCompanyConnection,
AssignEmployeeProcessor $assignEmployeeProcessor,
UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor,
CreatesUserSocialAccount $createsUserSocialAccount
)
{
$this->canCrossAuthenticateUser = $canCrossAuthenticateUser;
$this->crossAuthenticatesUser = $crossAuthenticatesUser;
$this->generatesAuthenticationToken = $generatesAuthenticationToken;
$this->fetchesUser = $fetchesUser;
$this->authenticationRedirect = $authenticationRedirect;
$this->createUserProcessor = $createUserProcessor;
$this->createCompanyProcessor = $createCompanyProcessor;
$this->createContactProcessor = $createContactProcessor;
$this->createCompanyModuleProcessor = $createCompanyModuleProcessor;
$this->createsCompanyConnection = $createsCompanyConnection;
$this->createsCompanyConnection = $createsCompanyConnection;
$this->approvesCompanyConnection = $approvesCompanyConnection;
$this->assignEmployeeProcessor = $assignEmployeeProcessor;
$this->uploadIdentityDocumentProcessor = $uploadIdentityDocumentProcessor;
$this->createsUserSocialAccount = $createsUserSocialAccount;
}
/**
* @param Request $request
* @return array
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\AccessUnauthorisedException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(Request $request): array {
$object = new CrossAuthenticationCredentialsObject($request->input('access_token'), $request->input('platform'));
$this->canCrossAuthenticateUser->passes($object);
$cross = $this->crossAuthenticatesUser->execute($object);
$user_social_account = UserSocialAccount::where('app_id', $cross->token->user->id)->first();
if (!$user_social_account) {
$request->request->add([
'name' => $cross->token->user->name,
'email' => $cross->token->user->email,
'password' => 'pass123',
'password_confirmation' => 'pass123',
]);
$user = $this->createUserProcessor->execute(
$request,
RoleTypes::USER,
env('APP_ENV') != 'production' ? ApprovalStatus::APPROVED : ApprovalStatus::PENDING_VERIFICATION
);
$company = $this->createCompanyProcessor->execute(
$cross->payload->data->name,
CompanyType::COMPANY_BUSINESS,
ApprovalStatus::PENDING_SUBMISSION
);
$contactObject = new ContactObject(
$cross->payload->data->contact->reference,
$cross->payload->data->contact->phone,
$cross->payload->data->contact->email,
$cross->payload->data->contact->wechat_id
);
$contact = $this->createContactProcessor->execute($contactObject, $company);
$companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::IMPORTER);
$connectionObject = new CompanyConnectionObject(
$companyModule, 'CIEF',
mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate()
);
$connection = $this->createsCompanyConnection->execute($connectionObject);
$this->approvesCompanyConnection->execute($connection);
$object = new EmploymentObject($companyModule, $user);
$this->assignEmployeeProcessor->execute($object);
$request->request->add([
'files' => [$cross->document->src],
'identification_no' => $cross->payload->data->identification->reference,
]);
$this->uploadIdentityDocumentProcessor->execute($request, $company);
$object = new UserSocialAccountObject(
$cross->token->user->id,
$user,
$request->input('platform')
);
$this->createsUserSocialAccount->execute($object);
}
else {
$user = $user_social_account->user()->first();
}
return ['access_token' => $this->generatesAuthenticationToken->execute($user), 'redirect_url' => $this->authenticationRedirect->url($user)];
}
}
@@ -56,4 +56,4 @@ class GenerateEmailVerificationAttemptProcessor
}
}
}
@@ -23,4 +23,4 @@ class AuthenticatesUser
}
}
}
@@ -2,7 +2,6 @@
namespace App\Classes\Modules\Accounts\Services;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Classes\ValueObjects\Constants\RoleTypes;
use App\Models\User;
@@ -12,11 +11,6 @@ class AuthenticationRedirect
public function url(User $user){
if($user->type === RoleTypes::USER){
if (in_array($user->companyModule()->first()->type, [BusinessType::ONLINE_SELLER, BusinessType::LAST_MILE_DELIVERY_AGENT])) {
return route('last_mile_delivery.dashboard');
}
return route('dashboard');
}
@@ -1,24 +0,0 @@
<?php
namespace App\Classes\Modules\Accounts\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Accounts\DataTransferObjects\UserSocialAccountObject;
use App\Models\UserSocialAccount;
class CreatesUserSocialAccount extends AbstractUpdateRecord
{
/**
* @param UserSocialAccountObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(UserSocialAccountObject $object) {
$model = new UserSocialAccount();
$model->user_id = $object->getUser()->id;
$model->app_id = $object->getAppId();
$model->platform = $object->getPlatform();
return $this->handler($model);
}
}
@@ -1,40 +0,0 @@
<?php
namespace App\Classes\Modules\Accounts\Services;
use Illuminate\Support\Facades\Http;
use App\Classes\Exceptions\AccessUnauthorisedException;
use App\Classes\Modules\Accounts\DataTransferObjects\CrossAuthenticationCredentialsObject;
use App\Classes\ValueObjects\Constants\PlatformType;
class CrossAuthenticatesUser
{
/**
* @param CrossAuthenticationCredentialsObject $object
* @return false|string
* @throws AccessUnauthorisedException
*/
public function execute(CrossAuthenticationCredentialsObject $object){
if ($object->getPlatform() == PlatformType::EXCHANGE) {
$token = $object->getAccessToken();
$tokenParts = explode(".", $token);
$tokenPayload = base64_decode($tokenParts[1]);
$jwtPayload = json_decode($tokenPayload);
$response = Http::withToken($object->getAccessToken())->get(env('EXCHANGE_URL') . 'api/v1/company/' . $jwtPayload->user->company_id . '/show')->object();
$response_document = Http::withToken($object->getAccessToken())->get(env('EXCHANGE_URL') . 'api/v1/storage/' . $response->payload->data->identification->files[0]->file->file_info[0]->original->file . '/fetch')->object();
$response->token = $jwtPayload;
$response->document = $response_document->payload;
}
return $response;
}
}
@@ -1,33 +0,0 @@
<?php
namespace App\Classes\Modules\Accounts\Services;
use App\Classes\General\Eloquent\AbstractFetchRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\UserSocialAccount;
class FetchesUserSocialAccount extends AbstractFetchRecord
{
/** @var UserSocialAccount */
private $repository;
/**
* FetchesUser constructor.
* @param UserSocialAccount $repository
*/
public function __construct(UserSocialAccount $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
public function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -68,11 +68,7 @@ class GeneratesAuthenticationToken {
$companyModule = $user->companyModule()->first();
$claims = array_merge($claims, [
'company_id' => $companyModule->company_id,
'company_module_id' => $companyModule->id,
'company_module_type' => $companyModule->type,
'company_name' => $companyModule->name,
'company_marking' => $companyModule->type !== 8 ? $companyModule->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference : 'HWT',
'company_id' => $companyModule->company_id
]);
}
@@ -1,54 +0,0 @@
<?php
namespace App\Classes\Modules\Accounts\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Exceptions\RequestValidationException;
use App\Classes\Modules\Accounts\DataTransferObjects\AuthenticationCredentialsObject;
use App\Classes\Modules\Accounts\Standards\Validators\UserCrossAuthenticationValidation;
class CanCrossAuthenticateUser extends AbstractRule
{
/** @var UserCrossAuthenticationValidation */
private $userCrossAuthenticationValidation;
/**
* CanCrossAuthenticateUser constructor.
* @param UserCrossAuthenticationValidation $userCrossAuthenticationValidation
*/
public function __construct(UserCrossAuthenticationValidation $userCrossAuthenticationValidation)
{
$this->userCrossAuthenticationValidation = $userCrossAuthenticationValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
return true;
}
/**
* @param AuthenticationCredentialsObject $object
* @return bool
* @throws RequestValidationException
*/
protected function validators($object): bool
{
return $this->userCrossAuthenticationValidation->validate($object);
}
/**
* @param AuthenticationCredentialsObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -1,43 +0,0 @@
<?php
namespace App\Classes\Modules\Accounts\Standards\Validators;
use App\Classes\General\Abstracts\AbstractValidation;
use App\Classes\Modules\Accounts\DataTransferObjects\CrossAuthenticationCredentialsObject;
class UserCrossAuthenticationValidation extends AbstractValidation
{
/**
* @param CrossAuthenticationCredentialsObject $object
* @return array
*/
protected function data($object): array {
return [
'access_token' => $object->getAccesstoken(),
'platform' => $object->getPlatform()
];
}
/**
* @return array
*/
protected function rules(): array {
return [
'access_token' => 'required',
'platform' => 'required'
];
}
/**
* @return array
*/
protected function messages(): array {
return [];
}
}
@@ -4,19 +4,12 @@ namespace App\Classes\Modules\Addresses\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\General\Interfaces\Contactable;
use App\Classes\Modules\Addresses\Services\CreatesAddress;
use App\Classes\Modules\Addresses\Services\FetchesDistrict;
use App\Classes\Modules\Addresses\Standards\Rules\CanCreateAddress;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Classes\Modules\Companies\Services\FetchesCompanyModule;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Http\Resources\AddressResource;
use App\Models\Address;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -46,29 +39,19 @@ class CreateAddressLogic extends AbstractControllerLogic
/** @var CreatesAddress */
private $createsAddress;
/** @var CreateContactProcessor */
private $createContactProcessor;
/** @var CreateRemarkProcessor */
private $createRemarkProcessor;
/**
* CreateAddressLogic constructor.
* @param CanCreateAddress $canCreateAddress
* @param FetchesDistrict $fetchesDistrict
* @param FetchesCompanyModule $fetchesCompanyModule
* @param CreatesAddress $createsAddress
* @param CreateContactProcessor $createContactProcessor
* @param CreateRemarkProcessor $createRemarkProcessor
*/
public function __construct(CanCreateAddress $canCreateAddress, FetchesDistrict $fetchesDistrict, FetchesCompanyModule $fetchesCompanyModule, CreatesAddress $createsAddress, CreateContactProcessor $createContactProcessor, CreateRemarkProcessor $createRemarkProcessor)
public function __construct(CanCreateAddress $canCreateAddress, FetchesDistrict $fetchesDistrict, FetchesCompanyModule $fetchesCompanyModule, CreatesAddress $createsAddress)
{
$this->canCreateAddress = $canCreateAddress;
$this->fetchesDistrict = $fetchesDistrict;
$this->fetchesCompanyModule = $fetchesCompanyModule;
$this->createsAddress = $createsAddress;
$this->createContactProcessor = $createContactProcessor;
$this->createRemarkProcessor = $createRemarkProcessor;
}
/**
@@ -83,23 +66,12 @@ class CreateAddressLogic extends AbstractControllerLogic
$district = $this->fetchesDistrict->execute(['id' => $request->input('district_id')]);
$object = new AddressObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'), $request->input('type'), ApprovalStatus::APPROVED, $request->input('reference'));
$object = new AddressObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'), $request->input('reference'));
$this->canCreateAddress->passes($object);
/** @var Address $address */
$address = $this->createsAddress->execute($this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]), $object);
if($request->input('phone')){
$contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', '');
$this->createContactProcessor->execute($contactObject, $address);
}
if($request->input('remark')){
$remarkObject = new RemarkObject($request->input('remark'), Auth()->user()->id);
$this->createRemarkProcessor->execute($address, $remarkObject);
}
return $this->resourceResponse(new AddressResource($address));
}
@@ -1,54 +0,0 @@
<?php
namespace App\Classes\Modules\Addresses\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Addresses\Services\ListsAddresses;
use App\Classes\Modules\Addresses\Services\ListsStates;
use App\Classes\Modules\Addresses\Standards\Rules\CanListAddresses;
use App\Http\Resources\AddressResource;
use App\Http\Resources\StateResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListStatesLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieved Addresses',
'message' => 'You have successfully retrieved a list of Addresses'
];
}
/** @var ListsStates */
private $listStates;
/**
* ListStatesLogic constructor.
* @param ListsStates $listStates
*/
public function __construct(ListsStates $listStates)
{
$this->listStates = $listStates;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request) : JsonResponse
{
$query = $this->listStates->execute($this->listStates->deserializeFilters($request->input('filters')));
return $this->collectionResponse(StateResource::collection($query));
}
}
@@ -9,14 +9,7 @@ use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\Modules\Addresses\Services\FetchesDistrict;
use App\Classes\Modules\Addresses\Standards\Rules\CanUpdateAddress;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor;
use App\Classes\ValueObjects\Constants\AddressType;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Http\Resources\AddressResource;
use App\Models\Address;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -45,31 +38,22 @@ class UpdateAddressLogic extends AbstractControllerLogic
/** @var FetchesDistrict */
private $fetchesDistrict;
/** @var CreateContactProcessor */
private $createContactProcessor;
/** @var CreateRemarkProcessor */
private $createRemarkProcessor;
/**
* UpdateAddressLogic constructor.
* @param CanUpdateAddress $canUpdateAddress
* @param UpdatesAddress $updatesAddress
* @param FetchesAddress $fetchesAddress
* @param FetchesDistrict $fetchesDistrict
* @param CreateContactProcessor $createContactProcessor
* @param CreateRemarkProcessor $createRemarkProcessor
*/
public function __construct(CanUpdateAddress $canUpdateAddress, UpdatesAddress $updatesAddress, FetchesAddress $fetchesAddress, FetchesDistrict $fetchesDistrict, CreateContactProcessor $createContactProcessor, CreateRemarkProcessor $createRemarkProcessor)
public function __construct(CanUpdateAddress $canUpdateAddress, UpdatesAddress $updatesAddress, FetchesAddress $fetchesAddress, FetchesDistrict $fetchesDistrict)
{
$this->canUpdateAddress = $canUpdateAddress;
$this->updatesAddress = $updatesAddress;
$this->fetchesAddress = $fetchesAddress;
$this->fetchesDistrict = $fetchesDistrict;
$this->createContactProcessor = $createContactProcessor;
$this->createRemarkProcessor = $createRemarkProcessor;
}
/**
* @param Request $request
* @return JsonResponse
@@ -81,27 +65,14 @@ class UpdateAddressLogic extends AbstractControllerLogic
{
$district = $this->fetchesDistrict->execute(['id' => $request->input('district_id')]);
$object = new AddressObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'), AddressType::DELIVERY, ApprovalStatus::APPROVED, $request->input('reference'));
$object = new AddressObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'), $request->input('reference'));
$this->canUpdateAddress->passes($object);
$address = $this->fetchesAddress->execute(['id' => $request->route('id')]);
/** @var Address $address */
$address = $this->updatesAddress->execute($address, $object);
$address->contacts()->delete(); $address->remarks()->delete();
if($request->input('phone')){
$contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', '');
$this->createContactProcessor->execute($contactObject, $address);
}
if($request->input('remark')){
$remarkObject = new RemarkObject($request->input('remark'), Auth()->user()->id);
$this->createRemarkProcessor->execute($address, $remarkObject);
}
return $this->resourceResponse(new AddressResource($address));
}
@@ -3,7 +3,6 @@
namespace App\Classes\Modules\Addresses\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
class AddressObject implements DataTransferObject
{
@@ -26,12 +25,6 @@ class AddressObject implements DataTransferObject
/** @var int */
private $postCode;
/** @var int */
private $type;
/** @var int */
private $status;
/** @var string|null */
private $reference;
@@ -43,11 +36,9 @@ class AddressObject implements DataTransferObject
* @param int $stateId
* @param int $districtId
* @param int $postCode
* @param int $type
* @param int $status
* @param null|string $reference
*/
public function __construct(string $streetOne, ?string $streetTwo, int $countryId, int $stateId, int $districtId, int $postCode, int $type, int $status, ?string $reference = null)
public function __construct(string $streetOne, ?string $streetTwo, int $countryId, int $stateId, int $districtId, int $postCode, ?string $reference = null)
{
$this->streetOne = $streetOne;
$this->streetTwo = $streetTwo;
@@ -55,8 +46,6 @@ class AddressObject implements DataTransferObject
$this->stateId = $stateId;
$this->districtId = $districtId;
$this->postCode = $postCode;
$this->type = $type;
$this->status = $status;
$this->reference = $reference;
}
@@ -108,22 +97,6 @@ class AddressObject implements DataTransferObject
return $this->postCode;
}
/**
* @return int
*/
public function getType(): int
{
return $this->type;
}
/**
* @return int
*/
public function getStatus(): int
{
return $this->status;
}
/**
* @return null|string
*/
@@ -7,7 +7,6 @@ use App\Classes\Modules\Addresses\Services\CleansOldAddress;
use App\Classes\Modules\Addresses\Services\CreatesAddress;
use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Models\OldAddress;
use App\Models\Order;
use Illuminate\Database\Eloquent\Model;
class CreateAddressFromOldAddressProcessor
@@ -45,8 +44,8 @@ class CreateAddressFromOldAddressProcessor
}
if(!$addressable instanceof Order && $address = $addressable->addresses()->where('street_one', $object->getStreetOne())->first()) {
return $address;
if($address = $addressable->addresses()->where('street_one', $object->getStreetOne())->first()){
return $address;
}
return $this->createsAddress->execute($addressable, $object);
@@ -10,8 +10,6 @@ namespace App\Classes\Modules\Addresses\Services;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Classes\ValueObjects\Constants\AddressType;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Models\District;
use App\Models\OldAddress;
@@ -33,7 +31,7 @@ class CleansOldAddress
return null;
}
return new AddressObject($this->cleanAddress($address->street_one, $district, $address->post_code), $this->cleanAddress($address->street_two, $district, $address->post_code), $district->country_id, $district->state_id, $district->id, $address->post_code, AddressType::DELIVERY, ApprovalStatus::APPROVED, 'Delivery Address');
return new AddressObject($this->cleanAddress($address->street_one, $district, $address->post_code), $this->cleanAddress($address->street_two, $district, $address->post_code), $district->country_id, $district->state_id, $district->id, $address->post_code, 'Delivery Address');
}
@@ -28,8 +28,6 @@ class CreatesAddress extends AbstractUpdateRelationshipRecord
$model->state_id = $object->getStateId();
$model->district_id = $object->getDistrictId();
$model->postcode = $object->getPostCode();
$model->status = $object->getStatus();
$model->type = $object->getType();
return $this->handler($addressable->addresses(), $model);
@@ -1,33 +0,0 @@
<?php
namespace App\Classes\Modules\Addresses\Services;
use App\Classes\General\Eloquent\AbstractListRecord;
use App\Models\State;
use Illuminate\Database\Eloquent\Builder;
class ListsStates extends AbstractListRecord
{
/** @var State */
private $repository;
/**
* ListsStates constructor.
* @param State $repository
*/
public function __construct(State $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -1,61 +0,0 @@
<?php
namespace App\Classes\Modules\Announcements\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Announcements\Services\FetchesAnnouncement;
use App\Classes\Modules\Announcements\Processors\AssignAnnouncementToSegmentProcessor;
use App\Http\Resources\AnnouncementResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class AssignAnnouncementToSegmentLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification(): array
{
return [
'title' => 'Assign Announcement To Segment',
'message' => 'You have successfully assigned Announcement to segment'
];
}
/** @var FetchesAnnouncement */
private $fetchesAnnouncement;
/** @var AssignAnnouncementToSegmentProcessor */
private $assignAnnouncementToSegmentProcessor;
/**
* AssignAnnouncementToSegmentLogic constructor.
* @param FetchesAnnouncement $fetchesAnnouncement
* @param AssignAnnouncementToSegmentProcessor $assignAnnouncementToSegmentProcessor
*/
public function __construct(FetchesAnnouncement $fetchesAnnouncement, AssignAnnouncementToSegmentProcessor $assignAnnouncementToSegmentProcessor)
{
$this->fetchesAnnouncement = $fetchesAnnouncement;
$this->assignAnnouncementToSegmentProcessor = $assignAnnouncementToSegmentProcessor;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request): JsonResponse
{
$announcement = $this->fetchesAnnouncement->execute(['id' => $request->route('id')]);
$this->assignAnnouncementToSegmentProcessor->execute($announcement, $request->input('segment_id'));
return $this->resourceResponse(new AnnouncementResource($announcement));
}
}
@@ -1,82 +0,0 @@
<?php
namespace App\Classes\Modules\Announcements\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Announcements\DataTransferObjects\AnnouncementObject;
use App\Classes\Modules\Announcements\Standards\Rules\CanCreateAnnouncement;
use App\Classes\Modules\Announcements\Services\CreatesAnnouncement;
use App\Classes\Modules\Announcements\Processors\AssignAnnouncementToSegmentProcessor;
use App\Http\Resources\AnnouncementResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateAnnouncementLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification(): array
{
return [
'title' => 'Created Annoucement',
'message' => 'You have successfully created a new Annoucements'
];
}
/** @var CanCreateAnnouncement */
private $canCreateAnnouncement;
/** @var CreatesAnnoucement */
private $createsAnnoucement;
/** @var AssignAnnouncementToSegmentProcessor */
private $assignAnnouncementToSegmentProcessor;
/**
* CreateAnnouncementLogic constructor.
* @param CanCreateAnnoucement $canCreateAnnoucement
* @param CreatesAnnoucement $createsAnnoucement
* @param AssignAnnouncementToSegmentProcessor $assignAnnouncementToSegmentProcessor
*/
public function __construct(
CanCreateAnnouncement $canCreateAnnouncement,
CreatesAnnouncement $createsAnnoucement,
AssignAnnouncementToSegmentProcessor $assignAnnouncementToSegmentProcessor
) {
$this->canCreateAnnouncement = $canCreateAnnouncement;
$this->createsAnnoucement = $createsAnnoucement;
$this->assignAnnouncementToSegmentProcessor = $assignAnnouncementToSegmentProcessor;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request): JsonResponse
{
$annoucement_object = new AnnouncementObject(
$request->input('title'),
$request->input('description'),
$request->input('starting_on'),
$request->input('ending_on')
);
$this->canCreateAnnouncement->passes($annoucement_object);
$announcement = $this->createsAnnoucement->execute($annoucement_object);
$this->assignAnnouncementToSegmentProcessor->execute($announcement);
return $this->resourceResponse(new AnnouncementResource($announcement));
}
}
@@ -1,71 +0,0 @@
<?php
namespace App\Classes\Modules\Announcements\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Announcements\Standards\Rules\CanDeleteAnnouncement;
use App\Classes\Modules\Announcements\Services\FetchesAnnouncement;
use App\Classes\Modules\Announcements\Services\DeletesAnnouncement;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class DeleteAnnouncementLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification(): array
{
return [
'title' => 'Delete Announcement',
'message' => 'You have successfully deleted the Announcement'
];
}
/** @var CanDeleteAnnouncement */
private $canDeleteAnnouncement;
/** @var FetchesAnnouncement */
private $fetchesAnnouncement;
/** @var DeletesAnnouncement */
private $deletesAnnouncement;
/**
* DeleteAnnouncementLogic constructor.
* @param CanDeleteAnnouncement $canDeleteAnnouncement
* @param FetchesAnnouncement $fetchesAnnouncement
* @param DeletesAnnouncement $deletesAnnouncement
*/
public function __construct(
CanDeleteAnnouncement $canDeleteAnnoucement,
FetchesAnnouncement $fetchesAnnoucement,
DeletesAnnouncement $deletesAnnoucement
) {
$this->canDeleteAnnoucement = $canDeleteAnnoucement;
$this->fetchesAnnoucement = $fetchesAnnoucement;
$this->deletesAnnoucement = $deletesAnnoucement;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request): JsonResponse
{
$this->canDeleteAnnoucement->passes();
$annoucement = $this->fetchesAnnoucement->execute(['id' => $request->route('id')]);
$this->deletesAnnoucement->execute($annoucement);
return $this->response([]);
}
}
@@ -1,60 +0,0 @@
<?php
namespace App\Classes\Modules\Announcements\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Announcements\Services\ListsAnnouncements;
use App\Classes\Modules\Announcements\Standards\Rules\CanListAnnouncements;
use App\Http\Resources\AnnouncementResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListAnnouncementsLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification(): array
{
return [
'title' => 'Retrieve Announcements',
'message' => 'You have successfully retrieved a list of Announcements'
];
}
/** @var CanListAnnouncements */
private $canListAnnouncements;
/** @var ListsAnnouncements */
private $listsAnnouncements;
/**
* ListAnnouncementsLogic constructor.
* @param CanListAnnouncements $canListAnnouncements
* @param ListsAnnouncements $listsAnnouncements
*/
public function __construct(CanListAnnouncements $canListAnnouncements, ListsAnnouncements $listsAnnouncements)
{
$this->canListAnnouncements = $canListAnnouncements;
$this->listsAnnouncements = $listsAnnouncements;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request): JsonResponse
{
$this->canListAnnouncements->passes();
$annoucements = $this->listsAnnouncements->execute($this->listsAnnouncements->deserializeFilters($request->input('filters')));
return $this->collectionResponse(AnnouncementResource::collection($annoucements));
}
}
@@ -1,68 +0,0 @@
<?php
namespace App\Classes\Modules\Announcements\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Announcements\Services\FetchesAnnouncement;
use App\Classes\Modules\Segments\Services\FetchesSegment;
use App\Classes\Modules\Announcements\Services\RemovesAnnouncementFromSegment;
use App\Http\Resources\AnnouncementResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class RemoveSegmentFromAnnouncementLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification(): array
{
return [
'title' => 'Detach Announcement From Segment',
'message' => 'You have successfully detached Announcement from segment'
];
}
/** @var FetchesAnnouncement */
private $fetchesAnnnouncement;
/** @var FetchesSegment */
private $fetchesSegment;
/** @var RemovesAnnouncementFromSegment */
private $removesAnnouncementFromSegment;
/**
* RemoveSegmentFromAnnouncementLogic constructor.
* @param FetchesAnnouncement $fetchesAnnnouncement
* @param FetchesSegment $fetchesSegment
* @param RemovesAnnouncementFromSegment $removesAnnouncementFromSegment
*/
public function __construct(FetchesAnnouncement $fetchesAnnnouncement, FetchesSegment $fetchesSegment, RemovesAnnouncementFromSegment $removesAnnouncementFromSegment)
{
$this->fetchesAnnnouncement = $fetchesAnnnouncement;
$this->fetchesSegment = $fetchesSegment;
$this->removesAnnouncementFromSegment = $removesAnnouncementFromSegment;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request): JsonResponse
{
$announcement = $this->fetchesAnnnouncement->execute(['id' => $request->route('id')]);
$segment = $this->fetchesSegment->execute(['id' => $request->route('segment_id')]);
$this->removesAnnouncementFromSegment->execute($announcement, $segment);
return $this->resourceResponse(new AnnouncementResource($announcement));
}
}
@@ -1,83 +0,0 @@
<?php
namespace App\Classes\Modules\Announcements\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Announcements\DataTransferObjects\AnnouncementObject;
use App\Classes\Modules\Announcements\Standards\Rules\CanUpdateAnnouncement;
use App\Classes\Modules\Announcements\Services\FetchesAnnouncement;
use App\Classes\Modules\Announcements\Services\UpdatesAnnouncement;
use App\Http\Resources\AnnouncementResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdateAnnouncementLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification(): array
{
return [
'title' => 'Update Announcement',
'message' => 'You have successfully updated the Announcement'
];
}
/** @var CanUpdateAnnouncement */
private $canUpdateAnnouncement;
/** @var FetchesAnnouncement */
private $fetchesAnnouncement;
/** @var UpdatesAnnouncement */
private $updatesAnnouncement;
/**
* UpdateAnnouncementLogic constructor.
* @param CanUpdateAnnouncement $canUpdateAnnouncement
* @param FetchesAnnouncement $fetchesAnnouncement
* @param UpdatesAnnouncement $updatesAnnouncement
*/
public function __construct(
CanUpdateAnnouncement $canUpdateAnnouncement,
FetchesAnnouncement $fetchesAnnouncement,
UpdatesAnnouncement $updatesAnnouncement
) {
$this->canUpdateAnnouncement = $canUpdateAnnouncement;
$this->fetchesAnnouncement = $fetchesAnnouncement;
$this->updatesAnnouncement = $updatesAnnouncement;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request): JsonResponse
{
$annoucement_object = new AnnouncementObject(
$request->input('title'),
$request->input('description'),
$request->input('starting_on'),
$request->input('ending_on')
);
$this->canUpdateAnnouncement->passes($annoucement_object);
$annoucement = $this->fetchesAnnouncement->execute(['id' => $request->route('id')]);
$announcement_query = $this->updatesAnnouncement->execute($annoucement, $annoucement_object);
//$announcement_query->segments()->sync($request->input('segment_id'));
return $this->resourceResponse(new AnnouncementResource($announcement_query));
}
}
@@ -1,69 +0,0 @@
<?php
namespace App\Classes\Modules\Announcements\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
class AnnouncementObject implements DataTransferObject
{
/** @var string */
private $title;
/** @var string */
private $description;
/** @var string */
private $starting_on;
/** @var string */
private $ending_on;
/**
* AnnouncementObject constructor.
* @param string $title
* @param string $description
* @param string $start_date
* @param string $end_date
*/
public function __construct(string $title, string $description, string $starting_on, string $ending_on)
{
$this->title = $title;
$this->description = $description;
$this->starting_on = $starting_on;
$this->ending_on = $ending_on;
}
/**
* @return string
*/
public function getTitle(): string
{
return $this->title;
}
/**
* @return string
*/
public function getDescription(): string
{
return $this->description;
}
/**
* @return string
*/
public function getStartingOn(): string
{
return $this->starting_on;
}
/**
* @return string
*/
public function getEndingOn(): string
{
return $this->ending_on;
}
}
@@ -1,56 +0,0 @@
<?php
namespace App\Classes\Modules\Announcements\Processors;
use App\Classes\Modules\Announcements\Services\AssignsAnnouncementToSegment;
use App\Classes\Modules\Announcements\Standards\Rules\CanAssignSegment;
use App\Classes\Modules\Segments\Services\FetchesSegment;
use App\Classes\ValueObjects\Constants\SegmentConstants;
use App\Models\Announcement;
use Illuminate\Database\Eloquent\Model;
class AssignAnnouncementToSegmentProcessor
{
/** @var CanAssignSegment */
private $canAssignSegment;
/** @var FetchesSegment */
private $fetchesSegment;
/** @var AssignAnnouncementToSegment */
private $assignsAnnouncementToSegment;
/**
* AssignAnnouncementToSegmentProcessor constructor.
* @param CanAssignSegment $canAssignSegment
* @param AssignAnnouncementToSegment $assignsAnnouncementToSegment
* @param FetchesSegment $fetchesSegment
*/
public function __construct(CanAssignSegment $canAssignSegment, FetchesSegment $fetchesSegment, AssignsAnnouncementToSegment $assignsAnnouncementToSegment)
{
$this->canAssignSegment = $canAssignSegment;
$this->assignsAnnouncementToSegment = $assignsAnnouncementToSegment;
$this->fetchesSegment = $fetchesSegment;
}
/**
* @param Announcement $announcement
* @param int|null $segmentId
* @return Model
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(Announcement $announcement, ?int $segmentId = SegmentConstants::STANDARD_SEGMENT): Model
{
$this->canAssignSegment->passes();
$segment = $this->fetchesSegment->execute(['id' => $segmentId]);
return $this->assignsAnnouncementToSegment->execute($announcement, $segment);
}
}
@@ -1,33 +0,0 @@
<?php
namespace App\Classes\Modules\Announcements\Services;
use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\Announcement;
use App\Models\Segment;
use Illuminate\Database\QueryException;
class AssignsAnnouncementToSegment extends AbstractUpdateRecord
{
/**
* @param Announcement $announcement
* @param Segment $segment
* @return \Illuminate\Database\Eloquent\Model
* @throws MalformedRequestException
*/
public function execute(Announcement $announcement, Segment $segment)
{
try {
$announcement->segments()->attach($segment);
return $announcement;
} catch (QueryException $exception){
throw new MalformedRequestException($exception);
}
}
}
@@ -1,35 +0,0 @@
<?php
namespace App\Classes\Modules\Announcements\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Announcements\DataTransferObjects\AnnouncementObject;
use App\Models\Announcement;
use DateTime;
class CreatesAnnouncement extends AbstractUpdateRecord
{
/**
* @param AnnouncementObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(AnnouncementObject $object)
{
$model = new Announcement();
$model->title = $object->getTitle();
$model->description = $object->getDescription();
// $model->starting_on = $object->getStartingOn();
$model->starting_on = $this->convertDateFormat($object->getStartingOn());
// $model->ending_on = $object->getEndingOn();
$model->ending_on = $this->convertDateFormat($object->getEndingOn());
return $this->handler($model);
}
public function convertDateFormat($value) {
$value = DateTime::createFromFormat('d-m-Y', $value)->format('Y-m-d H:i:s');
return $value;
}
}
@@ -1,19 +0,0 @@
<?php
namespace App\Classes\Modules\Announcements\Services;
use App\Classes\General\Eloquent\AbstractDeleteRecord;
use App\Models\Announcement;
class DeletesAnnouncement extends AbstractDeleteRecord
{
/**
* @param Announcement $model
* @return mixed
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Announcement $model) {
return $this->handler($model);
}
}
@@ -1,34 +0,0 @@
<?php
namespace App\Classes\Modules\Announcements\Services;
use App\Classes\General\Eloquent\AbstractFetchRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\Announcement;
class FetchesAnnouncement extends AbstractFetchRecord
{
/** @var Announcement */
private $repository;
/**
* FetchesAnnouncement constructor.
* @param Announcement $repository
*/
public function __construct(Announcement $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
public function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -1,32 +0,0 @@
<?php
namespace App\Classes\Modules\Announcements\Services;
use App\Classes\General\Eloquent\AbstractListRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\Announcement;
class ListsAnnouncements extends AbstractListRecord
{
/** @var Announcement */
private $repository;
/**
* ListsAnnouncement constructor.
* @param Announcement $repository
*/
public function __construct(Announcement $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -1,33 +0,0 @@
<?php
namespace App\Classes\Modules\Announcements\Services;
use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\Announcement;
use App\Models\Segment;
use Illuminate\Database\QueryException;
class RemovesAnnouncementFromSegment extends AbstractUpdateRecord
{
/**
* @param Announcement $announcement
* @param Segment $segment
* @return \Illuminate\Database\Eloquent\Model
* @throws MalformedRequestException
*/
public function execute(Announcement $announcement, Segment $segment)
{
try {
$announcement->segments()->detach($segment);
return $announcement;
} catch (QueryException $exception){
throw new MalformedRequestException($exception);
}
}
}
@@ -1,27 +0,0 @@
<?php
namespace App\Classes\Modules\Announcements\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Announcements\DataTransferObjects\AnnouncementObject;
use App\Models\Announcement;
class UpdatesAnnouncement extends AbstractUpdateRecord
{
/**
* @param Announcement $model
* @param AnnouncementObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Announcement $model, AnnouncementObject $object)
{
$model->title = $object->getTitle();
$model->description = $object->getDescription();
$model->starting_on = $object->getStartingOn();
$model->ending_on = $object->getEndingOn();
return $this->handler($model);
}
}
@@ -1,40 +0,0 @@
<?php
namespace App\Classes\Modules\Announcements\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\SegmentConstants\DataTransferObjects\SegmentConstantObject;
use App\Classes\Modules\Segments\DataTransferObjects\ConstantObject;
class CanAssignSegment extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param ConstantObject $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param ConstantObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -1,50 +0,0 @@
<?php
namespace App\Classes\Modules\Announcements\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Announcements\Standards\Validators\AnnouncementValidation;
use App\Classes\Modules\Companies\DataTransferObjects\AnnouncementObject;
class CanCreateAnnouncement extends AbstractRule
{
/** @var AnnouncementValidation */
private $AnnouncementValidation;
/**
* CanCreateAnnouncement constructor.
* @param AnnouncementValidation $AnnouncementValidation
*/
public function __construct(AnnouncementValidation $AnnouncementValidation)
{
$this->AnnouncementValidation = $AnnouncementValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
return true;
}
/**
* @param AnnouncementObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return $this->AnnouncementValidation->validate($object);
}
/**
* @param AnnouncementObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -1,40 +0,0 @@
<?php
namespace App\Classes\Modules\Announcements\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Announcement\DataTransferObjects\AnnouncementObject;
class CanDeleteAnnouncement extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param AnnouncementObject $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param AnnouncementObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -1,36 +0,0 @@
<?php
namespace App\Classes\Modules\Announcements\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Announcements\DataTransferObjects\AnnouncementObject;
class CanListAnnouncements extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
return true;
}
/**
* @param AnnouncementObject $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param AnnouncementObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -1,54 +0,0 @@
<?php
namespace App\Classes\Modules\Announcements\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Announcements\DataTransferObjects\AnnouncementObject;
use App\Classes\Modules\Announcements\Standards\Validators\AnnouncementValidation;
class CanUpdateAnnouncement extends AbstractRule
{
/** @var AnnouncementValidation */
private $AnnouncementValidation;
/**
* CanUpdateAnnouncement constructor.
* @param AnnouncementValidation $AnnouncementValidation
*/
public function __construct(AnnouncementValidation $AnnouncementValidation)
{
$this->AnnouncementValidation = $AnnouncementValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param AnnouncementObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return $this->AnnouncementValidation->validate($object);
}
/**
* @param AnnouncementObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -1,44 +0,0 @@
<?php
namespace App\Classes\Modules\Announcements\Standards\Validators;
use App\Classes\General\Abstracts\AbstractValidation;
use App\Classes\Modules\Announcements\DataTransferObjects\AnnouncementObject;
class AnnouncementValidation extends AbstractValidation
{
/**
* @param AnnouncementObject $object
* @return array
*/
protected function data($object): array
{
return [
'title' => $object->getTitle(),
'description' => $object->getDescription(),
'starting_on' => $object->getStartingOn(),
'ending_on' => $object->getEndingOn()
];
}
/**
* @return array
*/
protected function rules(): array
{
return [
'title' => 'required',
'description' => 'required',
'starting_on' => 'required',
'ending_on' => 'required'
];
}
/**
* @return array
*/
protected function messages(): array
{
return [];
}
}
@@ -1,138 +0,0 @@
<?php
namespace App\Classes\Modules\Billplzs\ControllersLogic;
use App\Classes\Modules\Orders\Processors\UpdateDoFromVTPortalProcessor;
use App\Classes\Modules\Orders\Processors\UpdateDoFromYDPortalProcessor;
use App\Classes\Modules\Wallets\DataTransferObjects\WalletObject;
use App\Classes\Modules\Wallets\Services\UpdatesWallet;
use App\Classes\Modules\Transactions\ControllersLogic\multipleInvoicesWithOnePaymentLogic;
use App\Classes\Exceptions\ResourceNotFoundException;
use App\Classes\Modules\Wallets\Services\UpdatesWalletBalance;
use App\Http\Resources\TransactionResource;
use App\Models\Booking;
use App\Models\User;
use App\Models\Wallet;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\Modules\Billplzs\Services\GetBillplzBill;
use App\Classes\Modules\Billplzs\DataTransferObjects\BillplzXSignatureObject;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Transactions\Services\FetchesTransaction;
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
class CallbackBillplzLogic
{
/** @var GetBillplzBill */
private $getBillplzBill;
/** @var FetchesTransaction */
private $fetchesTransaction;
/** @var UpdatesTransactionStatus */
private $updatesTransactionStatus;
/** @var UpdateDoFromVTPortalProcessor */
private $updateDoFromVTPortalProcessor;
/** @var UpdateDoFromYDPortalProcessor */
private $updateDoFromYDPortalProcessor ;
/** @var UpdateDoFromYDPortalProcessor */
private $multipleInvoicesWithOnePaymentLogic ;
/**
* CallbackBillplzLogic constructor.
* @param GetBillplzBill $getBillplzBill
* @param FetchesTransaction $fetchesTransaction
* @param UpdatesTransactionStatus $updatesTransactionStatus
* @param UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor
* @param UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor
*/
public function __construct(GetBillplzBill $getBillplzBill, FetchesTransaction $fetchesTransaction, UpdatesTransactionStatus $updatesTransactionStatus, UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor, UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor,multipleInvoicesWithOnePaymentLogic $multipleInvoicesWithOnePaymentLogic)
{
$this->getBillplzBill = $getBillplzBill;
$this->fetchesTransaction = $fetchesTransaction;
$this->updatesTransactionStatus = $updatesTransactionStatus;
$this->updateDoFromVTPortalProcessor = $updateDoFromVTPortalProcessor;
$this->updateDoFromYDPortalProcessor = $updateDoFromYDPortalProcessor;
$this->multipleInvoicesWithOnePaymentLogic= $multipleInvoicesWithOnePaymentLogic;
}
/**
* @param Request $request
* @return bool|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
* @throws MalformedRequestException
* @throws ResourceNotFoundException
* @throws \App\Classes\Exceptions\InternalServerErrorException
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function execute(Request $request)
{
$billplzXSignatureObject = new BillplzXSignatureObject($request);
if(!$billplzXSignatureObject->isValidSignature()){
throw new MalformedRequestException('Billplz Payment validation failed.');
}
$billPlz = $this->getBillplzBill->execute($billplzXSignatureObject->getBillPlzId());
if(!$billPlz) throw new ResourceNotFoundException('Billplz bill not found.');
$transaction = $this->fetchesTransaction->execute(['payment_reference' => $billplzXSignatureObject->getBillPlzId()]);
if ($transaction->type == 'topUp') {
$this->updatesTransactionStatus->execute($transaction, ApprovalStatus::APPROVED);
$this->multipleInvoicesWithOnePaymentLogic->verifypayment($transaction->id, $transaction->amount);
}
$invoice = $transaction->owner;
$packingList = $invoice->owner;
$order = $packingList->owner;
$status = ApprovalStatus::PENDING_VERIFICATION;
if($billPlz->state === 'paid') {
$status = ApprovalStatus::APPROVED;
}
if($billPlz->state === 'due') {
$status = $billplzXSignatureObject->getStatus() === 'failed' ? ApprovalStatus::REJECTED : ApprovalStatus::PENDING_VERIFICATION;
}
$token = Auth::fromUser(User::find(1));
$request->headers->set('Authorization', 'Bearer '.$token);
$this->updatesTransactionStatus->execute($transaction, ApprovalStatus::APPROVED);
if(($invoice->amount - $transaction->amount) < 0.01) {
$this->updatesTransactionStatus->execute($invoice, ApprovalStatus::COMPLETED);
$packingList->status = ApprovalStatus::APPROVED;
$packingList->save();
if(app()->environment('production')){
$this->updateDoFromVTPortalProcessor->execute($packingList);
$this->updateDoFromYDPortalProcessor->execute($packingList);
}
}
return $request->method() === 'POST' ? true : view('pages.payments_redirect', ['marking' => $order->reference, 'transaction' => $transaction, 'status' => $status]);
}
}
@@ -1,54 +0,0 @@
<?php
namespace App\Classes\Modules\Billplzs\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Billplzs\Services\CreatesBillplzBill;
use ErrorException;
use App\Classes\Exceptions\MalformedRequestException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateBillplzBillLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Created Billplz Bill',
'message' => 'You have successfully created a new Bill'
];
}
/** @var CreatesBillplzBill */
private $createsBillplzBill;
/**
* CreateBookingLogic constructor.
* @param CreatesBillplzBill $createsBillplzBill
*/
public function __construct(CreatesBillplzBill $createsBillplzBill)
{
$this->createsBillplzBill = $createsBillplzBill;
}
/**
* @param Request $request
* @return JsonResponse
* @throws MalformedRequestException
*/
public function logic(Request $request) : JsonResponse
{
$billPlz = $this->createsBillplzBill->execute($request->user()->name, $request->user()->email, $request->input('description'), 200, $request->input('bankName'));
if(!$billPlz) throw new MalformedRequestException('Unable to get correct response from billplz server.');
return $this->response(['data' => $billPlz]);
}
}
@@ -1,120 +0,0 @@
<?php
namespace App\Classes\Modules\Billplzs\DataTransferObjects;
use Illuminate\Http\Request;
use App\Classes\General\Interfaces\DataTransferObject;
use function PHPSTORM_META\map;
class BillplzXSignatureObject implements DataTransferObject
{
/** @var string */
private $billPlzId;
/** @var string */
private $status;
/** @var array */
private $billPlzConstructArray;
/** @var string */
private $billPlzConstructString;
/** @var string */
private $billPlzComputedXSignature;
/** @var string */
private $type;
/** @var Request */
private $request;
/** @var string */
private $requestXSignature;
public function __construct(Request $request)
{
$this->type = $request->exists('billplz') ? 'redirect' : 'callback';
$this->request = $this->type === 'redirect' ? $request->input('billplz') : $request;
$this->billPlzId = $this->request['id'];
$this->status = $this->request['transaction_status'];
$this->requestXSignature = $this->request['x_signature'];
$this->_constructBillplzArray()->_natSortBillplzArray()->_constructBillplzString()->_computeBillplzXSignature();
}
private function _constructBillplzArray(){
$this->billPlzConstructArray = collect($this->request)->forget('x_signature')->map(function($item, $key){
return $this->type === 'redirect' ? 'billplz'.$key.$item : $key.$item;
})->toArray();
return $this;
}
private function _natCaseSortBillplzArray(){
natcasesort($this->billPlzConstructArray);
return $this;
}
private function _natSortBillplzArray(){
natsort($this->billPlzConstructArray);
return $this;
}
private function _constructBillplzString(){
$this->billPlzConstructString = implode('|', $this->billPlzConstructArray);
return $this;
}
private function _computeBillplzXSignature(){
$this->billPlzComputedXSignature = hash_hmac('sha256', $this->billPlzConstructString, config('billplz.x_signature_key'));
return $this;
}
public function getBillPlzId(): string
{
return $this->billPlzId;
}
public function getStatus(): string
{
return $this->status;
}
/**
* @return array
*/
public function getBillPlzConstructArray(): array
{
return $this->billPlzConstructArray;
}
/**
* @return string
*/
public function getBillPlzConstructString(): string
{
return $this->billPlzConstructString;
}
/**
* @return string
*/
public function getBillPlzComputedXSignature(): string
{
return $this->billPlzComputedXSignature;
}
public function isValidSignature(): bool
{
return $this->billPlzComputedXSignature === $this->requestXSignature ? true : false;
}
}
@@ -1,57 +0,0 @@
<?php
namespace App\Classes\Modules\Billplzs\Services;
use Illuminate\Support\Facades\Http;
use App\Classes\Exceptions\MalformedRequestException;
class CreatesBillplzBill
{
/**
* @param string $name
* @param string $email
* @param string $description
* @param float $amount
* @param string $billNumber
* @param null|string $bankCode
* @param null|Boolean $wallet
* @return null|object
* @throws MalformedRequestException
*/
public function execute(string $name, string $email, string $description, float $amount, string $billNumber, ?string $bankCode = null, ?bool $wallet = null) {
try{
// config('billplz.maybank')
$response = Http::withBasicAuth(config('billplz.api_key').':', '')->post(config('billplz.base_url').'/api/v3/bills', [
'collection_id' => config('billplz.collection_id'),
'name' => $name,
'email' => $email,
'description' => $description,
'amount' => $this->finalizeAmount($amount),
'redirect_url' => route('online_payment.redirect'),
'callback_url' => route('api.online_payment.callback'),
'reference_1_label' => 'Bank Code',
'reference_1' => $bankCode ? $bankCode : '',
'reference_2_label' => 'Bill Number',
'reference_2' => $billNumber
]);
if($response->successful()){
$data = $response->json();
$data['url'] = $data['url'].'?auto_submit=true';
return (object) $data;
}else{
return null;
}
}catch(\Exception $exception){
throw new MalformedRequestException('Unable to get correct response from billplz server' . $exception->getMessage());
}
}
protected function finalizeAmount($amount){
$number = round($amount, 2) * 100;
return (string) $number;
}
}
@@ -1,31 +0,0 @@
<?php
namespace App\Classes\Modules\Billplzs\Services;
use App\Classes\Exceptions\MalformedRequestException;
use Illuminate\Support\Facades\Http;
class GetBillplzBill
{
/**
* @param string $billPlzId
* @return null|object
* @throws MalformedRequestException
*/
public function execute(string $billPlzId) {
try{
$response = Http::withBasicAuth(config('billplz.api_key').':', '')->get(config('billplz.base_url').'/api/v3/bills/'.$billPlzId);
if($response->successful()){
$data = $response->json();
return (object) $data;
}else{
return null;
}
}catch(\Exception $exception){
throw new MalformedRequestException('Unable to get correct response from billplz server');
}
}
}
@@ -14,8 +14,6 @@ use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Documents\Services\FetchesDocument;
use App\Classes\Modules\Documents\Services\ApprovesDocument;
use App\Classes\Modules\Notifications\DataTransferObjects\NotificationObject;
Use App\Classes\Modules\Notifications\Processors\CreateNotificationProcessor;
use App\Models\Document;
use Illuminate\Http\JsonResponse;
@@ -52,9 +50,6 @@ class ApproveIdentificationDocumentLogic extends AbstractControllerLogic
/** @var UpdatesOrdersStatus */
private $updatesOrdersStatus;
/** @var CreateNotificationProcessor */
private $createNotificationProcessor;
/**
* ApproveIdentificationDocumentLogic constructor.
* @param CanApproveDocument $canApproveDocument
@@ -63,9 +58,8 @@ class ApproveIdentificationDocumentLogic extends AbstractControllerLogic
* @param FetchesDocument $fetchesDocument
* @param UpdatesCompanyStatus $updatesCompanyStatus
* @param UpdatesOrdersStatus $updatesOrdersStatus
* @param CreateNotificationProcessor $createNotificationProcessor
*/
public function __construct(CanApproveDocument $canApproveDocument, ApprovesDocument $approvesDocument, RejectsDocument $rejectsDocument, FetchesDocument $fetchesDocument, UpdatesCompanyStatus $updatesCompanyStatus, UpdatesOrdersStatus $updatesOrdersStatus, CreateNotificationProcessor $createNotificationProcessor)
public function __construct(CanApproveDocument $canApproveDocument, ApprovesDocument $approvesDocument, RejectsDocument $rejectsDocument, FetchesDocument $fetchesDocument, UpdatesCompanyStatus $updatesCompanyStatus, UpdatesOrdersStatus $updatesOrdersStatus)
{
$this->canApproveDocument = $canApproveDocument;
$this->approvesDocument = $approvesDocument;
@@ -73,7 +67,6 @@ class ApproveIdentificationDocumentLogic extends AbstractControllerLogic
$this->fetchesDocument = $fetchesDocument;
$this->updatesCompanyStatus = $updatesCompanyStatus;
$this->updatesOrdersStatus = $updatesOrdersStatus;
$this->createNotificationProcessor = $createNotificationProcessor;
}
/**
@@ -97,16 +90,6 @@ class ApproveIdentificationDocumentLogic extends AbstractControllerLogic
$this->updatesCompanyStatus->execute($document->owner, $status === 'approve' ? ApprovalStatus::APPROVED : ApprovalStatus::REJECTED);
// $object = new NotificationObject(
// 'ID Verification ' . ( $status === 'approve' ? 'Approved' : 'Rejected' ),
// ( $status === 'approve' ? 'Dear user, congratulations that your ' : 'Dear user, we are sorry to inform you that your ' ) . ( $document->type === 'IDENTITY_CARD' ? 'IC' : 'SSM' ) . ( $status === 'approve' ? ' has been approved. Start your first order now!' : ' has been rejected due to ' . ( $request->input('rejectRemark') ?? '' ) . ', please resubmit it for further action.' ),
// $document->owner,
// $document->owner->companyModules()->first()->employees()->first(),
// $document,
// );
//
// $this->createNotificationProcessor->execute($object);
if($status === 'approve'){
$orders = $this->updatesOrdersStatus->execute($document->owner, ApprovalStatus::APPROVED);
}

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