mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal.git
synced 2026-08-19 12:34:18 +00:00
Compare commits
586 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5c109d625c | |||
| 299d5fd4fe | |||
| d56abc78f7 | |||
| b3b7b67c66 | |||
| d6f29976c7 | |||
| 2bc43cbc8f | |||
| a9910c5a12 | |||
| 4bee415d2d | |||
| 02f7adb1e9 | |||
| 039a6155ca | |||
| c8d806a51d | |||
| 4dbaf6a5dc | |||
| fcc0135843 | |||
| 4a922ac340 | |||
| c4d421db76 | |||
| 2816e80bee | |||
| 466e90a0af | |||
| 5e6ae2a905 | |||
| e0a02c7051 | |||
| 34a08563f3 | |||
| 9df1e158a4 | |||
| 33cd313950 | |||
| 2af5035e99 | |||
| acb7337b4a | |||
| 0a9bc29202 | |||
| 1568c7272a | |||
| 14f0560055 | |||
| fc339f1dec | |||
| 3378d37ffb | |||
| 77f7e86a5f | |||
| 6970908b75 | |||
| 3f31d2d578 | |||
| fff3d948d0 | |||
| 8d8c468b09 | |||
| 557ab483f8 | |||
| c181882145 | |||
| 4b0b88b5d8 | |||
| 1960cff426 | |||
| 0402fc67e2 | |||
| 4089683ab7 | |||
| 3fdd2a2b56 | |||
| 2a333f7d19 | |||
| 76193eeb9f | |||
| 8f8622aa10 | |||
| a696e1dab9 | |||
| f88936c873 | |||
| c9642bd8f5 | |||
| a3d26bfb63 | |||
| 094f995dcf | |||
| 1a5db25285 | |||
| 2bb4afe426 | |||
| f7a9b2332c | |||
| fa0c97b1da | |||
| 20f3004e22 | |||
| 43cd6f35be | |||
| fd4bbe5d4f | |||
| 697c02ac8a | |||
| 3dd9dfe361 | |||
| 7c50dfbfc3 | |||
| a630b49867 | |||
| e77e513bef | |||
| e173a9ddd3 | |||
| 75ce5bd752 | |||
| c40d563372 | |||
| abb7bc2e4c | |||
| 7f0de1c1e4 | |||
| c5477890d6 | |||
| 26027f5f3f | |||
| a28f735d8f | |||
| 225abaacb8 | |||
| 70fc8285f8 | |||
| 1f6eaa65a5 | |||
| 7e2428957e | |||
| 069c3cea35 | |||
| 857003b25b | |||
| 551119e313 | |||
| 07998c6850 | |||
| cd3e955f3e | |||
| 869397056c | |||
| c58cdde254 | |||
| 982a7c1d44 | |||
| c976319521 | |||
| 145bf3263a | |||
| 57eb1e147d | |||
| e1c69f2de4 | |||
| 90b2bffd19 | |||
| 562815f9fe | |||
| 401db91437 | |||
| 0d1a623512 | |||
| 548a50c14a | |||
| 299512ec08 | |||
| 7241db7743 | |||
| ce24deea18 | |||
| c4642c2042 | |||
| 3871d8c010 | |||
| cb65a1f29b | |||
| b1b13d7cbf | |||
| f6fa2fcf51 | |||
| 6c00a57446 | |||
| b567f50711 | |||
| 48445020fb | |||
| 395b15af90 | |||
| 46f1368a92 | |||
| 82a16a5d9d | |||
| 833ffdab8d | |||
| 23002f61da | |||
| 2f6a30a512 | |||
| 2355c74b65 | |||
| bd81560c3d | |||
| 575491e500 | |||
| 4c433f74f1 | |||
| 1c703489b9 | |||
| 30ef3a7e41 | |||
| f9b1289d28 | |||
| 9fe49d8658 | |||
| e265b069d2 | |||
| f90818dbca | |||
| bfd490854d | |||
| 852da05e24 | |||
| 94d96c96ea | |||
| feaab3cd8e | |||
| 094801abbe | |||
| 275d8880d9 | |||
| 98843d0688 | |||
| 317f4c2351 | |||
| 83c7d70551 | |||
| 20099c416f | |||
| 03b26e2af9 | |||
| eb399dcbae | |||
| d602200140 | |||
| 84028b5ed7 | |||
| 1658b65484 | |||
| 8e9ff0cad5 | |||
| 78ceb62dec | |||
| acee1a7884 | |||
| 27190868b4 | |||
| b897b00703 | |||
| cd93deac26 | |||
| 0079d745ba | |||
| 0d0e147647 | |||
| efba270ea5 | |||
| 69da484b72 | |||
| 0bd3464184 | |||
| b25adef107 | |||
| 7ec1bc65a5 | |||
| 329aa4b496 | |||
| c401d1e0d5 | |||
| a2983ec9f1 | |||
| a05609081b | |||
| 2421640c0a | |||
| 7dae2228f6 | |||
| 75039466ab | |||
| f3df5fbe9f | |||
| 362e47aaa0 | |||
| ba26cda598 | |||
| 8995a567d5 | |||
| 9d442c8cc4 | |||
| 5eeec7806b | |||
| f5df1adff8 | |||
| fd46a4fb7f | |||
| 119e58c1c9 | |||
| 1100267316 | |||
| b08ba3e716 | |||
| 2169f09ffe | |||
| 1dfbc71302 | |||
| e133f1fab8 | |||
| b2a986b838 | |||
| 57cdedbdd0 | |||
| 5d5892ce07 | |||
| 160fa2b2d9 | |||
| e0d0dccb4c | |||
| fea03de5bd | |||
| 75babc9f38 | |||
| a36f7123e8 | |||
| f47c7ebc50 | |||
| fad56e30dc | |||
| 6b56899004 | |||
| b26700ea6f | |||
| 37444e6e30 | |||
| 589c2e01d9 | |||
| 32591273f8 | |||
| f73b1d7fe3 | |||
| 9cf6058a65 | |||
| 0d4f7e0ed5 | |||
| ff4d81966c | |||
| 9786198ca2 | |||
| a4891aa0de | |||
| 05ba0ba6fd | |||
| 9217970237 | |||
| 828f424cfd | |||
| 76a9af2dc8 | |||
| 057ca8480b | |||
| 3dcf3cff10 | |||
| d07901f31b | |||
| f30a0cf7ee | |||
| f2a02230c7 | |||
| 2978eed61d | |||
| 37da620927 | |||
| c22638b29e | |||
| 64ec76eed6 | |||
| ef3c738fb1 | |||
| 92b6e6dc3a | |||
| 0d330447eb | |||
| daeb376aa5 | |||
| f4d81cbde9 | |||
| 0fd3584af2 | |||
| c292bfd1e0 | |||
| c76c50466d | |||
| b4437c8907 | |||
| a2f70f266d | |||
| 432ce2d14a | |||
| 715384f4a4 | |||
| 8277b9d0fd | |||
| e7942731ad | |||
| 85942eff1d | |||
| 5db9d79cc1 | |||
| d69896f807 | |||
| dff001c9b5 | |||
| 2353c637d7 | |||
| 2c5c97488f | |||
| 4769541535 | |||
| fe8b6d0518 | |||
| 5934fbcb6c | |||
| c078a879d2 | |||
| c58f2e55d7 | |||
| eea8708b76 | |||
| 99e38b96ce | |||
| 45c94321b1 | |||
| 81a00a8195 | |||
| 4fbe771dce | |||
| 9f8ba5163c | |||
| dbab7a9f8c | |||
| b06cef4045 | |||
| 046676d174 | |||
| 1c072d7b96 | |||
| eeb7bb77bb | |||
| 2de60c8262 | |||
| c8a2ce71e1 | |||
| 7e04580be0 | |||
| 3d15a8e312 | |||
| 9936e42574 | |||
| 16ffec01d4 | |||
| 7959f8c83c | |||
| 16b5660f12 | |||
| 2b4f1ad570 | |||
| 023954db70 | |||
| 535b8a59b9 | |||
| dc4d7004a3 | |||
| bcb78f2392 | |||
| 345a62fec6 | |||
| 6257b11a6e | |||
| 128c8083c3 | |||
| 4b124ca96d | |||
| d52131d9df | |||
| 4b25764fb3 | |||
| 422a0af465 | |||
| c73d65343b | |||
| 9e5784b6ec | |||
| 9a863e2143 | |||
| 8024865d5d | |||
| 579dd02ebf | |||
| 66abe81e73 | |||
| ca178e1b31 | |||
| e52a27aedb | |||
| 1e6ac000ac | |||
| 6c2c28fb31 | |||
| 049da351ef | |||
| 0ce8709f70 | |||
| 1e5609bb1b | |||
| 0802198c97 | |||
| 8e7970a925 | |||
| 2421f6dcf0 | |||
| 06b2c5166d | |||
| 6ba3b873a2 | |||
| 623fb1609b | |||
| 24be20a60d | |||
| 3535201481 | |||
| cdefd48d26 | |||
| 45fbcf1447 | |||
| 53805f3608 | |||
| 99e90ad357 | |||
| 5edb9b5cfe | |||
| 86a5a3b2d9 | |||
| a6590e3b81 | |||
| b1bb2b9f33 | |||
| 127a13c59c | |||
| 9318e7471f | |||
| ba2bd59b04 | |||
| e19ba1c9f3 | |||
| 8cffae079b | |||
| 594b25b71b | |||
| d142a86683 | |||
| 981ec9bbeb | |||
| b293542321 | |||
| 18593cb959 | |||
| e2d1426d19 | |||
| d31deeb112 | |||
| d61a0c2104 | |||
| cbda7aa6ba | |||
| b5027c81f8 | |||
| e83e53a1d7 | |||
| 4058456797 | |||
| d03e34a1f4 | |||
| 5d79d5808a | |||
| 935f3e9bf5 | |||
| e4464c3eb4 | |||
| e227abac59 | |||
| 997a9da276 | |||
| a810fcad59 | |||
| 9f4b04b9fb | |||
| 085692485a | |||
| dedd6464f4 | |||
| 6b5ae9b0b7 | |||
| 38aba65178 | |||
| eb92a76a0b | |||
| 091119c244 | |||
| 2b20160334 | |||
| 4d095b5459 | |||
| 1c50181132 | |||
| 8a29f10ef3 | |||
| 9e26c470f5 | |||
| a1bc3aa652 | |||
| 4c0bf164a0 | |||
| e5af2bf171 | |||
| 2443575744 | |||
| 8ab7f72e90 | |||
| 5772e30575 | |||
| 864bbc70b6 | |||
| c439bb5d61 | |||
| 82b99a40cf | |||
| 4b2daa62d7 | |||
| 2bd8700a61 | |||
| 272ce5fa39 | |||
| c16a49d55c | |||
| ad7e77c169 | |||
| c85b603b81 | |||
| 6c6b104dff | |||
| 430b26def0 | |||
| 2d9482feb6 | |||
| 615e3e7683 | |||
| 32936af538 | |||
| 7f4fdf0191 | |||
| 1c4d9520f9 | |||
| 6c7685dac2 | |||
| e95c41bd3e | |||
| 4653e8403b | |||
| 903269e714 | |||
| a648a11567 | |||
| 4120a50559 | |||
| 88b31f2d3f | |||
| cb8d808562 | |||
| a2f9bf83ce | |||
| 130aca262a | |||
| dd2ac4c966 | |||
| 06ab1be86e | |||
| a78ed8271f | |||
| 16ce06ba7e | |||
| 5335b8affb | |||
| 6d1153298c | |||
| 8f65767996 | |||
| 4bba550b9e | |||
| b33b780563 | |||
| 342285247a | |||
| 0c82aa17fc | |||
| ed36b85a3d | |||
| 4f8e9fbd5f | |||
| ee575c21ea | |||
| f4f8c34cb9 | |||
| 7cb27a6114 | |||
| 2f4b568c9a | |||
| a23e0b35a2 | |||
| 598ca3807e | |||
| 0654f0335b | |||
| e4610e1a53 | |||
| 38ae8f72eb | |||
| cbdd4e8137 | |||
| c4d2b4e476 | |||
| 7eab58b45e | |||
| a9b21e9566 | |||
| 9aec5a71f1 | |||
| 771b10ffc9 | |||
| a9d4806a4a | |||
| 0d0048eb6c | |||
| d5f3e9ba71 | |||
| 5144e940f2 | |||
| 8dac196cb9 | |||
| e1bc996efb | |||
| ed7019f75e | |||
| 0f0a32488a | |||
| b3cc805e78 | |||
| fd8a09d443 | |||
| 8d5603c756 | |||
| c3de10f676 | |||
| 80a47f05f7 | |||
| 53cc2ee493 | |||
| fadef468bb | |||
| 3f0028aaf1 | |||
| 7ea7db9f49 | |||
| 7a95741af9 | |||
| 75c7772d98 | |||
| 851489bd12 | |||
| 666b5a7791 | |||
| a1461f899b | |||
| 2fda9e0c46 | |||
| ec2b46b192 | |||
| 833c4c5905 | |||
| 1aea633375 | |||
| cc90c16d9a | |||
| 10af83056a | |||
| cd930dbaf0 | |||
| 2bf3e38ced | |||
| 5f4010bb50 | |||
| c88f6890d6 | |||
| 53d076c7e5 | |||
| 1b84ccf60e | |||
| 5955c1a633 | |||
| 7ece4f6470 | |||
| e0e82634d3 | |||
| 988e798cf1 | |||
| 4ce8440724 | |||
| e2f5097882 | |||
| 9f96caad7c | |||
| 3046530f71 | |||
| 84a6cb85dd | |||
| c86ea9cee4 | |||
| ac15f76c4f | |||
| 1fc176296e | |||
| 3f911f145a | |||
| d5c28df748 | |||
| 9bfe943898 | |||
| dbcbabec93 | |||
| e24cdd82d4 | |||
| bf4b3fa97f | |||
| 01854a3292 | |||
| 6bcea5a8f1 | |||
| 679bae6fe8 | |||
| f567995202 | |||
| 35b3cb4515 | |||
| 196cf3d58a | |||
| b12a862903 | |||
| f586314cd8 | |||
| 16f41482ad | |||
| 95866b0789 | |||
| fb2ba2a3c7 | |||
| 3041144968 | |||
| 2efdb33b71 | |||
| 5716050694 | |||
| e22c7c7e8b | |||
| d9972a8a95 | |||
| 6dbafde89c | |||
| 680ddd5066 | |||
| f6b5eb3098 | |||
| 82f8cae4a8 | |||
| 4c868de356 | |||
| c44278fe26 | |||
| 43c8530e6d | |||
| 2704ec1665 | |||
| 0c636d2156 | |||
| 1270ba3f43 | |||
| f2c32c5024 | |||
| ccb3bde260 | |||
| a7eb14c2b7 | |||
| abac96b1e5 | |||
| ecb48c8897 | |||
| 2686229a0f | |||
| 558fa7ae52 | |||
| 88e2136c07 | |||
| 70cdcded9b | |||
| 4022b640f9 | |||
| 0d780074b8 | |||
| 078f675a7f | |||
| 2b48a86f98 | |||
| 19f3aa18fc | |||
| 2b4c932fc8 | |||
| 89f0ca651a | |||
| c9fc5938c6 | |||
| 2ad8235c1b | |||
| dbf8301cb9 | |||
| 7d582c6bca | |||
| 3c4b6afcb2 | |||
| e4bc56d188 | |||
| 9a448d5a3d | |||
| 5c1074b244 | |||
| 49fcdfd89e | |||
| c900759234 | |||
| cd3b47ab1a | |||
| c5f95cdf61 | |||
| cc428a92b8 | |||
| 97bac45612 | |||
| 8048396a88 | |||
| 400ec31235 | |||
| 4d9346c62c | |||
| 94fd2069e8 | |||
| 1f401eb347 | |||
| 80e282bda0 | |||
| 65cd6aae3c | |||
| eba2a30024 | |||
| c103deb2a7 | |||
| dcef782587 | |||
| 10e7da4673 | |||
| faff35f241 | |||
| e2c1562f19 | |||
| df35ceb798 | |||
| cdb81a0bf4 | |||
| f1b1955190 | |||
| 860632b7a3 | |||
| bde7a61fb4 | |||
| 198e0674bd | |||
| b6600c5168 | |||
| 7d09205817 | |||
| 5f5dbeb3d1 | |||
| 67a877ca15 | |||
| 25f38ef7fe | |||
| 88e7bf44b5 | |||
| ddeb44b920 | |||
| 86461c19a1 | |||
| 02be710203 | |||
| 2ffbfc9f1c | |||
| 7b34f8116c | |||
| 8a9b6df255 | |||
| c881dd44d6 | |||
| 1cfaeaf8bb | |||
| 914f29184d | |||
| 18d1841a30 | |||
| f510d57463 | |||
| 990508501d | |||
| 7833c17938 | |||
| dfec2073b0 | |||
| 97fdffe6eb | |||
| 2300d237d3 | |||
| a62e5d95fb | |||
| b1f2900f1c | |||
| ddf015dc71 | |||
| 2d8535b7f5 | |||
| 2a9d4fd212 | |||
| 2cacc23a38 | |||
| a7fd5a038e | |||
| 626b31084f | |||
| 3f21802090 | |||
| 4f3c25d5bd | |||
| 8da942e41e | |||
| e8191df0e9 | |||
| 02064ad68e | |||
| 13319aacff | |||
| 996ef4205f | |||
| b599c8a151 | |||
| 0aaa7f486a | |||
| d41f796825 | |||
| dd612e2660 | |||
| c503b5e677 | |||
| 0b433cfa18 | |||
| 75aba8c4ac | |||
| 81c65874a3 | |||
| 79d29d9c7b | |||
| 1e558b93af | |||
| 6d3d52639e | |||
| 35dc74c3bb | |||
| a1d460aa6c | |||
| 0310138644 | |||
| 5a0bc7aaea | |||
| 7e439a38fd | |||
| c7962b4231 | |||
| 1c800b70ec | |||
| c614190de8 | |||
| d14bb39ae8 | |||
| 5cc2f51c02 | |||
| a185f73e8a | |||
| f9a9598210 | |||
| d91e0e56c3 | |||
| 9976ccec41 | |||
| 8bfb2d749a | |||
| 7bf9a570a1 | |||
| df283e54a2 | |||
| b38df170e8 | |||
| 769b5dd050 | |||
| bf38ace70c | |||
| 66c008f97e | |||
| 0298eb946f | |||
| 70fb35e37c | |||
| 1a30877ca9 | |||
| 569a22c0db | |||
| 851e2e1815 | |||
| 503bc90556 | |||
| 515c71daa7 | |||
| a041a70d93 | |||
| d4c9899120 |
+8
-2
@@ -10,9 +10,9 @@ LOG_LEVEL=debug
|
|||||||
DB_CONNECTION=mysql
|
DB_CONNECTION=mysql
|
||||||
DB_HOST=127.0.0.1
|
DB_HOST=127.0.0.1
|
||||||
DB_PORT=3306
|
DB_PORT=3306
|
||||||
DB_DATABASE=laravel
|
DB_DATABASE=shpping_portal
|
||||||
DB_USERNAME=root
|
DB_USERNAME=root
|
||||||
DB_PASSWORD=
|
DB_PASSWORD=root
|
||||||
|
|
||||||
BROADCAST_DRIVER=log
|
BROADCAST_DRIVER=log
|
||||||
CACHE_DRIVER=file
|
CACHE_DRIVER=file
|
||||||
@@ -55,3 +55,9 @@ EXCHANGE_URL=https://dev.exchange.cief-malaysia.com/
|
|||||||
MIX_EXCHANGE_URL="${EXCHANGE_URL}"
|
MIX_EXCHANGE_URL="${EXCHANGE_URL}"
|
||||||
|
|
||||||
YD_API_CODE=''
|
YD_API_CODE=''
|
||||||
|
|
||||||
|
JWT_SECRET=Btj63iMEleEaww6Bb2IBECkxWn7YHPhhPFluAkg9DfcQik0qDRy6QW75ABGmPT2h
|
||||||
|
|
||||||
|
PERFEXCRM_BASE_URL=""
|
||||||
|
PERFEXCRM_API_KEY=""
|
||||||
|
PERFEXCRM_IS_ENABLED="false"
|
||||||
|
|||||||
@@ -0,0 +1,59 @@
|
|||||||
|
APP_NAME=Laravel
|
||||||
|
APP_ENV=local
|
||||||
|
APP_KEY=base64:rIar2fvNeRzQdvKOgLUg03detGDMx6ym2SYFRjawrAc=
|
||||||
|
APP_DEBUG=true
|
||||||
|
APP_URL=http://localhost
|
||||||
|
|
||||||
|
LOG_CHANNEL=stack
|
||||||
|
LOG_LEVEL=debug
|
||||||
|
|
||||||
|
DB_CONNECTION=mysql
|
||||||
|
DB_HOST=127.0.0.1
|
||||||
|
DB_PORT=3306
|
||||||
|
DB_DATABASE=shpping_portal
|
||||||
|
DB_USERNAME=root
|
||||||
|
DB_PASSWORD=P@ssw0rd
|
||||||
|
|
||||||
|
BROADCAST_DRIVER=log
|
||||||
|
CACHE_DRIVER=file
|
||||||
|
FILESYSTEM_DRIVER=local
|
||||||
|
QUEUE_CONNECTION=sync
|
||||||
|
SESSION_DRIVER=file
|
||||||
|
SESSION_LIFETIME=120
|
||||||
|
|
||||||
|
MEMCACHED_HOST=127.0.0.1
|
||||||
|
|
||||||
|
REDIS_HOST=127.0.0.1
|
||||||
|
REDIS_PASSWORD=null
|
||||||
|
REDIS_PORT=6379
|
||||||
|
|
||||||
|
MAIL_MAILER=smtp
|
||||||
|
MAIL_HOST=mailhog
|
||||||
|
MAIL_PORT=1025
|
||||||
|
MAIL_USERNAME=null
|
||||||
|
MAIL_PASSWORD=null
|
||||||
|
MAIL_ENCRYPTION=null
|
||||||
|
MAIL_FROM_ADDRESS=null
|
||||||
|
MAIL_FROM_NAME="${APP_NAME}"
|
||||||
|
|
||||||
|
AWS_ACCESS_KEY_ID=
|
||||||
|
AWS_SECRET_ACCESS_KEY=
|
||||||
|
AWS_DEFAULT_REGION=us-east-1
|
||||||
|
AWS_BUCKET=
|
||||||
|
AWS_USE_PATH_STYLE_ENDPOINT=false
|
||||||
|
|
||||||
|
PUSHER_APP_ID=
|
||||||
|
PUSHER_APP_KEY=
|
||||||
|
PUSHER_APP_SECRET=
|
||||||
|
PUSHER_APP_CLUSTER=mt1
|
||||||
|
|
||||||
|
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
|
||||||
|
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
||||||
|
|
||||||
|
UNITY_APP_URL="https://unity.izyim.com"
|
||||||
|
EXCHANGE_URL=https://dev.exchange.cief-malaysia.com/
|
||||||
|
MIX_EXCHANGE_URL="${EXCHANGE_URL}"
|
||||||
|
|
||||||
|
YD_API_CODE=''
|
||||||
|
|
||||||
|
JWT_SECRET=Btj63iMEleEaww6Bb2IBECkxWn7YHPhhPFluAkg9DfcQik0qDRy6QW75ABGmPT2h
|
||||||
+2
-1
@@ -2,6 +2,8 @@
|
|||||||
/public/hot
|
/public/hot
|
||||||
/public/storage
|
/public/storage
|
||||||
/storage/*.key
|
/storage/*.key
|
||||||
|
/tests/_output
|
||||||
|
/tests/_support
|
||||||
/vendor
|
/vendor
|
||||||
**/.idea/
|
**/.idea/
|
||||||
.env
|
.env
|
||||||
@@ -21,7 +23,6 @@ gox.iml
|
|||||||
rebuild_docker.sh
|
rebuild_docker.sh
|
||||||
docker/*
|
docker/*
|
||||||
db/*
|
db/*
|
||||||
docker-compose.yml
|
|
||||||
package-lock.json
|
package-lock.json
|
||||||
public/*
|
public/*
|
||||||
/public/*
|
/public/*
|
||||||
|
|||||||
+120
@@ -0,0 +1,120 @@
|
|||||||
|
image: php:7.4
|
||||||
|
stages:
|
||||||
|
- service_build
|
||||||
|
- node
|
||||||
|
- building_assets
|
||||||
|
- database
|
||||||
|
- unit_test
|
||||||
|
- acceptance_test
|
||||||
|
- code_quality
|
||||||
|
|
||||||
|
# Variables
|
||||||
|
variables:
|
||||||
|
MYSQL_ROOT_PASSWORD: root
|
||||||
|
MYSQL_USER: mysql_password
|
||||||
|
MYSQL_PASSWORD: mysql_password
|
||||||
|
MYSQL_DATABASE: shpping_portal
|
||||||
|
DB_HOST: mysql
|
||||||
|
|
||||||
|
|
||||||
|
before_script:
|
||||||
|
- apt-get update -yqq
|
||||||
|
- apt-get install -yqq
|
||||||
|
- apt-get install -y libonig-dev
|
||||||
|
- apt-get install -y libxml2-dev
|
||||||
|
- apt-get install -y libzip-dev
|
||||||
|
- apt-get install -y libgd-dev
|
||||||
|
- apt-get install -y libgd-dev
|
||||||
|
|
||||||
|
# Install PDO MySQL extension
|
||||||
|
- docker-php-ext-install pdo_mysql
|
||||||
|
|
||||||
|
#install php dependencies
|
||||||
|
- docker-php-ext-install mbstring xml zip gd
|
||||||
|
|
||||||
|
# Install composer package manager
|
||||||
|
- curl --location --output /usr/local/bin/composer https://getcomposer.org/download/latest-stable/composer.phar
|
||||||
|
- chmod +x /usr/local/bin/composer
|
||||||
|
|
||||||
|
# Install MySQL client
|
||||||
|
- apt-get install -y default-mysql-client
|
||||||
|
|
||||||
|
#install node js
|
||||||
|
- apt-get update && apt-get install -y nodejs npm
|
||||||
|
|
||||||
|
#install gulp Js
|
||||||
|
- npm install -g gulp-cli
|
||||||
|
|
||||||
|
|
||||||
|
#jobs
|
||||||
|
|
||||||
|
#buld the backend
|
||||||
|
composer_php:
|
||||||
|
stage: service_build
|
||||||
|
script:
|
||||||
|
- composer install
|
||||||
|
- cp .env.example .env
|
||||||
|
- php artisan key:generate
|
||||||
|
rules:
|
||||||
|
- if: '$CI_COMMIT_BRANCH =~ /.*/'
|
||||||
|
|
||||||
|
#build the UI
|
||||||
|
#node installation
|
||||||
|
npm:
|
||||||
|
stage: node
|
||||||
|
script:
|
||||||
|
- npm install # Install npm dependencies
|
||||||
|
rules:
|
||||||
|
- if: '$CI_COMMIT_BRANCH =~ /.*/'
|
||||||
|
|
||||||
|
#building assets
|
||||||
|
building_assets:
|
||||||
|
stage: building_assets
|
||||||
|
# dependencies:
|
||||||
|
# - npm
|
||||||
|
script:
|
||||||
|
- npm install # Install npm dependencies
|
||||||
|
- gulp build # Build assets
|
||||||
|
rules:
|
||||||
|
- if: '$CI_COMMIT_BRANCH =~ /.*/'
|
||||||
|
|
||||||
|
#mysql
|
||||||
|
database:
|
||||||
|
stage: database
|
||||||
|
services:
|
||||||
|
- name: mysql:8.0
|
||||||
|
command: [ "--default-authentication-plugin=mysql_native_password" ]
|
||||||
|
#dependencies:
|
||||||
|
# - composer_php
|
||||||
|
script:
|
||||||
|
- composer install
|
||||||
|
- cp .env.example .env
|
||||||
|
- php artisan key:generate
|
||||||
|
- php artisan migrate:fresh
|
||||||
|
- php artisan db:seed
|
||||||
|
rules:
|
||||||
|
- if: '$CI_COMMIT_BRANCH =~ /.*/'
|
||||||
|
|
||||||
|
#mysql
|
||||||
|
unit_test:
|
||||||
|
stage: unit_test
|
||||||
|
services:
|
||||||
|
- name: mysql:8.0
|
||||||
|
command: [ "--default-authentication-plugin=mysql_native_password" ]
|
||||||
|
#dependencies:
|
||||||
|
# - database
|
||||||
|
script:
|
||||||
|
- npm install # Install npm dependencies
|
||||||
|
- gulp build # Build assets
|
||||||
|
- composer install
|
||||||
|
- cp .env.example .env
|
||||||
|
- php artisan key:generate
|
||||||
|
- php artisan migrate:fresh
|
||||||
|
- php artisan db:seed
|
||||||
|
- php artisan test
|
||||||
|
rules:
|
||||||
|
- if: '$CI_COMMIT_BRANCH =~ /.*/'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,62 +1,39 @@
|
|||||||
<p align="center"><a href="https://laravel.com" target="_blank"><img src="https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%20CMYK/1%20Full%20Color/laravel-logolockup-cmyk-red.svg" width="400"></a></p>
|
## Shipping portal documentation
|
||||||
|
|
||||||
<p align="center">
|
simple documentation on how to install, run, test, commit and deploy application
|
||||||
<a href="https://travis-ci.org/laravel/framework"><img src="https://travis-ci.org/laravel/framework.svg" alt="Build Status"></a>
|
|
||||||
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/dt/laravel/framework" alt="Total Downloads"></a>
|
|
||||||
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/v/laravel/framework" alt="Latest Stable Version"></a>
|
|
||||||
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/l/laravel/framework" alt="License"></a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
## About Laravel
|
## creating and running unit tests
|
||||||
|
|
||||||
Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as:
|
Required Tools
|
||||||
|
|
||||||
- [Simple, fast routing engine](https://laravel.com/docs/routing).
|
- Chromium Driver / selenium
|
||||||
- [Powerful dependency injection container](https://laravel.com/docs/container).
|
- add running and setting selenium on all OS if possible
|
||||||
- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage.
|
|
||||||
- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent).
|
|
||||||
- Database agnostic [schema migrations](https://laravel.com/docs/migrations).
|
|
||||||
- [Robust background job processing](https://laravel.com/docs/queues).
|
|
||||||
- [Real-time event broadcasting](https://laravel.com/docs/broadcasting).
|
|
||||||
|
|
||||||
Laravel is accessible, powerful, and provides tools required for large, robust applications.
|
Required Packages :
|
||||||
|
|
||||||
## Learning Laravel
|
- laravel/legacy-factories
|
||||||
|
|
||||||
Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework.
|
- codeception/codeception
|
||||||
|
|
||||||
If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains over 1500 video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library.
|
Or Simply Run
|
||||||
|
|
||||||
## Laravel Sponsors
|
``Composer install``
|
||||||
|
|
||||||
We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the Laravel [Patreon page](https://patreon.com/taylorotwell).
|
To create a unit test
|
||||||
|
|
||||||
### Premium Partners
|
``php artisan make test: Test Example --unit``
|
||||||
|
|
||||||
- **[Vehikl](https://vehikl.com/)**
|
Running the tests :
|
||||||
- **[Tighten Co.](https://tighten.co)**
|
|
||||||
- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)**
|
|
||||||
- **[64 Robots](https://64robots.com)**
|
|
||||||
- **[Cubet Techno Labs](https://cubettech.com)**
|
|
||||||
- **[Cyber-Duck](https://cyber-duck.co.uk)**
|
|
||||||
- **[Many](https://www.many.co.uk)**
|
|
||||||
- **[Webdock, Fast VPS Hosting](https://www.webdock.io/en)**
|
|
||||||
- **[DevSquad](https://devsquad.com)**
|
|
||||||
- **[Curotec](https://www.curotec.com/services/technologies/laravel/)**
|
|
||||||
- **[OP.GG](https://op.gg)**
|
|
||||||
|
|
||||||
## Contributing
|
Running a single Test
|
||||||
|
|
||||||
Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions).
|
`` php artisan test --filter Example``
|
||||||
|
|
||||||
## Code of Conduct
|
Running Unit tests -
|
||||||
|
|
||||||
In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct).
|
`` php artisan test ``
|
||||||
|
|
||||||
## Security Vulnerabilities
|
Running Codeception tests -
|
||||||
|
|
||||||
If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed.
|
``vendor/bin/codecept run``
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).
|
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class AmountExceed implements Filter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->where('amount', '>', $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class AmountShort implements Filter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->where('amount', '<', $value);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class CreatedBefore implements Filter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->where('created_at', '<', Carbon::parse($value));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use App\Classes\ValueObjects\Constants\TransactionType;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class DoesNotHavePaymentStatusIn implements Filter
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->whereDoesntHave('transactions', function (Builder $query) use($value) {
|
||||||
|
$query->where('type', TransactionType::PAYMENT)->whereIn('status', $value);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -15,7 +15,7 @@ class DoesNotHaveTransactionType implements Filter
|
|||||||
public static function apply(Builder $builder, $value)
|
public static function apply(Builder $builder, $value)
|
||||||
{
|
{
|
||||||
return $builder->whereDoesntHave('transactions', function (Builder $query) use($value) {
|
return $builder->whereDoesntHave('transactions', function (Builder $query) use($value) {
|
||||||
$query->where('type', $value);
|
$query->where('type', $value)->whereIn('status', [0,1,2,3]);
|
||||||
})->whereHas('containers', function ($query){
|
})->whereHas('containers', function ($query){
|
||||||
return $query->whereDate('loading_date', '>=', Carbon::parse('20-09-2022'));
|
return $query->whereDate('loading_date', '>=', Carbon::parse('20-09-2022'));
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class EmailLike implements Filter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return Builder|mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->where('email', 'LIKE', '%'.$value.'%');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use App\Classes\ValueObjects\Constants\TransactionType;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class HavePaymentStatusNotIn implements Filter
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->whereHas('transactions', function (Builder $query) use($value) {
|
||||||
|
$query->where('type', TransactionType::PAYMENT)->whereNotIn('status', $value);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use App\Models\Order;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class OrderMarkingIn implements Filter
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->whereHas('owner', function($query) use ($value) {
|
||||||
|
$query->where('reference', 'LIKE', '%' . $value . '%');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class OwnerType implements Filter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return Builder|mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->where('owner_type', $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class PaymentMethod implements Filter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return Builder|mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->where('payment_method', $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class Receiver implements Filter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return Builder|mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->where('receiver', '=', $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
namespace App\Classes\General;
|
namespace App\Classes\General;
|
||||||
|
|
||||||
|
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
class Helper
|
class Helper
|
||||||
{
|
{
|
||||||
@@ -24,4 +24,21 @@ class Helper
|
|||||||
return array_slice(get_class_methods($className), 1);
|
return array_slice(get_class_methods($className), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
/**
|
||||||
|
* @param $log
|
||||||
|
* @return none
|
||||||
|
*/
|
||||||
|
static function debugLoggerForPerfexCRM($log){
|
||||||
|
if($log){
|
||||||
|
$message = $log['message'];
|
||||||
|
$substring = 'No data were found';
|
||||||
|
if (isset($message)) {
|
||||||
|
if (strpos($message, $substring) !== false) {
|
||||||
|
// Log::info('Message exist');
|
||||||
|
} else {
|
||||||
|
Log::info($log['message']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Jobs;
|
||||||
|
|
||||||
|
use App\Classes\Modules\PerfexCRM\Processors\CreatePerfexCRMLeadProcessor;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\FetchesPerfexCRMLead;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\UpdatesPerfexCRMLead;
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\CreateLeadPerfexCRMObject;
|
||||||
|
|
||||||
|
class CreatePerfexCRMCustomer implements ShouldQueue
|
||||||
|
{
|
||||||
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||||
|
|
||||||
|
/** @var CreateLeadPerfexCRMObject */
|
||||||
|
private $createLeadPerfexCRMObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CreatePerfexCRMCustomer constructor.
|
||||||
|
* @param CreateLeadPerfexCRMObject $createLeadPerfexCRMObject
|
||||||
|
*/
|
||||||
|
public function __construct(CreateLeadPerfexCRMObject $createLeadPerfexCRMObject)
|
||||||
|
{
|
||||||
|
$this->createLeadPerfexCRMObject = $createLeadPerfexCRMObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
$lead = (App()->make(FetchesPerfexCRMLead::class))->execute($this->createLeadPerfexCRMObject->getEmail());
|
||||||
|
if(!is_null($lead)){
|
||||||
|
(App()->make(UpdatesPerfexCRMLead::class))->execute($lead, $this->createLeadPerfexCRMObject->getCompanyReference());
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
(App()->make(CreatePerfexCRMLeadProcessor::class))->execute($this->createLeadPerfexCRMObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Jobs;
|
||||||
|
|
||||||
|
use App\Classes\Modules\PerfexCRM\Processors\CreatePerfexCRMInvoiceProcessor;
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
use App\Models\Transaction;
|
||||||
|
|
||||||
|
class CreatePerfexCRMInvoice implements ShouldQueue
|
||||||
|
{
|
||||||
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||||
|
|
||||||
|
/** @var Transaction $transaction*/
|
||||||
|
private $transaction;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CreatePerfexCRMInvoice constructor.
|
||||||
|
* @param Transaction $transaction
|
||||||
|
*/
|
||||||
|
public function __construct(Transaction $transaction)
|
||||||
|
{
|
||||||
|
$this->transaction = $transaction;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
(App()->make(CreatePerfexCRMInvoiceProcessor::class))->execute($this->transaction);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Jobs;
|
||||||
|
|
||||||
|
use App\Classes\Modules\PerfexCRM\Processors\CreatePerfexCRMTaskProcessor;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\FetchesPerfexCRMLead;
|
||||||
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\CreateTaskPerfexCRMObject;
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
|
||||||
|
class CreatePerfexCRMSingleTask implements ShouldQueue
|
||||||
|
{
|
||||||
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||||
|
|
||||||
|
/** @var FetchesPerfexCRMLead */
|
||||||
|
private $fetchesPerfexCRMLead;
|
||||||
|
|
||||||
|
/** @var CreateTaskPerfexCRMObject */
|
||||||
|
private $createTaskPerfexCRMObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CreatePerfexCRMSingleTask constructor.
|
||||||
|
* @param CreateTaskPerfexCRMObject $createTaskPerfexCRMObject
|
||||||
|
*/
|
||||||
|
public function __construct(CreateTaskPerfexCRMObject $createTaskPerfexCRMObject)
|
||||||
|
{
|
||||||
|
$this->createTaskPerfexCRMObject = $createTaskPerfexCRMObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
$lead = (App()->make(FetchesPerfexCRMLead::class))->execute($this->createTaskPerfexCRMObject->getEmail());
|
||||||
|
if(!is_null($lead))
|
||||||
|
{
|
||||||
|
$this->createTaskPerfexCRMObject->setLeadId($lead->id);
|
||||||
|
(App()->make(CreatePerfexCRMTaskProcessor::class))->execute($this->createTaskPerfexCRMObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,8 +2,12 @@
|
|||||||
|
|
||||||
namespace App\Classes\Jobs;
|
namespace App\Classes\Jobs;
|
||||||
|
|
||||||
|
use App\Classes\Modules\PackingLists\Processors\FetchContainersFromYdPortalProcessor;
|
||||||
|
use App\Classes\Modules\PackingLists\Processors\FetchContainersUpdatesFromYdPortalProcessor;
|
||||||
|
use App\Classes\Modules\PackingLists\Processors\FetchDeliveryUpdatesFromYdPortalProcessor;
|
||||||
use App\Classes\Modules\PackingLists\Processors\FetchOrderListsFromYdPortalProcessor;
|
use App\Classes\Modules\PackingLists\Processors\FetchOrderListsFromYdPortalProcessor;
|
||||||
|
|
||||||
|
use App\Classes\Modules\PackingLists\Processors\FetchPackingListsFromYdPortalProcessor;
|
||||||
use Illuminate\Bus\Queueable;
|
use Illuminate\Bus\Queueable;
|
||||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
use Illuminate\Foundation\Bus\Dispatchable;
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
@@ -25,8 +29,12 @@ class FetchOrdersFromYDPortalJob implements ShouldQueue
|
|||||||
*/
|
*/
|
||||||
public function handle()
|
public function handle()
|
||||||
{
|
{
|
||||||
|
(App()->make(FetchPackingListsFromYdPortalProcessor::class))->execute();
|
||||||
|
(App()->make(FetchContainersFromYdPortalProcessor::class))->execute();
|
||||||
|
(App()->make(FetchContainersUpdatesFromYdPortalProcessor::class))->execute();
|
||||||
|
(App()->make(FetchDeliveryUpdatesFromYdPortalProcessor::class))->execute();
|
||||||
|
|
||||||
(App()->make(FetchOrderListsFromYdPortalProcessor::class))->execute();
|
// (App()->make(FetchOrderListsFromYdPortalProcessor::class))->execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,54 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Jobs;
|
||||||
|
|
||||||
|
use App\Classes\Modules\PerfexCRM\Processors\UpdatePerfexCRMProcessor;
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMObject;
|
||||||
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMInvoiceObject;
|
||||||
|
|
||||||
|
class UpdatePerfexCRM implements ShouldQueue
|
||||||
|
{
|
||||||
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||||
|
|
||||||
|
/** @var UpdatePerfexCRMObject */
|
||||||
|
private $updatePerfexCRMObject;
|
||||||
|
|
||||||
|
/** @var UpdatePerfexCRMInvoice */
|
||||||
|
private $nextJob;
|
||||||
|
|
||||||
|
/** @var */
|
||||||
|
private $transaction;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UpdatePerfexCRM constructor.
|
||||||
|
* @param UpdatePerfexCRMObject $updatePerfexCRMObject
|
||||||
|
* @param UpdatePerfexCRMInvoice $nextJob
|
||||||
|
* @param $transaction
|
||||||
|
*/
|
||||||
|
public function __construct(UpdatePerfexCRMObject $updatePerfexCRMObject, $transaction, $nextJob)
|
||||||
|
{
|
||||||
|
$this->updatePerfexCRMObject = $updatePerfexCRMObject;
|
||||||
|
$this->nextJob = $nextJob;
|
||||||
|
$this->transaction = $transaction;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
$result = (App()->make(UpdatePerfexCRMProcessor::class))->execute($this->updatePerfexCRMObject);
|
||||||
|
if($this->nextJob != null && $this->transaction != null){
|
||||||
|
$updatePerfexCRMInvoiceOject = new UpdatePerfexCRMInvoiceObject(
|
||||||
|
$this->updatePerfexCRMObject->getContactEmail(),
|
||||||
|
$result->projectId,
|
||||||
|
$this->transaction,
|
||||||
|
true
|
||||||
|
);
|
||||||
|
/** @var UpdatePerfexCRMInvoice $nextJob */
|
||||||
|
$this->nextJob::dispatch($updatePerfexCRMInvoiceOject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Jobs;
|
||||||
|
|
||||||
|
use App\Classes\Modules\PerfexCRM\Processors\CreatePerfexCRMInvoiceProcessor;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\CreatesPerfexCRMInvoicePayment;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\FetchesPerfexCRMCustomer;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\FetchesPerfexCRMInvoice;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\FetchesPerfexCRMProject;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\UpdatesPerfexCRMInvoice;
|
||||||
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMInvoiceObject;
|
||||||
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\InvoicePaymentPerfexCRMObject;
|
||||||
|
use App\Classes\ValueObjects\Constants\PerfexCRMInvoiceStatus;
|
||||||
|
use App\Models\PackingList;
|
||||||
|
use App\Models\Transaction;
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
|
||||||
|
use App\Classes\General\Helper;
|
||||||
|
|
||||||
|
class UpdatePerfexCRMInvoice implements ShouldQueue
|
||||||
|
{
|
||||||
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||||
|
|
||||||
|
/** @var UpdatePerfexCRMInvoiceObject */
|
||||||
|
private $updatePerfexCRMInvoiceObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CreatePerfexCRMSingleTask constructor.
|
||||||
|
* @param UpdatePerfexCRMInvoiceObject $createTaskPerfexCRMObject
|
||||||
|
*/
|
||||||
|
public function __construct(UpdatePerfexCRMInvoiceObject $updatePerfexCRMInvoiceObject)
|
||||||
|
{
|
||||||
|
$this->updatePerfexCRMInvoiceObject = $updatePerfexCRMInvoiceObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
//get the client id
|
||||||
|
$customer = (App()->make(FetchesPerfexCRMCustomer::class))->execute($this->updatePerfexCRMInvoiceObject->getEmail());
|
||||||
|
$transaction = $this->updatePerfexCRMInvoiceObject->getTransaction();
|
||||||
|
|
||||||
|
//get the invoice id
|
||||||
|
$invoiceId = 0;
|
||||||
|
$invoiceStatus = 0;
|
||||||
|
$invoice = (App()->make(FetchesPerfexCRMInvoice::class))->execute($customer->userid,"INV-", $transaction->owner->bill_no);
|
||||||
|
Log::error(json_encode('UpdatePerfexCRMInvoice debug $transaction->owner->bill_no: '.$transaction->owner->bill_no));
|
||||||
|
|
||||||
|
if(is_null($invoice)){
|
||||||
|
$result = (App()->make(CreatePerfexCRMInvoiceProcessor::class))->execute($transaction->owner, $this->updatePerfexCRMInvoiceObject->getIsPaid());
|
||||||
|
if ($result) {
|
||||||
|
$invoiceId = $result->payload['id'];
|
||||||
|
} else {
|
||||||
|
// Log::error(json_encode('UpdatePerfexCRMInvoice CreatePerfexCRMInvoiceProcessor failed'));
|
||||||
|
Helper::debugLoggerForPerfexCRM('UpdatePerfexCRMInvoice CreatePerfexCRMInvoiceProcessor failed');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$invoiceId = $invoice->id;
|
||||||
|
$invoiceStatus = $invoice->status;
|
||||||
|
|
||||||
|
//This only run when invoice already exist and the invoice does not have a PAID status
|
||||||
|
if($invoiceStatus != PerfexCRMInvoiceStatus::PAID){
|
||||||
|
Log::error(json_encode('UpdatePerfexCRMInvoice debug $this->updatePerfexCRMInvoiceObject->getProjectId(): '.$this->updatePerfexCRMInvoiceObject->getProjectId()));
|
||||||
|
//update invoice
|
||||||
|
(App()->make(UpdatesPerfexCRMInvoice::class))->execute($invoice, $this->updatePerfexCRMInvoiceObject->getProjectId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//create invoice payment
|
||||||
|
if($invoiceId != 0 && $invoiceStatus != PerfexCRMInvoiceStatus::PAID){
|
||||||
|
|
||||||
|
$date = Carbon::parse($transaction->created_at)->format('Y-m-d');
|
||||||
|
|
||||||
|
$invoicePaymentPerfexCRMObject = new InvoicePaymentPerfexCRMObject(
|
||||||
|
$invoiceId,
|
||||||
|
"$transaction->amount",
|
||||||
|
$date,
|
||||||
|
1,
|
||||||
|
"",
|
||||||
|
""
|
||||||
|
);
|
||||||
|
(App()->make(CreatesPerfexCRMInvoicePayment::class))->execute($invoicePaymentPerfexCRMObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function delay($delay)
|
||||||
|
{
|
||||||
|
// Add delay in seconds to the job
|
||||||
|
$this->delay = $delay;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Jobs;
|
||||||
|
|
||||||
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMObject;
|
||||||
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMInvoiceObject;
|
||||||
|
use App\Models\PackingList;
|
||||||
|
use App\Models\Transaction;
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
|
||||||
|
class UpdatePerfexCRMPrelude implements ShouldQueue
|
||||||
|
{
|
||||||
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||||
|
|
||||||
|
/** @var */
|
||||||
|
private $packingList;
|
||||||
|
|
||||||
|
/** @var */
|
||||||
|
private $transaction;
|
||||||
|
|
||||||
|
/** @var UpdatePerfexCRMObject */
|
||||||
|
private $updatePerfexCRMObject;
|
||||||
|
|
||||||
|
/** @var UpdatePerfexCRM */
|
||||||
|
private $nextJob1;
|
||||||
|
|
||||||
|
/** @var UpdatePerfexCRMInvoice */
|
||||||
|
private $nextJob2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UpdatePerfexCRMPrelude constructor.
|
||||||
|
* @param $packingList
|
||||||
|
* @param $transaction
|
||||||
|
* @param UpdatePerfexCRMObject $updatePerfexCRMObject
|
||||||
|
* @param UpdatePerfexCRM $nextJob1
|
||||||
|
* @param UpdatePerfexCRMInvoice $nextJob2
|
||||||
|
*/
|
||||||
|
public function __construct($packingList, $transaction, UpdatePerfexCRMObject $updatePerfexCRMObject, $nextJob1, $nextJob2)
|
||||||
|
{
|
||||||
|
$this->packingList = $packingList;
|
||||||
|
$this->transaction = $transaction;
|
||||||
|
$this->updatePerfexCRMObject = $updatePerfexCRMObject;
|
||||||
|
$this->nextJob1 = $nextJob1;
|
||||||
|
$this->nextJob2 = $nextJob2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
if(is_null($this->packingList)){
|
||||||
|
$this->packingList = $this->transaction->owner->owner;
|
||||||
|
}
|
||||||
|
$amount = 0.00;
|
||||||
|
if(!is_null($this->transaction)){
|
||||||
|
$amount = $this->transaction->amount;
|
||||||
|
}
|
||||||
|
$data = [
|
||||||
|
'amount' => number_format($amount, 2, '.', ''),
|
||||||
|
'link_order' => config('app.url').'/order/show/'.$this->packingList->owner->reference,
|
||||||
|
'link_autocount_or' => 'https://docs.google.com/spreadsheets/d/1Q3rJBGQ9Bo04HZp5WR9zbLp7pIW2kfDYsabxG7JON-4/edit#gid=2013983170',
|
||||||
|
'link_perfex' => 'https://perfex.cief-malaysia.com/admin/projects/view/89',
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
$result = $this->replacePlaceholders($this->updatePerfexCRMObject->getTasks(), $data);
|
||||||
|
$this->updatePerfexCRMObject->setTasks($result);
|
||||||
|
/** @var UpdatePerfexCRM $nextJob1 */
|
||||||
|
/** @var UpdatePerfexCRMInvoice $nextJob2 */
|
||||||
|
$this->nextJob1::dispatch($this->updatePerfexCRMObject, $this->transaction, $this->nextJob2);
|
||||||
|
}
|
||||||
|
|
||||||
|
function replacePlaceholders($template, $data, $prefix = '')
|
||||||
|
{
|
||||||
|
foreach ($template as $key => $value) {
|
||||||
|
foreach ($data as $dataKey => $dataValue) {
|
||||||
|
if (is_array($dataValue)) {
|
||||||
|
$template[$key] = $this->replacePlaceholders($template[$key], $dataValue, $dataKey);
|
||||||
|
} else {
|
||||||
|
if ($prefix != '') {
|
||||||
|
$template[$key] = str_replace('{' .$prefix. "." .$dataKey . '}', $dataValue, $template[$key]);
|
||||||
|
} else {
|
||||||
|
$template[$key] = str_replace('{' . $dataKey . '}', $dataValue, $template[$key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $template;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -8,23 +8,27 @@ use App\Classes\General\Services\GeneratesInitials;
|
|||||||
use App\Classes\Modules\Accounts\Processors\AuthenticationProcessor;
|
use App\Classes\Modules\Accounts\Processors\AuthenticationProcessor;
|
||||||
use App\Classes\Modules\Accounts\Processors\CreateUserProcessor;
|
use App\Classes\Modules\Accounts\Processors\CreateUserProcessor;
|
||||||
use App\Classes\Modules\Accounts\Processors\GenerateEmailVerificationAttemptProcessor;
|
use App\Classes\Modules\Accounts\Processors\GenerateEmailVerificationAttemptProcessor;
|
||||||
use App\Classes\Modules\Companies\DataTransferObjects\CompanyConnectionObject;
|
|
||||||
use App\Classes\Modules\Companies\Processors\AssignEmployeeProcessor;
|
use App\Classes\Modules\Companies\Processors\AssignEmployeeProcessor;
|
||||||
use App\Classes\Modules\Companies\Processors\CreateCompanyProcessor;
|
use App\Classes\Modules\Companies\Processors\CreateCompanyProcessor;
|
||||||
use App\Classes\Modules\Companies\Processors\CreateCompanyModuleProcessor;
|
use App\Classes\Modules\Companies\Processors\CreateCompanyModuleProcessor;
|
||||||
use App\Classes\Modules\Companies\DataTransferObjects\EmploymentObject;
|
|
||||||
use App\Classes\Modules\Companies\Services\ApprovesCompanyConnection;
|
use App\Classes\Modules\Companies\Services\ApprovesCompanyConnection;
|
||||||
use App\Classes\Modules\Companies\Services\CreatesCompanyConnection;
|
use App\Classes\Modules\Companies\Services\CreatesCompanyConnection;
|
||||||
use App\Classes\Modules\Companies\Services\FetchesCompanyModule;
|
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\Contacts\Processors\CreateContactProcessor;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Processors\CreatePerfexCRMLeadProcessor;
|
||||||
use App\Classes\Modules\Documents\Processors\UploadIdentityDocumentProcessor;
|
use App\Classes\Modules\Documents\Processors\UploadIdentityDocumentProcessor;
|
||||||
|
use App\Classes\Modules\Companies\DataTransferObjects\CompanyConnectionObject;
|
||||||
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\CreateLeadPerfexCRMObject;
|
||||||
|
use App\Classes\Modules\Companies\DataTransferObjects\EmploymentObject;
|
||||||
|
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
|
||||||
|
|
||||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
use App\Classes\ValueObjects\Constants\BusinessType;
|
use App\Classes\ValueObjects\Constants\BusinessType;
|
||||||
use App\Classes\ValueObjects\Constants\CompanyType;
|
use App\Classes\ValueObjects\Constants\CompanyType;
|
||||||
use App\Classes\ValueObjects\Constants\RoleTypes;
|
use App\Classes\ValueObjects\Constants\RoleTypes;
|
||||||
|
|
||||||
|
use App\Classes\Jobs\CreatePerfexCRMCustomer;
|
||||||
|
|
||||||
use App\Models\Company;
|
use App\Models\Company;
|
||||||
use App\Models\CompanyModule;
|
use App\Models\CompanyModule;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
@@ -80,6 +84,9 @@ class CreateCustomerLogic extends AbstractControllerLogic
|
|||||||
/** @var FetchesCompanyModule */
|
/** @var FetchesCompanyModule */
|
||||||
private $fetchesCompanyModule;
|
private $fetchesCompanyModule;
|
||||||
|
|
||||||
|
/** @var CreatePerfexCRMLeadProcessor */
|
||||||
|
private $createPerfexCRMLeadProcessor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CreateCustomerLogic constructor.
|
* CreateCustomerLogic constructor.
|
||||||
* @param CreateUserProcessor $createUserProcessor
|
* @param CreateUserProcessor $createUserProcessor
|
||||||
@@ -93,8 +100,9 @@ class CreateCustomerLogic extends AbstractControllerLogic
|
|||||||
* @param AuthenticationProcessor $authenticationProcessor
|
* @param AuthenticationProcessor $authenticationProcessor
|
||||||
* @param GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor
|
* @param GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor
|
||||||
* @param FetchesCompanyModule $fetchesCompanyModule
|
* @param FetchesCompanyModule $fetchesCompanyModule
|
||||||
|
* @param CreatePerfexCRMLeadProcessor $createPerfexCRMLeadProcessor
|
||||||
*/
|
*/
|
||||||
public function __construct(CreateUserProcessor $createUserProcessor, CreateCompanyProcessor $createCompanyProcessor, CreateCompanyModuleProcessor $createCompanyModuleProcessor, CreateContactProcessor $createContactProcessor, CreatesCompanyConnection $createsCompanyConnection, ApprovesCompanyConnection $approvesCompanyConnection, AssignEmployeeProcessor $assignEmployeeProcessor, UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor, AuthenticationProcessor $authenticationProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor, FetchesCompanyModule $fetchesCompanyModule)
|
public function __construct(CreateUserProcessor $createUserProcessor, CreateCompanyProcessor $createCompanyProcessor, CreateCompanyModuleProcessor $createCompanyModuleProcessor, CreateContactProcessor $createContactProcessor, CreatesCompanyConnection $createsCompanyConnection, ApprovesCompanyConnection $approvesCompanyConnection, AssignEmployeeProcessor $assignEmployeeProcessor, UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor, AuthenticationProcessor $authenticationProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor, FetchesCompanyModule $fetchesCompanyModule, CreatePerfexCRMLeadProcessor $createPerfexCRMLeadProcessor)
|
||||||
{
|
{
|
||||||
$this->createUserProcessor = $createUserProcessor;
|
$this->createUserProcessor = $createUserProcessor;
|
||||||
$this->createCompanyProcessor = $createCompanyProcessor;
|
$this->createCompanyProcessor = $createCompanyProcessor;
|
||||||
@@ -107,6 +115,7 @@ class CreateCustomerLogic extends AbstractControllerLogic
|
|||||||
$this->authenticationProcessor = $authenticationProcessor;
|
$this->authenticationProcessor = $authenticationProcessor;
|
||||||
$this->generateEmailVerificationAttemptProcessor = $generateEmailVerificationAttemptProcessor;
|
$this->generateEmailVerificationAttemptProcessor = $generateEmailVerificationAttemptProcessor;
|
||||||
$this->fetchesCompanyModule = $fetchesCompanyModule;
|
$this->fetchesCompanyModule = $fetchesCompanyModule;
|
||||||
|
$this->createPerfexCRMLeadProcessor = $createPerfexCRMLeadProcessor;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -146,6 +155,18 @@ class CreateCustomerLogic extends AbstractControllerLogic
|
|||||||
|
|
||||||
$this->uploadIdentityDocumentProcessor->execute($request, $company);
|
$this->uploadIdentityDocumentProcessor->execute($request, $company);
|
||||||
|
|
||||||
|
if(config('perfexcrm.is_enabled') == 'true'){
|
||||||
|
// $this->createPerfexCRMLeadProcessor->execute($request);
|
||||||
|
$createLeadPerfexCRMObject = new CreateLeadPerfexCRMObject(
|
||||||
|
$request->input('name'),
|
||||||
|
$request->input('email'),
|
||||||
|
$request->input('phone'),
|
||||||
|
$request->input('type') === CompanyType::COMPANY_BUSINESS ? $request->input('company_name') : $request->input('name'),
|
||||||
|
$connection->invitee_reference
|
||||||
|
);
|
||||||
|
CreatePerfexCRMCustomer::dispatch($createLeadPerfexCRMObject);
|
||||||
|
}
|
||||||
|
|
||||||
// $this->generateEmailVerificationAttemptProcessor->execute($user);
|
// $this->generateEmailVerificationAttemptProcessor->execute($user);
|
||||||
|
|
||||||
return $this->response($this->authenticationProcessor->execute($request));
|
return $this->response($this->authenticationProcessor->execute($request));
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ namespace App\Classes\Modules\Accounts\ControllersLogic;
|
|||||||
|
|
||||||
|
|
||||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
use App\Classes\Modules\Accounts\Services\UpdatesUser;
|
use App\Classes\Modules\Accounts\Services\UpdatesUserFullName;
|
||||||
use App\Classes\Modules\Accounts\Services\FetchesUser;
|
use App\Classes\Modules\Accounts\Services\FetchesUser;
|
||||||
use App\Classes\Modules\Accounts\Standards\Rules\CanUpdateUser;
|
use App\Classes\Modules\Accounts\Standards\Rules\CanUpdateUser;
|
||||||
use App\Classes\Modules\Accounts\DataTransferObjects\FullNameObject;
|
use App\Classes\Modules\Accounts\DataTransferObjects\FullNameObject;
|
||||||
@@ -29,8 +29,8 @@ class UpdateUserLogic extends AbstractControllerLogic
|
|||||||
/** @var CanUpdateUser */
|
/** @var CanUpdateUser */
|
||||||
private $canUpdateUser;
|
private $canUpdateUser;
|
||||||
|
|
||||||
/** @var UpdatesUser */
|
/** @var UpdatesUserFullName */
|
||||||
private $updatesUser;
|
private $updatesUserFullName;
|
||||||
|
|
||||||
/** @var FetchesUser */
|
/** @var FetchesUser */
|
||||||
private $fetchesUser;
|
private $fetchesUser;
|
||||||
@@ -38,13 +38,13 @@ class UpdateUserLogic extends AbstractControllerLogic
|
|||||||
/**
|
/**
|
||||||
* UpdateAddressLogic constructor.
|
* UpdateAddressLogic constructor.
|
||||||
* @param CanUpdateUser $canUpdateUser
|
* @param CanUpdateUser $canUpdateUser
|
||||||
* @param UpdatesUser $updatesUser
|
* @param UpdatesUserFullName $updatesUserFullName
|
||||||
* @param FetchesUser $fetchesUSer
|
* @param FetchesUser $fetchesUSer
|
||||||
*/
|
*/
|
||||||
public function __construct(CanUpdateUser $canUpdateUser, UpdatesUser $updatesUser, FetchesUser $fetchesUser)
|
public function __construct(CanUpdateUser $canUpdateUser, UpdatesUserFullName $updatesUserFullName, FetchesUser $fetchesUser)
|
||||||
{
|
{
|
||||||
$this->canUpdateUser = $canUpdateUser;
|
$this->canUpdateUser = $canUpdateUser;
|
||||||
$this->updatesUser = $updatesUser;
|
$this->updatesUserFullName = $updatesUserFullName;
|
||||||
$this->fetchesUser = $fetchesUser;
|
$this->fetchesUser = $fetchesUser;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,7 +64,7 @@ class UpdateUserLogic extends AbstractControllerLogic
|
|||||||
|
|
||||||
$query = $this->fetchesUser->execute(['id' => $request->route('id')]);
|
$query = $this->fetchesUser->execute(['id' => $request->route('id')]);
|
||||||
|
|
||||||
$query = $this->updatesUser->execute($query, $object);
|
$query = $this->updatesUserFullName->execute($query, $object);
|
||||||
|
|
||||||
return $this->resourceResponse(new UserResource($query));
|
return $this->resourceResponse(new UserResource($query));
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,71 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Accounts\ControllersLogic;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
|
use App\Classes\Modules\Accounts\Services\UpdatesUser;
|
||||||
|
use App\Classes\Modules\Accounts\Services\FetchesUser;
|
||||||
|
use App\Classes\Modules\Accounts\Standards\Rules\CanUpdateUser;
|
||||||
|
use App\Classes\Modules\Accounts\DataTransferObjects\FullNameObject;
|
||||||
|
use App\Classes\Modules\Accounts\DataTransferObjects\UserObject;
|
||||||
|
use App\Http\Resources\UserResource;
|
||||||
|
use ErrorException;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class UpdateUserRoleLogic extends AbstractControllerLogic
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function notification():array {
|
||||||
|
return [
|
||||||
|
'title' => 'Updated Admin Role',
|
||||||
|
'message' => 'You have successfully updated the Admin Role'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var CanUpdateUser */
|
||||||
|
private $canUpdateUser;
|
||||||
|
|
||||||
|
/** @var UpdatesUser */
|
||||||
|
private $updatesUser;
|
||||||
|
|
||||||
|
/** @var FetchesUser */
|
||||||
|
private $fetchesUser;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UpdateAddressLogic constructor.
|
||||||
|
* @param CanUpdateUser $canUpdateUser
|
||||||
|
* @param UpdatesUser $updatesUser
|
||||||
|
* @param FetchesUser $fetchesUSer
|
||||||
|
*/
|
||||||
|
public function __construct(CanUpdateUser $canUpdateUser, UpdatesUser $updatesUser, FetchesUser $fetchesUser)
|
||||||
|
{
|
||||||
|
$this->canUpdateUser = $canUpdateUser;
|
||||||
|
$this->updatesUser = $updatesUser;
|
||||||
|
$this->fetchesUser = $fetchesUser;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @return JsonResponse
|
||||||
|
* @throws ErrorException
|
||||||
|
*/
|
||||||
|
public function logic(Request $request) : JsonResponse
|
||||||
|
{
|
||||||
|
$query = $this->fetchesUser->execute(['id' => $request->route('id')]);
|
||||||
|
|
||||||
|
$object = new UserObject($query->name, $request->input('type'));
|
||||||
|
|
||||||
|
$this->canUpdateUser->passes($object);
|
||||||
|
|
||||||
|
$query = $this->updatesUser->execute($query, $object);
|
||||||
|
|
||||||
|
return $this->resourceResponse(new UserResource($query));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Accounts\DataTransferObjects;
|
||||||
|
|
||||||
|
use App\Classes\General\Interfaces\DataTransferObject;
|
||||||
|
|
||||||
|
class UserObject implements DataTransferObject
|
||||||
|
{
|
||||||
|
/** @var string */
|
||||||
|
private $name;
|
||||||
|
|
||||||
|
/** @var int */
|
||||||
|
private $type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FullNameObject constructor.
|
||||||
|
* @param string $name
|
||||||
|
*/
|
||||||
|
public function __construct(string $name, int $type)
|
||||||
|
{
|
||||||
|
$this->name = $name;
|
||||||
|
$this->type = $type;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getName(): string
|
||||||
|
{
|
||||||
|
return $this->name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getType(): int
|
||||||
|
{
|
||||||
|
return $this->type;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
namespace App\Classes\Modules\Accounts\Services;
|
namespace App\Classes\Modules\Accounts\Services;
|
||||||
|
|
||||||
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||||
use App\Classes\Modules\Accounts\DataTransferObjects\FullNameObject;
|
use App\Classes\Modules\Accounts\DataTransferObjects\UserObject;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
|
|
||||||
class UpdatesUser extends AbstractUpdateRecord
|
class UpdatesUser extends AbstractUpdateRecord
|
||||||
@@ -11,13 +11,14 @@ class UpdatesUser extends AbstractUpdateRecord
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param User $model
|
* @param User $model
|
||||||
* @param FullNameObject $object
|
* @param UserObject $object
|
||||||
* @return \Illuminate\Database\Eloquent\Model
|
* @return \Illuminate\Database\Eloquent\Model
|
||||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
*/
|
*/
|
||||||
public function execute(User $model, FullNameObject $object) {
|
public function execute(User $model, UserObject $object) {
|
||||||
|
|
||||||
$model->name = $object->getName();
|
$model->name = $object->getName();
|
||||||
|
$model->type = $object->getType();
|
||||||
return $this->handler($model);
|
return $this->handler($model);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Accounts\Services;
|
||||||
|
|
||||||
|
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||||
|
use App\Classes\Modules\Accounts\DataTransferObjects\FullNameObject;
|
||||||
|
use App\Models\User;
|
||||||
|
|
||||||
|
class UpdatesUserFullName extends AbstractUpdateRecord
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param User $model
|
||||||
|
* @param FullNameObject $object
|
||||||
|
* @return \Illuminate\Database\Eloquent\Model
|
||||||
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function execute(User $model, FullNameObject $object) {
|
||||||
|
|
||||||
|
$model->name = $object->getName();
|
||||||
|
return $this->handler($model);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,9 @@
|
|||||||
namespace App\Classes\Modules\Addresses\ControllersLogic;
|
namespace App\Classes\Modules\Addresses\ControllersLogic;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Classes\Exceptions\AccessForbiddenException;
|
||||||
|
use App\Classes\Exceptions\MalformedRequestException;
|
||||||
|
use App\Classes\Exceptions\RequestValidationException;
|
||||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
use App\Classes\General\Interfaces\Contactable;
|
use App\Classes\General\Interfaces\Contactable;
|
||||||
use App\Classes\Modules\Addresses\Services\CreatesAddress;
|
use App\Classes\Modules\Addresses\Services\CreatesAddress;
|
||||||
@@ -17,6 +20,7 @@ use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor;
|
|||||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
use App\Http\Resources\AddressResource;
|
use App\Http\Resources\AddressResource;
|
||||||
use App\Models\Address;
|
use App\Models\Address;
|
||||||
|
use App\Transformers\AddressTransformer;
|
||||||
use ErrorException;
|
use ErrorException;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -27,7 +31,8 @@ class CreateAddressLogic extends AbstractControllerLogic
|
|||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function notification():array {
|
protected function notification(): array
|
||||||
|
{
|
||||||
return [
|
return [
|
||||||
'title' => 'Created Address',
|
'title' => 'Created Address',
|
||||||
'message' => 'You have successfully created a new Address'
|
'message' => 'You have successfully created a new Address'
|
||||||
@@ -74,11 +79,11 @@ class CreateAddressLogic extends AbstractControllerLogic
|
|||||||
/**
|
/**
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
* @throws AccessForbiddenException
|
||||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
* @throws MalformedRequestException
|
||||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
* @throws RequestValidationException
|
||||||
*/
|
*/
|
||||||
public function logic(Request $request) : JsonResponse
|
public function logic(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
|
|
||||||
$district = $this->fetchesDistrict->execute(['id' => $request->input('district_id')]);
|
$district = $this->fetchesDistrict->execute(['id' => $request->input('district_id')]);
|
||||||
@@ -90,16 +95,22 @@ class CreateAddressLogic extends AbstractControllerLogic
|
|||||||
/** @var Address $address */
|
/** @var Address $address */
|
||||||
$address = $this->createsAddress->execute($this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]), $object);
|
$address = $this->createsAddress->execute($this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]), $object);
|
||||||
|
|
||||||
if($request->input('phone')){
|
if ($request->input('phone')) {
|
||||||
$contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', '');
|
$contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', '');
|
||||||
$this->createContactProcessor->execute($contactObject, $address);
|
$this->createContactProcessor->execute($contactObject, $address);
|
||||||
}
|
}
|
||||||
|
|
||||||
if($request->input('remark')){
|
if ($request->input('remark')) {
|
||||||
$remarkObject = new RemarkObject($request->input('remark'), Auth()->user()->id);
|
$remarkObject = new RemarkObject($request->input('remark'), Auth()->user()->id);
|
||||||
$this->createRemarkProcessor->execute($address, $remarkObject);
|
$this->createRemarkProcessor->execute($address, $remarkObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* return fractal()
|
||||||
|
->item($address, new AddressTransformer())
|
||||||
|
->parseIncludes('remark')
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
|
|
||||||
return $this->resourceResponse(new AddressResource($address));
|
return $this->resourceResponse(new AddressResource($address));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,99 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Addresses\ControllersLogic;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Classes\Exceptions\AccessForbiddenException;
|
||||||
|
use App\Classes\Exceptions\MalformedRequestException;
|
||||||
|
use App\Classes\Exceptions\RequestValidationException;
|
||||||
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
|
use App\Classes\Modules\Addresses\Services\CreatesAddress;
|
||||||
|
use App\Classes\Modules\Addresses\Standards\Rules\CanCreateAddress;
|
||||||
|
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
|
||||||
|
use App\Classes\Modules\Addresses\Services\FetchesAddress;
|
||||||
|
use App\Classes\Modules\Companies\Services\FetchesCompanyModule;
|
||||||
|
use App\Classes\ValueObjects\Constants\AddressType;
|
||||||
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
|
use App\Http\Resources\AddressResource;
|
||||||
|
use App\Models\Address;
|
||||||
|
use App\Models\CompanyModule;
|
||||||
|
use App\Transformers\AddressTransformer;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class CreateBillingAddressLogic extends AbstractControllerLogic
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function notification(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'title' => 'Created Billing Address',
|
||||||
|
'message' => 'You have successfully created a new Billing Address'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var CanCreateAddress */
|
||||||
|
private $canCreateAddress;
|
||||||
|
|
||||||
|
/** @var FetchesCompanyModule */
|
||||||
|
private $fetchesCompanyModule;
|
||||||
|
|
||||||
|
/** @var CreatesAddress */
|
||||||
|
private $createsAddress;
|
||||||
|
|
||||||
|
/** @var FetchesAddress */
|
||||||
|
private $fetchesAddress;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CreateAddressLogic constructor.
|
||||||
|
* @param CanCreateAddress $canCreateAddress
|
||||||
|
* @param FetchesCompanyModule $fetchesCompanyModule
|
||||||
|
* @param CreatesAddress $createsAddress
|
||||||
|
* @param FetchesAddress $fetchesAddress
|
||||||
|
*/
|
||||||
|
public function __construct(CanCreateAddress $canCreateAddress, FetchesCompanyModule $fetchesCompanyModule, CreatesAddress $createsAddress, FetchesAddress $fetchesAddress)
|
||||||
|
{
|
||||||
|
$this->canCreateAddress = $canCreateAddress;
|
||||||
|
$this->fetchesCompanyModule = $fetchesCompanyModule;
|
||||||
|
$this->createsAddress = $createsAddress;
|
||||||
|
$this->fetchesAddress = $fetchesAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @return JsonResponse
|
||||||
|
* @throws AccessForbiddenException
|
||||||
|
* @throws MalformedRequestException
|
||||||
|
* @throws RequestValidationException
|
||||||
|
*/
|
||||||
|
public function logic(Request $request): JsonResponse
|
||||||
|
{
|
||||||
|
$companyModule = $this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]);
|
||||||
|
|
||||||
|
$billingAddressInputed = $this->fetchesAddress->execute(['id' => $request->input('billing_address_id')]);
|
||||||
|
|
||||||
|
if ($billingAddressInputed->type !== AddressType::BILLING || $billingAddressInputed->id !== $companyModule->addresses->where('type', AddressType::BILLING)->first()->id) {
|
||||||
|
// delete all current billing address
|
||||||
|
Address::where('owner_type', CompanyModule::class)->where('owner_id', $request->input('company_module_id'))->where('type', AddressType::BILLING)->delete();
|
||||||
|
|
||||||
|
// create new billing addrress
|
||||||
|
$billingAddress = new AddressObject($billingAddressInputed->street_one, $billingAddressInputed->street_two, $billingAddressInputed->country_id, $billingAddressInputed->state_id, $billingAddressInputed->district_id, $billingAddressInputed->postcode, AddressType::BILLING, ApprovalStatus::APPROVED, $billingAddressInputed->reference);
|
||||||
|
$this->canCreateAddress->passes($billingAddress);
|
||||||
|
$this->createsAddress->execute($companyModule, $billingAddress);
|
||||||
|
}
|
||||||
|
|
||||||
|
//load address with only owner address
|
||||||
|
|
||||||
|
/* return fractal()
|
||||||
|
->item($billingAddressInputed, new AddressTransformer())
|
||||||
|
->parseIncludes('Owner_address')
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
|
|
||||||
|
return $this->resourceResponse(new AddressResource($billingAddressInputed));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -3,6 +3,8 @@
|
|||||||
namespace App\Classes\Modules\Addresses\ControllersLogic;
|
namespace App\Classes\Modules\Addresses\ControllersLogic;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Classes\Exceptions\AccessForbiddenException;
|
||||||
|
use App\Classes\Exceptions\RequestValidationException;
|
||||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
use App\Classes\Modules\Addresses\Services\FetchesAddress;
|
use App\Classes\Modules\Addresses\Services\FetchesAddress;
|
||||||
use App\Classes\Modules\Addresses\Standards\Rules\CanFetchAddress;
|
use App\Classes\Modules\Addresses\Standards\Rules\CanFetchAddress;
|
||||||
@@ -17,7 +19,8 @@ class FetchAddressLogic extends AbstractControllerLogic
|
|||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function notification():array {
|
protected function notification(): array
|
||||||
|
{
|
||||||
return [
|
return [
|
||||||
'title' => 'Retrieved Address',
|
'title' => 'Retrieved Address',
|
||||||
'message' => 'You have successfully retrieved a Address'
|
'message' => 'You have successfully retrieved a Address'
|
||||||
@@ -45,15 +48,22 @@ class FetchAddressLogic extends AbstractControllerLogic
|
|||||||
/**
|
/**
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
* @throws AccessForbiddenException
|
||||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
* @throws RequestValidationException
|
||||||
*/
|
*/
|
||||||
public function logic(Request $request) : JsonResponse
|
public function logic(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
$this->canFetchAddress->passes();
|
$this->canFetchAddress->passes();
|
||||||
|
|
||||||
$query = $this->fetchesAddress->execute(['id' => $request->route('id')]);
|
$query = $this->fetchesAddress->execute(['id' => $request->route('id')]);
|
||||||
|
|
||||||
|
|
||||||
|
//load address with no relationships
|
||||||
|
/* return fractal()
|
||||||
|
->item($address, new AddressTransformer())
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
|
|
||||||
return $this->resourceResponse(new AddressResource($query));
|
return $this->resourceResponse(new AddressResource($query));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,10 +3,14 @@
|
|||||||
namespace App\Classes\Modules\Addresses\ControllersLogic;
|
namespace App\Classes\Modules\Addresses\ControllersLogic;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Classes\Exceptions\AccessForbiddenException;
|
||||||
|
use App\Classes\Exceptions\MalformedRequestException;
|
||||||
|
use App\Classes\Exceptions\RequestValidationException;
|
||||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
use App\Classes\Modules\Addresses\Services\ListsAddresses;
|
use App\Classes\Modules\Addresses\Services\ListsAddresses;
|
||||||
use App\Classes\Modules\Addresses\Standards\Rules\CanListAddresses;
|
use App\Classes\Modules\Addresses\Standards\Rules\CanListAddresses;
|
||||||
use App\Http\Resources\AddressResource;
|
use App\Http\Resources\AddressResource;
|
||||||
|
use App\Transformers\AddressTransformer;
|
||||||
use ErrorException;
|
use ErrorException;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -17,7 +21,8 @@ class ListAddressesLogic extends AbstractControllerLogic
|
|||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function notification():array {
|
protected function notification(): array
|
||||||
|
{
|
||||||
return [
|
return [
|
||||||
'title' => 'Retrieved Addresses',
|
'title' => 'Retrieved Addresses',
|
||||||
'message' => 'You have successfully retrieved a list of Addresses'
|
'message' => 'You have successfully retrieved a list of Addresses'
|
||||||
@@ -45,17 +50,25 @@ class ListAddressesLogic extends AbstractControllerLogic
|
|||||||
/**
|
/**
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
* @throws AccessForbiddenException
|
||||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
* @throws MalformedRequestException
|
||||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
* @throws RequestValidationException
|
||||||
*/
|
*/
|
||||||
public function logic(Request $request) : JsonResponse
|
public function logic(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
|
|
||||||
$this->canListAddresses->passes();
|
$this->canListAddresses->passes();
|
||||||
|
|
||||||
$query = $this->listsAddresses->execute($this->listsAddresses->deserializeFilters($request->input('filters')));
|
$query = $this->listsAddresses->execute($this->listsAddresses->deserializeFilters($request->input('filters')));
|
||||||
|
|
||||||
|
//a collection of addresses with all incluides
|
||||||
|
/* return fractal()
|
||||||
|
->collection($query, new AddressTransformer)
|
||||||
|
->parseIncludes('Owner_address')
|
||||||
|
->parseIncludes('remark')
|
||||||
|
->parseIncludes('contact')
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
return $this->collectionResponse(AddressResource::collection($query));
|
return $this->collectionResponse(AddressResource::collection($query));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ use App\Classes\General\Abstracts\AbstractControllerLogic;
|
|||||||
use App\Classes\Modules\Addresses\Services\ListsAddresses;
|
use App\Classes\Modules\Addresses\Services\ListsAddresses;
|
||||||
use App\Classes\Modules\Addresses\Services\ListsDistricts;
|
use App\Classes\Modules\Addresses\Services\ListsDistricts;
|
||||||
use App\Classes\Modules\Addresses\Standards\Rules\CanListAddresses;
|
use App\Classes\Modules\Addresses\Standards\Rules\CanListAddresses;
|
||||||
use App\Http\Resources\AddressResource;
|
|
||||||
use App\Http\Resources\DistrictResource;
|
use App\Http\Resources\DistrictResource;
|
||||||
use ErrorException;
|
use ErrorException;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ use App\Classes\General\Abstracts\AbstractControllerLogic;
|
|||||||
use App\Classes\Modules\Addresses\Services\ListsAddresses;
|
use App\Classes\Modules\Addresses\Services\ListsAddresses;
|
||||||
use App\Classes\Modules\Addresses\Services\ListsStates;
|
use App\Classes\Modules\Addresses\Services\ListsStates;
|
||||||
use App\Classes\Modules\Addresses\Standards\Rules\CanListAddresses;
|
use App\Classes\Modules\Addresses\Standards\Rules\CanListAddresses;
|
||||||
use App\Http\Resources\AddressResource;
|
|
||||||
use App\Http\Resources\StateResource;
|
use App\Http\Resources\StateResource;
|
||||||
use ErrorException;
|
use ErrorException;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ use App\Classes\Modules\Addresses\Services\FetchesAddress;
|
|||||||
use App\Classes\Modules\Addresses\Services\ResetsAddressesDefault;
|
use App\Classes\Modules\Addresses\Services\ResetsAddressesDefault;
|
||||||
use App\Classes\Modules\Addresses\Services\SetsAddressToDefault;
|
use App\Classes\Modules\Addresses\Services\SetsAddressToDefault;
|
||||||
use App\Models\Address;
|
use App\Models\Address;
|
||||||
|
use App\Transformers\AddressTransformer;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
@@ -33,7 +34,7 @@ class SetAddressToDefaultLogic extends AbstractControllerLogic
|
|||||||
/** @var ResetsAddressesDefault */
|
/** @var ResetsAddressesDefault */
|
||||||
private $resetsAddressesDefault;
|
private $resetsAddressesDefault;
|
||||||
|
|
||||||
/** @var SetsAddressToDefault*/
|
/** @var SetsAddressToDefault */
|
||||||
private $setsAddressToDefault;
|
private $setsAddressToDefault;
|
||||||
|
|
||||||
|
|
||||||
@@ -64,7 +65,15 @@ class SetAddressToDefaultLogic extends AbstractControllerLogic
|
|||||||
|
|
||||||
$this->resetsAddressesDefault->execute($address->owner, $address->type);
|
$this->resetsAddressesDefault->execute($address->owner, $address->type);
|
||||||
|
|
||||||
return $this->resourceResponse(new AddressResource($this->setsAddressToDefault->execute($address)));
|
|
||||||
|
$setAddress = $this->setsAddressToDefault->execute($address);
|
||||||
|
//no relationships needed
|
||||||
|
/* return fractal()
|
||||||
|
->item($setAddress, new AddressTransformer())
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
|
|
||||||
|
return $this->resourceResponse(new AddressResource($address));
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ use App\Classes\ValueObjects\Constants\AddressType;
|
|||||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
use App\Http\Resources\AddressResource;
|
use App\Http\Resources\AddressResource;
|
||||||
use App\Models\Address;
|
use App\Models\Address;
|
||||||
|
use App\Transformers\AddressTransformer;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
@@ -26,7 +27,8 @@ class UpdateAddressLogic extends AbstractControllerLogic
|
|||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function notification():array {
|
protected function notification(): array
|
||||||
|
{
|
||||||
return [
|
return [
|
||||||
'title' => 'Updated Address',
|
'title' => 'Updated Address',
|
||||||
'message' => 'You have successfully updated the Address'
|
'message' => 'You have successfully updated the Address'
|
||||||
@@ -77,7 +79,7 @@ class UpdateAddressLogic extends AbstractControllerLogic
|
|||||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||||
*/
|
*/
|
||||||
public function logic(Request $request) : JsonResponse
|
public function logic(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
$district = $this->fetchesDistrict->execute(['id' => $request->input('district_id')]);
|
$district = $this->fetchesDistrict->execute(['id' => $request->input('district_id')]);
|
||||||
|
|
||||||
@@ -90,18 +92,25 @@ class UpdateAddressLogic extends AbstractControllerLogic
|
|||||||
/** @var Address $address */
|
/** @var Address $address */
|
||||||
$address = $this->updatesAddress->execute($address, $object);
|
$address = $this->updatesAddress->execute($address, $object);
|
||||||
|
|
||||||
$address->contacts()->delete(); $address->remarks()->delete();
|
$address->contacts()->delete();
|
||||||
|
$address->remarks()->delete();
|
||||||
|
|
||||||
if($request->input('phone')){
|
if ($request->input('phone')) {
|
||||||
$contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', '');
|
$contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', '');
|
||||||
$this->createContactProcessor->execute($contactObject, $address);
|
$this->createContactProcessor->execute($contactObject, $address);
|
||||||
}
|
}
|
||||||
|
|
||||||
if($request->input('remark')){
|
if ($request->input('remark')) {
|
||||||
$remarkObject = new RemarkObject($request->input('remark'), Auth()->user()->id);
|
$remarkObject = new RemarkObject($request->input('remark'), Auth()->user()->id);
|
||||||
$this->createRemarkProcessor->execute($address, $remarkObject);
|
$this->createRemarkProcessor->execute($address, $remarkObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//only remark relationship needed
|
||||||
|
/* return fractal()
|
||||||
|
->item($address, new AddressTransformer())
|
||||||
|
->parseIncludes('remark')
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
return $this->resourceResponse(new AddressResource($address));
|
return $this->resourceResponse(new AddressResource($address));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ use App\Classes\Modules\Announcements\Services\FetchesAnnouncement;
|
|||||||
use App\Classes\Modules\Announcements\Services\UpdatesAnnouncement;
|
use App\Classes\Modules\Announcements\Services\UpdatesAnnouncement;
|
||||||
|
|
||||||
use App\Http\Resources\AnnouncementResource;
|
use App\Http\Resources\AnnouncementResource;
|
||||||
|
use Carbon\Carbon;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
@@ -66,8 +66,8 @@ class UpdateAnnouncementLogic extends AbstractControllerLogic
|
|||||||
$annoucement_object = new AnnouncementObject(
|
$annoucement_object = new AnnouncementObject(
|
||||||
$request->input('title'),
|
$request->input('title'),
|
||||||
$request->input('description'),
|
$request->input('description'),
|
||||||
$request->input('starting_on'),
|
Carbon::createFromFormat('d-m-Y', $request->input('starting_on'))->format('Y-m-d H:i:s'),
|
||||||
$request->input('ending_on')
|
Carbon::createFromFormat('d-m-Y', $request->input('ending_on'))->format('Y-m-d H:i:s')
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->canUpdateAnnouncement->passes($annoucement_object);
|
$this->canUpdateAnnouncement->passes($annoucement_object);
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ use App\Classes\Modules\Billplzs\DataTransferObjects\BillplzXSignatureObject;
|
|||||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
use App\Classes\Modules\Transactions\Services\FetchesTransaction;
|
use App\Classes\Modules\Transactions\Services\FetchesTransaction;
|
||||||
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
|
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
|
||||||
|
use App\Classes\ValueObjects\Constants\TransactionType;
|
||||||
use Illuminate\Support\Facades\App;
|
use Illuminate\Support\Facades\App;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
@@ -44,6 +45,9 @@ class CallbackBillplzLogic
|
|||||||
/** @var UpdateDoFromYDPortalProcessor */
|
/** @var UpdateDoFromYDPortalProcessor */
|
||||||
private $updateDoFromYDPortalProcessor ;
|
private $updateDoFromYDPortalProcessor ;
|
||||||
|
|
||||||
|
/** @var UpdatesWalletBalance */
|
||||||
|
private $updatesWalletBalance;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CallbackBillplzLogic constructor.
|
* CallbackBillplzLogic constructor.
|
||||||
* @param GetBillplzBill $getBillplzBill
|
* @param GetBillplzBill $getBillplzBill
|
||||||
@@ -52,13 +56,14 @@ class CallbackBillplzLogic
|
|||||||
* @param UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor
|
* @param UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor
|
||||||
* @param UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor
|
* @param UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor
|
||||||
*/
|
*/
|
||||||
public function __construct(GetBillplzBill $getBillplzBill, FetchesTransaction $fetchesTransaction, UpdatesTransactionStatus $updatesTransactionStatus, UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor, UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor)
|
public function __construct(GetBillplzBill $getBillplzBill, FetchesTransaction $fetchesTransaction, UpdatesTransactionStatus $updatesTransactionStatus, UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor, UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor, UpdatesWalletBalance $updatesWalletBalance)
|
||||||
{
|
{
|
||||||
$this->getBillplzBill = $getBillplzBill;
|
$this->getBillplzBill = $getBillplzBill;
|
||||||
$this->fetchesTransaction = $fetchesTransaction;
|
$this->fetchesTransaction = $fetchesTransaction;
|
||||||
$this->updatesTransactionStatus = $updatesTransactionStatus;
|
$this->updatesTransactionStatus = $updatesTransactionStatus;
|
||||||
$this->updateDoFromVTPortalProcessor = $updateDoFromVTPortalProcessor;
|
$this->updateDoFromVTPortalProcessor = $updateDoFromVTPortalProcessor;
|
||||||
$this->updateDoFromYDPortalProcessor = $updateDoFromYDPortalProcessor;
|
$this->updateDoFromYDPortalProcessor = $updateDoFromYDPortalProcessor;
|
||||||
|
$this->updatesWalletBalance = $updatesWalletBalance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -101,23 +106,40 @@ class CallbackBillplzLogic
|
|||||||
$token = Auth::fromUser(User::find(1));
|
$token = Auth::fromUser(User::find(1));
|
||||||
$request->headers->set('Authorization', 'Bearer '.$token);
|
$request->headers->set('Authorization', 'Bearer '.$token);
|
||||||
|
|
||||||
$this->updatesTransactionStatus->execute($transaction, ApprovalStatus::APPROVED);
|
// check if is wallet top up
|
||||||
|
if($transaction->owner instanceof Wallet && $status === ApprovalStatus::APPROVED &&!in_array($transaction->status, [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])) {
|
||||||
|
$this->updatesWalletBalance->execute($transaction->owner, $transaction->amount);
|
||||||
|
}
|
||||||
|
|
||||||
if(($invoice->amount - $transaction->amount) < 0.01) {
|
$this->updatesTransactionStatus->execute($transaction, $status);
|
||||||
|
|
||||||
|
$totalPaidAmount = $invoice->transactions->where('type', TransactionType::PAYMENT)->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])->sum('amount');
|
||||||
|
|
||||||
|
if(($invoice->amount - $totalPaidAmount) < 0.01) {
|
||||||
$this->updatesTransactionStatus->execute($invoice, ApprovalStatus::COMPLETED);
|
$this->updatesTransactionStatus->execute($invoice, ApprovalStatus::COMPLETED);
|
||||||
|
|
||||||
$packingList->status = ApprovalStatus::APPROVED;
|
if(($invoice->amount - $totalPaidAmount) < 0.01) {
|
||||||
$packingList->save();
|
$this->updatesTransactionStatus->execute($invoice, ApprovalStatus::COMPLETED);
|
||||||
|
|
||||||
if(app()->environment('production')){
|
$packingList->status = ApprovalStatus::APPROVED;
|
||||||
$this->updateDoFromVTPortalProcessor->execute($packingList);
|
$packingList->save();
|
||||||
$this->updateDoFromYDPortalProcessor->execute($packingList);
|
|
||||||
|
if(app()->environment('production')){
|
||||||
|
$this->updateDoFromVTPortalProcessor->execute($packingList);
|
||||||
|
$this->updateDoFromYDPortalProcessor->execute($packingList);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$company_module_marking = $transaction->owner->owner->connections? $transaction->owner->owner->connections->first()->invitee_reference: null;
|
||||||
|
|
||||||
|
if ($transaction->owner instanceof Wallet) {
|
||||||
|
$company_module_marking = $transaction->owner->owner->connections? $transaction->owner->owner->connections->first()->invitee_reference: null;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
$company_module_marking = $order->companyModule->connections? $order->companyModule->connections->first()->invitee_reference: null;
|
||||||
|
}
|
||||||
|
|
||||||
return $request->method() === 'POST' ? true : view('pages.payments_redirect', ['marking' => $order->reference, 'transaction' => $transaction, 'status' => $status]);
|
return $request->method() === 'POST' ? true : view('pages.payments_redirect', ['marking' => $order->reference ?? null, 'company_module_marking' => $company_module_marking ?? null, 'transaction' => $transaction, 'status' => $status]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,10 +3,14 @@
|
|||||||
namespace App\Classes\Modules\Companies\ControllersLogic;
|
namespace App\Classes\Modules\Companies\ControllersLogic;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Classes\Exceptions\AccessForbiddenException;
|
||||||
|
use App\Classes\Exceptions\MalformedRequestException;
|
||||||
|
use App\Classes\Exceptions\RequestValidationException;
|
||||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
use App\Classes\Modules\Companies\Services\ListsCompanyModules;
|
use App\Classes\Modules\Companies\Services\ListsCompanyModules;
|
||||||
use App\Classes\Modules\Companies\Standards\Rules\CanListCompanies;
|
use App\Classes\Modules\Companies\Standards\Rules\CanListCompanies;
|
||||||
use App\Http\Resources\CompanyModuleResource;
|
use App\Http\Resources\CompanyModuleResource;
|
||||||
|
use App\Transformers\CompanyTransformer;
|
||||||
use ErrorException;
|
use ErrorException;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -17,7 +21,8 @@ class ListCompanyModulesLogic extends AbstractControllerLogic
|
|||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function notification():array {
|
protected function notification(): array
|
||||||
|
{
|
||||||
return [
|
return [
|
||||||
'title' => 'Retrieved Company Moduels',
|
'title' => 'Retrieved Company Moduels',
|
||||||
'message' => 'You have successfully retrieved a list of Companies'
|
'message' => 'You have successfully retrieved a list of Companies'
|
||||||
@@ -45,15 +50,26 @@ class ListCompanyModulesLogic extends AbstractControllerLogic
|
|||||||
/**
|
/**
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
* @throws AccessForbiddenException
|
||||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
* @throws MalformedRequestException
|
||||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
* @throws RequestValidationException
|
||||||
*/
|
*/
|
||||||
public function logic(Request $request) : JsonResponse
|
public function logic(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
$this->canListCompanies->passes();
|
$this->canListCompanies->passes();
|
||||||
|
|
||||||
$query = $this->listsCompanyModules->execute($this->listsCompanyModules->deserializeFilters($request->input('filters')));
|
$query = $this->listsCompanyModules->execute($this->listsCompanyModules->deserializeFilters($request->input('filters')));
|
||||||
|
|
||||||
|
/*include all relationships*/
|
||||||
|
/* return fractal()
|
||||||
|
->collection($query, new CompanyTransformer)
|
||||||
|
->parseIncludes('company')
|
||||||
|
->parseIncludes('contact')
|
||||||
|
->parseIncludes('remarks')
|
||||||
|
->parseIncludes('address')
|
||||||
|
->parseIncludes('billingAddress')
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
return $this->collectionResponse(CompanyModuleResource::collection($query));
|
return $this->collectionResponse(CompanyModuleResource::collection($query));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,88 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
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;
|
||||||
|
use App\Classes\Modules\Companies\Services\UpdatesCompanyDebtor;
|
||||||
|
use App\Http\Resources\CompanyResource;
|
||||||
|
use ErrorException;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class UpdateCompanyNameAndDebtorLogic extends AbstractControllerLogic
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function notification():array {
|
||||||
|
return [
|
||||||
|
'title' => 'Updated Company Name and Debtor',
|
||||||
|
'message' => 'You have successfully updated the Company'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var CanUpdateCompany */
|
||||||
|
private $canUpdateCompany;
|
||||||
|
|
||||||
|
/** @var UpdatesCompany */
|
||||||
|
private $updatesCompany;
|
||||||
|
|
||||||
|
/** @var FetchesCompany */
|
||||||
|
private $fetchesCompany;
|
||||||
|
|
||||||
|
/** @var UpdatesCompanyDebtor */
|
||||||
|
private $updatesCompanyDebtor;
|
||||||
|
|
||||||
|
/** @var UpdatesCompanyModuleName */
|
||||||
|
private $updatesCompanyModuleName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UpdateCompanyControllersLogic constructor.
|
||||||
|
* @param CanUpdateCompany $canUpdateCompany
|
||||||
|
* @param UpdatesCompany $updatesCompany
|
||||||
|
* @param FetchesCompany $fetchesCompany
|
||||||
|
* @param UpdatesCompanyDebtor $updatesCompanyDebtor
|
||||||
|
* @param UpdatesCompanyModuleName $updatesCompanyModuleName
|
||||||
|
*/
|
||||||
|
public function __construct(CanUpdateCompany $canUpdateCompany, UpdatesCompany $updatesCompany, FetchesCompany $fetchesCompany, UpdatesCompanyDebtor $updatesCompanyDebtor, UpdatesCompanyModuleName $updatesCompanyModuleName)
|
||||||
|
{
|
||||||
|
$this->canUpdateCompany = $canUpdateCompany;
|
||||||
|
$this->updatesCompany = $updatesCompany;
|
||||||
|
$this->fetchesCompany = $fetchesCompany;
|
||||||
|
$this->updatesCompanyDebtor = $updatesCompanyDebtor;
|
||||||
|
$this->updatesCompanyModuleName = $updatesCompanyModuleName;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @return JsonResponse
|
||||||
|
* @throws ErrorException
|
||||||
|
*/
|
||||||
|
public function logic(Request $request) : JsonResponse
|
||||||
|
{
|
||||||
|
$object = new CompanyObject($request->input('name'), $request->input('reference'), $request->input('type'));
|
||||||
|
|
||||||
|
$this->canUpdateCompany->passes($object);
|
||||||
|
|
||||||
|
$query = $this->fetchesCompany->execute(['id' => $request->route('id')]);
|
||||||
|
|
||||||
|
$this->updatesCompanyModuleName->execute($query->companyModules()->first(), $object->getName());
|
||||||
|
|
||||||
|
$query = $this->updatesCompany->execute($query, $object);
|
||||||
|
|
||||||
|
if ($request->input('debtor') || $query->first()->debtor !== null) {
|
||||||
|
$this->updatesCompanyDebtor->execute($query, $request->input('debtor'));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->resourceResponse(new CompanyResource($query));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
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\FetchesCompany;
|
||||||
|
use App\Classes\Modules\Companies\Standards\Rules\CanUpdateCompany;
|
||||||
|
use App\Classes\Modules\Companies\DataTransferObjects\CompanyObject;
|
||||||
|
use App\Http\Resources\CompanyResource;
|
||||||
|
use ErrorException;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class UpdateCompanyTypeLogic extends AbstractControllerLogic
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function notification():array {
|
||||||
|
return [
|
||||||
|
'title' => 'Updated Company Type',
|
||||||
|
'message' => 'You have successfully updated the Company Tyoe'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var CanUpdateCompany */
|
||||||
|
private $canUpdateCompany;
|
||||||
|
|
||||||
|
/** @var UpdatesCompany */
|
||||||
|
private $updatesCompany;
|
||||||
|
|
||||||
|
/** @var FetchesCompany */
|
||||||
|
private $fetchesCompany;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UpdateCompanyControllersLogic constructor.
|
||||||
|
* @param CanUpdateCompany $canUpdateCompany
|
||||||
|
* @param UpdatesCompany $updatesCompany
|
||||||
|
* @param FetchesCompany $fetchesCompany
|
||||||
|
*/
|
||||||
|
public function __construct(CanUpdateCompany $canUpdateCompany, UpdatesCompany $updatesCompany, FetchesCompany $fetchesCompany)
|
||||||
|
{
|
||||||
|
$this->canUpdateCompany = $canUpdateCompany;
|
||||||
|
$this->updatesCompany = $updatesCompany;
|
||||||
|
$this->fetchesCompany = $fetchesCompany;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @return JsonResponse
|
||||||
|
* @throws ErrorException
|
||||||
|
*/
|
||||||
|
public function logic(Request $request) : JsonResponse
|
||||||
|
{
|
||||||
|
$query = $this->fetchesCompany->execute(['id' => $request->route('id')]);
|
||||||
|
|
||||||
|
$object = new CompanyObject($query->name, $query->reference, $request->input('type'));
|
||||||
|
|
||||||
|
$this->canUpdateCompany->passes($object);
|
||||||
|
|
||||||
|
$query = $this->updatesCompany->execute($query, $object);
|
||||||
|
|
||||||
|
return $this->resourceResponse(new CompanyResource($query));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<?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 UpdatesCompanyDebtor extends AbstractUpdateRecord
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Company $model
|
||||||
|
* @param CompanyObject $object
|
||||||
|
* @return \Illuminate\Database\Eloquent\Model
|
||||||
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function execute(Company $model, ?string $debtor)
|
||||||
|
{
|
||||||
|
$model->debtor = $debtor;
|
||||||
|
|
||||||
|
return $this->handler($model);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Contacts\ControllersLogic;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
|
use App\Classes\Modules\Contacts\Services\UpdatesContact;
|
||||||
|
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
|
||||||
|
use App\Classes\Modules\Contacts\Services\FetchesContact;
|
||||||
|
use App\Http\Resources\ContactResource;
|
||||||
|
use App\Transformers\ContactTransformer;
|
||||||
|
use ErrorException;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class UpdateContactLogic extends AbstractControllerLogic
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function notification():array {
|
||||||
|
return [
|
||||||
|
'title' => 'Updated Contact',
|
||||||
|
'message' => 'You have successfully updated the Contact'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var UpdatesContact */
|
||||||
|
private $updatesContact;
|
||||||
|
|
||||||
|
/** @var FetchesContact */
|
||||||
|
private $fetchesContact;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UpdateContactLogic constructor.
|
||||||
|
* @param UpdatesContact $updatesContact
|
||||||
|
* @param FetchesContact $fetchesContact
|
||||||
|
*/
|
||||||
|
public function __construct(UpdatesContact $updatesContact, FetchesContact $fetchesContact)
|
||||||
|
{
|
||||||
|
$this->updatesContact = $updatesContact;
|
||||||
|
$this->fetchesContact = $fetchesContact;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @return JsonResponse
|
||||||
|
* @throws ErrorException
|
||||||
|
*/
|
||||||
|
public function logic(Request $request) : JsonResponse
|
||||||
|
{
|
||||||
|
$object = new ContactObject(
|
||||||
|
$request->input('reference'),
|
||||||
|
$request->input('phone'),
|
||||||
|
$request->input('email'),
|
||||||
|
$request->input('wechat_id')
|
||||||
|
);
|
||||||
|
|
||||||
|
// $this->canUpdateContact->passes($object);
|
||||||
|
|
||||||
|
$query = $this->fetchesContact->execute(['id' => $request->route('id')]);
|
||||||
|
|
||||||
|
$query = $this->updatesContact->execute($query, $object);
|
||||||
|
|
||||||
|
/*uniformity*/
|
||||||
|
/* return fractal()
|
||||||
|
->item($query, new ContactTransformer())
|
||||||
|
->parseIncludes('remark')
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
|
|
||||||
|
return $this->resourceResponse(new ContactResource($query));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Contacts\Services;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Classes\General\Eloquent\AbstractFetchRecord;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
use App\Models\Contact;
|
||||||
|
|
||||||
|
class FetchesContact extends AbstractFetchRecord
|
||||||
|
{
|
||||||
|
|
||||||
|
/** @var Contact */
|
||||||
|
private $repository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FetchesContact constructor.
|
||||||
|
* @param Contact $repository
|
||||||
|
*/
|
||||||
|
public function __construct(Contact $repository)
|
||||||
|
{
|
||||||
|
$this->repository = $repository;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Builder
|
||||||
|
*/
|
||||||
|
public function getRepository(): Builder
|
||||||
|
{
|
||||||
|
return $this->repository->newQuery();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Contacts\Services;
|
||||||
|
|
||||||
|
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||||
|
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
|
||||||
|
use App\Models\Contact;
|
||||||
|
|
||||||
|
class UpdatesContact extends AbstractUpdateRecord
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Contact $model
|
||||||
|
* @return \Illuminate\Database\Eloquent\Model
|
||||||
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function execute(Contact $model, ContactObject $object)
|
||||||
|
{
|
||||||
|
$model->reference = $object->getReference();
|
||||||
|
$model->phone = $object->getPhone();
|
||||||
|
$model->email = $object->getEmail();
|
||||||
|
$model->wechat_id = $object->getWechatId();
|
||||||
|
|
||||||
|
return $this->handler($model);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,6 +7,7 @@ use App\Classes\Modules\Orders\Services\CancelsOrder;
|
|||||||
use App\Classes\Modules\Orders\Services\FetchesOrder;
|
use App\Classes\Modules\Orders\Services\FetchesOrder;
|
||||||
use App\Http\Resources\DeliveryOrderResource;
|
use App\Http\Resources\DeliveryOrderResource;
|
||||||
use App\Models\Order;
|
use App\Models\Order;
|
||||||
|
use App\Transformers\DeliveryOrderTransformer;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
@@ -52,6 +53,14 @@ class CancelDeliveryOrderLogic extends AbstractControllerLogic
|
|||||||
/** @var Order $order */
|
/** @var Order $order */
|
||||||
$order = $this->fetchesOrder->execute(['id' => $request->route('id')]);
|
$order = $this->fetchesOrder->execute(['id' => $request->route('id')]);
|
||||||
|
|
||||||
|
$order = $this->cancelsOrder->execute($order);
|
||||||
|
|
||||||
|
//no relationship needed
|
||||||
|
/* return fractal()
|
||||||
|
->item($order, new DeliveryOrderTransformer())
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
|
|
||||||
return $this->resourceResponse(new DeliveryOrderResource($this->cancelsOrder->execute($order)));
|
return $this->resourceResponse(new DeliveryOrderResource($this->cancelsOrder->execute($order)));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -172,6 +172,12 @@ class CreateDeliveryOrderLogic extends AbstractControllerLogic
|
|||||||
$packageObject = new PackageObject($request->input('packing_list.type'), $request->input('packing_list.description'), (float) 1, (float) 1, (float) 1, $request->input('packing_list.weight'), (float) $request->input('packing_list.quantity'), ApprovalStatus::APPROVED);
|
$packageObject = new PackageObject($request->input('packing_list.type'), $request->input('packing_list.description'), (float) 1, (float) 1, (float) 1, $request->input('packing_list.weight'), (float) $request->input('packing_list.quantity'), ApprovalStatus::APPROVED);
|
||||||
$this->createsPackage->execute($packageObject, $packingList);
|
$this->createsPackage->execute($packageObject, $packingList);
|
||||||
|
|
||||||
|
//add relationship to order
|
||||||
|
/* return fractal()
|
||||||
|
->item($order, new DeliveryOrderTransformer())
|
||||||
|
->parseIncludes(['sender_address', 'delivery_address', 'sender_address.contacts', 'delivery_address.contacts', 'sender_address.remarks', 'delivery_address.remarks', 'packing_list', 'packing_list.packages'])
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
return $this->resourceResponse(new DeliveryOrderResource($order));
|
return $this->resourceResponse(new DeliveryOrderResource($order));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,6 +48,12 @@ class ListOrdersLogic extends AbstractControllerLogic
|
|||||||
|
|
||||||
$query = $this->listsOrders->execute(array_merge($this->listsOrders->deserializeFilters($request->input('filters')), ['with_parcels' => true, 'type_in' => [OrderType::LAST_MILE_DELIVERY]]));
|
$query = $this->listsOrders->execute(array_merge($this->listsOrders->deserializeFilters($request->input('filters')), ['with_parcels' => true, 'type_in' => [OrderType::LAST_MILE_DELIVERY]]));
|
||||||
|
|
||||||
|
|
||||||
|
//no relationship needed
|
||||||
|
/* return fractal()
|
||||||
|
->collection($query, new DeliveryOrderTransformer)
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
return $this->collectionResponse(DeliveryOrderResource::collection($query));
|
return $this->collectionResponse(DeliveryOrderResource::collection($query));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,9 +7,13 @@ use App\Classes\General\Abstracts\AbstractControllerLogic;
|
|||||||
use App\Classes\Modules\Documents\Services\ListsDocuments;
|
use App\Classes\Modules\Documents\Services\ListsDocuments;
|
||||||
use App\Classes\Modules\Documents\Standards\Rules\CanListDocuments;
|
use App\Classes\Modules\Documents\Standards\Rules\CanListDocuments;
|
||||||
use App\Http\Resources\DocumentResource;
|
use App\Http\Resources\DocumentResource;
|
||||||
|
use App\Models\Document;
|
||||||
|
use App\Transformers\DocumentTransformer;
|
||||||
use ErrorException;
|
use ErrorException;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use League\Fractal;
|
||||||
|
|
||||||
|
|
||||||
class ListDocumentLogic extends AbstractControllerLogic
|
class ListDocumentLogic extends AbstractControllerLogic
|
||||||
{
|
{
|
||||||
@@ -58,6 +62,11 @@ class ListDocumentLogic extends AbstractControllerLogic
|
|||||||
|
|
||||||
return $this->collectionResponse(DocumentResource::collection($query));
|
return $this->collectionResponse(DocumentResource::collection($query));
|
||||||
|
|
||||||
|
|
||||||
|
/* return fractal()
|
||||||
|
->collection($query, new DocumentTransformer)
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,108 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Exports\Services;
|
||||||
|
|
||||||
|
use App\Models\CompanyConnection;
|
||||||
|
use App\Models\Container;
|
||||||
|
use App\Models\Order;
|
||||||
|
use App\Models\Package;
|
||||||
|
use Maatwebsite\Excel\Concerns\Exportable;
|
||||||
|
use Maatwebsite\Excel\Concerns\FromCollection;
|
||||||
|
use Maatwebsite\Excel\Concerns\WithHeadingRow;
|
||||||
|
use Maatwebsite\Excel\Concerns\WithMapping;
|
||||||
|
use Maatwebsite\Excel\Concerns\WithHeadings;
|
||||||
|
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
|
||||||
|
class ExportsOrderSummaryByMarking implements FromCollection, WithHeadings, WithHeadingRow, WithMapping, ShouldAutoSize
|
||||||
|
{
|
||||||
|
|
||||||
|
use Exportable;
|
||||||
|
|
||||||
|
protected $customerMarking;
|
||||||
|
protected $dateFrom;
|
||||||
|
protected $dateTo;
|
||||||
|
|
||||||
|
public function headings(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'Date',
|
||||||
|
'Container',
|
||||||
|
'Order Marking',
|
||||||
|
'Packing List Reference',
|
||||||
|
'Description',
|
||||||
|
'Quantity',
|
||||||
|
'L (cm)',
|
||||||
|
'H (cm)',
|
||||||
|
'W (cm)',
|
||||||
|
'CBM'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setParameters($customerMarking, $dateFrom, $dateTo)
|
||||||
|
{
|
||||||
|
$this->customerMarking = $customerMarking;
|
||||||
|
$this->dateFrom = $dateFrom;
|
||||||
|
$this->dateTo = $dateTo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return \Illuminate\Support\Collection|mixed
|
||||||
|
*/
|
||||||
|
public function collection()
|
||||||
|
{
|
||||||
|
$connection = CompanyConnection::where('invitee_reference', $this->customerMarking)->first();
|
||||||
|
|
||||||
|
$company_id = $connection->invitee->company->id;
|
||||||
|
$company_module_id = $connection->invitee->id;
|
||||||
|
$packagesArray = collect();
|
||||||
|
$orders = Order::where('company_module_id', $company_module_id);
|
||||||
|
|
||||||
|
if (isset($this->dateFrom) && isset($this->dateTo)) {
|
||||||
|
$from = Carbon::createFromFormat('d-m-Y', $this->dateFrom);
|
||||||
|
$to = Carbon::createFromFormat('d-m-Y', $this->dateTo);
|
||||||
|
$orders = $orders->whereBetween('created_at', [$from, $to]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$orders = $orders->get();
|
||||||
|
|
||||||
|
foreach ($orders as $order){
|
||||||
|
$packingLists = $order->packingLists;
|
||||||
|
foreach ($packingLists as $packingList){
|
||||||
|
if($packingList->packingLists->first()){
|
||||||
|
$packingList = $packingList->packingLists->first();
|
||||||
|
}
|
||||||
|
$packages = $packingList->packages;
|
||||||
|
foreach ($packages as $package){
|
||||||
|
$packagesArray->push($package);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $packagesArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Package $package
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function map($package): array
|
||||||
|
{
|
||||||
|
$packinglist = ($package->packingList()->first()->owner->owner_type == Order::class) ? $package->packingList()->first(): $package->packingList->owner;
|
||||||
|
$order = $packinglist->owner;
|
||||||
|
|
||||||
|
return [
|
||||||
|
Carbon::parse($package->created_at)->format('d-m-Y'),
|
||||||
|
'',
|
||||||
|
$order->reference,
|
||||||
|
$package->packingList->reference,
|
||||||
|
$package->description,
|
||||||
|
$package->quantity,
|
||||||
|
$package->length,
|
||||||
|
$package->height,
|
||||||
|
$package->width,
|
||||||
|
((($package->length / 100) * ($package->height / 100) * ($package->width / 100)) * $package->quantity)
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -39,7 +39,12 @@ class ExportsPaymentTransactions implements FromQuery, WithHeadings, WithHeading
|
|||||||
'ProjNo',
|
'ProjNo',
|
||||||
'DeptNo',
|
'DeptNo',
|
||||||
'Qty',
|
'Qty',
|
||||||
'UnitPrice'
|
'UnitPrice',
|
||||||
|
// 'marking',
|
||||||
|
// 'contact person',
|
||||||
|
// 'contact number',
|
||||||
|
// 'link',
|
||||||
|
// 'amount'
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,7 +65,15 @@ class ExportsPaymentTransactions implements FromQuery, WithHeadings, WithHeading
|
|||||||
|
|
||||||
$query = Transaction::query();
|
$query = Transaction::query();
|
||||||
|
|
||||||
$query->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::COMPLETED]);
|
// paidInvoiceSection
|
||||||
|
$approvalStatus = ApprovalStatus::COMPLETED;
|
||||||
|
|
||||||
|
if ($this->request->route('section') == 'pendingPaymentSection') {
|
||||||
|
// pendingPaymentSection
|
||||||
|
$approvalStatus = ApprovalStatus::APPROVED;
|
||||||
|
}
|
||||||
|
|
||||||
|
$query->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [$approvalStatus]);
|
||||||
|
|
||||||
if($start_date && $end_date) {
|
if($start_date && $end_date) {
|
||||||
$query->whereBetween('updated_at', [
|
$query->whereBetween('updated_at', [
|
||||||
@@ -89,6 +102,10 @@ class ExportsPaymentTransactions implements FromQuery, WithHeadings, WithHeading
|
|||||||
$order = $transaction->owner->owner;
|
$order = $transaction->owner->owner;
|
||||||
$company = $order->companyModule->company;
|
$company = $order->companyModule->company;
|
||||||
$shippingTransactionDetails = $transaction->transactionDetails()->where('reference', 'SHIPPING_FEE')->first();
|
$shippingTransactionDetails = $transaction->transactionDetails()->where('reference', 'SHIPPING_FEE')->first();
|
||||||
|
$marking = $order->companyModule->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference;
|
||||||
|
$contact = $order->companyModule->company->contacts->first();
|
||||||
|
$userName = $order->companyModule->employees()->first();
|
||||||
|
$link = route('customer.payment-and-billing', $marking);
|
||||||
|
|
||||||
$furtherDescription = '';
|
$furtherDescription = '';
|
||||||
|
|
||||||
@@ -115,7 +132,12 @@ class ExportsPaymentTransactions implements FromQuery, WithHeadings, WithHeading
|
|||||||
$container->reference,
|
$container->reference,
|
||||||
'CIEF',
|
'CIEF',
|
||||||
$shippingTransactionDetails->quantity,
|
$shippingTransactionDetails->quantity,
|
||||||
$shippingTransactionDetails->price
|
$shippingTransactionDetails->price,
|
||||||
|
// $marking,
|
||||||
|
// $contact ? $contact->phone : '',
|
||||||
|
// $userName->name,
|
||||||
|
// $link,
|
||||||
|
// $transaction->amount
|
||||||
];
|
];
|
||||||
return [
|
return [
|
||||||
'<<New>>',
|
'<<New>>',
|
||||||
|
|||||||
@@ -0,0 +1,55 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Exports\Services;
|
||||||
|
|
||||||
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
|
use App\Classes\ValueObjects\Constants\PackingListType;
|
||||||
|
use App\Models\Order;
|
||||||
|
use Maatwebsite\Excel\Concerns\Exportable;
|
||||||
|
use Maatwebsite\Excel\Concerns\FromQuery;
|
||||||
|
use Maatwebsite\Excel\Concerns\WithHeadingRow;
|
||||||
|
use Maatwebsite\Excel\Concerns\WithMapping;
|
||||||
|
use Maatwebsite\Excel\Concerns\WithHeadings;
|
||||||
|
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
|
||||||
|
class ExportsWarehousePackingList implements FromQuery, WithHeadings, WithHeadingRow, WithMapping, ShouldAutoSize
|
||||||
|
{
|
||||||
|
|
||||||
|
use Exportable;
|
||||||
|
|
||||||
|
public function headings(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'Customer Marking',
|
||||||
|
'Order Number'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return \Illuminate\Support\Collection|mixed
|
||||||
|
*/
|
||||||
|
public function query()
|
||||||
|
{
|
||||||
|
return Order::whereHas('addresses', function($address) {
|
||||||
|
$address->where('status', ApprovalStatus::APPROVED);
|
||||||
|
})->whereHas('packingLists', function($packingLists) {
|
||||||
|
$packingLists->where('type', PackingListType::SHIPPING_PACKING_LIST)->whereDoesntHave('transports');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Order $order
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function map($order): array
|
||||||
|
{
|
||||||
|
$marking = $order->companyModule->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference;
|
||||||
|
|
||||||
|
return [
|
||||||
|
$marking,
|
||||||
|
$order->reference,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@ use App\Classes\General\Abstracts\AbstractControllerLogic;
|
|||||||
use App\Classes\Modules\Orders\Processors\ApproveChangeOrderAddressProcessor;
|
use App\Classes\Modules\Orders\Processors\ApproveChangeOrderAddressProcessor;
|
||||||
use App\Http\Resources\AddressResource;
|
use App\Http\Resources\AddressResource;
|
||||||
use App\Http\Resources\OrderResource;
|
use App\Http\Resources\OrderResource;
|
||||||
|
use App\Transformers\AddressTransformer;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
@@ -39,6 +40,12 @@ class ApproveChangeOrderAddressLogic extends AbstractControllerLogic
|
|||||||
{
|
{
|
||||||
$address = $this->approveChangeOrderAddressProcessor->execute($request);
|
$address = $this->approveChangeOrderAddressProcessor->execute($request);
|
||||||
|
|
||||||
|
|
||||||
|
//load address with no relationships
|
||||||
|
/* return fractal()
|
||||||
|
->item($address, new AddressTransformer())
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
return $this->resourceResponse(new AddressResource($address));
|
return $this->resourceResponse(new AddressResource($address));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,20 +4,28 @@ namespace App\Classes\Modules\Orders\ControllersLogic;
|
|||||||
|
|
||||||
use App\Classes\Exceptions\RequestValidationException;
|
use App\Classes\Exceptions\RequestValidationException;
|
||||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
|
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
|
||||||
|
use App\Classes\Modules\Addresses\Services\CreatesAddress;
|
||||||
use App\Classes\Modules\Addresses\Services\FetchesAddress;
|
use App\Classes\Modules\Addresses\Services\FetchesAddress;
|
||||||
use App\Classes\Modules\Companies\Services\FetchesCompany;
|
use App\Classes\Modules\Companies\Services\FetchesCompany;
|
||||||
use App\Classes\Modules\Companies\Services\FetchesCompanyModule;
|
use App\Classes\Modules\Companies\Services\FetchesCompanyModule;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Processors\NewLeadTaskToPerfexCRMProcessor;
|
||||||
use App\Classes\Modules\Orders\Processors\CreateOrderProcessor;
|
use App\Classes\Modules\Orders\Processors\CreateOrderProcessor;
|
||||||
use App\Classes\Modules\Orders\Services\GeneratesOrderNumber;
|
use App\Classes\Modules\Orders\Services\GeneratesOrderNumber;
|
||||||
|
use App\Classes\ValueObjects\Constants\AddressType;
|
||||||
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
use App\Classes\ValueObjects\Constants\WarehouseReferences;
|
use App\Classes\ValueObjects\Constants\WarehouseReferences;
|
||||||
use App\Http\Resources\OrderResource;
|
use App\Http\Resources\OrderResource;
|
||||||
|
use App\Classes\Modules\Addresses\Standards\Rules\CanCreateAddress;
|
||||||
|
use App\Models\Address;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
|
|
||||||
class CreateOrderLogic extends AbstractControllerLogic
|
class CreateOrderLogic extends AbstractControllerLogic
|
||||||
{
|
{
|
||||||
|
|
||||||
protected function notification():array {
|
protected function notification(): array
|
||||||
|
{
|
||||||
return [
|
return [
|
||||||
'title' => 'Created Order',
|
'title' => 'Created Order',
|
||||||
'message' => 'You have successfully created a new Order'
|
'message' => 'You have successfully created a new Order'
|
||||||
@@ -39,6 +47,14 @@ class CreateOrderLogic extends AbstractControllerLogic
|
|||||||
/** @var GeneratesOrderNumber */
|
/** @var GeneratesOrderNumber */
|
||||||
private $generatesOrderNumber;
|
private $generatesOrderNumber;
|
||||||
|
|
||||||
|
/** @var CreatesAddress */
|
||||||
|
private $createsAddress;
|
||||||
|
|
||||||
|
/** @var CanCreateAddress */
|
||||||
|
private $canCreateAddress;
|
||||||
|
|
||||||
|
/** @var NewLeadTaskToPerfexCRMProcessor */
|
||||||
|
private $newLeadTaskToPerfexCRMProcessor;
|
||||||
/**
|
/**
|
||||||
* CreateOrderLogic constructor.
|
* CreateOrderLogic constructor.
|
||||||
* @param FetchesCompany $fetchesCompany
|
* @param FetchesCompany $fetchesCompany
|
||||||
@@ -46,36 +62,58 @@ class CreateOrderLogic extends AbstractControllerLogic
|
|||||||
* @param CreateOrderProcessor $createOrderProcessor
|
* @param CreateOrderProcessor $createOrderProcessor
|
||||||
* @param FetchesCompanyModule $fetchesCompanyModule
|
* @param FetchesCompanyModule $fetchesCompanyModule
|
||||||
* @param GeneratesOrderNumber $generatesOrderNumber
|
* @param GeneratesOrderNumber $generatesOrderNumber
|
||||||
|
* @param NewLeadTaskToPerfexCRMProcessor $newLeadTaskToPerfexCRMProcessor
|
||||||
|
* @param CreatesAddress $createsAddress
|
||||||
|
* @param CanCreateAddress $canCreateAddress
|
||||||
*/
|
*/
|
||||||
public function __construct(FetchesCompany $fetchesCompany, FetchesAddress $fetchesAddress, CreateOrderProcessor $createOrderProcessor, FetchesCompanyModule $fetchesCompanyModule, GeneratesOrderNumber $generatesOrderNumber)
|
public function __construct(FetchesCompany $fetchesCompany, FetchesAddress $fetchesAddress, CreateOrderProcessor $createOrderProcessor, FetchesCompanyModule $fetchesCompanyModule, GeneratesOrderNumber $generatesOrderNumber, CreatesAddress $createsAddress, CanCreateAddress $canCreateAddress, NewLeadTaskToPerfexCRMProcessor $newLeadTaskToPerfexCRMProcessor)
|
||||||
{
|
{
|
||||||
$this->fetchesCompany = $fetchesCompany;
|
$this->fetchesCompany = $fetchesCompany;
|
||||||
$this->fetchesAddress = $fetchesAddress;
|
$this->fetchesAddress = $fetchesAddress;
|
||||||
$this->createOrderProcessor = $createOrderProcessor;
|
$this->createOrderProcessor = $createOrderProcessor;
|
||||||
$this->fetchesCompanyModule = $fetchesCompanyModule;
|
$this->fetchesCompanyModule = $fetchesCompanyModule;
|
||||||
$this->generatesOrderNumber = $generatesOrderNumber;
|
$this->generatesOrderNumber = $generatesOrderNumber;
|
||||||
|
$this->createsAddress = $createsAddress;
|
||||||
|
$this->canCreateAddress = $canCreateAddress;
|
||||||
|
$this->newLeadTaskToPerfexCRMProcessor = $newLeadTaskToPerfexCRMProcessor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public function logic(Request $request) : JsonResponse {
|
public function logic(Request $request): JsonResponse
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$company = $this->fetchesCompany->execute(['id' => $request->input('company_id')]);
|
$company = $this->fetchesCompany->execute(['id' => $request->input('company_id')]);
|
||||||
|
|
||||||
$address = $this->fetchesAddress->execute(['id' => $request->input('address_id')]);
|
$address = $this->fetchesAddress->execute(['id' => $request->input('address_id')]);
|
||||||
|
|
||||||
$originWarehouse = $this->fetchesCompanyModule->execute(['id' => $request->input('warehouse_id')]);
|
// todo-new: fix this
|
||||||
|
// if select warehouse foshan
|
||||||
|
if ($request->input('warehouse_id') === 'foshan') {
|
||||||
|
// 13 - sabah, 14 - sarawak
|
||||||
|
if (in_array($address->state->id, [13, 14])) {
|
||||||
|
$originWarehouse = $this->fetchesCompanyModule->execute(['reference' => WarehouseReferences::YD_FS_WEST_MALAYSIA]);
|
||||||
|
} else {
|
||||||
|
$originWarehouse = $this->fetchesCompanyModule->execute(['reference' => WarehouseReferences::YD_FS_WEST_MALAYSIA]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$originWarehouse = $this->fetchesCompanyModule->execute(['id' => $request->input('warehouse_id')]);
|
||||||
|
|
||||||
if(!in_array($company->companyModules()->importers()->first()->id, WarehouseReferences::YD_EXEMPT_LIST)){
|
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]);
|
$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])) {
|
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.');
|
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());
|
$order = $this->createOrderProcessor->execute($company, $originWarehouse, $address, $this->generatesOrderNumber->execute());
|
||||||
|
|
||||||
|
if(config('perfexcrm.is_enabled') == 'true'){
|
||||||
|
$this->newLeadTaskToPerfexCRMProcessor->execute($company);
|
||||||
|
}
|
||||||
|
|
||||||
return $this->resourceResponse(new OrderResource($order));
|
return $this->resourceResponse(new OrderResource($order));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,60 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Orders\ControllersLogic;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
|
use App\Classes\Modules\Orders\Services\FetchesOrder;
|
||||||
|
use App\Classes\Modules\Orders\Standards\Rules\CanFetchOrder;
|
||||||
|
use App\Http\Resources\OrderV2Resource;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class FetchOrderV2Logic extends AbstractControllerLogic
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function notification():array {
|
||||||
|
return [
|
||||||
|
'title' => 'Retrieved Order',
|
||||||
|
'message' => 'You have successfully retrieved an order'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var CanFetchOrder */
|
||||||
|
private $canFetchOrder;
|
||||||
|
|
||||||
|
/** @var FetchesOrder */
|
||||||
|
private $fetchesOrder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* FetchOrderLogic constructor.
|
||||||
|
* @param CanFetchOrder $canFetchOrder
|
||||||
|
* @param FetchesOrder $fetchesOrder
|
||||||
|
*/
|
||||||
|
public function __construct(CanFetchOrder $canFetchOrder, FetchesOrder $fetchesOrder)
|
||||||
|
{
|
||||||
|
$this->canFetchOrder = $canFetchOrder;
|
||||||
|
$this->fetchesOrder = $fetchesOrder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @return JsonResponse
|
||||||
|
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
||||||
|
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||||
|
*/
|
||||||
|
public function logic(Request $request) : JsonResponse
|
||||||
|
{
|
||||||
|
|
||||||
|
$this->canFetchOrder->passes();
|
||||||
|
|
||||||
|
$query = $this->fetchesOrder->execute(['reference' => $request->route('id'), 'with_packing_lists' => true]);
|
||||||
|
|
||||||
|
return $this->resourceResponse(new OrderV2Resource($query));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Orders\ControllersLogic;
|
||||||
|
|
||||||
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
|
use App\Classes\Modules\Orders\Services\ListsOrders;
|
||||||
|
use App\Classes\Modules\Orders\Standards\Rules\CanListOrders;
|
||||||
|
use App\Classes\ValueObjects\Constants\OrderType;
|
||||||
|
use App\Http\Resources\OrderV2Resource;
|
||||||
|
use ErrorException;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class ListOrdersV2Logic extends AbstractControllerLogic
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function notification():array {
|
||||||
|
return [
|
||||||
|
'title' => 'Retrieved Orders',
|
||||||
|
'message' => 'You have successfully retrieved a list of Orders'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var CanListOrders */
|
||||||
|
private $canListOrders;
|
||||||
|
|
||||||
|
/** @var ListsOrders */
|
||||||
|
private $listsOrders;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ListOrdersLogic constructor.
|
||||||
|
* @param CanListOrders $canListOrders
|
||||||
|
* @param ListsOrders $listsOrders
|
||||||
|
*/
|
||||||
|
public function __construct(CanListOrders $canListOrders, ListsOrders $listsOrders)
|
||||||
|
{
|
||||||
|
$this->canListOrders = $canListOrders;
|
||||||
|
$this->listsOrders = $listsOrders;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function logic(Request $request) : JsonResponse
|
||||||
|
{
|
||||||
|
$this->canListOrders->passes();
|
||||||
|
|
||||||
|
$query = $this->listsOrders->execute(array_merge($this->listsOrders->deserializeFilters($request->input('filters')), ['with_parcels' => true, 'type_in' => [OrderType::SHARED_CONTAINER, OrderType::DEDICATED_CONTAINER]]));
|
||||||
|
|
||||||
|
return $this->collectionResponse(OrderV2Resource::collection($query));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -14,12 +14,11 @@ class FetchesDataFromYDPortal
|
|||||||
* @return \Psr\Http\Message\ResponseInterface
|
* @return \Psr\Http\Message\ResponseInterface
|
||||||
*/
|
*/
|
||||||
public function clientRequest(string $url, string $method, $body){
|
public function clientRequest(string $url, string $method, $body){
|
||||||
|
|
||||||
$client = new \GuzzleHttp\Client();
|
|
||||||
|
|
||||||
|
$client = new \GuzzleHttp\Client();
|
||||||
$body['apicode'] = env('YD_API_CODE');
|
$body['apicode'] = env('YD_API_CODE');
|
||||||
|
|
||||||
$request = $client->requestAsync($method, $url, ['query' => $body]);
|
$request = $client->requestAsync($method, $url, ['query' => $body, 'timeout' => 15]);
|
||||||
|
|
||||||
return $request->wait();
|
return $request->wait();
|
||||||
}
|
}
|
||||||
@@ -32,6 +31,7 @@ class FetchesDataFromYDPortal
|
|||||||
$content = $request->getBody()->getContents();
|
$content = $request->getBody()->getContents();
|
||||||
$content = str_replace("\r",'', $content);
|
$content = str_replace("\r",'', $content);
|
||||||
$content = str_replace("\n",'', $content);
|
$content = str_replace("\n",'', $content);
|
||||||
|
$content = str_replace("\t",'', $content);
|
||||||
return json_decode($content);
|
return json_decode($content);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+8
@@ -6,6 +6,7 @@ use App\Classes\General\Abstracts\AbstractControllerLogic;
|
|||||||
use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
|
use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
|
||||||
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
|
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
|
||||||
use App\Http\Resources\ContainerResource;
|
use App\Http\Resources\ContainerResource;
|
||||||
|
use App\Transformers\ContainerTransformer;
|
||||||
use ErrorException;
|
use ErrorException;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -56,6 +57,13 @@ class AssignPackingListContainerLogic extends AbstractControllerLogic
|
|||||||
$container->packingLists()->attach($packing_list_item);
|
$container->packingLists()->attach($packing_list_item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//only return with packing list relationship
|
||||||
|
|
||||||
|
/* return fractal()
|
||||||
|
->item($container, new ContainerTransformer())
|
||||||
|
->parseInclude(['packingLists'])
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
return $this->resourceResponse(new ContainerResource($container));
|
return $this->resourceResponse(new ContainerResource($container));
|
||||||
|
|
||||||
} catch (\Exception $exception){
|
} catch (\Exception $exception){
|
||||||
|
|||||||
+10
-2
@@ -8,6 +8,7 @@ use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
|
|||||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
|
|
||||||
use App\Http\Resources\ContainerResource;
|
use App\Http\Resources\ContainerResource;
|
||||||
|
use App\Transformers\ContainerTransformer;
|
||||||
use ErrorException;
|
use ErrorException;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -19,7 +20,8 @@ class CompleteContainerLogic extends AbstractControllerLogic
|
|||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function notification():array {
|
protected function notification(): array
|
||||||
|
{
|
||||||
return [
|
return [
|
||||||
'title' => 'Updated Container',
|
'title' => 'Updated Container',
|
||||||
'message' => 'You have successfully updated the Container'
|
'message' => 'You have successfully updated the Container'
|
||||||
@@ -51,10 +53,16 @@ class CompleteContainerLogic extends AbstractControllerLogic
|
|||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
* @throws ErrorException
|
* @throws ErrorException
|
||||||
*/
|
*/
|
||||||
public function logic(Request $request) : JsonResponse
|
public function logic(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
$container = $this->fetchesContainer->execute(['id' => $request->route('id')]);
|
$container = $this->fetchesContainer->execute(['id' => $request->route('id')]);
|
||||||
$query = $this->updatesContainerStatus->execute($container, ApprovalStatus::COMPLETED);
|
$query = $this->updatesContainerStatus->execute($container, ApprovalStatus::COMPLETED);
|
||||||
|
|
||||||
|
//no relationships needed
|
||||||
|
/* return fractal()
|
||||||
|
->item($container, new ContainerTransformer())
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
return $this->resourceResponse(new ContainerResource($container));
|
return $this->resourceResponse(new ContainerResource($container));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ use App\Classes\Modules\PackingLists\DataTransferObjects\ContainerObject;
|
|||||||
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
|
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
|
||||||
|
|
||||||
use App\Http\Resources\ContainerResource;
|
use App\Http\Resources\ContainerResource;
|
||||||
|
use App\Transformers\ContainerTransformer;
|
||||||
use ErrorException;
|
use ErrorException;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -70,6 +71,11 @@ class CreateContainerLogic extends AbstractControllerLogic
|
|||||||
|
|
||||||
$query = $this->createsContainer->execute($object, $this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]));
|
$query = $this->createsContainer->execute($object, $this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]));
|
||||||
|
|
||||||
|
//no relationship needed
|
||||||
|
/* return fractal()
|
||||||
|
->item($query, new ContainerTransformer())
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
return $this->resourceResponse(new ContainerResource($query));
|
return $this->resourceResponse(new ContainerResource($query));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+10
-2
@@ -8,6 +8,7 @@ use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
|
|||||||
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
|
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
|
||||||
use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor;
|
use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor;
|
||||||
use App\Http\Resources\ContainerResource;
|
use App\Http\Resources\ContainerResource;
|
||||||
|
use App\Transformers\ContainerTransformer;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
@@ -18,7 +19,8 @@ class CreateContainerRemarkLogic extends AbstractControllerLogic
|
|||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function notification():array {
|
protected function notification(): array
|
||||||
|
{
|
||||||
return [
|
return [
|
||||||
'title' => 'Created Container Remark',
|
'title' => 'Created Container Remark',
|
||||||
'message' => 'You have successfully created a new Container Remark'
|
'message' => 'You have successfully created a new Container Remark'
|
||||||
@@ -50,7 +52,7 @@ class CreateContainerRemarkLogic extends AbstractControllerLogic
|
|||||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||||
*/
|
*/
|
||||||
public function logic(Request $request) : JsonResponse
|
public function logic(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
|
|
||||||
$container = $this->fetchesContainer->execute(['id' => $request->route('id')]);
|
$container = $this->fetchesContainer->execute(['id' => $request->route('id')]);
|
||||||
@@ -59,6 +61,12 @@ class CreateContainerRemarkLogic extends AbstractControllerLogic
|
|||||||
|
|
||||||
$this->createRemarkProcessor->execute($container, $object);
|
$this->createRemarkProcessor->execute($container, $object);
|
||||||
|
|
||||||
|
//load with remarks only
|
||||||
|
/* return fractal()
|
||||||
|
->item($container, new ContainerTransformer())
|
||||||
|
->parseIncludes(['remarks'])
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
return $this->resourceResponse(new ContainerResource($container));
|
return $this->resourceResponse(new ContainerResource($container));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+25
-17
@@ -17,6 +17,7 @@ use App\Classes\ValueObjects\Constants\TransportType;
|
|||||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
|
|
||||||
use App\Http\Resources\ContainerResource;
|
use App\Http\Resources\ContainerResource;
|
||||||
|
use App\Transformers\ContainerTransformer;
|
||||||
use ErrorException;
|
use ErrorException;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -28,7 +29,8 @@ class CreateLoadContainerLogic extends AbstractControllerLogic
|
|||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function notification():array {
|
protected function notification(): array
|
||||||
|
{
|
||||||
return [
|
return [
|
||||||
'title' => 'Created Container',
|
'title' => 'Created Container',
|
||||||
'message' => 'You have successfully created a new Container'
|
'message' => 'You have successfully created a new Container'
|
||||||
@@ -41,7 +43,7 @@ class CreateLoadContainerLogic extends AbstractControllerLogic
|
|||||||
/** @var FetchesPackingList */
|
/** @var FetchesPackingList */
|
||||||
private $fetchesPackingList;
|
private $fetchesPackingList;
|
||||||
|
|
||||||
/** @var FetchesCompanyModule */
|
/** @var FetchesCompanyModule */
|
||||||
private $fetchesCompanyModule;
|
private $fetchesCompanyModule;
|
||||||
|
|
||||||
/** @var CreatesPackingList */
|
/** @var CreatesPackingList */
|
||||||
@@ -54,12 +56,12 @@ class CreateLoadContainerLogic extends AbstractControllerLogic
|
|||||||
private $createsSchedule;
|
private $createsSchedule;
|
||||||
|
|
||||||
public function __construct(
|
public function __construct(
|
||||||
CanCreateContainer $canCreateContainer,
|
CanCreateContainer $canCreateContainer,
|
||||||
FetchesPackingList $fetchesPackingList,
|
FetchesPackingList $fetchesPackingList,
|
||||||
FetchesCompanyModule $fetchesCompanyModule,
|
FetchesCompanyModule $fetchesCompanyModule,
|
||||||
CreatesContainer $createsContainer,
|
CreatesContainer $createsContainer,
|
||||||
CreatesTransport $createsTransport,
|
CreatesTransport $createsTransport,
|
||||||
CreatesSchedule $createsSchedule
|
CreatesSchedule $createsSchedule
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
$this->canCreateContainer = $canCreateContainer;
|
$this->canCreateContainer = $canCreateContainer;
|
||||||
@@ -77,11 +79,11 @@ class CreateLoadContainerLogic extends AbstractControllerLogic
|
|||||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||||
*/
|
*/
|
||||||
public function logic(Request $request) : JsonResponse
|
public function logic(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
$object = new ContainerObject(
|
$object = new ContainerObject(
|
||||||
$request->input('container_reference'),
|
$request->input('container_reference'),
|
||||||
$request->input('container_number'),
|
$request->input('container_number'),
|
||||||
$request->input('seal_reference'),
|
$request->input('seal_reference'),
|
||||||
$request->input('container_type'),
|
$request->input('container_type'),
|
||||||
ApprovalStatus::APPROVED
|
ApprovalStatus::APPROVED
|
||||||
@@ -92,21 +94,27 @@ class CreateLoadContainerLogic extends AbstractControllerLogic
|
|||||||
$container = $this->createsContainer->execute($object, $this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]));
|
$container = $this->createsContainer->execute($object, $this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]));
|
||||||
|
|
||||||
$transportObject = new TransportObject(
|
$transportObject = new TransportObject(
|
||||||
TransportType::LAND, null,
|
TransportType::LAND, null,
|
||||||
$request->input('tracking'),
|
$request->input('tracking'),
|
||||||
Carbon::parse($request->input('etd')),
|
Carbon::parse($request->input('etd')),
|
||||||
Carbon::parse($request->input('eta')),
|
Carbon::parse($request->input('eta')),
|
||||||
ApprovalStatus::APPROVED
|
ApprovalStatus::APPROVED
|
||||||
);
|
);
|
||||||
$transport = $this->createsTransport->execute($transportObject, $container);
|
$transport = $this->createsTransport->execute($transportObject, $container);
|
||||||
|
|
||||||
$scheduleObject = new ScheduleObject(
|
$scheduleObject = new ScheduleObject(
|
||||||
Carbon::parse($request->input('etd')),
|
Carbon::parse($request->input('etd')),
|
||||||
Carbon::parse($request->input('eta')),
|
Carbon::parse($request->input('eta')),
|
||||||
ApprovalStatus::APPROVED
|
ApprovalStatus::APPROVED
|
||||||
);
|
);
|
||||||
$schedule = $this->createsSchedule->execute($transport, $scheduleObject);
|
$schedule = $this->createsSchedule->execute($transport, $scheduleObject);
|
||||||
|
|
||||||
|
//include transport
|
||||||
|
/* return fractal()
|
||||||
|
->item($container, new ContainerTransformer())
|
||||||
|
->parseIncludes(['transport'])
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
return $this->resourceResponse(new ContainerResource($container));
|
return $this->resourceResponse(new ContainerResource($container));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+10
-2
@@ -7,6 +7,7 @@ use App\Classes\General\Abstracts\AbstractControllerLogic;
|
|||||||
use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
|
use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
|
||||||
use App\Classes\Modules\PackingLists\Standards\Rules\Containers\CanFetchContainer;
|
use App\Classes\Modules\PackingLists\Standards\Rules\Containers\CanFetchContainer;
|
||||||
use App\Http\Resources\ContainerResource;
|
use App\Http\Resources\ContainerResource;
|
||||||
|
use App\Transformers\ContainerTransformer;
|
||||||
use ErrorException;
|
use ErrorException;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -17,7 +18,8 @@ class FetchContainerLogic extends AbstractControllerLogic
|
|||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function notification():array {
|
protected function notification(): array
|
||||||
|
{
|
||||||
return [
|
return [
|
||||||
'title' => 'Retrieved Container',
|
'title' => 'Retrieved Container',
|
||||||
'message' => 'You have successfully retrieved a Container'
|
'message' => 'You have successfully retrieved a Container'
|
||||||
@@ -48,12 +50,18 @@ class FetchContainerLogic extends AbstractControllerLogic
|
|||||||
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
||||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||||
*/
|
*/
|
||||||
public function logic(Request $request) : JsonResponse
|
public function logic(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
$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]);
|
||||||
|
|
||||||
|
//load with packing lists
|
||||||
|
/* return fractal()
|
||||||
|
->item($query, new ContainerTransformer())
|
||||||
|
->parseIncludes(['packing_lists'])
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
return $this->resourceResponse(new ContainerResource($query));
|
return $this->resourceResponse(new ContainerResource($query));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-2
@@ -9,6 +9,7 @@ use App\Classes\Modules\PackingLists\Standards\Rules\Containers\CanListContainer
|
|||||||
use App\Classes\Modules\PackingLists\Processors\FetchInboundCustomClearedProcessor;
|
use App\Classes\Modules\PackingLists\Processors\FetchInboundCustomClearedProcessor;
|
||||||
|
|
||||||
use App\Http\Resources\ContainerResource;
|
use App\Http\Resources\ContainerResource;
|
||||||
|
use App\Transformers\ContainerTransformer;
|
||||||
use ErrorException;
|
use ErrorException;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -19,7 +20,8 @@ class InboundCustomClearedLogic extends AbstractControllerLogic
|
|||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function notification():array {
|
protected function notification(): array
|
||||||
|
{
|
||||||
return [
|
return [
|
||||||
'title' => 'Retrieved Containers',
|
'title' => 'Retrieved Containers',
|
||||||
'message' => 'You have successfully retrieved a list of Containers'
|
'message' => 'You have successfully retrieved a list of Containers'
|
||||||
@@ -52,11 +54,16 @@ class InboundCustomClearedLogic extends AbstractControllerLogic
|
|||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
* @throws ErrorException
|
* @throws ErrorException
|
||||||
*/
|
*/
|
||||||
public function logic(Request $request) : JsonResponse
|
public function logic(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
|
|
||||||
$query = $this->fetchInboundCustomCleared->execute();
|
$query = $this->fetchInboundCustomCleared->execute();
|
||||||
|
|
||||||
|
//no relations required
|
||||||
|
/* return fractal()
|
||||||
|
->item($query, new ContainerTransformer())
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
return $this->collectionResponse(ContainerResource::collection($query));
|
return $this->collectionResponse(ContainerResource::collection($query));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+16
-5
@@ -3,10 +3,14 @@
|
|||||||
namespace App\Classes\Modules\PackingLists\ControllersLogic\Containers;
|
namespace App\Classes\Modules\PackingLists\ControllersLogic\Containers;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Classes\Exceptions\AccessForbiddenException;
|
||||||
|
use App\Classes\Exceptions\MalformedRequestException;
|
||||||
|
use App\Classes\Exceptions\RequestValidationException;
|
||||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
use App\Classes\Modules\PackingLists\Services\Containers\ListsContainers;
|
use App\Classes\Modules\PackingLists\Services\Containers\ListsContainers;
|
||||||
use App\Classes\Modules\PackingLists\Standards\Rules\Containers\CanListContainers;
|
use App\Classes\Modules\PackingLists\Standards\Rules\Containers\CanListContainers;
|
||||||
use App\Http\Resources\ContainerResource;
|
use App\Http\Resources\ContainerResource;
|
||||||
|
use App\Transformers\ContainerTransformer;
|
||||||
use ErrorException;
|
use ErrorException;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -17,7 +21,8 @@ class ListContainersLogic extends AbstractControllerLogic
|
|||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function notification():array {
|
protected function notification(): array
|
||||||
|
{
|
||||||
return [
|
return [
|
||||||
'title' => 'Retrieved Containers',
|
'title' => 'Retrieved Containers',
|
||||||
'message' => 'You have successfully retrieved a list of Containers'
|
'message' => 'You have successfully retrieved a list of Containers'
|
||||||
@@ -45,16 +50,22 @@ class ListContainersLogic extends AbstractControllerLogic
|
|||||||
/**
|
/**
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
* @throws AccessForbiddenException
|
||||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
* @throws MalformedRequestException
|
||||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
* @throws RequestValidationException
|
||||||
*/
|
*/
|
||||||
public function logic(Request $request) : JsonResponse
|
public function logic(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
$this->canListContainers->passes();
|
$this->canListContainers->passes();
|
||||||
|
|
||||||
$query = $this->listsContainers->execute($this->listsContainers->deserializeFilters($request->input('filters')));
|
$query = $this->listsContainers->execute($this->listsContainers->deserializeFilters($request->input('filters')));
|
||||||
|
|
||||||
|
//load with no filters, a details page to be added to load one with all related data
|
||||||
|
/* return fractal()
|
||||||
|
->collection($query, new ContainerTransformer)
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
|
|
||||||
return $this->collectionResponse(ContainerResource::collection($query));
|
return $this->collectionResponse(ContainerResource::collection($query));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-6
@@ -10,6 +10,7 @@ use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject;
|
|||||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
|
|
||||||
use App\Http\Resources\ContainerResource;
|
use App\Http\Resources\ContainerResource;
|
||||||
|
use App\Transformers\ContainerTransformer;
|
||||||
use ErrorException;
|
use ErrorException;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -20,7 +21,8 @@ class RescheduleContainerLogic extends AbstractControllerLogic
|
|||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function notification():array {
|
protected function notification(): array
|
||||||
|
{
|
||||||
return [
|
return [
|
||||||
'title' => 'Reschedule Container',
|
'title' => 'Reschedule Container',
|
||||||
'message' => 'You have successfully Reschedule Container'
|
'message' => 'You have successfully Reschedule Container'
|
||||||
@@ -54,7 +56,7 @@ class RescheduleContainerLogic extends AbstractControllerLogic
|
|||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
* @throws ErrorException
|
* @throws ErrorException
|
||||||
*/
|
*/
|
||||||
public function logic(Request $request) : JsonResponse
|
public function logic(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$container = $this->fetchesContainer->execute(['id' => $request->route('id')]);
|
$container = $this->fetchesContainer->execute(['id' => $request->route('id')]);
|
||||||
@@ -65,15 +67,20 @@ class RescheduleContainerLogic extends AbstractControllerLogic
|
|||||||
$this->updatesScheduleStatus->execute($old_sechedule, ApprovalStatus::REJECTED);
|
$this->updatesScheduleStatus->execute($old_sechedule, ApprovalStatus::REJECTED);
|
||||||
|
|
||||||
$scheduleObject = new ScheduleObject(
|
$scheduleObject = new ScheduleObject(
|
||||||
Carbon::parse($request->input('etd')),
|
Carbon::parse($request->input('etd')),
|
||||||
Carbon::parse($request->input('eta')),
|
Carbon::parse($request->input('eta')),
|
||||||
ApprovalStatus::APPROVED
|
ApprovalStatus::APPROVED
|
||||||
);
|
);
|
||||||
$schedule = $this->createsSchedule->execute($transport, $scheduleObject);
|
$schedule = $this->createsSchedule->execute($transport, $scheduleObject);
|
||||||
|
|
||||||
|
//no relationship
|
||||||
|
/* return fractal()
|
||||||
|
->item($container, new ContainerTransformer())
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
return $this->resourceResponse(new ContainerResource($container));
|
return $this->resourceResponse(new ContainerResource($container));
|
||||||
|
|
||||||
} catch (\Exception $exception){
|
} catch (\Exception $exception) {
|
||||||
throw new ErrorException($exception->getMessage(), $exception->getCode());
|
throw new ErrorException($exception->getMessage(), $exception->getCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+21
-10
@@ -3,12 +3,16 @@
|
|||||||
namespace App\Classes\Modules\PackingLists\ControllersLogic\Containers;
|
namespace App\Classes\Modules\PackingLists\ControllersLogic\Containers;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Classes\Exceptions\AccessForbiddenException;
|
||||||
|
use App\Classes\Exceptions\MalformedRequestException;
|
||||||
|
use App\Classes\Exceptions\RequestValidationException;
|
||||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
use App\Classes\Modules\PackingLists\Services\Containers\UpdatesContainer;
|
use App\Classes\Modules\PackingLists\Services\Containers\UpdatesContainer;
|
||||||
use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
|
use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
|
||||||
use App\Classes\Modules\PackingLists\Standards\Rules\Containers\CanUpdateContainer;
|
use App\Classes\Modules\PackingLists\Standards\Rules\Containers\CanUpdateContainer;
|
||||||
use App\Classes\Modules\PackingLists\DataTransferObjects\ContainerObject;
|
use App\Classes\Modules\PackingLists\DataTransferObjects\ContainerObject;
|
||||||
use App\Http\Resources\ContainerResource;
|
use App\Http\Resources\ContainerResource;
|
||||||
|
use App\Transformers\ContainerTransformer;
|
||||||
use ErrorException;
|
use ErrorException;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -19,7 +23,8 @@ class UpdateContainerLogic extends AbstractControllerLogic
|
|||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function notification():array {
|
protected function notification(): array
|
||||||
|
{
|
||||||
return [
|
return [
|
||||||
'title' => 'Updated Container',
|
'title' => 'Updated Container',
|
||||||
'message' => 'You have successfully updated the Container'
|
'message' => 'You have successfully updated the Container'
|
||||||
@@ -52,19 +57,19 @@ class UpdateContainerLogic extends AbstractControllerLogic
|
|||||||
/**
|
/**
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
* @throws AccessForbiddenException
|
||||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
* @throws MalformedRequestException
|
||||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
* @throws RequestValidationException
|
||||||
*/
|
*/
|
||||||
public function logic(Request $request) : JsonResponse
|
public function logic(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
|
|
||||||
$container = $this->fetchesContainer->execute(['id' => $request->route('id')]);
|
$container = $this->fetchesContainer->execute(['id' => $request->route('id')]);
|
||||||
|
|
||||||
$object = new ContainerObject(
|
$object = new ContainerObject(
|
||||||
$request->input('container_reference'),
|
$request->input('container_reference'),
|
||||||
$container->container_number,
|
$container->container_number,
|
||||||
$request->input('container_type'),
|
$request->input('container_type'),
|
||||||
$request->input('seal_reference'),
|
$request->input('seal_reference'),
|
||||||
$request->input('loading_date'),
|
$request->input('loading_date'),
|
||||||
$container->status,
|
$container->status,
|
||||||
@@ -74,6 +79,12 @@ class UpdateContainerLogic extends AbstractControllerLogic
|
|||||||
|
|
||||||
$query = $this->updatesContainer->execute($container, $object);
|
$query = $this->updatesContainer->execute($container, $object);
|
||||||
|
|
||||||
|
//no relationships
|
||||||
|
/*
|
||||||
|
return fractal()
|
||||||
|
->item($query, new ContainerTransformer())
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
return $this->resourceResponse(new ContainerResource($query));
|
return $this->resourceResponse(new ContainerResource($query));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-2
@@ -6,6 +6,7 @@ use App\Classes\General\Abstracts\AbstractControllerLogic;
|
|||||||
use App\Classes\Modules\Transports\Services\UpdatesDispatchDateTransport;
|
use App\Classes\Modules\Transports\Services\UpdatesDispatchDateTransport;
|
||||||
use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
|
use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
|
||||||
use App\Http\Resources\ContainerResource;
|
use App\Http\Resources\ContainerResource;
|
||||||
|
use App\Transformers\ContainerTransformer;
|
||||||
use ErrorException;
|
use ErrorException;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -17,7 +18,8 @@ class UpdateDispatchDateContainerLogic extends AbstractControllerLogic
|
|||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function notification():array {
|
protected function notification(): array
|
||||||
|
{
|
||||||
return [
|
return [
|
||||||
'title' => 'Updated Dispatch Date Container',
|
'title' => 'Updated Dispatch Date Container',
|
||||||
'message' => 'You have successfully updated the Dispatch Date Container'
|
'message' => 'You have successfully updated the Dispatch Date Container'
|
||||||
@@ -49,11 +51,18 @@ class UpdateDispatchDateContainerLogic extends AbstractControllerLogic
|
|||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
* @throws ErrorException
|
* @throws ErrorException
|
||||||
*/
|
*/
|
||||||
public function logic(Request $request) : JsonResponse
|
public function logic(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
$container = $this->fetchesContainer->execute(['id' => $request->route('id')]);
|
$container = $this->fetchesContainer->execute(['id' => $request->route('id')]);
|
||||||
$transport = $container->transports()->first();
|
$transport = $container->transports()->first();
|
||||||
$query = $this->updatesDispatchDateTransport->execute($transport, Carbon::parse($request->input('dispatch_date')));
|
$query = $this->updatesDispatchDateTransport->execute($transport, Carbon::parse($request->input('dispatch_date')));
|
||||||
|
|
||||||
|
|
||||||
|
//no relationships queried
|
||||||
|
/* return fractal()
|
||||||
|
->item($query, new ContainerTransformer())
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
return $this->resourceResponse(new ContainerResource($container));
|
return $this->resourceResponse(new ContainerResource($container));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+10
-2
@@ -6,6 +6,7 @@ use App\Classes\General\Abstracts\AbstractControllerLogic;
|
|||||||
use App\Classes\Modules\Transports\Services\UpdatesDropDateTransport;
|
use App\Classes\Modules\Transports\Services\UpdatesDropDateTransport;
|
||||||
use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
|
use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
|
||||||
use App\Http\Resources\ContainerResource;
|
use App\Http\Resources\ContainerResource;
|
||||||
|
use App\Transformers\ContainerTransformer;
|
||||||
use ErrorException;
|
use ErrorException;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -17,7 +18,8 @@ class UpdateDropDateContainerLogic extends AbstractControllerLogic
|
|||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function notification():array {
|
protected function notification(): array
|
||||||
|
{
|
||||||
return [
|
return [
|
||||||
'title' => 'Updated Drop Date Container',
|
'title' => 'Updated Drop Date Container',
|
||||||
'message' => 'You have successfully updated the Drop Date Container'
|
'message' => 'You have successfully updated the Drop Date Container'
|
||||||
@@ -49,11 +51,17 @@ class UpdateDropDateContainerLogic extends AbstractControllerLogic
|
|||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
* @throws ErrorException
|
* @throws ErrorException
|
||||||
*/
|
*/
|
||||||
public function logic(Request $request) : JsonResponse
|
public function logic(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
$container = $this->fetchesContainer->execute(['id' => $request->route('id')]);
|
$container = $this->fetchesContainer->execute(['id' => $request->route('id')]);
|
||||||
$transport = $container->transports()->first();
|
$transport = $container->transports()->first();
|
||||||
$query = $this->updatesDropDateTransport->execute($transport, Carbon::parse($request->input('drop_date')));
|
$query = $this->updatesDropDateTransport->execute($transport, Carbon::parse($request->input('drop_date')));
|
||||||
|
|
||||||
|
//no relationship needed
|
||||||
|
/* return fractal()
|
||||||
|
->item($query, new ContainerTransformer())
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
return $this->resourceResponse(new ContainerResource($container));
|
return $this->resourceResponse(new ContainerResource($container));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+13
-5
@@ -14,6 +14,7 @@ use App\Classes\ValueObjects\Constants\OrderRoleTypes;
|
|||||||
use App\Classes\ValueObjects\Constants\PackingListType;
|
use App\Classes\ValueObjects\Constants\PackingListType;
|
||||||
|
|
||||||
use App\Http\Resources\DeliverPackingListResource;
|
use App\Http\Resources\DeliverPackingListResource;
|
||||||
|
use App\Transformers\DeliverPackingListTransformer;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
@@ -24,7 +25,8 @@ class CreateDeliverPackingListLogic extends AbstractControllerLogic
|
|||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
protected function notification():array {
|
protected function notification(): array
|
||||||
|
{
|
||||||
return [
|
return [
|
||||||
'title' => 'Created Deliver PackingList',
|
'title' => 'Created Deliver PackingList',
|
||||||
'message' => 'You have successfully created a new Deliver PackingList'
|
'message' => 'You have successfully created a new Deliver PackingList'
|
||||||
@@ -60,7 +62,7 @@ class CreateDeliverPackingListLogic extends AbstractControllerLogic
|
|||||||
* @param Request $request
|
* @param Request $request
|
||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function logic(Request $request) : JsonResponse
|
public function logic(Request $request): JsonResponse
|
||||||
{
|
{
|
||||||
$company_module = $this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]);
|
$company_module = $this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]);
|
||||||
$packing_list_id = $request->input('packing_list_id');
|
$packing_list_id = $request->input('packing_list_id');
|
||||||
@@ -68,9 +70,9 @@ class CreateDeliverPackingListLogic extends AbstractControllerLogic
|
|||||||
$reference_number = $this->generatesPackingListReferenceNumber->execute();
|
$reference_number = $this->generatesPackingListReferenceNumber->execute();
|
||||||
|
|
||||||
$packingListObject = new PackingListObject(
|
$packingListObject = new PackingListObject(
|
||||||
$reference_number,
|
$reference_number,
|
||||||
null,
|
null,
|
||||||
PackingListType::DELIVERY_PACKING_LIST,
|
PackingListType::DELIVERY_PACKING_LIST,
|
||||||
ApprovalStatus::PENDING_SUBMISSION
|
ApprovalStatus::PENDING_SUBMISSION
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -82,6 +84,12 @@ class CreateDeliverPackingListLogic extends AbstractControllerLogic
|
|||||||
|
|
||||||
$deliverPackingList->packing_list_owner()->sync($packing_list_id);
|
$deliverPackingList->packing_list_owner()->sync($packing_list_id);
|
||||||
|
|
||||||
|
//no relationships required
|
||||||
|
/* return fractal()
|
||||||
|
->item($deliverPackingList, new DeliverPackingListTransformer())
|
||||||
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
|
|
||||||
return $this->resourceResponse(new DeliverPackingListResource($deliverPackingList));
|
return $this->resourceResponse(new DeliverPackingListResource($deliverPackingList));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+81
@@ -0,0 +1,81 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PackingLists\ControllersLogic;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
|
use App\Classes\Modules\PackingLists\Services\DeletesPackingList;
|
||||||
|
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
|
||||||
|
use App\Classes\Modules\PackingLists\Services\Packages\FetchesPackage;
|
||||||
|
use App\Classes\Modules\PackingLists\Standards\Rules\CanDeletePackingList;
|
||||||
|
use App\Classes\ValueObjects\Constants\PackingListType;
|
||||||
|
use App\Models\PackingList;
|
||||||
|
use ErrorException;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class DeletePackingListByPackageIdLogic extends AbstractControllerLogic
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function notification():array {
|
||||||
|
return [
|
||||||
|
'title' => 'Deleted PackingList',
|
||||||
|
'message' => 'You have successfully deleted a PackingList'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** @var CanDeletePackingList */
|
||||||
|
private $canDeletePackingList;
|
||||||
|
|
||||||
|
/** @var DeletesPackingList */
|
||||||
|
private $deletesPackingList;
|
||||||
|
|
||||||
|
/** @var FetchesPackingList */
|
||||||
|
private $fetchesPackingList;
|
||||||
|
|
||||||
|
/** @var FetchesPackage */
|
||||||
|
private $fetchesPackage;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DeletePackingListByPackageIdLogic constructor.
|
||||||
|
* @param CanDeletePackingList $canDeletePackingList
|
||||||
|
* @param DeletesPackingList $deletesPackingList
|
||||||
|
* @param FetchesPackingList $fetchesPackingList
|
||||||
|
* @param FetchesPackage $fetchesPackage
|
||||||
|
*/
|
||||||
|
public function __construct(CanDeletePackingList $canDeletePackingList, DeletesPackingList $deletesPackingList, FetchesPackingList $fetchesPackingList, FetchesPackage $fetchesPackage)
|
||||||
|
{
|
||||||
|
$this->canDeletePackingList = $canDeletePackingList;
|
||||||
|
$this->deletesPackingList = $deletesPackingList;
|
||||||
|
$this->fetchesPackingList = $fetchesPackingList;
|
||||||
|
$this->fetchesPackage = $fetchesPackage;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @return JsonResponse
|
||||||
|
* @throws ErrorException
|
||||||
|
*/
|
||||||
|
public function logic(Request $request) : JsonResponse
|
||||||
|
{
|
||||||
|
$this->canDeletePackingList->passes();
|
||||||
|
|
||||||
|
$package = $this->fetchesPackage->execute(['id' => $request->route('id')]);
|
||||||
|
|
||||||
|
$packingList = $package->packingList;
|
||||||
|
|
||||||
|
$packingList = PackingList::where('reference', $packingList->reference)->get();
|
||||||
|
|
||||||
|
$childPackingList = PackingList::where('owner_type', PackingList::class)->whereIn('owner_id', $packingList->pluck('id'))->get();
|
||||||
|
|
||||||
|
$packingList->each->delete();
|
||||||
|
|
||||||
|
$childPackingList->each->delete();
|
||||||
|
|
||||||
|
return $this->response([]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -4,6 +4,7 @@ namespace App\Classes\Modules\PackingLists\Processors;
|
|||||||
|
|
||||||
|
|
||||||
use App\Classes\General\Interfaces\Packable;
|
use App\Classes\General\Interfaces\Packable;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Processors\PackingListToPerfexCRMProcessor;
|
||||||
use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject;
|
use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject;
|
||||||
use App\Classes\Modules\PackingLists\Services\CreatesPackingList;
|
use App\Classes\Modules\PackingLists\Services\CreatesPackingList;
|
||||||
use App\Classes\Modules\PackingLists\Standards\Rules\CanCreatePackingList;
|
use App\Classes\Modules\PackingLists\Standards\Rules\CanCreatePackingList;
|
||||||
@@ -25,16 +26,20 @@ class CreatePackingListProcessor
|
|||||||
/** @var CreatesPackingList */
|
/** @var CreatesPackingList */
|
||||||
private $createsPackingList;
|
private $createsPackingList;
|
||||||
|
|
||||||
|
/** @var PackingListToPerfexCRMProcessor */
|
||||||
|
private $packingListToPerfexCRMProcessor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CreatePackingListProcessor constructor.
|
* CreatePackingListProcessor constructor.
|
||||||
* @param CanCreatePackingList $canCreatePackingList
|
* @param CanCreatePackingList $canCreatePackingList
|
||||||
* @param CreatesPackingList $createsPackingList
|
* @param CreatesPackingList $createsPackingList
|
||||||
|
* @param PackingListToPerfexCRMProcessor $packingListToPerfexCRMProcessor
|
||||||
*/
|
*/
|
||||||
public function __construct(CanCreatePackingList $canCreatePackingList, CreatesPackingList $createsPackingList)
|
public function __construct(CanCreatePackingList $canCreatePackingList, CreatesPackingList $createsPackingList, PackingListToPerfexCRMProcessor $packingListToPerfexCRMProcessor)
|
||||||
{
|
{
|
||||||
$this->canCreatePackingList = $canCreatePackingList;
|
$this->canCreatePackingList = $canCreatePackingList;
|
||||||
$this->createsPackingList = $createsPackingList;
|
$this->createsPackingList = $createsPackingList;
|
||||||
|
$this->packingListToPerfexCRMProcessor = $packingListToPerfexCRMProcessor;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -51,15 +56,19 @@ class CreatePackingListProcessor
|
|||||||
/** @var PackingList $packingList */
|
/** @var PackingList $packingList */
|
||||||
$packingList = $this->createsPackingList->execute($object, $packable);
|
$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;
|
$appointee_id = $packingList->owner_id == 1 ? 2307 : $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;
|
$type = $object->getType() === PackingListType::SHIPPING_PACKING_LIST ? PackingListType::SHIPPING_PACKING_LIST_REPLICA : PackingListType::WAREHOUSE_RECEIVE_LIST_REPLICA;
|
||||||
|
|
||||||
/** create packing list replica */
|
/** create packing list replica */
|
||||||
$object = new PackingListObject($object->getReference().'_01', $appointee_id, $type, ApprovalStatus::PENDING_SUBMISSION);
|
$object = new PackingListObject($object->getReference().'_01', $appointee_id, $type, ApprovalStatus::PENDING_SUBMISSION);
|
||||||
$this->createsPackingList->execute($object, $packingList);
|
$this->createsPackingList->execute($object, $packingList);
|
||||||
|
|
||||||
|
if(config('perfexcrm.is_enabled') == 'true'){
|
||||||
|
$this->packingListToPerfexCRMProcessor->execute($packingList);
|
||||||
|
}
|
||||||
|
|
||||||
return $packingList;
|
return $packingList;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,160 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PackingLists\Processors;
|
||||||
|
|
||||||
|
use App\Classes\Exceptions\AccessForbiddenException;
|
||||||
|
use App\Classes\Exceptions\MalformedRequestException;
|
||||||
|
use App\Classes\Exceptions\RequestValidationException;
|
||||||
|
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\Notifications\ShipmentDepartureEmail;
|
||||||
|
use App\Classes\Notifications\ShipmentRescheduleEmail;
|
||||||
|
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\Classes\ValueObjects\Constants\WarehouseReferences;
|
||||||
|
use App\Models\Container;
|
||||||
|
use App\Models\Order;
|
||||||
|
use App\Models\PackingList;
|
||||||
|
use App\Models\Transport;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use GuzzleHttp\Exception\GuzzleException;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
|
class FetchContainersFromYdPortalProcessor
|
||||||
|
{
|
||||||
|
/** @var FetchesDataFromYDPortal */
|
||||||
|
private $fetchesDataFRomYDPortal;
|
||||||
|
|
||||||
|
/** @var CreatesTransport */
|
||||||
|
private $createsTransport;
|
||||||
|
|
||||||
|
/** @var CreatesSchedule */
|
||||||
|
private $createsSchedule;
|
||||||
|
|
||||||
|
/** @var FetchesContainer */
|
||||||
|
private $fetchesContainer;
|
||||||
|
|
||||||
|
/** @var CreateContainerProcessor */
|
||||||
|
private $createContainerProcessor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param FetchesDataFromYDPortal $fetchesDataFRomYDPortal
|
||||||
|
* @param CreatesTransport $createsTransport
|
||||||
|
* @param CreatesSchedule $createsSchedule
|
||||||
|
* @param FetchesContainer $fetchesContainer
|
||||||
|
* @param CreateContainerProcessor $createContainerProcessor
|
||||||
|
*/
|
||||||
|
public function __construct(FetchesDataFromYDPortal $fetchesDataFRomYDPortal, CreatesTransport $createsTransport, CreatesSchedule $createsSchedule, FetchesContainer $fetchesContainer, CreateContainerProcessor $createContainerProcessor)
|
||||||
|
{
|
||||||
|
$this->fetchesDataFRomYDPortal = $fetchesDataFRomYDPortal;
|
||||||
|
$this->createsTransport = $createsTransport;
|
||||||
|
$this->createsSchedule = $createsSchedule;
|
||||||
|
$this->fetchesContainer = $fetchesContainer;
|
||||||
|
$this->createContainerProcessor = $createContainerProcessor;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return void
|
||||||
|
* @throws MalformedRequestException
|
||||||
|
* @throws AccessForbiddenException
|
||||||
|
* @throws RequestValidationException
|
||||||
|
*/
|
||||||
|
public function execute()
|
||||||
|
{
|
||||||
|
$packingLists = PackingList::where('type', PackingListType::SHIPPING_PACKING_LIST)->doesntHave('containers')->get();
|
||||||
|
|
||||||
|
foreach ($packingLists as $packingList) {
|
||||||
|
$time_start = microtime(true);
|
||||||
|
|
||||||
|
$containerReference = null;
|
||||||
|
$loadingDate = null;
|
||||||
|
$etd = null;
|
||||||
|
$eta = null;
|
||||||
|
|
||||||
|
$trackingRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/ApiTracking.ashx', 'GET', [
|
||||||
|
'trakingno' => $packingList->reference
|
||||||
|
]);
|
||||||
|
|
||||||
|
$rows = $this->fetchesDataFRomYDPortal->getResponseBody($trackingRequest);
|
||||||
|
|
||||||
|
if(!$rows->data){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (array_reverse($rows->data) as $trackingRow) {
|
||||||
|
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])->addDays(2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if($containerReference) {
|
||||||
|
try {
|
||||||
|
$container = $this->fetchesContainer->execute(['reference' => $containerReference]);
|
||||||
|
$container->packingLists()->detach($packingList);
|
||||||
|
$container->packingLists()->attach($packingList);
|
||||||
|
} catch (ResourceNotFoundException $exception){
|
||||||
|
|
||||||
|
if(!($packingList->owner instanceof Order)) continue;
|
||||||
|
|
||||||
|
$originWarehouse = $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee;
|
||||||
|
|
||||||
|
|
||||||
|
$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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$time_end = microtime(true);
|
||||||
|
|
||||||
|
$execution_time = ($time_end - $time_start)/60;
|
||||||
|
|
||||||
|
echo 'successful => <b>Total Execution Time:</b> '.$execution_time.' Mins<br>';
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+162
@@ -0,0 +1,162 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PackingLists\Processors;
|
||||||
|
|
||||||
|
use App\Classes\Exceptions\MalformedRequestException;
|
||||||
|
use App\Classes\Modules\Orders\Services\FetchesDataFromYDPortal;
|
||||||
|
|
||||||
|
use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject;
|
||||||
|
use App\Classes\Modules\Schedules\Services\CreatesSchedule;
|
||||||
|
use App\Classes\Modules\Unity\Services\UpdatesContractObligation;
|
||||||
|
use App\Classes\Notifications\ShipmentRescheduleEmail;
|
||||||
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
|
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
|
||||||
|
use App\Models\Container;
|
||||||
|
use App\Models\Order;
|
||||||
|
use App\Models\PackingList;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
|
||||||
|
class FetchContainersUpdatesFromYdPortalProcessor
|
||||||
|
{
|
||||||
|
/** @var FetchesDataFromYDPortal */
|
||||||
|
private $fetchesDataFRomYDPortal;
|
||||||
|
|
||||||
|
/** @var UpdatesContractObligation */
|
||||||
|
private $updatesContractObligations;
|
||||||
|
|
||||||
|
/** @var CreatesSchedule */
|
||||||
|
private $createsSchedule;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param FetchesDataFromYDPortal $fetchesDataFRomYDPortal
|
||||||
|
* @param UpdatesContractObligation $updatesContractObligations
|
||||||
|
* @param CreatesSchedule $createsSchedule
|
||||||
|
*/
|
||||||
|
public function __construct(FetchesDataFromYDPortal $fetchesDataFRomYDPortal, UpdatesContractObligation $updatesContractObligations, CreatesSchedule $createsSchedule)
|
||||||
|
{
|
||||||
|
$this->fetchesDataFRomYDPortal = $fetchesDataFRomYDPortal;
|
||||||
|
$this->updatesContractObligations = $updatesContractObligations;
|
||||||
|
$this->createsSchedule = $createsSchedule;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return void
|
||||||
|
* @throws MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function execute()
|
||||||
|
{
|
||||||
|
$containers = Container::where('status', ApprovalStatus::PENDING_VERIFICATION)->get();
|
||||||
|
|
||||||
|
foreach ($containers as $container) {
|
||||||
|
$time_start = microtime(true);
|
||||||
|
|
||||||
|
$packingList = $container->packingLists()->random();
|
||||||
|
|
||||||
|
$trackingRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/ApiTracking.ashx', 'GET', [
|
||||||
|
'trakingno' => $packingList->reference
|
||||||
|
]);
|
||||||
|
|
||||||
|
$rows = $this->fetchesDataFRomYDPortal->getResponseBody($trackingRequest);
|
||||||
|
|
||||||
|
if(!$rows->data){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$unstuffingDate = null;
|
||||||
|
$delayDate = null;
|
||||||
|
|
||||||
|
foreach (array_reverse($rows->data) as $trackingRow) {
|
||||||
|
$rescheduleETD = strpos($trackingRow->remark, '开') || strpos($trackingRow->remark, '到港');
|
||||||
|
$rescheduleETA = strpos($trackingRow->remark, '到港');
|
||||||
|
if (($rescheduleETD !== false || $rescheduleETA !== false) && strpos($trackingRow->tracking, '货物装柜完成。') === false) {
|
||||||
|
preg_match_all('/([0-9]+.{3})/', $trackingRow->remark, $matches);
|
||||||
|
$dates = collect();
|
||||||
|
|
||||||
|
foreach($matches[0] as $date){
|
||||||
|
try {
|
||||||
|
$dates->push(Carbon::parse(str_replace('.', '/', $date).Carbon::now()->format('Y')));
|
||||||
|
} catch (\Exception $exception) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$rescheduleDate = $dates->sortDesc()->first();
|
||||||
|
|
||||||
|
if(!$delayDate || $rescheduleDate > $delayDate){
|
||||||
|
/** @var Carbon $delayDate */
|
||||||
|
$delayDate = $rescheduleDate;
|
||||||
|
|
||||||
|
if($rescheduleETA === false && $delayDate) {
|
||||||
|
$delayDate = $delayDate->addDays('5');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($trackingRow->tracking === '到港') {
|
||||||
|
$delayDate = Carbon::parse($trackingRow->trackingtime);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($trackingRow->tracking === '已开船') {
|
||||||
|
$delayDate = Carbon::parse($trackingRow->trackingtime)->addDays('5');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($trackingRow->tracking === '货物已进目的港仓库') {
|
||||||
|
$unstuffingDate = Carbon::parse($trackingRow->trackingtime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if($delayDate){
|
||||||
|
$delayDate = $delayDate->addDays(2);
|
||||||
|
$transport = $container->transports()->first();
|
||||||
|
|
||||||
|
if(!$transport->schedules()->whereDate('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));
|
||||||
|
foreach ($container->packingLists as $packingList){
|
||||||
|
if(!($packingList->owner instanceof Order)) continue;
|
||||||
|
$user = $packingList->owner->companyModule->employees()->first();
|
||||||
|
if(app()->environment(['production'])) {
|
||||||
|
$user->notify(new ShipmentRescheduleEmail($user, $packingList));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if($unstuffingDate){
|
||||||
|
$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();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!($packingList->owner instanceof Order)) continue;
|
||||||
|
|
||||||
|
$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]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$time_end = microtime(true);
|
||||||
|
|
||||||
|
$execution_time = ($time_end - $time_start)/60;
|
||||||
|
|
||||||
|
echo 'successful => <b>Total Execution Time:</b> '.$execution_time.' Mins<br>';
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+115
@@ -0,0 +1,115 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PackingLists\Processors;
|
||||||
|
|
||||||
|
use App\Classes\Exceptions\MalformedRequestException;
|
||||||
|
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\Classes\ValueObjects\Constants\WarehouseReferences;
|
||||||
|
use App\Models\CompanyModule;
|
||||||
|
use App\Models\Order;
|
||||||
|
use App\Models\PackingList;
|
||||||
|
use App\Models\Transport;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use GuzzleHttp\Exception\GuzzleException;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
|
class FetchDeliveryUpdatesFromYdPortalProcessor
|
||||||
|
{
|
||||||
|
|
||||||
|
/** @var UpdatesContractObligation */
|
||||||
|
private $updatesContractObligations;
|
||||||
|
|
||||||
|
/** @var CreatesTransport */
|
||||||
|
private $createsTransport;
|
||||||
|
|
||||||
|
/** @var CreatesSchedule */
|
||||||
|
private $createsSchedule;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param UpdatesContractObligation $updatesContractObligations
|
||||||
|
* @param CreatesTransport $createsTransport
|
||||||
|
* @param CreatesSchedule $createsSchedule
|
||||||
|
*/
|
||||||
|
public function __construct(UpdatesContractObligation $updatesContractObligations, CreatesTransport $createsTransport, CreatesSchedule $createsSchedule)
|
||||||
|
{
|
||||||
|
$this->updatesContractObligations = $updatesContractObligations;
|
||||||
|
$this->createsTransport = $createsTransport;
|
||||||
|
$this->createsSchedule = $createsSchedule;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return void
|
||||||
|
* @throws MalformedRequestException
|
||||||
|
* @throws GuzzleException
|
||||||
|
*/
|
||||||
|
public function execute()
|
||||||
|
{
|
||||||
|
$packingLists = PackingList::where('type', PackingListType::SHIPPING_PACKING_LIST)->whereRaw('LENGTH(reference) > 12')->whereHas('containers', function ($container){
|
||||||
|
return $container->where('status', 3);
|
||||||
|
})->doesntHave('transports')->get()->reverse();
|
||||||
|
foreach ($packingLists->chunk(50) as $chunk) {
|
||||||
|
|
||||||
|
|
||||||
|
foreach ($chunk as $packingList){
|
||||||
|
if(!$packingList->reference) continue;
|
||||||
|
$time_start = microtime(true);
|
||||||
|
|
||||||
|
$deliveryDate = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
$client = new \GuzzleHttp\Client(['cookies' => true, 'headers' => ['Cookie' => 'utc_offset=480']]);
|
||||||
|
|
||||||
|
$request = $client->request('get', 'https://main.universe.com.my/Tracking/User/Paging?sEcho=1&sTrackingNo='.$packingList->reference.'&sOrgId=sti', ['timeout' => 3]);
|
||||||
|
$deliveryTracking = json_decode($request->getBody()->getContents());
|
||||||
|
foreach (array_reverse($deliveryTracking->aaData) as $trackingRow) {
|
||||||
|
$trackingDate = Carbon::createFromFormat('d/m/y H:i', $trackingRow->LocalDateTime);
|
||||||
|
if (Str::contains($trackingRow->PublicDescription, ['delivered'])) {
|
||||||
|
$deliveryDate = $trackingDate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (\Exception $exception){
|
||||||
|
dump($exception);
|
||||||
|
Log::debug('failed to fetch delivery tracking');
|
||||||
|
}
|
||||||
|
|
||||||
|
if($deliveryDate){
|
||||||
|
$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));
|
||||||
|
|
||||||
|
if(!($packingList->owner instanceof Order)) continue;
|
||||||
|
|
||||||
|
$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]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$time_end = microtime(true);
|
||||||
|
|
||||||
|
$execution_time = ($time_end - $time_start)/60;
|
||||||
|
|
||||||
|
echo 'successful => <b>Total Execution Time:</b> '.$execution_time.' Mins<br>';
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+1
-1
@@ -264,7 +264,7 @@ class FetchLoadedContainersFromVTPortalProcessor
|
|||||||
//
|
//
|
||||||
// $this->unityAssignContractEntity->execute($supervisorContractEntity->hash_id, $contractObligations);
|
// $this->unityAssignContractEntity->execute($supervisorContractEntity->hash_id, $contractObligations);
|
||||||
} else {
|
} else {
|
||||||
$appointee_id = 2037;
|
$appointee_id = 2307;
|
||||||
}
|
}
|
||||||
|
|
||||||
$packingListObject = new PackingListObject($packingListReference, $appointee_id, PackingListType::SHIPPING_PACKING_LIST, ApprovalStatus::SUSPENDED, null);
|
$packingListObject = new PackingListObject($packingListReference, $appointee_id, PackingListType::SHIPPING_PACKING_LIST, ApprovalStatus::SUSPENDED, null);
|
||||||
|
|||||||
+304
-280
@@ -139,336 +139,360 @@ class FetchOrderListsFromYdPortalProcessor
|
|||||||
*/
|
*/
|
||||||
public function execute(?Carbon $start = null, ?Carbon $end = null)
|
public function execute(?Carbon $start = null, ?Carbon $end = null)
|
||||||
{
|
{
|
||||||
try {
|
ini_set('max_execution_time', '900');
|
||||||
$start = $start ? $start : Carbon::today()->subDays(30);
|
// $missingOrders = ['M202302161513122', 'YW202302161027442', 'YW202302151637022', 'M202302151605025', 'M202302151527103', 'M202302151527356', 'M202302151556019', 'YW202302151520241', 'YW202302151445068', 'M202302151359169', 'YW202302151349223', 'YW202302151336520', 'M202302151334316', 'YW202302151148129', 'M202302151145379', 'M202302151142411', 'M202302151037036', 'M202302151036398', 'M202302150919406', 'M202302141535009', 'YW202302141532318', 'M202302141319463', 'M202302141319045', 'YW202302141405471', 'M202302141334494', 'YW202302141321569', 'YW202302141323005', 'M202302141309053', 'M202302140905116', 'M202302141039558', 'M202302141022333', 'YW202302140943182', 'YW202302140923485', 'YW202302131728233', 'YW202302131702040', 'M202302131649417', 'M202302131638056', 'YW202302131601110', 'YW202302131530436', 'YW202302131411338', 'YW202302131355161', 'YW202302131312526', 'M202302130859076', 'M202302111708070', 'M202302111455134', 'M202302111457501', 'M202302111444041', 'M202302111506514', 'M202302111440286', 'M202302111354585', 'M202302111055551', 'M202302110900216', 'YW202302101743112', 'M202302091559443', 'M202302101716374', 'M202302101700402', 'M202302101633570', 'M202302101612095', 'M202302101611408', 'M202302101542340', 'M202302101408370', 'M202302101323341', 'M202302101129532', 'M202302101025109', 'M202302101006595', 'M202302091706357', 'YW202302091255022', 'YW202302091448196', 'YW202302091446431', 'M202302091138154', 'M202302091129396', 'YW202302091028175', 'M202302091006545', 'YW202302090942033', 'YW202302081743094', 'M202302081530599', 'M202302081531210', 'M202302081508571', 'YW202302081530492', 'M202302081500361', 'M202302081253105', 'M202302081303370', 'M202302071636303', 'M202302071741187', 'YW202302071735407', 'M202302071706323', 'M202302071537501', 'M202302071538092', 'YW202302071516453', 'M202302071311314', 'M202302071148154', 'YW202302071136018', 'M202302071036027', 'M202302071008010', 'M202302061742178', 'M202302061615198', 'M202302061502093', 'M202302061458532', 'M202302061552141', 'M202302061548431', 'M202302061555033', 'YW202302061404567', 'M202302061322463', 'M202302061042556', 'M202302061021277', 'M202302060917276', 'M202302041551570', 'M202302041552382', 'YW202302041515257', 'M202302041405502', 'M202302041030185', 'YW202302041215576', 'YW202302041058469', 'YW202302041024459', 'YW202302040939568', 'M202302031701053', 'M202302031700316', 'M202302031430562', 'M202302031431535', 'M202302031147213', 'YW202302031406529', 'YW202302031322256', 'M202302021718554', 'M202302021417415', 'YW202302021404542', 'M202302021055324', 'YW202302021037462', 'M202302011613381', 'M202302011347586', 'M202302011348245', 'M202301151635132', 'M202301141803516', 'YW202301141653536', 'M202301131504477', 'M202301131538220', 'M202301121327453', 'YW202301111153183', 'M202301091649543', 'M202212311641071', 'YW202212211532191', 'YW202212191605226'];
|
||||||
|
|
||||||
$startLimit = Carbon::parse('01-12-2021');
|
$from = $end ? Carbon::today()->diff($end)->days : 0;
|
||||||
|
$to = $start ? Carbon::today()->diff($start)->days : 10;
|
||||||
|
|
||||||
if($start->isBefore($startLimit)){
|
for ($x = $from; $x <= $to; $x++) {
|
||||||
$start = $startLimit;
|
try {
|
||||||
}
|
$startDate = Carbon::today()->subDays($x);
|
||||||
|
|
||||||
$end = $end ? $end : Carbon::today()->addDay();
|
$startLimit = Carbon::parse('01-12-2021');
|
||||||
|
|
||||||
$orderRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/GetOrderList.ashx', 'GET', [
|
if($startDate->isBefore($startLimit)){
|
||||||
'begintime' => $start->timestamp,
|
$startDate = $startLimit;
|
||||||
'endtime' => $end->timestamp,
|
}
|
||||||
]);
|
|
||||||
|
|
||||||
$rows = $this->fetchesDataFRomYDPortal->getResponseBody($orderRequest);
|
$endDate = Carbon::today()->subDays($x - 1);
|
||||||
|
|
||||||
foreach($rows->data as $row){
|
$orderRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/GetOrderList.ashx', 'GET', [
|
||||||
|
'begintime' => $startDate->timestamp,
|
||||||
$containerReference = null;
|
'endtime' => $endDate->timestamp,
|
||||||
$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);
|
$rows = $this->fetchesDataFRomYDPortal->getResponseBody($orderRequest);
|
||||||
|
|
||||||
if(!$rows){
|
if(!$rows->data) continue;
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (array_reverse($rows->data) as $trackingRow) {
|
foreach($rows->data as $row){
|
||||||
if ($trackingRow->tracking === '货物已送达仓库准备入库中') {
|
$time_start = microtime(true);
|
||||||
$receiveDate = Carbon::parse($trackingRow->trackingtime);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strpos($trackingRow->tracking, '货物装柜完成。') !== false) {
|
$containerReference = null;
|
||||||
$tracking = explode(':', $trackingRow->tracking);
|
$loadingDate = null;
|
||||||
$containerReference = explode('预计到港时间', $tracking[1])[0];
|
$unstuffingDate = null;
|
||||||
$loadingDate = Carbon::parse($trackingRow->trackingtime);
|
$deliveryDate = null;
|
||||||
$etd = Carbon::parse($tracking[2])->subDays(5);
|
$etd = null;
|
||||||
$eta = Carbon::parse($tracking[2])->addDays(2);
|
$eta = null;
|
||||||
}
|
$delayDate = null;
|
||||||
|
$status = $row->status;
|
||||||
|
|
||||||
$rescheduleETD = strpos($trackingRow->remark, '开') || strpos($trackingRow->remark, '到港');
|
if($status >= 3){
|
||||||
$rescheduleETA = strpos($trackingRow->remark, '到港');
|
$trackingRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/ApiTracking.ashx', 'GET', [
|
||||||
if (($rescheduleETD !== false || $rescheduleETA !== false) && strpos($trackingRow->tracking, '货物装柜完成。') === false) {
|
'trakingno' => $row->expressno
|
||||||
preg_match_all('/([0-9]+.{3})/', $trackingRow->remark, $matches);
|
|
||||||
$dates = collect();
|
|
||||||
|
|
||||||
foreach($matches[0] as $date){
|
|
||||||
try {
|
|
||||||
$dates->push(Carbon::parse(str_replace('.', '/', $date).Carbon::now()->format('Y')));
|
|
||||||
} catch (\Exception $exception) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
$rescheduleDate = $dates->sortDesc()->first();
|
|
||||||
|
|
||||||
if(!$delayDate || $rescheduleDate > $delayDate){
|
|
||||||
/** @var Carbon $delayDate */
|
|
||||||
$delayDate = $rescheduleDate;
|
|
||||||
|
|
||||||
if($rescheduleETA === false && $delayDate) {
|
|
||||||
$delayDate = $delayDate->addDays('5');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($trackingRow->tracking === '到港') {
|
|
||||||
$delayDate = Carbon::parse($trackingRow->trackingtime);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($trackingRow->tracking === '已开船') {
|
|
||||||
$delayDate = Carbon::parse($trackingRow->trackingtime)->addDays('5');
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($trackingRow->tracking === '货物已进目的港仓库') {
|
|
||||||
$unstuffingDate = Carbon::parse($trackingRow->trackingtime);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Str::contains($trackingRow->tracking, ['派送中', '已签收', '签收完成', ' 第三方提货', '货物已派送完成', '派送', 'delivery', 'delivered'])) {
|
|
||||||
$deliveryDate = Carbon::parse($trackingRow->trackingtime);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$client = new \GuzzleHttp\Client(['cookies' => true, 'headers' => ['Cookie' => 'utc_offset=480']]);
|
|
||||||
|
|
||||||
try {
|
|
||||||
$request = $client->request('get', 'https://main.universe.com.my/Tracking/User/Paging?sEcho=1&sTrackingNo='.$row->expressno.'&sOrgId=sti');
|
|
||||||
$deliveryTracking = json_decode($request->getBody()->getContents());
|
|
||||||
foreach (array_reverse($deliveryTracking->aaData) as $trackingRow) {
|
|
||||||
$trackingDate = Carbon::createFromFormat('d/m/y H:i', $trackingRow->LocalDateTime);
|
|
||||||
if (Str::contains($trackingRow->PublicDescription, ['accepted/picked'])){
|
|
||||||
$unstuffingDate = $trackingDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Str::contains($trackingRow->PublicDescription, ['delivered'])) {
|
|
||||||
$deliveryDate = $trackingDate;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (\Exception $exception){
|
|
||||||
Log::debug('failed to fetch delivery tracking');
|
|
||||||
}
|
|
||||||
|
|
||||||
$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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
$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);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!count($row->deliverysize)){
|
|
||||||
$measurement = round(((float) $row->volume / (float) $row->goodcount) ** (1/3) * 100, 2);
|
|
||||||
$packageObject = new PackageObject(PackageType::CARTON, $row->goodname, (float) $measurement, (float) $measurement, (float) $measurement, 0, (float) $row->goodcount, 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, ['1290CSW', '8997ITB', '3992WHE', '962LOW', '1152AAT'])){
|
|
||||||
$this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/confirmsendorder.ashx', 'GET', [
|
|
||||||
'expressno' => $row->expressno
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$rows = $this->fetchesDataFRomYDPortal->getResponseBody($trackingRequest);
|
||||||
|
|
||||||
|
if(!$rows){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
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])->addDays(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
$rescheduleETD = strpos($trackingRow->remark, '开') || strpos($trackingRow->remark, '到港');
|
||||||
|
$rescheduleETA = strpos($trackingRow->remark, '到港');
|
||||||
|
if (($rescheduleETD !== false || $rescheduleETA !== false) && strpos($trackingRow->tracking, '货物装柜完成。') === false) {
|
||||||
|
preg_match_all('/([0-9]+.{3})/', $trackingRow->remark, $matches);
|
||||||
|
$dates = collect();
|
||||||
|
|
||||||
|
foreach($matches[0] as $date){
|
||||||
|
try {
|
||||||
|
$dates->push(Carbon::parse(str_replace('.', '/', $date).Carbon::now()->format('Y')));
|
||||||
|
} catch (\Exception $exception) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$rescheduleDate = $dates->sortDesc()->first();
|
||||||
|
|
||||||
|
if(!$delayDate || $rescheduleDate > $delayDate){
|
||||||
|
/** @var Carbon $delayDate */
|
||||||
|
$delayDate = $rescheduleDate;
|
||||||
|
|
||||||
|
if($rescheduleETA === false && $delayDate) {
|
||||||
|
$delayDate = $delayDate->addDays('5');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($trackingRow->tracking === '到港') {
|
||||||
|
$delayDate = Carbon::parse($trackingRow->trackingtime);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($trackingRow->tracking === '已开船') {
|
||||||
|
$delayDate = Carbon::parse($trackingRow->trackingtime)->addDays('5');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($trackingRow->tracking === '货物已进目的港仓库') {
|
||||||
|
$unstuffingDate = Carbon::parse($trackingRow->trackingtime);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Str::contains($trackingRow->tracking, ['派送中', '已签收', '签收完成', ' 第三方提货', '货物已派送完成', '派送', 'delivery', 'delivered'])) {
|
||||||
|
$deliveryDate = Carbon::parse($trackingRow->trackingtime);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
if($status >= 5){
|
||||||
|
$client = new \GuzzleHttp\Client(['cookies' => true, 'headers' => ['Cookie' => 'utc_offset=480']]);
|
||||||
|
|
||||||
|
try {
|
||||||
|
$request = $client->request('get', 'https://main.universe.com.my/Tracking/User/Paging?sEcho=1&sTrackingNo='.$row->expressno.'&sOrgId=sti');
|
||||||
|
$deliveryTracking = json_decode($request->getBody()->getContents());
|
||||||
|
foreach (array_reverse($deliveryTracking->aaData) as $trackingRow) {
|
||||||
|
$trackingDate = Carbon::createFromFormat('d/m/y H:i', $trackingRow->LocalDateTime);
|
||||||
|
if (Str::contains($trackingRow->PublicDescription, ['accepted/picked'])){
|
||||||
|
$unstuffingDate = $trackingDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Str::contains($trackingRow->PublicDescription, ['delivered'])) {
|
||||||
|
$deliveryDate = $trackingDate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (\Exception $exception){
|
||||||
|
Log::debug('failed to fetch delivery tracking');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$customerno = preg_split('(-|\(|\)|\/)', $row->customerno);
|
||||||
|
|
||||||
|
$orderNumber = $customerno[array_key_last($customerno)];
|
||||||
|
$allow_contract = true;
|
||||||
|
|
||||||
if($containerReference) {
|
|
||||||
try {
|
try {
|
||||||
$container = $this->fetchesContainer->execute(['reference' => $containerReference]);
|
$order = $this->fetchesOrder->execute(['reference' => $orderNumber]);
|
||||||
$container->packingLists()->detach($packingList);
|
} catch (ResourceNotFoundException $exception) {
|
||||||
$container->packingLists()->attach($packingList);
|
try {
|
||||||
} catch (ResourceNotFoundException $exception){
|
$order = $this->fetchesOrder->execute(['reference' => substr($orderNumber, -9)]);
|
||||||
|
} catch (ResourceNotFoundException $exception) {
|
||||||
|
$order = $this->fetchesCompanyModule->execute(['id' => 1]);
|
||||||
|
$allow_contract = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$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) {
|
if (!$allow_contract) {
|
||||||
$appointee_id = 2037;
|
$appointee_id = 2307;
|
||||||
}
|
} else {
|
||||||
else {
|
$appointee_id = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id;
|
||||||
$appointee_id = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$originWarehouse = $this->fetchesCompanyModule->execute(['id' => $appointee_id]);
|
$warehouseReceiveObject = new PackingListObject($packingListReference, $appointee_id, PackingListType::WAREHOUSE_RECEIVE_LIST, $allow_contract ? ApprovalStatus::APPROVED : ApprovalStatus::REJECTED);
|
||||||
|
|
||||||
$containerObject = new ContainerObject($containerReference, '', '', ContainerTypes::FORTY_FEET_DRY_CONTAINER, $loadingDate, ApprovalStatus::PENDING_VERIFICATION);
|
/** @var PackingList $warehouseReceiveList */
|
||||||
/** @var Container $container */
|
$warehouseReceiveList = $this->createPackingListProcessor->execute($warehouseReceiveObject, $order);
|
||||||
$container = $this->createContainerProcessor->execute($containerObject, $originWarehouse);
|
|
||||||
|
|
||||||
$container->packingLists()->detach($packingList);
|
$transportObject = new TransportObject(TransportType::LAND, null, $row->kuaidilist, Carbon::parse($receiveDate), Carbon::parse($receiveDate), $allow_contract ? ApprovalStatus::APPROVED : ApprovalStatus::REJECTED);
|
||||||
$container->packingLists()->attach($packingList);
|
$transport = $this->createsTransport->execute($transportObject, $warehouseReceiveList);
|
||||||
|
|
||||||
$transport = $container->transports()->first();
|
if ($allow_contract) {
|
||||||
|
|
||||||
if(!$transport){
|
$contract = $this->unityCreateContract->execute();
|
||||||
$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){
|
$contractReference = $contract->hash_id;
|
||||||
$delayDate = $delayDate->addDays(2);
|
$contractObligations = $contract->contract_obligation_list;
|
||||||
$transport = $container->transports()->first();
|
|
||||||
|
|
||||||
if(!$transport->schedules()->whereDate('eta', '>=', $delayDate)->first()) {
|
$this->unityActivateContract->execute($contractReference);
|
||||||
$etd = $transport->schedules()->where('status', '=', ApprovalStatus::APPROVED)->first()->etd;
|
|
||||||
$transport->schedules()->update(['status' => ApprovalStatus::EXPIRED]);
|
$supervisorHashId = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->unity_hash_id;
|
||||||
$this->createsSchedule->execute($transport, new ScheduleObject($etd, $delayDate, ApprovalStatus::APPROVED));
|
|
||||||
foreach ($container->packingLists as $packingList){
|
$supervisorContractEntity = $this->unityCreateContractEntity->execute($contractReference, $supervisorHashId);
|
||||||
if(!($packingList->owner instanceof Order)) continue;
|
$order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->update(['entity_hash_id' => $supervisorContractEntity->hash_id, 'entity_signature' => $supervisorContractEntity->entity_signature_hash_id]);
|
||||||
$user = $packingList->owner->companyModule->employees()->first();
|
|
||||||
if(app()->environment(['production'])) {
|
$importerContractEntity = $this->unityCreateContractEntity->execute($contractReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->appointee->unity_hash_id);
|
||||||
$user->notify(new ShipmentRescheduleEmail($user, $packingList));
|
$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);
|
||||||
|
|
||||||
if($unstuffingDate && $container->status !== ApprovalStatus::COMPLETED){
|
|
||||||
$container->update(['status' => ApprovalStatus::COMPLETED]);
|
|
||||||
$container->transports()->first()->update(['drop_date' => $unstuffingDate, 'status' => ApprovalStatus::COMPLETED]);
|
|
||||||
|
|
||||||
/** @var PackingList $packingList */
|
/** @var PackingList $packingList */
|
||||||
foreach($container->packingLists as $packingList){
|
$packingList = $this->createPackingListProcessor->execute($packingListObject, $order);
|
||||||
|
|
||||||
if($packingList->status === ApprovalStatus::PENDING_VERIFICATION){
|
if ($allow_contract) {
|
||||||
$packingList->status = ApprovalStatus::APPROVED;
|
foreach ($contractObligations as $obligation) {
|
||||||
$packingList->save();
|
$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);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!count($row->deliverysize)){
|
||||||
|
$measurement = round(((float) $row->volume / (float) $row->goodcount) ** (1/3) * 100, 2);
|
||||||
|
$packageObject = new PackageObject(PackageType::CARTON, $row->goodname, (float) $measurement, (float) $measurement, (float) $measurement, 0, (float) $row->goodcount, 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, ['1290CSW', '8997ITB', '3992WHE', '962LOW', '1152AAT'])){
|
||||||
|
$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 = 2307;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$appointee_id = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($allow_contract) {
|
$originWarehouse = $this->fetchesCompanyModule->execute(['id' => $appointee_id]);
|
||||||
$signature = $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->entity_sigiture;
|
|
||||||
foreach($packingList->steps()->where('reference', '!=', 'DELIVERY')->get() as $step){
|
$containerObject = new ContainerObject($containerReference, '', '', ContainerTypes::FORTY_FEET_DRY_CONTAINER, $loadingDate, ApprovalStatus::PENDING_VERIFICATION);
|
||||||
$this->updatesContractObligations->execute($signature, $step->obligation_hash_id);
|
/** @var Container $container */
|
||||||
$step->update(['status' => ApprovalStatus::COMPLETED]);
|
$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){
|
||||||
|
$delayDate = $delayDate->addDays(2);
|
||||||
|
$transport = $container->transports()->first();
|
||||||
|
|
||||||
|
if(!$transport->schedules()->whereDate('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));
|
||||||
|
foreach ($container->packingLists as $packingList){
|
||||||
|
if(!($packingList->owner instanceof Order)) continue;
|
||||||
|
$user = $packingList->owner->companyModule->employees()->first();
|
||||||
|
if(app()->environment(['production'])) {
|
||||||
|
$user->notify(new ShipmentRescheduleEmail($user, $packingList));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($allow_contract) {
|
||||||
|
$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 && !$packingList->transports()->exists()){
|
if($deliveryDate && !$packingList->transports()->exists()){
|
||||||
$packingList->status = ApprovalStatus::COMPLETED;
|
$packingList->status = ApprovalStatus::COMPLETED;
|
||||||
$packingList->save();
|
$packingList->save();
|
||||||
|
|
||||||
$deliveryDate = Carbon::parse($deliveryDate);
|
$deliveryDate = Carbon::parse($deliveryDate);
|
||||||
$transportObject = new TransportObject(TransportType::LAND, null, null, $deliveryDate, $deliveryDate, ApprovalStatus::APPROVED);
|
$transportObject = new TransportObject(TransportType::LAND, null, null, $deliveryDate, $deliveryDate, ApprovalStatus::APPROVED);
|
||||||
/** @var Transport $transport */
|
/** @var Transport $transport */
|
||||||
$transport = $this->createsTransport->execute($transportObject, $packingList);
|
$transport = $this->createsTransport->execute($transportObject, $packingList);
|
||||||
$this->createsSchedule->execute($transport, new ScheduleObject($deliveryDate, $deliveryDate, ApprovalStatus::APPROVED));
|
$this->createsSchedule->execute($transport, new ScheduleObject($deliveryDate, $deliveryDate, ApprovalStatus::APPROVED));
|
||||||
|
|
||||||
|
|
||||||
if ($allow_contract) {
|
if ($allow_contract) {
|
||||||
$deliveryStep = $packingList->steps()->where('reference', '=', 'LAST_MILE_DELIVERY')->first();
|
$deliveryStep = $packingList->steps()->where('reference', '=', 'LAST_MILE_DELIVERY')->first();
|
||||||
$signature = $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->entity_sigiture;
|
$signature = $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->entity_sigiture;
|
||||||
$this->updatesContractObligations->execute($signature, $deliveryStep->obligation_hash_id);
|
$this->updatesContractObligations->execute($signature, $deliveryStep->obligation_hash_id);
|
||||||
$deliveryStep->update(['status' => ApprovalStatus::COMPLETED]);
|
$deliveryStep->update(['status' => ApprovalStatus::COMPLETED]);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$time_end = microtime(true);
|
||||||
|
|
||||||
|
$execution_time = ($time_end - $time_start)/60;
|
||||||
|
|
||||||
|
echo '<b>Total Execution Time:</b> '.$execution_time.' Mins';
|
||||||
|
echo 'successful';
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
echo 'successful';
|
} catch (\Exception $exception) {
|
||||||
|
Log::debug($exception);
|
||||||
}
|
}
|
||||||
} catch (\Exception $exception) {
|
|
||||||
Log::debug($exception);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -66,7 +66,6 @@ class FetchPackingListFromVTPortalProcessor
|
|||||||
}
|
}
|
||||||
|
|
||||||
} catch (GuzzleException $exception) {
|
} catch (GuzzleException $exception) {
|
||||||
dd($exception);
|
|
||||||
Log::error($exception);
|
Log::error($exception);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
+267
@@ -0,0 +1,267 @@
|
|||||||
|
<?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\PackageObject;
|
||||||
|
use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject;
|
||||||
|
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
|
||||||
|
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\ValueObjects\Constants\ApprovalStatus;
|
||||||
|
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\Order;
|
||||||
|
use App\Models\PackingList;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use GuzzleHttp\Exception\GuzzleException;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
class FetchPackingListsFromYdPortalProcessor
|
||||||
|
{
|
||||||
|
/** @var FetchesDataFromYDPortal */
|
||||||
|
private $fetchesDataFRomYDPortal;
|
||||||
|
|
||||||
|
/** @var FetchesOrder */
|
||||||
|
private $fetchesOrder;
|
||||||
|
|
||||||
|
/** @var CreatePackingListProcessor */
|
||||||
|
private $createPackingListProcessor;
|
||||||
|
|
||||||
|
/** @var CreatePackageProcessor */
|
||||||
|
private $createPackageProcessor;
|
||||||
|
|
||||||
|
/** @var CreatesTransport */
|
||||||
|
private $createsTransport;
|
||||||
|
|
||||||
|
/** @var FetchesPackingList */
|
||||||
|
private $fetchesPackingList;
|
||||||
|
|
||||||
|
/** @var FetchesCompanyModule */
|
||||||
|
|
||||||
|
private $fetchesCompanyModule;
|
||||||
|
/** @var CreatesContract */
|
||||||
|
private $unityCreateContract;
|
||||||
|
|
||||||
|
/** @var AssignContractEntityProcessor */
|
||||||
|
private $unityAssignContractEntity;
|
||||||
|
|
||||||
|
/** @var CreateContractEntityProcessor */
|
||||||
|
private $unityCreateContractEntity;
|
||||||
|
|
||||||
|
/** @var CreatesStep */
|
||||||
|
private $createsStep;
|
||||||
|
|
||||||
|
/** @var ActivateContractProcessor */
|
||||||
|
private $unityActivateContract;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param FetchesDataFromYDPortal $fetchesDataFRomYDPortal
|
||||||
|
* @param FetchesOrder $fetchesOrder
|
||||||
|
* @param CreatePackingListProcessor $createPackingListProcessor
|
||||||
|
* @param CreatePackageProcessor $createPackageProcessor
|
||||||
|
* @param CreatesTransport $createsTransport
|
||||||
|
* @param FetchesPackingList $fetchesPackingList
|
||||||
|
* @param FetchesCompanyModule $fetchesCompanyModule
|
||||||
|
* @param CreatesContract $unityCreateContract
|
||||||
|
* @param AssignContractEntityProcessor $unityAssignContractEntity
|
||||||
|
* @param CreateContractEntityProcessor $unityCreateContractEntity
|
||||||
|
* @param CreatesStep $createsStep
|
||||||
|
* @param ActivateContractProcessor $unityActivateContract
|
||||||
|
*/
|
||||||
|
public function __construct(FetchesDataFromYDPortal $fetchesDataFRomYDPortal, FetchesOrder $fetchesOrder, CreatePackingListProcessor $createPackingListProcessor, CreatePackageProcessor $createPackageProcessor, CreatesTransport $createsTransport, FetchesPackingList $fetchesPackingList, FetchesCompanyModule $fetchesCompanyModule, CreatesContract $unityCreateContract, AssignContractEntityProcessor $unityAssignContractEntity, CreateContractEntityProcessor $unityCreateContractEntity, CreatesStep $createsStep, ActivateContractProcessor $unityActivateContract)
|
||||||
|
{
|
||||||
|
$this->fetchesDataFRomYDPortal = $fetchesDataFRomYDPortal;
|
||||||
|
$this->fetchesOrder = $fetchesOrder;
|
||||||
|
$this->createPackingListProcessor = $createPackingListProcessor;
|
||||||
|
$this->createPackageProcessor = $createPackageProcessor;
|
||||||
|
$this->createsTransport = $createsTransport;
|
||||||
|
$this->fetchesPackingList = $fetchesPackingList;
|
||||||
|
$this->fetchesCompanyModule = $fetchesCompanyModule;
|
||||||
|
$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
|
||||||
|
* @throws GuzzleException
|
||||||
|
*/
|
||||||
|
public function execute(?Carbon $start = null, ?Carbon $end = null)
|
||||||
|
{
|
||||||
|
$from = $end ? Carbon::today()->diff($end)->days : 0;
|
||||||
|
$to = $start ? Carbon::today()->diff($start)->days : 10;
|
||||||
|
|
||||||
|
for ($x = $from; $x <= $to; $x++) {
|
||||||
|
try {
|
||||||
|
$startDate = Carbon::today()->subDays($x);
|
||||||
|
|
||||||
|
$startLimit = Carbon::parse('01-12-2021');
|
||||||
|
|
||||||
|
if($startDate->isBefore($startLimit)){
|
||||||
|
$startDate = $startLimit;
|
||||||
|
}
|
||||||
|
|
||||||
|
$endDate = Carbon::today()->subDays($x - 1);
|
||||||
|
$orderRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/GetOrderList.ashx', 'GET', [
|
||||||
|
'begintime' => $startDate->timestamp,
|
||||||
|
'endtime' => $endDate->timestamp,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$rows = $this->fetchesDataFRomYDPortal->getResponseBody($orderRequest);
|
||||||
|
|
||||||
|
if(!$rows->data) continue;
|
||||||
|
|
||||||
|
foreach($rows->data as $row){
|
||||||
|
|
||||||
|
$time_start = microtime(true);
|
||||||
|
|
||||||
|
$receiveDate = Carbon::parse(substr(preg_replace("/[^0-9]/", "", $row->expressno), 0, 8));
|
||||||
|
|
||||||
|
$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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$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 = 2307;
|
||||||
|
} 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!count($row->deliverysize)){
|
||||||
|
$measurement = round(((float) $row->volume / (float) $row->goodcount) ** (1/3) * 100, 2);
|
||||||
|
$packageObject = new PackageObject(PackageType::CARTON, $row->goodname, (float) $measurement, (float) $measurement, (float) $measurement, 0, (float) $row->goodcount, 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, ['1290CSW', '8997ITB', '3992WHE', '962LOW', '1152AAT'])){
|
||||||
|
$this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/confirmsendorder.ashx', 'GET', [
|
||||||
|
'expressno' => $row->expressno
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$time_end = microtime(true);
|
||||||
|
|
||||||
|
$execution_time = ($time_end - $time_start)/60;
|
||||||
|
|
||||||
|
echo 'successful => <b>Total Execution Time:</b> '.$execution_time.' Mins<br>';
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (\Exception $exception) {
|
||||||
|
Log::debug($exception);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+1
-1
@@ -152,7 +152,7 @@ class FetchWarehouseReceiveListFromVTPortalProcessor
|
|||||||
} catch (ResourceNotFoundException $exception) {
|
} catch (ResourceNotFoundException $exception) {
|
||||||
$allow_contract = false;
|
$allow_contract = false;
|
||||||
$order = $this->fetchesCompanyModule->execute(['id' => 1]);
|
$order = $this->fetchesCompanyModule->execute(['id' => 1]);
|
||||||
$appointee_id = 2037;
|
$appointee_id = 2307;
|
||||||
}
|
}
|
||||||
|
|
||||||
$packingListReference = $parcel[0];
|
$packingListReference = $parcel[0];
|
||||||
|
|||||||
@@ -0,0 +1,74 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PerfexCRM\DataTransferObjects;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Classes\General\Interfaces\DataTransferObject;
|
||||||
|
|
||||||
|
class CreateLeadPerfexCRMObject implements DataTransferObject
|
||||||
|
{
|
||||||
|
/** @var string */
|
||||||
|
private $name;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $email;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $phone;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $companyName;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $companyReference;
|
||||||
|
|
||||||
|
public function __construct(string $name, string $email, string $phone, string $companyName, string $companyReference)
|
||||||
|
{
|
||||||
|
|
||||||
|
$this->name = $name;
|
||||||
|
$this->email = $email;
|
||||||
|
$this->phone = $phone;
|
||||||
|
$this->companyName = $companyName;
|
||||||
|
$this->companyReference = $companyReference;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getName(): string
|
||||||
|
{
|
||||||
|
return $this->name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getEmail(): string
|
||||||
|
{
|
||||||
|
return $this->email;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getPhone(): string
|
||||||
|
{
|
||||||
|
return $this->phone;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getCompanyName(): string
|
||||||
|
{
|
||||||
|
return $this->companyName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getCompanyReference(): string
|
||||||
|
{
|
||||||
|
return $this->companyReference;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,161 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PerfexCRM\DataTransferObjects;
|
||||||
|
|
||||||
|
use App\Classes\General\Interfaces\DataTransferObject;
|
||||||
|
|
||||||
|
class CreateTaskPerfexCRMObject implements DataTransferObject
|
||||||
|
{
|
||||||
|
/** @var string */
|
||||||
|
private $email;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $name;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $description;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $leadId;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $milestoneId;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $projectId;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $reference;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $onTaskCompletion;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $status;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $department;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $priority;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $duedate;
|
||||||
|
|
||||||
|
public function __construct(string $email, string $name, string $description, string $leadId, string $projectId, string $milestoneId, string $reference, string $onTaskCompletion, string $status, string $department, string $priority, string $duedate)
|
||||||
|
{
|
||||||
|
$this->email = $email;
|
||||||
|
$this->name = $name;
|
||||||
|
$this->description = $description;
|
||||||
|
$this->leadId = $leadId;
|
||||||
|
$this->projectId = $projectId;
|
||||||
|
$this->milestoneId = $milestoneId;
|
||||||
|
$this->reference = $reference;
|
||||||
|
$this->onTaskCompletion = $onTaskCompletion;
|
||||||
|
$this->status = $status;
|
||||||
|
$this->department = $department;
|
||||||
|
$this->priority = $priority;
|
||||||
|
$this->duedate = $duedate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getEmail(): string
|
||||||
|
{
|
||||||
|
return $this->email;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getName(): string
|
||||||
|
{
|
||||||
|
return $this->name;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return $this->description;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getLeadId(): string
|
||||||
|
{
|
||||||
|
return $this->leadId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setLeadId(string $leadId)
|
||||||
|
{
|
||||||
|
$this->leadId = $leadId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getProjectId(): string
|
||||||
|
{
|
||||||
|
return $this->projectId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getMilestoneId(): string
|
||||||
|
{
|
||||||
|
return $this->milestoneId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getReference(): string
|
||||||
|
{
|
||||||
|
return $this->reference;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getOnTaskCompletion(): string
|
||||||
|
{
|
||||||
|
return $this->onTaskCompletion;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getStatus(): string
|
||||||
|
{
|
||||||
|
return $this->status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getDepartment(): string
|
||||||
|
{
|
||||||
|
return $this->department;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getPriority(): string
|
||||||
|
{
|
||||||
|
return $this->priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getDuedate(): string
|
||||||
|
{
|
||||||
|
return $this->duedate;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,99 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PerfexCRM\DataTransferObjects;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Classes\General\Interfaces\DataTransferObject;
|
||||||
|
|
||||||
|
class CustomerContactObject implements DataTransferObject
|
||||||
|
{
|
||||||
|
/** @var int */
|
||||||
|
private $customerId;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $firstname;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $lastname;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $email;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $password;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $isPrimary;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $sendSetPasswordEmail;
|
||||||
|
|
||||||
|
|
||||||
|
public function __construct(string $customerId, string $firstname, string $lastname, string $email, string $password, string $isPrimary, string $sendSetPasswordEmail)
|
||||||
|
{
|
||||||
|
|
||||||
|
$this->customerId = $customerId;
|
||||||
|
$this->firstname = $firstname;
|
||||||
|
$this->lastname = $lastname;
|
||||||
|
$this->email = $email;
|
||||||
|
$this->password = $password;
|
||||||
|
$this->isPrimary = $isPrimary;
|
||||||
|
$this->sendSetPasswordEmail = $sendSetPasswordEmail;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getCustomerId(): int
|
||||||
|
{
|
||||||
|
return $this->customerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getFirstName(): string
|
||||||
|
{
|
||||||
|
return $this->firstname;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getLastName(): string
|
||||||
|
{
|
||||||
|
return $this->lastname;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getEmail(): string
|
||||||
|
{
|
||||||
|
return $this->email;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getPassword(): string
|
||||||
|
{
|
||||||
|
return $this->password;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getIsPrimary(): string
|
||||||
|
{
|
||||||
|
return $this->isPrimary;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getSendSetPasswordEmail(): string
|
||||||
|
{
|
||||||
|
return $this->sendSetPasswordEmail;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,124 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PerfexCRM\DataTransferObjects;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Classes\General\Interfaces\DataTransferObject;
|
||||||
|
|
||||||
|
class InitialPerfexCRMObject implements DataTransferObject
|
||||||
|
{
|
||||||
|
/** @var string */
|
||||||
|
private $companyName;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $companyReference;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $contactName;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $contactEmail;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $bookingMarking;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $projectName;
|
||||||
|
|
||||||
|
/** @var int */
|
||||||
|
private $projectStatus;
|
||||||
|
|
||||||
|
/** @var array */
|
||||||
|
private $milestoneNames;
|
||||||
|
|
||||||
|
/** @var array */
|
||||||
|
private $taskNames;
|
||||||
|
|
||||||
|
|
||||||
|
public function __construct(string $companyName, string $companyReference, string $contactName, string $contactEmail, string $bookingMarking, string $projectName, int $projectStatus, array $milestoneNames, array $taskNames)
|
||||||
|
{
|
||||||
|
|
||||||
|
$this->companyName = $companyName;
|
||||||
|
$this->companyReference = $companyReference;
|
||||||
|
$this->contactName = $contactName;
|
||||||
|
$this->contactEmail = $contactEmail;
|
||||||
|
$this->bookingMarking = $bookingMarking;
|
||||||
|
$this->projectName = $projectName;
|
||||||
|
$this->projectStatus = $projectStatus;
|
||||||
|
$this->milestoneNames = $milestoneNames;
|
||||||
|
$this->taskNames = $taskNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getCompanyName(): string
|
||||||
|
{
|
||||||
|
return $this->companyName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getCompanyReference(): string
|
||||||
|
{
|
||||||
|
return $this->companyReference;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getContactName(): string
|
||||||
|
{
|
||||||
|
return $this->contactName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getContactEmail(): string
|
||||||
|
{
|
||||||
|
return $this->contactEmail;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getBookingMarking(): string
|
||||||
|
{
|
||||||
|
return $this->bookingMarking;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getProjectName(): string
|
||||||
|
{
|
||||||
|
return $this->projectName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getProjectStatus(): int
|
||||||
|
{
|
||||||
|
return $this->projectStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getMilestoneNames(): array
|
||||||
|
{
|
||||||
|
return $this->milestoneNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getTaskNames(): array
|
||||||
|
{
|
||||||
|
return $this->taskNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PerfexCRM\DataTransferObjects;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Classes\General\Interfaces\DataTransferObject;
|
||||||
|
|
||||||
|
class InvoicePaymentPerfexCRMObject implements DataTransferObject
|
||||||
|
{
|
||||||
|
/** @var int */
|
||||||
|
private $invoiceId;
|
||||||
|
|
||||||
|
/** @var float */
|
||||||
|
private $amount;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $date;
|
||||||
|
|
||||||
|
/** @var int */
|
||||||
|
private $paymentMode;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $transactionId;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $note;
|
||||||
|
|
||||||
|
|
||||||
|
public function __construct(int $invoiceId, float $amount, string $date, int $paymentMode, string $transactionId, string $note)
|
||||||
|
{
|
||||||
|
$this->invoiceId = $invoiceId;
|
||||||
|
$this->amount = $amount;
|
||||||
|
$this->date = $date;
|
||||||
|
$this->paymentMode = $paymentMode;
|
||||||
|
$this->transactionId = $transactionId;
|
||||||
|
$this->note = $note;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getInvoiceId(): int
|
||||||
|
{
|
||||||
|
return $this->invoiceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
|
public function getAmount(): float
|
||||||
|
{
|
||||||
|
return $this->amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getDate(): string
|
||||||
|
{
|
||||||
|
return $this->date;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getPaymentMode(): int
|
||||||
|
{
|
||||||
|
return $this->paymentMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getTransactionId(): string
|
||||||
|
{
|
||||||
|
return $this->transactionId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getNote(): string
|
||||||
|
{
|
||||||
|
return $this->note;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,145 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PerfexCRM\DataTransferObjects;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Classes\General\Interfaces\DataTransferObject;
|
||||||
|
|
||||||
|
class InvoicePerfexCRMObject implements DataTransferObject
|
||||||
|
{
|
||||||
|
/** @var string */
|
||||||
|
private $clientId;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $number;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $date;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $dueDate;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $currency;
|
||||||
|
|
||||||
|
/** @var float */
|
||||||
|
private $subTotal;
|
||||||
|
|
||||||
|
/** @var float */
|
||||||
|
private $total;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $billingStreet;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $projectId;
|
||||||
|
|
||||||
|
/** @var array */
|
||||||
|
private $allowedPaymentModes;
|
||||||
|
|
||||||
|
/** @var array */
|
||||||
|
private $invoiceItems;
|
||||||
|
|
||||||
|
public function __construct(string $clientId, string $number, string $date, string $dueDate, string $currency, float $subTotal, float $total, string $billingStreet, string $projectId, array $allowedPaymentModes, array $invoiceItems)
|
||||||
|
{
|
||||||
|
$this->clientId = $clientId;
|
||||||
|
$this->number = $number;
|
||||||
|
$this->date = $date;
|
||||||
|
$this->dueDate = $dueDate;
|
||||||
|
$this->currency = $currency;
|
||||||
|
$this->subTotal = $subTotal;
|
||||||
|
$this->total = $total;
|
||||||
|
$this->billingStreet = $billingStreet;
|
||||||
|
$this->projectId = $projectId;
|
||||||
|
$this->allowedPaymentModes = $allowedPaymentModes;
|
||||||
|
$this->invoiceItems = $invoiceItems;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getClientId(): string
|
||||||
|
{
|
||||||
|
return $this->clientId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getNumber(): string
|
||||||
|
{
|
||||||
|
return $this->number;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getDate(): string
|
||||||
|
{
|
||||||
|
return $this->date;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getDueDate(): string
|
||||||
|
{
|
||||||
|
return $this->dueDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getCurrency(): string
|
||||||
|
{
|
||||||
|
return $this->currency;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
|
public function getSubTotal(): float
|
||||||
|
{
|
||||||
|
return $this->subTotal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
|
public function getTotal(): float
|
||||||
|
{
|
||||||
|
return $this->total;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getBillingStreet(): string
|
||||||
|
{
|
||||||
|
return $this->billingStreet;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getProjectId(): string
|
||||||
|
{
|
||||||
|
return $this->projectId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getAllowedPaymentModes(): array
|
||||||
|
{
|
||||||
|
return $this->allowedPaymentModes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getInvoiceItems(): array
|
||||||
|
{
|
||||||
|
return $this->invoiceItems;
|
||||||
|
}
|
||||||
|
}
|
||||||
+86
@@ -0,0 +1,86 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PerfexCRM\DataTransferObjects;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Classes\General\Interfaces\DataTransferObject;
|
||||||
|
|
||||||
|
class InvoiceSingleItemPerfexCRMObject implements DataTransferObject
|
||||||
|
{
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
public $description;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
public $longDescription;
|
||||||
|
|
||||||
|
/** @var float */
|
||||||
|
public $qty;
|
||||||
|
|
||||||
|
/** @var float */
|
||||||
|
public $rate;
|
||||||
|
|
||||||
|
/** @var int */
|
||||||
|
public $order;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
public $unit;
|
||||||
|
|
||||||
|
public function __construct(string $description, string $longDescription, float $qty, float $rate, int $order, string $unit)
|
||||||
|
{
|
||||||
|
$this->description = $description;
|
||||||
|
$this->longDescription = $longDescription;
|
||||||
|
$this->qty = $qty;
|
||||||
|
$this->rate = $rate;
|
||||||
|
$this->order = $order;
|
||||||
|
$this->unit = $unit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getDescription(): string
|
||||||
|
{
|
||||||
|
return $this->description;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getLongDescription(): string
|
||||||
|
{
|
||||||
|
return $this->longDescription;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
|
public function getQty(): float
|
||||||
|
{
|
||||||
|
return $this->qty;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return float
|
||||||
|
*/
|
||||||
|
public function getRate(): float
|
||||||
|
{
|
||||||
|
return $this->rate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getOrder(): int
|
||||||
|
{
|
||||||
|
return $this->order;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getUnit(): string
|
||||||
|
{
|
||||||
|
return $this->unit;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PerfexCRM\DataTransferObjects;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Classes\General\Interfaces\DataTransferObject;
|
||||||
|
use App\Models\Transaction;
|
||||||
|
|
||||||
|
class UpdatePerfexCRMInvoiceObject implements DataTransferObject
|
||||||
|
{
|
||||||
|
/** @var string */
|
||||||
|
private $email;
|
||||||
|
|
||||||
|
/** @var Transaction */
|
||||||
|
private $transaction;
|
||||||
|
|
||||||
|
/** @var bool */
|
||||||
|
private $isPaid;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $projectId;
|
||||||
|
|
||||||
|
public function __construct(string $email, string $projectId, Transaction $transaction, bool $isPaid)
|
||||||
|
{
|
||||||
|
$this->email = $email;
|
||||||
|
$this->transaction = $transaction;
|
||||||
|
$this->isPaid = $isPaid;
|
||||||
|
$this->projectId = $projectId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getEmail(): string
|
||||||
|
{
|
||||||
|
return $this->email;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getProjectId(): string
|
||||||
|
{
|
||||||
|
return $this->projectId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Transaction
|
||||||
|
*/
|
||||||
|
public function getTransaction(): Transaction
|
||||||
|
{
|
||||||
|
return $this->transaction;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function getIsPaid(): bool
|
||||||
|
{
|
||||||
|
return $this->isPaid;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,128 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PerfexCRM\DataTransferObjects;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Classes\General\Interfaces\DataTransferObject;
|
||||||
|
|
||||||
|
class UpdatePerfexCRMObject implements DataTransferObject
|
||||||
|
{
|
||||||
|
/** @var string */
|
||||||
|
private $companyName;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $companyReference;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $contactName;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $contactEmail;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $bookingMarking;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $projectName;
|
||||||
|
|
||||||
|
/** @var int */
|
||||||
|
private $projectStatus;
|
||||||
|
|
||||||
|
/** @var array */
|
||||||
|
private $milestoneNames;
|
||||||
|
|
||||||
|
/** @var array */
|
||||||
|
private $tasks;
|
||||||
|
|
||||||
|
|
||||||
|
public function __construct(string $companyName, string $companyReference, string $contactName, string $contactEmail, string $bookingMarking, string $projectName, int $projectStatus, array $milestoneNames, array $tasks)
|
||||||
|
{
|
||||||
|
|
||||||
|
$this->companyName = $companyName;
|
||||||
|
$this->companyReference = $companyReference;
|
||||||
|
$this->contactName = $contactName;
|
||||||
|
$this->contactEmail = $contactEmail;
|
||||||
|
$this->bookingMarking = $bookingMarking;
|
||||||
|
$this->projectName = $projectName;
|
||||||
|
$this->projectStatus = $projectStatus;
|
||||||
|
$this->milestoneNames = $milestoneNames;
|
||||||
|
$this->tasks = $tasks;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getCompanyName(): string
|
||||||
|
{
|
||||||
|
return $this->companyName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getCompanyReference(): string
|
||||||
|
{
|
||||||
|
return $this->companyReference;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getContactName(): string
|
||||||
|
{
|
||||||
|
return $this->contactName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getContactEmail(): string
|
||||||
|
{
|
||||||
|
return $this->contactEmail;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getBookingMarking(): string
|
||||||
|
{
|
||||||
|
return $this->bookingMarking;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getProjectName(): string
|
||||||
|
{
|
||||||
|
return $this->projectName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getProjectStatus(): int
|
||||||
|
{
|
||||||
|
return $this->projectStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getMilestoneNames(): array
|
||||||
|
{
|
||||||
|
return $this->milestoneNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getTasks(): array
|
||||||
|
{
|
||||||
|
return $this->tasks;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setTasks($tasks)
|
||||||
|
{
|
||||||
|
$this->tasks = $tasks;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,178 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PerfexCRM\Processors;
|
||||||
|
|
||||||
|
use App\Models\Transaction;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\CreatesPerfexCRMInvoice;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\CreatesPerfexCRMInvoicePayment;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\ConvertsPerfexCRMLeadToCustomer;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\FetchesPerfexCRMProject;
|
||||||
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\InvoicePerfexCRMObject;
|
||||||
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\InvoicePaymentPerfexCRMObject;
|
||||||
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\InvoiceSingleItemPerfexCRMObject;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\CreatesPerfexCRMCustomerProject;
|
||||||
|
use App\Classes\ValueObjects\Constants\PerfexCRMProjectStatus;
|
||||||
|
use App\Models\PackingList;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
class CreatePerfexCRMInvoiceProcessor
|
||||||
|
{
|
||||||
|
|
||||||
|
/** @var CreatesPerfexCRMInvoice */
|
||||||
|
private $createsPerfexCRMInvoice;
|
||||||
|
|
||||||
|
/** @var CreatesPerfexCRMInvoicePayment */
|
||||||
|
private $createsPerfexCRMInvoicePayment;
|
||||||
|
|
||||||
|
/** @var ConvertsPerfexCRMLeadToCustomer */
|
||||||
|
private $convertsPerfexCRMLeadToCustomer;
|
||||||
|
|
||||||
|
/** @var FetchesPerfexCRMProject */
|
||||||
|
private $fetchesPerfexCRMProject;
|
||||||
|
|
||||||
|
/** @var CreatesPerfexCRMCustomerProject */
|
||||||
|
private $createsPerfexCRMCustomerProject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CreatePerfexCRMInvoiceProcessor constructor.
|
||||||
|
* @param CreatesPerfexCRMInvoice $createsPerfexCRMInvoice
|
||||||
|
*/
|
||||||
|
public function __construct(CreatesPerfexCRMInvoice $createsPerfexCRMInvoice,
|
||||||
|
CreatesPerfexCRMInvoicePayment $createsPerfexCRMInvoicePayment,
|
||||||
|
ConvertsPerfexCRMLeadToCustomer $convertsPerfexCRMLeadToCustomer,
|
||||||
|
FetchesPerfexCRMProject $fetchesPerfexCRMProject,
|
||||||
|
CreatesPerfexCRMCustomerProject $createsPerfexCRMCustomerProject)
|
||||||
|
{
|
||||||
|
$this->createsPerfexCRMInvoice = $createsPerfexCRMInvoice;
|
||||||
|
$this->createsPerfexCRMInvoicePayment = $createsPerfexCRMInvoicePayment;
|
||||||
|
$this->convertsPerfexCRMLeadToCustomer = $convertsPerfexCRMLeadToCustomer;
|
||||||
|
$this->fetchesPerfexCRMProject = $fetchesPerfexCRMProject;
|
||||||
|
$this->createsPerfexCRMCustomerProject = $createsPerfexCRMCustomerProject;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Transaction $transaction
|
||||||
|
* @param bool $isPaid, default: false
|
||||||
|
* @return null|object
|
||||||
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function execute(Transaction $transaction, bool $isPaid = false) {
|
||||||
|
$clientId = "";
|
||||||
|
$number = $transaction->bill_no;
|
||||||
|
$prefix = "INV-";
|
||||||
|
|
||||||
|
//This will remove the prefix if prefix already exist in the string
|
||||||
|
if (substr($number, 0, strlen($prefix)) == $prefix) {
|
||||||
|
$number = substr($number, strlen($prefix));
|
||||||
|
}
|
||||||
|
|
||||||
|
$date = Carbon::parse($transaction->created_at)->format('Y-m-d');
|
||||||
|
$dueDate = Carbon::parse($transaction->created_at)->addDays(6)->startOfDay()->format('Y-m-d');
|
||||||
|
$currency = 1;
|
||||||
|
$subTotal = 0.00;
|
||||||
|
$total = 0.00;
|
||||||
|
|
||||||
|
$companyModule = $transaction->owner->owner->companyModule;
|
||||||
|
$billingStreet = "";
|
||||||
|
$addresses = $companyModule
|
||||||
|
->addresses()
|
||||||
|
->where('status', '=', \App\Classes\ValueObjects\Constants\ApprovalStatus::APPROVED)
|
||||||
|
->where('type', '=', \App\Classes\ValueObjects\Constants\AddressType::BILLING)->first();
|
||||||
|
|
||||||
|
if ($addresses !== null) {
|
||||||
|
$billingStreet = $billingStreet.$addresses->street_one;
|
||||||
|
$billingStreet = $billingStreet.$addresses->street_two.',';
|
||||||
|
$billingStreet = $billingStreet.$addresses->district()->first()->name.',';
|
||||||
|
$billingStreet = $billingStreet.$addresses->postcode;
|
||||||
|
$billingStreet = $billingStreet.$addresses->state()->first()->name.',';
|
||||||
|
$billingStreet = $billingStreet.$addresses->country()->first()->name;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$billingStreet = "[Pending Billing Details by user]";
|
||||||
|
}
|
||||||
|
|
||||||
|
$allowedPaymentModes = [];
|
||||||
|
$invoiceItems = [];
|
||||||
|
|
||||||
|
$employee = $companyModule->employees()->first();
|
||||||
|
$email = $employee->email;
|
||||||
|
|
||||||
|
$result = $this->convertsPerfexCRMLeadToCustomer->execute($email);
|
||||||
|
if(isset($result->payload)){
|
||||||
|
$clientId = $result->payload['client_id'];
|
||||||
|
}
|
||||||
|
|
||||||
|
//get project
|
||||||
|
$projectId = ""; //Project only exist in CRM if the customer already made payment
|
||||||
|
$projectName = "";
|
||||||
|
if($isPaid){
|
||||||
|
if($transaction->owner instanceof PackingList){
|
||||||
|
$orderReference = $transaction->owner->owner->reference;
|
||||||
|
$packingListReference = $transaction->owner->reference;
|
||||||
|
$projectName = 'IZYIM | X1 Shipping | '.$orderReference.' | '.$packingListReference;
|
||||||
|
$result = $this->fetchesPerfexCRMProject->execute($projectName, $clientId);
|
||||||
|
if(isset($result->payload)){
|
||||||
|
$project = $result->payload[0];
|
||||||
|
$projectId = $project['id'];
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$result = $this->createsPerfexCRMCustomerProject->execute($projectName, PerfexCRMProjectStatus::NOT_STARTED, $clientId);
|
||||||
|
if(isset($result->payload)){ //Here means project creation successful
|
||||||
|
$projectId = $result->payload['project_id'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if($projectId == ""){
|
||||||
|
Log::error(json_encode('CreatePerfexCRMInvoiceProcessor debug: '.$projectName));
|
||||||
|
Log::error(json_encode($transaction->owner));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//newitems
|
||||||
|
foreach ($transaction->transactionDetails as $key => $transaction_detail){
|
||||||
|
$order = $key + 1;
|
||||||
|
$description = $transaction_detail->name;
|
||||||
|
$quantity = $transaction_detail->quantity;
|
||||||
|
$unitPrice = $transaction_detail->price;
|
||||||
|
|
||||||
|
$subTotal = $subTotal + $transaction_detail->amount;
|
||||||
|
|
||||||
|
//string $description, string $longDescription, int $qty, int $rate, int $order, string $unit
|
||||||
|
$invoiceSingleItem = new InvoiceSingleItemPerfexCRMObject(
|
||||||
|
$description,
|
||||||
|
"",
|
||||||
|
$quantity,
|
||||||
|
$unitPrice,
|
||||||
|
$order,
|
||||||
|
""
|
||||||
|
);
|
||||||
|
array_push($invoiceItems, $invoiceSingleItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
$total = $transaction->amount;
|
||||||
|
|
||||||
|
//This setting is similar to Setup > Leads > Sources, Setup > Leads > Statuses
|
||||||
|
//Can be found at Finance > Payment Modes
|
||||||
|
array_push($allowedPaymentModes, 1, 2);
|
||||||
|
$invoicePerfexCRMObject = new InvoicePerfexCRMObject(
|
||||||
|
$clientId,
|
||||||
|
$number,
|
||||||
|
$date,
|
||||||
|
$dueDate,
|
||||||
|
$currency,
|
||||||
|
$subTotal,
|
||||||
|
$total,
|
||||||
|
$billingStreet,
|
||||||
|
$projectId,
|
||||||
|
$allowedPaymentModes,
|
||||||
|
$invoiceItems
|
||||||
|
);
|
||||||
|
|
||||||
|
$result = $this->createsPerfexCRMInvoice->execute($invoicePerfexCRMObject);
|
||||||
|
|
||||||
|
return $result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PerfexCRM\Processors;
|
||||||
|
|
||||||
|
// use App\Classes\Modules\PerfexCRM\DataTransferObjects\ContactObject;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\CreatesPerfexCRMLead;
|
||||||
|
use App\Classes\Exceptions\MalformedRequestException;
|
||||||
|
use Illuminate\Support\Facades\Http;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\CreateLeadPerfexCRMObject;
|
||||||
|
|
||||||
|
class CreatePerfexCRMLeadProcessor
|
||||||
|
{
|
||||||
|
|
||||||
|
/** @var CreatesPerfexCRMLead */
|
||||||
|
private $createsPerfexCRMLead;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CreatePerfexCRMLeadProcessor constructor.
|
||||||
|
* @param CreatesPerfexCRMLead $createsPerfexCRMLead
|
||||||
|
*/
|
||||||
|
public function __construct(CreatesPerfexCRMLead $createsPerfexCRMLead)
|
||||||
|
{
|
||||||
|
$this->createsPerfexCRMLead = $createsPerfexCRMLead;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param CreateLeadPerfexCRMObject $createLeadPerfexCRMObject
|
||||||
|
* @return null|object
|
||||||
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function execute(CreateLeadPerfexCRMObject $createLeadPerfexCRMObject) {
|
||||||
|
return $this->createsPerfexCRMLead->execute($createLeadPerfexCRMObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PerfexCRM\Processors;
|
||||||
|
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\CreatesPerfexCRMTask;
|
||||||
|
use App\Classes\Exceptions\MalformedRequestException;
|
||||||
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\CreateTaskPerfexCRMObject;
|
||||||
|
|
||||||
|
class CreatePerfexCRMTaskProcessor
|
||||||
|
{
|
||||||
|
/** @var CreatesPerfexCRMTask */
|
||||||
|
private $createsPerfexCRMTask;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param CreatesPerfexCRMTask $createsPerfexCRMTask
|
||||||
|
*/
|
||||||
|
public function __construct(CreatesPerfexCRMTask $createsPerfexCRMTask)
|
||||||
|
{
|
||||||
|
$this->createsPerfexCRMTask = $createsPerfexCRMTask;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param CreateTaskPerfexCRMObject $createTaskPerfexCRMObject
|
||||||
|
* @return true
|
||||||
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function execute(CreateTaskPerfexCRMObject $createTaskPerfexCRMObject) {
|
||||||
|
$this->createsPerfexCRMTask->execute(
|
||||||
|
$createTaskPerfexCRMObject->getName(),
|
||||||
|
$createTaskPerfexCRMObject->getDescription(),
|
||||||
|
$createTaskPerfexCRMObject->getLeadId(),
|
||||||
|
$createTaskPerfexCRMObject->getMilestoneId(),
|
||||||
|
$createTaskPerfexCRMObject->getProjectId(),
|
||||||
|
$createTaskPerfexCRMObject->getReference(),
|
||||||
|
$createTaskPerfexCRMObject->getOnTaskCompletion(),
|
||||||
|
$createTaskPerfexCRMObject->getDepartment(),
|
||||||
|
$createTaskPerfexCRMObject->getStatus(),
|
||||||
|
$createTaskPerfexCRMObject->getPriority(),
|
||||||
|
$createTaskPerfexCRMObject->getDuedate()
|
||||||
|
);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PerfexCRM\Processors;
|
||||||
|
|
||||||
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\CreateTaskPerfexCRMObject;
|
||||||
|
use App\Classes\Jobs\CreatePerfexCRMSingleTask;
|
||||||
|
use App\Classes\ValueObjects\Constants\PerfexCRMTaskPriority;
|
||||||
|
use App\Classes\ValueObjects\Constants\PerfexCRMTasks;
|
||||||
|
use App\Models\Company;
|
||||||
|
|
||||||
|
class NewLeadTaskToPerfexCRMProcessor
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param Company $company
|
||||||
|
* @return true
|
||||||
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function execute(Company $company)
|
||||||
|
{
|
||||||
|
$companyModule = $company->companyModules()->first();
|
||||||
|
$employee = $companyModule->employees()->first();
|
||||||
|
$contactEmail = $employee->email;
|
||||||
|
|
||||||
|
$createTaskPerfexCRMObject = new CreateTaskPerfexCRMObject(
|
||||||
|
$contactEmail,
|
||||||
|
PerfexCRMTasks::TASK_IDENTIFICATION_1['name'],
|
||||||
|
PerfexCRMTasks::TASK_IDENTIFICATION_1['description'],
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
PerfexCRMTasks::TASK_IDENTIFICATION_1['status'],
|
||||||
|
PerfexCRMTasks::TASK_IDENTIFICATION_1['department'],
|
||||||
|
PerfexCRMTaskPriority::DEFAULT,
|
||||||
|
"0"
|
||||||
|
);
|
||||||
|
|
||||||
|
CreatePerfexCRMSingleTask::dispatch($createTaskPerfexCRMObject);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PerfexCRM\Processors;
|
||||||
|
|
||||||
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMObject;
|
||||||
|
use App\Classes\ValueObjects\Constants\PerfexCRMTasks;
|
||||||
|
use App\Classes\Jobs\UpdatePerfexCRM;
|
||||||
|
use App\Classes\Jobs\UpdatePerfexCRMPrelude;
|
||||||
|
use App\Models\PackingList;
|
||||||
|
use App\Classes\ValueObjects\Constants\PerfexCRMProjectStatus;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
class PackingListToPerfexCRMProcessor
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param PackingList $packingList
|
||||||
|
* @return \Illuminate\Database\Eloquent\Model
|
||||||
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function execute(PackingList $packingList)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
if($packingList->owner instanceof \App\Models\Order) {
|
||||||
|
$order = $packingList->owner;
|
||||||
|
$companyModule = $order->companyModule()->first();
|
||||||
|
$connection = $companyModule->inviters()->withPivot('invitee_reference')->first();
|
||||||
|
$companyName = $companyModule->name;
|
||||||
|
$companyReference = $connection ? $connection->pivot->invitee_reference:'';
|
||||||
|
$employee = $companyModule->employees()->first();
|
||||||
|
$contactEmail = $employee->email;
|
||||||
|
$contactName = $employee->name;
|
||||||
|
|
||||||
|
$orderReference = $packingList->owner->reference;
|
||||||
|
$packingListReference = $packingList->reference;
|
||||||
|
$projectName = 'IZYIM | X1 Shipping | '.$orderReference.' | '.$packingListReference;
|
||||||
|
|
||||||
|
$updatePerfexCRMObject = new UpdatePerfexCRMObject(
|
||||||
|
$companyName,
|
||||||
|
$companyReference,
|
||||||
|
$contactName,
|
||||||
|
$contactEmail,
|
||||||
|
"",
|
||||||
|
$projectName,
|
||||||
|
PerfexCRMProjectStatus::NOT_STARTED,
|
||||||
|
[],
|
||||||
|
[
|
||||||
|
PerfexCRMTasks::TASK_LOADED_CONTAINER_1,
|
||||||
|
PerfexCRMTasks::TASK_LOADED_CONTAINER_2,
|
||||||
|
]
|
||||||
|
);
|
||||||
|
UpdatePerfexCRMPrelude::dispatch($packingList, null, $updatePerfexCRMObject, UpdatePerfexCRM::class, null);
|
||||||
|
}
|
||||||
|
} catch (\Exception $exception){
|
||||||
|
Log::error(json_encode('PackingListToPerfexCRMProcessor debug:'));
|
||||||
|
Log::error(json_encode($packingList));
|
||||||
|
Log::error($exception);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PerfexCRM\Processors;
|
||||||
|
|
||||||
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMObject;
|
||||||
|
use App\Classes\ValueObjects\Constants\PerfexCRMTasks;
|
||||||
|
use App\Classes\ValueObjects\Constants\PerfexCRMProjectStatus;
|
||||||
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
|
use App\Classes\Jobs\UpdatePerfexCRMInvoice;
|
||||||
|
use App\Classes\Jobs\UpdatePerfexCRM;
|
||||||
|
use App\Classes\Jobs\UpdatePerfexCRMPrelude;
|
||||||
|
use App\Classes\Jobs\CreatePerfexCRMInvoice;
|
||||||
|
use App\Models\Transaction;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
class TransactionToPerfexCRMProcessor
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param Transaction $model
|
||||||
|
* @param int $status
|
||||||
|
* @return \Illuminate\Database\Eloquent\Model
|
||||||
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function execute(Transaction $model, int $status)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if($model->owner instanceof \App\Models\Transaction && $status == ApprovalStatus::APPROVED)
|
||||||
|
{
|
||||||
|
$packingList = $model->owner->owner;
|
||||||
|
$order = $packingList->owner()->first();
|
||||||
|
$companyModule = $order->companyModule()->first();
|
||||||
|
$companyName = $companyModule->name;
|
||||||
|
$companyReference = $companyModule->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference;
|
||||||
|
$employee = $companyModule->employees()->first();
|
||||||
|
$contactEmail = $employee->email;
|
||||||
|
$contactName = $employee->name;
|
||||||
|
|
||||||
|
$orderReference = $order->reference;
|
||||||
|
$packingListReference = $packingList->reference;
|
||||||
|
$projectName = 'IZYIM | X1 Shipping | '.$orderReference.' | '.$packingListReference;
|
||||||
|
|
||||||
|
$bookingMarking = $packingList->id."-".$packingList->owner->id;
|
||||||
|
$updatePerfexCRMObject = new UpdatePerfexCRMObject(
|
||||||
|
$companyName,
|
||||||
|
$companyReference,
|
||||||
|
$contactName,
|
||||||
|
$contactEmail,
|
||||||
|
$bookingMarking,
|
||||||
|
$projectName,
|
||||||
|
PerfexCRMProjectStatus::IN_PROGRESS,
|
||||||
|
[],
|
||||||
|
[
|
||||||
|
PerfexCRMTasks::TASK_1,
|
||||||
|
PerfexCRMTasks::TASK_POST_PAYMENT_1,
|
||||||
|
PerfexCRMTasks::TASK_POST_PAYMENT_2,
|
||||||
|
PerfexCRMTasks::TASK_POST_PAYMENT_3,
|
||||||
|
PerfexCRMTasks::TASK_POST_PAYMENT_4,
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
UpdatePerfexCRMPrelude::dispatch(null, $model, $updatePerfexCRMObject, UpdatePerfexCRM::class, UpdatePerfexCRMInvoice::class);
|
||||||
|
}
|
||||||
|
else if($model->owner instanceof \App\Models\PackingList && $model->status == ApprovalStatus::PENDING_SUBMISSION && $status == ApprovalStatus::APPROVED)
|
||||||
|
{
|
||||||
|
CreatePerfexCRMInvoice::dispatch($model);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (\Exception $exception) {
|
||||||
|
Log::error('TransactionToPerfexCRMProcessor debug:');
|
||||||
|
Log::error($exception);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,231 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PerfexCRM\Processors;
|
||||||
|
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\ConvertsPerfexCRMLeadToCustomer;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\CreatesPerfexCRMCustomerProject;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\CreatesPerfexCRMMilestone;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\CreatesPerfexCRMTask;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\FetchesPerfexCRMProject;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\FetchesPerfexCRMMilestone;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\FetchesPerfexCRMTask;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\CreatesPerfexCRMCustomer;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\CreatesPerfexCRMCustomerContact;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\UpdatesPerfexCRMTask;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\UpdatesPerfexCRMCustomer;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Services\UpdatesPerfexCRMProject;
|
||||||
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\CustomerContactObject;
|
||||||
|
use App\Classes\Exceptions\MalformedRequestException;
|
||||||
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMObject;
|
||||||
|
use App\Classes\ValueObjects\Constants\PerfexCRMTaskStatus;
|
||||||
|
use App\Classes\ValueObjects\Constants\PerfexCRMProjectStatus;
|
||||||
|
use Illuminate\Support\Facades\Http;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class UpdatePerfexCRMProcessor
|
||||||
|
{
|
||||||
|
/** @var ConvertsPerfexCRMLeadToCustomer */
|
||||||
|
private $convertsPerfexCRMLeadToCustomer;
|
||||||
|
|
||||||
|
/** @var CreatesPerfexCRMCustomerProject */
|
||||||
|
private $createsPerfexCRMCustomerProject;
|
||||||
|
|
||||||
|
/** @var CreatesPerfexCRMMilestone */
|
||||||
|
private $createsPerfexCRMMilestone;
|
||||||
|
|
||||||
|
/** @var CreatesPerfexCRMTask */
|
||||||
|
private $createsPerfexCRMTask;
|
||||||
|
|
||||||
|
/** @var FetchesPerfexCRMProject */
|
||||||
|
private $fetchesPerfexCRMProject;
|
||||||
|
|
||||||
|
/** @var FetchesPerfexCRMMilestone */
|
||||||
|
private $fetchesPerfexCRMMilestone;
|
||||||
|
|
||||||
|
/** @var FetchesPerfexCRMTask */
|
||||||
|
private $fetchesPerfexCRMTask;
|
||||||
|
|
||||||
|
/** @var CreatesPerfexCRMCustomer */
|
||||||
|
private $createsPerfexCRMCustomer;
|
||||||
|
|
||||||
|
/** @var CreatesPerfexCRMCustomerContact */
|
||||||
|
private $createsPerfexCRMCustomerContact;
|
||||||
|
|
||||||
|
/** @var UpdatesPerfexCRMTask */
|
||||||
|
private $updatesPerfexCRMTask;
|
||||||
|
|
||||||
|
/** @var UpdatesPerfexCRMCustomer */
|
||||||
|
private $updatesPerfexCRMCustomer;
|
||||||
|
|
||||||
|
/** @var UpdatesPerfexCRMProject */
|
||||||
|
private $updatesPerfexCRMProject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param ConvertsPerfexCRMLeadToCustomer $convertsPerfexCRMLeadToCustomer
|
||||||
|
* @param CreatesPerfexCRMCustomerProject $createsPerfexCRMCustomerProject
|
||||||
|
* @param CreatesPerfexCRMMilestone $createsPerfexCRMMilestone
|
||||||
|
* @param CreatesPerfexCRMTask $createsPerfexCRMTask
|
||||||
|
* @param FetchesPerfexCRMProject $fetchesPerfexCRMProject
|
||||||
|
* @param FetchesPerfexCRMMilestone $fetchesPerfexCRMMilestone
|
||||||
|
* @param FetchesPerfexCRMTask $fetchesPerfexCRMTask
|
||||||
|
* @param CreatesPerfexCRMCustomer $createsPerfexCRMCustomer
|
||||||
|
* @param CreatesPerfexCRMCustomerContact $createsPerfexCRMCustomerContact
|
||||||
|
* @param UpdatesPerfexCRMTask $updatesPerfexCRMTask
|
||||||
|
* @param UpdatesPerfexCRMCustomer $updatesPerfexCRMCustomer
|
||||||
|
* @param UpdatesPerfexCRMProject $updatesPerfexCRMProject
|
||||||
|
*/
|
||||||
|
public function __construct(ConvertsPerfexCRMLeadToCustomer $convertsPerfexCRMLeadToCustomer,
|
||||||
|
CreatesPerfexCRMCustomerProject $createsPerfexCRMCustomerProject,
|
||||||
|
CreatesPerfexCRMMilestone $createsPerfexCRMMilestone,
|
||||||
|
CreatesPerfexCRMTask $createsPerfexCRMTask,
|
||||||
|
FetchesPerfexCRMProject $fetchesPerfexCRMProject,
|
||||||
|
FetchesPerfexCRMMilestone $fetchesPerfexCRMMilestone,
|
||||||
|
FetchesPerfexCRMTask $fetchesPerfexCRMTask,
|
||||||
|
CreatesPerfexCRMCustomer $createsPerfexCRMCustomer,
|
||||||
|
CreatesPerfexCRMCustomerContact $createsPerfexCRMCustomerContact,
|
||||||
|
UpdatesPerfexCRMTask $updatesPerfexCRMTask,
|
||||||
|
UpdatesPerfexCRMCustomer $updatesPerfexCRMCustomer,
|
||||||
|
UpdatesPerfexCRMProject $updatesPerfexCRMProject)
|
||||||
|
{
|
||||||
|
$this->convertsPerfexCRMLeadToCustomer = $convertsPerfexCRMLeadToCustomer;
|
||||||
|
$this->createsPerfexCRMCustomerProject = $createsPerfexCRMCustomerProject;
|
||||||
|
$this->createsPerfexCRMMilestone = $createsPerfexCRMMilestone;
|
||||||
|
$this->createsPerfexCRMTask = $createsPerfexCRMTask;
|
||||||
|
$this->fetchesPerfexCRMProject = $fetchesPerfexCRMProject;
|
||||||
|
$this->fetchesPerfexCRMMilestone = $fetchesPerfexCRMMilestone;
|
||||||
|
$this->fetchesPerfexCRMTask = $fetchesPerfexCRMTask;
|
||||||
|
$this->createsPerfexCRMCustomer = $createsPerfexCRMCustomer;
|
||||||
|
$this->createsPerfexCRMCustomerContact = $createsPerfexCRMCustomerContact;
|
||||||
|
$this->updatesPerfexCRMTask = $updatesPerfexCRMTask;
|
||||||
|
$this->updatesPerfexCRMCustomer = $updatesPerfexCRMCustomer;
|
||||||
|
$this->updatesPerfexCRMProject = $updatesPerfexCRMProject;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param UpdatePerfexCRMObject $updatePerfexCRMObject
|
||||||
|
* @return null|object
|
||||||
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function execute(UpdatePerfexCRMObject $updatePerfexCRMObject) {
|
||||||
|
$projectId = "";
|
||||||
|
|
||||||
|
// Customer has to exist first before Project can appear under it
|
||||||
|
// Check with Perfex CRM, if this user (email) was previously a lead, should automatically now become a customer
|
||||||
|
$crmCompany = $updatePerfexCRMObject->getCompanyName();
|
||||||
|
$result = $this->convertsPerfexCRMLeadToCustomer->execute($updatePerfexCRMObject->getContactEmail());
|
||||||
|
if(isset($result->payload)){
|
||||||
|
$crmClientId = $result->payload['client_id'];
|
||||||
|
if (isset($result->payload['company'])) {
|
||||||
|
$crmCompany = $result->payload['company'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
//if reach this point, this means this user is not a official customer nor is a lead in crm
|
||||||
|
//Create Customer has 2 parts: Create Company (client), Create Contact
|
||||||
|
$result = $this->createsPerfexCRMCustomer->execute($crmCompany);
|
||||||
|
if(is_null($result)){
|
||||||
|
$crmCompany = $crmCompany." 2";
|
||||||
|
$result = $this->createsPerfexCRMCustomer->execute($crmCompany);
|
||||||
|
}
|
||||||
|
|
||||||
|
$crmClientId = $result->payload['clientId'];
|
||||||
|
|
||||||
|
$customerContactObject = new CustomerContactObject(
|
||||||
|
$crmClientId,
|
||||||
|
$updatePerfexCRMObject->getContactName(),
|
||||||
|
$updatePerfexCRMObject->getContactName(),
|
||||||
|
$updatePerfexCRMObject->getContactEmail(),
|
||||||
|
"pU^T@sC#9Q",
|
||||||
|
"on",
|
||||||
|
"on"
|
||||||
|
);
|
||||||
|
$result = $this->createsPerfexCRMCustomerContact->execute($customerContactObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Update custom fields to identify company reference from exchange or shipping portal
|
||||||
|
$value_exists = false;
|
||||||
|
if (isset($result->payload['customfields'])) {
|
||||||
|
foreach ($result->payload['customfields'] as $element) {
|
||||||
|
if ($element['value'] === $updatePerfexCRMObject->getCompanyReference()) {
|
||||||
|
$value_exists = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!$value_exists);
|
||||||
|
{
|
||||||
|
$result = $this->updatesPerfexCRMCustomer->execute($crmClientId, $crmCompany, $updatePerfexCRMObject->getCompanyReference());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get existing or create project, project has to exist first before milestone can appear under it
|
||||||
|
$result = $this->fetchesPerfexCRMProject->execute($updatePerfexCRMObject->getProjectName(), $crmClientId);
|
||||||
|
|
||||||
|
if(isset($result->payload)){
|
||||||
|
$project = $result->payload[0];
|
||||||
|
$projectId = $project['id'];
|
||||||
|
|
||||||
|
//if the project status is anything but PerfexCRMProjectStatus::NOT_STARTED, update the project
|
||||||
|
if($updatePerfexCRMObject->getProjectStatus() != PerfexCRMProjectStatus::NOT_STARTED && $project['status'] == PerfexCRMProjectStatus::NOT_STARTED)
|
||||||
|
{
|
||||||
|
$this->updatesPerfexCRMProject->execute($project, $updatePerfexCRMObject->getProjectStatus());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$result = $this->createsPerfexCRMCustomerProject->execute($updatePerfexCRMObject->getProjectName(), $updatePerfexCRMObject->getProjectStatus(), $crmClientId);
|
||||||
|
if(isset($result->payload)){ //Here means project creation successful
|
||||||
|
$projectId = $result->payload['project_id'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$tasks = $updatePerfexCRMObject->getTasks();
|
||||||
|
if(count($tasks) > 0){
|
||||||
|
|
||||||
|
//Create tasks with milestone
|
||||||
|
for($count=0; $count < count($tasks); $count++) {
|
||||||
|
$milestoneId = 0; //By default milestoneId is 0, having this set at individual task is optional
|
||||||
|
if($tasks[$count]['milestone'] != "") //Create milestone only if it is defined
|
||||||
|
{
|
||||||
|
// Get existing or create milestone, milestone has to exist first before task can appear under it
|
||||||
|
$result = $this->fetchesPerfexCRMMilestone->execute($tasks[$count]['milestone'], $projectId);
|
||||||
|
if(isset($result->payload)){
|
||||||
|
$array = json_decode(json_encode($result->payload[0]), true);
|
||||||
|
$milestoneId = $array['id'];
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$result = $this->createsPerfexCRMMilestone->execute($tasks[$count]['milestone'], $projectId, $count);
|
||||||
|
if(isset($result->payload)){
|
||||||
|
$milestoneId = $result->payload['milestone_id'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$taskStatus = PerfexCRMTaskStatus::NOT_STARTED;
|
||||||
|
if($tasks[$count]['status'] != ''){
|
||||||
|
$taskStatus = $tasks[$count]['status'];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get existing or create task
|
||||||
|
$result = $this->fetchesPerfexCRMTask->execute($tasks[$count]['name'], $milestoneId, 'project', $projectId);
|
||||||
|
if(isset($result->payload)){
|
||||||
|
break; //Breaking the rest of the tasks in array assuming that they are all created as a batch previously
|
||||||
|
//The following are code not needed at Shipping Portal, Exchange need certain task's status to be updated dynamically
|
||||||
|
// if($taskStatus != PerfexCRMTaskStatus::NOT_STARTED && $result->payload[0]['status'] == PerfexCRMTaskStatus::NOT_STARTED)
|
||||||
|
// {
|
||||||
|
// $task = $result->payload[0];
|
||||||
|
// $result = $this->updatesPerfexCRMTask->execute($task['id'], $task['name'], $task['milestone'], $task['rel_id'], $taskStatus, $task['startdate'], is_null($task['duedate']) ? '': $task['duedate']);
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$result = $this->createsPerfexCRMTask->execute($tasks[$count]['name'], $tasks[$count]['description'], '', $milestoneId, $projectId, $tasks[$count]['reference'], $tasks[$count]['on_task_completion'], $tasks[$count]['department'], $taskStatus, $tasks[$count]['priority'], $tasks[$count]['duedate']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$payload = [];
|
||||||
|
$payload['projectId'] = $projectId;
|
||||||
|
return (object) $payload;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PerfexCRM\Services;
|
||||||
|
|
||||||
|
use Illuminate\Support\Facades\Http;
|
||||||
|
use App\Classes\Exceptions\MalformedRequestException;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
class ConvertsPerfexCRMLeadToCustomer
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param string $email
|
||||||
|
* @return null|object
|
||||||
|
* @throws MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function execute(string $email) {
|
||||||
|
try{
|
||||||
|
$response = Http::withHeaders([
|
||||||
|
'authtoken' => config('perfexcrm.api_key'),])
|
||||||
|
->get(config('perfexcrm.base_url').'/api/leads/convertocustomer/'.$email);
|
||||||
|
|
||||||
|
if($response->successful()){
|
||||||
|
$data = $response->json();
|
||||||
|
|
||||||
|
return (object) $data;
|
||||||
|
}else{
|
||||||
|
Log::error($response);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}catch(\Exception $exception){
|
||||||
|
throw new MalformedRequestException('Unable to get correct response from Perfex CRM server' . $exception->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\PerfexCRM\Services;
|
||||||
|
|
||||||
|
use Illuminate\Support\Facades\Http;
|
||||||
|
use App\Classes\Exceptions\MalformedRequestException;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
class CreatesPerfexCRMCustomer
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param string $companyName
|
||||||
|
* @return null|object
|
||||||
|
* @throws MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function execute(string $companyName) {
|
||||||
|
try{
|
||||||
|
$data = [
|
||||||
|
'company' => $companyName
|
||||||
|
];
|
||||||
|
|
||||||
|
$response = Http::asForm()->withHeaders([
|
||||||
|
'authtoken' => config('perfexcrm.api_key')])
|
||||||
|
->post(config('perfexcrm.base_url').'/api/customers',$data);
|
||||||
|
|
||||||
|
if($response->successful()){
|
||||||
|
$data = $response->json();
|
||||||
|
return (object) $data;
|
||||||
|
}else{
|
||||||
|
Log::error($response);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}catch(\Exception $exception){
|
||||||
|
throw new MalformedRequestException('Unable to get correct response from Perfex CRM server' . $exception->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user