Compare commits

..

604 Commits

Author SHA1 Message Date
Haziq Danial 6842e3f1db updated pakage remark - haziq 2021-12-07 23:19:21 +08:00
omair saleh 0d6df7ec0c add remarkable interface 2021-10-21 21:04:41 +08:00
omair saleh dd38f41f47 show order numbers with shipped more than received 2021-10-21 13:40:35 +08:00
omair saleh 062b2fb908 show orders with shipping packing list more than warehouse received list 2021-10-21 13:29:22 +08:00
omair saleh 7c027ef62f remove typhoon announcement 2021-10-21 13:11:55 +08:00
omair saleh 6137012a35 remove report web route 2021-10-21 12:43:57 +08:00
omair saleh c79f4cfdab update reference eloquent filter to small letters 2021-10-21 12:42:13 +08:00
omair saleh 073f89be12 fix package component buy when they shipping schedule is not set 2021-10-20 14:59:15 +08:00
omair saleh 3752d71b4f fix package component bug when the schedule is not set 2021-10-20 14:57:08 +08:00
omair saleh b82f3b9f45 update sales report, show unloaded cbm 2021-10-19 18:28:37 +08:00
omair saleh 4a3b3344e7 customer notice 2021-10-15 16:00:11 +08:00
omair saleh ae42e1e03b update notice to customer profiles 2021-10-15 15:55:22 +08:00
omair saleh 8ba5f95690 reference lik eloquent filter 2021-10-13 21:05:08 +08:00
omair saleh 70cc67a559 reposition the order refresh button 2021-10-13 11:26:42 +08:00
omair saleh 149376e4b5 don't show rejected company identifications 2021-10-13 11:17:59 +08:00
omair saleh d5dd880d9e customer report 2021-10-12 19:09:00 +08:00
omair saleh fa628e81ac customer reports 2021-10-12 19:07:41 +08:00
omair saleh 51a6569cf0 show received cbm in sales report 2021-10-12 18:30:00 +08:00
omair saleh 886f091f6a customer report 2021-10-12 17:16:47 +08:00
omair saleh b22b4c374a customer report 2021-10-12 17:12:53 +08:00
omair saleh 2b065cb4a8 customer report 2021-10-12 17:12:26 +08:00
omair saleh bcf7ae4098 fix daily cbm report 2021-10-12 14:07:21 +08:00
omair saleh b355df27db fix daily cbm report 2021-10-12 13:57:35 +08:00
omair saleh c33649fda2 fix daily cbm report 2021-10-12 13:54:46 +08:00
omair saleh 4615843e17 fix daily cbm report 2021-10-12 13:44:31 +08:00
omair saleh 40f51a0f60 ui fix 2021-10-12 13:16:41 +08:00
omair saleh 2c3dff7e77 update datepicker vue component 2021-10-12 13:15:09 +08:00
omair saleh 8178cda2b4 create sales report range frontend 2021-10-12 13:13:12 +08:00
omair saleh 04215916f5 add report from to filters 2021-10-12 12:25:26 +08:00
omair saleh 25f9db99c7 temp show specific report period 2021-10-11 15:13:27 +08:00
omair saleh 04f248e88d temp show specific report period 2021-10-11 15:12:36 +08:00
omair saleh 70e53c197c temp show specific report period 2021-10-11 15:04:11 +08:00
omair saleh 642731b680 temp show specific report period 2021-10-11 15:02:53 +08:00
omair saleh 7bd3ae056d temp show specific report period 2021-10-11 15:00:18 +08:00
omair saleh e58805a023 temp show specific report period 2021-10-11 14:58:45 +08:00
omair saleh fdce49ea82 temp show specific report period 2021-10-11 14:56:40 +08:00
omair saleh 90a0c4ddf5 temp show specific report period 2021-10-11 14:54:52 +08:00
omair saleh f963b012ec temp show specific report period 2021-10-11 14:53:02 +08:00
omair saleh d8289599c9 temp show specific report period 2021-10-11 14:52:30 +08:00
omair saleh 7965398c5a temp show specific report period 2021-10-11 14:51:57 +08:00
omair saleh a1b5737935 temp show specific report period 2021-10-11 14:51:15 +08:00
omair saleh 72400f2ab2 temp show specific report period 2021-10-11 14:48:12 +08:00
omair saleh 6badfadd2d temp show specific report period 2021-10-11 14:47:40 +08:00
omair saleh b9a65005e6 temp show specific report period 2021-10-11 14:44:56 +08:00
omair saleh 190ed6c5f9 temp show specific report period 2021-10-11 14:43:39 +08:00
omair saleh 7c96f3039a temp show specific report period 2021-10-11 14:42:45 +08:00
omair saleh fbb7d31726 temp show specific report period 2021-10-11 14:41:37 +08:00
omair saleh 3d1fb48cfb temp show specific report period 2021-10-11 14:39:30 +08:00
omair saleh f2e944cc0b temp show specific report period 2021-10-11 14:38:23 +08:00
omair saleh 44d7507cbd temp show specific report period 2021-10-11 14:37:13 +08:00
omair saleh 0a32d64e8d temp show specific report period 2021-10-11 14:35:15 +08:00
omair saleh f1edf72fb8 temp show specific report period 2021-10-11 14:32:54 +08:00
omair saleh c85248bc0f temp show specific report period 2021-10-11 14:31:02 +08:00
omair saleh 1aad4de653 temp show specific report period 2021-10-11 14:29:05 +08:00
omair saleh ae031078bc temp show specific report period 2021-10-11 14:28:05 +08:00
omair saleh d5d2a13e31 temp show specific report period 2021-10-11 14:25:47 +08:00
omair saleh 6809bfc693 temp show specific report period 2021-10-11 14:24:44 +08:00
omair saleh a21465992f temp show specific report period 2021-10-11 14:23:14 +08:00
omair saleh f844f5d879 show delivery status in container component 2021-10-11 13:17:05 +08:00
omair saleh 959e5dc970 remove duplicated try catch from logic 2021-10-11 11:01:43 +08:00
omair saleh 149469598e remove unused dependencies from route file 2021-10-11 11:00:53 +08:00
omair saleh fce976ff6b show refresh orders button only in orders page 2021-10-11 10:58:18 +08:00
omair saleh 4b0e1b4b78 change the definition of destination warehouse arrival 2021-10-11 10:53:34 +08:00
omair saleh e6f13fd3d0 change the definition of destination warehouse arrival 2021-10-11 10:39:37 +08:00
omair saleh 8a40ea35ee show daily target 2021-10-08 23:23:18 +08:00
omair saleh 19d0802d0e show daily target 2021-10-08 23:21:15 +08:00
omair saleh 95bd1ca6af add customer without orders list 2021-10-08 22:35:54 +08:00
omair saleh e6c42ef55c add customer without orders list 2021-10-08 22:34:54 +08:00
omair saleh a9c914b41c add customer without orders list 2021-10-08 21:45:37 +08:00
omair saleh c00239c959 add customer without orders list 2021-10-08 21:43:55 +08:00
omair saleh b4844874bb add customer without orders list 2021-10-08 21:42:26 +08:00
omair saleh 1b3c63e05d add customer without orders list 2021-10-08 21:41:06 +08:00
omair saleh c3b0e55271 add customer without orders list 2021-10-08 21:37:45 +08:00
omair saleh 9463bc9478 add customer without orders list 2021-10-08 21:17:49 +08:00
omair saleh 500917fbba make the service chart thinner 2021-10-06 21:56:37 +08:00
omair saleh 9af8dd0d0e fix sales report decimals 2021-10-06 21:54:08 +08:00
omair saleh 2895acc8fc fix sales report decimals 2021-10-06 21:52:28 +08:00
omair saleh 33cd2cef7d fix sales report decimals 2021-10-06 21:50:26 +08:00
omair saleh d2485eaae7 fix sales report decimals 2021-10-06 21:49:05 +08:00
omair saleh 0a5aa9843d show current months sales report 2021-10-06 21:40:58 +08:00
omair saleh 0dbdeba0d2 show september sales report 2021-10-06 21:38:03 +08:00
omair saleh fbd108e8e8 increase fetch container date range limit 2021-10-06 21:34:48 +08:00
omair saleh 52ec457b52 service report 2021-10-06 15:18:40 +08:00
omair saleh f159bf7982 service report 2021-10-06 15:17:06 +08:00
omair saleh 5386700762 service report 2021-10-06 14:15:41 +08:00
omair saleh 5aefef5366 service report 2021-10-05 20:54:19 +08:00
omair saleh 943ec5f7f7 service report 2021-10-05 17:02:17 +08:00
omair saleh 647103f387 service report 2021-10-05 14:57:52 +08:00
omair saleh 9340d4360e update monthly report 2021-10-05 14:24:43 +08:00
omair saleh ebbe2c7863 hide buttons create container button 2021-10-04 16:32:34 +08:00
omair saleh 73dbb41044 hide buttons for packing lists 2021-10-04 16:28:27 +08:00
omair saleh 3dfceeaf37 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	app/Http/Resources/OrderResource.php
#	resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue
2021-10-04 16:21:44 +08:00
omair saleh 509f14c790 improve load speed by cleaning the resources to reduce the number of queries submitted per request 2021-10-04 16:17:10 +08:00
omair saleh 33a8d370c5 Merge branch 'container-profile-ui' into 'master'
add 'ADD Container' button

