diff --git a/app/Classes/General/Eloquent/Filters/TypeIn.php b/app/Classes/General/Eloquent/Filters/TypeIn.php new file mode 100644 index 00000000..3a064f7a --- /dev/null +++ b/app/Classes/General/Eloquent/Filters/TypeIn.php @@ -0,0 +1,20 @@ +whereIn('type', $value); + } + +} \ No newline at end of file diff --git a/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php b/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php index 9cb48b0f..327a3666 100644 --- a/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php +++ b/app/Classes/Modules/Accounts/ControllersLogic/CreateCustomerLogic.php @@ -15,6 +15,7 @@ use App\Classes\Modules\Companies\Processors\CreateCompanyModuleProcessor; use App\Classes\Modules\Companies\DataTransferObjects\EmploymentObject; use App\Classes\Modules\Companies\Services\ApprovesCompanyConnection; use App\Classes\Modules\Companies\Services\CreatesCompanyConnection; +use App\Classes\Modules\Companies\Services\FetchesCompanyModule; use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject; use App\Classes\Modules\Contacts\Processors\CreateContactProcessor; use App\Classes\Modules\Documents\Processors\UploadIdentityDocumentProcessor; @@ -76,6 +77,9 @@ class CreateCustomerLogic extends AbstractControllerLogic /** @var GenerateEmailVerificationAttemptProcessor */ private $generateEmailVerificationAttemptProcessor; + /** @var FetchesCompanyModule */ + private $fetchesCompanyModule; + /** * CreateCustomerLogic constructor. * @param CreateUserProcessor $createUserProcessor @@ -88,8 +92,9 @@ class CreateCustomerLogic extends AbstractControllerLogic * @param UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor * @param AuthenticationProcessor $authenticationProcessor * @param GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor + * @param FetchesCompanyModule $fetchesCompanyModule */ - public function __construct(CreateUserProcessor $createUserProcessor, CreateCompanyProcessor $createCompanyProcessor, CreateCompanyModuleProcessor $createCompanyModuleProcessor, CreateContactProcessor $createContactProcessor, CreatesCompanyConnection $createsCompanyConnection, ApprovesCompanyConnection $approvesCompanyConnection, AssignEmployeeProcessor $assignEmployeeProcessor, UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor, AuthenticationProcessor $authenticationProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor) + public function __construct(CreateUserProcessor $createUserProcessor, CreateCompanyProcessor $createCompanyProcessor, CreateCompanyModuleProcessor $createCompanyModuleProcessor, CreateContactProcessor $createContactProcessor, CreatesCompanyConnection $createsCompanyConnection, ApprovesCompanyConnection $approvesCompanyConnection, AssignEmployeeProcessor $assignEmployeeProcessor, UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor, AuthenticationProcessor $authenticationProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor, FetchesCompanyModule $fetchesCompanyModule) { $this->createUserProcessor = $createUserProcessor; $this->createCompanyProcessor = $createCompanyProcessor; @@ -101,6 +106,7 @@ class CreateCustomerLogic extends AbstractControllerLogic $this->uploadIdentityDocumentProcessor = $uploadIdentityDocumentProcessor; $this->authenticationProcessor = $authenticationProcessor; $this->generateEmailVerificationAttemptProcessor = $generateEmailVerificationAttemptProcessor; + $this->fetchesCompanyModule = $fetchesCompanyModule; } /** @@ -126,7 +132,9 @@ class CreateCustomerLogic extends AbstractControllerLogic /** @var CompanyModule $companyModule */ $companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::IMPORTER); - $connectionObject = new CompanyConnectionObject($companyModule, 'CIEF', mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate()); + $inviter = $this->fetchesCompanyModule->execute(['reference'=>'CIEF']); + + $connectionObject = new CompanyConnectionObject($companyModule, $inviter, mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate(), 'CIEF'); $connection = $this->createsCompanyConnection->execute($connectionObject); diff --git a/app/Classes/Modules/Accounts/Services/AuthenticationRedirect.php b/app/Classes/Modules/Accounts/Services/AuthenticationRedirect.php index b359108d..4222aaf8 100644 --- a/app/Classes/Modules/Accounts/Services/AuthenticationRedirect.php +++ b/app/Classes/Modules/Accounts/Services/AuthenticationRedirect.php @@ -2,6 +2,7 @@ namespace App\Classes\Modules\Accounts\Services; +use App\Classes\ValueObjects\Constants\BusinessType; use App\Classes\ValueObjects\Constants\RoleTypes; use App\Models\User; @@ -11,6 +12,11 @@ class AuthenticationRedirect public function url(User $user){ if($user->type === RoleTypes::USER){ + + if (in_array($user->companyModule()->first()->type, [BusinessType::ONLINE_SELLER, BusinessType::LAST_MILE_DELIVERY_AGENT])) { + return route('last_mile_delivery.dashboard'); + } + return route('dashboard'); } diff --git a/app/Classes/Modules/Accounts/Services/GeneratesAuthenticationToken.php b/app/Classes/Modules/Accounts/Services/GeneratesAuthenticationToken.php index b327e175..88645795 100644 --- a/app/Classes/Modules/Accounts/Services/GeneratesAuthenticationToken.php +++ b/app/Classes/Modules/Accounts/Services/GeneratesAuthenticationToken.php @@ -68,7 +68,9 @@ class GeneratesAuthenticationToken { $companyModule = $user->companyModule()->first(); $claims = array_merge($claims, [ - 'company_id' => $companyModule->company_id + 'company_id' => $companyModule->company_id, + 'company_module_id' => $companyModule->id, + 'company_module_type' => $companyModule->type ]); } diff --git a/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php index 91f5c42e..f019bab3 100644 --- a/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php +++ b/app/Classes/Modules/Addresses/ControllersLogic/CreateAddressLogic.php @@ -14,6 +14,7 @@ use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject; use App\Classes\Modules\Contacts\Processors\CreateContactProcessor; use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject; use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor; +use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Http\Resources\AddressResource; use App\Models\Address; use ErrorException; @@ -82,7 +83,7 @@ class CreateAddressLogic extends AbstractControllerLogic $district = $this->fetchesDistrict->execute(['id' => $request->input('district_id')]); - $object = new AddressObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'), $request->input('reference')); + $object = new AddressObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'), $request->input('type'), ApprovalStatus::APPROVED, $request->input('reference')); $this->canCreateAddress->passes($object); diff --git a/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php index 95b8bf64..94d960f6 100644 --- a/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php +++ b/app/Classes/Modules/Addresses/ControllersLogic/UpdateAddressLogic.php @@ -13,6 +13,8 @@ use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject; use App\Classes\Modules\Contacts\Processors\CreateContactProcessor; use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject; use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor; +use App\Classes\ValueObjects\Constants\AddressType; +use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Http\Resources\AddressResource; use App\Models\Address; use Illuminate\Http\JsonResponse; @@ -79,7 +81,7 @@ class UpdateAddressLogic extends AbstractControllerLogic { $district = $this->fetchesDistrict->execute(['id' => $request->input('district_id')]); - $object = new AddressObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'), $request->input('reference')); + $object = new AddressObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'), AddressType::DELIVERY, ApprovalStatus::APPROVED, $request->input('reference')); $this->canUpdateAddress->passes($object); diff --git a/app/Classes/Modules/Addresses/DataTransferObjects/AddressObject.php b/app/Classes/Modules/Addresses/DataTransferObjects/AddressObject.php index b4453c3a..f1d79e53 100644 --- a/app/Classes/Modules/Addresses/DataTransferObjects/AddressObject.php +++ b/app/Classes/Modules/Addresses/DataTransferObjects/AddressObject.php @@ -26,6 +26,12 @@ class AddressObject implements DataTransferObject /** @var int */ private $postCode; + /** @var int */ + private $type; + + /** @var int */ + private $status; + /** @var string|null */ private $reference; @@ -37,9 +43,11 @@ class AddressObject implements DataTransferObject * @param int $stateId * @param int $districtId * @param int $postCode + * @param int $type + * @param int $status * @param null|string $reference */ - public function __construct(string $streetOne, ?string $streetTwo, int $countryId, int $stateId, int $districtId, int $postCode, ?string $reference = null, ?int $status = ApprovalStatus::APPROVED) + public function __construct(string $streetOne, ?string $streetTwo, int $countryId, int $stateId, int $districtId, int $postCode, int $type, int $status, ?string $reference = null) { $this->streetOne = $streetOne; $this->streetTwo = $streetTwo; @@ -47,8 +55,9 @@ class AddressObject implements DataTransferObject $this->stateId = $stateId; $this->districtId = $districtId; $this->postCode = $postCode; - $this->reference = $reference; + $this->type = $type; $this->status = $status; + $this->reference = $reference; } /** @@ -100,11 +109,11 @@ class AddressObject implements DataTransferObject } /** - * @return null|string + * @return int */ - public function getReference(): ?string + public function getType(): int { - return $this->reference; + return $this->type; } /** @@ -115,5 +124,13 @@ class AddressObject implements DataTransferObject return $this->status; } + /** + * @return null|string + */ + public function getReference(): ?string + { + return $this->reference; + } + } \ No newline at end of file diff --git a/app/Classes/Modules/Addresses/Services/CleansOldAddress.php b/app/Classes/Modules/Addresses/Services/CleansOldAddress.php index 90fad41c..59463ad9 100644 --- a/app/Classes/Modules/Addresses/Services/CleansOldAddress.php +++ b/app/Classes/Modules/Addresses/Services/CleansOldAddress.php @@ -10,6 +10,8 @@ namespace App\Classes\Modules\Addresses\Services; use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject; +use App\Classes\ValueObjects\Constants\AddressType; +use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Models\District; use App\Models\OldAddress; @@ -31,7 +33,7 @@ class CleansOldAddress return null; } - return new AddressObject($this->cleanAddress($address->street_one, $district, $address->post_code), $this->cleanAddress($address->street_two, $district, $address->post_code), $district->country_id, $district->state_id, $district->id, $address->post_code, 'Delivery Address'); + return new AddressObject($this->cleanAddress($address->street_one, $district, $address->post_code), $this->cleanAddress($address->street_two, $district, $address->post_code), $district->country_id, $district->state_id, $district->id, $address->post_code, AddressType::DELIVERY, ApprovalStatus::APPROVED, 'Delivery Address'); } diff --git a/app/Classes/Modules/Addresses/Services/CreatesAddress.php b/app/Classes/Modules/Addresses/Services/CreatesAddress.php index b9f2716c..522b5d82 100644 --- a/app/Classes/Modules/Addresses/Services/CreatesAddress.php +++ b/app/Classes/Modules/Addresses/Services/CreatesAddress.php @@ -29,6 +29,7 @@ class CreatesAddress extends AbstractUpdateRelationshipRecord $model->district_id = $object->getDistrictId(); $model->postcode = $object->getPostCode(); $model->status = $object->getStatus(); + $model->type = $object->getType(); return $this->handler($addressable->addresses(), $model); diff --git a/app/Classes/Modules/Companies/DataTransferObjects/CompanyConnectionObject.php b/app/Classes/Modules/Companies/DataTransferObjects/CompanyConnectionObject.php index 300d76c5..d74a64c8 100644 --- a/app/Classes/Modules/Companies/DataTransferObjects/CompanyConnectionObject.php +++ b/app/Classes/Modules/Companies/DataTransferObjects/CompanyConnectionObject.php @@ -10,6 +10,9 @@ class CompanyConnectionObject implements DataTransferObject /** @var CompanyModule */ private $invitee; + + /** @var CompanyModule */ + private $inviter; /** @var string */ private $inviterReference; @@ -20,12 +23,14 @@ class CompanyConnectionObject implements DataTransferObject /** * CompanyConnectionObject constructor. * @param CompanyModule $invitee + * @param CompanyModule $inviter * @param string $inviterReference * @param string $inviteeReference */ - public function __construct(CompanyModule $invitee, string $inviterReference, string $inviteeReference) + public function __construct(CompanyModule $invitee, CompanyModule $inviter, string $inviteeReference, string $inviterReference) { $this->invitee = $invitee; + $this->inviter = $inviter; $this->inviterReference = $inviterReference; $this->inviteeReference = $inviteeReference; } @@ -38,6 +43,14 @@ class CompanyConnectionObject implements DataTransferObject return $this->invitee; } + /** + * @return CompanyModule + */ + public function getInviter(): CompanyModule + { + return $this->inviter; + } + /** * @return string */ diff --git a/app/Classes/Modules/Companies/Services/CreatesCompanyConnection.php b/app/Classes/Modules/Companies/Services/CreatesCompanyConnection.php index d5d11ecc..6095da18 100644 --- a/app/Classes/Modules/Companies/Services/CreatesCompanyConnection.php +++ b/app/Classes/Modules/Companies/Services/CreatesCompanyConnection.php @@ -30,10 +30,8 @@ class CreatesCompanyConnection extends AbstractUpdateRecord public function execute(CompanyConnectionObject $object) { - $companyModule = $this->fetchesCompany->execute(['id', 1])->companyModules()->first(); - $connection = new CompanyConnection(); - $connection->inviter_id = $companyModule->id; + $connection->inviter_id = $object->getInviter()->id; $connection->invitee_id = $object->getInvitee()->id; $connection->inviter_reference = $object->getInviterReference(); $connection->invitee_reference = $object->getInviteeReference(); diff --git a/app/Classes/Modules/Delivery/ControllersLogic/CancelDeliveryOrderLogic.php b/app/Classes/Modules/Delivery/ControllersLogic/CancelDeliveryOrderLogic.php new file mode 100644 index 00000000..e52c966b --- /dev/null +++ b/app/Classes/Modules/Delivery/ControllersLogic/CancelDeliveryOrderLogic.php @@ -0,0 +1,58 @@ + 'Cancelled Order', + 'message' => 'You have successfully cancelled an order' + ]; + } + + /** @var CancelsOrder */ + private $cancelsOrder; + + /** @var FetchesOrder */ + private $fetchesOrder; + + /** + * CancelDeliveryOrderLogic constructor. + * @param CancelsOrder $cancelsOrder + * @param FetchesOrder $fetchesOrder + */ + public function __construct(CancelsOrder $cancelsOrder, FetchesOrder $fetchesOrder) + { + $this->cancelsOrder = $cancelsOrder; + $this->fetchesOrder = $fetchesOrder; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\MalformedRequestException + */ + public function logic(Request $request): JsonResponse + { + + /** @var Order $order */ + $order = $this->fetchesOrder->execute(['id' => $request->route('id')]); + + return $this->resourceResponse(new DeliveryOrderResource($this->cancelsOrder->execute($order))); + + } +} diff --git a/app/Classes/Modules/Delivery/ControllersLogic/CreateDeliveryCustomerLogic.php b/app/Classes/Modules/Delivery/ControllersLogic/CreateDeliveryCustomerLogic.php new file mode 100644 index 00000000..521d88c5 --- /dev/null +++ b/app/Classes/Modules/Delivery/ControllersLogic/CreateDeliveryCustomerLogic.php @@ -0,0 +1,149 @@ + 'Created User', + 'message' => 'You have successfully created a new User' + ]; + } + + /** @var CreateUserProcessor */ + private $createUserProcessor; + + /** @var CreateCompanyProcessor */ + private $createCompanyProcessor; + + /** @var CreateCompanyModuleProcessor */ + private $createCompanyModuleProcessor; + + /** @var CreateContactProcessor */ + private $createContactProcessor; + + /** @var CreatesCompanyConnection */ + private $createsCompanyConnection; + + /** @var ApprovesCompanyConnection */ + private $approvesCompanyConnection; + + /** @var AssignEmployeeProcessor */ + private $assignEmployeeProcessor; + + /** @var UploadIdentityDocumentProcessor */ + private $uploadIdentityDocumentProcessor; + + /** @var AuthenticationProcessor */ + private $authenticationProcessor; + + /** @var GenerateEmailVerificationAttemptProcessor */ + private $generateEmailVerificationAttemptProcessor; + + /** @var FetchesCompanyModule */ + private $fetchesCompanyModule; + + /** + * CreateDeliveryCustomerLogic constructor. + * @param CreateUserProcessor $createUserProcessor + * @param CreateCompanyProcessor $createCompanyProcessor + * @param CreateCompanyModuleProcessor $createCompanyModuleProcessor + * @param CreateContactProcessor $createContactProcessor + * @param CreatesCompanyConnection $createsCompanyConnection + * @param ApprovesCompanyConnection $approvesCompanyConnection + * @param AssignEmployeeProcessor $assignEmployeeProcessor + * @param UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor + * @param AuthenticationProcessor $authenticationProcessor + * @param GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor + * @param FetchesCompanyModule $fetchesCompanyModule + */ + public function __construct(CreateUserProcessor $createUserProcessor, CreateCompanyProcessor $createCompanyProcessor, CreateCompanyModuleProcessor $createCompanyModuleProcessor, CreateContactProcessor $createContactProcessor, CreatesCompanyConnection $createsCompanyConnection, ApprovesCompanyConnection $approvesCompanyConnection, AssignEmployeeProcessor $assignEmployeeProcessor, UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor, AuthenticationProcessor $authenticationProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor, FetchesCompanyModule $fetchesCompanyModule) + { + $this->createUserProcessor = $createUserProcessor; + $this->createCompanyProcessor = $createCompanyProcessor; + $this->createCompanyModuleProcessor = $createCompanyModuleProcessor; + $this->createContactProcessor = $createContactProcessor; + $this->createsCompanyConnection = $createsCompanyConnection; + $this->approvesCompanyConnection = $approvesCompanyConnection; + $this->assignEmployeeProcessor = $assignEmployeeProcessor; + $this->uploadIdentityDocumentProcessor = $uploadIdentityDocumentProcessor; + $this->authenticationProcessor = $authenticationProcessor; + $this->generateEmailVerificationAttemptProcessor = $generateEmailVerificationAttemptProcessor; + $this->fetchesCompanyModule = $fetchesCompanyModule; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\AccessUnauthorisedException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request): JsonResponse + { + /** @var User $user */ + $user = $this->createUserProcessor->execute($request, RoleTypes::USER, !App::environment(['production']) ? ApprovalStatus::APPROVED : ApprovalStatus::PENDING_VERIFICATION); + + /** @var Company $company */ + $company = $this->createCompanyProcessor->execute($request->input('name'), CompanyType::PERSONAL_BUSINESS, ApprovalStatus::PENDING_SUBMISSION); + + $contactObject = new ContactObject($request->input('name'), $request->input('phone'), $request->input('contact_email'), $request->input('wechat_id')); + + $this->createContactProcessor->execute($contactObject, $company); + + /** @var CompanyModule $companyModule */ + $companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::ONLINE_SELLER); + + $inviter = $this->fetchesCompanyModule->execute(['reference'=>'LMD']); + + $connectionObject = new CompanyConnectionObject($companyModule, $inviter, mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate(), 'LMD'); + + $connection = $this->createsCompanyConnection->execute($connectionObject); + + $this->approvesCompanyConnection->execute($connection); + + $Object = new EmploymentObject($companyModule, $user); + + $this->assignEmployeeProcessor->execute($Object); + + return $this->response($this->authenticationProcessor->execute($request)); + } +} diff --git a/app/Classes/Modules/Delivery/ControllersLogic/CreateDeliveryOrderLogic.php b/app/Classes/Modules/Delivery/ControllersLogic/CreateDeliveryOrderLogic.php new file mode 100644 index 00000000..0c5af797 --- /dev/null +++ b/app/Classes/Modules/Delivery/ControllersLogic/CreateDeliveryOrderLogic.php @@ -0,0 +1,178 @@ + 'Created Order', + 'message' => 'You have successfully created a new Order' + ]; + } + + /** @var FetchesCompany */ + private $fetchesCompany; + + /** @var fetchesAddress */ + private $fetchesAddress; + + /** @var CanCreateOrder */ + private $canCreateOrder; + + /** @var CreatesOrder */ + private $createsOrder; + + /** @var CreatesAddress */ + private $createAddress; + + /** @var CreateContactProcessor */ + private $createContactProcessor; + + /** @var CreateRemarkProcessor */ + private $createRemarkProcessor; + + /** @var GeneratesOrderNumber */ + private $generatesOrderNumber; + + /** @var CreatesPackingList */ + private $createsPackingList; + + /** @var CreatesPackage */ + private $createsPackage; + + + /** + * CreateDeliveryOrderLogic constructor. + * @param FetchesCompany $fetchesCompany + * @param FetchesAddress $fetchesAddress + * @param CanCreateOrder $canCreateOrder + * @param CreatesOrder $createsOrder + * @param CreatesAddress $createAddress + * @param CreateContactProcessor $createContactProcessor + * @param CreateRemarkProcessor $createRemarkProcessor + * @param GeneratesOrderNumber $generatesOrderNumber + * @param CreatesPackingList $createsPackingList + * @param CreatesPackage $createPackage + */ + public function __construct(FetchesCompany $fetchesCompany, FetchesAddress $fetchesAddress, CanCreateOrder $canCreateOrder, CreatesOrder $createsOrder, CreatesAddress $createAddress, CreateContactProcessor $createContactProcessor, CreateRemarkProcessor $createRemarkProcessor, GeneratesOrderNumber $generatesOrderNumber, CreatesPackingList $createsPackingList, CreatesPackage $createsPackage) + { + $this->fetchesCompany = $fetchesCompany; + $this->fetchesAddress = $fetchesAddress; + $this->canCreateOrder = $canCreateOrder; + $this->createsOrder = $createsOrder; + $this->createAddress = $createAddress; + $this->createContactProcessor = $createContactProcessor; + $this->createRemarkProcessor = $createRemarkProcessor; + $this->generatesOrderNumber = $generatesOrderNumber; + $this->createsPackingList = $createsPackingList; + $this->createsPackage = $createsPackage; + } + + /** + * @param Request $request + * @return JsonResponse + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function logic(Request $request): JsonResponse + { + $company = $this->fetchesCompany->execute(['id' => $request->input('company_id')]); + + $senderAddress = $this->fetchesAddress->execute(['id' => $request->input('sender_address_id')]); + $deliveryAddress = $this->fetchesAddress->execute(['id' => $request->input('delivery_address_id')]); + + /** @var CompanyModule $companyModule */ + $companyModule = $company->companyModules()->where('type', BusinessType::ONLINE_SELLER)->first(); + + $orderObject = new OrderObject($this->generatesOrderNumber->execute(), OrderType::LAST_MILE_DELIVERY, ApprovalStatus::APPROVED); + + $this->canCreateOrder->passes($orderObject); + + /** @var Order $order */ + $order = $this->createsOrder->execute($companyModule, $orderObject); + + $senderAddressObject = new AddressObject($senderAddress->street_one, $senderAddress->street_two, $senderAddress->country_id, $senderAddress->state_id, $senderAddress->district_id, $senderAddress->postcode, $senderAddress->type, ApprovalStatus::APPROVED, $senderAddress->reference); + $deliveryAddressObject = new AddressObject($deliveryAddress->street_one, $deliveryAddress->street_two, $deliveryAddress->country_id, $deliveryAddress->state_id, $deliveryAddress->district_id, $deliveryAddress->postcode, $deliveryAddress->type, ApprovalStatus::APPROVED, $senderAddress->reference); + + /** @var Address $orderSenderAddress */ + $orderSenderAddress = $this->createAddress->execute($order, $senderAddressObject); + /** @var Address $orderDeliveryAddress */ + $orderDeliveryAddress = $this->createAddress->execute($order, $deliveryAddressObject); + + $senderContact = $senderAddress->contacts()->first(); + $deliveryContact = $deliveryAddress->contacts()->first(); + + $contactObject = new ContactObject($senderContact->reference, $senderContact->phone, '',''); + $this->createContactProcessor->execute($contactObject, $orderSenderAddress); + + $contactObject = new ContactObject($deliveryContact->reference, $deliveryContact->phone, '',''); + $this->createContactProcessor->execute($contactObject, $orderDeliveryAddress); + + $senderRemark = $senderAddress->remarks()->first(); + $deliveryRemark = $deliveryAddress->remarks()->first(); + + if ($senderRemark){ + $remarkObject = new RemarkObject($senderRemark->content, Auth()->user()->id); + + if($remarkObject->getContent()){ + $this->createRemarkProcessor->execute($orderSenderAddress, $remarkObject); + } + } + + if ($deliveryRemark){ + $remarkObject = new RemarkObject($deliveryRemark->content, Auth()->user()->id); + + if($remarkObject->getContent()){ + $this->createRemarkProcessor->execute($orderDeliveryAddress, $remarkObject); + } + } + + $packingListObject = new PackingListObject($order->reference, $companyModule->id, PackingListType::DELIVERY_PACKING_LIST, ApprovalStatus::PENDING_VERIFICATION); + + /** @var PackingList $packingList */ + $packingList = $this->createsPackingList->execute($packingListObject, $order); + + $packageObject = new PackageObject($request->input('packing_list.type'), $request->input('packing_list.description'), (float) 1, (float) 1, (float) 1, $request->input('packing_list.weight'), (float) $request->input('packing_list.quantity'), ApprovalStatus::APPROVED); + $this->createsPackage->execute($packageObject, $packingList); + + return $this->resourceResponse(new DeliveryOrderResource($order)); + + } +} diff --git a/app/Classes/Modules/Delivery/ControllersLogic/ListOrdersLogic.php b/app/Classes/Modules/Delivery/ControllersLogic/ListOrdersLogic.php new file mode 100644 index 00000000..ae51f1b2 --- /dev/null +++ b/app/Classes/Modules/Delivery/ControllersLogic/ListOrdersLogic.php @@ -0,0 +1,57 @@ + 'Retrieved Orders', + 'message' => 'You have successfully retrieved a list of Orders' + ]; + } + + /** @var CanListOrders */ + private $canListOrders; + + /** @var ListsOrders */ + private $listsOrders; + + /** + * ListOrdersLogic constructor. + * @param CanListOrders $canListOrders + * @param ListsOrders $listsOrders + */ + public function __construct(CanListOrders $canListOrders, ListsOrders $listsOrders) + { + $this->canListOrders = $canListOrders; + $this->listsOrders = $listsOrders; + } + + public function logic(Request $request) : JsonResponse + { + $this->canListOrders->passes(); + + $query = $this->listsOrders->execute(array_merge($this->listsOrders->deserializeFilters($request->input('filters')), ['with_parcels' => true, 'type_in' => [OrderType::LAST_MILE_DELIVERY]])); + + return $this->collectionResponse(DeliveryOrderResource::collection($query)); + + } + + + +} diff --git a/app/Classes/Modules/Exports/Services/ExportsDeliveryOrders.php b/app/Classes/Modules/Exports/Services/ExportsDeliveryOrders.php new file mode 100644 index 00000000..802cd3ef --- /dev/null +++ b/app/Classes/Modules/Exports/Services/ExportsDeliveryOrders.php @@ -0,0 +1,114 @@ +request = $request; + } + + public function headings(): array + { + return [ + 'Types_Of_Services', + 'Service_Type', + 'Sender_Name', + 'Sender_Company_Name', + 'Sender_Building_Unit', + 'Sender_Address', + 'Sender_Address_2', + 'Sender_Postal_Code', + 'Sender_Phone_Number', + 'Delivery_Name', + 'Delivery Company Name', + 'Delivery_Building_Unit', + 'Delivery_Address', + 'Delivery_Address_2', + 'Delivery_Postal_Code', + 'Delivery_Phone_Number', + 'Shipment_Type', + 'Mode', + 'Pickup_Address_Type', + 'Reference_Number', + 'Quantity', + 'Weight', + 'Length', + 'Width', + 'Height', + 'COD_Amount', + 'DO_Numbers' + ]; + } + + /** + * @return \Illuminate\Support\Collection|mixed + */ + public function query() + { + $selectedIds = array_map(function($value){ + return ['id' => $value]; + }, json_decode($this->request->input('ids'))); + + return Order::where('type', OrderType::LAST_MILE_DELIVERY)->whereIn('id', $selectedIds); + } + + /** + * @param Order $order + * + * @return array + */ + public function map($order): array + { + $senderAddress = $order->addresses()->where('type', AddressType::PICK_UP)->first(); + $deliveryAddress = $order->addresses()->where('type', AddressType::DELIVERY)->first(); + $package = $order->packingLists()->first()->packages()->first(); + + return [ + 'Domestic Shipment', + 'ST00000020', + $senderAddress->contacts()->first()->reference, + $order->companyModule->name, + '*', + $senderAddress->street_one.', '.$senderAddress->street_two.' '.$senderAddress->district->name.' '.$senderAddress->postcode.' '.$senderAddress->state->name.' '.$senderAddress->country->name, + '', + $senderAddress->postcode, + $senderAddress->contacts()->first()->phone, + $deliveryAddress->contacts()->first()->reference, + '', + '*', + $deliveryAddress->street_one.', '.$deliveryAddress->street_two.' '.$deliveryAddress->district->name.' '.$deliveryAddress->postcode.' '.$deliveryAddress->state->name.' '.$deliveryAddress->country->name, + '', + $deliveryAddress->postcode, + $deliveryAddress->contacts()->first()->phone, + $package->type === PackageType::CARTON ? 'Package' : ($package->type === PackageType::PALLET ? 'Pallet' : 'Documents'), + 'Pick Up', + 'Sender', + $order->reference, + $package->quantity, + $package->weight * $package->quantity, + 1, + 1, + 1, + '', + '' + ]; + } +} \ No newline at end of file diff --git a/app/Classes/Modules/Orders/ControllersLogic/ListOrdersLogic.php b/app/Classes/Modules/Orders/ControllersLogic/ListOrdersLogic.php index da0eb033..3096de9d 100644 --- a/app/Classes/Modules/Orders/ControllersLogic/ListOrdersLogic.php +++ b/app/Classes/Modules/Orders/ControllersLogic/ListOrdersLogic.php @@ -6,6 +6,7 @@ namespace App\Classes\Modules\Orders\ControllersLogic; use App\Classes\General\Abstracts\AbstractControllerLogic; use App\Classes\Modules\Orders\Services\ListsOrders; use App\Classes\Modules\Orders\Standards\Rules\CanListOrders; +use App\Classes\ValueObjects\Constants\OrderType; use App\Http\Resources\OrderResource; use ErrorException; use Illuminate\Http\JsonResponse; @@ -44,7 +45,7 @@ class ListOrdersLogic extends AbstractControllerLogic { $this->canListOrders->passes(); - $query = $this->listsOrders->execute(array_merge($this->listsOrders->deserializeFilters($request->input('filters')), ['with_parcels' => true])); + $query = $this->listsOrders->execute(array_merge($this->listsOrders->deserializeFilters($request->input('filters')), ['with_parcels' => true, 'type_in' => [OrderType::SHARED_CONTAINER, OrderType::DEDICATED_CONTAINER]])); return $this->collectionResponse(OrderResource::collection($query)); diff --git a/app/Classes/Modules/Orders/Processors/CreateOrderProcessor.php b/app/Classes/Modules/Orders/Processors/CreateOrderProcessor.php index 5a7c22eb..c427a20f 100644 --- a/app/Classes/Modules/Orders/Processors/CreateOrderProcessor.php +++ b/app/Classes/Modules/Orders/Processors/CreateOrderProcessor.php @@ -84,7 +84,7 @@ class CreateOrderProcessor /** @var Order $order */ $order = $this->createsOrder->execute($importer, $orderObject); - $addressObject = new AddressObject($address->street_one, $address->street_two, $address->country_id, $address->state_id, $address->district_id, $address->postcode,$address->reference); + $addressObject = new AddressObject($address->street_one, $address->street_two, $address->country_id, $address->state_id, $address->district_id, $address->postcode, $address->type, ApprovalStatus::APPROVED, $address->reference); /** @var Address $order_address */ $order_address = $this->createAddress->execute($order, $addressObject); diff --git a/app/Classes/Modules/Orders/Processors/RequestChangeOrderAddressProcessor.php b/app/Classes/Modules/Orders/Processors/RequestChangeOrderAddressProcessor.php index 81b31026..514aafca 100644 --- a/app/Classes/Modules/Orders/Processors/RequestChangeOrderAddressProcessor.php +++ b/app/Classes/Modules/Orders/Processors/RequestChangeOrderAddressProcessor.php @@ -8,6 +8,7 @@ use App\Classes\Modules\Addresses\Services\CreatesAddress; use App\Classes\Modules\Addresses\Services\FetchesAddress; use App\Classes\Modules\Addresses\Services\DeletesAddress; use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject; +use App\Classes\ValueObjects\Constants\AddressType; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject; use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject; @@ -76,7 +77,7 @@ class RequestChangeOrderAddressProcessor } $address = $this->fetchesAddress->execute(['id' => $request->get('address_id')]); - $addressObject = new AddressObject($address->street_one, $address->street_two, $address->country_id, $address->state_id, $address->district_id, $address->postcode, $address->reference, ApprovalStatus::PENDING_VERIFICATION); + $addressObject = new AddressObject($address->street_one, $address->street_two, $address->country_id, $address->state_id, $address->district_id, $address->postcode, AddressType::DELIVERY, ApprovalStatus::PENDING_VERIFICATION, $address->reference); $order_address = $this->createsAddress->execute($order, $addressObject); $contact = $address->contacts()->first(); diff --git a/app/Classes/ValueObjects/Constants/AddressType.php b/app/Classes/ValueObjects/Constants/AddressType.php index 4fdc3a29..614b9774 100644 --- a/app/Classes/ValueObjects/Constants/AddressType.php +++ b/app/Classes/ValueObjects/Constants/AddressType.php @@ -8,4 +8,6 @@ final class AddressType { public const DELIVERY = 2; + public const PICK_UP = 3; + } diff --git a/app/Classes/ValueObjects/Constants/BusinessType.php b/app/Classes/ValueObjects/Constants/BusinessType.php index 41c673c6..ec38450f 100644 --- a/app/Classes/ValueObjects/Constants/BusinessType.php +++ b/app/Classes/ValueObjects/Constants/BusinessType.php @@ -18,4 +18,7 @@ final class BusinessType { public const CURRENCY_VENDOR = 6; + public const ONLINE_SELLER = 7; + + public const LAST_MILE_DELIVERY_AGENT = 8; } diff --git a/app/Classes/ValueObjects/Constants/OrderType.php b/app/Classes/ValueObjects/Constants/OrderType.php index ca203697..6558edd1 100644 --- a/app/Classes/ValueObjects/Constants/OrderType.php +++ b/app/Classes/ValueObjects/Constants/OrderType.php @@ -8,4 +8,6 @@ final class OrderType { public const DEDICATED_CONTAINER = 1; + public const LAST_MILE_DELIVERY = 2; + } diff --git a/app/Classes/ValueObjects/Constants/PackageType.php b/app/Classes/ValueObjects/Constants/PackageType.php index c38ad962..7865473a 100644 --- a/app/Classes/ValueObjects/Constants/PackageType.php +++ b/app/Classes/ValueObjects/Constants/PackageType.php @@ -10,4 +10,6 @@ final class PackageType { public const OVER_WEIGHT = 2; + public const DOCUMENT = 3; + } diff --git a/app/Http/Controllers/Delivery/CancelDeliveryOrderController.php b/app/Http/Controllers/Delivery/CancelDeliveryOrderController.php new file mode 100644 index 00000000..6dd69aa6 --- /dev/null +++ b/app/Http/Controllers/Delivery/CancelDeliveryOrderController.php @@ -0,0 +1,20 @@ +execute($request); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Delivery/CreateDeliveryCustomerController.php b/app/Http/Controllers/Delivery/CreateDeliveryCustomerController.php new file mode 100644 index 00000000..6321d758 --- /dev/null +++ b/app/Http/Controllers/Delivery/CreateDeliveryCustomerController.php @@ -0,0 +1,20 @@ +execute($request); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Delivery/CreateDeliveryOrderController.php b/app/Http/Controllers/Delivery/CreateDeliveryOrderController.php new file mode 100644 index 00000000..c6ab0ba2 --- /dev/null +++ b/app/Http/Controllers/Delivery/CreateDeliveryOrderController.php @@ -0,0 +1,20 @@ +execute($request); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Delivery/ExportDeliveryOrdersToExcelController.php b/app/Http/Controllers/Delivery/ExportDeliveryOrdersToExcelController.php new file mode 100644 index 00000000..9121fe00 --- /dev/null +++ b/app/Http/Controllers/Delivery/ExportDeliveryOrdersToExcelController.php @@ -0,0 +1,33 @@ +headers->set('Authorization', 'Bearer '.$token); + } + + public function lineClear(Request $request){ + $exportsTransactions = new ExportsDeliveryOrders($request); + $response = $exportsTransactions->download('line-clear-export.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); + ob_end_clean(); + return $response; + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Delivery/ListOrdersController.php b/app/Http/Controllers/Delivery/ListOrdersController.php new file mode 100644 index 00000000..6106eb7e --- /dev/null +++ b/app/Http/Controllers/Delivery/ListOrdersController.php @@ -0,0 +1,22 @@ +execute($request); + } +} diff --git a/app/Http/Resources/CompanyResource.php b/app/Http/Resources/CompanyResource.php index 38459a35..8e27ab73 100644 --- a/app/Http/Resources/CompanyResource.php +++ b/app/Http/Resources/CompanyResource.php @@ -18,7 +18,7 @@ class CompanyResource extends JsonResource */ public function toArray($request) { - $companyModule = $this->companyModules()->where('type', '=', BusinessType::IMPORTER)->first(); + $companyModule = $this->companyModules()->first(); return [ 'id' => $this->id, 'hash_id' => Crypt::encryptString($this->id), @@ -30,8 +30,8 @@ class CompanyResource extends JsonResource 'contact' => new ContactResource ($this->when($this->has('contacts'), $this->contacts->first())), 'employee' => new UserResource($companyModule->employees()->first()), 'company_module' => new CompanyModuleResource($companyModule), - 'last_order' => new OrderResource($companyModule ? $companyModule->orders()->orderBy('id', 'DESC')->first(): null), - 'order_count' => $this->orders()->count(), + 'last_order' => $companyModule->type === 7 ? new DeliveryOrderResource($companyModule->orders()->orderBy('id', 'DESC')->first()) : new OrderResource($companyModule->orders()->orderBy('id', 'DESC')->first()), + 'order_count' => $companyModule->orders()->count(), 'identification' => new DocumentResource($this->documents->whereIn('document_type', DocumentType::IDENTIFICATION_DOCUMENTS)->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::APPROVED])->first()), 'created_at' => $this->created_at->format('d-m-Y') diff --git a/app/Http/Resources/DeliveryOrderResource.php b/app/Http/Resources/DeliveryOrderResource.php new file mode 100644 index 00000000..cc81bfad --- /dev/null +++ b/app/Http/Resources/DeliveryOrderResource.php @@ -0,0 +1,33 @@ + $this->id, + 'reference' => $this->reference, + 'type' => (int) $this->type, + 'status' => (int) $this->status, + 'company_module' => new CompanyModuleResource($this->companyModule), + 'sender_address' => new AddressResource($this->addresses()->where('status', '=', ApprovalStatus::APPROVED)->where('type', AddressType::PICK_UP)->first()), + 'delivery_address' => new AddressResource($this->addresses()->where('status', '=', ApprovalStatus::APPROVED)->where('type', AddressType::DELIVERY)->first()), + 'packingList' => new DeliveryPackingListResource($this->packingLists()->first()), + 'remarks' => RemarkResource::collection($this->remarks), + 'created_at' => $this->created_at->format('d-m-Y') + ]; + + } +} diff --git a/app/Http/Resources/DeliveryPackingListResource.php b/app/Http/Resources/DeliveryPackingListResource.php new file mode 100644 index 00000000..16e71caf --- /dev/null +++ b/app/Http/Resources/DeliveryPackingListResource.php @@ -0,0 +1,36 @@ +packages()->first(); + + return [ + 'id' => $this->id, + 'claimant_id' => $this->claimant_id, + 'reference' => $this->reference, + 'status' => $this->status, + 'transport' => new TransportResource($this->transports()->first()), + 'type' => $package->type, + 'description' => $package->description, + 'weight' => (float) $package->weight, + 'quantity' => (float) $package->quantity, + ]; + } +} diff --git a/app/Models/Addon.php b/app/Models/Addon.php new file mode 100644 index 00000000..68118643 --- /dev/null +++ b/app/Models/Addon.php @@ -0,0 +1,36 @@ +morphTo(); + } +} diff --git a/app/Models/Order.php b/app/Models/Order.php index 5011fd36..352f46fb 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -58,6 +58,14 @@ class Order extends AbstractModel implements Addressable, Packable, Remarkable, return $this->morphMany(PackingList::class, 'owner'); } + /** + * @return MorphMany + */ + public function addons(): morphMany + { + return $this->morphMany(Addon::class, 'owner'); + } + /** * @return MorphMany */ diff --git a/app/Models/PackingList.php b/app/Models/PackingList.php index a6fd95e5..1ca19f1d 100644 --- a/app/Models/PackingList.php +++ b/app/Models/PackingList.php @@ -36,6 +36,14 @@ class PackingList extends AbstractModel implements Transportable, Steppable, Pac return $this->morphTo(); } + /** + * @return MorphMany + */ + public function addons(): morphMany + { + return $this->morphMany(Addon::class, 'owner'); + } + public function containers(): BelongsToMany { return $this->BelongsToMany(Container::class, ContainerPackingList::class); diff --git a/database/migrations/2022_03_14_133555_create_addons_table.php b/database/migrations/2022_03_14_133555_create_addons_table.php new file mode 100644 index 00000000..4b58535c --- /dev/null +++ b/database/migrations/2022_03_14_133555_create_addons_table.php @@ -0,0 +1,37 @@ +id(); + $table->morphs('owner'); + $table->string('reference',200); + $table->integer('type')->default(0); + $table->integer('quantity')->default(1); + $table->integer('status')->default(0); + $table->softDeletes(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('order_addons'); + } +} diff --git a/database/seeders/CompaniesTableSeeder.php b/database/seeders/CompaniesTableSeeder.php index da6c1061..bcabe9a0 100644 --- a/database/seeders/CompaniesTableSeeder.php +++ b/database/seeders/CompaniesTableSeeder.php @@ -16,6 +16,7 @@ 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\AddressType; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\CompanyType; use App\Classes\ValueObjects\Constants\BusinessType; @@ -112,7 +113,7 @@ class CompaniesTableSeeder extends Seeder /** @var CompanyModule $companyModule */ $companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::FREIGHT_FORWARDER); - $address = new AddressObject('Malaysian Global Innovation & Creativity Center Level 1 CWS', 'Block 3730,Persiaran APEC', 1, 15, 402, 63000); + $address = new AddressObject('Malaysian Global Innovation & Creativity Center Level 1 CWS', 'Block 3730,Persiaran APEC', 1, 15, 402, 63000, AddressType::BILLING, ApprovalStatus::APPROVED); $this->createsAddress->execute($companyModule, $address); $contact = new ContactObject('Office Number', '0182909252', '', ''); @@ -131,22 +132,22 @@ class CompaniesTableSeeder extends Seeder if ($name === 'Guangzhou'){ $companyModule->update(['name' => $name, 'reference' => 'GZ-V01']); - $address = new AddressObject('白云区,大朗南路 白云湖大道自编13号 7号仓库', '高德地图导航:广州市世通行', 2, 35, 633, 510450); + $address = new AddressObject('白云区,大朗南路 白云湖大道自编13号 7号仓库', '高德地图导航:广州市世通行', 2, 35, 633, 510450, AddressType::DELIVERY, ApprovalStatus::APPROVED); $contact = new ContactObject('杨维民', '13600055019', '', ''); } elseif ($name === 'Yiwu') { $companyModule->update(['name' => $name, 'reference' => 'YW-V01']); - $address = new AddressObject('义乌市诚信大道义乌港A区2楼194号', '', 2, 27, 532, 322000); + $address = new AddressObject('义乌市诚信大道义乌港A区2楼194号', '', 2, 27, 532, 322000, AddressType::DELIVERY, ApprovalStatus::APPROVED); $contact = new ContactObject('小曾', '13575982901', '', ''); } elseif ($name === 'Klang') { $companyModule->update(['name' => $name, 'reference' => 'KL-V01']); - $address = new AddressObject('LOT 1357 A, JALAN TANJUNG SHAWAL', 'KAMPUNG SUNGAI PINANG', 1, 15, 412, 41400); + $address = new AddressObject('LOT 1357 A, JALAN TANJUNG SHAWAL', 'KAMPUNG SUNGAI PINANG', 1, 15, 412, 41400, AddressType::DELIVERY, ApprovalStatus::APPROVED); $contact = new ContactObject('Mr. Yang', '0162237680', '', ''); } elseif ($name === 'Sabah') { $companyModule->update(['name' => $name, 'reference' => 'SB-V01']); - $address = new AddressObject('Warehouse A & B, No. 2, Lorong Kacang Tanah 1', 'Jalan Kolombong, Kolombong', 1, 13, 316, 88450); + $address = new AddressObject('Warehouse A & B, No. 2, Lorong Kacang Tanah 1', 'Jalan Kolombong, Kolombong', 1, 13, 316, 88450, AddressType::DELIVERY, ApprovalStatus::APPROVED); } elseif ($name === 'Sarawak') { $companyModule->update(['name' => $name, 'reference' => 'SRW-V01']); - $address = new AddressObject('OPPOSITE HT POLE 51, LT 664 JALAN SUNGAI SALIM', '', 1, 14, 381, 96000); + $address = new AddressObject('OPPOSITE HT POLE 51, LT 664 JALAN SUNGAI SALIM', '', 1, 14, 381, 96000, AddressType::DELIVERY, ApprovalStatus::APPROVED); } @@ -161,7 +162,7 @@ class CompaniesTableSeeder extends Seeder /** @var CompanyModule $companyModule */ $companyModule = $this->createCompanyModuleProcessor->execute($company, $businessType); - $address = new AddressObject('2, Jalan TSB 6, Taman Industri Sungai Buloh', '', 1, 15, 419, 47000); + $address = new AddressObject('2, Jalan TSB 6, Taman Industri Sungai Buloh', '', 1, 15, 419, 47000, AddressType::BILLING, ApprovalStatus::APPROVED); $this->createsAddress->execute($companyModule, $address); $contact = new ContactObject('Office Number', '036148 8108', '', ''); diff --git a/database/seeders/LastMileDeliveryTableSeeder.php b/database/seeders/LastMileDeliveryTableSeeder.php new file mode 100644 index 00000000..4a79803b --- /dev/null +++ b/database/seeders/LastMileDeliveryTableSeeder.php @@ -0,0 +1,147 @@ +createCompanyProcessor = $createCompanyProcessor; + $this->updatesCompanyStatus = $updatesCompanyStatus; + $this->createCompanyModuleProcessor = $createCompanyModuleProcessor; + $this->createContactProcessor = $createContactProcessor; + $this->createsCompanyConnection = $createsCompanyConnection; + $this->approvesCompanyConnection = $approvesCompanyConnection; + $this->createAddressFromOldAddressProcessor = $createAddressFromOldAddressProcessor; + $this->createsAddress = $createsAddress; + $this->createsCompany = $createsCompany; + $this->createsContact = $createsContact; + $this->createsUser = $createsUser; + $this->assignEmployeeProcessor = $assignEmployeeProcessor; + } + + + /** + * Run the database seeds. + * + * @return void + * @throws \App\Classes\Exceptions\AccessForbiddenException + * @throws \App\Classes\Exceptions\MalformedRequestException + * @throws \App\Classes\Exceptions\RequestValidationException + */ + public function run() + { + + $companies = [ + new CompanyObject('Last Mile Delivery', 'LMD', CompanyType::COMPANY_BUSINESS, ApprovalStatus::APPROVED), + ]; + + + foreach ($companies as $companyObject) { + + /** @var Company $company */ + $company = $this->createsCompany->execute($companyObject); + + /** @var CompanyModule $companyModule */ + $companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::LAST_MILE_DELIVERY_AGENT); + + $address = new AddressObject('Malaysian Global Innovation & Creativity Center Level 1 CWS', 'Block 3730,Persiaran APEC', 1, 15, 402, 63000, AddressType::BILLING, ApprovalStatus::APPROVED); + $this->createsAddress->execute($companyModule, $address); + + $contact = new ContactObject('Office Number', '0182909252', '', ''); + $this->createsContact->execute($companyModule, $contact); + + $user_object = new RegistrationObject('Winson', 'admin@last-mile-delivery.com', '1234567abcabc', '1234567abcabc', RoleTypes::USER, ApprovalStatus::APPROVED); + + /** @var User $user */ + $user = $this->createsUser->execute($user_object); + + $Object = new EmploymentObject($companyModule, $user); + $this->assignEmployeeProcessor->execute($Object); + + continue; + + } + } +} diff --git a/database/seeders/ModernWarehouseTableSeeder.php b/database/seeders/ModernWarehouseTableSeeder.php index 7f76fd2e..2d97241d 100644 --- a/database/seeders/ModernWarehouseTableSeeder.php +++ b/database/seeders/ModernWarehouseTableSeeder.php @@ -17,6 +17,7 @@ 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\AddressType; use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\CompanyType; use App\Classes\ValueObjects\Constants\BusinessType; @@ -106,7 +107,7 @@ class ModernWarehouseTableSeeder extends Seeder $companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::WAREHOUSE); $companyModule->update(['name' => 'Yiwu', 'reference' => 'YW-V02']); - $address = new AddressObject('义乌市 后宅街道 起航路233号百汇科创园园区里面', '(进口处进来第一个路口左转至出口处右手边国际物流仓库)', 2, 27, 532, 322000); + $address = new AddressObject('义乌市 后宅街道 起航路233号百汇科创园园区里面', '(进口处进来第一个路口左转至出口处右手边国际物流仓库)', 2, 27, 532, 322000, AddressType::BILLING, ApprovalStatus::APPROVED); $contact = new ContactObject('韩成名', '18058489899 / 18058929899', '', ''); $this->createsAddress->execute($companyModule, $address); diff --git a/resources/assets/images/cief-logo-white.png b/resources/assets/images/cief-logo-white.png new file mode 100644 index 00000000..12dd6440 Binary files /dev/null and b/resources/assets/images/cief-logo-white.png differ diff --git a/resources/assets/images/lineclear.png b/resources/assets/images/lineclear.png new file mode 100644 index 00000000..3a71fc9f Binary files /dev/null and b/resources/assets/images/lineclear.png differ diff --git a/resources/assets/vue/components/accounts/elements/LogoutComponent.vue b/resources/assets/vue/components/accounts/elements/LogoutComponent.vue index a3d65272..1236d117 100644 --- a/resources/assets/vue/components/accounts/elements/LogoutComponent.vue +++ b/resources/assets/vue/components/accounts/elements/LogoutComponent.vue @@ -67,11 +67,11 @@ this.submit(this.route('api.account.authentication.logout'), 'get', this.section, false, false) }, successHandler(){ - this.$store.dispatch('userAuthentication', {access_token: '', redirect_url: this.route('login')}); + this.$store.dispatch('userAuthentication', {access_token: '', redirect_url: [7, 8].includes(this.$store.getters.getCompanyModuleType) ? this.route('last_mile_delivery.login') : this.route('login') }); this.$store.dispatch('updateIfCreateNewOrder',''); }, errorHandler(){ - this.$store.dispatch('userAuthentication', {access_token: '', redirect_url: this.route('login')}); + this.$store.dispatch('userAuthentication', {access_token: '', redirect_url: [7, 8].includes(this.$store.getters.getCompanyModuleType) ? this.route('last_mile_delivery.login') : this.route('login') }); } } } diff --git a/resources/assets/vue/components/accounts/forms/CompleteRegistrationFormComponent.vue b/resources/assets/vue/components/accounts/forms/CompleteRegistrationFormComponent.vue new file mode 100644 index 00000000..1ea8a1b2 --- /dev/null +++ b/resources/assets/vue/components/accounts/forms/CompleteRegistrationFormComponent.vue @@ -0,0 +1,218 @@ + + diff --git a/resources/assets/vue/components/accounts/forms/LoginFormComponent.vue b/resources/assets/vue/components/accounts/forms/LoginFormComponent.vue index a88815cf..8db903db 100644 --- a/resources/assets/vue/components/accounts/forms/LoginFormComponent.vue +++ b/resources/assets/vue/components/accounts/forms/LoginFormComponent.vue @@ -25,7 +25,7 @@
-
Sign In
+
Sign In
@@ -55,7 +55,8 @@ parameters: { email: this.email, password: '' - } + }, + currentUrl: window.location.href, }; }, methods: { diff --git a/resources/assets/vue/components/accounts/forms/NewRegistrationFormComponent.vue b/resources/assets/vue/components/accounts/forms/NewRegistrationFormComponent.vue new file mode 100644 index 00000000..60e20b01 --- /dev/null +++ b/resources/assets/vue/components/accounts/forms/NewRegistrationFormComponent.vue @@ -0,0 +1,103 @@ + + diff --git a/resources/assets/vue/components/accounts/forms/RegistrationFormComponent.vue b/resources/assets/vue/components/accounts/forms/RegistrationFormComponent.vue index 52535ad1..ed7656a4 100644 --- a/resources/assets/vue/components/accounts/forms/RegistrationFormComponent.vue +++ b/resources/assets/vue/components/accounts/forms/RegistrationFormComponent.vue @@ -6,7 +6,7 @@
-
+
@@ -304,4 +304,4 @@ }, mixins: [registrationFormValidation] } - + \ No newline at end of file diff --git a/resources/assets/vue/components/addresses/elements/SelectAddressComponent.vue b/resources/assets/vue/components/addresses/elements/SelectAddressComponent.vue index ba1cf717..492abb73 100644 --- a/resources/assets/vue/components/addresses/elements/SelectAddressComponent.vue +++ b/resources/assets/vue/components/addresses/elements/SelectAddressComponent.vue @@ -36,10 +36,10 @@
- + - +
@@ -51,7 +51,11 @@ props: { value: { required: false + }, + 'section': { + type: String, } + }, data(){ return { diff --git a/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue b/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue index 0b6edc6b..5aaf56d0 100644 --- a/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue +++ b/resources/assets/vue/components/addresses/forms/AddressFormComponent.vue @@ -29,7 +29,7 @@
- + @@ -93,6 +93,10 @@ id: { type: Number, required: true + }, + type: { + type: Number, + default: 2 } }, data() { @@ -104,6 +108,7 @@ street_two: '', district_id: '', post_code: '', + type: this.type, remark: '', phone: '', person_in_charge: '', @@ -118,6 +123,7 @@ this.parameters.street_two = this.data.street_two; this.parameters.district_id = this.data.district.id; this.parameters.post_code = this.data.post_code; + this.parameters.type = this.data.type; this.parameters.phone = this.data.contact ? this.data.contact.phone : ''; this.parameters.person_in_charge = this.data.contact ? this.data.contact.reference : ''; this.parameters.remark = this.data.remark ? this.data.remark.content : ''; diff --git a/resources/assets/vue/components/addresses/sections/AddressProfileSectionComponent.vue b/resources/assets/vue/components/addresses/sections/AddressProfileSectionComponent.vue new file mode 100644 index 00000000..2466a05d --- /dev/null +++ b/resources/assets/vue/components/addresses/sections/AddressProfileSectionComponent.vue @@ -0,0 +1,19 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/companies/sections/CustomerProfileSectionComponent.vue b/resources/assets/vue/components/companies/sections/CustomerProfileSectionComponent.vue index b10344e3..7d943d0b 100644 --- a/resources/assets/vue/components/companies/sections/CustomerProfileSectionComponent.vue +++ b/resources/assets/vue/components/companies/sections/CustomerProfileSectionComponent.vue @@ -39,8 +39,8 @@
- -
+ +
@@ -98,7 +98,7 @@
- +
diff --git a/resources/assets/vue/components/companies/sections/DeliveryCustomerProfileSectionComponent.vue b/resources/assets/vue/components/companies/sections/DeliveryCustomerProfileSectionComponent.vue new file mode 100644 index 00000000..efa44347 --- /dev/null +++ b/resources/assets/vue/components/companies/sections/DeliveryCustomerProfileSectionComponent.vue @@ -0,0 +1,106 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/companies/sections/OnBoardingSectionComponent.vue b/resources/assets/vue/components/companies/sections/OnBoardingSectionComponent.vue index c7b5b154..2e4a9cec 100644 --- a/resources/assets/vue/components/companies/sections/OnBoardingSectionComponent.vue +++ b/resources/assets/vue/components/companies/sections/OnBoardingSectionComponent.vue @@ -1,7 +1,7 @@ \ No newline at end of file diff --git a/resources/assets/vue/components/containers/forms/CreateDeliveryPackinglistFormComponent.vue b/resources/assets/vue/components/containers/forms/CreateDeliveryPackinglistFormComponent.vue deleted file mode 100644 index 79aecce6..00000000 --- a/resources/assets/vue/components/containers/forms/CreateDeliveryPackinglistFormComponent.vue +++ /dev/null @@ -1,244 +0,0 @@ - - \ No newline at end of file diff --git a/resources/assets/vue/components/general/forms/ValidationWrapperComponent.vue b/resources/assets/vue/components/general/forms/ValidationWrapperComponent.vue index d30fdbaf..285c19ff 100644 --- a/resources/assets/vue/components/general/forms/ValidationWrapperComponent.vue +++ b/resources/assets/vue/components/general/forms/ValidationWrapperComponent.vue @@ -2,7 +2,7 @@
-
+
@@ -21,7 +21,7 @@ validator: { required: true }, - selecatable: { + selectable: { type: Boolean, default: false } diff --git a/resources/assets/vue/components/orders/forms/CancelDeliveryOrderFormComponent.vue b/resources/assets/vue/components/orders/forms/CancelDeliveryOrderFormComponent.vue new file mode 100644 index 00000000..3dda284b --- /dev/null +++ b/resources/assets/vue/components/orders/forms/CancelDeliveryOrderFormComponent.vue @@ -0,0 +1,39 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/orders/forms/DeliveryOrderFormComponent.vue b/resources/assets/vue/components/orders/forms/DeliveryOrderFormComponent.vue new file mode 100644 index 00000000..96351c90 --- /dev/null +++ b/resources/assets/vue/components/orders/forms/DeliveryOrderFormComponent.vue @@ -0,0 +1,366 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/orders/forms/OrderFormComponent.vue b/resources/assets/vue/components/orders/forms/OrderFormComponent.vue index 9b0020c9..62feec75 100644 --- a/resources/assets/vue/components/orders/forms/OrderFormComponent.vue +++ b/resources/assets/vue/components/orders/forms/OrderFormComponent.vue @@ -133,9 +133,15 @@
-
+
-

We are generating the QR code that you need to send to your supplier to print to stick to your packages, this QR code is required for us to identify your packages when they arrives at our warehouse!

+

We are generating your first QR code

+

Please wait...

+
+
+
+
+

We are generating the QR code for you to send to your supplier to print and stick to your packages, this QR code is required for us to identify your packages when they arrives at our warehouse!

Please wait...

@@ -176,7 +182,7 @@ methods:{ createOrder(){ this.step++; - this.submit((this.route('api.order.create')), 'post', 'orderListSection', true, false) + this.submit((this.route('api.order.create')), 'post', 'orderListSection', false, false) }, cancelOrder(){ this.parameters.warehouse_id = ''; @@ -184,13 +190,18 @@ this.$store.dispatch('toggleSection', {name: this.section, status: false}) }, successHandler(response){ - let vm = this; + if(!this.company.last_order) { + window.location.reload(); + return; + } + setTimeout(function(){ window.location.href = this.route('order.show', response.payload.data.reference) }, 5000); }, errorHandler(response){ + alert(response.message) this.error = response.message; this.step--; } diff --git a/resources/assets/vue/components/orders/sections/DeliveryOrdersTableSectionComponent.vue b/resources/assets/vue/components/orders/sections/DeliveryOrdersTableSectionComponent.vue new file mode 100644 index 00000000..47230b24 --- /dev/null +++ b/resources/assets/vue/components/orders/sections/DeliveryOrdersTableSectionComponent.vue @@ -0,0 +1,173 @@ + + diff --git a/resources/assets/vue/components/reports/sections/ProfitModelReportSectionComponent.vue b/resources/assets/vue/components/reports/sections/ProfitModelReportSectionComponent.vue index f7405ba3..bf2a8dc2 100644 --- a/resources/assets/vue/components/reports/sections/ProfitModelReportSectionComponent.vue +++ b/resources/assets/vue/components/reports/sections/ProfitModelReportSectionComponent.vue @@ -26,7 +26,7 @@
- + diff --git a/resources/assets/vue/components/settings/forms/SegmentServiceFormComponent.vue b/resources/assets/vue/components/settings/forms/SegmentServiceFormComponent.vue index 5405ae6e..a3ece6fa 100644 --- a/resources/assets/vue/components/settings/forms/SegmentServiceFormComponent.vue +++ b/resources/assets/vue/components/settings/forms/SegmentServiceFormComponent.vue @@ -43,7 +43,7 @@
- + @@ -115,7 +115,7 @@
- +
diff --git a/resources/assets/vue/components/settings/forms/ServiceFormComponent.vue b/resources/assets/vue/components/settings/forms/ServiceFormComponent.vue index eac2a388..5ea960dd 100644 --- a/resources/assets/vue/components/settings/forms/ServiceFormComponent.vue +++ b/resources/assets/vue/components/settings/forms/ServiceFormComponent.vue @@ -103,7 +103,7 @@
- + diff --git a/resources/assets/vue/general/mixins/accounts/validation/newRegistrationFormValidation.js b/resources/assets/vue/general/mixins/accounts/validation/newRegistrationFormValidation.js new file mode 100644 index 00000000..b311215a --- /dev/null +++ b/resources/assets/vue/general/mixins/accounts/validation/newRegistrationFormValidation.js @@ -0,0 +1,27 @@ +import { required, email, numeric, sameAs, requiredUnless, requiredIf } from "vuelidate/lib/validators"; +import authenticationHandler from '../authenticationHandler' +export default { + validations: { + parameters: { + name: { + required + }, + email: { + required, + email + }, + phone: { + required, + numeric + }, + password: { + required + }, + password_confirmation: { + required, + sameAs: sameAs('password') + }, + } + }, + mixins: [authenticationHandler] +} \ No newline at end of file diff --git a/resources/assets/vue/general/mixins/addresses/validation/addressFormValidation.js b/resources/assets/vue/general/mixins/addresses/validation/addressFormValidation.js index 98d57e59..19734539 100644 --- a/resources/assets/vue/general/mixins/addresses/validation/addressFormValidation.js +++ b/resources/assets/vue/general/mixins/addresses/validation/addressFormValidation.js @@ -9,8 +9,8 @@ export default { district_id: { required }, post_code: { required }, remark: {}, - phone: {numeric}, - person_in_charge: {}, + phone: {required, numeric}, + person_in_charge: { required }, } }, mixins: [addressFormHandler] diff --git a/resources/assets/vue/general/mixins/formHandler.js b/resources/assets/vue/general/mixins/formHandler.js index 0ffe3c71..ed1d39a6 100644 --- a/resources/assets/vue/general/mixins/formHandler.js +++ b/resources/assets/vue/general/mixins/formHandler.js @@ -17,6 +17,7 @@ export default { isLoading: false, error: '', money: {decimal: '.',thousands: ',', precision: 2}, + weight: {decimal: '.',thousands: ',', precision: 1}, productPrice: {decimal: '.',thousands: ',', precision: 3}, exchangeRate: {decimal: '.', thousands: '', precision: 5}, percentage: {decimal: '.', thousands: '', precision: 2, suffix: '%'}, diff --git a/resources/assets/vue/general/mixins/guards.js b/resources/assets/vue/general/mixins/guards.js index ffa96e7d..64602155 100644 --- a/resources/assets/vue/general/mixins/guards.js +++ b/resources/assets/vue/general/mixins/guards.js @@ -1,11 +1,11 @@ export default { methods: { routesGuard(){ - (!this.$store.getters.isAuthenticated && this.isProtectedRoute()&& this.isWithTokenRoute()) ? window.location.href = this.route('login') : ''; - (this.$store.getters.isAuthenticated && !this.isProtectedRoute()&& this.isWithTokenRoute()) ? window.location.href = this.route('dashboard') : ''; + (!this.$store.getters.isAuthenticated && this.isProtectedRoute()&& this.isWithTokenRoute()) ? window.location.href = window.location.href.indexOf(this.route('last_mile_delivery.login')) === 0 ? this.route('last_mile_delivery.login') : this.route('login') : ''; + (this.$store.getters.isAuthenticated && !this.isProtectedRoute()&& this.isWithTokenRoute()) ? window.location.href = [7, 8].includes(this.$store.getters.getCompanyModuleType) ? this.route('last_mile_delivery.dashboard') : this.route('dashboard') : ''; }, isProtectedRoute(){ - const unprotectedRoutes = [this.route('login'), this.route('account.email.verification'), this.route('company.claim')]; + const unprotectedRoutes = [this.route('login'), this.route('account.email.verification'), this.route('company.claim'), this.route('last_mile_delivery.login')]; if(window.location.href.indexOf(this.route('company.claim')) === 0) { return false; } diff --git a/resources/assets/vue/vuex/modules/authentication.js b/resources/assets/vue/vuex/modules/authentication.js index 462cbd37..bd12ef34 100644 --- a/resources/assets/vue/vuex/modules/authentication.js +++ b/resources/assets/vue/vuex/modules/authentication.js @@ -17,6 +17,7 @@ export default { getUserEmail: (state, getters) => getters.getDecodedAccessToken.user.email, getCompanyId: (state, getters) => getters.getDecodedAccessToken.user.company_id, getCompanyModuleId: (state, getters) => getters.getDecodedAccessToken.user.company_module_id, + getCompanyModuleType: (state, getters) => getters.getDecodedAccessToken.user.company_module_type, getOrder: (state, getters) => getters.getDecodedAccessToken.user.order, getDecodedAccessToken(state) { diff --git a/resources/assets/vue/vuex/modules/crudRequest.js b/resources/assets/vue/vuex/modules/crudRequest.js index f4f6c37f..758b28d9 100644 --- a/resources/assets/vue/vuex/modules/crudRequest.js +++ b/resources/assets/vue/vuex/modules/crudRequest.js @@ -10,9 +10,8 @@ export default { 'Authorization': 'Bearer '+getters.getAccessToken } }).then(response => { - - if(response.status === 401 && window.location.href !== route('login')){ - dispatch('userAuthentication', {access_token: '', redirect_url: '/'}); + if(response.status === 401 && (window.location.href !== route('login') || window.location.href.indexOf(this.route('last_mile_delivery.login')) <= -1)){ + dispatch('userAuthentication', {access_token: '', redirect_url: [7, 8].includes(getters.getCompanyModuleType) ? route('last_mile_delivery.login') : route('login')}); } return response; diff --git a/resources/views/layouts/base_portal.blade.php b/resources/views/layouts/base_portal.blade.php index a86334db..f437664d 100644 --- a/resources/views/layouts/base_portal.blade.php +++ b/resources/views/layouts/base_portal.blade.php @@ -14,7 +14,7 @@
@include('partials.menu')
-
+
@include('partials.header')
diff --git a/resources/views/pages/accounts/signup.blade.php b/resources/views/pages/accounts/signup.blade.php new file mode 100644 index 00000000..0e7c8b67 --- /dev/null +++ b/resources/views/pages/accounts/signup.blade.php @@ -0,0 +1,115 @@ +@extends('layouts.base') +@section('content') +
+
+
+
+
+
+
+ +
+
+
+
+

Spend less time managing your delivery and more time optimizing your operations.

+
+
+
+
+

You know how to run your operations, let us help you streamline your delivery management.

+
+
+
+
+

Sign-up today and get access to:

+
An intuitive and easy to use order process
+
Service customization to keep you in control
+
Follow-up action to keep you on track
+
Personalized customer support
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
Sign In
+

To keep using the service please sign in with your personal info

+
+
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+
+
Forget Password
+

Enter your registered email below to receive the password reset instruction

+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+@endsection \ No newline at end of file diff --git a/resources/views/pages/delivery/admin.blade.php b/resources/views/pages/delivery/admin.blade.php new file mode 100644 index 00000000..ff3f1bb2 --- /dev/null +++ b/resources/views/pages/delivery/admin.blade.php @@ -0,0 +1,29 @@ +
+
+
+
+
+
+ +
+
+
+
+
+
+
Customers List
+
+
+
+
+ + + +
+
+
+
+
+
\ No newline at end of file diff --git a/resources/views/pages/delivery/customer.blade.php b/resources/views/pages/delivery/customer.blade.php new file mode 100644 index 00000000..13905ecc --- /dev/null +++ b/resources/views/pages/delivery/customer.blade.php @@ -0,0 +1,5 @@ +
+
+ +
+
\ No newline at end of file diff --git a/resources/views/pages/delivery/dashboard.blade.php b/resources/views/pages/delivery/dashboard.blade.php new file mode 100644 index 00000000..b8c64015 --- /dev/null +++ b/resources/views/pages/delivery/dashboard.blade.php @@ -0,0 +1,5 @@ +@extends('layouts.base_portal') +@section('inner_content') + @include('pages.delivery.customer') + @include('pages.delivery.admin') +@endsection \ No newline at end of file diff --git a/resources/views/partials/header.blade.php b/resources/views/partials/header.blade.php index 685d3f27..b7623510 100644 --- a/resources/views/partials/header.blade.php +++ b/resources/views/partials/header.blade.php @@ -4,8 +4,8 @@
diff --git a/resources/views/partials/menu.blade.php b/resources/views/partials/menu.blade.php index cd578001..9d932c84 100644 --- a/resources/views/partials/menu.blade.php +++ b/resources/views/partials/menu.blade.php @@ -2,8 +2,8 @@
@@ -27,7 +27,7 @@ style=" fill:#000000;">
@@ -155,7 +155,7 @@
-
+
diff --git a/routes/api.php b/routes/api.php index a9383a2b..04094f78 100644 --- a/routes/api.php +++ b/routes/api.php @@ -22,6 +22,8 @@ Route::group(['middleware' => 'api', 'prefix' => 'v1', 'as' => 'api.'], function require __DIR__ . '/account.php'; + require __DIR__ . '/delivery.php'; + Route::group(['middleware' => 'valid.token'], function () { Route::get('/storage/{fileName}/fetch', 'Documents\RenderDocumentController@fileStorageServe')->where(['fileName' => '.*'])->name('storage.document.file'); diff --git a/routes/delivery.php b/routes/delivery.php new file mode 100644 index 00000000..3fc8b6b5 --- /dev/null +++ b/routes/delivery.php @@ -0,0 +1,14 @@ + 'delivery', 'namespace' => 'Delivery', 'as' => 'delivery.'], function () { + Route::post('/signup', 'CreateDeliveryCustomerController@create')->name('account.registration.register'); + + Route::group(['prefix' => 'order', 'as' => 'order.'], function () { + Route::post('/create', 'CreateDeliveryOrderController@create')->name('create'); + Route::get('/list', 'ListOrdersController@list')->name('list'); + Route::put('/cancel/{id}', 'CancelDeliveryOrderController@cancel')->name('cancel'); + }); + +}); diff --git a/routes/web.php b/routes/web.php index 8ba22313..956aa7b2 100644 --- a/routes/web.php +++ b/routes/web.php @@ -31,6 +31,23 @@ Route::get('', function () { return view('pages.accounts.login'); })->name('login'); + +Route::group(['prefix' => 'last_mile_delivery', 'as' => 'last_mile_delivery.'], function () { + Route::get('/', function () { + return view('pages.accounts.signup'); + })->name('login'); + + Route::get('/dashboard', function () { + return view('pages.delivery.dashboard'); + })->name('dashboard'); + + Route::get('/orders/export', 'Delivery\ExportDeliveryOrdersToExcelController@lineClear')->name('order.export'); + + +}); + + + Route::group(['prefix' => 'swagger'], function () { Route::get('/', function () { return view('swagger.index');