mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal.git
synced 2026-08-19 20:44:19 +00:00
Compare commits
817 Commits
dev
..
development
| Author | SHA1 | Date | |
|---|---|---|---|
| e25377d62d | |||
| c9570db825 | |||
| 807af317a1 | |||
| 5c60de2851 | |||
| 0c0dd30a1d | |||
| 4ed79659df | |||
| 0d5d5afbb0 | |||
| ee1bab12bf | |||
| b077730214 | |||
| eacf428c00 | |||
| 4faf3064d1 | |||
| 5b90c592e3 | |||
| 7b89a8bff8 | |||
| cc246046b5 | |||
| f03b60d93a | |||
| 9bc0d2890f | |||
| f3d502ea9b | |||
| e74bf4fc60 | |||
| 8f626230eb | |||
| bb273b6334 | |||
| d7ef783443 | |||
| 9f4c657122 | |||
| b7c6c13bde | |||
| 4c5483cb7c | |||
| 01d666d92a | |||
| b3973b52d1 | |||
| 694876c31f | |||
| ec3c596352 | |||
| 499782bbec | |||
| f3eca3dd89 | |||
| 4fc5a4a2d9 | |||
| 9c4c472a40 | |||
| a67afdc0ff | |||
| b30cdaba84 | |||
| 9ac0ca45be | |||
| 3fe98b24a4 | |||
| 7e7e43ee9c | |||
| 39892a0938 | |||
| cfb6270ae7 | |||
| 0ffe81d1cf | |||
| 09402a9c70 | |||
| 5fd6e6a528 | |||
| fec5f2f6dc | |||
| 09ede52ecf | |||
| b8686ff910 | |||
| e5d6f3f581 | |||
| a0a2c335ba | |||
| bcfeb49275 | |||
| b4c6e721fd | |||
| 514d3da73c | |||
| aa65b333c8 | |||
| 82a84157b6 | |||
| 656c50e047 | |||
| 58a64784db | |||
| 275157b243 | |||
| c5a71abf57 | |||
| 0c9ffd2bf7 | |||
| ae60f9ae49 | |||
| a953f78771 | |||
| 4a2c0db044 | |||
| cf3e7f04e4 | |||
| be0cd16285 | |||
| 50f6b664b9 | |||
| d4dcae155d | |||
| bad8cadb3a | |||
| 3af32cc6e7 | |||
| 34bab6a45c | |||
| 4769e0768b | |||
| ce4e8b174f | |||
| dd1eae1ea2 | |||
| b46bfb38bf | |||
| 19c4ee4fda | |||
| 13f13c7a0e | |||
| ffa63f611b | |||
| 82675ab80c | |||
| aac04c4135 | |||
| 56dca799f8 | |||
| 42d8f811c6 | |||
| 030136fd03 | |||
| c8b6e271e3 | |||
| f93997b858 | |||
| 6fbc23d7c4 | |||
| e0a264d58f | |||
| fec20b0947 | |||
| 0bf61d93c5 | |||
| bea24fb48e | |||
| 17a4522f50 | |||
| dfedb99c13 | |||
| b08e4c618f | |||
| 669cac9bd4 | |||
| d7625aece7 | |||
| 8c781a3362 | |||
| 57532e9afd | |||
| a36c5c3063 | |||
| 2f55821046 | |||
| 4a9ac3de02 | |||
| 1e6fafef28 | |||
| fd75da5778 | |||
| b593605c72 | |||
| 8d75012390 | |||
| 2d98757c1c | |||
| b329f232f2 | |||
| 713922d2ee | |||
| 74d11f8305 | |||
| ea920717a1 | |||
| e1b49f6be0 | |||
| 8ff459c373 | |||
| 707c48ab12 | |||
| 6d006ba60b | |||
| 1be405ca93 | |||
| 4087df6649 | |||
| 9d0924c674 | |||
| 4ac1fdb1ba | |||
| d21a930889 | |||
| 42d68a4357 | |||
| e63e3e707f | |||
| f32fc1976e | |||
| aeaec32dcb | |||
| cdf5e89a4a | |||
| b000c25e66 | |||
| a32e63b74f | |||
| 1e9af59b91 | |||
| 32d3aebf37 | |||
| a392b8a5eb | |||
| 1b2ae413e3 | |||
| 1059251b6b | |||
| c223aec7c9 | |||
| 3c622dc6ca | |||
| 819a29b227 | |||
| bbd48df118 | |||
| 353bf0ffbd | |||
| bb0ecc42c3 | |||
| df3024186b | |||
| e6486644a0 | |||
| 30edc3eaba | |||
| f8d191267b | |||
| b0eca18343 | |||
| 88e1b43f19 | |||
| fc9f6d6dde | |||
| 141dab15b6 | |||
| 83d7f20a48 | |||
| c9ac435e37 | |||
| 6d01bdfb60 | |||
| e2dc83e441 | |||
| e9daadaf60 | |||
| 7cace7e800 | |||
| 12f8391ca8 | |||
| 64fa56c02f | |||
| 3f962e774d | |||
| 4ba2144f02 | |||
| 69f2b384cf | |||
| 39017c5d8f | |||
| f1a35299e6 | |||
| b15866ea16 | |||
| bd42f7213a | |||
| c022ab6578 | |||
| 2d92b1a8ab | |||
| 8bfdc2431c | |||
| 06e3049e50 | |||
| ac1957bcb0 | |||
| b0fa73a12b | |||
| 61a0766e60 | |||
| 5d66761465 | |||
| 1ac4615c99 | |||
| 590960b5fd | |||
| 5f24f58480 | |||
| 4dec576aa0 | |||
| 4a41c89024 | |||
| a0997a4649 | |||
| b90dae882e | |||
| f3c7c042fc | |||
| f361a7e185 | |||
| 29619625d1 | |||
| 424e2b4e5e | |||
| 1705b5c2e5 | |||
| 1813783d87 | |||
| 46a0e670ba | |||
| dcec8cb33b | |||
| 75037f6192 | |||
| 675324081b | |||
| a959e83f5b | |||
| 2802e3c366 | |||
| aac2a0666a | |||
| 19efba4b89 | |||
| 7d70c800db | |||
| 863dc94dad | |||
| 98e45e27e3 | |||
| df2916594b | |||
| a49920973e | |||
| d129f8f6bd | |||
| 55a82e52a4 | |||
| 1d4ac80b8f | |||
| 7cd376a9b5 | |||
| c7e3091f9b | |||
| 28feba2ae9 | |||
| 7b897f8dce | |||
| 4d7adba8e8 | |||
| 3c91a7d099 | |||
| 0435464382 | |||
| 6878dbc518 | |||
| 3ec186da3b | |||
| 1301e8d1a4 | |||
| 75d2fc3d76 | |||
| 6176135f85 | |||
| ec6b768755 | |||
| 5f529965da | |||
| 924f4f2ace | |||
| 6369282b38 | |||
| 1991cf2c57 | |||
| 5f5bbe0c8c | |||
| b26fea9a49 | |||
| a809aec9a7 | |||
| 68ce8373e9 | |||
| e5347f56b7 | |||
| 6673a44137 | |||
| 4d3345f613 | |||
| 60b8657773 | |||
| 9f7a8d0d4b | |||
| a87ab6c27f | |||
| 462a4776cd | |||
| b5efe6139d | |||
| 7e029c5610 | |||
| 0719285286 | |||
| 64400d1524 | |||
| be0279f56b | |||
| 90793be9dc | |||
| e15170bc7f | |||
| 464160b526 | |||
| 59f527aee7 | |||
| d7aa248972 | |||
| bf195bf3e3 | |||
| 8e4ff6093e | |||
| 6e5a18fd05 | |||
| 584169e173 | |||
| 8d5edbd716 | |||
| 1679d1ecf4 | |||
| 7ca48e9638 | |||
| 14278a888a | |||
| 5de2554d63 | |||
| 898b63cbd2 | |||
| 033a835fce | |||
| 66ddb5da23 | |||
| 20f0d54844 | |||
| 65782ebf8a | |||
| 2951800117 | |||
| 5ac8911fab | |||
| 96a089df16 | |||
| 0f1d247c51 | |||
| f95545a985 | |||
| 73aa703658 | |||
| 9e8685bd02 | |||
| 8da81a4696 | |||
| 1224735ba8 | |||
| 11e2390059 | |||
| c280da36d7 | |||
| 1291267805 | |||
| 27529e90ca | |||
| 406fe045fc | |||
| 4e0f04eae2 | |||
| 56aec95d50 | |||
| 2e9b0f918c | |||
| 0e3fedf56f | |||
| dadf7153d7 | |||
| 5565d0b39b | |||
| 8fdc4168b1 | |||
| bf1cb09ece | |||
| f1b8c6a556 | |||
| 6d210d3713 | |||
| a829bec73e | |||
| 5dd2df02fd | |||
| ff9cb8a9b6 | |||
| b207b11336 | |||
| 939959193d | |||
| ffd95ee1cc | |||
| 73b3995367 | |||
| 6db98029d9 | |||
| 45a2544b9d | |||
| 252636a7df | |||
| 3e679fef23 | |||
| 17ed9c3599 | |||
| 758498f486 | |||
| 6aef08ee5e | |||
| b55e32aece | |||
| 797c0a1bfd | |||
| de036f8c20 | |||
| 00bf7c0cf4 | |||
| b493dd1aaf | |||
| 24a4d269b3 | |||
| 3fb09a005f | |||
| cbfbebc32b | |||
| 86afc4aa66 | |||
| f191979a53 | |||
| c9998029b0 | |||
| ca5a445df1 | |||
| a442c78156 | |||
| 649e22cef0 | |||
| 03c5ced77b | |||
| 5c6418cb1f | |||
| 5e636862bb | |||
| e97cbfa618 | |||
| a448172521 | |||
| 72ac055ec5 | |||
| 09383a45a6 | |||
| bb1540116c | |||
| 873aaa8263 | |||
| 141062a7bf | |||
| 9148c9063d | |||
| 4179706e04 | |||
| 70688c4a4b | |||
| eaa21beb83 | |||
| f9e8f4c852 | |||
| 1acc02eb93 | |||
| 1f2959a5d2 | |||
| 9b7b7068e1 | |||
| 41e1c346f6 | |||
| 74e9b23f91 | |||
| 476f5ba506 | |||
| f949877a7f | |||
| 1e876dd103 | |||
| 3d79d0f5e5 | |||
| 73dcc12b09 | |||
| 2dc037c8fd | |||
| ef934626d6 | |||
| aaae8bcafa | |||
| 8fbf163d4b | |||
| b66dfa8649 | |||
| 7236a80f68 | |||
| 2689296a2c | |||
| 014244f453 | |||
| 62191c2711 | |||
| a1eed0477f | |||
| 02cb21bd5a | |||
| d15c5d9bc9 | |||
| 78573db17d | |||
| af1b6ac373 | |||
| f052a95b4d | |||
| d807e5d4fd | |||
| 6c12d4b436 | |||
| c427ae42a0 | |||
| aad694ff2e | |||
| 8a7a4ce38a | |||
| 1ad8f81080 | |||
| 1b6fe7445e | |||
| 7b2d0c4e2b | |||
| 27c990d903 | |||
| 8d80669eb3 | |||
| 1bcad555a0 | |||
| 2973547e76 | |||
| 0b415e2e33 | |||
| bc4b34f0a9 | |||
| 1110838e35 | |||
| 9d87987488 | |||
| 4c0984c9b8 | |||
| 5517f16684 | |||
| 4b967981dd | |||
| e63b959714 | |||
| a1751f274d | |||
| ef6538feca | |||
| 533977f353 | |||
| de61d9a9fd | |||
| 2c1b857255 | |||
| b293f84c38 | |||
| 5b4a3507a3 | |||
| 1ceb2bd636 | |||
| 3d6543e467 | |||
| bc6a31d458 | |||
| 687dc9f3fe | |||
| ee65e5fcd1 | |||
| 006a327a5f | |||
| 295e6454b1 | |||
| f389efa6af | |||
| f83c89b5f3 | |||
| 4ea3132334 | |||
| 8fc3ac1b55 | |||
| ed252e630b | |||
| b6c9c8843d | |||
| d80e996d02 | |||
| bc0a0c64c4 | |||
| 064ee3e41a | |||
| 3bda84dac5 | |||
| e2b378e197 | |||
| 0f2e1297e1 | |||
| d034a285fc | |||
| ee94943d00 | |||
| a9e89a45bd | |||
| f6b10b5763 | |||
| 9b9057ea81 | |||
| 33d2d02cb0 | |||
| e5be6eaceb | |||
| 378434dac4 | |||
| a545e6bad6 | |||
| 28bba28034 | |||
| b64b25ff05 | |||
| d1426c7f05 | |||
| 3375934651 | |||
| c79f58d246 | |||
| ee17ac0b0c | |||
| 26742a7335 | |||
| 7e1a0a1bc4 | |||
| 0e822ff1dd | |||
| 085b8b349f | |||
| c1164397e8 | |||
| e0e00ac962 | |||
| 3c16253795 | |||
| 0d8d35ab25 | |||
| 18a201611e | |||
| a66c7990f0 | |||
| 7e754a9c7b | |||
| b4f8519102 | |||
| db8a1c0808 | |||
| ebc601b45e | |||
| ce86dda0b9 | |||
| c80c5965b1 | |||
| beb200fd6a | |||
| f7ac3715d0 | |||
| 871dbcfc87 | |||
| f0cb7828c3 | |||
| f3c8d65e03 | |||
| 1956a4095d | |||
| 71559701f4 | |||
| 9ceba30680 | |||
| 3b2d06ed8f | |||
| 81e04e9cb0 | |||
| 286ca64413 | |||
| 51a96812fd | |||
| 07459b9a1b | |||
| ee69f9123c | |||
| b9aa18c705 | |||
| 7a2ed92147 | |||
| 071858b55c | |||
| 894481591d | |||
| 7d6e342a79 | |||
| e5580c2abd | |||
| 8f695401d2 | |||
| 47ee304da1 | |||
| 58c861b726 | |||
| 6427e2996f | |||
| f54aae5dc9 | |||
| 68940e6b6d | |||
| dbc57fdaac | |||
| f0ef9a5602 | |||
| 55f7637d9c | |||
| 1578085bab | |||
| 08090036fe | |||
| 9c9cf0f96e | |||
| 73f9418835 | |||
| b645bae1b1 | |||
| 8513309126 | |||
| 4d682c2ac6 | |||
| 8ea00e0383 | |||
| e0805a9601 | |||
| 6f36c4b7ee | |||
| 87194794f2 | |||
| 341fe0ff52 | |||
| b4eca67a2f | |||
| 1770b06498 | |||
| 888fe3b6d3 | |||
| 5c9fd6e2a6 | |||
| 18df1c0c7b | |||
| 359c103d01 | |||
| 1452cf2dee | |||
| ed7a636a18 | |||
| 19bd548127 | |||
| 55ac8064b1 | |||
| e7279ec4d0 | |||
| 1e9af663ba | |||
| ae7072b3e3 | |||
| e74c26a2d4 | |||
| 54268b0683 | |||
| a7d4299897 | |||
| 3215638c87 | |||
| 2b507d1006 | |||
| 782a5c33ad | |||
| 4794251a0c | |||
| 6d3a2d9259 | |||
| bef2c05c06 | |||
| 9384236294 | |||
| 730b3d439a | |||
| 6b09d5facc | |||
| 2b1100b3e9 | |||
| 138a4f1cf6 | |||
| 34103f00cd | |||
| b54d897060 | |||
| c12959b4a8 | |||
| f94f380c16 | |||
| f46ec19f01 | |||
| c7a6a5b020 | |||
| 8f64769214 | |||
| a4de710b13 | |||
| cb74228a68 | |||
| 9b1ced0ade | |||
| bc973c113c | |||
| ee732eeb52 | |||
| 77bd84f61b | |||
| fcbb71de7e | |||
| d4e0827600 | |||
| 8532e73d26 | |||
| efd26f9bcf | |||
| 212e718377 | |||
| c519f34bac | |||
| 3098bc7d18 | |||
| f9995d6b2d | |||
| b22cc0f7e3 | |||
| 5b5eb4b7c1 | |||
| 2e8ba4f630 | |||
| c14a53a2c5 | |||
| e987838d5a | |||
| 7a3610b58b | |||
| 0bc15bf4ae | |||
| 19f0eb5e9b | |||
| 4c532deb4d | |||
| 045dbf9d86 | |||
| 12f05b7aa6 | |||
| 9bcf3ca343 | |||
| 48fa67ae8c | |||
| de9dc5892b | |||
| 1e9e94b581 | |||
| 95ffac5c87 | |||
| ab4eca6d01 | |||
| 67653b60fb | |||
| 26fffb8af1 | |||
| d2b7cf3e1b | |||
| 5cdbc09c5b | |||
| 1a1c40338c | |||
| c9877bb53e | |||
| 58a086ea46 | |||
| 0bf84fa7b1 | |||
| 8b8edeab36 | |||
| 0783ccfb58 | |||
| fb0c74d645 | |||
| 1e3a3db02e | |||
| 53293f26d6 | |||
| f47d579070 | |||
| 56fe5520ad | |||
| 4c3dead6b7 | |||
| d61aea9956 | |||
| 4c9235cc53 | |||
| d8762bf0f2 | |||
| babd492caa | |||
| 3c567f2161 | |||
| 3d1d1cce11 | |||
| acf7000580 | |||
| 820d96858f | |||
| 058ba592bf | |||
| 20de400c16 | |||
| d950ee3d68 | |||
| 575379adc0 | |||
| ce2af28766 | |||
| 61c801e216 | |||
| 6f0acec390 | |||
| 74f4cfda0c | |||
| 76e3668563 | |||
| ce94dd1393 | |||
| 16682965f9 | |||
| c1ea087c58 | |||
| 96dc482422 | |||
| 8595d0987f | |||
| 0eb0f7805b | |||
| 48d0460eef | |||
| e92cd13bf8 | |||
| 06751fdc78 | |||
| da6ec00dbd | |||
| 412dbd64d5 | |||
| 496df549f6 | |||
| 1d3ab46cc7 | |||
| 97eaefa45a | |||
| f54b451ac4 | |||
| 68c9e0451a | |||
| a59508087c | |||
| b5bcd5c553 | |||
| 671c7a54fb | |||
| 012ead1a8f | |||
| 2a28183426 | |||
| 0ebea79750 | |||
| a701242646 | |||
| 4bdeae997d | |||
| 36809f34cc | |||
| 032171bb18 | |||
| d41bd3db39 | |||
| 56bba0eaaf | |||
| af8444e0d9 | |||
| f865cd7180 | |||
| b2a7d1f73d | |||
| 8d4f05cd50 | |||
| 9d2ff3fafa | |||
| 40371a9225 | |||
| 487d07e28c | |||
| 4176e09ea3 | |||
| 086f5f79ad | |||
| 5bb6c44967 | |||
| c44bf46a42 | |||
| 15a4c8dc25 | |||
| fcd7fa655c | |||
| e687dd2b9a | |||
| 59951c4efd | |||
| c00a4712a0 | |||
| 1bb07e9402 | |||
| 683bdec1f7 | |||
| ee53a9438a | |||
| 2e2087f16e | |||
| 998b0b4da5 | |||
| dcf5c2e455 | |||
| 156b1dee07 | |||
| 544d7907c3 | |||
| bd4598fac0 | |||
| 746f38a4f9 | |||
| 5b77f7baa6 | |||
| b33016aac4 | |||
| 2788e349ae | |||
| ab4d01c728 | |||
| 04af87f640 | |||
| 5b190d5334 | |||
| 8f32769656 | |||
| 4c47d88440 | |||
| 0e79bbfd6a | |||
| 3a411e8b9a | |||
| 7ef3580b1b | |||
| 1b04d25a81 | |||
| bffe438455 | |||
| d17beda04b | |||
| 7acc6932b5 | |||
| 2d175f4acc | |||
| 31905e56be | |||
| 6508155aea | |||
| 760f8684ea | |||
| 979b8b2ef9 | |||
| 9a0073e906 | |||
| 976e54bb4c | |||
| a8c54abdd9 | |||
| 87226377be | |||
| 14c2ed8d89 | |||
| 674fd84fa0 | |||
| da1ed10740 | |||
| eb73d20b00 | |||
| 782aed06e4 | |||
| 158fa2eefe | |||
| fa4cfc0d75 | |||
| d5143dfbe3 | |||
| f87bcff930 | |||
| ad4675369e | |||
| e774962c44 | |||
| 4b4c953b36 | |||
| f5482a29e4 | |||
| 2dbf05d0dc | |||
| 0a14a64fbb | |||
| 55f18ebafc | |||
| ee5051fc26 | |||
| 034c93091a | |||
| 9f25b49b8c | |||
| 8b184313cb | |||
| c2b097e6d1 | |||
| 793cde03ac | |||
| 58daaa6095 | |||
| dd82f624c5 | |||
| b0195a9640 | |||
| 38d69434fa | |||
| 1b559f91a2 | |||
| 05a21af5a6 | |||
| 9f4cbd48f7 | |||
| 3e7fbdbafc | |||
| af34391b58 | |||
| 527eca50fe | |||
| 4680b2d634 | |||
| d010a8f8c7 | |||
| 0d3ae2941c | |||
| 7bc2ca512a | |||
| b76e0ebeef | |||
| e15c61e139 | |||
| f595c43f2c | |||
| 4907b8269e | |||
| 5584d22376 | |||
| f7124dc0e1 | |||
| 42b6140df7 | |||
| 619fc25605 | |||
| 8c24c86c77 | |||
| 822046cc69 | |||
| 9e455f8fc7 | |||
| d708b8b540 | |||
| 553d2c44aa | |||
| 3e72fb78d3 | |||
| 0f7f5f7ab9 | |||
| 85a1605182 | |||
| a17ed000e1 | |||
| a5c1ae14b7 | |||
| 3cc14e1e14 | |||
| 8f5aa0a861 | |||
| 40e074c57a | |||
| 1bed7f1cc9 | |||
| ab7a9bf144 | |||
| 0a16e40a23 | |||
| fd1a8447fc | |||
| 5c24b6f81e | |||
| efa7657125 | |||
| b81f3e50ad | |||
| 941da8c68d | |||
| 3f1a8a6d12 | |||
| 2240c1723d | |||
| 35aa074c41 | |||
| 5d07598c5e | |||
| c493b3786c | |||
| d3299aee60 | |||
| e4f60a7bff | |||
| c90d994317 | |||
| fe000b7a6f | |||
| 707ef9d9f3 | |||
| 8dc6c4ebdc | |||
| b5abb04c63 | |||
| 4dce3a7915 | |||
| 1dbad7d6e5 | |||
| 3f07b410b9 | |||
| 25417ba5be | |||
| 7db02b7688 | |||
| fe67cc6c5b | |||
| 90b85c0df1 | |||
| 7f8e0b1712 | |||
| 0cdff7c544 | |||
| 973c0f0924 | |||
| 42561a7c56 | |||
| 7d156503fc | |||
| 99f4699260 | |||
| f38ed3be84 | |||
| 0ea52048e1 | |||
| 58dee4883b | |||
| a47bb95e50 | |||
| 0e83fba98c | |||
| 431aed18d3 | |||
| 1fbe8e61cb | |||
| 6ab289057b | |||
| c55a8e7af9 | |||
| 60fbe77829 | |||
| fbf097eb62 | |||
| 30c2673fdf | |||
| fd3709e103 | |||
| 08473d85ab | |||
| 489974ca5a | |||
| 6a6a0f0ee7 | |||
| 402f64364b | |||
| a3bff9d079 | |||
| 2a7a448059 | |||
| 7d855064da | |||
| efc0a3b94e | |||
| 01654ee0d3 | |||
| 23c2f92e6d | |||
| 3945c47f52 | |||
| 51ab6ce48b | |||
| ca8140a1ba | |||
| a84580c1dd | |||
| 63b212a66c | |||
| 7979d89997 | |||
| bc603fc125 | |||
| b55fd49830 | |||
| 60ceac645f | |||
| 90c599049b | |||
| 8307871aba | |||
| f538fb7f2f | |||
| a45105f5ae | |||
| 2f1a8ee648 | |||
| aacf4ea53d | |||
| 1fa2b60871 | |||
| 203dc0c230 | |||
| fcc4da1a56 | |||
| c5a49bbc44 | |||
| f8131b3a1e | |||
| 336cc0b37f | |||
| 42f096b09c | |||
| 614167cac5 | |||
| 71ed6b9950 | |||
| e5421f8810 | |||
| 8dc84baee0 | |||
| 3e3e19bed3 | |||
| a413533975 | |||
| aff9e35623 | |||
| 0a98f8a8c6 | |||
| aceed5f754 | |||
| 761d191c1d | |||
| 67e7f72f63 | |||
| d769be137e | |||
| f55beaff5f | |||
| d6a5dd56c6 | |||
| f279d39ddb | |||
| 2e1e8875b4 | |||
| c30c5a36f2 | |||
| 7d3901ee48 | |||
| 463398945f | |||
| d619862e63 | |||
| 9665a0e242 | |||
| 7ed6c11f37 | |||
| 3eaee0d122 | |||
| b7816873fe | |||
| 8809caa046 | |||
| b8b6910a45 | |||
| 52083ee48a | |||
| 64bfbac4f7 | |||
| f4f652aa97 | |||
| a5b7e79964 | |||
| 03c9bec256 | |||
| 06134e006c | |||
| 7563b455ba | |||
| 26edb3bebd | |||
| 55e1a6ad02 | |||
| 43ccdd0700 | |||
| 381425c6bc | |||
| 09ab95faf8 | |||
| 8bb6f0317a | |||
| fe95db2605 | |||
| 02640e6ae8 | |||
| 104dd19a6f | |||
| 89117c0706 | |||
| c7ce382424 | |||
| bc650b0816 | |||
| e9c3cf8f33 | |||
| a6a239c489 | |||
| 45b78465da | |||
| 71edeca994 | |||
| cd229c6a8f | |||
| ffede58dde | |||
| 9ff00a3df2 |
@@ -61,3 +61,11 @@ JWT_SECRET=Btj63iMEleEaww6Bb2IBECkxWn7YHPhhPFluAkg9DfcQik0qDRy6QW75ABGmPT2h
|
|||||||
PERFEXCRM_BASE_URL=""
|
PERFEXCRM_BASE_URL=""
|
||||||
PERFEXCRM_API_KEY=""
|
PERFEXCRM_API_KEY=""
|
||||||
PERFEXCRM_IS_ENABLED="false"
|
PERFEXCRM_IS_ENABLED="false"
|
||||||
|
|
||||||
|
WEPOST_BASE_URL=https://wepost-uat.90warehouse.com/api/router
|
||||||
|
WEPOST_CLIENT_ID=1234
|
||||||
|
WEPOST_CLIENT_SECRET=cief-secret-temp
|
||||||
|
WEPOST_IS_ENABLED=false
|
||||||
|
|
||||||
|
STORAGE_FEE_LAUNCH_DATE="2023-12-11 00:00:00"
|
||||||
|
SST_START_DATE="2024-04-01 00:00:00"
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Exceptions;
|
||||||
|
|
||||||
|
use App\Classes\ValueObjects\Constants\HttpStatus;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
final class ConnectionErrorException extends ServiceApiException {
|
||||||
|
public function __construct(?string $message = null, ?string $exceptionMessage = null, ?string $payload = null, ?string $exceptionTrace = null) {
|
||||||
|
Log::error($message. ": ". $exceptionMessage);
|
||||||
|
if($payload){
|
||||||
|
Log::error('Payload: '.$payload);
|
||||||
|
}
|
||||||
|
if($exceptionTrace){
|
||||||
|
Log::error($exceptionTrace);
|
||||||
|
}
|
||||||
|
parent::__construct($message ?? 'A connection error has occurred. Please check application logs for more information.',
|
||||||
|
HttpStatus::SERVER_ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Exceptions;
|
||||||
|
|
||||||
|
use App\Classes\ValueObjects\Constants\HttpStatus;
|
||||||
|
|
||||||
|
final class JobResourceNotFoundException extends ServiceApiException {
|
||||||
|
public function __construct(?string $message = null) {
|
||||||
|
parent::__construct($message ?? 'Unable to find the requested resource', HttpStatus::RESOURCE_NOT_FOUND);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Abstracts;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Classes\Exceptions\ErrorException;
|
||||||
|
use App\Classes\Exceptions\InternalServerErrorException;
|
||||||
|
use App\Classes\ValueObjects\Constants\Notifications;
|
||||||
|
use App\Classes\ValueObjects\Constants\HttpStatus;
|
||||||
|
use App\Classes\ValueObjects\Response\ApiResponseObject;
|
||||||
|
use ErrorException as GeneralExceptions;
|
||||||
|
use TypeError;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Symfony\Component\HttpFoundation\BinaryFileResponse;
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
use Illuminate\Http\Resources\Json\ResourceCollection;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
abstract class Abstract2ControllerLogic
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
abstract protected function notification(): array;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
private function getNotificationTitle():string {
|
||||||
|
return $this->notification()['title'] ? $this->notification()['title']: Notifications::UNDEFINED['title'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
private function getNotificationMessage():string {
|
||||||
|
return $this->notification()['message'] ? $this->notification()['message']: Notifications::UNDEFINED['message'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @return BinaryFileResponse
|
||||||
|
* @throws ErrorException
|
||||||
|
*/
|
||||||
|
abstract protected function logic(Request $request) : BinaryFileResponse;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @return BinaryFileResponse
|
||||||
|
*/
|
||||||
|
public function execute(Request $request) : BinaryFileResponse {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
DB::beginTransaction();
|
||||||
|
|
||||||
|
$response = $this->logic($request);
|
||||||
|
|
||||||
|
DB::commit();
|
||||||
|
|
||||||
|
return $response;
|
||||||
|
|
||||||
|
} catch (ErrorException|GeneralExceptions|TypeError $exception){
|
||||||
|
abort(404, $exception->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array|null $data
|
||||||
|
* @return JsonResponse
|
||||||
|
*/
|
||||||
|
public function response(?array $data = []) : JsonResponse {
|
||||||
|
|
||||||
|
return (new ApiResponseObject($this->getNotificationTitle().' Successful',
|
||||||
|
$this->getNotificationMessage(),
|
||||||
|
HttpStatus::OK_WITH_MESSAGE, $data))->handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param JsonResource $resource
|
||||||
|
* @return JsonResponse
|
||||||
|
*/
|
||||||
|
public function resourceResponse(JsonResource $resource){
|
||||||
|
return $this->response(['data' => $resource]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param ResourceCollection $collection
|
||||||
|
* @return JsonResponse
|
||||||
|
*/
|
||||||
|
public function collectionResponse(ResourceCollection $collection){
|
||||||
|
return $this->response(json_decode($collection->response()->getContent(), true));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -15,6 +15,8 @@ use Illuminate\Http\Request;
|
|||||||
use Illuminate\Http\Resources\Json\JsonResource;
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
use Illuminate\Http\Resources\Json\ResourceCollection;
|
use Illuminate\Http\Resources\Json\ResourceCollection;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use App\Classes\Exceptions\JobResourceNotFoundException;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
abstract class AbstractControllerLogic
|
abstract class AbstractControllerLogic
|
||||||
{
|
{
|
||||||
@@ -62,9 +64,28 @@ abstract class AbstractControllerLogic
|
|||||||
return $response;
|
return $response;
|
||||||
|
|
||||||
} catch (ErrorException|GeneralExceptions|TypeError $exception){
|
} catch (ErrorException|GeneralExceptions|TypeError $exception){
|
||||||
return (new ApiResponseObject($this->getNotificationTitle().' failed', $exception->getMessage(),
|
if ($request->has('isApiPub')) {
|
||||||
|
Log::error($exception);
|
||||||
|
return (new ApiResponseObject($this->getNotificationTitle().' failed', "Server Error",
|
||||||
!in_array($exception->getCode(), [0, 42000]) ? $exception->getCode() : HttpStatus::SERVER_ERROR))->handler();
|
!in_array($exception->getCode(), [0, 42000]) ? $exception->getCode() : HttpStatus::SERVER_ERROR))->handler();
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if ($exception instanceof JobResourceNotFoundException) {
|
||||||
|
Log::channel('vue_polling')->info(sprintf(
|
||||||
|
"Uncaught exception '%s' with message '%s' in %s:%d",
|
||||||
|
get_class($exception),
|
||||||
|
$exception->getMessage(),
|
||||||
|
$exception->getTrace()[0]['file'],
|
||||||
|
$exception->getTrace()[0]['line']
|
||||||
|
));
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Log::error($exception);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (new ApiResponseObject($this->getNotificationTitle().' failed', $exception->getMessage(),
|
||||||
|
!in_array($exception->getCode(), [0, 42000]) ? $exception->getCode() : HttpStatus::SERVER_ERROR))->handler();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ use App\Classes\General\Interfaces\DataTransferObject;
|
|||||||
abstract class AbstractRule
|
abstract class AbstractRule
|
||||||
{
|
{
|
||||||
|
|
||||||
abstract protected function authorized(): bool;
|
abstract protected function authorized($object): bool;
|
||||||
|
|
||||||
abstract protected function validators($object): bool;
|
abstract protected function validators($object): bool;
|
||||||
|
|
||||||
@@ -26,8 +26,8 @@ abstract class AbstractRule
|
|||||||
*/
|
*/
|
||||||
public function passes(?DataTransferObject $object = null): bool {
|
public function passes(?DataTransferObject $object = null): bool {
|
||||||
try {
|
try {
|
||||||
if(!$this->authorized()){
|
if(!$this->authorized($object)){
|
||||||
throw new AccessForbiddenException('You don\'t have permission to preform this action');
|
throw new AccessForbiddenException('You don\'t have permission to perform this action');
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->validators($object);
|
$this->validators($object);
|
||||||
@@ -36,11 +36,11 @@ abstract class AbstractRule
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
} catch(AccessForbiddenException $exception){
|
} catch(AccessForbiddenException $exception){
|
||||||
throw new AccessForbiddenException('You don\'t have permission to preform this action');
|
throw new AccessForbiddenException('You don\'t have permission to perform this action');
|
||||||
} catch(\Exception $exception){
|
} catch(\Exception $exception){
|
||||||
throw new RequestValidationException($exception->getMessage());
|
throw new RequestValidationException($exception->getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ namespace App\Classes\General\Eloquent;
|
|||||||
use App\Classes\Exceptions\ResourceNotFoundException;
|
use App\Classes\Exceptions\ResourceNotFoundException;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use App\Classes\Exceptions\JobResourceNotFoundException;
|
||||||
|
|
||||||
|
|
||||||
abstract class AbstractFetchRecord extends AbstractGetRecord
|
abstract class AbstractFetchRecord extends AbstractGetRecord
|
||||||
{
|
{
|
||||||
@@ -26,12 +28,18 @@ abstract class AbstractFetchRecord extends AbstractGetRecord
|
|||||||
* @return Model
|
* @return Model
|
||||||
* @throws ResourceNotFoundException
|
* @throws ResourceNotFoundException
|
||||||
*/
|
*/
|
||||||
public function getResults(Builder $query): Model {
|
public function getResults(Builder $query, array $param = []): Model {
|
||||||
if(!$query->exists()){
|
if(!$query->exists()){
|
||||||
throw new ResourceNotFoundException('Unable to find any record based on the criteria provided');
|
$table = $query->getModel()->getTable();
|
||||||
|
if($table ==='job_results'){
|
||||||
|
throw new JobResourceNotFoundException('Unable to find any job based on the criteria provided');
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
throw new ResourceNotFoundException('Unable to find any record based on the criteria provided');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $query->first();
|
return $query->first();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,9 +50,9 @@ abstract class AbstractGetRecord
|
|||||||
* @param array $filters
|
* @param array $filters
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function handler(array $filters){
|
public function handler(array $filters, array $params = []){
|
||||||
$this->filters = collect($filters);
|
$this->filters = collect($filters);
|
||||||
return $this->getResults($this->applyFiltersToQuery());
|
return $this->getResults($this->applyFiltersToQuery(), $params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -65,6 +65,6 @@ abstract class AbstractGetRecord
|
|||||||
* @param Builder $query
|
* @param Builder $query
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
abstract function getResults(Builder $query);
|
abstract function getResults(Builder $query, array $params = []);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,11 +16,10 @@ abstract class AbstractListRecord extends AbstractGetRecord
|
|||||||
* @return mixed
|
* @return mixed
|
||||||
* @throws MalformedRequestException
|
* @throws MalformedRequestException
|
||||||
*/
|
*/
|
||||||
public function execute(array $filters = []){
|
public function execute(array $filters = [], array $param = []){
|
||||||
|
|
||||||
try{
|
try{
|
||||||
|
return $this->handler($filters, $param);
|
||||||
return $this->handler($filters);
|
|
||||||
|
|
||||||
} catch (QueryException $exception){
|
} catch (QueryException $exception){
|
||||||
throw new MalformedRequestException('Unable to fetch the list of records due to unexpected error');
|
throw new MalformedRequestException('Unable to fetch the list of records due to unexpected error');
|
||||||
@@ -32,7 +31,7 @@ abstract class AbstractListRecord extends AbstractGetRecord
|
|||||||
* @param Builder $query
|
* @param Builder $query
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function getResults(Builder $query) {
|
public function getResults(Builder $query, array $param = []) {
|
||||||
$filters = $this->getDecorationFilters();
|
$filters = $this->getDecorationFilters();
|
||||||
|
|
||||||
if($filters->has('order_by')){
|
if($filters->has('order_by')){
|
||||||
@@ -44,8 +43,12 @@ abstract class AbstractListRecord extends AbstractGetRecord
|
|||||||
}
|
}
|
||||||
|
|
||||||
//dd($query->toSql());
|
//dd($query->toSql());
|
||||||
return $filters->has('per_page') ? $query->paginate($filters->get('per_page')) : $query->get();
|
if(!empty($param)){
|
||||||
|
return $filters->has('per_page') ? $query->paginate($filters->get('per_page'), ['*'], 'page', $param['page']) : $query->get(); //page data from query parameters e.g ?page=1
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return $filters->has('per_page') ? $query->paginate($filters->get('per_page')) : $query->get();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class CompanySegmentsIn implements Filter
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->whereHas('companyModules', function ($module) use ($value) {
|
||||||
|
$module->whereHas('connections', function ($connection) use ($value) {
|
||||||
|
$connection->whereHas('connectionSegments', function ($segment) use ($value) {
|
||||||
|
$segment->whereIn('segment_id', $value);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class CreatedAfterOrEqual implements Filter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
$table = $builder->getModel()->getTable();
|
||||||
|
$startDate = Carbon::createFromFormat('d-m-Y', $value)->startOfDay();
|
||||||
|
return $builder->where("{$table}.created_at", '>=', $startDate);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class CreatedBeforeOrEqual implements Filter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
$table = $builder->getModel()->getTable();
|
||||||
|
$endDate = Carbon::createFromFormat('d-m-Y', $value)->endOfDay();
|
||||||
|
return $builder->where("{$table}.created_at", '<=', $endDate);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class HasQuestionnaireGroupIn implements Filter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return Builder|mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->whereHas('question.questionnaire', function (Builder $query) use ($value) {
|
||||||
|
$query->whereIn('group', $value);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class JobId implements Filter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return Builder|mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->where('job_id', $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class MarkingIn implements Filter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return Builder|mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->whereHas('companyModules', function ($module) use ($value) {
|
||||||
|
$module->whereHas('connections', function ($connection) use ($value) {
|
||||||
|
$connection->whereIn('invitee_reference', $value);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class OrderByIdDesc implements Filter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return Builder|mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->orderBy('id', 'desc');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class OrderByUpdatedAtDesc implements Filter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return Builder|mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->orderBy('updated_at', 'desc');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -14,7 +14,8 @@ class OwnerId implements Filter
|
|||||||
*/
|
*/
|
||||||
public static function apply(Builder $builder, $value)
|
public static function apply(Builder $builder, $value)
|
||||||
{
|
{
|
||||||
return $builder->where('owner_id', $value);
|
$table = $builder->getModel()->getTable();
|
||||||
|
return $builder->where("{$table}.owner_id", $value);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -14,7 +14,8 @@ class OwnerType implements Filter
|
|||||||
*/
|
*/
|
||||||
public static function apply(Builder $builder, $value)
|
public static function apply(Builder $builder, $value)
|
||||||
{
|
{
|
||||||
return $builder->where('owner_type', $value);
|
$table = $builder->getModel()->getTable();
|
||||||
|
return $builder->where("{$table}.owner_type", $value);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
+32
@@ -0,0 +1,32 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
|
use App\Classes\ValueObjects\Constants\SegmentConstants;
|
||||||
|
use App\Classes\ValueObjects\Constants\TransactionType;
|
||||||
|
use App\Models\PackingList;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
class PackingListLimitOneByTypeOrderedByInvoiceDate implements Filter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return Builder|mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->select('packing_lists.*')->join('transactions', function($join){
|
||||||
|
$join->on('transactions.owner_id', '=', 'packing_lists.id');
|
||||||
|
$join->where('transactions.owner_type', '=', PackingList::class);
|
||||||
|
$join->where('transactions.status', '=', ApprovalStatus::APPROVED);
|
||||||
|
$join->whereRaw('(transactions.type <> 16 OR transactions.id = (
|
||||||
|
SELECT id FROM transactions WHERE owner_id = packing_lists.id AND type = 16 LIMIT 1
|
||||||
|
))');
|
||||||
|
})->orderBy('transactions.updated_at', 'DESC');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class PaymentMethodNotIn implements Filter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return Builder|mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->whereNotIn('payment_method', $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class PostcodeLike implements Filter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return Builder|mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->where('postcode', 'LIKE', '%'.$value.'%');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class RequestSignature implements Filter
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return Builder|mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->where('request_signature', $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class ResultNotNull implements Filter
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return Builder|mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->whereNotNull('result');
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class ShortUrl implements Filter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return Builder|mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->where('short_url', $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -14,7 +14,8 @@ class StatusIn implements Filter
|
|||||||
*/
|
*/
|
||||||
public static function apply(Builder $builder, $value)
|
public static function apply(Builder $builder, $value)
|
||||||
{
|
{
|
||||||
return $builder->whereIn('status', $value);
|
$table = $builder->getModel()->getTable();
|
||||||
|
return $builder->whereIn("{$table}.status", $value);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class WithAgingColumn implements Filter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
$today = Carbon::now();
|
||||||
|
return $builder->select('packing_lists.*')
|
||||||
|
->addSelect(DB::raw("DATEDIFF('$today', transactions.updated_at) as days_over_duedate"))
|
||||||
|
->addSelect(DB::raw("CASE
|
||||||
|
WHEN DATEDIFF('$today', transactions.updated_at) <= 0 THEN 0
|
||||||
|
WHEN DATEDIFF('$today', transactions.updated_at) > 0 AND DATEDIFF('$today', transactions.updated_at) <= 30 THEN 1
|
||||||
|
WHEN DATEDIFF('$today', transactions.updated_at) > 30 AND DATEDIFF('$today', transactions.updated_at) <= 60 THEN 2
|
||||||
|
WHEN DATEDIFF('$today', transactions.updated_at) > 60 AND DATEDIFF('$today', transactions.updated_at) <= 90 THEN 3
|
||||||
|
ELSE 4
|
||||||
|
END AS due_date_number"));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
class WithContainersPackages implements Filter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
// Log::info('WithContainersPackages: '.$value);
|
||||||
|
// return $builder->with(['containers', 'packages']);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class WithOrderReferenceLike implements Filter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->join('transactions as t2', 't2.payment_reference', '=', 'transactions.bill_no')
|
||||||
|
->join('transactions as t3', 't3.id', '=', 't2.owner_id')
|
||||||
|
->join('packing_lists', 'packing_lists.id', '=', 't3.owner_id')
|
||||||
|
->join('orders', function ($join) use ($value) {
|
||||||
|
$join->on('orders.id', '=', 'packing_lists.owner_id')
|
||||||
|
->where('orders.reference', 'LIKE', '%'.$value.'%');
|
||||||
|
})
|
||||||
|
->addSelect(['transactions.*', 't2.id as paymentTransactionId', 't3.id as invoiceTransactionId', 'packing_lists.id as packingListId', 'orders.reference as orderReference']);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Eloquent\Filters;
|
||||||
|
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
|
class WithTrashed implements Filter
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Builder $builder
|
||||||
|
* @param $value
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public static function apply(Builder $builder, $value)
|
||||||
|
{
|
||||||
|
return $builder->withTrashed();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Classes\General;
|
namespace App\Classes\General;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\ResourceCollection;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
@@ -24,12 +25,11 @@ class Helper
|
|||||||
return array_slice(get_class_methods($className), 1);
|
return array_slice(get_class_methods($className), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $log
|
* @param $log
|
||||||
* @return none
|
|
||||||
*/
|
*/
|
||||||
static function debugLoggerForPerfexCRM($log){
|
static function debugLogger($log){
|
||||||
if($log){
|
if($log && isset($log['message'])){
|
||||||
$message = $log['message'];
|
$message = $log['message'];
|
||||||
$substring = 'No data were found';
|
$substring = 'No data were found';
|
||||||
if (isset($message)) {
|
if (isset($message)) {
|
||||||
@@ -41,4 +41,12 @@ class Helper
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param ResourceCollection $collection
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
static function collectionResponse(ResourceCollection $collection){
|
||||||
|
return json_decode($collection->response()->getContent(), true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General\Interfaces;
|
||||||
|
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Relations\MorphMany;
|
||||||
|
|
||||||
|
interface KeyValueInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
public function attributes(): morphMany;
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\General;
|
||||||
|
|
||||||
|
|
||||||
|
class WePostHelper
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $clientId
|
||||||
|
* @param string $clientSecrent
|
||||||
|
* @param string $type
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
static function generateSignature(string $clientId, string $clientSecrent, string $type){
|
||||||
|
// public parameters
|
||||||
|
$timestamp = 1234; //time();
|
||||||
|
|
||||||
|
$params = [
|
||||||
|
'client_id' => $clientId,
|
||||||
|
'type' => $type,
|
||||||
|
'timestamp' => $timestamp
|
||||||
|
];
|
||||||
|
|
||||||
|
// $businessParams = [
|
||||||
|
// 'test1' => '1',
|
||||||
|
// ];
|
||||||
|
|
||||||
|
ksort($params);
|
||||||
|
$str = '';
|
||||||
|
foreach ($params as $key => $value) {
|
||||||
|
if(is_array($value)) {
|
||||||
|
$str .= $key.json_encode($value, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$str .= $key. $value;
|
||||||
|
}
|
||||||
|
$str = $clientSecrent.$str.$clientSecrent;
|
||||||
|
$signature = strtoupper(md5($str));
|
||||||
|
return $signature;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,6 +13,7 @@ use Illuminate\Contracts\Queue\ShouldQueue;
|
|||||||
use Illuminate\Foundation\Bus\Dispatchable;
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
use Illuminate\Queue\InteractsWithQueue;
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
class FetchOrdersFromYDPortalJob implements ShouldQueue
|
class FetchOrdersFromYDPortalJob implements ShouldQueue
|
||||||
{
|
{
|
||||||
@@ -29,12 +30,17 @@ class FetchOrdersFromYDPortalJob implements ShouldQueue
|
|||||||
*/
|
*/
|
||||||
public function handle()
|
public function handle()
|
||||||
{
|
{
|
||||||
|
Log::info('FetchOrdersFromYDPortalJob starts');
|
||||||
|
Log::info('FetchPackingListsFromYdPortalProcessor starts');
|
||||||
(App()->make(FetchPackingListsFromYdPortalProcessor::class))->execute();
|
(App()->make(FetchPackingListsFromYdPortalProcessor::class))->execute();
|
||||||
|
Log::info('FetchContainersFromYdPortalProcessor starts');
|
||||||
(App()->make(FetchContainersFromYdPortalProcessor::class))->execute();
|
(App()->make(FetchContainersFromYdPortalProcessor::class))->execute();
|
||||||
|
Log::info('FetchContainersUpdatesFromYdPortalProcessor starts');
|
||||||
(App()->make(FetchContainersUpdatesFromYdPortalProcessor::class))->execute();
|
(App()->make(FetchContainersUpdatesFromYdPortalProcessor::class))->execute();
|
||||||
|
Log::info('FetchDeliveryUpdatesFromYdPortalProcessor starts');
|
||||||
(App()->make(FetchDeliveryUpdatesFromYdPortalProcessor::class))->execute();
|
(App()->make(FetchDeliveryUpdatesFromYdPortalProcessor::class))->execute();
|
||||||
|
Log::info('FetchOrdersFromYDPortalJob ends');
|
||||||
// (App()->make(FetchOrderListsFromYdPortalProcessor::class))->execute();
|
// (App()->make(FetchOrderListsFromYdPortalProcessor::class))->execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Jobs;
|
||||||
|
|
||||||
|
use App\Classes\Modules\PackingLists\Processors\ListPackingListsJobProcessor;
|
||||||
|
use App\Classes\Modules\Jobs\DataTransferObjects\ListGenericJobObject;
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
|
||||||
|
|
||||||
|
class ListPackingListsJob implements ShouldQueue
|
||||||
|
{
|
||||||
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||||
|
|
||||||
|
public $timeout = 900;
|
||||||
|
|
||||||
|
/** @var ListGenericJobObject */
|
||||||
|
private $listGenericJobObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ListPackingListsJob constructor.
|
||||||
|
* @param ListGenericJobObject $listGenericJobObject
|
||||||
|
*/
|
||||||
|
public function __construct(ListGenericJobObject $listGenericJobObject)
|
||||||
|
{
|
||||||
|
$this->listGenericJobObject = $listGenericJobObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
$rawPayload = $this->job->payload();
|
||||||
|
if(isset($rawPayload['data']['commandName'])){
|
||||||
|
$this->listGenericJobObject->setJobCommandName($rawPayload['data']['commandName']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isset($rawPayload['data']['command'])){
|
||||||
|
$this->listGenericJobObject->setJobCommand($rawPayload['data']['command']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = (App()->make(ListPackingListsJobProcessor::class))->execute($this->listGenericJobObject);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,8 @@
|
|||||||
namespace App\Classes\Jobs;
|
namespace App\Classes\Jobs;
|
||||||
|
|
||||||
use App\Classes\Modules\PerfexCRM\Processors\UpdatePerfexCRMProcessor;
|
use App\Classes\Modules\PerfexCRM\Processors\UpdatePerfexCRMProcessor;
|
||||||
|
use App\Classes\Modules\PerfexCRM\Processors\FetchPerfexCRMInvoiceProcessor;
|
||||||
|
use App\Models\Transaction;
|
||||||
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;
|
||||||
@@ -10,6 +12,8 @@ use Illuminate\Queue\InteractsWithQueue;
|
|||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMObject;
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMObject;
|
||||||
use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMInvoiceObject;
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\UpdatePerfexCRMInvoiceObject;
|
||||||
|
use App\Classes\Modules\PerfexCRM\DataTransferObjects\FetchPerfexCRMInvoiceObject;
|
||||||
|
|
||||||
|
|
||||||
class UpdatePerfexCRM implements ShouldQueue
|
class UpdatePerfexCRM implements ShouldQueue
|
||||||
{
|
{
|
||||||
@@ -18,37 +22,51 @@ class UpdatePerfexCRM implements ShouldQueue
|
|||||||
/** @var UpdatePerfexCRMObject */
|
/** @var UpdatePerfexCRMObject */
|
||||||
private $updatePerfexCRMObject;
|
private $updatePerfexCRMObject;
|
||||||
|
|
||||||
/** @var UpdatePerfexCRMInvoice */
|
|
||||||
private $nextJob;
|
|
||||||
|
|
||||||
/** @var */
|
/** @var */
|
||||||
private $transaction;
|
private $transaction;
|
||||||
|
|
||||||
|
/** @var bool|null */
|
||||||
|
private $shouldCreateInvoice;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* UpdatePerfexCRM constructor.
|
* UpdatePerfexCRM constructor.
|
||||||
* @param UpdatePerfexCRMObject $updatePerfexCRMObject
|
* @param UpdatePerfexCRMObject $updatePerfexCRMObject
|
||||||
* @param UpdatePerfexCRMInvoice $nextJob
|
* @param Transaction $transaction
|
||||||
* @param $transaction
|
* @param bool|null $shouldCreateInvoice
|
||||||
*/
|
*/
|
||||||
public function __construct(UpdatePerfexCRMObject $updatePerfexCRMObject, $transaction, $nextJob)
|
public function __construct(UpdatePerfexCRMObject $updatePerfexCRMObject, $transaction, ?bool $shouldCreateInvoice = false)
|
||||||
{
|
{
|
||||||
$this->updatePerfexCRMObject = $updatePerfexCRMObject;
|
$this->updatePerfexCRMObject = $updatePerfexCRMObject;
|
||||||
$this->nextJob = $nextJob;
|
|
||||||
$this->transaction = $transaction;
|
$this->transaction = $transaction;
|
||||||
|
$this->shouldCreateInvoice = $shouldCreateInvoice;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function handle()
|
public function handle()
|
||||||
{
|
{
|
||||||
|
//To use invoice as a reference to decide whether more tasks should be created
|
||||||
|
$this->updatePerfexCRMObject->setInvoiceId($this->getInvoiceIdOrCreateInvoice());
|
||||||
|
|
||||||
$result = (App()->make(UpdatePerfexCRMProcessor::class))->execute($this->updatePerfexCRMObject);
|
$result = (App()->make(UpdatePerfexCRMProcessor::class))->execute($this->updatePerfexCRMObject);
|
||||||
if($this->nextJob != null && $this->transaction != null){
|
if($this->transaction != null && $this->shouldCreateInvoice){
|
||||||
$updatePerfexCRMInvoiceOject = new UpdatePerfexCRMInvoiceObject(
|
$updatePerfexCRMInvoiceOject = new UpdatePerfexCRMInvoiceObject(
|
||||||
$this->updatePerfexCRMObject->getContactEmail(),
|
$this->updatePerfexCRMObject->getContactEmail(),
|
||||||
$result->projectId,
|
$result->projectId,
|
||||||
$this->transaction,
|
$this->transaction,
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
/** @var UpdatePerfexCRMInvoice $nextJob */
|
UpdatePerfexCRMInvoice::dispatch($updatePerfexCRMInvoiceOject);
|
||||||
$this->nextJob::dispatch($updatePerfexCRMInvoiceOject);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function getInvoiceIdOrCreateInvoice(){
|
||||||
|
if($this->transaction != null){
|
||||||
|
$fetchPerfexCRMInvoiceObject = new FetchPerfexCRMInvoiceObject(
|
||||||
|
$this->updatePerfexCRMObject->getContactEmail(),
|
||||||
|
$this->transaction
|
||||||
|
);
|
||||||
|
$invoiceId = (App()->make(FetchPerfexCRMInvoiceProcessor::class))->execute($fetchPerfexCRMInvoiceObject);
|
||||||
|
return $invoiceId;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ class UpdatePerfexCRMInvoice implements ShouldQueue
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* CreatePerfexCRMSingleTask constructor.
|
* CreatePerfexCRMSingleTask constructor.
|
||||||
* @param UpdatePerfexCRMInvoiceObject $createTaskPerfexCRMObject
|
* @param UpdatePerfexCRMInvoiceObject $updatePerfexCRMInvoiceObject
|
||||||
*/
|
*/
|
||||||
public function __construct(UpdatePerfexCRMInvoiceObject $updatePerfexCRMInvoiceObject)
|
public function __construct(UpdatePerfexCRMInvoiceObject $updatePerfexCRMInvoiceObject)
|
||||||
{
|
{
|
||||||
@@ -49,7 +49,7 @@ class UpdatePerfexCRMInvoice implements ShouldQueue
|
|||||||
$invoiceId = 0;
|
$invoiceId = 0;
|
||||||
$invoiceStatus = 0;
|
$invoiceStatus = 0;
|
||||||
$invoice = (App()->make(FetchesPerfexCRMInvoice::class))->execute($customer->userid,"INV-", $transaction->owner->bill_no);
|
$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));
|
Log::channel('perfex_crm')->info('UpdatePerfexCRMInvoice debug bill_no: ' . $transaction->owner->bill_no . ', Project Id: ' . $this->updatePerfexCRMInvoiceObject->getProjectId());
|
||||||
|
|
||||||
if(is_null($invoice)){
|
if(is_null($invoice)){
|
||||||
$result = (App()->make(CreatePerfexCRMInvoiceProcessor::class))->execute($transaction->owner, $this->updatePerfexCRMInvoiceObject->getIsPaid());
|
$result = (App()->make(CreatePerfexCRMInvoiceProcessor::class))->execute($transaction->owner, $this->updatePerfexCRMInvoiceObject->getIsPaid());
|
||||||
@@ -57,7 +57,7 @@ class UpdatePerfexCRMInvoice implements ShouldQueue
|
|||||||
$invoiceId = $result->payload['id'];
|
$invoiceId = $result->payload['id'];
|
||||||
} else {
|
} else {
|
||||||
// Log::error(json_encode('UpdatePerfexCRMInvoice CreatePerfexCRMInvoiceProcessor failed'));
|
// Log::error(json_encode('UpdatePerfexCRMInvoice CreatePerfexCRMInvoiceProcessor failed'));
|
||||||
Helper::debugLoggerForPerfexCRM('UpdatePerfexCRMInvoice CreatePerfexCRMInvoiceProcessor failed');
|
Log::channel('perfex_crm')->info('UpdatePerfexCRMInvoice CreatePerfexCRMInvoiceProcessor failed');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@@ -66,7 +66,6 @@ class UpdatePerfexCRMInvoice implements ShouldQueue
|
|||||||
|
|
||||||
//This only run when invoice already exist and the invoice does not have a PAID status
|
//This only run when invoice already exist and the invoice does not have a PAID status
|
||||||
if($invoiceStatus != PerfexCRMInvoiceStatus::PAID){
|
if($invoiceStatus != PerfexCRMInvoiceStatus::PAID){
|
||||||
Log::error(json_encode('UpdatePerfexCRMInvoice debug $this->updatePerfexCRMInvoiceObject->getProjectId(): '.$this->updatePerfexCRMInvoiceObject->getProjectId()));
|
|
||||||
//update invoice
|
//update invoice
|
||||||
(App()->make(UpdatesPerfexCRMInvoice::class))->execute($invoice, $this->updatePerfexCRMInvoiceObject->getProjectId());
|
(App()->make(UpdatesPerfexCRMInvoice::class))->execute($invoice, $this->updatePerfexCRMInvoiceObject->getProjectId());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,27 +27,22 @@ class UpdatePerfexCRMPrelude implements ShouldQueue
|
|||||||
/** @var UpdatePerfexCRMObject */
|
/** @var UpdatePerfexCRMObject */
|
||||||
private $updatePerfexCRMObject;
|
private $updatePerfexCRMObject;
|
||||||
|
|
||||||
/** @var UpdatePerfexCRM */
|
/** @var bool|null */
|
||||||
private $nextJob1;
|
private $shouldCreateInvoice;
|
||||||
|
|
||||||
/** @var UpdatePerfexCRMInvoice */
|
|
||||||
private $nextJob2;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* UpdatePerfexCRMPrelude constructor.
|
* UpdatePerfexCRMPrelude constructor.
|
||||||
* @param $packingList
|
* @param $packingList
|
||||||
* @param $transaction
|
* @param Transaction $transaction
|
||||||
* @param UpdatePerfexCRMObject $updatePerfexCRMObject
|
* @param UpdatePerfexCRMObject $updatePerfexCRMObject
|
||||||
* @param UpdatePerfexCRM $nextJob1
|
* @param bool|null $shouldCreateInvoice
|
||||||
* @param UpdatePerfexCRMInvoice $nextJob2
|
|
||||||
*/
|
*/
|
||||||
public function __construct($packingList, $transaction, UpdatePerfexCRMObject $updatePerfexCRMObject, $nextJob1, $nextJob2)
|
public function __construct($packingList, $transaction, UpdatePerfexCRMObject $updatePerfexCRMObject, ?bool $shouldCreateInvoice = false)
|
||||||
{
|
{
|
||||||
$this->packingList = $packingList;
|
$this->packingList = $packingList;
|
||||||
$this->transaction = $transaction;
|
$this->transaction = $transaction;
|
||||||
$this->updatePerfexCRMObject = $updatePerfexCRMObject;
|
$this->updatePerfexCRMObject = $updatePerfexCRMObject;
|
||||||
$this->nextJob1 = $nextJob1;
|
$this->shouldCreateInvoice = $shouldCreateInvoice;
|
||||||
$this->nextJob2 = $nextJob2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function handle()
|
public function handle()
|
||||||
@@ -69,9 +64,7 @@ class UpdatePerfexCRMPrelude implements ShouldQueue
|
|||||||
|
|
||||||
$result = $this->replacePlaceholders($this->updatePerfexCRMObject->getTasks(), $data);
|
$result = $this->replacePlaceholders($this->updatePerfexCRMObject->getTasks(), $data);
|
||||||
$this->updatePerfexCRMObject->setTasks($result);
|
$this->updatePerfexCRMObject->setTasks($result);
|
||||||
/** @var UpdatePerfexCRM $nextJob1 */
|
UpdatePerfexCRM::dispatch($this->updatePerfexCRMObject, $this->transaction, $this->shouldCreateInvoice);
|
||||||
/** @var UpdatePerfexCRMInvoice $nextJob2 */
|
|
||||||
$this->nextJob1::dispatch($this->updatePerfexCRMObject, $this->transaction, $this->nextJob2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function replacePlaceholders($template, $data, $prefix = '')
|
function replacePlaceholders($template, $data, $prefix = '')
|
||||||
|
|||||||
@@ -28,7 +28,8 @@ 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\Classes\Jobs\CreatePerfexCRMCustomer;
|
||||||
|
use App\Classes\Modules\Accounts\Processors\RegisterOnExchangeProcessor;
|
||||||
|
use App\Classes\Modules\Companies\Services\ConnectCompanyModuleToExchangeCompany;
|
||||||
use App\Models\Company;
|
use App\Models\Company;
|
||||||
use App\Models\CompanyModule;
|
use App\Models\CompanyModule;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
@@ -36,6 +37,8 @@ use App\Models\User;
|
|||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\App;
|
use Illuminate\Support\Facades\App;
|
||||||
|
use Illuminate\Support\Facades\Http;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
class CreateCustomerLogic extends AbstractControllerLogic
|
class CreateCustomerLogic extends AbstractControllerLogic
|
||||||
{
|
{
|
||||||
@@ -87,6 +90,12 @@ class CreateCustomerLogic extends AbstractControllerLogic
|
|||||||
/** @var CreatePerfexCRMLeadProcessor */
|
/** @var CreatePerfexCRMLeadProcessor */
|
||||||
private $createPerfexCRMLeadProcessor;
|
private $createPerfexCRMLeadProcessor;
|
||||||
|
|
||||||
|
/** @var RegisterOnExchangeProcessor */
|
||||||
|
private $registerOnExchangeProcessor;
|
||||||
|
|
||||||
|
/** @var ConnectCompanyModuleToExchangeCompany */
|
||||||
|
private $connectCompanyModuleToExchangeCompany;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CreateCustomerLogic constructor.
|
* CreateCustomerLogic constructor.
|
||||||
* @param CreateUserProcessor $createUserProcessor
|
* @param CreateUserProcessor $createUserProcessor
|
||||||
@@ -101,8 +110,10 @@ class CreateCustomerLogic extends AbstractControllerLogic
|
|||||||
* @param GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor
|
* @param GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor
|
||||||
* @param FetchesCompanyModule $fetchesCompanyModule
|
* @param FetchesCompanyModule $fetchesCompanyModule
|
||||||
* @param CreatePerfexCRMLeadProcessor $createPerfexCRMLeadProcessor
|
* @param CreatePerfexCRMLeadProcessor $createPerfexCRMLeadProcessor
|
||||||
|
* @param RegisterOnExchangeProcessor $registerOnExchangeProcessor
|
||||||
|
* @param ConnectCompanyModuleToExchangeCompany $connectCompanyModuleToExchangeCompany
|
||||||
*/
|
*/
|
||||||
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)
|
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, RegisterOnExchangeProcessor $registerOnExchangeProcessor, ConnectCompanyModuleToExchangeCompany $connectCompanyModuleToExchangeCompany)
|
||||||
{
|
{
|
||||||
$this->createUserProcessor = $createUserProcessor;
|
$this->createUserProcessor = $createUserProcessor;
|
||||||
$this->createCompanyProcessor = $createCompanyProcessor;
|
$this->createCompanyProcessor = $createCompanyProcessor;
|
||||||
@@ -116,6 +127,8 @@ class CreateCustomerLogic extends AbstractControllerLogic
|
|||||||
$this->generateEmailVerificationAttemptProcessor = $generateEmailVerificationAttemptProcessor;
|
$this->generateEmailVerificationAttemptProcessor = $generateEmailVerificationAttemptProcessor;
|
||||||
$this->fetchesCompanyModule = $fetchesCompanyModule;
|
$this->fetchesCompanyModule = $fetchesCompanyModule;
|
||||||
$this->createPerfexCRMLeadProcessor = $createPerfexCRMLeadProcessor;
|
$this->createPerfexCRMLeadProcessor = $createPerfexCRMLeadProcessor;
|
||||||
|
$this->registerOnExchangeProcessor = $registerOnExchangeProcessor;
|
||||||
|
$this->connectCompanyModuleToExchangeCompany = $connectCompanyModuleToExchangeCompany;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -153,7 +166,7 @@ class CreateCustomerLogic extends AbstractControllerLogic
|
|||||||
|
|
||||||
$this->assignEmployeeProcessor->execute($Object);
|
$this->assignEmployeeProcessor->execute($Object);
|
||||||
|
|
||||||
$this->uploadIdentityDocumentProcessor->execute($request, $company);
|
// $this->uploadIdentityDocumentProcessor->execute($request, $company);
|
||||||
|
|
||||||
if(config('perfexcrm.is_enabled') == 'true'){
|
if(config('perfexcrm.is_enabled') == 'true'){
|
||||||
// $this->createPerfexCRMLeadProcessor->execute($request);
|
// $this->createPerfexCRMLeadProcessor->execute($request);
|
||||||
@@ -167,8 +180,34 @@ class CreateCustomerLogic extends AbstractControllerLogic
|
|||||||
CreatePerfexCRMCustomer::dispatch($createLeadPerfexCRMObject);
|
CreatePerfexCRMCustomer::dispatch($createLeadPerfexCRMObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(app()->environment(['production'])){
|
||||||
|
// call wac webhook
|
||||||
|
$url = config('wagWebhookUrl.account_registration_url');
|
||||||
|
$payload = [
|
||||||
|
'name' => $request->input('name'),
|
||||||
|
'email' => $request->input('email'),
|
||||||
|
'phone' => $request->input('phone'),
|
||||||
|
'portal' => 'izyim'
|
||||||
|
];
|
||||||
|
$response = Http::post($url, $payload);
|
||||||
|
Log::channel('wac_webhook')->info('Register Account: ' . json_encode($response));
|
||||||
|
}
|
||||||
|
|
||||||
// $this->generateEmailVerificationAttemptProcessor->execute($user);
|
// $this->generateEmailVerificationAttemptProcessor->execute($user);
|
||||||
|
|
||||||
|
$exchangeCompanyId = null;
|
||||||
|
if ($request->input('exchange_company_id')) {
|
||||||
|
$exchangeCompanyId = $request->input('exchange_company_id');
|
||||||
|
} else {
|
||||||
|
// register account on exchange portal if this registration not coming from exchange
|
||||||
|
$exchangeCompanyId = $this->registerOnExchangeProcessor->execute($request, $companyModule->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($exchangeCompanyId) {
|
||||||
|
// create exchange company connection
|
||||||
|
$this->connectCompanyModuleToExchangeCompany->execute($companyModule, $exchangeCompanyId);
|
||||||
|
}
|
||||||
|
|
||||||
return $this->response($this->authenticationProcessor->execute($request));
|
return $this->response($this->authenticationProcessor->execute($request));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,83 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Accounts\ControllersLogic;
|
||||||
|
|
||||||
|
use App\Classes\Exceptions\AccessUnauthorisedException;
|
||||||
|
use App\Classes\Modules\Accounts\Processors\AuthenticationProcessor;
|
||||||
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
|
use App\Classes\Modules\Accounts\Services\GeneratesAuthenticationToken;
|
||||||
|
use App\Classes\Modules\Accounts\Services\GeneratesAuthenticationTokenWithExchangeBookingId;
|
||||||
|
use App\Models\ExchangeCompanyConnection;
|
||||||
|
use App\Models\Order;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
class LoginThroughExchangeLogic extends AbstractControllerLogic
|
||||||
|
{
|
||||||
|
|
||||||
|
protected function notification():array {
|
||||||
|
return [
|
||||||
|
'title' => 'Authentication',
|
||||||
|
'message' => 'You have successfully logged in to your account'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var AuthenticationProcessor */
|
||||||
|
private $authenticationProcessor;
|
||||||
|
|
||||||
|
/** @var GeneratesAuthenticationToken */
|
||||||
|
private $generatesAuthenticationToken;
|
||||||
|
|
||||||
|
/** @var GeneratesAuthenticationTokenWithExchangeBookingId */
|
||||||
|
private $generatesAuthenticationTokenWithExchangeBookingId;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* LoginThroughExchangeLogic constructor.
|
||||||
|
* @param AuthenticationProcessor $authenticationProcessor
|
||||||
|
* @param GeneratesAuthenticationToken $generatesAuthenticationToken
|
||||||
|
* @param GeneratesAuthenticationTokenWithExchangeBookingId $generatesAuthenticationTokenWithExchangeBookingId
|
||||||
|
*/
|
||||||
|
public function __construct(GeneratesAuthenticationToken $generatesAuthenticationToken, GeneratesAuthenticationTokenWithExchangeBookingId $generatesAuthenticationTokenWithExchangeBookingId)
|
||||||
|
{
|
||||||
|
$this->generatesAuthenticationToken = $generatesAuthenticationToken;
|
||||||
|
$this->generatesAuthenticationTokenWithExchangeBookingId = $generatesAuthenticationTokenWithExchangeBookingId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @return JsonResponse
|
||||||
|
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
||||||
|
* @throws \App\Classes\Exceptions\AccessUnauthorisedException
|
||||||
|
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||||
|
*/
|
||||||
|
protected function logic(Request $request): JsonResponse {
|
||||||
|
|
||||||
|
$token = explode('.', $request->input("exchangeToken"))[1];
|
||||||
|
$decodedToken = base64_decode($token);
|
||||||
|
$exchangeUser = json_decode($decodedToken, true)['user'];
|
||||||
|
$exchangeCompanyId = $exchangeUser['company_id'];
|
||||||
|
$connection = ExchangeCompanyConnection::where("exchange_company_id", $exchangeCompanyId)->first();
|
||||||
|
if (!$connection) {
|
||||||
|
throw new AccessUnauthorisedException('These credentials do not match our records.');
|
||||||
|
}
|
||||||
|
$companyModule = $connection->companyModule;
|
||||||
|
$user = $companyModule->employees->last();
|
||||||
|
|
||||||
|
$exchangeBookingId = null;
|
||||||
|
if (isset($exchangeUser['booking_id']) && $exchangeUser['booking_id']) {
|
||||||
|
$exchangeBookingId = $exchangeUser['booking_id'];
|
||||||
|
$token = $this->generatesAuthenticationTokenWithExchangeBookingId->execute($user, $exchangeBookingId);
|
||||||
|
|
||||||
|
return $this->response(['access_token' => $token, 'redirect_url' => route('dashboard') . "?createOrder=true"]);
|
||||||
|
} else {
|
||||||
|
$token = $this->generatesAuthenticationToken->execute($user);
|
||||||
|
$order = Order::where('id', $request->input("orderId"))->first();
|
||||||
|
|
||||||
|
return $this->response(['access_token' => $token, 'redirect_url' => route('order.show' , $order->reference)]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Accounts\DataTransferObjects;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Classes\General\Interfaces\DataTransferObject;
|
||||||
|
|
||||||
|
class KeyValuePairObject implements DataTransferObject
|
||||||
|
{
|
||||||
|
/** @var string */
|
||||||
|
private $key;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $value;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* KeyValuePairObject constructor.
|
||||||
|
* @param string $key
|
||||||
|
* @param string $value
|
||||||
|
*/
|
||||||
|
public function __construct(string $key, string $value)
|
||||||
|
{
|
||||||
|
$this->key = $key;
|
||||||
|
$this->value = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getKey(): string
|
||||||
|
{
|
||||||
|
return $this->key;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getValue(): string
|
||||||
|
{
|
||||||
|
return $this->value;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Accounts\Processors;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\App;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
class RegisterOnExchangeProcessor
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @return string
|
||||||
|
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
||||||
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
|
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||||
|
*/
|
||||||
|
public function execute(Request $request, $companyModuleId) {
|
||||||
|
if (App::environment(['production'])) {
|
||||||
|
dd("Delete this line before push to production");
|
||||||
|
$url = 'https://exchange.cief-malaysia.com/api/v1/account/registration/registration';
|
||||||
|
} else if (App::environment(['local'])) {
|
||||||
|
$url = 'http://127.0.0.1:8000/api/v1/account/registration/registration';
|
||||||
|
} else {
|
||||||
|
$url = 'https://dev.exchange.cief-malaysia.com/api/v1/account/registration/registration';
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
$client = new \GuzzleHttp\Client(['verify' => false]);
|
||||||
|
$formParams = $request->toArray();
|
||||||
|
$formParams['shipping_company_module_id'] = $companyModuleId;
|
||||||
|
$response = $client->request('POST', $url, ['form_params' => $formParams]);
|
||||||
|
$body = $response->getBody();
|
||||||
|
$contents = json_decode($body, true);
|
||||||
|
$payload = $contents['payload'];
|
||||||
|
$token = explode('.', $payload['access_token'])[1];
|
||||||
|
$decodedToken = base64_decode($token);
|
||||||
|
$exchangeUser = json_decode($decodedToken, true)['user'];
|
||||||
|
|
||||||
|
return $exchangeUser['company_id'];
|
||||||
|
} catch(\GuzzleHttp\Exception\RequestException $exception){
|
||||||
|
Log::error($exception->getResponse()->getBody()->getContents());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Accounts\Services;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
|
||||||
|
use App\Classes\General\Interfaces\KeyValueInterface;
|
||||||
|
use App\Classes\Modules\Accounts\DataTransferObjects\KeyValuePairObject;
|
||||||
|
use App\Models\KeyValuePair;
|
||||||
|
|
||||||
|
class CreatesKeyValuePair extends AbstractUpdateRelationshipRecord
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param KeyValueInterface $kv
|
||||||
|
* @param KeyValuePairObject $object
|
||||||
|
* @return \Illuminate\Database\Eloquent\Model
|
||||||
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
|
*/
|
||||||
|
|
||||||
|
public function execute(KeyValueInterface $kv, KeyValuePairObject $object) {
|
||||||
|
$model = new KeyValuePair();
|
||||||
|
$model->key = $object->getKey();
|
||||||
|
$model->value = $object->getValue();
|
||||||
|
|
||||||
|
return $this->handler($kv->attributes(), $model);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
+81
@@ -0,0 +1,81 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Accounts\Services;
|
||||||
|
|
||||||
|
use App\Classes\Exceptions\InternalServerErrorException;
|
||||||
|
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
|
||||||
|
use App\Classes\ValueObjects\Constants\RoleTypes;
|
||||||
|
use App\Models\Company;
|
||||||
|
use App\Models\Role;
|
||||||
|
use App\Models\User;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Tymon\JWTAuth\JWT;
|
||||||
|
|
||||||
|
class GeneratesAuthenticationTokenWithExchangeBookingId {
|
||||||
|
|
||||||
|
/** @var JWT */
|
||||||
|
private $builder;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GeneratesAuthenticationTokenWithExchangeBookingId constructor.
|
||||||
|
* @param JWT $builder
|
||||||
|
*/
|
||||||
|
public function __construct(JWT $builder) {
|
||||||
|
$this->builder = $builder;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param User $user
|
||||||
|
* @param bool $rememberUser
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function execute(User $user, $bookingId): string {
|
||||||
|
|
||||||
|
$this->builder->manager()->setBlacklistEnabled(false);
|
||||||
|
|
||||||
|
// generate token for the customer
|
||||||
|
$this->builder->factory()->setTTL(Carbon::now()->addDay()->timestamp);
|
||||||
|
|
||||||
|
// set the claim based on the object
|
||||||
|
$this->setTokenClaims($user, $bookingId);
|
||||||
|
|
||||||
|
return $this->builder->fromUser($user);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param User $user
|
||||||
|
*/
|
||||||
|
private function setTokenClaims(User $user, $bookingId): void {
|
||||||
|
|
||||||
|
$claims = [
|
||||||
|
'id' => $user->id,
|
||||||
|
'name' => $user->name,
|
||||||
|
'email' => $user->email,
|
||||||
|
'type' => $user->type,
|
||||||
|
'status' => $user->status
|
||||||
|
];
|
||||||
|
|
||||||
|
if($user->type === RoleTypes::USER) {
|
||||||
|
|
||||||
|
/** @var Company $companyModule */
|
||||||
|
$companyModule = $user->companyModule()->first();
|
||||||
|
|
||||||
|
$claims = array_merge($claims, [
|
||||||
|
'company_id' => $companyModule->company_id,
|
||||||
|
'company_module_id' => $companyModule->id,
|
||||||
|
'company_module_type' => $companyModule->type,
|
||||||
|
'company_name' => $companyModule->name,
|
||||||
|
'company_marking' => $companyModule->type !== 8 ? $companyModule->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference : 'HWT',
|
||||||
|
'exchange_booking_id' => $bookingId
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->builder->factory()->customClaims(['user' => $claims]);
|
||||||
|
|
||||||
|
|
||||||
|
$this->builder->factory()->buildClaimsCollection();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -26,7 +26,7 @@ class CanAuthenticateUser extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@@ -54,4 +54,4 @@ class CanAuthenticateUser extends AbstractRule
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ class CanCreateUser extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
// TODO Set Authorization rules
|
// TODO Set Authorization rules
|
||||||
return true;
|
return true;
|
||||||
@@ -54,4 +54,4 @@ class CanCreateUser extends AbstractRule
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ class CanCrossAuthenticateUser extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@@ -51,4 +51,4 @@ class CanCrossAuthenticateUser extends AbstractRule
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ class CanDeleteUser extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
// TODO Set Authorization rules
|
// TODO Set Authorization rules
|
||||||
return true;
|
return true;
|
||||||
@@ -37,4 +37,4 @@ class CanDeleteUser extends AbstractRule
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ class CanFetchUser extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@@ -39,4 +39,4 @@ class CanFetchUser extends AbstractRule
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ class CanGeneratePasswordReset extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@@ -62,4 +62,4 @@ class CanGeneratePasswordReset extends AbstractRule
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ class CanListUsers extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@@ -39,4 +39,4 @@ class CanListUsers extends AbstractRule
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class CanRegisterUser extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
// TODO Set Authorization rules
|
// TODO Set Authorization rules
|
||||||
return true;
|
return true;
|
||||||
@@ -48,4 +48,4 @@ class CanRegisterUser extends AbstractRule
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ class CanResetPassword extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@@ -62,4 +62,4 @@ class CanResetPassword extends AbstractRule
|
|||||||
return $this->passwordResetTokenExists->execute($object->getToken());
|
return $this->passwordResetTokenExists->execute($object->getToken());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ class CanUpdateUser extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
// TODO Set Authorization rules
|
// TODO Set Authorization rules
|
||||||
return true;
|
return true;
|
||||||
@@ -54,4 +54,4 @@ class CanUpdateUser extends AbstractRule
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
|
|||||||
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\Classes\ValueObjects\Constants\ApprovalStatus;
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
|
use App\Classes\ValueObjects\Constants\RemarkTypes;
|
||||||
use App\Http\Resources\AddressResource;
|
use App\Http\Resources\AddressResource;
|
||||||
use App\Models\Address;
|
use App\Models\Address;
|
||||||
use App\Transformers\AddressTransformer;
|
use App\Transformers\AddressTransformer;
|
||||||
@@ -110,6 +111,15 @@ class CreateAddressLogic extends AbstractControllerLogic
|
|||||||
->parseIncludes('remark')
|
->parseIncludes('remark')
|
||||||
->respond(200, [], JSON_PRETTY_PRINT);*/
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
|
$addressExtraFields = [
|
||||||
|
'property_type' => $request->input('property_type'),
|
||||||
|
'tools_required_unload' => $request->input('tools_required_unload'),
|
||||||
|
'pickup_time_from' => $request->input('pickup_time_from'),
|
||||||
|
'pickup_time_to' => $request->input('pickup_time_to'),
|
||||||
|
];
|
||||||
|
|
||||||
|
$addressExtraFieldsObject = new RemarkObject(json_encode($addressExtraFields), Auth()->user()->id, RemarkTypes::ADDRESS_EXTRA_COLUMNS);
|
||||||
|
$this->createRemarkProcessor->execute($address, $addressExtraFieldsObject);
|
||||||
|
|
||||||
return $this->resourceResponse(new AddressResource($address));
|
return $this->resourceResponse(new AddressResource($address));
|
||||||
|
|
||||||
|
|||||||
@@ -15,11 +15,13 @@ use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
|
|||||||
use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor;
|
use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor;
|
||||||
use App\Classes\ValueObjects\Constants\AddressType;
|
use App\Classes\ValueObjects\Constants\AddressType;
|
||||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
|
use App\Classes\ValueObjects\Constants\RemarkTypes;
|
||||||
use App\Http\Resources\AddressResource;
|
use App\Http\Resources\AddressResource;
|
||||||
use App\Models\Address;
|
use App\Models\Address;
|
||||||
use App\Transformers\AddressTransformer;
|
use App\Transformers\AddressTransformer;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Carbon\Carbon;
|
||||||
|
|
||||||
class UpdateAddressLogic extends AbstractControllerLogic
|
class UpdateAddressLogic extends AbstractControllerLogic
|
||||||
{
|
{
|
||||||
@@ -110,6 +112,25 @@ class UpdateAddressLogic extends AbstractControllerLogic
|
|||||||
->item($address, new AddressTransformer())
|
->item($address, new AddressTransformer())
|
||||||
->parseIncludes('remark')
|
->parseIncludes('remark')
|
||||||
->respond(200, [], JSON_PRETTY_PRINT);*/
|
->respond(200, [], JSON_PRETTY_PRINT);*/
|
||||||
|
|
||||||
|
if ($request->input('pickup_time_to') <= $request->input('pickup_time_from')) {
|
||||||
|
$pickupTimeFrom = Carbon::parse($request->input('pickup_time_from'));
|
||||||
|
$request->merge([
|
||||||
|
'pickup_time_to' => $pickupTimeFrom->addHour()->format('H:i') // Format to hh:mm
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
$addressExtraFields = [
|
||||||
|
'property_type' => $request->input('property_type'),
|
||||||
|
'additional_request' => $request->input('additional_request'),
|
||||||
|
'receive_goods_working_hours' => $request->input('receive_goods_working_hours'),
|
||||||
|
'receive_goods_after_hours' => $request->input('receive_goods_after_hours'),
|
||||||
|
'receive_goods_on_saturday' => $request->input('receive_goods_on_saturday'),
|
||||||
|
];
|
||||||
|
|
||||||
|
$address->addressExtraFields()->delete();
|
||||||
|
$addressExtraFieldsObject = new RemarkObject(json_encode($addressExtraFields), Auth()->user()->id, RemarkTypes::ADDRESS_EXTRA_COLUMNS);
|
||||||
|
$this->createRemarkProcessor->execute($address, $addressExtraFieldsObject);
|
||||||
|
|
||||||
return $this->resourceResponse(new AddressResource($address));
|
return $this->resourceResponse(new AddressResource($address));
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ class CanCreateAddress extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
// TODO Set Authorization rules
|
// TODO Set Authorization rules
|
||||||
return true;
|
return true;
|
||||||
@@ -54,4 +54,4 @@ class CanCreateAddress extends AbstractRule
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ class CanDeleteAddress extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
// TODO Set Authorization rules
|
// TODO Set Authorization rules
|
||||||
return true;
|
return true;
|
||||||
@@ -40,4 +40,4 @@ class CanDeleteAddress extends AbstractRule
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ class CanFetchAddress extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
// TODO Set Authorization rules
|
// TODO Set Authorization rules
|
||||||
return true;
|
return true;
|
||||||
@@ -40,4 +40,4 @@ class CanFetchAddress extends AbstractRule
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ class CanListAddresses extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
// TODO Set Authorization rules
|
// TODO Set Authorization rules
|
||||||
return true;
|
return true;
|
||||||
@@ -40,4 +40,4 @@ class CanListAddresses extends AbstractRule
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ class CanUpdateAddress extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
// TODO Set Authorization rules
|
// TODO Set Authorization rules
|
||||||
return true;
|
return true;
|
||||||
@@ -54,4 +54,4 @@ class CanUpdateAddress extends AbstractRule
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ class AssignsAnnouncementToSegment extends AbstractUpdateRecord
|
|||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$announcement->segments()->attach($segment);
|
$announcement->segments()->attach($segment, ['created_at' => now(), 'updated_at' => now()]);
|
||||||
|
|
||||||
return $announcement;
|
return $announcement;
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ class CanAssignSegment extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
// TODO Set Authorization rules
|
// TODO Set Authorization rules
|
||||||
return true;
|
return true;
|
||||||
@@ -37,4 +37,4 @@ class CanAssignSegment extends AbstractRule
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class CanCreateAnnouncement extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -47,4 +47,4 @@ class CanCreateAnnouncement extends AbstractRule
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ class CanDeleteAnnouncement extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
// TODO Set Authorization rules
|
// TODO Set Authorization rules
|
||||||
return true;
|
return true;
|
||||||
@@ -37,4 +37,4 @@ class CanDeleteAnnouncement extends AbstractRule
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ class CanListAnnouncements extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ class CanUpdateAnnouncement extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
// TODO Set Authorization rules
|
// TODO Set Authorization rules
|
||||||
return true;
|
return true;
|
||||||
@@ -51,4 +51,4 @@ class CanUpdateAnnouncement extends AbstractRule
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class CanCreateBank extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -47,4 +47,4 @@ class CanCreateBank extends AbstractRule
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ class CanDeleteBank extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
// TODO Set Authorization rules
|
// TODO Set Authorization rules
|
||||||
return true;
|
return true;
|
||||||
@@ -37,4 +37,4 @@ class CanDeleteBank extends AbstractRule
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ class CanListBanks extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -34,4 +34,4 @@ class CanListBanks extends AbstractRule
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ class CanUpdateBank extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
// TODO Set Authorization rules
|
// TODO Set Authorization rules
|
||||||
return true;
|
return true;
|
||||||
@@ -51,4 +51,4 @@ class CanUpdateBank extends AbstractRule
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,14 +14,17 @@ use App\Classes\Exceptions\MalformedRequestException;
|
|||||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
use App\Classes\Modules\Billplzs\Services\GetBillplzBill;
|
use App\Classes\Modules\Billplzs\Services\GetBillplzBill;
|
||||||
use App\Classes\Modules\Billplzs\DataTransferObjects\BillplzXSignatureObject;
|
use App\Classes\Modules\Billplzs\DataTransferObjects\BillplzXSignatureObject;
|
||||||
|
use App\Classes\Modules\Billplzs\Processors\CallbackBillplzProcessor;
|
||||||
use App\Classes\Modules\Transactions\Services\FetchesTransaction;
|
use App\Classes\Modules\Transactions\Services\FetchesTransaction;
|
||||||
use App\Classes\Modules\Transactions\Processors\CreatePaymentTransactionProcessor;
|
use App\Classes\Modules\Transactions\Processors\CreatePaymentTransactionProcessor;
|
||||||
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
|
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
|
||||||
|
use App\Classes\Modules\Transactions\Processors\CheckStorageInvoiceTransactionProcessor;
|
||||||
use App\Classes\ValueObjects\Constants\PaymentMethodType;
|
use App\Classes\ValueObjects\Constants\PaymentMethodType;
|
||||||
use App\Classes\ValueObjects\Constants\TransactionType;
|
use App\Classes\ValueObjects\Constants\TransactionType;
|
||||||
use App\Models\Group;
|
use App\Models\Group;
|
||||||
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;
|
||||||
|
|
||||||
class CallbackBillplzLogic
|
class CallbackBillplzLogic
|
||||||
{
|
{
|
||||||
@@ -46,6 +49,12 @@ class CallbackBillplzLogic
|
|||||||
/** @var CreatePaymentTransactionProcessor */
|
/** @var CreatePaymentTransactionProcessor */
|
||||||
private $createPaymentTransactionProcessor;
|
private $createPaymentTransactionProcessor;
|
||||||
|
|
||||||
|
/** @var CallbackBillplzProcessor */
|
||||||
|
private $callbackBillplzProcessor;
|
||||||
|
|
||||||
|
/** @var CheckStorageInvoiceTransactionProcessor */
|
||||||
|
private $storageInvoiceTransactionProcessor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CallbackBillplzLogic constructor.
|
* CallbackBillplzLogic constructor.
|
||||||
* @param GetBillplzBill $getBillplzBill
|
* @param GetBillplzBill $getBillplzBill
|
||||||
@@ -54,8 +63,10 @@ class CallbackBillplzLogic
|
|||||||
* @param UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor
|
* @param UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor
|
||||||
* @param UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor
|
* @param UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor
|
||||||
* @param CreatePaymentTransactionProcessor $createPaymentTransactionProcessor
|
* @param CreatePaymentTransactionProcessor $createPaymentTransactionProcessor
|
||||||
|
* @param CallbackBillplzProcessor $callbackBillplzProcessor
|
||||||
|
* @param CheckStorageInvoiceTransactionProcessor $storageInvoiceTransactionProcessor
|
||||||
*/
|
*/
|
||||||
public function __construct(GetBillplzBill $getBillplzBill, FetchesTransaction $fetchesTransaction, UpdatesTransactionStatus $updatesTransactionStatus, UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor, UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor, UpdatesWalletBalance $updatesWalletBalance, CreatePaymentTransactionProcessor $createPaymentTransactionProcessor)
|
public function __construct(GetBillplzBill $getBillplzBill, FetchesTransaction $fetchesTransaction, UpdatesTransactionStatus $updatesTransactionStatus, UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor, UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor, UpdatesWalletBalance $updatesWalletBalance, CreatePaymentTransactionProcessor $createPaymentTransactionProcessor, CallbackBillplzProcessor $callbackBillplzProcessor, CheckStorageInvoiceTransactionProcessor $storageInvoiceTransactionProcessor)
|
||||||
{
|
{
|
||||||
$this->getBillplzBill = $getBillplzBill;
|
$this->getBillplzBill = $getBillplzBill;
|
||||||
$this->fetchesTransaction = $fetchesTransaction;
|
$this->fetchesTransaction = $fetchesTransaction;
|
||||||
@@ -64,6 +75,8 @@ class CallbackBillplzLogic
|
|||||||
$this->updateDoFromYDPortalProcessor = $updateDoFromYDPortalProcessor;
|
$this->updateDoFromYDPortalProcessor = $updateDoFromYDPortalProcessor;
|
||||||
$this->updatesWalletBalance = $updatesWalletBalance;
|
$this->updatesWalletBalance = $updatesWalletBalance;
|
||||||
$this->createPaymentTransactionProcessor = $createPaymentTransactionProcessor;
|
$this->createPaymentTransactionProcessor = $createPaymentTransactionProcessor;
|
||||||
|
$this->callbackBillplzProcessor = $callbackBillplzProcessor;
|
||||||
|
$this->storageInvoiceTransactionProcessor = $storageInvoiceTransactionProcessor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -103,44 +116,13 @@ class CallbackBillplzLogic
|
|||||||
$status = $billplzXSignatureObject->getStatus() === 'failed' ? ApprovalStatus::REJECTED : ApprovalStatus::PENDING_VERIFICATION;
|
$status = $billplzXSignatureObject->getStatus() === 'failed' ? ApprovalStatus::REJECTED : ApprovalStatus::PENDING_VERIFICATION;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Log::info('Debug billPlz status: '.$status);
|
||||||
|
|
||||||
$token = Auth::fromUser(User::find(1));
|
$token = Auth::fromUser(User::find(1));
|
||||||
$request->headers->set('Authorization', 'Bearer '.$token);
|
$request->headers->set('Authorization', 'Bearer '.$token);
|
||||||
|
|
||||||
// check if is wallet top up
|
$this->storageInvoiceBackDoorPreventionCheck($transaction, $status);
|
||||||
if($transaction->owner instanceof Wallet && $status === ApprovalStatus::APPROVED &&!in_array($transaction->status, [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])) {
|
$result = $this->callbackBillplzProcessor->execute($transaction, $status);
|
||||||
$this->updatesWalletBalance->execute($transaction->owner, $transaction->amount);
|
|
||||||
}
|
|
||||||
|
|
||||||
// group payment
|
|
||||||
if ($transaction->type == TransactionType::GROUP_PAYMENT && $status === ApprovalStatus::APPROVED &&!in_array($transaction->status, [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])) {
|
|
||||||
$group = Group::where('reference', $billplzXSignatureObject->getBillPlzId())->first();
|
|
||||||
|
|
||||||
foreach($group->groupTransactions as $groupTransaction) {
|
|
||||||
$invoice = $groupTransaction->transaction;
|
|
||||||
$this->createPaymentTransactionProcessor->execute($invoice, PaymentMethodType::WALLET, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
$group->status = $status;
|
|
||||||
$group->save();
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->updatesTransactionStatus->execute($transaction, $status);
|
|
||||||
|
|
||||||
if (!$transaction->owner instanceof Wallet) {
|
|
||||||
$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);
|
|
||||||
|
|
||||||
$packingList->status = ApprovalStatus::APPROVED;
|
|
||||||
$packingList->save();
|
|
||||||
|
|
||||||
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;
|
$company_module_marking = $transaction->owner->owner->connections? $transaction->owner->owner->connections->first()->invitee_reference: null;
|
||||||
|
|
||||||
@@ -151,6 +133,22 @@ class CallbackBillplzLogic
|
|||||||
$company_module_marking = $order->companyModule->connections? $order->companyModule->connections->first()->invitee_reference: null;
|
$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 ?? null, 'company_module_marking' => $company_module_marking ?? null, '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, 'result' => $result]);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function storageInvoiceBackDoorPreventionCheck($transaction, $status){
|
||||||
|
if ($transaction->owner instanceof Wallet && $status === ApprovalStatus::APPROVED) {
|
||||||
|
$group = Group::where('reference', $transaction->payment_reference)->first();
|
||||||
|
if ($group) {
|
||||||
|
foreach ($group->groupTransactions as $groupTransaction) {
|
||||||
|
$invoice = $groupTransaction->transaction;
|
||||||
|
$pL = $invoice->owner;
|
||||||
|
$order = $pL->owner;
|
||||||
|
if($order){
|
||||||
|
$this->storageInvoiceTransactionProcessor->executeOrder($order);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,140 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Billplzs\Processors;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Models\Wallet;
|
||||||
|
use App\Models\Group;
|
||||||
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
|
use App\Classes\ValueObjects\Constants\PaymentMethodType;
|
||||||
|
use App\Classes\Modules\Transactions\Processors\CreatePaymentTransactionProcessor;
|
||||||
|
use App\Classes\Modules\Transactions\Processors\ReleaseGoodsToCustomerProcessor;
|
||||||
|
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
|
||||||
|
use App\Classes\Modules\Wallets\Services\UpdatesWalletBalance;
|
||||||
|
use App\Classes\Modules\Orders\Processors\UpdateDoFromVTPortalProcessor;
|
||||||
|
use App\Classes\Modules\Orders\Processors\UpdateDoFromYDPortalProcessor;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
//Date: 20240817
|
||||||
|
//This Processor is used for one time data patching with OneTimeTransactionFixBillplzFailedCallback.php
|
||||||
|
class CallbackBillplzDataPatchProcessor
|
||||||
|
{
|
||||||
|
/** @var UpdatesTransactionStatus */
|
||||||
|
private $updatesTransactionStatus;
|
||||||
|
|
||||||
|
/** @var UpdateDoFromVTPortalProcessor */
|
||||||
|
private $updateDoFromVTPortalProcessor;
|
||||||
|
|
||||||
|
/** @var UpdateDoFromYDPortalProcessor */
|
||||||
|
private $updateDoFromYDPortalProcessor;
|
||||||
|
|
||||||
|
/** @var UpdatesWalletBalance */
|
||||||
|
private $updatesWalletBalance;
|
||||||
|
|
||||||
|
/** @var CreatePaymentTransactionProcessor */
|
||||||
|
private $createPaymentTransactionProcessor;
|
||||||
|
|
||||||
|
/** @var ReleaseGoodsToCustomerProcessor */
|
||||||
|
private $releaseGoodsToCustomerProcessor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CallbackBillplzDataPatchProcessor constructor.
|
||||||
|
* @param UpdatesTransactionStatus $updatesTransactionStatus
|
||||||
|
* @param UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor
|
||||||
|
* @param UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor
|
||||||
|
* @param UpdatesWalletBalance $updatesWalletBalance
|
||||||
|
* @param CreatePaymentTransactionProcessor $createPaymentTransactionProcessor
|
||||||
|
* @param ReleaseGoodsToCustomerProcessor $releaseGoodsToCustomerProcessor
|
||||||
|
*/
|
||||||
|
public function __construct(UpdatesTransactionStatus $updatesTransactionStatus, UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor, UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor, UpdatesWalletBalance $updatesWalletBalance, CreatePaymentTransactionProcessor $createPaymentTransactionProcessor, ReleaseGoodsToCustomerProcessor $releaseGoodsToCustomerProcessor)
|
||||||
|
{
|
||||||
|
$this->updatesTransactionStatus = $updatesTransactionStatus;
|
||||||
|
$this->updateDoFromVTPortalProcessor = $updateDoFromVTPortalProcessor;
|
||||||
|
$this->updateDoFromYDPortalProcessor = $updateDoFromYDPortalProcessor;
|
||||||
|
$this->updatesWalletBalance = $updatesWalletBalance;
|
||||||
|
$this->createPaymentTransactionProcessor = $createPaymentTransactionProcessor;
|
||||||
|
$this->releaseGoodsToCustomerProcessor = $releaseGoodsToCustomerProcessor;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function execute($transaction, $status)
|
||||||
|
{
|
||||||
|
$invoice = $transaction->owner;
|
||||||
|
$packingList = $invoice->owner;
|
||||||
|
|
||||||
|
$proceed = $this->checkForGroupPayment($transaction);
|
||||||
|
if(!$proceed) return false;
|
||||||
|
|
||||||
|
$this->updatesTransactionStatus->execute($transaction, $status);
|
||||||
|
|
||||||
|
Log::info('CallbackBillplzDataPatchProcessor 1');
|
||||||
|
|
||||||
|
// check if is wallet top up
|
||||||
|
if ($transaction->owner instanceof Wallet && $status === ApprovalStatus::APPROVED) {
|
||||||
|
|
||||||
|
Log::info('CallbackBillplzDataPatchProcessor 2');
|
||||||
|
|
||||||
|
$this->updatesWalletBalance->execute($transaction->owner, $transaction->amount);
|
||||||
|
|
||||||
|
$group = Group::where('reference', $transaction->payment_reference)->first();
|
||||||
|
|
||||||
|
// check if is group payment
|
||||||
|
if ($group) {
|
||||||
|
foreach ($group->groupTransactions as $groupTransaction) {
|
||||||
|
$invoice = $groupTransaction->transaction;
|
||||||
|
Log::info('CallbackBillplzDataPatchProcessor 3: '.json_encode($invoice));
|
||||||
|
|
||||||
|
//if($invoice->status !== ApprovalStatus::COMPLETED){
|
||||||
|
// $paymentTransaction = $this->createPaymentTransactionProcessor->execute($invoice, PaymentMethodType::WALLET, null, false);
|
||||||
|
|
||||||
|
// if($paymentTransaction && $paymentTransaction->status == ApprovalStatus::APPROVED){
|
||||||
|
$pL = $invoice->owner;
|
||||||
|
$this->releaseGoodsToCustomerProcessor->execute($pL, $invoice, true);
|
||||||
|
//}
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
|
$group->status = $status;
|
||||||
|
$group->save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$transaction->owner instanceof Wallet) {
|
||||||
|
Log::info('CallbackBillplzDataPatchProcessor 3');
|
||||||
|
$this->releaseGoodsToCustomerProcessor->execute($packingList, $invoice);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function checkForGroupPayment($transaction){
|
||||||
|
//This check is targetting group payment that expired and soft deleted
|
||||||
|
//command:check-storage-invoices must already run for this part of the code to work properly
|
||||||
|
$group = Group::withTrashed()->where('reference', $transaction->payment_reference)->first();
|
||||||
|
if ($group) {
|
||||||
|
$totalAmountToBePaid = 0;
|
||||||
|
$actualAmountPaid = $transaction->amount;
|
||||||
|
|
||||||
|
foreach ($group->groupTransactions as $groupTransaction) {
|
||||||
|
$invoice = $groupTransaction->transaction;
|
||||||
|
if($invoice->status !== ApprovalStatus::COMPLETED){
|
||||||
|
$totalAmountToBePaid += $invoice->amount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(($totalAmountToBePaid - $actualAmountPaid) < 0.01){
|
||||||
|
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Log::channel('storage_invoices')->info('Total amount from current transaction: '.$totalAmountToBePaid); //cief todo: to be removed
|
||||||
|
Log::channel('storage_invoices')->info('Total amount from paid transaction: '.$transaction->amount); //cief todo: to be removed
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,131 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Billplzs\Processors;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Models\Wallet;
|
||||||
|
use App\Models\Group;
|
||||||
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||||
|
use App\Classes\ValueObjects\Constants\PaymentMethodType;
|
||||||
|
use App\Classes\Modules\Transactions\Processors\CreatePaymentTransactionProcessor;
|
||||||
|
use App\Classes\Modules\Transactions\Processors\ReleaseGoodsToCustomerProcessor;
|
||||||
|
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
|
||||||
|
use App\Classes\Modules\Wallets\Services\UpdatesWalletBalance;
|
||||||
|
use App\Classes\Modules\Orders\Processors\UpdateDoFromVTPortalProcessor;
|
||||||
|
use App\Classes\Modules\Orders\Processors\UpdateDoFromYDPortalProcessor;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
class CallbackBillplzProcessor
|
||||||
|
{
|
||||||
|
/** @var UpdatesTransactionStatus */
|
||||||
|
private $updatesTransactionStatus;
|
||||||
|
|
||||||
|
/** @var UpdateDoFromVTPortalProcessor */
|
||||||
|
private $updateDoFromVTPortalProcessor;
|
||||||
|
|
||||||
|
/** @var UpdateDoFromYDPortalProcessor */
|
||||||
|
private $updateDoFromYDPortalProcessor;
|
||||||
|
|
||||||
|
/** @var UpdatesWalletBalance */
|
||||||
|
private $updatesWalletBalance;
|
||||||
|
|
||||||
|
/** @var CreatePaymentTransactionProcessor */
|
||||||
|
private $createPaymentTransactionProcessor;
|
||||||
|
|
||||||
|
/** @var ReleaseGoodsToCustomerProcessor */
|
||||||
|
private $releaseGoodsToCustomerProcessor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CallbackBillplzProcessor constructor.
|
||||||
|
* @param UpdatesTransactionStatus $updatesTransactionStatus
|
||||||
|
* @param UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor
|
||||||
|
* @param UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor
|
||||||
|
* @param UpdatesWalletBalance $updatesWalletBalance
|
||||||
|
* @param CreatePaymentTransactionProcessor $createPaymentTransactionProcessor
|
||||||
|
* @param ReleaseGoodsToCustomerProcessor $releaseGoodsToCustomerProcessor
|
||||||
|
*/
|
||||||
|
public function __construct(UpdatesTransactionStatus $updatesTransactionStatus, UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor, UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor, UpdatesWalletBalance $updatesWalletBalance, CreatePaymentTransactionProcessor $createPaymentTransactionProcessor, ReleaseGoodsToCustomerProcessor $releaseGoodsToCustomerProcessor)
|
||||||
|
{
|
||||||
|
$this->updatesTransactionStatus = $updatesTransactionStatus;
|
||||||
|
$this->updateDoFromVTPortalProcessor = $updateDoFromVTPortalProcessor;
|
||||||
|
$this->updateDoFromYDPortalProcessor = $updateDoFromYDPortalProcessor;
|
||||||
|
$this->updatesWalletBalance = $updatesWalletBalance;
|
||||||
|
$this->createPaymentTransactionProcessor = $createPaymentTransactionProcessor;
|
||||||
|
$this->releaseGoodsToCustomerProcessor = $releaseGoodsToCustomerProcessor;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function execute($transaction, $status)
|
||||||
|
{
|
||||||
|
$invoice = $transaction->owner;
|
||||||
|
$packingList = $invoice->owner;
|
||||||
|
|
||||||
|
$proceed = $this->checkForGroupPayment($transaction);
|
||||||
|
if(!$proceed) return false;
|
||||||
|
|
||||||
|
$this->updatesTransactionStatus->execute($transaction, $status);
|
||||||
|
|
||||||
|
// check if is wallet top up
|
||||||
|
if ($transaction->owner instanceof Wallet && $status === ApprovalStatus::APPROVED) {
|
||||||
|
|
||||||
|
$this->updatesWalletBalance->execute($transaction->owner, $transaction->amount);
|
||||||
|
|
||||||
|
$group = Group::where('reference', $transaction->payment_reference)->first();
|
||||||
|
|
||||||
|
// check if is group payment
|
||||||
|
if ($group) {
|
||||||
|
foreach ($group->groupTransactions as $groupTransaction) {
|
||||||
|
$invoice = $groupTransaction->transaction;
|
||||||
|
if($invoice->status !== ApprovalStatus::COMPLETED){
|
||||||
|
$paymentTransaction = $this->createPaymentTransactionProcessor->execute($invoice, PaymentMethodType::WALLET, null, false);
|
||||||
|
|
||||||
|
if($paymentTransaction && $paymentTransaction->status == ApprovalStatus::APPROVED){
|
||||||
|
$pL = $invoice->owner;
|
||||||
|
$this->releaseGoodsToCustomerProcessor->execute($pL, $invoice);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$group->status = $status;
|
||||||
|
$group->save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$transaction->owner instanceof Wallet) {
|
||||||
|
$this->releaseGoodsToCustomerProcessor->execute($packingList, $invoice);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function checkForGroupPayment($transaction){
|
||||||
|
//This check is targetting group payment that expired and soft deleted
|
||||||
|
//command:check-storage-invoices must already run for this part of the code to work properly
|
||||||
|
$group = Group::withTrashed()->where('reference', $transaction->payment_reference)->first();
|
||||||
|
if ($group) {
|
||||||
|
$totalAmountToBePaid = 0;
|
||||||
|
$actualAmountPaid = $transaction->amount;
|
||||||
|
|
||||||
|
foreach ($group->groupTransactions as $groupTransaction) {
|
||||||
|
$invoice = $groupTransaction->transaction;
|
||||||
|
if($invoice->status !== ApprovalStatus::COMPLETED){
|
||||||
|
$totalAmountToBePaid += $invoice->amount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(($totalAmountToBePaid - $actualAmountPaid) < 0.01){
|
||||||
|
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Log::channel('storage_invoices')->info('Total amount from current transaction: '.$totalAmountToBePaid); //cief todo: to be removed
|
||||||
|
Log::channel('storage_invoices')->info('Total amount from paid transaction: '.$transaction->amount); //cief todo: to be removed
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Billplzs\Services;
|
||||||
|
|
||||||
|
use Illuminate\Support\Facades\Http;
|
||||||
|
use App\Classes\Exceptions\MalformedRequestException;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
class DeletesBillplzBill
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $billID
|
||||||
|
* @throws MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function execute(string $billID) {
|
||||||
|
try{
|
||||||
|
$response = Http::withBasicAuth(config('billplz.api_key').':', '')->delete(config('billplz.base_url').'/api/v3/bills/'.$billID);
|
||||||
|
Log::channel('storage_invoices')->info('DeletesBillplzBill response: '.json_encode($response));
|
||||||
|
|
||||||
|
if($response->successful()){
|
||||||
|
$data = $response->json();
|
||||||
|
|
||||||
|
// $data['url'] = $data['url'].'?auto_submit=true';
|
||||||
|
|
||||||
|
return (object) $data;
|
||||||
|
}else{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}catch(\Exception $exception){
|
||||||
|
throw new MalformedRequestException('Unable to get correct response from billplz server: ' . $exception->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+23
-4
@@ -10,16 +10,18 @@ use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
|||||||
use App\Http\Resources\DocumentResource;
|
use App\Http\Resources\DocumentResource;
|
||||||
|
|
||||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
|
use App\Classes\Modules\Companies\Processors\ApproveIdentificationDocumentOnExchangeProcessor;
|
||||||
use App\Classes\Modules\Documents\Services\FetchesDocument;
|
use App\Classes\Modules\Documents\Services\FetchesDocument;
|
||||||
|
|
||||||
use App\Classes\Modules\Documents\Services\ApprovesDocument;
|
use App\Classes\Modules\Documents\Services\ApprovesDocument;
|
||||||
use App\Classes\Modules\Notifications\DataTransferObjects\NotificationObject;
|
use App\Classes\Modules\Notifications\DataTransferObjects\NotificationObject;
|
||||||
Use App\Classes\Modules\Notifications\Processors\CreateNotificationProcessor;
|
Use App\Classes\Modules\Notifications\Processors\CreateNotificationProcessor;
|
||||||
|
use App\Classes\ValueObjects\Constants\DocumentType;
|
||||||
use App\Models\Document;
|
use App\Models\Document;
|
||||||
|
use App\Models\ExchangeCompanyConnection;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
class ApproveIdentificationDocumentLogic extends AbstractControllerLogic
|
class ApproveIdentificationDocumentLogic extends AbstractControllerLogic
|
||||||
{
|
{
|
||||||
@@ -55,6 +57,9 @@ class ApproveIdentificationDocumentLogic extends AbstractControllerLogic
|
|||||||
/** @var CreateNotificationProcessor */
|
/** @var CreateNotificationProcessor */
|
||||||
private $createNotificationProcessor;
|
private $createNotificationProcessor;
|
||||||
|
|
||||||
|
/** @var ApproveIdentificationDocumentOnExchangeProcessor */
|
||||||
|
private $approveIdentificationDocumentOnExchangeProcessor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ApproveIdentificationDocumentLogic constructor.
|
* ApproveIdentificationDocumentLogic constructor.
|
||||||
* @param CanApproveDocument $canApproveDocument
|
* @param CanApproveDocument $canApproveDocument
|
||||||
@@ -64,8 +69,9 @@ class ApproveIdentificationDocumentLogic extends AbstractControllerLogic
|
|||||||
* @param UpdatesCompanyStatus $updatesCompanyStatus
|
* @param UpdatesCompanyStatus $updatesCompanyStatus
|
||||||
* @param UpdatesOrdersStatus $updatesOrdersStatus
|
* @param UpdatesOrdersStatus $updatesOrdersStatus
|
||||||
* @param CreateNotificationProcessor $createNotificationProcessor
|
* @param CreateNotificationProcessor $createNotificationProcessor
|
||||||
|
* @param ApproveIdentificationDocumentOnExchangeProcessor $approveIdentificationDocumentOnExchangeProcessor
|
||||||
*/
|
*/
|
||||||
public function __construct(CanApproveDocument $canApproveDocument, ApprovesDocument $approvesDocument, RejectsDocument $rejectsDocument, FetchesDocument $fetchesDocument, UpdatesCompanyStatus $updatesCompanyStatus, UpdatesOrdersStatus $updatesOrdersStatus, CreateNotificationProcessor $createNotificationProcessor)
|
public function __construct(CanApproveDocument $canApproveDocument, ApprovesDocument $approvesDocument, RejectsDocument $rejectsDocument, FetchesDocument $fetchesDocument, UpdatesCompanyStatus $updatesCompanyStatus, UpdatesOrdersStatus $updatesOrdersStatus, CreateNotificationProcessor $createNotificationProcessor, ApproveIdentificationDocumentOnExchangeProcessor $approveIdentificationDocumentOnExchangeProcessor)
|
||||||
{
|
{
|
||||||
$this->canApproveDocument = $canApproveDocument;
|
$this->canApproveDocument = $canApproveDocument;
|
||||||
$this->approvesDocument = $approvesDocument;
|
$this->approvesDocument = $approvesDocument;
|
||||||
@@ -74,6 +80,7 @@ class ApproveIdentificationDocumentLogic extends AbstractControllerLogic
|
|||||||
$this->updatesCompanyStatus = $updatesCompanyStatus;
|
$this->updatesCompanyStatus = $updatesCompanyStatus;
|
||||||
$this->updatesOrdersStatus = $updatesOrdersStatus;
|
$this->updatesOrdersStatus = $updatesOrdersStatus;
|
||||||
$this->createNotificationProcessor = $createNotificationProcessor;
|
$this->createNotificationProcessor = $createNotificationProcessor;
|
||||||
|
$this->approveIdentificationDocumentOnExchangeProcessor = $approveIdentificationDocumentOnExchangeProcessor;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -85,11 +92,18 @@ class ApproveIdentificationDocumentLogic extends AbstractControllerLogic
|
|||||||
*/
|
*/
|
||||||
public function logic(Request $request) : JsonResponse
|
public function logic(Request $request) : JsonResponse
|
||||||
{
|
{
|
||||||
|
$documentId = $request->route('document_id');
|
||||||
|
|
||||||
|
if ($request->route('exchange_company_id')) {
|
||||||
|
$companyModule = ExchangeCompanyConnection::where('exchange_company_id', $request->route('exchange_company_id'))->first()->companyModule;
|
||||||
|
$company = $companyModule->company;
|
||||||
|
$documentId = $company->documents()->whereIn('document_type', DocumentType::IDENTIFICATION_DOCUMENTS)->where('status', ApprovalStatus::PENDING_VERIFICATION)->first()->id;
|
||||||
|
}
|
||||||
|
|
||||||
$status = $request->route('status');
|
$status = $request->route('status');
|
||||||
|
|
||||||
/** @var Document $document */
|
/** @var Document $document */
|
||||||
$document = $this->fetchesDocument->execute(['id' => $request->route('document_id')]);
|
$document = $this->fetchesDocument->execute(['id' => $documentId]);
|
||||||
|
|
||||||
$this->canApproveDocument->passes();
|
$this->canApproveDocument->passes();
|
||||||
|
|
||||||
@@ -111,6 +125,11 @@ class ApproveIdentificationDocumentLogic extends AbstractControllerLogic
|
|||||||
$orders = $this->updatesOrdersStatus->execute($document->owner, ApprovalStatus::APPROVED);
|
$orders = $this->updatesOrdersStatus->execute($document->owner, ApprovalStatus::APPROVED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if this request is not calling from exchange portal, then approve the document on exchange portal for this user
|
||||||
|
$companyModule = $document->owner->companyModules()->first();
|
||||||
|
if (!$request->route('exchange_company_id') && $companyModule->exchangeCompanyConnection()->first()) {
|
||||||
|
$this->approveIdentificationDocumentOnExchangeProcessor->execute($request, $companyModule->id, $status);
|
||||||
|
}
|
||||||
|
|
||||||
return $this->resourceResponse(new DocumentResource($document));
|
return $this->resourceResponse(new DocumentResource($document));
|
||||||
|
|
||||||
|
|||||||
+13
-1
@@ -7,6 +7,8 @@ use App\Classes\General\Abstracts\AbstractControllerLogic;
|
|||||||
use App\Classes\Modules\Companies\Processors\AssignConnectionSegmentProcessor;
|
use App\Classes\Modules\Companies\Processors\AssignConnectionSegmentProcessor;
|
||||||
use App\Classes\Modules\Companies\Services\FetchesCompany;
|
use App\Classes\Modules\Companies\Services\FetchesCompany;
|
||||||
use App\Classes\Modules\Companies\Services\FetchesCompanyConnection;
|
use App\Classes\Modules\Companies\Services\FetchesCompanyConnection;
|
||||||
|
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
|
||||||
|
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
|
||||||
use App\Http\Resources\CompanyResource;
|
use App\Http\Resources\CompanyResource;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -33,17 +35,22 @@ class AssignCompanyConnectionToConnectionSegmentLogic extends AbstractController
|
|||||||
/** @var AssignConnectionSegmentProcessor */
|
/** @var AssignConnectionSegmentProcessor */
|
||||||
private $assignCompanyConnectionToConnectionSegmentProcessor;
|
private $assignCompanyConnectionToConnectionSegmentProcessor;
|
||||||
|
|
||||||
|
/** @var CreateContactProcessor */
|
||||||
|
private $createContactProcessor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* AssignCompanyToSegmentLogic constructor.
|
* AssignCompanyToSegmentLogic constructor.
|
||||||
* @param FetchesCompany $fetchesCompany
|
* @param FetchesCompany $fetchesCompany
|
||||||
* @param FetchesCompanyConnection $fetchesCompanyConnection
|
* @param FetchesCompanyConnection $fetchesCompanyConnection
|
||||||
* @param AssignConnectionSegmentProcessor $assignCompanyConnectionToConnectionSegmentProcessor
|
* @param AssignConnectionSegmentProcessor $assignCompanyConnectionToConnectionSegmentProcessor
|
||||||
|
* @param CreateContactProcessor $createContactProcessor
|
||||||
*/
|
*/
|
||||||
public function __construct(FetchesCompany $fetchesCompany, FetchesCompanyConnection $fetchesCompanyConnection, AssignConnectionSegmentProcessor $assignCompanyConnectionToConnectionSegmentProcessor)
|
public function __construct(FetchesCompany $fetchesCompany, FetchesCompanyConnection $fetchesCompanyConnection, AssignConnectionSegmentProcessor $assignCompanyConnectionToConnectionSegmentProcessor, CreateContactProcessor $createContactProcessor)
|
||||||
{
|
{
|
||||||
$this->fetchesCompany = $fetchesCompany;
|
$this->fetchesCompany = $fetchesCompany;
|
||||||
$this->fetchesCompanyConnection = $fetchesCompanyConnection;
|
$this->fetchesCompanyConnection = $fetchesCompanyConnection;
|
||||||
$this->assignCompanyConnectionToConnectionSegmentProcessor = $assignCompanyConnectionToConnectionSegmentProcessor;
|
$this->assignCompanyConnectionToConnectionSegmentProcessor = $assignCompanyConnectionToConnectionSegmentProcessor;
|
||||||
|
$this->createContactProcessor = $createContactProcessor;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -62,6 +69,11 @@ class AssignCompanyConnectionToConnectionSegmentLogic extends AbstractController
|
|||||||
|
|
||||||
$this->assignCompanyConnectionToConnectionSegmentProcessor->execute($companyConnection, $request->input('segment_id'));
|
$this->assignCompanyConnectionToConnectionSegmentProcessor->execute($companyConnection, $request->input('segment_id'));
|
||||||
|
|
||||||
|
if ($request->input('segment_id') == 10 || $request->input('segment_id') == 11) {
|
||||||
|
$contactObject = new ContactObject('Whatsapp: ' . $request->input('name'), $request->input('phone'), null, null);
|
||||||
|
$this->createContactProcessor->execute($contactObject, $company);
|
||||||
|
}
|
||||||
|
|
||||||
return $this->resourceResponse(new CompanyResource($company));
|
return $this->resourceResponse(new CompanyResource($company));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+22
-2
@@ -4,6 +4,7 @@ namespace App\Classes\Modules\Companies\ControllersLogic;
|
|||||||
|
|
||||||
|
|
||||||
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
|
use App\Classes\Modules\Companies\Processors\CreateIdentificationDocumentOnExchangeProcessor;
|
||||||
use App\Classes\Modules\Companies\Services\FetchesCompany;
|
use App\Classes\Modules\Companies\Services\FetchesCompany;
|
||||||
use App\Classes\Modules\Companies\Services\UpdatesCompanyStatus;
|
use App\Classes\Modules\Companies\Services\UpdatesCompanyStatus;
|
||||||
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
|
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
|
||||||
@@ -14,6 +15,7 @@ use App\Classes\ValueObjects\Constants\CompanyType;
|
|||||||
use App\Classes\ValueObjects\Constants\DocumentType;
|
use App\Classes\ValueObjects\Constants\DocumentType;
|
||||||
use App\Models\Company;
|
use App\Models\Company;
|
||||||
use App\Models\Document;
|
use App\Models\Document;
|
||||||
|
use App\Models\ExchangeCompanyConnection;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
@@ -42,6 +44,9 @@ class CreateIdentificationDocumentLogic extends AbstractControllerLogic
|
|||||||
/** @var UpdatesCompanyStatus */
|
/** @var UpdatesCompanyStatus */
|
||||||
private $updatesCompanyStatus;
|
private $updatesCompanyStatus;
|
||||||
|
|
||||||
|
/** @var CreateIdentificationDocumentOnExchangeProcessor */
|
||||||
|
private $createIdentificationDocumentOnExchangeProcessor;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* CreateIdentificationDocumentLogic constructor.
|
* CreateIdentificationDocumentLogic constructor.
|
||||||
@@ -49,13 +54,15 @@ class CreateIdentificationDocumentLogic extends AbstractControllerLogic
|
|||||||
* @param CreatesDocument $createsDocument
|
* @param CreatesDocument $createsDocument
|
||||||
* @param CreatesFiles $createsFile
|
* @param CreatesFiles $createsFile
|
||||||
* @param UpdatesCompanyStatus $updatesCompanyStatus
|
* @param UpdatesCompanyStatus $updatesCompanyStatus
|
||||||
|
* @param CreateIdentificationDocumentOnExchangeProcessor $createIdentificationDocumentOnExchangeProcessor
|
||||||
*/
|
*/
|
||||||
public function __construct(FetchesCompany $fetchesCompany, CreatesDocument $createsDocument, CreatesFiles $createsFile, UpdatesCompanyStatus $updatesCompanyStatus)
|
public function __construct(FetchesCompany $fetchesCompany, CreatesDocument $createsDocument, CreatesFiles $createsFile, UpdatesCompanyStatus $updatesCompanyStatus, CreateIdentificationDocumentOnExchangeProcessor $createIdentificationDocumentOnExchangeProcessor)
|
||||||
{
|
{
|
||||||
$this->fetchesCompany = $fetchesCompany;
|
$this->fetchesCompany = $fetchesCompany;
|
||||||
$this->createsDocument = $createsDocument;
|
$this->createsDocument = $createsDocument;
|
||||||
$this->createsFile = $createsFile;
|
$this->createsFile = $createsFile;
|
||||||
$this->updatesCompanyStatus = $updatesCompanyStatus;
|
$this->updatesCompanyStatus = $updatesCompanyStatus;
|
||||||
|
$this->createIdentificationDocumentOnExchangeProcessor = $createIdentificationDocumentOnExchangeProcessor;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -66,8 +73,15 @@ class CreateIdentificationDocumentLogic extends AbstractControllerLogic
|
|||||||
public function logic(Request $request) : JsonResponse
|
public function logic(Request $request) : JsonResponse
|
||||||
{
|
{
|
||||||
|
|
||||||
|
if ($request->route('exchange_company_id')) {
|
||||||
|
$companyModule = ExchangeCompanyConnection::where('exchange_company_id', $request->route('exchange_company_id'))->first()->companyModule;
|
||||||
|
$companyId = $companyModule->company_id;
|
||||||
|
} else {
|
||||||
|
$companyId = $request->route('id');
|
||||||
|
}
|
||||||
|
|
||||||
/** @var Company $company */
|
/** @var Company $company */
|
||||||
$company = $this->fetchesCompany->execute(['id' => $request->route('id')]);
|
$company = $this->fetchesCompany->execute(['id' => $companyId]);
|
||||||
$object = new DocumentObject($company->type === CompanyType::COMPANY_BUSINESS ?
|
$object = new DocumentObject($company->type === CompanyType::COMPANY_BUSINESS ?
|
||||||
DocumentType::SSM_REGISTRATION : DocumentType::IDENTITY_CARD, $request->input('files'),
|
DocumentType::SSM_REGISTRATION : DocumentType::IDENTITY_CARD, $request->input('files'),
|
||||||
$request->input('identification_no'), ApprovalStatus::PENDING_VERIFICATION, 'identifications');
|
$request->input('identification_no'), ApprovalStatus::PENDING_VERIFICATION, 'identifications');
|
||||||
@@ -78,6 +92,12 @@ class CreateIdentificationDocumentLogic extends AbstractControllerLogic
|
|||||||
|
|
||||||
$this->updatesCompanyStatus->execute($company, ApprovalStatus::PENDING_VERIFICATION);
|
$this->updatesCompanyStatus->execute($company, ApprovalStatus::PENDING_VERIFICATION);
|
||||||
|
|
||||||
|
// create identification on exchange if this request not coming from exchange
|
||||||
|
$companyModule = $company->companyModules()->first();
|
||||||
|
if (!$request->route('exchange_company_id') && $companyModule->exchangeCompanyConnection()->first()) {
|
||||||
|
$this->createIdentificationDocumentOnExchangeProcessor->execute($request, $companyModule->id);
|
||||||
|
}
|
||||||
|
|
||||||
return $this->response([]);
|
return $this->response([]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Companies\ControllersLogic;
|
||||||
|
|
||||||
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
|
use App\Classes\Modules\Companies\Processors\LinkExchangeCompanyProcessor;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class LinkExchangeCompanyLogic extends AbstractControllerLogic
|
||||||
|
{
|
||||||
|
|
||||||
|
protected function notification():array {
|
||||||
|
return [
|
||||||
|
'title' => 'Connect Exchange with Izyim Account',
|
||||||
|
'message' => 'You have successfully connect your exchange account to Izyim Account'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var LinkExchangeCompanyProcessor */
|
||||||
|
private $linkExchangeCompanyProcessor;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* LinkExchangeCompanyLogic constructor.
|
||||||
|
* @param LinkExchangeCompanyProcessor $linkExchangeCompanyProcessor
|
||||||
|
*/
|
||||||
|
public function __construct(LinkExchangeCompanyProcessor $linkExchangeCompanyProcessor)
|
||||||
|
{
|
||||||
|
$this->linkExchangeCompanyProcessor = $linkExchangeCompanyProcessor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @return JsonResponse
|
||||||
|
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
||||||
|
* @throws \App\Classes\Exceptions\AccessUnauthorisedException
|
||||||
|
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||||
|
*/
|
||||||
|
protected function logic(Request $request): JsonResponse {
|
||||||
|
|
||||||
|
return $this->response($this->linkExchangeCompanyProcessor->execute($request));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -3,16 +3,13 @@
|
|||||||
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\ListsCompanies;
|
use App\Classes\Modules\Companies\Services\ListsCompanies;
|
||||||
use App\Classes\Modules\Companies\Standards\Rules\CanListCompanies;
|
use App\Classes\Modules\Companies\Standards\Rules\CanListCompanies;
|
||||||
use App\Transformers\CompanyTransformer;
|
use App\Http\Resources\CompanyResource;
|
||||||
|
use ErrorException;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Spatie\Fractalistic\ArraySerializer;
|
|
||||||
|
|
||||||
class ListCompaniesLogic extends AbstractControllerLogic
|
class ListCompaniesLogic extends AbstractControllerLogic
|
||||||
{
|
{
|
||||||
@@ -48,24 +45,16 @@ class ListCompaniesLogic extends AbstractControllerLogic
|
|||||||
/**
|
/**
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
* @throws AccessForbiddenException
|
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
||||||
* @throws MalformedRequestException
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
* @throws RequestValidationException
|
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||||
*/
|
*/
|
||||||
public function logic(Request $request) : JsonResponse
|
public function logic(Request $request) : JsonResponse
|
||||||
{
|
{
|
||||||
$this->canListCompanies->passes();
|
$this->canListCompanies->passes();
|
||||||
|
|
||||||
$query = $this->listsCompanies->execute($this->listsCompanies->deserializeFilters($request->input('filters')));
|
$query = $this->listsCompanies->execute($this->listsCompanies->deserializeFilters($request->input('filters')));
|
||||||
// return $this->collectionResponse(CompanyResource::collection($query));
|
return $this->collectionResponse(CompanyResource::collection($query));
|
||||||
|
|
||||||
return fractal()
|
|
||||||
->parseIncludes(['owner'])
|
|
||||||
->collection($query, new CompanyTransformer(), "data")
|
|
||||||
->serializeWith(new ArraySerializer())
|
|
||||||
->respond(200, [], JSON_PRETTY_PRINT);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+121
@@ -0,0 +1,121 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Companies\ControllersLogic;
|
||||||
|
|
||||||
|
|
||||||
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
||||||
|
use App\Classes\Modules\Companies\Services\FetchesCompany;
|
||||||
|
use App\Classes\Modules\Companies\Services\UpdatesCompanyModuleIsCreditTerm;
|
||||||
|
use App\Classes\Modules\Companies\Standards\Rules\CanUpdateCompanyModule;
|
||||||
|
use App\Classes\Modules\Transactions\Services\ListsTransactions;
|
||||||
|
use App\Classes\Modules\Transactions\Services\UpdatesTransactionIsWaived;
|
||||||
|
use App\Classes\Modules\Transactions\Processors\CheckStorageInvoiceTransactionProcessor;
|
||||||
|
use App\Classes\ValueObjects\Constants\TransactionType;
|
||||||
|
use App\Models\Order;
|
||||||
|
use Illuminate\Http\JsonResponse;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
class UpdateCompanyCreditTermStatusLogic extends AbstractControllerLogic
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function notification():array {
|
||||||
|
return [
|
||||||
|
'title' => 'Update Company Credit Term Status',
|
||||||
|
'message' => 'You have successfully updated Company Credit Term Status'
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @var FetchesCompany */
|
||||||
|
private $fetchesCompany;
|
||||||
|
|
||||||
|
/** @var UpdatesCompanyModuleIsCreditTerm */
|
||||||
|
private $updatesCompanyModuleIsCreditTerm;
|
||||||
|
|
||||||
|
/** @var CanUpdateCompanyModule */
|
||||||
|
private $canUpdateCompanyModule;
|
||||||
|
|
||||||
|
/** @var ListsTransactions */
|
||||||
|
private $listsTransactions;
|
||||||
|
|
||||||
|
/** @var UpdatesTransactionIsWaived */
|
||||||
|
private $updatesTransactionIsWaived;
|
||||||
|
|
||||||
|
/** @var CheckStorageInvoiceTransactionProcessor */
|
||||||
|
private $storageInvoiceTransactionProcessor;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UpdateCompanyCreditTermStatusLogic constructor.
|
||||||
|
* @param FetchesCompany $fetchesCompany
|
||||||
|
* @param UpdatesCompanyModuleIsCreditTerm $updatesCompanyModuleIsCreditTerm
|
||||||
|
* @param CanUpdateCompanyModule $canUpdateCompanyModule
|
||||||
|
* @param UpdatesTransactionIsWaived $updatesTransactionIsWaived
|
||||||
|
* @param ListsTransactions $listsTransactions
|
||||||
|
* @param CheckStorageInvoiceTransactionProcessor $storageInvoiceTransactionProcessor
|
||||||
|
*/
|
||||||
|
public function __construct(FetchesCompany $fetchesCompany, UpdatesCompanyModuleIsCreditTerm $updatesCompanyModuleIsCreditTerm, CanUpdateCompanyModule $canUpdateCompanyModule, UpdatesTransactionIsWaived $updatesTransactionIsWaived, ListsTransactions $listsTransactions, CheckStorageInvoiceTransactionProcessor $storageInvoiceTransactionProcessor)
|
||||||
|
{
|
||||||
|
$this->fetchesCompany = $fetchesCompany;
|
||||||
|
$this->updatesCompanyModuleIsCreditTerm = $updatesCompanyModuleIsCreditTerm;
|
||||||
|
$this->canUpdateCompanyModule = $canUpdateCompanyModule;
|
||||||
|
$this->listsTransactions = $listsTransactions;
|
||||||
|
$this->updatesTransactionIsWaived = $updatesTransactionIsWaived;
|
||||||
|
$this->storageInvoiceTransactionProcessor = $storageInvoiceTransactionProcessor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @return JsonResponse
|
||||||
|
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
||||||
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
|
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||||
|
*/
|
||||||
|
public function logic(Request $request) : JsonResponse
|
||||||
|
{
|
||||||
|
$this->canUpdateCompanyModule->passes();
|
||||||
|
|
||||||
|
$company = $this->fetchesCompany->execute(['id' => $request->route('id')]);
|
||||||
|
$companyModule = $company->companyModules()->first();
|
||||||
|
$isCreditTerm = $companyModule->connections()->first()->is_credit_term;
|
||||||
|
|
||||||
|
if ($isCreditTerm == 1) {
|
||||||
|
$isCreditTerm = 0;
|
||||||
|
} else {
|
||||||
|
$isCreditTerm = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if($isCreditTerm === 1){
|
||||||
|
//{"per_page":10,"order_by":{"column":"id","DESC":true},"status_in":[2],"receiver":190,"type_in":[1],"does_not_have_payment_status_in":[0,1],"does_not_have_groups":1,"check_for_storage_invoice":1}
|
||||||
|
|
||||||
|
$filters = [
|
||||||
|
'status_in' => [2],
|
||||||
|
'receiver' => $companyModule->id,
|
||||||
|
'type_in' => [TransactionType::STORAGE_INVOICE]
|
||||||
|
];
|
||||||
|
|
||||||
|
$transactions = $this->listsTransactions->execute($filters);
|
||||||
|
foreach($transactions as $transaction){
|
||||||
|
$this->updatesTransactionIsWaived->execute($transaction);
|
||||||
|
$packingList = $transaction->owner()->first();
|
||||||
|
if($packingList){
|
||||||
|
$order = $packingList->owner()->first();
|
||||||
|
if($order instanceof Order){
|
||||||
|
$storages = $this->storageInvoiceTransactionProcessor->executeOrder($order);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->updatesCompanyModuleIsCreditTerm->execute($company->companyModules()->first()->connections()->first(), $isCreditTerm);
|
||||||
|
Log::info(Auth::user()->email." updated credit term status for customer with id: " .$request->route('id'). " to status " . $isCreditTerm);
|
||||||
|
|
||||||
|
$result = ['is_credit_term' => $isCreditTerm];
|
||||||
|
return $this->response(['data' => $result]);
|
||||||
|
}
|
||||||
|
}
|
||||||
+48
@@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Companies\Processors;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\App;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
class ApproveIdentificationDocumentOnExchangeProcessor
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @return string
|
||||||
|
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
||||||
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
|
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||||
|
*/
|
||||||
|
public function execute(Request $request, $companyModuleId, $status) {
|
||||||
|
if (App::environment(['production'])) {
|
||||||
|
dd("Delete this line before push to production");
|
||||||
|
$url = "https://exchange.cief-malaysia.com/api/v1/shipping/company/{$companyModuleId}/identification/approval/{$status}";
|
||||||
|
} else if (App::environment(['local'])) {
|
||||||
|
$url = "http://127.0.0.1:8000/api/v1/shipping/company/{$companyModuleId}/identification/approval/{$status}";
|
||||||
|
} else {
|
||||||
|
$url = "https://dev.exchange.cief-malaysia.com/api/v1/shipping/company/{$companyModuleId}/identification/approval/{$status}";
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
$client = new \GuzzleHttp\Client(['verify' => false]);
|
||||||
|
$token = $request->bearerToken();
|
||||||
|
$headers = [
|
||||||
|
'Authorization' => 'Bearer ' . $token,
|
||||||
|
'Accept' => 'application/json',
|
||||||
|
];
|
||||||
|
$formParams = $request->toArray();
|
||||||
|
$response = $client->request('PUT', $url, [
|
||||||
|
'headers' => $headers,
|
||||||
|
'form_params' => $formParams
|
||||||
|
]);
|
||||||
|
$body = $response->getBody();
|
||||||
|
$contents = json_decode($body, true);
|
||||||
|
|
||||||
|
return $contents;
|
||||||
|
} catch(\GuzzleHttp\Exception\RequestException $exception){
|
||||||
|
Log::error($exception->getResponse()->getBody()->getContents());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+48
@@ -0,0 +1,48 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Companies\Processors;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\App;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
class CreateIdentificationDocumentOnExchangeProcessor
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @return string
|
||||||
|
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
||||||
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
|
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||||
|
*/
|
||||||
|
public function execute(Request $request, $companyModuleId) {
|
||||||
|
if (App::environment(['production'])) {
|
||||||
|
dd("Delete this line before push to production");
|
||||||
|
$url = "https://exchange.cief-malaysia.com/api/v1/shipping/company/{$companyModuleId}/identification/create";
|
||||||
|
} else if (App::environment(['local'])) {
|
||||||
|
$url = "http://127.0.0.1:8000/api/v1/shipping/company/{$companyModuleId}/identification/create";
|
||||||
|
} else {
|
||||||
|
$url = "https://dev.exchange.cief-malaysia.com/api/v1/shipping/company/{$companyModuleId}/identification/create";
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
$client = new \GuzzleHttp\Client(['verify' => false]);
|
||||||
|
$token = $request->bearerToken();
|
||||||
|
$headers = [
|
||||||
|
'Authorization' => 'Bearer ' . $token,
|
||||||
|
'Accept' => 'application/json',
|
||||||
|
];
|
||||||
|
$formParams = $request->toArray();
|
||||||
|
$response = $client->request('POST', $url, [
|
||||||
|
'headers' => $headers,
|
||||||
|
'form_params' => $formParams
|
||||||
|
]);
|
||||||
|
$body = $response->getBody();
|
||||||
|
$contents = json_decode($body, true);
|
||||||
|
|
||||||
|
return $contents;
|
||||||
|
} catch(\GuzzleHttp\Exception\RequestException $exception){
|
||||||
|
Log::error($exception->getResponse()->getBody()->getContents());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Companies\Processors;
|
||||||
|
|
||||||
|
use App\Classes\Modules\Accounts\DataTransferObjects\AuthenticationCredentialsObject;
|
||||||
|
use App\Classes\Modules\Accounts\Services\AuthenticatesUser;
|
||||||
|
use App\Classes\Modules\Accounts\Services\AuthenticationRedirect;
|
||||||
|
use App\Classes\Modules\Accounts\Services\FetchesUser;
|
||||||
|
use App\Classes\Modules\Accounts\Services\GeneratesAuthenticationToken;
|
||||||
|
use App\Classes\Modules\Accounts\Standards\Rules\CanAuthenticateUser;
|
||||||
|
use App\Classes\Modules\Companies\Services\ConnectCompanyModuleToExchangeCompany;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class LinkExchangeCompanyProcessor
|
||||||
|
{
|
||||||
|
|
||||||
|
/** @var CanAuthenticateUser */
|
||||||
|
private $canAuthenticateUser;
|
||||||
|
|
||||||
|
/** @var AuthenticatesUser */
|
||||||
|
private $authenticatesUser;
|
||||||
|
|
||||||
|
/** @var GeneratesAuthenticationToken */
|
||||||
|
private $generatesAuthenticationToken;
|
||||||
|
|
||||||
|
/** @var FetchesUser */
|
||||||
|
private $fetchesUser;
|
||||||
|
|
||||||
|
/** @var AuthenticationRedirect */
|
||||||
|
private $authenticationRedirect;
|
||||||
|
|
||||||
|
/** @var ConnectCompanyModuleToExchangeCompany */
|
||||||
|
private $connectCompanyModuleToExchangeCompany;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AuthenticationProcessor constructor.
|
||||||
|
* @param CanAuthenticateUser $canAuthenticateUser
|
||||||
|
* @param AuthenticatesUser $authenticatesUser
|
||||||
|
* @param GeneratesAuthenticationToken $generatesAuthenticationToken
|
||||||
|
* @param FetchesUser $fetchesUser
|
||||||
|
* @param AuthenticationRedirect $authenticationRedirect
|
||||||
|
* @param ConnectCompanyModuleToExchangeCompany $connectCompanyModuleToExchangeCompany
|
||||||
|
*/
|
||||||
|
public function __construct(CanAuthenticateUser $canAuthenticateUser, AuthenticatesUser $authenticatesUser, GeneratesAuthenticationToken $generatesAuthenticationToken, FetchesUser $fetchesUser, AuthenticationRedirect $authenticationRedirect, ConnectCompanyModuleToExchangeCompany $connectCompanyModuleToExchangeCompany)
|
||||||
|
{
|
||||||
|
$this->canAuthenticateUser = $canAuthenticateUser;
|
||||||
|
$this->authenticatesUser = $authenticatesUser;
|
||||||
|
$this->generatesAuthenticationToken = $generatesAuthenticationToken;
|
||||||
|
$this->fetchesUser = $fetchesUser;
|
||||||
|
$this->authenticationRedirect = $authenticationRedirect;
|
||||||
|
$this->connectCompanyModuleToExchangeCompany = $connectCompanyModuleToExchangeCompany;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
* @return array
|
||||||
|
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
||||||
|
* @throws \App\Classes\Exceptions\AccessUnauthorisedException
|
||||||
|
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||||
|
*/
|
||||||
|
public function execute(Request $request): array {
|
||||||
|
|
||||||
|
$object = new AuthenticationCredentialsObject($request->input('email'), $request->input('password'));
|
||||||
|
|
||||||
|
$this->canAuthenticateUser->passes($object);
|
||||||
|
|
||||||
|
$this->authenticatesUser->execute($object);
|
||||||
|
|
||||||
|
$user = $this->fetchesUser->execute(['email' => $object->getEmail()]);
|
||||||
|
|
||||||
|
$companyModule = $user->companyModule()->first();
|
||||||
|
|
||||||
|
$this->connectCompanyModuleToExchangeCompany->execute($companyModule, $request->route('exchange_company_id'));
|
||||||
|
|
||||||
|
return ['shipping_company_module_id' => $companyModule->id];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+1
-1
@@ -20,7 +20,7 @@ class AssignsCompanyConnectionToConnectionSegment extends AbstractUpdateRecord
|
|||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$companyConnection->segments()->attach($segment);
|
$companyConnection->segments()->attach($segment, ['created_at' => now(), 'updated_at' => now()]);
|
||||||
|
|
||||||
return $companyConnection;
|
return $companyConnection;
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ class AssignsCompanyToSegment extends AbstractUpdateRecord
|
|||||||
try {
|
try {
|
||||||
$companyModule = $company->companyModules()->where('type', BusinessType::IMPORTER)->first();
|
$companyModule = $company->companyModules()->where('type', BusinessType::IMPORTER)->first();
|
||||||
$connection = $companyModule->connections()->where('inviter_reference', 'CIEF');
|
$connection = $companyModule->connections()->where('inviter_reference', 'CIEF');
|
||||||
$connection->segments()->attach($segment);
|
$connection->segments()->attach($segment, ['created_at' => now(), 'updated_at' => now()]);
|
||||||
|
|
||||||
return $company;
|
return $company;
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ class AssignsEmployee extends AbstractUpdateRecord
|
|||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
|
||||||
$object->getCompanyModule()->employees()->attach($object->getUser(), ['status' => $object->getStatus(),'role_id' => $object->getRoleId()]);
|
$object->getCompanyModule()->employees()->attach($object->getUser(), ['status' => $object->getStatus(), 'role_id' => $object->getRoleId(), 'created_at' => now(), 'updated_at' => now()]);
|
||||||
|
|
||||||
return $object->getCompanyModule();
|
return $object->getCompanyModule();
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Companies\Services;
|
||||||
|
|
||||||
|
use App\Classes\Exceptions\MalformedRequestException;
|
||||||
|
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||||
|
use App\Models\CompanyModule;
|
||||||
|
use App\Models\ExchangeCompanyConnection;
|
||||||
|
|
||||||
|
class ConnectCompanyModuleToExchangeCompany extends AbstractUpdateRecord
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param Company $company
|
||||||
|
* @return \Illuminate\Database\Eloquent\Model
|
||||||
|
* @throws MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function execute(CompanyModule $companyModule, $exchangeCompanyId)
|
||||||
|
{
|
||||||
|
$model = new ExchangeCompanyConnection();
|
||||||
|
$model->company_module_id = $companyModule->id;
|
||||||
|
$model->exchange_company_id = $exchangeCompanyId;
|
||||||
|
|
||||||
|
return $this->handler($model);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Companies\Services;
|
||||||
|
|
||||||
|
use App\Classes\General\Eloquent\AbstractUpdateRecord;
|
||||||
|
use App\Models\CompanyConnection;
|
||||||
|
|
||||||
|
class UpdatesCompanyModuleIsCreditTerm extends AbstractUpdateRecord
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param CompanyConnection $model
|
||||||
|
* @param int $isCreditTerm
|
||||||
|
* @return \Illuminate\Database\Eloquent\Model
|
||||||
|
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||||
|
*/
|
||||||
|
public function execute(CompanyConnection $model, int $isCreditTerm)
|
||||||
|
{
|
||||||
|
$model->is_credit_term = $isCreditTerm;
|
||||||
|
|
||||||
|
return $this->handler($model);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -26,7 +26,7 @@ class CanAssignEmployee extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
// TODO Set Authorization rules
|
// TODO Set Authorization rules
|
||||||
return true;
|
return true;
|
||||||
@@ -51,4 +51,4 @@ class CanAssignEmployee extends AbstractRule
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ class CanAssignSegment extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
// TODO Set Authorization rules
|
// TODO Set Authorization rules
|
||||||
return true;
|
return true;
|
||||||
@@ -37,4 +37,4 @@ class CanAssignSegment extends AbstractRule
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class CanCreateCompany extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
// TODO Set Authorization rules
|
// TODO Set Authorization rules
|
||||||
return true;
|
return true;
|
||||||
@@ -48,4 +48,4 @@ class CanCreateCompany extends AbstractRule
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class CanCreateCompanyModule extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
// TODO Set Authorization rules
|
// TODO Set Authorization rules
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ class CanFetchCompany extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
// TODO Set Authorization rules
|
// TODO Set Authorization rules
|
||||||
return true;
|
return true;
|
||||||
@@ -40,4 +40,4 @@ class CanFetchCompany extends AbstractRule
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ class CanListCompanies extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
// TODO Set Authorization rules
|
// TODO Set Authorization rules
|
||||||
return true;
|
return true;
|
||||||
@@ -40,4 +40,4 @@ class CanListCompanies extends AbstractRule
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class CanUpdateCompany extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
// TODO Set Authorization rules
|
// TODO Set Authorization rules
|
||||||
return true;
|
return true;
|
||||||
@@ -48,4 +48,4 @@ class CanUpdateCompany extends AbstractRule
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,53 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Classes\Modules\Companies\Standards\Rules;
|
||||||
|
|
||||||
|
use App\Classes\General\Abstracts\AbstractRule;
|
||||||
|
use App\Classes\Modules\Companies\DataTransferObjects\CompanyObject;
|
||||||
|
use App\Classes\ValueObjects\Constants\RoleTypes;
|
||||||
|
|
||||||
|
class CanUpdateCompanyModule extends AbstractRule
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CanUpdateCompanyModule constructor.
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function authorized($object): bool
|
||||||
|
{
|
||||||
|
$user = Auth()->user();
|
||||||
|
if($user){
|
||||||
|
$roleToCheck = Auth()->user()->type;
|
||||||
|
if (in_array($roleToCheck, RoleTypes::ADMIN_ROLES)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $object
|
||||||
|
* @return bool
|
||||||
|
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||||
|
*/
|
||||||
|
protected function validators($object): bool
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param CompanyObject $object
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function criteria($object): bool
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -26,7 +26,7 @@ class CanCreateContact extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
// TODO Set Authorization rules
|
// TODO Set Authorization rules
|
||||||
return true;
|
return true;
|
||||||
@@ -51,4 +51,4 @@ class CanCreateContact extends AbstractRule
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ class CanCreateCurrency extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
// TODO Set Authorization rules
|
// TODO Set Authorization rules
|
||||||
return true;
|
return true;
|
||||||
@@ -48,4 +48,4 @@ class CanCreateCurrency extends AbstractRule
|
|||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ class CanDeleteCurrency extends AbstractRule
|
|||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
protected function authorized(): bool
|
protected function authorized($object): bool
|
||||||
{
|
{
|
||||||
// TODO Set Authorization rules
|
// TODO Set Authorization rules
|
||||||
return true;
|
return true;
|
||||||
@@ -36,4 +36,4 @@ class CanDeleteCurrency extends AbstractRule
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user