See merge request CIEFWorldwideSdnBhd/shipping-portal!68
2021-10-04 05:27:58 +00:00
omair saleh ad4b8a821c Merge branch 'packaging-list-schedule' into 'master'
create package list ui

See merge request CIEFWorldwideSdnBhd/shipping-portal!66
2021-10-04 05:26:18 +00:00
omair saleh 6c276b59b1 Merge branch 'package-ui-create' into 'master'
create package list ui

See merge request CIEFWorldwideSdnBhd/shipping-portal!55
2021-10-04 05:25:35 +00:00
omair saleh b57a511bb6 Merge branch 'task/EXC-338' into 'master'
Inbound custom cleared

See merge request CIEFWorldwideSdnBhd/shipping-portal!67
2021-10-04 05:25:04 +00:00
glovetleong 8314820204 packing schedule, transport, complete 2021-10-03 21:22:59 +08:00
glovetleong a2cc1e5e4f Merge branch 'package-ui-create' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into packaging-list-schedule 2021-10-03 20:42:46 +08:00
glovetleong 17fb297942 pull 2021-10-03 20:42:35 +08:00
edmondlang b12da6ff44 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into container-profile-ui
# Conflicts:
#	resources/assets/vue/components/containers/elements/ContainerProfileSectionComponent.vue
#	routes/web.php
2021-10-03 18:13:20 +08:00
edmondlang cf78e92c5f update container profile section component 2021-10-03 18:07:25 +08:00
edmondlang 7db7553dca Update container profile forms 2021-10-03 18:00:58 +08:00
edmondlang fa1871d712 modify modal add data-dismiss="modal" 2021-10-03 17:06:11 +08:00
omair saleh 16b35b34b3 customer report 2021-10-02 15:24:02 +08:00
omair saleh 33f152ae9c customer report 2021-10-02 15:22:28 +08:00
omair saleh 93c9412298 customer report 2021-10-02 15:17:22 +08:00
omair saleh c74e2927ad customer report 2021-10-02 15:15:27 +08:00
omair saleh 95f52b3a62 customer report 2021-10-02 15:06:10 +08:00
omair saleh 24a286a5a2 customer report 2021-10-02 15:00:49 +08:00
omair saleh bbc247d67e customer report 2021-10-02 14:59:15 +08:00
omair saleh 019073afc5 customer report 2021-10-01 21:25:02 +08:00
omair saleh feb04e8498 customer report 2021-10-01 21:14:33 +08:00
omair saleh 557d85ef8d customer report 2021-10-01 20:45:00 +08:00
omair saleh 1e5df1d64b customer report 2021-10-01 19:50:44 +08:00
omair saleh 186d6f71c6 customer report 2021-10-01 19:48:04 +08:00
omair saleh 2f11666539 customer report 2021-10-01 19:46:00 +08:00
omair saleh 87e9dbe3ec customer report 2021-10-01 19:43:50 +08:00
omair saleh 626ba6bbf4 customer report 2021-10-01 19:40:12 +08:00
omair saleh 8b5ac008d3 customer report 2021-10-01 19:37:12 +08:00
omair saleh ccd7d91076 customer report 2021-10-01 19:35:55 +08:00
omair saleh 7bde77036d customer report 2021-10-01 19:34:25 +08:00
omair saleh bf7443887c customer report 2021-10-01 19:26:42 +08:00
omair saleh 933f39d280 container monthly report 2021-10-01 18:33:29 +08:00
omair saleh 463d342441 container monthly report 2021-10-01 18:33:19 +08:00
omair saleh 27e856bc4d container monthly report 2021-10-01 18:23:10 +08:00
omair saleh 8f381b42f3 container monthly report 2021-10-01 18:18:40 +08:00
omair saleh 1af45e5132 container monthly report 2021-10-01 18:17:17 +08:00
omair saleh 6c5bbf842e container report 2021-10-01 18:16:56 +08:00
omair saleh 96d701bc80 container monthly report 2021-10-01 18:14:46 +08:00
omair saleh 9221bd094c count total containers 2021-10-01 18:11:15 +08:00
omair saleh c76271d8ab loaded cbm monthly report 2021-10-01 18:02:09 +08:00
omair saleh 26a0bc186e total loaded cbm monthly report 2021-10-01 18:00:07 +08:00
omair saleh 2305ddb39d fix container component ui 2021-10-01 17:55:06 +08:00
omair saleh c66273874d marking container loading date as a timestamp in the modal 2021-10-01 17:52:28 +08:00
omair saleh 9ef636c5d5 add container loading date 2021-10-01 17:49:59 +08:00
omair saleh 9b9292546b test updating loading date for containers from vt portal 2021-10-01 17:45:37 +08:00
omair saleh 2974fe4e9a test updating loading date for containers from vt portal 2021-10-01 17:44:20 +08:00
omair saleh e93da67ec1 test updating loading date for containers from vt portal 2021-10-01 17:43:46 +08:00
omair saleh 7c14b74dd1 test updating loading date for containers from vt portal 2021-10-01 17:42:44 +08:00
omair saleh b9b05dfdbe test updating loading date for containers from vt portal 2021-10-01 17:41:42 +08:00
omair saleh e5e00bb9ac test updating loading date for containers from vt portal 2021-10-01 17:40:19 +08:00
omair saleh c6e222caf2 add loading date for container table 2021-10-01 17:35:19 +08:00
omair saleh 973ab58818 hint claim id 2021-09-30 16:12:48 +08:00
Fairuz 2ae879fd51 Inbound custom cleared 2021-09-29 04:38:41 +08:00
omair saleh 8e9db507f6 fix template routes, and hide report button temp 2021-09-28 15:55:24 +08:00
omair saleh 943f5ce64e add custom clearance routes 2021-09-28 13:24:29 +08:00
omair saleh 2c3ea9e3f1 order component address tooltip layout fixes 2021-09-28 13:23:56 +08:00
edmondlang a69ecc2825 update create load container form 2021-09-27 23:56:13 +08:00
edmondlang d13aad9566 container profile forms ui 2021-09-27 21:56:04 +08:00
omair saleh 579200fd61 Merge branch 'task/EXC-337' into 'master'
Task/exc 337

