Compare commits

...

177 Commits

Author SHA1 Message Date
edmondlang d53e2fe19a fix issue unable to generate invoice 2022-05-24 00:26:23 +08:00
edmondlang fcf3d24ae4 Merge branch 'master' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into container-payment-ui 2022-05-13 23:04:17 +08:00
omair saleh 31e28c3dfa fix export arrival list 2022-05-13 12:51:20 +08:00
omair saleh faf4d35340 fix export arrival list 2022-05-13 12:50:36 +08:00
omair saleh 4fef6f8e6f fix export arrival list 2022-05-13 12:45:54 +08:00
omair saleh 5d504b5111 fix export arrival list 2022-05-13 12:44:19 +08:00
omair saleh 3854884370 fix export arrival list 2022-05-12 12:14:29 +08:00
omair saleh fe70c4b111 fix export arrival list 2022-05-11 18:00:13 +08:00
omair saleh dad2f95eaa fix export arrival list 2022-05-11 14:03:52 +08:00
omair saleh 764e709135 fix export arrival list 2022-05-11 14:01:02 +08:00
omair saleh 9b35f8c374 fix export arrival list 2022-05-11 13:51:13 +08:00
omair saleh 2e03ce370d fix export arrival list 2022-05-11 13:42:26 +08:00
omair saleh d972e98732 fix export arrival list 2022-05-10 19:50:19 +08:00
omair saleh 9041d9623b fix export arrival list 2022-05-10 19:46:16 +08:00
omair saleh f4a96fec78 fix export arrival list 2022-05-10 19:41:35 +08:00
omair saleh c299c60d38 fix export arrival list 2022-05-10 19:38:04 +08:00
omair saleh 96eeb5a63e fix export arrival list 2022-05-10 19:37:49 +08:00
omair saleh fc6c365792 fix export arrival list 2022-05-10 19:37:39 +08:00
omair saleh 6094adadec fix export arrival list 2022-05-10 19:35:16 +08:00
omair saleh 78ce2084b9 fix export arrival list 2022-05-10 19:31:04 +08:00
omair saleh 4fb284c85c fix export arrival list 2022-05-10 19:27:45 +08:00
omair saleh 9e060bccd3 fix export arrival list 2022-05-10 19:24:02 +08:00
omair saleh 3100d42bd7 fix export arrival list 2022-05-10 19:23:03 +08:00
omair saleh 0640e0de9b fix export arrival list 2022-05-10 19:13:36 +08:00
omair saleh aa1d1dccc5 fix export arrival list 2022-05-10 18:57:22 +08:00
omair saleh e369bc7f9e fix export arrival list 2022-05-10 15:42:33 +08:00
omair saleh 6713542dc9 fix export arrival list 2022-05-10 15:02:06 +08:00
omair saleh f73094ca06 fix export arrival list 2022-05-10 15:01:35 +08:00
omair saleh 453683ca76 fix export arrival list 2022-05-10 14:59:43 +08:00
edmondlang caef08aa98 update generate invoice api 2022-05-07 22:28:13 +08:00
edmondlang 2c2e4eece8 update generate invoice api 2022-05-07 20:08:22 +08:00
omair saleh a30421a3e9 fix addons table migration 2022-05-07 16:42:44 +08:00
omair saleh 056342308e fix addons table migration 2022-05-07 16:37:48 +08:00
omair saleh f7ca8558f5 fix addons table migration 2022-05-07 16:32:02 +08:00
edmondlang 92255056cc Merge branch 'container-payment-ui' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into development 2022-05-07 16:28:40 +08:00
edmondlang 5e1626e6a4 add soft delete in segemtns model 2022-05-07 16:28:11 +08:00
edmondlang c533c0c4a6 Merge branch 'master' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into development 2022-05-06 21:34:57 +08:00
omair saleh e8eb02430b update warehouse operation time 2022-05-06 13:49:14 +08:00
edmondlang f17bfea250 fix generate invoice api and database seeder for segment constant 2022-05-05 21:05:45 +08:00
edmondlang 24ceb3cb39 Merge branch 'new-signup' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into development 2022-05-02 12:05:40 +08:00
edmondlang b6086554e2 sepereate delivery login component and shipping login component 2022-05-02 12:05:19 +08:00
edmondlang fee73f7708 Merge branch 'new-signup' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into development 2022-04-30 21:08:29 +08:00
edmondlang cd7ee3afb3 new signup 2022-04-30 11:57:32 +08:00
edmondlang 3329028860 Merge branch 'master' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into development 2022-04-30 10:18:56 +08:00
omair saleh 6507b84e55 update warehouse operation time 2022-04-28 10:12:27 +08:00
omair saleh eab465e837 update gz default warehouse 2022-04-27 17:29:26 +08:00
omair saleh 1cc0303539 update raya announcement 2022-04-27 12:55:49 +08:00
omair saleh 305ae6c217 update raya announcement 2022-04-27 12:51:39 +08:00
omair saleh bcd926b4c9 update crisp session data 2022-04-25 15:14:11 +08:00
edmondlang cd84348542 Merge branch 'delete-packing-list' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into development 2022-04-24 23:30:18 +08:00
edmondlang 8e0efdf6e7 delete packing list 2022-04-24 23:30:02 +08:00
edmondlang 37cdbbb2c4 Merge branch 'api-intergration' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into development 2022-04-24 23:04:26 +08:00
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 8ca1cc1625 Merge branch 'api-intergration' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into development 2022-04-21 22:08:07 +08:00
edmondlang d0ee2473ac update section name 2022-04-21 22:07:50 +08:00
edmondlang b67b676704 Merge branch 'update-delivery-date' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into development 2022-04-21 21:42:53 +08:00
edmondlang 2f98dc976a add file RescheduleTransportDateFormComponent 2022-04-21 21:42:32 +08:00
edmondlang 2421dd0988 Merge branch 'update-delivery-date' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into development 2022-04-21 21:02:38 +08:00
edmondlang 20237d69fb update 2022-04-21 21:02:25 +08:00
edmondlang 03851deeea Merge branch 'update-delivery-date' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into development 2022-04-21 20:59:16 +08:00
edmondlang 22f1548eac update delivery date 2022-04-21 20:58:27 +08:00
omair saleh 4e4475ad12 switch back to temp warehouse 2022-04-21 14:12:23 +08:00
omair saleh a287a1193a allow admin to add arrived parcels 2022-04-21 12:19:57 +08:00
omair saleh a80b3013c3 go to previous yd warehouse 2022-04-21 10:31:24 +08:00
edmondlang 4224c3e436 Merge branch 'api-intergration' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into development 2022-04-21 09:31:12 +08:00
edmondlang 33124d6588 update declare postcode and implement api 2022-04-21 09:30:56 +08:00
edmondlang 77c2ede28e Merge branch 'api-intergration' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into development 2022-04-21 01:14:33 +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 8418268731 Merge branch 'api-intergration' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into development 2022-04-19 20:50:28 +08:00
edmondlang 98dc43d23a update segment constant logic 2022-04-19 20:50:09 +08:00
edmondlang 5fdc6d5719 Merge branch 'api-intergration' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into development 2022-04-19 15:10:12 +08:00
edmondlang cfd6757a84 tidy up 2022-04-19 15:09:56 +08:00
edmondlang 08517e8ee7 Merge branch 'api-intergration' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into development 2022-04-19 14:58:17 +08:00
edmondlang eb31291e25 update warehouse api 2022-04-19 14:57:38 +08:00
edmondlang ddbecaae6f Merge branch 'api-intergration' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into development 2022-04-19 13:31:04 +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
edmondlang 8795f1c203 Merge branch 'master' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into development 2022-04-19 11:00:57 +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
edmondlang 762e9b8dca update segment migration files 2022-04-17 23:54:44 +08:00
edmondlang d8c9c77d8d Merge branch 'api-intergration' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into development 2022-04-17 23:42:26 +08:00
edmondlang f21708ff57 Merge branch 'notification-ui' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into development
# Conflicts:
#	routes/web.php
2022-04-17 23:38:10 +08:00
edmondlang ac4fcb05e9 Merge branch 'master' of https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal into development
# Conflicts:
#	resources/views/vendor/js.blade.php
2022-04-17 23:36:42 +08:00
edmondlang b3a296f2eb update notification ui, display no result found if no notification 2022-04-17 21:10:52 +08:00
edmondlang 5a723c5fd1 update notification ui - solve ui bug when only have 1 notification 2022-04-16 23:54:51 +08:00
edmondlang 6e9a27024b update notification ui 2022-04-16 16:19:25 +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 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 e0018de70d Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-04-07 22:57:28 +08:00
omair saleh f5a0e9cd07 Merge branch 'last-mile-integration' into 'development'
update final touch up for last delivery integration

See merge request CIEFWorldwideSdnBhd/shipping-portal!127
2022-04-07 13:28:33 +00:00
omair saleh 908c547ddc Merge branch 'last-mile-integration' into 'development'
update final touch up for last delivery integration

See merge request CIEFWorldwideSdnBhd/shipping-portal!126
2022-04-07 13:21:17 +00:00
omair saleh cdda3ff5e1 Merge branch 'last-mile-integration' into 'development'
update final touch up for last delivery integration

See merge request CIEFWorldwideSdnBhd/shipping-portal!125
2022-04-07 13:17:48 +00:00
omair saleh 27bacd412a Merge branch 'last-mile-integration' into 'development'
Last mile integration

See merge request CIEFWorldwideSdnBhd/shipping-portal!124
2022-04-07 13:13:58 +00:00
edmondlang 424ac600c3 Merge branch 'export-customer-order-list' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-04-07 12:31:05 +08:00
edmondlang 715635954a update file name 2022-04-07 12:30:39 +08:00
edmondlang a5a450a7d4 Merge branch 'export-customer-order-list' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-04-07 11:50:03 +08:00
edmondlang 2919544769 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into export-customer-order-list 2022-04-07 11:37:10 +08:00
edmondlang e3284fdf98 export customer order list 2022-04-07 11:36:03 +08:00
omair saleh 114a083627 Merge branch 'last-mile-integration' into 'development'
update last mile delivery logo

See merge request CIEFWorldwideSdnBhd/shipping-portal!123
2022-04-07 03:13:22 +00:00
omair saleh 32a509d090 Merge branch 'last-mile-integration' into 'development'
updates last mile intergration - add functions

See merge request CIEFWorldwideSdnBhd/shipping-portal!122
2022-04-07 01:54:39 +00:00
omair saleh bd2b7b236b Merge branch 'last-mile-integration' into 'development'
hide admin menu flashing

See merge request CIEFWorldwideSdnBhd/shipping-portal!121
2022-04-07 01:48:33 +00:00
omair saleh 6a08d88031 Merge branch 'last-mile-integration' into 'development'
hide admin menu flashing

See merge request CIEFWorldwideSdnBhd/shipping-portal!120
2022-04-07 01:45:16 +00:00
omair saleh ef95893c3b Merge branch 'last-mile-integration' into 'development'
update last mile delivery module

See merge request CIEFWorldwideSdnBhd/shipping-portal!119
2022-04-06 10:53:05 +00:00
edmondlang 5043b32191 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-04-06 18:31:15 +08:00
omair saleh 7169ba423c Merge branch 'last-mile-integration' into 'development'
updates last mile intergration - add functions

