Compare commits

..

2 Commits

Author SHA1 Message Date
Hafiz a1dd9a6406 add address swagger json 2021-07-12 09:22:04 +08:00
Fairuz 18b82e0573 Fixes & swagger on address APIs 2021-07-11 13:56:37 +08:00
595 changed files with 44508 additions and 26754 deletions
-2
View File
@@ -49,5 +49,3 @@ PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
UNITY_APP_URL="https://unity.izyim.com"
+1 -3
View File
@@ -22,6 +22,4 @@ rebuild_docker.sh
docker/*
db/*
docker-compose.yml
package-lock.json
public/*
/public/*
package-lock.json
@@ -1,20 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class CompanyModuleId implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('company_module_id', $value);
}
}
@@ -1,22 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class HasBusinessModuleType implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('companyModules', function (Builder $query) use($value) {
$query->where('type', $value);
});
}
}
@@ -1,22 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class HasMorphCompanyModule implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHasMorph('owner', ['App\Models\CompanyModule'], function ($query) use($value) {
$query->where('id',$value);
});
}
}
@@ -5,7 +5,7 @@ namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class WithOrders implements Filter
class WithBookings implements Filter
{
/**
@@ -15,6 +15,6 @@ class WithOrders implements Filter
*/
public static function apply(Builder $builder, $value)
{
return $builder->with('orders');
return $builder->with('bookings');
}
}
@@ -1,22 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class WithCompanyModuleType implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('companyModule', function ($query) use ($value) {
$query->where('company_modules.type', '=', $value);
});
}
}
-94
View File
@@ -1,94 +0,0 @@
<?php
namespace App\Classes\Jobs;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class CurlContainerListJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
private $page;
public function __construct($page = 1)
{
$this->page = $page;
}
/**
* Execute the job.
*
* @return void
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function handle()
{
$cookies = $this->getCookie();
$headers = [
'Content-Type' => 'application/json',
'Cookie' => $cookies,
];
$last_two_month = Carbon::now()->subMonth(2)->format('Y-m-d');
$client = new \GuzzleHttp\Client(['headers' => $headers]);
$res = $client->post('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', [\GuzzleHttp\RequestOptions::JSON => json_decode('{"controller":"VCustomercontainer","view":"grid1","request":{"PageIndex":' . $this->page . ',"PageSize":10,"PageOffset":0,"SortExpression":"CreatedOn DESC","GroupExpression":"","Filter":["LoadedTime:<=%js%\"' . $last_two_month . 'T00:00:00.000\"\u0000"],"ContextKey":"view1","FilterIsExternal":false,"LookupContextFieldName":null,"LookupContextController":null,"LookupContextView":null,"LookupContext":null,"Inserting":false,"LastCommandName":null,"ExternalFilter":[],"DoesNotRequireData":false,"LastView":"grid1","Tag":null,"RequiresFirstLetters":false,"ViewType":"Grid","SupportsCaching":true,"SystemFilter":null,"RequiresRowCount":true,"QuickFindHint":null,"RequiresPivot":false,"PivotDefinitions":null,"RequiresMetaData":true}}')]);
$data = json_decode($res->getBody()->getContents());
if (!empty($data->d->Rows)) {
// insert data here
// next page
$this->page = $this->page > 0 ? $this->page + 1 : 1;
CurlContainerListJob::dispatch($this->page + 1)
->delay(Carbon::now()->addSeconds(10));
}
}
public function getCookie()
{
// get latest cookies
$client = new \GuzzleHttp\Client(['cookies' => true]);
$r = $client->request('GET', 'https://portalvt.azurewebsites.net');
$call_cookie = $client->getConfig('cookies');
$call_cookie = $call_cookie->toArray();
$latest_cookie = [];
foreach ($call_cookie as $key => $row) {
$latest_cookie[] = $row['Name'] . '=' . $row['Value'];
}
$latest_cookie = implode(';', $latest_cookie);
// get access token
$headers = [
'Content-Type' => 'application/json',
'Cookie' => $latest_cookie,
];
$client = new \GuzzleHttp\Client(['headers' => $headers]);
$res = $client->post('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/Login', [\GuzzleHttp\RequestOptions::JSON => [
"username" => "CIEF",
"password" => "0122120880",
"createPersistentCookie" => true,
]]);
$token = json_decode($res->getBody()->getContents());
$token = $token->d->AccessToken;
$latest_cookie = $latest_cookie . ';AppVTCC=' . $token;
return $latest_cookie;
}
}
-94
View File
@@ -1,94 +0,0 @@
<?php
namespace App\Classes\Jobs;
use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class CurlWarehouseListJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
private $page;
public function __construct($page = -2)
{
$this->page = $page;
}
/**
* Execute the job.
*
* @return void
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function handle()
{
$cookies = $this->getCookie();
$headers = [
'Content-Type' => 'application/json',
'Cookie' => $cookies,
];
$yesterday = Carbon::now()->subDays(1)->format('Y-m-d');
$client = new \GuzzleHttp\Client(['headers' => $headers]);
$res = $client->post('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/GetPage', [\GuzzleHttp\RequestOptions::JSON => json_decode('{"controller":"WarehouseList","view":"grid1","request":{"PageIndex":' . $this->page . ',"PageSize":100,"PageOffset":0,"SortExpression":"ParcelDate DESC,FullMarking DESC","GroupExpression":"","Filter":["ParcelDate:=%js%\"' . $yesterday . 'T00:00:00.000\"\u0000"],"ContextKey":"view1","FilterIsExternal":false,"LookupContextFieldName":null,"LookupContextController":null,"LookupContextView":null,"LookupContext":null,"Inserting":false,"LastCommandName":null,"ExternalFilter":[],"DoesNotRequireData":false,"LastView":"grid1","Tag":null,"RequiresFirstLetters":false,"ViewType":"Grid","SupportsCaching":true,"SystemFilter":null,"RequiresRowCount":true,"QuickFindHint":null,"RequiresPivot":false,"PivotDefinitions":null,"RequiresMetaData":true}}')]);
$data = json_decode($res->getBody()->getContents());
if (!empty($data->d->Row)) {
// insert data here
// next page
$this->page = $this->page > 0 ? $this->page + 1 : 1;
CurlWarehouseListJob::dispatch($this->page + 1)
->delay(Carbon::now()->addSeconds(10));
}
}
public function getCookie()
{
// get latest cookies
$client = new \GuzzleHttp\Client(['cookies' => true]);
$r = $client->request('GET', 'https://portalvt.azurewebsites.net');
$call_cookie = $client->getConfig('cookies');
$call_cookie = $call_cookie->toArray();
$latest_cookie = [];
foreach ($call_cookie as $key => $row) {
$latest_cookie[] = $row['Name'] . '=' . $row['Value'];
}
$latest_cookie = implode(';', $latest_cookie);
// get access token
$headers = [
'Content-Type' => 'application/json',
'Cookie' => $latest_cookie,
];
$client = new \GuzzleHttp\Client(['headers' => $headers]);
$res = $client->post('https://portalvt.azurewebsites.net/Services/DataControllerService.asmx/Login', [\GuzzleHttp\RequestOptions::JSON => [
"username" => "CIEF",
"password" => "0122120880",
"createPersistentCookie" => true,
]]);
$token = json_decode($res->getBody()->getContents());
$token = $token->d->AccessToken;
$latest_cookie = $latest_cookie . ';AppVTCC=' . $token;
return $latest_cookie;
}
}
@@ -35,6 +35,7 @@ class AuthenticateUserLogic extends AbstractControllerLogic
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\AccessUnauthorisedException
* @throws \App\Classes\Exceptions\InternalServerErrorException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function logic(Request $request): JsonResponse {
@@ -4,28 +4,21 @@ namespace App\Classes\Modules\Accounts\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\General\Services\GeneratesInitials;
use App\Classes\Modules\Accounts\Processors\AuthenticationProcessor;
use App\Classes\Modules\Accounts\Processors\CreateUserProcessor;
use App\Classes\Modules\Accounts\Processors\GenerateEmailVerificationAttemptProcessor;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyConnectionObject;
use App\Classes\Modules\Companies\Processors\AssignEmployeeProcessor;
use App\Classes\Modules\Companies\Processors\AssignSegmentProcessor;
use App\Classes\Modules\Companies\Processors\CreateCompanyProcessor;
use App\Classes\Modules\Companies\Processors\CreateCompanyModuleProcessor;
use App\Classes\Modules\Companies\DataTransferObjects\EmploymentObject;
use App\Classes\Modules\Companies\Services\ApprovesCompanyConnection;
use App\Classes\Modules\Companies\Services\CreatesCompanyConnection;
use App\Classes\Modules\Contacts\DataTransferObjects\ContactObject;
use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
use App\Classes\Modules\Documents\Processors\UploadIdentityDocumentProcessor;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Classes\ValueObjects\Constants\CompanyType;
use App\Classes\ValueObjects\Constants\RoleTypes;
use App\Models\Company;
use App\Models\CompanyModule;
use App\Models\User;
use Illuminate\Http\JsonResponse;
@@ -58,18 +51,15 @@ class CreateCustomerLogic extends AbstractControllerLogic
/** @var CreateContactProcessor */
private $createContactProcessor;
/** @var CreatesCompanyConnection */
private $createsCompanyConnection;
/** @var ApprovesCompanyConnection */
private $approvesCompanyConnection;
/** @var AssignEmployeeProcessor */
private $assignEmployeeProcessor;
/** @var UploadIdentityDocumentProcessor */
private $uploadIdentityDocumentProcessor;
/** @var AssignSegmentProcessor */
private $assignSegmentProcessor;
/** @var AuthenticationProcessor */
private $authenticationProcessor;
@@ -82,22 +72,20 @@ class CreateCustomerLogic extends AbstractControllerLogic
* @param CreateCompanyProcessor $createCompanyProcessor
* @param CreateCompanyModuleProcessor $createCompanyModuleProcessor
* @param CreateContactProcessor $createContactProcessor
* @param CreatesCompanyConnection $createsCompanyConnection
* @param ApprovesCompanyConnection $approvesCompanyConnection
* @param AssignEmployeeProcessor $assignEmployeeProcessor
* @param AssignSegmentProcessor $assignSegmentProcessor
* @param UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor
* @param AuthenticationProcessor $authenticationProcessor
* @param GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor
*/
public function __construct(CreateUserProcessor $createUserProcessor, CreateCompanyProcessor $createCompanyProcessor, CreateCompanyModuleProcessor $createCompanyModuleProcessor, CreateContactProcessor $createContactProcessor, CreatesCompanyConnection $createsCompanyConnection, ApprovesCompanyConnection $approvesCompanyConnection, AssignEmployeeProcessor $assignEmployeeProcessor, UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor, AuthenticationProcessor $authenticationProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor)
public function __construct(CreateUserProcessor $createUserProcessor, CreateCompanyProcessor $createCompanyProcessor, CreateCompanyModuleProcessor $createCompanyModuleProcessor, CreateContactProcessor $createContactProcessor, AssignEmployeeProcessor $assignEmployeeProcessor, AssignSegmentProcessor $assignSegmentProcessor, AuthenticationProcessor $authenticationProcessor, GenerateEmailVerificationAttemptProcessor $generateEmailVerificationAttemptProcessor, UploadIdentityDocumentProcessor $uploadIdentityDocumentProcessor)
{
$this->createUserProcessor = $createUserProcessor;
$this->createCompanyProcessor = $createCompanyProcessor;
$this->createCompanyModuleProcessor = $createCompanyModuleProcessor;
$this->createContactProcessor = $createContactProcessor;
$this->createsCompanyConnection = $createsCompanyConnection;
$this->approvesCompanyConnection = $approvesCompanyConnection;
$this->assignEmployeeProcessor = $assignEmployeeProcessor;
$this->assignSegmentProcessor = $assignSegmentProcessor;
$this->uploadIdentityDocumentProcessor = $uploadIdentityDocumentProcessor;
$this->authenticationProcessor = $authenticationProcessor;
$this->generateEmailVerificationAttemptProcessor = $generateEmailVerificationAttemptProcessor;
@@ -108,34 +96,27 @@ class CreateCustomerLogic extends AbstractControllerLogic
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\AccessUnauthorisedException
* @throws \App\Classes\Exceptions\InternalServerErrorException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request): JsonResponse
{
/** @var User $user */
$user = $this->createUserProcessor->execute($request, RoleTypes::USER, !App::environment(['production']) ? ApprovalStatus::APPROVED : ApprovalStatus::PENDING_VERIFICATION);
$user = $this->createUserProcessor->execute($request, RoleTypes::USER, App::environment(['local']) ? ApprovalStatus::APPROVED : ApprovalStatus::PENDING_VERIFICATION);
/** @var Company $company */
$company = $this->createCompanyProcessor->execute($request->input('type') === CompanyType::COMPANY_BUSINESS ? $request->input('company_name') : $request->input('name'), $request->input('type'), ApprovalStatus::PENDING_SUBMISSION);
$company = $this->createCompanyProcessor->execute($request, $request->input('type'), ApprovalStatus::PENDING_SUBMISSION);
$contactObject = new ContactObject($request->input('name'), $request->input('phone'), $request->input('contact_email'), $request->input('wechat_id'));
$this->createContactProcessor->execute($request, $company);
$this->createContactProcessor->execute($contactObject, $company);
/** @var CompanyModule $companyModule */
$companyModule = $this->createCompanyModuleProcessor->execute($company, BusinessType::IMPORTER);
$connectionObject = new CompanyConnectionObject($companyModule, 'CIEF', mt_rand(1000, 9999).(new GeneratesInitials())->name($company->name)->length(3)->generate());
$connection = $this->createsCompanyConnection->execute($connectionObject);
$this->approvesCompanyConnection->execute($connection);
$companyModule = $this->createCompanyModuleProcessor->execute($company);
$Object = new EmploymentObject($companyModule, $user);
$this->assignEmployeeProcessor->execute($Object);
//$this->assignSegmentProcessor->execute($company);
$this->uploadIdentityDocumentProcessor->execute($request, $company);
$this->generateEmailVerificationAttemptProcessor->execute($user);
@@ -4,14 +4,19 @@ namespace App\Classes\Modules\Accounts\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
class FullNameObject implements DataTransferObject
class FullnameObject implements DataTransferObject
{
/** @var string */
private $name;
/**
* FullNameObject constructor.
* UserObject constructor.
* @param string $name
* @param string $email
* @param string $password
* @param string $passwordConfirmation
* @param int|null $type
* @param int|null $status
*/
public function __construct(string $name)
{
@@ -2,9 +2,9 @@
namespace App\Classes\Modules\Accounts\Services;
use App\Classes\Exceptions\AccessUnauthorisedException;
use App\Classes\Modules\Accounts\DataTransferObjects\AuthenticationCredentialsObject;
class AuthenticatesUser
{
@@ -1,28 +0,0 @@
<?php
namespace App\Classes\Modules\Accounts\Services;
use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\PasswordReset;
class ExpiresPasswordReset extends AbstractUpdateRecord
{
/**
* @param PasswordReset $model
* @return \Illuminate\Database\Eloquent\Model
* @throws MalformedRequestException
*/
public function execute(PasswordReset $model){
$model->is_expired = true;
return $this->handler($model);
}
}
@@ -3,7 +3,6 @@
namespace App\Classes\Modules\Accounts\Services;
use App\Classes\Exceptions\InternalServerErrorException;
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
use App\Classes\ValueObjects\Constants\RoleTypes;
use App\Models\Company;
use App\Models\Role;
@@ -54,6 +53,9 @@ class GeneratesAuthenticationToken {
*/
private function setTokenClaims(User $user): void {
/** @var Company $companyModule */
$companyModule = $user->companyModule()->first();
$claims = [
'id' => $user->id,
'name' => $user->name,
@@ -63,10 +65,6 @@ class GeneratesAuthenticationToken {
];
if($user->type === RoleTypes::USER) {
/** @var Company $companyModule */
$companyModule = $user->companyModule()->first();
$claims = array_merge($claims, [
'company_id' => $companyModule->company_id
]);
@@ -3,7 +3,7 @@
namespace App\Classes\Modules\Accounts\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Accounts\DataTransferObjects\FullNameObject;
use App\Classes\Modules\Accounts\DataTransferObjects\FullnameObject;
use App\Models\User;
class UpdatesUser extends AbstractUpdateRecord
@@ -11,7 +11,7 @@ class UpdatesUser extends AbstractUpdateRecord
/**
* @param User $model
* @param FullNameObject $object
* @param UserObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
@@ -8,7 +8,7 @@ use App\Classes\Modules\Addresses\Services\CreatesAddress;
use App\Classes\Modules\Addresses\Services\FetchesDistrict;
use App\Classes\Modules\Addresses\Standards\Rules\CanCreateAddress;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Classes\Modules\Companies\Services\FetchesCompanyModule;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Http\Resources\AddressResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
@@ -33,8 +33,8 @@ class CreateAddressLogic extends AbstractControllerLogic
/** @var FetchesDistrict */
private $fetchesDistrict;
/** @var FetchesCompanyModule */
private $fetchesCompanyModule;
/** @var FetchesCompany */
private $fetchesCompany;
/** @var CreatesAddress */
private $createsAddress;
@@ -43,14 +43,14 @@ class CreateAddressLogic extends AbstractControllerLogic
* CreateAddressLogic constructor.
* @param CanCreateAddress $canCreateAddress
* @param FetchesDistrict $fetchesDistrict
* @param FetchesCompanyModule $fetchesCompanyModule
* @param FetchesCompany $fetchesCompany
* @param CreatesAddress $createsAddress
*/
public function __construct(CanCreateAddress $canCreateAddress, FetchesDistrict $fetchesDistrict, FetchesCompanyModule $fetchesCompanyModule, CreatesAddress $createsAddress)
public function __construct(CanCreateAddress $canCreateAddress, FetchesDistrict $fetchesDistrict, FetchesCompany $fetchesCompany, CreatesAddress $createsAddress)
{
$this->canCreateAddress = $canCreateAddress;
$this->fetchesDistrict = $fetchesDistrict;
$this->fetchesCompanyModule = $fetchesCompanyModule;
$this->fetchesCompany = $fetchesCompany;
$this->createsAddress = $createsAddress;
}
@@ -66,13 +66,13 @@ class CreateAddressLogic extends AbstractControllerLogic
$district = $this->fetchesDistrict->execute(['id' => $request->input('district_id')]);
$object = new AddressObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'), $request->input('reference'));
$object = new AddressObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'));
$this->canCreateAddress->passes($object);
$address = $this->createsAddress->execute($this->fetchesCompanyModule->execute(['id' => $request->input('company_module_id')]), $object);
$query = $this->createsAddress->execute($this->fetchesCompany->execute(['id' => $request->input('company_id')]), $object);
return $this->resourceResponse(new AddressResource($address));
return $this->resourceResponse(new AddressResource($query));
}
@@ -50,20 +50,23 @@ class DeleteAddressLogic extends AbstractControllerLogic
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
try {
$this->canDeleteAddress->passes();
$this->canDeleteAddress->passes();
$query = $this->fetchesAddress->execute(['id' => $request->route('id')]);
$query = $this->fetchesAddress->execute(['id' => $request->route('id')]);
$this->deletesAddress->execute($query);
$this->deletesAddress->execute($query);
return $this->response([]);
return $this->response([]);
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
}
@@ -45,16 +45,21 @@ class FetchAddressLogic extends AbstractControllerLogic
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\RequestValidationException
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
$this->canFetchAddress->passes();
try {
$query = $this->fetchesAddress->execute(['id' => $request->route('id')]);
$this->canFetchAddress->passes();
return $this->resourceResponse(new AddressResource($query));
$query = $this->fetchesAddress->execute(['id' => $request->route('id')]);
return $this->resourceResponse(new AddressResource($query));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
}
@@ -45,18 +45,21 @@ class ListAddressesLogic extends AbstractControllerLogic
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
try {
$this->canListAddresses->passes();
$this->canListAddresses->passes();
$query = $this->listsAddresses->execute($this->listsAddresses->deserializeFilters($request->input('filters')));
$query = $this->listsAddresses->execute($this->listsAddresses->deserializeFilters($request->input('filters')));
return $this->collectionResponse(AddressResource::collection($query));
return $this->collectionResponse(AddressResource::collection($query));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
}
@@ -2,13 +2,15 @@
namespace App\Classes\Modules\Addresses\ControllersLogic;
use App\Classes\General\Interfaces\Addressable;
use App\Http\Resources\AddressResource;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\Modules\Addresses\Standards\Rules\CanUpdateAddress;
use App\Classes\Modules\Addresses\Services\ResetsAddressesDefault;
use App\Classes\Modules\Addresses\Services\SetsAddressToDefault;
use App\Models\Address;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -27,26 +29,25 @@ class SetAddressToDefaultLogic extends AbstractControllerLogic
];
}
/** @var FetchesAddress */
private $fetchesAddress;
/** @var ResetsAddressesDefault */
private $resetsAddressesDefault;
/** @var FetchesAddress */
private $fetchesAddress;
/** @var SetsAddressToDefault*/
private $setsAddressToDefault;
/**
* SetAddressToDefaultLogic constructor.
* @param FetchesAddress $fetchesAddress
* @param ResetsAddressesDefault $resetsAddressesDefault
* @param FetchesAddress $fetchesAddress
* @param SetsAddressToDefault $setsAddressToDefault
*/
public function __construct(FetchesAddress $fetchesAddress, ResetsAddressesDefault $resetsAddressesDefault, SetsAddressToDefault $setsAddressToDefault)
public function __construct(ResetsAddressesDefault $resetsAddressesDefault, FetchesAddress $fetchesAddress, SetsAddressToDefault $setsAddressToDefault)
{
$this->fetchesAddress = $fetchesAddress;
$this->resetsAddressesDefault = $resetsAddressesDefault;
$this->fetchesAddress = $fetchesAddress;
$this->setsAddressToDefault = $setsAddressToDefault;
}
@@ -62,9 +63,8 @@ class SetAddressToDefaultLogic extends AbstractControllerLogic
$address = $this->fetchesAddress->execute(['id' => $request->route('id')]);
$this->resetsAddressesDefault->execute($address->owner, $address->type);
$this->resetsAddressesDefault->execute($address);
return $this->resourceResponse(new AddressResource($this->setsAddressToDefault->execute($address)));
}
}
@@ -10,6 +10,7 @@ use App\Classes\Modules\Addresses\Services\FetchesDistrict;
use App\Classes\Modules\Addresses\Standards\Rules\CanUpdateAddress;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Http\Resources\AddressResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -57,23 +58,28 @@ class UpdateAddressLogic extends AbstractControllerLogic
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
$district = $this->fetchesDistrict->execute(['id' => $request->input('district_id')]);
try {
$object = new AddressObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'), $request->input('reference'));
$district = $this->fetchesDistrict->execute(['id' => $request->input('district_id')]);
$object = new AddressObject($request->input('street_one'), $request->input('street_two'), $district->country_id, $district->state_id, $district->id, $request->input('post_code'));
//$object = new AddressObject($request->input('company_id'), $request->input('street_one'), $request->input('street_two'), $request->input('city'), $request->input('state'), $request->input('post_code'), $request->input('country'), $request->input('default'), $request->input('billing'));
$this->canUpdateAddress->passes($object);
$this->canUpdateAddress->passes($object);
$address = $this->fetchesAddress->execute(['id' => $request->route('id')]);
$query = $this->fetchesAddress->execute(['id' => $request->route('id')]);
$address = $this->updatesAddress->execute($address, $object);
$query = $this->updatesAddress->execute($query, $object);
return $this->resourceResponse(new AddressResource($address));
return $this->resourceResponse(new AddressResource($query));
} catch (\Exception $exception){
throw new ErrorException($exception->getMessage(), $exception->getCode());
}
}
@@ -25,9 +25,6 @@ class AddressObject implements DataTransferObject
/** @var int */
private $postCode;
/** @var string|null */
private $reference;
/**
* AddressObject constructor.
* @param string $streetOne
@@ -36,9 +33,8 @@ class AddressObject implements DataTransferObject
* @param int $stateId
* @param int $districtId
* @param int $postCode
* @param null|string $reference
*/
public function __construct(string $streetOne, ?string $streetTwo, int $countryId, int $stateId, int $districtId, int $postCode, ?string $reference = null)
public function __construct(string $streetOne, ?string $streetTwo, int $countryId, int $stateId, int $districtId, int $postCode)
{
$this->streetOne = $streetOne;
$this->streetTwo = $streetTwo;
@@ -46,7 +42,6 @@ class AddressObject implements DataTransferObject
$this->stateId = $stateId;
$this->districtId = $districtId;
$this->postCode = $postCode;
$this->reference = $reference;
}
/**
@@ -97,13 +92,5 @@ class AddressObject implements DataTransferObject
return $this->postCode;
}
/**
* @return null|string
*/
public function getReference(): ?string
{
return $this->reference;
}
}
@@ -1,54 +0,0 @@
<?php
namespace App\Classes\Modules\Addresses\Processors;
use App\Classes\Modules\Addresses\Services\CreatesOrderAddress;
use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\Modules\Addresses\Standards\Rules\CanCreateAddress;
use Illuminate\Database\Eloquent\Model;
use App\Models\Order;
class CreateOrderAddressProcessor
{
/** @var CanCreateAddress */
private $canCreateAddress;
/** @var CreatesAddress */
private $createsOrderAddress;
private $fetchesAddress;
/**
* CreateAddressProcessor constructor.
* @param CanCreateAddress $canCreateAddress
* @param CreatesOrderAddress $createsOrderAddress
* @param FetchesAddress $fetchesAddress
*/
public function __construct(CanCreateAddress $canCreateAddress, CreatesOrderAddress $createsOrderAddress, FetchesAddress $fetchesAddress)
{
$this->fetchesAddress = $fetchesAddress;
$this->canCreateAddress = $canCreateAddress;
$this->createsOrderAddress = $createsOrderAddress;
}
/**
* @param EmploymentObject $object
* @return Model
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(int $address, Order $order): Model {
$address = $this->fetchesAddress->execute(['id' => $address_id]);
// $this->canCreateAddress->passes($object);
//Fetches Address & duplicate
return $this->createsOrderAddress->execute($address, $order);
}
}
@@ -2,26 +2,23 @@
namespace App\Classes\Modules\Addresses\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
use App\Classes\General\Interfaces\Addressable;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Models\Address;
use App\Models\CompanyModule;
use App\Models\Company;
class CreatesAddress extends AbstractUpdateRelationshipRecord
{
/**
* @param Addressable $addressable
* @param Company $company
* @param AddressObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Addressable $addressable, AddressObject $object) {
public function execute(Company $company, AddressObject $object) {
$model = new Address();
$model->reference = $object->getReference();
$model->street_one = $object->getStreetOne();
$model->street_two = $object->getStreetTwo();
$model->country_id = $object->getCountryId();
@@ -29,7 +26,7 @@ class CreatesAddress extends AbstractUpdateRelationshipRecord
$model->district_id = $object->getDistrictId();
$model->postcode = $object->getPostCode();
return $this->handler($addressable->addresses(), $model);
return $this->handler($company->addresses(), $model);
}
}
@@ -1,27 +0,0 @@
<?php
namespace App\Classes\Modules\Addresses\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject;
use App\Models\Order;
use App\Models\Address;
class CreatesOrderAddress extends AbstractUpdateRelationshipRecord
{
public function execute(Address $address, Order $order) {
$model = new Address();
$model->street_one = $address->street_one;
$model->street_two = $address->street_two;
$model->country_id = $address->country_id;
$model->state_id = $address->state_id;
$model->district_id = $address->district_id;
$model->postcode = $address->postcode;
return $this->handler($order->addresses(), $model);
}
}
@@ -3,20 +3,17 @@
namespace App\Classes\Modules\Addresses\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\General\Interfaces\Addressable;
use App\Models\Address;
use App\Models\CompanyModule;
class ResetsAddressesDefault extends AbstractUpdateRecord
{
/**
* @param Addressable $addressable
* @param int $type
* @param Address $address
* @return void
*/
public function execute(Addressable $addressable, int $type)
public function execute(Address $address)
{
$addressable->addresses()->where('type', $type)->update(['default' => false]);
$address->company->addresses()->update(['billing' => false]);
}
}
@@ -15,7 +15,7 @@ class SetsAddressToDefault extends AbstractUpdateRecord
*/
public function execute(Address $model)
{
$model->default = true;
$model->billing = true;
return $this->handler($model);
}
@@ -17,13 +17,15 @@ class UpdatesAddress extends AbstractUpdateRecord
*/
public function execute(Address $model, AddressObject $object) {
$model->reference = $object->getReference();
//$model->company_id = $object->getCompanyId();
$model->street_one = $object->getStreetOne();
$model->street_two = $object->getStreetTwo();
$model->district_id = $object->getDistrictId();
$model->state_id = $object->getStateId();
$model->postcode = $object->getPostCode();
$model->country_id = $object->getCountryId();
//$model->default = $object->getDefault();
//$model->billing = $object->getBilling();
return $this->handler($model);
@@ -1,72 +0,0 @@
<?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));
}
}
@@ -1,77 +0,0 @@
<?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([]);
}
}
@@ -1,62 +0,0 @@
<?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));
}
}
@@ -1,78 +0,0 @@
<?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)));
}
}
@@ -1,85 +0,0 @@
<?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));
}
}
@@ -1,136 +0,0 @@
<?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;
}
}
@@ -1,33 +0,0 @@
<?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);
}
}
@@ -1,19 +0,0 @@
<?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);
}
}
@@ -1,34 +0,0 @@
<?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();
}
}
@@ -1,33 +0,0 @@
<?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();
}
}
@@ -1,20 +0,0 @@
<?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]);
}
}
@@ -1,22 +0,0 @@
<?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);
}
}
@@ -1,30 +0,0 @@
<?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);
}
}
@@ -1,50 +0,0 @@
<?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;
}
}
@@ -1,40 +0,0 @@
<?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;
}
}
@@ -1,37 +0,0 @@
<?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;
}
}
@@ -1,54 +0,0 @@
<?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;
}
}
@@ -1,46 +0,0 @@
<?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 [];
}
}
@@ -5,7 +5,6 @@ namespace App\Classes\Modules\Companies\ControllersLogic;
use App\Classes\Modules\Companies\Services\UpdatesCompanyStatus;
use App\Classes\Modules\Documents\Services\RejectsDocument;
use App\Classes\Modules\Documents\Standards\Rules\CanApproveDocument;
use App\Classes\Modules\Orders\Services\UpdatesOrdersStatus;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Http\Resources\DocumentResource;
@@ -47,9 +46,6 @@ class ApproveIdentificationDocumentLogic extends AbstractControllerLogic
/** @var UpdatesCompanyStatus */
private $updatesCompanyStatus;
/** @var UpdatesOrdersStatus */
private $updatesOrdersStatus;
/**
* ApproveIdentificationDocumentLogic constructor.
* @param CanApproveDocument $canApproveDocument
@@ -57,16 +53,14 @@ class ApproveIdentificationDocumentLogic extends AbstractControllerLogic
* @param RejectsDocument $rejectsDocument
* @param FetchesDocument $fetchesDocument
* @param UpdatesCompanyStatus $updatesCompanyStatus
* @param UpdatesOrdersStatus $updatesOrdersStatus
*/
public function __construct(CanApproveDocument $canApproveDocument, ApprovesDocument $approvesDocument, RejectsDocument $rejectsDocument, FetchesDocument $fetchesDocument, UpdatesCompanyStatus $updatesCompanyStatus, UpdatesOrdersStatus $updatesOrdersStatus)
public function __construct(CanApproveDocument $canApproveDocument, ApprovesDocument $approvesDocument, RejectsDocument $rejectsDocument, FetchesDocument $fetchesDocument, UpdatesCompanyStatus $updatesCompanyStatus)
{
$this->canApproveDocument = $canApproveDocument;
$this->approvesDocument = $approvesDocument;
$this->rejectsDocument = $rejectsDocument;
$this->fetchesDocument = $fetchesDocument;
$this->updatesCompanyStatus = $updatesCompanyStatus;
$this->updatesOrdersStatus = $updatesOrdersStatus;
}
/**
@@ -90,11 +84,6 @@ class ApproveIdentificationDocumentLogic extends AbstractControllerLogic
$this->updatesCompanyStatus->execute($document->owner, $status === 'approve' ? ApprovalStatus::APPROVED : ApprovalStatus::REJECTED);
if($status === 'approve'){
$orders = $this->updatesOrdersStatus->execute($document->owner, ApprovalStatus::APPROVED);
}
return $this->resourceResponse(new DocumentResource($document));
}
@@ -2,18 +2,26 @@
namespace App\Classes\Modules\Companies\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Companies\Processors\CreateCompanyProcessor;
use App\Classes\Modules\Companies\Processors\CreateCompanyModuleProcessor;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Classes\ValueObjects\Constants\CompanyType;
use App\Http\Resources\CompanyResource;
use App\Models\Company;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CreateCompanyLogic extends AbstractControllerLogic
{
/**
* CreateCompanyLogic constructor.
* @param CreateCompanyProcessor $createCompanyProcessor
*/
public function __construct(CreateCompanyProcessor $createCompanyProcessor)
{
$this->createCompanyProcessor = $createCompanyProcessor;
}
/**
* @return array
@@ -25,23 +33,9 @@ class CreateCompanyLogic extends AbstractControllerLogic
];
}
/** @var CreateCompanyProcessor */
/** @var CreateCompanyProcessor */
private $createCompanyProcessor;
/** @var CreateCompanyModuleProcessor */
private $createCompanyModuleProcessor;
/**
* CreateCompanyLogic constructor.
* @param CreateCompanyProcessor $createCompanyProcessor
* @param CreateCompanyModuleProcessor $createCompanyModuleProcessor
*/
public function __construct(CreateCompanyProcessor $createCompanyProcessor, CreateCompanyModuleProcessor $createCompanyModuleProcessor)
{
$this->createCompanyProcessor = $createCompanyProcessor;
$this->createCompanyModuleProcessor = $createCompanyModuleProcessor;
}
/**
* @param Request $request
@@ -52,12 +46,8 @@ class CreateCompanyLogic extends AbstractControllerLogic
*/
public function logic(Request $request) : JsonResponse
{
/** @var Company $company */
$company = $this->createCompanyProcessor->execute($request->input('type') === CompanyType::COMPANY_BUSINESS ? $request->input('company_name') : $request->input('name'), $request->input('type'), ApprovalStatus::PENDING_SUBMISSION);
$this->createCompanyModuleProcessor->execute($company , $request->input('business_type'));
$company = $this->createCompanyProcessor->execute($request, BusinessType::CURRENCY_VENDOR, CompanyType::COMPANY_BUSINESS, ApprovalStatus::APPROVED);
return $this->resourceResponse(new CompanyResource($company));
}
}
}
@@ -7,6 +7,7 @@ use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Companies\Standards\Rules\CanFetchCompany;
use App\Http\Resources\CompanyResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -51,7 +52,7 @@ class FetchCompanyLogic extends AbstractControllerLogic
{
$this->canFetchCompany->passes();
$query = $this->fetchesCompany->execute(['id' => $request->route('id')]);
$query = $this->fetchesCompany->execute(['id' => $request->route('id'), 'with_bookings' => true]);
return $this->resourceResponse(new CompanyResource($query));
@@ -1,58 +0,0 @@
<?php
namespace App\Classes\Modules\Companies\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
use App\Models\CompanyModule;
class CompanyConnectionObject implements DataTransferObject
{
/** @var CompanyModule */
private $invitee;
/** @var string */
private $inviterReference;
/** @var string */
private $inviteeReference;
/**
* CompanyConnectionObject constructor.
* @param CompanyModule $invitee
* @param string $inviterReference
* @param string $inviteeReference
*/
public function __construct(CompanyModule $invitee, string $inviterReference, string $inviteeReference)
{
$this->invitee = $invitee;
$this->inviterReference = $inviterReference;
$this->inviteeReference = $inviteeReference;
}
/**
* @return CompanyModule
*/
public function getInvitee(): CompanyModule
{
return $this->invitee;
}
/**
* @return string
*/
public function getInviterReference(): string
{
return $this->inviterReference;
}
/**
* @return string
*/
public function getInviteeReference(): string
{
return $this->inviteeReference;
}
}
@@ -6,74 +6,34 @@ use App\Classes\General\Interfaces\DataTransferObject;
class CompanyModuleObject implements DataTransferObject
{
/** @var string */
private $name;
/** @var string */
private $reference;
/** @var string */
private $unity_hash_id;
/** @var string */
private $unity_signature;
/** @var int */
private $companyId;
/** @var int|null */
private $type;
/** @var int */
/** @var int|null */
private $status;
/**
* CompanyModuleObject constructor.
* @param string $name
* @param string $reference
* @param string $unity_hash_id
* @param string $unity_signature
* @param int $type
* @param int $status
* CompanyObject constructor.
* @param int $companyId
* @param int|null $type
* @param int|null $status
*/
public function __construct(string $name, string $reference, string $unity_hash_id, string $unity_signature, int $type, int $status)
public function __construct(int $companyId, int $type, int $status)
{
$this->name = $name;
$this->reference = $reference;
$this->unity_hash_id = $unity_hash_id;
$this->unity_signature = $unity_signature;
$this->companyId = $companyId;
$this->type = $type;
$this->status = $status;
}
/**
* @return string
* @return int
*/
public function getName(): string
public function getCompanyId(): int
{
return $this->name;
}
/**
* @return string
*/
public function getReference(): string
{
return $this->reference;
}
/**
* @return string
*/
public function getUnityHashId(): string
{
return $this->unity_hash_id;
}
/**
* @return string
*/
public function getUnitySignature(): string
{
return $this->unity_signature;
return $this->companyId;
}
/**
@@ -91,6 +51,4 @@ class CompanyModuleObject implements DataTransferObject
{
return $this->status;
}
}
@@ -20,9 +20,6 @@ class CompanyObject implements DataTransferObject
/** @var int|null */
private $status;
/** @var string */
private $unity_hash_id;
/**
* CompanyObject constructor.
* @param string $name
@@ -74,4 +71,7 @@ class CompanyObject implements DataTransferObject
return $this->status;
}
}
}
@@ -2,14 +2,11 @@
namespace App\Classes\Modules\Companies\Processors;
use App\Classes\Modules\Unity\Processors\CreateEntityProcessor;
use App\Classes\Modules\Unity\Processors\CreateEntitySignatureProcessor;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyModuleObject;
use App\Classes\Modules\Companies\Services\CreatesCompanyModule;
use App\Classes\Modules\Companies\Standards\Rules\CanCreateCompanyModule;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Models\CompanyModule;
use Illuminate\Database\Eloquent\Model;
use App\Models\Company;
class CreateCompanyModuleProcessor
@@ -18,57 +15,27 @@ class CreateCompanyModuleProcessor
/** @var CreatesCompanyModule */
private $createsCompanyModule;
/** @var CreateEntityProcessor */
private $createUnityEntityProcessor;
/** @var CanCreateCompanyModule */
private $canCreateCompanyModule;
/** @var CreateEntityProcessor*/
private $createsEntityProcessor;
/** @var CreateEntitySignatureProcessor */
private $createUnityEntitySignatureProcessor;
/**
* CreateCompanyModuleProcessor constructor.
* @param CreatesCompanyModule $createsCompanyModule
* @param CreateEntityProcessor $createUnityEntityProcessor
* @param CanCreateCompanyModule $canCreateCompanyModule
* @param CreateEntityProcessor $createsEntityProcessor
* @param CreateEntitySignatureProcessor $createUnityEntitySignatureProcessor
*/
public function __construct(CreatesCompanyModule $createsCompanyModule, CreateEntityProcessor $createUnityEntityProcessor, CanCreateCompanyModule $canCreateCompanyModule, CreateEntityProcessor $createsEntityProcessor, CreateEntitySignatureProcessor $createUnityEntitySignatureProcessor)
public function __construct(CreatesCompanyModule $createsCompanyModule)
{
$this->createsCompanyModule = $createsCompanyModule;
$this->createUnityEntityProcessor = $createUnityEntityProcessor;
$this->canCreateCompanyModule = $canCreateCompanyModule;
$this->createsEntityProcessor = $createsEntityProcessor;
$this->createUnityEntitySignatureProcessor = $createUnityEntitySignatureProcessor;
}
/**
* @param Company $company
* @param int|null $businessType
* @return Model
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(Company $company , ?int $businessType = BusinessType::IMPORTER): Model
public function execute(Company $company): Model
{
$unityEntity = $this->createUnityEntityProcessor->execute($company->name);
$company_module_object = new CompanyModuleObject(
$company->id,
$company->type,
$company->status,
);
$unityEntitySignature = $this->createUnityEntitySignatureProcessor->execute($unityEntity->hash_id);
$company_module_object = new CompanyModuleObject($company->name, $company->reference, $unityEntity->hash_id, $unityEntitySignature->hash_id, $businessType, $company->status);
$this->canCreateCompanyModule->passes($company_module_object);
/** @var CompanyModule $companyModule */
$companyModule = $this->createsCompanyModule->execute($company, $company_module_object);
return $companyModule;
return $this->createsCompanyModule->execute($company_module_object);
}
}
@@ -3,11 +3,8 @@
namespace App\Classes\Modules\Companies\Processors;
use App\Classes\General\Services\GeneratesInitials;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyConnectionObject;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyObject;
use App\Classes\Modules\Companies\Services\CreatesCompany;
use App\Classes\Modules\Companies\Services\CreatesCompanyConnection;
use App\Classes\Modules\Companies\Services\GeneratesUniqueAccountNumber;
use App\Classes\Modules\Companies\Standards\Rules\CanCreateCompany;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\BusinessType;
@@ -24,35 +21,37 @@ class CreateCompanyProcessor
/** @var CreatesCompany */
private $createsCompany;
/** @var GeneratesUniqueAccountNumber */
private $generatesUniqueAccountNumber;
/**
* CreateCompanyProcessor constructor.
* CreateUserProcessor constructor.
* @param CanCreateCompany $canCreateCompany
* @param CreatesCompany $createsCompany
* @param GeneratesUniqueAccountNumber $generatesUniqueAccountNumber
*/
public function __construct(CanCreateCompany $canCreateCompany, CreatesCompany $createsCompany, GeneratesUniqueAccountNumber $generatesUniqueAccountNumber)
public function __construct(CanCreateCompany $canCreateCompany, CreatesCompany $createsCompany)
{
$this->canCreateCompany = $canCreateCompany;
$this->createsCompany = $createsCompany;
$this->generatesUniqueAccountNumber = $generatesUniqueAccountNumber;
}
/**
* @param string $name
* @param int $companyType
* @param Request $request
* @param int $businessType
* @param int|null $companyType
* @param int|null $status
* @return Model
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(string $name, int $companyType = CompanyType::COMPANY_BUSINESS, ?int $status = ApprovalStatus::PENDING_SUBMISSION): Model {
public function execute(Request $request, ?int $companyType = CompanyType::COMPANY_BUSINESS, ?int $status = ApprovalStatus::PENDING_SUBMISSION): Model {
$companyName = $companyType === CompanyType::COMPANY_BUSINESS ? $request->input('company_name') : $request->input('name');
$company_object = new CompanyObject(
$companyName,
mt_rand(1000, 9999).(new GeneratesInitials())->name($companyName)->length(3)->generate(),
$companyType,
$status);
$company_object = new CompanyObject($name, $this->generatesUniqueAccountNumber->execute(), $companyType, $status);
$this->canCreateCompany->passes($company_object);
@@ -60,4 +59,4 @@ class CreateCompanyProcessor
}
}
}
@@ -1,25 +0,0 @@
<?php
namespace App\Classes\Modules\Companies\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Models\CompanyConnection;
use App\Models\Document;
use Carbon\Carbon;
class ApprovesCompanyConnection extends AbstractUpdateRecord
{
/**
* @param CompanyConnection $model
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(CompanyConnection $model)
{
$model->status = ApprovalStatus::APPROVED;
return $this->handler($model);
}
}
@@ -1,26 +0,0 @@
<?php
namespace App\Classes\Modules\Companies\Services;
use App\Models\Company;
class ChecksIfCompanyAccountNumberExists
{
/** @var Company */
private $repository;
/**
* ChecksIfAccountNumberExists constructor.
* @param Company $repository
*/
public function __construct(Company $repository)
{
$this->repository = $repository;
}
public function execute(int $accountNumber): bool {
return $this->repository->where('reference', $accountNumber)->exists();
}
}
@@ -1,44 +0,0 @@
<?php
namespace App\Classes\Modules\Companies\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyConnectionObject;
use App\Models\CompanyConnection;
class CreatesCompanyConnection extends AbstractUpdateRecord
{
/** @var FetchesCompany */
private $fetchesCompany;
/**
* CreatesCompanyConnection constructor.
* @param FetchesCompany $fetchesCompany
*/
public function __construct(FetchesCompany $fetchesCompany)
{
$this->fetchesCompany = $fetchesCompany;
}
/**
* @param CompanyConnectionObject $object
* @return mixed
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(CompanyConnectionObject $object)
{
$companyModule = $this->fetchesCompany->execute(['id', 1])->companyModules()->first();
$connection = new CompanyConnection();
$connection->inviter_id = $companyModule->id;
$connection->invitee_id = $object->getInvitee()->id;
$connection->inviter_reference = $object->getInviterReference();
$connection->invitee_reference = $object->getInviteeReference();
return $this->handler($connection);
}
}
@@ -3,30 +3,24 @@
namespace App\Classes\Modules\Companies\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyModuleObject;
use App\Models\Company;
use App\Models\CompanyModule;
class CreatesCompanyModule extends AbstractUpdateRelationshipRecord
class CreatesCompanyModule extends AbstractUpdateRecord
{
/**
* @param Company $company
* @param CompanyModuleObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Company $company, CompanyModuleObject $object)
public function execute(CompanyModuleObject $object)
{
$model = new CompanyModule();
$model->name = $object->getName();
$model->reference = $object->getReference();
$model->company_id = $object->getCompanyId();
$model->type = $object->getType();
$model->status = $object->getStatus();
$model->unity_hash_id = $object->getUnityHashId();
$model->unity_signature = $object->getUnitySignature();
return $this->handler($company->companyModules(), $model);
return $this->handler($model);
}
}
@@ -1,34 +0,0 @@
<?php
namespace App\Classes\Modules\Companies\Services;
use App\Classes\General\Eloquent\AbstractFetchRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\CompanyModule;
class FetchesCompanyModule extends AbstractFetchRecord
{
/** @var Company */
private $repository;
/**
* FetchesCompany constructor.
* @param Company $repository
*/
public function __construct(CompanyModule $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
public function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -1,31 +0,0 @@
<?php
namespace App\Classes\Modules\Companies\Services;
class GeneratesUniqueAccountNumber
{
/** @var ChecksIfCompanyAccountNumberExists */
private $accountNumberExists;
/**
* GeneratesUniqueAccountNumber constructor.
* @param ChecksIfCompanyAccountNumberExists $accountNumberExists
*/
public function __construct(ChecksIfCompanyAccountNumberExists $accountNumberExists)
{
$this->accountNumberExists = $accountNumberExists;
}
/**
* @return int
*/
public function execute(): int {
$number = mt_rand(100000001, 999999999);
return !$this->accountNumberExists->execute($number) ? $number : self::execute();
}
}
@@ -1,24 +0,0 @@
<?php
namespace App\Classes\Modules\Companies\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Models\Company;
class UpdatesCompanyStatus extends AbstractUpdateRecord
{
/**
* @param Company $model
* @param int $status
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Company $model, int $status)
{
$model->status = $status;
return $this->handler($model);
}
}
@@ -1,51 +0,0 @@
<?php
namespace App\Classes\Modules\Companies\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyObject;
use App\Classes\Modules\Companies\Standards\Validators\CompanyModuleValidation;
class CanCreateCompanyModule extends AbstractRule
{
/** @var CompanyValidation */
private $companyModuleValidation;
/**
* CanCreateCompany constructor.
* @param CompanyValidation $companyValidation
*/
public function __construct(CompanyModuleValidation $companyModuleValidation)
{
$this->companyModuleValidation = $companyModuleValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param CompanyObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return $this->companyModuleValidation->validate($object);
}
/**
* @param CompanyObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -1,43 +0,0 @@
<?php
namespace App\Classes\Modules\Companies\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyObject;
class CanFetchCompany extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
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;
}
}
@@ -1,41 +0,0 @@
<?php
namespace App\Classes\Modules\Companies\Standards\Validators;
use App\Classes\General\Abstracts\AbstractValidation;
use App\Classes\Modules\Companies\DataTransferObjects\CompanyObject;
class CompanyModuleValidation extends AbstractValidation
{
/**
* @param CompanyObject $object
* @return array
*/
protected function data($object): array
{
return [
'unity_hash_id' => $object->getUnityHashId(),
'unity_signature' => $object->getUnitySignature(),
];
}
/**
* @param string $type
* @return array
*/
protected function rules(): array
{
return [
'unity_hash_id' => 'required',
'unity_signature' => 'required'
];
}
/**
* @return array
*/
protected function messages(): array
{
return [];
}
}
@@ -15,7 +15,7 @@ class CompanyValidation extends AbstractValidation
{
return [
'company_name' => $object->getName(),
'company_reference' => $object->getReference()
'company_reference' => $object->getReference(),
];
}
@@ -27,18 +27,25 @@ class CreateContactProcessor
}
/**
* @param ContactObject $object
* @param Request $request
* @param Company $company
* @return Model
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(ContactObject $object, Company $company): Model
public function execute(Request $request, Company $company): Model
{
$this->canCreateContact->passes($object);
$contact_object = new ContactObject(
$request->input('name'),
$request->input('phone'),
$request->input('contact_email'),
$request->input('wechat_id'),
);
return $this->createsContact->execute($company,$object);
$this->canCreateContact->passes($contact_object);
return $this->createsContact->execute($company,$contact_object);
}
}
@@ -1,73 +0,0 @@
<?php
namespace App\Classes\Modules\Documents\ControllersLogic;
use App\Classes\Modules\Documents\Standards\Rules\CanApproveDocument;
use App\Http\Resources\DocumentResource;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Documents\Services\FetchesDocument;
use App\Classes\Modules\Documents\Services\ApprovesDocument;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ApproveDocumentLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Approve Document',
'message' => 'You have successfully approved the Document'
];
}
/** @var CanApproveDocument*/
private $canApproveDocument;
/** @var ApprovesDocument */
private $approvesDocument;
/** @var FetchesDocument */
private $fetchesDocument;
/**
* RejectDocumentLogic constructor.
* @param CanApproveDocument $canApproveDocument
* @param ApprovesDocument $approvesDocument
* @param FetchesDocument $fetchesDocument
*/
public function __construct(CanApproveDocument $canApproveDocument, ApprovesDocument $approvesDocument, FetchesDocument $fetchesDocument)
{
$this->canApproveDocument = $canApproveDocument;
$this->approvesDocument = $approvesDocument;
$this->fetchesDocument = $fetchesDocument;
}
/**
* @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
{
$document = $this->fetchesDocument->execute(['id' => $request->route('id')]);
$this->canApproveDocument->passes();
$document_query = $this->approvesDocument->execute($document);
return $this->resourceResponse(new DocumentResource($document_query));
}
}
@@ -1,63 +0,0 @@
<?php
namespace App\Classes\Modules\Documents\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Documents\Services\ListsDocuments;
use App\Classes\Modules\Documents\Standards\Rules\CanListDocuments;
use App\Http\Resources\DocumentResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListDocumentLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieved Document',
'message' => 'You have successfully retrieved a list of Document'
];
}
/** @var CanListDocuments */
private $canListDocuments;
/** @var ListsDocuments */
private $listsDocuments;
/**
* ListStandardSegmentLogic constructor.
* @param CanListDocuments $canListDocuments
* @param ListsDocuments $listsDocuments
*/
public function __construct(CanListDocuments $canListDocuments, ListsDocuments $listsDocuments)
{
$this->canListDocuments = $canListDocuments;
$this->listsDocuments = $listsDocuments;
}
/**
* @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->canListDocuments->passes();
$query = $this->listsDocuments->execute($this->listsDocuments->deserializeFilters($request->input('filters')));
return $this->collectionResponse(DocumentResource::collection($query));
}
}
@@ -1,71 +0,0 @@
<?php
namespace App\Classes\Modules\Documents\ControllersLogic;
use App\Classes\Modules\Documents\Services\RejectsDocument;
use App\Classes\Modules\Documents\Standards\Rules\CanApproveDocument;
use App\Http\Resources\DocumentResource;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Documents\Services\FetchesDocument;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class RejectDocumentLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Reject Document',
'message' => 'You have successfully rejected the Document'
];
}
/** @var CanApproveDocument*/
private $canApproveDocument;
/** @var RejectsDocument */
private $rejectsDocument;
/** @var FetchesDocument */
private $fetchesDocument;
/**
* RejectDocumentLogic constructor.
* @param CanApproveDocument $canApproveDocument
* @param RejectsDocument $rejectsDocument
* @param FetchesDocument $fetchesDocument
*/
public function __construct(CanApproveDocument $canApproveDocument, RejectsDocument $rejectsDocument, FetchesDocument $fetchesDocument)
{
$this->canApproveDocument = $canApproveDocument;
$this->rejectsDocument = $rejectsDocument;
$this->fetchesDocument = $fetchesDocument;
}
/**
* @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
{
$document = $this->fetchesDocument->execute(['id' => $request->route('id')]);
$this->canApproveDocument->passes();
$document_query = $this->rejectsDocument->execute($document);
return $this->resourceResponse(new DocumentResource($document_query));
}
}
@@ -1,64 +0,0 @@
<?php
namespace App\Classes\Modules\Documents\ControllersLogic;
use App\Classes\Exceptions\AccessForbiddenException;
use App\Classes\Exceptions\RequestValidationException;
use App\Classes\Exceptions\ResourceNotFoundException;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Documents\Standards\Rules\CanRenderDocument;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Tymon\JWTAuth\JWT;
class RenderDocumentLogic extends AbstractControllerLogic
{
protected function notification(): array {
return [
'title' => '',
'message' => ''
];
}
/** @var CanRenderDocument */
private $canRenderDocument;
/** @var JWT */
private $manager;
/**
* RenderDocumentLogic constructor.
* @param CanRenderDocument $canRenderDocument
* @param JWT $manager
*/
public function __construct(CanRenderDocument $canRenderDocument, JWT $manager)
{
$this->canRenderDocument = $canRenderDocument;
$this->manager = $manager;
}
/**
* @param Request $request
* @return JsonResponse
* @throws AccessForbiddenException
* @throws RequestValidationException
* @throws ResourceNotFoundException
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
*/
public function logic(Request $request) : JsonResponse
{
$file = $request->route('fileName');
$this->canRenderDocument->passes();
if(!Storage::disk('documents')->exists($file))
{
throw new ResourceNotFoundException();
}
return $this->response(['src' => explode('.', $file)[1] == 'pdf' ? chunk_split(base64_encode(Storage::disk('documents')->get($file))) : Storage::disk('documents')->get($file) ]);
}
}
@@ -2,7 +2,6 @@
namespace App\Classes\Modules\Documents\Processors;
use App\Classes\Modules\Companies\Services\UpdatesCompanyStatus;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
use App\Classes\Modules\Documents\Services\CreatesDocument;
use App\Classes\Modules\Documents\Services\CreatesFiles;
@@ -10,42 +9,30 @@ use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\CompanyType;
use App\Classes\ValueObjects\Constants\DocumentType;
use App\Models\Document;
use Illuminate\Http\Request;
use App\Models\Company;
class UploadIdentityDocumentProcessor
{
/** @var CreatesDocument */
private $createsDocument;
/** @var UpdatesCompanyStatus */
private $updatesCompanyStatus;
/** @var CreatesFiles */
private $createsFiles;
/**
* UploadIdentityDocumentProcessor constructor.
* @param CreatesDocument $createsDocument
* @param UpdatesCompanyStatus $updatesCompanyStatus
* @param CreatesFiles $createsFiles
* @param CreatesFiles $createsFile
*/
public function __construct(CreatesDocument $createsDocument, UpdatesCompanyStatus $updatesCompanyStatus, CreatesFiles $createsFiles)
public function __construct(CreatesDocument $createsDocument, CreatesFiles $createsFile)
{
$this->createsDocument = $createsDocument;
$this->updatesCompanyStatus = $updatesCompanyStatus;
$this->createsFiles = $createsFiles;
$this->createsFile = $createsFile;
}
/**
* @param Request $request
* @param Company $company
* @param DocumentObject $object
* @return Array
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(Request $request, Company $company) {
public function execute(Request $request, Company $company): Array {
$object = new DocumentObject($company->type === CompanyType::COMPANY_BUSINESS ?
DocumentType::SSM_REGISTRATION : DocumentType::IDENTITY_CARD, $request->input('files'),
@@ -53,10 +40,7 @@ class UploadIdentityDocumentProcessor
/** @var Document $document */
$document = $this->createsDocument->execute($company, $object);
$this->createsFiles->execute($document, $object);
$this->updatesCompanyStatus->execute($company, ApprovalStatus::PENDING_VERIFICATION);
return $this->createsFile->execute($document, $object);
}
}
@@ -1,26 +0,0 @@
<?php
namespace App\Classes\Modules\Documents\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Models\Document;
use Carbon\Carbon;
class ApprovesDocument extends AbstractUpdateRecord
{
/**
* @param Document $model
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Document $model)
{
$model->status = ApprovalStatus::APPROVED;
$model->approver = Auth()->user()->id;
$model->approval_date = Carbon::now();
return $this->handler($model);
}
}
@@ -1,33 +0,0 @@
<?php
namespace App\Classes\Modules\Documents\Services;
use App\Classes\General\Eloquent\AbstractFetchRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\Document;
class FetchesDocument extends AbstractFetchRecord
{
/** @var Document */
private $repository;
/**
* FetchesUser constructor.
* @param Document $repository
*/
public function __construct(Document $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
public function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -1,33 +0,0 @@
<?php
namespace App\Classes\Modules\Documents\Services;
use App\Classes\General\Eloquent\AbstractListRecord;
use Illuminate\Database\Eloquent\Builder;
use App\Models\Document;
class ListsDocuments extends AbstractListRecord
{
/** @var Document */
private $repository;
/**
* ListsDocuments constructor.
* @param Document $repository
*/
public function __construct(Document $repository)
{
$this->repository = $repository;
}
/**
* @return Builder
*/
function getRepository(): Builder
{
return $this->repository->newQuery();
}
}
@@ -1,26 +0,0 @@
<?php
namespace App\Classes\Modules\Documents\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Models\Document;
use Carbon\Carbon;
class RejectsDocument extends AbstractUpdateRecord
{
/**
* @param Document $model
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Document $model)
{
$model->status = ApprovalStatus::REJECTED;
$model->approver = Auth()->user()->id;
$model->approval_date = Carbon::now();
return $this->handler($model);
}
}
@@ -1,39 +0,0 @@
<?php
namespace App\Classes\Modules\Documents\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
class CanApproveDocument extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -1,53 +0,0 @@
<?php
namespace App\Classes\Modules\Documents\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
use App\Classes\Modules\Documents\Standards\Validators\DocumentValidation;
class CanCreateDocument extends AbstractRule
{
/** @var DocumentValidation */
private $documentValidation;
/**
* CanCreateAddress constructor.
* @param DocumentValidation $documentValidation
*/
public function __construct(DocumentValidation $documentValidation)
{
$this->documentValidation = $documentValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param DocumentObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return $this->documentValidation->validate($object);
}
/**
* @param DocumentObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -1,53 +0,0 @@
<?php
namespace App\Classes\Modules\Documents\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Documents\DataTransferObjects\FileObject;
use App\Classes\Modules\Documents\Standards\Validators\FileValidation;
class CanCreateFile extends AbstractRule
{
/** @var FileValidation */
private $fileValidation;
/**
* CanCreateFile constructor.
* @param FileValidation $fileValidation
*/
public function __construct(FileValidation $fileValidation)
{
$this->fileValidation = $fileValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param FileObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return $this->fileValidation->validate($object);
}
/**
* @param FileObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -1,47 +0,0 @@
<?php
namespace App\Classes\Modules\Documents\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
class CanListDocuments extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
/*
Disabled temporarily, will check back later
if (!\Auth::user()->can('view document')) {
return false;
}
*/
return true;
}
/**
* @param DocumentObject $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param DocumentObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -1,39 +0,0 @@
<?php
namespace App\Classes\Modules\Documents\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
class CanRenderDocument extends AbstractRule
{
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param $object
* @return bool
*/
protected function validators($object): bool
{
return true;
}
/**
* @param $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -1,53 +0,0 @@
<?php
namespace App\Classes\Modules\Documents\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
use App\Classes\Modules\Documents\Standards\Validators\DocumentValidation;
class CanUpdateDocument extends AbstractRule
{
/** @var DocumentValidation */
private $documentValidation;
/**
* CanCreateAddress constructor.
* @param DocumentValidation $documentValidation
*/
public function __construct(DocumentValidation $documentValidation)
{
$this->documentValidation = $documentValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
/**
* @param DocumentObject $object
* @return bool
* @throws \App\Classes\Exceptions\RequestValidationException
*/
protected function validators($object): bool
{
return $this->documentValidation->validate($object);
}
/**
* @param DocumentObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -1,42 +0,0 @@
<?php
namespace App\Classes\Modules\Documents\Standards\Validators;
use App\Classes\General\Abstracts\AbstractValidation;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
class DocumentValidation extends AbstractValidation
{
/**
* @param DocumentObject $object
* @return array
*/
protected function data($object): array
{
return [
'document_type' => $object->getDocumentType(),
'reference' => $object->getReference(),
'status' => $object->getStatus(),
];
}
/**
* @return array
*/
protected function rules(): array
{
return [
'document_type' => 'required',
'reference' => 'required',
'status' => 'required'
];
}
/**
* @return array
*/
protected function messages(): array
{
return [];
}
}
@@ -1,42 +0,0 @@
<?php
namespace App\Classes\Modules\Documents\Standards\Validators;
use App\Classes\General\Abstracts\AbstractValidation;
use App\Classes\Modules\Documents\DataTransferObjects\FileObject;
class FileValidation extends AbstractValidation
{
/**
* @param FileObject $object
* @return array
*/
protected function data($object): array
{
return [
'document_id' => $object->getDocumentId(),
'file' => $object->getFile(),
'file_type' => $object->getFileType()
];
}
/**
* @return array
*/
protected function rules(): array
{
return [
'document_id' => 'required',
'file' => 'required',
'file_type' => 'required'
];
}
/**
* @return array
*/
protected function messages(): array
{
return [];
}
}
@@ -1,60 +0,0 @@
<?php
namespace App\Classes\Modules\Orders\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Orders\Services\CancelsOrder;
use App\Classes\Modules\Orders\Services\FetchesOrder;
use App\Http\Resources\OrderResource;
use App\Models\Order;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class CancelOrderLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Cancelled Order',
'message' => 'You have successfully cancelled an order'
];
}
/** @var CancelsOrder */
private $cancelsOrder;
/** @var FetchesOrder */
private $fetchesOrder;
/**
* CancelOrderLogic constructor.
* @param CancelsOrder $cancelsOrder
* @param FetchesOrder $fetchesOrder
*/
public function __construct(CancelsOrder $cancelsOrder, FetchesOrder $fetchesOrder)
{
$this->cancelsOrder = $cancelsOrder;
$this->fetchesOrder = $fetchesOrder;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request) : JsonResponse
{
/** @var Order $order */
$order = $this->fetchesOrder->execute(['id' => $request->route('id')]);
return $this->resourceResponse(new OrderResource($this->cancelsOrder->execute($order)));
}
}
@@ -1,51 +0,0 @@
<?php
namespace App\Classes\Modules\Orders\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
use App\Classes\Modules\Orders\Services\CreatesOrder;
use App\Classes\Modules\Orders\Services\FetchesOrder;
use App\Classes\Modules\Orders\Standards\Rules\CanConfirmOrder;
use App\Classes\Modules\OrderSteps\Processors\GenerateOrderStepsProcessor;
use App\Classes\ValueObjects\Constants\OrderStatus;
use App\Classes\ValueObjects\Constants\OrderSteps;
use App\Classes\ValueObjects\Constants\OrderType;
use App\Http\Resources\OrderResource;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Config;
class ConfirmOrderLogic extends AbstractControllerLogic
{
private $canConfirmOrder;
private $generateOrderStepsProcessor;
public function __construct(CanConfirmOrder $canConfirmOrder, GenerateOrderStepsProcessor $generateOrderStepsProcessor, FetchesOrder $fetchesOrder)
{
$this->canConfirmOrder = $canConfirmOrder;
$this->generateOrderStepsProcessor = $generateOrderStepsProcessor;
$this->fetchesOrder = $fetchesOrder;
}
protected function notification():array {
return [
'title' => 'Confirm Order',
'message' => 'Order confirmed'
];
}
public function logic(Request $request) : JsonResponse {
$order_object = new OrderObject(0,'','',0,0, '',$request->get('id'));
$this->canConfirmOrder->passes($order_object);
$order = $this->fetchesOrder->execute(['id'=>$order_object->getId()]);
$this->generateOrderStepsProcessor->execute($order);
return $this->resourceResponse(new OrderResource($order));
}
}
@@ -1,34 +0,0 @@
<?php
namespace App\Classes\Modules\Orders\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Orders\Processors\CreateOrderProcessor;
use App\Http\Resources\OrderResource;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
class CreateOrderLogic extends AbstractControllerLogic
{
private $createOrderProcessor;
public function __construct( CreateOrderProcessor $createsOrderProcessor)
{
$this->createOrderProcessor = $createsOrderProcessor;
}
protected function notification():array {
return [
'title' => 'Created Order',
'message' => 'You have successfully created a new Order'
];
}
public function logic(Request $request) : JsonResponse {
$order = $this->createOrderProcessor->execute($request);
return $this->resourceResponse(new OrderResource($order));
}
}
@@ -1,61 +0,0 @@
<?php
namespace App\Classes\Modules\Orders\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Orders\Services\FetchesOrder;
use App\Classes\Modules\Orders\Standards\Rules\CanFetchOrder;
use App\Http\Resources\BookingResource;
use App\Http\Resources\OrderResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class FetchOrderLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieved Order',
'message' => 'You have successfully retrieved an order'
];
}
/** @var CanFetchOrder */
private $canFetchOrder;
/** @var FetchesOrder */
private $fetchesOrder;
/**
* FetchOrderLogic constructor.
* @param CanFetchOrder $canFetchOrder
* @param FetchesOrder $fetchesOrder
*/
public function __construct(CanFetchOrder $canFetchOrder, FetchesOrder $fetchesOrder)
{
$this->canFetchOrder = $canFetchOrder;
$this->fetchesOrder = $fetchesOrder;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function logic(Request $request) : JsonResponse
{
$this->canFetchOrder->passes();
$query = $this->fetchesOrder->execute(['reference' => $request->route('id')]);
return $this->resourceResponse(new OrderResource($query));
}
}
@@ -1,55 +0,0 @@
<?php
namespace App\Classes\Modules\Orders\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Orders\Services\ListsOrders;
use App\Classes\Modules\Orders\Standards\Rules\CanListOrders;
use App\Http\Resources\OrderResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListOrdersLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieved Orders',
'message' => 'You have successfully retrieved a list of Orders'
];
}
/** @var CanListOrders */
private $canListOrders;
/** @var ListsOrders */
private $listsOrders;
/**
* ListOrdersLogic constructor.
* @param CanListOrders $canListOrders
* @param ListsOrders $listsOrders
*/
public function __construct(CanListOrders $canListOrders, ListsOrders $listsOrders)
{
$this->canListOrders = $canListOrders;
$this->listsOrders = $listsOrders;
}
public function logic(Request $request) : JsonResponse
{
$this->canListOrders->passes();
$query = $this->listsOrders->execute($this->listsOrders->deserializeFilters($request->input('filters')));
return $this->collectionResponse(OrderResource::collection($query));
}
}
@@ -1,60 +0,0 @@
<?php
namespace App\Classes\Modules\Orders\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Orders\Services\RestoresOrder;
use App\Classes\Modules\Orders\Services\FetchesOrder;
use App\Http\Resources\OrderResource;
use App\Models\Order;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class RestoreOrderLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Cancelled Order',
'message' => 'You have successfully cancelled an order'
];
}
/** @var RestoresOrder */
private $restoresOrder;
/** @var FetchesOrder */
private $fetchesOrder;
/**
* CancelOrderLogic constructor.
* @param RestoresOrder $restoresOrder
* @param FetchesOrder $fetchesOrder
*/
public function __construct(RestoresOrder $restoresOrder, FetchesOrder $fetchesOrder)
{
$this->restoresOrder = $restoresOrder;
$this->fetchesOrder = $fetchesOrder;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request) : JsonResponse
{
/** @var Order $order */
$order = $this->fetchesOrder->execute(['id' => $request->route('id')]);
return $this->resourceResponse(new OrderResource($this->restoresOrder->execute($order)));
}
}
@@ -1,59 +0,0 @@
<?php
namespace App\Classes\Modules\Orders\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
class OrderObject implements DataTransferObject
{
/** @var int */
private $reference;
/** @var int */
private $type;
/** @var int|null */
private $status;
/**
* OrderObject constructor.
* @param int $reference
* @param int $type
* @param int|null $status
*/
public function __construct(int $reference, int $type, ?int $status = ApprovalStatus::PENDING_VERIFICATION)
{
$this->reference = $reference;
$this->type = $type;
$this->status = $status;
}
/**
* @return int
*/
public function getReference(): int
{
return $this->reference;
}
/**
* @return int
*/
public function getType(): int
{
return $this->type;
}
/**
* @return int
*/
public function getStatus(): int
{
return $this->status;
}
}
@@ -1,60 +0,0 @@
<?php
namespace App\Classes\Modules\Orders\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
use App\Models\CompanyModule;
use App\Models\Order;
class OrderRoleObject implements DataTransferObject
{
/** @var Order */
private $order;
/** @var CompanyModule */
private $companyModule;
/** @var int */
private $role;
/**
* OrderRoleObject constructor.
* @param Order $order
* @param CompanyModule $companyModule
* @param int $role
*/
public function __construct(Order $order, CompanyModule $companyModule, int $role)
{
$this->order = $order;
$this->companyModule = $companyModule;
$this->role = $role;
}
/**
* @return Order
*/
public function getOrder(): Order
{
return $this->order;
}
/**
* @return CompanyModule
*/
public function getCompanyModule(): CompanyModule
{
return $this->companyModule;
}
/**
* @return int
*/
public function getRole(): int
{
return $this->role;
}
}
@@ -1,64 +0,0 @@
<?php
namespace App\Classes\Modules\Orders\Processors;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
use App\Classes\Modules\Orders\Services\CreatesOrder;
use App\Classes\Modules\Orders\Services\FetchesOrder;
use App\Classes\Modules\Orders\Standards\Rules\CanConfirmOrder;
use App\Classes\Modules\OrderSteps\Processors\GenerateOrderStepsProcessor;
use App\Classes\ValueObjects\Constants\OrderStatus;
use App\Classes\ValueObjects\Constants\OrderSteps;
use App\Classes\ValueObjects\Constants\OrderType;
use App\Classes\Modules\OrderSteps\DataTransferObjects\StepsObject;
use App\Classes\Modules\OrderSteps\Services\UpdatesOrderSteps;
use Illuminate\Http\Request;
class ConfirmOrderProcessor
{
private $canConfirmOrder;
private $generateOrderStepsProcessor;
private $updatesOrderCurrentStep;
public function __construct(CanConfirmOrder $canConfirmOrder, GenerateOrderStepsProcessor $generateOrderStepsProcessor, FetchesOrder $fetchesOrder, UpdatesOrderSteps $updatesOrderStep)
{
$this->canConfirmOrder = $canConfirmOrder;
$this->generateOrderStepsProcessor = $generateOrderStepsProcessor;
$this->fetchesOrder = $fetchesOrder;
$this->updatesOrderStep = $updatesOrderStep;
}
public function execute(int $orderId, array $contract_obligation_list = [], array $orderRoles=[] ){
$order_object = new OrderObject(0,'','',0,0, '',$orderId,0,0);
$this->canConfirmOrder->passes($order_object);
$order = $this->fetchesOrder->execute(['id'=>$order_object->getId()]);
//Only Processing Step is created at this point
$orderStep = $order->orderSteps[0];
$orderStepObject = new StepsObject(
0,
$orderStep->reference,
true,
$orderStep->sequence,
OrderStatus::COMPLETE,
0,
date('Y-m-d H:i:s'),
$orderStep->id,
$orderStep->hash_id
);
//Update PROCESSING to completed
$updatedOrderStep = $this->updatesOrderStep->execute($orderStep, $orderStepObject);
//Generate Order Steps base on Contract from Unity
$this->generateOrderStepsProcessor->execute($order, $contract_obligation_list, $orderRoles);
}
}
@@ -1,96 +0,0 @@
<?php
namespace App\Classes\Modules\Orders\Processors;
use App\Classes\General\Interfaces\Addressable;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Classes\Modules\Addresses\Services\CreatesAddress;
use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
use App\Classes\Modules\Orders\Services\CreatesOrder;
use App\Classes\Modules\Orders\Services\GeneratesOrderNumber;
use App\Classes\Modules\Orders\Standards\Rules\CanCreateOrder;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\OrderType;
use App\Models\CompanyModule;
use App\Models\Order;
use Illuminate\Http\Request;
class CreateOrderProcessor
{
/** @var GeneratesOrderNumber */
private $generatesOrderNumber;
/** @var CanCreateOrder */
private $canCreateOrder;
/** @var CreatesOrder */
private $createsOrder;
/** @var fetchesAddress */
private $fetchesAddress;
/** @var CreatesAddress */
private $createAddress;
/** @var FetchesCompany */
private $fetchesCompany;
/** @var CreateOrderRolesProcessor */
private $createOrderRolesProcessor;
/**
* CreateOrderProcessor constructor.
* @param GeneratesOrderNumber $generatesOrderNumber
* @param CanCreateOrder $canCreateOrder
* @param CreatesOrder $createsOrder
* @param FetchesAddress $fetchesAddress
* @param CreatesAddress $createAddress
* @param FetchesCompany $fetchesCompany
* @param CreateOrderRolesProcessor $createOrderRolesProcessor
*/
public function __construct(GeneratesOrderNumber $generatesOrderNumber, CanCreateOrder $canCreateOrder, CreatesOrder $createsOrder, FetchesAddress $fetchesAddress, CreatesAddress $createAddress, FetchesCompany $fetchesCompany, CreateOrderRolesProcessor $createOrderRolesProcessor)
{
$this->generatesOrderNumber = $generatesOrderNumber;
$this->canCreateOrder = $canCreateOrder;
$this->createsOrder = $createsOrder;
$this->fetchesAddress = $fetchesAddress;
$this->createAddress = $createAddress;
$this->fetchesCompany = $fetchesCompany;
$this->createOrderRolesProcessor = $createOrderRolesProcessor;
}
/**
* @param Request $request
* @return Addressable
* @throws \App\Classes\Exceptions\AccessForbiddenException
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws \App\Classes\Exceptions\RequestValidationException
*/
public function execute(Request $request){
$company = $this->fetchesCompany->execute(['id' => $request->get('company_id')]);
/** @var CompanyModule $importer */
$importer = $this->fetchesCompany->execute(['id' => $request->get('company_id')])->companyModules()->importers()->first();
$orderObject = new OrderObject($this->generatesOrderNumber->execute(), OrderType::SHARED_CONTAINER, $company->status === ApprovalStatus::APPROVED ? ApprovalStatus::APPROVED : ApprovalStatus::PENDING_VERIFICATION);
$this->canCreateOrder->passes($orderObject);
/** @var Order $order */
$order = $this->createsOrder->execute($importer, $orderObject);
$address = $this->fetchesAddress->execute(['id' => $request->get('address_id')]);
$addressObject = new AddressObject($address->street_one, $address->street_two, $address->country_id, $address->state_id, $address->district_id, $address->postcode,$address->reference);
$this->createAddress->execute($order, $addressObject);
$this->createOrderRolesProcessor->execute($request, $order);
return $order;
}
}
@@ -1,131 +0,0 @@
<?php
namespace App\Classes\Modules\Orders\Processors;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Classes\Modules\Addresses\Services\CreatesAddress;
use App\Classes\Modules\Addresses\Services\FetchesAddress;
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
use App\Classes\Modules\Orders\Services\CreatesOrder;
use App\Classes\Modules\Orders\Standards\Rules\CanCreateOrder;
use App\Classes\Modules\Orders\Processors\ConfirmOrderProcessor;
use App\Classes\Modules\OrderSteps\Processors\CreateOrderStepsProcessor;
use App\Classes\Modules\Unity\Services\CreatesContract;
use App\Classes\ValueObjects\Constants\OrderStatus;
use App\Classes\ValueObjects\Constants\OrderSteps;
use App\Classes\ValueObjects\Constants\OrderType;
use App\Classes\Modules\Unity\Processors\CreateContractProcessor;
use App\Classes\Modules\Unity\Processors\ActivateContractProcessor;
use App\Classes\Modules\Unity\Processors\CreateContractEntityProcessor;
use App\Classes\Modules\Unity\Processors\AssignContractEntityProcessor;
use App\Classes\Modules\Orders\Processors\CreateOrderRolesProcessor;
use App\Classes\Modules\Addresses\Processors\CreateOrderAddressProcessor;
use Illuminate\Http\Request;
class CreateOrderProcessorOld
{
/** @var CanCreateOrder */
private $canCreateOrder;
/** @var CreatesOrder */
private $createsOrder;
/** @var ConfirmOrderProcessor */
private $confirmOrderProcessor;
/** @var CreateOrderStepsProcessor */
private $createOrderStepsProcessor;
/** @var CreatesContract */
private $unityCreateContract;
/** @var AssignContractEntityProcessor */
private $unityAssignContractEntity;
/** @var CreateContractEntityProcessor */
private $unityCreateContractEntity;
/** @var ActivateContractProcessor */
private $unityActivateContract;
/** @var CreateOrderRolesProcessor */
private $createOrderRoleProcessor;
/** @var CreatesAddress */
private $createAddress;
/** @var FetchesAddress */
private $fetchesAddress;
/**
* CreateOrderProcessor constructor.
* @param CanCreateOrder $canCreateOrder
* @param CreatesOrder $createsOrder
* @param \App\Classes\Modules\Orders\Processors\ConfirmOrderProcessor $confirmOrderProcessor
* @param CreateOrderStepsProcessor $createOrderStepsProcessor
* @param CreatesContract $unityCreateContract
* @param AssignContractEntityProcessor $unityAssignContractEntity
* @param CreateContractEntityProcessor $unityCreateContractEntity
* @param ActivateContractProcessor $unityActivateContract
* @param \App\Classes\Modules\Orders\Processors\CreateOrderRolesProcessor $createOrderRoleProcessor
* @param CreatesAddress $createAddress
* @param FetchesAddress $fetchesAddress
*/
public function __construct(CanCreateOrder $canCreateOrder, CreatesOrder $createsOrder, \App\Classes\Modules\Orders\Processors\ConfirmOrderProcessor $confirmOrderProcessor, CreateOrderStepsProcessor $createOrderStepsProcessor, CreatesContract $unityCreateContract, AssignContractEntityProcessor $unityAssignContractEntity, CreateContractEntityProcessor $unityCreateContractEntity, ActivateContractProcessor $unityActivateContract, \App\Classes\Modules\Orders\Processors\CreateOrderRolesProcessor $createOrderRoleProcessor, CreatesAddress $createAddress, FetchesAddress $fetchesAddress)
{
$this->canCreateOrder = $canCreateOrder;
$this->createsOrder = $createsOrder;
$this->confirmOrderProcessor = $confirmOrderProcessor;
$this->createOrderStepsProcessor = $createOrderStepsProcessor;
$this->unityCreateContract = $unityCreateContract;
$this->unityAssignContractEntity = $unityAssignContractEntity;
$this->unityCreateContractEntity = $unityCreateContractEntity;
$this->unityActivateContract = $unityActivateContract;
$this->createOrderRoleProcessor = $createOrderRoleProcessor;
$this->createAddress = $createAddress;
$this->fetchesAddress = $fetchesAddress;
}
public function execute(Request $request){
$reference_no = rand(1000000, 9999999);
//Call Unity to create contract and get contract reference no (and all the obligations)
$contract = $this->unityCreateContract->execute();
$contract_reference_no = $contract->hash_id;
$contract_obligation_list = $contract->contract_obligation_list;
//Activate Contract (if not activated then cannot update status)
$activated = $this->unityActivateContract->execute($contract_reference_no);
//Create Order on Shipping Platform
$order_object = new OrderObject($request->get('company_module_id'), $reference_no, $contract_reference_no, OrderType::SHARED_CONTAINER, OrderStatus::PROCESSING, OrderSteps::PROCESSING, 0, $request->get('address_id'), $request->get('warehouse_id'));
$this->canCreateOrder->passes($order_object);
$order = $this->createsOrder->execute($order_object);
$address = $this->fetchesAddress->execute(['id' => $order_object->getAddressId()]);
$addressObject = new AddressObject($address->street_one, $address->street_two, $address->country_id, $address->state_id, $address->district_id, $address->postcode,$address->reference);
//Add address (polymorphic)
$this->createAddress->execute($order, $addressObject);
//Add order roles - Allow entity to process this order
//This processor calls Unity to create Contract Entity ID
$orderRoles = $this->createOrderRoleProcessor->execute($request, $order->id, $contract_reference_no);
//Call Unity to assign contract entity to obligation
$this->unityAssignContractEntity->execute($request, $orderRoles, $contract_obligation_list);
//Add processing to order step
//Note: For processing apointee_id is CIEF Freight Forward , id is 1, reserved in company table
$this->createOrderStepsProcessor->execute($order, OrderSteps::PROCESSING, 1);
//Pre-approved order, no need Admin to process it
//This processor then calls Generate Order Steps
$this->confirmOrderProcessor->execute($order->id, $contract_obligation_list, $orderRoles);
return $order;
}
}
@@ -1,84 +0,0 @@
<?php
namespace App\Classes\Modules\Orders\Processors;
use App\Classes\Modules\Addresses\DataTransferObjects\AddressObject;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use App\Classes\Modules\Companies\Services\FetchesCompanyModule;
use App\Classes\Modules\Orders\DataTransferObjects\OrderRoleObject;
use App\Classes\Modules\Orders\Services\CreatesOrderRole;
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
use App\Classes\ValueObjects\Constants\WarehouseReferences;
use App\Models\CompanyModule;
use App\Models\Order;
use Illuminate\Http\Request;
class CreateOrderRolesProcessor
{
/** @var FetchesCompanyModule */
private $fetchesCompanyModule;
/** @var CreatesOrderRole */
private $createsOrderRole;
/** @var FetchesCompany */
private $fetchesCompany;
/**
* CreateOrderRolesProcessor constructor.
* @param FetchesCompanyModule $fetchesCompanyModule
* @param CreatesOrderRole $createsOrderRole
* @param FetchesCompany $fetchesCompany
*/
public function __construct(FetchesCompanyModule $fetchesCompanyModule, CreatesOrderRole $createsOrderRole, FetchesCompany $fetchesCompany)
{
$this->fetchesCompanyModule = $fetchesCompanyModule;
$this->createsOrderRole = $createsOrderRole;
$this->fetchesCompany = $fetchesCompany;
}
public function execute(Request $request, Order $order){
$address = $order->addresses()->first();
$importer = $order->companyModule;
/** @var CompanyModule $originWarehouse */
$originWarehouse = $this->fetchesCompanyModule->execute(['id' => $request->get('warehouse_id')]);
/** @var CompanyModule $destinationWarehouse */
$destinationWarehouse = $this->fetchesCompanyModule->execute(['reference' => $address->state_id = 13 ? WarehouseReferences::SABAH : ($address->state_id === 14 ? WarehouseReferences::SARAWAK : WarehouseReferences::KLANG)]);
/** @var CompanyModule $freightForwarder */
$freightForwarder = $originWarehouse->company->companyModules()->freightForwarders()->first();
/** @var CompanyModule $supervisor */
$supervisor = $this->fetchesCompany->execute(['reference' => 'CIEF'])->companyModules()->freightForwarders()->first();
$roleObject = new OrderRoleObject($order, $supervisor, OrderRoleTypes::SUPERVISOR);
$this->createsOrderRole->execute($roleObject);
$roleObject = new OrderRoleObject($order, $importer, OrderRoleTypes::IMPORTER);
$this->createsOrderRole->execute($roleObject);
$roleObject = new OrderRoleObject($order, $originWarehouse, OrderRoleTypes::ORIGIN_WAREHOUSE);
$this->createsOrderRole->execute($roleObject);
$roleObject = new OrderRoleObject($order, $freightForwarder, OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER);
$this->createsOrderRole->execute($roleObject);
$roleObject = new OrderRoleObject($order, $freightForwarder, OrderRoleTypes::DESTINATION_FREIGHT_FORWARDER);
$this->createsOrderRole->execute($roleObject);
$roleObject = new OrderRoleObject($order, $destinationWarehouse, OrderRoleTypes::DESTINATION_WAREHOUSE);
$this->createsOrderRole->execute($roleObject);
$roleObject = new OrderRoleObject($order, $freightForwarder, OrderRoleTypes::LAST_MILE_DELIVERY_DRIVER);
$this->createsOrderRole->execute($roleObject);
return true;
}
}
@@ -1,56 +0,0 @@
<?php
namespace App\Classes\Modules\Orders\Processors;
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
use App\Classes\Modules\Orders\Services\FetchesOrder;
use App\Classes\Modules\Orders\Services\UpdatesCurrentStep;
use App\Classes\Modules\OrderSteps\Services\FetchesOrderSteps;
use App\Classes\Modules\Orders\Standards\Rules\CanUpdateCurrentStep;
use App\Classes\ValueObjects\Constants\OrderStatus;
use App\Classes\ValueObjects\Constants\OrderSteps;
use App\Models\Order;
use App\Models\Step;
class UpdatesOrderCurrentStepProcessor
{
private $canUpdateCurrentStep;
private $updatesCurrentStep;
private $fetchesOrder;
private $fetchesOrderSteps;
public function __construct(CanUpdateCurrentStep $canUpdateCurrentStep, FetchesOrder $fetchesOrder, FetchesOrderSteps $fetchesOrderSteps, UpdatesCurrentStep $updatesCurrentStep)
{
$this->canUpdateCurrentStep = $canUpdateCurrentStep;
$this->updatesCurrentStep = $updatesCurrentStep;
$this->fetchesOrder = $fetchesOrder;
$this->fetchesOrderSteps = $fetchesOrderSteps;
}
public function execute(int $orderId, string $currentStep){
$order_object = new OrderObject(0, '', '', 0, 0, $currentStep, $orderId,0,0);
$this->canUpdateCurrentStep->passes($order_object);
$order = $this->fetchesOrder->execute(['id'=>$order_object->getId()]);
//Count steps / obligations that pending
$order_steps_processing = $this->fetchesOrderSteps->getRepository()->where(['owner_id'=>$order_object->getId(), 'status'=> OrderStatus::PROCESSING])->count();
//If no more steps / obligations, then update Order status to complete (Contract fullfilled)
if($order_steps_processing==0){
$order_object->setStatus(OrderStatus::COMPLETE);
}else{
$order_object->setStatus($order->status);
}
$order_object->setCurrentStep($currentStep);
$order = $this->updatesCurrentStep->execute($order, $order_object);
}
}
@@ -1,23 +0,0 @@
<?php
namespace App\Classes\Modules\Orders\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Models\Order;
class CancelsOrder extends AbstractUpdateRecord
{
/**
* @param Order $model
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(Order $model)
{
$model->status = ApprovalStatus::SUSPENDED;
return $this->handler($model);
}
}
@@ -1,28 +0,0 @@
<?php
namespace App\Classes\Modules\Orders\Services;
use App\Models\Order;
class ChecksIfOrderNumberExists
{
/** @var Order */
private $repository;
/**
* ChecksIfBookingMarkingExists constructor.
* @param Order $repository
*/
public function __construct(Order $repository)
{
$this->repository = $repository;
}
public function execute(int $orderNumber): bool {
return $this->repository->where('reference', $orderNumber)->exists();
}
}
@@ -1,29 +0,0 @@
<?php
namespace App\Classes\Modules\Orders\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\General\Eloquent\AbstractUpdateRelationshipRecord;
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
use App\Models\CompanyModule;
use App\Models\Order;
class CreatesOrder extends AbstractUpdateRelationshipRecord
{
/**
* @param CompanyModule $companyModule
* @param OrderObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(CompanyModule $companyModule, OrderObject $object)
{
$model = new Order();
$model->reference = $object->getReference();
$model->type = $object->getType();
$model->status = $object->getStatus();
return $this->handler($companyModule->orders(), $model);
}
}

Some files were not shown because too many files have changed in this diff Show More