large commit

This commit is contained in:
omair saleh
2021-08-18 06:02:14 +08:00
parent bdf3759dd5
commit 14cbcfd6f5
43 changed files with 965 additions and 158 deletions
@@ -15,11 +15,13 @@ use App\Classes\Modules\Companies\Processors\CreateCompanyModuleProcessor;
use App\Classes\Modules\Companies\DataTransferObjects\EmploymentObject;
use App\Classes\Modules\Companies\Services\ApprovesCompanyConnection;
use App\Classes\Modules\Companies\Services\CreatesCompanyConnection;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
use App\Classes\Modules\Documents\Processors\UploadIdentityDocumentProcessor;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Classes\ValueObjects\Constants\CompanyType;
use App\Classes\ValueObjects\Constants\RoleTypes;
use App\Models\Company;
@@ -115,9 +117,11 @@ class CreateCustomerLogic extends AbstractControllerLogic
$user = $this->createUserProcessor->execute($request, RoleTypes::USER, !App::environment(['production']) ? ApprovalStatus::APPROVED : ApprovalStatus::PENDING_VERIFICATION);
/** @var Company $company */
$company = $this->createCompanyProcessor->execute($request, $request->input('type'), ApprovalStatus::PENDING_SUBMISSION);
$company = $this->createCompanyProcessor->execute($request->input('type') === CompanyType::COMPANY_BUSINESS ? $request->input('company_name') : $request->input('name'), $request->input('type'), ApprovalStatus::PENDING_SUBMISSION);
$this->createContactProcessor->execute($request, $company);
$contactObject = new ContactObject($request->input('name'), $request->input('phone'), $request->input('contact_email'), $request->input('wechat_id'));
$this->createContactProcessor->execute($contactObject, $company);
/** @var CompanyModule $companyModule */
$companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::IMPORTER);
@@ -6,7 +6,6 @@ use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Companies\Processors\CreateCompanyProcessor;
use App\Classes\Modules\Companies\Processors\CreateCompanyModuleProcessor;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Classes\ValueObjects\Constants\CompanyType;
use App\Http\Resources\CompanyResource;
use App\Models\Company;
@@ -54,7 +53,7 @@ class CreateCompanyLogic extends AbstractControllerLogic
public function logic(Request $request) : JsonResponse
{
/** @var Company $company */
$company = $this->createCompanyProcessor->execute($request, $request->input('type'), ApprovalStatus::PENDING_SUBMISSION);
$company = $this->createCompanyProcessor->execute($request->input('type') === CompanyType::COMPANY_BUSINESS ? $request->input('company_name') : $request->input('name'), $request->input('type'), ApprovalStatus::PENDING_SUBMISSION);
$this->createCompanyModuleProcessor->execute($company , $request->input('business_type'));
@@ -42,7 +42,7 @@ class CreateCompanyProcessor
/**
* @param Request $request
* @param string $name
* @param int $companyType
* @param int|null $status
* @return Model
@@ -50,11 +50,9 @@ class CreateCompanyProcessor
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(Request $request, int $companyType = CompanyType::COMPANY_BUSINESS, ?int $status = ApprovalStatus::PENDING_SUBMISSION): Model {
public function execute(string $name, int $companyType = CompanyType::COMPANY_BUSINESS, ?int $status = ApprovalStatus::PENDING_SUBMISSION): Model {
$companyName = $companyType === CompanyType::COMPANY_BUSINESS ? $request->input('company_name') : $request->input('name');
$company_object = new CompanyObject($companyName, $this->generatesUniqueAccountNumber->execute(), $companyType, $status);
$company_object = new CompanyObject($name, $this->generatesUniqueAccountNumber->execute(), $companyType, $status);
$this->canCreateCompany->passes($company_object);
@@ -27,25 +27,18 @@ class CreateContactProcessor
}
/**
* @param Request $request
* @param ContactObject $object
* @param Company $company
* @return Model
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(Request $request, Company $company): Model
public function execute(ContactObject $object, Company $company): Model
{
$contact_object = new ContactObject(
$request->input('name'),
$request->input('phone'),
$request->input('contact_email'),
$request->input('wechat_id'),
);
$this->canCreateContact->passes($object);
$this->canCreateContact->passes($contact_object);
return $this->createsContact->execute($company,$contact_object);
return $this->createsContact->execute($company,$object);
}
}
@@ -2,6 +2,7 @@
namespace App\Classes\Modules\Documents\Processors;
use App\Classes\Modules\Companies\Services\UpdatesCompanyStatus;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
use App\Classes\Modules\Documents\Services\CreatesDocument;
use App\Classes\Modules\Documents\Services\CreatesFiles;
@@ -19,17 +20,22 @@ class UploadIdentityDocumentProcessor
/** @var CreatesDocument */
private $createsDocument;
/** @var UpdatesCompanyStatus */
private $updatesCompanyStatus;
/** @var CreatesFiles */
private $createsFiles;
/**
* UploadIdentityDocumentProcessor constructor.
* @param CreatesDocument $createsDocument
* @param UpdatesCompanyStatus $updatesCompanyStatus
* @param CreatesFiles $createsFiles
*/
public function __construct(CreatesDocument $createsDocument, CreatesFiles $createsFiles)
public function __construct(CreatesDocument $createsDocument, UpdatesCompanyStatus $updatesCompanyStatus, CreatesFiles $createsFiles)
{
$this->createsDocument = $createsDocument;
$this->updatesCompanyStatus = $updatesCompanyStatus;
$this->createsFiles = $createsFiles;
}
@@ -37,10 +43,9 @@ class UploadIdentityDocumentProcessor
/**
* @param Request $request
* @param Company $company
* @return array
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Request $request, Company $company): array {
public function execute(Request $request, Company $company) {
$object = new DocumentObject($company->type === CompanyType::COMPANY_BUSINESS ?
DocumentType::SSM_REGISTRATION : DocumentType::IDENTITY_CARD, $request->input('files'),
@@ -49,7 +54,9 @@ class UploadIdentityDocumentProcessor
/** @var Document $document */
$document = $this->createsDocument->execute($company, $object);
return $this->createsFiles->execute($document, $object);
$this->createsFiles->execute($document, $object);
$this->updatesCompanyStatus->execute($company, ApprovalStatus::PENDING_VERIFICATION);
}
}
@@ -0,0 +1,60 @@
<?php
namespace App\Classes\Modules\Orders\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Orders\Services\CancelsOrder;
use App\Classes\Modules\Orders\Services\FetchesOrder;
use App\Http\Resources\OrderResource;
use App\Models\Order;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CancelOrderLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Cancelled Order',
'message' => 'You have successfully cancelled an order'
];
}
/** @var CancelsOrder */
private $cancelsOrder;
/** @var FetchesOrder */
private $fetchesOrder;
/**
* CancelOrderLogic constructor.
* @param CancelsOrder $cancelsOrder
* @param FetchesOrder $fetchesOrder
*/
public function __construct(CancelsOrder $cancelsOrder, FetchesOrder $fetchesOrder)
{
$this->cancelsOrder = $cancelsOrder;
$this->fetchesOrder = $fetchesOrder;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request) : JsonResponse
{
/** @var Order $order */
$order = $this->fetchesOrder->execute(['id' => $request->route('id')]);
return $this->resourceResponse(new OrderResource($this->cancelsOrder->execute($order)));
}
}
@@ -0,0 +1,60 @@
<?php
namespace App\Classes\Modules\Orders\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Orders\Services\RestoresOrder;
use App\Classes\Modules\Orders\Services\FetchesOrder;
use App\Http\Resources\OrderResource;
use App\Models\Order;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class RestoreOrderLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Cancelled Order',
'message' => 'You have successfully cancelled an order'
];
}
/** @var RestoresOrder */
private $restoresOrder;
/** @var FetchesOrder */
private $fetchesOrder;
/**
* CancelOrderLogic constructor.
* @param RestoresOrder $restoresOrder
* @param FetchesOrder $fetchesOrder
*/
public function __construct(RestoresOrder $restoresOrder, FetchesOrder $fetchesOrder)
{
$this->restoresOrder = $restoresOrder;
$this->fetchesOrder = $fetchesOrder;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request) : JsonResponse
{
/** @var Order $order */
$order = $this->fetchesOrder->execute(['id' => $request->route('id')]);
return $this->resourceResponse(new OrderResource($this->restoresOrder->execute($order)));
}
}
@@ -0,0 +1,23 @@
<?php
namespace App\Classes\Modules\Orders\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Models\Order;
class CancelsOrder extends AbstractUpdateRecord
{
/**
* @param Order $model
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Order $model)
{
$model->status = ApprovalStatus::SUSPENDED;
return $this->handler($model);
}
}
@@ -0,0 +1,23 @@
<?php
namespace App\Classes\Modules\Orders\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Models\Order;
class RestoresOrder extends AbstractUpdateRecord
{
/**
* @param Order $model
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Order $model)
{
$model->status = $model->companyModule->company->status === ApprovalStatus::APPROVED ? ApprovalStatus::APPROVED : ApprovalStatus::PENDING_VERIFICATION;
return $this->handler($model);
}
}
@@ -2,53 +2,191 @@
namespace App\Classes\Modules\PackingLists\Processors;
use App\Classes\General\Services\GeneratesInitials;
use App\Classes\Modules\Accounts\Processors\CreateUserProcessor;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Classes\Modules\Addresses\Services\CreatesAddress;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyConnectionObject;
use App\Classes\Modules\Companies\Processors\CreateCompanyModuleProcessor;
use App\Classes\Modules\Companies\Processors\CreateCompanyProcessor;
use App\Classes\Modules\Companies\Services\ApprovesCompanyConnection;
use App\Classes\Modules\Companies\Services\CreatesCompanyConnection;
use App\Classes\Modules\Companies\Services\UpdatesCompanyStatus;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Classes\ValueObjects\Constants\CompanyType;
use App\Models\Company;
use App\Models\CompanyModule;
use App\Models\District;
use App\Models\OldAddress;
use App\Models\OldCompany;
use Carbon\Carbon;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Support\Facades\Cache;
use phpDocumentor\Reflection\Types\Collection;
use Psr\Http\Message\ResponseInterface;
class FetchWarehouseReceiveListFromVTPortalProcessor
{
/** @var CreateUserProcessor */
private $createUserProcessor;
/** @var CreateCompanyProcessor */
private $createCompanyProcessor;
/** @var UpdatesCompanyStatus*/
private $updatesCompanyStatus;
/** @var CreateCompanyModuleProcessor */
private $createCompanyModuleProcessor;
/** @var CreateContactProcessor */
private $createContactProcessor;
/** @var CreatesCompanyConnection */
private $createsCompanyConnection;
/** @var ApprovesCompanyConnection */
private $approvesCompanyConnection;
/** @var CreatesAddress */
private $createsAddress;
/**
* FetchWarehouseReceiveListFromVTPortalProcessor constructor.
* @param CreateUserProcessor $createUserProcessor
* @param CreateCompanyProcessor $createCompanyProcessor
* @param UpdatesCompanyStatus $updatesCompanyStatus
* @param CreateCompanyModuleProcessor $createCompanyModuleProcessor
* @param CreateContactProcessor $createContactProcessor
* @param CreatesCompanyConnection $createsCompanyConnection
* @param ApprovesCompanyConnection $approvesCompanyConnection
* @param CreatesAddress $createsAddress
*/
public function __construct(CreateUserProcessor $createUserProcessor, CreateCompanyProcessor $createCompanyProcessor, UpdatesCompanyStatus $updatesCompanyStatus, CreateCompanyModuleProcessor $createCompanyModuleProcessor, CreateContactProcessor $createContactProcessor, CreatesCompanyConnection $createsCompanyConnection, ApprovesCompanyConnection $approvesCompanyConnection, CreatesAddress $createsAddress)
{
$this->createUserProcessor = $createUserProcessor;
$this->createCompanyProcessor = $createCompanyProcessor;
$this->updatesCompanyStatus = $updatesCompanyStatus;
$this->createCompanyModuleProcessor = $createCompanyModuleProcessor;
$this->createContactProcessor = $createContactProcessor;
$this->createsCompanyConnection = $createsCompanyConnection;
$this->approvesCompanyConnection = $approvesCompanyConnection;
$this->createsAddress = $createsAddress;
}
/**
* @return string
* @throws GuzzleException
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(){
// $addresses = OldAddress::whereIn('id', [2, 3, 4, 9, 11, 12, 17, 18, 19, 22, 23, 27, 28, 30, 31, 33, 36, 38, 40, 42, 45, 50, 51, 52, 53, 54, 58, 59, 61, 67, 68, 70, 72, 78, 80, 82, 83, 85, 86, 89, 93, 94, 97, 100, 102, 103, 104, 106, 107, 111, 115, 120, 125, 126, 128, 130, 131, 132, 133, 134, 135, 136, 137, 140, 142, 144, 145, 155, 156, 159, 170, 172, 173, 175, 177, 178, 180, 181, 182, 183, 185, 186, 187, 190, 199, 200, 202, 204, 207, 210, 213, 214, 215, 217, 218, 220, 222, 228, 231, 232, 234, 237, 242, 244, 245, 251, 252, 255, 258, 259, 261, 262, 266, 268, 273, 274, 275, 278, 281, 282, 285, 287, 292, 294, 295, 296, 297, 299, 303, 306, 307, 308, 311, 315, 316, 317, 319, 320, 321, 328, 329, 330, 332, 333, 334, 336, 339, 341]);
$companies = OldCompany::has('orders')->get();
foreach($companies as $company){
$marking = explode("CIEF/", $company->marking);
if(count($marking) < 2){
continue;
}
/** @var Company $newCompany */
$newCompany = $this->createCompanyProcessor->execute($company->name, CompanyType::COMPANY_BUSINESS, ApprovalStatus::PENDING_SUBMISSION);
$this->updatesCompanyStatus->execute($newCompany, ApprovalStatus::APPROVED);
/** @var CompanyModule $companyModule */
$companyModule = $this->createCompanyModuleProcessor->execute($newCompany, BusinessType::IMPORTER);
$connectionObject = new CompanyConnectionObject($companyModule, 'CIEF', $marking[1]);
$connection = $this->createsCompanyConnection->execute($connectionObject);
$this->approvesCompanyConnection->execute($connection);
$i = 0;
foreach($company->addresses as $address){
if($address->street_one === '' && $address->street_two === ''){
continue;
}
if(!$address->post_code){
continue;
}
$district = District::where('postcode', 'like', '%'. $address->post_code .'%')->first();
if(!$district) {
continue;
}
$street_one = str_replace($district->name, '',str_replace($district->state->name, '', $address->street_one));
$street_two = str_replace($district->name, '',str_replace($district->state->name, '', $address->street_two));
$object = new AddressObject($street_one, $street_two, $district->country_id, $district->state_id, $district->id, $address->post_code, 'Business Address');
$this->createsAddress->execute($companyModule, $object);
if($address->contact){
$i++;
if($i === 1) {
$contactObject = new ContactObject('', $address->contact, $company->email, '',);
$this->createContactProcessor->execute($contactObject, $newCompany);
}
}
}
}
dd('done');
return '';
Cache::forget('VT_COOKIE_CACHE');
$loginRequest = $this->clientRequest('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"WarehouseList","view":"grid1","request":{"PageIndex":-1,"PageSize":1000,"SortExpression":"ModifiedOn DESC"}}'), '');
$loginRequest = $this->clientRequest('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"WarehouseList","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"ModifiedOn DESC"}}'), '');
$response = $this->getResponseBody($loginRequest);
$orders = [];
$unknown = 0;
foreach ($response->Rows as $parcel){
$marking = explode('/', explode('CIEF/', $parcel[5])[1]);
$customerMarking = $marking[0];
if(!array_key_exists(1, $marking)){
$unknown++;
echo "found and order without order number";
continue;
}
$orderNumber = $marking[1];
$ctn = $parcel[9];
if(!array_key_exists($customerMarking, $orders)){
$orders[$customerMarking] = [
$orderNumber => [
'ctn' => $ctn,
'cbm' => $parcel[10],
]
];
continue;
}
if($customerMarking === '2752CHG'){
if(!array_key_exists(1, $marking)){
$unknown++;
echo "found and order without order number";
continue;
}
$orderNumber = $marking[1];
$ctn = $parcel[9];
if(!array_key_exists($customerMarking, $orders)){
$orders[$customerMarking] = [
$orderNumber => [
'ctn' => $ctn,
'cbm' => $parcel[10],
]
];
continue;
}
//
if(!array_key_exists($orderNumber, $orders[$customerMarking])){
$orders[$customerMarking][$orderNumber]['ctn'] = 0;
$orders[$customerMarking][$orderNumber]['cbm'] = 0;
if(!array_key_exists($orderNumber, $orders[$customerMarking])){
$orders[$customerMarking][$orderNumber]['ctn'] = 0;
$orders[$customerMarking][$orderNumber]['cbm'] = 0;
}
$orders[$customerMarking][$orderNumber]['ctn'] += $ctn;
$orders[$customerMarking][$orderNumber]['cbm'] += $parcel[10];
}
$orders[$customerMarking][$orderNumber]['ctn'] += $ctn;
$orders[$customerMarking][$orderNumber]['cbm'] += $parcel[10];
// $orders[$customerMarking][$orderNumber]['cbm'] += $parcel[10];
// $orders[$customerMarking][$orderNumber]['ctn'] += $ctn;
// if(!$orders->contains($customerMarking)){
@@ -19,6 +19,7 @@ class FileType
'image/png' => 'png',
'image/jpeg' => 'jpeg',
'application/pdf' => 'pdf',
'application/octet-stream' => 'pdf',
];
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Orders;
use App\Classes\Modules\Orders\ControllersLogic\CancelOrderLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CancelOrderController
{
/**
* @param Request $request
* @param CancelOrderLogic $logic
* @return JsonResponse
*/
public function cancel(Request $request, CancelOrderLogic $logic): JsonResponse
{
return $logic->execute($request);
}
}
@@ -35,7 +35,7 @@ class DownloadOrderQrPdfController
'margin_top' => '40px',
]);
return $pdf->download('CIEF_ORDER_NO_'.$order->reference.'.pdf');
return $pdf->stream('CIEF_ORDER_NO_'.$order->reference.'.pdf');
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Orders;
use App\Classes\Modules\Orders\ControllersLogic\RestoreOrderLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class RestoreOrderController
{
/**
* @param Request $request
* @param RestoreOrderLogic $logic
* @return JsonResponse
*/
public function restore(Request $request, RestoreOrderLogic $logic): JsonResponse
{
return $logic->execute($request);
}
}
+1 -2
View File
@@ -34,8 +34,7 @@ class CompanyResource extends JsonResource
'employee' => new UserResource($companyModule->employees()->first()),
'company_module' => new CompanyModuleResource($companyModule),
'last_order' => new OrderResource($companyModule ? $companyModule->orders()->orderBy('id', 'DESC')->first(): null),
// 'employee' => new UserResource($this->employees->first()),
// 'identification' => new DocumentResource($this->documents->whereIn('document_type', DocumentType::IDENTIFICATION_DOCUMENTS)->first()),
'identification' => new DocumentResource($this->documents->whereIn('document_type', DocumentType::IDENTIFICATION_DOCUMENTS)->first()),
];
+18
View File
@@ -0,0 +1,18 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Relations\MorphTo;
class OldAddress extends Model
{
protected $connection = 'old_izyim_db';
protected $table = 'address_book';
}
+44
View File
@@ -0,0 +1,44 @@
<?php
namespace App\Models;
use App\Classes\General\Interfaces\Documentable;
use App\Classes\General\Interfaces\Contactable;
use App\Classes\Modules\ServiceTypes\DataTransferObjects\ServiceConfigurationsObject;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Classes\ValueObjects\Constants\SegmentConstants;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Database\Eloquent\Relations\MorphMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Collection;
class OldCompany extends Model
{
protected $connection = 'old_izyim_db';
protected $table = 'companies';
/**
* @return hasMany
*/
public function addresses(): hasMany
{
return $this->hasMany(OldAddress::class, 'reference_id', 'id')->where('type', '=', 1);
}
/**
* @return hasMany
*/
public function orders(): hasMany
{
return $this->hasMany(OldOrders::class, 'company_id', 'id');
}
}
+18
View File
@@ -0,0 +1,18 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Relations\MorphTo;
class OldOrders extends Model
{
protected $connection = 'old_izyim_db';
protected $table = 'orders';
}
+20
View File
@@ -63,6 +63,26 @@ return [
]) : [],
],
'old_izyim_db' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL_IZYIM'),
'host' => env('DB_HOST_IZYIM', '127.0.0.1'),
'port' => env('DB_PORT_IZYIM', '3306'),
'database' => env('DB_DATABASE_IZYIM', 'forge'),
'username' => env('DB_USERNAME_IZYIM', 'forge'),
'password' => env('DB_PASSWORD_IZYIM', ''),
'unix_socket' => env('DB_SOCKET_IZYIM', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
'pgsql' => [
'driver' => 'pgsql',
'url' => env('DATABASE_URL'),
+97 -5
View File
@@ -4,16 +4,24 @@ namespace Database\Seeders;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Classes\Modules\Addresses\Services\CreatesAddress;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyConnectionObject;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyObject;
use App\Classes\Modules\Companies\Processors\CreateCompanyModuleProcessor;
use App\Classes\Modules\Companies\Processors\CreateCompanyProcessor;
use App\Classes\Modules\Companies\Services\ApprovesCompanyConnection;
use App\Classes\Modules\Companies\Services\CreatesCompany;
use App\Classes\Modules\Companies\Services\CreatesCompanyConnection;
use App\Classes\Modules\Companies\Services\UpdatesCompanyStatus;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
use App\Classes\Modules\Contacts\Services\CreatesContact;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\CompanyType;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Models\CompanyModule;
use App\Models\District;
use App\Models\OldCompany;
use Illuminate\Database\Seeder;
use App\Models\Company;
@@ -21,30 +29,55 @@ use App\Models\Company;
class CompaniesTableSeeder extends Seeder
{
/** @var CreatesCompany */
private $createsCompany;
/** @var CreateCompanyProcessor */
private $createCompanyProcessor;
/** @var UpdatesCompanyStatus*/
private $updatesCompanyStatus;
/** @var CreateCompanyModuleProcessor */
private $createCompanyModuleProcessor;
/** @var CreateContactProcessor */
private $createContactProcessor;
/** @var CreatesCompanyConnection */
private $createsCompanyConnection;
/** @var ApprovesCompanyConnection */
private $approvesCompanyConnection;
/** @var CreatesAddress */
private $createsAddress;
/** @var CreatesCompany */
private $createsCompany;
/** @var CreatesContact */
private $createsContact;
/**
* CompaniesTableSeeder constructor.
* @param CreatesCompany $createsCompany
* @param CreateCompanyProcessor $createCompanyProcessor
* @param UpdatesCompanyStatus $updatesCompanyStatus
* @param CreateCompanyModuleProcessor $createCompanyModuleProcessor
* @param CreateContactProcessor $createContactProcessor
* @param CreatesCompanyConnection $createsCompanyConnection
* @param ApprovesCompanyConnection $approvesCompanyConnection
* @param CreatesAddress $createsAddress
* @param CreatesCompany $createsCompany
* @param CreatesContact $createsContact
*/
public function __construct(CreatesCompany $createsCompany, CreateCompanyModuleProcessor $createCompanyModuleProcessor, CreatesAddress $createsAddress, CreatesContact $createsContact)
public function __construct(CreateCompanyProcessor $createCompanyProcessor, UpdatesCompanyStatus $updatesCompanyStatus, CreateCompanyModuleProcessor $createCompanyModuleProcessor, CreateContactProcessor $createContactProcessor, CreatesCompanyConnection $createsCompanyConnection, ApprovesCompanyConnection $approvesCompanyConnection, CreatesAddress $createsAddress, CreatesCompany $createsCompany, CreatesContact $createsContact)
{
$this->createsCompany = $createsCompany;
$this->createCompanyProcessor = $createCompanyProcessor;
$this->updatesCompanyStatus = $updatesCompanyStatus;
$this->createCompanyModuleProcessor = $createCompanyModuleProcessor;
$this->createContactProcessor = $createContactProcessor;
$this->createsCompanyConnection = $createsCompanyConnection;
$this->approvesCompanyConnection = $approvesCompanyConnection;
$this->createsAddress = $createsAddress;
$this->createsCompany = $createsCompany;
$this->createsContact = $createsContact;
}
@@ -132,6 +165,65 @@ class CompaniesTableSeeder extends Seeder
}
}
$companies = OldCompany::all();
foreach($companies as $company){
$marking = explode("CIEF/", $company->marking);
if(count($marking) < 2){
continue;
}
/** @var Company $newCompany */
$newCompany = $this->createCompanyProcessor->execute($company->name, CompanyType::COMPANY_BUSINESS, ApprovalStatus::PENDING_SUBMISSION);
$this->updatesCompanyStatus->execute($newCompany, ApprovalStatus::APPROVED);
/** @var CompanyModule $companyModule */
$companyModule = $this->createCompanyModuleProcessor->execute($newCompany, BusinessType::IMPORTER);
$connectionObject = new CompanyConnectionObject($companyModule, 'CIEF', $marking[1]);
$connection = $this->createsCompanyConnection->execute($connectionObject);
$this->approvesCompanyConnection->execute($connection);
$i = 0;
foreach($company->addresses as $address){
if($address->street_one === '' && $address->street_two === ''){
continue;
}
if(!$address->post_code){
continue;
}
$district = District::where('postcode', 'like', '%'. $address->post_code .'%')->first();
if(!$district) {
continue;
}
$street_one = str_replace($district->name, '',str_replace($district->state->name, '', $address->street_one));
$street_two = str_replace($district->name, '',str_replace($district->state->name, '', $address->street_two));
$object = new AddressObject($street_one, $street_two, $district->country_id, $district->state_id, $district->id, $address->post_code, 'Business Address');
$this->createsAddress->execute($companyModule, $object);
if($address->contact){
$i++;
if($i === 1) {
$contactObject = new ContactObject('', preg_replace("/[^0-9.]/", "", $address->contact), $company->email, '',);
$this->createContactProcessor->execute($contactObject, $newCompany);
}
}
}
}
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 222 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

+4
View File
@@ -53,8 +53,12 @@
/* Tool Tip
--------------------------------------------------
*/
.tooltip .arrow {
top: 1px;
}
.tooltip-inner{
font-size: 12px;
padding: 10px;
}
/* Notification popup
+7
View File
@@ -28,6 +28,13 @@ import Avatar from 'vue-avatar';
Vue.use(vuelidate);
Vue.use(VueTheMask);
Vue.directive('closable', closable);
Vue.directive('tooltip', function(el, binding){
$(el).tooltip({
title: binding.value,
placement: binding.arg,
trigger: 'hover'
})
})
Vue.mixin({
methods: {
route: route
File diff suppressed because one or more lines are too long
@@ -67,7 +67,7 @@
</div>
</div>
</div>
<order-form-component v-show="$store.getters.isShowing('createOrderForm')" :company="company" section="orderListSection"></order-form-component>
<order-form-component v-show="$store.getters.isShowing('createOrderForm')" :company="company" :section="section"></order-form-component>
</div>
</div>
</template>
@@ -26,7 +26,7 @@
<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.svg" width="100" height="150">
<img src="/images/qr-box.svg" width="150" height="150">
</div>
</div>
<div class="row justify-content-center">
@@ -38,7 +38,7 @@
</div>
<div class="row">
<div class="col">
<p class="no-margin">Place an order with us, and send the QR Code label to your supplier to attach to your order's packages</p>
<p class="no-margin">Place an order with us, and send the QR Code label document to your supplier to attach to your order's packages</p>
</div>
</div>
</div>
@@ -4,6 +4,7 @@
<span v-if="object.type === 'minLength'">{{object.min}} characters</span>
<span v-if="object.type === 'minValue'">{{object.min}}</span>
<span v-if="object.type === 'sameAs'">{{object.eq}} field</span>
<span v-if="object.type === 'numeric'">this field only accepts numbers</span>
</small>
</div>
</template>
@@ -23,6 +24,7 @@
minLength: 'this field must have at least',
sameAs: 'this field must match the',
minValue: 'this field must at least be',
numeric: 'this field only accepts numbers',
},
}
},
@@ -1,11 +1,11 @@
<template>
<div class="row m-l-0 m-r-0 m-b-30">
<div class="row m-l-0 m-r-0 m-b-30 parentContainer">
<div class="col bg-white">
<div class="row align-items-center">
<div class="col no-padding">
<div class="row">
<div class="col">
<a :href="route('order.qr.download', item.id)">
<a :href="route('order.qr.download', item.id)" target="_blank">
<div class="peelable-corner overflow-hidden relative">
<img :src="'https://chart.googleapis.com/chart?chs=150x150&cht=qr&chl={id:'+item.id+'}'" class="w-100">
</div>
@@ -23,13 +23,13 @@
<div class="row m-b-5">
<div class="col">
<small class="fs-10 all-caps muted">Warehouse</small>
<h6 class="no-margin small">{{item.warehouse === 3 ? 'Guang Zhou' : 'Yiwu'}}</h6>
<h6 class="no-margin small">{{item.warehouse.id === 3 ? 'Guang Zhou' : 'Yiwu'}}</h6>
</div>
</div>
<div class="row m-b-5">
<div class="col">
<small class="fs-10 all-caps muted">Delivery Address</small>
<h6 class="no-margin small">{{item.address.reference}}</h6>
<h6 class="no-margin small">{{item.address.reference}} <i class="fa fa-info-circle m-l-5" v-tooltip:right="item.address.street_one+' '+(item.address.street_two ? item.address.street_two : '')+', '+ item.address.district.name+', '+item.address.post_code+' '+item.address.state.name+', '+item.address.country.name" ></i></h6>
</div>
</div>
</div>
@@ -55,9 +55,11 @@
<div class="row p-t-5 p-b-15 b-t b-grey">
<div class="col">
<div class="row">
<div class="col-auto">
<div class="col-auto" v-if="$store.getters.isAdmin">
<small class="fs-10 all-caps muted">Marking</small>
<h6 class="no-margin small">{{item.company_module.marking}}</h6>
<a :href="route('customer.profile', item.company_module.marking)">
<h6 class="no-margin small">{{item.company_module.marking}}</h6>
</a>
</div>
<div class="col">
<small class="fs-10 all-caps muted">Date</small>
@@ -94,23 +96,42 @@
<div class="absolute w-50" style="bottom: 32px; right: 15px;" key="1" v-if="expanded">
<div class="row">
<div class="col bg-master-lightest b-a b-grey">
<div class="row p-t-15 p-b-15 b-b b-grey pointer">
<div class="row p-t-15 p-b-15 b-b b-grey pointer requestModal" v-if="item.status !== 5" data-type="cancelOrder">
<div class="col">
<a :href="route('order.qr.download', item.id)" target="_blank">
<h6 class="light no-margin fs-13"><i class="fa fa-cloud-download m-r-10"></i>Download QR Cod PDF</h6>
</a>
<h6 class="light no-margin fs-13 text-danger"><i class="fa fa-times m-r-10"></i>Cancel Order</h6>
</div>
</div>
<div class="row p-t-15 p-b-15 b-b b-grey pointer requestModal" v-if="item.status === 5" data-type="restoreOrder">
<div class="col">
<h6 class="light no-margin fs-13 text-success"><i class="fa fa-history m-r-10"></i>Restore Order</h6>
</div>
</div>
<a :href="route('order.qr.download', item.id)" target="_blank">
<div class="row p-t-15 p-b-15 b-b b-grey pointer">
<div class="col">
<h6 class="light no-margin fs-13"><i class="fa fa-cloud-download m-r-10"></i>Download QR Cod PDF</h6>
</div>
</div>
</a>
</div>
</div>
</div>
</transition-component>
</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="cancelOrder">
<cancel-order-form-component :data="item" section="oderList" class="text-center"></cancel-order-form-component>
</modal-component>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="restoreOrder">
<restore-order-form-component :data="item" section="oderList" class="text-center"></restore-order-form-component>
</modal-component>
</div>
</template>
<script>
import componentHandler from '../../../general/mixins/componentHandler';
export default {
created(){
$('[data-toggle="tooltip"]').tooltip()
},
data(){
return {
expanded: false
@@ -31,7 +31,7 @@
</div>
<div class="row">
<div class="col">
<p class="no-margin bold">{{item.last_order.address.reference}}</p>
<p class="no-margin bold">{{item.last_order.address.reference}} <i class="fa fa-info-circle m-l-5" v-tooltip:right="item.last_order.address.street_one+' '+(item.last_order.address.street_two ? item.last_order.address.street_two : '')+', '+ item.last_order.address.district.name+', '+item.last_order.address.post_code+' '+item.last_order.address.state.name+', '+item.last_order.address.country.name" ></i></p>
</div>
</div>
</div>
@@ -42,7 +42,7 @@
</div>
</div>
</div>
<div class="col-sm-12 col-md mt-sm-3 mt-3 my-sm-0 ">
<div class="col-sm-12 col-md">
<div class="btn btn-sm btn-primary bg-primary-darker no-padding btn-rounded fs-12 no-border">
<div class="row align-items-center no-margin" @click="createOrder()">
<div class="col-auto" v-show="$store.getters.isLoading('quickOrderSection')" style="width: 172px; height: 20px;">
@@ -77,7 +77,7 @@
},
successHandler(){
this.$store.dispatch('reloadList', {'name': 'orderListSection'});
this.$store.dispatch('reloadList', {'name': 'PendingOrderListSection'});
this.$store.dispatch('reloadList', {'name': 'pendingOrderListSection'});
this.$store.dispatch('reloadList', {'name': 'activeOrderListSection'});
}
@@ -0,0 +1,41 @@
<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">Are you Sure?</h3>
<div class="fs-11">Are you sure you want to cancel this order?</div>
</div>
</div>
<div class="row">
<div class="col p-r-5">
<div class="btn btn-sm btn-success btn-block b-rad-none" data-dismiss="modal">Cancel</div>
</div>
<div class="col p-l-5">
<div class="btn btn-sm btn-danger btn-block b-rad-none" @click="submit(route('api.order.cancel', item.id), 'put', section, true, true)">Confirm</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import componentHandler from '../../../general/mixins/componentHandler';
import ModalFormHandler from '../../../general/mixins/modalFormHandler';
export default {
mixins: [componentHandler, ModalFormHandler],
methods: {
successHandler(){
this.closeModal();
this.$store.dispatch('reloadList', {'name': 'pendingOrderListSection'});
this.$store.dispatch('reloadList', {'name': 'activeOrderListSection'});
this.$store.dispatch('reloadList', {'name': 'cancelledOrderListSection'});
}
}
}
</script>
@@ -0,0 +1,41 @@
<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">Are you Sure?</h3>
<div class="fs-11">Are you sure you want to restore this order?</div>
</div>
</div>
<div class="row">
<div class="col p-r-5">
<div class="btn btn-sm btn-default btn-block b-rad-none" data-dismiss="modal">Cancel</div>
</div>
<div class="col p-l-5">
<div class="btn btn-sm btn-success btn-block b-rad-none" @click="submit(route('api.order.restore', item.id), 'put', section, true, true)">Restore</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import componentHandler from '../../../general/mixins/componentHandler';
import modalFormHandler from '../../../general/mixins/modalFormHandler';
export default {
mixins: [componentHandler, modalFormHandler],
methods: {
successHandler(){
this.closeModal();
this.$store.dispatch('reloadList', {'name': 'pendingOrderListSection'});
this.$store.dispatch('reloadList', {'name': 'activeOrderListSection'});
this.$store.dispatch('reloadList', {'name': 'cancelledOrderListSection'});
}
}
}
</script>
File diff suppressed because one or more lines are too long
@@ -6,7 +6,7 @@
<div class="row justify-content-end">
<div class="col">
<div class="row fs-12 text-center">
<div class="col p-t-20 p-b-20 bg-master-lighter tabButton active" tab-name="active">
<div class="col p-t-20 p-b-20 bg-master-lighter tabButton" :class="{'active': item ? item.status === 2 : true }" tab-name="active">
<div class="row justify-content-center m-b-5">
<div class="col-auto">
<svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px"
@@ -25,33 +25,7 @@
</div>
</div>
</div>
<div class="col col-md-2 ml-auto m-r-5 mr-md-1">
<div class="row justify-content-end">
<div class="col">
<div class="row fs-12 text-center">
<div class="col p-t-20 p-b-20 bg-master-lighter tabButton" tab-name="pending">
<div class="row justify-content-center m-b-5">
<div class="col-auto">
<svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px"
width="35" height="35"
viewBox="0 0 172 172"
style=" fill:#000000;"><g fill="none" fill-rule="nonzero" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-dasharray="" stroke-dashoffset="0" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode: normal"><path d="M0,172v-172h172v172z" fill="none"></path><g fill="#000000"><path d="M39.81699,21.5l-18.31699,22.89414v106.10586h129v-2.15v-103.95586l-18.31699,-22.89414zM41.88301,25.8h88.23398l13.75664,17.2h-47.12363v2.15c0,5.96338 -4.78662,10.75 -10.75,10.75c-5.96338,0 -10.75,-4.78662 -10.75,-10.75v-2.15h-47.12363zM25.8,47.3h45.58672c1.08865,7.23076 7.08802,12.9 14.61328,12.9c7.52526,0 13.52463,-5.66924 14.61328,-12.9h45.58672v98.9h-120.4zM86,68.8c-15.41089,0 -27.95,12.53911 -27.95,27.95c0,15.41089 12.53911,27.95 27.95,27.95c15.41089,0 27.95,-12.53911 27.95,-27.95c0,-15.41089 -12.53911,-27.95 -27.95,-27.95zM86,73.1c13.087,0 23.65,10.563 23.65,23.65c0,13.087 -10.563,23.65 -23.65,23.65c-13.087,0 -23.65,-10.563 -23.65,-23.65c0,-13.087 10.563,-23.65 23.65,-23.65zM85.96641,77.37061c-1.18576,0.01854 -2.13264,0.9936 -2.11641,2.17939v16.125l-7.73916,5.80332c-0.95086,0.71198 -1.1445,2.05998 -0.43252,3.01084c0.71198,0.95086 2.05998,1.1445 3.01084,0.43252l9.46084,-7.09668v-18.275c0.00796,-0.58115 -0.21968,-1.14076 -0.63105,-1.55134c-0.41137,-0.41057 -0.97142,-0.63714 -1.55255,-0.62806zM38.7,135.45c-1.18741,0 -2.15,0.96259 -2.15,2.15c0,1.18741 0.96259,2.15 2.15,2.15c1.18741,0 2.15,-0.96259 2.15,-2.15c0,-1.18741 -0.96259,-2.15 -2.15,-2.15zM47.3,135.45c-1.18741,0 -2.15,0.96259 -2.15,2.15c0,1.18741 0.96259,2.15 2.15,2.15c1.18741,0 2.15,-0.96259 2.15,-2.15c0,-1.18741 -0.96259,-2.15 -2.15,-2.15zM55.9,135.45c-1.18741,0 -2.15,0.96259 -2.15,2.15c0,1.18741 0.96259,2.15 2.15,2.15c1.18741,0 2.15,-0.96259 2.15,-2.15c0,-1.18741 -0.96259,-2.15 -2.15,-2.15zM64.5,135.45c-1.18741,0 -2.15,0.96259 -2.15,2.15c0,1.18741 0.96259,2.15 2.15,2.15c1.18741,0 2.15,-0.96259 2.15,-2.15c0,-1.18741 -0.96259,-2.15 -2.15,-2.15zM73.1,135.45c-1.18741,0 -2.15,0.96259 -2.15,2.15c0,1.18741 0.96259,2.15 2.15,2.15c1.18741,0 2.15,-0.96259 2.15,-2.15c0,-1.18741 -0.96259,-2.15 -2.15,-2.15zM81.7,135.45c-1.18741,0 -2.15,0.96259 -2.15,2.15c0,1.18741 0.96259,2.15 2.15,2.15c1.18741,0 2.15,-0.96259 2.15,-2.15c0,-1.18741 -0.96259,-2.15 -2.15,-2.15zM90.3,135.45c-1.18741,0 -2.15,0.96259 -2.15,2.15c0,1.18741 0.96259,2.15 2.15,2.15c1.18741,0 2.15,-0.96259 2.15,-2.15c0,-1.18741 -0.96259,-2.15 -2.15,-2.15zM98.9,135.45c-1.18741,0 -2.15,0.96259 -2.15,2.15c0,1.18741 0.96259,2.15 2.15,2.15c1.18741,0 2.15,-0.96259 2.15,-2.15c0,-1.18741 -0.96259,-2.15 -2.15,-2.15zM107.5,135.45c-1.18741,0 -2.15,0.96259 -2.15,2.15c0,1.18741 0.96259,2.15 2.15,2.15c1.18741,0 2.15,-0.96259 2.15,-2.15c0,-1.18741 -0.96259,-2.15 -2.15,-2.15zM116.1,135.45c-1.18741,0 -2.15,0.96259 -2.15,2.15c0,1.18741 0.96259,2.15 2.15,2.15c1.18741,0 2.15,-0.96259 2.15,-2.15c0,-1.18741 -0.96259,-2.15 -2.15,-2.15zM124.7,135.45c-1.18741,0 -2.15,0.96259 -2.15,2.15c0,1.18741 0.96259,2.15 2.15,2.15c1.18741,0 2.15,-0.96259 2.15,-2.15c0,-1.18741 -0.96259,-2.15 -2.15,-2.15zM133.3,135.45c-1.18741,0 -2.15,0.96259 -2.15,2.15c0,1.18741 0.96259,2.15 2.15,2.15c1.18741,0 2.15,-0.96259 2.15,-2.15c0,-1.18741 -0.96259,-2.15 -2.15,-2.15z"></path></g></g></svg>
<div class="absolute animate__animated animate__pulse animate__infinite " style="top: -3px;right: 13px;" v-if="$store.getters.isCompletedQueue('pendingOrderListSection')">
<i class="fa fa-circle fs-16 text-danger" v-show="$store.getters.getListData('pendingOrderListSection').length"></i>
</div>
</div>
</div>
<div class="row">
<div class="col">
<div class="fs-12 m-t-5 all-caps">Pending Verification</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-2 d-none d-md-inline m-r-5">
<div class="col-2 d-none ml-auto d-md-inline m-r-5">
<div class="row justify-content-end">
<div class="col">
<div class="row fs-12 text-center">
@@ -74,6 +48,32 @@
</div>
</div>
</div>
<div class="col col-md-3 mr-0 mr-md-1" >
<div class="row justify-content-end">
<div class="col">
<div class="row fs-12 text-center">
<div class="col p-t-20 p-b-20 bg-master-lighter tabButton" :class="{'active': item ? item.status !== 2 : false}" tab-name="pending">
<div class="row justify-content-center m-b-5">
<div class="col-auto">
<svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px"
width="35" height="35"
viewBox="0 0 172 172"
style=" fill:#000000;"><g fill="none" fill-rule="nonzero" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-dasharray="" stroke-dashoffset="0" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode: normal"><path d="M0,172v-172h172v172z" fill="none"></path><g fill="#000000"><path d="M39.81699,21.5l-18.31699,22.89414v106.10586h129v-2.15v-103.95586l-18.31699,-22.89414zM41.88301,25.8h88.23398l13.75664,17.2h-47.12363v2.15c0,5.96338 -4.78662,10.75 -10.75,10.75c-5.96338,0 -10.75,-4.78662 -10.75,-10.75v-2.15h-47.12363zM25.8,47.3h45.58672c1.08865,7.23076 7.08802,12.9 14.61328,12.9c7.52526,0 13.52463,-5.66924 14.61328,-12.9h45.58672v98.9h-120.4zM86,68.8c-15.41089,0 -27.95,12.53911 -27.95,27.95c0,15.41089 12.53911,27.95 27.95,27.95c15.41089,0 27.95,-12.53911 27.95,-27.95c0,-15.41089 -12.53911,-27.95 -27.95,-27.95zM86,73.1c13.087,0 23.65,10.563 23.65,23.65c0,13.087 -10.563,23.65 -23.65,23.65c-13.087,0 -23.65,-10.563 -23.65,-23.65c0,-13.087 10.563,-23.65 23.65,-23.65zM85.96641,77.37061c-1.18576,0.01854 -2.13264,0.9936 -2.11641,2.17939v16.125l-7.73916,5.80332c-0.95086,0.71198 -1.1445,2.05998 -0.43252,3.01084c0.71198,0.95086 2.05998,1.1445 3.01084,0.43252l9.46084,-7.09668v-18.275c0.00796,-0.58115 -0.21968,-1.14076 -0.63105,-1.55134c-0.41137,-0.41057 -0.97142,-0.63714 -1.55255,-0.62806zM38.7,135.45c-1.18741,0 -2.15,0.96259 -2.15,2.15c0,1.18741 0.96259,2.15 2.15,2.15c1.18741,0 2.15,-0.96259 2.15,-2.15c0,-1.18741 -0.96259,-2.15 -2.15,-2.15zM47.3,135.45c-1.18741,0 -2.15,0.96259 -2.15,2.15c0,1.18741 0.96259,2.15 2.15,2.15c1.18741,0 2.15,-0.96259 2.15,-2.15c0,-1.18741 -0.96259,-2.15 -2.15,-2.15zM55.9,135.45c-1.18741,0 -2.15,0.96259 -2.15,2.15c0,1.18741 0.96259,2.15 2.15,2.15c1.18741,0 2.15,-0.96259 2.15,-2.15c0,-1.18741 -0.96259,-2.15 -2.15,-2.15zM64.5,135.45c-1.18741,0 -2.15,0.96259 -2.15,2.15c0,1.18741 0.96259,2.15 2.15,2.15c1.18741,0 2.15,-0.96259 2.15,-2.15c0,-1.18741 -0.96259,-2.15 -2.15,-2.15zM73.1,135.45c-1.18741,0 -2.15,0.96259 -2.15,2.15c0,1.18741 0.96259,2.15 2.15,2.15c1.18741,0 2.15,-0.96259 2.15,-2.15c0,-1.18741 -0.96259,-2.15 -2.15,-2.15zM81.7,135.45c-1.18741,0 -2.15,0.96259 -2.15,2.15c0,1.18741 0.96259,2.15 2.15,2.15c1.18741,0 2.15,-0.96259 2.15,-2.15c0,-1.18741 -0.96259,-2.15 -2.15,-2.15zM90.3,135.45c-1.18741,0 -2.15,0.96259 -2.15,2.15c0,1.18741 0.96259,2.15 2.15,2.15c1.18741,0 2.15,-0.96259 2.15,-2.15c0,-1.18741 -0.96259,-2.15 -2.15,-2.15zM98.9,135.45c-1.18741,0 -2.15,0.96259 -2.15,2.15c0,1.18741 0.96259,2.15 2.15,2.15c1.18741,0 2.15,-0.96259 2.15,-2.15c0,-1.18741 -0.96259,-2.15 -2.15,-2.15zM107.5,135.45c-1.18741,0 -2.15,0.96259 -2.15,2.15c0,1.18741 0.96259,2.15 2.15,2.15c1.18741,0 2.15,-0.96259 2.15,-2.15c0,-1.18741 -0.96259,-2.15 -2.15,-2.15zM116.1,135.45c-1.18741,0 -2.15,0.96259 -2.15,2.15c0,1.18741 0.96259,2.15 2.15,2.15c1.18741,0 2.15,-0.96259 2.15,-2.15c0,-1.18741 -0.96259,-2.15 -2.15,-2.15zM124.7,135.45c-1.18741,0 -2.15,0.96259 -2.15,2.15c0,1.18741 0.96259,2.15 2.15,2.15c1.18741,0 2.15,-0.96259 2.15,-2.15c0,-1.18741 -0.96259,-2.15 -2.15,-2.15zM133.3,135.45c-1.18741,0 -2.15,0.96259 -2.15,2.15c0,1.18741 0.96259,2.15 2.15,2.15c1.18741,0 2.15,-0.96259 2.15,-2.15c0,-1.18741 -0.96259,-2.15 -2.15,-2.15z"></path></g></g></svg>
<div class="absolute animate__animated animate__pulse animate__infinite " style="top: -3px;right: 13px;" v-if="$store.getters.isCompletedQueue('pendingOrderListSection')">
<i class="fa fa-circle fs-16 text-danger" v-show="$store.getters.getListData('pendingOrderListSection').length"></i>
</div>
</div>
</div>
<div class="row">
<div class="col">
<div class="fs-12 m-t-5 all-caps">Pending Verification</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-2 d-none d-md-inline">
<div class="row justify-content-end">
<div class="col">
@@ -100,8 +100,55 @@
</div>
<div class="row no-margin">
<div class="col bg-master-lightest padding-30">
<div class="row tabsContainer tabContent hide" tab-name="pending">
<div class="row tabsContainer tabContent" :class="{'hide': item ? item.status === 2 : true, 'active': item ? item.status !== 2 : false}" tab-name="pending">
<div class="col">
<div class="row parentContainer" v-if="item ? item.status !== 2 && item.last_order : false">
<div class="col">
<div class="row no-margin align-items-end">
<div class="col-4 d-none d-md-inline">
<img src="/images/on-hold.png" class="w-100" alt="">
</div>
<div class="col">
<div class="row m-l-0">
<div class="col m-b-20" :class="[{'bg-danger-lighter': item.status !== 1}, {'bg-master-lighter': item.status === 1}]">
<div class="row align-items-center">
<div class="col-auto p-r-0 p-t-15 p-b-15">
<div class="icon-thumbnail fs-20 icon-35 btn-rounded" :class="[{'bg-danger-light': item.status !== 1}, {'bg-master-light': item.status === 1}]">
<i class="fa fs-20" :class="[{'fa-times': item.status !== 1}, {'text-white': item.status !== 1}, {'fa-spinner': item.status === 1}]"></i>
</div>
</div>
<div class="col p-l-0">
<div class="font-heading bold fs-10" :class="[{'text-danger': item.status !== 1}]">Identification Verification</div>
<div class="font-heading fs-10" :class="[{'text-danger': item.status !== 1}, {'muted': item.status === 1}]" v-text="item.status !== 1 ? 'Verification request rejected':'Approval in progress...'"></div>
</div>
</div>
<div class="row">
<div class="col p-b-15">
<div class="font-heading text-danger fs-10" v-if="item.status !== 1">Our warehouse will accept your parcel but your goods will be on hold for delivery until you have successfully verified your identity!</div>
<div class="font-heading fs-11" v-if="item.status === 1">Our warehouse will accept your parcel but your goods will be on hold for delivery until your identification is approved!</div>
</div>
</div>
<div class="row" v-if="item.status === 1">
<div class="col no-padding">
<div class="progress m-b-0">
<div class="progress-bar progress-bar-primary" style="width:75%"></div>
</div>
</div>
</div>
<div class="row" v-if="item.status !== 1">
<div class="col no-padding">
<button class="btn btn-sm btn-danger btn-block b-rad-none requestModal" data-type="identificationVerificationModal">Re-submit Identification</button>
</div>
</div>
<modal-component type="identificationVerificationModal" v-if="item.status !== 1">
<identification-verification-form-component section="orderListSection" :data="item"></identification-verification-form-component>
</modal-component>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col">
<div class="row">
@@ -117,7 +164,7 @@
</div>
</div>
</div>
<div class="row tabsContainer tabContent active" tab-name="active">
<div class="row tabsContainer tabContent" :class="{'hide': item ? item.status !== 2 : false, 'active': item ? item.status === 2 : true}" tab-name="active">
<div class="col">
<div class="row">
<div class="col">
+4
View File
@@ -4,6 +4,10 @@
@include('vendor/head')
</head>
<body class="horizontal-menu horizontal-app-menu bg-white overflow-hidden">
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-T3XCNMB"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->
<div id="app" style="min-height: 100%;">
@yield('content')
</div>
+15 -15
View File
@@ -31,10 +31,10 @@
<div class="col">
<div class="carousel-item active">
<div class="row">
<div class="col bg-white">
<div class="col">
<div class="row justify-content-center">
<div class="col-8">
<img class="w-100" src="https://image.freepik.com/free-vector/transportation-parcel-carton-box-container-qr-code-closed-parcel-box-package-paper-box-package-service_257312-49.jpg" alt="">
<div class="col">
<img class="w-100" src="{{asset('images/about_us.png')}}" alt="">
</div>
</div>
</div>
@@ -48,10 +48,10 @@
</div>
<div class="carousel-item">
<div class="row">
<div class="col bg-white">
<div class="col">
<div class="row justify-content-center">
<div class="col-8">
<img class="w-100" src="https://image.freepik.com/free-vector/transportation-parcel-carton-box-container-qr-code-closed-parcel-box-package-paper-box-package-service_257312-49.jpg" alt="">
<div class="col">
<img class="w-100" src="{{asset('images/What_we_provide.png')}}" alt="">
</div>
</div>
</div>
@@ -65,10 +65,10 @@
</div>
<div class="carousel-item">
<div class="row">
<div class="col bg-white">
<div class="col">
<div class="row justify-content-center">
<div class="col-8">
<img class="w-100" src="https://image.freepik.com/free-vector/transportation-parcel-carton-box-container-qr-code-closed-parcel-box-package-paper-box-package-service_257312-49.jpg" alt="">
<div class="col">
<img class="w-100" src="{{asset('images/Why_CIEF.png')}}" alt="">
</div>
</div>
</div>
@@ -82,10 +82,10 @@
</div>
<div class="carousel-item">
<div class="row">
<div class="col bg-white">
<div class="col">
<div class="row justify-content-center">
<div class="col-8">
<img class="w-100" src="https://image.freepik.com/free-vector/transportation-parcel-carton-box-container-qr-code-closed-parcel-box-package-paper-box-package-service_257312-49.jpg" alt="">
<div class="col">
<img class="w-100" src="{{asset('images/Vision.png')}}" alt="">
</div>
</div>
</div>
@@ -99,10 +99,10 @@
</div>
<div class="carousel-item">
<div class="row">
<div class="col bg-white">
<div class="col">
<div class="row justify-content-center">
<div class="col-8">
<img class="w-100" src="https://image.freepik.com/free-vector/transportation-parcel-carton-box-container-qr-code-closed-parcel-box-package-paper-box-package-service_257312-49.jpg" alt="">
<div class="col">
<img class="w-100" src="{{asset('images/Mission.png')}}" alt="">
</div>
</div>
</div>
+40 -7
View File
@@ -1,10 +1,17 @@
@extends('layouts.base_pdf')
@section('inner_content')
<table style="width: 100%; border-collapse:separate; border-spacing:0 20px;">
<style>
.scissors {
font-size: 30px;
position: absolute;
top: 47.1%;
}
</style>
<table style="width: 100%; border-spacing: 0;">
<tbody>
@for ($i = 0; $i < 2; $i++)
<tr style="padding-bottom: 2em;">
<td align="center" width="25%" style="border: 2px solid #000000; border-right: none">
<tr style="border-spacing: 2em;">
<td align="center" width="25%" style="border: 2px solid #000000; border-right: none;">
<table width="100%">
<tbody>
<tr align="center">
@@ -20,18 +27,17 @@
</tbody>
</table>
</td>
<td width="75%" style="border: 2px solid #000000; ">
<table style="border-spacing:20px 20px;">
<td width="75%" style="border: 2px solid #000000; border-left: none;">
<table style="border-spacing:10px 10px;">
<tbody>
<tr>
<td style="border-bottom: solid 2px #000000;">
<h1 style="margin-top: 0px !important; margin-bottom: 10px !important; font-size: 70px;">@if(strtolower($delivery_address->state->name) === 'sabah') SB/ @elseif(strtolower($delivery_address->state->name) === 'sarawak') SRW/ @endif CIEF/{{$marking}}/{{$order->reference}}</h1>
<h1 style="font-size: 50px; line-height: 70px">{{(strtolower($delivery_address->state->name) === 'sabah' || strtolower($delivery_address->state->name) === 'labuan') ? 'SB/' : (strtolower($delivery_address->state->name) === 'sarawak' ? 'SRW/':'')}}CIEF/{{$marking}}/{{$order->reference}}</h1>
</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->street_one.' '.$warehouse_address->street_two.' '.$warehouse_address->district->name.' '.$warehouse_address->state->name.' 邮编:'.$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>
</td>
@@ -40,6 +46,33 @@
</table>
</td>
</tr>
@if($i === 0)
<tr>
<td style="padding-top: 2em; padding-bottom: 2em;">
<table style="width: 100%;">
<tbody>
<tr>
<td style="position: relative; border-bottom: 2px dashed;">
<div class="scissors" style="left: 100px;">&#9986;</div>
</td>
</tr>
</tbody>
</table>
</td>
<td style="padding-top: 2em; padding-bottom: 2em;">
<table style="width: 100%;">
<tbody>
<tr>
<td style="position: relative; border-bottom: 2px dashed;">
<div class="scissors" style="left: 500px;">&#9986;</div>
<div class="scissors" style="left: 900px;">&#9986;</div>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
@endif
@endfor
</tbody>
</table>
+8
View File
@@ -1,3 +1,11 @@
<!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-T3XCNMB');</script>
<!-- End Google Tag Manager -->
<meta http-equiv="content-type" content="text/html;charset=UTF-8"/>
<meta charset="utf-8"/>
<title>IZYIM Shipping</title>
+2
View File
@@ -7,4 +7,6 @@ Route::group(['prefix' => 'order', 'as' => 'order.', 'namespace' => 'Orders'], f
Route::get('/list', 'ListOrdersController@list')->name('list');
Route::post('/create', 'CreateOrderController@create')->name('create');
Route::put('/confirm/{id}', 'ConfirmOrderController@confirm')->name('confirm');
Route::put('/cancel/{id}', 'CancelOrderController@cancel')->name('cancel');
Route::put('/restore/{id}', 'RestoreOrderController@restore')->name('restore');
});