Compare commits

..

582 Commits

Author SHA1 Message Date
ahmedsophyudden b9b79ca65a Shipping Portal - Api to update segment (general, state, postcode) 2022-03-17 01:01:01 +08:00
edmondlang a1a9ab76bb tidy up route and put reports route inside report.php 2022-03-13 22:06:11 +08:00
omair saleh 5b1f4eff0d Merge remote-tracking branch 'origin/development' into development 2022-03-12 17:20:49 +08:00
omair saleh ac41229f8b notifiable 2022-03-12 17:20:32 +08:00
azumiru 2fb12d3a7c container-export-pdf-ui add export button and call api 2022-03-11 20:54:49 +08:00
edmondlang ced07a293e update the createRemarkLogic, so all modules are able to use it
create a RemarkFormComponent
update order page to use this API
clean up old remark API
2022-03-10 19:39:47 +08:00
edmondlang 59ee063186 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-03-10 16:48:13 +08:00
omair saleh 8cd63e93c3 show order search to admin 2022-03-10 14:27:17 +08:00
omair saleh d3bf6b0dee show order search to admin 2022-03-10 14:25:01 +08:00
omair saleh 093ea075f0 show order search to admin 2022-03-10 14:24:14 +08:00
omair saleh 62066a5be5 show order search to admin 2022-03-10 14:22:24 +08:00
omair saleh 88c0ba31d7 show order search to admin 2022-03-10 14:21:31 +08:00
edmondlang 36236144ce update downloadQrPdfController 2022-03-09 20:06:31 +08:00
omair saleh 69e4f83919 Merge remote-tracking branch 'origin/development' into development 2022-03-09 20:02:20 +08:00
omair saleh 6338fdf771 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-03-09 20:01:48 +08:00
edmondlang 83091caa46 create company module remark and ui 2022-03-09 18:51:23 +08:00
edmondlang 99f5dcf8ab update indentation 2022-03-09 18:34:26 +08:00
edmondlang eb6f313c77 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-03-09 18:33:18 +08:00
omair saleh 3b60a90435 fix yd to vt error 2022-03-09 11:14:25 +08:00
omair saleh 3a9fe2b6af fix yd to vt error 2022-03-09 11:10:27 +08:00
omair saleh 603b807225 fix yd to vt error 2022-03-09 11:09:36 +08:00
omair saleh 0ae05f05b6 update qr for yd orders 2022-03-09 11:03:57 +08:00
edmondlang 290e531d12 update delivery-list api filters 2022-03-08 19:17:10 +08:00
edmondlang a44ad3df3a Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-03-08 19:05:46 +08:00
omair saleh 89aa52e9c2 add enter trigger to search containers 2022-03-08 12:27:29 +08:00
omair saleh 072e65c00c fix claim packinglist status 2022-03-08 12:06:59 +08:00
omair saleh 8701620dcf add warehouse remark to qr pdf 2022-03-08 10:12:59 +08:00
ahmedsophyudden e9f86f0603 Shipping Portal - Create filter for pending arrangement, pending delivery, delivered 2022-03-07 16:56:38 +08:00
omair saleh 6d77fe171a fix yd exemption list 2022-03-07 15:36:34 +08:00
omair saleh 073250ce43 fix yd exemption list 2022-03-07 15:36:08 +08:00
edmondlang 07d3b4b7a3 update shipping invoice 2022-03-06 21:19:44 +08:00
edmondlang 3b86a50bed update shipping-invoice 2022-03-06 21:12:09 +08:00
edmondlang 35cf8a20c3 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-03-06 16:08:21 +08:00
Leong Chee Siong a17534ae6d Merge branch 'transaction-invoice' into 'development'
notification

See merge request CIEFWorldwideSdnBhd/shipping-portal!106
2022-03-06 06:46:50 +00:00
glovetleong ab12494ba5 pdf generate 2022-03-06 14:44:49 +08:00
omair saleh b6834ac6f5 fix active customer list 2022-03-06 12:33:49 +08:00
omair saleh 200a954730 fix active customer list 2022-03-06 12:21:51 +08:00
glovetleong 499837b135 Merge branch 'development' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into transaction-invoice 2022-03-06 10:21:45 +08:00
edmondlang 537dbd4564 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-03-06 10:12:42 +08:00
omair saleh a4365e5c33 fix active customer list 2022-03-05 18:06:21 +08:00
omair saleh 98424eacf4 fix active customer list 2022-03-05 18:04:11 +08:00
omair saleh eb905e7176 fix active customer list 2022-03-05 17:59:02 +08:00
omair saleh 7998f6e43f show packing list receive date 2022-03-05 16:51:30 +08:00
omair saleh eb41d7c2ef show packing list receive date 2022-03-05 16:49:19 +08:00
edmondlang fd8f8d6cb4 Update copyright year using php to get current year 2022-03-05 16:47:19 +08:00
edmondlang fafd145bca Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-03-05 16:39:02 +08:00
edmondlang d9a3f42e87 Update copyright year using php to get current year 2022-03-05 16:38:17 +08:00
omair saleh 686ef83f31 group container packing lists by customer 2022-03-05 16:38:12 +08:00
omair saleh 5fab8224c6 group container packing lists by customer 2022-03-05 16:36:03 +08:00
omair saleh 9e95da84c4 group container packing lists by customer 2022-03-05 16:34:41 +08:00
omair saleh a54aefcf9f missing orders 2022-03-05 16:25:20 +08:00
omair saleh d217cf0ef2 missing orders 2022-03-05 16:24:39 +08:00
omair saleh 1978cf017b missing orders 2022-03-05 16:24:04 +08:00
omair saleh ea381e0bf5 missing orders 2022-03-05 16:23:32 +08:00
omair saleh de26957532 missing orders 2022-03-05 16:22:54 +08:00
omair saleh 715d26c9d2 missing orders 2022-03-05 16:18:32 +08:00
omair saleh f1432388d8 missing orders 2022-03-05 16:07:06 +08:00
omair saleh 5ca53c2124 missing orders 2022-03-05 16:02:02 +08:00
omair saleh 48dbe00744 missing orders 2022-03-05 16:00:58 +08:00
omair saleh e2df3af9cd missing orders 2022-03-05 16:00:10 +08:00
omair saleh df0b67d9b9 missing orders 2022-03-05 15:55:35 +08:00
omair saleh a28a5a0c29 missing orders 2022-03-05 15:53:56 +08:00
omair saleh 1560bdfcf8 missing orders 2022-03-05 15:48:47 +08:00
omair saleh 585e4705a4 missing orders 2022-03-05 15:47:41 +08:00
omair saleh 2e41499fd1 missing orders 2022-03-05 15:44:57 +08:00
omair saleh f3688385eb missing orders 2022-03-05 15:44:04 +08:00
omair saleh fdfae861c6 missing orders 2022-03-05 15:38:31 +08:00
omair saleh b16eddf13a missing orders 2022-03-05 15:37:43 +08:00
omair saleh dd78be57fe missing orders 2022-03-05 15:34:19 +08:00
omair saleh 49042f5507 missing orders 2022-03-05 15:29:33 +08:00
omair saleh a97faa0024 missing orders 2022-03-05 15:28:35 +08:00
omair saleh 99d7aeac5f missing orders 2022-03-05 15:26:54 +08:00
omair saleh fe340b1246 missing orders 2022-03-05 15:25:49 +08:00
omair saleh e79206a681 missing orders 2022-03-05 15:25:33 +08:00
omair saleh 1838e46d1b missing orders 2022-03-05 15:23:45 +08:00
omair saleh 6bfbac6494 missing orders 2022-03-05 15:21:34 +08:00
omair saleh 266fd7302b missing orders 2022-03-05 15:20:58 +08:00
omair saleh f7b081eb94 missing orders 2022-03-05 15:20:13 +08:00
omair saleh 388a1024b4 missing orders 2022-03-05 15:19:09 +08:00
omair saleh 899f84aed0 missing orders 2022-03-05 15:18:17 +08:00
omair saleh 4a497dd61b missing orders 2022-03-05 15:17:14 +08:00
edmondlang 02f3686768 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-03-05 14:42:18 +08:00
omair saleh 826840f992 missing orders 2022-03-05 13:51:02 +08:00
omair saleh bd5d9fe520 missing orders 2022-03-05 13:47:52 +08:00
omair saleh 34d4aeed1c missing order 2022-03-05 13:45:02 +08:00
omair saleh 6d5b6a206f missing order 2022-03-05 13:43:23 +08:00
omair saleh c9678b5be3 active customers filter list 2022-03-05 11:27:39 +08:00
omair saleh f4c252546a active customers filter list 2022-03-05 11:10:56 +08:00
omair saleh 24c8f5acbc active customers filter list 2022-03-05 10:14:13 +08:00
omair saleh 5f2d5c36a1 active customers filter list 2022-03-05 10:08:24 +08:00
omair saleh eed71a4696 Merge remote-tracking branch 'origin/development' into development 2022-03-05 09:46:47 +08:00
omair saleh d947caa1e0 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development
# Conflicts:
#	resources/views/pages/warehouse_list.blade.php
2022-03-05 09:46:33 +08:00
omair saleh d3b6e56f76 fix missing order issue 2022-03-04 13:56:09 +08:00
omair saleh 5b692fa7a5 fix claim packing list 2022-03-03 16:49:43 +08:00
omair saleh 1413b619f6 fix claim packing list 2022-03-03 16:48:08 +08:00
omair saleh 46e49b7e5b fix container attach packing list 2022-03-02 21:06:43 +08:00
omair saleh 5201874111 show estimated parcel cbm 2022-03-02 20:43:22 +08:00
omair saleh 7426d6dff2 show estimated parcel cbm 2022-03-02 20:41:51 +08:00
omair saleh ede4231676 show estimated parcel cbm 2022-03-02 20:40:09 +08:00
omair saleh bc1a7c04db show estimated parcel cbm 2022-03-02 20:39:02 +08:00
omair saleh 5356098cc4 show estimated parcel cbm 2022-03-02 20:37:51 +08:00
omair saleh e83206ceab show estimated parcel cbm 2022-03-02 20:35:03 +08:00
omair saleh 251d44912f show estimated parcel cbm 2022-03-02 20:31:05 +08:00
omair saleh 7e4b5d8528 update yiwu warehouse west malaysia notice 2022-03-02 11:20:07 +08:00
omair saleh 9ab0133e00 debug release button 2022-03-01 20:14:40 +08:00
omair saleh 87d7a7572f debug release button 2022-03-01 20:13:25 +08:00
omair saleh 56c71e1500 debug release button 2022-03-01 20:12:04 +08:00
omair saleh d37dfa2aa8 debug release button 2022-03-01 20:11:02 +08:00
omair saleh 2fad8a5994 debug release button 2022-03-01 20:08:59 +08:00
omair saleh f3c7422e6c update announcements 2022-03-01 13:33:34 +08:00
omair saleh 22da7b5efd update announcements 2022-03-01 13:31:07 +08:00
omair saleh 5b7d6b0a2f update announcements 2022-03-01 13:26:30 +08:00
omair saleh 788b632285 update announcements 2022-03-01 13:22:46 +08:00
edmondlang 35d0d9e97b Merge branch 'master' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into development 2022-02-28 13:36:48 +08:00
omair saleh 0ef2c9bf6d fix yd yiwu warehouse selection 2022-02-28 10:51:57 +08:00
omair saleh 34532d0f68 fix detached containers 2022-02-27 15:37:25 +08:00
omair saleh 50a545595f fix detached containers 2022-02-27 15:34:13 +08:00
edmondlang 3462430474 Delivery List, Pending Delivery List
Customer Profile
2022-02-26 16:55:56 +08:00
edmondlang 60a263c508 change warehouse-list page to parcel page
add on hold parcel
2022-02-26 11:20:31 +08:00
edmondlang 5829d9c0a1 Merge branch 'development' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into shipping-updates 2022-02-26 10:43:05 +08:00
edmondlang 9a061d2f37 Warehouse Profile
settings - warehouse - view details-> warehouse details / warehouse profile page
2022-02-26 10:40:45 +08:00
omair saleh 564bac38b9 remove receive date notice, for order form 2022-02-25 13:09:27 +08:00
omair saleh ad2be90c3b exception ley key to use vt gz warehouse 2022-02-25 12:53:26 +08:00
omair saleh 47624ed8f2 fix address approval bug 2022-02-25 12:29:02 +08:00
edmondlang 528cc2f68d Merge branch 'development' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into shipping-updates
# Conflicts:
#	routes/web.php
2022-02-24 21:32:10 +08:00
omair saleh 69ede16fe9 fix address approval bug 2022-02-24 17:39:12 +08:00
omair saleh 6060c7966a fix address approval bug 2022-02-24 17:32:02 +08:00
omair saleh f8f470078c fix address approval bug 2022-02-24 17:28:11 +08:00
omair saleh e5f4068bc0 fix address approval bug 2022-02-24 17:25:40 +08:00
omair saleh e0504c8d79 fix address approval bug 2022-02-24 17:24:25 +08:00
omair saleh 3a8f64719d fix address approval bug 2022-02-24 17:16:51 +08:00
omair saleh 1d86949d54 fix container search 2022-02-24 14:37:41 +08:00
omair saleh 74b363fb12 revert temp hide setting button 2022-02-24 12:45:51 +08:00
omair saleh 1212372515 temp hide setting button 2022-02-24 12:35:35 +08:00
omair saleh e17c4cb014 temp hide setting button 2022-02-24 12:34:44 +08:00
omair saleh e4c32b5ad2 Merge branch 'development' into 'master'
hide all setting until the set up is complete

See merge request CIEFWorldwideSdnBhd/shipping-portal!107
2022-02-24 04:29:15 +00:00
omair saleh 6a86738f61 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development
# Conflicts:
#	app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php
2022-02-24 12:27:41 +08:00
omair saleh 79d8acb50b Merge remote-tracking branch 'origin/development' into development 2022-02-24 12:24:19 +08:00
omair saleh 388973de4c Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development
# Conflicts:
#	app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php
2022-02-24 12:24:06 +08:00
edmondlang 7292ce37e4 update function - update comapny name 2022-02-23 22:44:13 +08:00
omair saleh f2ad76a7ae Merge remote-tracking branch 'origin/development' into development 2022-02-23 21:37:21 +08:00
omair saleh 7d273b5ce6 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development
# Conflicts:
#	app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php
2022-02-23 21:37:02 +08:00
edmondlang 15be2c14ab Merge branch 'development' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-02-23 19:08:16 +08:00
edmondlang a735885bbb cretae update comapny name function 2022-02-23 19:07:45 +08:00
omair saleh 1ed5a3e4a0 Merge remote-tracking branch 'origin/development' into development 2022-02-23 18:56:07 +08:00
omair saleh 816a40d647 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development
# Conflicts:
#	app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php
2022-02-23 18:55:28 +08:00
edmondlang 0316b7c651 update form component file location 2022-02-23 18:44:30 +08:00
edmondlang 91415bd11d Merge branch 'development' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-02-23 18:15:27 +08:00
edmondlang f037352a28 cretae update document reference function 2022-02-23 18:13:57 +08:00
omair saleh 0f508aed3a Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development
# Conflicts:
#	app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php
2022-02-23 18:12:03 +08:00
omair saleh 7d352a90e5 Merge remote-tracking branch 'origin/development' into development 2022-02-23 18:11:19 +08:00
omair saleh 95c37f1e1f Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development
# Conflicts:
#	app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php
2022-02-23 17:34:41 +08:00
edmondlang a84e826c31 Create search function in container page 2022-02-23 17:26:26 +08:00
omair saleh c882450dce fix unclaimed packing lists 2022-02-23 13:57:14 +08:00
omair saleh 6fd8956892 fix unclaimed packing lists 2022-02-23 13:54:31 +08:00
omair saleh adb9a18651 fix unclaimed packing lists 2022-02-23 13:51:17 +08:00
omair saleh c932f2b86f fix unclaimed packing lists 2022-02-23 13:49:48 +08:00
omair saleh 1dc23b088e fix unclaimed packing lists 2022-02-23 13:48:34 +08:00
omair saleh 47704001dd fix unclaimed packing lists 2022-02-23 13:47:18 +08:00
omair saleh d02f395e72 fix unclaimed packing lists 2022-02-23 13:45:42 +08:00
omair saleh bdfccca2c8 fix unclaimed packing lists 2022-02-23 13:42:46 +08:00
omair saleh 97c900447f fix unclaimed packing lists 2022-02-23 13:42:12 +08:00
omair saleh 5db4b715e2 fix unclaimed packing lists 2022-02-23 13:39:16 +08:00
omair saleh 745cfef185 fix unclaimed packing lists 2022-02-23 13:37:19 +08:00
omair saleh 05aa23a645 fix unclaimed packing lists 2022-02-23 13:31:31 +08:00
omair saleh c7330fd051 fix unclaimed packing lists 2022-02-23 13:29:41 +08:00
omair saleh a4bb600a3c fix unclaimed packing lists 2022-02-23 13:29:09 +08:00
omair saleh 2631edc326 fix unclaimed packing lists 2022-02-23 13:28:44 +08:00
omair saleh c1faa710b4 fix unclaimed packing lists 2022-02-23 13:24:08 +08:00
omair saleh ab37914145 fix unclaimed packing lists 2022-02-23 13:20:35 +08:00
omair saleh c49ebe2836 fix unclaimed packing lists 2022-02-23 13:17:27 +08:00
omair saleh 85f67db797 Merge remote-tracking branch 'origin/development' into development 2022-02-23 13:12:53 +08:00
omair saleh 284b21ec51 fix unclaimed packing lists 2022-02-23 13:12:32 +08:00
edmondlang 7146600376 update service configuration form component 2022-02-21 20:53:55 +08:00
edmondlang b5b2ba59af add warehouse charges in settings 2022-02-21 20:34:25 +08:00
edmondlang fa29de775c update bugs 2022-02-21 20:00:09 +08:00
edmondlang 0496851286 update settings add state charges TAB 2022-02-21 16:11:39 +08:00
omair saleh 584fbccb93 fix yd bug 2022-02-21 14:55:58 +08:00
edmondlang 994d7ab4d9 update list postcode component 2022-02-21 14:42:10 +08:00
omair saleh 529cec7864 remove chinese new year announcement 2022-02-21 12:59:53 +08:00
edmondlang 6f30884a8c add page orders table 2022-02-20 16:38:46 +08:00
glovetleong f8a985035e notification 2022-02-18 21:57:25 +08:00
edmondlang ca3ecb0fda Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-02-17 21:50:55 +08:00
omair saleh f5a67f7e97 test vt do 2022-02-17 15:11:27 +08:00
omair saleh 288cced125 test vt do 2022-02-17 15:10:57 +08:00
omair saleh a76ce39830 test vt do 2022-02-17 15:09:40 +08:00
omair saleh 64467ea4be test vt do 2022-02-17 15:07:25 +08:00
edmondlang 09e0565988 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-02-15 21:56:22 +08:00
edmondlang 22ce6b8156 Update admin setting ui icons 2022-02-15 17:04:50 +08:00
edmondlang f810168dbb update postcodes area ui 2022-02-15 16:44:25 +08:00
omair saleh fc0809d9d2 add remark to yd address on release 2022-02-15 14:50:52 +08:00
omair saleh 29d1fb893d add remark to yd address on release 2022-02-15 11:33:10 +08:00
omair saleh f01640d9f2 add remark to yd address on release 2022-02-15 11:31:24 +08:00
omair saleh 753951a1d2 add remark to yd address on release 2022-02-15 11:30:43 +08:00
omair saleh 552b6f0e1e add remark to yd address on release 2022-02-15 11:28:42 +08:00
omair saleh 314575e2b6 add remark to yd address on release 2022-02-15 11:28:10 +08:00
omair saleh 2deea66f0a add remark to yd address on release 2022-02-15 11:25:40 +08:00
edmondlang aab739737c update code merge 2022-02-14 12:22:51 +08:00
edmondlang 595df401c2 update ui 2022-02-14 12:16:42 +08:00
edmondlang b03601cec5 Merge branch 'development' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into null_order_packing_list_ui 2022-02-14 00:09:15 +08:00
edmondlang c040dfe2c3 update null_order_packing_list_ul 2022-02-14 00:08:37 +08:00
edmondlang 0abf617a0d Merge branch 'admin-settings-ui' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into merge-dev-conflict
# Conflicts:
#	app/Classes/Modules/Announcements/DataTransferObjects/AnnouncementObject.php
#	app/Classes/Modules/Segments/ControllersLogic/CreateSegmentLogic.php
#	app/Classes/Modules/Segments/ControllersLogic/DeleteSegmentLogic.php
#	app/Classes/Modules/Segments/DataTransferObjects/SegmentObject.php
#	app/Classes/Modules/Segments/Services/CreatesSegment.php
#	app/Classes/Modules/Segments/Standards/Rules/CanCreateSegment.php
#	app/Classes/Modules/Segments/Standards/Rules/CanDeleteSegment.php
#	app/Classes/Modules/Segments/Standards/Validators/SegmentValidation.php
#	app/Http/Controllers/Announcements/AssignAnnouncementToSegmentController.php
#	app/Http/Controllers/Announcements/RemoveSegmentFromAnnouncementController.php
#	app/Http/Controllers/Segments/DeleteSegmentController.php
#	routes/announcement.php
#	routes/segment.php
#	routes/web.php
2022-02-12 20:16:33 +08:00
edmondlang ffe39f40ff Merge branch 'development' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into merge-dev-conflict 2022-02-12 20:06:27 +08:00
omair saleh 6f547b0a2f add remark to yd address on release 2022-02-12 19:53:01 +08:00
Leong Chee Siong 06785efe9b Merge branch 'transaction-invoice' into 'development'
Transaction invoice

