Compare commits

...

524 Commits

Author SHA1 Message Date
edmondlang 0bbf0f9138 move admin setting ui components from exchange 2021-12-02 18:45:59 +08:00
edmondlang 2c39c66a2d update setting page enable team settings 2021-11-30 17:23:14 +08:00
edmondlang a56b5c64ba update admin setting - change email address 2021-11-28 14:51:06 +08:00
edmondlang 86401cdad6 hide all setting until the set up is complete
update user reset password
2021-11-27 22:34:56 +08:00
edmondlang 558868d859 update setting edit full name 2021-11-06 20:43:39 +08:00
edmondlang 149029bc24 change settings page input label design 2021-10-26 18:46:43 +08:00
edmondlang ab84ca4719 move settings ui from exchange 2021-10-26 11:46:49 +08:00
edmondlang 6a4e2926b9 wip 2021-10-23 13:55:38 +08:00
omair saleh e7afc0bc10 profit model calculator 2021-10-22 14:28:30 +08:00
omair saleh 999c29411f profit model calculator 2021-10-22 14:27:02 +08:00
omair saleh c5183ac0a7 create container remark 2021-10-21 21:25:13 +08:00
omair saleh 896a101fad fix createRemark service class 2021-10-21 21:21:26 +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
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
Fairuz 861341ce3a Migration file for orders 2021-07-08 16:30:10 +08:00
Fairuz f603ef53c4 Missing resources address, district & swagger docs for it 2021-07-07 17:17:56 +08:00
850 changed files with 41433 additions and 43185 deletions
+2
View File
@@ -49,3 +49,5 @@ PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
UNITY_APP_URL="https://unity.izyim.com"
+4 -1
View File
@@ -22,4 +22,7 @@ rebuild_docker.sh
docker/*
db/*
docker-compose.yml
package-lock.json
package-lock.json
public/*
/public/*
storage/framework/laravel-excel/*
@@ -43,4 +43,4 @@ abstract class AbstractListRecord extends AbstractGetRecord
}
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class CompanyModuleId implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('company_module_id', $value);
}
}
@@ -0,0 +1,21 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Builder;
class CreatedAfter implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('created_at', '>', Carbon::parse($value));
}
}
@@ -0,0 +1,22 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class HasBusinessModuleType implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('companyModules', function (Builder $query) use($value) {
$query->where('type', $value);
});
}
}
@@ -0,0 +1,22 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class HasMorphCompanyModule implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHasMorph('owner', ['App\Models\CompanyModule'], function ($query) use($value) {
$query->where('id',$value);
});
}
}
@@ -14,7 +14,7 @@ class Reference implements Filter
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('Reference', '=', $value);
return $builder->where('reference', '=', $value);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class ReferenceLike implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('reference', 'LIKE', '%'.$value.'%');
}
}
@@ -0,0 +1,22 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class WithCompanyModuleType implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('companyModule', function ($query) use ($value) {
$query->where('company_modules.type', '=', $value);
});
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class WithConfirmedOrders implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('parcels');
}
}
@@ -5,7 +5,7 @@ namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class WithBookings implements Filter
class WithOrders implements Filter
{
/**
@@ -15,6 +15,6 @@ class WithBookings implements Filter
*/
public static function apply(Builder $builder, $value)
{
return $builder->with('bookings');
return $builder->with('orders');
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class WithOwner implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->with('owner');
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class WithPackingLists implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->with('packingLists');
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class WithParcels implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->with('parcels');
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class WithoutConfirmedOrders implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereDoesntHave('parcels');
}
}
@@ -0,0 +1,13 @@
<?php
namespace App\Classes\General\Interfaces;
use Illuminate\Database\Eloquent\Relations\MorphMany;
interface Addressable
{
public function addresses(): morphMany;
}
@@ -0,0 +1,13 @@
<?php
namespace App\Classes\General\Interfaces;
use Illuminate\Database\Eloquent\Relations\MorphMany;
interface ContainerOwner
{
public function containers(): morphMany;
}
@@ -0,0 +1,13 @@
<?php
namespace App\Classes\General\Interfaces;
use Illuminate\Database\Eloquent\Relations\MorphMany;
interface Packable
{
public function packingLists(): morphMany;
}
@@ -0,0 +1,13 @@
<?php
namespace App\Classes\General\Interfaces;
use Illuminate\Database\Eloquent\Relations\MorphMany;
interface Remarkable
{
public function remarks(): morphMany;
}
@@ -0,0 +1,13 @@
<?php
namespace App\Classes\General\Interfaces;
use Illuminate\Database\Eloquent\Relations\MorphMany;
interface Steppable
{
public function steps(): morphMany;
}
@@ -0,0 +1,13 @@
<?php
namespace App\Classes\General\Interfaces;
use Illuminate\Database\Eloquent\Relations\MorphMany;
interface Transportable
{
public function transports(): 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;
}
}
@@ -0,0 +1,29 @@
<?php
namespace App\Classes\Jobs;
use App\Classes\Modules\PackingLists\Processors\FetchContainersStatusUpdateFromVTPortalProcessor;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class FetchContainersStatusUpdateFromVTPortalJob 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(FetchContainersStatusUpdateFromVTPortalProcessor::class))->execute();
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Classes\Jobs;
use App\Classes\Modules\PackingLists\Processors\FetchDeliveryListFromVTPortalProcessor;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class FetchDeliveryListFromVTPortalJob 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(FetchDeliveryListFromVTPortalProcessor::class))->execute();
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Classes\Jobs;
use App\Classes\Modules\PackingLists\Processors\FetchLoadedContainersFromVTPortalProcessor;
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 FetchLoadedContainersFromVTPortalJob 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(FetchLoadedContainersFromVTPortalProcessor::class))->execute();
}
}
@@ -0,0 +1,30 @@
<?php
namespace App\Classes\Jobs;
use App\Classes\Modules\PackingLists\Processors\FetchPackingListFromVTPortalProcessor;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class FetchPackingListFromVTPortalJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $timeout = 1800;
/**
* Execute the job.
*
* @return void
* @throws \Illuminate\Contracts\Container\BindingResolutionException
*/
public function handle()
{
(App()->make(FetchPackingListFromVTPortalProcessor::class))->execute();
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Classes\Jobs;
use App\Classes\Modules\PackingLists\Processors\FetchWarehouseReceiveListFromVTPortalProcessor;
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 FetchWarehouseReceiveListFromVTPortalJob 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(FetchWarehouseReceiveListFromVTPortalProcessor::class))->execute();
}
}
@@ -0,0 +1,78 @@
<?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));
}
}
@@ -35,7 +35,6 @@ class AuthenticateUserLogic extends AbstractControllerLogic
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\AccessUnauthorisedException
* @throws \App\Classes\Exceptions\InternalServerErrorException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function logic(Request $request): JsonResponse {
@@ -4,21 +4,28 @@ namespace App\Classes\Modules\Accounts\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\General\Services\GeneratesInitials;
use App\Classes\Modules\Accounts\Processors\AuthenticationProcessor;
use App\Classes\Modules\Accounts\Processors\CreateUserProcessor;
use App\Classes\Modules\Accounts\Processors\GenerateEmailVerificationAttemptProcessor;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyConnectionObject;
use App\Classes\Modules\Companies\Processors\AssignEmployeeProcessor;
use App\Classes\Modules\Companies\Processors\AssignSegmentProcessor;
use App\Classes\Modules\Companies\Processors\CreateCompanyProcessor;
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\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
use App\Classes\Modules\Documents\Processors\UploadIdentityDocumentProcessor;
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 App\Models\Company;
use App\Models\CompanyModule;
use App\Models\User;
use Illuminate\Http\JsonResponse;
@@ -51,15 +58,18 @@ class CreateCustomerLogic extends AbstractControllerLogic
/** @var CreateContactProcessor */
private $createContactProcessor;
/** @var CreatesCompanyConnection */
private $createsCompanyConnection;
/** @var ApprovesCompanyConnection */
private $approvesCompanyConnection;
/** @var AssignEmployeeProcessor */
private $assignEmployeeProcessor;
/** @var UploadIdentityDocumentProcessor */
private $uploadIdentityDocumentProcessor;
/** @var AssignSegmentProcessor */
private $assignSegmentProcessor;
/** @var AuthenticationProcessor */
private $authenticationProcessor;
@@ -72,20 +82,22 @@ class CreateCustomerLogic extends AbstractControllerLogic
* @param CreateCompanyProcessor $createCompanyProcessor
* @param CreateCompanyModuleProcessor $createCompanyModuleProcessor
* @param CreateContactProcessor $createContactProcessor
* @param CreatesCompanyConnection $createsCompanyConnection
* @param ApprovesCompanyConnection $approvesCompanyConnection
* @param AssignEmployeeProcessor $assignEmployeeProcessor
* @param AssignSegmentProcessor $assignSegmentProcessor
* @param UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor
* @param AuthenticationProcessor $authenticationProcessor
* @param GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor
*/
public function __construct(CreateUserProcessor $createUserProcessor, CreateCompanyProcessor $createCompanyProcessor, CreateCompanyModuleProcessor $createCompanyModuleProcessor, CreateContactProcessor $createContactProcessor, AssignEmployeeProcessor $assignEmployeeProcessor, AssignSegmentProcessor $assignSegmentProcessor, AuthenticationProcessor $authenticationProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor, UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor)
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;
$this->createCompanyModuleProcessor = $createCompanyModuleProcessor;
$this->createContactProcessor = $createContactProcessor;
$this->createsCompanyConnection = $createsCompanyConnection;
$this->approvesCompanyConnection = $approvesCompanyConnection;
$this->assignEmployeeProcessor = $assignEmployeeProcessor;
$this->assignSegmentProcessor = $assignSegmentProcessor;
$this->uploadIdentityDocumentProcessor = $uploadIdentityDocumentProcessor;
$this->authenticationProcessor = $authenticationProcessor;
$this->generateEmailVerificationAttemptProcessor = $generateEmailVerificationAttemptProcessor;
@@ -96,30 +108,37 @@ class CreateCustomerLogic extends AbstractControllerLogic
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\AccessUnauthorisedException
* @throws \App\Classes\Exceptions\InternalServerErrorException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request): JsonResponse
{
/** @var User $user */
$user = $this->createUserProcessor->execute($request, RoleTypes::USER, App::environment(['local']) ? ApprovalStatus::APPROVED : ApprovalStatus::PENDING_VERIFICATION);
$user = $this->createUserProcessor->execute($request, RoleTypes::USER, !App::environment(['production']) ? ApprovalStatus::APPROVED : ApprovalStatus::PENDING_VERIFICATION);
/** @var Company $company */
$company = $this->createCompanyProcessor->execute($request, $request->input('type'), ApprovalStatus::PENDING_SUBMISSION);
$company = $this->createCompanyProcessor->execute($request->input('type') === CompanyType::COMPANY_BUSINESS ? $request->input('company_name') : $request->input('name'), $request->input('type'), ApprovalStatus::PENDING_SUBMISSION);
$this->createContactProcessor->execute($request, $company);
$contactObject = new ContactObject($request->input('name'), $request->input('phone'), $request->input('contact_email'), $request->input('wechat_id'));
$companyModule = $this->createCompanyModuleProcessor->execute($company);
$this->createContactProcessor->execute($contactObject, $company);
/** @var CompanyModule $companyModule */
$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);
//$this->assignSegmentProcessor->execute($company);
$this->assignEmployeeProcessor->execute($Object);
$this->uploadIdentityDocumentProcessor->execute($request, $company);
$this->generateEmailVerificationAttemptProcessor->execute($user);
// $this->generateEmailVerificationAttemptProcessor->execute($user);
return $this->response($this->authenticationProcessor->execute($request));
}
@@ -0,0 +1,105 @@
<?php
namespace App\Classes\Modules\Accounts\ControllersLogic;
use App\Classes\Exceptions\AccessForbiddenException;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Accounts\Processors\AuthenticationProcessor;
use App\Classes\Modules\Accounts\Processors\CreateUserProcessor;
use App\Classes\Modules\Companies\Processors\AssignEmployeeProcessor;
use App\Classes\Modules\Companies\DataTransferObjects\EmploymentObject;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\RoleTypes;
use App\Models\Company;
use App\Models\CompanyModule;
use App\Models\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
class CreateInvitedCustomerLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification(): array
{
return [
'title' => 'Created User',
'message' => 'You have successfully created a new User'
];
}
/** @var CreateUserProcessor */
private $createUserProcessor;
/** @var CreateContactProcessor */
private $createContactProcessor;
/** @var FetchesCompany */
private $fetchesCompany;
/** @var AssignEmployeeProcessor */
private $assignEmployeeProcessor;
/** @var AuthenticationProcessor */
private $authenticationProcessor;
/**
* CreateInvitedCustomerLogic constructor.
* @param CreateUserProcessor $createUserProcessor
* @param CreateContactProcessor $createContactProcessor
* @param FetchesCompany $fetchesCompany
* @param AssignEmployeeProcessor $assignEmployeeProcessor
* @param AuthenticationProcessor $authenticationProcessor
*/
public function __construct(CreateUserProcessor $createUserProcessor, CreateContactProcessor $createContactProcessor, FetchesCompany $fetchesCompany, AssignEmployeeProcessor $assignEmployeeProcessor, AuthenticationProcessor $authenticationProcessor)
{
$this->createUserProcessor = $createUserProcessor;
$this->createContactProcessor = $createContactProcessor;
$this->fetchesCompany = $fetchesCompany;
$this->assignEmployeeProcessor = $assignEmployeeProcessor;
$this->authenticationProcessor = $authenticationProcessor;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\AccessUnauthorisedException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request): JsonResponse
{
/** @var Company $company */
$company = $this->fetchesCompany->execute(['id' => $request->input('company_id')]);
/** @var CompanyModule $companyModule */
$companyModule = $company->companyModules()->first();
if($companyModule->employees()->exists()){
throw new AccessForbiddenException('This company\'s account has been claimed by another user already!');
}
/** @var User $user */
$user = $this->createUserProcessor->execute($request, RoleTypes::USER, !App::environment(['production']) ? ApprovalStatus::APPROVED : ApprovalStatus::PENDING_VERIFICATION);
$contactObject = new ContactObject($request->input('name'), $request->input('phone'), $request->input('contact_email'), $request->input('wechat_id'));
$this->createContactProcessor->execute($contactObject, $company);
$Object = new EmploymentObject($companyModule, $user);
$this->assignEmployeeProcessor->execute($Object);
return $this->response($this->authenticationProcessor->execute($request));
}
}
@@ -37,7 +37,6 @@ class LogoutUserLogic extends AbstractControllerLogic
*/
protected function logic(Request $request): JsonResponse {
logger("logout");
$this->invalidatesAuthenticationToken->execute();
return $this->response();
@@ -4,19 +4,14 @@ namespace App\Classes\Modules\Accounts\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
class FullnameObject implements DataTransferObject
class FullNameObject implements DataTransferObject
{
/** @var string */
private $name;
/**
* UserObject constructor.
* FullNameObject constructor.
* @param string $name
* @param string $email
* @param string $password
* @param string $passwordConfirmation
* @param int|null $type
* @param int|null $status
*/
public function __construct(string $name)
{
@@ -2,9 +2,9 @@
namespace App\Classes\Modules\Accounts\Services;
use App\Classes\Exceptions\AccessUnauthorisedException;
use App\Classes\Modules\Accounts\DataTransferObjects\AuthenticationCredentialsObject;
class AuthenticatesUser
{
@@ -0,0 +1,28 @@
<?php
namespace App\Classes\Modules\Accounts\Services;
use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\PasswordReset;
class ExpiresPasswordReset extends AbstractUpdateRecord
{
/**
* @param PasswordReset $model
* @return \Illuminate\Database\Eloquent\Model
* @throws MalformedRequestException
*/
public function execute(PasswordReset $model){
$model->is_expired = true;
return $this->handler($model);
}
}
@@ -3,6 +3,7 @@
namespace App\Classes\Modules\Accounts\Services;
use App\Classes\Exceptions\InternalServerErrorException;
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
use App\Classes\ValueObjects\Constants\RoleTypes;
use App\Models\Company;
use App\Models\Role;
@@ -53,9 +54,6 @@ class GeneratesAuthenticationToken {
*/
private function setTokenClaims(User $user): void {
/** @var Company $companyModule */
$companyModule = $user->companyModule()->first();
$claims = [
'id' => $user->id,
'name' => $user->name,
@@ -65,6 +63,10 @@ class GeneratesAuthenticationToken {
];
if($user->type === RoleTypes::USER) {
/** @var Company $companyModule */
$companyModule = $user->companyModule()->first();
$claims = array_merge($claims, [
'company_id' => $companyModule->company_id
]);
@@ -3,7 +3,7 @@
namespace App\Classes\Modules\Accounts\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Accounts\DataTransferObjects\FullnameObject;
use App\Classes\Modules\Accounts\DataTransferObjects\FullNameObject;
use App\Models\User;
class UpdatesUser extends AbstractUpdateRecord
@@ -11,7 +11,7 @@ class UpdatesUser extends AbstractUpdateRecord
/**
* @param User $model
* @param UserObject $object
* @param FullNameObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
@@ -8,7 +8,7 @@ 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\FetchesCompany;
use App\Classes\Modules\Companies\Services\FetchesCompanyModule;
use App\Http\Resources\AddressResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
@@ -33,8 +33,8 @@ class CreateAddressLogic extends AbstractControllerLogic
/** @var FetchesDistrict */
private $fetchesDistrict;
/** @var FetchesCompany */
private $fetchesCompany;
/** @var FetchesCompanyModule */
private $fetchesCompanyModule;
/** @var CreatesAddress */
private $createsAddress;
@@ -43,14 +43,14 @@ class CreateAddressLogic extends AbstractControllerLogic
* CreateAddressLogic constructor.
* @param CanCreateAddress $canCreateAddress
* @param FetchesDistrict $fetchesDistrict
* @param FetchesCompany $fetchesCompany
* @param FetchesCompanyModule $fetchesCompanyModule
* @param CreatesAddress $createsAddress
*/
public function __construct(CanCreateAddress $canCreateAddress, FetchesDistrict $fetchesDistrict, FetchesCompany $fetchesCompany, CreatesAddress $createsAddress)
public function __construct(CanCreateAddress $canCreateAddress, FetchesDistrict $fetchesDistrict, FetchesCompanyModule $fetchesCompanyModule, CreatesAddress $createsAddress)
{
$this->canCreateAddress = $canCreateAddress;
$this->fetchesDistrict = $fetchesDistrict;
$this->fetchesCompany = $fetchesCompany;
$this->fetchesCompanyModule = $fetchesCompanyModule;
$this->createsAddress = $createsAddress;
}
@@ -66,13 +66,13 @@ 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'));
$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);
$query = $this->createsAddress->execute($this->fetchesCompany->execute(['id' => $request->input('company_id')]), $object);
$address = $this->createsAddress->execute($this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]), $object);
return $this->resourceResponse(new AddressResource($query));
return $this->resourceResponse(new AddressResource($address));
}
@@ -50,23 +50,20 @@ class DeleteAddressLogic extends AbstractControllerLogic
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
try {
$this->canDeleteAddress->passes();
$this->canDeleteAddress->passes();
$query = $this->fetchesAddress->execute(['id' => $request->route('id')]);
$query = $this->fetchesAddress->execute(['id' => $request->route('id')]);
$this->deletesAddress->execute($query);
$this->deletesAddress->execute($query);
return $this->response([]);
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
return $this->response([]);
}
@@ -45,21 +45,16 @@ class FetchAddressLogic extends AbstractControllerLogic
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
try {
$this->canFetchAddress->passes();
$this->canFetchAddress->passes();
$query = $this->fetchesAddress->execute(['id' => $request->route('id')]);
$query = $this->fetchesAddress->execute(['id' => $request->route('id')]);
return $this->resourceResponse(new AddressResource($query));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
return $this->resourceResponse(new AddressResource($query));
}
@@ -45,21 +45,18 @@ class ListAddressesLogic extends AbstractControllerLogic
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
try {
$this->canListAddresses->passes();
$this->canListAddresses->passes();
$query = $this->listsAddresses->execute($this->listsAddresses->deserializeFilters($request->input('filters')));
$query = $this->listsAddresses->execute($this->listsAddresses->deserializeFilters($request->input('filters')));
return $this->collectionResponse(AddressResource::collection($query));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
return $this->collectionResponse(AddressResource::collection($query));
}
@@ -2,15 +2,13 @@
namespace App\Classes\Modules\Addresses\ControllersLogic;
use App\Classes\General\Interfaces\Addressable;
use App\Http\Resources\AddressResource;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\Modules\Addresses\Standards\Rules\CanUpdateAddress;
use App\Classes\Modules\Addresses\Services\ResetsAddressesDefault;
use App\Classes\Modules\Addresses\Services\SetsAddressToDefault;
use App\Models\Address;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -29,25 +27,26 @@ class SetAddressToDefaultLogic extends AbstractControllerLogic
];
}
/** @var ResetsAddressesDefault */
private $resetsAddressesDefault;
/** @var FetchesAddress */
private $fetchesAddress;
/** @var ResetsAddressesDefault */
private $resetsAddressesDefault;
/** @var SetsAddressToDefault*/
private $setsAddressToDefault;
/**
* SetAddressToDefaultLogic constructor.
* @param ResetsAddressesDefault $resetsAddressesDefault
* @param FetchesAddress $fetchesAddress
* @param ResetsAddressesDefault $resetsAddressesDefault
* @param SetsAddressToDefault $setsAddressToDefault
*/
public function __construct(ResetsAddressesDefault $resetsAddressesDefault, FetchesAddress $fetchesAddress, SetsAddressToDefault $setsAddressToDefault)
public function __construct(FetchesAddress $fetchesAddress, ResetsAddressesDefault $resetsAddressesDefault, SetsAddressToDefault $setsAddressToDefault)
{
$this->resetsAddressesDefault = $resetsAddressesDefault;
$this->fetchesAddress = $fetchesAddress;
$this->resetsAddressesDefault = $resetsAddressesDefault;
$this->setsAddressToDefault = $setsAddressToDefault;
}
@@ -63,8 +62,9 @@ class SetAddressToDefaultLogic extends AbstractControllerLogic
$address = $this->fetchesAddress->execute(['id' => $request->route('id')]);
$this->resetsAddressesDefault->execute($address);
$this->resetsAddressesDefault->execute($address->owner, $address->type);
return $this->resourceResponse(new AddressResource($this->setsAddressToDefault->execute($address)));
}
}
@@ -10,7 +10,6 @@ use App\Classes\Modules\Addresses\Services\FetchesDistrict;
use App\Classes\Modules\Addresses\Standards\Rules\CanUpdateAddress;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Http\Resources\AddressResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -58,28 +57,23 @@ class UpdateAddressLogic extends AbstractControllerLogic
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
try {
$district = $this->fetchesDistrict->execute(['id' => $request->input('district_id')]);
$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'));
//$object = new AddressObject($request->input('company_id'), $request->input('street_one'), $request->input('street_two'), $request->input('city'), $request->input('state'), $request->input('post_code'), $request->input('country'), $request->input('default'), $request->input('billing'));
$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);
$this->canUpdateAddress->passes($object);
$query = $this->fetchesAddress->execute(['id' => $request->route('id')]);
$address = $this->fetchesAddress->execute(['id' => $request->route('id')]);
$query = $this->updatesAddress->execute($query, $object);
$address = $this->updatesAddress->execute($address, $object);
return $this->resourceResponse(new AddressResource($query));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
return $this->resourceResponse(new AddressResource($address));
}
@@ -3,6 +3,7 @@
namespace App\Classes\Modules\Addresses\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
class AddressObject implements DataTransferObject
{
@@ -25,6 +26,9 @@ class AddressObject implements DataTransferObject
/** @var int */
private $postCode;
/** @var string|null */
private $reference;
/**
* AddressObject constructor.
* @param string $streetOne
@@ -33,8 +37,9 @@ class AddressObject implements DataTransferObject
* @param int $stateId
* @param int $districtId
* @param int $postCode
* @param null|string $reference
*/
public function __construct(string $streetOne, ?string $streetTwo, int $countryId, int $stateId, int $districtId, int $postCode)
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;
@@ -42,6 +47,8 @@ class AddressObject implements DataTransferObject
$this->stateId = $stateId;
$this->districtId = $districtId;
$this->postCode = $postCode;
$this->reference = $reference;
$this->status = $status;
}
/**
@@ -92,5 +99,21 @@ class AddressObject implements DataTransferObject
return $this->postCode;
}
/**
* @return null|string
*/
public function getReference(): ?string
{
return $this->reference;
}
/**
* @return int
*/
public function getStatus(): int
{
return $this->status;
}
}
@@ -0,0 +1,56 @@
<?php
namespace App\Classes\Modules\Addresses\Processors;
use App\Classes\General\Interfaces\Addressable;
use App\Classes\Modules\Addresses\Services\CleansOldAddress;
use App\Classes\Modules\Addresses\Services\CreatesAddress;
use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Models\OldAddress;
use App\Models\Order;
use Illuminate\Database\Eloquent\Model;
class CreateAddressFromOldAddressProcessor
{
/** @var CleansOldAddress */
private $cleansOldAddress;
/** @var CreatesAddress */
private $createsAddress;
/**
* CreateAddressFromOldAddressProcessor constructor.
* @param CleansOldAddress $cleansOldAddress
* @param CreatesAddress $createsAddress
*/
public function __construct(CleansOldAddress $cleansOldAddress, CreatesAddress $createsAddress)
{
$this->cleansOldAddress = $cleansOldAddress;
$this->createsAddress = $createsAddress;
}
/**
* @param OldAddress $address
* @param Addressable $addressable
* @return Model|null
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(OldAddress $address, Addressable $addressable): ?Model {
if(!$object = $this->cleansOldAddress->execute($address)){
return null;
}
if(!$addressable instanceof Order && $address = $addressable->addresses()->where('street_one', $object->getStreetOne())->first()) {
return $address;
}
return $this->createsAddress->execute($addressable, $object);
}
}
@@ -0,0 +1,54 @@
<?php
namespace App\Classes\Modules\Addresses\Processors;
use App\Classes\Modules\Addresses\Services\CreatesOrderAddress;
use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\Modules\Addresses\Standards\Rules\CanCreateAddress;
use Illuminate\Database\Eloquent\Model;
use App\Models\Order;
class CreateOrderAddressProcessor
{
/** @var CanCreateAddress */
private $canCreateAddress;
/** @var CreatesAddress */
private $createsOrderAddress;
private $fetchesAddress;
/**
* CreateAddressProcessor constructor.
* @param CanCreateAddress $canCreateAddress
* @param CreatesOrderAddress $createsOrderAddress
* @param FetchesAddress $fetchesAddress
*/
public function __construct(CanCreateAddress $canCreateAddress, CreatesOrderAddress $createsOrderAddress, FetchesAddress $fetchesAddress)
{
$this->fetchesAddress = $fetchesAddress;
$this->canCreateAddress = $canCreateAddress;
$this->createsOrderAddress = $createsOrderAddress;
}
/**
* @param EmploymentObject $object
* @return Model
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(int $address, Order $order): Model {
$address = $this->fetchesAddress->execute(['id' => $address_id]);
// $this->canCreateAddress->passes($object);
//Fetches Address & duplicate
return $this->createsOrderAddress->execute($address, $order);
}
}
@@ -0,0 +1,52 @@
<?php
/**
* Created by PhpStorm.
* User: Omair Saleh
* Date: 20/8/2021
* Time: 1:05 AM
*/
namespace App\Classes\Modules\Addresses\Services;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Models\District;
use App\Models\OldAddress;
class CleansOldAddress
{
public function execute(OldAddress $address){
if($address->street_one === '' && $address->street_two === ''){
return null;
}
if(!$address->post_code){
return null;
}
$district = District::where('postcode', 'like', '%'. $address->post_code .'%')->first();
if(!$district) {
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, 'Delivery Address');
}
public function cleanAddress($address, $district, $postcode){
$address = str_replace('Malaysia', '', str_replace('malaysia', '', str_replace('MALAYSIA', '', $address)));
$address = str_replace($district->state->name, '',str_replace($district->name, '', $address));
$address = str_replace(strtolower($district->state->name), '',str_replace(strtolower($district->name), '', $address));
$address = str_replace(strtoupper($district->state->name), '',str_replace(strtoupper($district->name), '', $address));
$address = str_replace($postcode, '', $address);
$address = str_replace(', ,', ',', str_replace(', ,', ',', str_replace(', ,', ',', $address)));
$address = str_replace(',', ', ', $address);
$address = preg_replace('!\s+!', ' ', $address);
$address = preg_replace("/,+/", ",", $address);
return rtrim(rtrim(rtrim(rtrim($address, '.')), ','));
}
}
@@ -2,31 +2,35 @@
namespace App\Classes\Modules\Addresses\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
use App\Classes\General\Interfaces\Addressable;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Models\Address;
use App\Models\Company;
use App\Models\CompanyModule;
class CreatesAddress extends AbstractUpdateRelationshipRecord
{
/**
* @param Company $company
* @param Addressable $addressable
* @param AddressObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Company $company, AddressObject $object) {
public function execute(Addressable $addressable, AddressObject $object) {
$model = new Address();
$model->reference = $object->getReference();
$model->street_one = $object->getStreetOne();
$model->street_two = $object->getStreetTwo();
$model->country_id = $object->getCountryId();
$model->state_id = $object->getStateId();
$model->district_id = $object->getDistrictId();
$model->postcode = $object->getPostCode();
$model->status = $object->getStatus();
return $this->handler($company->addresses(), $model);
return $this->handler($addressable->addresses(), $model);
}
}
@@ -0,0 +1,27 @@
<?php
namespace App\Classes\Modules\Addresses\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject;
use App\Models\Order;
use App\Models\Address;
class CreatesOrderAddress extends AbstractUpdateRelationshipRecord
{
public function execute(Address $address, Order $order) {
$model = new Address();
$model->street_one = $address->street_one;
$model->street_two = $address->street_two;
$model->country_id = $address->country_id;
$model->state_id = $address->state_id;
$model->district_id = $address->district_id;
$model->postcode = $address->postcode;
return $this->handler($order->addresses(), $model);
}
}
@@ -3,17 +3,20 @@
namespace App\Classes\Modules\Addresses\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\General\Interfaces\Addressable;
use App\Models\Address;
use App\Models\CompanyModule;
class ResetsAddressesDefault extends AbstractUpdateRecord
{
/**
* @param Address $address
* @param Addressable $addressable
* @param int $type
* @return void
*/
public function execute(Address $address)
public function execute(Addressable $addressable, int $type)
{
$address->company->addresses()->update(['billing' => false]);
$addressable->addresses()->where('type', $type)->update(['default' => false]);
}
}
@@ -15,7 +15,7 @@ class SetsAddressToDefault extends AbstractUpdateRecord
*/
public function execute(Address $model)
{
$model->billing = true;
$model->default = true;
return $this->handler($model);
}
@@ -17,15 +17,13 @@ class UpdatesAddress extends AbstractUpdateRecord
*/
public function execute(Address $model, AddressObject $object) {
//$model->company_id = $object->getCompanyId();
$model->reference = $object->getReference();
$model->street_one = $object->getStreetOne();
$model->street_two = $object->getStreetTwo();
$model->district_id = $object->getDistrictId();
$model->state_id = $object->getStateId();
$model->postcode = $object->getPostCode();
$model->country_id = $object->getCountryId();
//$model->default = $object->getDefault();
//$model->billing = $object->getBilling();
return $this->handler($model);
@@ -0,0 +1,61 @@
<?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));
}
}
@@ -0,0 +1,82 @@
<?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));
}
}
@@ -0,0 +1,71 @@
<?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([]);
}
}
@@ -0,0 +1,60 @@
<?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));
}
}
@@ -0,0 +1,68 @@
<?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));
}
}
@@ -0,0 +1,83 @@
<?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));
}
}
@@ -0,0 +1,70 @@
<?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;
}
}
@@ -0,0 +1,56 @@
<?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);
}
}
@@ -0,0 +1,33 @@
<?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);
}
}
}
@@ -0,0 +1,26 @@
<?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 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->ending_on = $object->getEndingOn();
return $this->handler($model);
}
}
@@ -0,0 +1,19 @@
<?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);
}
}
@@ -0,0 +1,34 @@
<?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();
}
}
@@ -0,0 +1,32 @@
<?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();
}
}
@@ -0,0 +1,33 @@
<?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);
}
}
}
@@ -0,0 +1,27 @@
<?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);
}
}
@@ -0,0 +1,40 @@
<?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;
}
}
@@ -0,0 +1,50 @@
<?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;
}
}
@@ -0,0 +1,40 @@
<?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;
}
}
@@ -0,0 +1,36 @@
<?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;
}
}
@@ -0,0 +1,54 @@
<?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;
}
}
@@ -0,0 +1,44 @@
<?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 [];
}
}
@@ -0,0 +1,72 @@
<?php
namespace App\Classes\Modules\Banks\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Banks\Standards\Rules\CanCreateBank;
use App\Classes\Modules\Banks\Services\CreatesBank;
use App\Classes\Modules\Banks\DataTransferObjects\BankObject;
use App\Http\Resources\BankResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class CreateBankLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Created Bank',
'message' => 'You have successfully created a new Bank'
];
}
/** @var CanCreateBank */
private $canCreateBank;
/** @var CreatesBank */
private $createsBank;
/**
* CreateBankLogic constructor.
* @param CanCreateBank $canCreateBank
* @param CreatesBank $createsBank
*/
public function __construct(
CanCreateBank $canCreateBank,
CreatesBank $createsBank
)
{
$this->canCreateBank = $canCreateBank;
$this->createsBank = $createsBank;
}
/**
* @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
{
$bank_object = new BankObject($request->input('company_id'), $request->input('account_type'),
$request->input('bank_name'), $request->input('holder_name'), $request->input('account_no'),
$request->input('bank_branch'), $request->input('swift'), $request->input('snap'),
$request->input('country_id'), $request->input('reference'));
$this->canCreateBank->passes($bank_object);
$bank = $this->createsBank->execute($bank_object);
return $this->resourceResponse(new BankResource($bank));
}
}
@@ -0,0 +1,77 @@
<?php
namespace App\Classes\Modules\Banks\ControllersLogic;
use App\Classes\Exceptions\RequestValidationException;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Banks\Services\FetchesBank;
use App\Classes\Modules\Banks\Standards\Rules\CanDeleteBank;
use App\Classes\Modules\Banks\Services\DeletesBank;
use App\Http\Resources\BankResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class DeleteBankLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Delete Bank',
'message' => 'You have successfully deleted the Bank'
];
}
/** @var CanDeleteBank */
private $canDeleteBank;
/** @var DeletesBank */
private $deletesBank;
/** @var FetchesBank */
private $fetchesBank;
/**
* DeleteBankLogic constructor.
* @param CanDeleteBank $canDeleteBank
* @param DeletesBank $deletesBank
* @param FetchesBank $fetchesBank
*/
public function __construct(
CanDeleteBank $canDeleteBank,
DeletesBank $deletesBank,
FetchesBank $fetchesBank
)
{
$this->canDeleteBank = $canDeleteBank;
$this->deletesBank = $deletesBank;
$this->fetchesBank = $fetchesBank;
}
/**
* @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->canDeleteBank->passes();
$bank = $this->fetchesBank->execute(['id' => $request->route('id')]);
if($bank->default){
throw new RequestValidationException('You can\'t delete bank account when it set to default');
}
$this->deletesBank->execute($bank);
return $this->response([]);
}
}
@@ -0,0 +1,62 @@
<?php
namespace App\Classes\Modules\Banks\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Banks\Services\ListsBanks;
use App\Classes\Modules\Banks\Standards\Rules\CanListBanks;
use App\Http\Resources\BankResource;
use App\Http\Resources\CompanyResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListBanksLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieve Banks',
'message' => 'You have successfully retrieved a list of Banks'
];
}
/** @var CanListBanks */
private $canListBanks;
/** @var ListsBanks */
private $listsBanks;
/**
* ListBanksLogic constructor.
* @param CanListBanks $canListBanks
* @param ListsBanks $listsBanks
*/
public function __construct(CanListBanks $canListBanks, ListsBanks $listsBanks)
{
$this->canListBanks = $canListBanks;
$this->listsBanks = $listsBanks;
}
/**
* @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->canListBanks->passes();
$banks = $this->listsBanks->execute($this->listsBanks->deserializeFilters($request->input('filters')));
return $this->collectionResponse(BankResource::collection($banks));
}
}
@@ -0,0 +1,78 @@
<?php
namespace App\Classes\Modules\Banks\ControllersLogic;
use App\Http\Resources\BankResource;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Banks\Services\FetchesBank;
use App\Classes\Modules\Banks\Services\ListsBanks;
use App\Classes\Modules\Banks\Standards\Rules\CanUpdateBank;
use App\Classes\Modules\Banks\Services\ResetsBanksDefault;
use App\Classes\Modules\Banks\Services\SetsBankToDefault;
use App\Classes\Modules\Banks\DataTransferObjects\BankObject;
use App\Classes\ValueObjects\Constants\DefaultType;
use App\Models\Bank;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class SetBankToDefaultLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Updated Bank',
'message' => 'You have successfully updated the Bank'
];
}
/** @var ResetsBanksDefault */
private $resetsBanksDefault;
/** @var FetchesBank */
private $fetchesBank;
/** @var SetsBankToDefault*/
private $setsBankToDefault ;
/**
* SetBankToDefaultLogic constructor.
* @param ResetsBanksDefault $resetsBanksDefault
* @param FetchesBank $fetchesBank
* @param SetsBankToDefault $setsBankToDefault
*/
public function __construct(ResetsBanksDefault $resetsBanksDefault, FetchesBank $fetchesBank, SetsBankToDefault $setsBankToDefault)
{
$this->resetsBanksDefault = $resetsBanksDefault;
$this->fetchesBank = $fetchesBank;
$this->setsBankToDefault = $setsBankToDefault;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request) : JsonResponse
{
/** @var Bank $bank */
$bank = $this->fetchesBank->execute(['id' => $request->route('id')]);
$this->resetsBanksDefault->execute($bank);
$this->setsBankToDefault->execute($bank);
return $this->resourceResponse(new BankResource($this->setsBankToDefault->execute($bank)));
}
}
@@ -0,0 +1,85 @@
<?php
namespace App\Classes\Modules\Banks\ControllersLogic;
use App\Http\Resources\BankResource;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Banks\Services\FetchesBank;
use App\Classes\Modules\Banks\Standards\Rules\CanUpdateBank;
use App\Classes\Modules\Banks\Services\UpdatesBank;
use App\Classes\Modules\Banks\DataTransferObjects\BankObject;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class UpdateBankLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Update Bank Account',
'message' => 'You have successfully updated the Bank Account'
];
}
/** @var CanUpdateBank */
private $canUpdateBank;
/** @var UpdatesBank */
private $updatesBank;
/** @var FetchesBank */
private $fetchesBank;
/**
* UpdateBankLogic constructor.
* @param CanUpdateBank $canUpdateBank
* @param UpdatesBank $updatesBank
* @param FetchesBank $fetchesBank
*/
public function __construct(
CanUpdateBank $canUpdateBank,
UpdatesBank $updatesBank,
FetchesBank $fetchesBank
)
{
$this->canUpdateBank = $canUpdateBank;
$this->updatesBank = $updatesBank;
$this->fetchesBank = $fetchesBank;
}
/**
* @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
{
$bankObject = new BankObject($request->input('company_id'), $request->input('country_id'),
$request->input('reference'), $request->input('bank_name'), $request->input('holder_name'),
$request->input('account_no'));
$bank = $this->fetchesBank->execute(['id' => $request->route('id')]);
$this->canUpdateBank->passes($bankObject);
$bank_query = $this->updatesBank->execute($bank, $bankObject);
return $this->resourceResponse(new BankResource($bank_query));
}
}
@@ -0,0 +1,136 @@
<?php
namespace App\Classes\Modules\Banks\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
class BankObject implements DataTransferObject
{
/** @var int */
private $company_id;
/** @var int */
private $type;
/** @var string */
private $bank_name;
/** @var string */
private $holder_name;
/** @var string */
private $account_no;
/** @var int */
private $country_id;
/** @var string|null */
private $reference;
/**
* BankObject constructor.
* @param int $company_id
* @param int $type
* @param string $bank_name
* @param string $holder_name
* @param string $account_no
* @param int $country_id
* @param null|string $reference
*/
public function __construct(int $company_id, int $type, string $bank_name, string $holder_name, string $account_no, ?string $bank_branch = null, ?string $swift = null, ?string $snap = null, int $country_id, ?string $reference = null)
{
$this->company_id = $company_id;
$this->type = $type;
$this->bank_name = $bank_name;
$this->holder_name = $holder_name;
$this->account_no = $account_no;
$this->bank_branch = $bank_branch;
$this->swift = $swift;
$this->snap = $snap;
$this->country_id = $country_id;
$this->reference = $reference;
}
/**
* @return int
*/
public function getCompanyId(): int
{
return $this->company_id;
}
/**
* @return int
*/
public function getType(): int
{
return $this->type;
}
/**
* @return string
*/
public function getBankName(): string
{
return $this->bank_name;
}
/**
* @return string
*/
public function getHolderName(): string
{
return $this->holder_name;
}
/**
* @return string
*/
public function getAccountNo(): string
{
return $this->account_no;
}
/**
* @return null|string
*/
public function getBankBranch(): ?string
{
return $this->bank_branch;
}
/**
* @return null|string
*/
public function getSwift(): ?string
{
return $this->swift;
}
/**
* @return null|string
*/
public function getSnap(): ?string
{
return $this->snap;
}
/**
* @return int
*/
public function getCountryId(): int
{
return $this->country_id;
}
/**
* @return null|string
*/
public function getReference(): ?string
{
return $this->reference;
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Banks\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Banks\DataTransferObjects\BankObject;
use App\Models\Bank;
class CreatesBank extends AbstractUpdateRecord
{
/**
* @param BankObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(BankObject $object) {
$model = new Bank();
$model->company_id = $object->getCompanyId();
$model->reference = $object->getReference();
$model->bank_name = $object->getBankName();
$model->holder_name = $object->getHolderName();
$model->account_no = $object->getAccountNo();
$model->bank_branch = $object->getBankBranch();
$model->swift = $object->getSwift();
$model->snap = $object->getSnap();
$model->type = $object->getType();
$model->country_id = $object->getCountryId();
return $this->handler($model);
}
}
@@ -0,0 +1,19 @@
<?php
namespace App\Classes\Modules\Banks\Services;
use App\Classes\General\Eloquent\AbstractDeleteRecord;
use App\Models\Bank;
class DeletesBank extends AbstractDeleteRecord
{
/**
* @param Bank $model
* @return mixed
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Bank $model) {
return $this->handler($model);
}
}
@@ -0,0 +1,34 @@
<?php
namespace App\Classes\Modules\Banks\Services;
use App\Classes\General\Eloquent\AbstractFetchRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\Bank;
class FetchesBank extends AbstractFetchRecord
{
/** @var Bank */
private $repository;
/**
* FetchesBank constructor.
* @param Bank $repository
*/
public function __construct(Bank $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
public function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Banks\Services;
use App\Classes\General\Eloquent\AbstractListRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\Bank;
class ListsBanks extends AbstractListRecord
{
/** @var Bank */
private $repository;
/**
* ListsBank constructor.
* @param Bank $repository
*/
public function __construct(Bank $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\Modules\Banks\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\Bank;
class ResetsBanksDefault extends AbstractUpdateRecord
{
/**
* @param Bank $bank
* @return void
*/
public function execute(Bank $bank)
{
$bank->company->banks()->where('type', $bank->type)->update(['default' => false]);
}
}
@@ -0,0 +1,22 @@
<?php
namespace App\Classes\Modules\Banks\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\Bank;
class SetsBankToDefault extends AbstractUpdateRecord
{
/**
* @param Bank $model
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Bank $model)
{
$model->default = true;
return $this->handler($model);
}
}
@@ -0,0 +1,30 @@
<?php
namespace App\Classes\Modules\Banks\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Banks\DataTransferObjects\BankObject;
use App\Models\Bank;
class UpdatesBank extends AbstractUpdateRecord
{
/**
* @param Bank $model
* @param BankObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Bank $model, BankObject $object)
{
$model->bank_name = $object->getBankName();
$model->holder_name = $object->getHolderName();
$model->account_no = $object->getAccountNo();
$model->bank_branch = $object->getBankBranch();
$model->swift = $object->getSwift();
$model->snap = $object->getSnap();
$model->default = $object->getDefault();
return $this->handler($model);
}
}
@@ -0,0 +1,50 @@
<?php
namespace App\Classes\Modules\Banks\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Banks\Standards\Validators\BankValidation;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyObject;
class CanCreateBank extends AbstractRule
{
/** @var BankValidation */
private $BankValidation;
/**
* CanCreateBank constructor.
* @param BankValidation $BankValidation
*/
public function __construct(BankValidation $BankValidation)
{
$this->BankValidation = $BankValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
return true;
}
/**
* @param CompanyObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return $this->BankValidation->validate($object);
}
/**
* @param CompanyObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,40 @@
<?php
namespace App\Classes\Modules\Banks\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Banks\DataTransferObjects\BankObject;
class CanDeleteBank extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param BankObject $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param BankObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,37 @@
<?php
namespace App\Classes\Modules\Banks\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Banks\Standards\Validators\BankValidation;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyObject;
class CanListBanks extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
return true;
}
/**
* @param CompanyObject $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param CompanyObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,54 @@
<?php
namespace App\Classes\Modules\Banks\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Banks\DataTransferObjects\BankObject;
use App\Classes\Modules\Banks\Standards\Validators\BankValidation;
class CanUpdateBank extends AbstractRule
{
/** @var BankValidation */
private $BankValidation;
/**
* CanUpdateBank constructor.
* @param BankValidation $BankValidation
*/
public function __construct(BankValidation $BankValidation)
{
$this->BankValidation = $BankValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param BankObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return $this->BankValidation->validate($object);
}
/**
* @param BankObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,46 @@
<?php
namespace App\Classes\Modules\Banks\Standards\Validators;
use App\Classes\General\Abstracts\AbstractValidation;
use App\Classes\Modules\Banks\DataTransferObjects\BankObject;
class BankValidation extends AbstractValidation
{
/**
* @param BankObject $object
* @return array
*/
protected function data($object): array
{
return [
'country_id' => $object->getCountryId(),
'company_id' => $object->getCompanyId(),
'bank_name' => $object->getBankName(),
'holder_name' => $object->getHolderName(),
'account_no' => $object->getAccountNo()
];
}
/**
* @return array
*/
protected function rules(): array
{
return [
'country_id' => 'required',
'company_id' => 'required',
'bank_name' => 'required',
'holder_name' => 'required',
'account_no' => 'required'
];
}
/**
* @return array
*/
protected function messages(): array
{
return [];
}
}
@@ -5,6 +5,7 @@ namespace App\Classes\Modules\Companies\ControllersLogic;
use App\Classes\Modules\Companies\Services\UpdatesCompanyStatus;
use App\Classes\Modules\Documents\Services\RejectsDocument;
use App\Classes\Modules\Documents\Standards\Rules\CanApproveDocument;
use App\Classes\Modules\Orders\Services\UpdatesOrdersStatus;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Http\Resources\DocumentResource;
@@ -46,6 +47,9 @@ class ApproveIdentificationDocumentLogic extends AbstractControllerLogic
/** @var UpdatesCompanyStatus */
private $updatesCompanyStatus;
/** @var UpdatesOrdersStatus */
private $updatesOrdersStatus;
/**
* ApproveIdentificationDocumentLogic constructor.
* @param CanApproveDocument $canApproveDocument
@@ -53,14 +57,16 @@ class ApproveIdentificationDocumentLogic extends AbstractControllerLogic
* @param RejectsDocument $rejectsDocument
* @param FetchesDocument $fetchesDocument
* @param UpdatesCompanyStatus $updatesCompanyStatus
* @param UpdatesOrdersStatus $updatesOrdersStatus
*/
public function __construct(CanApproveDocument $canApproveDocument, ApprovesDocument $approvesDocument, RejectsDocument $rejectsDocument, FetchesDocument $fetchesDocument, UpdatesCompanyStatus $updatesCompanyStatus)
public function __construct(CanApproveDocument $canApproveDocument, ApprovesDocument $approvesDocument, RejectsDocument $rejectsDocument, FetchesDocument $fetchesDocument, UpdatesCompanyStatus $updatesCompanyStatus, UpdatesOrdersStatus $updatesOrdersStatus)
{
$this->canApproveDocument = $canApproveDocument;
$this->approvesDocument = $approvesDocument;
$this->rejectsDocument = $rejectsDocument;
$this->fetchesDocument = $fetchesDocument;
$this->updatesCompanyStatus = $updatesCompanyStatus;
$this->updatesOrdersStatus = $updatesOrdersStatus;
}
/**
@@ -84,6 +90,11 @@ class ApproveIdentificationDocumentLogic extends AbstractControllerLogic
$this->updatesCompanyStatus->execute($document->owner, $status === 'approve' ? ApprovalStatus::APPROVED : ApprovalStatus::REJECTED);
if($status === 'approve'){
$orders = $this->updatesOrdersStatus->execute($document->owner, ApprovalStatus::APPROVED);
}
return $this->resourceResponse(new DocumentResource($document));
}
@@ -2,26 +2,18 @@
namespace App\Classes\Modules\Companies\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Companies\Processors\CreateCompanyProcessor;
use App\Classes\Modules\Companies\Processors\CreateCompanyModuleProcessor;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Classes\ValueObjects\Constants\CompanyType;
use App\Http\Resources\CompanyResource;
use App\Models\Company;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateCompanyLogic extends AbstractControllerLogic
{
/**
* CreateCompanyLogic constructor.
* @param CreateCompanyProcessor $createCompanyProcessor
*/
public function __construct(CreateCompanyProcessor $createCompanyProcessor)
{
$this->createCompanyProcessor = $createCompanyProcessor;
}
/**
* @return array
@@ -33,9 +25,23 @@ class CreateCompanyLogic extends AbstractControllerLogic
];
}
/** @var CreateCompanyProcessor */
/** @var CreateCompanyProcessor */
private $createCompanyProcessor;
/** @var CreateCompanyModuleProcessor */
private $createCompanyModuleProcessor;
/**
* CreateCompanyLogic constructor.
* @param CreateCompanyProcessor $createCompanyProcessor
* @param CreateCompanyModuleProcessor $createCompanyModuleProcessor
*/
public function __construct(CreateCompanyProcessor $createCompanyProcessor, CreateCompanyModuleProcessor $createCompanyModuleProcessor)
{
$this->createCompanyProcessor = $createCompanyProcessor;
$this->createCompanyModuleProcessor = $createCompanyModuleProcessor;
}
/**
* @param Request $request
@@ -46,8 +52,12 @@ class CreateCompanyLogic extends AbstractControllerLogic
*/
public function logic(Request $request) : JsonResponse
{
$company = $this->createCompanyProcessor->execute($request, BusinessType::CURRENCY_VENDOR, CompanyType::COMPANY_BUSINESS, ApprovalStatus::APPROVED);
/** @var Company $company */
$company = $this->createCompanyProcessor->execute($request->input('type') === CompanyType::COMPANY_BUSINESS ? $request->input('company_name') : $request->input('name'), $request->input('type'), ApprovalStatus::PENDING_SUBMISSION);
$this->createCompanyModuleProcessor->execute($company , $request->input('business_type'));
return $this->resourceResponse(new CompanyResource($company));
}
}
}
@@ -7,7 +7,6 @@ use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Companies\Standards\Rules\CanFetchCompany;
use App\Http\Resources\CompanyResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -52,7 +51,7 @@ class FetchCompanyLogic extends AbstractControllerLogic
{
$this->canFetchCompany->passes();
$query = $this->fetchesCompany->execute(['id' => $request->route('id'), 'with_bookings' => true]);
$query = $this->fetchesCompany->execute(['id' => $request->route('id')]);
return $this->resourceResponse(new CompanyResource($query));
@@ -53,10 +53,6 @@ class ListCompaniesLogic extends AbstractControllerLogic
{
$this->canListCompanies->passes();
logger("llogic");
logger($request->input('filters'));
$query = $this->listsCompanies->execute($this->listsCompanies->deserializeFilters($request->input('filters')));
return $this->collectionResponse(CompanyResource::collection($query));
@@ -0,0 +1,58 @@
<?php
namespace App\Classes\Modules\Companies\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
use App\Models\CompanyModule;
class CompanyConnectionObject implements DataTransferObject
{
/** @var CompanyModule */
private $invitee;
/** @var string */
private $inviterReference;
/** @var string */
private $inviteeReference;
/**
* CompanyConnectionObject constructor.
* @param CompanyModule $invitee
* @param string $inviterReference
* @param string $inviteeReference
*/
public function __construct(CompanyModule $invitee, string $inviterReference, string $inviteeReference)
{
$this->invitee = $invitee;
$this->inviterReference = $inviterReference;
$this->inviteeReference = $inviteeReference;
}
/**
* @return CompanyModule
*/
public function getInvitee(): CompanyModule
{
return $this->invitee;
}
/**
* @return string
*/
public function getInviterReference(): string
{
return $this->inviterReference;
}
/**
* @return string
*/
public function getInviteeReference(): string
{
return $this->inviteeReference;
}
}
@@ -6,34 +6,74 @@ use App\Classes\General\Interfaces\DataTransferObject;
class CompanyModuleObject implements DataTransferObject
{
/** @var int */
private $companyId;
/** @var int|null */
/** @var string */
private $name;
/** @var string */
private $reference;
/** @var string */
private $unity_hash_id;
/** @var string */
private $unity_signature;
/** @var int */
private $type;
/** @var int|null */
/** @var int */
private $status;
/**
* CompanyObject constructor.
* @param int $companyId
* @param int|null $type
* @param int|null $status
* CompanyModuleObject constructor.
* @param string $name
* @param string $reference
* @param string $unity_hash_id
* @param string $unity_signature
* @param int $type
* @param int $status
*/
public function __construct(int $companyId, int $type, int $status)
public function __construct(string $name, string $reference, string $unity_hash_id, string $unity_signature, int $type, int $status)
{
$this->companyId = $companyId;
$this->name = $name;
$this->reference = $reference;
$this->unity_hash_id = $unity_hash_id;
$this->unity_signature = $unity_signature;
$this->type = $type;
$this->status = $status;
}
/**
* @return int
* @return string
*/
public function getCompanyId(): int
public function getName(): string
{
return $this->companyId;
return $this->name;
}
/**
* @return string
*/
public function getReference(): string
{
return $this->reference;
}
/**
* @return string
*/
public function getUnityHashId(): string
{
return $this->unity_hash_id;
}
/**
* @return string
*/
public function getUnitySignature(): string
{
return $this->unity_signature;
}
/**
@@ -51,4 +91,6 @@ class CompanyModuleObject implements DataTransferObject
{
return $this->status;
}
}
@@ -20,6 +20,9 @@ class CompanyObject implements DataTransferObject
/** @var int|null */
private $status;
/** @var string */
private $unity_hash_id;
/**
* CompanyObject constructor.
* @param string $name
@@ -71,7 +74,4 @@ class CompanyObject implements DataTransferObject
return $this->status;
}
}
}
@@ -2,11 +2,14 @@
namespace App\Classes\Modules\Companies\Processors;
use App\Classes\Modules\Unity\Processors\CreateEntityProcessor;
use App\Classes\Modules\Unity\Processors\CreateEntitySignatureProcessor;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyModuleObject;
use App\Classes\Modules\Companies\Services\CreatesCompanyModule;
use App\Classes\Modules\Companies\Standards\Rules\CanCreateCompanyModule;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Models\CompanyModule;
use Illuminate\Database\Eloquent\Model;
use App\Models\Company;
class CreateCompanyModuleProcessor
@@ -15,27 +18,57 @@ class CreateCompanyModuleProcessor
/** @var CreatesCompanyModule */
private $createsCompanyModule;
/** @var CreateEntityProcessor */
private $createUnityEntityProcessor;
/** @var CanCreateCompanyModule */
private $canCreateCompanyModule;
/** @var CreateEntityProcessor*/
private $createsEntityProcessor;
/** @var CreateEntitySignatureProcessor */
private $createUnityEntitySignatureProcessor;
/**
* CreateCompanyModuleProcessor constructor.
* @param CreatesCompanyModule $createsCompanyModule
* @param CreateEntityProcessor $createUnityEntityProcessor
* @param CanCreateCompanyModule $canCreateCompanyModule
* @param CreateEntityProcessor $createsEntityProcessor
* @param CreateEntitySignatureProcessor $createUnityEntitySignatureProcessor
*/
public function __construct(CreatesCompanyModule $createsCompanyModule)
public function __construct(CreatesCompanyModule $createsCompanyModule, CreateEntityProcessor $createUnityEntityProcessor, CanCreateCompanyModule $canCreateCompanyModule, CreateEntityProcessor $createsEntityProcessor, CreateEntitySignatureProcessor $createUnityEntitySignatureProcessor)
{
$this->createsCompanyModule = $createsCompanyModule;
$this->createUnityEntityProcessor = $createUnityEntityProcessor;
$this->canCreateCompanyModule = $canCreateCompanyModule;
$this->createsEntityProcessor = $createsEntityProcessor;
$this->createUnityEntitySignatureProcessor = $createUnityEntitySignatureProcessor;
}
/**
* @param Company $company
* @param int|null $businessType
* @return Model
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(Company $company): Model
public function execute(Company $company , ?int $businessType = BusinessType::IMPORTER): Model
{
$company_module_object = new CompanyModuleObject(
$company->id,
$company->type,
$company->status,
);
$unityEntity = $this->createUnityEntityProcessor->execute($company->name);
return $this->createsCompanyModule->execute($company_module_object);
$unityEntitySignature = $this->createUnityEntitySignatureProcessor->execute($unityEntity->hash_id);
$company_module_object = new CompanyModuleObject($company->name, $company->reference, $unityEntity->hash_id, $unityEntitySignature->hash_id, $businessType, $company->status);
$this->canCreateCompanyModule->passes($company_module_object);
/** @var CompanyModule $companyModule */
$companyModule = $this->createsCompanyModule->execute($company, $company_module_object);
return $companyModule;
}
}

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