See merge request CIEFWorldwideSdnBhd/shipping-portal!65
2021-09-27 09:10:51 +00:00
omair saleh 37d06798aa Merge branch 'master' into 'task/EXC-337'
# Conflicts:
#   routes/web.php
2021-09-27 09:10:46 +00:00
omair saleh 09a3654e2f add packing list inbound custom route 2021-09-27 17:05:58 +08:00
omair saleh 1c5fbec0b9 Merge branch 'task/EXC-338' into 'master'
Inbound custom cleared

See merge request CIEFWorldwideSdnBhd/shipping-portal!64
2021-09-27 09:04:39 +00:00
omair saleh c8820ad39e Merge branch 'master' into 'task/EXC-338'
# Conflicts:
#   routes/packing_list.php
2021-09-27 09:04:15 +00:00
omair saleh 4122ac4153 Merge branch 'assign-packing-list' into 'master'
assign packing list to container

See merge request CIEFWorldwideSdnBhd/shipping-portal!63
2021-09-27 09:01:15 +00:00
omair saleh 6959370b7a Merge branch 'package-switch-packing-list' into 'master'
package switch packing list

See merge request CIEFWorldwideSdnBhd/shipping-portal!62
2021-09-27 09:00:22 +00:00
omair saleh d7b4e716d8 Merge remote-tracking branch 'origin/master' 2021-09-27 16:59:23 +08:00
omair saleh d7f3b656f7 Merge branch 'container-profile-ui'
# Conflicts:
#	routes/web.php
2021-09-27 16:59:08 +08:00
omair saleh 3b20e240ee Merge branch 'shipping-queue-ui' into 'master'
Shipping queue ui

See merge request CIEFWorldwideSdnBhd/shipping-portal!59
2021-09-27 08:49:55 +00:00
omair saleh aa39adaeb8 clean web routes 2021-09-27 16:43:29 +08:00
omair saleh f0ebd20c5e Merge branch 'payment-and-billing-ui' into 'master'
Payment and billing ui

