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 7762dffa..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; } /** @@ -128,7 +134,7 @@ class CreateCustomerLogic extends AbstractControllerLogic $inviter = $this->fetchesCompanyModule->execute(['reference'=>'CIEF']); - $connectionObject = new CompanyConnectionObject($companyModule, $inviter, 'CIEF', mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate()); + $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 1d08a191..4222aaf8 100644 --- a/app/Classes/Modules/Accounts/Services/AuthenticationRedirect.php +++ b/app/Classes/Modules/Accounts/Services/AuthenticationRedirect.php @@ -12,9 +12,11 @@ class AuthenticationRedirect public function url(User $user){ if($user->type === RoleTypes::USER){ - if ($user->companyModule()->first()->type === BusinessType::ONLINE_SELLER) { - return route('delivery.dashboard'); + + 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/Delivery/ControllersLogic/CreateDeliveryCustomerLogic.php b/app/Classes/Modules/Delivery/ControllersLogic/CreateDeliveryCustomerLogic.php index c7368439..521d88c5 100644 --- a/app/Classes/Modules/Delivery/ControllersLogic/CreateDeliveryCustomerLogic.php +++ b/app/Classes/Modules/Delivery/ControllersLogic/CreateDeliveryCustomerLogic.php @@ -132,9 +132,9 @@ class CreateDeliveryCustomerLogic extends AbstractControllerLogic /** @var CompanyModule $companyModule */ $companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::ONLINE_SELLER); - $inviter = $this->fetchesCompanyModule->execute(['reference'=>'EXP']); + $inviter = $this->fetchesCompanyModule->execute(['reference'=>'LMD']); - $connectionObject = new CompanyConnectionObject($companyModule, $inviter, 'EXP', mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate()); + $connectionObject = new CompanyConnectionObject($companyModule, $inviter, mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate(), 'LMD'); $connection = $this->createsCompanyConnection->execute($connectionObject); 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..03525eeb --- /dev/null +++ b/app/Classes/Modules/Exports/Services/ExportsDeliveryOrders.php @@ -0,0 +1,109 @@ +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() + { + return Order::where('type', OrderType::LAST_MILE_DELIVERY); + } + + /** + * @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 [ + 'Standard Delivery', + 'ST00000003', + $senderAddress->contacts()->first()->reference, + '', + '*', + $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'), + 'Lodge In / Walk In', + 'Sender', + $order->reference, + $package->quantity, + $package->weight, + 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/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/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..e56a1ea8 --- /dev/null +++ b/database/seeders/LastMileDeliveryTableSeeder.php @@ -0,0 +1,123 @@ +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; + } + + + /** + * 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); + + 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/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/app.js b/resources/assets/vue/app.js index b81feb10..5195d9c8 100644 --- a/resources/assets/vue/app.js +++ b/resources/assets/vue/app.js @@ -14,6 +14,10 @@ import vuelidate from 'vuelidate'; /** Input Mask **/ import VueTheMask from 'vue-the-mask'; +import VueEasytable from "vue-easytable"; // import library + +Vue.use(VueEasytable); + /** Mixins */ import request from './general/mixins/request'; 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/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 index abca50db..60e20b01 100644 --- a/resources/assets/vue/components/accounts/forms/NewRegistrationFormComponent.vue +++ b/resources/assets/vue/components/accounts/forms/NewRegistrationFormComponent.vue @@ -55,7 +55,7 @@
-
- + - + @@ -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/DeliveryCustomerProfileSectionComponent.vue b/resources/assets/vue/components/companies/sections/DeliveryCustomerProfileSectionComponent.vue new file mode 100644 index 00000000..520cf795 --- /dev/null +++ b/resources/assets/vue/components/companies/sections/DeliveryCustomerProfileSectionComponent.vue @@ -0,0 +1,111 @@ + + \ No newline at end of file diff --git a/resources/assets/vue/components/containers/forms/CreateDeliveryOrderFormComponent.vue b/resources/assets/vue/components/containers/forms/CreateDeliveryOrderFormComponent.vue deleted file mode 100644 index 068f7404..00000000 --- a/resources/assets/vue/components/containers/forms/CreateDeliveryOrderFormComponent.vue +++ /dev/null @@ -1,238 +0,0 @@ - - \ 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/DeliveryOrderFormComponent.vue b/resources/assets/vue/components/orders/forms/DeliveryOrderFormComponent.vue new file mode 100644 index 00000000..99d9778f --- /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/sections/DeliveryOrdersTableSectionComponent.vue b/resources/assets/vue/components/orders/sections/DeliveryOrdersTableSectionComponent.vue new file mode 100644 index 00000000..5cef518d --- /dev/null +++ b/resources/assets/vue/components/orders/sections/DeliveryOrdersTableSectionComponent.vue @@ -0,0 +1,176 @@ + + 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/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 cd61d755..14265d6c 100644 --- a/resources/assets/vue/general/mixins/guards.js +++ b/resources/assets/vue/general/mixins/guards.js @@ -5,7 +5,7 @@ export default { (this.$store.getters.isAuthenticated && !this.isProtectedRoute()&& this.isWithTokenRoute()) ? window.location.href = this.route('dashboard') : ''; }, isProtectedRoute(){ - const unprotectedRoutes = [this.route('login'), this.route('account.email.verification'), this.route('company.claim'), this.route('signup')]; + 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/views/layouts/base_portal.blade.php b/resources/views/layouts/base_portal.blade.php index a86334db..11f35e01 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 index a8f49cf8..0e7c8b67 100644 --- a/resources/views/pages/accounts/signup.blade.php +++ b/resources/views/pages/accounts/signup.blade.php @@ -12,12 +12,12 @@
-

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

+

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 logistic supply chain management.

+

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

diff --git a/resources/views/pages/delivery/customers.blade.php b/resources/views/pages/delivery/customers.blade.php index 1cf41bb6..6deabe2f 100644 --- a/resources/views/pages/delivery/customers.blade.php +++ b/resources/views/pages/delivery/customers.blade.php @@ -1,16 +1,5 @@
-
-
-
-
-
Create Order
-
-
- -
-
- -

orders list

+
\ 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/delivery.php b/routes/delivery.php index 7370f146..da4732e3 100644 --- a/routes/delivery.php +++ b/routes/delivery.php @@ -3,5 +3,8 @@ use Illuminate\Support\Facades\Route; Route::group(['prefix' => 'delivery', 'namespace' => 'Delivery', 'as' => 'delivery.'], function () { - Route::post('/delivery/registration', 'CreateDeliveryCustomerController@create')->name('account.registration.register'); + Route::post('/signup', 'CreateDeliveryCustomerController@create')->name('account.registration.register'); + Route::post('/order/create', 'CreateDeliveryOrderController@create')->name('order.create'); + Route::get('/orders/list', 'ListOrdersController@list')->name('order.list'); + }); diff --git a/routes/web.php b/routes/web.php index 8a727a21..273eda25 100644 --- a/routes/web.php +++ b/routes/web.php @@ -31,13 +31,22 @@ Route::get('', function () { return view('pages.accounts.login'); })->name('login'); -Route::get('/delivery', function () { - return view('pages.accounts.signup'); -})->name('signup'); -Route::get('/delivery/dashboard', function () { - return view('pages.delivery.dashboard'); -})->name('delivery.dashboard'); +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 () {