See merge request CIEFWorldwideSdnBhd/shipping-portal!105
2022-02-12 04:00:37 +00:00
glovetleong 556c9352c8 shipping invoice 2022-02-12 11:35:12 +08:00
glovetleong d97357f33a Merge branch 'development' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into transaction-invoice 2022-02-11 14:38:57 +08:00
omair saleh 2691d7df33 fix $ is not a function bug 2022-02-10 11:26:55 +08:00
omair saleh 9df9e5bd7c fix $ is not a function bug 2022-02-10 11:13:58 +08:00
edmondlang 05b1aedda5 Merge branch 'admin-settings-ui' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development
# Conflicts:
#	app/Classes/Modules/Announcements/DataTransferObjects/AnnouncementObject.php
#	app/Classes/Modules/Segments/ControllersLogic/CreateSegmentLogic.php
#	app/Classes/Modules/Segments/ControllersLogic/DeleteSegmentLogic.php
#	app/Classes/Modules/Segments/DataTransferObjects/SegmentObject.php
#	app/Classes/Modules/Segments/Services/CreatesSegment.php
#	app/Classes/Modules/Segments/Standards/Rules/CanCreateSegment.php
#	app/Classes/Modules/Segments/Standards/Rules/CanDeleteSegment.php
#	app/Classes/Modules/Segments/Standards/Validators/SegmentValidation.php
#	app/Http/Controllers/Announcements/AssignAnnouncementToSegmentController.php
#	app/Http/Controllers/Announcements/ListAnnouncementsController.php
#	app/Http/Controllers/Announcements/RemoveSegmentFromAnnouncementController.php
#	app/Http/Controllers/Announcements/UpdateAnnouncementController.php
#	app/Http/Controllers/Segments/CreateSegmentController.php
#	app/Http/Controllers/Segments/DeleteSegmentController.php
#	routes/announcement.php
#	routes/api.php
#	routes/segment.php
#	routes/web.php
2022-02-09 21:09:17 +08:00
edmondlang 7ece556475 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development
# Conflicts:
#	app/Classes/Modules/Orders/Processors/ApproveChangeOrderAddressProcessor.php
#	app/Classes/Modules/Orders/Processors/UpdateDoFromYDPortalProcessor.php
#	app/Classes/Modules/PackingLists/ControllersLogic/UpdatePackingListStatusLogic.php
#	app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php
#	resources/assets/vue/components/containers/elements/ContainerComponent.vue
#	routes/web.php
2022-02-09 21:00:13 +08:00
edmondlang 919a48eb9a Merge branch 'development' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-02-09 19:30:17 +08:00
omair saleh 495574e60d Merge remote-tracking branch 'origin/development' into development 2022-02-09 19:29:06 +08:00
omair saleh c17c29ad06 add owner id filter 2022-02-09 19:28:50 +08:00
omair saleh 4c8d363e25 add owner id filter 2022-02-09 19:27:59 +08:00
omair saleh f5df10297e add yd reschedule container logic 2022-02-09 19:07:06 +08:00
Leong Chee Siong 9245793ebe Merge branch 'null_order_packing_list' into 'development'
bug

See merge request CIEFWorldwideSdnBhd/shipping-portal!104
2022-02-08 14:59:13 +00:00
edmondlang 5547e80993 Merge branch 'null_order_packing_list' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-02-08 22:59:02 +08:00
glovetleong 658a669a4d bug 2022-02-08 22:52:12 +08:00
Leong Chee Siong d6faaecb35 Merge branch 'null_order_packing_list' into 'development'
bug

See merge request CIEFWorldwideSdnBhd/shipping-portal!103
2022-02-08 14:16:32 +00:00
glovetleong fdc6a4adc1 bug 2022-02-08 22:15:18 +08:00
glovetleong 3dbcf81cc3 pull 2022-02-08 18:05:01 +08:00
omair saleh b3bf814d25 add yd reschedule container logic 2022-02-06 12:08:11 +08:00
omair saleh d489c0091f add yd reschedule container logic 2022-02-06 12:01:09 +08:00
omair saleh 46699784da fix yd tracking api json line break bug 2022-02-06 11:30:56 +08:00
omair saleh 1538994cc5 update chinese new year holiday announcement 2022-01-28 18:18:08 +08:00
omair saleh a5cb002b4e update chinese new year holiday announcement 2022-01-28 18:17:13 +08:00
omair saleh 7d23f86c0d update chinese new year holiday announcement 2022-01-28 18:08:40 +08:00
omair saleh 999d2f535d add over weight cbm to yd 2022-01-28 12:47:17 +08:00
omair saleh fcdf4e32d7 add over weight cbm to yd 2022-01-28 12:43:57 +08:00
omair saleh 96dd0ec72a add over weight cbm to yd 2022-01-28 12:40:20 +08:00
omair saleh 1b333e1061 add over weight cbm to yd 2022-01-28 12:38:22 +08:00
omair saleh 18a2ac1fd7 add over weight cbm to yd 2022-01-28 12:35:49 +08:00
omair saleh 52377d6ecb add over weight cbm to yd 2022-01-28 12:32:20 +08:00
omair saleh 2b956f4cfe add over weight cbm to yd 2022-01-28 12:26:05 +08:00
omair saleh e84995bcc7 add over weight cbm to yd 2022-01-28 12:25:51 +08:00
omair saleh 97bda44d61 add over weight cbm to yd 2022-01-28 12:24:10 +08:00
omair saleh fc2fe2c712 add over weight cbm to yd 2022-01-28 12:13:25 +08:00
omair saleh 983d7a5092 add over weight cbm to yd 2022-01-28 12:09:20 +08:00
omair saleh df1112f86f add over weight cbm to yd 2022-01-28 12:06:16 +08:00
omair saleh 1bfc44c1e0 add over weight cbm to yd 2022-01-28 12:05:22 +08:00
omair saleh f75d2235a2 add over weight cbm to yd 2022-01-28 12:03:20 +08:00
omair saleh 31ce575f5f add over weight cbm to yd 2022-01-28 11:57:51 +08:00
omair saleh cd6d86fb4b add over weight cbm to yd 2022-01-28 11:57:27 +08:00
omair saleh 7f7101cce5 add over weight cbm to yd 2022-01-28 11:37:54 +08:00
omair saleh a892656725 fix yd delivery address update api 2022-01-27 16:06:59 +08:00
omair saleh 86cc7faf30 fix yd delivery address update api 2022-01-27 16:03:14 +08:00
omair saleh c2ed6ce35e fix yd delivery address update api 2022-01-27 15:30:43 +08:00
omair saleh 579bcbb17f fix yd delivery address update api 2022-01-27 15:18:30 +08:00
omair saleh 4d4d9165ce fix yd delivery address update api 2022-01-27 15:16:10 +08:00
omair saleh bfcc3e1aae fix yd delivery address update api 2022-01-27 15:09:12 +08:00
omair saleh 199a18e8dd fix yd delivery address update api 2022-01-27 15:08:30 +08:00
omair saleh 33277d080a fix yd delivery address update api 2022-01-27 15:08:04 +08:00
omair saleh 5c86e7fda0 fix yd delivery address update api 2022-01-27 13:32:19 +08:00
omair saleh efdc235502 fix yd delivery address update api 2022-01-27 13:30:25 +08:00
omair saleh c89510dda7 fix yd delivery address update api 2022-01-27 13:28:05 +08:00
omair saleh a6ef50d350 fix yd delivery address update api 2022-01-27 13:23:56 +08:00
omair saleh e7164e903d fix yd delivery address update api 2022-01-27 13:21:20 +08:00
omair saleh 3eaeccc8d3 fix yd delivery address update api 2022-01-27 13:19:55 +08:00
omair saleh 8e4a6b3911 fix yd delivery address update api 2022-01-27 13:12:12 +08:00
omair saleh f9b657ab43 fix yd delivery address update api 2022-01-27 13:10:00 +08:00
omair saleh ada8117bd1 fix yd delivery address update api 2022-01-27 13:08:57 +08:00
omair saleh 402556d51b fix yd delivery address update api 2022-01-27 13:01:25 +08:00
omair saleh a60ab688da fix yd delivery address update api 2022-01-27 12:55:16 +08:00
omair saleh 5d9a08ea0b fix overlapping schedules for vt and yd 2022-01-27 12:48:55 +08:00
omair saleh e4ef885553 update order address in yd 2022-01-27 12:27:14 +08:00
omair saleh bdece13293 Merge branch 'customer_latest_order_date_export_master' into 'master'
customer export

See merge request CIEFWorldwideSdnBhd/shipping-portal!98
2022-01-27 03:50:45 +00:00
omair saleh e3cfb002a5 Merge branch 'master' into 'customer_latest_order_date_export_master'
# Conflicts:
#   app/Http/Controllers/Exports/ExportCustomersToExcelController.php
#   routes/web.php
2022-01-27 03:50:27 +00:00
omair saleh f5bace1c3b Merge branch 'null_order_packing_list' into 'development'
Null order packing list

See merge request CIEFWorldwideSdnBhd/shipping-portal!102
2022-01-27 03:48:30 +00:00
glovetleong 642e1b2d5a status 2022-01-26 17:44:36 +08:00
glovetleong d2321a3347 out 2022-01-26 17:33:58 +08:00
glovetleong 5cf7511c31 Merge branch 'development' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into null_order_packing_list 2022-01-26 17:33:15 +08:00
glovetleong 0a8109ae9e null order packing list, assign packing list 2022-01-26 17:32:14 +08:00
omair saleh 36289a3694 minor clean up 2022-01-26 13:44:38 +08:00
omair saleh 46b079462a confirm yd orders for release in china 2022-01-25 12:44:51 +08:00
omair saleh 3c83f91a27 confirm yd orders for release in china 2022-01-25 12:29:58 +08:00
omair saleh 0a51074064 confirm yd orders for release in china 2022-01-25 12:15:26 +08:00
omair saleh bd5e89e832 confirm yd orders for release in china 2022-01-25 12:11:33 +08:00
omair saleh 763cc2d38c add vue versions for cache issues 2022-01-21 19:23:15 +08:00
omair saleh a36adc7ca5 show warehouse reference to admin 2022-01-21 19:09:02 +08:00
omair saleh 950b3d168a show warehouse reference to admin 2022-01-21 19:07:11 +08:00
omair saleh a35cf282f6 show warehouse reference to admin 2022-01-21 19:06:23 +08:00
omair saleh 39408e08ca show warehouse reference to admin 2022-01-21 19:03:49 +08:00
omair saleh e472260db1 update replica packages logic and over weight price announcement 2022-01-21 17:09:15 +08:00
omair saleh 2428fac309 update replica packages logic and over weight price announcement 2022-01-21 17:08:16 +08:00
omair saleh aa681ecd93 update replica packages logic and over weight price announcement 2022-01-21 17:06:41 +08:00
omair saleh 611adf96e7 update replica packages logic and over weight price announcement 2022-01-21 16:46:27 +08:00
omair saleh d4f1184779 update replica packages logic and over weight price announcement 2022-01-21 16:42:42 +08:00
omair saleh 45acd797da update replica packages logic and over weight price announcement 2022-01-21 16:31:13 +08:00
omair saleh 4b411ddaf4 update replica packages logic and over weight price announcement 2022-01-21 16:29:15 +08:00
omair saleh c13d2ce219 update replica packages logic and over weight price announcement 2022-01-21 16:28:30 +08:00
omair saleh 412f4cc4b6 update replica packages logic and over weight price announcement 2022-01-21 16:26:15 +08:00
omair saleh 04650debbb update replica packages logic and over weight price announcement 2022-01-21 16:24:54 +08:00
omair saleh 3436ed37a1 update replica packages logic and over weight price announcement 2022-01-21 16:22:35 +08:00
omair saleh 980dd22c4b update replica packages logic and over weight price announcement 2022-01-21 16:21:55 +08:00
omair saleh 7cc43bcdd9 update replica packages logic and over weight price announcement 2022-01-21 16:20:27 +08:00
omair saleh 8487c6adf3 update replica packages logic and over weight price announcement 2022-01-21 16:00:53 +08:00
omair saleh ca5879cab0 update replica packages logic and over weight price announcement 2022-01-21 16:00:38 +08:00
omair saleh 2bb8adf175 update replica packages logic and over weight price announcement 2022-01-21 15:59:52 +08:00
omair saleh d0a873e065 update replica packages logic and over weight price announcement 2022-01-21 14:39:46 +08:00
omair saleh e6eb05739c update replica packages logic and over weight price announcement 2022-01-21 14:25:44 +08:00
omair saleh 5c4fbe2c52 fix release and hold button for packing lists 2022-01-20 11:16:52 +08:00
omair saleh 1854ca24de fix yd order number bug 2022-01-19 13:29:26 +08:00
omair saleh d93e6ea25e improve loading speed for container page 2022-01-18 15:42:24 +08:00
omair saleh 5c780ae0f9 improve loading speed for container page 2022-01-18 15:40:46 +08:00
omair saleh 5c374e2e19 improve loading speed for container page 2022-01-18 15:39:14 +08:00
edmondlang b6ed451b54 update route for warehouse details 2022-01-15 14:46:23 +08:00
edmondlang 74ede9e3dd shipping updates 2022-01-15 14:40:48 +08:00
omair saleh 438f7fdff5 fix yd fetch 2022-01-14 15:30:05 +08:00
omair saleh d6647b488f fix yd fetch 2022-01-14 15:23:00 +08:00
omair saleh 3fb7bc93d7 fix yd fetch 2022-01-14 15:17:00 +08:00
omair saleh f97fc04a2b fix yd fetch 2022-01-14 15:12:21 +08:00
omair saleh 77690cb607 fix yd fetch 2022-01-14 15:08:50 +08:00
omair saleh f876c59a0d fix yd fetch 2022-01-14 15:07:00 +08:00
omair saleh c5d5195d2d fix yd fetch 2022-01-14 15:05:36 +08:00
Leong Chee Siong 7ba48b07d1 Merge branch 'container-packing-list-export' into 'development'
export packing list

See merge request CIEFWorldwideSdnBhd/shipping-portal!101
2022-01-14 06:36:38 +00:00
glovetleong 96131c5b33 export packing list 2022-01-14 14:03:40 +08:00
edmondlang 3ae4b019ce update text-color for days ago in container page 2022-01-12 23:55:05 +08:00
edmondlang 2558e8f4f2 Revert "update text-color for days ago in container page"
This reverts commit fdec05ca45.
2022-01-12 23:11:42 +08:00
edmondlang fdec05ca45 update text-color for days ago in container page 2022-01-12 22:53:58 +08:00
edmondlang 9fe86c52bd update containers page add days ago 2022-01-12 22:26:28 +08:00
omair saleh ea34c74f6d fix monthly report 2022-01-11 19:46:18 +08:00
omair saleh 3a69ce6972 fix monthly report 2022-01-11 19:43:54 +08:00
omair saleh 83fc73acec fix monthly report 2022-01-11 19:42:13 +08:00
omair saleh e8613bd6d9 fix monthly report 2022-01-11 19:39:43 +08:00
omair saleh 3e4f627cbe fix monthly report 2022-01-11 19:37:05 +08:00
omair saleh a870d259f9 fix monthly report 2022-01-11 19:30:22 +08:00
omair saleh ed0db2e372 fix monthly report 2022-01-11 19:28:20 +08:00
omair saleh 80359cc23b fix monthly report 2022-01-11 19:26:56 +08:00
omair saleh 67867220ed fix monthly report 2022-01-11 19:26:16 +08:00
omair saleh 35206ca249 fix monthly report 2022-01-11 19:22:39 +08:00
omair saleh 394eadf6a2 remove the exempted customer list from yd warehouse 2022-01-11 18:03:43 +08:00
omair saleh 440271bc27 activate yd warehouses as default 2022-01-11 12:56:16 +08:00
omair saleh 7769a27a73 activate yd warehouses as default 2022-01-11 12:56:00 +08:00
omair saleh a28ad55508 activate yd warehouses as default 2022-01-11 12:55:05 +08:00
omair saleh 845873354f activate yd warehouses as default 2022-01-11 12:47:13 +08:00
omair saleh b065881715 activate yd warehouses as default 2022-01-11 00:55:26 +08:00
omair saleh fb5c5ad890 add yd yiwu warehouse seeder 2022-01-10 20:54:47 +08:00
omair saleh 1e37de379d update api routes 2022-01-10 15:52:51 +08:00
omair saleh be2b9d8759 update api routes 2022-01-10 15:51:20 +08:00
omair saleh aaf68b6368 fix monthly report 2022-01-08 11:01:32 +08:00
omair saleh c0577128ae fix monthly report 2022-01-08 10:53:12 +08:00
omair saleh 6a91da7b69 fix approve address change bug when doesn't exist on vt portal 2022-01-08 10:51:40 +08:00
omair saleh d6eda8a11d fix approve address change bug when doesn't exist on vt portal 2022-01-08 10:50:12 +08:00
omair saleh 5dec999cbf fix on hold and release status for packing list 2022-01-07 15:17:48 +08:00
omair saleh 99060ffa51 add new customer to yd warehouse list 2022-01-06 22:39:11 +08:00
omair saleh 73fdc2c0f4 add yiwu warehouse announcement 2022-01-06 11:28:06 +08:00
omair saleh 52038cb365 add yiwu warehouse announcement 2022-01-06 11:22:19 +08:00
omair saleh bb2f75d837 add yiwu warehouse announcement 2022-01-06 11:18:37 +08:00
Leong Chee Siong b94b87c1b7 Merge branch 'yd_sync_update' into 'development'
Yd sync update