See merge request CIEFWorldwideSdnBhd/shipping-portal!57
2021-09-27 08:41:18 +00:00
omair saleh 0b3ae1f8df Merge branch 'master' into 'payment-and-billing-ui'
# Conflicts:
#   routes/web.php
2021-09-27 08:41:13 +00:00
Fairuz 27684a2940 Changes to inline report 2021-09-27 11:06:38 +08:00
Fairuz ed637739cc Inbound custom cleared 2021-09-27 09:48:00 +08:00
edmondlang a0531e344c add 'ADD Container' button
update add container form
2021-09-25 16:13:31 +08:00
edmondlang 9073d86859 Merge branch 'package-ui-create' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into container-profile-forms-ui 2021-09-24 21:59:39 +08:00
glovetleong ce20a941cd tidy 2021-09-24 21:56:50 +08:00
glovetleong b98ab2749a eta and etd in create container 2021-09-24 21:54:06 +08:00
edmondlang 5363034649 Merge branch 'package-ui-create' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into container-profile-forms-ui 2021-09-24 19:56:31 +08:00
edmondlang e83ed7a339 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into container-profile-forms-ui
# Conflicts:
#	routes/web.php
2021-09-24 19:56:07 +08:00
omair saleh 09f598ffe5 show container total cbm 2021-09-23 18:35:58 +08:00
omair saleh 9719f1da77 show container total cbm 2021-09-23 18:34:53 +08:00
glovetleong 0c63a9e7ca complete container 2021-09-23 15:04:04 +08:00
glovetleong 7d332f01e5 update drop date
update dispatch date
2021-09-23 14:40:12 +08:00
glovetleong 24ea9d381e Merge branch 'master' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into package-ui-create 2021-09-22 18:14:55 +08:00
glovetleong 9aec13da74 reschedule container 2021-09-22 18:14:36 +08:00
glovetleong 16573e9e00 container create with n/a eta and etd 2021-09-22 15:39:33 +08:00
omair saleh 8039446db5 tooltip for copying invitation link 2021-09-22 14:57:29 +08:00
omair saleh a8e26c4dd6 invitation link registration 2021-09-22 14:20:50 +08:00
omair saleh 65493e6c90 invitation link registration 2021-09-22 14:14:47 +08:00
edmondlang 36018f48b4 Merge branch 'package-ui-create' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into container-profile-forms-ui 2021-09-21 23:12:17 +08:00
edmondlang bf07a92873 container profile page ui 2021-09-21 22:37:08 +08:00
omair saleh fd8d9bd0db show claimed accounts in company profile 2021-09-21 02:51:50 +08:00
omair saleh 5b105caf0b show claimed accounts in company profile 2021-09-21 02:50:48 +08:00
omair saleh 1c5d814790 show claimed accounts in company profile 2021-09-21 02:39:58 +08:00
omair saleh c7b4b75982 exchange user table seeder 2021-09-21 02:31:04 +08:00
omair saleh fbfe68c1c2 exchange user table seeder 2021-09-21 02:19:41 +08:00
glovetleong 06b1258b55 merge branch 2021-09-20 16:54:16 +08:00
glovetleong b668708bd5 Merge branch 'package-switch-packing-list' into package-ui-create 2021-09-20 16:48:25 +08:00
glovetleong 13719d56a4 Merge branch 'assign-packing-list' into package-ui-create 2021-09-20 16:47:46 +08:00
glovetleong 26b4f012a8 Merge branch 'master' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into package-ui-create 2021-09-20 16:46:15 +08:00
glovetleong ad2d54cf0e package switch packing list 2021-09-20 15:34:28 +08:00
glovetleong e84f9d8bef assign packing list to container 2021-09-18 13:40:15 +08:00
glovetleong d7e2366fed container load 2021-09-18 09:56:41 +08:00
omair saleh f7c6873316 update vt portal url 2021-09-17 17:59:37 +08:00
Fairuz b8a145cb5c Excel library, controllers 2021-09-17 07:12:08 +08:00
Fairuz b5076a6f9d Excel library, controllers 2021-09-16 20:47:33 +08:00
glovetleong 2f6055c577 Merge branch 'master' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into package-ui-create 2021-09-15 21:31:13 +08:00
glovetleong 05ee6b3e98 create warehouse packing list
create shipping packing list
2021-09-15 21:30:49 +08:00
omair saleh 4626eb937e change container list to 5 per page 2021-09-15 18:29:34 +08:00
omair saleh 2be9a3dcfe remove logger from logout logic 2021-09-15 18:26:54 +08:00
omair saleh 1f05c4b56f remove timer from vt fetch jobs 2021-09-15 18:17:03 +08:00
omair saleh a3ecda8f8e round up cbm in container component 2021-09-14 17:26:33 +08:00
glovetleong 174992cc65 create package list ui
edit create package list api
2021-09-14 17:02:42 +08:00
omair saleh 3e23fa6809 revert changes for join table 2021-09-14 12:40:37 +08:00
omair saleh 41554be892 revert changes for join table 2021-09-14 12:32:18 +08:00
omair saleh a7c6c29c25 delete packages change migration 2021-09-14 12:15:17 +08:00
omair saleh 31c0b315b0 Merge branch 'task/EXC-328' into 'master'
Task/exc 328

See merge request CIEFWorldwideSdnBhd/shipping-portal!54
2021-09-14 03:45:35 +00:00
omair saleh 465c111bf1 Merge branch 'task/EXC-324' into 'master'
Join table from frontend

