Compare commits

..

941 Commits

Author SHA1 Message Date
edmondlang 86893efe3d update base price date range 2022-04-23 14:59:52 +08:00
edmondlang 3dfec9fd6d update list base price section component 2022-04-22 22:23:35 +08:00
edmondlang 0634fbf78e update constant base price 2022-04-22 21:41:02 +08:00
edmondlang 6375ac753e clean up error in console for settiongs page 2022-04-22 00:23:59 +08:00
edmondlang 3899dd8416 update base price api 2022-04-22 00:18:12 +08:00
edmondlang d0ee2473ac update section name 2022-04-21 22:07:50 +08:00
edmondlang 33124d6588 update declare postcode and implement api 2022-04-21 09:30:56 +08:00
edmondlang 86e257106a add code to check if postcode constant does not exist, insert new postcode constant 2022-04-21 01:13:46 +08:00
edmondlang edb644eaeb remove insert segment if segment does not exist 2022-04-21 01:12:32 +08:00
edmondlang 98dc43d23a update segment constant logic 2022-04-19 20:50:09 +08:00
edmondlang cfd6757a84 tidy up 2022-04-19 15:09:56 +08:00
edmondlang eb31291e25 update warehouse api 2022-04-19 14:57:38 +08:00
edmondlang 7b88fd5c3c update state charges 2022-04-19 13:28:56 +08:00
edmondlang 1814352780 Merge branch 'master' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into api-intergration 2022-04-19 13:26:23 +08:00
omair saleh f5cf2ac2df fix login error handler & add new modern warehouse 2022-04-19 00:00:12 +08:00
omair saleh 2767d94a16 fix login error handler & add new modern warehouse 2022-04-18 23:56:27 +08:00
omair saleh f68ef5c5e2 fix login error handler & add new modern warehouse 2022-04-18 23:46:25 +08:00
omair saleh 639ccd3927 fix login error handler & add new modern warehouse 2022-04-18 23:40:08 +08:00
omair saleh 5651ed7010 fix LMD to HWT 2022-04-18 15:47:25 +08:00
omair saleh fd89233e49 fix LMD to HWT 2022-04-18 15:44:58 +08:00
omair saleh be70afd9bf fix LMD to HWT 2022-04-18 15:44:25 +08:00
omair saleh efac46264e fix LMD to HWT 2022-04-18 15:43:43 +08:00
omair saleh a0817dbb6e debug delivery registration 2022-04-18 15:42:10 +08:00
omair saleh dfa7013f04 debug delivery registration 2022-04-18 15:39:57 +08:00
omair saleh 28a57887b6 debug forget password 2022-04-18 04:59:49 +08:00
omair saleh 8a96941127 debug forget password 2022-04-15 14:55:21 +08:00
omair saleh 3a5423a308 on hold packing list export 2022-04-15 14:21:08 +08:00
omair saleh ddd1b7b29e on hold packing list export 2022-04-15 14:20:20 +08:00
omair saleh 5433c202a7 on hold packing list export 2022-04-15 14:19:32 +08:00
omair saleh b967e4f9ab on hold packing list export 2022-04-15 14:18:38 +08:00
omair saleh e9b7de47fa on hold packing list export 2022-04-15 14:17:43 +08:00
omair saleh 3c942af883 on hold packing list export 2022-04-15 14:17:20 +08:00
omair saleh baa9f79272 on hold packing list export 2022-04-15 14:00:13 +08:00
omair saleh 10c66dc2dc export delivery list excel 2022-04-15 11:58:37 +08:00
omair saleh 05d4b7fe36 fix fetch from vt 2022-04-15 11:43:17 +08:00
omair saleh 7fc4568fbf fix fetch from vt 2022-04-14 13:14:47 +08:00
omair saleh f55a57c222 fix fetch from vt 2022-04-14 13:12:56 +08:00
omair saleh 301d7b5520 update hywavetech lineclear excel format 2022-04-14 10:15:07 +08:00
omair saleh 9f965109c7 update hywavetech lineclear excel format 2022-04-14 10:01:10 +08:00
omair saleh 108a952ee3 update hywavetech lineclear excel format 2022-04-13 21:56:21 +08:00
omair saleh 1426d804e5 fix yd fetch 2022-04-13 15:10:10 +08:00
omair saleh 88b3dc8b84 fix yd fetch 2022-04-13 14:27:08 +08:00
omair saleh 4b3274f6d5 fix yd fetch 2022-04-13 14:24:50 +08:00
omair saleh da1b6b1b6d fix yd fetch 2022-04-13 13:22:23 +08:00
omair saleh ac0a90c168 fix yd fetch 2022-04-13 13:17:04 +08:00
omair saleh a5e47324b2 fix yd fetch 2022-04-13 13:11:30 +08:00
omair saleh 40d22de809 fix customer profile 2022-04-13 12:19:34 +08:00
omair saleh 7154b5a943 fix customer profile 2022-04-13 12:15:32 +08:00
omair saleh 863c2874dd fix yd fetch 2022-04-13 11:50:23 +08:00
omair saleh 862398b0d5 update qr pdf 2022-04-13 11:30:53 +08:00
omair saleh 9e20b717a6 update qr pdf 2022-04-13 11:29:15 +08:00
omair saleh 129f3ecf10 update crisp to production 2022-04-13 00:25:49 +08:00
omair saleh f71f1fecd4 update crisp to production 2022-04-13 00:18:57 +08:00
omair saleh 6f5f854827 update crisp to production 2022-04-13 00:18:44 +08:00
omair saleh f4275f20a3 update crisp to production 2022-04-13 00:17:19 +08:00
omair saleh 35d9a1f8d8 update crisp to production 2022-04-13 00:15:51 +08:00
omair saleh de1afc26dc update crisp to production 2022-04-12 16:22:57 +08:00
omair saleh 904fb3d9e5 update crisp to production 2022-04-12 16:18:33 +08:00
omair saleh 304337d5e2 update crisp to production 2022-04-12 16:02:00 +08:00
omair saleh aa312c8f6e Merge remote-tracking branch 'origin/master' 2022-04-12 15:20:41 +08:00
omair saleh 05d079f261 update crisp to production 2022-04-12 15:20:13 +08:00
omair saleh a1cb511125 Merge branch 'export-arrived-parcel' into 'master'
export-arrived-parcel

See merge request CIEFWorldwideSdnBhd/shipping-portal!130
2022-04-12 07:10:44 +00:00
omair saleh 8d29a25793 create replica white list 2022-04-12 09:42:27 +08:00
edmondlang a7593e4ab2 export-arrived-parcel 2022-04-11 23:29:39 +08:00
omair saleh 8ecb306e92 update final touch up for last delivery integration 2022-04-09 20:43:00 +08:00
omair saleh 918fd0d17d update final touch up for last delivery integration 2022-04-09 20:41:48 +08:00
omair saleh 4f888da29a Merge branch 'last-mile-integration' into 'master'
update field change value of  'Pickup_Address_Type' from sender to Default'

See merge request CIEFWorldwideSdnBhd/shipping-portal!129
2022-04-09 12:20:56 +00:00
edmondlang 559de29acf update field change value of 'Pickup_Address_Type' from sender to Default'
export multiple sheet with the correct name of each field
2022-04-09 15:10:54 +08:00
edmondlang 5ba46a96a3 api intergration 2022-04-08 21:08:54 +08:00
edmondlang 1c79d88d8d remove service set up and add in base price 2022-04-08 19:05:18 +08:00
edmondlang 029f25a003 update state charges 2022-04-08 18:42:30 +08:00
edmondlang 557881104c implement api for warehouse charges 2022-04-08 18:23:54 +08:00
edmondlang d30dab61ea intergrate api for decalreing postcode area 2022-04-07 23:45:36 +08:00
edmondlang 87116d29c9 last mile delivery search order ui and search order number function 2022-04-07 22:54:02 +08:00
omair saleh d9eeaf4bef update final touch up for last delivery integration 2022-04-07 22:47:30 +08:00
omair saleh 5dabc88fa9 update final touch up for last delivery integration 2022-04-07 22:40:01 +08:00
omair saleh 8c29fcda1f update final touch up for last delivery integration 2022-04-07 22:28:51 +08:00
omair saleh edd6b0d6ff update final touch up for last delivery integration 2022-04-07 22:22:22 +08:00
omair saleh 6940290570 update final touch up for last delivery integration 2022-04-07 22:21:21 +08:00
omair saleh 327bd75cc9 update final touch up for last delivery integration 2022-04-07 22:20:47 +08:00
omair saleh 9f760d8694 Merge branch 'last-mile-integration' into 'master'
updates last mile intergration - add functions

See merge request CIEFWorldwideSdnBhd/shipping-portal!128
2022-04-07 14:13:57 +00:00
omair saleh 4a1905abde update final touch up for last delivery integration 2022-04-07 21:27:53 +08:00
omair saleh 5d1ff709eb update final touch up for last delivery integration 2022-04-07 21:20:13 +08:00
omair saleh a50b475525 update final touch up for last delivery integration 2022-04-07 21:16:59 +08:00
omair saleh 97ec65e292 Merge remote-tracking branch 'origin/last-mile-integration' into last-mile-integration 2022-04-07 21:13:21 +08:00
omair saleh 5df226c153 update final touch up for last delivery integration 2022-04-07 21:12:15 +08:00
edmondlang 3e87f320bf Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into last-mile-integration 2022-04-07 11:45:56 +08:00
omair saleh 408a3a1211 update last mile delivery logo 2022-04-07 11:12:27 +08:00
omair saleh bed78c053a remove memo 2022-04-07 10:59:50 +08:00
omair saleh c53ebf76b3 hide admin menu flashing 2022-04-07 09:53:59 +08:00
omair saleh 4085ac4829 hide admin menu flashing 2022-04-07 09:46:22 +08:00
omair saleh 778729b81d hide admin menu flashing 2022-04-07 09:44:02 +08:00
omair saleh 54c212e905 update last mile delivery module 2022-04-06 18:51:08 +08:00
omair saleh 5b370a299c update pending delivery report excel 2022-04-06 16:01:31 +08:00
omair saleh e57dc231e6 update pending delivery report excel 2022-04-06 16:01:03 +08:00
omair saleh 5727801918 update pending delivery report excel 2022-04-06 15:59:28 +08:00
omair saleh bf325ff028 update pending delivery report excel 2022-04-06 15:55:31 +08:00
omair saleh 229e757663 Merge branch 'export-delivery-list' into 'master'
Export delivery list

See merge request CIEFWorldwideSdnBhd/shipping-portal!117
2022-04-06 07:32:01 +00:00
edmondlang 10d62dd8d1 update export delivery list - include state and postcode 2022-04-06 13:53:43 +08:00
edmondlang 0fa0d8daab Shipping portal - export function for Delivery list (only 'Pending Arrangement' tab) 2022-04-06 13:30:16 +08:00
edmondlang bb59a444cf update export excel form 2022-04-06 11:24:24 +08:00
edmondlang 45c878a2ed add orders created date to the table 2022-04-06 10:21:40 +08:00
edmondlang e871f4b287 hide tick and show only for admin 2022-04-05 20:03:27 +08:00
edmondlang 6eaa810b67 remove text order list 2022-04-05 11:40:58 +08:00
omair saleh 68d961a681 custom clearance status 2022-04-05 11:38:21 +08:00
omair saleh 2c29e5939e custom clearance status 2022-04-05 11:25:56 +08:00
omair saleh 6910dce35f custom clearance status 2022-04-05 11:23:39 +08:00
omair saleh a19db06b6b custom clearance status 2022-04-05 11:20:45 +08:00
edmondlang 4e53e1b48a updates last mile intergration - add functions
- admin cancel order
- add filter to display only active orders
- hide customer page
- show parcel weight as total weight (quantity * weight per quantity)
    - in create order form
    - order table
    - export excel
- update export excel, only include the data of the selected Ids
2022-04-05 10:45:30 +08:00
omair saleh aef9b82918 Merge remote-tracking branch 'origin/last-mile-integration' into last-mile-integration
# Conflicts:
#	resources/views/pages/delivery/admin.blade.php
2022-04-04 19:41:43 +08:00
omair saleh f96fef94fe finalize last mile delivery 2022-04-04 19:40:54 +08:00
edmondlang ab141ae160 update admin view for last mile intergration 2022-04-04 14:21:59 +08:00
edmondlang bf4830ba7a update mobile responsive for delivery order form component 2022-04-03 23:47:58 +08:00
edmondlang 5baf04c835 fix mobile responsive 2022-04-03 23:39:27 +08:00
edmondlang 4917c54868 remove vuetable 2022-04-03 23:26:45 +08:00
edmondlang 9c7d07f603 remove imports that are not using 2022-04-03 20:20:09 +08:00
edmondlang 6f9320f3a4 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into last-mile-integration 2022-04-03 19:13:24 +08:00
omair saleh c69c043576 fix the user ui, create delivery order, delivery customer dashboard 2022-04-03 19:10:06 +08:00
edmondlang 745655dbfa last mile intergration 2022-04-02 15:21:14 +08:00
omair saleh b764ee0769 update packing list monthly summary containers 2022-04-01 17:02:36 +08:00
omair saleh ab1d92af86 fix yd missing packages from order 2022-04-01 14:58:27 +08:00
omair saleh 2ff9a38114 fix yd missing packages from order 2022-04-01 14:57:41 +08:00
omair saleh 0abdbd525e fix yd missing packages from order 2022-04-01 14:56:46 +08:00
omair saleh f44aace3c5 fix yd missing packages from order 2022-04-01 14:56:05 +08:00
omair saleh 0af84a9b7d fix yd missing packages from order 2022-04-01 14:54:09 +08:00
omair saleh 1aff95b41c fix yd missing packages from order 2022-04-01 14:51:57 +08:00
omair saleh 745f476f89 fix yd missing packages from order 2022-04-01 14:41:24 +08:00
omair saleh e1d751b859 fix yd missing packages from order 2022-04-01 11:21:44 +08:00
omair saleh 6077b1fbbb fix yd missing packages from order 2022-04-01 10:56:56 +08:00
omair saleh 5fe8a7a59e fix order address update to vt 2022-03-31 21:15:19 +08:00
omair saleh 8b38bcac8a fix order address update to vt 2022-03-31 21:10:23 +08:00
omair saleh 5561442932 fix order address update to vt 2022-03-31 21:09:01 +08:00
omair saleh f33efd373c fix order address update to vt 2022-03-31 21:05:44 +08:00
omair saleh 53c325b36d fetch only 2 months orders from yd 2022-03-31 20:47:14 +08:00
omair saleh cd141bf988 fix yd older than 2 months orders 2022-03-31 20:30:49 +08:00
omair saleh 908f3fc11b fix yd older than 2 months orders 2022-03-31 20:29:49 +08:00
omair saleh 8e9f12b17e fix yd older than 2 months orders 2022-03-31 20:29:14 +08:00
omair saleh 782bcc69f1 fix yd older than 2 months orders 2022-03-31 20:28:41 +08:00
omair saleh 144464621e fix yd older than 2 months orders 2022-03-31 20:28:07 +08:00
omair saleh b290f95426 fix yd older than 2 months orders 2022-03-31 20:27:31 +08:00
omair saleh b7e6269aa9 fix yd older than 2 months orders 2022-03-31 20:25:14 +08:00
omair saleh 7180f802b3 fix yd older than 2 months orders 2022-03-31 20:20:19 +08:00
omair saleh 7159c1c11d fix yd older than 2 months orders 2022-03-31 20:17:55 +08:00
omair saleh cce0cae57c fix yd older than 2 months orders 2022-03-31 20:17:03 +08:00
omair saleh bebce6fbaa fix yd older than 2 months orders 2022-03-31 19:50:55 +08:00
omair saleh 531ab699ba show delivery delay days 2022-03-31 19:45:06 +08:00
omair saleh 9f9c17977d show delivery delay days 2022-03-31 19:44:11 +08:00
omair saleh 24f5de8c2c fix missing yd delivery 2022-03-31 14:41:10 +08:00
omair saleh 3b8079785a fix missing yd delivery 2022-03-31 14:19:47 +08:00
omair saleh 627fb3aa96 fix missing yd delivery 2022-03-31 14:18:34 +08:00
omair saleh 2b4d3f1992 fix missing yd delivery 2022-03-31 14:16:40 +08:00
omair saleh 65daceb59c fix missing yd delivery 2022-03-31 14:13:26 +08:00
omair saleh d7457e7174 fix missing yd delivery 2022-03-31 14:10:24 +08:00
omair saleh 9753eb3a18 fix packages is missing in yd api 2022-03-31 13:56:47 +08:00
omair saleh e7df49a0d1 fix packages is missing in yd api 2022-03-31 13:54:48 +08:00
omair saleh cd4e7aab10 fix packages is missing in yd api 2022-03-31 13:52:36 +08:00
omair saleh 29350dbb86 fix packages is missing in yd api 2022-03-31 13:52:16 +08:00
omair saleh 7338ebc78a fix packages is missing in yd api 2022-03-31 13:49:47 +08:00
omair saleh 4eded7a742 update holiday announcement 2022-03-31 09:31:09 +08:00
omair saleh dc562f6554 update holiday announcement 2022-03-31 09:29:31 +08:00
edmondlang d96a35a49f revert RegistrationFormComponent 2022-03-30 20:01:45 +08:00
edmondlang 8024fef2e8 Merge branch 'new-registration-ui' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into last-mile-integration 2022-03-30 19:54:35 +08:00
omair saleh 2d965009ec move unclaimed packing lists to dashboard 2022-03-30 11:31:40 +08:00
omair saleh 7d84ddee95 fix do update bug 2022-03-30 00:25:18 +08:00
omair saleh 92b31a9342 fix do update bug 2022-03-30 00:22:05 +08:00
omair saleh 012dbfde09 fix do update bug 2022-03-30 00:21:14 +08:00
omair saleh 0b651953ea fix do update bug 2022-03-30 00:20:24 +08:00
omair saleh b34f50ae9d fix do update bug 2022-03-30 00:20:11 +08:00
omair saleh 8f0d1e6fdf fix do update bug 2022-03-30 00:19:22 +08:00
omair saleh e8990d96f7 debug do update 2022-03-30 00:06:22 +08:00
omair saleh 69ee0eea2c debug do update 2022-03-30 00:05:45 +08:00
omair saleh adcdf5909e debug do update 2022-03-29 23:57:16 +08:00
omair saleh b9523fb567 debug do update 2022-03-29 23:56:31 +08:00
omair saleh 79678d7b93 debug do update 2022-03-29 23:56:01 +08:00
omair saleh 2bdfd2772a debug do update 2022-03-29 23:54:14 +08:00
omair saleh 55513f5175 debug do update 2022-03-29 23:44:22 +08:00
omair saleh 709534ce04 debug do update 2022-03-29 23:43:29 +08:00
omair saleh 74d85eee60 debug do update 2022-03-29 23:42:32 +08:00
omair saleh 63badc08f0 debug do update 2022-03-29 23:41:34 +08:00
omair saleh 73010ed32b debug do update 2022-03-29 23:40:20 +08:00
omair saleh 7a2a90545b debug do update 2022-03-29 23:40:05 +08:00
omair saleh c0ee3a8e57 debug do update 2022-03-29 23:39:28 +08:00
omair saleh 0c7e4d5785 debug do update 2022-03-29 23:38:33 +08:00
omair saleh c3cd8ae3a0 debug do update 2022-03-29 23:35:27 +08:00
omair saleh 0e7469f1cd new registration ui flow 2022-03-29 23:15:42 +08:00
omair saleh 32476afdd4 fix vt warehouse list 2022-03-27 12:56:31 +08:00
omair saleh 8b6db1fb68 temp test vt warehouse list 2022-03-27 12:55:06 +08:00
omair saleh 43f3fbff07 temp test vt warehouse list 2022-03-27 12:54:06 +08:00
omair saleh caf8624d4c temp test vt warehouse list 2022-03-27 12:51:43 +08:00
omair saleh eb417cf389 temp test vt warehouse list 2022-03-27 12:50:23 +08:00
omair saleh 276a87ff0d temp test vt warehouse list 2022-03-27 12:49:08 +08:00
omair saleh 6d2f179025 Merge branch 'development' into 'master'
Development

