WIP - Order steps & remaining APIs

This commit is contained in:
Fairuz
2021-07-22 11:28:58 +08:00
parent d308ab4045
commit 6278ddb16b
65 changed files with 1992 additions and 4 deletions
@@ -0,0 +1,72 @@
<?php
namespace App\Classes\Modules\Banks\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Banks\Standards\Rules\CanCreateBank;
use App\Classes\Modules\Banks\Services\CreatesBank;
use App\Classes\Modules\Banks\DataTransferObjects\BankObject;
use App\Http\Resources\BankResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class CreateBankLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Created Bank',
'message' => 'You have successfully created a new Bank'
];
}
/** @var CanCreateBank */
private $canCreateBank;
/** @var CreatesBank */
private $createsBank;
/**
* CreateBankLogic constructor.
* @param CanCreateBank $canCreateBank
* @param CreatesBank $createsBank
*/
public function __construct(
CanCreateBank $canCreateBank,
CreatesBank $createsBank
)
{
$this->canCreateBank = $canCreateBank;
$this->createsBank = $createsBank;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
$bank_object = new BankObject($request->input('company_id'), $request->input('account_type'),
$request->input('bank_name'), $request->input('holder_name'), $request->input('account_no'),
$request->input('bank_branch'), $request->input('swift'), $request->input('snap'),
$request->input('country_id'), $request->input('reference'));
$this->canCreateBank->passes($bank_object);
$bank = $this->createsBank->execute($bank_object);
return $this->resourceResponse(new BankResource($bank));
}
}
@@ -0,0 +1,77 @@
<?php
namespace App\Classes\Modules\Banks\ControllersLogic;
use App\Classes\Exceptions\RequestValidationException;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Banks\Services\FetchesBank;
use App\Classes\Modules\Banks\Standards\Rules\CanDeleteBank;
use App\Classes\Modules\Banks\Services\DeletesBank;
use App\Http\Resources\BankResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class DeleteBankLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Delete Bank',
'message' => 'You have successfully deleted the Bank'
];
}
/** @var CanDeleteBank */
private $canDeleteBank;
/** @var DeletesBank */
private $deletesBank;
/** @var FetchesBank */
private $fetchesBank;
/**
* DeleteBankLogic constructor.
* @param CanDeleteBank $canDeleteBank
* @param DeletesBank $deletesBank
* @param FetchesBank $fetchesBank
*/
public function __construct(
CanDeleteBank $canDeleteBank,
DeletesBank $deletesBank,
FetchesBank $fetchesBank
)
{
$this->canDeleteBank = $canDeleteBank;
$this->deletesBank = $deletesBank;
$this->fetchesBank = $fetchesBank;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
$this->canDeleteBank->passes();
$bank = $this->fetchesBank->execute(['id' => $request->route('id')]);
if($bank->default){
throw new RequestValidationException('You can\'t delete bank account when it set to default');
}
$this->deletesBank->execute($bank);
return $this->response([]);
}
}
@@ -0,0 +1,62 @@
<?php
namespace App\Classes\Modules\Banks\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Banks\Services\ListsBanks;
use App\Classes\Modules\Banks\Standards\Rules\CanListBanks;
use App\Http\Resources\BankResource;
use App\Http\Resources\CompanyResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListBanksLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieve Banks',
'message' => 'You have successfully retrieved a list of Banks'
];
}
/** @var CanListBanks */
private $canListBanks;
/** @var ListsBanks */
private $listsBanks;
/**
* ListBanksLogic constructor.
* @param CanListBanks $canListBanks
* @param ListsBanks $listsBanks
*/
public function __construct(CanListBanks $canListBanks, ListsBanks $listsBanks)
{
$this->canListBanks = $canListBanks;
$this->listsBanks = $listsBanks;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
$this->canListBanks->passes();
$banks = $this->listsBanks->execute($this->listsBanks->deserializeFilters($request->input('filters')));
return $this->collectionResponse(BankResource::collection($banks));
}
}
@@ -0,0 +1,78 @@
<?php
namespace App\Classes\Modules\Banks\ControllersLogic;
use App\Http\Resources\BankResource;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Banks\Services\FetchesBank;
use App\Classes\Modules\Banks\Services\ListsBanks;
use App\Classes\Modules\Banks\Standards\Rules\CanUpdateBank;
use App\Classes\Modules\Banks\Services\ResetsBanksDefault;
use App\Classes\Modules\Banks\Services\SetsBankToDefault;
use App\Classes\Modules\Banks\DataTransferObjects\BankObject;
use App\Classes\ValueObjects\Constants\DefaultType;
use App\Models\Bank;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class SetBankToDefaultLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Updated Bank',
'message' => 'You have successfully updated the Bank'
];
}
/** @var ResetsBanksDefault */
private $resetsBanksDefault;
/** @var FetchesBank */
private $fetchesBank;
/** @var SetsBankToDefault*/
private $setsBankToDefault ;
/**
* SetBankToDefaultLogic constructor.
* @param ResetsBanksDefault $resetsBanksDefault
* @param FetchesBank $fetchesBank
* @param SetsBankToDefault $setsBankToDefault
*/
public function __construct(ResetsBanksDefault $resetsBanksDefault, FetchesBank $fetchesBank, SetsBankToDefault $setsBankToDefault)
{
$this->resetsBanksDefault = $resetsBanksDefault;
$this->fetchesBank = $fetchesBank;
$this->setsBankToDefault = $setsBankToDefault;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request) : JsonResponse
{
/** @var Bank $bank */
$bank = $this->fetchesBank->execute(['id' => $request->route('id')]);
$this->resetsBanksDefault->execute($bank);
$this->setsBankToDefault->execute($bank);
return $this->resourceResponse(new BankResource($this->setsBankToDefault->execute($bank)));
}
}
@@ -0,0 +1,85 @@
<?php
namespace App\Classes\Modules\Banks\ControllersLogic;
use App\Http\Resources\BankResource;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Banks\Services\FetchesBank;
use App\Classes\Modules\Banks\Standards\Rules\CanUpdateBank;
use App\Classes\Modules\Banks\Services\UpdatesBank;
use App\Classes\Modules\Banks\DataTransferObjects\BankObject;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class UpdateBankLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Update Bank Account',
'message' => 'You have successfully updated the Bank Account'
];
}
/** @var CanUpdateBank */
private $canUpdateBank;
/** @var UpdatesBank */
private $updatesBank;
/** @var FetchesBank */
private $fetchesBank;
/**
* UpdateBankLogic constructor.
* @param CanUpdateBank $canUpdateBank
* @param UpdatesBank $updatesBank
* @param FetchesBank $fetchesBank
*/
public function __construct(
CanUpdateBank $canUpdateBank,
UpdatesBank $updatesBank,
FetchesBank $fetchesBank
)
{
$this->canUpdateBank = $canUpdateBank;
$this->updatesBank = $updatesBank;
$this->fetchesBank = $fetchesBank;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
$bankObject = new BankObject($request->input('company_id'), $request->input('country_id'),
$request->input('reference'), $request->input('bank_name'), $request->input('holder_name'),
$request->input('account_no'));
$bank = $this->fetchesBank->execute(['id' => $request->route('id')]);
$this->canUpdateBank->passes($bankObject);
$bank_query = $this->updatesBank->execute($bank, $bankObject);
return $this->resourceResponse(new BankResource($bank_query));
}
}
@@ -0,0 +1,136 @@
<?php
namespace App\Classes\Modules\Banks\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
class BankObject implements DataTransferObject
{
/** @var int */
private $company_id;
/** @var int */
private $type;
/** @var string */
private $bank_name;
/** @var string */
private $holder_name;
/** @var string */
private $account_no;
/** @var int */
private $country_id;
/** @var string|null */
private $reference;
/**
* BankObject constructor.
* @param int $company_id
* @param int $type
* @param string $bank_name
* @param string $holder_name
* @param string $account_no
* @param int $country_id
* @param null|string $reference
*/
public function __construct(int $company_id, int $type, string $bank_name, string $holder_name, string $account_no, ?string $bank_branch = null, ?string $swift = null, ?string $snap = null, int $country_id, ?string $reference = null)
{
$this->company_id = $company_id;
$this->type = $type;
$this->bank_name = $bank_name;
$this->holder_name = $holder_name;
$this->account_no = $account_no;
$this->bank_branch = $bank_branch;
$this->swift = $swift;
$this->snap = $snap;
$this->country_id = $country_id;
$this->reference = $reference;
}
/**
* @return int
*/
public function getCompanyId(): int
{
return $this->company_id;
}
/**
* @return int
*/
public function getType(): int
{
return $this->type;
}
/**
* @return string
*/
public function getBankName(): string
{
return $this->bank_name;
}
/**
* @return string
*/
public function getHolderName(): string
{
return $this->holder_name;
}
/**
* @return string
*/
public function getAccountNo(): string
{
return $this->account_no;
}
/**
* @return null|string
*/
public function getBankBranch(): ?string
{
return $this->bank_branch;
}
/**
* @return null|string
*/
public function getSwift(): ?string
{
return $this->swift;
}
/**
* @return null|string
*/
public function getSnap(): ?string
{
return $this->snap;
}
/**
* @return int
*/
public function getCountryId(): int
{
return $this->country_id;
}
/**
* @return null|string
*/
public function getReference(): ?string
{
return $this->reference;
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Banks\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Banks\DataTransferObjects\BankObject;
use App\Models\Bank;
class CreatesBank extends AbstractUpdateRecord
{
/**
* @param BankObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(BankObject $object) {
$model = new Bank();
$model->company_id = $object->getCompanyId();
$model->reference = $object->getReference();
$model->bank_name = $object->getBankName();
$model->holder_name = $object->getHolderName();
$model->account_no = $object->getAccountNo();
$model->bank_branch = $object->getBankBranch();
$model->swift = $object->getSwift();
$model->snap = $object->getSnap();
$model->type = $object->getType();
$model->country_id = $object->getCountryId();
return $this->handler($model);
}
}
@@ -0,0 +1,19 @@
<?php
namespace App\Classes\Modules\Banks\Services;
use App\Classes\General\Eloquent\AbstractDeleteRecord;
use App\Models\Bank;
class DeletesBank extends AbstractDeleteRecord
{
/**
* @param Bank $model
* @return mixed
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Bank $model) {
return $this->handler($model);
}
}
@@ -0,0 +1,34 @@
<?php
namespace App\Classes\Modules\Banks\Services;
use App\Classes\General\Eloquent\AbstractFetchRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\Bank;
class FetchesBank extends AbstractFetchRecord
{
/** @var Bank */
private $repository;
/**
* FetchesBank constructor.
* @param Bank $repository
*/
public function __construct(Bank $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
public function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Classes\Modules\Banks\Services;
use App\Classes\General\Eloquent\AbstractListRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\Bank;
class ListsBanks extends AbstractListRecord
{
/** @var Bank */
private $repository;
/**
* ListsBank constructor.
* @param Bank $repository
*/
public function __construct(Bank $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\Modules\Banks\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\Bank;
class ResetsBanksDefault extends AbstractUpdateRecord
{
/**
* @param Bank $bank
* @return void
*/
public function execute(Bank $bank)
{
$bank->company->banks()->where('type', $bank->type)->update(['default' => false]);
}
}
@@ -0,0 +1,22 @@
<?php
namespace App\Classes\Modules\Banks\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\Bank;
class SetsBankToDefault extends AbstractUpdateRecord
{
/**
* @param Bank $model
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Bank $model)
{
$model->default = true;
return $this->handler($model);
}
}
@@ -0,0 +1,30 @@
<?php
namespace App\Classes\Modules\Banks\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Banks\DataTransferObjects\BankObject;
use App\Models\Bank;
class UpdatesBank extends AbstractUpdateRecord
{
/**
* @param Bank $model
* @param BankObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Bank $model, BankObject $object)
{
$model->bank_name = $object->getBankName();
$model->holder_name = $object->getHolderName();
$model->account_no = $object->getAccountNo();
$model->bank_branch = $object->getBankBranch();
$model->swift = $object->getSwift();
$model->snap = $object->getSnap();
$model->default = $object->getDefault();
return $this->handler($model);
}
}
@@ -0,0 +1,50 @@
<?php
namespace App\Classes\Modules\Banks\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Banks\Standards\Validators\BankValidation;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyObject;
class CanCreateBank extends AbstractRule
{
/** @var BankValidation */
private $BankValidation;
/**
* CanCreateBank constructor.
* @param BankValidation $BankValidation
*/
public function __construct(BankValidation $BankValidation)
{
$this->BankValidation = $BankValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
return true;
}
/**
* @param CompanyObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return $this->BankValidation->validate($object);
}
/**
* @param CompanyObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,40 @@
<?php
namespace App\Classes\Modules\Banks\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Banks\DataTransferObjects\BankObject;
class CanDeleteBank extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param BankObject $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param BankObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,37 @@
<?php
namespace App\Classes\Modules\Banks\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Banks\Standards\Validators\BankValidation;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyObject;
class CanListBanks extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
return true;
}
/**
* @param CompanyObject $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param CompanyObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,54 @@
<?php
namespace App\Classes\Modules\Banks\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Banks\DataTransferObjects\BankObject;
use App\Classes\Modules\Banks\Standards\Validators\BankValidation;
class CanUpdateBank extends AbstractRule
{
/** @var BankValidation */
private $BankValidation;
/**
* CanUpdateBank constructor.
* @param BankValidation $BankValidation
*/
public function __construct(BankValidation $BankValidation)
{
$this->BankValidation = $BankValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param BankObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return $this->BankValidation->validate($object);
}
/**
* @param BankObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,46 @@
<?php
namespace App\Classes\Modules\Banks\Standards\Validators;
use App\Classes\General\Abstracts\AbstractValidation;
use App\Classes\Modules\Banks\DataTransferObjects\BankObject;
class BankValidation extends AbstractValidation
{
/**
* @param BankObject $object
* @return array
*/
protected function data($object): array
{
return [
'country_id' => $object->getCountryId(),
'company_id' => $object->getCompanyId(),
'bank_name' => $object->getBankName(),
'holder_name' => $object->getHolderName(),
'account_no' => $object->getAccountNo()
];
}
/**
* @return array
*/
protected function rules(): array
{
return [
'country_id' => 'required',
'company_id' => 'required',
'bank_name' => 'required',
'holder_name' => 'required',
'account_no' => 'required'
];
}
/**
* @return array
*/
protected function messages(): array
{
return [];
}
}
@@ -0,0 +1,21 @@
<?php
namespace App\Classes\Modules\Unity\Processors;
use Config;
use Illuminate\Support\Facades\Http;
use App\Classes\Modules\Unity\Services\CreatesEntity;
class CreateEntityProcessor
{
private $createsEntity;
public function __construct(CreatesEntity $createsEntity)
{
$this->createsEntity = $createsEntity;
}
public function execute(){
return $this->createsEntity->execute();
}
}
@@ -8,13 +8,10 @@ use App\Classes\Modules\Unity\Services\GetContractObligations;
class GetContractObligationsProcessor class GetContractObligationsProcessor
{ {
private $unityConfig; private $getContractObligations;
private $GetContractObligations;
public function __construct(GetContractObligations $getContractObligations) public function __construct(GetContractObligations $getContractObligations)
{ {
$this->unityConfig = Config::get('unity');
$this->getContractObligations = $getContractObligations; $this->getContractObligations = $getContractObligations;
} }
@@ -0,0 +1,30 @@
<?php
namespace App\Classes\Modules\Unity\Services;
use Config;
use Illuminate\Support\Facades\Http;
use App\Classes\Modules\Unity\Services\GetAccessToken;
class CreatesEntity
{
private $getAccessToken;
private $createEntityEndpoint;
public function __construct(GetAccessToken $getAccessToken)
{
$this->createEntityEndpoint = Config::get('unity.url').Config::get('unity.create_entity_endpoint');
$this->getAccessToken = $getAccessToken;
}
public function execute($entity_name){
$accesToken=$this->getAccessToken->execute();
$response = Http::withToken($accesToken)->post($this->createEntityEndpoint,['name'=>$entity_name])->object();
return (isset($response->data)) ? $response->data : [];
}
}
@@ -0,0 +1,11 @@
<?php
namespace App\Classes\ValueObjects\Constants;
final class BankAccountType {
public const PERSONAL = 1;
public const EXTERNAL = 2;
}
@@ -0,0 +1,15 @@
<?php
namespace App\Classes\ValueObjects\Constants;
use Config;
final class UnityConfig {
public const AUTH_METHOD = Config::get('unity.default_auth');
public const API_BASE_URL = Config::get('unity.url');
public const CREATE_ENTITY_ENDPOINT = Config::get('unity.create_entity_endpoint');
}
@@ -0,0 +1,19 @@
<?php
namespace App\Http\Controllers\Banks;
use App\Classes\Modules\Banks\ControllersLogic\CreateBankLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateBankController
{
/**
* @param Request $request
* @param CreateBankLogic $logic
* @return JsonResponse
*/
public function create(Request $request, CreateBankLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,19 @@
<?php
namespace App\Http\Controllers\Banks;
use App\Classes\Modules\Banks\ControllersLogic\DeleteBankLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class DeleteBankController
{
/**
* @param Request $request
* @param DeleteBankLogic $logic
* @return JsonResponse
*/
public function delete(Request $request, DeleteBankLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,19 @@
<?php
namespace App\Http\Controllers\Banks;
use App\Classes\Modules\Banks\ControllersLogic\ListBanksLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListBanksController
{
/**
* @param Request $request
* @param ListBanksLogic $logic
* @return JsonResponse
*/
public function list(Request $request, ListBanksLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Banks;
use App\Classes\Modules\Banks\ControllersLogic\SetBankToDefaultLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class SetBankToDefaultController
{
/**
* @param Request $request
* @param SetBankToDefaultLogic $logic
* @return JsonResponse
*/
public function update(Request $request, SetBankToDefaultLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Banks;
use App\Classes\Modules\Banks\ControllersLogic\UpdateBankLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdateBankController
{
/**
* @param Request $request
* @param UpdateBankLogic $logic
* @return JsonResponse
*/
public function update(Request $request, UpdateBankLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Addresses;
use App\Classes\Modules\Addresses\ControllersLogic\CreateAddressLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateRemarkController
{
/**
* @param Request $request
* @param CreateAddressLogic $logic
* @return JsonResponse
*/
public function create(Request $request, CreateAddressLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Addresses;
use App\Classes\Modules\Addresses\ControllersLogic\DeleteAddressLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class DeleteRemarkController
{
/**
* @param Request $request
* @param DeleteAddressLogic $logic
* @return JsonResponse
*/
public function destroy(Request $request, DeleteAddressLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Addresses;
use App\Classes\Modules\Addresses\ControllersLogic\FetchAddressLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class FetchRemarkController
{
/**
* @param Request $request
* @param FetchAddressLogic $logic
* @return JsonResponse
*/
public function fetch(Request $request, FetchAddressLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Addresses;
use App\Classes\Modules\Addresses\ControllersLogic\ListAddressesLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListRemarksController
{
/**
* @param Request $request
* @param ListAddressesLogic $logic
* @return JsonResponse
*/
public function list(Request $request, ListAddressesLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Addresses;
use App\Classes\Modules\Addresses\ControllersLogic\UpdateAddressLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdateRemarkController
{
/**
* @param Request $request
* @param UpdateAddressLogic $logic
* @return JsonResponse
*/
public function update(Request $request, UpdateAddressLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Addresses;
use App\Classes\Modules\Addresses\ControllersLogic\CreateAddressLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateRemarkController
{
/**
* @param Request $request
* @param CreateAddressLogic $logic
* @return JsonResponse
*/
public function create(Request $request, CreateAddressLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Addresses;
use App\Classes\Modules\Addresses\ControllersLogic\DeleteAddressLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class DeleteRemarkController
{
/**
* @param Request $request
* @param DeleteAddressLogic $logic
* @return JsonResponse
*/
public function destroy(Request $request, DeleteAddressLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Addresses;
use App\Classes\Modules\Addresses\ControllersLogic\FetchAddressLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class FetchRemarkController
{
/**
* @param Request $request
* @param FetchAddressLogic $logic
* @return JsonResponse
*/
public function fetch(Request $request, FetchAddressLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Addresses;
use App\Classes\Modules\Addresses\ControllersLogic\ListAddressesLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListRemarksController
{
/**
* @param Request $request
* @param ListAddressesLogic $logic
* @return JsonResponse
*/
public function list(Request $request, ListAddressesLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Addresses;
use App\Classes\Modules\Addresses\ControllersLogic\UpdateAddressLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdateRemarkController
{
/**
* @param Request $request
* @param UpdateAddressLogic $logic
* @return JsonResponse
*/
public function update(Request $request, UpdateAddressLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Addresses;
use App\Classes\Modules\Addresses\ControllersLogic\CreateAddressLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateRemarkController
{
/**
* @param Request $request
* @param CreateAddressLogic $logic
* @return JsonResponse
*/
public function create(Request $request, CreateAddressLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Addresses;
use App\Classes\Modules\Addresses\ControllersLogic\DeleteAddressLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class DeleteRemarkController
{
/**
* @param Request $request
* @param DeleteAddressLogic $logic
* @return JsonResponse
*/
public function destroy(Request $request, DeleteAddressLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Addresses;
use App\Classes\Modules\Addresses\ControllersLogic\FetchAddressLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class FetchRemarkController
{
/**
* @param Request $request
* @param FetchAddressLogic $logic
* @return JsonResponse
*/
public function fetch(Request $request, FetchAddressLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Addresses;
use App\Classes\Modules\Addresses\ControllersLogic\ListAddressesLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListRemarksController
{
/**
* @param Request $request
* @param ListAddressesLogic $logic
* @return JsonResponse
*/
public function list(Request $request, ListAddressesLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Addresses;
use App\Classes\Modules\Addresses\ControllersLogic\UpdateAddressLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdateRemarkController
{
/**
* @param Request $request
* @param UpdateAddressLogic $logic
* @return JsonResponse
*/
public function update(Request $request, UpdateAddressLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
+28
View File
@@ -0,0 +1,28 @@
<?php
namespace App\Models;
use App\Classes\General\Interfaces\DataTransferObject;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Database\Eloquent\Relations\HasOne;
class BankAccount extends AbstractModel implements DataTransferObject
{
use SoftDeletes;
protected $table = 'bank_accounts';
public function country(): HasOne
{
return $this->hasOne(Country::class, 'country_id', 'id');
}
public function owner(): morphTo
{
return $this->morphTo();
}
}
+17
View File
@@ -0,0 +1,17 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\SoftDeletes;
class ContainerPackingList extends AbstractModel
{
use SoftDeletes;
protected $table = 'container_packing_lists';
public function packingList(): HasMany
{
return $this->hasMany(PackingList::class, 'packing_list_id', 'id');
}
}
+24
View File
@@ -0,0 +1,24 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Database\Eloquent\SoftDeletes;
class Package extends AbstractModel
{
use SoftDeletes;
protected $table = 'packages';
public function order(): BelongsTo
{
return $this->BelongsTo(Order::class, 'order_id', 'id');
}
public function owner(): morphTo
{
return $this->morphTo();
}
}
+18
View File
@@ -0,0 +1,18 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\SoftDeletes;
class PackageItem extends AbstractModel
{
use SoftDeletes;
protected $table = 'package_items';
public function pacakge(): BelongsTo
{
return $this->BelongsTo(Package::class, 'package_id', 'id');
}
}
+12
View File
@@ -0,0 +1,12 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\SoftDeletes;
class PackingList extends AbstractModel
{
use SoftDeletes;
protected $table = 'package_lists';
}
+23
View File
@@ -0,0 +1,23 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\SoftDeletes;
class PackingListPackage extends AbstractModel
{
use SoftDeletes;
protected $table = 'package_list_packages';
public function package(): BelongsTo
{
return $this->BelongsTo(Package::class, 'package_id', 'id');
}
public function packageList(): BelongsTo
{
return $this->BelongsTo(PackageList::class, 'package_list_id', 'id');
}
}
+18
View File
@@ -0,0 +1,18 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Database\Eloquent\SoftDeletes;
class Remark extends AbstractModel
{
use SoftDeletes;
protected $table = 'remarks';
public function owner(): morphTo
{
return $this->morphTo();
}
}
+18
View File
@@ -0,0 +1,18 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Database\Eloquent\SoftDeletes;
class Schedule extends AbstractModel
{
use SoftDeletes;
protected $table = 'schedules';
public function owner(): morphTo
{
return $this->morphTo();
}
}
+11
View File
@@ -0,0 +1,11 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class TransportArrangement extends Model
{
use HasFactory;
}
@@ -0,0 +1,50 @@
<?php
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\BankAccountType;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateBanksTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('bank_accounts', function (Blueprint $table) {
$table->id();
$table->morphs('owner');
$table->foreignId('country_id')->unsigned();
$table->string('bank_name',45);
$table->string('bank_branch',45)->nullable();
$table->string('account_name',45);
$table->string('account_number',45);
$table->integer('type')->default(BankAccountType::EXTERNAL);
$table->integer('default')->default(false);
$table->integer('status')->default(ApprovalStatus::APPROVED);
$table->softDeletes();
$table->timestamps();
$table->foreign('country_id')->references('id')->on('countries');
});
Schema::table('bank_accounts', function (Blueprint $table) {
$table->string('owner_type', 191)->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('banks');
}
}
@@ -0,0 +1,48 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePackagesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('packages', function (Blueprint $table) {
$table->id();
$table->bigInteger('order_id')->unsigned()->index();
$table->bigInteger('claimant_id')->unsigned()->index();
$table->integer('type')->default(0);
$table->string('description',45);
$table->decimal('width', 8, 2);
$table->decimal('height', 8, 2);
$table->decimal('length', 8, 2);
$table->decimal('weight', 8, 2);
$table->integer('quantity')->default(0);
$table->integer('status')->default(0);
$table->softDeletes();
$table->timestamps();
$table->foreign('order_id')->references('id')->on('orders');
$table->foreign('claimant_id')->references('id')->on('company_modules');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('packages');
}
}
@@ -0,0 +1,43 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePackageItemsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('package_items', function (Blueprint $table) {
$table->id();
$table->bigInteger('package_id')->unsigned()->index();
$table->string('name',45);
$table->string('reference',45);
$table->string('description',45);
$table->decimal('quantity', 8, 2);
$table->string('uom',45);
$table->decimal('price', 8, 2);
$table->decimal('total', 8, 2);
$table->integer('status')->default(0);
$table->softDeletes();
$table->timestamps();
$table->foreign('package_id')->references('id')->on('packages');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('package_items');
}
}
@@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePackingListsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('packing_lists', function (Blueprint $table) {
$table->id();
$table->string('reference',200);
$table->integer('status')->default(0);
$table->softDeletes();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('packing_lists');
}
}
@@ -0,0 +1,37 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreatePackingListPackagesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('packing_list_packages', function (Blueprint $table) {
$table->id();
$table->bigInteger('packing_list_id')->unsigned()->index();
$table->bigInteger('package_id')->unsigned()->index();
$table->softDeletes();
$table->timestamps();
$table->foreign('packing_list_id')->references('id')->on('packing_lists');
$table->foreign('package_id')->references('id')->on('packages');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('packing_list_packages');
}
}
@@ -0,0 +1,37 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateContainerPackingListsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('container_packing_lists', function (Blueprint $table) {
$table->id();
$table->bigInteger('packing_list_id')->unsigned()->index();
$table->string('container_reference',45);
$table->integer('container_type');
$table->softDeletes();
$table->timestamps();
$table->foreign('packing_list_id')->references('id')->on('packing_lists');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('container_packing_lists');
}
}
@@ -0,0 +1,39 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateRemarksTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('remarks', function (Blueprint $table) {
$table->id();
$table->morphs('owner');
$table->bigInteger('commenter_id')->unsigned()->index();
$table->string('content',200);
$table->softDeletes();
$table->timestamps();
});
Schema::table('remarks', function (Blueprint $table) {
$table->string('owner_type', 191)->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('remarks');
}
}
@@ -0,0 +1,46 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateTransportArrangementsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('transport_arrangements', function (Blueprint $table) {
$table->id();
$table->morphs('owner');
$table->integer('type')->default(0);
$table->string('courier',45);
$table->string('tracking_number',45);
$table->timestamp('dispacth_date')->nullable();
$table->timestamp('drop_date')->nullable();
$table->integer('status')->default(0);
$table->softDeletes();
$table->timestamps();
});
Schema::table('transport_arrangements', function (Blueprint $table) {
$table->string('owner_type', 191)->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('transport_arrangements');
}
}
@@ -0,0 +1,42 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateSchedulesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('schedules', function (Blueprint $table) {
$table->id();
$table->morphs('owner');
$table->timestamp('etd')->nullable();
$table->timestamp('eta')->nullable();
$table->integer('status')->default(0);
$table->softDeletes();
$table->timestamps();
});
Schema::table('schedules', function (Blueprint $table) {
$table->string('owner_type', 191)->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('schedules');
}
}
+11
View File
@@ -0,0 +1,11 @@
<?php
use Illuminate\Support\Facades\Route;
Route::group(['prefix' => 'bank', 'as' => 'bank.', 'namespace' => 'Banks'], function () {
Route::get('/list', 'ListBanksController@list')->name('list');
Route::post('/create', 'CreateBankController@create')->name('create');
Route::put('/update/{id}', 'UpdateBankController@update')->name('update');
Route::put('/{id}/default', 'SetBankToDefaultController@update')->name('default');
Route::delete('/delete/{id}', 'DeleteBankController@delete')->name('delete');
});
+11
View File
@@ -0,0 +1,11 @@
<?php
use Illuminate\Support\Facades\Route;
Route::group(['namespace' => 'Remarks', 'as' => 'remark.', 'prefix' => 'remark'], function () {
Route::get('/{id}/show', 'FetchRemarkController@fetch')->name('show');
Route::get('/list', 'ListRemarksController@list')->name('list');
Route::post('/create', 'CreateRemarkController@create')->name('create');
Route::put('/update/{id}', 'UpdateRemarkController@update')->name('update');
Route::delete('/delete/{id}', 'DeleteRemarkController@delete')->name('delete');
});
+11
View File
@@ -0,0 +1,11 @@
<?php
use Illuminate\Support\Facades\Route;
Route::group(['namespace' => 'Schedules', 'as' => 'schedule.', 'prefix' => 'schedule'], function () {
Route::get('/{id}/show', 'FetchScheduleController@fetch')->name('show');
Route::get('/list', 'ListScheduleController@list')->name('list');
Route::post('/create', 'CreateScheduleController@create')->name('create');
Route::put('/update/{id}', 'UpdateScheduleController@update')->name('update');
Route::delete('/delete/{id}', 'DeleteScheduleController@delete')->name('delete');
});
+11
View File
@@ -0,0 +1,11 @@
<?php
use Illuminate\Support\Facades\Route;
Route::group(['namespace' => 'Transports', 'as' => 'transport.', 'prefix' => 'transport'], function () {
Route::get('/{id}/show', 'FetchTransportController@fetch')->name('show');
Route::get('/list', 'ListTransportController@list')->name('list');
Route::post('/create', 'CreateTransportController@create')->name('create');
Route::put('/update/{id}', 'UpdateTransportController@update')->name('update');
Route::delete('/delete/{id}', 'DeleteTransportController@delete')->name('delete');
});