initiate project

This commit is contained in:
Omair Saleh
2019-01-23 23:53:18 +08:00
commit 771c52883f
356 changed files with 104246 additions and 0 deletions
+15
View File
@@ -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
+41
View File
@@ -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
+5
View File
@@ -0,0 +1,5 @@
* text=auto
*.css linguist-vendored
*.scss linguist-vendored
*.js linguist-vendored
CHANGELOG.md export-ignore
+14
View File
@@ -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
+126
View File
@@ -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 [
//
];
}
}
+12
View File
@@ -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();
}
+15
View File
@@ -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;
}
}
+19
View File
@@ -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());
}
}
+66
View File
@@ -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);
}
}
+14
View File
@@ -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;
}
}
}
+147
View File
@@ -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;
}
}
+67
View File
@@ -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;
}
}
+16
View File
@@ -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);
}
}
}
+42
View 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');
}
}
+51
View File
@@ -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);
}
}
+13
View File
@@ -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();
}
}
+167
View File
@@ -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);
}
}
+74
View File
@@ -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,
];
}
+19
View File
@@ -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');
}
}
+31
View File
@@ -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 = [
//
];
}
+39
View File
@@ -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);
}
}
+17
View File
@@ -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);
}
}
+18
View File
@@ -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',
];
}
+23
View File
@@ -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;
}
+24
View File
@@ -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 = [
//
];
}
+31
View File
@@ -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
];
}
}
+40
View File
@@ -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()
];
}
}
+27
View File
@@ -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
];
}
}
+21
View File
@@ -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
];
}
}
+23
View File
@@ -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
];
}
}
+35
View File
@@ -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