diff --git a/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php b/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php index 3c11f4d9..5a166ae4 100644 --- a/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php +++ b/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php @@ -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); diff --git a/app/Classes/Modules/Companies/ControllersLogic/CreateCompanyLogic.php b/app/Classes/Modules/Companies/ControllersLogic/CreateCompanyLogic.php index 24a1bcf2..9fc8e8bd 100644 --- a/app/Classes/Modules/Companies/ControllersLogic/CreateCompanyLogic.php +++ b/app/Classes/Modules/Companies/ControllersLogic/CreateCompanyLogic.php @@ -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')); diff --git a/app/Classes/Modules/Companies/Processors/CreateCompanyProcessor.php b/app/Classes/Modules/Companies/Processors/CreateCompanyProcessor.php index b33a81ed..24fc3739 100644 --- a/app/Classes/Modules/Companies/Processors/CreateCompanyProcessor.php +++ b/app/Classes/Modules/Companies/Processors/CreateCompanyProcessor.php @@ -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); diff --git a/app/Classes/Modules/Contacts/Processors/CreateContactProcessor.php b/app/Classes/Modules/Contacts/Processors/CreateContactProcessor.php index e499878c..9e04a134 100644 --- a/app/Classes/Modules/Contacts/Processors/CreateContactProcessor.php +++ b/app/Classes/Modules/Contacts/Processors/CreateContactProcessor.php @@ -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); } } diff --git a/app/Classes/Modules/Documents/Processors/UploadIdentityDocumentProcessor.php b/app/Classes/Modules/Documents/Processors/UploadIdentityDocumentProcessor.php index 3d7978f5..6f8032b1 100644 --- a/app/Classes/Modules/Documents/Processors/UploadIdentityDocumentProcessor.php +++ b/app/Classes/Modules/Documents/Processors/UploadIdentityDocumentProcessor.php @@ -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); } } \ No newline at end of file diff --git a/app/Classes/Modules/Orders/ControllersLogic/CancelOrderLogic.php b/app/Classes/Modules/Orders/ControllersLogic/CancelOrderLogic.php new file mode 100644 index 00000000..9084ee92 --- /dev/null +++ b/app/Classes/Modules/Orders/ControllersLogic/CancelOrderLogic.php @@ -0,0 +1,60 @@ + '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))); + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/ControllersLogic/RestoreOrderLogic.php b/app/Classes/Modules/Orders/ControllersLogic/RestoreOrderLogic.php new file mode 100644 index 00000000..e1094faa --- /dev/null +++ b/app/Classes/Modules/Orders/ControllersLogic/RestoreOrderLogic.php @@ -0,0 +1,60 @@ + '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))); + + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Services/CancelsOrder.php b/app/Classes/Modules/Orders/Services/CancelsOrder.php new file mode 100644 index 00000000..93ba342d --- /dev/null +++ b/app/Classes/Modules/Orders/Services/CancelsOrder.php @@ -0,0 +1,23 @@ +status = ApprovalStatus::SUSPENDED; + + return $this->handler($model); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/Services/RestoresOrder.php b/app/Classes/Modules/Orders/Services/RestoresOrder.php new file mode 100644 index 00000000..48fb100d --- /dev/null +++ b/app/Classes/Modules/Orders/Services/RestoresOrder.php @@ -0,0 +1,23 @@ +status = $model->companyModule->company->status === ApprovalStatus::APPROVED ? ApprovalStatus::APPROVED : ApprovalStatus::PENDING_VERIFICATION; + + return $this->handler($model); + } +} \ No newline at end of file diff --git a/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php b/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php index 1fd7e0c2..4340b99e 100644 --- a/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php +++ b/app/Classes/Modules/PackingLists/Processors/FetchWarehouseReceiveListFromVTPortalProcessor.php @@ -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)){ diff --git a/app/Classes/ValueObjects/Constants/FileType.php b/app/Classes/ValueObjects/Constants/FileType.php index 8564643c..a1325ad3 100644 --- a/app/Classes/ValueObjects/Constants/FileType.php +++ b/app/Classes/ValueObjects/Constants/FileType.php @@ -19,6 +19,7 @@ class FileType 'image/png' => 'png', 'image/jpeg' => 'jpeg', 'application/pdf' => 'pdf', + 'application/octet-stream' => 'pdf', ]; } \ No newline at end of file diff --git a/app/Http/Controllers/Orders/CancelOrderController.php b/app/Http/Controllers/Orders/CancelOrderController.php new file mode 100644 index 00000000..9c50a457 --- /dev/null +++ b/app/Http/Controllers/Orders/CancelOrderController.php @@ -0,0 +1,20 @@ +execute($request); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Orders/DownloadOrderQrPdfController.php b/app/Http/Controllers/Orders/DownloadOrderQrPdfController.php index 9f93a08f..ae23bae0 100644 --- a/app/Http/Controllers/Orders/DownloadOrderQrPdfController.php +++ b/app/Http/Controllers/Orders/DownloadOrderQrPdfController.php @@ -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'); } } \ No newline at end of file diff --git a/app/Http/Controllers/Orders/RestoreOrderController.php b/app/Http/Controllers/Orders/RestoreOrderController.php new file mode 100644 index 00000000..04284ad6 --- /dev/null +++ b/app/Http/Controllers/Orders/RestoreOrderController.php @@ -0,0 +1,20 @@ +execute($request); + } +} \ No newline at end of file diff --git a/app/Http/Resources/CompanyResource.php b/app/Http/Resources/CompanyResource.php index 8b3bf458..f338d095 100644 --- a/app/Http/Resources/CompanyResource.php +++ b/app/Http/Resources/CompanyResource.php @@ -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()), ]; diff --git a/app/Models/OldAddress.php b/app/Models/OldAddress.php new file mode 100644 index 00000000..54c56bb8 --- /dev/null +++ b/app/Models/OldAddress.php @@ -0,0 +1,18 @@ +hasMany(OldAddress::class, 'reference_id', 'id')->where('type', '=', 1); + } + + /** + * @return hasMany + */ + public function orders(): hasMany + { + return $this->hasMany(OldOrders::class, 'company_id', 'id'); + } + +} diff --git a/app/Models/OldOrders.php b/app/Models/OldOrders.php new file mode 100644 index 00000000..48b39b83 --- /dev/null +++ b/app/Models/OldOrders.php @@ -0,0 +1,18 @@ + [ + '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'), diff --git a/database/seeders/CompaniesTableSeeder.php b/database/seeders/CompaniesTableSeeder.php index 53eae171..5199e829 100644 --- a/database/seeders/CompaniesTableSeeder.php +++ b/database/seeders/CompaniesTableSeeder.php @@ -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); + } + } + + + } + + + } } } diff --git a/resources/assets/images/Mission.png b/resources/assets/images/Mission.png new file mode 100644 index 00000000..a4a97b62 Binary files /dev/null and b/resources/assets/images/Mission.png differ diff --git a/resources/assets/images/Vision.png b/resources/assets/images/Vision.png new file mode 100644 index 00000000..9108383a Binary files /dev/null and b/resources/assets/images/Vision.png differ diff --git a/resources/assets/images/What_we_provide.png b/resources/assets/images/What_we_provide.png new file mode 100644 index 00000000..e6b0cb75 Binary files /dev/null and b/resources/assets/images/What_we_provide.png differ diff --git a/resources/assets/images/Why_CIEF.png b/resources/assets/images/Why_CIEF.png new file mode 100644 index 00000000..6969d777 Binary files /dev/null and b/resources/assets/images/Why_CIEF.png differ diff --git a/resources/assets/images/about_us.png b/resources/assets/images/about_us.png new file mode 100644 index 00000000..4b90c0c0 Binary files /dev/null and b/resources/assets/images/about_us.png differ diff --git a/resources/assets/images/on-hold.png b/resources/assets/images/on-hold.png new file mode 100644 index 00000000..53c5589c Binary files /dev/null and b/resources/assets/images/on-hold.png differ diff --git a/resources/assets/sass/modules/_notifications.scss b/resources/assets/sass/modules/_notifications.scss index 364a1f6b..8ba9e52a 100644 --- a/resources/assets/sass/modules/_notifications.scss +++ b/resources/assets/sass/modules/_notifications.scss @@ -53,8 +53,12 @@ /* Tool Tip -------------------------------------------------- */ +.tooltip .arrow { + top: 1px; +} .tooltip-inner{ font-size: 12px; + padding: 10px; } /* Notification popup diff --git a/resources/assets/vue/app.js b/resources/assets/vue/app.js index 192f9fb6..b81feb10 100644 --- a/resources/assets/vue/app.js +++ b/resources/assets/vue/app.js @@ -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 diff --git a/resources/assets/vue/components/companies/elements/CustomerProfileComponent.vue b/resources/assets/vue/components/companies/elements/CustomerProfileComponent.vue index ee93c900..4c033fac 100644 --- a/resources/assets/vue/components/companies/elements/CustomerProfileComponent.vue +++ b/resources/assets/vue/components/companies/elements/CustomerProfileComponent.vue @@ -1,41 +1,94 @@ diff --git a/resources/assets/vue/components/companies/sections/OnBoardingSectionComponent.vue b/resources/assets/vue/components/companies/sections/OnBoardingSectionComponent.vue index 4e2a8961..5f59a13d 100644 --- a/resources/assets/vue/components/companies/sections/OnBoardingSectionComponent.vue +++ b/resources/assets/vue/components/companies/sections/OnBoardingSectionComponent.vue @@ -26,7 +26,7 @@
- +
@@ -38,7 +38,7 @@
-

Place an order with us, and send the QR Code label to your supplier to attach to your order's packages

+

Place an order with us, and send the QR Code label document to your supplier to attach to your order's packages

diff --git a/resources/assets/vue/components/general/elements/ValidationErrorComponent.vue b/resources/assets/vue/components/general/elements/ValidationErrorComponent.vue index b389cb95..737e67c7 100644 --- a/resources/assets/vue/components/general/elements/ValidationErrorComponent.vue +++ b/resources/assets/vue/components/general/elements/ValidationErrorComponent.vue @@ -4,6 +4,7 @@ {{object.min}} characters {{object.min}} {{object.eq}} field + this field only accepts numbers @@ -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', }, } }, diff --git a/resources/assets/vue/components/orders/elements/OrderComponent.vue b/resources/assets/vue/components/orders/elements/OrderComponent.vue index 3ff06679..d87533f1 100644 --- a/resources/assets/vue/components/orders/elements/OrderComponent.vue +++ b/resources/assets/vue/components/orders/elements/OrderComponent.vue @@ -1,11 +1,11 @@ \ No newline at end of file diff --git a/resources/assets/vue/components/orders/forms/RestoreOrderFormComponent.vue b/resources/assets/vue/components/orders/forms/RestoreOrderFormComponent.vue new file mode 100644 index 00000000..5f59c9cc --- /dev/null +++ b/resources/assets/vue/components/orders/forms/RestoreOrderFormComponent.vue @@ -0,0 +1,41 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue index 98d0e357..a90125ce 100644 --- a/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderProfileSectionComponent.vue @@ -7,7 +7,7 @@
-
Delivery Address: {{order.address.reference}}
+
Delivery Address: {{order.address.reference}}
-
Warehouse: {{order.warehouse === 3 ? 'Guang Zhou' : 'Yiwu'}}
+
Warehouse: {{order.warehouse.id === 3 ? 'Guang Zhou' : 'Yiwu'}}
Order Date: {{order.created_at}}
+
Gentle reminder: You need to send the QR code to your supplier to print and stick on your packages, this QR code is required for us to identify your packages when they arrives at our warehouse!
- +
@@ -55,7 +62,7 @@
-
+
@@ -84,7 +91,7 @@ viewBox="0 0 172 172" style=" fill:#000000;">
-
+
@@ -113,7 +120,7 @@ viewBox="0 0 172 172" style=" fill:#000000;">
-
+
@@ -142,7 +149,7 @@ viewBox="0 0 172 172" style=" fill:#000000;">
-
+
diff --git a/resources/assets/vue/components/orders/sections/OrderSectionComponent.vue b/resources/assets/vue/components/orders/sections/OrderSectionComponent.vue index 5122b4d9..0ab7929b 100644 --- a/resources/assets/vue/components/orders/sections/OrderSectionComponent.vue +++ b/resources/assets/vue/components/orders/sections/OrderSectionComponent.vue @@ -6,7 +6,7 @@
-
+
-
-
-
-
-
-
-
- -
- -
-
-
-
-
-
Pending Verification
-
-
-
-
-
-
-
-
+
@@ -74,6 +48,32 @@
+
+
+
+
+
+
+
+ +
+ +
+
+
+
+
+
Pending Verification
+
+
+
+
+
+
+
@@ -100,8 +100,55 @@
-
+
+
+
+
+
+ +
+
+
+
+
+
+
+ +
+
+
+
Identification Verification
+
+
+
+
+
+
Our warehouse will accept your parcel but your goods will be on hold for delivery until you have successfully verified your identity!
+
Our warehouse will accept your parcel but your goods will be on hold for delivery until your identification is approved!
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+ + + +
+
+
+
+
+
@@ -117,7 +164,7 @@
-
+
diff --git a/resources/views/layouts/base.blade.php b/resources/views/layouts/base.blade.php index 626ba93b..40e53d6c 100644 --- a/resources/views/layouts/base.blade.php +++ b/resources/views/layouts/base.blade.php @@ -4,6 +4,10 @@ @include('vendor/head') + + +
@yield('content')
diff --git a/resources/views/layouts/base_login.blade.php b/resources/views/layouts/base_login.blade.php index 40bbf6f5..eca47351 100644 --- a/resources/views/layouts/base_login.blade.php +++ b/resources/views/layouts/base_login.blade.php @@ -31,10 +31,10 @@