See merge request CIEFWorldwideSdnBhd/shipping-portal!100
2022-01-05 01:17:25 +00:00
omair saleh 0aa1979611 fix yd fetch data 2022-01-04 21:32:16 +08:00
omair saleh 9e872dfb35 fix yd fetch data 2022-01-04 21:25:03 +08:00
omair saleh ff035c1f70 fix yd fetch data 2022-01-04 21:24:30 +08:00
omair saleh 8408add279 fix yd fetch data 2022-01-04 21:10:07 +08:00
omair saleh 47d6849dfa fix yd fetch data 2022-01-04 21:08:56 +08:00
omair saleh 56559d3daa fix yd fetch data 2022-01-04 21:08:45 +08:00
omair saleh bae61caae1 fix yd fetch data 2022-01-04 21:08:21 +08:00
omair saleh af07299bcf fix yd fetch data 2022-01-04 21:07:25 +08:00
omair saleh 3e26c7e8ef fix yd fetch data 2022-01-04 21:03:54 +08:00
omair saleh bac81b57f4 fix yd fetch data 2022-01-04 20:56:01 +08:00
omair saleh 1d64dc9984 fix yd fetch data 2022-01-04 20:53:49 +08:00
omair saleh bbadaa53ba fix yd fetch data 2022-01-04 20:53:01 +08:00
omair saleh e4f5210e83 fix yd fetch data 2022-01-04 20:52:26 +08:00
omair saleh 078e83477e fix yd fetch data 2022-01-04 20:50:56 +08:00
omair saleh ce6e6be2bf fix yd fetch data 2022-01-04 20:50:04 +08:00
omair saleh f608bb54f0 fix yd fetch data 2022-01-04 20:47:53 +08:00
omair saleh bb210f8583 fix yd fetch data 2022-01-04 20:46:17 +08:00
omair saleh d4016e869b fix yd fetch data 2022-01-04 20:45:20 +08:00
omair saleh e0d743b5a0 fix yd fetch data 2022-01-04 20:42:07 +08:00
omair saleh 8052ae3a11 fix yd fetch data 2022-01-04 20:41:31 +08:00
omair saleh 6a381446bc fix yd fetch data 2022-01-04 20:40:17 +08:00
omair saleh 1dbade82a7 fix yd fetch data 2022-01-04 20:39:02 +08:00
omair saleh e70d804c32 fix yd fetch data 2022-01-04 20:38:02 +08:00
omair saleh 39391990af fix yd fetch data 2022-01-04 20:37:19 +08:00
omair saleh b96dad37f5 fix yd fetch data 2022-01-04 20:26:34 +08:00
glovetleong 012904c522 yd sync update order address 2022-01-04 20:26:27 +08:00
omair saleh 90420cebe7 fix yd fetch data 2022-01-04 20:25:25 +08:00
omair saleh 04bd67573c fix yd fetch data 2022-01-04 20:23:47 +08:00
omair saleh f69c99b070 fix yd fetch data 2022-01-04 20:16:20 +08:00
omair saleh fdf4f21155 fix yd fetch data 2022-01-04 20:13:15 +08:00
omair saleh 95ab15df21 fix yd fetch data 2022-01-04 20:12:21 +08:00
omair saleh 2d885776dd fix yd fetch data 2022-01-04 20:10:55 +08:00
omair saleh 1f02b7247d fix yd fetch data 2022-01-04 20:08:09 +08:00
omair saleh ef3460f796 fix yd fetch data 2022-01-04 20:06:44 +08:00
omair saleh 8825e49b68 fix yd fetch data 2022-01-04 20:05:28 +08:00
omair saleh 7c17edc5fd fix yd fetch data 2022-01-04 20:03:12 +08:00
omair saleh 6423aa6345 fix yd fetch data 2022-01-04 20:01:34 +08:00
omair saleh d22e3884fa fix yd fetch data 2022-01-04 20:00:35 +08:00
omair saleh 263e122dea fix yd fetch data 2022-01-04 19:58:55 +08:00
omair saleh 6ecee81112 fix yd fetch data 2022-01-04 19:46:44 +08:00
omair saleh cee6ca4eee fix yd fetch data 2022-01-04 19:45:14 +08:00
omair saleh e2766c66a1 fix yd fetch data 2022-01-04 19:42:35 +08:00
glovetleong 6c94e39da8 Merge branch 'master' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal
# Conflicts:
#	app/Http/Controllers/Exports/ExportCustomersToExcelController.php
#	routes/web.php
2022-01-03 22:21:37 +08:00
omair saleh c7b6622a62 fix yd fetch data 2022-01-03 16:59:56 +08:00
omair saleh efe3a97f3e fix yd fetch data 2022-01-03 16:58:44 +08:00
omair saleh 2d167ef47e fix yd fetch data 2022-01-03 16:56:05 +08:00
omair saleh e504b31b15 fix yd fetch data 2022-01-03 16:52:51 +08:00
omair saleh 0469a725ed fix yd fetch data 2022-01-03 16:51:30 +08:00
omair saleh 68075186d4 fix yd fetch data 2022-01-03 16:50:25 +08:00
omair saleh 3897821cb7 fix yd fetch data 2022-01-03 16:47:00 +08:00
omair saleh 07d70af213 fix yd fetch data 2022-01-03 16:45:35 +08:00
omair saleh 6b491cc2e5 fix yd fetch data 2022-01-03 16:16:02 +08:00
omair saleh 53809af105 fix yd fetch data 2022-01-03 16:12:55 +08:00
omair saleh 1efbca15ec fix total cbm order component 2022-01-03 16:11:35 +08:00
omair saleh a331c659a8 debug yd orders 2022-01-03 16:08:47 +08:00
omair saleh 4a1d021b85 debug missing packages 2022-01-03 16:06:08 +08:00
omair saleh 87e155334b debug missing packages 2022-01-03 16:02:00 +08:00
omair saleh 4d594bb084 debug missing packages 2022-01-03 15:58:29 +08:00
omair saleh 5fdae14e01 debug missing packages 2022-01-03 15:57:12 +08:00
omair saleh 7b3793e6d7 debug missing packages 2022-01-03 15:54:11 +08:00
omair saleh d281017c24 fix order status count 2022-01-03 15:53:22 +08:00
omair saleh d08ded395a fix order status count 2022-01-03 15:50:17 +08:00
omair saleh 40c5692276 fix order status count 2022-01-03 15:40:38 +08:00
omair saleh 18554e9924 fix order status count 2022-01-03 15:19:15 +08:00
omair saleh 8a8fb3e03e update schedule for fetching data from api 2022-01-03 10:37:34 +08:00
omair saleh 396f9370ae set users list allowed to see original packing measurements 2022-01-03 10:13:14 +08:00
omair saleh 919cbc463b set users list allowed to see original packing measurements 2022-01-03 10:12:29 +08:00
omair saleh 78e223844f fix vt container transport bug 2022-01-03 09:46:04 +08:00
omair saleh dcfbbd63a7 fix vt container transport bug 2022-01-03 09:45:39 +08:00
omair saleh 1fc9330d98 fix vt container transport bug 2022-01-03 09:43:32 +08:00
omair saleh 9ff98196f0 fix package component bug 2022-01-03 09:32:45 +08:00
omair saleh d2fe2bfef4 adjust column size for order remark input 2022-01-03 09:28:03 +08:00
omair saleh ff0713f005 Merge branch 'development' into 'master'
Development

See merge request CIEFWorldwideSdnBhd/shipping-portal!99
2022-01-03 01:22:12 +00:00
omair saleh 7bd24b6547 clean up before production 2022-01-03 08:36:41 +08:00
omair saleh 33086eb1a6 sort customers orders by latest 2021-12-31 17:04:00 +08:00
omair saleh 82517e3cb3 sort customers orders by latest 2021-12-31 17:02:49 +08:00
omair saleh 41d9769d04 fix package component before loading to container 2021-12-29 03:30:42 +08:00
omair saleh 906623bad3 fix package component before loading to container 2021-12-29 03:29:16 +08:00
omair saleh 898205ec9d fix package component before loading to container 2021-12-29 03:28:17 +08:00
omair saleh 7b791abf80 YD curl request 2021-12-29 03:22:08 +08:00
omair saleh 27f2367e88 YD curl request 2021-12-29 03:19:28 +08:00
omair saleh 6874d09ced YD curl request 2021-12-29 03:17:44 +08:00
omair saleh eeaba20fb0 YD curl request 2021-12-29 03:16:06 +08:00
omair saleh 5599c1ba71 YD curl request 2021-12-29 02:54:49 +08:00
omair saleh 0220f876c4 YD curl request 2021-12-29 01:23:35 +08:00
omair saleh 1f0f5e8afd YD curl request 2021-12-29 01:22:47 +08:00
omair saleh 1426d6f13c YD curl request 2021-12-29 01:21:19 +08:00
omair saleh 187411237d YD curl request 2021-12-29 01:20:18 +08:00
omair saleh dac4470f72 YD curl request 2021-12-29 01:20:04 +08:00
omair saleh 65b49d4d61 YD curl request 2021-12-29 01:19:17 +08:00
omair saleh bfbe07dc8e YD curl request 2021-12-29 01:18:17 +08:00
omair saleh 4ef90f7cf2 YD curl request 2021-12-29 01:15:49 +08:00
omair saleh c07aa6c1f1 YD curl request 2021-12-29 01:13:51 +08:00
omair saleh 28ad88900e YD curl request 2021-12-29 01:05:23 +08:00
omair saleh b707717418 YD curl request 2021-12-29 01:02:11 +08:00
omair saleh 6b4d2736c5 YD curl request 2021-12-29 00:53:04 +08:00
omair saleh 9ebacae701 YD curl request 2021-12-29 00:50:32 +08:00
omair saleh e18f49b5b7 YD curl request 2021-12-29 00:48:00 +08:00
omair saleh 81a7d79e0c YD curl request 2021-12-29 00:47:07 +08:00
omair saleh c698466b3d YD curl request 2021-12-29 00:46:52 +08:00
omair saleh 8e3be2747f YD curl request 2021-12-29 00:45:44 +08:00
omair saleh 8dafa7d678 YD curl request 2021-12-29 00:44:11 +08:00
omair saleh f36bb9d090 YD curl request 2021-12-29 00:43:20 +08:00
omair saleh 87c60dc488 YD curl request 2021-12-29 00:29:38 +08:00
omair saleh e11e0307af add packing list replica 2021-12-28 22:03:11 +08:00
omair saleh 78fcb6c111 add packing list replica 2021-12-28 21:50:30 +08:00
omair saleh f0bc306ebd Merge remote-tracking branch 'origin/development' into development 2021-12-28 21:45:50 +08:00
omair saleh 0671e24916 add packing list replica 2021-12-28 21:45:16 +08:00
glovetleong a328be683e customer export 2021-12-28 17:48:50 +08:00
Leong Chee Siong 4854e9b095 Merge branch 'customer_latest_order_date_export' into 'development'
Customer latest order date export

See merge request CIEFWorldwideSdnBhd/shipping-portal!97
2021-12-28 09:37:07 +00:00
glovetleong 64a4e4b45f customer order latest date export 2021-12-28 17:35:16 +08:00
omair saleh 9774f4b823 add packing list replica 2021-12-28 15:42:42 +08:00
glovetleong 2365ad10cf Merge branch 'development' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into development
# Conflicts:
#	app/Classes/Modules/Orders/Services/FetchesDataFromYDPortal.php
#	app/Classes/Modules/PackingLists/Processors/FetchOrderListsFromYdPortalProcessor.php
#	app/Console/Commands/CurlYdOrderListCommand.php
2021-12-28 15:31:01 +08:00
omair saleh 47eb9262ad add packing list replica 2021-12-28 01:19:26 +08:00
omair saleh 9f6d0fbc79 Merge branch 'development'
# Conflicts:
#	resources/views/pages/orders/index.blade.php
2021-12-21 19:36:46 +08:00
omair saleh 22a2d7d7a1 sync vt do with shipping portal 2021-12-21 19:10:03 +08:00
omair saleh 5339799312 Merge remote-tracking branch 'origin/development' into development 2021-12-20 14:48:07 +08:00
omair saleh 565fd5eae3 fix create address logic 2021-12-20 14:47:52 +08:00
omair saleh 1156f437df Merge branch 'order-search-function' into 'development'
Order search function

See merge request CIEFWorldwideSdnBhd/shipping-portal!94
2021-12-19 05:46:09 +00:00
omair saleh c5ffe372cc Merge branch 'yb-job' into 'development'
yd-job connect

See merge request CIEFWorldwideSdnBhd/shipping-portal!91
2021-12-19 05:19:18 +00:00
omair saleh 12a51722b3 Merge branch 'announcement-backend' into 'development'
Announcement backend

See merge request CIEFWorldwideSdnBhd/shipping-portal!92
2021-12-19 05:19:09 +00:00
omair saleh 82f45007d1 update chinese new year annoucement 2021-12-17 21:54:04 +08:00
omair saleh 048cd52fc8 fix warehouse name 2021-12-17 15:07:01 +08:00
omair saleh 4a7c4f51a5 debug address contact 2021-12-17 12:23:09 +08:00
omair saleh 3f9874a0bd debug address contact 2021-12-17 12:21:44 +08:00
omair saleh c972bc87a3 debug address contact 2021-12-17 12:19:43 +08:00
omair saleh b057cd91c3 debug address contact 2021-12-17 12:17:53 +08:00
omair saleh d29ead2144 debug address contact 2021-12-17 12:16:48 +08:00
omair saleh 71eb8db3f3 debug address contact 2021-12-17 12:15:23 +08:00
omair saleh 7b1df81649 debug address contact 2021-12-17 12:14:17 +08:00
omair saleh ce1a2556b7 debug address contact 2021-12-17 12:12:34 +08:00
omair saleh bec9f121ab add packing list relationship in packing list model 2021-12-17 12:02:01 +08:00
omair saleh 1d479f6f79 Merge branch 'copy_packinglists' into 'development'
Duplicate packing list for admin CIEF reference

See merge request CIEFWorldwideSdnBhd/shipping-portal!89
2021-12-17 02:26:38 +00:00
omair saleh 550f6c6b77 Merge branch 'order-contact-remark' into 'development'
Order contact remark

See merge request CIEFWorldwideSdnBhd/shipping-portal!88
2021-12-17 02:25:17 +00:00
omair saleh 5caac091aa remove refresh orders button 2021-12-17 09:57:39 +08:00
glovetleong 1d3ab4ab2a yd-job connect 2021-12-16 21:48:59 +08:00
glovetleong 5e11b8ebdf job connect YD portal 2021-12-16 21:46:33 +08:00
edmondlang 4a158b8dac update order profile section - only super admin can edit the order reference number 2021-12-16 18:17:27 +08:00
edmondlang 280f5f4974 update order profile section - only admins can edit the order reference number 2021-12-16 13:50:04 +08:00
glovetleong 926cb61ca3 Vt sync update 2021-12-13 21:23:04 +08:00
Fairuz 3aec23525c Duplicate packing list for admin CIEF reference 2021-12-13 11:45:48 +08:00
glovetleong 992e5b0008 Merge branch 'development' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into order-contact-remark
# Conflicts:
#	routes/web.php
2021-12-09 16:01:17 +08:00
omair saleh 0f0e99af35 fix announcement position 2021-12-08 15:53:47 +08:00
omair saleh da1c653570 debug loaded container job 2021-12-07 13:08:20 +08:00
omair saleh f86f129949 debug loaded container job 2021-12-07 13:06:47 +08:00
omair saleh ec24033209 debug loaded container job 2021-12-07 13:05:20 +08:00
omair saleh e3dd8440df debug loaded container job 2021-12-07 13:01:38 +08:00
omair saleh 7647dc0e23 debug loaded container job 2021-12-07 12:58:53 +08:00
omair saleh 3bfb67b55a debug loaded container job 2021-12-07 12:55:01 +08:00
omair saleh a26368b728 debug loaded container job 2021-12-07 12:36:59 +08:00
omair saleh a1a9ffa0aa debug loaded container job 2021-12-07 12:32:44 +08:00
omair saleh c3050445e1 debug loaded container job 2021-12-07 12:32:16 +08:00
omair saleh 3620e4c4b5 debug loaded container job 2021-12-07 12:30:39 +08:00
omair saleh 3dafe41c33 debug loaded container job 2021-12-07 12:04:38 +08:00
omair saleh e28cc43b18 debug loaded container job 2021-12-07 12:00:13 +08:00
omair saleh 80873a14e2 debug loaded container job 2021-12-07 11:56:32 +08:00
omair saleh 799936fd8b debug loaded container job 2021-12-07 11:55:05 +08:00
omair saleh c6d4a6ffae debug loaded container job 2021-12-07 11:49:35 +08:00
omair saleh bc5a8bce47 debug loaded container job 2021-12-07 11:47:27 +08:00
omair saleh 2c03e68242 update chinese new year announcment 2021-12-06 11:35:00 +08:00
omair saleh 857004a6a5 update chinese new year announcment 2021-12-06 10:37:05 +08:00
omair saleh 35b2d526ed list yiwu to sabah or srawak orders 2021-12-03 14:16:26 +08:00
omair saleh 7e7290acc5 list yiwu to sabah or srawak orders 2021-12-03 14:02:27 +08:00
omair saleh 5256d5b2f9 list yiwu to sabah or srawak orders 2021-12-03 14:00:50 +08:00
omair saleh e8c33e46c4 list yiwu to sabah or srawak orders 2021-12-03 13:55:58 +08:00
omair saleh 5afd37652c list yiwu to sabah or srawak orders 2021-12-03 13:55:28 +08:00
omair saleh aeb0dfb025 list yiwu to sabah or srawak orders 2021-12-03 13:54:16 +08:00
omair saleh 1a591c0404 list yiwu to sabah or srawak orders 2021-12-03 13:53:13 +08:00
omair saleh 22c07b19ad list yiwu to sabah or srawak orders 2021-12-03 13:52:10 +08:00
omair saleh 9d2dceab2e Merge remote-tracking branch 'origin/master' 2021-12-03 13:45:27 +08:00
omair saleh d00be021bc list yiwu to sabah or srawak orders 2021-12-03 13:45:12 +08:00
omair saleh 3d89a25f5c remove list yiwu to sabah or srawak orders 2021-12-03 13:44:42 +08:00
omair saleh 13c4b173d3 list yiwu to sabah or srawak orders 2021-12-03 13:44:08 +08:00
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
omair saleh 3a74fa5e12 add contact and remark to address 2021-11-29 11:46:43 +08:00
omair saleh 098297188d add contact and remark to address 2021-11-29 11:44:02 +08:00
omair saleh 4440f229d9 add contact and remark to address 2021-11-29 11:33:26 +08:00
omair saleh 32465e2170 add contact and remark to address 2021-11-28 21:03:04 +08:00
omair saleh 5d9782d1c9 package tracking page 2021-11-28 20:19:09 +08:00
omair saleh 036f389308 package tracking page 2021-11-28 19:29:06 +08:00
omair saleh 3de95f7019 package tracking page 2021-11-28 19:27:02 +08:00
omair saleh 0dc1a3c289 package tracking page 2021-11-28 19:24:18 +08:00
omair saleh 4302b42ad8 package tracking page 2021-11-28 19:22:28 +08:00
omair saleh 95daebb8f1 package tracking page 2021-11-28 19:21:27 +08:00
omair saleh 2cc0465165 package tracking page 2021-11-28 19:19:18 +08:00
omair saleh d626c0bb51 package tracking page 2021-11-28 16:49:40 +08:00
edmondlang a56b5c64ba update admin setting - change email address 2021-11-28 14:51:06 +08:00
omair saleh 4601d5191b package tracking page 2021-11-28 14:31:05 +08:00
omair saleh 13fa349605 package tracking page 2021-11-28 14:28:17 +08:00
omair saleh bb2e6f0c67 package tracking page 2021-11-28 14:21:36 +08:00
omair saleh c681e89d34 Merge remote-tracking branch 'origin/development' into development 2021-11-28 13:55:27 +08:00
omair saleh fd686d9ca5 fix contact processor and remarks database 2021-11-28 13:55:13 +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 327c2958c4 adjust alignment for order remarks 2021-11-27 21:37:40 +08:00
edmondlang 92c086a5bc clear merge bug dupplicated code 2021-11-27 17:24:30 +08:00
edmondlang cc5b39e457 Merge branch 'development' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2021-11-27 17:06:59 +08:00
omair saleh 42883b3723 Merge branch 'remark-create-api' into 'master'
remark for order, container, packing list