See merge request CIEFWorldwideSdnBhd/shipping-portal!118
2022-04-06 10:25:09 +00:00
edmondlang f8e7573cfd Merge branch 'export-delivery-list' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-04-06 14:37:23 +08:00
edmondlang 5aa93b30c7 update container select packing list 2022-04-05 19:05:57 +08:00
edmondlang 8c35601ccd Merge branch 'development' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into development 2022-04-05 19:04:24 +08:00
omair saleh 0ec9226226 add crisp 2022-04-05 13:26:24 +08:00
omair saleh 3286939ccc Merge remote-tracking branch 'origin/development' into development 2022-04-05 13:21:07 +08:00
omair saleh 3a2146146c add crisp 2022-04-05 13:20:52 +08:00
edmondlang e2e8f69f90 update notification add List Notifications API and UI 2022-03-15 16:14:21 +08:00
edmondlang e5c28faba7 Merge branch 'development' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into notification-ui 2022-03-14 12:38:13 +08:00
edmondlang 4b81666cf2 Merge branch 'development' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into notification-ui 2022-03-13 22:16:16 +08:00
edmondlang 4a2fb8e9e4 update notification icon 2022-03-12 17:10:38 +08:00
edmondlang ea772c3916 Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/shipping-portal into notification-ui 2022-03-12 17:02:36 +08:00
edmondlang f8d65d05da notification-ui 2022-01-15 13:39:17 +08:00
106 changed files with 90071 additions and 636 deletions
@@ -0,0 +1,21 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use App\Models\User;
use Illuminate\Database\Eloquent\Builder;
class TargetId implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('target_type', User::class)->where('target_id', $value);
}
}
@@ -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
{
@@ -70,7 +70,9 @@ class GeneratesAuthenticationToken {
$claims = array_merge($claims, [
'company_id' => $companyModule->company_id,
'company_module_id' => $companyModule->id,
'company_module_type' => $companyModule->type
'company_module_type' => $companyModule->type,
'company_name' => $companyModule->name,
'company_marking' => $companyModule->type !== 8 ? $companyModule->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference : 'HWT',
]);
}
@@ -14,6 +14,8 @@ use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Documents\Services\FetchesDocument;
use App\Classes\Modules\Documents\Services\ApprovesDocument;
use App\Classes\Modules\Notifications\DataTransferObjects\NotificationObject;
Use App\Classes\Modules\Notifications\Processors\CreateNotificationProcessor;
use App\Models\Document;
use Illuminate\Http\JsonResponse;
@@ -50,6 +52,9 @@ class ApproveIdentificationDocumentLogic extends AbstractControllerLogic
/** @var UpdatesOrdersStatus */
private $updatesOrdersStatus;
/** @var CreateNotificationProcessor */
private $createNotificationProcessor;
/**
* ApproveIdentificationDocumentLogic constructor.
* @param CanApproveDocument $canApproveDocument
@@ -58,8 +63,9 @@ class ApproveIdentificationDocumentLogic extends AbstractControllerLogic
* @param FetchesDocument $fetchesDocument
* @param UpdatesCompanyStatus $updatesCompanyStatus
* @param UpdatesOrdersStatus $updatesOrdersStatus
* @param CreateNotificationProcessor $createNotificationProcessor
*/
public function __construct(CanApproveDocument $canApproveDocument, ApprovesDocument $approvesDocument, RejectsDocument $rejectsDocument, FetchesDocument $fetchesDocument, UpdatesCompanyStatus $updatesCompanyStatus, UpdatesOrdersStatus $updatesOrdersStatus)
public function __construct(CanApproveDocument $canApproveDocument, ApprovesDocument $approvesDocument, RejectsDocument $rejectsDocument, FetchesDocument $fetchesDocument, UpdatesCompanyStatus $updatesCompanyStatus, UpdatesOrdersStatus $updatesOrdersStatus, CreateNotificationProcessor $createNotificationProcessor)
{
$this->canApproveDocument = $canApproveDocument;
$this->approvesDocument = $approvesDocument;
@@ -67,6 +73,7 @@ class ApproveIdentificationDocumentLogic extends AbstractControllerLogic
$this->fetchesDocument = $fetchesDocument;
$this->updatesCompanyStatus = $updatesCompanyStatus;
$this->updatesOrdersStatus = $updatesOrdersStatus;
$this->createNotificationProcessor = $createNotificationProcessor;
}
/**
@@ -90,6 +97,16 @@ class ApproveIdentificationDocumentLogic extends AbstractControllerLogic
$this->updatesCompanyStatus->execute($document->owner, $status === 'approve' ? ApprovalStatus::APPROVED : ApprovalStatus::REJECTED);
$object = new NotificationObject(
'ID Verification ' . ( $status === 'approve' ? 'Approved' : 'Rejected' ),
( $status === 'approve' ? 'Dear user, congratulations that your ' : 'Dear user, we are sorry to inform you that your ' ) . ( $document->type === 'IDENTITY_CARD' ? 'IC' : 'SSM' ) . ( $status === 'approve' ? ' has been approved. Start your first order now!' : ' has been rejected due to ' . ( $request->input('rejectRemark') ?? '' ) . ', please resubmit it for further action.' ),
$document->owner,
$document->owner->companyModules()->first()->employees()->first(),
$document,
);
$this->createNotificationProcessor->execute($object);
if($status === 'approve'){
$orders = $this->updatesOrdersStatus->execute($document->owner, ApprovalStatus::APPROVED);
}
@@ -32,6 +32,7 @@ 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
{
@@ -132,9 +133,9 @@ class CreateDeliveryCustomerLogic extends AbstractControllerLogic
/** @var CompanyModule $companyModule */
$companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::ONLINE_SELLER);
$inviter = $this->fetchesCompanyModule->execute(['reference'=>'LMD']);
$inviter = $this->fetchesCompanyModule->execute(['reference'=>'HWT']);
$connectionObject = new CompanyConnectionObject($companyModule, $inviter, mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate(), 'LMD');
$connectionObject = new CompanyConnectionObject($companyModule, $inviter, mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate(), 'HWT');
$connection = $this->createsCompanyConnection->execute($connectionObject);
@@ -129,7 +129,7 @@ class CreateDeliveryOrderLogic extends AbstractControllerLogic
$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, $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);
@@ -0,0 +1,72 @@
<?php
namespace App\Classes\Modules\Exports\Services;
use App\Models\Order;
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 App\Classes\ValueObjects\Constants\OrderRoleTypes;
class ExportsArrivedParcel implements WithHeadings, WithHeadingRow, WithMapping, ShouldAutoSize, FromQuery
{
use Exportable;
public function headings(): array
{
return [
'ORDER NUMBER',
'Marking',
'Warehouse',
'Cbm',
'Description',
'quantity',
'Received Date',
'Remarks'
];
}
/**
* @return \Illuminate\Support\Collection|mixed
*/
public function query()
{
return PackingList::where('type', '=', 1)->where('status', '=', 2)->where('owner_type', Order::class);
}
/**
* @param $packingList
* @return array
*/
public function map($packingList): array
{
$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 = $packingList->packages->sum(function($package){
return (($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,
$packingList->packages->implode('description', ', '),
$packingList->packages->sum('quantity'),
$arrival_date,
''
];
}
}
@@ -0,0 +1,91 @@
<?php
namespace App\Classes\Modules\Exports\Services;
use App\Models\Container;
use App\Models\Package;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Carbon\Carbon;
class ExportsCompanyModuleSummary implements FromCollection, WithHeadings, WithHeadingRow, WithMapping, ShouldAutoSize
{
use Exportable;
protected $companyModuleId, $containerIds;
public function headings(): array
{
return [
'Date',
'Full Marking',
'Container',
'Description',
'Ctns',
'L (cm)',
'H (cm)',
'W (cm)',
'CBM'
];
}
public function setParameters($companyModuleId, $containerIds)
{
$this->companyModuleId = $companyModuleId;
$this->containerIds = $containerIds;
}
/**
* @return \Illuminate\Support\Collection|mixed
*/
public function collection()
{
$packagesArray = collect();
$containers = Container::whereIn('reference', explode(',', $this->containerIds))->get();
foreach ($containers as $container){
$company_module_id = $this->companyModuleId;
$packingLists = $container->packingLists()->get()->filter(function ($packingList) use ($company_module_id) {
return $packingList->owner->company_module_id == $company_module_id;
});
foreach ($packingLists as $packingList){
if($packingList->packingLists->first()){
$packingList = $packingList->packingLists->first();
}
$packages = $packingList->packages;
foreach ($packages as $package){
$packagesArray->push($package);
}
}
}
return $packagesArray;
}
/**
* @param Package $package
*
* @return array
*/
public function map($package): array
{
$connection = $package->packingList->owner->companyModule->inviters()->withPivot('invitee_reference')->first();
$marking = $connection ? $connection->pivot->invitee_reference:'';
return [
Carbon::parse($package->created_at)->format('d-m-Y'),
$marking,
$package->packingList->containers()->first()->reference,
$package->description,
$package->quantity,
$package->length,
$package->height,
$package->width,
((($package->length / 100) * ($package->height / 100) * ($package->width / 100)) * $package->quantity)
];
}
}
@@ -91,16 +91,16 @@ class ExportsDeliveryOrders implements FromQuery, WithHeadings, WithHeadingRow,
'Domestic Shipment',
'ST00000020',
$senderAddress->contacts()->first()->reference,
$order->companyModule->name,
'*',
$senderAddress->street_one.', '.$senderAddress->street_two.' '.$senderAddress->district->name.' '.$senderAddress->postcode.' '.$senderAddress->state->name.' '.$senderAddress->country->name,
$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->street_one.', '.$deliveryAddress->street_two.' '.$deliveryAddress->district->name.' '.$deliveryAddress->postcode.' '.$deliveryAddress->state->name.' '.$deliveryAddress->country->name,
$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,
@@ -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,
];
}
}
@@ -25,7 +25,8 @@ class ExportsPendingArrangementDeliveryList implements FromQuery, WithHeadings,
'Unstuffing',
'Marking',
'Order Number',
'Delay Days',
'status',
'Delay Days / delivery date',
'Quantity',
'State',
'Postcode',
@@ -43,7 +44,7 @@ class ExportsPendingArrangementDeliveryList implements FromQuery, WithHeadings,
{
return PackingList::where('type', '=', 2)->whereHas('containers', function ($query){
$query->where('containers.status', ApprovalStatus::COMPLETED);
})->whereDoesntHave('transports');
});
}
/**
@@ -61,6 +62,7 @@ class ExportsPendingArrangementDeliveryList implements FromQuery, WithHeadings,
$contacts = $address->contacts->first() ? $address->contacts->first(): '';
$originalPackingList = $packingList->owner instanceof PackingList ? $packingList->owner : $packingList;
$transport = $originalPackingList->containers()->first()->transports()->first();
$deliveryTransport = $originalPackingList->transports()->first();
return [
$container->reference,
@@ -68,7 +70,8 @@ class ExportsPendingArrangementDeliveryList implements FromQuery, WithHeadings,
$ContainerTransport->drop_date,
$marking,
$order->reference,
$transport ? Carbon::now()->diffInDays($transport->drop_date, false) . ' Days' : '',
$deliveryTransport ? (Carbon::parse($deliveryTransport->schedules()->first()->eta) < Carbon::now() ? 'Delivered' : 'Pending Delivery') : 'Pending Arrangement',
$deliveryTransport ? $deliveryTransport->schedules()->first()->eta : ($transport ? Carbon::now()->diffInDays($transport->drop_date, false) . ' Days' : ''),
$packingList->packages()->sum('quantity'),
$address->state->name,
$address->postcode,
@@ -0,0 +1,61 @@
<?php
namespace App\Classes\Modules\Notifications\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Notifications\Services\ListsNotification;
use App\Http\Resources\NotificationResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListNotificationsLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieve Notifications',
'message' => 'You have successfully retrieved a list of Notifications'
];
}
/** @var ListsNotification */
private $listsNotification;
/**
* ListNotificationsLogic constructor.
* @param ListsNotification $listsNotification
*/
public function __construct(
ListsNotification $listsNotification
)
{
$this->listsNotification = $listsNotification;
}
/**
* @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
{
$filters = [
// 'target_id'=>auth()->user()->id,
// 'per_page'=>$request->route('per_page')
];
$notifications = $this->listsNotification->execute($filters);
return $this->collectionResponse(NotificationResource::collection($notifications));
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Notifications\Services;
use App\Classes\General\Eloquent\AbstractListRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\Notification;
class ListsNotification extends AbstractListRecord
{
/** @var Bank */
private $repository;
/**
* ListsBank constructor.
* @param Notification $repository
*/
public function __construct(Notification $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -56,28 +56,23 @@ class ReschedulePackingListLogic extends AbstractControllerLogic
*/
public function logic(Request $request) : JsonResponse
{
try {
$packing_list = $this->fetchesPackingList->execute(['id' => $request->route('id')]);
$packing_list = $this->fetchesPackingList->execute(['id' => $request->route('id')]);
$transport = $packing_list->transports()->first();
$transport = $packing_list->transports()->first();
$old_sechedule = $transport->schedules()->first();
$old_sechedule = $transport->schedules()->first();
$this->updatesScheduleStatus->execute($old_sechedule, ApprovalStatus::REJECTED);
$this->updatesScheduleStatus->execute($old_sechedule, ApprovalStatus::REJECTED);
$scheduleObject = new ScheduleObject(
Carbon::parse($request->input('eta')),
Carbon::parse($request->input('etd')),
ApprovalStatus::APPROVED
);
$schedule = $this->createsSchedule->execute($transport, $scheduleObject);
return $this->resourceResponse(new PackingListResource($packing_list));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
$scheduleObject = new ScheduleObject(
Carbon::parse($request->input('eta')),
Carbon::parse($request->input('etd')),
ApprovalStatus::APPROVED
);
$schedule = $this->createsSchedule->execute($transport, $scheduleObject);
return $this->resourceResponse(new PackingListResource($packing_list));
}
}
@@ -6,6 +6,8 @@ namespace App\Classes\Modules\PackingLists\Processors;
use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject;
use App\Classes\Modules\PackingLists\Services\Packages\CreatesPackage;
use App\Classes\Modules\PackingLists\Standards\Rules\Packages\CanCreatePackage;
use App\Classes\ValueObjects\Constants\WarehouseReferences;
use App\Models\Order;
use App\Models\PackingList;
class CreatePackageProcessor
@@ -48,6 +50,11 @@ class CreatePackageProcessor
if($replica) {
$modificationValue = 1;
if($replica->owner->owner instanceof Order){
$modificationValue = in_array( $replica->owner->owner->companyModule->id, WarehouseReferences::REPLICA_WHITE_LIST) ? 0 : 1;
}
$packageObject = new PackageObject($object->getType(), $object->getDescription(), $object->getWidth() + $modificationValue, $object->getHeight() + $modificationValue, $object->getLength() + $modificationValue, $object->getWeight(), $object->getQuantity(), $object->getStatus());
$package = $this->createsPackage->execute($packageObject, $replica);
}
@@ -10,7 +10,10 @@ use App\Classes\Modules\PackingLists\Standards\Rules\CanCreatePackingList;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
use App\Classes\ValueObjects\Constants\PackingListType;
use App\Classes\ValueObjects\Constants\WarehouseReferences;
use App\Models\Order;
use App\Models\PackingList;
use function PHPUnit\Framework\isInstanceOf;
class CreatePackingListProcessor
{
@@ -51,6 +54,7 @@ class CreatePackingListProcessor
$appointee_id = $packingList->owner_id == 1 ? 2037 : $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id;
$type = $object->getType() === PackingListType::SHIPPING_PACKING_LIST ? PackingListType::SHIPPING_PACKING_LIST_REPLICA : PackingListType::WAREHOUSE_RECEIVE_LIST_REPLICA;
/** create packing list replica */
$object = new PackingListObject($object->getReference().'_01', $appointee_id, $type, ApprovalStatus::PENDING_SUBMISSION);
$this->createsPackingList->execute($object, $packingList);
@@ -0,0 +1,121 @@
<?php
namespace App\Classes\Modules\Segments\ControllersLogic;
use App\Classes\Exceptions\ResourceNotFoundException;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Segments\DataTransferObjects\ConstantObject;
use App\Classes\Modules\Segments\Services\UpdatesBasePriceConstantByDates;
use App\Classes\Modules\Segments\Services\CreatesConstant;
use App\Classes\Modules\Segments\Services\FetchesConstant;
use App\Classes\Modules\Segments\Services\FetchesSegment;
use App\Classes\Modules\Segments\Standards\Rules\CanCreateConstant;
use App\Classes\Modules\Segments\Standards\Rules\CanUpdateConstant;
use App\Classes\Modules\Segments\Services\UpdatesConstant;
use App\Classes\ValueObjects\Constants\SegmentConstants;
use App\Http\Resources\ConstantResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateBasePriceLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Create Base Price',
'message' => 'You have successfully created a Base Price'
];
}
/** @var CanUpdateConstant */
private $canUpdateConstant;
/** @var UpdatesConstant */
private $updatesConstant;
/** @var FetchesSegment */
private $fetchesSegment;
/** @var FetchesConstant */
private $fetchesConstant;
/** @var CanCreateConstant */
private $canCreateConstant;
/** @var CreatesConstant */
private $createsConstant;
/** @var UpdatesBasePriceConstantByDates */
private $updatesBasePriceConstantByDates;
/**
* UpdateConstantLogic constructor.
* @param CanUpdateConstant $canUpdateConstant
* @param UpdatesConstant $updatesConstant
* @param FetchesSegment $fetchesSegment
* @param FetchesConstant $fetchesConstant
* @param CanCreateConstant $canCreateConstant
* @param CreatesConstant $createsConstant
* @param UpdatesBasePriceConstantByDates $updatesBasePriceConstantByDates
*/
public function __construct(
CanUpdateConstant $canUpdateConstant,
UpdatesConstant $updatesConstant,
FetchesSegment $fetchesSegment,
FetchesConstant $fetchesConstant,
CanCreateConstant $canCreateConstant,
CreatesConstant $createsConstant,
UpdatesBasePriceConstantByDates $updatesBasePriceConstantByDates
)
{
$this->canUpdateConstant = $canUpdateConstant;
$this->updatesConstant = $updatesConstant;
$this->fetchesSegment = $fetchesSegment;
$this->fetchesConstant = $fetchesConstant;
$this->canCreateConstant = $canCreateConstant;
$this->createsConstant = $createsConstant;
$this->updatesBasePriceConstantByDates = $updatesBasePriceConstantByDates;
}
/**
* @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
{
$segment = $this->fetchesSegment->execute(['id' => $request->route('id')]);
try {
$constant = $this->fetchesConstant->execute(['segment_id' => $segment->id, 'reference' => SegmentConstants::BASE_PRICE]);
} catch (ResourceNotFoundException $exception){
$constantObject = [];
$object = new ConstantObject(
SegmentConstants::BASE_PRICE,
$constantObject
);
$constant = $this->createsConstant->execute($segment, $object);
}
$constantValue = $this->updatesBasePriceConstantByDates->execute($constant->value, $request->input('dateFrom'), $request->input('dateTo'), $request->input('rate'));
$object = new ConstantObject(SegmentConstants::BASE_PRICE, $constantValue);
$this->canUpdateConstant->passes($object);
$constant = $this->updatesConstant->execute($constant, $object);
return $this->resourceResponse(new ConstantResource($constant));
}
}
@@ -0,0 +1,68 @@
<?php
namespace App\Classes\Modules\Segments\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Segments\Services\FetchesConstant;
use App\Classes\ValueObjects\Constants\SegmentConstants;
use App\Http\Resources\ConstantResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Carbon\CarbonPeriod;
class FetchBasePriceLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieved Base Price',
'message' => 'You have successfully retrieved the Base Price'
];
}
/** @var FetchesConstant */
private $fetchesConstant;
/**
* FetchConstantLogic constructor.
* @param FetchesConstant $fetchesConstant
*/
public function __construct(FetchesConstant $fetchesConstant)
{
$this->fetchesConstant = $fetchesConstant;
}
/**
* @param Request $request
* @return JsonResponse
*/
public function logic(Request $request) : JsonResponse
{
$constant = $this->fetchesConstant->execute(['segment_id' => $request->route('id'), 'reference' => SegmentConstants::BASE_PRICE]);
$constantObject = (array) $constant->value;
if ($request->input('dateFrom') !== null && $request->input('dateTo') !== null) {
$period = CarbonPeriod::create($request->input('dateFrom'), $request->input('dateTo'));
$returnObject = [];
foreach ($period as $date) {
array_key_exists($date->format('Y-m-d'), $constantObject) === true ? $returnObject[$date->format('Y-m-d')] = $constantObject[$date->format('Y-m-d')] : '';
}
$constant->value = json_encode($returnObject);
}
return $this->resourceResponse(new ConstantResource($constant));
}
}
@@ -5,7 +5,9 @@ namespace App\Classes\Modules\Segments\ControllersLogic;
use App\Classes\Exceptions\ResourceNotFoundException;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Segments\DataTransferObjects\ConstantObject;
use App\Classes\Modules\Segments\DataTransferObjects\SegmentObject;
use App\Classes\Modules\Segments\Services\CreatesConstant;
use App\Classes\Modules\Segments\Services\CreatesSegment;
use App\Classes\Modules\Segments\Services\FetchesConstant;
use App\Classes\Modules\Segments\Services\FetchesSegment;
use App\Classes\Modules\Segments\Standards\Rules\CanCreateConstant;
@@ -15,6 +17,7 @@ use App\Http\Resources\ConstantResource;
use App\Models\SegmentConstant;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use App\Classes\Modules\Segments\Services\UpdatesConstantValue;
class UpdateConstantLogic extends AbstractControllerLogic
{
@@ -47,6 +50,11 @@ class UpdateConstantLogic extends AbstractControllerLogic
/** @var CreatesConstant */
private $createsConstant;
/** @var CreatesSegment */
private $createsSegment;
/** @var UpdatesConstantValue */
private $updatesConstantValue;
/**
* UpdateConstantLogic constructor.
@@ -56,8 +64,19 @@ class UpdateConstantLogic extends AbstractControllerLogic
* @param FetchesConstant $fetchesConstant
* @param CanCreateConstant $canCreateConstant
* @param CreatesConstant $createsConstant
* @param UpdatesConstantValueByState $updatesConstantValueByState
* @param CreatesSegment $createsSegment
*/
public function __construct(CanUpdateConstant $canUpdateConstant, UpdatesConstant $updatesConstant, FetchesSegment $fetchesSegment, FetchesConstant $fetchesConstant, CanCreateConstant $canCreateConstant, CreatesConstant $createsConstant)
public function __construct(
CanUpdateConstant $canUpdateConstant,
UpdatesConstant $updatesConstant,
FetchesSegment $fetchesSegment,
FetchesConstant $fetchesConstant,
CanCreateConstant $canCreateConstant,
CreatesConstant $createsConstant,
UpdatesConstantValue $updatesConstantValue,
CreatesSegment $createsSegment
)
{
$this->canUpdateConstant = $canUpdateConstant;
$this->updatesConstant = $updatesConstant;
@@ -65,6 +84,8 @@ class UpdateConstantLogic extends AbstractControllerLogic
$this->fetchesConstant = $fetchesConstant;
$this->canCreateConstant = $canCreateConstant;
$this->createsConstant = $createsConstant;
$this->updatesConstantValue = $updatesConstantValue;
$this->createsSegment = $createsSegment;
}
/**
* @param Request $request
@@ -75,28 +96,33 @@ class UpdateConstantLogic extends AbstractControllerLogic
*/
public function logic(Request $request) : JsonResponse
{
$object = new ConstantObject($request->input('reference'), $request->input('value'));
$segment = $this->fetchesSegment->execute(['id' => $request->route('id')]);
try {
$constant = $this->fetchesConstant->execute(['segment_id' => $segment->id, 'reference' => $object->getReference()]);
$this->canUpdateConstant->passes($object);
$constant = $this->fetchesConstant->execute(['segment_id' => $segment->id, 'reference' => $request->input('reference')]);
/** @var SegmentConstant $constant */
$constant = $this->updatesConstant->execute($constant, $object);
$constantValue = $this->updatesConstantValue->execute($constant->value, $request->input('id'), $request->input('rate'));
$object = new ConstantObject($request->input('reference'), $constantValue);
$this->canUpdateConstant->passes($object);
} catch (ResourceNotFoundException $exception){
$this->canCreateConstant->passes($object);
$constantObject = [];
$constantObject[$request->input('id')] = $request->input('rate');
$object = new ConstantObject(
$request->input('reference'),
$constantObject
);
/** @var SegmentConstant $constant */
$constant = $this->createsConstant->execute($segment, $object);
}
$constant = $this->updatesConstant->execute($constant, $object);
return $this->resourceResponse(new ConstantResource($constant));
}
@@ -14,6 +14,8 @@ use App\Classes\Modules\Segments\Standards\Rules\CanUpdateConstant;
use App\Classes\Modules\Segments\DataTransferObjects\ConstantObject;
use App\Classes\Modules\Segments\Services\AddItemToConstantValueArray;
use App\Classes\Modules\Segments\Services\RemoveItemFromConstantValueArray;
use App\Classes\Exceptions\ResourceNotFoundException;
use App\Classes\Modules\Segments\Services\CreatesConstant;
class UpdateConstantPostcodeLogic extends AbstractControllerLogic
{
@@ -46,6 +48,8 @@ class UpdateConstantPostcodeLogic extends AbstractControllerLogic
/** @var RemoveItemFromConstantValueArray */
private $removeItemFromConstantValueArray;
/** @var CreatesConstant */
private $createsConstant;
/**
* UpdateConstantLogic constructor.
@@ -54,9 +58,18 @@ class UpdateConstantPostcodeLogic extends AbstractControllerLogic
* @param FetchesSegment $fetchesSegment
* @param FetchesConstant $fetchesConstant
* @param AddItemToConstantValueArray $addItemToConstantValueArray
* @param CreatesConstant $createsConstant
* @param RemoveItemFromConstantValueArray $removeItemFromConstantValueArray
*/
public function __construct(CanUpdateConstant $canUpdateConstant, UpdatesConstant $updatesConstant, FetchesSegment $fetchesSegment, FetchesConstant $fetchesConstant,AddItemToConstantValueArray $addItemToConstantValueArray, RemoveItemFromConstantValueArray $removeItemFromConstantValueArray)
public function __construct(
CanUpdateConstant $canUpdateConstant,
UpdatesConstant $updatesConstant,
FetchesSegment $fetchesSegment,
FetchesConstant $fetchesConstant,
AddItemToConstantValueArray $addItemToConstantValueArray,
RemoveItemFromConstantValueArray $removeItemFromConstantValueArray,
CreatesConstant $createsConstant
)
{
$this->canUpdateConstant = $canUpdateConstant;
$this->updatesConstant = $updatesConstant;
@@ -64,6 +77,7 @@ class UpdateConstantPostcodeLogic extends AbstractControllerLogic
$this->fetchesConstant = $fetchesConstant;
$this->addItemToConstantValueArray = $addItemToConstantValueArray;
$this->removeItemFromConstantValueArray = $removeItemFromConstantValueArray;
$this->createsConstant = $createsConstant;
}
/**
* @param Request $request
@@ -76,24 +90,42 @@ class UpdateConstantPostcodeLogic extends AbstractControllerLogic
{
$segment = $this->fetchesSegment->execute(['id' => $request->route('id')]);
$constant = $this->fetchesConstant->execute(['segment_id' => $segment->id, 'reference' => $request->input('reference')]);
try {
$constant = $this->fetchesConstant->execute(['segment_id' => $segment->id, 'reference' => $request->input('reference')]);
$object = new ConstantObject($constant->reference, $this->addItemToConstantValueArray->execute($constant->value, $request->input('postcode')));
$this->canUpdateConstant->passes($object);
$constantValue = $this->addItemToConstantValueArray->execute($constant->value, $request->input('postcode'));
$object = new ConstantObject($request->input('reference'), $constantValue);
} catch (ResourceNotFoundException $exception){
$constantObject = [$request->input('postcode')];
$object = new ConstantObject(
$request->input('reference'),
$constantObject
);
$constant = $this->createsConstant->execute($segment, $object);
}
try {
// check if postcode exist in the opposite constant, and delete it
$oppositeConstant = $this->fetchesConstant->execute(['segment_id' => $segment->id, 'reference' => $request->input('reference') == SegmentConstants::CENTER_POSTCODE ? SegmentConstants::OUTSTATION_POSTCODE : SegmentConstants::CENTER_POSTCODE]);
$oppositeConstantValue = $this->removeItemFromConstantValueArray->execute($oppositeConstant->value, $request->input('postcode'));
$oppositeObject = new ConstantObject($request->input('reference') == SegmentConstants::CENTER_POSTCODE ? SegmentConstants::OUTSTATION_POSTCODE : SegmentConstants::CENTER_POSTCODE, $oppositeConstantValue);
$this->updatesConstant->execute($oppositeConstant, $oppositeObject);
} catch (ResourceNotFoundException $exception){
// if opposite constant does not exist, do nothing
}
$constant = $this->updatesConstant->execute($constant, $object);
$oppositeConstant = $this->fetchesConstant->execute(['segment_id' => $segment->id, 'reference' => $request->input('reference') == SegmentConstants::CENTER_POSTCODE ? SegmentConstants::OUTSTATION_POSTCODE : SegmentConstants::CENTER_POSTCODE]);
$oppositeObject = new ConstantObject($request->input('reference') == SegmentConstants::CENTER_POSTCODE ? SegmentConstants::OUTSTATION_POSTCODE : SegmentConstants::CENTER_POSTCODE, $this->removeItemFromConstantValueArray->execute($oppositeConstant->value, $request->input('postcode')));
$oppositeConstant = $this->updatesConstant->execute($oppositeConstant, $oppositeObject);
return $this->response([
'CENTER_POSTCODE' => $constant->reference == SegmentConstants::CENTER_POSTCODE ? new ConstantResource($constant) : New ConstantResource($oppositeConstant),
'OUTSTATION_POSTCODE' => $constant->reference == SegmentConstants::OUTSTATION_POSTCODE ? new ConstantResource($constant) : New ConstantResource($oppositeConstant),
]);
return $this->resourceResponse(new ConstantResource($constant));
}
}
@@ -1,87 +0,0 @@
<?php
namespace App\Classes\Modules\Segments\ControllersLogic;
use Illuminate\Http\Request;
use App\Models\SegmentConstant;
use Illuminate\Http\JsonResponse;
use App\Http\Resources\ConstantResource;
use App\Classes\ValueObjects\Constants\SegmentConstants;
use App\Classes\Modules\Segments\Services\FetchesSegment;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Segments\Services\FetchesConstant;
use App\Classes\Modules\Segments\Services\UpdatesConstant;
use App\Classes\Modules\Segments\Standards\Rules\CanUpdateConstant;
use App\Classes\Modules\Segments\DataTransferObjects\ConstantObject;
use App\Classes\Modules\Segments\Services\UpdatesConstantValueByState;
class UpdateConstantStateLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Updated Segment Constant',
'message' => 'You have successfully updated the Segment Constant'
];
}
/** @var CanUpdateConstant */
private $canUpdateConstant;
/** @var UpdatesConstant */
private $updatesConstant;
/** @var FetchesSegment */
private $fetchesSegment;
/** @var FetchesConstant */
private $fetchesConstant;
/** @var UpdatesConstantValueByState */
private $updatesConstantValueByState;
/**
* UpdateConstantLogic constructor.
* @param CanUpdateConstant $canUpdateConstant
* @param UpdatesConstant $updatesConstant
* @param FetchesSegment $fetchesSegment
* @param FetchesConstant $fetchesConstant
* @param UpdatesConstantValueByState $updatesConstantValueByState
*/
public function __construct(CanUpdateConstant $canUpdateConstant, UpdatesConstant $updatesConstant, FetchesSegment $fetchesSegment, FetchesConstant $fetchesConstant,UpdatesConstantValueByState $updatesConstantValueByState)
{
$this->canUpdateConstant = $canUpdateConstant;
$this->updatesConstant = $updatesConstant;
$this->fetchesSegment = $fetchesSegment;
$this->fetchesConstant = $fetchesConstant;
$this->updatesConstantValueByState = $updatesConstantValueByState;
}
/**
* @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
{
$segment = $this->fetchesSegment->execute(['id' => $request->route('id')]);
$constant = $this->fetchesConstant->execute(['segment_id' => $segment->id, 'reference' => SegmentConstants::STATE_RATE]);
$constantValue = $this->updatesConstantValueByState->execute($constant->value, $request->input('status_id'), $request->input('rate'));
$object = new ConstantObject(SegmentConstants::STATE_RATE, (array) $constantValue);
$this->canUpdateConstant->passes($object);
$constant = $this->updatesConstant->execute($constant, $object);
return $this->resourceResponse(new ConstantResource($constant));
}
}
@@ -0,0 +1,29 @@
<?php
namespace App\Classes\Modules\Segments\Services;
use Carbon\CarbonPeriod;
class UpdatesBasePriceConstantByDates
{
/**
* @param $json
* @param int $status_id
* @param Array $rate
* @return Array
*/
public function execute($json, String $date_from, String $date_to, String $rate) {
$objectArray = (array) $json;
$period = CarbonPeriod::create($date_from, $date_to);
foreach ($period as $date) {
$objectArray[$date->format('Y-m-d')] = $rate;
}
return $objectArray;
}
}
@@ -0,0 +1,23 @@
<?php
namespace App\Classes\Modules\Segments\Services;
class UpdatesConstantValue
{
/**
* @param $json
* @param int $status_id
* @param Array $rate
* @return Array
*/
public function execute($json, int $state_id, Array $rate) {
$objectArray = (array) $json;
$objectArray[$state_id] = $rate;
return $objectArray;
}
}
@@ -1,32 +0,0 @@
<?php
namespace App\Classes\Modules\Segments\Services;
class UpdatesConstantValueByState
{
/**
* @param $json
* @param int $status_id
* @param int $rate
* @return string
*/
public function execute($json, int $status_id, int $rate) {
$newArray = $json;
foreach($json->config as $key => $object){
if($object->status_id == $status_id){
$newArray->config[$key] = (object) [
'rate' => $rate,
'status_id' => $object->status_id,
'outstation_rate' => $object->outstation_rate,
];
}else{
$newArray->config[$key] = $object;
}
}
return $newArray;
}
}
@@ -21,10 +21,12 @@ use App\Classes\ValueObjects\Constants\PaymentMethodType;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\DocumentType;
use App\Classes\ValueObjects\Constants\PackageType;
use App\Classes\ValueObjects\Constants\SegmentConstants;
use App\Classes\ValueObjects\Constants\TransactionDetailType;
use App\Models\Document;
use App\Models\Transaction;
use Carbon\Carbon;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
@@ -98,57 +100,35 @@ class CreateShippingInvoiceTransactionLogic extends AbstractControllerLogic
return ($package->width / 100) * ($package->height / 100) *($package->length / 100) * ($package->quantity);
});
$order = $packing_list->owner()->first();
$order = $packing_list->owner;
$address = $order->addresses()->first();
$base_price_constant = $this->fetchesSegmentConstant->execute(['id' => 1]);
$warehouse_rate_constant = $this->fetchesSegmentConstant->execute(['id' => 2]);
$state_rate_constant = $this->fetchesSegmentConstant->execute(['id' => 3]);
$center_postcode_constant = $this->fetchesSegmentConstant->execute(['id' => 4]);
$outstation_postcode_constant = $this->fetchesSegmentConstant->execute(['id' => 5]);
$base_price_constant = $this->fetchesSegmentConstant->execute(['segment_id' => 1, 'reference' => SegmentConstants::BASE_PRICE]);
$warehouse_rate_constant = $this->fetchesSegmentConstant->execute(['segment_id' => 1, 'reference' => SegmentConstants::WAREHOUSE_RATE]);
$state_rate_constant = $this->fetchesSegmentConstant->execute(['segment_id' => 1, 'reference' => SegmentConstants::STATE_RATE]);
$center_postcode_constant = $this->fetchesSegmentConstant->execute(['segment_id' => 1, 'reference' => SegmentConstants::CENTER_POSTCODE]);
$outstation_postcode_constant = $this->fetchesSegmentConstant->execute(['segment_id' => 1, 'reference' => SegmentConstants::OUTSTATION_POSTCODE]);
$base_price = 0;
$warehouse_rate = 0;
$state_rate = 0;
$state_select = [];
$with_out = false;
$state_select = '';
if ($base_price_constant) {
$base_price = $base_price_constant->value->price;
}
$base_price = $this->getConstantByKey($base_price_constant, date('Y-m-d'));
if ($warehouse_rate_constant) {
$package_warehouse = $order->OrderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->reference;
foreach ($warehouse_rate_constant->value->config as $key_warehouse => $row_warehouse) {
if ($row_warehouse->warehouse_name == $package_warehouse) {
$warehouse_rate = $row_warehouse->rate;
}
}
}
$warehouseId = $order->orderRoles()->where('role_id', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->company_module_id;
$selected_warehouse_rate = $this->getConstantByKey($warehouse_rate_constant, $warehouseId);
$warehouse_rate = is_object($selected_warehouse_rate) ? $selected_warehouse_rate->amount : 0;
if ($state_rate_constant) {
foreach ($state_rate_constant->value->config as $key_state => $row_state) {
if ($row_state->status_id == $address->state_id) {
$state_select = $row_state;
}
}
}
$stateId = $address->state_id;
$state_rate_constant = $this->getConstantByKey($state_rate_constant, $stateId);
if ($outstation_postcode_constant) {
foreach ($outstation_postcode_constant->value as $key_out => $row_out) {
if($row_out == $address->postcode) {
$with_out = true;
}
}
}
if (!empty($state_select)) {
$state_rate = $state_select->rate;
if ($with_out) {
$state_rate = $state_select->rate + $state_select->outstation_rate;
}
}
// get $state_rate
$postcode = $address->postcode;
$this->checkPostcodeExistInConstant($center_postcode_constant, $postcode) === true ? $state_select = 'center' : '' ;
$this->checkPostcodeExistInConstant($outstation_postcode_constant, $postcode) === true ? $state_select = 'outstation' : '' ;
$state_rate_constant = (array)$state_rate_constant;
$state_rate = $state_select == '' ? 0 : $state_rate_constant[$state_select];
$price_cbm = $base_price + $warehouse_rate + $state_rate;
$total_cbm = $price_cbm * ($cbm + $over_weight_cbm);
@@ -170,7 +150,7 @@ class CreateShippingInvoiceTransactionLogic extends AbstractControllerLogic
0,
0,
null,
ApprovalStatus::PENDING_SUBMISSION
ApprovalStatus::PENDING_VERIFICATION
);
/** @var Transaction $invoice_transaction */
@@ -213,4 +193,22 @@ class CreateShippingInvoiceTransactionLogic extends AbstractControllerLogic
return $this->response([]);
}
function getConstantByKey($segmentConstantObject, $key) {
if ($segmentConstantObject) {
$base_rate = (array) $segmentConstantObject->value;
$base_rate = array_key_exists($key, $base_rate) === true ? $base_rate[$key] : 0;
return $base_rate;
}
}
function checkPostcodeExistInConstant($segmentConstantObject, $postcode) {
$segmentConstantObject = $segmentConstantObject->value;
if (!empty($segmentConstantObject)) {
return in_array($postcode, $segmentConstantObject);
} else {
return false;
}
}
}
@@ -8,6 +8,8 @@ final class WarehouseReferences {
public const YD_GUANG_ZHOU = 'GZ-V02';
public const YD_GUANG_ZHOU_2 = 'GZ-V03';
public const VT_YIWU = 'YW-V01';
public const YD_YIWU = 'YW-V02';
@@ -43,6 +45,8 @@ final class WarehouseReferences {
public const YD_EXEMPT_LIST = [230, 294, 320, 652, 1248, 1726];
public const REPLICA_WHITE_LIST = [502];
//2376 qce
}
@@ -25,7 +25,7 @@ class ExportDeliveryOrdersToExcelController
public function lineClear(Request $request){
$exportsTransactions = new ExportsMultipleDeliveryOrders($request);
$response = $exportsTransactions->download('line-clear-export.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']);
$response = $exportsTransactions->download('line-clear-export.xlsx', Excel::XLSX, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']);
ob_end_clean();
return $response;
}
@@ -0,0 +1,29 @@
<?php
namespace App\Http\Controllers\Exports;
use App\Classes\Modules\Exports\Services\ExportsArrivedParcel;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Maatwebsite\Excel\Excel;
class ExportArrivedParcelController
{
/**
* ExportArrivedParcelController constructor.
* @param Request $request
*/
public function __construct(Request $request)
{
$token = Auth::fromUser(User::find(1));
$request->headers->set('Authorization', 'Bearer '.$token);
}
public function export(Request $request) {
$exportsPendingArrangementDeliveryList = new ExportsArrivedParcel($request);
$response = $exportsPendingArrangementDeliveryList->download('arrived-parcel.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']);
ob_end_clean();
return $response;
}
}
@@ -0,0 +1,30 @@
<?php
namespace App\Http\Controllers\Exports;
use App\Classes\Modules\Exports\Services\ExportsCompanyModuleSummary;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Maatwebsite\Excel\Excel;
class ExportCompanyModuleSummaryController
{
/**
* ExportCompanyModuleSummaryController constructor.
* @param Request $request
*/
public function __construct(Request $request)
{
$token = Auth::fromUser(User::find(1));
$request->headers->set('Authorization', 'Bearer '.$token);
}
public function export(Request $request) {
$exportsCompanyModuleSummary = new ExportsCompanyModuleSummary($request);
$exportsCompanyModuleSummary->setParameters($request->route('company_module_id'), $request->input('containerNumber'));
$response = $exportsCompanyModuleSummary->download('customerid-markingno.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']);
ob_end_clean();
return $response;
}
}
@@ -2,6 +2,7 @@
namespace App\Http\Controllers\Exports;
use App\Classes\Modules\Exports\Services\ExportsOnHoldPackingList;
use App\Classes\Modules\Exports\Services\ExportsPendingArrangementDeliveryList;
use App\Models\User;
use Illuminate\Http\Request;
@@ -22,7 +23,14 @@ class ExportPendingArrangementPackingListController
public function export(Request $request) {
$exportsPendingArrangementDeliveryList = new ExportsPendingArrangementDeliveryList($request);
$response = $exportsPendingArrangementDeliveryList->download('pending-arrangement-packing-list.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']);
$response = $exportsPendingArrangementDeliveryList->download('packing-list-delivery.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']);
ob_end_clean();
return $response;
}
public function onHold(Request $request) {
$exportsPendingArrangementDeliveryList = new ExportsOnHoldPackingList($request);
$response = $exportsPendingArrangementDeliveryList->download('packing-list-on-hold.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']);
ob_end_clean();
return $response;
}
@@ -0,0 +1,19 @@
<?php
namespace App\Http\Controllers\Notifications;
use App\Classes\Modules\Notifications\ControllersLogic\ListNotificationsLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListNotificationsController
{
/**
* @param Request $request
* @param ListNotificationsLogic $logic
* @return JsonResponse
*/
public function list(Request $request, ListNotificationsLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -41,7 +41,7 @@ class DownloadOrderQrPdfController
$warehousePrefix = 'YW/';
}
if($warehouse->reference === WarehouseReferences::YD_GUANG_ZHOU){
if(in_array($warehouse->reference,[WarehouseReferences::YD_GUANG_ZHOU, WarehouseReferences::YD_GUANG_ZHOU_2])){
$warehousePrefix = 'YD/';
if(strtolower($deliveryAddress->state->name) === 'sabah' || strtolower($deliveryAddress->state->name) === 'labuan' || in_array(strtolower($deliveryAddress->district->name), ['limbang', 'lawas'])) {
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Segments;
use App\Classes\Modules\Segments\ControllersLogic\CreateBasePriceLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateBasePriceController
{
/**
* @param Request $request
* @param CreateBasePriceLogic $logic
* @return JsonResponse
*/
public function create(Request $request, CreateBasePriceLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Segments;
use App\Classes\Modules\Segments\ControllersLogic\FetchBasePriceLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class FetchBasePriceController
{
/**
* @param Request $request
* @param FetchSegmentLogic $logic
* @return JsonResponse
*/
public function fetch(Request $request, FetchBasePriceLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -1,20 +0,0 @@
<?php
namespace App\Http\Controllers\Segments;
use App\Classes\Modules\Segments\ControllersLogic\UpdateConstantStateLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdateConstantStateController
{
/**
* @param Request $request
* @param UpdateConstantStateLogic $logic
* @return JsonResponse
*/
public function update(Request $request, UpdateConstantStateLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
+11
View File
@@ -5,6 +5,8 @@ namespace App\Http\Resources;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Models\Order;
use Illuminate\Http\Resources\Json\JsonResource;
use App\Models\SegmentConstant;
use App\Classes\ValueObjects\Constants\SegmentConstants;
class AddressResource extends JsonResource
{
@@ -17,6 +19,14 @@ class AddressResource extends JsonResource
public function toArray($request)
{
$centerPostcodeConstantObject = SegmentConstant::where('reference', SegmentConstants::CENTER_POSTCODE)->get();
$centerPostcodeConstant = $centerPostcodeConstantObject->isEmpty() ? [] : (array)$centerPostcodeConstantObject->first()->value;
$postcodeArea = in_array($this->postcode, $centerPostcodeConstant) ? 'CENTER_POSTCODE' : '';
$outstationPostcodeConstantObject = SegmentConstant::where('reference', SegmentConstants::OUTSTATION_POSTCODE)->get();
$outstationPostcodeConstant = $outstationPostcodeConstantObject->isEmpty() ? [] : (array)$outstationPostcodeConstantObject->first()->value;
in_array($this->postcode, $outstationPostcodeConstant) ? $postcodeArea = 'OUTSTATION_POSTCODE' : '';
return [
'id' => $this->id,
'reference' => $this->reference,
@@ -25,6 +35,7 @@ class AddressResource extends JsonResource
'district' => $this->district,
'state' => $this->state,
'post_code' => $this->postcode,
'post_code_area' => $postcodeArea,
'country' => $this->country,
'default' => (int) $this->default,
'status' => (int) $this->status,
+5 -1
View File
@@ -32,6 +32,9 @@ class CompanyModuleResource extends JsonResource
$connection = $this->inviters()->withPivot('invitee_reference')->first();
$marking = $connection ? $connection->pivot->invitee_reference:'';
$segmentConstantObject = SegmentConstant::where('reference', SegmentConstants::WAREHOUSE_RATE)->get();
$segmentConstant = $segmentConstantObject->isEmpty() ? [] : (array)$segmentConstantObject->first()->value;
return [
'id' => $this->id,
'type' => $this->type,
@@ -40,7 +43,8 @@ class CompanyModuleResource extends JsonResource
'address' => new AddressResource($defaultAddress),
'company' => new CompanyResource($this->whenLoaded('company')),
'remarks' => RemarkResource::collection($this->remarks),
'marking' => $marking
'marking' => $marking,
'warehouseCharges' => array_key_exists($this->id, $segmentConstant) ? $segmentConstant[$this->id] : null,
];
}
+1
View File
@@ -20,6 +20,7 @@ class DistrictResource extends JsonResource
'state' => $this->state,
'country' => $this->country,
'postcode' => $this->postcode,
'postcodeArray' => PostcodeResource::collection(json_decode($this->postcode)),
];
}
}
@@ -0,0 +1,30 @@
<?php
namespace App\Http\Resources;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Classes\ValueObjects\Constants\DocumentType;
use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Support\Facades\Crypt;
class NotificationResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'title' => $this->title,
'description' => $this->description,
'long_ago' => $this->created_at->diffForHumans(),
'created_at' => $this->created_at->format('d-m-Y')
];
}
}
+33
View File
@@ -0,0 +1,33 @@
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
use App\Models\SegmentConstant;
use App\Classes\ValueObjects\Constants\SegmentConstants;
class PostcodeResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
$centerPostcodeConstantObject = SegmentConstant::where('reference', SegmentConstants::CENTER_POSTCODE)->get();
$centerPostcodeConstant = $centerPostcodeConstantObject->isEmpty() ? [] : (array)$centerPostcodeConstantObject->first()->value;
$postcodeArea = in_array($this->resource, $centerPostcodeConstant) ? 'CENTER_POSTCODE' : '';
$outstationPostcodeConstantObject = SegmentConstant::where('reference', SegmentConstants::OUTSTATION_POSTCODE)->get();
$outstationPostcodeConstant = $outstationPostcodeConstantObject->isEmpty() ? [] : (array)$outstationPostcodeConstantObject->first()->value;
in_array($this->resource, $outstationPostcodeConstant) ? $postcodeArea = 'OUTSTATION_POSTCODE' : '';
return [
'postcode' => $this->resource,
'postcodeArea' => $postcodeArea,
];
}
}
+7 -1
View File
@@ -1,8 +1,9 @@
<?php
namespace App\Http\Resources;
use App\Models\SegmentConstant;
use Illuminate\Http\Resources\Json\JsonResource;
use App\Classes\ValueObjects\Constants\SegmentConstants;
class StateResource extends JsonResource
{
@@ -14,10 +15,15 @@ class StateResource extends JsonResource
*/
public function toArray($request)
{
$segmentConstantObject = SegmentConstant::where('reference', SegmentConstants::STATE_RATE)->get();
$segmentConstant = $segmentConstantObject->isEmpty() ? [] : (array)$segmentConstantObject->first()->value;
return [
'id' => $this->id,
'name' => $this->name,
'country' => $this->country,
'stateCharges' => array_key_exists($this->id, $segmentConstant) ? $segmentConstant[$this->id] : null,
];
}
}
+3
View File
@@ -1,8 +1,11 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\SoftDeletes;
class SegmentCompany extends AbstractModel
{
use SoftDeletes;
protected $table = 'segment_companies';
}
+2
View File
@@ -15,6 +15,8 @@ use Illuminate\Database\Eloquent\SoftDeletes;
*/
class SegmentConstant extends AbstractModel
{
use SoftDeletes;
protected $table = 'segment_constants';
public function getDetailAttribute($value)
@@ -16,6 +16,7 @@ class CreateSegmentCompaniesTable extends Migration
Schema::create('segment_companies', function (Blueprint $table) {
$table->foreignId('segment_id');
$table->foreignId('company_id');
$table->softDeletes();
$table->timestamps();
$table->primary(['segment_id', 'company_id']);
});
@@ -32,6 +32,6 @@ class CreateAddonsTables extends Migration
*/
public function down()
{
Schema::dropIfExists('order_addons');
Schema::dropIfExists('addons');
}
}
@@ -114,7 +114,7 @@ class LastMileDeliveryTableSeeder extends Seeder
{
$companies = [
new CompanyObject('Last Mile Delivery', 'LMD', CompanyType::COMPANY_BUSINESS, ApprovalStatus::APPROVED),
new CompanyObject('Last Mile Delivery', 'HWT', CompanyType::COMPANY_BUSINESS, ApprovalStatus::APPROVED),
];
@@ -105,10 +105,10 @@ class ModernWarehouseTableSeeder extends Seeder
/** @var CompanyModule $companyModule */
$companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::WAREHOUSE);
$companyModule->update(['name' => 'Yiwu', 'reference' => 'YW-V02']);
$companyModule->update(['name' => 'Guangzhou', 'reference' => 'GZ-V02']);
$address = new AddressObject('义乌市 后宅街道 起航路233号百汇科创园园区里面', '(进口处进来第一个路口左转至出口处右手边国际物流仓库)', 2, 27, 532, 322000, AddressType::BILLING, ApprovalStatus::APPROVED);
$contact = new ContactObject('韩成名', '18058489899 / 18058929899', '', '');
$address = new AddressObject('广东省 广州市 白云区 江高镇松岗街七横63号', '', 2, 35, 633, 510450, AddressType::BILLING, ApprovalStatus::APPROVED);
$contact = new ContactObject('郑先生', '13719211997', '', '');
$this->createsAddress->execute($companyModule, $address);
$this->createsContact->execute($companyModule, $contact);
@@ -19,8 +19,8 @@ class SegmentConstantsTableSeeder extends Seeder
'segment_id' => 1,
'reference' => SegmentConstants::BASE_PRICE,
'value' => json_encode([
'id'=> 1,
'price' => 500,
'2022-05-01'=> '0.00',
'2022-05-02'=> '0.00',
]),
],
[
@@ -28,21 +28,12 @@ class SegmentConstantsTableSeeder extends Seeder
'segment_id' => 1,
'reference' => SegmentConstants::WAREHOUSE_RATE,
'value' => json_encode([
'id'=> 1,
'config' => [
[
'warehouse_name' => WarehouseReferences::VT_GUANG_ZHOU,
'rate' => 10
],
[
'warehouse_name' => WarehouseReferences::YD_GUANG_ZHOU,
'rate' => 10
],
[
'warehouse_name' => WarehouseReferences::VT_YIWU,
'rate' => 10
],
]
'7' =>[
'amount' => '0.00',
],
'6' =>[
'amount' => '0.00',
],
]),
],
[
@@ -50,88 +41,69 @@ class SegmentConstantsTableSeeder extends Seeder
'segment_id' => 1,
'reference' => SegmentConstants::STATE_RATE,
'value' => json_encode([
'id'=> 1,
'config' => [
[
'status_id' => 1,
'rate' => 10,
'outstation_rate' => 2
],
[
'status_id' => 2,
'rate' => 10,
'outstation_rate' => 2
],
[
'status_id' => 3,
'rate' => 10,
'outstation_rate' => 2
],
[
'status_id' => 4,
'rate' => 10,
'outstation_rate' => 2
],
[
'status_id' => 5,
'rate' => 10,
'outstation_rate' => 2
],
[
'status_id' => 6,
'rate' => 10,
'outstation_rate' => 2
],
[
'status_id' => 7,
'rate' => 10,
'outstation_rate' => 2
],
[
'status_id' => 8,
'rate' => 10,
'outstation_rate' => 2
],
[
'status_id' => 9,
'rate' => 10,
'outstation_rate' => 2
],
[
'status_id' => 10,
'rate' => 10,
'outstation_rate' => 2
],
[
'status_id' => 11,
'rate' => 10,
'outstation_rate' => 2
],
[
'status_id' => 12,
'rate' => 10,
'outstation_rate' => 2
],
[
'status_id' => 13,
'rate' => 20,
'outstation_rate' => 2
],
[
'status_id' => 14,
'rate' => 20,
'outstation_rate' => 2
],
[
'status_id' => 15,
'rate' => 10,
'outstation_rate' => 2
],
[
'status_id' => 16,
'rate' => 10,
'outstation_rate' => 2
]
'1' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'2' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'3' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'4' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'5' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'6' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'7' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'8' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'9' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'10' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'11' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'12' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'13' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'14' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'15' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'16' =>[
'center' => '10.00',
'outstation' => '2.00'
]
]),
],
+202
View File
@@ -0,0 +1,202 @@
<?php
// 1. [Required] Point to the composer or dompdf autoloader
require_once "vendor/autoload.php";
// 2. [Optional] Set the path to your font directory
// By default dompdf loads fonts to dompdf/lib/fonts
// If you have modified your font directory set this
// variable appropriately.
//$fontDir = "lib/fonts";
$fontDir = 'storage/fonts';
// *** DO NOT MODIFY BELOW THIS POINT ***
use Dompdf\Dompdf;
use Dompdf\CanvasFactory;
use Dompdf\Exception;
use Dompdf\FontMetrics;
use Dompdf\Options;
use FontLib\Font;
/**
* Display command line usage
*/
function usage() {
echo <<<EOD
Usage: {$_SERVER["argv"][0]} font_family [n_file [b_file] [i_file] [bi_file]]
font_family: the name of the font, e.g. Verdana, 'Times New Roman',
monospace, sans-serif. If it equals to "system_fonts",
all the system fonts will be installed.
n_file: the .ttf or .otf file for the normal, non-bold, non-italic
face of the font.
{b|i|bi}_file: the files for each of the respective (bold, italic,
bold-italic) faces.
If the optional b|i|bi files are not specified, load_font.php will search
the directory containing normal font file (n_file) for additional files that
it thinks might be the correct ones (e.g. that end in _Bold or b or B). If
it finds the files they will also be processed. All files will be
automatically copied to the DOMPDF font directory, and afm files will be
generated using php-font-lib (https://github.com/PhenX/php-font-lib).
Examples:
./load_font.php silkscreen /usr/share/fonts/truetype/slkscr.ttf
./load_font.php 'Times New Roman' /mnt/c_drive/WINDOWS/Fonts/times.ttf
EOD;
exit;
}
if ( $_SERVER["argc"] < 3 && @$_SERVER["argv"][1] != "system_fonts" ) {
usage();
}
$dompdf = new Dompdf();
if (isset($fontDir) && realpath($fontDir) !== false) {
$dompdf->getOptions()->set('fontDir', $fontDir);
}
/**
* Installs a new font family
* This function maps a font-family name to a font. It tries to locate the
* bold, italic, and bold italic versions of the font as well. Once the
* files are located, ttf versions of the font are copied to the fonts
* directory. Changes to the font lookup table are saved to the cache.
*
* @param Dompdf $dompdf dompdf main object
* @param string $fontname the font-family name
* @param string $normal the filename of the normal face font subtype
* @param string $bold the filename of the bold face font subtype
* @param string $italic the filename of the italic face font subtype
* @param string $bold_italic the filename of the bold italic face font subtype
*
* @throws Exception
*/
function install_font_family($dompdf, $fontname, $normal, $bold = null, $italic = null, $bold_italic = null) {
$fontMetrics = $dompdf->getFontMetrics();
// Check if the base filename is readable
if ( !is_readable($normal) )
throw new Exception("Unable to read '$normal'.");
$dir = dirname($normal);
$basename = basename($normal);
$last_dot = strrpos($basename, '.');
if ($last_dot !== false) {
$file = substr($basename, 0, $last_dot);
$ext = strtolower(substr($basename, $last_dot));
} else {
$file = $basename;
$ext = '';
}
if ( !in_array($ext, array(".ttf", ".otf")) ) {
throw new Exception("Unable to process fonts of type '$ext'.");
}
// Try $file_Bold.$ext etc.
$path = "$dir/$file";
$patterns = array(
"bold" => array("_Bold", "b", "B", "bd", "BD"),
"italic" => array("_Italic", "i", "I"),
"bold_italic" => array("_Bold_Italic", "bi", "BI", "ib", "IB"),
);
foreach ($patterns as $type => $_patterns) {
if ( !isset($$type) || !is_readable($$type) ) {
foreach($_patterns as $_pattern) {
if ( is_readable("$path$_pattern$ext") ) {
$$type = "$path$_pattern$ext";
break;
}
}
if ( is_null($$type) )
echo ("Unable to find $type face file.\n");
}
}
$fonts = compact("normal", "bold", "italic", "bold_italic");
$entry = array();
// Copy the files to the font directory.
foreach ($fonts as $var => $src) {
if ( is_null($src) ) {
$entry[$var] = $dompdf->getOptions()->get('fontDir') . '/' . mb_substr(basename($normal), 0, -4);
continue;
}
// Verify that the fonts exist and are readable
if ( !is_readable($src) )
throw new Exception("Requested font '$src' is not readable");
$dest = $dompdf->getOptions()->get('fontDir') . '/' . basename($src);
if ( !is_writeable(dirname($dest)) )
throw new Exception("Unable to write to destination '$dest'.");
echo "Copying $src to $dest...\n";
if ( !copy($src, $dest) )
throw new Exception("Unable to copy '$src' to '$dest'");
$entry_name = mb_substr($dest, 0, -4);
echo "Generating Adobe Font Metrics for $entry_name...\n";
$font_obj = Font::load($dest);
$font_obj->saveAdobeFontMetrics("$entry_name.ufm");
$font_obj->close();
$entry[$var] = $entry_name;
}
// Store the fonts in the lookup table
$fontMetrics->setFontFamily($fontname, $entry);
// Save the changes
$fontMetrics->saveFontFamilies();
}
// If installing system fonts (may take a long time)
if ( $_SERVER["argv"][1] === "system_fonts" ) {
$fontMetrics = $dompdf->getFontMetrics();
$files = glob("/usr/share/fonts/truetype/*.ttf") +
glob("/usr/share/fonts/truetype/*/*.ttf") +
glob("/usr/share/fonts/truetype/*/*/*.ttf") +
glob("C:\\Windows\\fonts\\*.ttf") +
glob("C:\\WinNT\\fonts\\*.ttf") +
glob("/mnt/c_drive/WINDOWS/Fonts/");
$fonts = array();
foreach ($files as $file) {
$font = Font::load($file);
$records = $font->getData("name", "records");
$type = $fontMetrics->getType($records[2]);
$fonts[mb_strtolower($records[1])][$type] = $file;
$font->close();
}
foreach ( $fonts as $family => $files ) {
echo " >> Installing '$family'... \n";
if ( !isset($files["normal"]) ) {
echo "No 'normal' style font file\n";
}
else {
install_font_family($dompdf, $family, @$files["normal"], @$files["bold"], @$files["italic"], @$files["bold_italic"]);
echo "Done !\n";
}
echo "\n";
}
}
else {
call_user_func_array("install_font_family", array_merge( array($dompdf), array_slice($_SERVER["argv"], 1) ));
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 959 KiB

+6
View File
@@ -317,6 +317,12 @@ hr{
background-color: $color-primary-lighter !important;
}
.bg-primary-lighter-hover {
&:hover {
background-color: $color-primary-lighter !important;
}
}
/* Complete
------------------------------------
*/
@@ -0,0 +1,70 @@
<template>
<div class="row" @keyup.enter="submitForm">
<div class="col">
<error-message-component class="m-b-20" :error="error"></error-message-component>
<div class="row">
<div class="col">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.email">
<label class="text-primary">Email Address</label>
<input type="text" class="form-control fs-12" v-model.trim="parameters.email">
</validation-wrapper-component>
<validation-wrapper-component :validator="$v.parameters.password">
<label class="text-primary">Password</label>
<input type="password" class="form-control fs-12" v-model="parameters.password">
</validation-wrapper-component>
<div class="row m-t-15 align-items-center justify-content-center">
<div class="col-auto">
<div class="checkbox check-complete no-margin">
<input type="checkbox" checked="checked" value="1" id="checkbox2">
<label for="checkbox2 bold no-margin">Remember Me</label>
</div>
</div>
<div class="col text-right">
<p class="muted fs-11 font-arial m-b-0 pointer bold" @click="$store.dispatch('toggleSection', {name: 'forgetPassword', status: true})">Forgot password?</p>
</div>
</div>
<div class="row m-t-15 align-items-center justify-content-center">
<div class="col">
<div class="btn btn-block btn-lg b-rad-none no-border" :class="[{'btn-primary': currentUrl.indexOf('last_mile_delivery') === -1 }, {'btn-info': currentUrl.indexOf('last_mile_delivery') > -1 }]" @click="submitForm">Sign In</div>
</div>
</div>
<div class="row m-t-15">
<div class="col text-center">
<div class="col">
<p>New Customer? <strong class=" m-b-0 pointer" @click="$store.dispatch('toggleSection', {name: 'registrationForm', status: true})">Create Account</strong></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import loginFormValidation from '../../../general/mixins/accounts/validation/loginFormValidation'
export default {
props: {
section:{
type: String,
required: true
}
},
data() {
return {
error: '',
parameters: {
email: this.email,
password: ''
},
currentUrl: window.location.href,
};
},
methods: {
submitForm(){
this.submit(this.route('api.account.authentication.authenticate.attempt'), 'post', this.section, false, false)
}
},
mixins: [loginFormValidation]
}
</script>
@@ -31,7 +31,7 @@
<div class="row m-t-15">
<div class="col text-center">
<div class="col">
<p>New Customer? <strong class=" m-b-0 pointer" @click="$store.dispatch('toggleSection', {name: 'registrationForm', status: true})">Create Account</strong></p>
<p>New Customer? <strong class=" m-b-0 pointer"><a class="text-master" :href="route('signup')">Create Account</a></strong></p>
</div>
</div>
</div>
@@ -156,14 +156,14 @@
</div>
<div class="row">
<div class="col-auto">
<button type="button" class="btn btn-sm p-t-10 p-b-10 btn-default bg-master-lighter b-rad-none" @click="$store.dispatch('toggleSection', {name: 'registrationForm', status: false})">
<a :href="route('login')" class="btn btn-sm p-t-10 p-b-10 btn-default bg-master-lighter b-rad-none">
<div class="row align-items-center">
<div class="col-auto p-r-10">
<i class="fa fa-angle-left fs-16" style="margin-top: 1px;"></i>
</div>
<div class="col p-l-5">I already have an account</div>
</div>
</button>
</a>
</div>
<div class="col text-right">
<button type="button" class="btn btn-sm btn-block p-t-10 p-b-10 p-r-35 p-l-35 btn-primary b-rad-none p-r-30" @click="changeStep('next')">
@@ -1,7 +1,7 @@
<template>
<div class="row p-t-25 text-left">
<div class="col">
<div class="row">
<div class="row" v-if="![7,8].includes($store.getters.getCompanyModuleType)">
<div class="col">
<div class="row m-b-15">
<div class="col">
@@ -73,6 +73,68 @@
</div>
</div>
</div>
<div class="row" v-if="[7,8].includes($store.getters.getCompanyModuleType)">
<div class="col">
<div class="row m-b-15">
<div class="col">
<validation-wrapper-component :validator="$v.parameters.reference">
<label>Company Name</label>
<input class="form-control" name="reference" v-model="parameters.reference">
</validation-wrapper-component>
</div>
</div>
<div class="row m-b-15">
<div class="col-12 col-md pr-md-1 pb-3 pb-md-0">
<validation-wrapper-component :validator="$v.parameters.person_in_charge">
<label>Name</label>
<input class="form-control" name="person_in_charge" v-model="parameters.person_in_charge">
</validation-wrapper-component>
</div>
<div class="col-12 col-md pl-md-1">
<validation-wrapper-component :validator="$v.parameters.phone">
<label>Phone</label>
<input class="form-control" name="phone" v-model="parameters.phone">
</validation-wrapper-component>
</div>
</div>
<div class="row m-b-15">
<div class="col-12 col-md-3 pr-md-1 pb-3 pb-md-0">
<validation-wrapper-component :validator="$v.parameters.street_one">
<label>Unit No.</label>
<input class="form-control" name="street_one" v-model="parameters.street_one">
</validation-wrapper-component>
</div>
<div class="col-12 col-md pl-md-1">
<validation-wrapper-component :validator="$v.parameters.street_two">
<label>Street Address</label>
<input class="form-control" name="street_two" v-model="parameters.street_two">
</validation-wrapper-component>
</div>
</div>
<div class="row m-b-15">
<div class="col-12 col-md pr-md-1 pb-3 pb-md-0">
<validation-wrapper-component selectable :validator="$v.parameters.district_id">
<label>City/Town</label>
<selectable-component :endpoint="route('api.address.district.list')" section="districtListSection" valueColumn="id" :labelColumn="['city']" v-model="parameters.district_id"></selectable-component>
</validation-wrapper-component>
</div>
<div class="col-12 col-md pl-md-1">
<validation-wrapper-component :validator="$v.parameters.post_code">
<label>Post Code</label>
<input class="form-control" name="post_code" v-model="parameters.post_code">
</validation-wrapper-component>
</div>
</div>
<div class="row m-b-15">
<div class="col">
<validation-wrapper-component :validator="$v.parameters.remark">
<label>Remark</label>
<input class="form-control" name="remark" v-model="parameters.remark">
</validation-wrapper-component>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col">
<div class="row">
@@ -82,16 +82,35 @@
</div>
</div>
</div>
<div class="row parentContainer" v-if="!item.identification">
<div class="row">
<div class="col">
<div class="row">
<div class="col no-padding">
<button class="btn btn-sm btn-success btn-block b-rad-none requestModal" data-type="identificationVerificationModal">Upload Identification</button>
<div class="row parentContainer" v-if="!item.identification">
<div class="col">
<div class="row">
<div class="col no-padding">
<button class="btn btn-sm btn-success btn-block b-rad-none requestModal" data-type="identificationVerificationModal">Upload Identification</button>
</div>
</div>
<modal-component type="identificationVerificationModal">
<identification-verification-form-component section="orderListSection" :data="item"></identification-verification-form-component>
</modal-component>
</div>
</div>
<div class="row parentContainer">
<div class="col no-padding">
<button type="button" class=" btn btn-sm btn-block p-t-10 p-b-10 p-r-35 p-l-35 btn-primary b-rad-none requestModal" data-type="exportCompanyModuleSummary">
<div class="row align-items-center">
<div class="col-auto p-r-0 p-l-0">
<i class="fa fa-file-excel-o fs-16"></i>
</div>
<div class="col p-r-5">Export To Excel</div>
</div>
</button>
<modal-component type="exportCompanyModuleSummary">
<export-company-module-summary-form-component section="exportCompanyModuleSummarySection" :data="item.company_module" @exit="closeModal"></export-company-module-summary-form-component>
</modal-component>
</div>
</div>
<modal-component type="identificationVerificationModal">
<identification-verification-form-component section="orderListSection" :data="item"></identification-verification-form-component>
</modal-component>
</div>
</div>
</div>
@@ -137,28 +137,7 @@
</button>
</div>
<modal-component small type="rejectDocument">
<div class="row">
<div class="col text-center">
<div class="row">
<div class="col text-center">
<div class="row m-b-20">
<div class="col">
<h5 class="all-caps">Reject Document</h5>
<div class="fs-11">Are you sure you want to reject this customer's identification?</div>
</div>
</div>
<div class="row">
<div class="col p-r-5">
<div data-dismiss="modal" class="btn btn-sm btn-default bg-master-lighter btn-block b-rad-none">Cancel</div>
</div>
<div class="col p-l-5">
<div data-dismiss="modal" class="btn btn-sm btn-danger btn-block b-rad-none" @click="approveDocument('reject')">Reject</div>
</div>
</div>
</div>
</div>
</div>
</div>
<reject-identification-verification-form-component :section="section" :data="item"></reject-identification-verification-form-component>
</modal-component>
<div class="col no-padding ml-auto">
<button class="btn btn-md btn-block btn-success b-rad-none p-t-10 p-b-10 requestModal" data-type="approveDocument">
@@ -0,0 +1,82 @@
<template>
<div class="row">
<div class="col">
<div class="row justify-content-center">
<div class="col-auto text-center">
<div class="row">
<div class="col text-center">
<div class="row">
<div class="col">
<h5 class="all-caps">Reject Document</h5>
<div class="fs-11">Are you sure you want to reject this customer's identification?</div>
</div>
</div>
<div class="row text-left margin-auto m-t-10 m-b-10">
<div class="col">
<span class="text-danger fs-9">{{ error }}</span>
<div class="fs-11">Reason: </div>
<div class="row">
<div class="col fs-11">
<div class="b-a padding-5 w-100 m-b-5 pointer b-grey muted" :class="{'b-primary': parameters.rejectRemark === rejectRemarkItem, 'text-primary': parameters.rejectRemark === rejectRemarkItem}" v-for="rejectRemarkItem in rejectRemarkArray" @click="chooseRejectRemark(rejectRemarkItem)">{{ rejectRemarkItem }}</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col p-r-5">
<div data-dismiss="modal" class="btn btn-sm btn-default bg-master-lighter btn-block b-rad-none">Cancel</div>
</div>
<div class="col p-l-5">
<div class="btn btn-sm btn-danger btn-block b-rad-none" @click="approveDocument('reject')">Reject</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import componentHandler from '../../../general/mixins/componentHandler';
import modalFormHandler from '../../../general/mixins/modalFormHandler';
import { required } from "vuelidate/lib/validators";
export default {
data(){
return {
parameters: {
rejectRemark: null,
},
rejectRemarkArray: null,
documentType: this.data.document_type === 'IDENTITY_CARD' ? 'IC' : 'SSM',
error: null,
}
},
validations: {
parameters: {
rejectRemark: { required },
}
},
created(){
this.rejectRemarkArray = [
this.documentType + ' not clear',
this.documentType + ' name different with registration name',
'Wrong Document uploaded',
'Non-Malaysian ' + this.documentType + ' Uploaded',
this.documentType + ' not Genuine'
];
},
methods: {
approveDocument(status){
this.parameters.rejectRemark === null ? this.error = 'Please choose a remark.' : null;
this.isLoading = true;
this.submit(this.route('api.company.identification.approval', this.item.owner.id, this.item.id, status), 'put', 'identificationVerificationSection', true, true);
},
chooseRejectRemark(remark) {
this.parameters.rejectRemark = remark;
}
},
mixins: [componentHandler, modalFormHandler]
}
</script>
@@ -11,7 +11,6 @@
<on-boarding-section-component v-if="!company.last_order"></on-boarding-section-component>
<div class="row" v-if="company.last_order">
<div class="col">
<!-- new swction -->
<div class="row tabsContainer">
<div class="col no-padding">
<div class="row m-l-0 m-r-0">
@@ -127,7 +126,6 @@
</div>
</div>
</div>
<!-- end new swction -->
</div>
</div>
</div>
@@ -8,8 +8,8 @@
</div>
<div class="row" v-show="!$store.getters.isShowing('createOrderForm')">
<div class="col">
<on-boarding-section-component v-if="company.last_order && company.status === 0"></on-boarding-section-component>
<div class="row" v-if="company.last_order && company.status !== 0">
<on-boarding-section-component v-if="!company.last_order"></on-boarding-section-component>
<div class="row" v-if="company.last_order">
<div class="col">
<div class="row m-b-30 relative">
<div class="col">
@@ -67,7 +67,7 @@
</div>
</div>
</div>
<order-form-component v-show="$store.getters.isShowing('createOrderForm') || (!company.last_order && company.status === 0)" :company="company" :section="section"></order-form-component>
<order-form-component v-show="$store.getters.isShowing('createOrderForm')" :company="company" :section="section"></order-form-component>
</div>
</div>
</template>
@@ -1,7 +1,7 @@
<template>
<div class="row">
<div class="col">
<div class="row m-b-20 hide">
<div class="row m-b-20">
<div class="col">
<div class="row m-b-50 text-center" v-if="!$store.getters.isAdmin">
<div class="col">
@@ -97,109 +97,6 @@
</div>
</div>
</div>
<div class="row align-items-center justify-content-center m-b-30">
<div class="col-10 bg-master-lightest padding-25">
<div class="row align-items-center">
<div class="col-12 col-lg-3">
<div class="row justify-content-center">
<div class="col-10">
<a :href="route('order.qr.download', 3362)" target="_blank">
<div class="peelable-corner overflow-hidden relative">
<img :src="'https://chart.googleapis.com/chart?chs=150x150&cht=qr&chl={id:3362}'" class="w-100">
</div>
</a>
</div>
</div>
</div>
<div class="col">
<div class="row align-items-center">
<div class="col">
<h4 class="text-success bold">Hooray! You have successfully created your first order.</h4>
</div>
</div>
<div class="row m-b-20">
<div class="col-auto">
<h3 class="no-margin"><b>Order No.</b> 636295692</h3>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row align-items-center justify-content-center m-b-50">
<div class="col-10">
<div class="row">
<div class="col p-t-10 p-b-25 p-l-25 p-r-25 bg-master-lightest b-r b-grey">
<div class="row m-b-15">
<div class="col text-center">
<img src="/images/qr-box.svg" width="150" height="150">
</div>
</div>
<div class="row justify-content-center">
<div class="col">
<div class="row m-b-10">
<div class="col">
<div class="bold all-caps fs-10"><i class="fa fa-circle text-primary m-r-10"></i>Step 1</div>
</div>
</div>
<div class="row">
<div class="col">
<p class="no-margin">Send the QR Code label to your supplier to attach to your parcel</p>
</div>
</div>
</div>
</div>
</div>
<div class="col p-t-10 p-b-25 p-l-25 p-r-25 bg-master-lightest b-r b-grey">
<div class="row m-b-15">
<div class="col text-center">
<img src="/images/package.svg" width="120" height="150">
</div>
</div>
<div class="row justify-content-center">
<div class="col">
<div class="row m-b-10">
<div class="col">
<div class="bold all-caps fs-10"><i class="fa fa-circle text-primary m-r-10"></i>Step 2</div>
</div>
</div>
<div class="row">
<div class="col">
<p class="no-margin">We receive your packages at our warehouse, and arrange for shipping.</p>
</div>
</div>
</div>
</div>
</div>
<div class="col p-t-10 p-b-25 p-l-25 p-r-25 bg-master-lightest">
<div class="row m-b-15">
<div class="col">
<img src="/images/package_hands.svg" width="160" height="150">
</div>
</div>
<div class="row justify-content-center">
<div class="col">
<div class="row m-b-10">
<div class="col">
<div class="bold all-caps fs-10"><i class="fa fa-circle text-primary m-r-10"></i>Step 3</div>
</div>
</div>
<div class="row">
<div class="col">
<p class="no-margin">Track your parcel to your doorsteps at your selected delivery address.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row align-items-center justify-content-center">
<div class="col-10">
<complete-registration-form-component></complete-registration-form-component>
</div>
</div>
</div>
</div>
</template>
@@ -64,13 +64,19 @@
</div>
</div>
</div>
<packing-list-section-component :data="item" v-if="expanded"></packing-list-section-component>
<packing-list-section-component :section="section" :data="item" v-if="expanded"></packing-list-section-component>
</div>
</div>
</template>
<script>
import componentHandler from '../../../general/mixins/componentHandler';
export default {
props: {
section:{
type: String,
default: ''
}
},
data(){
return {
expanded: false,
@@ -18,13 +18,17 @@
{{item.order.address.street_one+' '+(item.order.address.street_two ? item.order.address.street_two : '')+', '+ item.order.address.district.name+', '+item.order.address.post_code+' '+item.order.address.state.name+', '+item.order.address.country.name}}<br>{{item.order.address.remark ? item.order.address.remark.content: ''}}
<div class="btn btn-xs btn-primary pointer m-t-10 requestModal" data-type="defineLocation">Define Location</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="defineLocation">
<declare-postcode-area-form-component :data="item.order.address.post_code"></declare-postcode-area-form-component>
<declare-postcode-area-form-component :section="section" :data="{postcode: item.order.address.post_code, postcodeArea: item.order.address.post_code_area}"></declare-postcode-area-form-component>
</modal-component>
</div>
</div>
<div class="col">
<p class="no-margin" v-if="item.transport">{{ item.transport.current_schedule.eta }}</p>
<p class="no-margin text-danger" v-if="!item.transport">{{ item.packages[0].container.transport ? item.packages[0].container.transport.dropped_days+' Days': 'n/a'}}</p>
<div class="btn btn-xs btn-primary pointer m-t-10 requestModal" data-type="rescheduleTransport">Reschedule Transport</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="rescheduleTransport">
<reschedule-transport-date-form-component :data="item"></reschedule-transport-date-form-component>
</modal-component>
</div>
<div class="col-auto text-right" v-if="!item.transport">
<div class="row m-b-5">
@@ -36,7 +40,7 @@
<div v-if="!item.order" class="text-danger">Unclaimed</div>
</div>
</div>
<div class="row hide" v-if="false">
<div class="row">
<div class="col">
<div v-if="!item.shippng_transaction">
<div class="btn btn-xs btn-primary pointer" @click="generateInvoice()">Generate Invoice</div>
@@ -59,6 +63,12 @@
<script>
import componentHandler from '../../../general/mixins/componentHandler';
export default {
props: {
section:{
type: String,
default: ''
}
},
data(){
return {
parameters: {
@@ -79,7 +89,7 @@
},
methods: {
generateInvoice() {
this.submit(this.route('api.transaction.supplier.create'), 'post', '', true, true);
this.submit(this.route('api.transaction.supplier.create'), 'post', this.section, true, true);
},
updateStatus(status){
this.submit(this.route('api.packing_list.status.update', this.item.id, status), 'put', '', true, true)
@@ -1,27 +1,27 @@
<template>
<div class="row" style="width: 450px; margin: auto;" @keyup.enter="submitForm">
<div class="row" style="width: 450px; margin: auto;">
<div class="col bg-white padding-40 b-rad-lg">
<div class="row m-b-10">
<div class="col">
<h2 class="text-center text-complete bold">{{data}}</h2>
<p class="text-center" v-show="postcodeArea=== ''">This postcode is yet to be declare. Plase choose the area.</p>
<h2 class="text-center text-complete bold">{{data.postcode}}</h2>
<p class="text-center" v-show="parameters.reference=== ''">This postcode is yet to be declare. Plase choose the area.</p>
</div>
</div>
<div class="row text-center justify-content-center">
<div class="col p-r-5">
<div class="b-a b-thick p-t-15 p-b-15 p-l-35 p-r-35 pointer" :class="{ 'b-primary': postcodeArea === 'city_center', 'b-grey': postcodeArea !== 'city_center' }" @click="postcodeArea = 'city_center'">
<div class="b-a b-thick p-t-15 p-b-15 p-l-35 p-r-35 pointer" :class="{ 'b-primary': parameters.reference === 'CENTER_POSTCODE', 'b-grey': parameters.reference !== 'CENTER_POSTCODE' }" @click="parameters.reference = 'CENTER_POSTCODE'">
<div class="row">
<div class="col">
<h5 class="no-margin" :class="{ 'text-primary': postcodeArea === 'city_center', 'semi-bold': postcodeArea === 'city_center' }">City Center</h5>
<h5 class="no-margin" :class="{ 'text-primary': parameters.reference === 'CENTER_POSTCODE', 'semi-bold': parameters.reference === 'CENTER_POSTCODE' }">City Center</h5>
</div>
</div>
</div>
</div>
<div class="col p-l-5">
<div class="b-a b-thick p-t-15 p-b-15 p-l-35 p-r-35 pointer" :class="{ 'b-primary': postcodeArea === 'outskirt', 'b-grey': postcodeArea !== 'outskirt' }" @click="postcodeArea = 'outskirt'">
<div class="b-a b-thick p-t-15 p-b-15 p-l-35 p-r-35 pointer" :class="{ 'b-primary': parameters.reference === 'OUTSTATION_POSTCODE', 'b-grey': parameters.reference !== 'OUTSTATION_POSTCODE' }" @click="parameters.reference = 'OUTSTATION_POSTCODE'">
<div class="row">
<div class="col">
<h5 class="no-margin" :class="{ 'text-primary': postcodeArea === 'outskirt', 'semi-bold': postcodeArea === 'outskirt'}">Outskirt</h5>
<h5 class="no-margin" :class="{ 'text-primary': parameters.reference === 'OUTSTATION_POSTCODE', 'semi-bold': parameters.reference === 'OUTSTATION_POSTCODE'}">Outskirt</h5>
</div>
</div>
</div>
@@ -32,8 +32,7 @@
<div class="btn btn-lg btn-default b-rad-none" data-dismiss="modal">Cancel</div>
</div>
<div class="col p-l-5">
<!-- <div class="btn btn-primary w-100 btn-lg" @click="submit(route('api.packing_list.assign.order', data, orderNo), 'put', section, true, true)">Confirm</div> -->
<div class="btn btn-primary w-100 btn-lg">Confirm</div>
<div class="btn btn-primary w-100 btn-lg" @click="submit(route('api.segment.constant.update.postcode', 1), 'put', section, true, true)">Confirm</div>
</div>
</div>
</div>
@@ -46,7 +45,7 @@
export default {
props: {
data: {
type: String,
type: Object,
required: false
},
section: {
@@ -55,13 +54,12 @@
},
data() {
return {
postcodeArea: '',
parameters: {
reference: this.data.postcodeArea,
postcode: this.data.postcode
}
};
},
validations: {
orderNo: '',
},
mixins: [modalFormHandler]
}
@@ -28,10 +28,11 @@
<script>
import componentHandler from '../../../general/mixins/componentHandler';
export default {
data(){
return {
selected: false,
}
props: {
selectedPackageList: {
type: Array,
required: false,
}
},
methods: {
activate(){
@@ -45,6 +46,15 @@
},
noPackage() {
return ( this.item.packages.reduce((total, obj) => 1 + total, 0));
},
selected() {
var response = false;
this.selectedPackageList.forEach((value, index) => {
if (value.id == this.item.id) {
response = true;
}
});
return response;
}
},
mixins: [componentHandler]
@@ -0,0 +1,66 @@
<template>
<div class="row" style="width: 450px; margin: auto;" @keyup.enter="submitForm">
<div class="col bg-white padding-40 b-rad-lg">
<div class="row m-b-10">
<div class="col text-center">
<p>Plese set the approximate dates of below.</p>
</div>
</div>
<div class="row">
<div class="col">
<div class="row m-auto mt-10 mb-10">
<div class="col p-l-0 p-r-10">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.etd">
<label class="text-primary">Etd</label>
<date-picker-component v-model="parameters.etd"></date-picker-component>
</validation-wrapper-component>
</div>
<div class="col p-r-0 p-l-10">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.eta">
<label class="text-primary">Eta</label>
<date-picker-component v-model="parameters.eta"></date-picker-component>
</validation-wrapper-component>
</div>
</div>
</div>
</div>
<div class="row m-t-15">
<div class="col-auto p-r-5">
<div class="btn btn-lg btn-default b-rad-none" data-dismiss="modal">Cancel</div>
</div>
<div class="col p-l-5">
<div class="btn btn-primary w-100 btn-lg" @click="submit(route('api.packing_list.reschedule', data.id), 'put', section, true, true)">Confirm</div>
</div>
</div>
</div>
</div>
</template>
<script>
import modalFormHandler from '../../../general/mixins/modalFormHandler';
import { required } from "vuelidate/lib/validators";
export default {
props: {
section:{
type: String,
default: ''
},
},
data() {
return {
parameters: {
etd: this.etd,
eta: this.eta,
}
};
},
validations: {
parameters: {
etd: { required },
eta: { required },
}
},
mixins: [modalFormHandler]
}
</script>
@@ -455,7 +455,7 @@
</div>
<div class="row" v-for="packingList in container.packing_lists">
<div class="col">
<list-packagelist-form-component :data="packingList" v-on:input="updateList($event)"></list-packagelist-form-component>
<list-packagelist-form-component :data="packingList" :selectedPackageList="selectedPackageList" v-on:input="updateList($event)"></list-packagelist-form-component>
</div>
</div>
</div>
@@ -24,7 +24,7 @@
<div class="col">
<div class="row align-items-center p-t-10 p-b-10 b-t b-grey" v-for="packingList in packingLists">
<div class="col">
<packing-list-component :data="packingList"></packing-list-component>
<packing-list-component :section="section" :data="packingList"></packing-list-component>
</div>
</div>
</div>
@@ -42,6 +42,12 @@
import PackingListComponent from "../elements/PackingListComponent";
export default {
components: {PackingListComponent, LoadingComponent},
props: {
section:{
type: String,
default: ''
}
},
data(){
return {
isLoading: true,
@@ -0,0 +1,98 @@
<template>
<div class="row">
<div class="col">
<div class="btn-group">
<i class="fa fa-bell fs-18 m-t-5 muted pointer" :class="{'text-primary' : isClicked}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" @click="openNotification()"></i>
<div class="b-rad-md dropdown-menu dropdown-menu-right p-l-15 p-b-15 p-r-15 p-t-0" style="width: 100vw; height: 100vh; background: transparent !important;" @click="openNotification()">
<div class="row shadow" style="width: 320px; position: absolute; top: 50px; right: 50px; background: white!important;">
<div class="col">
<div class="row">
<div class="bg-master-lighter col p-l-10 p-l-10 p-t-10 bg-white text-center">
<p>Notification Center</p>
</div>
</div>
<loading-component style="height: 200px; top: 0;" key="1" color="primary" v-show="isLoading"></loading-component>
<div class="row" :class="{'h-100' : notificationsLength >= 5}" v-show="!isLoading" style="max-height: 400px; ">
<div class="col page-container overflow-hidden">
<div class="row b-b b-grey bg-primary-lighter-hover pointer w-100 m-l-0 m-r-0" v-for="(notification, index) in notifications">
<div class="col-auto justify-content-center align-items-center d-flex hide">
<div>
<i class="fa fa-check-circle fs-20 p-l-5 text-success"></i>
</div>
</div>
<div class="col padding-10 p-l-15 p-r-15">
<p class="bold m-b-5 lh-16">{{ notification.title }}</p>
<p class="fs-9 m-b-0 lh-10">{{ notification.description }}</p>
<p class="fs-9 m-b-0 m-t-10 lh-10">{{ notification.long_ago }}</p>
</div>
<div class="col-auto justify-content-center align-items-center d-none" :class="{'d-flex' : index === 0}">
<div>
<i class="fa fa-circle fs-10 text-primary"></i>
</div>
</div>
</div>
</div>
</div>
<div class="row text-center m-t-50 m-b-50" v-if="notificationsLength === 0" v-show="!isLoading">
<div class="col">
<div class="row align-items-center justify-content-center hint-text">
<div class="col-4 hint-text"><img src="/images/not-found-illustration.png" class="w-100 hint-text"/></div>
</div>
<div class="row text-center">
<div class="col">
<div class="row m-t-20">
<div class="col">
<p class="all-caps no-margin fs-11" style="letter-spacing: 2px;">Nothing To Show Here</p>
</div>
</div>
<div class="row m-t-5 align-items-center justify-content-center hide">
<div class="col">
<small class="fs-9 muted all-caps font-lato" style="letter-spacing: 2px">There is no results found.</small>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row b-t muted">
<div class="col p-l-10 p-l-10 p-t-10 m-b-10 bg-white text-center">
<a href="#">View All Notifications</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import ModalFormHandler from '../../../general/mixins/modalFormHandler';
export default {
data(){
return {
isLoading: true,
error: '',
notifications: null,
isClicked: false,
notificationsLength: 0,
}
},
methods: {
openNotification(){
this.isClicked === false ? this.fetchNotification() : '';
this.isClicked = !this.isClicked;
},
fetchNotification(){
this.isLoading = true;
this.submit(route('notifications.list'), 'get', this.section, false, false)
},
successHandler(response){
this.isLoading = false;
this.notifications = response.payload.data;
this.notificationsLength = response.payload.data.length;
},
},
mixins: [ModalFormHandler]
}
</script>
@@ -18,11 +18,15 @@
<p class="no-margin all-caps fs-10 light">Reference</p>
<p class="no-margin text-success bold">{{data.reference ? data.reference : 'n/a'}}</p>
</div>
<div class="col-auto">
<div class="col">
<p class="no-margin all-caps fs-10 light">Arrival Date</p>
<p class="no-margin text-success bold">{{data.transport ? data.transport.drop_date : 'n/a'}}</p>
</div>
<div class="col text-right" v-if="$store.getters.isSuperAdmin">
<div class="col-auto" v-if="$store.getters.isSuperAdmin">
<button type="button" class="btn b-rad-none btn-danger fs-11 requestModal" data-type="deletePackingList"><i class="fa fa-times text-white fs-12"></i></button>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="deletePackingList">
<delete-packinglist-form-component :data="data"></delete-packinglist-form-component>
</modal-component>
<button type="button" class="btn b-rad-none btn-primary fs-11 requestModal" data-type="claimPackingList">Claim</button>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="claimPackingList">
<claim-packinglist-form-component :data="data.id"></claim-packinglist-form-component>
@@ -0,0 +1,28 @@
<template>
<div class="row" style="width: 450px; margin: auto;" @keyup.enter="submitForm">
<div class="col bg-white padding-40 b-rad-lg">
<div class="row m-b-10">
<div class="col text-center">
<h3 class="all-caps">Are you sure?</h3>
<div class="fs-11">Are you sure you want to delete this Packing List?</div>
</div>
</div>
<div class="row m-t-15">
<div class="col-auto p-r-5">
<div class="btn btn-lg btn-default b-rad-none" data-dismiss="modal">Cancel</div>
</div>
<div class="col p-l-5">
<div class="btn btn-danger w-100 btn-lg" @click="submit(route('api.packing_list.delete', data.id), 'delete', section, true, true)">Confirm</div>
</div>
</div>
</div>
</div>
</template>
<script>
import modalFormHandler from '../../../general/mixins/modalFormHandler';
export default {
mixins: [modalFormHandler]
}
</script>
@@ -0,0 +1,63 @@
<template>
<div class="row">
<div class="col">
<loading-component style="height: 300px; top: 0;" key="1" color="success" v-show="isLoading" ></loading-component>
<div class="row justify-content-center" v-show="!isLoading">
<div class="col">
<div class="row m-b-20">
<div class="col">
<h3 class="all-caps text-center">Export Customer Summary</h3>
<div class="fs-11 text-center">Please key in the Container Number spereated by a comma.</div>
</div>
</div>
<div class="row m-b-15">
<div class="col">
<validation-wrapper-component :validator="$v.containerIds">
<label>Container Number</label>
<input class="form-control" v-model="containerIds">
</validation-wrapper-component>
</div>
</div>
<div class="row">
<div class="col p-r-5">
<div class="btn btn-sm btn-default bg-master-lighter btn-block b-rad-none" data-dismiss="modal">Cancel</div>
</div>
<div class="col p-l-5">
<div class="btn btn-sm btn-primary btn-block b-rad-none" @click="submitForm()">Confirm</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import componentHandler from '../../../general/mixins/componentHandler';
import ModalFormHandler from '../../../general/mixins/modalFormHandler';
import { required } from "vuelidate/lib/validators";
export default {
data() {
return {
containerIds: '',
}
},
validations: {
containerIds: {
required
},
},
methods: {
submitForm() {
this.validate();
if(this.validate()){
this.$v.$reset();
this.closeModal();
window.open(this.route('customer.summary.export', this.item.id)+'?containerNumber='+this.containerIds, '_blank');
}
return;
}
},
mixins: [componentHandler, ModalFormHandler]
}
</script>
File diff suppressed because one or more lines are too long
@@ -15,7 +15,19 @@
</div>
<div class="row">
<div class="col">
<div class="font-heading all-caps">{{data}}</div>
<div class="font-heading all-caps">{{data.postcode}}</div>
</div>
</div>
</div>
<div class="col">
<div class="row">
<div class="col-auto p-r-10">
<div class="font-heading all-caps fs-8 muted">Location</div>
</div>
</div>
<div class="row">
<div class="col">
<div class="font-heading all-caps">{{data.postcodeArea == '' ? '-' : data.postcodeArea.replaceAll('_', ' ') }}</div>
</div>
</div>
</div>
@@ -24,7 +36,7 @@
<div class="col">
<div class="btn btn-xs btn-primary pointer m-t-10 requestModal" data-type="defineLocation">Define Location</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="defineLocation">
<declare-postcode-area-form-component :data="data"></declare-postcode-area-form-component>
<declare-postcode-area-form-component :data="data" section="allPostcodesSection"></declare-postcode-area-form-component>
</modal-component>
</div>
</div>
@@ -40,7 +52,7 @@
export default {
props: {
data: {
type: String,
type: Object,
required: false
},
section: {
File diff suppressed because one or more lines are too long
@@ -27,7 +27,7 @@
</div>
<div class="row">
<div class="col">
<div class="font-heading all-caps">MYR 0.00</div>
<div class="font-heading all-caps">MYR {{ data.stateCharges === null ? '0.00' : data.stateCharges.center }}</div>
</div>
</div>
</div>
@@ -39,7 +39,7 @@
</div>
<div class="row">
<div class="col">
<div class="font-heading all-caps">MYR 0.00</div>
<div class="font-heading all-caps">MYR {{ data.stateCharges === null ? '0.00' : data.stateCharges.outstation }}</div>
</div>
</div>
</div>
@@ -48,7 +48,7 @@
<div class="col">
<div class="btn btn-xs btn-primary pointer m-t-10 requestModal" data-type="editCharges">Edit</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="editCharges">
<edit-state-charges-form-component :data="data"></edit-state-charges-form-component>
<edit-state-charges-form-component :data="data" :section="section"></edit-state-charges-form-component>
</modal-component>
</div>
</div>
@@ -27,9 +27,9 @@
</div>
<div class="row">
<div class="col">
<div class="font-heading all-caps">MYR 0.00 <i class="fa fa-edit pointer fa-fw m-l-5 requestModal text-primary" data-type="editWarehouseCharges"></i></div>
<div class="font-heading all-caps">MYR {{ data.warehouseCharges === null ? '0.00' : data.warehouseCharges.amount }} <i class="fa fa-edit pointer fa-fw m-l-5 requestModal text-primary" data-type="editWarehouseCharges"></i></div>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="editWarehouseCharges">
<edit-warehouse-charges-form-component :data="data"></edit-warehouse-charges-form-component>
<edit-warehouse-charges-form-component :data="data" section="warhouseListSection"></edit-warehouse-charges-form-component>
</modal-component>
</div>
</div>
@@ -54,7 +54,7 @@
<modal-component class="animate__animated animate__fast animate__fadeIn" type="warehouseRemark">
<remark-form-component module_type="CompanyModule" :data="data" section="warhouseListSection"></remark-form-component>
</modal-component>
<modal-component class="animate__animated animate__fast animate__fadeIn" type="deleteWarehouseRemark">
<modal-component class="animate__animated animate__fast animate__fadeIn" type="deleteWarehouseRemark">
<delete-remark-form-component :section="section" :data="data.remarks[0]"></delete-remark-form-component>
</modal-component>
</div>
@@ -0,0 +1,80 @@
<template>
<div class="row" style="width: 450px; margin: auto;" @keyup.enter="submitForm">
<div class="col bg-white b-rad-lg">
<div class="row m-b-10">
<div class="col text-center">
<p>Plese set the approximate of base price and dates of below.</p>
</div>
</div>
<div class="row">
<div class="col">
<div class="row m-auto mt-10 mb-10">
<div class="col p-l-0 p-r-10">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.dateFrom">
<label class="text-primary">Date From</label>
<date-picker-component v-model="parameters.dateFrom"></date-picker-component>
</validation-wrapper-component>
</div>
</div>
<div class="row m-auto mt-10 mb-10">
<div class="col p-l-0 p-r-10">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.dateTo">
<label class="text-primary">Date To</label>
<date-picker-component v-model="parameters.dateTo"></date-picker-component>
</validation-wrapper-component>
</div>
</div>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.rate">
<label class="text-primary">Extra Charges (MYR)</label>
<div class="controls">
<input type="text" class="form-control fs-12" v-model.trim="parameters.rate" v-money="money">
</div>
</validation-wrapper-component>
</div>
</div>
<div class="row m-t-15">
<div class="col p-r-5">
<div class="btn btn-sm btn-default b-rad-none w-100" data-dismiss="modal">Cancel</div>
</div>
<div class="col p-l-5">
<div class="btn btn-sm btn-primary w-100" @click="submitForm()">Confirm</div>
</div>
</div>
</div>
</div>
</template>
<script>
import modalFormHandler from '../../../general/mixins/modalFormHandler';
import { required } from "vuelidate/lib/validators";
export default {
props: {
section: {
default: ''
},
},
data() {
return {
parameters: {
dateFrom: '',
dateTo: '',
rate: ''
},
};
},
validations: {
parameters: {
dateFrom: { required },
dateTo: { required },
rate: { required },
}
},
methods: {
submitForm(){
this.submit(this.route('api.segment.constant.basePrice.create', 1), 'post', this.section, true, true)
},
},
mixins: [modalFormHandler]
}
</script>
@@ -0,0 +1,60 @@
<template>
<div class="row parentContainer padding-40 bg-white b-rad-lg" style="width: 450px; margin: auto;" @keyup.enter="submitForm">
<div class="col">
<div class="row m-b-10">
<div class="col">
<h2 class="text-center">Edit Base Price</h2>
<p class="text-center">{{ parameters.dateFrom }}</p>
</div>
</div>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.rate">
<label class="text-primary">Base Price (MYR)</label>
<div class="controls">
<input type="text" class="form-control fs-12" v-model.trim="parameters.rate" v-money="money">
</div>
</validation-wrapper-component>
<div class="row m-t-15">
<div class="col-auto p-r-5">
<div class="btn btn-lg btn-default b-rad-none" data-dismiss="modal">Cancel</div>
</div>
<div class="col p-l-5">
<div class="btn btn-primary w-100 btn-lg" @click="submit(route('api.segment.constant.basePrice.create', 1), 'post', section, true, true)">Confirm</div>
</div>
</div>
</div>
</div>
</template>
<script>
import modalFormHandler from '../../../general/mixins/modalFormHandler';
import { required } from "vuelidate/lib/validators";
export default {
props: {
data: {
type: Object,
required: false
},
section: {
default: ''
},
},
data() {
return {
parameters: {
dateFrom: this.data.date,
dateTo: this.data.date,
rate: this.data.rate
},
};
},
validations: {
parameters: {
dateFrom: { required },
dateTo: { required },
rate: { required },
}
},
mixins: [modalFormHandler]
}
</script>
@@ -0,0 +1,60 @@
<template>
<div class="row" style="width: 450px; margin: auto;" @keyup.enter="submitForm">
<div class="col bg-white b-rad-lg">
<div class="row m-b-10">
<div class="col">
<h3 class="text-center">Edit {{data.name}} Price</h3>
</div>
</div>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.value.amount">
<label class="text-primary">Segment Price (MYR)</label>
<div class="controls">
<input type="text" class="form-control fs-12" v-model.trim="parameters.value.amount" v-money="money">
</div>
</validation-wrapper-component>
<div class="row m-t-15">
<div class="col-auto p-r-5">
<div class="btn btn-lg btn-default b-rad-none" data-dismiss="modal">Cancel</div>
</div>
<div class="col p-l-5">
<div class="btn btn-primary w-100 btn-lg" @click="submit(route('api.segment.constant.update', data.id), 'put', section, true, true)">Confirm</div>
</div>
</div>
</div>
</div>
</template>
<script>
import modalFormHandler from '../../../general/mixins/modalFormHandler';
import { required } from "vuelidate/lib/validators";
export default {
props: {
data: {
type: Object,
required: false
},
section: {
default: ''
},
},
data() {
return {
parameters: {
reference: 'CUSTOM_PRICE',
value : {
amount: 0
}
}
};
},
validations: {
parameters: {
value: {
amount: { required }
}
}
},
mixins: [modalFormHandler]
}
</script>
@@ -6,16 +6,16 @@
<h2 class="text-center bold">{{data.name}}</h2>
</div>
</div>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.cityCenterCharges">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.rate.center">
<label class="text-primary">City Center Charges (MYR)</label>
<div class="controls">
<input type="text" class="form-control fs-12" v-model="cityCenterCharges">
<input type="text" class="form-control fs-12" v-model.trim="parameters.rate.center" v-money="money">
</div>
</validation-wrapper-component>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.outskirtCharges">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.rate.outstation">
<label class="text-primary">Outskirt Charges (MYR)</label>
<div class="controls">
<input type="text" class="form-control fs-12" v-model="outskirtCharges">
<input type="text" class="form-control fs-12" v-model.trim="parameters.rate.outstation" v-money="money">
</div>
</validation-wrapper-component>
<div class="row m-t-15">
@@ -23,8 +23,7 @@
<div class="btn btn-lg btn-default b-rad-none" data-dismiss="modal">Cancel</div>
</div>
<div class="col p-l-5">
<!-- <div class="btn btn-primary w-100 btn-lg" @click="submit(route('api.packing_list.assign.order', data, orderNo), 'put', section, true, true)">Confirm</div> -->
<div class="btn btn-primary w-100 btn-lg">Confirm</div>
<div class="btn btn-primary w-100 btn-lg" @click="submitForm()">Confirm</div>
</div>
</div>
</div>
@@ -46,16 +45,31 @@
},
data() {
return {
cityCenterCharges: '',
outskirtCharges : '',
cityCenterCharges: '',
outskirtCharges : '',
parameters: {
reference: 'STATE_RATE',
id: this.data.id,
rate: {
center: this.data.stateCharges == null ? 0 : this.data.stateCharges.center,
outstation: this.data.stateCharges == null ? 0 : this.data.stateCharges.outstation,
}
}
};
},
validations: {
parameters: {
cityCenterCharges: { required },
outskirtCharges: { required },
rate: {
center: { required },
outstation: { required }
}
}
},
methods: {
submitForm(){
this.submit(this.route('api.segment.constant.update', 1), 'put', this.section, true, true)
},
},
mixins: [modalFormHandler]
}
@@ -6,10 +6,10 @@
<h2 class="text-center">{{data.name}}</h2>
</div>
</div>
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.extraCharges">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.rate.amount">
<label class="text-primary">Extra Charges (MYR)</label>
<div class="controls">
<input type="text" class="form-control fs-12" v-model="extraCharges">
<input type="text" class="form-control fs-12" v-model.trim="parameters.rate.amount" v-money="money">
</div>
</validation-wrapper-component>
<div class="row m-t-15">
@@ -17,8 +17,7 @@
<div class="btn btn-lg btn-default b-rad-none" data-dismiss="modal">Cancel</div>
</div>
<div class="col p-l-5">
<!-- <div class="btn btn-primary w-100 btn-lg" @click="submit(route('api.packing_list.assign.order', data, orderNo), 'put', section, true, true)">Confirm</div> -->
<div class="btn btn-primary w-100 btn-lg">Confirm</div>
<div class="btn btn-primary w-100 btn-lg" @click="submitForm()">Confirm</div>
</div>
</div>
</div>
@@ -40,14 +39,27 @@
},
data() {
return {
extraCharges: '',
parameters: {
reference: 'WAREHOUSE_RATE',
id: this.data.id,
rate : {
amount: this.data.warehouseCharges == null ? 0 : this.data.warehouseCharges.amount,
}
}
};
},
validations: {
parameters: {
extraCharges: { required },
rate: {
amount: { required }
}
}
},
methods: {
submitForm(){
this.submit(this.route('api.segment.constant.update', 1), 'put', this.section, true, true)
},
},
mixins: [modalFormHandler]
}
@@ -1,11 +1,19 @@
import { required, numeric } from "vuelidate/lib/validators";
import { required, requiredIf, numeric } from "vuelidate/lib/validators";
import addressFormHandler from '../addressFormHandler'
export default {
validations: {
parameters: {
reference: { required },
reference: {
required: requiredIf(function(){
return ![7,8].includes(this.$store.getters.getCompanyModuleType);
})
},
street_one: { required },
street_two: {},
street_two: {
required: requiredIf(function(){
return [7,8].includes(this.$store.getters.getCompanyModuleType);
})
},
district_id: { required },
post_code: { required },
remark: {},
+1 -1
View File
@@ -5,7 +5,7 @@ export default {
(this.$store.getters.isAuthenticated && !this.isProtectedRoute()&& this.isWithTokenRoute()) ? window.location.href = [7, 8].includes(this.$store.getters.getCompanyModuleType) ? this.route('last_mile_delivery.dashboard') : this.route('dashboard') : '';
},
isProtectedRoute(){
const unprotectedRoutes = [this.route('login'), this.route('account.email.verification'), this.route('company.claim'), this.route('last_mile_delivery.login')];
const unprotectedRoutes = [this.route('login'), this.route('signup'), this.route('account.email.verification'), this.route('company.claim'), this.route('last_mile_delivery.login')];
if(window.location.href.indexOf(this.route('company.claim')) === 0) {
return false;
}
-1
View File
@@ -27,7 +27,6 @@ export default {
});
}).catch((error) => {
console.log(error);
this.$store.dispatch('createNotification', {title: 'Unexpected Error', message: 'An unexpected error has occurred. Try again!', type: 'error'});
}).then(() => {
if (section) {
+19 -1
View File
@@ -9,7 +9,6 @@ export default {
},
getters: {
isAuthenticated: state => !!state.authentication.access_token,
getAccessToken: state => state.authentication.access_token,
isSuperAdmin: (state, getters) => getters.getDecodedAccessToken.user.type === 0 || getters.getDecodedAccessToken.user.type === 1,
isAdmin: (state, getters) => getters.getDecodedAccessToken.user.type === 0 || getters.getDecodedAccessToken.user.type === 1 || getters.getDecodedAccessToken.user.type === 2,
getUserName: (state, getters) => getters.getUpdatedFullname || getters.getDecodedAccessToken.user.name,
@@ -19,7 +18,26 @@ export default {
getCompanyModuleId: (state, getters) => getters.getDecodedAccessToken.user.company_module_id,
getCompanyModuleType: (state, getters) => getters.getDecodedAccessToken.user.company_module_type,
getOrder: (state, getters) => getters.getDecodedAccessToken.user.order,
getAccessToken(state, getters) {
if(getters.isAuthenticated){
$crisp.push(["set", "user:email", getters.getUserEmail]);
if(getters.isAdmin){
$crisp.push(["set", "user:nickname", getters.getUserName]);
}
if(getters.getCompanyModuleType === 1){
$crisp.push(["set", "user:nickname", getters.getDecodedAccessToken.user.company_marking]);
$crisp.push(["set", "session:data", [
[
["izyim-marking", getters.getDecodedAccessToken.user.company_marking],
["company-name", getters.getDecodedAccessToken.user.company_name]
]
]]);
}
}
return state.authentication.access_token
},
getDecodedAccessToken(state) {
try{
return jwt_decode(state.authentication.access_token);
+1 -1
View File
@@ -10,7 +10,7 @@ export default {
'Authorization': 'Bearer '+getters.getAccessToken
}
}).then(response => {
if(response.status === 401 && (window.location.href !== route('login') || window.location.href.indexOf(this.route('last_mile_delivery.login')) <= -1)){
if(response.status === 401 && window.location.href !== route('login') && window.location.href.indexOf(route('last_mile_delivery.login')) <= -1){
dispatch('userAuthentication', {access_token: '', redirect_url: [7, 8].includes(getters.getCompanyModuleType) ? route('last_mile_delivery.login') : route('login')});
}
@@ -0,0 +1,24 @@
{{-- seperate signup page form login page for marketing crm --}}
@extends('layouts.base_login')
@section('inner_content')
<div class="row h-100 no-margin align-items-center justify-content-center">
<div class="col col-md-10">
<div class="row m-b-50">
<div class="col-8 col-md-6">
<img class="w-100" src="{{asset('images/cief-izyim-logo.png')}}" alt="">
</div>
</div>
<div class="row">
<div class="col">
<loading-component style="height: 350px;" key="1" color="primary" v-show="$store.getters.isLoading('loginSection')"></loading-component>
<div class="row justify-content-center">
<div class="col">
<registration-form-component section="loginSection"></registration-form-component>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@@ -59,7 +59,7 @@
</div>
<div class="row">
<div class="col">
<login-form-component section="loginSection"></login-form-component>
<delivery-login-form-component section="loginSection"></delivery-login-form-component>
</div>
</div>
</div>
+3 -3
View File
@@ -82,7 +82,7 @@
<div class="col">
<list-component section="activeContainerListSection" :endpoint="route('api.packing_list.container.list')" :options="{'per_page': 5, 'status_in': [1], order_by: {column: 'loading_date', DESC: true}}">
<template slot="list" slot-scope="{data}">
<container-component :data="data"></container-component>
<container-component section="activeContainerListSection" :data="data"></container-component>
</template>
</list-component>
</div>
@@ -91,7 +91,7 @@
<div class="col">
<list-component section="arrivedContainerListSection" :endpoint="route('api.packing_list.container.list')" :options="{'per_page': 5, 'status_in': [3], 'has_pending_delivery': true, order_by: {column: 'loading_date', DESC: true}}">
<template slot="list" slot-scope="{data}">
<container-component :data="data"></container-component>
<container-component section="arrivedContainerListSection" :data="data"></container-component>
</template>
</list-component>
</div>
@@ -100,7 +100,7 @@
<div class="col">
<list-component section="completeContainerListSection" :endpoint="route('api.packing_list.container.list')" :options="{'per_page': 5, 'status_in': [3], 'has_pending_delivery': false, order_by: {column: 'loading_date', DESC: true}}">
<template slot="list" slot-scope="{data}">
<container-component :data="data"></container-component>
<container-component section="completeContainerListSection" :data="data"></container-component>
</template>
</list-component>
</div>
@@ -1,10 +1,6 @@
@extends('layouts.base_pdf')
@section('inner_content')
<br>
<htmlpageheader name="page-header">
<br><br>
<div class="separator"><strong><i>{{ $invoice_transaction->bill_no }}</i></strong></div>
</htmlpageheader>
<table>
<tr>
<td class="header-logo">
@@ -23,13 +19,13 @@
Tel: 018-2909252
</td>
<td class="header-details">
<div class="title">
<h2 class="title">
<strong>
Invoice
</strong>
</div>
</h2>
<div class="number">EI#: {{ $invoice_transaction->bill_no }}</div>
<div class="number">INV. NO. {{ $invoice_transaction->bill_no }}</div>
@php
$companyModule = $invoice_transaction->owner->owner->companyModule;
@@ -37,7 +33,7 @@
<div class="ref">Ref# {{ $invoice_transaction->owner->owner->reference }}</div>
<!-- <div class="d-none">{{ $companyModule->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference }}</div> -->
<div class="date">Date: {{ $invoice_transaction->created_at }}</div>
<div class="date">Date: {{ $invoice_transaction->created_at->format('d-m-Y') }}</div>
<div>&nbsp;</div>
</div>
</td>
File diff suppressed because one or more lines are too long
+11 -1
View File
@@ -7,7 +7,17 @@
<h6>Arrived Parcel</h6>
</div>
</div>
<list-component section="warehouseListSection" :endpoint="route('api.packing_list.list')" :options="{packing_list_type: 1, packing_list_status: 2, per_page: 20, order_by: {column: 'arrival_date', DESC: true}, with_arrival_date: true}" >
<a href="{{route('packing_list.arrived_parcel.export')}}" target="_blank">
<button type="button" class="btn btn-sm p-t-10 p-b-10 p-r-35 p-l-35 btn-primary b-rad-none">
<div class="row align-items-center">
<div class="col-auto p-r-0 p-l-0">
<i class="fa fa-file-excel-o fs-16"></i>
</div>
<div class="col p-r-5">Export To Excel</div>
</div>
</button>
</a>
<list-component section="warehouseListSection" :endpoint="route('api.packing_list.list')" :options="{packing_list_type: 1, per_page: 20, order_by: {column: 'arrival_date', DESC: true}, with_arrival_date: true}" >
<template slot="list" slot-scope="{data}">
<parcel-component v-for="packages in data.packages" :data="packages" :key="packages.id"></parcel-component>
</template>
@@ -10,6 +10,9 @@
</div>
</div>
</div>
<div class="col-auto">
<notification-section-component section="section"></notification-section-component>
</div>
<div class="col-auto p-r-20 d-md-none">
<div class="row d-md-none">
<div class="col padding-15 pointer" @click="$store.dispatch('toggleSection', {name: 'sideMenu', status: true})">
+5 -5
View File
@@ -32,15 +32,15 @@
<tbody>
<tr>
<td style="border-bottom: solid 2px #000000;">
<h1 style="font-size: 50px; line-height: 70px">{{$marking}}{{$order->reference}}</h1>
<h3 style="font-size: 35px; line-height: 70px">{{$marking}}{{$order->reference}}</h3>
</td>
</tr>
<tr>
<td>
<p style="font-size: 30px; margin-bottom: 0 !important; margin-top: 10px !important;">仓库地址:</p>
<p style="margin-top: 5px !important; margin-bottom: 5px !important; word-wrap: break-word; font-size: 30px;">{{$warehouse_address->state->name.' '.$warehouse_address->district->name.' '.$warehouse_address->street_one.' '.$warehouse_address->street_two.' 邮编:'.$warehouse_address->postcode}}</p>
<p style="margin-top: 5px !important; margin-bottom: 0px !important; font-size: 30px;">联系:@foreach($warehouse_contacts as $contact){{ $loop->first ? '' : ' / ' }}{{ $contact->phone.' '.$contact->reference }}@endforeach</p>
<p style="margin-top: 5px !important; margin-bottom: 0px !important; font-size: 30px;">{!! $remark !!}</p>
<p style="font-size: 25px; margin-bottom: 0 !important; margin-top: 10px !important;">仓库地址:</p>
<p style="margin-top: 5px !important; margin-bottom: 5px !important; word-wrap: break-word; font-size: 25px;">{{$warehouse_address->state->name.' '.$warehouse_address->district->name.' '.$warehouse_address->street_one.' '.$warehouse_address->street_two.' 邮编:'.$warehouse_address->postcode}}</p>
<p style="margin-top: 5px !important; margin-bottom: 0px !important; font-size: 25px;">联系:@foreach($warehouse_contacts as $contact){{ $loop->first ? '' : ' / ' }}{{ $contact->phone.' '.$contact->reference }}@endforeach</p>
<p style="font-style: italic; font-weight: bold; margin-top: 5px !important; margin-bottom: 0px !important; font-size: 25px;">{!! $remark !!}</p>
</td>
</tr>
</tbody>
+1 -13
View File
@@ -6,19 +6,7 @@
'routes' => collect(\Route::getRoutes())->mapWithKeys(function ($route) { return [$route->getName() => $route->uri()]; })
]) !!};
</script>
@if(!App::environment('production'))
<script type="text/javascript">
var Tawk_API=Tawk_API||{}, Tawk_LoadStart=new Date();
(function(){
var s1=document.createElement("script"),s0=document.getElementsByTagName("script")[0];
s1.async=true;
s1.src='https://embed.tawk.to/623d8cdd2abe5b455fc195aa/1fv06sgtf';
s1.charset='UTF-8';
s1.setAttribute('crossorigin','*');
s0.parentNode.insertBefore(s1,s0);
})();
</script>
@endif
<script type="text/javascript">window.$crisp=[];window.CRISP_WEBSITE_ID="665dcd41-1edf-4451-8cb9-f1cf9ed35e15";(function(){d=document;s=d.createElement("script");s.src="https://client.crisp.chat/l.js";s.async=1;d.getElementsByTagName("head")[0].appendChild(s);})();</script>
<script src="{{ asset('js/vendor.js') }}" type="text/javascript"></script>
<script src="{{mix('vue/app.js')}}"></script>
<script src="{{ asset('js/site.js') }}" type="text/javascript"></script>
+3 -1
View File
@@ -13,7 +13,9 @@ Route::group(['prefix' => 'segment', 'as' => 'segment.', 'namespace' => 'Segment
Route::put('/service/update', 'UpdateCustomServiceConstantController@update')->name('service.update');
Route::put('/update', 'UpdateConstantController@update')->name('update');
Route::get('/show/{reference}', 'FetchConstantController@fetch')->name('show');
Route::put('/update/state', 'UpdateConstantStateController@update')->name('update.state');
Route::put('/update/postcode', 'UpdateConstantPostcodeController@update')->name('update.postcode');
Route::post('base-price/create', 'CreateBasePriceController@create')->name('basePrice.create');
Route::get('base-price/show', 'FetchBasePriceController@fetch')->name('basePrice.show');
});
});
+10 -3
View File
@@ -59,6 +59,11 @@ Route::get('', function () {
return view('pages.accounts.login');
})->name('login');
Route::get('/signup', function () {
return view('pages.accounts.sign_up');
})->name('signup');
Route::group(['prefix' => 'swagger'], function () {
Route::get('/', function () {
return view('swagger.index');
@@ -260,6 +265,8 @@ Route::get('/warehouse/{id}/show', function ($id) {
Route::get('/export/customer-latest-order-date/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@export');
Route::get('/export/packing-list/{id}', 'Exports\ExportContainerPackingListController@export')->name('container.packaging_list.export');
Route::get('/export/pending-arrangement-delivery-list', 'Exports\ExportPendingArrangementPackingListController@export')->name('packaging_list.pending_arrangement.export');
Route::get('/export/on-hold-packing-list', 'Exports\ExportPendingArrangementPackingListController@onHold')->name('packaging_list.on_hold.export');
Route::get('/export/arrived-parcel', 'Exports\ExportArrivedParcelController@export')->name('packing_list.arrived_parcel.export');
Route::get('/settings', function () {
return view('pages.settings');
@@ -268,6 +275,8 @@ Route::get('/settings', function () {
return view('pages.settings');
})->name('settings');
Route::get('/customer/{company_module_id}/summary', 'Exports\ExportCompanyModuleSummaryController@export')->name('customer.summary.export');
Route::get('/customer/summary/monthly', function () {
// $containers = Container::whereMonth('loading_date', 1)->where('owner_id', 3)->get();
$containers = Container::whereIn('reference', ['EPS-3850', 'EPS-3863', 'WP-1331', 'EPS-3856'])->get();
@@ -364,6 +373,4 @@ Route::get('/customers/active/{active_start}/{active_end}/{inactive_start?}/{ina
Route::get('/online_payment/redirect', 'Billplz\CallbackBillplzController@callback')->name('online_payment.redirect');
Route::get('/order/{id}', function ($id) {
return view('pages.orders.profile', ['id' => $id]);
})->name('order.details');
Route::get('/notifications/list', 'Notifications\ListNotificationsController@list')->name('notifications.list');
+572
View File
@@ -0,0 +1,572 @@
<?php return array (
'codeToName' =>
array (
32 => 'space',
160 => 'space',
33 => 'exclam',
34 => 'quotedbl',
35 => 'numbersign',
36 => 'dollar',
37 => 'percent',
38 => 'ampersand',
146 => 'quoteright',
40 => 'parenleft',
41 => 'parenright',
42 => 'asterisk',
43 => 'plus',
44 => 'comma',
45 => 'hyphen',
173 => 'hyphen',
46 => 'period',
47 => 'slash',
48 => 'zero',
49 => 'one',
50 => 'two',
51 => 'three',
52 => 'four',
53 => 'five',
54 => 'six',
55 => 'seven',
56 => 'eight',
57 => 'nine',
58 => 'colon',
59 => 'semicolon',
60 => 'less',
61 => 'equal',
62 => 'greater',
63 => 'question',
64 => 'at',
65 => 'A',
66 => 'B',
67 => 'C',
68 => 'D',
69 => 'E',
70 => 'F',
71 => 'G',
72 => 'H',
73 => 'I',
74 => 'J',
75 => 'K',
76 => 'L',
77 => 'M',
78 => 'N',
79 => 'O',
80 => 'P',
81 => 'Q',
82 => 'R',
83 => 'S',
84 => 'T',
85 => 'U',
86 => 'V',
87 => 'W',
88 => 'X',
89 => 'Y',
90 => 'Z',
91 => 'bracketleft',
92 => 'backslash',
93 => 'bracketright',
94 => 'asciicircum',
95 => 'underscore',
145 => 'quoteleft',
97 => 'a',
98 => 'b',
99 => 'c',
100 => 'd',
101 => 'e',
102 => 'f',
103 => 'g',
104 => 'h',
105 => 'i',
106 => 'j',
107 => 'k',
108 => 'l',
109 => 'm',
110 => 'n',
111 => 'o',
112 => 'p',
113 => 'q',
114 => 'r',
115 => 's',
116 => 't',
117 => 'u',
118 => 'v',
119 => 'w',
120 => 'x',
121 => 'y',
122 => 'z',
123 => 'braceleft',
124 => 'bar',
125 => 'braceright',
126 => 'asciitilde',
161 => 'exclamdown',
162 => 'cent',
163 => 'sterling',
165 => 'yen',
131 => 'florin',
167 => 'section',
164 => 'currency',
39 => 'quotesingle',
147 => 'quotedblleft',
171 => 'guillemotleft',
139 => 'guilsinglleft',
155 => 'guilsinglright',
150 => 'endash',
134 => 'dagger',
135 => 'daggerdbl',
183 => 'periodcentered',
182 => 'paragraph',
149 => 'bullet',
130 => 'quotesinglbase',
132 => 'quotedblbase',
148 => 'quotedblright',
187 => 'guillemotright',
133 => 'ellipsis',
137 => 'perthousand',
191 => 'questiondown',
96 => 'grave',
180 => 'acute',
136 => 'circumflex',
152 => 'tilde',
175 => 'macron',
168 => 'dieresis',
184 => 'cedilla',
151 => 'emdash',
198 => 'AE',
170 => 'ordfeminine',
216 => 'Oslash',
140 => 'OE',
186 => 'ordmasculine',
230 => 'ae',
248 => 'oslash',
156 => 'oe',
223 => 'germandbls',
207 => 'Idieresis',
233 => 'eacute',
159 => 'Ydieresis',
247 => 'divide',
221 => 'Yacute',
194 => 'Acircumflex',
225 => 'aacute',
219 => 'Ucircumflex',
253 => 'yacute',
234 => 'ecircumflex',
220 => 'Udieresis',
218 => 'Uacute',
203 => 'Edieresis',
169 => 'copyright',
229 => 'aring',
224 => 'agrave',
227 => 'atilde',
154 => 'scaron',
237 => 'iacute',
251 => 'ucircumflex',
226 => 'acircumflex',
231 => 'ccedilla',
222 => 'Thorn',
179 => 'threesuperior',
210 => 'Ograve',
192 => 'Agrave',
215 => 'multiply',
250 => 'uacute',
255 => 'ydieresis',
238 => 'icircumflex',
202 => 'Ecircumflex',
228 => 'adieresis',
235 => 'edieresis',
205 => 'Iacute',
177 => 'plusminus',
166 => 'brokenbar',
174 => 'registered',
200 => 'Egrave',
142 => 'Zcaron',
208 => 'Eth',
199 => 'Ccedilla',
193 => 'Aacute',
196 => 'Adieresis',
232 => 'egrave',
211 => 'Oacute',
243 => 'oacute',
239 => 'idieresis',
212 => 'Ocircumflex',
217 => 'Ugrave',
254 => 'thorn',
178 => 'twosuperior',
214 => 'Odieresis',
181 => 'mu',
236 => 'igrave',
190 => 'threequarters',
153 => 'trademark',
204 => 'Igrave',
189 => 'onehalf',
244 => 'ocircumflex',
241 => 'ntilde',
201 => 'Eacute',
188 => 'onequarter',
138 => 'Scaron',
176 => 'degree',
242 => 'ograve',
249 => 'ugrave',
209 => 'Ntilde',
245 => 'otilde',
195 => 'Atilde',
197 => 'Aring',
213 => 'Otilde',
206 => 'Icircumflex',
172 => 'logicalnot',
246 => 'odieresis',
252 => 'udieresis',
240 => 'eth',
158 => 'zcaron',
185 => 'onesuperior',
128 => 'Euro',
),
'isUnicode' => false,
'FontName' => 'Helvetica',
'FullName' => 'Helvetica',
'FamilyName' => 'Helvetica',
'Weight' => 'Medium',
'ItalicAngle' => '0',
'IsFixedPitch' => 'false',
'CharacterSet' => 'ExtendedRoman',
'FontBBox' =>
array (
0 => '-166',
1 => '-225',
2 => '1000',
3 => '931',
),
'UnderlinePosition' => '-100',
'UnderlineThickness' => '50',
'Version' => '002.000',
'EncodingScheme' => 'WinAnsiEncoding',
'CapHeight' => '718',
'XHeight' => '523',
'Ascender' => '718',
'Descender' => '-207',
'StdHW' => '76',
'StdVW' => '88',
'StartCharMetrics' => '317',
'C' =>
array (
32 => 278.0,
160 => 278.0,
33 => 278.0,
34 => 355.0,
35 => 556.0,
36 => 556.0,
37 => 889.0,
38 => 667.0,
146 => 222.0,
40 => 333.0,
41 => 333.0,
42 => 389.0,
43 => 584.0,
44 => 278.0,
45 => 333.0,
173 => 333.0,
46 => 278.0,
47 => 278.0,
48 => 556.0,
49 => 556.0,
50 => 556.0,
51 => 556.0,
52 => 556.0,
53 => 556.0,
54 => 556.0,
55 => 556.0,
56 => 556.0,
57 => 556.0,
58 => 278.0,
59 => 278.0,
60 => 584.0,
61 => 584.0,
62 => 584.0,
63 => 556.0,
64 => 1015.0,
65 => 667.0,
66 => 667.0,
67 => 722.0,
68 => 722.0,
69 => 667.0,
70 => 611.0,
71 => 778.0,
72 => 722.0,
73 => 278.0,
74 => 500.0,
75 => 667.0,
76 => 556.0,
77 => 833.0,
78 => 722.0,
79 => 778.0,
80 => 667.0,
81 => 778.0,
82 => 722.0,
83 => 667.0,
84 => 611.0,
85 => 722.0,
86 => 667.0,
87 => 944.0,
88 => 667.0,
89 => 667.0,
90 => 611.0,
91 => 278.0,
92 => 278.0,
93 => 278.0,
94 => 469.0,
95 => 556.0,
145 => 222.0,
97 => 556.0,
98 => 556.0,
99 => 500.0,
100 => 556.0,
101 => 556.0,
102 => 278.0,
103 => 556.0,
104 => 556.0,
105 => 222.0,
106 => 222.0,
107 => 500.0,
108 => 222.0,
109 => 833.0,
110 => 556.0,
111 => 556.0,
112 => 556.0,
113 => 556.0,
114 => 333.0,
115 => 500.0,
116 => 278.0,
117 => 556.0,
118 => 500.0,
119 => 722.0,
120 => 500.0,
121 => 500.0,
122 => 500.0,
123 => 334.0,
124 => 260.0,
125 => 334.0,
126 => 584.0,
161 => 333.0,
162 => 556.0,
163 => 556.0,
'fraction' => 167.0,
165 => 556.0,
131 => 556.0,
167 => 556.0,
164 => 556.0,
39 => 191.0,
147 => 333.0,
171 => 556.0,
139 => 333.0,
155 => 333.0,
'fi' => 500.0,
'fl' => 500.0,
150 => 556.0,
134 => 556.0,
135 => 556.0,
183 => 278.0,
182 => 537.0,
149 => 350.0,
130 => 222.0,
132 => 333.0,
148 => 333.0,
187 => 556.0,
133 => 1000.0,
137 => 1000.0,
191 => 611.0,
96 => 333.0,
180 => 333.0,
136 => 333.0,
152 => 333.0,
175 => 333.0,
'breve' => 333.0,
'dotaccent' => 333.0,
168 => 333.0,
'ring' => 333.0,
184 => 333.0,
'hungarumlaut' => 333.0,
'ogonek' => 333.0,
'caron' => 333.0,
151 => 1000.0,
198 => 1000.0,
170 => 370.0,
'Lslash' => 556.0,
216 => 778.0,
140 => 1000.0,
186 => 365.0,
230 => 889.0,
'dotlessi' => 278.0,
'lslash' => 222.0,
248 => 611.0,
156 => 944.0,
223 => 611.0,
207 => 278.0,
233 => 556.0,
'abreve' => 556.0,
'uhungarumlaut' => 556.0,
'ecaron' => 556.0,
159 => 667.0,
247 => 584.0,
221 => 667.0,
194 => 667.0,
225 => 556.0,
219 => 722.0,
253 => 500.0,
'scommaaccent' => 500.0,
234 => 556.0,
'Uring' => 722.0,
220 => 722.0,
'aogonek' => 556.0,
218 => 722.0,
'uogonek' => 556.0,
203 => 667.0,
'Dcroat' => 722.0,
'commaaccent' => 250.0,
169 => 737.0,
'Emacron' => 667.0,
'ccaron' => 500.0,
229 => 556.0,
'Ncommaaccent' => 722.0,
'lacute' => 222.0,
224 => 556.0,
'Tcommaaccent' => 611.0,
'Cacute' => 722.0,
227 => 556.0,
'Edotaccent' => 667.0,
154 => 500.0,
'scedilla' => 500.0,
237 => 278.0,
'lozenge' => 471.0,
'Rcaron' => 722.0,
'Gcommaaccent' => 778.0,
251 => 556.0,
226 => 556.0,
'Amacron' => 667.0,
'rcaron' => 333.0,
231 => 500.0,
'Zdotaccent' => 611.0,
222 => 667.0,
'Omacron' => 778.0,
'Racute' => 722.0,
'Sacute' => 667.0,
'dcaron' => 643.0,
'Umacron' => 722.0,
'uring' => 556.0,
179 => 333.0,
210 => 778.0,
192 => 667.0,
'Abreve' => 667.0,
215 => 584.0,
250 => 556.0,
'Tcaron' => 611.0,
'partialdiff' => 476.0,
255 => 500.0,
'Nacute' => 722.0,
238 => 278.0,
202 => 667.0,
228 => 556.0,
235 => 556.0,
'cacute' => 500.0,
'nacute' => 556.0,
'umacron' => 556.0,
'Ncaron' => 722.0,
205 => 278.0,
177 => 584.0,
166 => 260.0,
174 => 737.0,
'Gbreve' => 778.0,
'Idotaccent' => 278.0,
'summation' => 600.0,
200 => 667.0,
'racute' => 333.0,
'omacron' => 556.0,
'Zacute' => 611.0,
142 => 611.0,
'greaterequal' => 549.0,
208 => 722.0,
199 => 722.0,
'lcommaaccent' => 222.0,
'tcaron' => 317.0,
'eogonek' => 556.0,
'Uogonek' => 722.0,
193 => 667.0,
196 => 667.0,
232 => 556.0,
'zacute' => 500.0,
'iogonek' => 222.0,
211 => 778.0,
243 => 556.0,
'amacron' => 556.0,
'sacute' => 500.0,
239 => 278.0,
212 => 778.0,
217 => 722.0,
'Delta' => 612.0,
254 => 556.0,
178 => 333.0,
214 => 778.0,
181 => 556.0,
236 => 278.0,
'ohungarumlaut' => 556.0,
'Eogonek' => 667.0,
'dcroat' => 556.0,
190 => 834.0,
'Scedilla' => 667.0,
'lcaron' => 299.0,
'Kcommaaccent' => 667.0,
'Lacute' => 556.0,
153 => 1000.0,
'edotaccent' => 556.0,
204 => 278.0,
'Imacron' => 278.0,
'Lcaron' => 556.0,
189 => 834.0,
'lessequal' => 549.0,
244 => 556.0,
241 => 556.0,
'Uhungarumlaut' => 722.0,
201 => 667.0,
'emacron' => 556.0,
'gbreve' => 556.0,
188 => 834.0,
138 => 667.0,
'Scommaaccent' => 667.0,
'Ohungarumlaut' => 778.0,
176 => 400.0,
242 => 556.0,
'Ccaron' => 722.0,
249 => 556.0,
'radical' => 453.0,
'Dcaron' => 722.0,
'rcommaaccent' => 333.0,
209 => 722.0,
245 => 556.0,
'Rcommaaccent' => 722.0,
'Lcommaaccent' => 556.0,
195 => 667.0,
'Aogonek' => 667.0,
197 => 667.0,
213 => 778.0,
'zdotaccent' => 500.0,
'Ecaron' => 667.0,
'Iogonek' => 278.0,
'kcommaaccent' => 500.0,
'minus' => 584.0,
206 => 278.0,
'ncaron' => 556.0,
'tcommaaccent' => 278.0,
172 => 584.0,
246 => 556.0,
252 => 556.0,
'notequal' => 549.0,
'gcommaaccent' => 556.0,
240 => 556.0,
158 => 500.0,
'ncommaaccent' => 556.0,
185 => 333.0,
'imacron' => 278.0,
128 => 556.0,
),
'CIDtoGID_Compressed' => true,
'CIDtoGID' => 'eJwDAAAAAAE=',
'_version_' => 6,
);
+572
View File
@@ -0,0 +1,572 @@
<?php return array (
'codeToName' =>
array (
32 => 'space',
160 => 'space',
33 => 'exclam',
34 => 'quotedbl',
35 => 'numbersign',
36 => 'dollar',
37 => 'percent',
38 => 'ampersand',
146 => 'quoteright',
40 => 'parenleft',
41 => 'parenright',
42 => 'asterisk',
43 => 'plus',
44 => 'comma',
45 => 'hyphen',
173 => 'hyphen',
46 => 'period',
47 => 'slash',
48 => 'zero',
49 => 'one',
50 => 'two',
51 => 'three',
52 => 'four',
53 => 'five',
54 => 'six',
55 => 'seven',
56 => 'eight',
57 => 'nine',
58 => 'colon',
59 => 'semicolon',
60 => 'less',
61 => 'equal',
62 => 'greater',
63 => 'question',
64 => 'at',
65 => 'A',
66 => 'B',
67 => 'C',
68 => 'D',
69 => 'E',
70 => 'F',
71 => 'G',
72 => 'H',
73 => 'I',
74 => 'J',
75 => 'K',
76 => 'L',
77 => 'M',
78 => 'N',
79 => 'O',
80 => 'P',
81 => 'Q',
82 => 'R',
83 => 'S',
84 => 'T',
85 => 'U',
86 => 'V',
87 => 'W',
88 => 'X',
89 => 'Y',
90 => 'Z',
91 => 'bracketleft',
92 => 'backslash',
93 => 'bracketright',
94 => 'asciicircum',
95 => 'underscore',
145 => 'quoteleft',
97 => 'a',
98 => 'b',
99 => 'c',
100 => 'd',
101 => 'e',
102 => 'f',
103 => 'g',
104 => 'h',
105 => 'i',
106 => 'j',
107 => 'k',
108 => 'l',
109 => 'm',
110 => 'n',
111 => 'o',
112 => 'p',
113 => 'q',
114 => 'r',
115 => 's',
116 => 't',
117 => 'u',
118 => 'v',
119 => 'w',
120 => 'x',
121 => 'y',
122 => 'z',
123 => 'braceleft',
124 => 'bar',
125 => 'braceright',
126 => 'asciitilde',
161 => 'exclamdown',
162 => 'cent',
163 => 'sterling',
165 => 'yen',
131 => 'florin',
167 => 'section',
164 => 'currency',
39 => 'quotesingle',
147 => 'quotedblleft',
171 => 'guillemotleft',
139 => 'guilsinglleft',
155 => 'guilsinglright',
150 => 'endash',
134 => 'dagger',
135 => 'daggerdbl',
183 => 'periodcentered',
182 => 'paragraph',
149 => 'bullet',
130 => 'quotesinglbase',
132 => 'quotedblbase',
148 => 'quotedblright',
187 => 'guillemotright',
133 => 'ellipsis',
137 => 'perthousand',
191 => 'questiondown',
96 => 'grave',
180 => 'acute',
136 => 'circumflex',
152 => 'tilde',
175 => 'macron',
168 => 'dieresis',
184 => 'cedilla',
151 => 'emdash',
198 => 'AE',
170 => 'ordfeminine',
216 => 'Oslash',
140 => 'OE',
186 => 'ordmasculine',
230 => 'ae',
248 => 'oslash',
156 => 'oe',
223 => 'germandbls',
207 => 'Idieresis',
233 => 'eacute',
159 => 'Ydieresis',
247 => 'divide',
221 => 'Yacute',
194 => 'Acircumflex',
225 => 'aacute',
219 => 'Ucircumflex',
253 => 'yacute',
234 => 'ecircumflex',
220 => 'Udieresis',
218 => 'Uacute',
203 => 'Edieresis',
169 => 'copyright',
229 => 'aring',
224 => 'agrave',
227 => 'atilde',
154 => 'scaron',
237 => 'iacute',
251 => 'ucircumflex',
226 => 'acircumflex',
231 => 'ccedilla',
222 => 'Thorn',
179 => 'threesuperior',
210 => 'Ograve',
192 => 'Agrave',
215 => 'multiply',
250 => 'uacute',
255 => 'ydieresis',
238 => 'icircumflex',
202 => 'Ecircumflex',
228 => 'adieresis',
235 => 'edieresis',
205 => 'Iacute',
177 => 'plusminus',
166 => 'brokenbar',
174 => 'registered',
200 => 'Egrave',
142 => 'Zcaron',
208 => 'Eth',
199 => 'Ccedilla',
193 => 'Aacute',
196 => 'Adieresis',
232 => 'egrave',
211 => 'Oacute',
243 => 'oacute',
239 => 'idieresis',
212 => 'Ocircumflex',
217 => 'Ugrave',
254 => 'thorn',
178 => 'twosuperior',
214 => 'Odieresis',
181 => 'mu',
236 => 'igrave',
190 => 'threequarters',
153 => 'trademark',
204 => 'Igrave',
189 => 'onehalf',
244 => 'ocircumflex',
241 => 'ntilde',
201 => 'Eacute',
188 => 'onequarter',
138 => 'Scaron',
176 => 'degree',
242 => 'ograve',
249 => 'ugrave',
209 => 'Ntilde',
245 => 'otilde',
195 => 'Atilde',
197 => 'Aring',
213 => 'Otilde',
206 => 'Icircumflex',
172 => 'logicalnot',
246 => 'odieresis',
252 => 'udieresis',
240 => 'eth',
158 => 'zcaron',
185 => 'onesuperior',
128 => 'Euro',
),
'isUnicode' => false,
'FontName' => 'Times-Bold',
'FullName' => 'Times Bold',
'FamilyName' => 'Times',
'Weight' => 'Bold',
'ItalicAngle' => '0',
'IsFixedPitch' => 'false',
'CharacterSet' => 'ExtendedRoman',
'FontBBox' =>
array (
0 => '-168',
1 => '-218',
2 => '1000',
3 => '935',
),
'UnderlinePosition' => '-100',
'UnderlineThickness' => '50',
'Version' => '002.000',
'EncodingScheme' => 'WinAnsiEncoding',
'CapHeight' => '676',
'XHeight' => '461',
'Ascender' => '683',
'Descender' => '-217',
'StdHW' => '44',
'StdVW' => '139',
'StartCharMetrics' => '317',
'C' =>
array (
32 => 250.0,
160 => 250.0,
33 => 333.0,
34 => 555.0,
35 => 500.0,
36 => 500.0,
37 => 1000.0,
38 => 833.0,
146 => 333.0,
40 => 333.0,
41 => 333.0,
42 => 500.0,
43 => 570.0,
44 => 250.0,
45 => 333.0,
173 => 333.0,
46 => 250.0,
47 => 278.0,
48 => 500.0,
49 => 500.0,
50 => 500.0,
51 => 500.0,
52 => 500.0,
53 => 500.0,
54 => 500.0,
55 => 500.0,
56 => 500.0,
57 => 500.0,
58 => 333.0,
59 => 333.0,
60 => 570.0,
61 => 570.0,
62 => 570.0,
63 => 500.0,
64 => 930.0,
65 => 722.0,
66 => 667.0,
67 => 722.0,
68 => 722.0,
69 => 667.0,
70 => 611.0,
71 => 778.0,
72 => 778.0,
73 => 389.0,
74 => 500.0,
75 => 778.0,
76 => 667.0,
77 => 944.0,
78 => 722.0,
79 => 778.0,
80 => 611.0,
81 => 778.0,
82 => 722.0,
83 => 556.0,
84 => 667.0,
85 => 722.0,
86 => 722.0,
87 => 1000.0,
88 => 722.0,
89 => 722.0,
90 => 667.0,
91 => 333.0,
92 => 278.0,
93 => 333.0,
94 => 581.0,
95 => 500.0,
145 => 333.0,
97 => 500.0,
98 => 556.0,
99 => 444.0,
100 => 556.0,
101 => 444.0,
102 => 333.0,
103 => 500.0,
104 => 556.0,
105 => 278.0,
106 => 333.0,
107 => 556.0,
108 => 278.0,
109 => 833.0,
110 => 556.0,
111 => 500.0,
112 => 556.0,
113 => 556.0,
114 => 444.0,
115 => 389.0,
116 => 333.0,
117 => 556.0,
118 => 500.0,
119 => 722.0,
120 => 500.0,
121 => 500.0,
122 => 444.0,
123 => 394.0,
124 => 220.0,
125 => 394.0,
126 => 520.0,
161 => 333.0,
162 => 500.0,
163 => 500.0,
'fraction' => 167.0,
165 => 500.0,
131 => 500.0,
167 => 500.0,
164 => 500.0,
39 => 278.0,
147 => 500.0,
171 => 500.0,
139 => 333.0,
155 => 333.0,
'fi' => 556.0,
'fl' => 556.0,
150 => 500.0,
134 => 500.0,
135 => 500.0,
183 => 250.0,
182 => 540.0,
149 => 350.0,
130 => 333.0,
132 => 500.0,
148 => 500.0,
187 => 500.0,
133 => 1000.0,
137 => 1000.0,
191 => 500.0,
96 => 333.0,
180 => 333.0,
136 => 333.0,
152 => 333.0,
175 => 333.0,
'breve' => 333.0,
'dotaccent' => 333.0,
168 => 333.0,
'ring' => 333.0,
184 => 333.0,
'hungarumlaut' => 333.0,
'ogonek' => 333.0,
'caron' => 333.0,
151 => 1000.0,
198 => 1000.0,
170 => 300.0,
'Lslash' => 667.0,
216 => 778.0,
140 => 1000.0,
186 => 330.0,
230 => 722.0,
'dotlessi' => 278.0,
'lslash' => 278.0,
248 => 500.0,
156 => 722.0,
223 => 556.0,
207 => 389.0,
233 => 444.0,
'abreve' => 500.0,
'uhungarumlaut' => 556.0,
'ecaron' => 444.0,
159 => 722.0,
247 => 570.0,
221 => 722.0,
194 => 722.0,
225 => 500.0,
219 => 722.0,
253 => 500.0,
'scommaaccent' => 389.0,
234 => 444.0,
'Uring' => 722.0,
220 => 722.0,
'aogonek' => 500.0,
218 => 722.0,
'uogonek' => 556.0,
203 => 667.0,
'Dcroat' => 722.0,
'commaaccent' => 250.0,
169 => 747.0,
'Emacron' => 667.0,
'ccaron' => 444.0,
229 => 500.0,
'Ncommaaccent' => 722.0,
'lacute' => 278.0,
224 => 500.0,
'Tcommaaccent' => 667.0,
'Cacute' => 722.0,
227 => 500.0,
'Edotaccent' => 667.0,
154 => 389.0,
'scedilla' => 389.0,
237 => 278.0,
'lozenge' => 494.0,
'Rcaron' => 722.0,
'Gcommaaccent' => 778.0,
251 => 556.0,
226 => 500.0,
'Amacron' => 722.0,
'rcaron' => 444.0,
231 => 444.0,
'Zdotaccent' => 667.0,
222 => 611.0,
'Omacron' => 778.0,
'Racute' => 722.0,
'Sacute' => 556.0,
'dcaron' => 672.0,
'Umacron' => 722.0,
'uring' => 556.0,
179 => 300.0,
210 => 778.0,
192 => 722.0,
'Abreve' => 722.0,
215 => 570.0,
250 => 556.0,
'Tcaron' => 667.0,
'partialdiff' => 494.0,
255 => 500.0,
'Nacute' => 722.0,
238 => 278.0,
202 => 667.0,
228 => 500.0,
235 => 444.0,
'cacute' => 444.0,
'nacute' => 556.0,
'umacron' => 556.0,
'Ncaron' => 722.0,
205 => 389.0,
177 => 570.0,
166 => 220.0,
174 => 747.0,
'Gbreve' => 778.0,
'Idotaccent' => 389.0,
'summation' => 600.0,
200 => 667.0,
'racute' => 444.0,
'omacron' => 500.0,
'Zacute' => 667.0,
142 => 667.0,
'greaterequal' => 549.0,
208 => 722.0,
199 => 722.0,
'lcommaaccent' => 278.0,
'tcaron' => 416.0,
'eogonek' => 444.0,
'Uogonek' => 722.0,
193 => 722.0,
196 => 722.0,
232 => 444.0,
'zacute' => 444.0,
'iogonek' => 278.0,
211 => 778.0,
243 => 500.0,
'amacron' => 500.0,
'sacute' => 389.0,
239 => 278.0,
212 => 778.0,
217 => 722.0,
'Delta' => 612.0,
254 => 556.0,
178 => 300.0,
214 => 778.0,
181 => 556.0,
236 => 278.0,
'ohungarumlaut' => 500.0,
'Eogonek' => 667.0,
'dcroat' => 556.0,
190 => 750.0,
'Scedilla' => 556.0,
'lcaron' => 394.0,
'Kcommaaccent' => 778.0,
'Lacute' => 667.0,
153 => 1000.0,
'edotaccent' => 444.0,
204 => 389.0,
'Imacron' => 389.0,
'Lcaron' => 667.0,
189 => 750.0,
'lessequal' => 549.0,
244 => 500.0,
241 => 556.0,
'Uhungarumlaut' => 722.0,
201 => 667.0,
'emacron' => 444.0,
'gbreve' => 500.0,
188 => 750.0,
138 => 556.0,
'Scommaaccent' => 556.0,
'Ohungarumlaut' => 778.0,
176 => 400.0,
242 => 500.0,
'Ccaron' => 722.0,
249 => 556.0,
'radical' => 549.0,
'Dcaron' => 722.0,
'rcommaaccent' => 444.0,
209 => 722.0,
245 => 500.0,
'Rcommaaccent' => 722.0,
'Lcommaaccent' => 667.0,
195 => 722.0,
'Aogonek' => 722.0,
197 => 722.0,
213 => 778.0,
'zdotaccent' => 444.0,
'Ecaron' => 667.0,
'Iogonek' => 389.0,
'kcommaaccent' => 556.0,
'minus' => 570.0,
206 => 389.0,
'ncaron' => 556.0,
'tcommaaccent' => 333.0,
172 => 570.0,
246 => 500.0,
252 => 556.0,
'notequal' => 549.0,
'gcommaaccent' => 500.0,
240 => 500.0,
158 => 444.0,
'ncommaaccent' => 556.0,
185 => 300.0,
'imacron' => 278.0,
128 => 500.0,
),
'CIDtoGID_Compressed' => true,
'CIDtoGID' => 'eJwDAAAAAAE=',
'_version_' => 6,
);

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