See merge request CIEFWorldwideSdnBhd/shipping-portal!53
2021-09-14 03:45:02 +00:00
omair saleh 0884bcf47a fix long reload issue for container on packing list status update 2021-09-12 17:12:59 +08:00
glovetleong 64f108163a package ui 2021-09-12 14:27:17 +08:00
Fairuz e80dbf4b49 Add timer, moved schedule to commands 2021-09-12 12:48:28 +08:00
Fairuz a203c5bf12 Add timer, moved schedule to commands 2021-09-12 12:46:26 +08:00
Fairuz 18b19fd90a Join table from frontend 2021-09-11 17:26:02 +08:00
omair saleh 2d1ec679eb fix delivery list job 2021-09-11 01:14:32 +08:00
omair saleh e43f7e2880 update packing list to complete after delivery updated 2021-09-11 00:39:39 +08:00
omair saleh 335a9f845e limit delivery list to first 50 2021-09-11 00:09:02 +08:00
omair saleh a5c652ef91 fix address resource loop 2021-09-10 23:55:20 +08:00
omair saleh 00c9fbfdca add db transactions back to packing lists 2021-09-10 23:48:35 +08:00
omair saleh 69180ef937 update delivery list for on hold goods 2021-09-10 23:20:19 +08:00
omair saleh bcffe4ef3e remove packing list database transactions 2021-09-10 23:10:26 +08:00
omair saleh b9794c8ff3 round up cbm 2021-09-10 23:07:24 +08:00
omair saleh 47f00e135b fix order resource loop 2021-09-10 18:26:28 +08:00
omair saleh f0c5ea8617 fix address resource owner bug 2021-09-10 18:18:48 +08:00
edmondlang 688832445a add the route for shipping queue 2021-09-10 16:41:30 +08:00
edmondlang f064ef2eff Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into shipping-queue-ui
# Conflicts:
#	routes/web.php
2021-09-10 16:22:29 +08:00
edmondlang c652d8df1a shipping queue ui 2021-09-10 15:58:28 +08:00
omair saleh fa5f129af0 add container ref in the package component 2021-09-10 13:38:35 +08:00
omair saleh 06ac4c4e62 merge marking and order number in the container list 2021-09-10 13:12:02 +08:00
omair saleh b57f56dd8f change order address 2021-09-09 23:07:48 +08:00
omair saleh 1939f64cdf change order address 2021-09-09 22:57:02 +08:00
omair saleh 1ba5282244 Merge branch '319_order_address_change_ui' into 'master'
319 order address change ui

See merge request CIEFWorldwideSdnBhd/shipping-portal!52
2021-09-09 12:45:41 +00:00
omair saleh 1c9fba7f19 Merge branch '293_order_address_change' into 'master'
293 order address change

See merge request CIEFWorldwideSdnBhd/shipping-portal!51
2021-09-09 12:45:31 +00:00
omair saleh 512cca3445 fix redirect bug 2021-09-09 15:31:39 +08:00
weichien00 54211a5b72 feat: add approve change prder address component - admin access only. 2021-09-09 13:48:57 +08:00
omair saleh ade8b0fe4f fix cbm calculation bug 2021-09-09 13:26:05 +08:00
omair saleh 3d46895328 fix cbm calculation bug 2021-09-09 13:25:14 +08:00
omair saleh 9970277411 show company create date 2021-09-09 13:18:29 +08:00
omair saleh d77c0b1c06 show company create date 2021-09-09 13:17:32 +08:00
omair saleh ea08d1d998 show company create date 2021-09-09 13:13:59 +08:00
omair saleh d6915bc22f hold and release goods for delivery 2021-09-09 06:43:35 +08:00
omair saleh b4215a5bde hold and release goods for delivery 2021-09-09 06:22:06 +08:00
omair saleh ac3e6fba20 hold and release goods for delivery 2021-09-09 05:47:51 +08:00
omair saleh ee30ebb05d hold and release goods for delivery 2021-09-09 05:35:02 +08:00
omair saleh f21eb73f4a hold and release goods for delivery 2021-09-09 05:09:10 +08:00
omair saleh aa26fb97a0 hold and release goods for delivery 2021-09-09 04:31:32 +08:00
omair saleh 502b702a0a hold and release goods for delivery 2021-09-09 04:26:18 +08:00
omair saleh e426550c73 hold and release goods for delivery 2021-09-09 04:18:49 +08:00
omair saleh fab262a959 hold and release goods for delivery 2021-09-09 04:15:40 +08:00
omair saleh e9b8815f08 hold and release goods for delivery 2021-09-09 04:10:20 +08:00
omair saleh 8dab2a09ff hold and release goods for delivery 2021-09-09 04:05:51 +08:00
weichien00 a4b2e02ec3 wip-feat: request change order shipping address ui. 2021-09-09 01:49:44 +08:00
LEE WC 97adb6b03d Merge branch 'master' into '319_order_address_change_ui'
Master to 319_order_address_change_ui

See merge request CIEFWorldwideSdnBhd/shipping-portal!50
2021-09-08 15:36:17 +00:00
omair saleh a531361514 refresh orders button 2021-09-08 23:23:11 +08:00
omair saleh b24fbc36f9 refresh orders button 2021-09-08 23:19:04 +08:00
omair saleh 600a154714 List containers 2021-09-08 23:06:25 +08:00
omair saleh 0a4753579c Merge branch 'debug_api' into 'master'
Debug api

See merge request CIEFWorldwideSdnBhd/shipping-portal!49
2021-09-08 11:11:55 +00:00
omair saleh 5c021a4e2e Merge branch 'task/EXC-317' into 'master'
Updates on Packing List & Package

See merge request CIEFWorldwideSdnBhd/shipping-portal!46
2021-09-08 11:10:05 +00:00
omair saleh 0045fc22e6 Merge branch 'container-page-ui' into 'master'
Container page ui

See merge request CIEFWorldwideSdnBhd/shipping-portal!48
2021-09-08 11:09:19 +00:00
omair saleh 77e3641be9 add delivery address to warehouse list 2021-09-08 19:06:58 +08:00
edmondlang 536833fd93 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into container-page-ui 2021-09-08 16:57:24 +08:00
edmondlang f6115c4012 hide container in menu 2021-09-08 16:56:54 +08:00
edmondlang 5e416f1760 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into payment-and-billing-ui 2021-09-08 16:45:36 +08:00
edmondlang d23b59b8e9 payment and billing ui 2021-09-08 16:44:24 +08:00
LEE WC 9a047faece Merge branch '293_order_address_change' into '319_order_address_change_ui'
merge change order address api

