Added contract entity, address to Orders

This commit is contained in:
Fairuz
2021-08-03 01:18:34 +08:00
parent af38004595
commit 7e9b3259c3
10 changed files with 379 additions and 0 deletions
@@ -0,0 +1,53 @@
<?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 CreatesAddress $CreatesAddress
*/
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_id, Order $order): Model {
$address = $this->fetchesAddress->getRepository()->whereIn('id',[$address_id])->first();
// $this->canCreateAddress->passes($object);
//Fetches Address & duplicate
return $this->createsOrderAddress->execute($address, $order);
}
}
@@ -0,0 +1,27 @@
<?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);
}
}
@@ -0,0 +1,46 @@
<?php
namespace App\Classes\Modules\Orders\DataTransferObjects;
use App\Classes\General\Interfaces\DataTransferObject;
class OrderRoleObject implements DataTransferObject
{
private $order_id;
private $company_module_id;
private $role_hash_id;
private $role_signature;
public function __construct(int $order_id, int $company_module_id, ?string $role_hash_id, ?string $role_signature)
{
$this->order_id = $order_id;
$this->company_module_id = $company_module_id;
$this->role_hash_id = $role_hash_id;
$this->role_signature = $role_signature;
}
public function getOrderId(): int
{
return $this->order_id;
}
public function getCompanyModuleId(): int
{
return $this->company_module_id;
}
public function getRoleHashId(): ?string
{
return $this->role_hash_id;
}
public function getRoleSignature(): ?string
{
return $this->role_signature;
}
}
@@ -0,0 +1,61 @@
<?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\DataTransferObjects\OrderRoleObject;
use App\Classes\Modules\Orders\Services\CreatesOrderRole;
use App\Classes\Modules\Orders\Services\FetchesOrder;
use App\Classes\Modules\Orders\Standards\Rules\CanCreateOrderRole;
use App\Classes\Modules\Unity\Processors\CreateContractEntityProcessor;
use App\Classes\ValueObjects\Constants\OrderStatus;
use App\Classes\ValueObjects\Constants\OrderSteps;
use App\Classes\ValueObjects\Constants\OrderType;
use App\Classes\Modules\Companies\Services\FetchesCompany;
use Illuminate\Http\Request;
class CreateOrderRoleProcessor
{
private $canCreateOrderRole;
private $createsOrderRole;
private $fetchesCompany;
private $unityCreateContractEntity;
public function __construct(CanCreateOrderRole $canCreateOrderRole, CreatesOrderRole $createsOrderRole, FetchesCompany $fetchesCompany, CreateContractEntityProcessor $unityCreateContractEntity)
{
$this->canCreateOrderRole = $canCreateOrderRole;
$this->createsOrderRole = $createsOrderRole;
$this->fetchesCompany = $fetchesCompany;
$this->unityCreateContractEntity = $unityCreateContractEntity;
}
public function execute(Request $request, int $orderId, string $contract_reference_no){
$companies = $this->fetchesCompany->getRepository()->whereIn('id',[1, $request->get('warehouse_id')])->get();
$cief_company = $companies[0]->id == 1 ? $companies[0] : $companies[1];
$warehouse_company = $companies[0]->id != 1 ? $companies[0] : $companies[1];
$cief_company_module = $cief_company->companyModule()->first();
$contractEntities[] = $this->unityCreateContractEntity->execute( $contract_reference_no, [$cief_company_module->unity_hash_id]);
$contractEntities[0]->{"company_module_id"} = $cief_company_module->id;
$warehouse_company_module = $warehouse_company->companyModule()->first();
$contractEntities[] = $this->unityCreateContractEntity->execute( $contract_reference_no, [$warehouse_company_module->unity_hash_id]);
$contractEntities[1]->{"company_module_id"} = $warehouse_company_module->id;
foreach($contractEntities as $entity){
$order_role_object = new OrderRoleObject($orderId, $entity->company_module_id, $entity->hash_id, $entity->entity_signature_hash_id);
$this->canCreateOrderRole->passes($order_role_object);
$this->createsOrderRole->execute($order_role_object);
}
return $contractEntities;
}
}
@@ -0,0 +1,27 @@
<?php
namespace App\Classes\Modules\Orders\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Orders\DataTransferObjects\OrderRoleObject;
use App\Models\OrderRole;
class CreatesOrderRole extends AbstractUpdateRecord
{
/**
* @param OrderObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(OrderRoleObject $object)
{
$model = new OrderRole();
$model->order_id = $object->getOrderId();
$model->company_module_id = $object->getCompanyModuleId();
$model->role_hash_id = $object->getRoleHashId();
$model->role_signature = $object->getRoleSignature();
return $this->handler($model);
}
}
@@ -0,0 +1,39 @@
<?php
namespace App\Classes\Modules\Orders\Standards\Rules;
use App\Classes\General\Abstracts\AbstractRule;
use App\Classes\Modules\Orders\Standards\Validators\OrderRoleValidation;
class CanCreateOrderRole extends AbstractRule
{
private $orderRoleValidation;
public function __construct(OrderRoleValidation $orderRoleValidation)
{
$this->orderRoleValidation = $orderRoleValidation;
}
/**
* @return bool
*/
protected function authorized(): bool
{
// TODO Set Authorization rules
return true;
}
protected function validators($object): bool
{
return $this->orderRoleValidation->validate($object);
}
/**
* @param CompanyObject $object
* @return bool
*/
protected function criteria($object): bool
{
return true;
}
}
@@ -0,0 +1,43 @@
<?php
namespace App\Classes\Modules\Orders\Standards\Validators;
use App\Classes\General\Abstracts\AbstractValidation;
use App\Classes\Modules\Orders\DataTransferObjects\OrderObject;
class OrderRoleValidation extends AbstractValidation
{
/**
* @param OrderObject $object
* @return array
*/
protected function data($object): array
{
return [
'order_id' => $object->getOrderId(),
'company_module_id' => $object->getCompanyModuleId(),
'role_hash_id' => $object->getRoleHashId(),
'role_signature' => $object->getRoleSignature(),
];
}
/**
* @param string $type
* @return array
*/
protected function rules(?string $type = 'POST'): array
{
return [
'order_id' => 'required|exists:orders,id',
'company_module_id' => 'required|exists:company_modules,id',
];
}
/**
* @return array
*/
protected function messages(): array
{
return [];
}
}
@@ -0,0 +1,21 @@
<?php
namespace App\Classes\Modules\Unity\Processors;
use Config;
use Illuminate\Support\Facades\Http;
use App\Classes\Modules\Unity\Services\CreatesEntitySignature;
class CreateEntitySignatureProcessor
{
private $createsEntitySignature;
public function __construct(CreatesEntitySignature $createsEntitySignature)
{
$this->createsEntitySignature = $createsEntitySignature;
}
public function execute(string $entity_hash_id){
return $this->createsEntitySignature->execute($entity_hash_id);
}
}
@@ -0,0 +1,30 @@
<?php
namespace App\Classes\Modules\Unity\Services;
use Config;
use Illuminate\Support\Facades\Http;
use App\Classes\Modules\Unity\Services\GetAccessToken;
class CreatesEntitySignature
{
private $getAccessToken;
private $createEntitySignatureEndpoint;
public function __construct(GetAccessToken $getAccessToken)
{
$this->createEntitySignatureEndpoint = Config::get('unity.url').Config::get('unity.endpoint.create_entity_signature');
$this->getAccessToken = $getAccessToken;
}
public function execute(string $entity_hash_id){
$accesToken=$this->getAccessToken->execute();
$response = Http::withToken($accesToken)->post($this->createEntitySignatureEndpoint,['entity_id'=>[$entity_hash_id], 'type'=>'1'])->object();
return (isset($response->data)) ? $response->data : null;
}
}
@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class ModifyOrderRoles extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('order_roles', function (Blueprint $table) {
$table->dropColumn('role');
$table->string('role_hash_id',200)->nullable(true)->after('company_module_id');
$table->string('role_signature',200)->nullable(true)->after('role_hash_id');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}