See merge request CIEFWorldwideSdnBhd/shipping-portal!116
2022-03-27 03:54:48 +00:00
omair saleh 8609c926f9 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-03-27 11:53:18 +08:00
omair saleh 368a055bb4 add chat box to development 2022-03-27 11:50:27 +08:00
omair saleh d617001412 fix vt YW orders 2022-03-27 11:49:32 +08:00
omair saleh c932cb00cc add chat widget 2022-03-25 17:36:27 +08:00
omair saleh 1be62a5f77 fix vt order number to filter yw 2022-03-25 16:54:10 +08:00
omair saleh 445bcb3864 small clean up 2022-03-24 13:33:04 +08:00
omair saleh d489775924 small clean up 2022-03-24 13:32:34 +08:00
omair saleh fff428882d small clean up 2022-03-24 13:31:37 +08:00
omair saleh 42205ddbc3 small clean up 2022-03-24 13:29:59 +08:00
omair saleh 722e502b3b tidy up invoices details descriptions 2022-03-24 13:26:55 +08:00
omair saleh 4f93569b4c Merge branch 'development' into 'master'
Development

See merge request CIEFWorldwideSdnBhd/shipping-portal!115
2022-03-24 05:22:35 +00:00
omair saleh e1abebc66c Merge branch 'transaction-invoice' into 'development'
transaction detail over weight

See merge request CIEFWorldwideSdnBhd/shipping-portal!114
2022-03-24 05:18:22 +00:00
omair saleh 2424882cfe Merge branch 'development' into 'transaction-invoice'
# Conflicts:
#   app/Classes/Modules/Transactions/ControllersLogic/CreateShippingInvoiceTransactionLogic.php
2022-03-24 05:18:17 +00:00
omair saleh 23f50faa84 release create warehouse arrival parcel module 2022-03-24 13:11:22 +08:00
edmondlang edc510681e Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-03-24 11:40:20 +08:00
omair saleh db03836ef5 add new way of detecting yd container rescheduling 2022-03-24 10:59:59 +08:00
edmondlang 3a5f404294 Tidy Up Export Customer activity details, add new filter - minOrders and minCbm 2022-03-23 00:53:16 +08:00
edmondlang 9b79f16faa Merge branch 'api-to-update-segment-constants' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-03-22 21:55:24 +08:00
edmondlang 4ff4418f7f Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-03-19 13:35:09 +08:00
glovetleong 19c8f1e658 transaction detail over weight 2022-03-18 20:46:40 +08:00
omair saleh e1c4d674b6 smc report for specific containers 2022-03-18 17:48:18 +08:00
omair saleh 3326de9c4f smc report for specific containers 2022-03-18 17:44:28 +08:00
omair saleh 54dd6d407d revert invoice changes 2022-03-18 16:18:44 +08:00
omair saleh 9ee81d9385 update rfm to table 2022-03-18 16:18:12 +08:00
omair saleh aa1ba03415 update rfm to table 2022-03-18 16:16:25 +08:00
omair saleh fb6b2173b5 update rfm to table 2022-03-18 16:14:42 +08:00
omair saleh f18e4a882f update container reschedule for yd 2022-03-17 17:47:34 +08:00
omair saleh 8edc91bb61 update container reschedule for yd 2022-03-17 17:46:24 +08:00
omair saleh 6122c288df update container reschedule for yd 2022-03-17 17:45:10 +08:00
omair saleh 9650877819 update container reschedule for yd 2022-03-17 17:43:03 +08:00
omair saleh c65d875a3d update container reschedule for yd 2022-03-17 17:41:39 +08:00
omair saleh c1bc610549 update container reschedule for yd 2022-03-17 17:41:06 +08:00
omair saleh 82d406abfc update container reschedule for yd 2022-03-17 17:39:47 +08:00
omair saleh 701610978d update container reschedule for yd 2022-03-17 17:37:07 +08:00
omair saleh f7e1665a02 update container reschedule for yd 2022-03-17 17:36:24 +08:00
omair saleh d389b87609 update container reschedule for yd 2022-03-17 17:34:51 +08:00
omair saleh 987fdcfba2 update container reschedule for yd 2022-03-17 17:33:23 +08:00
omair saleh 6214a2b723 update container reschedule for yd 2022-03-17 17:31:39 +08:00
omair saleh fe00b1fab7 update container reschedule for yd 2022-03-17 17:22:02 +08:00
omair saleh 41df3e6ae7 update container reschedule for yd 2022-03-17 17:18:47 +08:00
omair saleh cf7d9ccca5 update container reschedule for yd 2022-03-17 17:17:01 +08:00
omair saleh 384d234b50 update container reschedule for yd 2022-03-17 17:16:35 +08:00
omair saleh 3fbfa44a04 update container reschedule for yd 2022-03-17 17:14:02 +08:00
omair saleh cbc294054e update container reschedule for yd 2022-03-17 17:12:47 +08:00
omair saleh 324556985a update container reschedule for yd 2022-03-17 17:08:23 +08:00
omair saleh 1b8c6ca317 update container reschedule for yd 2022-03-17 17:08:12 +08:00
omair saleh bbd09d300c update container reschedule for yd 2022-03-17 17:07:33 +08:00
omair saleh 47c97d6151 update container reschedule for yd 2022-03-17 17:05:04 +08:00
omair saleh 435e3a8f7a update container reschedule for yd 2022-03-17 17:03:40 +08:00
omair saleh 151032bb66 update container reschedule for yd 2022-03-17 17:02:40 +08:00
omair saleh f32335d57b update container reschedule for yd 2022-03-17 16:58:52 +08:00
omair saleh 2deddc4e03 update container reschedule for yd 2022-03-17 16:57:49 +08:00
omair saleh 32e665e4f7 update container reschedule for yd 2022-03-17 16:57:03 +08:00
omair saleh a987419040 update container reschedule for yd 2022-03-17 16:36:50 +08:00
omair saleh b0a65f870c update container reschedule for yd 2022-03-17 16:33:00 +08:00
omair saleh 33a75eca7d smc monthly report 2022-03-17 13:53:50 +08:00
Leong Chee Siong deb68dc723 Merge branch 'transaction-invoice' into 'development'
billpliz callback

See merge request CIEFWorldwideSdnBhd/shipping-portal!113
2022-03-17 02:13:19 +00:00
omair saleh 519408c2b5 lawas and Limbang show kk warehouse 2022-03-17 09:55:46 +08:00
omair saleh 53907e2463 lawas and Limbang show kk warehouse 2022-03-17 09:52:24 +08:00
omair saleh 10e6f6045e lawas and Limbang show kk warehouse 2022-03-17 09:51:36 +08:00
omair saleh c06cec5b41 lawas and Limbang show kk warehouse 2022-03-17 09:47:31 +08:00
omair saleh cfe611d05d lawas and Limbang show kk warehouse 2022-03-17 09:45:24 +08:00
ahmedsophyudden b9b79ca65a Shipping Portal - Api to update segment (general, state, postcode) 2022-03-17 01:01:01 +08:00
glovetleong 9a1562386f billpliz callback 2022-03-16 23:01:38 +08:00
omair saleh 22700893a2 fix qr remark 2022-03-16 10:03:47 +08:00
omair saleh 550c9480a4 fix qr remark 2022-03-16 10:02:17 +08:00
omair saleh 48bab9998c fix qr remark 2022-03-16 09:47:26 +08:00
omair saleh 3ff81d4f00 fix qr remark 2022-03-16 09:46:23 +08:00
omair saleh cc7edfc784 sort deliveries by date 2022-03-16 01:24:37 +08:00
omair saleh 72448d656c sort deliveries by date 2022-03-16 01:20:13 +08:00
omair saleh c941f679b6 sort deliveries by date 2022-03-16 01:19:31 +08:00
omair saleh 78f6c70cad sort deliveries by date 2022-03-16 01:18:53 +08:00
omair saleh 1575d62e0f sort deliveries by date 2022-03-16 01:17:21 +08:00
omair saleh 43f4bc533a sort deliveries by date 2022-03-16 01:16:13 +08:00
omair saleh 9ae36dc400 sort deliveries by date 2022-03-16 01:14:27 +08:00
omair saleh 02c55d97b7 sort deliveries by date 2022-03-16 01:00:27 +08:00
omair saleh baeaa0f31a sort deliveries by date 2022-03-16 00:58:16 +08:00
omair saleh dadc786f1f Merge branch 'development' into 'master'
Development

See merge request CIEFWorldwideSdnBhd/shipping-portal!112
2022-03-15 16:32:13 +00:00
omair saleh bd9dab0029 hide invoice button for production 2022-03-16 00:31:24 +08:00
omair saleh e2b795c872 Merge remote-tracking branch 'origin/development' into development 2022-03-16 00:30:55 +08:00
omair saleh 9a79c6dd1d Merge branch 'development' into 'master'
Warehouse Profile

See merge request CIEFWorldwideSdnBhd/shipping-portal!111
2022-03-15 16:28:58 +00:00
omair saleh d8e1c38429 hide invoice button for production 2022-03-16 00:24:18 +08:00
Leong Chee Siong aa28afb9f0 Merge branch 'transaction-invoice' into 'development'
soft delete user

See merge request CIEFWorldwideSdnBhd/shipping-portal!110
2022-03-14 05:45:21 +00:00
glovetleong 7ec109eb3e soft delete user 2022-03-14 13:42:48 +08:00
omair saleh 7151616b04 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-03-14 13:19:04 +08:00
omair saleh f2007b25e4 fix delivery list filter 2022-03-14 11:32:22 +08:00
omair saleh 6389fc6600 fix delivery list filter 2022-03-14 11:24:33 +08:00
omair saleh eb6b2943af fix delivery list filter 2022-03-14 11:21:20 +08:00
omair saleh 5fb7ddb0ec fix delivery list filter 2022-03-14 11:20:16 +08:00
omair saleh 91feb5b8fa fix delivery list filter 2022-03-14 11:19:45 +08:00
omair saleh 9c98693071 Merge remote-tracking branch 'origin/development' into development 2022-03-14 11:14:29 +08:00
omair saleh 56fb250e6f fix delivery list filter 2022-03-14 11:14:14 +08:00
Leong Chee Siong eabfeb6724 Merge branch 'transaction-invoice' into 'development'
payment transaction

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

See merge request CIEFWorldwideSdnBhd/shipping-portal!82
2021-11-26 01:56:02 +00:00
omair saleh a6fc5dd1a5 change warehouse address format 2021-11-25 17:08:44 +08:00
omair saleh fa88ffca49 add marking to new warehouse special list 2021-11-25 03:18:12 +08:00
omair saleh 2b6a2810e5 clean up company module un used dependencies 2021-11-25 03:11:20 +08:00
omair saleh c67ee25654 add new yd Guangzhou warehouse 2021-11-25 03:08:32 +08:00
omair saleh f1cde19261 hide login as exchange 2021-11-20 10:47:03 +08:00
omair saleh b7e5475014 hide login as exchange 2021-11-20 10:42:18 +08:00
omair saleh a75c05fdae update container shortage announcement 2021-11-09 23:58:17 +08:00
omair saleh 3327b8a4f5 update container shortage announcement 2021-11-09 23:54:39 +08:00
omair saleh 604413d978 update container shortage announcement 2021-11-09 23:54:14 +08:00
edmondlang 558868d859 update setting edit full name 2021-11-06 20:43:39 +08:00
omair saleh a25feacf53 categorise containers 2021-11-03 20:42:35 +08:00
omair saleh 1090de9060 categorise containers 2021-11-02 23:08:41 +08:00
omair saleh 1c721f7f10 categorise containers 2021-11-02 23:05:42 +08:00
omair saleh 4813c54e6d categorise containers 2021-11-02 23:03:45 +08:00
omair saleh b79ecdc6a9 categorise containers 2021-11-02 22:41:39 +08:00
omair saleh 7fa70becde categorise containers 2021-11-02 22:39:24 +08:00
omair saleh 57a0ea535a categorise containers 2021-11-02 22:38:41 +08:00
omair saleh f84415ce89 categorise containers 2021-11-02 22:37:32 +08:00
omair saleh 0b79ff5521 categorise containers 2021-11-02 22:29:46 +08:00
omair saleh d0f209b006 categorise containers 2021-11-02 22:28:23 +08:00
omair saleh 8cec7b436f categorise containers 2021-11-02 22:25:59 +08:00
omair saleh d2468769df categorise containers 2021-11-02 22:24:39 +08:00
omair saleh 884f4b33d1 categorise containers 2021-11-02 22:20:47 +08:00
omair saleh c15f67e304 order container by loading date 2021-11-02 21:40:35 +08:00
omair saleh f5ea06e3fe show packages quantity loaded into container 2021-11-02 21:32:20 +08:00
edmondlang 6fcf952967 update order remark ui 2021-11-02 00:00:31 +08:00
edmondlang b0a2ab08c9 tody up container forms component 2021-10-31 19:10:16 +08:00
edmondlang e0a78cc126 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into order-remark-backend 2021-10-31 15:45:55 +08:00
edmondlang 5e7cfd4da0 tidy up the order remark backend api 2021-10-31 15:43:57 +08:00
edmondlang feec49318b update container profile comment section with api 2021-10-30 17:11:28 +08:00
omair saleh 9977d516e1 fix order by arrival date 2021-10-30 12:49:22 +08:00
omair saleh c9131b3c3d order warehouse parcels by arrival date 2021-10-30 12:37:52 +08:00
omair saleh 2675fd8704 Merge branch 'create-new-filter-to-order-by-arrival-dates'
# Conflicts:
#	routes/api.php
2021-10-30 12:30:58 +08:00
omair saleh 02c6825c4a Merge branch 'create-new-filter-to-order-by-arrival-dates'
# Conflicts:
#	routes/api.php
2021-10-30 12:24:44 +08:00
omair saleh 908e0a49f9 Merge branch 'create-new-filter-to-order-by-arrival-dates'
# Conflicts:
#	routes/api.php
2021-10-30 12:23:58 +08:00
edmondlang 9252134cc4 wip update container comments(remarks) section and implement api 2021-10-29 16:20:05 +08:00
edmondlang 6444f471e8 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into order-remark-backend
# Conflicts:
#	app/Classes/Modules/PackingLists/ControllersLogic/Containers/CreateContainerRemarkLogic.php
#	app/Models/Order.php
2021-10-28 00:31:48 +08:00
omair saleh cf03a032e5 create container remark 2021-10-27 21:20:01 +08:00
edmondlang 149029bc24 change settings page input label design 2021-10-26 18:46:43 +08:00
edmondlang ab84ca4719 move settings ui from exchange 2021-10-26 11:46:49 +08:00
omair saleh 2cb8f9f407 show change ratio for profit model calculator 2021-10-26 10:51:06 +08:00
edmondlang a846028919 wip 2021-10-25 22:49:42 +08:00
edmondlang 274cd83c81 order search funtion 2021-10-25 22:26:19 +08:00
omair saleh ef1759379e disable customer order scope to temp fix pdf download issue 2021-10-25 14:54:46 +08:00
omair saleh ad9b983325 optimise order queries 2021-10-25 14:29:24 +08:00
omair saleh fc36a193e9 optimise order queries 2021-10-25 14:28:55 +08:00
omair saleh 86d26edb72 Merge branch 'improve-responsive-ui' into 'master'
improve responsive ui

See merge request CIEFWorldwideSdnBhd/shipping-portal!78
2021-10-25 05:56:44 +00:00
omair saleh 052218b621 Merge branch 'delivery-packing-list-ui' into 'master'
Delivery packing list ui

See merge request CIEFWorldwideSdnBhd/shipping-portal!76
2021-10-25 05:54:58 +00:00
omair saleh da52ddd3ac Merge branch 'cross-login' into 'master'
Cross login

See merge request CIEFWorldwideSdnBhd/shipping-portal!75
2021-10-25 05:54:01 +00:00
omair saleh 6cfed45ffe Merge branch 'create-deliver-packing-list-api' into 'master'
create deliver packing list api

See merge request CIEFWorldwideSdnBhd/shipping-portal!74
2021-10-25 05:53:33 +00:00
omair saleh a048a79ca8 Merge branch 'cbm_calc' into 'master'
Shipping Cost Calculations