See merge request CIEFWorldwideSdnBhd/shipping-portal!80
2021-11-26 07:23:42 +00:00
omair saleh 634d4b8b7d Merge branch 'master' into 'remark-create-api'
# Conflicts:
#   app/Models/Container.php
#   app/Models/PackingList.php
#   routes/order.php
#   routes/packing_list.php
2021-11-26 07:23:35 +00:00
omair saleh 6255936cd1 Merge branch 'container-profile-forms-ui' into 'master'
Container profile forms ui

See merge request CIEFWorldwideSdnBhd/shipping-portal!86
2021-11-26 07:14:27 +00:00
omair saleh b31c8d508c Merge branch 'update-id-number' into 'development'
Update id number

See merge request CIEFWorldwideSdnBhd/shipping-portal!85
2021-11-26 07:10:16 +00:00
omair saleh 90c1c037ca Merge branch 'development' into 'update-id-number'
# Conflicts:
#   resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue
2021-11-26 07:10:09 +00:00
omair saleh 20289c7f1e Merge branch 'order-remark-backend' into 'development'
Order remark backend

See merge request CIEFWorldwideSdnBhd/shipping-portal!83
2021-11-26 02:34:25 +00:00
omair saleh ac1fc3103b add customer to new warehouse list 2021-11-26 10:11:13 +08:00
omair saleh cf6bebcde2 Merge branch 'development' into 'master'
Development

