mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal.git
synced 2026-08-19 12:34:18 +00:00
05ee6b3e98
create shipping packing list
125 lines
4.7 KiB
PHP
125 lines
4.7 KiB
PHP
<?php
|
|
|
|
namespace App\Classes\Modules\Orders\ControllersLogic;
|
|
|
|
use App\Classes\General\Abstracts\AbstractControllerLogic;
|
|
use App\Classes\Modules\PackingLists\Processors\CreatePackingListProcessor;
|
|
use App\Classes\Modules\PackingLists\Processors\CreatePackageProcessor;
|
|
use App\Classes\Modules\Orders\Services\FetchesOrder;
|
|
use App\Classes\Modules\Transports\Services\CreatesTransport;
|
|
use App\Classes\Modules\PackingLists\Services\GeneratesPackingListReferenceNumber;
|
|
use App\Classes\Modules\Schedules\Services\CreatesSchedule;
|
|
use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject;
|
|
use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject;
|
|
use App\Classes\Modules\Transports\DataTransferObjects\TransportObject;
|
|
use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject;
|
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
|
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
|
|
use App\Classes\ValueObjects\Constants\PackingListType;
|
|
use App\Classes\ValueObjects\Constants\TransportType;
|
|
|
|
use App\Http\Resources\PackingListResource;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
use Carbon\Carbon;
|
|
|
|
class CreateWarehousePackingListLogic extends AbstractControllerLogic
|
|
{
|
|
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
protected function notification():array {
|
|
return [
|
|
'title' => 'Created Warehouse PackingList',
|
|
'message' => 'You have successfully created a new Warehouse PackingList'
|
|
];
|
|
}
|
|
|
|
/** @var CreatePackingListProcessor */
|
|
private $createPackingListProcessor;
|
|
|
|
/** @var GeneratesPackingListReferenceNumber */
|
|
private $generatesPackingListReferenceNumber;
|
|
|
|
/** @var CreatesTransport */
|
|
private $createsTransport;
|
|
|
|
/** @var CreatePackageProcessor */
|
|
private $createPackageProcessor;
|
|
|
|
/** @var CreatesSchedule */
|
|
private $createsSchedule;
|
|
|
|
/** @var FetchesOrder */
|
|
private $fetchesOrder;
|
|
|
|
/**
|
|
* CreatePackingListLogic constructor.
|
|
* @param CreatePackingListProcessor $createPackingListProcessor
|
|
* @param FetchesOrder $fetchesOrder
|
|
*/
|
|
public function __construct(
|
|
CreatePackingListProcessor $createPackingListProcessor,
|
|
CreatesTransport $createsTransport,
|
|
CreatesSchedule $createsSchedule,
|
|
CreatePackageProcessor $createPackageProcessor,
|
|
GeneratesPackingListReferenceNumber $generatesPackingListReferenceNumber,
|
|
FetchesOrder $fetchesOrder
|
|
)
|
|
{
|
|
$this->createPackingListProcessor = $createPackingListProcessor;
|
|
$this->createsTransport = $createsTransport;
|
|
$this->createsSchedule = $createsSchedule;
|
|
$this->createPackageProcessor = $createPackageProcessor;
|
|
$this->generatesPackingListReferenceNumber = $generatesPackingListReferenceNumber;
|
|
$this->fetchesOrder = $fetchesOrder;
|
|
}
|
|
|
|
/**
|
|
* @param Request $request
|
|
* @return JsonResponse
|
|
*/
|
|
public function logic(Request $request) : JsonResponse
|
|
{
|
|
$order = $this->fetchesOrder->execute(['id' => $request->input('order_id')]);
|
|
|
|
$reference_number = $this->generatesPackingListReferenceNumber->execute();
|
|
|
|
$packingListObject = new PackingListObject(
|
|
$reference_number,
|
|
$order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id,
|
|
PackingListType::WAREHOUSE_RECEIVE_LIST,
|
|
ApprovalStatus::PENDING_SUBMISSION
|
|
);
|
|
$packingList = $this->createPackingListProcessor->execute($packingListObject, $order);
|
|
|
|
$transportObject = new TransportObject(TransportType::LAND, null, $request->input('tracking'), Carbon::parse($request->input('receive_date')), Carbon::parse($request->input('receive_date')), ApprovalStatus::APPROVED);
|
|
$transport = $this->createsTransport->execute($transportObject, $packingList);
|
|
|
|
$scheduleObject = new ScheduleObject(Carbon::parse($request->input('receive_date')), Carbon::parse($request->input('receive_date')), ApprovalStatus::APPROVED);
|
|
$schedule = $this->createsSchedule->execute($transport, $scheduleObject);
|
|
|
|
$packages = $request->input('packages');
|
|
|
|
foreach ($packages as $key => $row) {
|
|
$packageObject = new PackageObject(
|
|
$row['type'],
|
|
$row['description'],
|
|
$row['width'],
|
|
$row['height'],
|
|
$row['length'],
|
|
$row['weight'],
|
|
$row['quantity'],
|
|
ApprovalStatus::APPROVED,
|
|
$row['reference'],
|
|
);
|
|
$this->createPackageProcessor->execute($packageObject, $packingList);
|
|
}
|
|
|
|
return $this->resourceResponse(new PackingListResource($packingList));
|
|
}
|
|
|
|
}
|