mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/shipping-portal.git
synced 2026-08-19 12:34:18 +00:00
136 lines
3.7 KiB
PHP
136 lines
3.7 KiB
PHP
<?php
|
|
|
|
namespace App\Transformers;
|
|
|
|
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
|
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
|
|
use App\Classes\ValueObjects\Constants\PackingListType;
|
|
use App\Models\Order;
|
|
use League\Fractal\Resource\Collection;
|
|
use League\Fractal\Resource\Item;
|
|
use League\Fractal\TransformerAbstract;
|
|
|
|
class OrderTransformer extends TransformerAbstract
|
|
{
|
|
/**
|
|
* List of resources to automatically include
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $defaultIncludes = [
|
|
'company_module',
|
|
'warehouse',
|
|
'address',
|
|
'address_change_request',
|
|
'remarks'
|
|
|
|
];
|
|
|
|
/**
|
|
* List of resources possible to include
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $availableIncludes = [
|
|
'parcels',
|
|
'invoices'
|
|
];
|
|
|
|
/**
|
|
* A Fractal transformer.
|
|
*
|
|
* @param Order $order
|
|
* @return array
|
|
*/
|
|
public function transform(Order $order): array
|
|
{
|
|
return [
|
|
'id' => $order->id,
|
|
'reference' => $order->reference,
|
|
'reference_contract' => $order->type,
|
|
'type' => $order->type,
|
|
'status' => $order->status,
|
|
'created_at' => $order->created_at->format('d-m-Y')
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Include company module
|
|
* @param Order $order
|
|
* @return Item
|
|
*/
|
|
public function includeCompanyModule(Order $order): Item
|
|
{
|
|
return $this->item($order->companyModule, new CompanyModuleTransformer());
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Include warehouse
|
|
* @param Order $order
|
|
* @return Item
|
|
*/
|
|
public function includeWarehouse(Order $order): Item
|
|
{
|
|
return $this->item($order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee, new CompanyModuleTransformer());
|
|
}
|
|
|
|
/**
|
|
* include address
|
|
* @param Order $order
|
|
* @return Item
|
|
*/
|
|
public function includeAddress(Order $order): Item
|
|
{
|
|
return $this->item($order->addresses()->where('status', '=', ApprovalStatus::APPROVED)->first(), new AddressTransformer());
|
|
}
|
|
|
|
/**
|
|
* include address change request
|
|
* @param Order $order
|
|
* @return Item
|
|
*/
|
|
public function includeAddressChangeRequest(Order $order): Item
|
|
{
|
|
return $this->item($order->addressesPendingVerification()->first(), new AddressTransformer());
|
|
}
|
|
|
|
/**
|
|
* include parcels
|
|
* @param Order $order
|
|
* @return array
|
|
*/
|
|
public function includeParcels(Order $order): array
|
|
{
|
|
return [
|
|
'origin_warehouse_packages' => $this->collection($order->originWarehousePackages()->get(), new PackageListTransformer()),
|
|
|
|
'in_transit_packages' => $this->collection($order->inTransitPackages()->get(), new PackageListTransformer()),
|
|
|
|
'destination_warehouse_packages' => $this->collection($order->destinationWarehousePackages()->get(), new PackageListTransformer()),
|
|
|
|
'delivered_packages' => $this->collection($order->deliveredPackages()->get(), new PackageListTransformer()),
|
|
|
|
'received_packages' => $this->collection($order->packingLists()->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->whereHas('packages')->get(), new PackageListTransformer()),
|
|
];
|
|
}
|
|
|
|
/**
|
|
*
|
|
* include invoices
|
|
* @param Order $order
|
|
* @return Collection
|
|
*/
|
|
public function includeInvoices(Order $order): Collection
|
|
{
|
|
|
|
$invoices = $order->transactions()->whereNotIn('transactions.status', [0, 1])->get();
|
|
return $this->collection($invoices, new TransactionTransformer());
|
|
}
|
|
|
|
public function includeRemarks(Order $order): Collection
|
|
{
|
|
return $this->collection($order->remarks()->get(), new RemarkTransformer);
|
|
}
|
|
}
|