See merge request CIEFWorldwideSdnBhd/shipping-portal!70
2021-10-25 05:49:04 +00:00
edmondlang 487d024039 wip 2021-10-23 15:00:16 +08:00
edmondlang 6a4e2926b9 wip 2021-10-23 13:55:38 +08:00
omair saleh e7afc0bc10 profit model calculator 2021-10-22 14:28:30 +08:00
omair saleh 999c29411f profit model calculator 2021-10-22 14:27:02 +08:00
omair saleh c5183ac0a7 create container remark 2021-10-21 21:25:13 +08:00
omair saleh 896a101fad fix createRemark service class 2021-10-21 21:21:26 +08:00
edmondlang 25c36d085f code review update id number, min length 2021-10-21 15:50:31 +08:00
edmondlang ba0dbf80a1 update order no 2021-10-21 00:38:16 +08:00
edmondlang afba2d6880 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into update-id-number 2021-10-20 22:16:08 +08:00
edmondlang 39771a42b6 Merge branch 'update-id-number' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into update-id-number 2021-10-20 22:14:37 +08:00
Obenny 624df67ca5 copied modules, resources, and updated route files 2021-10-18 19:38:56 +08:00
ahmedsophyudden 3f73848c18 Create new filter to order by arrival dates 2021-10-18 11:22:56 +08:00
Fairuz 63aae14b28 Shipping Cost Calculations 2021-10-18 10:04:33 +08:00
Obenny ea6711f06b copied controllers, models, migrations 2021-10-17 21:43:25 +08:00
Obenny 8c23d178e8 copied migrations, model, controllers, routes 2021-10-17 21:33:40 +08:00
glovetleong aae9f160e6 simplify order resource 2021-10-17 17:55:16 +08:00
ahmedsophyudden ba61f7f3ab add & delete segment api 2021-10-15 19:18:09 +08:00
edmondlang 04117754db Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into improve-responsive-ui 2021-10-13 20:33:18 +08:00
edmondlang 821a39e5ff improve responsive ui 2021-10-13 20:23:59 +08:00
glovetleong 05cb3dd35e cross login 2021-10-13 14:10:32 +08:00
ahmedsophyudden 5b5bf1bb06 add & delete segment api 2021-10-12 11:29:09 +08:00
glovetleong 3d7090758d Merge branch 'master' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into cross-login 2021-10-12 08:53:57 +08:00
ahmedsophyudden e546825520 New add & delete company connection to connection segment api 2021-10-11 22:28:11 +08:00
edmondlang f6af7c5f4f code review remove d-flex 2021-10-10 15:42:26 +08:00
edmondlang 6ea51d56c1 improve responsive ui
fix order status bar width problem
2021-10-10 15:38:48 +08:00
glovetleong b36313e24c remark for order, container, packing list 2021-10-10 15:22:49 +08:00
edmondlang f2422ea45c improve responsive ui 2021-10-09 20:59:23 +08:00
edmondlang d26c90136b improve responsive 2021-10-09 20:43:40 +08:00
edmondlang c10e78ad51 imporve respnsive ui 2021-10-09 17:32:44 +08:00
edmondlang e4c8c021ec implement api from create-delivery-packing-list-api 2021-10-07 20:02:56 +08:00
edmondlang 46891669f1 Merge branch 'create-deliver-packing-list-api' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into delivery-packing-list-ui 2021-10-07 10:58:09 +08:00
glovetleong c281beb87a create deliver packing list api 2021-10-07 09:20:04 +08:00
edmondlang 0d53a61f18 update select all packing list funtion 2021-10-05 20:40:48 +08:00
edmondlang 6d0e7dd51d delivery-packing-list-ui 2021-10-05 17:00:00 +08:00
glovetleong 592e8c489b env 2021-09-29 14:24:37 +08:00
glovetleong ee77fd236a cross login 2021-09-29 14:23:50 +08:00
glovetleong ee87443ca4 pull 2021-09-28 22:23:51 +08:00
glovetleong 31105cfcef Merge branch 'master' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into cross-login 2021-09-28 22:09:05 +08:00
glovetleong 5d34201579 pull 2021-09-28 22:07:19 +08:00
Haziq Danial 61a75a4ee1 update order reference id 2021-09-28 18:51:43 +08:00
glovetleong f385407804 debug 2021-09-28 12:07:05 +08:00
glovetleong 0554cc895f checkout 2021-09-05 12:55:11 +08:00
glovetleong afcb1277f1 Merge branch 'master' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into cross-login
# Conflicts:
#	routes/web.php
2021-09-01 20:30:08 +08:00
glovetleong 2d49f4aabf cross login 2021-08-25 10:01:32 +08:00
glovetleong 2095c18871 cross login 2021-08-22 13:55:51 +08:00
511 changed files with 22248 additions and 1581 deletions
+4
View File
@@ -51,3 +51,7 @@ MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
UNITY_APP_URL="https://unity.izyim.com"
EXCHANGE_URL=https://dev.exchange.cief-malaysia.com/
MIX_EXCHANGE_URL="${EXCHANGE_URL}"
YD_API_CODE=''
@@ -63,7 +63,7 @@ abstract class AbstractControllerLogic
} catch (ErrorException|GeneralExceptions|TypeError $exception){
return (new ApiResponseObject($this->getNotificationTitle().' failed', $exception->getMessage(),
$exception->getCode() ? $exception->getCode() : HttpStatus::SERVER_ERROR))->handler();
!in_array($exception->getCode(), [0, 42000]) ? $exception->getCode() : HttpStatus::SERVER_ERROR))->handler();
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class ClaimantId implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('claimant_id', $value);
}
}
@@ -0,0 +1,32 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\PackingListType;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Carbon;
class Delivered implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('packingList', function($packingList){
return $packingList->where('type', PackingListType::SHIPPING_PACKING_LIST)->where('status', ApprovalStatus::APPROVED);
})->whereHas('container',
function($container) {
return $container->where('containers.status', ApprovalStatus::COMPLETED);
}
)->whereHas('deliverySchedules',
function($schedule) {
return $schedule->where('eta', '<', Carbon::now())->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
}
);
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class HasPendingDelivery implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $value ? $builder->whereHas('packingLists', function (Builder $query) use($value) {
$query->whereDoesntHave('transports');
}) : $builder->whereDoesntHave('packingLists', function (Builder $query) use($value) {
$query->whereDoesntHave('transports');
});
}
}
@@ -0,0 +1,32 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\PackingListType;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Carbon;
class InDestinationWarehouse implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('packingList', function($packingList){
return $packingList->where('type', PackingListType::SHIPPING_PACKING_LIST)->where('status', ApprovalStatus::APPROVED);
})->whereHas('container',
function($container) {
return $container->where('containers.status', ApprovalStatus::COMPLETED);
}
)->whereDoesntHave('deliverySchedules',
function($schedule) {
return $schedule->where('etd', '<', Carbon::now())->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
}
);
}
}
@@ -0,0 +1,29 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\PackingListType;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Carbon;
class InOriginWarehouse implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('packingList', function($packingList){
return $packingList->where('type', PackingListType::SHIPPING_PACKING_LIST)->where('status', ApprovalStatus::APPROVED);
})->whereDoesntHave('shippingSchedules',
function($schedule) {
return $schedule->where('etd', '<', Carbon::now())
->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
}
);
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\PackingListType;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Carbon;
class InTransit implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('packingList', function($packingList){
return $packingList->where('type', PackingListType::SHIPPING_PACKING_LIST)->where('status', ApprovalStatus::APPROVED);
})->whereHas('container',
function($container) {
return $container->where('containers.status', ApprovalStatus::PENDING_VERIFICATION);
}
)->whereHas('shippingSchedules',
function($schedule) {
return $schedule->where('etd', '<', Carbon::now())
->whereIn('schedules.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
}
);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class OwnerId implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('owner_id', $value);
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use Illuminate\Support\Carbon;
use Illuminate\Database\Eloquent\Builder;
class PackingListDeliveryStatus implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $value == 1 ? $builder->whereHas('containers', function ($query){
$query->where('containers.status', ApprovalStatus::COMPLETED);
})->whereDoesntHave('transports') : ($value == 2 ? $builder->whereHas('transports', function (Builder $query) use ($value) {
$query->whereDoesntHave('schedules', function (Builder $query) use ($value) {
$query->where('status', '!=', ApprovalStatus::EXPIRED)->where('eta', '<=', Carbon::now());
});
}) : $builder->whereHas('transports', function (Builder $query) use ($value) {
$query->whereHas('schedules', function (Builder $query) use ($value) {
$query->where('status', '!=', ApprovalStatus::EXPIRED)->where('eta', '<=', Carbon::now());
});
}));
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class PackingListStatus implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('packing_lists.status', $value);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class PackingListType implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('packing_lists.type', $value);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class TypeIn implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereIn('type', $value);
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\PackingListType;
use Illuminate\Database\Eloquent\Builder;
class WarehouseParcels implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('packingList', function ($query){
return $query->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->where('status', ApprovalStatus::APPROVED);
});
}
}
@@ -0,0 +1,22 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\DB;
class WithArrivalDate implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->leftJoin('transport_arrangements', function ($join) {
$join->on('packing_lists.id', '=', 'transport_arrangements.owner_id')->where('transport_arrangements.owner_type', 'App\Models\PackingList');
})->addSelect(['packing_lists.*', DB::raw('transport_arrangements.drop_date as arrival_date')]);
}
}
@@ -0,0 +1,15 @@
<?php
namespace App\Classes\General\Interfaces;
use Illuminate\Database\Eloquent\Relations\MorphTo;
interface Notifiable
{
public function subject(): MorphTo;
public function target(): MorphTo;
public function causer(): MorphTo;
}
@@ -7,7 +7,6 @@ use Illuminate\Database\Eloquent\Relations\MorphMany;
interface Packable
{
public function packingLists(): morphMany;
}
@@ -0,0 +1,13 @@
<?php
namespace App\Classes\General\Interfaces;
use Illuminate\Database\Eloquent\Relations\MorphMany;
interface Transactionable
{
public function transactions(): morphMany;
}
-94
View File
@@ -1,94 +0,0 @@
<?php
namespace App\Classes\Jobs;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class CurlContainerListJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
private $page;
public function __construct($page = 1)
{
$this->page = $page;
}
/**
* Execute the job.
*
* @return void
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function handle()
{
$cookies = $this->getCookie();
$headers = [
'Content-Type' => 'application/json',
'Cookie' => $cookies,
];
$last_two_month = Carbon::now()->subMonth(2)->format('Y-m-d');
$client = new \GuzzleHttp\Client(['headers' => $headers]);
$res = $client->post('http://portal.vtnation.com.my/Services/DataControllerService.asmx/GetPage', [\GuzzleHttp\RequestOptions::JSON => json_decode('{"controller":"VCustomercontainer","view":"grid1","request":{"PageIndex":' . $this->page . ',"PageSize":10,"PageOffset":0,"SortExpression":"CreatedOn DESC","GroupExpression":"","Filter":["LoadedTime:<=%js%\"' . $last_two_month . 'T00:00:00.000\"\u0000"],"ContextKey":"view1","FilterIsExternal":false,"LookupContextFieldName":null,"LookupContextController":null,"LookupContextView":null,"LookupContext":null,"Inserting":false,"LastCommandName":null,"ExternalFilter":[],"DoesNotRequireData":false,"LastView":"grid1","Tag":null,"RequiresFirstLetters":false,"ViewType":"Grid","SupportsCaching":true,"SystemFilter":null,"RequiresRowCount":true,"QuickFindHint":null,"RequiresPivot":false,"PivotDefinitions":null,"RequiresMetaData":true}}')]);
$data = json_decode($res->getBody()->getContents());
if (!empty($data->d->Rows)) {
// insert data here
// next page
$this->page = $this->page > 0 ? $this->page + 1 : 1;
CurlContainerListJob::dispatch($this->page + 1)
->delay(Carbon::now()->addSeconds(10));
}
}
public function getCookie()
{
// get latest cookies
$client = new \GuzzleHttp\Client(['cookies' => true]);
$r = $client->request('GET', 'http://portal.vtnation.com.my');
$call_cookie = $client->getConfig('cookies');
$call_cookie = $call_cookie->toArray();
$latest_cookie = [];
foreach ($call_cookie as $key => $row) {
$latest_cookie[] = $row['Name'] . '=' . $row['Value'];
}
$latest_cookie = implode(';', $latest_cookie);
// get access token
$headers = [
'Content-Type' => 'application/json',
'Cookie' => $latest_cookie,
];
$client = new \GuzzleHttp\Client(['headers' => $headers]);
$res = $client->post('http://portal.vtnation.com.my/Services/DataControllerService.asmx/Login', [\GuzzleHttp\RequestOptions::JSON => [
"username" => "CIEF",
"password" => "0122120880",
"createPersistentCookie" => true,
]]);
$token = json_decode($res->getBody()->getContents());
$token = $token->d->AccessToken;
$latest_cookie = $latest_cookie . ';AppVTCC=' . $token;
return $latest_cookie;
}
}
@@ -0,0 +1,32 @@
<?php
namespace App\Classes\Jobs;
use App\Classes\Modules\PackingLists\Processors\FetchOrderListsFromYdPortalProcessor;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class FetchOrdersFromYDPortalJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $timeout = 900;
/**
* Execute the job.
*
* @return void
* @throws \Illuminate\Contracts\Container\BindingResolutionException
*/
public function handle()
{
(App()->make(FetchOrderListsFromYdPortalProcessor::class))->execute();
}
}
@@ -0,0 +1,78 @@
<?php
namespace App\Classes\Modules\Accounts\ControllersLogic;
use App\Classes\Exceptions\ResourceConflictException;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Accounts\Processors\CreateUserProcessor;
use App\Classes\Modules\Accounts\Processors\GenerateEmailVerificationAttemptProcessor;
use App\Classes\Modules\Companies\DataTransferObjects\EmploymentObject;
use App\Classes\Modules\Companies\Processors\AssignEmployeeProcessor;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Http\Resources\UserResource;
use Illuminate\Database\QueryException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class AddNewMemberLogic extends AbstractControllerLogic
{
public function notification(): array
{
return [
'title' => 'Updated Email',
'message' => 'Successfully updated email'
];
}
/**
* @var AssignEmployeeProcessor
*/
private $assignEmployeeProcessor;
/**
* @var GenerateEmailVerificationAttemptProcessor
*/
private $generateEmailVerificationAttemptProcessor;
/**
* AddNewMemberLogic constructor.
* @param AssignEmployeeProcessor $assignEmployeeProcessor
* @param GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor
*/
public function __construct(AssignEmployeeProcessor $assignEmployeeProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor)
{
$this->assignEmployeeProcessor = $assignEmployeeProcessor;
$this->generateEmailVerificationAttemptProcessor = $generateEmailVerificationAttemptProcessor;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ResourceConflictException
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request): JsonResponse
{
try {
$user = Auth::user()->replicate();
$user->email = $request->input('email');
$user->status = ApprovalStatus::PENDING_VERIFICATION;
$user->save();
} catch (QueryException $exception){
throw new ResourceConflictException('Unable to change your email address as it already exists');
}
if($company = Auth::user()->companyModule()->first()){
$Object = new EmploymentObject($company, $user);
$this->assignEmployeeProcessor->execute($Object);
}
$this->generateEmailVerificationAttemptProcessor->execute($user);
return $this->resourceResponse(new UserResource($user));
}
}
@@ -15,6 +15,7 @@ use App\Classes\Modules\Companies\Processors\CreateCompanyModuleProcessor;
use App\Classes\Modules\Companies\DataTransferObjects\EmploymentObject;
use App\Classes\Modules\Companies\Services\ApprovesCompanyConnection;
use App\Classes\Modules\Companies\Services\CreatesCompanyConnection;
use App\Classes\Modules\Companies\Services\FetchesCompanyModule;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
use App\Classes\Modules\Documents\Processors\UploadIdentityDocumentProcessor;
@@ -76,6 +77,9 @@ class CreateCustomerLogic extends AbstractControllerLogic
/** @var GenerateEmailVerificationAttemptProcessor */
private $generateEmailVerificationAttemptProcessor;
/** @var FetchesCompanyModule */
private $fetchesCompanyModule;
/**
* CreateCustomerLogic constructor.
* @param CreateUserProcessor $createUserProcessor
@@ -88,8 +92,9 @@ class CreateCustomerLogic extends AbstractControllerLogic
* @param UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor
* @param AuthenticationProcessor $authenticationProcessor
* @param GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor
* @param FetchesCompanyModule $fetchesCompanyModule
*/
public function __construct(CreateUserProcessor $createUserProcessor, CreateCompanyProcessor $createCompanyProcessor, CreateCompanyModuleProcessor $createCompanyModuleProcessor, CreateContactProcessor $createContactProcessor, CreatesCompanyConnection $createsCompanyConnection, ApprovesCompanyConnection $approvesCompanyConnection, AssignEmployeeProcessor $assignEmployeeProcessor, UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor, AuthenticationProcessor $authenticationProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor)
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)
{
$this->createUserProcessor = $createUserProcessor;
$this->createCompanyProcessor = $createCompanyProcessor;
@@ -101,6 +106,7 @@ class CreateCustomerLogic extends AbstractControllerLogic
$this->uploadIdentityDocumentProcessor = $uploadIdentityDocumentProcessor;
$this->authenticationProcessor = $authenticationProcessor;
$this->generateEmailVerificationAttemptProcessor = $generateEmailVerificationAttemptProcessor;
$this->fetchesCompanyModule = $fetchesCompanyModule;
}
/**
@@ -126,7 +132,9 @@ class CreateCustomerLogic extends AbstractControllerLogic
/** @var CompanyModule $companyModule */
$companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::IMPORTER);
$connectionObject = new CompanyConnectionObject($companyModule, 'CIEF', mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate());
$inviter = $this->fetchesCompanyModule->execute(['reference'=>'CIEF']);
$connectionObject = new CompanyConnectionObject($companyModule, $inviter, mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate(), 'CIEF');
$connection = $this->createsCompanyConnection->execute($connectionObject);
@@ -0,0 +1,44 @@
<?php
namespace App\Classes\Modules\Accounts\ControllersLogic;
use App\Classes\Modules\Accounts\Processors\CrossAuthenticationProcessor;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CrossAuthenticateUserLogic extends AbstractControllerLogic
{
protected function notification():array {
return [
'title' => 'Cross Authentication',
'message' => 'You have successfully logged in to your account'
];
}
/** @var CrossAuthenticationProcessor */
private $crossAuthenticationProcessor;
/**
* CrossAuthenticateUserLogic constructor.
* @param CrossAuthenticationProcessor $authenticationProcessor
*/
public function __construct(CrossAuthenticationProcessor $crossAuthenticationProcessor)
{
$this->crossAuthenticationProcessor = $crossAuthenticationProcessor;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\AccessUnauthorisedException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function logic(Request $request): JsonResponse {
return $this->response($this->crossAuthenticationProcessor->execute($request));
}
}
@@ -12,6 +12,7 @@ use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\ValueObjects\Constants\Notifications;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
class GeneratePasswordResetLogic extends AbstractControllerLogic
{
@@ -27,7 +27,6 @@ class LogoutUserLogic extends AbstractControllerLogic
*/
public function __construct(InvalidatesAuthenticationToken $invalidatesAuthenticationToken)
{
logger("logout user logic");
$this->invalidatesAuthenticationToken = $invalidatesAuthenticationToken;
}
@@ -0,0 +1,43 @@
<?php
namespace App\Classes\Modules\Accounts\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
class CrossAuthenticationCredentialsObject implements DataTransferObject
{
/** @var string */
private $access_token;
/** @var string */
private $platform;
/**
* CrossAuthenticationCredentialsObject constructor.
* @param string $access_token
* @param string $platform
*/
public function __construct(string $access_token, int $platform)
{
$this->access_token = $access_token;
$this->platform = $platform;
}
/**
* @return string
*/
public function getAccessToken(): string
{
return $this->access_token;
}
/**
* @return string
*/
public function getPlatform(): int
{
return $this->platform;
}
}
@@ -0,0 +1,54 @@
<?php
namespace App\Classes\Modules\Accounts\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
use App\Models\User;
class UserSocialAccountObject implements DataTransferObject
{
/** @var String */
private $app_id;
/** @var User */
private $user;
/** @var integer */
private $platform;
/**
* UserSocialAccountObject constructor.
* @param String $token
* @param String $app_id
*/
public function __construct(String $app_id, User $user, int $platform)
{
$this->app_id = $app_id;
$this->user = $user;
$this->platform = $platform;
}
/**
* @return string
*/
public function getAppId(): String
{
return $this->app_id;
}
/**
* @return User
*/
public function getUser(): User
{
return $this->user;
}
/**
* @return int
*/
public function getPlatform(): int
{
return $this->platform;
}
}
@@ -0,0 +1,211 @@
<?php
namespace App\Classes\Modules\Accounts\Processors;
use App\Classes\Modules\Accounts\DataTransferObjects\CrossAuthenticationCredentialsObject;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyConnectionObject;
use App\Classes\Modules\Companies\DataTransferObjects\EmploymentObject;
use App\Classes\Modules\Accounts\DataTransferObjects\UserSocialAccountObject;
use App\Classes\Modules\Accounts\Services\CrossAuthenticatesUser;
use App\Classes\Modules\Accounts\Services\AuthenticationRedirect;
use App\Classes\Modules\Accounts\Services\FetchesUser;
use App\Classes\Modules\Accounts\Services\GeneratesAuthenticationToken;
use App\Classes\Modules\Accounts\Standards\Rules\CanCrossAuthenticateUser;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Accounts\Processors\CreateUserProcessor;
use App\Classes\Modules\Companies\Processors\CreateCompanyProcessor;
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
use App\Classes\Modules\Companies\Processors\CreateCompanyModuleProcessor;
use App\Classes\Modules\Companies\Services\CreatesCompanyConnection;
use App\Classes\General\Services\GeneratesInitials;
use App\Classes\Modules\Companies\Services\ApprovesCompanyConnection;
use App\Classes\Modules\Companies\Processors\AssignEmployeeProcessor;
use App\Classes\Modules\Documents\Processors\UploadIdentityDocumentProcessor;
use App\Classes\Modules\Accounts\Services\CreatesUserSocialAccount;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Classes\ValueObjects\Constants\CompanyType;
use App\Classes\ValueObjects\Constants\RoleTypes;
use Illuminate\Http\Request;
use App\Models\UserSocialAccount;
class CrossAuthenticationProcessor
{
/** @var CanCrossAuthenticateUser */
private $canCrossAuthenticateUser;
/** @var CrossAuthenticatesUser */
private $authenticatesUser;
/** @var GeneratesAuthenticationToken */
private $generatesAuthenticationToken;
/** @var FetchesUser */
private $fetchesUser;
/** @var AuthenticationRedirect */
private $authenticationRedirect;
/** @var CreateUserProcessor */
private $createUserProcessor;
/** @var CreateCompanyProcessor */
private $createCompanyProcessor;
/** @var CreateContactProcessor */
private $createContactProcessor;
/** @var CreateCompanyModuleProcessor */
private $createCompanyModuleProcessor;
/** @var CreatesCompanyConnection */
private $createsCompanyConnection;
/** @var ApprovesCompanyConnection */
private $approvesCompanyConnection;
/** @var AssignEmployeeProcessor */
private $assignEmployeeProcessor;
/** @var UploadIdentityDocumentProcessor */
private $uploadIdentityDocumentProcessor;
/** @var CreatesUserSocialAccount */
private $createsUserSocialAccount;
/**
* CrossAuthenticationProcessor constructor.
* @param CanCrossAuthenticateUser $canCrossAuthenticateUser
* @param CrossAuthenticatesUser $crossAuthenticatesUser
* @param GeneratesAuthenticationToken $generatesAuthenticationToken
* @param FetchesUser $fetchesUser
* @param AuthenticationRedirect $authenticationRedirect
* @param CreateUserProcessor $createUserProcessor
* @param CreateCompanyProcessor $createCompanyProcessor
* @param CreateContactProcessor $createContactProcessor
* @param CreateCompanyModuleProcessor $createCompanyModuleProcessor
* @param CreatesCompanyConnection $createsCompanyConnection
* @param ApprovesCompanyConnection $approvesCompanyConnection
* @param AssignEmployeeProcessor $assignEmployeeProcessor
* @param UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor
* @param CreatesUserSocialAccount $createsUserSocialAccount
*/
public function __construct(
CanCrossAuthenticateUser $canCrossAuthenticateUser,
CrossAuthenticatesUser $crossAuthenticatesUser,
GeneratesAuthenticationToken $generatesAuthenticationToken,
FetchesUser $fetchesUser,
AuthenticationRedirect $authenticationRedirect,
CreateUserProcessor $createUserProcessor,
CreateCompanyProcessor $createCompanyProcessor,
CreateContactProcessor $createContactProcessor,
CreateCompanyModuleProcessor $createCompanyModuleProcessor,
CreatesCompanyConnection $createsCompanyConnection,
ApprovesCompanyConnection $approvesCompanyConnection,
AssignEmployeeProcessor $assignEmployeeProcessor,
UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor,
CreatesUserSocialAccount $createsUserSocialAccount
)
{
$this->canCrossAuthenticateUser = $canCrossAuthenticateUser;
$this->crossAuthenticatesUser = $crossAuthenticatesUser;
$this->generatesAuthenticationToken = $generatesAuthenticationToken;
$this->fetchesUser = $fetchesUser;
$this->authenticationRedirect = $authenticationRedirect;
$this->createUserProcessor = $createUserProcessor;
$this->createCompanyProcessor = $createCompanyProcessor;
$this->createContactProcessor = $createContactProcessor;
$this->createCompanyModuleProcessor = $createCompanyModuleProcessor;
$this->createsCompanyConnection = $createsCompanyConnection;
$this->createsCompanyConnection = $createsCompanyConnection;
$this->approvesCompanyConnection = $approvesCompanyConnection;
$this->assignEmployeeProcessor = $assignEmployeeProcessor;
$this->uploadIdentityDocumentProcessor = $uploadIdentityDocumentProcessor;
$this->createsUserSocialAccount = $createsUserSocialAccount;
}
/**
* @param Request $request
* @return array
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\AccessUnauthorisedException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(Request $request): array {
$object = new CrossAuthenticationCredentialsObject($request->input('access_token'), $request->input('platform'));
$this->canCrossAuthenticateUser->passes($object);
$cross = $this->crossAuthenticatesUser->execute($object);
$user_social_account = UserSocialAccount::where('app_id', $cross->token->user->id)->first();
if (!$user_social_account) {
$request->request->add([
'name' => $cross->token->user->name,
'email' => $cross->token->user->email,
'password' => 'pass123',
'password_confirmation' => 'pass123',
]);
$user = $this->createUserProcessor->execute(
$request,
RoleTypes::USER,
env('APP_ENV') != 'production' ? ApprovalStatus::APPROVED : ApprovalStatus::PENDING_VERIFICATION
);
$company = $this->createCompanyProcessor->execute(
$cross->payload->data->name,
CompanyType::COMPANY_BUSINESS,
ApprovalStatus::PENDING_SUBMISSION
);
$contactObject = new ContactObject(
$cross->payload->data->contact->reference,
$cross->payload->data->contact->phone,
$cross->payload->data->contact->email,
$cross->payload->data->contact->wechat_id
);
$contact = $this->createContactProcessor->execute($contactObject, $company);
$companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::IMPORTER);
$connectionObject = new CompanyConnectionObject(
$companyModule, 'CIEF',
mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate()
);
$connection = $this->createsCompanyConnection->execute($connectionObject);
$this->approvesCompanyConnection->execute($connection);
$object = new EmploymentObject($companyModule, $user);
$this->assignEmployeeProcessor->execute($object);
$request->request->add([
'files' => [$cross->document->src],
'identification_no' => $cross->payload->data->identification->reference,
]);
$this->uploadIdentityDocumentProcessor->execute($request, $company);
$object = new UserSocialAccountObject(
$cross->token->user->id,
$user,
$request->input('platform')
);
$this->createsUserSocialAccount->execute($object);
}
else {
$user = $user_social_account->user()->first();
}
return ['access_token' => $this->generatesAuthenticationToken->execute($user), 'redirect_url' => $this->authenticationRedirect->url($user)];
}
}
@@ -56,4 +56,4 @@ class GenerateEmailVerificationAttemptProcessor
}
}
}
@@ -2,6 +2,7 @@
namespace App\Classes\Modules\Accounts\Services;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Classes\ValueObjects\Constants\RoleTypes;
use App\Models\User;
@@ -11,6 +12,11 @@ class AuthenticationRedirect
public function url(User $user){
if($user->type === RoleTypes::USER){
if (in_array($user->companyModule()->first()->type, [BusinessType::ONLINE_SELLER, BusinessType::LAST_MILE_DELIVERY_AGENT])) {
return route('last_mile_delivery.dashboard');
}
return route('dashboard');
}
@@ -0,0 +1,24 @@
<?php
namespace App\Classes\Modules\Accounts\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Accounts\DataTransferObjects\UserSocialAccountObject;
use App\Models\UserSocialAccount;
class CreatesUserSocialAccount extends AbstractUpdateRecord
{
/**
* @param UserSocialAccountObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(UserSocialAccountObject $object) {
$model = new UserSocialAccount();
$model->user_id = $object->getUser()->id;
$model->app_id = $object->getAppId();
$model->platform = $object->getPlatform();
return $this->handler($model);
}
}
@@ -0,0 +1,40 @@
<?php
namespace App\Classes\Modules\Accounts\Services;
use Illuminate\Support\Facades\Http;
use App\Classes\Exceptions\AccessUnauthorisedException;
use App\Classes\Modules\Accounts\DataTransferObjects\CrossAuthenticationCredentialsObject;
use App\Classes\ValueObjects\Constants\PlatformType;
class CrossAuthenticatesUser
{
/**
* @param CrossAuthenticationCredentialsObject $object
* @return false|string
* @throws AccessUnauthorisedException
*/
public function execute(CrossAuthenticationCredentialsObject $object){
if ($object->getPlatform() == PlatformType::EXCHANGE) {
$token = $object->getAccessToken();
$tokenParts = explode(".", $token);
$tokenPayload = base64_decode($tokenParts[1]);
$jwtPayload = json_decode($tokenPayload);
$response = Http::withToken($object->getAccessToken())->get(env('EXCHANGE_URL') . 'api/v1/company/' . $jwtPayload->user->company_id . '/show')->object();
$response_document = Http::withToken($object->getAccessToken())->get(env('EXCHANGE_URL') . 'api/v1/storage/' . $response->payload->data->identification->files[0]->file->file_info[0]->original->file . '/fetch')->object();
$response->token = $jwtPayload;
$response->document = $response_document->payload;
}
return $response;
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Accounts\Services;
use App\Classes\General\Eloquent\AbstractFetchRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\UserSocialAccount;
class FetchesUserSocialAccount extends AbstractFetchRecord
{
/** @var UserSocialAccount */
private $repository;
/**
* FetchesUser constructor.
* @param UserSocialAccount $repository
*/
public function __construct(UserSocialAccount $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
public function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -68,7 +68,11 @@ class GeneratesAuthenticationToken {
$companyModule = $user->companyModule()->first();
$claims = array_merge($claims, [
'company_id' => $companyModule->company_id
'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',
]);
}
@@ -0,0 +1,54 @@
<?php
namespace App\Classes\Modules\Accounts\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Exceptions\RequestValidationException;
use App\Classes\Modules\Accounts\DataTransferObjects\AuthenticationCredentialsObject;
use App\Classes\Modules\Accounts\Standards\Validators\UserCrossAuthenticationValidation;
class CanCrossAuthenticateUser extends AbstractRule
{
/** @var UserCrossAuthenticationValidation */
private $userCrossAuthenticationValidation;
/**
* CanCrossAuthenticateUser constructor.
* @param UserCrossAuthenticationValidation $userCrossAuthenticationValidation
*/
public function __construct(UserCrossAuthenticationValidation $userCrossAuthenticationValidation)
{
$this->userCrossAuthenticationValidation = $userCrossAuthenticationValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
return true;
}
/**
* @param AuthenticationCredentialsObject $object
* @return bool
* @throws RequestValidationException
*/
protected function validators($object): bool
{
return $this->userCrossAuthenticationValidation->validate($object);
}
/**
* @param AuthenticationCredentialsObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,43 @@
<?php
namespace App\Classes\Modules\Accounts\Standards\Validators;
use App\Classes\General\Abstracts\AbstractValidation;
use App\Classes\Modules\Accounts\DataTransferObjects\CrossAuthenticationCredentialsObject;
class UserCrossAuthenticationValidation extends AbstractValidation
{
/**
* @param CrossAuthenticationCredentialsObject $object
* @return array
*/
protected function data($object): array {
return [
'access_token' => $object->getAccesstoken(),
'platform' => $object->getPlatform()
];
}
/**
* @return array
*/
protected function rules(): array {
return [
'access_token' => 'required',
'platform' => 'required'
];
}
/**
* @return array
*/
protected function messages(): array {
return [];
}
}
@@ -4,12 +4,19 @@ namespace App\Classes\Modules\Addresses\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\General\Interfaces\Contactable;
use App\Classes\Modules\Addresses\Services\CreatesAddress;
use App\Classes\Modules\Addresses\Services\FetchesDistrict;
use App\Classes\Modules\Addresses\Standards\Rules\CanCreateAddress;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Classes\Modules\Companies\Services\FetchesCompanyModule;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Http\Resources\AddressResource;
use App\Models\Address;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -39,19 +46,29 @@ class CreateAddressLogic extends AbstractControllerLogic
/** @var CreatesAddress */
private $createsAddress;
/** @var CreateContactProcessor */
private $createContactProcessor;
/** @var CreateRemarkProcessor */
private $createRemarkProcessor;
/**
* CreateAddressLogic constructor.
* @param CanCreateAddress $canCreateAddress
* @param FetchesDistrict $fetchesDistrict
* @param FetchesCompanyModule $fetchesCompanyModule
* @param CreatesAddress $createsAddress
* @param CreateContactProcessor $createContactProcessor
* @param CreateRemarkProcessor $createRemarkProcessor
*/
public function __construct(CanCreateAddress $canCreateAddress, FetchesDistrict $fetchesDistrict, FetchesCompanyModule $fetchesCompanyModule, CreatesAddress $createsAddress)
public function __construct(CanCreateAddress $canCreateAddress, FetchesDistrict $fetchesDistrict, FetchesCompanyModule $fetchesCompanyModule, CreatesAddress $createsAddress, CreateContactProcessor $createContactProcessor, CreateRemarkProcessor $createRemarkProcessor)
{
$this->canCreateAddress = $canCreateAddress;
$this->fetchesDistrict = $fetchesDistrict;
$this->fetchesCompanyModule = $fetchesCompanyModule;
$this->createsAddress = $createsAddress;
$this->createContactProcessor = $createContactProcessor;
$this->createRemarkProcessor = $createRemarkProcessor;
}
/**
@@ -66,12 +83,23 @@ class CreateAddressLogic extends AbstractControllerLogic
$district = $this->fetchesDistrict->execute(['id' => $request->input('district_id')]);
$object = new AddressObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'), $request->input('reference'));
$object = new AddressObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'), $request->input('type'), ApprovalStatus::APPROVED, $request->input('reference'));
$this->canCreateAddress->passes($object);
/** @var Address $address */
$address = $this->createsAddress->execute($this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]), $object);
if($request->input('phone')){
$contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', '');
$this->createContactProcessor->execute($contactObject, $address);
}
if($request->input('remark')){
$remarkObject = new RemarkObject($request->input('remark'), Auth()->user()->id);
$this->createRemarkProcessor->execute($address, $remarkObject);
}
return $this->resourceResponse(new AddressResource($address));
}
@@ -0,0 +1,54 @@
<?php
namespace App\Classes\Modules\Addresses\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Addresses\Services\ListsAddresses;
use App\Classes\Modules\Addresses\Services\ListsStates;
use App\Classes\Modules\Addresses\Standards\Rules\CanListAddresses;
use App\Http\Resources\AddressResource;
use App\Http\Resources\StateResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListStatesLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieved Addresses',
'message' => 'You have successfully retrieved a list of Addresses'
];
}
/** @var ListsStates */
private $listStates;
/**
* ListStatesLogic constructor.
* @param ListsStates $listStates
*/
public function __construct(ListsStates $listStates)
{
$this->listStates = $listStates;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request) : JsonResponse
{
$query = $this->listStates->execute($this->listStates->deserializeFilters($request->input('filters')));
return $this->collectionResponse(StateResource::collection($query));
}
}
@@ -9,7 +9,14 @@ use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\Modules\Addresses\Services\FetchesDistrict;
use App\Classes\Modules\Addresses\Standards\Rules\CanUpdateAddress;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor;
use App\Classes\ValueObjects\Constants\AddressType;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Http\Resources\AddressResource;
use App\Models\Address;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -38,22 +45,31 @@ class UpdateAddressLogic extends AbstractControllerLogic
/** @var FetchesDistrict */
private $fetchesDistrict;
/** @var CreateContactProcessor */
private $createContactProcessor;
/** @var CreateRemarkProcessor */
private $createRemarkProcessor;
/**
* UpdateAddressLogic constructor.
* @param CanUpdateAddress $canUpdateAddress
* @param UpdatesAddress $updatesAddress
* @param FetchesAddress $fetchesAddress
* @param FetchesDistrict $fetchesDistrict
* @param CreateContactProcessor $createContactProcessor
* @param CreateRemarkProcessor $createRemarkProcessor
*/
public function __construct(CanUpdateAddress $canUpdateAddress, UpdatesAddress $updatesAddress, FetchesAddress $fetchesAddress, FetchesDistrict $fetchesDistrict)
public function __construct(CanUpdateAddress $canUpdateAddress, UpdatesAddress $updatesAddress, FetchesAddress $fetchesAddress, FetchesDistrict $fetchesDistrict, CreateContactProcessor $createContactProcessor, CreateRemarkProcessor $createRemarkProcessor)
{
$this->canUpdateAddress = $canUpdateAddress;
$this->updatesAddress = $updatesAddress;
$this->fetchesAddress = $fetchesAddress;
$this->fetchesDistrict = $fetchesDistrict;
$this->createContactProcessor = $createContactProcessor;
$this->createRemarkProcessor = $createRemarkProcessor;
}
/**
* @param Request $request
* @return JsonResponse
@@ -65,14 +81,27 @@ class UpdateAddressLogic extends AbstractControllerLogic
{
$district = $this->fetchesDistrict->execute(['id' => $request->input('district_id')]);
$object = new AddressObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'), $request->input('reference'));
$object = new AddressObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'), AddressType::DELIVERY, ApprovalStatus::APPROVED, $request->input('reference'));
$this->canUpdateAddress->passes($object);
$address = $this->fetchesAddress->execute(['id' => $request->route('id')]);
/** @var Address $address */
$address = $this->updatesAddress->execute($address, $object);
$address->contacts()->delete(); $address->remarks()->delete();
if($request->input('phone')){
$contactObject = new ContactObject($request->input('person_in_charge'), $request->input('phone'), '', '');
$this->createContactProcessor->execute($contactObject, $address);
}
if($request->input('remark')){
$remarkObject = new RemarkObject($request->input('remark'), Auth()->user()->id);
$this->createRemarkProcessor->execute($address, $remarkObject);
}
return $this->resourceResponse(new AddressResource($address));
}
@@ -26,6 +26,12 @@ class AddressObject implements DataTransferObject
/** @var int */
private $postCode;
/** @var int */
private $type;
/** @var int */
private $status;
/** @var string|null */
private $reference;
@@ -37,9 +43,11 @@ class AddressObject implements DataTransferObject
* @param int $stateId
* @param int $districtId
* @param int $postCode
* @param int $type
* @param int $status
* @param null|string $reference
*/
public function __construct(string $streetOne, ?string $streetTwo, int $countryId, int $stateId, int $districtId, int $postCode, ?string $reference = null, ?int $status = ApprovalStatus::APPROVED)
public function __construct(string $streetOne, ?string $streetTwo, int $countryId, int $stateId, int $districtId, int $postCode, int $type, int $status, ?string $reference = null)
{
$this->streetOne = $streetOne;
$this->streetTwo = $streetTwo;
@@ -47,8 +55,9 @@ class AddressObject implements DataTransferObject
$this->stateId = $stateId;
$this->districtId = $districtId;
$this->postCode = $postCode;
$this->reference = $reference;
$this->type = $type;
$this->status = $status;
$this->reference = $reference;
}
/**
@@ -100,11 +109,11 @@ class AddressObject implements DataTransferObject
}
/**
* @return null|string
* @return int
*/
public function getReference(): ?string
public function getType(): int
{
return $this->reference;
return $this->type;
}
/**
@@ -115,5 +124,13 @@ class AddressObject implements DataTransferObject
return $this->status;
}
/**
* @return null|string
*/
public function getReference(): ?string
{
return $this->reference;
}
}
@@ -10,6 +10,8 @@ namespace App\Classes\Modules\Addresses\Services;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Classes\ValueObjects\Constants\AddressType;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Models\District;
use App\Models\OldAddress;
@@ -31,7 +33,7 @@ class CleansOldAddress
return null;
}
return new AddressObject($this->cleanAddress($address->street_one, $district, $address->post_code), $this->cleanAddress($address->street_two, $district, $address->post_code), $district->country_id, $district->state_id, $district->id, $address->post_code, 'Delivery Address');
return new AddressObject($this->cleanAddress($address->street_one, $district, $address->post_code), $this->cleanAddress($address->street_two, $district, $address->post_code), $district->country_id, $district->state_id, $district->id, $address->post_code, AddressType::DELIVERY, ApprovalStatus::APPROVED, 'Delivery Address');
}
@@ -29,6 +29,7 @@ class CreatesAddress extends AbstractUpdateRelationshipRecord
$model->district_id = $object->getDistrictId();
$model->postcode = $object->getPostCode();
$model->status = $object->getStatus();
$model->type = $object->getType();
return $this->handler($addressable->addresses(), $model);
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Addresses\Services;
use App\Classes\General\Eloquent\AbstractListRecord;
use App\Models\State;
use Illuminate\Database\Eloquent\Builder;
class ListsStates extends AbstractListRecord
{
/** @var State */
private $repository;
/**
* ListsStates constructor.
* @param State $repository
*/
public function __construct(State $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,61 @@
<?php
namespace App\Classes\Modules\Announcements\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Announcements\Services\FetchesAnnouncement;
use App\Classes\Modules\Announcements\Processors\AssignAnnouncementToSegmentProcessor;
use App\Http\Resources\AnnouncementResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class AssignAnnouncementToSegmentLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification(): array
{
return [
'title' => 'Assign Announcement To Segment',
'message' => 'You have successfully assigned Announcement to segment'
];
}
/** @var FetchesAnnouncement */
private $fetchesAnnouncement;
/** @var AssignAnnouncementToSegmentProcessor */
private $assignAnnouncementToSegmentProcessor;
/**
* AssignAnnouncementToSegmentLogic constructor.
* @param FetchesAnnouncement $fetchesAnnouncement
* @param AssignAnnouncementToSegmentProcessor $assignAnnouncementToSegmentProcessor
*/
public function __construct(FetchesAnnouncement $fetchesAnnouncement, AssignAnnouncementToSegmentProcessor $assignAnnouncementToSegmentProcessor)
{
$this->fetchesAnnouncement = $fetchesAnnouncement;
$this->assignAnnouncementToSegmentProcessor = $assignAnnouncementToSegmentProcessor;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request): JsonResponse
{
$announcement = $this->fetchesAnnouncement->execute(['id' => $request->route('id')]);
$this->assignAnnouncementToSegmentProcessor->execute($announcement, $request->input('segment_id'));
return $this->resourceResponse(new AnnouncementResource($announcement));
}
}
@@ -0,0 +1,82 @@
<?php
namespace App\Classes\Modules\Announcements\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Announcements\DataTransferObjects\AnnouncementObject;
use App\Classes\Modules\Announcements\Standards\Rules\CanCreateAnnouncement;
use App\Classes\Modules\Announcements\Services\CreatesAnnouncement;
use App\Classes\Modules\Announcements\Processors\AssignAnnouncementToSegmentProcessor;
use App\Http\Resources\AnnouncementResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateAnnouncementLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification(): array
{
return [
'title' => 'Created Annoucement',
'message' => 'You have successfully created a new Annoucements'
];
}
/** @var CanCreateAnnouncement */
private $canCreateAnnouncement;
/** @var CreatesAnnoucement */
private $createsAnnoucement;
/** @var AssignAnnouncementToSegmentProcessor */
private $assignAnnouncementToSegmentProcessor;
/**
* CreateAnnouncementLogic constructor.
* @param CanCreateAnnoucement $canCreateAnnoucement
* @param CreatesAnnoucement $createsAnnoucement
* @param AssignAnnouncementToSegmentProcessor $assignAnnouncementToSegmentProcessor
*/
public function __construct(
CanCreateAnnouncement $canCreateAnnouncement,
CreatesAnnouncement $createsAnnoucement,
AssignAnnouncementToSegmentProcessor $assignAnnouncementToSegmentProcessor
) {
$this->canCreateAnnouncement = $canCreateAnnouncement;
$this->createsAnnoucement = $createsAnnoucement;
$this->assignAnnouncementToSegmentProcessor = $assignAnnouncementToSegmentProcessor;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request): JsonResponse
{
$annoucement_object = new AnnouncementObject(
$request->input('title'),
$request->input('description'),
$request->input('starting_on'),
$request->input('ending_on')
);
$this->canCreateAnnouncement->passes($annoucement_object);
$announcement = $this->createsAnnoucement->execute($annoucement_object);
$this->assignAnnouncementToSegmentProcessor->execute($announcement);
return $this->resourceResponse(new AnnouncementResource($announcement));
}
}
@@ -0,0 +1,71 @@
<?php
namespace App\Classes\Modules\Announcements\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Announcements\Standards\Rules\CanDeleteAnnouncement;
use App\Classes\Modules\Announcements\Services\FetchesAnnouncement;
use App\Classes\Modules\Announcements\Services\DeletesAnnouncement;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class DeleteAnnouncementLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification(): array
{
return [
'title' => 'Delete Announcement',
'message' => 'You have successfully deleted the Announcement'
];
}
/** @var CanDeleteAnnouncement */
private $canDeleteAnnouncement;
/** @var FetchesAnnouncement */
private $fetchesAnnouncement;
/** @var DeletesAnnouncement */
private $deletesAnnouncement;
/**
* DeleteAnnouncementLogic constructor.
* @param CanDeleteAnnouncement $canDeleteAnnouncement
* @param FetchesAnnouncement $fetchesAnnouncement
* @param DeletesAnnouncement $deletesAnnouncement
*/
public function __construct(
CanDeleteAnnouncement $canDeleteAnnoucement,
FetchesAnnouncement $fetchesAnnoucement,
DeletesAnnouncement $deletesAnnoucement
) {
$this->canDeleteAnnoucement = $canDeleteAnnoucement;
$this->fetchesAnnoucement = $fetchesAnnoucement;
$this->deletesAnnoucement = $deletesAnnoucement;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request): JsonResponse
{
$this->canDeleteAnnoucement->passes();
$annoucement = $this->fetchesAnnoucement->execute(['id' => $request->route('id')]);
$this->deletesAnnoucement->execute($annoucement);
return $this->response([]);
}
}
@@ -0,0 +1,60 @@
<?php
namespace App\Classes\Modules\Announcements\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Announcements\Services\ListsAnnouncements;
use App\Classes\Modules\Announcements\Standards\Rules\CanListAnnouncements;
use App\Http\Resources\AnnouncementResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListAnnouncementsLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification(): array
{
return [
'title' => 'Retrieve Announcements',
'message' => 'You have successfully retrieved a list of Announcements'
];
}
/** @var CanListAnnouncements */
private $canListAnnouncements;
/** @var ListsAnnouncements */
private $listsAnnouncements;
/**
* ListAnnouncementsLogic constructor.
* @param CanListAnnouncements $canListAnnouncements
* @param ListsAnnouncements $listsAnnouncements
*/
public function __construct(CanListAnnouncements $canListAnnouncements, ListsAnnouncements $listsAnnouncements)
{
$this->canListAnnouncements = $canListAnnouncements;
$this->listsAnnouncements = $listsAnnouncements;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request): JsonResponse
{
$this->canListAnnouncements->passes();
$annoucements = $this->listsAnnouncements->execute($this->listsAnnouncements->deserializeFilters($request->input('filters')));
return $this->collectionResponse(AnnouncementResource::collection($annoucements));
}
}
@@ -0,0 +1,68 @@
<?php
namespace App\Classes\Modules\Announcements\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Announcements\Services\FetchesAnnouncement;
use App\Classes\Modules\Segments\Services\FetchesSegment;
use App\Classes\Modules\Announcements\Services\RemovesAnnouncementFromSegment;
use App\Http\Resources\AnnouncementResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class RemoveSegmentFromAnnouncementLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification(): array
{
return [
'title' => 'Detach Announcement From Segment',
'message' => 'You have successfully detached Announcement from segment'
];
}
/** @var FetchesAnnouncement */
private $fetchesAnnnouncement;
/** @var FetchesSegment */
private $fetchesSegment;
/** @var RemovesAnnouncementFromSegment */
private $removesAnnouncementFromSegment;
/**
* RemoveSegmentFromAnnouncementLogic constructor.
* @param FetchesAnnouncement $fetchesAnnnouncement
* @param FetchesSegment $fetchesSegment
* @param RemovesAnnouncementFromSegment $removesAnnouncementFromSegment
*/
public function __construct(FetchesAnnouncement $fetchesAnnnouncement, FetchesSegment $fetchesSegment, RemovesAnnouncementFromSegment $removesAnnouncementFromSegment)
{
$this->fetchesAnnnouncement = $fetchesAnnnouncement;
$this->fetchesSegment = $fetchesSegment;
$this->removesAnnouncementFromSegment = $removesAnnouncementFromSegment;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request): JsonResponse
{
$announcement = $this->fetchesAnnnouncement->execute(['id' => $request->route('id')]);
$segment = $this->fetchesSegment->execute(['id' => $request->route('segment_id')]);
$this->removesAnnouncementFromSegment->execute($announcement, $segment);
return $this->resourceResponse(new AnnouncementResource($announcement));
}
}
@@ -0,0 +1,83 @@
<?php
namespace App\Classes\Modules\Announcements\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Announcements\DataTransferObjects\AnnouncementObject;
use App\Classes\Modules\Announcements\Standards\Rules\CanUpdateAnnouncement;
use App\Classes\Modules\Announcements\Services\FetchesAnnouncement;
use App\Classes\Modules\Announcements\Services\UpdatesAnnouncement;
use App\Http\Resources\AnnouncementResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdateAnnouncementLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification(): array
{
return [
'title' => 'Update Announcement',
'message' => 'You have successfully updated the Announcement'
];
}
/** @var CanUpdateAnnouncement */
private $canUpdateAnnouncement;
/** @var FetchesAnnouncement */
private $fetchesAnnouncement;
/** @var UpdatesAnnouncement */
private $updatesAnnouncement;
/**
* UpdateAnnouncementLogic constructor.
* @param CanUpdateAnnouncement $canUpdateAnnouncement
* @param FetchesAnnouncement $fetchesAnnouncement
* @param UpdatesAnnouncement $updatesAnnouncement
*/
public function __construct(
CanUpdateAnnouncement $canUpdateAnnouncement,
FetchesAnnouncement $fetchesAnnouncement,
UpdatesAnnouncement $updatesAnnouncement
) {
$this->canUpdateAnnouncement = $canUpdateAnnouncement;
$this->fetchesAnnouncement = $fetchesAnnouncement;
$this->updatesAnnouncement = $updatesAnnouncement;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request): JsonResponse
{
$annoucement_object = new AnnouncementObject(
$request->input('title'),
$request->input('description'),
$request->input('starting_on'),
$request->input('ending_on')
);
$this->canUpdateAnnouncement->passes($annoucement_object);
$annoucement = $this->fetchesAnnouncement->execute(['id' => $request->route('id')]);
$announcement_query = $this->updatesAnnouncement->execute($annoucement, $annoucement_object);
//$announcement_query->segments()->sync($request->input('segment_id'));
return $this->resourceResponse(new AnnouncementResource($announcement_query));
}
}
@@ -0,0 +1,69 @@
<?php
namespace App\Classes\Modules\Announcements\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
class AnnouncementObject implements DataTransferObject
{
/** @var string */
private $title;
/** @var string */
private $description;
/** @var string */
private $starting_on;
/** @var string */
private $ending_on;
/**
* AnnouncementObject constructor.
* @param string $title
* @param string $description
* @param string $start_date
* @param string $end_date
*/
public function __construct(string $title, string $description, string $starting_on, string $ending_on)
{
$this->title = $title;
$this->description = $description;
$this->starting_on = $starting_on;
$this->ending_on = $ending_on;
}
/**
* @return string
*/
public function getTitle(): string
{
return $this->title;
}
/**
* @return string
*/
public function getDescription(): string
{
return $this->description;
}
/**
* @return string
*/
public function getStartingOn(): string
{
return $this->starting_on;
}
/**
* @return string
*/
public function getEndingOn(): string
{
return $this->ending_on;
}
}
@@ -0,0 +1,56 @@
<?php
namespace App\Classes\Modules\Announcements\Processors;
use App\Classes\Modules\Announcements\Services\AssignsAnnouncementToSegment;
use App\Classes\Modules\Announcements\Standards\Rules\CanAssignSegment;
use App\Classes\Modules\Segments\Services\FetchesSegment;
use App\Classes\ValueObjects\Constants\SegmentConstants;
use App\Models\Announcement;
use Illuminate\Database\Eloquent\Model;
class AssignAnnouncementToSegmentProcessor
{
/** @var CanAssignSegment */
private $canAssignSegment;
/** @var FetchesSegment */
private $fetchesSegment;
/** @var AssignAnnouncementToSegment */
private $assignsAnnouncementToSegment;
/**
* AssignAnnouncementToSegmentProcessor constructor.
* @param CanAssignSegment $canAssignSegment
* @param AssignAnnouncementToSegment $assignsAnnouncementToSegment
* @param FetchesSegment $fetchesSegment
*/
public function __construct(CanAssignSegment $canAssignSegment, FetchesSegment $fetchesSegment, AssignsAnnouncementToSegment $assignsAnnouncementToSegment)
{
$this->canAssignSegment = $canAssignSegment;
$this->assignsAnnouncementToSegment = $assignsAnnouncementToSegment;
$this->fetchesSegment = $fetchesSegment;
}
/**
* @param Announcement $announcement
* @param int|null $segmentId
* @return Model
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(Announcement $announcement, ?int $segmentId = SegmentConstants::STANDARD_SEGMENT): Model
{
$this->canAssignSegment->passes();
$segment = $this->fetchesSegment->execute(['id' => $segmentId]);
return $this->assignsAnnouncementToSegment->execute($announcement, $segment);
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Announcements\Services;
use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\Announcement;
use App\Models\Segment;
use Illuminate\Database\QueryException;
class AssignsAnnouncementToSegment extends AbstractUpdateRecord
{
/**
* @param Announcement $announcement
* @param Segment $segment
* @return \Illuminate\Database\Eloquent\Model
* @throws MalformedRequestException
*/
public function execute(Announcement $announcement, Segment $segment)
{
try {
$announcement->segments()->attach($segment);
return $announcement;
} catch (QueryException $exception){
throw new MalformedRequestException($exception);
}
}
}
@@ -0,0 +1,26 @@
<?php
namespace App\Classes\Modules\Announcements\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Announcements\DataTransferObjects\AnnouncementObject;
use App\Models\Announcement;
class CreatesAnnouncement extends AbstractUpdateRecord
{
/**
* @param AnnouncementObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(AnnouncementObject $object)
{
$model = new Announcement();
$model->title = $object->getTitle();
$model->description = $object->getDescription();
$model->starting_on = $object->getStartingOn();
$model->ending_on = $object->getEndingOn();
return $this->handler($model);
}
}
@@ -0,0 +1,19 @@
<?php
namespace App\Classes\Modules\Announcements\Services;
use App\Classes\General\Eloquent\AbstractDeleteRecord;
use App\Models\Announcement;
class DeletesAnnouncement extends AbstractDeleteRecord
{
/**
* @param Announcement $model
* @return mixed
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Announcement $model) {
return $this->handler($model);
}
}
@@ -0,0 +1,34 @@
<?php
namespace App\Classes\Modules\Announcements\Services;
use App\Classes\General\Eloquent\AbstractFetchRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\Announcement;
class FetchesAnnouncement extends AbstractFetchRecord
{
/** @var Announcement */
private $repository;
/**
* FetchesAnnouncement constructor.
* @param Announcement $repository
*/
public function __construct(Announcement $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
public function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,32 @@
<?php
namespace App\Classes\Modules\Announcements\Services;
use App\Classes\General\Eloquent\AbstractListRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\Announcement;
class ListsAnnouncements extends AbstractListRecord
{
/** @var Announcement */
private $repository;
/**
* ListsAnnouncement constructor.
* @param Announcement $repository
*/
public function __construct(Announcement $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Announcements\Services;
use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\Announcement;
use App\Models\Segment;
use Illuminate\Database\QueryException;
class RemovesAnnouncementFromSegment extends AbstractUpdateRecord
{
/**
* @param Announcement $announcement
* @param Segment $segment
* @return \Illuminate\Database\Eloquent\Model
* @throws MalformedRequestException
*/
public function execute(Announcement $announcement, Segment $segment)
{
try {
$announcement->segments()->detach($segment);
return $announcement;
} catch (QueryException $exception){
throw new MalformedRequestException($exception);
}
}
}
@@ -0,0 +1,27 @@
<?php
namespace App\Classes\Modules\Announcements\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Announcements\DataTransferObjects\AnnouncementObject;
use App\Models\Announcement;
class UpdatesAnnouncement extends AbstractUpdateRecord
{
/**
* @param Announcement $model
* @param AnnouncementObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Announcement $model, AnnouncementObject $object)
{
$model->title = $object->getTitle();
$model->description = $object->getDescription();
$model->starting_on = $object->getStartingOn();
$model->ending_on = $object->getEndingOn();
return $this->handler($model);
}
}
@@ -0,0 +1,40 @@
<?php
namespace App\Classes\Modules\Announcements\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\SegmentConstants\DataTransferObjects\SegmentConstantObject;
use App\Classes\Modules\Segments\DataTransferObjects\ConstantObject;
class CanAssignSegment extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param ConstantObject $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param ConstantObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,50 @@
<?php
namespace App\Classes\Modules\Announcements\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Announcements\Standards\Validators\AnnouncementValidation;
use App\Classes\Modules\Companies\DataTransferObjects\AnnouncementObject;
class CanCreateAnnouncement extends AbstractRule
{
/** @var AnnouncementValidation */
private $AnnouncementValidation;
/**
* CanCreateAnnouncement constructor.
* @param AnnouncementValidation $AnnouncementValidation
*/
public function __construct(AnnouncementValidation $AnnouncementValidation)
{
$this->AnnouncementValidation = $AnnouncementValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
return true;
}
/**
* @param AnnouncementObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return $this->AnnouncementValidation->validate($object);
}
/**
* @param AnnouncementObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,40 @@
<?php
namespace App\Classes\Modules\Announcements\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Announcement\DataTransferObjects\AnnouncementObject;
class CanDeleteAnnouncement extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param AnnouncementObject $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param AnnouncementObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,36 @@
<?php
namespace App\Classes\Modules\Announcements\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Announcements\DataTransferObjects\AnnouncementObject;
class CanListAnnouncements extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
return true;
}
/**
* @param AnnouncementObject $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param AnnouncementObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,54 @@
<?php
namespace App\Classes\Modules\Announcements\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Announcements\DataTransferObjects\AnnouncementObject;
use App\Classes\Modules\Announcements\Standards\Validators\AnnouncementValidation;
class CanUpdateAnnouncement extends AbstractRule
{
/** @var AnnouncementValidation */
private $AnnouncementValidation;
/**
* CanUpdateAnnouncement constructor.
* @param AnnouncementValidation $AnnouncementValidation
*/
public function __construct(AnnouncementValidation $AnnouncementValidation)
{
$this->AnnouncementValidation = $AnnouncementValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param AnnouncementObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return $this->AnnouncementValidation->validate($object);
}
/**
* @param AnnouncementObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,44 @@
<?php
namespace App\Classes\Modules\Announcements\Standards\Validators;
use App\Classes\General\Abstracts\AbstractValidation;
use App\Classes\Modules\Announcements\DataTransferObjects\AnnouncementObject;
class AnnouncementValidation extends AbstractValidation
{
/**
* @param AnnouncementObject $object
* @return array
*/
protected function data($object): array
{
return [
'title' => $object->getTitle(),
'description' => $object->getDescription(),
'starting_on' => $object->getStartingOn(),
'ending_on' => $object->getEndingOn()
];
}
/**
* @return array
*/
protected function rules(): array
{
return [
'title' => 'required',
'description' => 'required',
'starting_on' => 'required',
'ending_on' => 'required'
];
}
/**
* @return array
*/
protected function messages(): array
{
return [];
}
}
@@ -0,0 +1,91 @@
<?php
namespace App\Classes\Modules\Billplzs\ControllersLogic;
use App\Classes\Modules\Wallets\DataTransferObjects\WalletObject;
use App\Classes\Modules\Wallets\Services\UpdatesWallet;
use App\Classes\Exceptions\ResourceNotFoundException;
use App\Classes\Modules\Wallets\Services\UpdatesWalletBalance;
use App\Http\Resources\TransactionResource;
use App\Models\Booking;
use App\Models\User;
use App\Models\Wallet;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\Modules\Billplzs\Services\GetBillplzBill;
use App\Classes\Modules\Billplzs\DataTransferObjects\BillplzXSignatureObject;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Transactions\Services\FetchesTransaction;
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
class CallbackBillplzLogic
{
/** @var GetBillplzBill */
private $getBillplzBill;
/** @var FetchesTransaction */
private $fetchesTransaction;
/** @var UpdatesTransactionStatus */
private $updatesTransactionStatus;
/** @var UpdatesWalletBalance */
private $updatesWalletBalance;
/**
* CallbackBillplzLogic constructor.
* @param GetBillplzBill $getBillplzBill
* @param FetchesTransaction $fetchesTransaction
* @param UpdatesTransactionStatus $updatesTransactionStatus
* @param UpdatesWalletBalance $updatesWalletBalance
*/
public function __construct(GetBillplzBill $getBillplzBill, FetchesTransaction $fetchesTransaction, UpdatesTransactionStatus $updatesTransactionStatus)
{
$this->getBillplzBill = $getBillplzBill;
$this->fetchesTransaction = $fetchesTransaction;
$this->updatesTransactionStatus = $updatesTransactionStatus;
}
/**
* @param Request $request
* @return bool|\Illuminate\Contracts\View\Factory|\Illuminate\View\View
* @throws MalformedRequestException
* @throws ResourceNotFoundException
*/
public function execute(Request $request)
{
$billplzXSignatureObject = new BillplzXSignatureObject($request);
if(!$billplzXSignatureObject->isValidSignature()){
throw new MalformedRequestException('Billplz Payment validation failed.');
}
$billPlz = $this->getBillplzBill->execute($billplzXSignatureObject->getBillPlzId());
if(!$billPlz) throw new ResourceNotFoundException('Billplz bill not found.');
$transaction = $this->fetchesTransaction->execute(['payment_reference' => $billplzXSignatureObject->getBillPlzId()]);
if($billPlz->state === 'paid') {
$status = ApprovalStatus::APPROVED;
}
if($billPlz->state === 'due') {
$status = $billplzXSignatureObject->getStatus() === 'failed' ? ApprovalStatus::REJECTED : ApprovalStatus::PENDING_VERIFICATION;
}
$token = Auth::fromUser(User::find(1));
$request->headers->set('Authorization', 'Bearer '.$token);
$marking = $transaction->owner()->first()->owner()->first();
return $request->method() === 'POST' ? true : view('pages.payments_redirect', ['marking' => $marking->reference, 'transaction' => $transaction, 'status' => $status]);
}
}
@@ -0,0 +1,54 @@
<?php
namespace App\Classes\Modules\Billplzs\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Billplzs\Services\CreatesBillplzBill;
use ErrorException;
use App\Classes\Exceptions\MalformedRequestException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateBillplzBillLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Created Billplz Bill',
'message' => 'You have successfully created a new Bill'
];
}
/** @var CreatesBillplzBill */
private $createsBillplzBill;
/**
* CreateBookingLogic constructor.
* @param CreatesBillplzBill $createsBillplzBill
*/
public function __construct(CreatesBillplzBill $createsBillplzBill)
{
$this->createsBillplzBill = $createsBillplzBill;
}
/**
* @param Request $request
* @return JsonResponse
* @throws MalformedRequestException
*/
public function logic(Request $request) : JsonResponse
{
$billPlz = $this->createsBillplzBill->execute($request->user()->name, $request->user()->email, $request->input('description'), 200, $request->input('bankName'));
if(!$billPlz) throw new MalformedRequestException('Unable to get correct response from billplz server.');
return $this->response(['data' => $billPlz]);
}
}
@@ -0,0 +1,120 @@
<?php
namespace App\Classes\Modules\Billplzs\DataTransferObjects;
use Illuminate\Http\Request;
use App\Classes\General\Interfaces\DataTransferObject;
use function PHPSTORM_META\map;
class BillplzXSignatureObject implements DataTransferObject
{
/** @var string */
private $billPlzId;
/** @var string */
private $status;
/** @var array */
private $billPlzConstructArray;
/** @var string */
private $billPlzConstructString;
/** @var string */
private $billPlzComputedXSignature;
/** @var string */
private $type;
/** @var Request */
private $request;
/** @var string */
private $requestXSignature;
public function __construct(Request $request)
{
$this->type = $request->exists('billplz') ? 'redirect' : 'callback';
$this->request = $this->type === 'redirect' ? $request->input('billplz') : $request;
$this->billPlzId = $this->request['id'];
$this->status = $this->request['transaction_status'];
$this->requestXSignature = $this->request['x_signature'];
$this->_constructBillplzArray()->_natSortBillplzArray()->_constructBillplzString()->_computeBillplzXSignature();
}
private function _constructBillplzArray(){
$this->billPlzConstructArray = collect($this->request)->forget('x_signature')->map(function($item, $key){
return $this->type === 'redirect' ? 'billplz'.$key.$item : $key.$item;
})->toArray();
return $this;
}
private function _natCaseSortBillplzArray(){
natcasesort($this->billPlzConstructArray);
return $this;
}
private function _natSortBillplzArray(){
natsort($this->billPlzConstructArray);
return $this;
}
private function _constructBillplzString(){
$this->billPlzConstructString = implode('|', $this->billPlzConstructArray);
return $this;
}
private function _computeBillplzXSignature(){
$this->billPlzComputedXSignature = hash_hmac('sha256', $this->billPlzConstructString, config('billplz.x_signature_key'));
return $this;
}
public function getBillPlzId(): string
{
return $this->billPlzId;
}
public function getStatus(): string
{
return $this->status;
}
/**
* @return array
*/
public function getBillPlzConstructArray(): array
{
return $this->billPlzConstructArray;
}
/**
* @return string
*/
public function getBillPlzConstructString(): string
{
return $this->billPlzConstructString;
}
/**
* @return string
*/
public function getBillPlzComputedXSignature(): string
{
return $this->billPlzComputedXSignature;
}
public function isValidSignature(): bool
{
return $this->billPlzComputedXSignature === $this->requestXSignature ? true : false;
}
}
@@ -0,0 +1,57 @@
<?php
namespace App\Classes\Modules\Billplzs\Services;
use Illuminate\Support\Facades\Http;
use App\Classes\Exceptions\MalformedRequestException;
class CreatesBillplzBill
{
/**
* @param string $name
* @param string $email
* @param string $description
* @param float $amount
* @param string $billNumber
* @param null|string $bankCode
* @param null|Boolean $wallet
* @return null|object
* @throws MalformedRequestException
*/
public function execute(string $name, string $email, string $description, float $amount, string $billNumber, ?string $bankCode = null, ?bool $wallet = null) {
try{
// config('billplz.maybank')
$response = Http::withBasicAuth(config('billplz.api_key').':', '')->post(config('billplz.base_url').'/api/v3/bills', [
'collection_id' => $wallet ? config('billplz.wallet_collection_id') : config('billplz.collection_id'),
'name' => $name,
'email' => $email,
'description' => $description,
'amount' => $this->finalizeAmount($amount),
'redirect_url' => route('online_payment.redirect'),
'callback_url' => route('api.online_payment.callback'),
'reference_1_label' => 'Bank Code',
'reference_1' => $bankCode ? $bankCode : '',
'reference_2_label' => 'Bill Number',
'reference_2' => $billNumber
]);
if($response->successful()){
$data = $response->json();
$data['url'] = $data['url'].'?auto_submit=true';
return (object) $data;
}else{
return null;
}
}catch(\Exception $exception){
throw new MalformedRequestException('Unable to get correct response from billplz server' . $exception->getMessage());
}
}
protected function finalizeAmount($amount){
$number = round($amount, 2) * 100;
return (string) $number;
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Classes\Modules\Billplzs\Services;
use App\Classes\Exceptions\MalformedRequestException;
use Illuminate\Support\Facades\Http;
class GetBillplzBill
{
/**
* @param string $billPlzId
* @return null|object
* @throws MalformedRequestException
*/
public function execute(string $billPlzId) {
try{
$response = Http::withBasicAuth(config('billplz.api_key').':', '')->get(config('billplz.base_url').'/api/v3/bills/'.$billPlzId);
if($response->successful()){
$data = $response->json();
return (object) $data;
}else{
return null;
}
}catch(\Exception $exception){
throw new MalformedRequestException('Unable to get correct response from billplz server');
}
}
}
@@ -0,0 +1,67 @@
<?php
namespace App\Classes\Modules\Companies\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Companies\Processors\AssignConnectionSegmentProcessor;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Companies\Services\FetchesCompanyConnection;
use App\Http\Resources\CompanyResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class AssignCompanyConnectionToConnectionSegmentLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Assign Company Connection To Connection Segment',
'message' => 'You have successfully assigned Company Connection to Connection segment'
];
}
/** @var FetchesCompany */
private $fetchesCompany;
/** @var FetchesCompanyConnection */
private $fetchesCompanyConnection;
/** @var AssignConnectionSegmentProcessor */
private $assignCompanyConnectionToConnectionSegmentProcessor;
/**
* AssignCompanyToSegmentLogic constructor.
* @param FetchesCompany $fetchesCompany
* @param FetchesCompanyConnection $fetchesCompanyConnection
* @param AssignConnectionSegmentProcessor $assignCompanyConnectionToConnectionSegmentProcessor
*/
public function __construct(FetchesCompany $fetchesCompany, FetchesCompanyConnection $fetchesCompanyConnection, AssignConnectionSegmentProcessor $assignCompanyConnectionToConnectionSegmentProcessor)
{
$this->fetchesCompany = $fetchesCompany;
$this->fetchesCompanyConnection = $fetchesCompanyConnection;
$this->assignCompanyConnectionToConnectionSegmentProcessor = $assignCompanyConnectionToConnectionSegmentProcessor;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
$company = $this->fetchesCompany->execute(['id' => $request->route('id')]);
$companyConnection = $this->fetchesCompanyConnection->execute(['id' => $request->route('company_connection_id')]);
$this->assignCompanyConnectionToConnectionSegmentProcessor->execute($companyConnection, $request->input('segment_id'));
return $this->resourceResponse(new CompanyResource($company));
}
}
@@ -0,0 +1,61 @@
<?php
namespace App\Classes\Modules\Companies\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Companies\Services\ListsCompanyModules;
use App\Classes\Modules\Companies\Standards\Rules\CanListCompanies;
use App\Http\Resources\CompanyModuleResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListCompanyModulesLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieved Company Moduels',
'message' => 'You have successfully retrieved a list of Companies'
];
}
/** @var CanListCompanies */
private $canListCompanies;
/** @var ListsCompanyModules */
private $listsCompanyModules;
/**
* ListCompaniesControllersLogic constructor.
* @param CanListCompanies $canListCompanies
* @param ListsCompanyModules $listsCompanyModules
*/
public function __construct(CanListCompanies $canListCompanies, ListsCompanyModules $listsCompanyModules)
{
$this->canListCompanies = $canListCompanies;
$this->listsCompanyModules = $listsCompanyModules;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
$this->canListCompanies->passes();
$query = $this->listsCompanyModules->execute($this->listsCompanyModules->deserializeFilters($request->input('filters')));
return $this->collectionResponse(CompanyModuleResource::collection($query));
}
}
@@ -0,0 +1,73 @@
<?php
namespace App\Classes\Modules\Companies\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Companies\Services\FetchesCompanyConnection;
use App\Classes\Modules\Companies\Services\RemovesCompanyConnectionFromConnectionSegment;
use App\Classes\Modules\Segments\Services\FetchesSegment;
use App\Http\Resources\CompanyResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class RemoveCompanyConnectionFromConnectionSegmentLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Detach Company Connection From Connection Segment',
'message' => 'You have successfully detached Company Connection from Connection segment'
];
}
/** @var FetchesCompany */
private $fetchesCompany;
/** @var FetchesCompanyConnection */
private $fetchesCompanyConnection;
/** @var FetchesSegment */
private $fetchesSegment;
/** @var RemovesCompanyConnectionFromConnectionSegment */
private $removesCompanyConnectionFromConnectionSegment;
/**
* RemoveCompanyFromSegmentLogic constructor.
* @param FetchesCompany $fetchesCompany
* @param FetchesCompanyConnection $fetchesCompanyConnection
* @param FetchesSegment $fetchesSegment
* @param RemovesCompanyConnectionFromConnectionSegment $removesCompanyConnectionFromConnectionSegment
*/
public function __construct(FetchesCompany $fetchesCompany, FetchesCompanyConnection $fetchesCompanyConnection, FetchesSegment $fetchesSegment, RemovesCompanyConnectionFromConnectionSegment $removesCompanyConnectionFromConnectionSegment)
{
$this->fetchesCompany = $fetchesCompany;
$this->fetchesCompanyConnection = $fetchesCompanyConnection;
$this->fetchesSegment = $fetchesSegment;
$this->removesCompanyConnectionFromConnectionSegment = $removesCompanyConnectionFromConnectionSegment;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request) : JsonResponse
{
$company = $this->fetchesCompany->execute(['id' => $request->route('id')]);
$companyConnection = $this->fetchesCompanyConnection->execute(['id' => $request->route('company_connection_id')]);
$segment = $this->fetchesSegment->execute(['id' => $request->route('segment_id')]);
$this->removesCompanyConnectionFromConnectionSegment->execute($companyConnection, $segment);
return $this->resourceResponse(new CompanyResource($company));
}
}
@@ -5,6 +5,7 @@ namespace App\Classes\Modules\Companies\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Companies\Services\UpdatesCompany;
use App\Classes\Modules\Companies\Services\UpdatesCompanyModuleName;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Companies\Standards\Rules\CanUpdateCompany;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyObject;
@@ -35,17 +36,22 @@ class UpdateCompanyLogic extends AbstractControllerLogic
/** @var FetchesCompany */
private $fetchesCompany;
/** @var UpdatesCompanyModuleName */
private $updatesCompanyModuleName;
/**
* UpdateCompanyControllersLogic constructor.
* @param CanUpdateCompany $canUpdateCompany
* @param UpdatesCompany $updatesCompany
* @param FetchesCompany $fetchesCompany
* @param UpdatesCompanyModuleName $updatesCompanyModuleName
*/
public function __construct(CanUpdateCompany $canUpdateCompany, UpdatesCompany $updatesCompany, FetchesCompany $fetchesCompany)
public function __construct(CanUpdateCompany $canUpdateCompany, UpdatesCompany $updatesCompany, FetchesCompany $fetchesCompany, UpdatesCompanyModuleName $updatesCompanyModuleName)
{
$this->canUpdateCompany = $canUpdateCompany;
$this->updatesCompany = $updatesCompany;
$this->fetchesCompany = $fetchesCompany;
$this->updatesCompanyModuleName = $updatesCompanyModuleName;
}
@@ -56,23 +62,17 @@ class UpdateCompanyLogic extends AbstractControllerLogic
*/
public function logic(Request $request) : JsonResponse
{
try {
$object = new CompanyObject($request->input('name'), $request->input('reference'), $request->input('type'));
$object = new CompanyObject($request->input('reference_no'), $request->input('name'), $request->input('type'));
$this->canUpdateCompany->passes($object);
$this->canUpdateCompany->passes($object);
$query = $this->fetchesCompany->execute(['id' => $request->route('id')]);
$query = $this->fetchesCompany->execute(['id' => $request->route('id')]);
$query = $this->updatesCompany->execute($query, $object);
$query = $this->updatesCompany->execute($query, $object);
return $this->resourceResponse(new CompanyResource($query));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
$this->updatesCompanyModuleName->execute($query->companyModules()->first(), $object->getName());
return $this->resourceResponse(new CompanyResource($query));
}
}
@@ -10,6 +10,9 @@ class CompanyConnectionObject implements DataTransferObject
/** @var CompanyModule */
private $invitee;
/** @var CompanyModule */
private $inviter;
/** @var string */
private $inviterReference;
@@ -20,12 +23,14 @@ class CompanyConnectionObject implements DataTransferObject
/**
* CompanyConnectionObject constructor.
* @param CompanyModule $invitee
* @param CompanyModule $inviter
* @param string $inviterReference
* @param string $inviteeReference
*/
public function __construct(CompanyModule $invitee, string $inviterReference, string $inviteeReference)
public function __construct(CompanyModule $invitee, CompanyModule $inviter, string $inviteeReference, string $inviterReference)
{
$this->invitee = $invitee;
$this->inviter = $inviter;
$this->inviterReference = $inviterReference;
$this->inviteeReference = $inviteeReference;
}
@@ -38,6 +43,14 @@ class CompanyConnectionObject implements DataTransferObject
return $this->invitee;
}
/**
* @return CompanyModule
*/
public function getInviter(): CompanyModule
{
return $this->inviter;
}
/**
* @return string
*/
@@ -0,0 +1,56 @@
<?php
namespace App\Classes\Modules\Companies\Processors;
use App\Classes\Modules\Companies\Services\AssignsCompanyConnectionToConnectionSegment;
use App\Classes\Modules\Companies\Standards\Rules\CanAssignSegment;
use App\Classes\Modules\Segments\Services\FetchesSegment;
use App\Classes\ValueObjects\Constants\SegmentConstants;
use App\Models\CompanyConnection;
use Illuminate\Database\Eloquent\Model;
class AssignConnectionSegmentProcessor
{
/** @var CanAssignSegment */
private $canAssignSegment;
/** @var AssignsCompanyConnectionToConnectionSegment */
private $assignsCompanyConnectionToConnectionSegment;
/** @var FetchesSegment */
private $fetchesSegment;
/**
* AssignCompanyToSegmentProcessor constructor.
* @param CanAssignSegment $canAssignSegment
* @param AssignsCompanyConnectionToConnectionSegment $assignsCompanyConnectionToConnectionSegment
* @param FetchesSegment $fetchesSegment
*/
public function __construct(CanAssignSegment $canAssignSegment, AssignsCompanyConnectionToConnectionSegment $assignsCompanyConnectionToConnectionSegment, FetchesSegment $fetchesSegment)
{
$this->canAssignSegment = $canAssignSegment;
$this->assignsCompanyConnectionToConnectionSegment = $assignsCompanyConnectionToConnectionSegment;
$this->fetchesSegment = $fetchesSegment;
}
/**
* @param CompanyConnection $companyConnection
* @param int|null $segmentId
* @return Model
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(CompanyConnection $companyConnection, ?int $segmentId = SegmentConstants::STANDARD_SEGMENT): Model {
$segment = $this->fetchesSegment->execute(['id' => $segmentId]);
$this->canAssignSegment->passes();
return $this->assignsCompanyConnectionToConnectionSegment->execute($companyConnection, $segment);
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Companies\Services;
use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\CompanyConnection;
use App\Models\Segment;
use Illuminate\Database\QueryException;
class AssignsCompanyConnectionToConnectionSegment extends AbstractUpdateRecord
{
/**
* @param CompanyConnection $companyConnection
* @param Segment $segment
* @return \Illuminate\Database\Eloquent\Model
* @throws MalformedRequestException
*/
public function execute(CompanyConnection $companyConnection, Segment $segment)
{
try {
$companyConnection->segments()->attach($segment);
return $companyConnection;
} catch (QueryException $exception){
throw new MalformedRequestException($exception);
}
}
}
@@ -30,10 +30,8 @@ class CreatesCompanyConnection extends AbstractUpdateRecord
public function execute(CompanyConnectionObject $object)
{
$companyModule = $this->fetchesCompany->execute(['id', 1])->companyModules()->first();
$connection = new CompanyConnection();
$connection->inviter_id = $companyModule->id;
$connection->inviter_id = $object->getInviter()->id;
$connection->invitee_id = $object->getInvitee()->id;
$connection->inviter_reference = $object->getInviterReference();
$connection->invitee_reference = $object->getInviteeReference();
@@ -0,0 +1,34 @@
<?php
namespace App\Classes\Modules\Companies\Services;
use App\Classes\General\Eloquent\AbstractFetchRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\CompanyConnection;
class FetchesCompanyConnection extends AbstractFetchRecord
{
/** @var CompanyConnection */
private $repository;
/**
* FetchesCompanyConnection constructor.
* @param CompanyConnection $repository
*/
public function __construct(CompanyConnection $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
public function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Companies\Services;
use App\Classes\General\Eloquent\AbstractListRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\CompanyModule;
class ListsCompanyModules extends AbstractListRecord
{
/** @var CompanyModule */
private $repository;
/**
* ListsCompanyModules constructor.
* @param CompanyModule $repository
*/
public function __construct(CompanyModule $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Companies\Services;
use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\CompanyConnection;
use App\Models\Segment;
use Illuminate\Database\QueryException;
class RemovesCompanyConnectionFromConnectionSegment extends AbstractUpdateRecord
{
/**
* @param CompanyConnection $companyConnection
* @param Segment $segment
* @return \Illuminate\Database\Eloquent\Model
* @throws MalformedRequestException
*/
public function execute(CompanyConnection $companyConnection, Segment $segment)
{
try {
$companyConnection->segments()->detach($segment);
return $companyConnection;
} catch (QueryException $exception){
throw new MalformedRequestException($exception);
}
}
}
@@ -0,0 +1,26 @@
<?php
namespace App\Classes\Modules\Companies\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyObject;
use App\Models\Company;
class UpdatesCompany extends AbstractUpdateRecord
{
/**
* @param Company $model
* @param CompanyObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Company $model, CompanyObject $object)
{
$model->name = $object->getName();
$model->reference = $object->getReference();
$model->type = $object->getType();
return $this->handler($model);
}
}
@@ -0,0 +1,24 @@
<?php
namespace App\Classes\Modules\Companies\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyModuleObject;
use App\Models\CompanyModule;
class UpdatesCompanyModuleName extends AbstractUpdateRecord
{
/**
* @param CompanyModule $model
* @param CompanyModuleObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(CompanyModule $model, string $name)
{
$model->name = $name;
return $this->handler($model);
}
}
@@ -0,0 +1,51 @@
<?php
namespace App\Classes\Modules\Companies\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyObject;
use App\Classes\Modules\Companies\Standards\Validators\CompanyValidation;
class CanUpdateCompany extends AbstractRule
{
/** @var CompanyValidation */
private $companyValidation;
/**
* CanUpdateCompany constructor.
* @param CompanyValidation $companyValidation
*/
public function __construct(CompanyValidation $companyValidation)
{
$this->companyValidation = $companyValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param CompanyObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return $this->companyValidation->validate($object, 'PUT');
}
/**
* @param CompanyObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -15,7 +15,8 @@ class CompanyValidation extends AbstractValidation
{
return [
'company_name' => $object->getName(),
'company_reference' => $object->getReference()
'company_reference' => $object->getReference(),
'type' => $object->getType()
];
}
@@ -2,11 +2,10 @@
namespace App\Classes\Modules\Contacts\Processors;
use App\Classes\General\Interfaces\Contactable;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Contacts\Services\CreatesContact;
use App\Classes\Modules\Contacts\Standards\Rules\CanCreateContact;
use App\Models\Company;
use Illuminate\Http\Request;
use Illuminate\Database\Eloquent\Model;
class CreateContactProcessor
@@ -15,6 +14,9 @@ class CreateContactProcessor
/** @var CanCreateContact */
private $canCreateContact;
/** @var CreatesContact */
private $createsContact;
/**
* CreateContactProcessor constructor.
* @param CanCreateContact $canCreateContact
@@ -28,17 +30,17 @@ class CreateContactProcessor
/**
* @param ContactObject $object
* @param Company $company
* @param Contactable $contactable
* @return Model
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(ContactObject $object, Company $company): Model
public function execute(ContactObject $object, Contactable $contactable): Model
{
$this->canCreateContact->passes($object);
return $this->createsContact->execute($company,$object);
return $this->createsContact->execute($contactable,$object);
}
}
@@ -0,0 +1,58 @@
<?php
namespace App\Classes\Modules\Delivery\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Orders\Services\CancelsOrder;
use App\Classes\Modules\Orders\Services\FetchesOrder;
use App\Http\Resources\DeliveryOrderResource;
use App\Models\Order;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CancelDeliveryOrderLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification(): array
{
return [
'title' => 'Cancelled Order',
'message' => 'You have successfully cancelled an order'
];
}
/** @var CancelsOrder */
private $cancelsOrder;
/** @var FetchesOrder */
private $fetchesOrder;
/**
* CancelDeliveryOrderLogic constructor.
* @param CancelsOrder $cancelsOrder
* @param FetchesOrder $fetchesOrder
*/
public function __construct(CancelsOrder $cancelsOrder, FetchesOrder $fetchesOrder)
{
$this->cancelsOrder = $cancelsOrder;
$this->fetchesOrder = $fetchesOrder;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request): JsonResponse
{
/** @var Order $order */
$order = $this->fetchesOrder->execute(['id' => $request->route('id')]);
return $this->resourceResponse(new DeliveryOrderResource($this->cancelsOrder->execute($order)));
}
}
@@ -0,0 +1,150 @@
<?php
namespace App\Classes\Modules\Delivery\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\General\Services\GeneratesInitials;
use App\Classes\Modules\Accounts\Processors\AuthenticationProcessor;
use App\Classes\Modules\Accounts\Processors\CreateUserProcessor;
use App\Classes\Modules\Accounts\Processors\GenerateEmailVerificationAttemptProcessor;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyConnectionObject;
use App\Classes\Modules\Companies\Processors\AssignEmployeeProcessor;
use App\Classes\Modules\Companies\Processors\CreateCompanyProcessor;
use App\Classes\Modules\Companies\Processors\CreateCompanyModuleProcessor;
use App\Classes\Modules\Companies\DataTransferObjects\EmploymentObject;
use App\Classes\Modules\Companies\Services\ApprovesCompanyConnection;
use App\Classes\Modules\Companies\Services\CreatesCompanyConnection;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
use App\Classes\Modules\Documents\Processors\UploadIdentityDocumentProcessor;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Classes\ValueObjects\Constants\CompanyType;
use App\Classes\ValueObjects\Constants\RoleTypes;
use App\Models\Company;
use App\Models\CompanyModule;
use App\Models\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use App\Classes\Modules\Companies\Services\FetchesCompanyModule;
use Illuminate\Support\Facades\Log;
class CreateDeliveryCustomerLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification(): array
{
return [
'title' => 'Created User',
'message' => 'You have successfully created a new User'
];
}
/** @var CreateUserProcessor */
private $createUserProcessor;
/** @var CreateCompanyProcessor */
private $createCompanyProcessor;
/** @var CreateCompanyModuleProcessor */
private $createCompanyModuleProcessor;
/** @var CreateContactProcessor */
private $createContactProcessor;
/** @var CreatesCompanyConnection */
private $createsCompanyConnection;
/** @var ApprovesCompanyConnection */
private $approvesCompanyConnection;
/** @var AssignEmployeeProcessor */
private $assignEmployeeProcessor;
/** @var UploadIdentityDocumentProcessor */
private $uploadIdentityDocumentProcessor;
/** @var AuthenticationProcessor */
private $authenticationProcessor;
/** @var GenerateEmailVerificationAttemptProcessor */
private $generateEmailVerificationAttemptProcessor;
/** @var FetchesCompanyModule */
private $fetchesCompanyModule;
/**
* CreateDeliveryCustomerLogic constructor.
* @param CreateUserProcessor $createUserProcessor
* @param CreateCompanyProcessor $createCompanyProcessor
* @param CreateCompanyModuleProcessor $createCompanyModuleProcessor
* @param CreateContactProcessor $createContactProcessor
* @param CreatesCompanyConnection $createsCompanyConnection
* @param ApprovesCompanyConnection $approvesCompanyConnection
* @param AssignEmployeeProcessor $assignEmployeeProcessor
* @param UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor
* @param AuthenticationProcessor $authenticationProcessor
* @param GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor
* @param FetchesCompanyModule $fetchesCompanyModule
*/
public function __construct(CreateUserProcessor $createUserProcessor, CreateCompanyProcessor $createCompanyProcessor, CreateCompanyModuleProcessor $createCompanyModuleProcessor, CreateContactProcessor $createContactProcessor, CreatesCompanyConnection $createsCompanyConnection, ApprovesCompanyConnection $approvesCompanyConnection, AssignEmployeeProcessor $assignEmployeeProcessor, UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor, AuthenticationProcessor $authenticationProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor, FetchesCompanyModule $fetchesCompanyModule)
{
$this->createUserProcessor = $createUserProcessor;
$this->createCompanyProcessor = $createCompanyProcessor;
$this->createCompanyModuleProcessor = $createCompanyModuleProcessor;
$this->createContactProcessor = $createContactProcessor;
$this->createsCompanyConnection = $createsCompanyConnection;
$this->approvesCompanyConnection = $approvesCompanyConnection;
$this->assignEmployeeProcessor = $assignEmployeeProcessor;
$this->uploadIdentityDocumentProcessor = $uploadIdentityDocumentProcessor;
$this->authenticationProcessor = $authenticationProcessor;
$this->generateEmailVerificationAttemptProcessor = $generateEmailVerificationAttemptProcessor;
$this->fetchesCompanyModule = $fetchesCompanyModule;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\AccessUnauthorisedException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request): JsonResponse
{
/** @var User $user */
$user = $this->createUserProcessor->execute($request, RoleTypes::USER, !App::environment(['production']) ? ApprovalStatus::APPROVED : ApprovalStatus::PENDING_VERIFICATION);
/** @var Company $company */
$company = $this->createCompanyProcessor->execute($request->input('name'), CompanyType::PERSONAL_BUSINESS, ApprovalStatus::PENDING_SUBMISSION);
$contactObject = new ContactObject($request->input('name'), $request->input('phone'), $request->input('contact_email'), $request->input('wechat_id'));
$this->createContactProcessor->execute($contactObject, $company);
/** @var CompanyModule $companyModule */
$companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::ONLINE_SELLER);
$inviter = $this->fetchesCompanyModule->execute(['reference'=>'HWT']);
$connectionObject = new CompanyConnectionObject($companyModule, $inviter, mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate(), 'HWT');
$connection = $this->createsCompanyConnection->execute($connectionObject);
$this->approvesCompanyConnection->execute($connection);
$Object = new EmploymentObject($companyModule, $user);
$this->assignEmployeeProcessor->execute($Object);
return $this->response($this->authenticationProcessor->execute($request));
}
}
@@ -0,0 +1,178 @@
<?php
namespace App\Classes\Modules\Delivery\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Classes\Modules\Addresses\Services\CreatesAddress;
use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
use App\Classes\Modules\Orders\Services\CreatesOrder;
use App\Classes\Modules\Orders\Services\GeneratesOrderNumber;
use App\Classes\Modules\Orders\Standards\Rules\CanCreateOrder;
use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject;
use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject;
use App\Classes\Modules\PackingLists\Services\CreatesPackingList;
use App\Classes\Modules\PackingLists\Services\Packages\CreatesPackage;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Classes\ValueObjects\Constants\OrderType;
use App\Classes\ValueObjects\Constants\PackingListType;
use App\Http\Resources\DeliveryOrderResource;
use App\Models\Address;
use App\Models\CompanyModule;
use App\Models\Order;
use App\Models\PackingList;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateDeliveryOrderLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification(): array
{
return [
'title' => 'Created Order',
'message' => 'You have successfully created a new Order'
];
}
/** @var FetchesCompany */
private $fetchesCompany;
/** @var fetchesAddress */
private $fetchesAddress;
/** @var CanCreateOrder */
private $canCreateOrder;
/** @var CreatesOrder */
private $createsOrder;
/** @var CreatesAddress */
private $createAddress;
/** @var CreateContactProcessor */
private $createContactProcessor;
/** @var CreateRemarkProcessor */
private $createRemarkProcessor;
/** @var GeneratesOrderNumber */
private $generatesOrderNumber;
/** @var CreatesPackingList */
private $createsPackingList;
/** @var CreatesPackage */
private $createsPackage;
/**
* CreateDeliveryOrderLogic constructor.
* @param FetchesCompany $fetchesCompany
* @param FetchesAddress $fetchesAddress
* @param CanCreateOrder $canCreateOrder
* @param CreatesOrder $createsOrder
* @param CreatesAddress $createAddress
* @param CreateContactProcessor $createContactProcessor
* @param CreateRemarkProcessor $createRemarkProcessor
* @param GeneratesOrderNumber $generatesOrderNumber
* @param CreatesPackingList $createsPackingList
* @param CreatesPackage $createPackage
*/
public function __construct(FetchesCompany $fetchesCompany, FetchesAddress $fetchesAddress, CanCreateOrder $canCreateOrder, CreatesOrder $createsOrder, CreatesAddress $createAddress, CreateContactProcessor $createContactProcessor, CreateRemarkProcessor $createRemarkProcessor, GeneratesOrderNumber $generatesOrderNumber, CreatesPackingList $createsPackingList, CreatesPackage $createsPackage)
{
$this->fetchesCompany = $fetchesCompany;
$this->fetchesAddress = $fetchesAddress;
$this->canCreateOrder = $canCreateOrder;
$this->createsOrder = $createsOrder;
$this->createAddress = $createAddress;
$this->createContactProcessor = $createContactProcessor;
$this->createRemarkProcessor = $createRemarkProcessor;
$this->generatesOrderNumber = $generatesOrderNumber;
$this->createsPackingList = $createsPackingList;
$this->createsPackage = $createsPackage;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request): JsonResponse
{
$company = $this->fetchesCompany->execute(['id' => $request->input('company_id')]);
$senderAddress = $this->fetchesAddress->execute(['id' => $request->input('sender_address_id')]);
$deliveryAddress = $this->fetchesAddress->execute(['id' => $request->input('delivery_address_id')]);
/** @var CompanyModule $companyModule */
$companyModule = $company->companyModules()->where('type', BusinessType::ONLINE_SELLER)->first();
$orderObject = new OrderObject($this->generatesOrderNumber->execute('168M', 7), OrderType::LAST_MILE_DELIVERY, ApprovalStatus::APPROVED);
$this->canCreateOrder->passes($orderObject);
/** @var Order $order */
$order = $this->createsOrder->execute($companyModule, $orderObject);
$senderAddressObject = new AddressObject($senderAddress->street_one, $senderAddress->street_two, $senderAddress->country_id, $senderAddress->state_id, $senderAddress->district_id, $senderAddress->postcode, $senderAddress->type, ApprovalStatus::APPROVED, $senderAddress->reference);
$deliveryAddressObject = new AddressObject($deliveryAddress->street_one, $deliveryAddress->street_two, $deliveryAddress->country_id, $deliveryAddress->state_id, $deliveryAddress->district_id, $deliveryAddress->postcode, $deliveryAddress->type, ApprovalStatus::APPROVED, $deliveryAddress->reference);
/** @var Address $orderSenderAddress */
$orderSenderAddress = $this->createAddress->execute($order, $senderAddressObject);
/** @var Address $orderDeliveryAddress */
$orderDeliveryAddress = $this->createAddress->execute($order, $deliveryAddressObject);
$senderContact = $senderAddress->contacts()->first();
$deliveryContact = $deliveryAddress->contacts()->first();
$contactObject = new ContactObject($senderContact->reference, $senderContact->phone, '','');
$this->createContactProcessor->execute($contactObject, $orderSenderAddress);
$contactObject = new ContactObject($deliveryContact->reference, $deliveryContact->phone, '','');
$this->createContactProcessor->execute($contactObject, $orderDeliveryAddress);
$senderRemark = $senderAddress->remarks()->first();
$deliveryRemark = $deliveryAddress->remarks()->first();
if ($senderRemark){
$remarkObject = new RemarkObject($senderRemark->content, Auth()->user()->id);
if($remarkObject->getContent()){
$this->createRemarkProcessor->execute($orderSenderAddress, $remarkObject);
}
}
if ($deliveryRemark){
$remarkObject = new RemarkObject($deliveryRemark->content, Auth()->user()->id);
if($remarkObject->getContent()){
$this->createRemarkProcessor->execute($orderDeliveryAddress, $remarkObject);
}
}
$packingListObject = new PackingListObject($order->reference, $companyModule->id, PackingListType::DELIVERY_PACKING_LIST, ApprovalStatus::PENDING_VERIFICATION);
/** @var PackingList $packingList */
$packingList = $this->createsPackingList->execute($packingListObject, $order);
$packageObject = new PackageObject($request->input('packing_list.type'), $request->input('packing_list.description'), (float) 1, (float) 1, (float) 1, $request->input('packing_list.weight'), (float) $request->input('packing_list.quantity'), ApprovalStatus::APPROVED);
$this->createsPackage->execute($packageObject, $packingList);
return $this->resourceResponse(new DeliveryOrderResource($order));
}
}
@@ -0,0 +1,57 @@
<?php
namespace App\Classes\Modules\Delivery\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Orders\Services\ListsOrders;
use App\Classes\Modules\Orders\Standards\Rules\CanListOrders;
use App\Classes\ValueObjects\Constants\OrderType;
use App\Http\Resources\DeliveryOrderResource;
use App\Http\Resources\OrderResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListOrdersLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieved Orders',
'message' => 'You have successfully retrieved a list of Orders'
];
}
/** @var CanListOrders */
private $canListOrders;
/** @var ListsOrders */
private $listsOrders;
/**
* ListOrdersLogic constructor.
* @param CanListOrders $canListOrders
* @param ListsOrders $listsOrders
*/
public function __construct(CanListOrders $canListOrders, ListsOrders $listsOrders)
{
$this->canListOrders = $canListOrders;
$this->listsOrders = $listsOrders;
}
public function logic(Request $request) : JsonResponse
{
$this->canListOrders->passes();
$query = $this->listsOrders->execute(array_merge($this->listsOrders->deserializeFilters($request->input('filters')), ['with_parcels' => true, 'type_in' => [OrderType::LAST_MILE_DELIVERY]]));
return $this->collectionResponse(DeliveryOrderResource::collection($query));
}
}
@@ -54,7 +54,7 @@ class ListDocumentLogic extends AbstractControllerLogic
$this->canListDocuments->passes();
$query = $this->listsDocuments->execute($this->listsDocuments->deserializeFilters($request->input('filters')));
$query = $this->listsDocuments->execute(array_merge($this->listsDocuments->deserializeFilters($request->input('filters')), ['with_owner' => true]));
return $this->collectionResponse(DocumentResource::collection($query));
@@ -0,0 +1,68 @@
<?php
namespace App\Classes\Modules\Documents\ControllersLogic;
use App\Classes\Modules\Documents\Standards\Rules\CanUpdateDocumentReference;
use App\Http\Resources\DocumentResource;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Documents\Services\FetchesDocument;
use App\Classes\Modules\Documents\Services\UpdatesDocumentReference;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdateDocumentReferenceLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Update Document Reference',
'message' => 'You have successfully updated the Document Reference'
];
}
/** @var CanUpdateDocumentReference*/
private $canUpdateDocumentReference;
/** @var UpdatesDocumentReference */
private $updatesDocumentReference;
/** @var FetchesDocument */
private $fetchesDocument;
/**
* RejectDocumentLogic constructor.
* @param CanApproveDocument $canApproveDocument
* @param ApprovesDocument $approvesDocument
* @param FetchesDocument $fetchesDocument
*/
public function __construct(CanUpdateDocumentReference $canUpdateDocumentReference, UpdatesDocumentReference $updatesDocumentReference, FetchesDocument $fetchesDocument)
{
$this->canUpdateDocumentReference = $canUpdateDocumentReference;
$this->updatesDocumentReference = $updatesDocumentReference;
$this->fetchesDocument = $fetchesDocument;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
$document = $this->fetchesDocument->execute(['id' => $request->route('id')]);
$this->canUpdateDocumentReference->passes();
$document_query = $this->updatesDocumentReference->execute($document, $request->input('identification_number'));
return $this->resourceResponse(new DocumentResource($document_query));
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\Modules\Documents\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\Document;
class UpdatesDocumentReference extends AbstractUpdateRecord
{
/**
* @param Document $model
* @return mixed
*/
public function execute(Document $model, string $reference) {
$model->reference = $reference;
return $this->handler($model);
}
}
@@ -0,0 +1,39 @@
<?php
namespace App\Classes\Modules\Documents\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
class CanUpdateDocumentReference extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param DocumentObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return true;
}
/**
* @param DocumentObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,86 @@
<?php
namespace App\Classes\Modules\Exports\Services;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Models\PackingList;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Carbon\Carbon;
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
use App\Classes\ValueObjects\Constants\RoleTypes;
class ExportsArrivedParcel implements WithHeadings, WithHeadingRow, WithMapping, ShouldAutoSize, FromCollection
{
use Exportable;
public function headings(): array
{
return [
'ORDER NUMBER',
'Marking',
'Warehouse',
'Cbm',
'Description',
'quantity',
'Received Date',
'Remarks'
];
}
/**
* @return \Illuminate\Support\Collection|mixed
*/
public function collection()
{
$returnArray = collect();
$packingLists = PackingList::where('type', '=', 1)->where('status', '=', 2)->get();
$exceptionUsers = in_array(Auth()->user()->type, [RoleTypes::SHADOW_ADMIN, RoleTypes::SUPER_ADMIN]);
foreach($packingLists as $packingList){
$packages = !$packingList->packingLists()->exists() || $exceptionUsers ? $packingList->packages : $packingList->packingLists->first()->packages;
foreach ($packages as $package) {
$returnArray->push($package);
}
}
return $returnArray;
}
/**
* @param ReturnArray $returnArray
*
* @return array
*/
public function map($package): array
{
$packingList = $package->packingList;
$order = $packingList->owner;
$connection = $order->companyModule()->first()->inviters()->withPivot('invitee_reference')->first();
$marking = $connection ? $connection->pivot->invitee_reference:'';
$warehouse = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee;
$cbm = (($package->width / 100) * ($package->height / 100) * ($package->length / 100)) * $package->quantity;
$arrival_date = $packingList->transports()->first()->drop_date->format('d-m-Y');
return [
$packingList->owner->reference,
$marking,
$warehouse->reference,
$cbm,
$package->description,
$package->quantity,
$arrival_date,
''
];
}
}
@@ -0,0 +1,92 @@
<?php
namespace App\Classes\Modules\Exports\Services;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Models\Container;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithMapping;
use Illuminate\Http\Request;
class ExportsContainerPackingList implements FromQuery, WithHeadingRow, WithMapping
{
use Exportable;
protected $id;
public function headings(): array
{
return [
'Marking',
'Refrence',
'Quantity',
'CBM',
'Status',
'Delivery Phone',
'Delivery Refrence',
'Delivery Address',
'Remark',
'Delivery Date'
];
}
public function setId($id)
{
$this->id = $id;
}
/**
* @return \Illuminate\Support\Collection|mixed
*/
public function query()
{
return Container::find($this->id)->packingLists();
}
/**
* @param Company $container
*
* @return array
*/
public function map($packing_list): array
{
$order = $packing_list->owner()->first();
$address = $order->addresses()->first();
$company = $order->companyModule()->first();
$connection = $company->inviters()->withPivot('invitee_reference')->first();
$marking = $connection ? $connection->pivot->invitee_reference:'';
$quantity = 0;
$cbm = 0;
foreach ($packing_list->packages()->get() as $key => $row) {
$quantity += $row->quantity;
$cbm += (($row->width / 100) * ($row->height / 100) * ($row->length / 100)) * $row->quantity;
}
$status = '';
if ($packing_list->transports()->count() > 0) {
$status = 'Delivery';
}
elseif ($packing_list->status == ApprovalStatus::SUSPENDED) {
$status = 'On Hold';
}
elseif ($packing_list->status != ApprovalStatus::SUSPENDED) {
$status = 'Release';
}
return [
$marking,
$order->reference,
$quantity,
$cbm,
$status,
$address->contacts()->first() ? $address->contacts()->first()->phone : 'n/a',
$address->contacts()->first() ? $address->contacts()->first()->reference : 'n/a',
$address->street_one . ' ' . $address->street_two . ' ' . $address->district->name . ' ' . $address->post_code . ' ' . $address->state->name . ' ' . $address->country->name,
$address->remarks()->first() ? $address->remarks()->first()->content : 'n/a',
$packing_list->transports()->first() ? $packing_list->transports()->current_schedule->eta : 'n/a'
];
}
}
@@ -0,0 +1,60 @@
<?php
namespace App\Classes\Modules\Exports\Services;
use App\Classes\ValueObjects\Constants\PackingListType;
use App\Models\CompanyModule;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithMapping;
class ExportsCustomersOrderLatestDate implements FromQuery, WithHeadingRow, WithMapping
{
use Exportable;
public function headings(): array
{
return [
'Marking',
'Name',
'Email',
'Latest Order'
];
}
/**
* @return \Illuminate\Support\Collection|mixed
*/
public function query()
{
return CompanyModule::where('type', '=', 1);
}
/**
* @param Company $company
*
* @return array
*/
public function map($company): array
{
$connection = $company->inviters()->withPivot('invitee_reference')->first();
$marking = $connection ? $connection->pivot->invitee_reference:'';
$employees = $company->employees()->first();
$order = $company->orders()
->join('packing_lists', 'packing_lists.owner_id', '=', 'orders.id')
->join('transport_arrangements', 'transport_arrangements.owner_id', '=', 'packing_lists.id')
->orderBy('drop_date', 'desc')
->first();
return [
$marking,
$employees ? $employees->name : '',
$employees ? $employees->email : '',
$order ? $order->drop_date : ''
];
}
}
@@ -0,0 +1,120 @@
<?php
namespace App\Classes\Modules\Exports\Services;
use App\Classes\ValueObjects\Constants\AddressType;
use App\Classes\ValueObjects\Constants\OrderType;
use App\Classes\ValueObjects\Constants\PackageType;
use App\Models\Order;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Concerns\WithTitle;
class ExportsDeliveryOrders implements FromQuery, WithHeadings, WithHeadingRow, WithMapping, ShouldAutoSize, WithTitle
{
use Exportable;
private $request;
public function __construct(Request $request)
{
$this->request = $request;
}
public function headings(): array
{
return [
'Types_Of_Services',
'Service_Type',
'Sender_Name',
'Sender_Company_Name',
'Sender_Building_Unit',
'Sender_Address',
'Sender_Address_2',
'Sender_Postal_Code',
'Sender_Phone_Number',
'Delivery_Name',
'Delivery Company Name',
'Delivery_Building_Unit',
'Delivery_Address',
'Delivery_Address_2',
'Delivery_Postal_Code',
'Delivery_Phone_Number',
'Shipment_Type',
'Mode',
'Pickup_Address_Type',
'Reference_Number',
'Quantity',
'Weight',
'Length',
'Width',
'Height',
'COD_Amount',
'DO_Numbers'
];
}
/**
* @return \Illuminate\Support\Collection|mixed
*/
public function query()
{
$selectedIds = array_map(function($value){
return ['id' => $value];
}, json_decode($this->request->input('ids')));
return Order::where('type', OrderType::LAST_MILE_DELIVERY)->whereIn('id', $selectedIds);
}
public function title(): string
{
return 'bulk-shipment';
}
/**
* @param Order $order
*
* @return array
*/
public function map($order): array
{
$senderAddress = $order->addresses()->where('type', AddressType::PICK_UP)->first();
$deliveryAddress = $order->addresses()->where('type', AddressType::DELIVERY)->first();
$package = $order->packingLists()->first()->packages()->first();
return [
'Domestic Shipment',
'ST00000020',
$senderAddress->contacts()->first()->reference,
$senderAddress->reference ? $senderAddress->reference : $order->companyModule->name,
$senderAddress->street_one,
$senderAddress->street_two.' '.$senderAddress->district->name.' '.$senderAddress->postcode.' '.$senderAddress->state->name.' '.$senderAddress->country->name,
'',
$senderAddress->postcode,
$senderAddress->contacts()->first()->phone,
$deliveryAddress->contacts()->first()->reference,
$deliveryAddress->reference,
$deliveryAddress->street_one,
$deliveryAddress->street_two.' '.$deliveryAddress->district->name.' '.$deliveryAddress->postcode.' '.$deliveryAddress->state->name.' '.$deliveryAddress->country->name,
'',
$deliveryAddress->postcode,
$deliveryAddress->contacts()->first()->phone,
$package->type === PackageType::CARTON ? 'Package' : ($package->type === PackageType::PALLET ? 'Pallet' : 'Documents'),
'Pick Up',
'Default',
$order->reference,
$package->quantity,
$package->weight * $package->quantity,
1,
1,
1,
'',
''
];
}
}
@@ -0,0 +1,74 @@
<?php
namespace App\Classes\Modules\Exports\Services;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\FromCollection;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Concerns\WithTitle;
class ExportsDeliveryValidValues implements WithHeadings, WithHeadingRow, WithMapping, ShouldAutoSize, WithTitle, FromCollection
{
use Exportable;
private $request;
/**
* ExportsDeliveryValidValues constructor.
* @param Request $request
*/
public function __construct(Request $request)
{
$this->request = $request;
}
public function headings(): array
{
return [
'Types_Of_Services',
'Service_Type',
'Mode',
'Flag',
'Pickup Address'
];
}
/**
* @return \Illuminate\Support\Collection|mixed
*/
public function collection()
{
$returnArray = collect();
$returnArray->push(['Domestic Shipment', 'Package', 'Pick Up', 'Yes', 'Default']);
$returnArray->push(['', 'Documents', 'Lodge In / Walk In', 'No', 'Sender']);
$returnArray->push(['', 'Pallet', '', '', '']);
return $returnArray;
}
public function title(): string
{
return 'valid-values';
}
/**
* @param ReturnArray $returnArray
*
* @return array
*/
public function map($returnArray): array
{
return [
$returnArray[0],
$returnArray[1],
$returnArray[2],
$returnArray[3],
$returnArray[4],
];
}
}
@@ -0,0 +1,38 @@
<?php
namespace App\Classes\Modules\Exports\Services;
use App\Classes\Modules\Exports\Services\ExportsDeliveryOrders;
use App\Classes\Modules\Exports\Services\ExportsDeliveryValidValues;
use App\Models\Order;
use Maatwebsite\Excel\Concerns\Exportable;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Concerns\WithMultipleSheets;
class ExportsMultipleDeliveryOrders implements WithMultipleSheets
{
use Exportable;
protected $request;
/**
* ExportsMultipleDeliveryOrders constructor.
* @param Request $request
*/
public function __construct(Request $request)
{
$this->request = $request;
}
/**
* @return array
*/
public function sheets(): array
{
$sheets = [];
$sheets[] = new ExportsDeliveryOrders($this->request);
$sheets[] = new ExportsDeliveryValidValues($this->request);
return $sheets;
}
}
@@ -0,0 +1,59 @@
<?php
namespace App\Classes\Modules\Exports\Services;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Models\PackingList;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Carbon\Carbon;
class ExportsOnHoldPackingList implements FromQuery, WithHeadings, WithHeadingRow, WithMapping, ShouldAutoSize
{
use Exportable;
public function headings(): array
{
return [
'Container Ref.',
'ETA',
'Unstuffing',
'Marking',
'Order Number'
];
}
/**
* @return \Illuminate\Support\Collection|mixed
*/
public function query()
{
return PackingList::where('type', '=', 2)->whereIn('status', [4, 5])->whereHas('containers');
}
/**
* @param PackingList $packingList
*
* @return array
*/
public function map($packingList): array
{
$container = $packingList->containers()->first();
$ContainerTransport = $container->transports()->first();
$order = $packingList->owner;
$marking = $order->companyModule->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference;
return [
$container->reference,
$ContainerTransport ? $ContainerTransport->schedules()->where('status', '=', ApprovalStatus::APPROVED)->first()->eta : 'n/a',
$ContainerTransport ? $ContainerTransport->drop_date : 'n/a',
$marking,
$order->reference,
];
}
}

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