See merge request CIEFWorldwideSdnBhd/shipping-portal!47
2021-09-07 06:04:10 +00:00
LEE WC c6865bb5f6 Merge branch '319_order_address_change_ui' into '293_order_address_change'
# Conflicts:
#   app/Http/Resources/OrderResource.php
2021-09-07 06:01:11 +00:00
Fairuz cdaa395824 Updates on Packing List & Package 2021-09-07 09:51:04 +08:00
glovetleong c96a2b71d1 update api 2021-09-06 15:22:28 +08:00
glovetleong 102905df06 Container, Transport, Schedule Api Debug 2021-09-06 14:52:56 +08:00
omair saleh 7f8a4af3fe add marking to arrived parcel components 2021-09-06 13:03:45 +08:00
omair saleh a2f4e1f3fd Revert "add marking to arrived parcel components"
This reverts commit 91c8424dc5.
2021-09-06 13:00:31 +08:00
omair saleh 1933030e9a Revert "add marking to arrived parcel components"
This reverts commit 50cbafce25.
2021-09-06 12:59:11 +08:00
omair saleh 50cbafce25 add marking to arrived parcel components 2021-09-06 12:52:27 +08:00
omair saleh 91c8424dc5 add marking to arrived parcel components 2021-09-06 12:52:11 +08:00
omair saleh 6009e82994 add marking to arrived parcel components 2021-09-06 12:48:57 +08:00
omair saleh 7d67e13b9e change schedule for vt portal fetch 2021-09-05 20:12:52 +08:00
edmondlang b9ab2e9f36 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into container-page-ui
# Conflicts:
#	resources/views/partials/menu.blade.php
2021-09-04 16:30:55 +08:00
edmondlang 51d999e3c8 add container page ui 2021-09-04 16:22:09 +08:00
omair saleh b049c95ca2 change schedule for vt portal fetch 2021-09-03 17:25:17 +08:00
omair saleh 3ee8afc4a4 add new schedule for fetching from vt at 11:30 am 2021-09-03 13:07:31 +08:00
omair saleh 1edcb296f3 sort orders by latest 2021-09-02 22:39:37 +08:00
omair saleh 51f1b3adcb change scheduled jobs into a chain 2021-09-02 22:32:01 +08:00
omair saleh 8e05c287b8 frontend suggested changes 2021-09-02 22:25:03 +08:00
omair saleh 050dc8ac7b frontend suggested changes 2021-09-02 22:20:01 +08:00
omair saleh 842fc52b4e fix warehouse list bugs 2021-09-02 16:51:10 +08:00
omair saleh 7008a01b11 fix reschedule containers etd bug 2021-09-02 12:27:40 +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
weichien00 e0405bca1e swagger: add show order, request address change, and approve address change api endpoint. 2021-08-19 01:35:23 +08:00
weichien00 6fb5d66631 feat: add route for request and approve address change. 2021-08-19 01:33:50 +08:00
weichien00 5a043e89a0 feat: API to approve order address change. 2021-08-19 01:33:16 +08:00
weichien00 3c20386875 feat: API to request change order address 2021-08-19 01:31:27 +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
713 changed files with 1892 additions and 34038 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=''
-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,11 +39,6 @@ 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,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);
}
}
@@ -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')]);
}
}
-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 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('http://portal.vtnation.com.my/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', 'http://portal.vtnation.com.my');
$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('http://portal.vtnation.com.my/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,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;
}
@@ -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));
}
@@ -26,12 +26,6 @@ class AddressObject implements DataTransferObject
/** @var int */
private $postCode;
/** @var int */
private $type;
/** @var int */
private $status;
/** @var string|null */
private $reference;
@@ -43,11 +37,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, ?int $status = ApprovalStatus::APPROVED)
{
$this->streetOne = $streetOne;
$this->streetTwo = $streetTwo;
@@ -55,9 +47,8 @@ class AddressObject implements DataTransferObject
$this->stateId = $stateId;
$this->districtId = $districtId;
$this->postCode = $postCode;
$this->type = $type;
$this->status = $status;
$this->reference = $reference;
$this->status = $status;
}
/**
@@ -109,11 +100,11 @@ class AddressObject implements DataTransferObject
}
/**
* @return int
* @return null|string
*/
public function getType(): int
public function getReference(): ?string
{
return $this->type;
return $this->reference;
}
/**
@@ -124,13 +115,5 @@ class AddressObject implements DataTransferObject
return $this->status;
}
/**
* @return null|string
*/
public function getReference(): ?string
{
return $this->reference;
}
}
@@ -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');
}
@@ -29,7 +29,6 @@ class CreatesAddress extends AbstractUpdateRelationshipRecord
$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);
}
@@ -1,67 +0,0 @@
<?php
namespace App\Classes\Modules\Companies\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Companies\Processors\AssignConnectionSegmentProcessor;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Companies\Services\FetchesCompanyConnection;
use App\Http\Resources\CompanyResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class AssignCompanyConnectionToConnectionSegmentLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Assign Company Connection To Connection Segment',
'message' => 'You have successfully assigned Company Connection to Connection segment'
];
}
/** @var FetchesCompany */
private $fetchesCompany;
/** @var FetchesCompanyConnection */
private $fetchesCompanyConnection;
/** @var AssignConnectionSegmentProcessor */
private $assignCompanyConnectionToConnectionSegmentProcessor;
/**
* AssignCompanyToSegmentLogic constructor.
* @param FetchesCompany $fetchesCompany
* @param FetchesCompanyConnection $fetchesCompanyConnection
* @param AssignConnectionSegmentProcessor $assignCompanyConnectionToConnectionSegmentProcessor
*/
public function __construct(FetchesCompany $fetchesCompany, FetchesCompanyConnection $fetchesCompanyConnection, AssignConnectionSegmentProcessor $assignCompanyConnectionToConnectionSegmentProcessor)
{
$this->fetchesCompany = $fetchesCompany;
$this->fetchesCompanyConnection = $fetchesCompanyConnection;
$this->assignCompanyConnectionToConnectionSegmentProcessor = $assignCompanyConnectionToConnectionSegmentProcessor;
}
/**
* @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
{
$company = $this->fetchesCompany->execute(['id' => $request->route('id')]);
$companyConnection = $this->fetchesCompanyConnection->execute(['id' => $request->route('company_connection_id')]);
$this->assignCompanyConnectionToConnectionSegmentProcessor->execute($companyConnection, $request->input('segment_id'));
return $this->resourceResponse(new CompanyResource($company));
}
}
@@ -1,61 +0,0 @@
<?php
namespace App\Classes\Modules\Companies\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Companies\Services\ListsCompanyModules;
use App\Classes\Modules\Companies\Standards\Rules\CanListCompanies;
use App\Http\Resources\CompanyModuleResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListCompanyModulesLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieved Company Moduels',
'message' => 'You have successfully retrieved a list of Companies'
];
}
/** @var CanListCompanies */
private $canListCompanies;
/** @var ListsCompanyModules */
private $listsCompanyModules;
/**
* ListCompaniesControllersLogic constructor.
* @param CanListCompanies $canListCompanies
* @param ListsCompanyModules $listsCompanyModules
*/
public function __construct(CanListCompanies $canListCompanies, ListsCompanyModules $listsCompanyModules)
{
$this->canListCompanies = $canListCompanies;
$this->listsCompanyModules = $listsCompanyModules;
}
/**
* @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->canListCompanies->passes();
$query = $this->listsCompanyModules->execute($this->listsCompanyModules->deserializeFilters($request->input('filters')));
return $this->collectionResponse(CompanyModuleResource::collection($query));
}
}
@@ -1,73 +0,0 @@
<?php
namespace App\Classes\Modules\Companies\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Companies\Services\FetchesCompanyConnection;
use App\Classes\Modules\Companies\Services\RemovesCompanyConnectionFromConnectionSegment;
use App\Classes\Modules\Segments\Services\FetchesSegment;
use App\Http\Resources\CompanyResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class RemoveCompanyConnectionFromConnectionSegmentLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Detach Company Connection From Connection Segment',
'message' => 'You have successfully detached Company Connection from Connection segment'
];
}
/** @var FetchesCompany */
private $fetchesCompany;
/** @var FetchesCompanyConnection */
private $fetchesCompanyConnection;
/** @var FetchesSegment */
private $fetchesSegment;
/** @var RemovesCompanyConnectionFromConnectionSegment */
private $removesCompanyConnectionFromConnectionSegment;
/**
* RemoveCompanyFromSegmentLogic constructor.
* @param FetchesCompany $fetchesCompany
* @param FetchesCompanyConnection $fetchesCompanyConnection
* @param FetchesSegment $fetchesSegment
* @param RemovesCompanyConnectionFromConnectionSegment $removesCompanyConnectionFromConnectionSegment
*/
public function __construct(FetchesCompany $fetchesCompany, FetchesCompanyConnection $fetchesCompanyConnection, FetchesSegment $fetchesSegment, RemovesCompanyConnectionFromConnectionSegment $removesCompanyConnectionFromConnectionSegment)
{
$this->fetchesCompany = $fetchesCompany;
$this->fetchesCompanyConnection = $fetchesCompanyConnection;
$this->fetchesSegment = $fetchesSegment;
$this->removesCompanyConnectionFromConnectionSegment = $removesCompanyConnectionFromConnectionSegment;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request) : JsonResponse
{
$company = $this->fetchesCompany->execute(['id' => $request->route('id')]);
$companyConnection = $this->fetchesCompanyConnection->execute(['id' => $request->route('company_connection_id')]);
$segment = $this->fetchesSegment->execute(['id' => $request->route('segment_id')]);
$this->removesCompanyConnectionFromConnectionSegment->execute($companyConnection, $segment);
return $this->resourceResponse(new CompanyResource($company));
}
}
@@ -5,7 +5,6 @@ namespace App\Classes\Modules\Companies\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Companies\Services\UpdatesCompany;
use App\Classes\Modules\Companies\Services\UpdatesCompanyModuleName;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Companies\Standards\Rules\CanUpdateCompany;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyObject;
@@ -36,22 +35,17 @@ class UpdateCompanyLogic extends AbstractControllerLogic
/** @var FetchesCompany */
private $fetchesCompany;
/** @var UpdatesCompanyModuleName */
private $updatesCompanyModuleName;
/**
* UpdateCompanyControllersLogic constructor.
* @param CanUpdateCompany $canUpdateCompany
* @param UpdatesCompany $updatesCompany
* @param FetchesCompany $fetchesCompany
* @param UpdatesCompanyModuleName $updatesCompanyModuleName
*/
public function __construct(CanUpdateCompany $canUpdateCompany, UpdatesCompany $updatesCompany, FetchesCompany $fetchesCompany, UpdatesCompanyModuleName $updatesCompanyModuleName)
public function __construct(CanUpdateCompany $canUpdateCompany, UpdatesCompany $updatesCompany, FetchesCompany $fetchesCompany)
{
$this->canUpdateCompany = $canUpdateCompany;
$this->updatesCompany = $updatesCompany;
$this->fetchesCompany = $fetchesCompany;
$this->updatesCompanyModuleName = $updatesCompanyModuleName;
}
@@ -62,17 +56,23 @@ class UpdateCompanyLogic extends AbstractControllerLogic
*/
public function logic(Request $request) : JsonResponse
{
$object = new CompanyObject($request->input('name'), $request->input('reference'), $request->input('type'));
try {
$this->canUpdateCompany->passes($object);
$object = new CompanyObject($request->input('reference_no'), $request->input('name'), $request->input('type'));
$query = $this->fetchesCompany->execute(['id' => $request->route('id')]);
$this->canUpdateCompany->passes($object);
$query = $this->updatesCompany->execute($query, $object);
$query = $this->fetchesCompany->execute(['id' => $request->route('id')]);
$this->updatesCompanyModuleName->execute($query->companyModules()->first(), $object->getName());
$query = $this->updatesCompany->execute($query, $object);
return $this->resourceResponse(new CompanyResource($query));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
return $this->resourceResponse(new CompanyResource($query));
}
}
@@ -10,9 +10,6 @@ class CompanyConnectionObject implements DataTransferObject
/** @var CompanyModule */
private $invitee;
/** @var CompanyModule */
private $inviter;
/** @var string */
private $inviterReference;
@@ -23,14 +20,12 @@ class CompanyConnectionObject implements DataTransferObject
/**
* CompanyConnectionObject constructor.
* @param CompanyModule $invitee
* @param CompanyModule $inviter
* @param string $inviterReference
* @param string $inviteeReference
*/
public function __construct(CompanyModule $invitee, CompanyModule $inviter, string $inviteeReference, string $inviterReference)
public function __construct(CompanyModule $invitee, string $inviterReference, string $inviteeReference)
{
$this->invitee = $invitee;
$this->inviter = $inviter;
$this->inviterReference = $inviterReference;
$this->inviteeReference = $inviteeReference;
}
@@ -43,14 +38,6 @@ class CompanyConnectionObject implements DataTransferObject
return $this->invitee;
}
/**
* @return CompanyModule
*/
public function getInviter(): CompanyModule
{
return $this->inviter;
}
/**
* @return string
*/
@@ -1,56 +0,0 @@
<?php
namespace App\Classes\Modules\Companies\Processors;
use App\Classes\Modules\Companies\Services\AssignsCompanyConnectionToConnectionSegment;
use App\Classes\Modules\Companies\Standards\Rules\CanAssignSegment;
use App\Classes\Modules\Segments\Services\FetchesSegment;
use App\Classes\ValueObjects\Constants\SegmentConstants;
use App\Models\CompanyConnection;
use Illuminate\Database\Eloquent\Model;
class AssignConnectionSegmentProcessor
{
/** @var CanAssignSegment */
private $canAssignSegment;
/** @var AssignsCompanyConnectionToConnectionSegment */
private $assignsCompanyConnectionToConnectionSegment;
/** @var FetchesSegment */
private $fetchesSegment;
/**
* AssignCompanyToSegmentProcessor constructor.
* @param CanAssignSegment $canAssignSegment
* @param AssignsCompanyConnectionToConnectionSegment $assignsCompanyConnectionToConnectionSegment
* @param FetchesSegment $fetchesSegment
*/
public function __construct(CanAssignSegment $canAssignSegment, AssignsCompanyConnectionToConnectionSegment $assignsCompanyConnectionToConnectionSegment, FetchesSegment $fetchesSegment)
{
$this->canAssignSegment = $canAssignSegment;
$this->assignsCompanyConnectionToConnectionSegment = $assignsCompanyConnectionToConnectionSegment;
$this->fetchesSegment = $fetchesSegment;
}
/**
* @param CompanyConnection $companyConnection
* @param int|null $segmentId
* @return Model
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(CompanyConnection $companyConnection, ?int $segmentId = SegmentConstants::STANDARD_SEGMENT): Model {
$segment = $this->fetchesSegment->execute(['id' => $segmentId]);
$this->canAssignSegment->passes();
return $this->assignsCompanyConnectionToConnectionSegment->execute($companyConnection, $segment);
}
}
@@ -1,33 +0,0 @@
<?php
namespace App\Classes\Modules\Companies\Services;
use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\CompanyConnection;
use App\Models\Segment;
use Illuminate\Database\QueryException;
class AssignsCompanyConnectionToConnectionSegment extends AbstractUpdateRecord
{
/**
* @param CompanyConnection $companyConnection
* @param Segment $segment
* @return \Illuminate\Database\Eloquent\Model
* @throws MalformedRequestException
*/
public function execute(CompanyConnection $companyConnection, Segment $segment)
{
try {
$companyConnection->segments()->attach($segment);
return $companyConnection;
} catch (QueryException $exception){
throw new MalformedRequestException($exception);
}
}
}
@@ -4,7 +4,6 @@ namespace App\Classes\Modules\Companies\Services;
use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Models\Company;
use App\Models\Segment;
use Illuminate\Database\QueryException;
@@ -20,9 +19,8 @@ class AssignsCompanyToSegment extends AbstractUpdateRecord
public function execute(Company $company, Segment $segment)
{
try {
$companyModule = $company->companyModules()->where('type', BusinessType::IMPORTER)->first();
$connection = $companyModule->connections()->where('inviter_reference', 'CIEF');
$connection->segments()->attach($segment);
$company->segments()->attach($segment);
return $company;
@@ -30,8 +30,10 @@ class CreatesCompanyConnection extends AbstractUpdateRecord
public function execute(CompanyConnectionObject $object)
{
$companyModule = $this->fetchesCompany->execute(['id', 1])->companyModules()->first();
$connection = new CompanyConnection();
$connection->inviter_id = $object->getInviter()->id;
$connection->inviter_id = $companyModule->id;
$connection->invitee_id = $object->getInvitee()->id;
$connection->inviter_reference = $object->getInviterReference();
$connection->invitee_reference = $object->getInviteeReference();
@@ -1,34 +0,0 @@
<?php
namespace App\Classes\Modules\Companies\Services;
use App\Classes\General\Eloquent\AbstractFetchRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\CompanyConnection;
class FetchesCompanyConnection extends AbstractFetchRecord
{
/** @var CompanyConnection */
private $repository;
/**
* FetchesCompanyConnection constructor.
* @param CompanyConnection $repository
*/
public function __construct(CompanyConnection $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
public function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -1,33 +0,0 @@
<?php
namespace App\Classes\Modules\Companies\Services;
use App\Classes\General\Eloquent\AbstractListRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\CompanyModule;
class ListsCompanyModules extends AbstractListRecord
{
/** @var CompanyModule */
private $repository;
/**
* ListsCompanyModules constructor.
* @param CompanyModule $repository
*/
public function __construct(CompanyModule $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
function getRepository(): Builder
{
return $this->repository->newQuery();
}
}

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