mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/izyim.git
synced 2026-08-19 04:24:00 +00:00
initiate project
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.yml]
|
||||
indent_size = 2
|
||||
@@ -0,0 +1,41 @@
|
||||
APP_NAME=Laravel
|
||||
APP_ENV=local
|
||||
APP_KEY=
|
||||
APP_DEBUG=true
|
||||
APP_URL=http://localhost
|
||||
|
||||
LOG_CHANNEL=stack
|
||||
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=homestead
|
||||
DB_USERNAME=homestead
|
||||
DB_PASSWORD=secret
|
||||
|
||||
BROADCAST_DRIVER=log
|
||||
CACHE_DRIVER=file
|
||||
QUEUE_CONNECTION=sync
|
||||
SESSION_DRIVER=file
|
||||
SESSION_LIFETIME=120
|
||||
|
||||
REDIS_HOST=127.0.0.1
|
||||
REDIS_PASSWORD=null
|
||||
REDIS_PORT=6379
|
||||
|
||||
MAIL_DRIVER=smtp
|
||||
MAIL_HOST=smtp.mailtrap.io
|
||||
MAIL_PORT=2525
|
||||
MAIL_USERNAME=null
|
||||
MAIL_PASSWORD=null
|
||||
MAIL_ENCRYPTION=null
|
||||
|
||||
PUSHER_APP_ID=
|
||||
PUSHER_APP_KEY=
|
||||
PUSHER_APP_SECRET=
|
||||
PUSHER_APP_CLUSTER=mt1
|
||||
|
||||
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
|
||||
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
||||
|
||||
EMAIL_DEVELOPMENT=admin@cief.com
|
||||
@@ -0,0 +1,5 @@
|
||||
* text=auto
|
||||
*.css linguist-vendored
|
||||
*.scss linguist-vendored
|
||||
*.js linguist-vendored
|
||||
CHANGELOG.md export-ignore
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
/node_modules
|
||||
/public/hot
|
||||
/public/storage
|
||||
/storage/*.key
|
||||
/vendor
|
||||
/.idea
|
||||
/.vscode
|
||||
/.vagrant
|
||||
Homestead.json
|
||||
Homestead.yaml
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
.env
|
||||
.phpunit.result.cache
|
||||
@@ -0,0 +1,126 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes;
|
||||
|
||||
class Constants {
|
||||
|
||||
public const MODULE_TYPES = [
|
||||
'company' => 0,
|
||||
'supplier' => 1,
|
||||
'warehouse' => 2,
|
||||
'forwarder' => 3,
|
||||
'order' => 4
|
||||
];
|
||||
|
||||
|
||||
//excel file extension
|
||||
public const EXCEL_FILE_EXTENSION = 'xlsx';
|
||||
public const EXCEL_FILE_ENCODED_EXTENSION = 'vnd.openxmlformats-officedocument.spreadsheetml.sheet';
|
||||
|
||||
public const UPLOAD_PATH = 'uploads/';
|
||||
public const DELETE_PATH = 'deleted/';
|
||||
|
||||
public const DOCUMENT_TYPES = [
|
||||
'registration_certificate' => [
|
||||
'id' => 0,
|
||||
'path' => 'registration_certificates/',
|
||||
'multiple' => true
|
||||
],
|
||||
'logo' => [
|
||||
'id' => 1,
|
||||
'path' => 'logo/',
|
||||
'multiple' => false
|
||||
]
|
||||
|
||||
];
|
||||
|
||||
public const COMPANY_DOCUMENTS = ['registration_certificate', 'logo'];
|
||||
public const ADDRESS_FIELDS = ['street_one', 'street_two', 'city', 'state', 'country', 'post_code'];
|
||||
|
||||
|
||||
public const ORDER_PROCESSING_STEP = 'PS_PROCESSING';
|
||||
public const ORDER_SHIPPING_STEP = 'PS_SHIPPING';
|
||||
public const ORDER_DELIVERY_STEP = 'PS_DELIVERY';
|
||||
|
||||
public const ORDER_MODULE_WAREHOUSE = 'WAREHOUSE';
|
||||
public const ORDER_WAREHOUSE_RECEIVING_STEP = 'MS_WAREHOUSE_RECEIVING';
|
||||
public const ORDER_WAREHOUSE_PACKING_STEP = 'MS_WAREHOUSE_PACKING';
|
||||
public const ORDER_WAREHOUSE_ARRIVAL_STEP = 'MS_WAREHOUSE_ARRIVAL';
|
||||
public const ORDER_WAREHOUSE_UNPACKING_STEP = 'MS_WAREHOUSE_UNPACKING';
|
||||
|
||||
public const ORDER_MODULE_NO_WAREHOUSE = 'NO_WAREHOUSE';
|
||||
public const ORDER_NO_WAREHOUSE_PENDING_SUPPLIER = 'MS_NO_WAREHOUSE_PENDING_SUPPLIER';
|
||||
|
||||
public const ORDER_PRIMARY_STEPS = [
|
||||
Constants::ORDER_PROCESSING_STEP => [
|
||||
'initial_name' => 'processing order',
|
||||
'final_name' => 'order confirmed',
|
||||
'description' => 'Order created and pending confirmation',
|
||||
'sequence' => 0
|
||||
],
|
||||
Constants::ORDER_SHIPPING_STEP => [
|
||||
'initial_name' => 'ready to ship',
|
||||
'final_name' => 'shipped out',
|
||||
'description' => 'Order is packed and ready to be shipped',
|
||||
'sequence' => 1
|
||||
],
|
||||
Constants::ORDER_DELIVERY_STEP => [
|
||||
'initial_name' => 'ready to deliver',
|
||||
'final_name' => 'to receive',
|
||||
'description' => 'Order out for delivery soon',
|
||||
'sequence' => 2
|
||||
],
|
||||
];
|
||||
|
||||
public const ORDER_MODULAR_STEPS = [
|
||||
Constants::ORDER_MODULE_WAREHOUSE => [
|
||||
'china_warehouse' => [
|
||||
'previous' => Constants::ORDER_PROCESSING_STEP,
|
||||
'next' => Constants::ORDER_SHIPPING_STEP,
|
||||
'steps' => [
|
||||
Constants::ORDER_WAREHOUSE_RECEIVING_STEP => [
|
||||
'initial_name' => 'pending supplier',
|
||||
'final_name' => 'arrived at warehouse',
|
||||
'description' => 'Waiting for supplier to deliver order to warehouse'
|
||||
],
|
||||
Constants::ORDER_WAREHOUSE_PACKING_STEP => [
|
||||
'initial_name' => 'packing',
|
||||
'final_name' => 'packed',
|
||||
'description' => 'Packing order into shipping container'
|
||||
]
|
||||
]
|
||||
],
|
||||
'malaysia_warehouse' => [
|
||||
'previous' => Constants::ORDER_SHIPPING_STEP,
|
||||
'next' => Constants::ORDER_DELIVERY_STEP,
|
||||
'steps' => [
|
||||
Constants::ORDER_WAREHOUSE_ARRIVAL_STEP => [
|
||||
'initial_name' => 'pending arrival',
|
||||
'final_name' => 'arrived at warehouse',
|
||||
'description' => 'Waiting for order\'s arrival & custom clearance'
|
||||
],
|
||||
Constants::ORDER_WAREHOUSE_UNPACKING_STEP => [
|
||||
'initial_name' => 'unpacking',
|
||||
'final_name' => 'unpacked',
|
||||
'description' => 'Unpacking order from shipping container'
|
||||
]
|
||||
]
|
||||
]
|
||||
],
|
||||
Constants::ORDER_MODULE_NO_WAREHOUSE => [
|
||||
'pending_arrival' => [
|
||||
'previous' => Constants::ORDER_PROCESSING_STEP,
|
||||
'next' => Constants::ORDER_SHIPPING_STEP,
|
||||
'steps' => [
|
||||
Constants::ORDER_NO_WAREHOUSE_PENDING_SUPPLIER => [
|
||||
'initial_name' => 'pending supplier',
|
||||
'final_name' => 'supplier packed order',
|
||||
'description' => 'Waiting for supplier to pack order for shipping'
|
||||
]
|
||||
]
|
||||
]
|
||||
|
||||
]
|
||||
];
|
||||
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ControllersLogic\Companies\AddressBook;
|
||||
|
||||
use App\Models\Company;
|
||||
use App\Http\Resources\AddressBook as AddressBookResource;
|
||||
|
||||
class DefaultAddress
|
||||
{
|
||||
public function execute( string $companyId, string $id) {
|
||||
|
||||
Company::findOrfail($companyId)->addressBook()->update(['default' => 0]);
|
||||
|
||||
$address = Company::findOrfail($companyId)->addressBook()->findOrFail($id);
|
||||
|
||||
$address->default = 1;
|
||||
|
||||
if($address->save()){
|
||||
return new AddressBookResource($address);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ControllersLogic\Companies\AddressBook;
|
||||
|
||||
use App\Models\Company;
|
||||
use App\Http\Resources\AddressBook as AddressBookResource;
|
||||
|
||||
class DeleteAddress
|
||||
{
|
||||
public function execute(string $companyId, string $id) {
|
||||
|
||||
// Get address
|
||||
$address = Company::findOrfail($companyId)->addressBook()->findOrFail($id);
|
||||
|
||||
|
||||
if($address->delete()){
|
||||
|
||||
// Return single address as a resource
|
||||
return new AddressBookResource($address);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ControllersLogic\Companies\AddressBook;
|
||||
|
||||
use App\Models\Company;
|
||||
use App\Http\Resources\AddressBook as AddressBookResource;
|
||||
|
||||
class ListAddresses
|
||||
{
|
||||
public function execute(string $companyId) {
|
||||
|
||||
// Get addresses
|
||||
$addresses = Company::findOrfail($companyId)->addressBook()->orderBy('created_at')->paginate(5);
|
||||
|
||||
// Return collection of addresses as a resource
|
||||
return AddressBookResource::collection($addresses);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ControllersLogic\Companies\AddressBook;
|
||||
|
||||
use App\Classes\Objects\AddressObject;
|
||||
use App\Models\AddressBook;
|
||||
use App\Models\Company;
|
||||
use App\Http\Resources\AddressBook as AddressBookResource;
|
||||
|
||||
class UpdateAddress
|
||||
{
|
||||
public function execute(AddressObject $addressObject) {
|
||||
$address = $addressObject->getId() !== null ? Company::findOrfail($addressObject->getCompanyId())->addressBook()->findOrFail($addressObject->getId()) : new AddressBook;
|
||||
|
||||
$address->company_id = $addressObject->getCompanyId();
|
||||
$address->reference = $addressObject->getReference();
|
||||
$address->contact = $addressObject->getContact();
|
||||
$address->street_one = $addressObject->getStreetOne();
|
||||
$address->street_two = $addressObject->getStreetTwo();
|
||||
$address->city = $addressObject->getCity();
|
||||
$address->state = $addressObject->getState();
|
||||
$address->post_code = $addressObject->getPostCode();
|
||||
$address->country = $addressObject->getCountry();
|
||||
|
||||
if($address->save()){
|
||||
return new AddressBookResource($address);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ControllersLogic\Companies;
|
||||
|
||||
use App\Models\Company;
|
||||
use App\Http\Resources\Company as CompanyResource;
|
||||
|
||||
class CompanyProfile
|
||||
{
|
||||
public function execute(string $id) {
|
||||
|
||||
// Get company
|
||||
$company = Company::findOrFail($id);
|
||||
|
||||
// Return single company as a resource
|
||||
return new CompanyResource($company);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ControllersLogic\Companies;
|
||||
|
||||
use App\Classes\Modules\Documents\DeleteAllDocuments;
|
||||
use App\Models\Company;
|
||||
use App\Http\Resources\Company as CompanyResource;
|
||||
use App\Classes\Constants;
|
||||
|
||||
class DeleteCompany
|
||||
{
|
||||
|
||||
public function execute(string $id) {
|
||||
|
||||
// Get company
|
||||
$company = Company::findOrFail($id);
|
||||
|
||||
|
||||
foreach (Constants::COMPANY_DOCUMENTS as $documentType) {
|
||||
(new DeleteAllDocuments(Constants::MODULE_TYPES['company'], $id, $documentType))->execute();
|
||||
}
|
||||
|
||||
if($company->delete()){
|
||||
|
||||
// Return single compnay as a resource
|
||||
return new CompanyResource($company);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ControllersLogic\Companies;
|
||||
|
||||
use App\Models\Company;
|
||||
use App\Http\Resources\Company as CompanyResource;
|
||||
|
||||
class ListCompanies
|
||||
{
|
||||
public function execute() {
|
||||
|
||||
// Get company
|
||||
$companies = Company::orderBy('created_at')->paginate(10);
|
||||
|
||||
// Return collection of companies as a resource
|
||||
return CompanyResource::collection($companies);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ControllersLogic\Companies;
|
||||
|
||||
use App\Classes\ControllersLogic\Companies\AddressBook\UpdateAddress;
|
||||
use App\Classes\Modules\Documents\UpdateDocuments;
|
||||
use App\Models\Company;
|
||||
use App\Http\Resources\Company as CompanyResource;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Classes\Constants;
|
||||
|
||||
class UpdateCompany
|
||||
{
|
||||
public function execute(Request $request) {
|
||||
$company = $request->method() === 'PUT' ? Company::findOrFail($request->input('id')) : new company;
|
||||
$company->fill($request->except(array_merge(Constants::COMPANY_DOCUMENTS, Constants::ADDRESS_FIELDS)));
|
||||
|
||||
if($company->save()){
|
||||
|
||||
foreach (Constants::COMPANY_DOCUMENTS as $documentType){
|
||||
|
||||
$documents = $request->input($documentType);
|
||||
|
||||
if($documents !== null){
|
||||
|
||||
(new updateDocuments(
|
||||
Constants::MODULE_TYPES['company'],
|
||||
$company->id,
|
||||
$documentType))->execute($documents);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
(new UpdateAddress())->execute($request, $company->id, false, true);
|
||||
|
||||
return new CompanyResource($company);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function updateDocuments(){
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ControllersLogic\Contacts;
|
||||
|
||||
use App\Models\Contact;
|
||||
use App\Http\Resources\Contact as ContactResource;
|
||||
|
||||
class DeleteContact
|
||||
{
|
||||
public function execute(string $id) {
|
||||
|
||||
// Get address
|
||||
$contact= Contact::findOrFail($id);
|
||||
|
||||
|
||||
if($contact->delete()){
|
||||
|
||||
// Return single address as a resource
|
||||
return new ContactResource($contact);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ControllersLogic\Contacts;
|
||||
|
||||
use App\Models\Contact;
|
||||
use App\Http\Resources\Contact as ContactResource;
|
||||
|
||||
class ListContacts
|
||||
{
|
||||
public function execute(int $type, string $reference) {
|
||||
|
||||
// Get contacts
|
||||
$contacts = Contact::where('type', $type)->where('reference_id', $reference)->orderBy('created_at')->paginate(5);
|
||||
|
||||
// Return collection of contacts as a resource
|
||||
return ContactResource::collection($contacts);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ControllersLogic\Contacts;
|
||||
|
||||
use App\Models\Contact;
|
||||
use App\Http\Resources\Contact as ContactResource;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class UpdateContact
|
||||
{
|
||||
public function execute(Request $request, int $type, string $reference) {
|
||||
|
||||
$contact = $request->method() === 'PUT' ? Contact::findOrFail($request->input('id')) : new Contact;
|
||||
|
||||
$contact->type = $type;
|
||||
$contact->reference_id = $reference;
|
||||
$contact->name = $request->input('name');
|
||||
$contact->designation = $request->input('designation');
|
||||
$contact->contact = $request->input('contact');
|
||||
$contact->email = $request->input('email');
|
||||
|
||||
if($contact->save()){
|
||||
return new ContactResource($contact);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ControllersLogic\Orders;
|
||||
|
||||
|
||||
use App\Classes\Constants;
|
||||
use App\Classes\Modules\Orders\Steps\GenerateOrderSteps;
|
||||
use App\Classes\Modules\Steps\ModularStep;
|
||||
use App\Models\Order;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class CreateOrder
|
||||
{
|
||||
public function execute(String $companyId, Request $request){
|
||||
$order = new Order;
|
||||
|
||||
$order->company_id = $companyId;
|
||||
$order->warehouse_id = $request->input('warehouse_id');
|
||||
$order->marking = $request->input('marking');
|
||||
$order->current_step = Constants::ORDER_PROCESSING_STEP;
|
||||
|
||||
if($order->save()){
|
||||
// Generate Order Steps
|
||||
$modularStep = new ModularStep();
|
||||
$orderSteps = (new GenerateOrderSteps([$modularStep->warehouseModule($order->warehouse_id !== null)]))->getSteps()->toArray();
|
||||
$order->orderSteps()->createMany($orderSteps);
|
||||
|
||||
// confirm order
|
||||
return (new UpdateOrderStep())->execute($order->id, $request);
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ControllersLogic\Orders;
|
||||
|
||||
|
||||
use App\Classes\Modules\Orders\Steps\OrderStepUpdate;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class UpdateOrderStep
|
||||
{
|
||||
public function execute(String $orderId, Request $request){
|
||||
return (new OrderStepUpdate($orderId))->execute($request);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ControllersLogic\Warehouses;
|
||||
|
||||
use App\Models\Warehouse;
|
||||
use App\Http\Resources\Warehouse as WarehouseResource;
|
||||
|
||||
class DeleteWarehouse
|
||||
{
|
||||
public function execute(string $id) {
|
||||
|
||||
// Get warehouse
|
||||
$warehouse = Warehouse::findOrFail($id);
|
||||
|
||||
|
||||
if($warehouse->delete()){
|
||||
|
||||
// Return single warehouse as a resource
|
||||
return new WarehouseResource($warehouse);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ControllersLogic\Warehouses;
|
||||
|
||||
use App\Models\Warehouse;
|
||||
use App\Http\Resources\Warehouse as WarehouseResource;
|
||||
|
||||
class ListWarehouses
|
||||
{
|
||||
public function execute(?bool $pagination = false) {
|
||||
|
||||
// Get warehouses
|
||||
$warehouses = $pagination ? Warehouse::all() : Warehouse::orderBy('created_at')->paginate(6) ;
|
||||
|
||||
// Return collection of warehouses as a resource
|
||||
return WarehouseResource::collection($warehouses);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ControllersLogic\Warehouses;
|
||||
|
||||
use App\Models\Warehouse;
|
||||
use App\Http\Resources\Warehouse as WarehouseResource;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class UpdateWarehouse
|
||||
{
|
||||
public function execute(Request $request) {
|
||||
$warehouse = $request->method() === 'PUT' ? Warehouse::findOrFail($request->input('id')) : new Warehouse;
|
||||
|
||||
$warehouse->fill($request->except('id'));
|
||||
|
||||
if($warehouse->save()){
|
||||
return new WarehouseResource($warehouse);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\ControllersLogic\Warehouses;
|
||||
|
||||
use App\Models\Warehouse;
|
||||
use App\Http\Resources\Warehouse as WarehouseResource;
|
||||
|
||||
class WarehouseProfile
|
||||
{
|
||||
public function execute(string $id) {
|
||||
|
||||
// Get warehouse
|
||||
$warehouse = Warehouse::findOrFail($id);
|
||||
|
||||
// Return single warehouse as a resource
|
||||
return new WarehouseResource($warehouse);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Excel\Import;
|
||||
|
||||
use Maatwebsite\Excel\Concerns\FromArray;
|
||||
|
||||
class CompaniesExport implements FromArray
|
||||
{
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function array(): array
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Excel\Import;
|
||||
|
||||
use Maatwebsite\Excel\Concerns\ToModel;
|
||||
|
||||
class CompaniesImport implements ToModel
|
||||
{
|
||||
/**
|
||||
* @param array $row
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function model(array $row)
|
||||
{
|
||||
return [
|
||||
//
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Interfaces;
|
||||
|
||||
interface Document
|
||||
{
|
||||
public function getType();
|
||||
|
||||
public function getReferenceId();
|
||||
|
||||
public function getDocumentType();
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Interfaces\Order\Steps;
|
||||
|
||||
interface OrderRequirement
|
||||
{
|
||||
|
||||
public function getOrderId();
|
||||
|
||||
public function getReferenceId();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Interfaces\Order\Steps;
|
||||
|
||||
interface OrderStep
|
||||
{
|
||||
public function isPrimary();
|
||||
|
||||
public function getReferenceId();
|
||||
|
||||
public function getSequence();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Interfaces\Steps;
|
||||
|
||||
interface GroupStep
|
||||
{
|
||||
public function getModularId();
|
||||
|
||||
public function getPrevious();
|
||||
|
||||
public function getNext();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Interfaces\Steps;
|
||||
|
||||
interface Step
|
||||
{
|
||||
public function getReferenceId();
|
||||
|
||||
public function getInitialName();
|
||||
|
||||
public function getFinalName();
|
||||
|
||||
public function getDescription();
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Documents;
|
||||
|
||||
use App\Classes\Interfaces\Document;
|
||||
|
||||
abstract class AbstractDocument implements Document
|
||||
{
|
||||
/** @var int */
|
||||
protected $type;
|
||||
|
||||
/** @var int */
|
||||
protected $referenceId;
|
||||
|
||||
/** @var string */
|
||||
protected $documentType;
|
||||
|
||||
public function __construct(int $type, int $reference_id, string $document_type){
|
||||
$this->type = $type;
|
||||
$this->referenceId = $reference_id;
|
||||
$this->documentType = $document_type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getType(): int
|
||||
{
|
||||
return $this->type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getReferenceId(): int
|
||||
{
|
||||
return $this->referenceId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getDocumentType(): string
|
||||
{
|
||||
return $this->documentType;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Documents;
|
||||
|
||||
use App\Traits\DocumentTrait;
|
||||
|
||||
class DeleteAllDocuments extends AbstractDocument
|
||||
{
|
||||
|
||||
use DocumentTrait;
|
||||
|
||||
public function execute(){
|
||||
$this->deleteDocuments();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Documents;
|
||||
|
||||
use App\Traits\DocumentTrait;
|
||||
|
||||
class ListDocuments extends AbstractDocument
|
||||
{
|
||||
|
||||
use DocumentTrait;
|
||||
|
||||
public function execute(){
|
||||
$documents = $this->listDocuments()->get();
|
||||
return $documents->isNotEmpty() ? $documents : null;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Documents;
|
||||
|
||||
use App\Classes\Service\Documents\FilterDocuments;
|
||||
|
||||
use App\Traits\DocumentTrait;
|
||||
|
||||
class UpdateDocuments extends AbstractDocument
|
||||
{
|
||||
|
||||
use DocumentTrait;
|
||||
|
||||
public function execute(?array $documents) {
|
||||
|
||||
if($documents !== null){
|
||||
|
||||
$filterDocuments = new FilterDocuments($documents);
|
||||
|
||||
$this->deleteDocuments($filterDocuments->execute('old'));
|
||||
|
||||
$this->addDocuments($filterDocuments->execute('new'));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders;
|
||||
|
||||
use App\Classes\Interfaces\OrderPrimaryStep;
|
||||
|
||||
class InsertPrimaryStepsList implements OrderPrimaryStep
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\ReceiveNotes;
|
||||
|
||||
|
||||
use App\Classes\Objects\Orders\ReceiveNotes\ReceiveNoteObject;
|
||||
use App\Models\ReceiveNote as ReceiveNoteModel;
|
||||
|
||||
class CreateReceiveNote
|
||||
{
|
||||
|
||||
public function execute(ReceiveNoteObject $receiveNote){
|
||||
|
||||
$receiveNotes = new ReceiveNoteModel;
|
||||
$receiveNotes->order_id = $receiveNote->getOrderId();
|
||||
$receiveNotes->tracking_no = $receiveNote->getTrackingNo();
|
||||
$receiveNotes->receive_date = $receiveNote->getReceiveDate();
|
||||
|
||||
if($receiveNotes->save()){
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\ReceiveNotes;
|
||||
|
||||
|
||||
use App\Http\Requests\ReceiveNoteValidator;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ReceiveNote
|
||||
{
|
||||
/** @var int */
|
||||
protected $orderId;
|
||||
|
||||
/** @var string */
|
||||
protected $trackingNo;
|
||||
|
||||
/** @var Carbon */
|
||||
protected $receiveDate;
|
||||
|
||||
/**
|
||||
* AbstractReceiveNote constructor.
|
||||
* @param int $orderId
|
||||
* @param Request $request
|
||||
*/
|
||||
public function __construct(int $orderId, Request $request)
|
||||
{
|
||||
$this->orderId = $orderId;
|
||||
$this->trackingNo = $request->input('tracking_no');
|
||||
$this->receiveDate = Carbon::parse($request->input('receive_date'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getOrderId(): int
|
||||
{
|
||||
return $this->orderId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getTrackingNo(): string
|
||||
{
|
||||
return $this->trackingNo;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Carbon
|
||||
*/
|
||||
public function getReceiveDate(): Carbon
|
||||
{
|
||||
return $this->receiveDate;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Steps;
|
||||
|
||||
|
||||
use App\Models\Order;
|
||||
use App\Models\OrderStep;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
abstract class AbstractOrderStep
|
||||
{
|
||||
/** @var string */
|
||||
protected $orderId;
|
||||
|
||||
/** @var string */
|
||||
protected $currentStep;
|
||||
|
||||
/** @var null|string */
|
||||
protected $nextStep;
|
||||
|
||||
/**
|
||||
* AbstractOrderStep constructor.
|
||||
* @param string $orderId
|
||||
* @param Request|null $request
|
||||
*/
|
||||
public function __construct(string $orderId, ?Request $request = null)
|
||||
{
|
||||
$this->orderId = $orderId;
|
||||
$this->currentStep = $this->getCurrentStep();
|
||||
$this->currentStep = $this->getCurrentStep();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getOrderId(): string
|
||||
{
|
||||
return $this->orderId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getCurrentStep(): string
|
||||
{
|
||||
return Order::findOrFail($this->getOrderId())->current_step;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $currentStep
|
||||
*/
|
||||
public function setCurrentStep(string $currentStep): void
|
||||
{
|
||||
$this->currentStep = $currentStep;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return null|string
|
||||
*/
|
||||
public function getNextStep(): ?string
|
||||
{
|
||||
$nextStep = OrderStep::where('order_id', $this->getOrderId())
|
||||
->where('complete', 0)->orderBy('sequence')->first();
|
||||
return $nextStep ? $nextStep->reference_id : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param null|string $nextStep
|
||||
*/
|
||||
public function setNextStep(?string $nextStep): void
|
||||
{
|
||||
$this->nextStep = $nextStep;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Steps;
|
||||
|
||||
|
||||
use App\Classes\Constants;
|
||||
use App\Classes\Objects\Orders\OrderStepObject;
|
||||
use App\Models\ModularStep;
|
||||
use App\Models\PrimaryStep;
|
||||
use Illuminate\Support\Collection;
|
||||
|
||||
class GenerateOrderSteps
|
||||
{
|
||||
/** @var Collection */
|
||||
protected $steps;
|
||||
|
||||
/** @var array */
|
||||
protected $modules;
|
||||
|
||||
/**
|
||||
* GenerateOrderSteps constructor.
|
||||
* @param array $modules
|
||||
*/
|
||||
public function __construct(array $modules)
|
||||
{
|
||||
$this->steps = collect([]);
|
||||
$this->modules = $modules;
|
||||
|
||||
$this->primarySteps();
|
||||
$this->modularSteps();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getModules(): array
|
||||
{
|
||||
return $this->modules;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return Collection
|
||||
*/
|
||||
public function getSteps(): Collection
|
||||
{
|
||||
|
||||
return $this->steps->sortBy('sequence');
|
||||
}
|
||||
|
||||
public function modularSteps(){
|
||||
$modularSteps = ModularStep::with('moduleGroups.steps')->whereIn('reference_id', $this->getModules())->get();
|
||||
foreach ($modularSteps as $module){
|
||||
foreach($module->moduleGroups as $group){
|
||||
$i = 0;
|
||||
foreach ($group->steps as $step){
|
||||
$i++;
|
||||
$sequence = Constants::ORDER_PRIMARY_STEPS[$group->previous]['sequence'] + ($i/10);
|
||||
$this->addSteps((new OrderStepObject(false, $step->reference_id, $sequence)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function primarySteps(){
|
||||
PrimaryStep::all()->map(function ($step){
|
||||
$this->addSteps((new OrderStepObject(
|
||||
true,
|
||||
$step->reference_id,
|
||||
Constants::ORDER_PRIMARY_STEPS[$step->reference_id]['sequence'])));
|
||||
});
|
||||
}
|
||||
|
||||
private function addSteps(OrderStepObject $step){
|
||||
$this->steps->push([
|
||||
'primary' => $step->isPrimary(),
|
||||
'reference_id' => $step->getReferenceId(),
|
||||
'sequence' => $step->getSequence()
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Steps;
|
||||
|
||||
use App\Classes\Interfaces\Order\Steps\OrderStep as OrderStepInterface;
|
||||
|
||||
class OrderStep implements OrderStepInterface
|
||||
{
|
||||
/** @var bool */
|
||||
protected $isPrimary;
|
||||
|
||||
/** @var string */
|
||||
protected $referenceId;
|
||||
|
||||
/** @var float */
|
||||
protected $sequence;
|
||||
|
||||
/**
|
||||
* AbstractOrderStep constructor.
|
||||
* @param bool $isPrimary
|
||||
* @param string $referenceId
|
||||
* @param float $sequence
|
||||
*/
|
||||
public function __construct(bool $isPrimary, string $referenceId, float $sequence)
|
||||
{
|
||||
$this->isPrimary = $isPrimary;
|
||||
$this->referenceId = $referenceId;
|
||||
$this->sequence = $sequence;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isPrimary(): bool
|
||||
{
|
||||
return $this->isPrimary;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getReferenceId(): string
|
||||
{
|
||||
return $this->referenceId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return float
|
||||
*/
|
||||
public function getSequence(): float
|
||||
{
|
||||
return $this->sequence;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Steps;
|
||||
|
||||
|
||||
use App\Traits\OrderStepTrait;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class OrderStepUpdate extends AbstractOrderStep
|
||||
{
|
||||
|
||||
use OrderStepTrait;
|
||||
|
||||
public function execute(?Request $request){
|
||||
if($this->ProcessStep($request)){
|
||||
return $this->CompleteOrderCurrentStep();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: accountadmin2
|
||||
* Date: 11/27/2018
|
||||
* Time: 12:25 PM
|
||||
*/
|
||||
|
||||
namespace App\Classes\Modules\Orders\Steps;
|
||||
|
||||
|
||||
class ProcessStep
|
||||
{
|
||||
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Steps\Processors;
|
||||
|
||||
|
||||
use App\Classes\Interfaces\Order\Steps\OrderRequirement;
|
||||
use App\Models\OrderStep;
|
||||
|
||||
abstract class AbstractOrderRequirement implements OrderRequirement
|
||||
{
|
||||
/** @var string */
|
||||
protected $orderId;
|
||||
|
||||
/** @var string */
|
||||
protected $referenceId;
|
||||
|
||||
/**
|
||||
* AbstractOrderRequirement constructor.
|
||||
* @param string $orderId
|
||||
* @param string $referenceId
|
||||
*/
|
||||
public function __construct(string $orderId, string $referenceId)
|
||||
{
|
||||
$this->orderId = $orderId;
|
||||
$this->referenceId = $referenceId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getOrderId(): string
|
||||
{
|
||||
return $this->orderId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getReferenceId(): string
|
||||
{
|
||||
return $this->referenceId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function completeStep(): bool {
|
||||
|
||||
$orderStep = OrderStep::where('order_id', $this->getOrderId())
|
||||
->where('reference_id', $this->getReferenceId())->firstOrFail();
|
||||
|
||||
$orderStep->complete = 1;
|
||||
|
||||
if($orderStep->save()){
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
namespace App\Classes\Modules\Orders\Steps\Processors;
|
||||
|
||||
|
||||
class Delivery extends AbstractOrderRequirement
|
||||
{
|
||||
public function execute(): bool {
|
||||
return $this->completeStep();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
namespace App\Classes\Modules\Orders\Steps\Processors;
|
||||
|
||||
|
||||
class OrderProcessing extends AbstractOrderRequirement
|
||||
{
|
||||
public function execute(): bool {
|
||||
return $this->completeStep();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
namespace App\Classes\Modules\Orders\Steps\Processors;
|
||||
|
||||
|
||||
class Shipping extends AbstractOrderRequirement
|
||||
{
|
||||
public function execute(): bool {
|
||||
return $this->completeStep();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
namespace App\Classes\Modules\Orders\Steps\Processors;
|
||||
|
||||
|
||||
class SupplierPacking extends AbstractOrderRequirement
|
||||
{
|
||||
public function execute(): bool {
|
||||
return $this->completeStep();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
namespace App\Classes\Modules\Orders\Steps\Processors\Validation;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
|
||||
class ReceiveNoteValidation
|
||||
{
|
||||
public function execute(Request $request): bool {
|
||||
|
||||
return !(Validator::make($request->all(), [
|
||||
'tracking_no' => 'required',
|
||||
'receive_date' => 'required|date'
|
||||
]))->fails();
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
namespace App\Classes\Modules\Orders\Steps\Processors;
|
||||
|
||||
|
||||
class WarehouseArrival extends AbstractOrderRequirement
|
||||
{
|
||||
public function execute(): bool {
|
||||
return $this->completeStep();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
namespace App\Classes\Modules\Orders\Steps\Processors;
|
||||
|
||||
|
||||
use App\Models\PackingList;
|
||||
|
||||
class WarehousePacking extends AbstractOrderRequirement
|
||||
{
|
||||
public function execute(): bool {
|
||||
|
||||
$packingList = PackingList::where('order_id', $this->getOrderId())->first();
|
||||
if($packingList){
|
||||
if($packingList->confirmed){
|
||||
return $this->completeStep();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
namespace App\Classes\Modules\Orders\Steps\Processors;
|
||||
|
||||
use App\Classes\Modules\Orders\ReceiveNotes\CreateReceiveNote;
|
||||
use App\Classes\Modules\Orders\Steps\Processors\Validation\ReceiveNoteValidation;
|
||||
use App\Classes\Objects\Orders\ReceiveNotes\ReceiveNoteObject;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class WarehouseReceive extends AbstractOrderRequirement
|
||||
{
|
||||
public function execute(Request $request): bool {
|
||||
|
||||
if((new ReceiveNoteValidation())->execute($request)){
|
||||
|
||||
if((new CreateReceiveNote())->execute(new ReceiveNoteObject($this->getOrderId(), $request))){
|
||||
return $this->completeStep();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
namespace App\Classes\Modules\Orders\Steps\Processors;
|
||||
|
||||
|
||||
class WarehouseUnpacking extends AbstractOrderRequirement
|
||||
{
|
||||
public function execute(): bool {
|
||||
return $this->completeStep();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Orders\Steps\Requirements;
|
||||
|
||||
|
||||
use App\Classes\Constants;
|
||||
use App\Classes\Modules\Orders\Steps\Processors\Delivery;
|
||||
use App\Classes\Modules\Orders\Steps\Processors\OrderProcessing;
|
||||
use App\Classes\Modules\Orders\Steps\Processors\Shipping;
|
||||
use App\Classes\Modules\Orders\Steps\Processors\SupplierPacking;
|
||||
use App\Classes\Modules\Orders\Steps\Processors\WarehouseArrival;
|
||||
use App\Classes\Modules\Orders\Steps\Processors\WarehousePacking;
|
||||
use App\Classes\Modules\Orders\Steps\Processors\WarehouseReceive;
|
||||
use App\Classes\Modules\Orders\Steps\Processors\WarehouseUnpacking;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class StepManager
|
||||
{
|
||||
/** @var string */
|
||||
protected $orderId;
|
||||
|
||||
/** @var string */
|
||||
protected $step;
|
||||
|
||||
/** @var null|Request */
|
||||
protected $request;
|
||||
|
||||
/**
|
||||
* StepManager constructor.
|
||||
* @param string $orderId
|
||||
* @param string $step
|
||||
* @param Request|null $request
|
||||
*/
|
||||
public function __construct(string $orderId, string $step, ?Request $request)
|
||||
{
|
||||
$this->orderId = $orderId;
|
||||
$this->step = $step;
|
||||
$this->request = $request;
|
||||
}
|
||||
|
||||
|
||||
public function execute(): bool{
|
||||
switch ($this->step){
|
||||
case Constants::ORDER_PROCESSING_STEP:
|
||||
return (new OrderProcessing($this->orderId, $this->step))->execute();
|
||||
case Constants::ORDER_WAREHOUSE_RECEIVING_STEP:
|
||||
return (new WarehouseReceive($this->orderId, $this->step))->execute($this->request);
|
||||
case Constants::ORDER_WAREHOUSE_PACKING_STEP:
|
||||
return (new WarehousePacking($this->orderId, $this->step))->execute($this->request);
|
||||
case Constants::ORDER_NO_WAREHOUSE_PENDING_SUPPLIER:
|
||||
return (new SupplierPacking($this->orderId, $this->step))->execute();
|
||||
case Constants::ORDER_SHIPPING_STEP:
|
||||
return (new Shipping($this->orderId, $this->step))->execute();
|
||||
case Constants::ORDER_WAREHOUSE_ARRIVAL_STEP:
|
||||
return (new WarehouseArrival($this->orderId, $this->step))->execute();
|
||||
case Constants::ORDER_WAREHOUSE_UNPACKING_STEP:
|
||||
return (new WarehouseUnpacking($this->orderId, $this->step))->execute();
|
||||
case Constants::ORDER_DELIVERY_STEP:
|
||||
return (new Delivery($this->orderId, $this->step))->execute();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Steps;
|
||||
|
||||
use App\Classes\Constants;
|
||||
use App\Models\ModularStep;
|
||||
|
||||
class GenerateModularSteps
|
||||
{
|
||||
public function execute() {
|
||||
foreach (Constants::ORDER_MODULAR_STEPS as $key=>$groups){
|
||||
$modularStep = new ModularStep;
|
||||
$modularStep->reference_id = $key;
|
||||
if($modularStep->save()){
|
||||
$this->createGroups($modularStep->id, $groups);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private function createGroups(string $modularId, array $groups){
|
||||
|
||||
$modularStep = ModularStep::findOrFail($modularId);
|
||||
|
||||
foreach ($groups as $array){
|
||||
|
||||
$object = (new GroupStep($modularStep->id, $array['previous'], $array['next'], $array['steps']));
|
||||
|
||||
$group = $modularStep->moduleGroups()->create([
|
||||
'previous' => $object->getPrevious(),
|
||||
'next' => $object->getNext()
|
||||
]);
|
||||
|
||||
$group->steps()->createMany($object->getSteps());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Steps;
|
||||
|
||||
use App\Classes\Objects\StepObject;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class GenerateSteps
|
||||
{
|
||||
public function execute(array $array) {
|
||||
|
||||
$data = [];
|
||||
|
||||
foreach ($array as $referenceId=>$value){
|
||||
|
||||
$object = new StepObject($referenceId, $value['initial_name'], $value['final_name'], $value['description']);
|
||||
|
||||
$data[] = [
|
||||
'reference_id' => $object->getReferenceId(),
|
||||
'initial_name' => $object->getInitialName(),
|
||||
'final_name' => $object->getFinalName(),
|
||||
'description' => $object->getDescription(),
|
||||
'created_at' => Carbon::now(),
|
||||
'updated_at' => Carbon::now()
|
||||
];
|
||||
}
|
||||
|
||||
return $data;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Steps;
|
||||
|
||||
use App\Http\Resources\Step as StepResource;
|
||||
use App\Models\PrimaryStep;
|
||||
use App\Models\Step;
|
||||
|
||||
class GetStep
|
||||
{
|
||||
public function execute($referenceId){
|
||||
$step = PrimaryStep::where('reference_id', $referenceId)->first();
|
||||
if($step){
|
||||
return new StepResource($step);
|
||||
}
|
||||
|
||||
return new StepResource(Step::where('reference_id', $referenceId)->first());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Steps;
|
||||
|
||||
class GroupStep
|
||||
{
|
||||
/** @var string */
|
||||
protected $modularId;
|
||||
|
||||
/** @var string */
|
||||
protected $previous;
|
||||
|
||||
/** @var string */
|
||||
protected $next;
|
||||
|
||||
/** @var array */
|
||||
protected $steps;
|
||||
|
||||
/**
|
||||
* AbstractGroupStep constructor.
|
||||
* @param string $modularId
|
||||
* @param string $previous
|
||||
* @param string $next
|
||||
* @param array $steps
|
||||
*/
|
||||
public function __construct(string $modularId, string $previous, string $next, array $steps)
|
||||
{
|
||||
$this->modularId = $modularId;
|
||||
$this->previous = $previous;
|
||||
$this->next = $next;
|
||||
$this->steps = $steps;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getModularId(): string
|
||||
{
|
||||
return $this->modularId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getPrevious(): string
|
||||
{
|
||||
return $this->previous;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getNext(): string
|
||||
{
|
||||
return $this->next;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getSteps(): array
|
||||
{
|
||||
return (new GenerateSteps())->execute($this->steps);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Steps;
|
||||
|
||||
|
||||
use App\Classes\Constants;
|
||||
|
||||
class ModularStep
|
||||
{
|
||||
public function warehouseModule(string $type): string {
|
||||
return $type ? Constants::ORDER_MODULE_WAREHOUSE : Constants::ORDER_MODULE_NO_WAREHOUSE;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Modules\Steps;
|
||||
|
||||
use App\Classes\Constants;
|
||||
use App\Http\Resources\PackingList as PackingListResource;
|
||||
use App\Http\Resources\ShippingArrangement as ShippingArrangementResource;
|
||||
use App\Models\PackingList;
|
||||
use App\Models\ShippingArrangement;
|
||||
|
||||
class StepAttachments
|
||||
{
|
||||
public function execute($order_id, $referenceId){
|
||||
switch ($referenceId) {
|
||||
case Constants::ORDER_WAREHOUSE_PACKING_STEP:
|
||||
return new PackingListResource(PackingList::where('order_id', $order_id)->first());
|
||||
case Constants::ORDER_SHIPPING_STEP:
|
||||
return new ShippingArrangementResource(ShippingArrangement::where('order_id', $order_id)->first());
|
||||
case Constants::ORDER_DELIVERY_STEP:
|
||||
return new ShippingArrangementResource(ShippingArrangement::where('order_id', $order_id)->first());
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,147 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Objects;
|
||||
|
||||
|
||||
class AddressObject
|
||||
{
|
||||
|
||||
/** @var int */
|
||||
protected $companyId;
|
||||
|
||||
/** @var string|null */
|
||||
protected $streetOne;
|
||||
|
||||
/** @var string|null */
|
||||
protected $streetTwo;
|
||||
|
||||
/** @var string|null */
|
||||
protected $city;
|
||||
|
||||
/** @var string|null */
|
||||
protected $state;
|
||||
|
||||
/** @var string|null */
|
||||
protected $postCode;
|
||||
|
||||
/** @var string|null */
|
||||
protected $country;
|
||||
|
||||
/** @var int|null */
|
||||
protected $id;
|
||||
|
||||
/** @var string|null */
|
||||
protected $reference;
|
||||
|
||||
/** @var string|null */
|
||||
protected $contact;
|
||||
|
||||
/**
|
||||
* AddressObject constructor.
|
||||
* @param int $companyId
|
||||
* @param null|string $streetOne
|
||||
* @param null|string $streetTwo
|
||||
* @param null|string $city
|
||||
* @param null|string $state
|
||||
* @param null|string $postCode
|
||||
* @param null|string $country
|
||||
* @param int|null $id
|
||||
* @param null|string $reference
|
||||
* @param null|string $contact
|
||||
*/
|
||||
public function __construct(int $companyId, ?string $streetOne, ?string $streetTwo, ?string $city, ?string $state, ?string $postCode, ?string $country, ?int $id = null, ?string $reference = null, ?string $contact = null)
|
||||
{
|
||||
$this->companyId = $companyId;
|
||||
$this->streetOne = $streetOne;
|
||||
$this->streetTwo = $streetTwo;
|
||||
$this->city = $city;
|
||||
$this->state = $state;
|
||||
$this->postCode = $postCode;
|
||||
$this->country = $country;
|
||||
$this->id = $id;
|
||||
$this->reference = $reference;
|
||||
$this->contact = $contact;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getCompanyId(): int
|
||||
{
|
||||
return $this->companyId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return null|string
|
||||
*/
|
||||
public function getStreetOne(): ?string
|
||||
{
|
||||
return $this->streetOne;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return null|string
|
||||
*/
|
||||
public function getStreetTwo(): ?string
|
||||
{
|
||||
return $this->streetTwo;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return null|string
|
||||
*/
|
||||
public function getCity(): ?string
|
||||
{
|
||||
return $this->city;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return null|string
|
||||
*/
|
||||
public function getState(): ?string
|
||||
{
|
||||
return $this->state;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return null|string
|
||||
*/
|
||||
public function getPostCode(): ?string
|
||||
{
|
||||
return $this->postCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return null|string
|
||||
*/
|
||||
public function getCountry(): ?string
|
||||
{
|
||||
return $this->country;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int|null
|
||||
*/
|
||||
public function getId(): ?int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return null|string
|
||||
*/
|
||||
public function getReference(): ?string
|
||||
{
|
||||
return $this->reference;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return null|string
|
||||
*/
|
||||
public function getContact(): ?string
|
||||
{
|
||||
return $this->contact;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Objects\Orders;
|
||||
|
||||
use App\Classes\Interfaces\Order\Steps\OrderStep as OrderStepInterface;
|
||||
|
||||
class OrderStepObject implements OrderStepInterface
|
||||
{
|
||||
/** @var bool */
|
||||
protected $isPrimary;
|
||||
|
||||
/** @var string */
|
||||
protected $referenceId;
|
||||
|
||||
/** @var float */
|
||||
protected $sequence;
|
||||
|
||||
/**
|
||||
* AbstractOrderStep constructor.
|
||||
* @param bool $isPrimary
|
||||
* @param string $referenceId
|
||||
* @param float $sequence
|
||||
*/
|
||||
public function __construct(bool $isPrimary, string $referenceId, float $sequence)
|
||||
{
|
||||
$this->isPrimary = $isPrimary;
|
||||
$this->referenceId = $referenceId;
|
||||
$this->sequence = $sequence;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isPrimary(): bool
|
||||
{
|
||||
return $this->isPrimary;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getReferenceId(): string
|
||||
{
|
||||
return $this->referenceId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return float
|
||||
*/
|
||||
public function getSequence(): float
|
||||
{
|
||||
return $this->sequence;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Objects\Orders\ReceiveNotes;
|
||||
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ReceiveNoteObject
|
||||
{
|
||||
/** @var int */
|
||||
protected $orderId;
|
||||
|
||||
/** @var string */
|
||||
protected $trackingNo;
|
||||
|
||||
/** @var Carbon */
|
||||
protected $receiveDate;
|
||||
|
||||
/**
|
||||
* AbstractReceiveNote constructor.
|
||||
* @param int $orderId
|
||||
* @param Request $request
|
||||
*/
|
||||
public function __construct(int $orderId, Request $request)
|
||||
{
|
||||
$this->orderId = $orderId;
|
||||
$this->trackingNo = $request->input('tracking_no');
|
||||
$this->receiveDate = Carbon::parse($request->input('receive_date'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getOrderId(): int
|
||||
{
|
||||
return $this->orderId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getTrackingNo(): string
|
||||
{
|
||||
return $this->trackingNo;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Carbon
|
||||
*/
|
||||
public function getReceiveDate(): Carbon
|
||||
{
|
||||
return $this->receiveDate;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Objects;
|
||||
|
||||
use App\Classes\Interfaces\Steps\Step as StepInterface;
|
||||
|
||||
class StepObject implements StepInterface
|
||||
{
|
||||
/** @var string */
|
||||
protected $referenceId;
|
||||
|
||||
/** @var string */
|
||||
protected $initialName;
|
||||
|
||||
/** @var string */
|
||||
protected $finalName;
|
||||
|
||||
/** @var string */
|
||||
protected $description;
|
||||
|
||||
/**
|
||||
* AbstractStep constructor.
|
||||
* @param $referenceId
|
||||
* @param $initialName
|
||||
* @param $finalName
|
||||
* @param $description
|
||||
*/
|
||||
public function __construct($referenceId, $initialName, $finalName, $description)
|
||||
{
|
||||
$this->referenceId = $referenceId;
|
||||
$this->initialName = $initialName;
|
||||
$this->finalName = $finalName;
|
||||
$this->description = $description;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getReferenceId(): string
|
||||
{
|
||||
return $this->referenceId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getInitialName(): string
|
||||
{
|
||||
return $this->initialName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getFinalName(): string
|
||||
{
|
||||
return $this->finalName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getDescription(): string
|
||||
{
|
||||
return $this->description;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Service\Documents;
|
||||
|
||||
|
||||
class FilterDocuments
|
||||
{
|
||||
|
||||
/** @var array */
|
||||
protected $documents;
|
||||
|
||||
/**
|
||||
* FilterDocuments constructor.
|
||||
* @param array $documents
|
||||
*/
|
||||
public function __construct(array $documents)
|
||||
{
|
||||
$this->documents = $documents;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
* @return array
|
||||
*/
|
||||
public function execute(string $type): array {
|
||||
|
||||
return array_filter($this->documents, function($document) use($type) {
|
||||
return ($type === 'old') ? substr($document, 0, 5) !== 'data:': substr($document, 0, 5) === 'data:';
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Service\Documents;
|
||||
|
||||
|
||||
class RouteToNameDocuments
|
||||
{
|
||||
|
||||
/**
|
||||
* @param array $documents
|
||||
* @param string $path
|
||||
* @return array
|
||||
*/
|
||||
public function execute(array $documents, string $path): array {
|
||||
return array_map(function($value) use($path) {
|
||||
return str_replace(route('storage').'/'.$path,"", $value);
|
||||
}, $documents);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Service\Files;
|
||||
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use App\Classes\Constants;
|
||||
|
||||
class Base64Uploader
|
||||
{
|
||||
public function execute( string $path, ?string $base64) : ?string {
|
||||
|
||||
if($base64 !== null){
|
||||
|
||||
$type = $this->getFileType($base64);
|
||||
|
||||
$extension = $this->getExtension($base64, $type);
|
||||
|
||||
$uniqueName = uniqid().time();
|
||||
|
||||
$imagePath = $path.'/'.$uniqueName.'.'.$extension;
|
||||
|
||||
$encodedExtension = $extension;
|
||||
|
||||
if($extension === Constants::EXCEL_FILE_EXTENSION){
|
||||
$encodedExtension = Constants::EXCEL_FILE_ENCODED_EXTENSION;
|
||||
}
|
||||
|
||||
$data = base64_decode(str_replace(' ', '+', str_replace('data:'.$type.'/'.$encodedExtension.';base64,', '', $base64)));
|
||||
|
||||
|
||||
Storage::disk('public')->put($imagePath, $data);
|
||||
|
||||
return $uniqueName.'.'.$extension;
|
||||
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
private function getFileType(string $base64){
|
||||
return explode('/', explode(':', substr($base64, 0, strpos($base64, ';')))[1])[0];
|
||||
}
|
||||
|
||||
private function getExtension(string $base64, string $type) {
|
||||
$extension = explode('/', explode(':', substr($base64, 0, strpos($base64, ';')))[1])[1];
|
||||
|
||||
if($extension === Constants::EXCEL_FILE_ENCODED_EXTENSION){
|
||||
return Constants::EXCEL_FILE_EXTENSION;
|
||||
}
|
||||
|
||||
return $extension;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\Service\Files;
|
||||
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
class DeleteFile
|
||||
{
|
||||
public function execute(string $path, array $files = []): void {
|
||||
|
||||
foreach ($files as $file){
|
||||
Storage::disk('public')->delete($path.$file);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console;
|
||||
|
||||
use Illuminate\Console\Scheduling\Schedule;
|
||||
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
|
||||
|
||||
class Kernel extends ConsoleKernel
|
||||
{
|
||||
/**
|
||||
* The Artisan commands provided by your application.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $commands = [
|
||||
//
|
||||
];
|
||||
|
||||
/**
|
||||
* Define the application's command schedule.
|
||||
*
|
||||
* @param \Illuminate\Console\Scheduling\Schedule $schedule
|
||||
* @return void
|
||||
*/
|
||||
protected function schedule(Schedule $schedule)
|
||||
{
|
||||
// $schedule->command('inspire')
|
||||
// ->hourly();
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the commands for the application.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function commands()
|
||||
{
|
||||
$this->load(__DIR__.'/Commands');
|
||||
|
||||
require base_path('routes/console.php');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
namespace App\Exceptions;
|
||||
|
||||
use Exception;
|
||||
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
|
||||
|
||||
class Handler extends ExceptionHandler
|
||||
{
|
||||
/**
|
||||
* A list of the exception types that are not reported.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $dontReport = [
|
||||
//
|
||||
];
|
||||
|
||||
/**
|
||||
* A list of the inputs that are never flashed for validation exceptions.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $dontFlash = [
|
||||
'password',
|
||||
'password_confirmation',
|
||||
];
|
||||
|
||||
/**
|
||||
* Report or log an exception.
|
||||
*
|
||||
* @param \Exception $exception
|
||||
* @return void
|
||||
*/
|
||||
public function report(Exception $exception)
|
||||
{
|
||||
parent::report($exception);
|
||||
}
|
||||
|
||||
/**
|
||||
* Render an exception into an HTTP response.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Exception $exception
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function render($request, Exception $exception)
|
||||
{
|
||||
return parent::render($request, $exception);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Account;
|
||||
|
||||
use App\Classes\Modules\ControllerLogic\Account\RetrieveUserProfileLogic;
|
||||
use App\Classes\Modules\ControllerLogic\Account\UpdateUserProfileLogic;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class AccountController extends Controller
|
||||
{
|
||||
/**
|
||||
* @param int|null $id
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\Factory|\Illuminate\Http\RedirectResponse|\Illuminate\View\View
|
||||
*/
|
||||
public function index(?int $id = null){
|
||||
return (new RetrieveUserProfileLogic($id))->execute();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
*
|
||||
* @return int
|
||||
* @internal param int|null $id
|
||||
*
|
||||
*/
|
||||
public function update(Request $request): int {
|
||||
return (new UpdateUserProfileLogic($request->get('id') ?: null))->execute($request->except('id'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Account;
|
||||
|
||||
use App\Classes\Modules\ControllerLogic\Account\DeleteUserContactsLogic;
|
||||
use App\Classes\Modules\ControllerLogic\Account\UpdateUserContactsLogic;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
|
||||
class UserContactsController extends Controller
|
||||
{
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function update(Request $request): string {
|
||||
return (new UpdateUserContactsLogic($request->get('id') ?: null))->execute($request);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function delete(Request $request): string {
|
||||
return (new DeleteUserContactsLogic($request->get('id') ?: null))->execute($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
|
||||
|
||||
class ForgotPasswordController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reset Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller is responsible for handling password reset emails and
|
||||
| includes a trait which assists in sending these notifications from
|
||||
| your application to your users. Feel free to explore this trait.
|
||||
|
|
||||
*/
|
||||
|
||||
use SendsPasswordResetEmails;
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('guest');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Foundation\Auth\AuthenticatesUsers;
|
||||
|
||||
class LoginController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Login Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller handles authenticating users for the application and
|
||||
| redirecting them to your home screen. The controller uses a trait
|
||||
| to conveniently provide its functionality to your applications.
|
||||
|
|
||||
*/
|
||||
|
||||
use AuthenticatesUsers;
|
||||
|
||||
/**
|
||||
* Where to redirect users after login.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $redirectTo = '/dashboard';
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('guest')->except('logout');
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the application's login form.
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function showLoginForm()
|
||||
{
|
||||
return view('pages.authentication.login');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Models\User;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Foundation\Auth\RegistersUsers;
|
||||
|
||||
class RegisterController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Register Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller handles the registration of new users as well as their
|
||||
| validation and creation. By default this controller uses a trait to
|
||||
| provide this functionality without requiring any additional code.
|
||||
|
|
||||
*/
|
||||
|
||||
use RegistersUsers;
|
||||
|
||||
/**
|
||||
* Where to redirect users after registration.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $redirectTo = '/dashboard';
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('guest');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a validator for an incoming registration request.
|
||||
*
|
||||
* @param array $data
|
||||
* @return \Illuminate\Contracts\Validation\Validator
|
||||
*/
|
||||
protected function validator(array $data)
|
||||
{
|
||||
return Validator::make($data, [
|
||||
'company_name' => 'required|string',
|
||||
'first_name' => 'required|string|max:255',
|
||||
'last_name' => 'required|string|max:255',
|
||||
'email' => 'required|string|email|max:255|unique:users',
|
||||
'password' => 'required|string|min:6',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new user instance after a valid registration.
|
||||
*
|
||||
* @param array $data
|
||||
* @return \App\Models\User
|
||||
*/
|
||||
protected function create(array $data)
|
||||
{
|
||||
return User::create([
|
||||
'first_name' => $data['first_name'],
|
||||
'last_name' => $data['last_name'],
|
||||
'email' => $data['email'],
|
||||
'password' => Hash::make($data['password']),
|
||||
'company_id' => $newCompany->id
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Foundation\Auth\ResetsPasswords;
|
||||
|
||||
class ResetPasswordController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reset Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller is responsible for handling password reset requests
|
||||
| and uses a simple trait to include this behavior. You're free to
|
||||
| explore this trait and override any methods you wish to tweak.
|
||||
|
|
||||
*/
|
||||
|
||||
use ResetsPasswords;
|
||||
|
||||
/**
|
||||
* Where to redirect users after resetting their password.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $redirectTo = '/dashboard';
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('guest');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Illuminate\Foundation\Auth\VerifiesEmails;
|
||||
|
||||
class VerificationController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Email Verification Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller is responsible for handling email verification for any
|
||||
| user that recently registered with the application. Emails may also
|
||||
| be resent if the user did not receive the original email message.
|
||||
|
|
||||
*/
|
||||
|
||||
use VerifiesEmails;
|
||||
|
||||
/**
|
||||
* Where to redirect users after verification.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $redirectTo = '/dashboard';
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('auth');
|
||||
$this->middleware('signed')->only('verify');
|
||||
$this->middleware('throttle:6,1')->only('verify', 'resend');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Companies;
|
||||
|
||||
use App\Classes\Objects\AddressObject;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\AddressBook as AddressBookResource;
|
||||
use App\Classes\ControllersLogic\Companies\AddressBook\ListAddresses;
|
||||
use App\Classes\ControllersLogic\Companies\AddressBook\DeleteAddress;
|
||||
use App\Classes\ControllersLogic\Companies\AddressBook\UpdateAddress;
|
||||
use App\Classes\ControllersLogic\Companies\AddressBook\DefaultAddress;
|
||||
|
||||
|
||||
class AddressBookController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* @param string $companyId
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
||||
*/
|
||||
public function index(string $companyId) {
|
||||
|
||||
return (new ListAddresses())->execute($companyId);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param string $companyId
|
||||
* @return AddressBookResource
|
||||
*/
|
||||
public function store(Request $request, string $companyId)
|
||||
{
|
||||
return (new UpdateAddress())->execute(new AddressObject(
|
||||
$companyId,
|
||||
$request->input('street_one'),
|
||||
$request->input('street_two'),
|
||||
$request->input('city'),
|
||||
$request->input('state'),
|
||||
$request->input('post_code'),
|
||||
$request->input('country'),
|
||||
$request->input('id'),
|
||||
$request->input('reference'),
|
||||
$request->input('contact')
|
||||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* Set default address
|
||||
*
|
||||
* @param string $id
|
||||
* @param string $companyId
|
||||
* @return AddressBookResource
|
||||
*/
|
||||
public function default(string $companyId, string $id)
|
||||
{
|
||||
return (new DefaultAddress())->execute($companyId, $id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param string $companyId
|
||||
* @param string $id
|
||||
*
|
||||
* @return AddressBookResource
|
||||
*/
|
||||
public function destroy(string $companyId, string $id): AddressBookResource {
|
||||
|
||||
return (new DeleteAddress())->execute($companyId, $id);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Companies;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\Company as CompanyResource;
|
||||
use App\Classes\ControllersLogic\Companies\ListCompanies;
|
||||
use App\Classes\ControllersLogic\Companies\UpdateCompany;
|
||||
use App\Classes\ControllersLogic\Companies\CompanyProfile;
|
||||
use App\Classes\ControllersLogic\Companies\DeleteCompany;
|
||||
|
||||
|
||||
class CompanyController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
*/
|
||||
public function index() {
|
||||
return (new ListCompanies())->execute();
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
*
|
||||
* @return CompanyResource
|
||||
*/
|
||||
public function store(Request $request): CompanyResource {
|
||||
return (new UpdateCompany())->execute($request);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param int $id
|
||||
*
|
||||
* @return CompanyResource
|
||||
*/
|
||||
public function show($id): CompanyResource {
|
||||
return (new CompanyProfile())->execute($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param int $id
|
||||
*
|
||||
* @return CompanyResource
|
||||
*/
|
||||
public function destroy($id): CompanyResource {
|
||||
return (new DeleteCompany())->execute($id);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Contacts;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\Contact as ContactResource;
|
||||
use App\Classes\Constants;
|
||||
use App\Classes\ControllersLogic\Contacts\ListContacts;
|
||||
use App\Classes\ControllersLogic\Contacts\UpdateContact;
|
||||
use App\Classes\ControllersLogic\Contacts\DeleteContact;
|
||||
|
||||
class ContactController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
* @param string $type
|
||||
* @param string $reference
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
||||
*/
|
||||
public function index(string $type, string $reference) {
|
||||
|
||||
return (new ListContacts())->execute(Constants::MODULE_TYPES[$type], $reference);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param string $type
|
||||
* @param string $reference
|
||||
* @return ContactResource
|
||||
*/
|
||||
public function store(Request $request, string $type, string $reference)
|
||||
{
|
||||
return (new UpdateContact())->execute($request, Constants::MODULE_TYPES[$type], $reference);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param string $id
|
||||
*
|
||||
* @return ContactResource
|
||||
*/
|
||||
public function destroy(string $id): ContactResource {
|
||||
|
||||
return (new DeleteContact())->execute($id);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Foundation\Bus\DispatchesJobs;
|
||||
use Illuminate\Routing\Controller as BaseController;
|
||||
use Illuminate\Foundation\Validation\ValidatesRequests;
|
||||
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
||||
|
||||
class Controller extends BaseController
|
||||
{
|
||||
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
class DashboardController extends Controller
|
||||
{
|
||||
public function index(){
|
||||
return view('pages.dashboard');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Orders;
|
||||
|
||||
use App\Classes\ControllersLogic\Orders\CreateOrder;
|
||||
use App\Classes\ControllersLogic\Orders\UpdateOrderStep;
|
||||
use App\Models\CustomIssues;
|
||||
use App\Models\Order;
|
||||
use App\Models\PackingList;
|
||||
use App\Models\ShippingArrangement;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\Order as OrderResource;
|
||||
|
||||
class OrderController extends Controller
|
||||
{
|
||||
|
||||
public function listCompanyOrders(String $companyId){
|
||||
$orders = Order::where('company_id', $companyId)->paginate(5);
|
||||
return OrderResource::collection($orders);
|
||||
}
|
||||
|
||||
public function insert(String $companyId, Request $request){
|
||||
return (new CreateOrder())->execute($companyId, $request) ? 200 : 408;
|
||||
}
|
||||
|
||||
public function updateStep(String $orderId, Request $request){
|
||||
return (new UpdateOrderStep())->execute($orderId, $request) ? 200 : 408;
|
||||
}
|
||||
|
||||
public function updatePackingList(String $orderId, Request $request){
|
||||
$packingList = PackingList::updateOrCreate(['order_id' => $orderId],['reference_no' => $request->input('reference_no')]);
|
||||
$confirmed = true;
|
||||
$packages = [];
|
||||
|
||||
foreach ($request->input('packages') as $package) {
|
||||
if(trim($package['description']) !== '' || $package['description'] !== null){
|
||||
$packages[] = $package;
|
||||
if($package['width'] == 0 || $package['length'] == 0 || $package['height'] == 0){
|
||||
|
||||
$confirmed = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(empty($packages)){
|
||||
$confirmed = false;
|
||||
}
|
||||
|
||||
$packingList->packages()->delete();
|
||||
$packingList->packages()->createMany($packages);
|
||||
|
||||
$packingList->confirmed = $confirmed;
|
||||
|
||||
if($packingList->save()){
|
||||
|
||||
}
|
||||
return 408;
|
||||
}
|
||||
|
||||
public function orderShippingArrangement(String $orderId, Request $request){
|
||||
$shippingArrangement = ShippingArrangement::updateOrCreate(['order_id' => $orderId],['container_no' => $request->input('container_no'), 'seal_no' => $request->input('seal_no')]);
|
||||
$shippingArrangement->shippingSchedule()->delete();
|
||||
$shippingArrangement->shippingSchedule()->create(['ETD' => Carbon::parse($request->input('schedule')['ETD']), 'ETA' => Carbon::parse($request->input('schedule')['ETA'])]);
|
||||
return 200;
|
||||
}
|
||||
|
||||
public function rescheduleShipping(String $orderId, Request $request){
|
||||
$shippingArrangement = ShippingArrangement::where('order_id', $orderId)->first();
|
||||
$shippingArrangement->shippingSchedule()->update(['status' => 2]);
|
||||
$shippingArrangement->shippingSchedule()->create(['ETD' => Carbon::parse($request->input('ETD')), 'ETA' => Carbon::parse($request->input('ETA'))]);
|
||||
return 200;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Services;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Resources\Country as CountryResource;
|
||||
use App\Http\Controllers\Controller;
|
||||
|
||||
|
||||
class CountriesListController extends Controller
|
||||
{
|
||||
public function index(){
|
||||
return countries();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,167 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Classes\ControllersLogic\Companies\AddressBook\UpdateAddress;
|
||||
use App\Classes\Objects\AddressObject;
|
||||
use App\Models\Company;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Collection;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
use App\Classes\Excel\Import\CompaniesImport;
|
||||
|
||||
class TestController extends Controller
|
||||
{
|
||||
public function index(Request $request){
|
||||
$companiesImport = Excel::toArray(new CompaniesImport(), $request->file('xsl'));
|
||||
$companies = new Collection();
|
||||
|
||||
foreach ($companiesImport[0] as $key => $company){
|
||||
if($key !== 0) {
|
||||
try {
|
||||
$billingAddress = $this->convertAddress(trim($company[6]) .' '. trim($company[7]) .' '. trim($company[8]) .' '. trim($company[9]));
|
||||
$deliveryAddress = $this->convertAddress(trim($company[13]) .' '. trim($company[14]) .' '. trim($company[15]) .' '. trim($company[16]));
|
||||
$newCompany = new Company();
|
||||
$newCompany->name = ucwords(strtolower(trim($company[0])));
|
||||
$newCompany->marking = trim($company[1]);
|
||||
$newCompany->registration_no = trim($company[2]);
|
||||
$newCompany->save();
|
||||
|
||||
$request->request->add(['street_one' => trim($billingAddress['street_address'])]);
|
||||
$request->request->add(['city' => ucwords(trim($billingAddress['city']))]);
|
||||
$request->request->add(['post_code' => ucwords(trim($billingAddress['post_code']))]);
|
||||
$request->request->add(['country' => ucwords(trim($billingAddress['country']))]);
|
||||
|
||||
(new UpdateAddress())->execute(new AddressObject(
|
||||
$newCompany->id,
|
||||
trim($deliveryAddress['street_address']),
|
||||
null,
|
||||
trim($deliveryAddress['city']),
|
||||
trim($deliveryAddress['state']),
|
||||
trim($deliveryAddress['post_code']),
|
||||
trim($deliveryAddress['country'])
|
||||
));
|
||||
|
||||
(new UpdateAddress())->execute($request, $newCompany->id, false, true);
|
||||
|
||||
$request->request->replace(['street_one' => trim($deliveryAddress['street_address'])]);
|
||||
$request->request->replace(['city' => ucwords(trim($deliveryAddress['city']))]);
|
||||
$request->request->replace(['post_code' => ucwords(trim($deliveryAddress['post_code']))]);
|
||||
$request->request->replace(['country' => ucwords(trim($deliveryAddress['country']))]);
|
||||
|
||||
(new UpdateAddress())->execute($request, $newCompany->id, true);
|
||||
} catch (QueryException $exception){
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
// $companies->push([
|
||||
// 'name' => ucwords(strtolower(trim($company[0]))),
|
||||
// 'marking' => trim($company[1]),
|
||||
// 'registration_no' => $company[2],
|
||||
// 'contact' => [
|
||||
// 'name' => $company[3],
|
||||
// 'email' => $company[4],
|
||||
// 'phone' => $company[5],
|
||||
// ],
|
||||
// 'address' => $this->convertAddress(trim($company[6]) .' '. trim($company[7]) .' '. trim($company[8]) .' '. trim($company[9])),
|
||||
// 'address_book' => $this->convertAddress(trim($company[13]) .' '. trim($company[14]) .' '. trim($company[15]) .' '. trim($company[16]))
|
||||
//// 'shipping_rate' => $company[17]
|
||||
// ]);
|
||||
// $companies->push($this->convertAddress(trim($company[6]) .' '. trim($company[7]) .' '. trim($company[8]) .' '. trim($company[9])));
|
||||
}
|
||||
}
|
||||
|
||||
dd($companies);
|
||||
}
|
||||
|
||||
private function cleanAddress(string $address){
|
||||
$string = strtolower($address);
|
||||
$string = str_replace(', ',' ',$string);
|
||||
$string = str_replace(',',' ',$string);
|
||||
$string = str_replace('no.','no|',$string);
|
||||
$string = str_replace('.','',$string);
|
||||
$string = str_replace('no|','no ',$string);
|
||||
$string = str_replace(',','',$string);
|
||||
$string = str_replace(' kl ',' kuala lumpur ', $string);
|
||||
$string = str_replace('selangor darul ehsan','selangor', $string);
|
||||
$string = str_replace('malaysia','',$string);
|
||||
$string = str_replace('wp','',$string);
|
||||
$string = str_replace('melaka','malacca',$string);
|
||||
$string = str_replace('pj','petaling jaya',$string);
|
||||
$string = str_replace('kualalumpur','kuala lumpur',$string);
|
||||
$string = str_replace('wilayah persekutuan','',$string);
|
||||
return trim($string);
|
||||
}
|
||||
|
||||
private function convertAddress(string $string){
|
||||
$address = $this->cleanAddress($string);
|
||||
$postcode = '';
|
||||
|
||||
$state = $this->addressState($address);
|
||||
if($state !== ''){
|
||||
$address = preg_replace('~'.' '.$state.'(?!.*'.' '.$state.')~', '', $address);
|
||||
if($state === 'penang'){
|
||||
$address = preg_replace('~pulau pinang(?!.*'.' pulau pinang)~', '', $address);
|
||||
}
|
||||
}
|
||||
|
||||
$city = '';
|
||||
|
||||
if(preg_match('~\d{5,6}(?!.*'.'\d{5,6})~', $address, $postCodes)){
|
||||
$postcode = $postCodes[0];
|
||||
$array = explode($postcode.' ', $address);
|
||||
if(count($array) > 1){
|
||||
$city = $array[1];
|
||||
if(strpos($city, 'kuala lumpur')){
|
||||
$city = str_replace(' kuala lumpur','', $city);
|
||||
$state = 'kuala lumpur';
|
||||
$address = str_replace(' kuala lumpur','', $address);
|
||||
}
|
||||
|
||||
} else {
|
||||
if(strpos($address, 'kuala lumpur')){
|
||||
$city = 'kuala lumpur';
|
||||
}
|
||||
}
|
||||
|
||||
if($city !== ''){
|
||||
$address = str_replace(' '.$city,'', $address);
|
||||
}
|
||||
|
||||
$address = str_replace(' '.$postcode,'', $address);
|
||||
}
|
||||
|
||||
$country = 'malaysia';
|
||||
if(strpos($address, 'singapore')){
|
||||
$country = 'singapore';
|
||||
$address = str_replace(' singapore','', $address);
|
||||
}
|
||||
|
||||
$address = preg_replace('/\s+/', ' ', $address);
|
||||
$address = ucwords($address);
|
||||
|
||||
return [
|
||||
'street_address' => trim($address),
|
||||
'city' => $city,
|
||||
'post_code' => $postcode,
|
||||
'state' => $state,
|
||||
'country' => $country
|
||||
];
|
||||
}
|
||||
|
||||
private function addressState(string $string){
|
||||
$states = ['penang', 'selangor', 'johor', 'sabah', 'sarawak', 'malacca', 'perak', 'kelantan', 'kedah', 'pahang', 'terengganu', 'negeri sembilan', 'perlis', 'kuala lumpur', 'pulau pinang'];
|
||||
foreach ($states as $state){
|
||||
if(stripos($string, $state)){
|
||||
if($state === 'pulau pinang'){
|
||||
return 'penang';
|
||||
}
|
||||
return $state;
|
||||
}
|
||||
}
|
||||
return '';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Warehouses;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\Warehouse as WarehouseResource;
|
||||
use App\Classes\ControllersLogic\Warehouses\ListWarehouses;
|
||||
use App\Classes\ControllersLogic\Warehouses\UpdateWarehouse;
|
||||
use App\Classes\ControllersLogic\Warehouses\WarehouseProfile;
|
||||
use App\Classes\ControllersLogic\Warehouses\DeleteWarehouse;
|
||||
|
||||
class WarehouseController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @param null|string $all
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
||||
*/
|
||||
public function index(?string $all = null) {
|
||||
return (new ListWarehouses())->execute($all === null ? false : true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
*
|
||||
* @return WarehouseResource
|
||||
*/
|
||||
public function store(Request $request): WarehouseResource {
|
||||
return (new UpdateWarehouse())->execute($request);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*
|
||||
* @param int $id
|
||||
*
|
||||
* @return WarehouseResource
|
||||
*/
|
||||
public function show($id): WarehouseResource {
|
||||
return (new WarehouseProfile())->execute($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param int $id
|
||||
*
|
||||
* @return WarehouseResource
|
||||
*/
|
||||
public function destroy($id): WarehouseResource {
|
||||
return (new DeleteWarehouse())->execute($id);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http;
|
||||
|
||||
use App\Http\Middleware\Authentication;
|
||||
use App\Http\Middleware\ClearCache;
|
||||
use Illuminate\Foundation\Http\Kernel as HttpKernel;
|
||||
|
||||
class Kernel extends HttpKernel
|
||||
{
|
||||
/**
|
||||
* The application's global HTTP middleware stack.
|
||||
*
|
||||
* These middleware are run during every request to your application.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $middleware = [
|
||||
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
|
||||
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
|
||||
\App\Http\Middleware\TrimStrings::class,
|
||||
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
|
||||
\App\Http\Middleware\TrustProxies::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* The application's route middleware groups.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $middlewareGroups = [
|
||||
'web' => [
|
||||
\App\Http\Middleware\EncryptCookies::class,
|
||||
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
|
||||
\Illuminate\Session\Middleware\StartSession::class,
|
||||
// \Illuminate\Session\Middleware\AuthenticateSession::class,
|
||||
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||||
\App\Http\Middleware\VerifyCsrfToken::class,
|
||||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
],
|
||||
|
||||
'api' => [
|
||||
\App\Http\Middleware\EncryptCookies::class,
|
||||
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
|
||||
\Illuminate\Session\Middleware\StartSession::class,
|
||||
|
||||
//'throttle:60,1',
|
||||
'bindings',
|
||||
],
|
||||
|
||||
'secure' => [
|
||||
Authentication::class,
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
* The application's route middleware.
|
||||
*
|
||||
* These middleware may be assigned to groups or used individually.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $routeMiddleware = [
|
||||
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
|
||||
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
|
||||
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
|
||||
'can' => \Illuminate\Auth\Middleware\Authorize::class,
|
||||
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
|
||||
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
|
||||
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
|
||||
'clearcache' => ClearCache::class,
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Auth\Middleware\Authenticate as Middleware;
|
||||
|
||||
class Authenticate extends Middleware
|
||||
{
|
||||
/**
|
||||
* Get the path the user should be redirected to when they are not authenticated.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return string
|
||||
*/
|
||||
protected function redirectTo($request)
|
||||
{
|
||||
return route('login');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
|
||||
/**
|
||||
* Class Authentication
|
||||
*
|
||||
* Copyright (C) 2018 buduxs. All rights reserved.
|
||||
* @author Omair Saleh <uldvstar@gmail.com>
|
||||
* @license Proprietary
|
||||
*/
|
||||
class Authentication {
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle($request, Closure $next) {
|
||||
// if the session does not contain the token, redirect back to the login
|
||||
if (auth()->check() === false) {
|
||||
return redirect()->route('login')->withErrors('Your session has expired. Please log in again.');
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode as Middleware;
|
||||
|
||||
class CheckForMaintenanceMode extends Middleware
|
||||
{
|
||||
/**
|
||||
* The URIs that should be reachable while maintenance mode is enabled.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $except = [
|
||||
//
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Foundation\Application;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
|
||||
/**
|
||||
* @copyright Copyright (C) 2018 IP ServerOne Solutions Sdn. Bhd. All rights reserved.
|
||||
* @author Zhe Yang, Lee <zylee@ipserverone.com>
|
||||
* @license Proprietary
|
||||
*/
|
||||
class ClearCache {
|
||||
/** @var Application */
|
||||
private $application;
|
||||
|
||||
/**
|
||||
* @param Application $application
|
||||
*/
|
||||
public function __construct(Application $application) {
|
||||
$this->application = $application;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $request
|
||||
* @param Closure $next
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle($request, Closure $next) {
|
||||
// only run view:clear if we're not on production
|
||||
if ($this->application->environment() !== 'production') {
|
||||
Artisan::call('view:clear');
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
|
||||
|
||||
class EncryptCookies extends Middleware
|
||||
{
|
||||
/**
|
||||
* The names of the cookies that should not be encrypted.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $except = [
|
||||
//
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
|
||||
class RedirectIfAuthenticated
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @param string|null $guard
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle($request, Closure $next, $guard = null)
|
||||
{
|
||||
if (Auth::guard($guard)->check()) {
|
||||
return redirect('/dashboard');
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;
|
||||
|
||||
class TrimStrings extends Middleware
|
||||
{
|
||||
/**
|
||||
* The names of the attributes that should not be trimmed.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $except = [
|
||||
'password',
|
||||
'password_confirmation',
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Fideloper\Proxy\TrustProxies as Middleware;
|
||||
|
||||
class TrustProxies extends Middleware
|
||||
{
|
||||
/**
|
||||
* The trusted proxies for this application.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $proxies;
|
||||
|
||||
/**
|
||||
* The headers that should be used to detect proxies.
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $headers = Request::HEADER_X_FORWARDED_ALL;
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
|
||||
|
||||
class VerifyCsrfToken extends Middleware
|
||||
{
|
||||
/**
|
||||
* Indicates whether the XSRF-TOKEN cookie should be set on the response.
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
protected $addHttpCookie = true;
|
||||
|
||||
/**
|
||||
* The URIs that should be excluded from CSRF verification.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $except = [
|
||||
//
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class AddressBook extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'company_id' => $this->company_id,
|
||||
'reference' => $this->reference,
|
||||
'contact' => $this->contact,
|
||||
'street_one' => $this->street_one,
|
||||
'street_two' => $this->street_two,
|
||||
'city' => $this->city,
|
||||
'state' => $this->state,
|
||||
'post_code' => $this->post_code,
|
||||
'country' => $this->country,
|
||||
'default' => $this->default
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use App\Classes\Constants;
|
||||
use App\Classes\Modules\Documents\ListDocuments;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
use App\Models\AddressBook;
|
||||
|
||||
class Company extends JsonResource
|
||||
{
|
||||
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
$billing = AddressBook::where('company_id', $this->id)
|
||||
->where('billing', true)->first();
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'name' => $this->name,
|
||||
'marking' => $this->marking,
|
||||
'email' => $this->email,
|
||||
'registration_no' => $this->registration_no,
|
||||
'tax_no' => $this->tax_no,
|
||||
'street_one' => $billing ? $billing->street_one : null,
|
||||
'street_two' => $billing ? $billing->street_two : null,
|
||||
'city' => $billing ? $billing->city : null,
|
||||
'state' => $billing ? $billing->state : null,
|
||||
'post_code' => $billing ? $billing->post_code : null,
|
||||
'country' => $billing ? $billing->country : null,
|
||||
'registration_certificate' => (new ListDocuments(Constants::MODULE_TYPES['company'], $this->id, 'registration_certificate'))->execute(),
|
||||
'logo' => (new ListDocuments(Constants::MODULE_TYPES['company'], $this->id, 'logo'))->execute()
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class Contact extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'type' => $this->type,
|
||||
'reference_id' => $this->reference_id,
|
||||
'name' => $this->name,
|
||||
'designation' => $this->designation,
|
||||
'contact' => $this->contact,
|
||||
'email' => $this->email
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class Country extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'name' => $this->name->common
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class Document extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'name' => $this->name,
|
||||
'primary' => $this->primary
|
||||
];
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use App\Classes\Modules\Steps\GetStep;
|
||||
use App\Classes\Modules\Steps\StepAttachments;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class Order extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return array
|
||||
*/
|
||||
public function toArray($request)
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'company_id' => $this->company_id,
|
||||
'marking' => $this->marking,
|
||||
'forwarder_id' => $this->forwarder_id,
|
||||
'supplier_id' => $this->supplier_id,
|
||||
'warehouse_id' => $this->warehouse_id,
|
||||
'current_step' => $this->current_step,
|
||||
'complete' => $this->complete,
|
||||
'steps' => [
|
||||
'details' => (new GetStep())->execute($this->current_step),
|
||||
'attachments' => (new StepAttachments())->execute($this->id, $this->current_step)
|
||||
]
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user