See merge request CIEFWorldwideSdnBhd/shipping-portal!82
2021-11-26 01:56:02 +00:00
omair saleh a6fc5dd1a5 change warehouse address format 2021-11-25 17:08:44 +08:00
omair saleh fa88ffca49 add marking to new warehouse special list 2021-11-25 03:18:12 +08:00
omair saleh 2b6a2810e5 clean up company module un used dependencies 2021-11-25 03:11:20 +08:00
omair saleh c67ee25654 add new yd Guangzhou warehouse 2021-11-25 03:08:32 +08:00
edmondlang 558868d859 update setting edit full name 2021-11-06 20:43:39 +08:00
edmondlang 6fcf952967 update order remark ui 2021-11-02 00:00:31 +08:00
edmondlang b0a2ab08c9 tody up container forms component 2021-10-31 19:10:16 +08:00
edmondlang e0a78cc126 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into order-remark-backend 2021-10-31 15:45:55 +08:00
edmondlang 5e7cfd4da0 tidy up the order remark backend api 2021-10-31 15:43:57 +08:00
edmondlang feec49318b update container profile comment section with api 2021-10-30 17:11:28 +08:00
edmondlang 9252134cc4 wip update container comments(remarks) section and implement api 2021-10-29 16:20:05 +08:00
edmondlang 6444f471e8 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into order-remark-backend
# Conflicts:
#	app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerRemarkLogic.php
#	app/Models/Order.php
2021-10-28 00:31:48 +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 a846028919 wip 2021-10-25 22:49:42 +08:00
edmondlang 274cd83c81 order search funtion 2021-10-25 22:26:19 +08:00
edmondlang 487d024039 wip 2021-10-23 15:00:16 +08:00
edmondlang 6a4e2926b9 wip 2021-10-23 13:55:38 +08:00
edmondlang 25c36d085f code review update id number, min length 2021-10-21 15:50:31 +08:00
edmondlang ba0dbf80a1 update order no 2021-10-21 00:38:16 +08:00
edmondlang afba2d6880 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into update-id-number 2021-10-20 22:16:08 +08:00
edmondlang 39771a42b6 Merge branch 'update-id-number' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into update-id-number 2021-10-20 22:14:37 +08:00
Obenny 624df67ca5 copied modules, resources, and updated route files 2021-10-18 19:38:56 +08:00
Obenny ea6711f06b copied controllers, models, migrations 2021-10-17 21:43:25 +08:00
Obenny 8c23d178e8 copied migrations, model, controllers, routes 2021-10-17 21:33:40 +08:00
glovetleong b36313e24c remark for order, container, packing list 2021-10-10 15:22:49 +08:00
Haziq Danial 61a75a4ee1 update order reference id 2021-09-28 18:51:43 +08:00
340 changed files with 13970 additions and 1193 deletions
+2
View File
@@ -53,3 +53,5 @@ MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
UNITY_APP_URL="https://unity.izyim.com"
EXCHANGE_URL=https://dev.exchange.cief-malaysia.com/
MIX_EXCHANGE_URL="${EXCHANGE_URL}"
YD_API_CODE=''
@@ -63,7 +63,7 @@ abstract class AbstractControllerLogic
} catch (ErrorException|GeneralExceptions|TypeError $exception){
return (new ApiResponseObject($this->getNotificationTitle().' failed', $exception->getMessage(),
$exception->getCode() ? $exception->getCode() : HttpStatus::SERVER_ERROR))->handler();
!in_array($exception->getCode(), [0, 42000]) ? $exception->getCode() : HttpStatus::SERVER_ERROR))->handler();
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class ClaimantId implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('claimant_id', $value);
}
}
@@ -0,0 +1,32 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\PackingListType;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Carbon;
class Delivered implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('packingList', function($packingList){
return $packingList->where('type', PackingListType::SHIPPING_PACKING_LIST)->where('status', ApprovalStatus::APPROVED);
})->whereHas('container',
function($container) {
return $container->where('containers.status', ApprovalStatus::COMPLETED);
}
)->whereHas('deliverySchedules',
function($schedule) {
return $schedule->where('eta', '<', Carbon::now())->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
}
);
}
}
@@ -0,0 +1,32 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\PackingListType;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Carbon;
class InDestinationWarehouse implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('packingList', function($packingList){
return $packingList->where('type', PackingListType::SHIPPING_PACKING_LIST)->where('status', ApprovalStatus::APPROVED);
})->whereHas('container',
function($container) {
return $container->where('containers.status', ApprovalStatus::COMPLETED);
}
)->whereDoesntHave('deliverySchedules',
function($schedule) {
return $schedule->where('etd', '<', Carbon::now())->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
}
);
}
}
@@ -0,0 +1,29 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\PackingListType;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Carbon;
class InOriginWarehouse implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('packingList', function($packingList){
return $packingList->where('type', PackingListType::SHIPPING_PACKING_LIST)->where('status', ApprovalStatus::APPROVED);
})->whereDoesntHave('shippingSchedules',
function($schedule) {
return $schedule->where('etd', '<', Carbon::now())
->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
}
);
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\PackingListType;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Carbon;
class InTransit implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('packingList', function($packingList){
return $packingList->where('type', PackingListType::SHIPPING_PACKING_LIST)->where('status', ApprovalStatus::APPROVED);
})->whereHas('container',
function($container) {
return $container->where('containers.status', ApprovalStatus::PENDING_VERIFICATION);
}
)->whereHas('shippingSchedules',
function($schedule) {
return $schedule->where('etd', '<', Carbon::now())
->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
}
);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class OwnerId implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('owner_id', $value);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class OwnerId implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('owner_id', $value);
}
}
@@ -0,0 +1,29 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use Illuminate\Support\Carbon;
use Illuminate\Database\Eloquent\Builder;
class PackingListDeliveryStatus implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $value == 1 ? $builder->whereDoesntHave('transports') : ($value == 2 ? $builder->whereHas('transports', function (Builder $query) use ($value) {
$query->whereDoesntHave('schedules', function (Builder $query) use ($value) {
$query->where('status', '!=', ApprovalStatus::EXPIRED)->where('eta', '>', Carbon::now());
});
}) : $builder->whereHas('transports', function (Builder $query) use ($value) {
$query->whereHas('schedules', function (Builder $query) use ($value) {
$query->where('status', '!=', ApprovalStatus::EXPIRED)->where('eta', '<', Carbon::now());
});
}));
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\PackingListType;
use Illuminate\Database\Eloquent\Builder;
class WarehouseParcels implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('packingList', function ($query){
return $query->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->where('status', ApprovalStatus::APPROVED);
});
}
}
@@ -0,0 +1,15 @@
<?php
namespace App\Classes\General\Interfaces;
use Illuminate\Database\Eloquent\Relations\MorphTo;
interface Notifiable
{
public function subject(): MorphTo;
public function target(): MorphTo;
public function causer(): MorphTo;
}
@@ -0,0 +1,13 @@
<?php
namespace App\Classes\General\Interfaces;
use Illuminate\Database\Eloquent\Relations\MorphMany;
interface Transactionable
{
public function transactions(): morphMany;
}
-94
View File
@@ -1,94 +0,0 @@
<?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,32 @@
<?php
namespace App\Classes\Jobs;
use App\Classes\Modules\PackingLists\Processors\FetchOrderListsFromYdPortalProcessor;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class FetchOrdersFromYDPortalJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $timeout = 900;
/**
* Execute the job.
*
* @return void
* @throws \Illuminate\Contracts\Container\BindingResolutionException
*/
public function handle()
{
(App()->make(FetchOrderListsFromYdPortalProcessor::class))->execute();
}
}
@@ -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));
}
}
@@ -27,7 +27,6 @@ class LogoutUserLogic extends AbstractControllerLogic
*/
public function __construct(InvalidatesAuthenticationToken $invalidatesAuthenticationToken)
{
logger("logout user logic");
$this->invalidatesAuthenticationToken = $invalidatesAuthenticationToken;
}
@@ -4,12 +4,18 @@ namespace App\Classes\Modules\Addresses\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\General\Interfaces\Contactable;
use App\Classes\Modules\Addresses\Services\CreatesAddress;
use App\Classes\Modules\Addresses\Services\FetchesDistrict;
use App\Classes\Modules\Addresses\Standards\Rules\CanCreateAddress;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Classes\Modules\Companies\Services\FetchesCompanyModule;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor;
use App\Http\Resources\AddressResource;
use App\Models\Address;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -39,19 +45,29 @@ class CreateAddressLogic extends AbstractControllerLogic
/** @var CreatesAddress */
private $createsAddress;
/** @var CreateContactProcessor */
private $createContactProcessor;
/** @var CreateRemarkProcessor */
private $createRemarkProcessor;
/**
* CreateAddressLogic constructor.
* @param CanCreateAddress $canCreateAddress
* @param FetchesDistrict $fetchesDistrict
* @param FetchesCompanyModule $fetchesCompanyModule
* @param CreatesAddress $createsAddress
* @param CreateContactProcessor $createContactProcessor
* @param CreateRemarkProcessor $createRemarkProcessor
*/
public function __construct(CanCreateAddress $canCreateAddress, FetchesDistrict $fetchesDistrict, FetchesCompanyModule $fetchesCompanyModule, CreatesAddress $createsAddress)
public function __construct(CanCreateAddress $canCreateAddress, FetchesDistrict $fetchesDistrict, FetchesCompanyModule $fetchesCompanyModule, CreatesAddress $createsAddress, CreateContactProcessor $createContactProcessor, CreateRemarkProcessor $createRemarkProcessor)
{
$this->canCreateAddress = $canCreateAddress;
$this->fetchesDistrict = $fetchesDistrict;
$this->fetchesCompanyModule = $fetchesCompanyModule;
$this->createsAddress = $createsAddress;
$this->createContactProcessor = $createContactProcessor;
$this->createRemarkProcessor = $createRemarkProcessor;
}
/**
@@ -70,8 +86,19 @@ class CreateAddressLogic extends AbstractControllerLogic
$this->canCreateAddress->passes($object);
/** @var Address $address */
$address = $this->createsAddress->execute($this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]), $object);
if($request->input('phone')){
$contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', '');
$this->createContactProcessor->execute($contactObject, $address);
}
if($request->input('remark')){
$remarkObject = new RemarkObject($request->input('remark'), Auth()->user()->id);
$this->createRemarkProcessor->execute($address, $remarkObject);
}
return $this->resourceResponse(new AddressResource($address));
}
@@ -0,0 +1,54 @@
<?php
namespace App\Classes\Modules\Addresses\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Addresses\Services\ListsAddresses;
use App\Classes\Modules\Addresses\Services\ListsStates;
use App\Classes\Modules\Addresses\Standards\Rules\CanListAddresses;
use App\Http\Resources\AddressResource;
use App\Http\Resources\StateResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListStatesLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieved Addresses',
'message' => 'You have successfully retrieved a list of Addresses'
];
}
/** @var ListsStates */
private $listStates;
/**
* ListStatesLogic constructor.
* @param ListsStates $listStates
*/
public function __construct(ListsStates $listStates)
{
$this->listStates = $listStates;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request) : JsonResponse
{
$query = $this->listStates->execute($this->listStates->deserializeFilters($request->input('filters')));
return $this->collectionResponse(StateResource::collection($query));
}
}
@@ -9,7 +9,12 @@ use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\Modules\Addresses\Services\FetchesDistrict;
use App\Classes\Modules\Addresses\Standards\Rules\CanUpdateAddress;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor;
use App\Http\Resources\AddressResource;
use App\Models\Address;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -38,22 +43,31 @@ class UpdateAddressLogic extends AbstractControllerLogic
/** @var FetchesDistrict */
private $fetchesDistrict;
/** @var CreateContactProcessor */
private $createContactProcessor;
/** @var CreateRemarkProcessor */
private $createRemarkProcessor;
/**
* UpdateAddressLogic constructor.
* @param CanUpdateAddress $canUpdateAddress
* @param UpdatesAddress $updatesAddress
* @param FetchesAddress $fetchesAddress
* @param FetchesDistrict $fetchesDistrict
* @param CreateContactProcessor $createContactProcessor
* @param CreateRemarkProcessor $createRemarkProcessor
*/
public function __construct(CanUpdateAddress $canUpdateAddress, UpdatesAddress $updatesAddress, FetchesAddress $fetchesAddress, FetchesDistrict $fetchesDistrict)
public function __construct(CanUpdateAddress $canUpdateAddress, UpdatesAddress $updatesAddress, FetchesAddress $fetchesAddress, FetchesDistrict $fetchesDistrict, CreateContactProcessor $createContactProcessor, CreateRemarkProcessor $createRemarkProcessor)
{
$this->canUpdateAddress = $canUpdateAddress;
$this->updatesAddress = $updatesAddress;
$this->fetchesAddress = $fetchesAddress;
$this->fetchesDistrict = $fetchesDistrict;
$this->createContactProcessor = $createContactProcessor;
$this->createRemarkProcessor = $createRemarkProcessor;
}
/**
* @param Request $request
* @return JsonResponse
@@ -71,8 +85,21 @@ class UpdateAddressLogic extends AbstractControllerLogic
$address = $this->fetchesAddress->execute(['id' => $request->route('id')]);
/** @var Address $address */
$address = $this->updatesAddress->execute($address, $object);
$address->contacts()->delete(); $address->remarks()->delete();
if($request->input('phone')){
$contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', '');
$this->createContactProcessor->execute($contactObject, $address);
}
if($request->input('remark')){
$remarkObject = new RemarkObject($request->input('remark'), Auth()->user()->id);
$this->createRemarkProcessor->execute($address, $remarkObject);
}
return $this->resourceResponse(new AddressResource($address));
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Addresses\Services;
use App\Classes\General\Eloquent\AbstractListRecord;
use App\Models\State;
use Illuminate\Database\Eloquent\Builder;
class ListsStates extends AbstractListRecord
{
/** @var State */
private $repository;
/**
* ListsStates constructor.
* @param State $repository
*/
public function __construct(State $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -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,69 @@
<?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,61 @@
<?php
namespace App\Classes\Modules\Companies\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Companies\Services\ListsCompanyModules;
use App\Classes\Modules\Companies\Standards\Rules\CanListCompanies;
use App\Http\Resources\CompanyModuleResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListCompanyModulesLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieved Company Moduels',
'message' => 'You have successfully retrieved a list of Companies'
];
}
/** @var CanListCompanies */
private $canListCompanies;
/** @var ListsCompanyModules */
private $listsCompanyModules;
/**
* ListCompaniesControllersLogic constructor.
* @param CanListCompanies $canListCompanies
* @param ListsCompanyModules $listsCompanyModules
*/
public function __construct(CanListCompanies $canListCompanies, ListsCompanyModules $listsCompanyModules)
{
$this->canListCompanies = $canListCompanies;
$this->listsCompanyModules = $listsCompanyModules;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
$this->canListCompanies->passes();
$query = $this->listsCompanyModules->execute($this->listsCompanyModules->deserializeFilters($request->input('filters')));
return $this->collectionResponse(CompanyModuleResource::collection($query));
}
}
@@ -5,6 +5,7 @@ namespace App\Classes\Modules\Companies\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Companies\Services\UpdatesCompany;
use App\Classes\Modules\Companies\Services\UpdatesCompanyModuleName;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Companies\Standards\Rules\CanUpdateCompany;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyObject;
@@ -35,17 +36,22 @@ class UpdateCompanyLogic extends AbstractControllerLogic
/** @var FetchesCompany */
private $fetchesCompany;
/** @var UpdatesCompanyModuleName */
private $updatesCompanyModuleName;
/**
* UpdateCompanyControllersLogic constructor.
* @param CanUpdateCompany $canUpdateCompany
* @param UpdatesCompany $updatesCompany
* @param FetchesCompany $fetchesCompany
* @param UpdatesCompanyModuleName $updatesCompanyModuleName
*/
public function __construct(CanUpdateCompany $canUpdateCompany, UpdatesCompany $updatesCompany, FetchesCompany $fetchesCompany)
public function __construct(CanUpdateCompany $canUpdateCompany, UpdatesCompany $updatesCompany, FetchesCompany $fetchesCompany, UpdatesCompanyModuleName $updatesCompanyModuleName)
{
$this->canUpdateCompany = $canUpdateCompany;
$this->updatesCompany = $updatesCompany;
$this->fetchesCompany = $fetchesCompany;
$this->updatesCompanyModuleName = $updatesCompanyModuleName;
}
@@ -56,23 +62,17 @@ class UpdateCompanyLogic extends AbstractControllerLogic
*/
public function logic(Request $request) : JsonResponse
{
try {
$object = new CompanyObject($request->input('name'), $request->input('reference'), $request->input('type'));
$object = new CompanyObject($request->input('reference_no'), $request->input('name'), $request->input('type'));
$this->canUpdateCompany->passes($object);
$this->canUpdateCompany->passes($object);
$query = $this->fetchesCompany->execute(['id' => $request->route('id')]);
$query = $this->fetchesCompany->execute(['id' => $request->route('id')]);
$query = $this->updatesCompany->execute($query, $object);
$query = $this->updatesCompany->execute($query, $object);
return $this->resourceResponse(new CompanyResource($query));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
$this->updatesCompanyModuleName->execute($query->companyModules()->first(), $object->getName());
return $this->resourceResponse(new CompanyResource($query));
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Companies\Services;
use App\Classes\General\Eloquent\AbstractListRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\CompanyModule;
class ListsCompanyModules extends AbstractListRecord
{
/** @var CompanyModule */
private $repository;
/**
* ListsCompanyModules constructor.
* @param CompanyModule $repository
*/
public function __construct(CompanyModule $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,26 @@
<?php
namespace App\Classes\Modules\Companies\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyObject;
use App\Models\Company;
class UpdatesCompany extends AbstractUpdateRecord
{
/**
* @param Company $model
* @param CompanyObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Company $model, CompanyObject $object)
{
$model->name = $object->getName();
$model->reference = $object->getReference();
$model->type = $object->getType();
return $this->handler($model);
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Classes\Modules\Companies\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyModuleObject;
use App\Models\CompanyModule;
class UpdatesCompanyModuleName extends AbstractUpdateRecord
{
/**
* @param CompanyModule $model
* @param CompanyModuleObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(CompanyModule $model, string $name)
{
$model->name = $name;
return $this->handler($model);
}
}
@@ -0,0 +1,51 @@
<?php
namespace App\Classes\Modules\Companies\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyObject;
use App\Classes\Modules\Companies\Standards\Validators\CompanyValidation;
class CanUpdateCompany extends AbstractRule
{
/** @var CompanyValidation */
private $companyValidation;
/**
* CanUpdateCompany constructor.
* @param CompanyValidation $companyValidation
*/
public function __construct(CompanyValidation $companyValidation)
{
$this->companyValidation = $companyValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param CompanyObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return $this->companyValidation->validate($object, 'PUT');
}
/**
* @param CompanyObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -15,7 +15,8 @@ class CompanyValidation extends AbstractValidation
{
return [
'company_name' => $object->getName(),
'company_reference' => $object->getReference()
'company_reference' => $object->getReference(),
'type' => $object->getType()
];
}
@@ -2,11 +2,10 @@
namespace App\Classes\Modules\Contacts\Processors;
use App\Classes\General\Interfaces\Contactable;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Contacts\Services\CreatesContact;
use App\Classes\Modules\Contacts\Standards\Rules\CanCreateContact;
use App\Models\Company;
use Illuminate\Http\Request;
use Illuminate\Database\Eloquent\Model;
class CreateContactProcessor
@@ -15,6 +14,9 @@ class CreateContactProcessor
/** @var CanCreateContact */
private $canCreateContact;
/** @var CreatesContact */
private $createsContact;
/**
* CreateContactProcessor constructor.
* @param CanCreateContact $canCreateContact
@@ -28,17 +30,17 @@ class CreateContactProcessor
/**
* @param ContactObject $object
* @param Company $company
* @param Contactable $contactable
* @return Model
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(ContactObject $object, Company $company): Model
public function execute(ContactObject $object, Contactable $contactable): Model
{
$this->canCreateContact->passes($object);
return $this->createsContact->execute($company,$object);
return $this->createsContact->execute($contactable,$object);
}
}
@@ -54,7 +54,7 @@ class ListDocumentLogic extends AbstractControllerLogic
$this->canListDocuments->passes();
$query = $this->listsDocuments->execute($this->listsDocuments->deserializeFilters($request->input('filters')));
$query = $this->listsDocuments->execute(array_merge($this->listsDocuments->deserializeFilters($request->input('filters')), ['with_owner' => true]));
return $this->collectionResponse(DocumentResource::collection($query));
@@ -0,0 +1,68 @@
<?php
namespace App\Classes\Modules\Documents\ControllersLogic;
use App\Classes\Modules\Documents\Standards\Rules\CanUpdateDocumentReference;
use App\Http\Resources\DocumentResource;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Documents\Services\FetchesDocument;
use App\Classes\Modules\Documents\Services\UpdatesDocumentReference;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdateDocumentReferenceLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Update Document Reference',
'message' => 'You have successfully updated the Document Reference'
];
}
/** @var CanUpdateDocumentReference*/
private $canUpdateDocumentReference;
/** @var UpdatesDocumentReference */
private $updatesDocumentReference;
/** @var FetchesDocument */
private $fetchesDocument;
/**
* RejectDocumentLogic constructor.
* @param CanApproveDocument $canApproveDocument
* @param ApprovesDocument $approvesDocument
* @param FetchesDocument $fetchesDocument
*/
public function __construct(CanUpdateDocumentReference $canUpdateDocumentReference, UpdatesDocumentReference $updatesDocumentReference, FetchesDocument $fetchesDocument)
{
$this->canUpdateDocumentReference = $canUpdateDocumentReference;
$this->updatesDocumentReference = $updatesDocumentReference;
$this->fetchesDocument = $fetchesDocument;
}
/**
* @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
{
$document = $this->fetchesDocument->execute(['id' => $request->route('id')]);
$this->canUpdateDocumentReference->passes();
$document_query = $this->updatesDocumentReference->execute($document, $request->input('identification_number'));
return $this->resourceResponse(new DocumentResource($document_query));
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\Modules\Documents\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\Document;
class UpdatesDocumentReference extends AbstractUpdateRecord
{
/**
* @param Document $model
* @return mixed
*/
public function execute(Document $model, string $reference) {
$model->reference = $reference;
return $this->handler($model);
}
}
@@ -0,0 +1,39 @@
<?php
namespace App\Classes\Modules\Documents\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
class CanUpdateDocumentReference extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param DocumentObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return true;
}
/**
* @param DocumentObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,92 @@
<?php
namespace App\Classes\Modules\Exports\Services;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Models\Container;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithMapping;
use Illuminate\Http\Request;
class ExportsContainerPackingList implements FromQuery, WithHeadingRow, WithMapping
{
use Exportable;
protected $id;
public function headings(): array
{
return [
'Marking',
'Refrence',
'Quantity',
'CBM',
'Status',
'Delivery Phone',
'Delivery Refrence',
'Delivery Address',
'Remark',
'Delivery Date'
];
}
public function setId($id)
{
$this->id = $id;
}
/**
* @return \Illuminate\Support\Collection|mixed
*/
public function query()
{
return Container::find($this->id)->packingLists();
}
/**
* @param Company $container
*
* @return array
*/
public function map($packing_list): array
{
$order = $packing_list->owner()->first();
$address = $order->addresses()->first();
$company = $order->companyModule()->first();
$connection = $company->inviters()->withPivot('invitee_reference')->first();
$marking = $connection ? $connection->pivot->invitee_reference:'';
$quantity = 0;
$cbm = 0;
foreach ($packing_list->packages()->get() as $key => $row) {
$quantity += $row->quantity;
$cbm += (($row->width / 100) * ($row->height / 100) * ($row->length / 100)) * $row->quantity;
}
$status = '';
if ($packing_list->transports()->count() > 0) {
$status = 'Delivery';
}
elseif ($packing_list->status == ApprovalStatus::SUSPENDED) {
$status = 'On Hold';
}
elseif ($packing_list->status != ApprovalStatus::SUSPENDED) {
$status = 'Release';
}
return [
$marking,
$order->reference,
$quantity,
$cbm,
$status,
$address->contacts()->first() ? $address->contacts()->first()->phone : 'n/a',
$address->contacts()->first() ? $address->contacts()->first()->reference : 'n/a',
$address->street_one . ' ' . $address->street_two . ' ' . $address->district->name . ' ' . $address->post_code . ' ' . $address->state->name . ' ' . $address->country->name,
$address->remarks()->first() ? $address->remarks()->first()->content : 'n/a',
$packing_list->transports()->first() ? $packing_list->transports()->current_schedule->eta : 'n/a'
];
}
}
@@ -0,0 +1,60 @@
<?php
namespace App\Classes\Modules\Exports\Services;
use App\Classes\ValueObjects\Constants\PackingListType;
use App\Models\CompanyModule;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithMapping;
class ExportsCustomersOrderLatestDate implements FromQuery, WithHeadingRow, WithMapping
{
use Exportable;
public function headings(): array
{
return [
'Marking',
'Name',
'Email',
'Latest Order'
];
}
/**
* @return \Illuminate\Support\Collection|mixed
*/
public function query()
{
return CompanyModule::where('type', '=', 1);
}
/**
* @param Company $company
*
* @return array
*/
public function map($company): array
{
$connection = $company->inviters()->withPivot('invitee_reference')->first();
$marking = $connection ? $connection->pivot->invitee_reference:'';
$employees = $company->employees()->first();
$order = $company->orders()
->join('packing_lists', 'packing_lists.owner_id', '=', 'orders.id')
->join('transport_arrangements', 'transport_arrangements.owner_id', '=', 'packing_lists.id')
->orderBy('drop_date', 'desc')
->first();
return [
$marking,
$employees ? $employees->name : '',
$employees ? $employees->email : '',
$order ? $order->drop_date : ''
];
}
}
@@ -0,0 +1,101 @@
<?php
namespace App\Classes\Modules\Notifications\DataTransferObjects;
use App\Classes\General\Interfaces\Notifiable;
use App\Classes\General\Interfaces\DataTransferObject;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
class NotificationObject implements DataTransferObject
{
/** @var string */
private $title;
/** @var string */
private $description;
/** @var Notifiable */
private $subject;
/** @var Notifiable */
private $target;
/** @var Notifiable */
private $causer;
/** @var int|null */
private $status;
/**
* OrderObject constructor.
* @param string $reference
* @param int $type
* @param int|null $status
*/
public function __construct(
string $title,
string $description,
Notifiable $subject,
Notifiable $target,
Notifiable $causer,
?int $status = ApprovalStatus::PENDING_VERIFICATION
)
{
$this->title = $title;
$this->description = $description;
$this->subject = $subject;
$this->target = $target;
$this->causer = $causer;
$this->status = $status;
}
/**
* @return int
*/
public function getTitle(): string
{
return $this->title;
}
/**
* @return int
*/
public function getDescription(): string
{
return $this->description;
}
/**
* @return Notifiable
*/
public function getSubject(): Notifiable
{
return $this->subject;
}
/**
* @return Notifiable
*/
public function getTarget(): Notifiable
{
return $this->target;
}
/**
* @return Notifiable
*/
public function getCauser(): Notifiable
{
return $this->causer;
}
/**
* @return int
*/
public function getStatus(): int
{
return $this->status;
}
}
@@ -0,0 +1,27 @@
<?php
namespace App\Classes\Modules\Notifications\Processors;
use App\Classes\Modules\Notifications\DataTransferObjects\NotificationObject;
use App\Classes\Modules\Notifications\Services\CreatesNotification;
class CreateNotificationProcessor
{
/** @var CreatesNotification */
private $createsNotification;
/**
* CreateNotificationProcessor constructor.
* @param CreatesNotification $createsNotification
*/
public function __construct(CreatesNotification $createsNotification)
{
$this->createsNotification = $createsNotification;
}
public function execute(NotificationObject $object)
{
$notification = $this->createsNotification->execute($object);
return $notification;
}
}
@@ -0,0 +1,30 @@
<?php
namespace App\Classes\Modules\Notifications\Services;
use App\Classes\Modules\Notifications\DataTransferObjects\NotificationObject;
use App\Models\Notification;
class CreatesNotification
{
/**
* @param NotificationObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(NotificationObject $object) {
$model = new Notification();
$model->title = $object->getTitle();
$model->description = $object->getDescription();
$model->status = $object->getStatus();
$model->subject_type = get_class($object->getSubject());
$model->subject_id = $object->getSubject()->id;
$model->target_type = get_class($object->getTarget());
$model->target_id = $object->getTarget()->id;
$model->causer_type = get_class($object->getCauser());
$model->causer_id = $object->getCauser()->id;
$model->save();
return $model;
}
}
@@ -0,0 +1,67 @@
<?php
namespace App\Classes\Modules\Orders\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Orders\Services\CreatesOrderRemark;
use App\Classes\Modules\Remarks\Standards\Rules\CanCreateRemark;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\Orders\Services\FetchesOrder;
use App\Http\Resources\RemarkResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class AssignOrderRemarkLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Created Order Remark',
'message' => 'You have successfully created a new Order Remark'
];
}
/** @var CanCreateRemark */
private $canCreateRemark;
/** @var CreatesOrderRemark */
private $createsOrderRemark;
/** @var FetchesOrder */
private $fetchesOrder;
/**
* CreateRemarkLogic constructor.
* @param CanCreateRemark $canCreateRemark
* @param CreatesOrderRemark $createsOrderRemark
*/
public function __construct(CanCreateRemark $canCreateRemark, CreatesOrderRemark $createsOrderRemark, FetchesOrder $fetchesOrder)
{
$this->canCreateRemark = $canCreateRemark;
$this->createsOrderRemark = $createsOrderRemark;
$this->fetchesOrder = $fetchesOrder;
}
/**
* @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
{
$object = new RemarkObject(
$request->input('content'),
$request->route('id')
);
$this->canCreateRemark->passes($object);
$query = $this->createsOrderRemark->execute($this->fetchesOrder->execute(['id' => $request->route('id')]), $object);
return $this->resourceResponse( new RemarkResource($query));
}
}
@@ -2,12 +2,14 @@
namespace App\Classes\Modules\Orders\ControllersLogic;
use App\Classes\Exceptions\RequestValidationException;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Companies\Services\FetchesCompanyModule;
use App\Classes\Modules\Orders\Processors\CreateOrderProcessor;
use App\Classes\Modules\Orders\Services\GeneratesOrderNumber;
use App\Classes\ValueObjects\Constants\WarehouseReferences;
use App\Http\Resources\OrderResource;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
@@ -57,12 +59,21 @@ class CreateOrderLogic extends AbstractControllerLogic
public function logic(Request $request) : JsonResponse {
$company = $this->fetchesCompany->execute(['id' => $request->input('company_id')]);
$address = $this->fetchesAddress->execute(['id' => $request->input('address_id')]);
$originWarehouse = $this->fetchesCompanyModule->execute(['id' => $request->input('warehouse_id')]);
if(!in_array($company->companyModules()->importers()->first()->id, WarehouseReferences::YD_EXEMPT_LIST)){
$originWarehouse = $this->fetchesCompanyModule->execute(['reference' => $originWarehouse->reference === WarehouseReferences::VT_GUANG_ZHOU ? WarehouseReferences::YD_GUANG_ZHOU : WarehouseReferences::YD_YIWU]);
}
if($originWarehouse->reference === WarehouseReferences::YD_YIWU && in_array($address->state_id, [5, 13, 14])) {
throw new RequestValidationException('Our Yiwu warehouse is unable to ship goods to Sabah & Sarawak at the moment. you can select our Guangzhou warehouse as an alternative.');
}
$order = $this->createOrderProcessor->execute($company, $originWarehouse, $address, $this->generatesOrderNumber->execute());
return $this->resourceResponse(new OrderResource($order));
@@ -19,6 +19,7 @@ use App\Classes\ValueObjects\Constants\PackingListType;
use App\Classes\ValueObjects\Constants\TransportType;
use App\Http\Resources\PackingListResource;
use App\Models\PackingList;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Carbon\Carbon;
@@ -80,6 +81,9 @@ class CreateShippingPackingListLogic extends AbstractControllerLogic
/**
* @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
{
@@ -93,6 +97,8 @@ class CreateShippingPackingListLogic extends AbstractControllerLogic
PackingListType::SHIPPING_PACKING_LIST,
ApprovalStatus::PENDING_SUBMISSION
);
/** @var PackingList $packingList */
$packingList = $this->createPackingListProcessor->execute($packingListObject, $order);
$packages = $request->input('packages');
@@ -0,0 +1,46 @@
<?php
namespace App\Classes\Modules\Orders\ControllersLogic;
use App\Classes\Exceptions\ErrorException;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Orders\Services\FetchesOrder;
use App\Classes\Modules\Orders\Services\UpdateOrderReference;
use App\Http\Resources\OrderResource;
use App\Models\Company;
use App\Models\Order;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdateOrderLogic extends AbstractControllerLogic
{
protected function notification(): array
{
return [
'title' => 'Update Order',
'message' => 'You have successfully update the order'
];
}
private $updateOrderReference;
private $fetchesOrder;
public function __construct(UpdateOrderReference $updateOrderReference, FetchesOrder $fetchesOrder)
{
$this->updateOrderReference = $updateOrderReference;
$this->fetchesOrder = $fetchesOrder;
}
protected function logic(Request $request): JsonResponse
{
$reference_id = $request->input('reference_id');
$order = $this->fetchesOrder->execute(['id' => $request->route('id')]);
$order = $this->updateOrderReference->execute($order, $reference_id);
return $this->resourceResponse(new OrderResource($order));
}
}
@@ -6,7 +6,7 @@ use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\Modules\Orders\Standards\Rules\CanApproveChangeOrderAddress;
use App\Classes\Modules\Orders\Services\UpdatesOrdersAddress;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
use Illuminate\Http\Request;
class ApproveChangeOrderAddressProcessor
@@ -20,17 +20,27 @@ class ApproveChangeOrderAddressProcessor
/** @var UpdatesOrdersAddress */
private $updatesOrdersAddress;
/** @var UpdateDoFromVTPortalProcessor */
private $updateDoFromVTPortalProcessor;
/** @var UpdateDoFromYDPortalProcessor */
private $updateDoFromYDPortalProcessor ;
/**
* ApproveChangeOrderAddressProcessor constructor.
* @param CanApproveChangeOrderAddress $canApproveChangeOrderAddress
* @param FetchesAddress $fetchesAddress
* @param UpdatesOrdersAddress $updatesOrdersAddress
* @param \App\Classes\Modules\Orders\Processors\UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor
* @param UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor
*/
public function __construct(CanApproveChangeOrderAddress $canApproveChangeOrderAddress, FetchesAddress $fetchesAddress, UpdatesOrdersAddress $updatesOrdersAddress)
public function __construct(CanApproveChangeOrderAddress $canApproveChangeOrderAddress, FetchesAddress $fetchesAddress, UpdatesOrdersAddress $updatesOrdersAddress, \App\Classes\Modules\Orders\Processors\UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor, UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor)
{
$this->canApproveChangeOrderAddress = $canApproveChangeOrderAddress;
$this->fetchesAddress = $fetchesAddress;
$this->updatesOrdersAddress = $updatesOrdersAddress;
$this->updateDoFromVTPortalProcessor = $updateDoFromVTPortalProcessor;
$this->updateDoFromYDPortalProcessor = $updateDoFromYDPortalProcessor;
}
@@ -38,12 +48,13 @@ class ApproveChangeOrderAddressProcessor
* @param Request $request
* @return mixed
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\InternalServerErrorException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function execute(Request $request)
{
$status = (int) $request->route('status');
$this->canApproveChangeOrderAddress->passes();
@@ -52,9 +63,13 @@ class ApproveChangeOrderAddressProcessor
if($status === ApprovalStatus::APPROVED){
$address->owner->addresses()->update(['status' => ApprovalStatus::EXPIRED]);
$appointee = $address->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id;
$appointee === 2 ? $this->updateDoFromVTPortalProcessor->execute($address) : $this->updateDoFromYDPortalProcessor->execute($address);
}
$this->updatesOrdersAddress->execute($address, $status);
$address = $this->updatesOrdersAddress->execute($address, $status);
return $address;
}
@@ -8,6 +8,11 @@ use App\Classes\Modules\Addresses\Services\CreatesAddress;
use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor;
use App\Classes\Modules\Orders\Services\CreatesOrder;
use App\Classes\Modules\Orders\Services\GeneratesOrderNumber;
use App\Classes\Modules\Orders\Standards\Rules\CanCreateOrder;
@@ -33,6 +38,12 @@ class CreateOrderProcessor
/** @var CreateOrderRolesProcessor */
private $createOrderRolesProcessor;
/** @var CreateContactProcessor */
private $createContactProcessor;
/** @var CreateRemarkProcessor */
private $createRemarkProcessor;
/**
* CreateOrderProcessor constructor.
* @param CanCreateOrder $canCreateOrder
@@ -40,12 +51,14 @@ class CreateOrderProcessor
* @param CreatesAddress $createAddress
* @param CreateOrderRolesProcessor $createOrderRolesProcessor
*/
public function __construct(CanCreateOrder $canCreateOrder, CreatesOrder $createsOrder, CreatesAddress $createAddress, CreateOrderRolesProcessor $createOrderRolesProcessor)
public function __construct(CanCreateOrder $canCreateOrder, CreatesOrder $createsOrder, CreatesAddress $createAddress, CreateOrderRolesProcessor $createOrderRolesProcessor, CreateContactProcessor $createContactProcessor, CreateRemarkProcessor $createRemarkProcessor)
{
$this->canCreateOrder = $canCreateOrder;
$this->createsOrder = $createsOrder;
$this->createAddress = $createAddress;
$this->createOrderRolesProcessor = $createOrderRolesProcessor;
$this->createContactProcessor = $createContactProcessor;
$this->createRemarkProcessor = $createRemarkProcessor;
}
@@ -73,7 +86,37 @@ class CreateOrderProcessor
$addressObject = new AddressObject($address->street_one, $address->street_two, $address->country_id, $address->state_id, $address->district_id, $address->postcode,$address->reference);
$this->createAddress->execute($order, $addressObject);
/** @var Address $order_address */
$order_address = $this->createAddress->execute($order, $addressObject);
$contact = $address->contacts()->first();
if ($contact) {
$contactObject = new ContactObject(
$contact->reference,
$contact->phone,
'',
''
);
if($contactObject->getPhone()){
$order_remark = $this->createContactProcessor->execute($contactObject, $order_address);
}
}
$remark = $address->remarks()->first();
if ($remark){
$remarkObject = new RemarkObject(
$remark->content,
Auth()->user()->id
);
if($remarkObject->getContent()){
$this->createRemarkProcessor->execute($order_address, $remarkObject);
}
}
$this->createOrderRolesProcessor->execute($originWarehouse, $order);
@@ -53,7 +53,7 @@ class CreateOrderRolesProcessor
$importer = $order->companyModule;
/** @var CompanyModule $destinationWarehouse */
$destinationWarehouse = $this->fetchesCompanyModule->execute(['reference' => WarehouseReferences::DESTINATION_WAREHOUSE[$address->state_id ]]);
$destinationWarehouse = $this->fetchesCompanyModule->execute(['reference' => $originWarehouse->reference === WarehouseReferences::YD_GUANG_ZHOU || $originWarehouse->reference === WarehouseReferences::YD_YIWU ? WarehouseReferences::YD_DESTINATION_WAREHOUSE : WarehouseReferences::VT_DESTINATION_WAREHOUSE[$address->state_id]]);
/** @var CompanyModule $freightForwarder */
$freightForwarder = $originWarehouse->company->companyModules()->freightForwarders()->first();
@@ -79,33 +79,9 @@ class CreateOrderRolesProcessor
$roleObject = new OrderRoleObject($order, $destinationWarehouse, OrderRoleTypes::DESTINATION_WAREHOUSE);
$this->createsOrderRole->execute($roleObject);
$roleObject = new OrderRoleObject($order, $freightForwarder, OrderRoleTypes::LAST_MILE_DELIVERY_DRIVER);
$this->createsOrderRole->execute($roleObject);
return true;
$companies = $this->fetchesCompany->getRepository()->whereIn('id',[1, $request->get('warehouse_id')])->get();
$cief_company = $companies[0]->id == 1 ? $companies[0] : $companies[1];
$warehouse_company = $companies[0]->id != 1 ? $companies[0] : $companies[1];
$cief_company_module = $cief_company->companyModule()->first();
$contractEntities[] = $this->unityCreateContractEntity->execute( $contract_reference_no, [$cief_company_module->unity_hash_id]);
$contractEntities[0]->{"company_module_id"} = $cief_company_module->id;
$warehouse_company_module = $warehouse_company->companyModule()->first();
$contractEntities[] = $this->unityCreateContractEntity->execute( $contract_reference_no, [$warehouse_company_module->unity_hash_id]);
$contractEntities[1]->{"company_module_id"} = $warehouse_company_module->id;
foreach($contractEntities as $entity){
$order_role_object = new OrderRoleObject($orderId, $entity->company_module_id, $entity->hash_id, $entity->entity_signature_hash_id);
$this->canCreateOrderRole->passes($order_role_object);
$this->createsOrderRole->execute($order_role_object);
}
return $contractEntities;
}
}
@@ -9,6 +9,10 @@ use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\Modules\Addresses\Services\DeletesAddress;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor;
use Illuminate\Http\Request;
@@ -29,6 +33,12 @@ class RequestChangeOrderAddressProcessor
/** @var DeletesAddress */
private $deletesAddress;
/** @var CreateContactProcessor */
private $createContactProcessor;
/** @var CreateRemarkProcessor */
private $createRemarkProcessor;
/**
* ChangeOrderAddressProcessor constructor.
* @param FetchesOrder $fetchesOrder
@@ -36,7 +46,7 @@ class RequestChangeOrderAddressProcessor
* @param FetchesAddress $fetchesAddress
* @param DeletesAddress $deletesAddress
*/
public function __construct(CanChangeOrderAddress $canChangeOrderAddress, FetchesOrder $fetchesOrder, CreatesAddress $createsAddress, FetchesAddress $fetchesAddress, DeletesAddress $deletesAddress)
public function __construct(CanChangeOrderAddress $canChangeOrderAddress, FetchesOrder $fetchesOrder, CreatesAddress $createsAddress, FetchesAddress $fetchesAddress, DeletesAddress $deletesAddress, CreateContactProcessor $createContactProcessor, CreateRemarkProcessor $createRemarkProcessor)
{
$this->canChangeOrderAddress = $canChangeOrderAddress;
@@ -44,12 +54,20 @@ class RequestChangeOrderAddressProcessor
$this->createsAddress = $createsAddress;
$this->fetchesAddress = $fetchesAddress;
$this->deletesAddress = $deletesAddress;
$this->createContactProcessor = $createContactProcessor;
$this->createRemarkProcessor = $createRemarkProcessor;
}
/**
* @param Request $request
* @return mixed
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(Request $request)
{
$this->canChangeOrderAddress->passes();
$order = $this->fetchesOrder->execute(['id' => $request->get('order_id')]);
@@ -59,7 +77,32 @@ class RequestChangeOrderAddressProcessor
$address = $this->fetchesAddress->execute(['id' => $request->get('address_id')]);
$addressObject = new AddressObject($address->street_one, $address->street_two, $address->country_id, $address->state_id, $address->district_id, $address->postcode, $address->reference, ApprovalStatus::PENDING_VERIFICATION);
$this->createsAddress->execute($order, $addressObject);
$order_address = $this->createsAddress->execute($order, $addressObject);
$contact = $address->contacts()->first();
if($contact){
$contactObject = new ContactObject(
$contact->reference,
$contact->phone,
'',
''
);
$this->createContactProcessor->execute($contactObject, $order_address);
}
$remark = $address->remarks()->first();
if($remark){
$remarkObject = new RemarkObject(
$remark->content,
Auth()->user()->id
);
$this->createRemarkProcessor->execute($order_address, $remarkObject);
}
return $order;
}
@@ -0,0 +1,148 @@
<?php
namespace App\Classes\Modules\Orders\Processors;
use App\Classes\Exceptions\InternalServerErrorException;
use App\Classes\Modules\Orders\Services\FetchesDataFromVTPortal;
use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject;
use App\Classes\Modules\Schedules\Services\CreatesSchedule;
use App\Classes\Modules\Transports\DataTransferObjects\TransportObject;
use App\Classes\Modules\Transports\Services\CreatesTransport;
use App\Classes\Modules\Unity\Services\UpdatesContractObligation;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
use App\Classes\ValueObjects\Constants\PackingListType;
use App\Classes\ValueObjects\Constants\TransportType;
use App\Models\PackingList;
use App\Models\Transport;
use Carbon\Carbon;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Support\Facades\Log;
use Illuminate\Http\Request;
class UpdateDoFromVTPortalProcessor
{
/** @var FetchesDataFromVTPortal */
private $fetchesDataFRomVTPortal;
/** @var FetchesAddress */
private $fetchesAddress;
/**
* FetchDeliveryListFromVTPortalProcessor constructor.
* @param FetchesDataFromVTPortal $fetchesDataFRomVTPortal
* @param FetchesAddress $fetchesAddress
*/
public function __construct(FetchesDataFromVTPortal $fetchesDataFRomVTPortal, FetchesAddress $fetchesAddress)
{
$this->fetchesDataFRomVTPortal = $fetchesDataFRomVTPortal;
$this->fetchesAddress = $fetchesAddress;
}
/**
* @param $address
* @return array
* @throws GuzzleException
*/
public function execute($address) {
if(!app()->environment(['production'])){
return [];
}
try {
$order = $address->owner()->orderBy('id', 'desc')->first();
$packing_list = $order->packingLists()->orderBy('id', 'desc')->first();
if ($packing_list) {
$contact = $address->contacts()->first();
$remark = $address->remarks()->first();
$remark = $remark ? $remark->content : 'URGENT!!! PLEASE CALL BEFORE ONE DAY DELIVERY.';
$phone = $contact ? $contact->phone : null;
$reference = $contact ? $contact->reference : null;
$status = 'On Hold';
if (in_array($packing_list->status, [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])) {
$status = 'Release';
}
$vt_do = $this->fetchesDataFRomVTPortal->clientRequest('http://portal.vtnation.com.my/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"Do","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"Filter": ["FullMarking:$contains$%js%\"' . $order->reference . '\"\u0000"]}}'), '');
$vt_do = $this->fetchesDataFRomVTPortal->getResponseBody($vt_do);
if ($vt_do) {
foreach ($vt_do->Rows as $key => $row) {
$vt_do_update = $this->fetchesDataFRomVTPortal->clientRequest(
'http://portal.vtnation.com.my/Services/DataControllerService.asmx/Execute',
'POST',
json_decode('{
"controller": "Do",
"view": "editForm1",
"args": {
"CommandName": "Update",
"CommandArgument": "Save",
"Path": "ag2/a4",
"LastCommandName": "Edit",
"Values": [
{
"Name": "ShippingAddress",
"NewValue": "' . $address->street_one . ' ' . $address->street_two . ' '. $address->district->name.' '. $address->postcode.' '.$address->state->name.' '.$address->country->name.'",
"Modified": true,
"ReadOnly": false,
"Error": null
},
{
"Name": "Attn",
"NewValue": "'.$reference.'",
"Modified": true,
"ReadOnly": false,
"Error": null
},
{
"Name": "Tel",
"NewValue": "'.$phone.'",
"Modified": true,
"ReadOnly": false,
"Error": null
},
{
"Name": "Status",
"NewValue": "' . $status . '",
"Modified": true,
"ReadOnly": false,
"Error": null
},
{
"Name": "Doremarks",
"NewValue": "'. $remark .'",
"Modified": true,
"ReadOnly": false,
"Error": null
},
{
"Name": "DoID",
"OldValue": '.$row[0].',
"NewValue": '.$row[0].',
"Modified": false,
"ReadOnly": true,
"Error": null
}
],
"Controller": "Do"
}
}'), '');
}
}
}
} catch (\Exception $exception){
return [];
}
}
}
@@ -0,0 +1,77 @@
<?php
namespace App\Classes\Modules\Orders\Processors;
use App\Classes\Exceptions\InternalServerErrorException;
use App\Classes\Modules\Orders\Services\FetchesDataFromYDPortal;
use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\PackingListType;
use Illuminate\Support\Facades\Log;
class UpdateDoFromYDPortalProcessor
{
/** @var FetchesDataFromYDPortal */
private $fetchesDataFRomYDPortal;
/** @var FetchesAddress */
private $fetchesAddress;
/**
* FetchDeliveryListFromVTPortalProcessor constructor.
* @param FetchesDataFromYDPortal $fetchesDataFRomYDPortal
* @param FetchesAddress $fetchesAddress
*/
public function __construct(FetchesDataFromYDPortal $fetchesDataFRomYDPortal, FetchesAddress $fetchesAddress)
{
$this->fetchesDataFRomYDPortal = $fetchesDataFRomYDPortal;
$this->fetchesAddress = $fetchesAddress;
}
/**
* @param $address
* @return void
* @throws InternalServerErrorException
*/
public function execute($address) {
try {
$order = $address->owner()->orderBy('id', 'desc')->first();
$packing_lists = $order->packingLists()
->where('type', PackingListType::SHIPPING_PACKING_LIST)
->where('status', '!=', ApprovalStatus::SUSPENDED)
->orderBy('id', 'desc')->get();
foreach ($packing_lists as $key => $row) {
if ($row->status === ApprovalStatus::SUSPENDED) {
continue;
}
$contact = $address->contacts()->first();
$remark = $address->remarks()->first();
$phone = $contact ? $contact->phone : null;
$reference = $contact ? $contact->reference : null;
$remark = $remark ? $remark->content : 'URGENT!!! PLEASE CALL BEFORE ONE DAY DELIVERY.';
$this->fetchesDataFRomYDPortal->clientRequest(
'http://www.yd-wl.com/api/UpdateOrderAddress.ashx',
'POST',
[
'expressno' => $row->reference,
'customers_name' => $reference,
'cellphone' => $phone,
'postcode' => $address->postcode,
'streetAddress' => $address->street_one . ' ' . $address->street_two . ' '. $address->district->name.' '. $address->post_code.' '.$address->state->name.' '.$address->country->name.' '.$address->postcode.' || '.$remark
]);
}
} catch (\Exception $exception){
throw new InternalServerErrorException('failed to approve address due to an error related to YD portal');
}
}
}
@@ -0,0 +1,29 @@
<?php
namespace App\Classes\Modules\Orders\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Models\Remark;
use App\Models\Order;
class CreatesOrderRemark extends AbstractUpdateRelationshipRecord
{
/**
* @param Company $company
* @param RemarkObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Order $order, RemarkObject $object) {
$model = new Remark();
$model->commenter_id = $object->getCommenterId();
$model->content = $object->getContent();
return $this->handler($order->remarks(), $model);
}
}
@@ -0,0 +1,37 @@
<?php
namespace App\Classes\Modules\Orders\Services;
use Psr\Http\Message\ResponseInterface;
class FetchesDataFromYDPortal
{
/**
* @param string $url
* @param string $method
* @param $body
* @return \Psr\Http\Message\ResponseInterface
*/
public function clientRequest(string $url, string $method, $body){
$client = new \GuzzleHttp\Client();
$body['apicode'] = env('YD_API_CODE');
$request = $client->requestAsync($method, $url, ['query' => $body]);
return $request->wait();
}
/**
* @param ResponseInterface $request
* @return mixed
*/
public function getResponseBody(ResponseInterface $request){
$content = $request->getBody()->getContents();
$content = str_replace("\r",'', $content);
$content = str_replace("\n",'', $content);
return json_decode($content);
}
}
@@ -0,0 +1,17 @@
<?php
namespace App\Classes\Modules\Orders\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\Order;
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
class UpdateOrderReference extends AbstractUpdateRecord
{
public function execute(Order $model, string $reference)
{
$model->reference = $reference;
return $this->handler($model);
}
}
@@ -0,0 +1,153 @@
<?php
namespace App\Classes\Modules\PackingLists\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
use App\Classes\Modules\Orders\Services\FetchesOrder;
use App\Classes\Modules\PackingLists\Services\UpdatesPackingListOwner;
use App\Classes\Modules\Transports\Services\UpdatesTransportStatus;
use App\Classes\Modules\Unity\Services\CreatesContract;
use App\Classes\Modules\Unity\Processors\ActivateContractProcessor;
use App\Classes\Modules\Unity\Processors\CreateContractEntityProcessor;
use App\Classes\Modules\Unity\Processors\AssignContractEntityProcessor;
use App\Classes\Modules\PackingLists\Services\UpdatesPackingListContractReference;
use App\Classes\Modules\Steps\Services\CreatesStep;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\PackingListType;
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
use App\Classes\Modules\Steps\DataTransferObjects\StepsObject;
use App\Http\Resources\PackingListResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class AssignPackingListOrderLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Assign Packing List Order',
'message' => 'You have successfully created a Packing List Order'
];
}
/** @var FetchesPackingList */
private $fetchesPackingList;
/** @var FetchesOrder */
private $fetchesOrder;
/** @var UpdatesPackingListOwner */
private $updatesPackingListOwner;
/** @var UpdatesTransportStatus */
private $updatesTransportStatus;
/** @var CreatesContract */
private $unityCreateContract;
/** @var ActivateContractProcessor */
private $unityActivateContract;
/** @var CreateContractEntityProcessor */
private $unityCreateContractEntity;
/** @var AssignContractEntityProcessor */
private $unityAssignContractEntity;
/** @var UpdatesPackingListContractReference */
private $updatesPackingListContractReference;
/** @var CreatesStep */
private $createsStep;
/**
* CreateRemarkLogic constructor.
* @param FetchesPackingList $fetchesPackingList
* @param FetchesOrder $fetchesOrder
* @param UpdatesPackingListOwner $updatesPackingListOwner
* @param UpdatesTransportStatus $updatesTransportStatus
* @param CreatesContract $unityCreateContract
* @param ActivateContractProcessor $unityActivateContract
* @param CreateContractEntityProcessor $unityCreateContractEntity
* @param AssignContractEntityProcessor $unityAssignContractEntity
* @param UpdatesPackingListContractReference $updatesPackingListContractReference
* @param CreatesStep $createsStep
*/
public function __construct(FetchesPackingList $fetchesPackingList, FetchesOrder $fetchesOrder, UpdatesPackingListOwner $updatesPackingListOwner, UpdatesTransportStatus $updatesTransportStatus, CreatesContract $unityCreateContract, ActivateContractProcessor $unityActivateContract, CreateContractEntityProcessor $unityCreateContractEntity, AssignContractEntityProcessor $unityAssignContractEntity, UpdatesPackingListContractReference $updatesPackingListContractReference, CreatesStep $createsStep)
{
$this->fetchesPackingList = $fetchesPackingList;
$this->fetchesOrder = $fetchesOrder;
$this->updatesPackingListOwner = $updatesPackingListOwner;
$this->updatesTransportStatus = $updatesTransportStatus;
$this->unityCreateContract = $unityCreateContract;
$this->unityActivateContract = $unityActivateContract;
$this->unityCreateContractEntity = $unityCreateContractEntity;
$this->unityAssignContractEntity = $unityAssignContractEntity;
$this->updatesPackingListContractReference = $updatesPackingListContractReference;
$this->createsStep = $createsStep;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request) : JsonResponse
{
$warehouse_packing_list = $this->fetchesPackingList->execute([
'id' => $request->route('id'),
'type' => PackingListType::WAREHOUSE_RECEIVE_LIST
]);
$order = $this->fetchesOrder->execute(['reference' => $request->route('reference')]);
$warehouse_packing_list = $this->updatesPackingListOwner->execute($warehouse_packing_list, $order);
$transport = $warehouse_packing_list->transports()->first();
$transport = $this->updatesTransportStatus->execute($transport, ApprovalStatus::APPROVED);
$contract = $this->unityCreateContract->execute();
$contractReference = $contract->hash_id;
$contractObligations = $contract->contract_obligation_list;
$this->unityActivateContract->execute($contractReference);
$supervisorHashId = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->unity_hash_id;
$supervisorContractEntity = $this->unityCreateContractEntity->execute($contractReference, $supervisorHashId);
$order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->update(['entity_hash_id' => $supervisorContractEntity->hash_id, 'entity_signature' => $supervisorContractEntity->entity_signature_hash_id]);
$importerContractEntity = $this->unityCreateContractEntity->execute($contractReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->appointee->unity_hash_id);
$order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->update(['entity_hash_id' => $importerContractEntity->hash_id, 'entity_signature' => $importerContractEntity->entity_signature_hash_id]);
$this->unityAssignContractEntity->execute($supervisorContractEntity->hash_id, $contractObligations);
$packing_list = $this->fetchesPackingList->execute([
'reference' => $warehouse_packing_list->reference,
'type' => PackingListType::SHIPPING_PACKING_LIST
]);
$warehouse_packing_list = $this->updatesPackingListOwner->execute($packing_list, $order);
$this->updatesPackingListContractReference->execute($packing_list, $contractReference);
foreach($contractObligations as $obligation) {
$stepObject = new StepsObject($order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->id, $obligation->reference, $obligation->sequence, $obligation->hash_id);
$this->createsStep->execute($packing_list, $stepObject);
}
return $this->resourceResponse(new PackingListResource($warehouse_packing_list));
}
}
@@ -0,0 +1,67 @@
<?php
namespace App\Classes\Modules\PackingLists\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\PackingLists\Services\CreatesPackingListRemark;
use App\Classes\Modules\Remarks\Standards\Rules\CanCreateRemark;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
use App\Http\Resources\RemarkResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class AssignPackingListRemarkLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Created Packing List Remark',
'message' => 'You have successfully created a new Packing List Remark'
];
}
/** @var CanCreateRemark */
private $canCreateRemark;
/** @var CreatesPackingListRemark */
private $createsPackingListRemark;
/** @var FetchesPackingList */
private $fetchesPackingList;
/**
* CreateRemarkLogic constructor.
* @param CanCreateRemark $canCreateRemark
* @param CreatesPackingListRemark $createsPackingListRemark
*/
public function __construct(CanCreateRemark $canCreateRemark, CreatesPackingListRemark $createsPackingListRemark, FetchesPackingList $fetchesPackingList)
{
$this->canCreateRemark = $canCreateRemark;
$this->createsPackingListRemark = $createsPackingListRemark;
$this->fetchesPackingList = $fetchesPackingList;
}
/**
* @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
{
$object = new RemarkObject(
$request->input('content'),
$request->route('id')
);
$this->canCreateRemark->passes($object);
$query = $this->createsPackingListRemark->execute($this->fetchesPackingList->execute(['id' => $request->route('id')]), $object);
return $this->resourceResponse( new RemarkResource($query));
}
}
@@ -0,0 +1,68 @@
<?php
namespace App\Classes\Modules\PackingLists\ControllersLogic\Containers;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\PackingLists\Services\Containers\CreatesContainerRemark;
use App\Classes\Modules\Remarks\Standards\Rules\CanCreateRemark;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
use App\Http\Resources\RemarkResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class AssignContainerRemarkLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Created Order Remark',
'message' => 'You have successfully created a new Order Remark'
];
}
/** @var CanCreateRemark */
private $canCreateRemark;
/** @var CreatesContainerRemark */
private $createsContainerRemark;
/** @var FetchesContainer */
private $fetchesContainer;
/**
* CreateRemarkLogic constructor.
* @param CanCreateRemark $canCreateRemark
* @param CreatesContainerRemark $createsContainerRemark
*/
public function __construct(CanCreateRemark $canCreateRemark, CreatesContainerRemark $createsContainerRemark, FetchesContainer $fetchesContainer)
{
$this->canCreateRemark = $canCreateRemark;
$this->createsContainerRemark = $createsContainerRemark;
$this->fetchesContainer = $fetchesContainer;
}
/**
* @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
{
$object = new RemarkObject(
$request->input('content'),
$request->route('id')
);
$this->canCreateRemark->passes($object);
$query = $this->createsContainerRemark->execute($this->fetchesContainer->execute(['id' => $request->route('id')]), $object);
return $this->resourceResponse( new RemarkResource($query));
}
}
@@ -20,8 +20,8 @@ class CreateContainerRemarkLogic extends AbstractControllerLogic
*/
protected function notification():array {
return [
'title' => 'Created Container',
'message' => 'You have successfully created a new Container'
'title' => 'Created Container Remark',
'message' => 'You have successfully created a new Container Remark'
];
}
@@ -53,9 +53,9 @@ class CreateContainerRemarkLogic extends AbstractControllerLogic
public function logic(Request $request) : JsonResponse
{
$container = $this->fetchesContainer->execute(['id' => $request->input('container_id')]);
$container = $this->fetchesContainer->execute(['id' => $request->route('id')]);
$object = new RemarkObject($request->input('content'), 1);
$object = new RemarkObject($request->input('content'), auth()->user()->id);
$this->createRemarkProcessor->execute($container, $object);
@@ -45,21 +45,16 @@ class FetchContainerLogic 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->canFetchContainer->passes();
$this->canFetchContainer->passes();
$query = $this->fetchesContainer->execute(['id' => $request->route('id'), 'with_packing_lists' => true]);
$query = $this->fetchesContainer->execute(['id' => $request->route('id'), 'with_packing_lists' => true]);
return $this->resourceResponse(new ContainerResource($query));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
return $this->resourceResponse(new ContainerResource($query));
}
@@ -6,6 +6,7 @@ namespace App\Classes\Modules\PackingLists\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\PackingLists\Services\ListsPackingLists;
use App\Classes\Modules\PackingLists\Standards\Rules\CanListPackingLists;
use App\Http\Resources\PackingListNullOrderResource;
use App\Http\Resources\PackingListResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
@@ -49,18 +50,11 @@ class ListPackingListsLogic extends AbstractControllerLogic
*/
public function logic(Request $request) : JsonResponse
{
try {
$this->canListPackingLists->passes();
$this->canListPackingLists->passes();
$query = $this->listsPackingLists->execute($this->listsPackingLists->deserializeFilters($request->input('filters')));
return $this->collectionResponse(PackingListResource::collection($query));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
$query = $this->listsPackingLists->execute($this->listsPackingLists->deserializeFilters($request->input('filters')));
return $this->collectionResponse(PackingListResource::collection($query));
}
}
@@ -45,21 +45,17 @@ class ListPackagesLogic 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->canListPackages->passes();
$this->canListPackages->passes();
$query = $this->listsPackages->execute($this->listsPackages->deserializeFilters($request->input('filters')));
$query = $this->listsPackages->execute($this->listsPackages->deserializeFilters($request->input('filters')));
return $this->collectionResponse(PackageResource::collection($query));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
return $this->collectionResponse(PackageResource::collection($query));
}
@@ -4,11 +4,15 @@ namespace App\Classes\Modules\PackingLists\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Orders\Processors\UpdateDoFromYDPortalProcessor;
use App\Classes\Modules\PackingLists\Services\UpdatesPackingList;
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
use App\Classes\Modules\PackingLists\Services\UpdatesPackingListStatus;
use App\Classes\Modules\PackingLists\Standards\Rules\CanUpdatePackingList;
use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject;
use App\Classes\Modules\Orders\Processors\UpdateDoFromVTPortalProcessor;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
use App\Http\Resources\PackingListResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
@@ -34,29 +38,48 @@ class UpdatePackingListStatusLogic extends AbstractControllerLogic
/** @var UpdatesPackingListStatus */
private $updatesPackingListStatus;
/** @var UpdateDoFromVTPortalProcessor */
private $updateDoFromVTPortalProcessor;
/** @var UpdateDoFromYDPortalProcessor */
private $updateDoFromYDPortalProcessor ;
/**
* UpdatePackingListStatusLogic constructor.
* @param FetchesPackingList $fetchesPackingList
* @param UpdatesPackingListStatus $updatesPackingListStatus
* @param UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor
* @param UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor
*/
public function __construct(FetchesPackingList $fetchesPackingList, UpdatesPackingListStatus $updatesPackingListStatus)
public function __construct(FetchesPackingList $fetchesPackingList, UpdatesPackingListStatus $updatesPackingListStatus, UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor, UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor)
{
$this->fetchesPackingList = $fetchesPackingList;
$this->updatesPackingListStatus = $updatesPackingListStatus;
$this->updateDoFromVTPortalProcessor = $updateDoFromVTPortalProcessor;
$this->updateDoFromYDPortalProcessor = $updateDoFromYDPortalProcessor;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\InternalServerErrorException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function logic(Request $request) : JsonResponse
{
$packingList = $this->fetchesPackingList->execute(['id' => $request->route('id')]);
$query = $this->updatesPackingListStatus->execute($packingList, $request->route('status'));
$packing_list = $this->updatesPackingListStatus->execute($packingList, $request->route('status'));
$address = $packing_list->owner()->first()->addresses()->where('status', ApprovalStatus::APPROVED)->first();
return $this->resourceResponse(new PackingListResource($query));
// $appointee = $address->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id;
$this->updateDoFromVTPortalProcessor->execute($address);
$this->updateDoFromYDPortalProcessor->execute($address);
return $this->resourceResponse(new PackingListResource($packing_list));
}
}
@@ -33,7 +33,7 @@ class CreatePackageProcessor
/**
* @param PackageObject $object
* @param PackingList $packingList
* @return \Illuminate\Database\Eloquent\Model
* @return void
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
@@ -41,7 +41,18 @@ class CreatePackageProcessor
$this->canCreatePackage->passes($object);
return $this->createsPackage->execute($object, $packingList);
$this->createsPackage->execute($object, $packingList);
/** @var PackingList $replica */
$replica = $packingList->packingLists()->first();
if($replica) {
$modificationValue = 1;
$packageObject = new PackageObject($object->getType(), $object->getDescription(), $object->getWidth() + $modificationValue, $object->getHeight() + $modificationValue, $object->getLength() + $modificationValue, $object->getWeight(), $object->getQuantity(), $object->getStatus());
$package = $this->createsPackage->execute($packageObject, $replica);
}
return ;
}
@@ -7,6 +7,10 @@ use App\Classes\General\Interfaces\Packable;
use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject;
use App\Classes\Modules\PackingLists\Services\CreatesPackingList;
use App\Classes\Modules\PackingLists\Standards\Rules\CanCreatePackingList;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
use App\Classes\ValueObjects\Constants\PackingListType;
use App\Models\PackingList;
class CreatePackingListProcessor
{
@@ -41,7 +45,17 @@ class CreatePackingListProcessor
public function execute(PackingListObject $object, Packable $packable){
$this->canCreatePackingList->passes($object);
return $this->createsPackingList->execute($object, $packable);
/** @var PackingList $packingList */
$packingList = $this->createsPackingList->execute($object, $packable);
$appointee_id = $packingList->owner_id == 1 ? 2037 : $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id;
$type = $object->getType() === PackingListType::SHIPPING_PACKING_LIST ? PackingListType::SHIPPING_PACKING_LIST_REPLICA : PackingListType::WAREHOUSE_RECEIVE_LIST_REPLICA;
/** create packing list replica */
$object = new PackingListObject($object->getReference().'_01', $appointee_id, $type, ApprovalStatus::PENDING_SUBMISSION);
$this->createsPackingList->execute($object, $packingList);
return $packingList;
}
}
@@ -80,6 +80,10 @@ class FetchContainersStatusUpdateFromVTPortalProcessor
$containerDetails = $this->fetchesDataFRomVTPortal->getResponseBody($containerDetailsRequest);
if(!$containerDetails->Rows){
continue;
}
$containerDetails = $containerDetails->Rows[0];
if(!$eta = $containerDetails[3]){
@@ -66,6 +66,10 @@ class FetchDeliveryListFromVTPortalProcessor
$shippingPackingLists = $this->fetchesDataFRomVTPortal->getResponseBody($shippingPackingListsRequest);
if(!array_key_exists(0, $shippingPackingLists->Rows)){
continue;
}
$shippingPackingList = $shippingPackingLists->Rows[0];
if(!$shippingPackingList[9] && !$shippingPackingList[10]) {
@@ -87,6 +91,7 @@ class FetchDeliveryListFromVTPortalProcessor
$deliveryStep->update(['status' => ApprovalStatus::COMPLETED]);
} catch (GuzzleException $exception) {
dd($exception);
continue;
}
@@ -21,6 +21,7 @@ use App\Classes\Modules\Unity\Services\CreatesContract;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\ContainerTypes;
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
use App\Classes\ValueObjects\Constants\RoleTypes;
use App\Classes\ValueObjects\Constants\PackingListType;
use App\Models\Order;
use App\Models\PackingList;
@@ -141,7 +142,6 @@ class FetchLoadedContainersFromVTPortalProcessor
$containers = $this->fetchesDataFRomVTPortal->getResponseBody($containersRequest);
foreach ($containers->Rows as $container){
$filter = '["ContainerID:=%js%'.$container[11].'"]';
$containerDetailRequest = $this->fetchesDataFRomVTPortal->clientRequest('http://portal.vtnation.com.my/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VPodetailparcel","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"CreatedOn asc","Filter":'.$filter.'}}'), '');
@@ -201,7 +201,7 @@ class FetchLoadedContainersFromVTPortalProcessor
$connection = $order->companyModule->connections()->first();
$marking = $connection->invitee_reference;
$packingListObject = new PackingListObject($packingListReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id, PackingListType::SHIPPING_PACKING_LIST, (int) filter_var($marking, FILTER_SANITIZE_NUMBER_INT) <= 1000 ? ApprovalStatus::PENDING_VERIFICATION : ApprovalStatus::SUSPENDED, $contractReference);
$packingListObject = new PackingListObject($packingListReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id, PackingListType::SHIPPING_PACKING_LIST, ApprovalStatus::SUSPENDED, $contractReference);
/** @var PackingList $packingList */
$packingList = $this->createPackingListProcessor->execute($packingListObject, $order);
@@ -212,7 +212,6 @@ class FetchLoadedContainersFromVTPortalProcessor
$this->createsStep->execute($packingList, $stepObject);
}
}
}
@@ -0,0 +1,407 @@
<?php
namespace App\Classes\Modules\PackingLists\Processors;
use App\Classes\Exceptions\ResourceNotFoundException;
use App\Classes\Modules\Companies\Services\FetchesCompanyModule;
use App\Classes\Modules\Orders\Services\FetchesDataFromYDPortal;
use App\Classes\Modules\Orders\Services\FetchesOrder;
use App\Classes\Modules\PackingLists\DataTransferObjects\ContainerObject;
use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject;
use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject;
use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject;
use App\Classes\Modules\Schedules\Services\CreatesSchedule;
use App\Classes\Modules\Steps\DataTransferObjects\StepsObject;
use App\Classes\Modules\Steps\Services\CreatesStep;
use App\Classes\Modules\Transports\DataTransferObjects\TransportObject;
use App\Classes\Modules\Transports\Services\CreatesTransport;
use App\Classes\Modules\Unity\Processors\ActivateContractProcessor;
use App\Classes\Modules\Unity\Processors\AssignContractEntityProcessor;
use App\Classes\Modules\Unity\Processors\CreateContractEntityProcessor;
use App\Classes\Modules\Unity\Services\CreatesContract;
use App\Classes\Modules\Unity\Services\UpdatesContractObligation;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\ContainerTypes;
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
use App\Classes\ValueObjects\Constants\PackageType;
use App\Classes\ValueObjects\Constants\PackingListType;
use App\Classes\ValueObjects\Constants\TransportType;
use App\Models\Container;
use App\Models\Order;
use App\Models\PackingList;
use App\Models\Transport;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class FetchOrderListsFromYdPortalProcessor
{
/** @var FetchesDataFromYDPortal */
private $fetchesDataFRomYDPortal;
/** @var FetchesOrder */
private $fetchesOrder;
/** @var UpdatesContractObligation */
private $updatesContractObligations;
/** @var CreatePackingListProcessor */
private $createPackingListProcessor;
/** @var CreatePackageProcessor */
private $createPackageProcessor;
/** @var CreatesTransport */
private $createsTransport;
/** @var CreatesSchedule */
private $createsSchedule;
/** @var FetchesContainer */
private $fetchesContainer;
/** @var FetchesPackingList */
private $fetchesPackingList;
/** @var FetchesCompanyModule */
private $fetchesCompanyModule;
/** @var CreateContainerProcessor */
private $createContainerProcessor;
/** @var CreatesContract */
private $unityCreateContract;
/** @var AssignContractEntityProcessor */
private $unityAssignContractEntity;
/** @var CreateContractEntityProcessor */
private $unityCreateContractEntity;
/** @var CreatesStep */
private $createsStep;
/** @var ActivateContractProcessor */
private $unityActivateContract;
/**
* FetchOrderListsFromYdPortalProcessor constructor.
* @param FetchesDataFromYDPortal $fetchesDataFRomYDPortal
* @param FetchesOrder $fetchesOrder
* @param UpdatesContractObligation $updatesContractObligations
* @param CreatePackingListProcessor $createPackingListProcessor
* @param CreatePackageProcessor $createPackageProcessor
* @param CreatesTransport $createsTransport
* @param CreatesSchedule $createsSchedule
* @param FetchesContainer $fetchesContainer
* @param FetchesPackingList $fetchesPackingList
* @param FetchesCompanyModule $fetchesCompanyModule
* @param CreateContainerProcessor $createContainerProcessor
* @param CreatesContract $unityCreateContract
* @param AssignContractEntityProcessor $unityAssignContractEntity
* @param CreateContractEntityProcessor $unityCreateContractEntity
* @param CreatesStep $createsStep
* @param ActivateContractProcessor $unityActivateContract
*/
public function __construct(FetchesDataFromYDPortal $fetchesDataFRomYDPortal, FetchesOrder $fetchesOrder, UpdatesContractObligation $updatesContractObligations, CreatePackingListProcessor $createPackingListProcessor, CreatePackageProcessor $createPackageProcessor, CreatesTransport $createsTransport, CreatesSchedule $createsSchedule, FetchesContainer $fetchesContainer, FetchesPackingList $fetchesPackingList, FetchesCompanyModule $fetchesCompanyModule, CreateContainerProcessor $createContainerProcessor, CreatesContract $unityCreateContract, AssignContractEntityProcessor $unityAssignContractEntity, CreateContractEntityProcessor $unityCreateContractEntity, CreatesStep $createsStep, ActivateContractProcessor $unityActivateContract)
{
$this->fetchesDataFRomYDPortal = $fetchesDataFRomYDPortal;
$this->fetchesOrder = $fetchesOrder;
$this->updatesContractObligations = $updatesContractObligations;
$this->createPackingListProcessor = $createPackingListProcessor;
$this->createPackageProcessor = $createPackageProcessor;
$this->createsTransport = $createsTransport;
$this->createsSchedule = $createsSchedule;
$this->fetchesContainer = $fetchesContainer;
$this->fetchesPackingList = $fetchesPackingList;
$this->fetchesCompanyModule = $fetchesCompanyModule;
$this->createContainerProcessor = $createContainerProcessor;
$this->unityCreateContract = $unityCreateContract;
$this->unityAssignContractEntity = $unityAssignContractEntity;
$this->unityCreateContractEntity = $unityCreateContractEntity;
$this->createsStep = $createsStep;
$this->unityActivateContract = $unityActivateContract;
}
/**
* @param Carbon|null $start
* @param Carbon|null $end
* @return void
*/
public function execute(?Carbon $start = null, ?Carbon $end = null)
{
try {
$start = $start ? $start : Carbon::now()->subMonths(2);
$startLimit = Carbon::parse('01-12-2021');
if($start->isBefore($startLimit)){
$start = $startLimit;
}
$end = $end ? $end : Carbon::now();
$orderRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/GetOrderList.ashx', 'GET', [
'begintime' => $start->timestamp,
'endtime' => $end->timestamp,
]);
$rows = $this->fetchesDataFRomYDPortal->getResponseBody($orderRequest);
foreach($rows->data as $row){
$containerReference = null;
$loadingDate = null;
$unstuffingDate = null;
$deliveryDate = null;
$etd = null;
$eta = null;
$delayDate = null;
$trackingRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/ApiTracking.ashx', 'GET', [
'trakingno' => $row->expressno
]);
$rows = $this->fetchesDataFRomYDPortal->getResponseBody($trackingRequest);
foreach (array_reverse($rows->data) as $trackingRow) {
if ($trackingRow->tracking === '货物已送达仓库准备入库中') {
$receiveDate = Carbon::parse($trackingRow->trackingtime);
}
if (strpos($trackingRow->tracking, '货物装柜完成。') !== false) {
$tracking = explode(':', $trackingRow->tracking);
$containerReference = explode('预计到港时间', $tracking[1])[0];
$loadingDate = Carbon::parse($trackingRow->trackingtime);
$etd = Carbon::parse($tracking[2])->subDays(5);
$eta = Carbon::parse($tracking[2]);
}
if (strpos($trackingRow->tracking, '预计船时间为') !== false) {
$tracking = explode('预计船时间为', $trackingRow->tracking);
$delayDate = Carbon::parse(explode('日', $tracking[1])[0]);
}
if (strpos($trackingRow->tracking, '预计开船为') !== false) {
$tracking = explode('预计开船为', $trackingRow->tracking);
$delayDate = Carbon::parse(explode('日', $tracking[1])[0]);
}
if ($trackingRow->tracking === '货物已进目的港仓库') {
$unstuffingDate = Carbon::parse($trackingRow->trackingtime);
}
if ($trackingRow->tracking === '货物已派送完成') {
$deliveryDate = Carbon::parse($trackingRow->trackingtime);
}
}
$customerno = preg_split('(-|\(|\)|\/)', $row->customerno);
$orderNumber = $customerno[array_key_last($customerno)];
$allow_contract = true;
try {
$order = $this->fetchesOrder->execute(['reference' => $orderNumber]);
} catch (ResourceNotFoundException $exception) {
try {
$order = $this->fetchesOrder->execute(['reference' => substr($orderNumber, -9)]);
} catch (ResourceNotFoundException $exception) {
$order = $this->fetchesCompanyModule->execute(['id' => 1]);
$allow_contract = false;
}
}
DB::beginTransaction();
$packingListReference = $row->expressno;
try{
$packingList = $this->fetchesPackingList->execute(['reference' => $row->expressno, 'type' => PackingListType::SHIPPING_PACKING_LIST]);
$packingList->packages()->delete();
$replica = $packingList->packingLists()->where('type', PackingListType::SHIPPING_PACKING_LIST_REPLICA)->first();
if($replica) $replica->packages()->delete();
$warehouseReceiveList = $this->fetchesPackingList->execute(['reference' => $row->expressno, 'type' => PackingListType::WAREHOUSE_RECEIVE_LIST]);
$warehouseReceiveList->packages()->delete();
$replica = $warehouseReceiveList->packingLists()->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST_REPLICA)->first();
if($replica) $replica->packages()->delete();
} catch (ResourceNotFoundException $exception) {
if (!$allow_contract) {
$appointee_id = 2037;
} else {
$appointee_id = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id;
}
$warehouseReceiveObject = new PackingListObject($packingListReference, $appointee_id, PackingListType::WAREHOUSE_RECEIVE_LIST, $allow_contract ? ApprovalStatus::APPROVED : ApprovalStatus::REJECTED);
/** @var PackingList $warehouseReceiveList */
$warehouseReceiveList = $this->createPackingListProcessor->execute($warehouseReceiveObject, $order);
$transportObject = new TransportObject(TransportType::LAND, null, $row->kuaidilist, Carbon::parse($receiveDate), Carbon::parse($receiveDate), $allow_contract ? ApprovalStatus::APPROVED : ApprovalStatus::REJECTED);
$transport = $this->createsTransport->execute($transportObject, $warehouseReceiveList);
if ($allow_contract) {
$contract = $this->unityCreateContract->execute();
$contractReference = $contract->hash_id;
$contractObligations = $contract->contract_obligation_list;
$this->unityActivateContract->execute($contractReference);
$supervisorHashId = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->unity_hash_id;
$supervisorContractEntity = $this->unityCreateContractEntity->execute($contractReference, $supervisorHashId);
$order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->update(['entity_hash_id' => $supervisorContractEntity->hash_id, 'entity_signature' => $supervisorContractEntity->entity_signature_hash_id]);
$importerContractEntity = $this->unityCreateContractEntity->execute($contractReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->appointee->unity_hash_id);
$order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->update(['entity_hash_id' => $importerContractEntity->hash_id, 'entity_signature' => $importerContractEntity->entity_signature_hash_id]);
$this->unityAssignContractEntity->execute($supervisorContractEntity->hash_id, $contractObligations);
}
$packingListObject = new PackingListObject($packingListReference, $appointee_id, PackingListType::SHIPPING_PACKING_LIST, ApprovalStatus::SUSPENDED, !$allow_contract ? null : $contractReference);
/** @var PackingList $packingList */
$packingList = $this->createPackingListProcessor->execute($packingListObject, $order);
if ($allow_contract) {
foreach ($contractObligations as $obligation) {
$stepObject = new StepsObject($order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->id, $obligation->reference, $obligation->sequence, $obligation->hash_id);
$this->createsStep->execute($packingList, $stepObject);
}
}
}
foreach($row->deliverysize as $package) {
$packageObject = new PackageObject(PackageType::CARTON, $row->goodname, (float) $package->width, (float) $package->height, (float) $package->length, 0, (float) $package->num, ApprovalStatus::APPROVED);
$this->createPackageProcessor->execute($packageObject, $warehouseReceiveList);
$this->createPackageProcessor->execute($packageObject, $packingList);
}
$weightCbm = (float) $row->weight / 500;
$overWeightCbm = $weightCbm - $packingList->packages()->sum(DB::raw('(width/100) * (height/100) * (length/100) * quantity'));
if($overWeightCbm > 0){
$measurement = round($overWeightCbm ** (1/3) * 100, 2);
$packageObject = new PackageObject(PackageType::OVER_WEIGHT, 'Overweight CBM', (float) $measurement, (float) $measurement, (float) $measurement, 0, 1, ApprovalStatus::APPROVED);
$this->createPackageProcessor->execute($packageObject, $packingList);
}
if($order instanceof Order){
$marking = $order->companyModule->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference;
if(!in_array($marking, ['2192KAA', '2353GFE', '6866DTR', '153DSR', '1291NSC', '8288MIB'])){
$this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/confirmsendorder.ashx', 'GET', [
'expressno' => $row->expressno
]);
}
}
if($containerReference) {
try {
$container = $this->fetchesContainer->execute(['reference' => $containerReference]);
$container->packingLists()->detach($packingList);
$container->packingLists()->attach($packingList);
} catch (ResourceNotFoundException $exception){
if (!$allow_contract) {
$appointee_id = 2037;
}
else {
$appointee_id = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id;
}
$originWarehouse = $this->fetchesCompanyModule->execute(['id' => $appointee_id]);
$containerObject = new ContainerObject($containerReference, '', '', ContainerTypes::FORTY_FEET_DRY_CONTAINER, $loadingDate, ApprovalStatus::PENDING_VERIFICATION);
/** @var Container $container */
$container = $this->createContainerProcessor->execute($containerObject, $originWarehouse);
$container->packingLists()->detach($packingList);
$container->packingLists()->attach($packingList);
$transport = $container->transports()->first();
if(!$transport){
$transportObject = new TransportObject(TransportType::SEA, null, null, $etd, null, ApprovalStatus::APPROVED);
/** @var Transport $transport */
$transport = $this->createsTransport->execute($transportObject, $container);
$this->createsSchedule->execute($transport, new ScheduleObject($etd, $eta, ApprovalStatus::APPROVED));
}
}
if($delayDate){
$transport = $container->transports()->first();
if(!$transport->schedules()->where('eta', '=', $delayDate)->first()) {
$etd = $transport->schedules()->where('status', '=', ApprovalStatus::APPROVED)->first()->etd;
$transport->schedules()->update(['status' => ApprovalStatus::EXPIRED]);
$this->createsSchedule->execute($transport, new ScheduleObject($etd, $delayDate, ApprovalStatus::APPROVED));
}
}
if($unstuffingDate && $container->status !== ApprovalStatus::COMPLETED){
$container->update(['status' => ApprovalStatus::COMPLETED]);
$container->transports()->first()->update(['drop_date' => $unstuffingDate, 'status' => ApprovalStatus::COMPLETED]);
/** @var PackingList $packingList */
foreach($container->packingLists as $packingList){
if($packingList->status === ApprovalStatus::PENDING_VERIFICATION){
$packingList->status = ApprovalStatus::APPROVED;
$packingList->save();
}
$signature = $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->entity_sigiture;
foreach($packingList->steps()->where('reference', '!=', 'DELIVERY')->get() as $step){
$this->updatesContractObligations->execute($signature, $step->obligation_hash_id);
$step->update(['status' => ApprovalStatus::COMPLETED]);
}
}
}
}
if($deliveryDate){
if($packingList->transports){
continue;
}
$packingList->status = ApprovalStatus::COMPLETED;
$packingList->save();
$deliveryDate = Carbon::parse($deliveryDate);
$transportObject = new TransportObject(TransportType::LAND, null, null, $deliveryDate, $deliveryDate, ApprovalStatus::APPROVED);
/** @var Transport $transport */
$transport = $this->createsTransport->execute($transportObject, $packingList);
$this->createsSchedule->execute($transport, new ScheduleObject($deliveryDate, $deliveryDate, ApprovalStatus::APPROVED));
$deliveryStep = $packingList->steps()->where('reference', '=', 'LAST_MILE_DELIVERY')->first();
$signature = $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->entity_sigiture;
$this->updatesContractObligations->execute($signature, $deliveryStep->obligation_hash_id);
$deliveryStep->update(['status' => ApprovalStatus::COMPLETED]);
}
DB::commit();
echo 'successful';
}
} catch (\Exception $exception) {
Log::debug($exception);
}
}
}
@@ -51,7 +51,6 @@ class FetchPackingListFromVTPortalProcessor
})->get();
foreach($packingLists as $packingList){
try {
DB::beginTransaction();
@@ -60,18 +59,24 @@ class FetchPackingListFromVTPortalProcessor
$shippingPackingListsRequest = $this->fetchesDataFRomVTPortal->clientRequest('http://portal.vtnation.com.my/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VPodetailparcel","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"CreatedOn asc","Filter":'.$filter.'}}'), '');
$shippingPackingLists = $this->fetchesDataFRomVTPortal->getResponseBody($shippingPackingListsRequest);
if(count($shippingPackingLists->Rows)) {
$packingList->packages()->delete();
$packingList->packages()->delete();
$replica = $packingList->packingLists()->where('type', PackingListType::SHIPPING_PACKING_LIST_REPLICA)->first();
if($replica) $replica->packages()->delete();
foreach($shippingPackingLists->Rows as $shippingPackingList){
if(!$shippingPackingList[22]) {
continue;
foreach($shippingPackingLists->Rows as $shippingPackingList){
if(!$shippingPackingList[22]) {
continue;
}
$packageObject = new PackageObject(PackageType::CARTON, $shippingPackingList[19], $shippingPackingList[31], $shippingPackingList[30], $shippingPackingList[29], 0, $shippingPackingList[22], ApprovalStatus::APPROVED);
$this->createPackageProcessor->execute($packageObject, $packingList);
}
$packageObject = new PackageObject(PackageType::CARTON, $shippingPackingList[19], $shippingPackingList[31], $shippingPackingList[30], $shippingPackingList[29], 0, $shippingPackingList[22], ApprovalStatus::APPROVED);
$this->createPackageProcessor->execute($packageObject, $packingList);
}
DB::commit();
} catch (GuzzleException $exception) {
continue;
@@ -206,10 +206,7 @@ class FetchWarehouseReceiveListFromVTPortalProcessor
if(!$packingList) {
$packingList = $this->createPackingListProcessor->execute($packingListObject, $order);
$transportObject = new TransportObject(TransportType::LAND, null, $tracking, Carbon::parse($receiveDate), Carbon::parse($receiveDate), ApprovalStatus::APPROVED);
$this->createsTransport->execute($transportObject, $packingList);
}
@@ -220,14 +217,14 @@ class FetchWarehouseReceiveListFromVTPortalProcessor
$this->createsSchedule->execute($transport, new ScheduleObject(Carbon::parse($receiveDate), Carbon::parse($receiveDate), ApprovalStatus::APPROVED));
/** @var PackingList $replica */
$replica = $packingList->packingLists()->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST_REPLICA)->first();
$packingList->packages()->delete();
if($replica) $replica->packages()->delete();
$packageObject = new PackageObject(PackageType::CARTON, $description, $measurement, $measurement, $measurement, 0, $quantity, ApprovalStatus::APPROVED);
$this->createPackageProcessor->execute($packageObject, $packingList);
}
} catch (\Exception $exception){
Log::error($exception->getMessage());
}
@@ -0,0 +1,29 @@
<?php
namespace App\Classes\Modules\PackingLists\Services\Containers;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Models\Remark;
use App\Models\Container;
class CreatesContainerRemark extends AbstractUpdateRelationshipRecord
{
/**
* @param Company $company
* @param RemarkObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Container $container, RemarkObject $object) {
$model = new Remark();
$model->commenter_id = $object->getCommenterId();
$model->content = $object->getContent();
return $this->handler($container->remarks(), $model);
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Classes\Modules\PackingLists\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\General\Interfaces\Packable;
use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject;
use App\Models\PackingList;
class CreatesNullOrderPackingList extends AbstractUpdateRecord
{
/**
* @param PackingListObject $object
* @param Packable $packable
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(PackingListObject $object) {
$model = new PackingList();
$model->reference = $object->getReference();
$model->claimant_id = $object->getClaimantId();
$model->type = $object->getType();
$model->status = $object->getStatus();
$model->reference_contract = $object->getContractReference();
$model->owner_type = 'App\Models\Order';
$model->owner_id = 1;
return $this->handler($model);
}
}
@@ -23,6 +23,7 @@ class CreatesPackingList extends AbstractUpdateRelationshipRecord
$model->claimant_id = $object->getClaimantId();
$model->type = $object->getType();
$model->status = $object->getStatus();
$model->reference_contract = $object->getContractReference();
return $this->handler($packable->packingLists(), $model);
}
@@ -0,0 +1,29 @@
<?php
namespace App\Classes\Modules\PackingLists\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Models\Remark;
use App\Models\PackingList;
class CreatesPackingListRemark extends AbstractUpdateRelationshipRecord
{
/**
* @param Company $company
* @param RemarkObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(PackingList $packingList, RemarkObject $object) {
$model = new Remark();
$model->commenter_id = $object->getCommenterId();
$model->content = $object->getContent();
return $this->handler($packingList->remarks(), $model);
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Classes\Modules\PackingLists\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\PackingList;
class UpdatesPackingListContractReference extends AbstractUpdateRecord
{
/**
* @param PackingList $model
* @param int $status
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(PackingList $model, string $reference_contract) {
$model->reference_contract = $reference_contract;
return $this->handler($model);
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Classes\Modules\PackingLists\Services;
use App\Classes\General\Interfaces\Packable;
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
use App\Models\PackingList;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
class UpdatesPackingListOwner extends AbstractUpdateRelationshipRecord
{
/**
* @param PackingList $model
* @param Packable $packable
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(PackingList $model, Packable $packable) {
return $this->handler($packable->packingLists(), $model);
}
}
@@ -4,18 +4,16 @@ namespace App\Classes\Modules\Remarks\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Remarks\Services\CreatesRemark;
use App\Classes\Modules\Remarks\Standards\Rules\CanCreateRemark;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\Accounts\Services\FetchesUser;
use App\Http\Resources\RemarkResource;
use ErrorException;
use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use App\Classes\Exceptions\MalformedRequestException;
use App\Http\Resources\RemarkResource;
class CreateRemarkLogic extends AbstractControllerLogic
{
/**
* @return array
*/
@@ -26,25 +24,16 @@ class CreateRemarkLogic extends AbstractControllerLogic
];
}
/** @var CanCreateRemark */
private $canCreateRemark;
/** @var CreatesRemark */
private $createsRemark;
/** @var FetchesUser */
private $fetchesUser;
/** @var CreateRemarkProcessor */
private $createRemarkProcessor;
/**
* CreateRemarkLogic constructor.
* @param CanCreateRemark $canCreateRemark
* @param CreatesRemark $createsRemark
* @param CreateRemarkProcessor $createRemarkProcessor
*/
public function __construct(CanCreateRemark $canCreateRemark, CreatesRemark $createsRemark, FetchesUser $fetchesUser)
public function __construct(CreateRemarkProcessor $createRemarkProcessor)
{
$this->canCreateRemark = $canCreateRemark;
$this->createsRemark = $createsRemark;
$this->fetchesUser = $fetchesUser;
$this->createRemarkProcessor = $createRemarkProcessor;
}
/**
@@ -56,15 +45,18 @@ class CreateRemarkLogic extends AbstractControllerLogic
*/
public function logic(Request $request) : JsonResponse
{
$classs = '\\App\\Models\\' . Str::studly($request->input('model_type'));
$object = new RemarkObject($request->input('content'), $request->input('commenter_id'));
if (!class_exists($classs)) {
throw new MalformedRequestException('Unable to process this entity');
}
$remarkOwner = $classs::find($request->route('id'));
$this->canCreateRemark->passes($object);
$remarkObject = new RemarkObject($request->input('content'), auth()->user()->id);
$query = $this->createsRemark->execute($this->fetchesUser->execute(['id' => $request->input('commenter_id')]), $object);
return $this->resourceResponse(new RemarkResource($query));
$remmark = $this->createRemarkProcessor->execute($remarkOwner, $remarkObject);
return $this->resourceResponse(new RemarkResource($remmark));
}
}
@@ -57,7 +57,7 @@ class UpdateRemarkLogic extends AbstractControllerLogic
*/
public function logic(Request $request) : JsonResponse
{
$object = new RemarkObject($request->input('content'), $request->input('commenter_id'));
$object = new RemarkObject($request->input('content'), auth()->user()->id);
$this->canUpdateRemark->passes($object);
@@ -0,0 +1,34 @@
<?php
namespace App\Classes\Modules\SegmentConstants\Services;
use App\Classes\General\Eloquent\AbstractFetchRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\SegmentConstant;
class FetchesSegmentConstant extends AbstractFetchRecord
{
/** @var SegmentConstant */
private $repository;
/**
* FetchesSegment constructor.
* @param SegmentConstant $repository
*/
public function __construct(SegmentConstant $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
public function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -22,7 +22,6 @@ class CreateSegmentLogic extends AbstractControllerLogic
];
}
/** @var CreateSegmentProcessor */
private $createSegmentProcessor;
@@ -45,7 +45,6 @@ class DeleteSegmentLogic extends AbstractControllerLogic
$this->fetchesSegment = $fetchesSegment;
}
/**
* @param Request $request
* @return JsonResponse
@@ -0,0 +1,52 @@
<?php
namespace App\Classes\Modules\Segments\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Segments\Services\FetchesConstant;
use App\Http\Resources\ConstantResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class FetchConstantLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Fetch Segment Constant',
'message' => 'You have successfully retrieved the Segment Constant'
];
}
/** @var FetchesConstant */
private $fetchesConstant;
/**
* FetchConstantLogic constructor.
* @param FetchesConstant $fetchesConstant
*/
public function __construct(FetchesConstant $fetchesConstant)
{
$this->fetchesConstant = $fetchesConstant;
}
/**
* @param Request $request
* @return JsonResponse
*/
public function logic(Request $request) : JsonResponse
{
$constant = $this->fetchesConstant->execute(['segment_id' => $request->route('id'), 'reference' => $request->route('reference')]);
return $this->resourceResponse(new ConstantResource($constant));
}
}

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