Compare commits

..

2 Commits

93 changed files with 88261 additions and 3486 deletions
@@ -1,23 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Builder;
class DoesNotHaveTransactionType implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereDoesntHave('transactions', function (Builder $query) use($value) {
$query->where('type', $value);
})->whereHas('containers', function ($query){
return $query->whereDate('loading_date', '>=', Carbon::parse('08-08-2022'));
});
}
}
@@ -1,20 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class HasInvoiceStatusIn implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('transactions', function (Builder $query) use($value) {
$query->where('type', 1)->whereIn('status', $value);
});
}
}
@@ -1,20 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class HasTransactionType implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereHas('transactions', function (Builder $query) use($value) {
$query->where('type', $value);
});
}
}
@@ -1,20 +0,0 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class SegmentIdIn implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereIn('segment_id', $value);
}
}
@@ -97,15 +97,15 @@ class ApproveIdentificationDocumentLogic extends AbstractControllerLogic
$this->updatesCompanyStatus->execute($document->owner, $status === 'approve' ? ApprovalStatus::APPROVED : ApprovalStatus::REJECTED);
// $object = new NotificationObject(
// 'ID Verification ' . ( $status === 'approve' ? 'Approved' : 'Rejected' ),
// ( $status === 'approve' ? 'Dear user, congratulations that your ' : 'Dear user, we are sorry to inform you that your ' ) . ( $document->type === 'IDENTITY_CARD' ? 'IC' : 'SSM' ) . ( $status === 'approve' ? ' has been approved. Start your first order now!' : ' has been rejected due to ' . ( $request->input('rejectRemark') ?? '' ) . ', please resubmit it for further action.' ),
// $document->owner,
// $document->owner->companyModules()->first()->employees()->first(),
// $document,
// );
//
// $this->createNotificationProcessor->execute($object);
$object = new NotificationObject(
'ID Verification ' . ( $status === 'approve' ? 'Approved' : 'Rejected' ),
( $status === 'approve' ? 'Dear user, congratulations that your ' : 'Dear user, we are sorry to inform you that your ' ) . ( $document->type === 'IDENTITY_CARD' ? 'IC' : 'SSM' ) . ( $status === 'approve' ? ' has been approved. Start your first order now!' : ' has been rejected due to ' . ( $request->input('rejectRemark') ?? '' ) . ', please resubmit it for further action.' ),
$document->owner,
$document->owner->companyModules()->first()->employees()->first(),
$document,
);
$this->createNotificationProcessor->execute($object);
if($status === 'approve'){
$orders = $this->updatesOrdersStatus->execute($document->owner, ApprovalStatus::APPROVED);
@@ -4,7 +4,6 @@ namespace App\Classes\Modules\Companies\Services;
use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Models\Company;
use App\Models\Segment;
use Illuminate\Database\QueryException;
@@ -20,9 +19,8 @@ class AssignsCompanyToSegment extends AbstractUpdateRecord
public function execute(Company $company, Segment $segment)
{
try {
$companyModule = $company->companyModules()->where('type', BusinessType::IMPORTER)->first();
$connection = $companyModule->connections()->where('inviter_reference', 'CIEF');
$connection->segments()->attach($segment);
$company->segments()->attach($segment);
return $company;
@@ -4,7 +4,6 @@ namespace App\Classes\Modules\Exports\Services;
use App\Models\Order;
use App\Models\PackingList;
use Carbon\Carbon;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
@@ -3,7 +3,6 @@
namespace App\Classes\Modules\Exports\Services;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Models\Order;
use App\Models\PackingList;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromQuery;
@@ -47,7 +46,6 @@ class ExportsOnHoldPackingList implements FromQuery, WithHeadings, WithHeadingRo
$container = $packingList->containers()->first();
$ContainerTransport = $container->transports()->first();
$order = $packingList->owner;
if(!$order instanceof Order)return [];
$marking = $order->companyModule->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference;
return [
@@ -57,8 +57,7 @@ class ExportsPendingArrangementDeliveryList implements FromQuery, WithHeadings,
$container = $packingList->containers()->first();
$ContainerTransport = $container->transports()->first();
$order = $packingList->owner;
$inviter = $order->companyModule ? $order->companyModule->inviters()->withPivot('invitee_reference')->first() : null;
$marking = $inviter ? $inviter->pivot->invitee_reference : 'Unclaimed';
$marking = $order->companyModule->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference;
$address = $order->addresses()->where('status', ApprovalStatus::APPROVED)->first();
$contacts = $address->contacts->first() ? $address->contacts->first(): '';
$originalPackingList = $packingList->owner instanceof PackingList ? $packingList->owner : $packingList;
@@ -2,7 +2,6 @@
namespace App\Classes\Modules\PackingLists\ControllersLogic;
use App\Classes\Exceptions\ResourceNotFoundException;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
use App\Classes\Modules\Orders\Services\FetchesOrder;
@@ -135,25 +134,20 @@ class AssignPackingListOrderLogic extends AbstractControllerLogic
$this->unityAssignContractEntity->execute($supervisorContractEntity->hash_id, $contractObligations);
try {
$packing_list = $this->fetchesPackingList->execute([
'reference' => $warehouse_packing_list->reference,
'type' => PackingListType::SHIPPING_PACKING_LIST
]);
$packing_list = $this->fetchesPackingList->execute([
'reference' => $warehouse_packing_list->reference,
'type' => PackingListType::SHIPPING_PACKING_LIST
]);
$warehouse_packing_list = $this->updatesPackingListOwner->execute($packing_list, $order);
$this->updatesPackingListContractReference->execute($packing_list, $contractReference);
foreach($contractObligations as $obligation) {
$stepObject = new StepsObject($order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->id, $obligation->reference, $obligation->sequence, $obligation->hash_id);
$this->createsStep->execute($packing_list, $stepObject);
}
} catch (ResourceNotFoundException $exception) {
$warehouse_packing_list = $this->updatesPackingListOwner->execute($packing_list, $order);
$this->updatesPackingListContractReference->execute($packing_list, $contractReference);
foreach($contractObligations as $obligation) {
$stepObject = new StepsObject($order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->id, $obligation->reference, $obligation->sequence, $obligation->hash_id);
$this->createsStep->execute($packing_list, $stepObject);
}
return $this->resourceResponse(new PackingListResource($warehouse_packing_list));
}
}
@@ -7,7 +7,6 @@ use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\PackingLists\Services\DeletesPackingList;
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
use App\Classes\Modules\PackingLists\Standards\Rules\CanDeletePackingList;
use App\Classes\ValueObjects\Constants\PackingListType;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -59,11 +58,9 @@ class DeletePackingListLogic extends AbstractControllerLogic
$this->canDeletePackingList->passes();
$warehouseList = $this->fetchesPackingList->execute(['id' => $request->route('id')]);
$packingList = $this->fetchesPackingList->execute(['reference' => $warehouseList->reference, 'type' => PackingListType::SHIPPING_PACKING_LIST]);
$query = $this->fetchesPackingList->execute(['id' => $request->route('id')]);
$this->deletesPackingList->execute($warehouseList);
$this->deletesPackingList->execute($packingList);
$this->deletesPackingList->execute($query);
return $this->response([]);
@@ -7,13 +7,9 @@ use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
use App\Classes\Modules\Schedules\Services\CreatesSchedule;
use App\Classes\Modules\Schedules\Services\UpdatesScheduleStatus;
use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject;
use App\Classes\Modules\Transports\DataTransferObjects\TransportObject;
use App\Classes\Modules\Transports\Services\CreatesTransport;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\TransportType;
use App\Http\Resources\PackingListResource;
use App\Models\Transport;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -21,8 +17,6 @@ use Carbon\Carbon;
class ReschedulePackingListLogic extends AbstractControllerLogic
{
/**
* @return array
*/
@@ -39,31 +33,26 @@ class ReschedulePackingListLogic extends AbstractControllerLogic
/** @var UpdatesScheduleStatus */
private $updatesScheduleStatus;
/** @var CreatesTransport */
private $createsTransport;
/** @var CreatesSchedule */
private $createsSchedule;
/**
* ReschedulePackingListLogic constructor.
* DeleteContainerControllersLogic constructor.
* @param FetchesPackingList $fetchesPackingList
* @param UpdatesScheduleStatus $updatesScheduleStatus
* @param CreatesTransport $createsTransport
* @param CreatesSchedule $createsSchedule
*/
public function __construct(FetchesPackingList $fetchesPackingList, UpdatesScheduleStatus $updatesScheduleStatus, CreatesTransport $createsTransport, CreatesSchedule $createsSchedule)
public function __construct(FetchesPackingList $fetchesPackingList, UpdatesScheduleStatus $updatesScheduleStatus, CreatesSchedule $createsSchedule)
{
$this->fetchesPackingList = $fetchesPackingList;
$this->updatesScheduleStatus = $updatesScheduleStatus;
$this->createsTransport = $createsTransport;
$this->createsSchedule = $createsSchedule;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
@@ -71,15 +60,9 @@ class ReschedulePackingListLogic extends AbstractControllerLogic
$transport = $packing_list->transports()->first();
if(!$transport) {
$object = new TransportObject(TransportType::LAND, null, '', Carbon::parse($request->input('etd')), Carbon::parse($request->input('eta')),ApprovalStatus::APPROVED);
/** @var Transport $transport */
$transport = $this->createsTransport->execute($object, $packing_list);
}
$old_sechedule = $transport->schedules()->first();
$transport->schedules()->update([
'status' => ApprovalStatus::REJECTED
]);
$this->updatesScheduleStatus->execute($old_sechedule, ApprovalStatus::REJECTED);
$scheduleObject = new ScheduleObject(
Carbon::parse($request->input('eta')),
@@ -91,6 +91,7 @@ class FetchDeliveryListFromVTPortalProcessor
$deliveryStep->update(['status' => ApprovalStatus::COMPLETED]);
} catch (GuzzleException $exception) {
dd($exception);
continue;
}
@@ -7,15 +7,12 @@ use App\Classes\Modules\Companies\Services\FetchesCompanyModule;
use App\Classes\Modules\Orders\Services\FetchesDataFromVTPortal;
use App\Classes\Modules\Orders\Services\FetchesOrder;
use App\Classes\Modules\PackingLists\DataTransferObjects\ContainerObject;
use App\Classes\Modules\PackingLists\DataTransferObjects\PackageObject;
use App\Classes\Modules\PackingLists\DataTransferObjects\PackingListObject;
use App\Classes\Modules\PackingLists\Services\Containers\FetchesContainer;
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
use App\Classes\Modules\Schedules\DataTransferObjects\ScheduleObject;
use App\Classes\Modules\Schedules\Services\CreatesSchedule;
use App\Classes\Modules\Steps\DataTransferObjects\StepsObject;
use App\Classes\Modules\Steps\Services\CreatesStep;
use App\Classes\Modules\Transports\DataTransferObjects\TransportObject;
use App\Classes\Modules\Transports\Services\CreatesTransport;
use App\Classes\Modules\Unity\Processors\ActivateContractProcessor;
use App\Classes\Modules\Unity\Processors\AssignContractEntityProcessor;
@@ -24,13 +21,10 @@ use App\Classes\Modules\Unity\Services\CreatesContract;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\ContainerTypes;
use App\Classes\ValueObjects\Constants\OrderRoleTypes;
use App\Classes\ValueObjects\Constants\PackageType;
use App\Classes\ValueObjects\Constants\RoleTypes;
use App\Classes\ValueObjects\Constants\PackingListType;
use App\Classes\ValueObjects\Constants\TransportType;
use App\Models\Order;
use App\Models\PackingList;
use App\Models\Transport;
use Carbon\Carbon;
use GuzzleHttp\Exception\GuzzleException;
use Illuminate\Support\Facades\DB;
@@ -130,8 +124,9 @@ class FetchLoadedContainersFromVTPortalProcessor
*/
public function execute(?Carbon $start = null, ?Carbon $end = null){
DB::beginTransaction();
try {
$start = $start ? $start : Carbon::today()->subDays(5);
$start = $start ? $start : Carbon::now()->subDays(10);
$startLimit = Carbon::parse('11-08-2021');
@@ -139,162 +134,80 @@ class FetchLoadedContainersFromVTPortalProcessor
$start = $startLimit;
}
$end = $end ? $end : Carbon::today()->addDay();
$end = $end ? $end : Carbon::now();
$filter = '["LoadedTime:$between$%js%\"'.$start->format('Y-m-d').'T00:00:00.000\"$and$%js%\"'.$end->format('Y-m-d').'T00:00:00.000\"\u0000"]';
$containersRequest = $this->fetchesDataFRomVTPortal->clientRequest('http://portal.vtnation.com.my/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VCustomercontainer","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"LoadedTime asc","Filter":'.$filter.'}}'), '');
$containers = $this->fetchesDataFRomVTPortal->getResponseBody($containersRequest);
foreach ($containers->Rows as $container){
$filter = '["ContainerID:=%js%'.$container[12].'"]';
$containerDetailRequest = $this->fetchesDataFRomVTPortal->clientRequest('http://portal.vtnation.com.my/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"ParcelInContainer","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":null,"Filter":'.$filter.'}}'), '');
$filter = '["ContainerID:=%js%'.$container[11].'"]';
$containerDetailRequest = $this->fetchesDataFRomVTPortal->clientRequest('http://portal.vtnation.com.my/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VPodetailparcel","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"CreatedOn asc","Filter":'.$filter.'}}'), '');
$containerDetail = $this->fetchesDataFRomVTPortal->getResponseBody($containerDetailRequest);
$containerObject = new ContainerObject($container[0], str_replace(' ', '', $container[24]), str_replace(' ', '', $container[16]), ContainerTypes::FORTY_FEET_DRY_CONTAINER, Carbon::parse($container[6]), ApprovalStatus::PENDING_VERIFICATION);
$containerInfo = $container;
$containerObject = new ContainerObject($container[0], str_replace(' ', '', $container[24]), str_replace(' ', '', $container[15]), ContainerTypes::FORTY_FEET_DRY_CONTAINER, Carbon::parse($container[5]), ApprovalStatus::PENDING_VERIFICATION);
try {
$container = $this->fetchesContainer->execute(['reference' => $containerObject->getReference()]);
} catch (ResourceNotFoundException $exception){
$warehouseId = $container[13];
$warehouseId = $container[12];
$originWarehouse = $this->fetchesCompanyModule->execute(['id' => $warehouseId === 11 ? 3 : 4]);
$container = $this->createContainerProcessor->execute($containerObject, $originWarehouse);
}
$eta = Carbon::parse($containerInfo[4]);
$etd = Carbon::parse($eta)->subDays(5);
$delayDate = $containerInfo[7];
$containerStatus = $containerInfo[10];
$unstuffingDate = $containerInfo[8];
$transport = $container->transports()->first();
if(!$transport || $eta !== $transport->eta){
$container->transports()->delete();
$transportObject = new TransportObject(TransportType::SEA, null, null, $etd, null, ApprovalStatus::APPROVED);
/** @var Transport $transport */
$transport = $this->createsTransport->execute($transportObject, $container);
$this->createsSchedule->execute($transport, new ScheduleObject($etd, $eta, ApprovalStatus::APPROVED));
}
if($delayDate){
$delayDate = Carbon::parse($delayDate);
$transport = $container->transports()->first();
if(!$transport->schedules()->where('eta', '=', $delayDate)->first()) {
$etd = $transport->schedules()->where('status', '=', ApprovalStatus::APPROVED)->first()->etd;
$transport->schedules()->update(['status' => ApprovalStatus::EXPIRED]);
$this->createsSchedule->execute($transport, new ScheduleObject($etd, $delayDate, ApprovalStatus::APPROVED));
}
}
if($containerStatus === 'Unstuffing'){
$container->update(['status' => ApprovalStatus::COMPLETED]);
$container->transports()->first()->update(['drop_date' => Carbon::parse($unstuffingDate)->subDay(), 'status' => ApprovalStatus::COMPLETED]);
/** @var PackingList $packingList */
foreach($container->packingLists as $packingList){
if($packingList->status === ApprovalStatus::PENDING_VERIFICATION){
$packingList->status = ApprovalStatus::APPROVED;
$packingList->save();
}
}
}
foreach($containerDetail->Rows as $packingList){
$marking = preg_split('(-|\(|\)|\/)', str_replace("/YW","", $packingList[39]));
$marking = preg_split('(-|\(|\)|\/)', str_replace("/YW","", $packingList[13]));
$orderNumber = $marking[array_key_last($marking)];
if(!$packingList[11]){
if(!$packingList[22]){
continue;
}
$allow_contract = true;
try {
$warehousePackingList = $this->fetchesPackingList->execute(['reference' => $packingList[3]]);
if(!$warehousePackingList->owner instanceof Order) throw new ResourceNotFoundException;
$order = $warehousePackingList->owner;
} catch (ResourceNotFoundException $exception) {
try {
$order = $this->fetchesOrder->execute(['reference' => $orderNumber]);
} catch (ResourceNotFoundException $exception) {
try {
$order = $this->fetchesOrder->execute(['reference' => substr($orderNumber, -9)]);
} catch (ResourceNotFoundException $exception) {
$order = $this->fetchesCompanyModule->execute(['id' => 1]);
$allow_contract = false;
}
}
/** @var Order $order */
$order = $this->fetchesOrder->execute(['reference' => $orderNumber]);
} catch (ResourceNotFoundException $exception){
continue;
}
$packingListReference = $packingList[16];
$packingListReference = $packingList[3];
$package = $packingList;
$deliveryDate = $package[1] ? Carbon::parse($package[1]) : null;
try {
$packingList = $this->fetchesPackingList->execute(['reference' => $packingListReference, 'type' => PackingListType::SHIPPING_PACKING_LIST]);
try{
$this->fetchesPackingList->execute(['reference' => $packingListReference]);
} catch (ResourceNotFoundException $exception){
if ($allow_contract) {
$appointee_id = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id;
// $contract = $this->unityCreateContract->execute();
// $contractReference = $contract->hash_id;
// $contractObligations = $contract->contract_obligation_list;
//
// $this->unityActivateContract->execute($contractReference);
//
// $supervisorHashId = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->unity_hash_id;
//
// $supervisorContractEntity = $this->unityCreateContractEntity->execute($contractReference, $supervisorHashId);
// $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->update(['entity_hash_id' => $supervisorContractEntity->hash_id, 'entity_signature' => $supervisorContractEntity->entity_signature_hash_id]);
//
// $importerContractEntity = $this->unityCreateContractEntity->execute($contractReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->appointee->unity_hash_id);
// $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->update(['entity_hash_id' => $importerContractEntity->hash_id, 'entity_signature' => $importerContractEntity->entity_signature_hash_id]);
//
// $this->unityAssignContractEntity->execute($supervisorContractEntity->hash_id, $contractObligations);
} else {
$appointee_id = 2037;
}
$contract = $this->unityCreateContract->execute();
$contractReference = $contract->hash_id;
$contractObligations = $contract->contract_obligation_list;
$packingListObject = new PackingListObject($packingListReference, $appointee_id, PackingListType::SHIPPING_PACKING_LIST, ApprovalStatus::SUSPENDED, null);
$this->unityActivateContract->execute($contractReference);
$supervisorHashId = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->unity_hash_id;
$supervisorContractEntity = $this->unityCreateContractEntity->execute($contractReference, $supervisorHashId);
$order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->update(['entity_hash_id' => $supervisorContractEntity->hash_id, 'entity_signature' => $supervisorContractEntity->entity_signature_hash_id]);
$importerContractEntity = $this->unityCreateContractEntity->execute($contractReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->appointee->unity_hash_id);
$order->orderRoles()->where('role_id', '=', OrderRoleTypes::IMPORTER)->first()->update(['entity_hash_id' => $importerContractEntity->hash_id, 'entity_signature' => $importerContractEntity->entity_signature_hash_id]);
$this->unityAssignContractEntity->execute($supervisorContractEntity->hash_id, $contractObligations);
$connection = $order->companyModule->connections()->first();
$marking = $connection->invitee_reference;
$packingListObject = new PackingListObject($packingListReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id, PackingListType::SHIPPING_PACKING_LIST, ApprovalStatus::SUSPENDED, $contractReference);
/** @var PackingList $packingList */
$packingList = $this->createPackingListProcessor->execute($packingListObject, $order);
}
$container->packingLists()->attach($packingList);
$container->packingLists()->detach($packingList);
$container->packingLists()->attach($packingList);
$packingList->packages()->delete();
$replica = $packingList->packingLists()->where('type', PackingListType::SHIPPING_PACKING_LIST_REPLICA)->first();
if($replica) $replica->packages()->delete();
$packageObject = new PackageObject(PackageType::CARTON, $package[8], $package[21], $package[22], $package[20], 0, $package[11], ApprovalStatus::APPROVED);
$this->createPackageProcessor->execute($packageObject, $packingList);
if($containerStatus === 'Unstuffing'){
$packingList->transports()->delete();
if($deliveryDate) {
// && !$packingList->transports()->exists()
$packingList->status = ApprovalStatus::COMPLETED;
$packingList->save();
$transportObject = new TransportObject(TransportType::LAND, null, null, $deliveryDate, $deliveryDate, ApprovalStatus::APPROVED);
/** @var Transport $transport */
$transport = $this->createsTransport->execute($transportObject, $packingList);
$this->createsSchedule->execute($transport, new ScheduleObject($deliveryDate, $deliveryDate, ApprovalStatus::APPROVED));
foreach($contractObligations as $obligation) {
$stepObject = new StepsObject($order->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->id, $obligation->reference, $obligation->sequence, $obligation->hash_id);
$this->createsStep->execute($packingList, $stepObject);
}
}
}
@@ -304,6 +217,8 @@ class FetchLoadedContainersFromVTPortalProcessor
Log::error($exception);
}
DB::commit();
return [];
}
@@ -132,12 +132,11 @@ class FetchOrderListsFromYdPortalProcessor
* @param Carbon|null $start
* @param Carbon|null $end
* @return void
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function execute(?Carbon $start = null, ?Carbon $end = null)
{
try {
$start = $start ? $start : Carbon::today()->subMonths(1);
$start = $start ? $start : Carbon::now()->subMonths(2);
$startLimit = Carbon::parse('01-12-2021');
@@ -145,7 +144,7 @@ class FetchOrderListsFromYdPortalProcessor
$start = $startLimit;
}
$end = $end ? $end : Carbon::today()->addDay();
$end = $end ? $end : Carbon::now();
$orderRequest = $this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/GetOrderList.ashx', 'GET', [
'begintime' => $start->timestamp,
@@ -155,7 +154,6 @@ class FetchOrderListsFromYdPortalProcessor
$rows = $this->fetchesDataFRomYDPortal->getResponseBody($orderRequest);
foreach($rows->data as $row){
$containerReference = null;
$loadingDate = null;
$unstuffingDate = null;
@@ -171,6 +169,7 @@ class FetchOrderListsFromYdPortalProcessor
$rows = $this->fetchesDataFRomYDPortal->getResponseBody($trackingRequest);
if(!$rows){
Log::debug($row->expressno);
continue;
}
@@ -203,7 +202,6 @@ class FetchOrderListsFromYdPortalProcessor
}
$rescheduleDate = $dates->sortDesc()->first();
if(!$delayDate || $rescheduleDate > $delayDate){
/** @var Carbon $delayDate */
$delayDate = $rescheduleDate;
@@ -215,38 +213,20 @@ class FetchOrderListsFromYdPortalProcessor
}
if ($trackingRow->tracking === '到港') {
$delayDate = Carbon::parse($trackingRow->trackingtime);
}
if ($trackingRow->tracking === '已开船') {
$delayDate = Carbon::parse($trackingRow->trackingtime)->addDays('5');
}
if ($trackingRow->tracking === '货物已进目的港仓库') {
$unstuffingDate = Carbon::parse($trackingRow->trackingtime);
}
if (Str::contains($trackingRow->tracking, ['派送中', '签收完成', ' 第三方提货', '货物已派送完成'])) {
if (Str::contains($trackingRow->tracking, ['派送中'])) {
$deliveryDate = Carbon::parse($trackingRow->trackingtime);
}
}
$client = new \GuzzleHttp\Client(['cookies' => true, 'headers' => ['Cookie' => 'utc_offset=480']]);
$request = $client->request('get', 'https://main.universe.com.my/Tracking/User/Paging?sEcho=1&sTrackingNo='.$row->expressno.'&sOrgId=sti');
$deliveryTracking = json_decode($request->getBody()->getContents());
foreach (array_reverse($deliveryTracking->aaData) as $trackingRow) {
$trackingDate = Carbon::createFromFormat('d/m/y H:i', $trackingRow->LocalDateTime);
if (Str::contains($trackingRow->PublicDescription, ['accepted/picked'])){
$unstuffingDate = $trackingDate;
}
if (Str::contains($trackingRow->PublicDescription, ['delivered'])) {
$deliveryDate = $trackingDate;
}
}
$customerno = preg_split('(-|\(|\)|\/)', $row->customerno);
$orderNumber = $customerno[array_key_last($customerno)];
@@ -264,6 +244,8 @@ class FetchOrderListsFromYdPortalProcessor
}
DB::beginTransaction();
$packingListReference = $row->expressno;
try{
@@ -351,7 +333,7 @@ class FetchOrderListsFromYdPortalProcessor
if($order instanceof Order){
$marking = $order->companyModule->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference;
if(!in_array($marking, ['2192KAA', '2353GFE', '6866DTR', '153DSR', '1291NSC', '8288MIB', '1152AAT', '962LOW', '3992WHE', '1290CSW', '9493TYS', '3397GSH'])){
if(!in_array($marking, ['2192KAA', '2353GFE', '6866DTR', '153DSR', '1291NSC', '8288MIB'])){
$this->fetchesDataFRomYDPortal->clientRequest('http://www.yd-wl.com/api/confirmsendorder.ashx', 'GET', [
'expressno' => $row->expressno
]);
@@ -416,14 +398,11 @@ class FetchOrderListsFromYdPortalProcessor
$packingList->save();
}
if ($allow_contract) {
$signature = $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->entity_sigiture;
foreach($packingList->steps()->where('reference', '!=', 'DELIVERY')->get() as $step){
$this->updatesContractObligations->execute($signature, $step->obligation_hash_id);
$step->update(['status' => ApprovalStatus::COMPLETED]);
}
$signature = $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->entity_sigiture;
foreach($packingList->steps()->where('reference', '!=', 'DELIVERY')->get() as $step){
$this->updatesContractObligations->execute($signature, $step->obligation_hash_id);
$step->update(['status' => ApprovalStatus::COMPLETED]);
}
}
}
}
@@ -438,16 +417,13 @@ class FetchOrderListsFromYdPortalProcessor
$transport = $this->createsTransport->execute($transportObject, $packingList);
$this->createsSchedule->execute($transport, new ScheduleObject($deliveryDate, $deliveryDate, ApprovalStatus::APPROVED));
if ($allow_contract) {
$deliveryStep = $packingList->steps()->where('reference', '=', 'LAST_MILE_DELIVERY')->first();
$signature = $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->entity_sigiture;
$this->updatesContractObligations->execute($signature, $deliveryStep->obligation_hash_id);
$deliveryStep->update(['status' => ApprovalStatus::COMPLETED]);
}
$deliveryStep = $packingList->steps()->where('reference', '=', 'LAST_MILE_DELIVERY')->first();
$signature = $packingList->owner->orderRoles()->where('role_id', '=', OrderRoleTypes::SUPERVISOR)->first()->appointee->entity_sigiture;
$this->updatesContractObligations->execute($signature, $deliveryStep->obligation_hash_id);
$deliveryStep->update(['status' => ApprovalStatus::COMPLETED]);
}
DB::commit();
echo 'successful';
}
@@ -46,32 +46,42 @@ class FetchPackingListFromVTPortalProcessor
*/
public function execute(){
$packingLists = PackingList::where('type', '=', PackingListType::SHIPPING_PACKING_LIST)->where('reference', 'not like', '%PO%')->whereIn('claimant_id', [2])->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::SUSPENDED])->whereDoesntHave('containers', function($query){
$packingLists = PackingList::where('type', '=', PackingListType::SHIPPING_PACKING_LIST)->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::SUSPENDED])->whereDoesntHave('containers', function($query){
$query->where('status', '=', ApprovalStatus::COMPLETED);
})->limit(10)->get();
})->get();
DB::beginTransaction();
foreach($packingLists as $packingList){
try {
$filter = '["PoID:=%js%'.$packingList->reference.'"]';
$shippingPackingListsRequest = $this->fetchesDataFRomVTPortal->clientRequest('http://portal.vtnation.com.my/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"Po","view":"grid1","request":{"PageIndex":-1,"PageSize":1000,"Filter":'.$filter.'}}'), '');
$filter = '["PoNumber:=%js%\"'.$packingList->reference.'\"\u0000"]';
$shippingPackingListsRequest = $this->fetchesDataFRomVTPortal->clientRequest('http://portal.vtnation.com.my/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"VPodetailparcel","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"CreatedOn asc","Filter":'.$filter.'}}'), '');
$shippingPackingLists = $this->fetchesDataFRomVTPortal->getResponseBody($shippingPackingListsRequest);
if(count($shippingPackingLists->Rows)) {
$packingList->packages()->delete();
} else {
dump($packingList->reference);
$replica = $packingList->packingLists()->where('type', PackingListType::SHIPPING_PACKING_LIST_REPLICA)->first();
if($replica) $replica->packages()->delete();
foreach($shippingPackingLists->Rows as $shippingPackingList){
if(!$shippingPackingList[22]) {
continue;
}
$packageObject = new PackageObject(PackageType::CARTON, $shippingPackingList[19], $shippingPackingList[31], $shippingPackingList[30], $shippingPackingList[29], 0, $shippingPackingList[22], ApprovalStatus::APPROVED);
$this->createPackageProcessor->execute($packageObject, $packingList);
}
}
} catch (GuzzleException $exception) {
dd($exception);
Log::error($exception);
continue;
}
}
DB::commit();
return [];
@@ -116,7 +116,7 @@ class FetchWarehouseReceiveListFromVTPortalProcessor
try {
$start = $start ? $start : Carbon::today()->subDays(5);
$start = $start ? $start : Carbon::now()->subMonth();
$startLimit = Carbon::parse('11-08-2021');
@@ -124,40 +124,76 @@ class FetchWarehouseReceiveListFromVTPortalProcessor
$start = $startLimit;
}
$end = $end ? $end : Carbon::today()->addDay();
$end = $end ? $end : Carbon::now();
$filter = '["ParcelDate:$between$%js%\"'.$start->format('Y-m-d').'T00:00:00.000\"$and$%js%\"'.$end->format('Y-m-d').'T00:00:00.000\"\u0000"]';
$warehouseListRequest = $this->fetchesDataFRomVTPortal->clientRequest('http://portal.vtnation.com.my/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"Parcel","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"ParcelDate asc","Filter":'.$filter.'}}'), '');
$warehouseListRequest = $this->fetchesDataFRomVTPortal->clientRequest('http://portal.vtnation.com.my/Services/DataControllerService.asmx/GetPage', 'POST', json_decode('{"controller":"WarehouseList","view":"grid1","request":{"PageIndex":-1,"PageSize":10000,"SortExpression":"ParcelDate asc","Filter":'.$filter.'}}'), '');
$response = $this->fetchesDataFRomVTPortal->getResponseBody($warehouseListRequest);
foreach ($response->Rows as $parcel){
$allow_contract = true;
$marking = preg_split('(-|\(|\)|\/)', str_replace("/YW","", $parcel[11]));
$marking = preg_split('(-|\(|\)|\/)', str_replace("/YW","", $parcel[5]));
$orderNumber = $marking[array_key_last($marking)];
$quantity = $parcel[16];
if(!$quantity){
if(!$parcel[9]){
continue;
}
try {
$order = $this->fetchesOrder->execute(['reference' => $orderNumber]);
$appointee_id = $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_FREIGHT_FORWARDER)->first()->appointee->id;
} catch (ResourceNotFoundException $exception) {
$allow_contract = false;
$order = $this->fetchesCompanyModule->execute(['id' => 1]);
$appointee_id = 2037;
$oldOrder = OldOrders::where('marking', '=', $orderNumber)->first();
if(!$oldOrder){
continue;
}
$customerMarking = str_replace('/', '', str_replace(' ', '', explode('CIEF/', $oldOrder->company->marking)[1]));
$companyModule = CompanyModule::whereHas('inviters', function($query) use ($customerMarking) {
return $query->where('invitee_reference', '=', $customerMarking);
})->first();
if(!$companyModule){
log::error('unknown customer: '.$customerMarking);
continue;
}
if(!$oldOrder->address) {
continue;
}
/** @var Address $address */
$address = $this->createAddressFromOldAddressProcessor->execute($oldOrder->address, $companyModule);
if(!$address){
continue;
}
$warehouseId = $parcel[0];
$originWarehouse = $this->fetchesCompanyModule->execute(['id' => $warehouseId === 11 ? 3 : 4]);
$order = $this->createOrderProcessor->execute($companyModule->company, $originWarehouse, $address, $orderNumber);
$order->created_at = Carbon::parse($parcel[1]);
$order->save();
}
$packingListReference = $parcel[0];
// $measurement = round(($parcel[10]/$quantity) ** (1/3) * 100, 2);
$description = $parcel[13];
$tracking = $parcel[37];
$packingListReference = $parcel[17];
$quantity = $parcel[9];
$measurement = round(($parcel[10]/$quantity) ** (1/3) * 100, 2);
$description = $parcel[7];
$tracking = $parcel[6];
$receiveDate = $parcel[1];
$packingListObject = new PackingListObject($packingListReference, $appointee_id, PackingListType::WAREHOUSE_RECEIVE_LIST, $allow_contract ? ApprovalStatus::APPROVED : ApprovalStatus::REJECTED);
$packingListObject = new PackingListObject($packingListReference, $order->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee->id, PackingListType::WAREHOUSE_RECEIVE_LIST, ApprovalStatus::APPROVED);
/** @var PackingList $packingList */
$packingList = $order->packingLists()->where('reference', '=', $packingListReference)->first();
@@ -180,7 +216,7 @@ class FetchWarehouseReceiveListFromVTPortalProcessor
$packingList->packages()->delete();
if($replica) $replica->packages()->delete();
$packageObject = new PackageObject(PackageType::CARTON, $description, $parcel[23], $parcel[22], $parcel[21], 0, $quantity, ApprovalStatus::APPROVED);
$packageObject = new PackageObject(PackageType::CARTON, $description, $measurement, $measurement, $measurement, 0, $quantity, ApprovalStatus::APPROVED);
$this->createPackageProcessor->execute($packageObject, $packingList);
}
} catch (\Exception $exception){
@@ -1,178 +0,0 @@
<?php
namespace App\Classes\Modules\Segments\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Segments\Services\ListsSegments;
use App\Http\Resources\AirShipmentItemPriceResource;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListAirShipmentPriceLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Retrieved Air Shipment Price List',
'message' => 'You have successfully retrieved a list of Air Shipment Price'
];
}
/** @var ListsSegments */
private $listsSegments;
/**
* ListSegmentLogic constructor.
* @param ListsSegments $listsSegments
*/
public function __construct(ListsSegments $listsSegments)
{
$this->listsSegments = $listsSegments;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request) : JsonResponse
{
// $query = $this->listsSegments->execute($this->listsSegments->deserializeFilters($request->input('filters')));
// category - Dimension / perKg
$price = array(
[
'details' => json_encode([
'name' => 'Sound system speakers - MINI',
'pricePerKg' => '',
'pricePerPcs' => '',
'isProhibited' => '',
'hasGram' => '',
'hasDimensionCharges' => '',
'tax' => '50',
])
],
[
'details' => json_encode([
'name' => 'Sound system speakers - SMALL',
'pricePerKg' => '',
'pricePerPcs' => '',
'isProhibited' => '',
'hasGram' => '',
'hasDimensionCharges' => '',
'tax' => '200',
])
],
[
'details' => json_encode([
'name' => 'Sound system speakers - LARGE',
'pricePerKg' => '',
'pricePerPcs' => '',
'isProhibited' => '',
'hasGram' => '',
'hasDimensionCharges' => '',
'tax' => '400',
])
],
[
'details' => json_encode([
'name' => 'Washing Machine - Dimension',
'pricePerKg' => '',
'pricePerPcs' => '',
'isProhibited' => '',
'hasGram' => '',
'hasDimensionCharges' => 'true',
'tax' => '',
])
],
[
'details' => json_encode([
'name' => 'Oven, Balnder - perPcs',
'pricePerKg' => '',
'pricePerPcs' => '20',
'isProhibited' => '',
'hasGram' => '',
'hasDimensionCharges' => '',
'tax' => '',
])
],
[
'details' => json_encode([
'name' => 'Perfume - perKg',
'pricePerKg' => '33',
'pricePerPcs' => '',
'isProhibited' => '',
'hasGram' => '',
'hasDimensionCharges' => '',
'tax' => '',
])
],
[
'details' => json_encode([
'name' => 'Gold - Prohibited',
'pricePerKg' => '',
'pricePerPcs' => '',
'isProhibited' => 'true',
'hasGram' => '',
'hasDimensionCharges' => '',
'tax' => '',
])
],
[
'details' => json_encode([
'name' => 'Food - hasGram',
'pricePerKg' => '',
'pricePerPcs' => '',
'isProhibited' => '',
'hasGram' => 'true',
'hasDimensionCharges' => '',
'tax' => '',
])
],
[
'details' => json_encode([
'name' => 'TV 30" - 36"',
'pricePerKg' => 28,
'pricePerPcs' => '',
'isProhibited' => '',
'hasGram' => 'true',
'hasDimensionCharges' => "true",
'tax' => 500,
])
],
[
'details' => json_encode([
'name' => 'TV 37" - 42"',
'pricePerKg' => 28,
'pricePerPcs' => '',
'isProhibited' => '',
'hasGram' => 'true',
'hasDimensionCharges' => "true",
'tax' => 1000,
])
],
[
'details' => json_encode([
'name' => 'TV 43"+"',
'pricePerKg' => 28,
'pricePerPcs' => '',
'isProhibited' => '',
'hasGram' => 'true',
'hasDimensionCharges' => "true",
'tax' => 1500,
])
]
);
return $this->collectionResponse(AirShipmentItemPriceResource::collection($price));
}
}
@@ -102,7 +102,7 @@ class UpdateConstantLogic extends AbstractControllerLogic
$constant = $this->fetchesConstant->execute(['segment_id' => $segment->id, 'reference' => $request->input('reference')]);
$constantValue = $this->updatesConstantValue->execute($constant->value, $request->input('id'), $request->input('value'));
$constantValue = $this->updatesConstantValue->execute($constant->value, $request->input('id'), $request->input('rate'));
$object = new ConstantObject($request->input('reference'), $constantValue);
@@ -112,7 +112,7 @@ class UpdateConstantLogic extends AbstractControllerLogic
$constantObject = [];
$constantObject[$request->input('id')] = $request->input('value');
$constantObject[$request->input('id')] = $request->input('rate');
$object = new ConstantObject(
$request->input('reference'),
@@ -7,9 +7,9 @@ class UpdatesConstantValue
/**
* @param $json
* @param int $state_id
* @param array $rate
* @return array
* @param int $status_id
* @param Array $rate
* @return Array
*/
public function execute($json, int $state_id, Array $rate) {
@@ -1,94 +0,0 @@
<?php
namespace App\Classes\Modules\Transactions\ControllersLogic;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Meneses\LaravelMpdf\Facades\LaravelMpdf;
use App\Classes\ValueObjects\Constants\DocumentType;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Classes\Modules\Documents\Services\CreatesFiles;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Documents\Services\CreatesDocument;
use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
use App\Classes\Modules\Transactions\ControllersLogic\Document;
class ApproveShippingInvoiceTransactionLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Shipping Invoice Status',
'message' => 'You have successfully updated the shipping invoice status'
];
}
/** @var FetchesPackingList */
private $fetchesPackingList;
/** @var UpdatesTransactionStatus */
private $updatesTransactionStatus;
/** @var CreatesDocument */
private $createsDocument;
/** @var CreatesFiles */
private $createsFiles;
/**
* ApprovePaymentVerificationLogic constructor.
* @param FetchesPackingList $fetchesPackingList
* @param UpdatesTransactionStatus $updatesTransactionStatus
* @param CreatesDocument $createsDocument
* @param CreatesFiles $createsFiles
* @param CreateInvoiceTransactionProcessor $createInvoiceTransactionProcessor
*/
public function __construct(FetchesPackingList $fetchesPackingList, UpdatesTransactionStatus $updatesTransactionStatus, CreatesDocument $createsDocument, CreatesFiles $createsFiles)
{
$this->fetchesPackingList = $fetchesPackingList;
$this->updatesTransactionStatus = $updatesTransactionStatus;
$this->createsDocument = $createsDocument;
$this->createsFiles = $createsFiles;
}
/**
* @param Request $request
* @return JsonResponse
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function logic(Request $request) : JsonResponse
{
$packing_list = $this->fetchesPackingList->execute(['id' => $request->route('id')]);
$invoice_transaction = $packing_list->transactions->where('type', TransactionType::SHIPPING_INVOICE)->first();
$this->updatesTransactionStatus->execute($invoice_transaction, ApprovalStatus::APPROVED);
$transaction_invoice_pdf = LaravelMpdf::loadView('pages.pdfs.shipping_invoice', ['invoice_transaction' => $invoice_transaction]);
$document_object = new DocumentObject(
DocumentType::SHIPPING_INVOICE,
[chunk_split('data:application/pdf;base64,'.base64_encode($transaction_invoice_pdf->output()))],
'',
ApprovalStatus::COMPLETED,
'shipping_invoice'
);
/** @var Document $document */
$document = $this->createsDocument->execute($invoice_transaction, $document_object);
$this->createsFiles->execute($document, $document_object);
return $this->response([]);
}
}
@@ -84,11 +84,8 @@ class CreatePaymentTransactionLogic extends AbstractControllerLogic
$billPlzBill = $this->createsBillplzBill->execute(
$company_module->name,
$company_module->employees()->first()->email,
'This payment is for the invoice number . ' . $invoice_transaction->bill_no,
$amount,
$billNumber,
$request->input('bank_code'),
true
'This payment is credit topup for company ref. ' . $company_module->reference, $amount, $billNumber,
$request->input('bank_code'), true
);
$payment_reference = $billPlzBill->id;
@@ -6,8 +6,6 @@ namespace App\Classes\Modules\Transactions\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
use App\Classes\Modules\SegmentConstants\Services\FetchesSegmentConstant;
use App\Classes\Modules\Segments\Services\ListsConstants;
use App\Classes\Modules\Segments\Services\ListsSegments;
use App\Classes\Modules\Transactions\Services\GeneratesTransactionBillNumber;
use App\Classes\Modules\Transactions\Services\CreatesTransaction;
use App\Classes\Modules\Transactions\Services\CreatesTransactionDetail;
@@ -26,9 +24,7 @@ use App\Classes\ValueObjects\Constants\PackageType;
use App\Classes\ValueObjects\Constants\SegmentConstants;
use App\Classes\ValueObjects\Constants\TransactionDetailType;
use App\Http\Resources\PackingListResource;
use App\Models\Document;
use App\Models\PackingList;
use App\Models\Transaction;
use Carbon\Carbon;
use Illuminate\Http\JsonResponse;
@@ -40,6 +36,7 @@ use Meneses\LaravelMpdf\Facades\LaravelMpdf;
class CreateShippingInvoiceTransactionLogic extends AbstractControllerLogic
{
/**
* @return array
*/
@@ -56,9 +53,6 @@ class CreateShippingInvoiceTransactionLogic extends AbstractControllerLogic
/** @var FetchesSegmentConstant */
private $fetchesSegmentConstant;
/** @var ListsConstants */
private $listsConstants;
/** @var GeneratesTransactionBillNumber */
private $generatesTransactionBillNumber;
@@ -73,24 +67,20 @@ class CreateShippingInvoiceTransactionLogic extends AbstractControllerLogic
/** @var CreatesFiles */
private $createsFile;
/**
* CreateShippingInvoiceTransactionLogic constructor.
* @param FetchesPackingList $fetchesPackingList
* @param FetchesSegmentConstant $fetchesSegmentConstant
* @param ListsConstants $listsConstants
* @param GeneratesTransactionBillNumber $generatesTransactionBillNumber
* @param CreatesTransaction $createsTransaction
* @param CreatesTransactionDetail $createsTransactionDetail
* @param CreatesDocument $createsDocument
* @param CreatesFiles $createsFile
*/
public function __construct(FetchesPackingList $fetchesPackingList, FetchesSegmentConstant $fetchesSegmentConstant, ListsConstants $listsConstants, GeneratesTransactionBillNumber $generatesTransactionBillNumber, CreatesTransaction $createsTransaction, CreatesTransactionDetail $createsTransactionDetail, CreatesDocument $createsDocument, CreatesFiles $createsFile)
public function __construct(
FetchesPackingList $fetchesPackingList,
FetchesSegmentConstant $fetchesSegmentConstant,
GeneratesTransactionBillNumber $generatesTransactionBillNumber,
CreatesTransaction $createsTransaction,
CreatesTransactionDetail $createsTransactionDetail,
CreatesDocument $createsDocument,
CreatesFiles $createsFile
)
{
$this->fetchesPackingList = $fetchesPackingList;
$this->fetchesSegmentConstant = $fetchesSegmentConstant;
$this->listsConstants = $listsConstants;
$this->generatesTransactionBillNumber = $generatesTransactionBillNumber;
$this->createsTransaction = $createsTransaction;
$this->createsTransactionDetail = $createsTransactionDetail;
@@ -98,7 +88,6 @@ class CreateShippingInvoiceTransactionLogic extends AbstractControllerLogic
$this->createsFile = $createsFile;
}
public function logic(Request $request) : JsonResponse
{
$packing_list = $this->fetchesPackingList->execute(['id' => $request->input('packing_list_id')]);
@@ -111,33 +100,22 @@ class CreateShippingInvoiceTransactionLogic extends AbstractControllerLogic
return ($package->width / 100) * ($package->height / 100) *($package->length / 100) * ($package->quantity);
});
$minimum_charges = ($cbm + $over_weight_cbm) < 0.3 ? (0.3 - ($cbm + $over_weight_cbm)) : 0;
$order = $packing_list->owner;
$address = $order->addresses()->first();
$segments = $order->companyModule->connections->first()->segments->pluck('id');
$segment_price = 0;
$base_price_constant = $this->fetchesSegmentConstant->execute(['segment_id' => 1, 'reference' => SegmentConstants::BASE_PRICE]);
if(count($segments)){
$segment_price_constants = $this->listsConstants->execute(['segment_id_in' => $segments, 'reference' => SegmentConstants::CUSTOM_PRICE]);
$segment_price_constant = $segment_price_constants->sortBy(function ($constant){
return $constant->value[0];
})->first();
$segment_price = $segment_price_constant->value[0];
}
$warehouse_rate_constant = $this->fetchesSegmentConstant->execute(['segment_id' => 1, 'reference' => SegmentConstants::WAREHOUSE_RATE]);
$state_rate_constant = $this->fetchesSegmentConstant->execute(['segment_id' => 1, 'reference' => SegmentConstants::STATE_RATE]);
$center_postcode_constant = $this->fetchesSegmentConstant->execute(['segment_id' => 1, 'reference' => SegmentConstants::CENTER_POSTCODE]);
$outstation_postcode_constant = $this->fetchesSegmentConstant->execute(['segment_id' => 1, 'reference' => SegmentConstants::OUTSTATION_POSTCODE]);
$base_price = 0;
$warehouse_rate = 0;
$state_rate = 0;
$state_select = '';
$packing_list_drop_date = Carbon::parse(PackingList::where('reference', $packing_list->reference)->where('type', 1)->first()->transports->first()->drop_date)->format('Y-m-d');
$base_price = $this->getConstantByKey($base_price_constant, $packing_list_drop_date);
$base_price = $this->getConstantByKey($base_price_constant, date('Y-m-d'));
$warehouseId = $order->orderRoles()->where('role_id', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->company_module_id;
$selected_warehouse_rate = $this->getConstantByKey($warehouse_rate_constant, $warehouseId);
$warehouse_rate = is_object($selected_warehouse_rate) ? $selected_warehouse_rate->amount : 0;
@@ -150,15 +128,12 @@ class CreateShippingInvoiceTransactionLogic extends AbstractControllerLogic
$this->checkPostcodeExistInConstant($center_postcode_constant, $postcode) === true ? $state_select = 'center' : '' ;
$this->checkPostcodeExistInConstant($outstation_postcode_constant, $postcode) === true ? $state_select = 'outstation' : '' ;
$state_rate_constant = (array)$state_rate_constant;
$state_rate = $state_select == '' ? 0 : $state_rate_constant['center'] + ($state_select === 'outstation' ? $state_rate_constant['outstation'] : 0);
$price_cbm = $base_price + $segment_price + $warehouse_rate + $state_rate;
$state_rate = $state_select == '' ? 0 : $state_rate_constant[$state_select];
$price_cbm = $base_price + $warehouse_rate + $state_rate;
$total_cbm = $price_cbm * ($cbm + $over_weight_cbm);
$billNumber = $this->generatesTransactionBillNumber->execute('SI-');
$billNumber = $this->generatesTransactionBillNumber->execute('SHIP-');
$object = new TransactionObject(
$billNumber,
@@ -175,7 +150,7 @@ class CreateShippingInvoiceTransactionLogic extends AbstractControllerLogic
0,
0,
null,
ApprovalStatus::PENDING_SUBMISSION
ApprovalStatus::PENDING_VERIFICATION
);
/** @var Transaction $invoice_transaction */
@@ -183,7 +158,7 @@ class CreateShippingInvoiceTransactionLogic extends AbstractControllerLogic
$object_detail = new TransactionDetailObject(
'SHIPPING_FEE',
TransactionDetailType::SHIPPING_FEE.'<br>'.round($packing_list->packages->sum('quantity'), 3).' CTNS - '.$cbm.' CBM',
TransactionDetailType::SHIPPING_FEE,
$cbm,
$price_cbm
);
@@ -201,7 +176,22 @@ class CreateShippingInvoiceTransactionLogic extends AbstractControllerLogic
$this->createsTransactionDetail->execute($invoice_transaction, $object_detail);
}
return $this->resourceResponse(new PackingListResource($packing_list));
$transaction_invoice_pdf = LaravelMpdf::loadView('pages.pdfs.shipping_invoice', ['invoice_transaction' => $invoice_transaction]);
$document_object = new DocumentObject(
DocumentType::SHIPPING_INVOICE,
[chunk_split('data:application/pdf;base64,'.base64_encode($transaction_invoice_pdf->output()))],
'',
ApprovalStatus::COMPLETED,
'shipping_invoice'
);
/** @var Document $document */
$document = $this->createsDocument->execute($invoice_transaction, $document_object);
$this->createsFile->execute($document, $document_object);
return $this->response([]);
}
function getConstantByKey($segmentConstantObject, $key) {
@@ -1,92 +0,0 @@
<?php
namespace App\Classes\Modules\Transactions\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\SegmentConstants\Services\FetchesSegmentConstant;
use App\Classes\ValueObjects\Constants\SegmentConstants;
use App\Models\District;
use Carbon\Carbon;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use App\Classes\General\Helper;
class ShippingEstimationCalculatorLogic extends AbstractControllerLogic
{
/** @var FetchesSegmentConstant */
private $fetchesSegmentConstant;
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Shipping estimation',
'message' => 'You have successfully calculate the Shipping Estimation'
];
}
public function __construct(
FetchesSegmentConstant $fetchesSegmentConstant
){
$this->fetchesSegmentConstant = $fetchesSegmentConstant;
}
public function logic(Request $request) : JsonResponse
{
$base_price = $warehouse_rate = $state_rate = 0;
$width = $request->input('width') / 100; // metre
$length = $request->input('length') / 100; // metre
$height = $request->input('height') / 100; // metre
$cbm = (float) ($width * $length * $height);
// calculate base price
$base_prices = $this->getSegmentConstantData(SegmentConstants::BASE_PRICE);
$base_price = $this->getConstantDataUsingKey($base_prices, date('Y-m-d'));
// calculate warehouse rate
$warehouse_prices = $this->getSegmentConstantData(SegmentConstants::WAREHOUSE_RATE);
$warehouse_rate = $this->getConstantDataUsingKey($warehouse_prices, $request->input('warehouse_id'), 'amount');
// calculate applied state rate
$state_prices = $this->getSegmentConstantData(SegmentConstants::STATE_RATE);
$outstation_postcodes = $this->getSegmentConstantData(SegmentConstants::OUTSTATION_POSTCODE);
$district = District::where('postcode','LIKE','%'.$request->input('postcode').'%')->first();
if(array_search($request->input('postcode'), $outstation_postcodes)!==false){
$state_rate = $this->getConstantDataUsingKey($state_prices, $district->state_id, 'outstation');
}
$price_cbm = $base_price + $warehouse_rate + $state_rate;
$total_price_cbm = $price_cbm * $cbm;
return $this->response([
'cbm' => $cbm, 'base_price' => $base_price, 'warehouse_rate' => $warehouse_rate,
'state_rate' => $state_rate, 'total_price_cbm' => $total_price_cbm
]);
}
private function getConstantDataUsingKey($data, $search_key, $field='')
{
if(array_key_exists($search_key, $data) !== true) {
return 0;
} else {
if($field!=''){
return $data[$search_key]->$field;
} else {
return $data[$search_key];
}
}
}
private function getSegmentConstantData($reference)
{
$data = $this->fetchesSegmentConstant->execute(['segment_id' => 1, 'reference' => $reference]);
return (array) $data->value;
}
}
@@ -1,149 +0,0 @@
<?php
namespace App\Classes\Modules\Transactions\ControllersLogic;
use App\Models\Transaction;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Storage;
use Meneses\LaravelMpdf\Facades\LaravelMpdf;
use App\Classes\ValueObjects\Constants\DocumentType;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Classes\ValueObjects\Constants\PaymentMethodType;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\ValueObjects\Constants\TransactionDetailType;
use App\Classes\Modules\Documents\DataTransferObjects\FileObject;
use App\Classes\Modules\PackingLists\Services\FetchesPackingList;
use App\Classes\Modules\Transactions\Services\UpdatesTransaction;
use App\Classes\Modules\Transactions\Services\CreatesTransactionDetail;
use App\Classes\Modules\Transactions\Services\FetchesTransactionDetail;
use App\Classes\Modules\Transactions\Services\UpdatesTransactionDetail;
use App\Classes\Modules\Transactions\Services\DeletesTransactionDetails;
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject;
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionDetailObject;
use App\Classes\Modules\Transactions\Services\FetchesTransaction;
class UpdateShippingInvoiceTransactionLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Update Shipping Invoice Transaction',
'message' => 'You have successfully update shipping invoice transaction'
];
}
/** @var FetchesPackingList */
private $fetchesPackingList;
/** @var FetchesTransaction */
private $fetchesTransaction;
/** @var UpdatesTransaction */
private $updatesTransaction;
/** @var FetchesTransactionDetail */
private $fetchesTransactionDetail;
/** @var CreatesTransactionDetail */
private $createsTransactionDetail;
/** @var UpdatesTransactionDetail */
private $updatesTransactionDetail;
/** @var DeletesTransactionDetails */
private $deletesTransactionDetails;
public function __construct(
FetchesPackingList $fetchesPackingList,
FetchesTransaction $fetchesTransaction,
UpdatesTransaction $updatesTransaction,
FetchesTransactionDetail $fetchesTransactionDetail,
CreatesTransactionDetail $createsTransactionDetail,
UpdatesTransactionDetail $updatesTransactionDetail,
DeletesTransactionDetails $deletesTransactionDetails
)
{
$this->fetchesPackingList = $fetchesPackingList;
$this->fetchesTransaction = $fetchesTransaction;
$this->updatesTransaction = $updatesTransaction;
$this->fetchesTransactionDetail = $fetchesTransactionDetail;
$this->createsTransactionDetail = $createsTransactionDetail;
$this->updatesTransactionDetail = $updatesTransactionDetail;
$this->deletesTransactionDetails = $deletesTransactionDetails;
}
public function logic(Request $request) : JsonResponse
{
$invoice_transaction = $this->fetchesTransaction->execute(['id' => $request->route('id')]);
$old_transaction_details = $invoice_transaction->transactionDetails->whereNotIn('reference', ['SHIPPING_FEE', 'OVER_WEIGHT_CHARGES'])->pluck('id')->toArray();
$new_transaction_details = collect($request->input('transaction_details'));
$total_cbm = $invoice_transaction->amount;
foreach($old_transaction_details as $old_transaction_detail_id){
$old_transaction_detail = $this->fetchesTransactionDetail->execute(['id' => $old_transaction_detail_id]);
$total_cbm -= $old_transaction_detail->price;
if(!$new_transaction_details->contains('id', $old_transaction_detail_id)){
$this->deletesTransactionDetails->execute($old_transaction_detail);
}
}
foreach($new_transaction_details as $transaction_detail){
$transaction_detail = (object) $transaction_detail;
if(!in_array($transaction_detail->reference, ['SHIPPING_FEE', 'OVER_WHEIGHT_CHARGES'])){
$object_detail = new TransactionDetailObject(
'CUSTOM_CHARGES',
isset($transaction_detail->name) ? $transaction_detail->name : TransactionDetailType::CUSTOM_CHARGES,
$transaction_detail->quantity,
$transaction_detail->price
);
if(isset($transaction_detail->id)){
$new_transaction_detail = $this->updatesTransactionDetail->execute($this->fetchesTransactionDetail->execute(['id' => $transaction_detail->id]), $object_detail);
}else{
$new_transaction_detail = $this->createsTransactionDetail->execute($invoice_transaction, $object_detail);
}
$total_cbm += $new_transaction_detail->amount;
}
}
$object = new TransactionObject(
$invoice_transaction->bill_no,
TransactionType::SHIPPING_INVOICE,
1,
$invoice_transaction->issuer,
1,
PaymentMethodType::CASH,
$total_cbm,
$total_cbm,
1,
1,
0,
0,
0,
null,
ApprovalStatus::PENDING_VERIFICATION
);
/** @var Transaction $invoice_transaction */
$invoice_transaction = $this->updatesTransaction->execute($invoice_transaction, $object);
return $this->response([]);
}
}
@@ -3,17 +3,17 @@
namespace App\Classes\Modules\Transactions\Services;
use App\Classes\General\Eloquent\AbstractDeleteRecord;
use App\Models\TransactionDetail;
use App\Models\Transaction;
class DeletesTransactionDetails extends AbstractDeleteRecord
{
/**
* @param TransactionDetail $model
* @param Transaction $model
* @return mixed
*/
public function execute(TransactionDetail $model) {
return $model->delete();
public function execute(Transaction $model) {
return $model->transactionDetails()->delete();
}
}
@@ -1,27 +0,0 @@
<?php
namespace App\Classes\Modules\Transactions\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionDetailObject;
use App\Models\TransactionDetail;
class UpdatesTransactionDetail extends AbstractUpdateRecord
{
/**
* @param TransactionDetail $transactionDetail
* @param TransactionDetailObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(TransactionDetail $transactionDetail, TransactionDetailObject $object) {
$transactionDetail->reference = $object->getReference();
$transactionDetail->name = $object->getName();
$transactionDetail->quantity = $object->getQuantity();
$transactionDetail->price = $object->getPrice();
$transactionDetail->amount = $object->getAmount();
return $this->handler($transactionDetail);
}
}
@@ -11,8 +11,6 @@ class SegmentConstants
public const BASE_PRICE = 'BASE_PRICE';
public const CUSTOM_PRICE = 'CUSTOM_PRICE';
public const WAREHOUSE_RATE = 'WAREHOUSE_RATE';
public const STATE_RATE = 'STATE_RATE';
@@ -4,9 +4,7 @@ namespace App\Classes\ValueObjects\Constants;
final class TransactionDetailType {
public const SHIPPING_FEE = 'X1 Freight Service Charge';
public const SHIPPING_FEE = 'Shipping Fee';
public const OVER_WEIGHT_CHARGES = 'Overweight Charges';
public const CUSTOM_CHARGES = 'Custom charges';
public const OVER_WEIGHT_CHARGES = 'Over weight charges';
}
@@ -43,9 +43,7 @@ final class WarehouseReferences {
public const YD_DESTINATION_WAREHOUSE = self::YD_KLANG;
public const YD_EXEMPT_LIST = [230, 294, 320, 652, 1248, 1726, 2349, 2574, 652];
public const MIN_CBM_EXEMPT_LIST = [230, 294, 320, 652, 1248, 1726, 2349, 2574];
public const YD_EXEMPT_LIST = [230, 294, 320, 652, 1248, 1726];
public const REPLICA_WHITE_LIST = [502];
+3
View File
@@ -49,6 +49,9 @@ class CurlVTCommand extends Command
{
return FetchWarehouseReceiveListFromVTPortalJob::withChain([
new FetchLoadedContainersFromVTPortalJob,
new FetchPackingListFromVTPortalJob,
new FetchContainersStatusUpdateFromVTPortalJob,
new FetchDeliveryListFromVTPortalJob
])->dispatch();
}
}
+1 -1
View File
@@ -29,7 +29,7 @@ class Kernel extends ConsoleKernel
{
$schedule->command('command:curlVTCommand')
->cron('0 8 * * *')
->cron('0 9-18/3 * * *')
->withoutOverlapping()
->appendOutputTo (storage_path().'/logs/curlvt.log');
@@ -10,7 +10,7 @@ class AssignCompanyConnectionToConnectionSegmentController
{
/**
* @param Request $request
* @param AssignCompanyConnectionToConnectionSegmentLogic $logic
* @param AssignCompanyToSegmentLogic $logic
* @return JsonResponse
*/
public function assign(Request $request, AssignCompanyConnectionToConnectionSegmentLogic $logic): JsonResponse {
@@ -1,20 +0,0 @@
<?php
namespace App\Http\Controllers\Segments;
use App\Classes\Modules\Segments\ControllersLogic\ListAirShipmentPriceLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ListAirShipmentPriceController
{
/**
* @param Request $request
* @param ListSegmentLogic $logic
* @return JsonResponse
*/
public function list(Request $request, ListAirShipmentPriceLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -1,15 +0,0 @@
<?php
namespace App\Http\Controllers\Transactions;
use App\Classes\Modules\Transactions\ControllersLogic\ApproveShippingInvoiceTransactionLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ApproveShippingInvoiceTransactionController
{
public function approve(Request $request, ApproveShippingInvoiceTransactionLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
@@ -1,20 +0,0 @@
<?php
namespace App\Http\Controllers\Transactions;
use App\Classes\Modules\Transactions\ControllersLogic\ShippingEstimationCalculatorLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class ShippingEstimationCalculatorController
{
/**
* @param Request $request
* @param ShippingEstimationCalculatorLogic $logic
* @return JsonResponse
*/
public function calculate(Request $request, ShippingEstimationCalculatorLogic $logic): JsonResponse
{
return $logic->execute($request);
}
}
@@ -1,21 +0,0 @@
<?php
namespace App\Http\Controllers\Transactions;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use App\Classes\Modules\Transactions\ControllersLogic\UpdateShippingInvoiceTransactionLogic;
class UpdateShippingInvoiceTransactionController
{
/**
* @param Request $request
* @param UpdateShippingInvoiceTransactionLogic $logic
* @return JsonResponse
*/
public function update(Request $request, UpdateShippingInvoiceTransactionLogic $logic) : JsonResponse {
return $logic->execute($request);
}
}
@@ -1,25 +0,0 @@
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class AirShipmentItemPriceResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
$object = $this->resource;
$detailsArray = (array)json_decode($object['details']);
return [
'name' => $detailsArray['name'],
'details' => $object['details'],
];
}
}
@@ -45,7 +45,6 @@ class CompanyModuleResource extends JsonResource
'remarks' => RemarkResource::collection($this->remarks),
'marking' => $marking,
'warehouseCharges' => array_key_exists($this->id, $segmentConstant) ? $segmentConstant[$this->id] : null,
'connections' => $this->connections,
];
}
-1
View File
@@ -27,7 +27,6 @@ class CompanyResource extends JsonResource
'type' => (int) $this->type,
'business_type' => (int) $this->business_type,
'status' => (int) $this->status,
'segments' => SegmentResource::collection($companyModule->connections()->first()->segments),
'contact' => new ContactResource ($this->when($this->has('contacts'), $this->contacts->first())),
'employee' => new UserResource($companyModule->employees()->first()),
'company_module' => new CompanyModuleResource($companyModule),
+1 -1
View File
@@ -30,7 +30,7 @@ class ContainerResource extends JsonResource
'remarks' => RemarkResource::collection($this->remarks),
'status' => $this->status,
'packing_lists' => $this->whenLoaded('packingLists', PackingListResource::collection($this->whenLoaded('packingLists', function(){
return $this->packingLists()->get()->sortBy(function ($packingList) {
return $this->packingLists()->whereHas('packages')->get()->sortBy(function ($packingList) {
return $packingList->owner->company_module_id;
});
})))
+17 -17
View File
@@ -29,23 +29,23 @@ class OrderResource extends JsonResource
'warehouse' => new CompanyModuleResource($this->orderRoles()->where('role_id', '=', OrderRoleTypes::ORIGIN_WAREHOUSE)->first()->appointee),
'address' => new AddressResource($this->addresses()->where('status', '=', ApprovalStatus::APPROVED)->first()),
'address_change_request' => new AddressResource($this->addressesPendingVerification()->first()),
// 'parcels' => $this->whenLoaded('packingLists', function() {
// return [
// 'origin_warehouse_packages' => PackingListResource::collection(
// $this->originWarehousePackages()->get()
// ),
// 'in_transit_packages' => PackingListResource::collection(
// $this->inTransitPackages()->get()
// ),
// 'destination_warehouse_packages' => PackingListResource::collection(
// $this->destinationWarehousePackages()->get()
// ),
// 'delivered_packages' => PackingListResource::collection(
// $this->deliveredPackages()->get()
// ),
// 'received_packages' => PackingListResource::collection($this->packingLists()->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->whereHas('packages')->get()),
// ];
// }),
'parcels' => $this->whenLoaded('packingLists', function() {
return [
'origin_warehouse_packages' => PackingListResource::collection(
$this->originWarehousePackages()->get()
),
'in_transit_packages' => PackingListResource::collection(
$this->inTransitPackages()->get()
),
'destination_warehouse_packages' => PackingListResource::collection(
$this->destinationWarehousePackages()->get()
),
'delivered_packages' => PackingListResource::collection(
$this->deliveredPackages()->get()
),
'received_packages' => PackingListResource::collection($this->packingLists()->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->whereHas('packages')->get()),
];
}),
'remarks' => RemarkResource::collection($this->remarks),
'created_at' => $this->created_at->format('d-m-Y')
];
+3 -8
View File
@@ -2,13 +2,11 @@
namespace App\Http\Resources;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\PackingListType;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Classes\ValueObjects\Constants\RoleTypes;
use App\Models\Order;
use App\Models\PackingList;
use Carbon\Carbon;
use Illuminate\Http\Resources\Json\JsonResource;
class PackingListResource extends JsonResource
@@ -29,17 +27,14 @@ class PackingListResource extends JsonResource
'claimant_id' => $this->claimant_id,
'reference' => $this->reference,
'status' => $this->status,
// 'transport' => new TransportResource($this->transports()->first()),
'transport' => new TransportResource($this->transports()->first()),
'type' => $this->type,
// 'receive_packing_list' => $this->when($this->type === PackingListType::SHIPPING_PACKING_LIST, new PackingListResource(PackingList::where('reference', $this->reference)->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->first())),
'receive_packing_list' => $this->when($this->type === PackingListType::SHIPPING_PACKING_LIST, new PackingListResource(PackingList::where('reference', $this->reference)->where('type', PackingListType::WAREHOUSE_RECEIVE_LIST)->first())),
'packages' => PackageResource::collection($packages),
$this->mergeWhen($this->owner instanceof Order, [
'order' => New OrderResource($this->owner)
]),
'shippng_transaction' => new TransactionResource($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereNotIn('status', [ApprovalStatus::SUSPENDED, ApprovalStatus::EXPIRED])->first()),
'suspended_invoice' => new TransactionResource($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::SUSPENDED])->first()),
// 'suspended_invoices' => TransactionResource::collection($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->whereIn('status', [ApprovalStatus::SUSPENDED])->get()),
'loading_days_ago' => $this->containers()->first()->loading_date->diffForHumans()
'shippng_transaction' => new TransactionResource($this->transactions()->where('type', TransactionType::SHIPPING_INVOICE)->first()),
];
}
}
+4 -2
View File
@@ -15,11 +15,13 @@ class SegmentResource extends JsonResource
*/
public function toArray($request)
{
$constant = $this->constants->where('reference', SegmentConstants::CUSTOM_PRICE)->first();
return [
'id' => $this->id,
'name' => $this->name,
'price' => $constant ? $constant->value : 0
// 'time_limit' => $this->when($this->whereHas('constants', function($query){
// $query->where('reference', SegmentConstants::PAYMENT_ATTEMPT_DURATION_LIMIT);
// }), $this->constants->where('reference', SegmentConstants::PAYMENT_ATTEMPT_DURATION_LIMIT)->first()),
// 'services' => CustomServiceTypeResource::collection($this->constants->where('reference', SegmentConstants::CUSTOM_SERVICE_TYPE))
];
}
}
@@ -16,11 +16,11 @@ class TransactionDetailResource extends JsonResource
{
return [
'reference' => $this->reference,
'stockCode' => $this->product_code,
'description' => $this->product_name,
'quantity' => $this->quantity,
'price' => (double) $this->price,
'name' => $this->name,
'amount' => (double) $this->amount
'unit_price' => (double) $this->price,
'total' => (double) $this->amount
];
}
}
+2 -20
View File
@@ -2,9 +2,6 @@
namespace App\Http\Resources;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\DocumentType;
use App\Classes\ValueObjects\Constants\TransactionType;
use Carbon\Carbon;
use Illuminate\Http\Resources\Json\JsonResource;
@@ -22,33 +19,18 @@ class TransactionResource extends JsonResource
return [
'id' => $this->id,
// 'booking' => new BookingResource($this->booking),
'documents' => DocumentResource::collection($this->documents),
'type' => (int) $this->type,
'bill_no' => $this->bill_no,
'amount' => (double) $this->amount,
'outstanding' => (double) $this->amount - ($this->transactions()->where('type', TransactionType::PAYMENT)->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])->sum('amount')),
'service_charge' => (double) $this->service_charge,
'tax' => (double) $this->tax,
'original_amount' => (double) $this->original_amount,
'currency' => new CurrencyResource($this->currency),
'original_currency' => new CurrencyResource($this->original_currency),
'currency_rate' => (double) $this->currency_rate,
'status' => (int) $this->status,
'details' => TransactionDetailResource::collection($this->transactionDetails),
'transactions' => TransactionResource::collection($this->transactions),
'payment_attempts' => TransactionResource::collection(
$this->transactions()
->payments()->where('status', ApprovalStatus::PENDING_SUBMISSION)
->get()
),
'payment_history' => TransactionResource::collection(
$this->transactions()
->payments()
->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::COMPLETED, ApprovalStatus::REJECTED])
->get()
),
'documents' => new DocumentResource($this->documents()->first()),
'expires_on' => Carbon::parse($this->expires_on)->format('d-m-Y h:s:i'),
'updated_at' => Carbon::parse($this->update_at)->format('d-m-Y')
'updated_at' => Carbon::parse($this->update_at)->format('d-m-Y h:s:i')
];
}
}
@@ -4,7 +4,7 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateAddonsTable extends Migration
class CreateAddonsTables extends Migration
{
/**
* Run the migrations.
@@ -13,7 +13,7 @@ class CreateAddonsTable extends Migration
*/
public function up()
{
Schema::create('addons', function (Blueprint $table) {
Schema::table('addons', function (Blueprint $table) {
$table->id();
$table->morphs('owner');
$table->string('reference',200);
-5
View File
@@ -24,11 +24,6 @@ class DatabaseSeeder extends Seeder
$this->call(CurrenciesTableSeeder::class);
$this->call(CompaniesTableSeeder::class);
$this->call(SegmentsTableSeeder::class);
$this->call(SegmentConstantsTableSeeder::class);
// $this->call(OrdersTableSeeder::class);
}
}
+116 -118
View File
@@ -9,128 +9,126 @@ use Illuminate\Support\Facades\DB;
class SegmentConstantsTableSeeder extends Seeder
{
private function insertData($segment_id=1, $reference, $array_data)
public function run()
{
DB::beginTransaction();
DB::table('segment_constants')->insert([
'segment_id' => $segment_id,
'reference' => $reference,
'value' => json_encode($array_data)
[
'id' => 1,
'segment_id' => 1,
'reference' => SegmentConstants::BASE_PRICE,
'value' => json_encode([
'2022-05-01'=> '0.00',
'2022-05-02'=> '0.00',
]),
],
[
'id' => 2,
'segment_id' => 1,
'reference' => SegmentConstants::WAREHOUSE_RATE,
'value' => json_encode([
'7' =>[
'amount' => '0.00',
],
'6' =>[
'amount' => '0.00',
],
]),
],
[
'id' => 3,
'segment_id' => 1,
'reference' => SegmentConstants::STATE_RATE,
'value' => json_encode([
'1' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'2' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'3' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'4' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'5' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'6' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'7' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'8' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'9' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'10' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'11' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'12' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'13' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'14' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'15' =>[
'center' => '10.00',
'outstation' => '2.00'
],
'16' =>[
'center' => '10.00',
'outstation' => '2.00'
]
]),
],
[
'id' => 4,
'segment_id' => 1,
'reference' => SegmentConstants::CENTER_POSTCODE,
'value' => json_encode(['80050','80100','80150','80200','80250','80300','80350','80400','80500','80506','80508','80516','80519','80534','80536','80542','80546','80558','80560','80564','80568','80578','80584','80586','80590','80592','80594','80596','80600','80604','80608','80620','80622','80628','80644','80648','80662','80664','80668','80670','80672','80673','80676','80700','80710','80720','80730','80900','80902','80904','80906','80908','80988','80990','81000','81100','81200','81300','81310']),
],
[
'id' => 5,
'segment_id' => 1,
'reference' => SegmentConstants::OUTSTATION_POSTCODE,
'value' => json_encode(['80000']),
],
[
'id' => 6,
'segment_id' => 2,
'reference' => SegmentConstants::CUSTOMER_RATE,
'value' => json_encode([
'id'=> 1,
'price' => 15,
]),
],
]);
DB::commit();
}
public function run()
{
// insert base prices
$n_days = 10; // for the 10 days ahead
$today = date("Y-m-d");
$prices = [];
for($ii=0; $ii<$n_days;$ii++){
$prices[] = [
"date" => date('Y-m-d', strtotime($today. ' + '.$ii.' days')),
"price" => rand(10, 30) / 10
];
}
$this->insertData(1, SegmentConstants::BASE_PRICE, $prices);
// insert state prices
$prices = [];
for($ii=1; $ii<=16;$ii++){
$prices[] = [
'state_id' => $ii,
'center' => '10.00',
'outstation'=> '2.00'
];
}
$this->insertData(1, SegmentConstants::STATE_RATE, $prices);
// insert warehouse prices
$prices = [];
for($ii=1; $ii<=7;$ii++){
$prices[] = [
'warehouse_id' => $ii,
'amount' => '1.'.$ii
];
}
$this->insertData(1, SegmentConstants::WAREHOUSE_RATE, $prices);
// insert center postcodes
$prices = [
[ 'post_code' => '80050' ],
[ 'post_code' => '80100' ],
[ 'post_code' => '80150' ],
[ 'post_code' => '80200' ],
[ 'post_code' => '80250' ],
[ 'post_code' => '80300' ],
[ 'post_code' => '80350' ],
[ 'post_code' => '80400' ],
[ 'post_code' => '80500' ],
[ 'post_code' => '80506' ],
[ 'post_code' => '80508' ],
[ 'post_code' => '80516' ],
[ 'post_code' => '80519' ],
[ 'post_code' => '80534' ],
[ 'post_code' => '80536' ],
[ 'post_code' => '80542' ],
[ 'post_code' => '80546' ],
[ 'post_code' => '80558' ],
[ 'post_code' => '80560' ],
[ 'post_code' => '80564' ],
[ 'post_code' => '80568' ],
[ 'post_code' => '80578' ],
[ 'post_code' => '80584' ],
[ 'post_code' => '80586' ],
[ 'post_code' => '80590' ],
[ 'post_code' => '80592' ],
[ 'post_code' => '80594' ],
[ 'post_code' => '80596' ],
[ 'post_code' => '80600' ],
[ 'post_code' => '80604' ],
[ 'post_code' => '80608' ],
[ 'post_code' => '80620' ],
[ 'post_code' => '80622' ],
[ 'post_code' => '80628' ],
[ 'post_code' => '80644' ],
[ 'post_code' => '80648' ],
[ 'post_code' => '80662' ],
[ 'post_code' => '80664' ],
[ 'post_code' => '80668' ],
[ 'post_code' => '80670' ],
[ 'post_code' => '80672' ],
[ 'post_code' => '80673' ],
[ 'post_code' => '80676' ],
[ 'post_code' => '80700' ],
[ 'post_code' => '80710' ],
[ 'post_code' => '80720' ],
[ 'post_code' => '80730' ],
[ 'post_code' => '80900' ],
[ 'post_code' => '80902' ],
[ 'post_code' => '80904' ],
[ 'post_code' => '80906' ],
[ 'post_code' => '80908' ],
[ 'post_code' => '80988' ],
[ 'post_code' => '80990' ],
[ 'post_code' => '81000' ],
[ 'post_code' => '81100' ],
[ 'post_code' => '81200' ],
[ 'post_code' => '81300' ],
[ 'post_code' => '81310' ]
];
$this->insertData(1, SegmentConstants::CENTER_POSTCODE, $prices);
// insert outstation prices
$prices = [
['post_code' => '80000' ]
];
$this->insertData(1, SegmentConstants::OUTSTATION_POSTCODE, $prices);
// insert customer prices
$prices = [
['id'=> 1, 'price' => 15 ]
];
$this->insertData(2, SegmentConstants::CUSTOMER_RATE, $prices);
}
}
+6 -1
View File
@@ -15,7 +15,12 @@ class SegmentsTableSeeder extends Seeder
'id' => 1,
'company_module_id' => 1,
'name' => 'Default Segment',
]
],
[
'id' => 2,
'company_module_id' => 2,
'name' => 'Normal Member',
],
]
);
}
+202
View File
@@ -0,0 +1,202 @@
<?php
// 1. [Required] Point to the composer or dompdf autoloader
require_once "vendor/autoload.php";
// 2. [Optional] Set the path to your font directory
// By default dompdf loads fonts to dompdf/lib/fonts
// If you have modified your font directory set this
// variable appropriately.
//$fontDir = "lib/fonts";
$fontDir = 'storage/fonts';
// *** DO NOT MODIFY BELOW THIS POINT ***
use Dompdf\Dompdf;
use Dompdf\CanvasFactory;
use Dompdf\Exception;
use Dompdf\FontMetrics;
use Dompdf\Options;
use FontLib\Font;
/**
* Display command line usage
*/
function usage() {
echo <<<EOD
Usage: {$_SERVER["argv"][0]} font_family [n_file [b_file] [i_file] [bi_file]]
font_family: the name of the font, e.g. Verdana, 'Times New Roman',
monospace, sans-serif. If it equals to "system_fonts",
all the system fonts will be installed.
n_file: the .ttf or .otf file for the normal, non-bold, non-italic
face of the font.
{b|i|bi}_file: the files for each of the respective (bold, italic,
bold-italic) faces.
If the optional b|i|bi files are not specified, load_font.php will search
the directory containing normal font file (n_file) for additional files that
it thinks might be the correct ones (e.g. that end in _Bold or b or B). If
it finds the files they will also be processed. All files will be
automatically copied to the DOMPDF font directory, and afm files will be
generated using php-font-lib (https://github.com/PhenX/php-font-lib).
Examples:
./load_font.php silkscreen /usr/share/fonts/truetype/slkscr.ttf
./load_font.php 'Times New Roman' /mnt/c_drive/WINDOWS/Fonts/times.ttf
EOD;
exit;
}
if ( $_SERVER["argc"] < 3 && @$_SERVER["argv"][1] != "system_fonts" ) {
usage();
}
$dompdf = new Dompdf();
if (isset($fontDir) && realpath($fontDir) !== false) {
$dompdf->getOptions()->set('fontDir', $fontDir);
}
/**
* Installs a new font family
* This function maps a font-family name to a font. It tries to locate the
* bold, italic, and bold italic versions of the font as well. Once the
* files are located, ttf versions of the font are copied to the fonts
* directory. Changes to the font lookup table are saved to the cache.
*
* @param Dompdf $dompdf dompdf main object
* @param string $fontname the font-family name
* @param string $normal the filename of the normal face font subtype
* @param string $bold the filename of the bold face font subtype
* @param string $italic the filename of the italic face font subtype
* @param string $bold_italic the filename of the bold italic face font subtype
*
* @throws Exception
*/
function install_font_family($dompdf, $fontname, $normal, $bold = null, $italic = null, $bold_italic = null) {
$fontMetrics = $dompdf->getFontMetrics();
// Check if the base filename is readable
if ( !is_readable($normal) )
throw new Exception("Unable to read '$normal'.");
$dir = dirname($normal);
$basename = basename($normal);
$last_dot = strrpos($basename, '.');
if ($last_dot !== false) {
$file = substr($basename, 0, $last_dot);
$ext = strtolower(substr($basename, $last_dot));
} else {
$file = $basename;
$ext = '';
}
if ( !in_array($ext, array(".ttf", ".otf")) ) {
throw new Exception("Unable to process fonts of type '$ext'.");
}
// Try $file_Bold.$ext etc.
$path = "$dir/$file";
$patterns = array(
"bold" => array("_Bold", "b", "B", "bd", "BD"),
"italic" => array("_Italic", "i", "I"),
"bold_italic" => array("_Bold_Italic", "bi", "BI", "ib", "IB"),
);
foreach ($patterns as $type => $_patterns) {
if ( !isset($$type) || !is_readable($$type) ) {
foreach($_patterns as $_pattern) {
if ( is_readable("$path$_pattern$ext") ) {
$$type = "$path$_pattern$ext";
break;
}
}
if ( is_null($$type) )
echo ("Unable to find $type face file.\n");
}
}
$fonts = compact("normal", "bold", "italic", "bold_italic");
$entry = array();
// Copy the files to the font directory.
foreach ($fonts as $var => $src) {
if ( is_null($src) ) {
$entry[$var] = $dompdf->getOptions()->get('fontDir') . '/' . mb_substr(basename($normal), 0, -4);
continue;
}
// Verify that the fonts exist and are readable
if ( !is_readable($src) )
throw new Exception("Requested font '$src' is not readable");
$dest = $dompdf->getOptions()->get('fontDir') . '/' . basename($src);
if ( !is_writeable(dirname($dest)) )
throw new Exception("Unable to write to destination '$dest'.");
echo "Copying $src to $dest...\n";
if ( !copy($src, $dest) )
throw new Exception("Unable to copy '$src' to '$dest'");
$entry_name = mb_substr($dest, 0, -4);
echo "Generating Adobe Font Metrics for $entry_name...\n";
$font_obj = Font::load($dest);
$font_obj->saveAdobeFontMetrics("$entry_name.ufm");
$font_obj->close();
$entry[$var] = $entry_name;
}
// Store the fonts in the lookup table
$fontMetrics->setFontFamily($fontname, $entry);
// Save the changes
$fontMetrics->saveFontFamilies();
}
// If installing system fonts (may take a long time)
if ( $_SERVER["argv"][1] === "system_fonts" ) {
$fontMetrics = $dompdf->getFontMetrics();
$files = glob("/usr/share/fonts/truetype/*.ttf") +
glob("/usr/share/fonts/truetype/*/*.ttf") +
glob("/usr/share/fonts/truetype/*/*/*.ttf") +
glob("C:\\Windows\\fonts\\*.ttf") +
glob("C:\\WinNT\\fonts\\*.ttf") +
glob("/mnt/c_drive/WINDOWS/Fonts/");
$fonts = array();
foreach ($files as $file) {
$font = Font::load($file);
$records = $font->getData("name", "records");
$type = $fontMetrics->getType($records[2]);
$fonts[mb_strtolower($records[1])][$type] = $file;
$font->close();
}
foreach ( $fonts as $family => $files ) {
echo " >> Installing '$family'... \n";
if ( !isset($files["normal"]) ) {
echo "No 'normal' style font file\n";
}
else {
install_font_family($dompdf, $family, @$files["normal"], @$files["bold"], @$files["italic"], @$files["bold_italic"]);
echo "Done !\n";
}
echo "\n";
}
}
else {
call_user_func_array("install_font_family", array_merge( array($dompdf), array_slice($_SERVER["argv"], 1) ));
}
@@ -30,32 +30,6 @@
</div>
</div>
</div>
<div class="col-auto">
<div class="row align-items-center parentContainer">
<div class="col-auto padding-5 b-a b-grey b-rad-lg pointer requestModal" data-type="assignSegment">
<svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px"
width="30" height="30"
viewBox="0 0 172 172"
style=" fill:#000000;"><defs><linearGradient x1="86" y1="97.08594" x2="86" y2="105.31775" gradientUnits="userSpaceOnUse" id="color-1_43991_gr1"><stop offset="0" stop-color="#4ec9ff"></stop><stop offset="1" stop-color="#2bffe6"></stop></linearGradient><linearGradient x1="94.0625" y1="85.83338" x2="94.0625" y2="93.89588" gradientUnits="userSpaceOnUse" id="color-2_43991_gr2"><stop offset="0" stop-color="#4ec9ff"></stop><stop offset="1" stop-color="#2bffe6"></stop></linearGradient><linearGradient x1="77.9375" y1="85.83338" x2="77.9375" y2="93.89588" gradientUnits="userSpaceOnUse" id="color-3_43991_gr3"><stop offset="0" stop-color="#4ec9ff"></stop><stop offset="1" stop-color="#2bffe6"></stop></linearGradient><linearGradient x1="86" y1="28.55469" x2="86" y2="143.10938" gradientUnits="userSpaceOnUse" id="color-4_43991_gr4"><stop offset="0" stop-color="#009add"></stop><stop offset="1" stop-color="#00baa4"></stop></linearGradient></defs><g fill="none" fill-rule="nonzero" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-dasharray="" stroke-dashoffset="0" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode: normal"><path d="M0,172v-172h172v172z" fill="none"></path><g><path d="M77.9375,96.75c0,4.45319 3.60931,8.0625 8.0625,8.0625c4.45319,0 8.0625,-3.60931 8.0625,-8.0625z" fill="url(#color-1_43991_gr1)"></path><path d="M94.0625,86c-2.2264,0 -4.03125,1.80485 -4.03125,4.03125c0,2.2264 1.80485,4.03125 4.03125,4.03125c2.2264,0 4.03125,-1.80485 4.03125,-4.03125c0,-2.2264 -1.80485,-4.03125 -4.03125,-4.03125z" fill="url(#color-2_43991_gr2)"></path><path d="M77.9375,86c-2.2264,0 -4.03125,1.80485 -4.03125,4.03125c0,2.2264 1.80485,4.03125 4.03125,4.03125c2.2264,0 4.03125,-1.80485 4.03125,-4.03125c0,-2.2264 -1.80485,-4.03125 -4.03125,-4.03125z" fill="url(#color-3_43991_gr3)"></path><path d="M147.8125,51.0625h-18.8125v-8.0625c0,-4.44512 -3.61738,-8.0625 -8.0625,-8.0625h-11.2445c-1.11263,-3.12019 -4.06888,-5.375 -7.568,-5.375h-32.25c-3.49912,0 -6.45538,2.25481 -7.568,5.375h-11.2445c-4.44512,0 -8.0625,3.61738 -8.0625,8.0625v8.0625h-18.8125c-4.44513,0 -8.0625,3.61738 -8.0625,8.0625v59.125c0,4.44512 3.61737,8.0625 8.0625,8.0625h18.8125v8.0625c0,4.44512 3.61738,8.0625 8.0625,8.0625h69.875c4.44512,0 8.0625,-3.61738 8.0625,-8.0625v-8.0625h18.8125c4.44512,0 8.0625,-3.61738 8.0625,-8.0625v-59.125c0,-4.44512 -3.61737,-8.0625 -8.0625,-8.0625zM147.8125,56.4375c1.4835,0 2.6875,1.20669 2.6875,2.6875v51.0625h-2.88637c-0.80625,-6.09525 -4.28119,-11.78469 -9.47612,-15.25425c0.99437,-1.87319 1.6125,-3.98019 1.6125,-6.24575v-5.375c0,-6.48763 -4.62519,-11.91638 -10.75,-13.16606v-13.70894zM134.375,88.6875c0,3.49912 -2.25213,6.45538 -5.375,7.568v-20.50831c3.12287,1.11262 5.375,4.06887 5.375,7.568zM134.6545,99.1365c3.913,2.48056 6.62469,6.84506 7.47125,11.051h-13.12575v-8.33394c2.12044,-0.43269 4.02319,-1.41094 5.6545,-2.71706zM67.1875,37.625c0,-1.48081 1.204,-2.6875 2.6875,-2.6875h32.25c1.4835,0 2.6875,1.20669 2.6875,2.6875v2.6875c0,1.48081 -1.204,2.6875 -2.6875,2.6875h-32.25c-1.4835,0 -2.6875,-1.20669 -2.6875,-2.6875zM51.0625,40.3125h10.75c0,4.44512 3.61737,8.0625 8.0625,8.0625h32.25c4.44512,0 8.0625,-3.61738 8.0625,-8.0625h10.75c1.4835,0 2.6875,1.20669 2.6875,2.6875v83.3125h-3.34056c-1.73881,-9.23963 -7.19444,-17.45531 -15.06344,-22.66906c1.44319,-2.88906 2.279,-6.13556 2.279,-9.58094v-10.75c0,-11.85456 -9.64544,-21.5 -21.5,-21.5c-11.85456,0 -21.5,9.64544 -21.5,21.5v10.75c0,3.44537 0.83581,6.69188 2.28169,9.58094c-7.869,5.21375 -13.32463,13.42675 -15.06344,22.66906h-3.34325v-83.3125c0,-1.48081 1.204,-2.6875 2.6875,-2.6875zM102.125,94.0625c0,8.89294 -7.23206,16.125 -16.125,16.125c-8.89294,0 -16.125,-7.23206 -16.125,-16.125v-10.75c0,-8.89294 7.23206,-16.125 16.125,-16.125c8.89294,0 16.125,7.23206 16.125,16.125zM86,115.5625c6.48494,0 12.29531,-2.89981 16.24056,-7.45513c6.39088,4.22744 10.93006,10.77956 12.59363,18.20513h-57.66837c1.66356,-7.42556 6.20275,-13.97769 12.59631,-18.20244c3.94256,4.55531 9.75294,7.45244 16.23787,7.45244zM43,96.2555c-3.12288,-1.11263 -5.375,-4.06888 -5.375,-7.568v-5.375c0,-3.49912 2.25212,-6.45538 5.375,-7.568zM37.32669,99.12306c1.634,1.31419 3.54481,2.29512 5.67331,2.7305v8.33394h-13.18487c0.78475,-4.57412 3.526,-8.63225 7.51156,-11.06444zM24.1875,56.4375h18.8125v13.70894c-6.12481,1.24969 -10.75,6.67575 -10.75,13.16606v5.375c0,2.26287 0.61544,4.36719 1.60981,6.24038c-5.21106,3.44806 -8.686,9.05688 -9.47613,15.25963h-2.88369v-51.0625c0,-1.48081 1.204,-2.6875 2.6875,-2.6875zM24.1875,120.9375c-1.4835,0 -2.6875,-1.20669 -2.6875,-2.6875v-2.6875h21.5v5.375zM120.9375,137.0625h-69.875c-1.4835,0 -2.6875,-1.20669 -2.6875,-2.6875v-2.6875h75.25v2.6875c0,1.48081 -1.204,2.6875 -2.6875,2.6875zM147.8125,120.9375h-18.8125v-5.375h21.5v2.6875c0,1.48081 -1.204,2.6875 -2.6875,2.6875z" fill="url(#color-4_43991_gr4)"></path></g></g></svg>
</div>
<div class="col">
<div class="row no-margin">
<div class="col-auto no-padding m-r-10 m-b-5 m-t-5 parentContainer" v-for="segment in item.segments" v-bind:key="segment.id" v-if="segment.id !== 1">
<div class="font-heading fs-10 lh-20 p-l-10 p-r-10 bg-master-lightest btn-rounded">
{{segment.name}}
<i class="fa fa-times muted m-l-10 pointer requestModal" data-type="detachSegment" ></i>
</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="detachSegment">
<detach-segment-form-component :data="segment" :company_id="item.id" section="customerProfileSection"></detach-segment-form-component>
</modal-component>
</div>
</div>
</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="assignSegment">
<assign-segment-form-component :data="item" section="customerProfileSection"></assign-segment-form-component>
</modal-component>
</div>
</div>
<div class="col-6">
<div class="row">
<div class="col-auto" v-if="item.employee">
@@ -1,73 +0,0 @@
<template>
<div class="row">
<div class="col">
<loading-component style="height: 50px; top: 0;" key="1" color="success" v-show="$store.getters.isLoading(section)"></loading-component>
<div class="row" v-show="!$store.getters.isLoading(section)">
<div class="col">
<div class="row m-b-10">
<div class="col">
<h3 class="all-caps m-b-5 bold no-margin">Assign Segment</h3>
<div class="fs-11">Select a segment to {{parameters.name}}</div>
</div>
</div>
<div class="row m-b-5 animate__animated animate__fadeInUpBig animate__fast" v-if="error">
<div class="col">
<small class="bold fs-10 text-danger">{{error}}</small>
</div>
</div>
<div class="row m-b-15">
<div class="col">
<validation-wrapper-component selectable :validator="$v.parameters.segment_id">
<label>Segment</label>
<selectable-component :endpoint="route('api.segment.list') + '?filters=' + JSON.stringify({'id_not_in': currentSegmentIds})" :section="multiple?'segmentsListSection_'+data.id:'segmentsListSection'" valueColumn="id" :labelColumn="['name']" v-model="parameters.segment_id"></selectable-component>
</validation-wrapper-component>
</div>
</div>
<div class="row">
<div class="col p-r-5">
<div class="btn btn-sm btn-default bg-master-lightest btn-block b-rad-none" data-dismiss="modal">Not Now</div>
</div>
<div class="col p-l-5">
<div class="btn btn-sm btn-success btn-block b-rad-none" @click="submit(route('api.company.connection.assign', data.id, data.company_module.connections[0].id), 'post', section, true, false)">Assign Segment</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import ModalFormHandler from '../../../general/mixins/modalFormHandler';
import { required } from "vuelidate/lib/validators";
export default {
props: {
multiple: {
default: false,
type: Boolean
}
},
data(){
return {
parameters: {
segment_id: ''
}
}
},
validations: {
parameters: {
segment_id: {
required
}
}
},
computed: {
currentSegmentIds(){
return this.data.segments.map(function (value){
return value.id;
})
}
},
mixins: [ModalFormHandler]
}
</script>
@@ -1,44 +0,0 @@
<template>
<div class="row">
<div class="col">
<loading-component style="height: 300px; top: 0;" key="1" color="success" v-show="isLoading" ></loading-component>
<div class="row m-b-5 animate__animated animate__fadeInUpBig animate__fast" v-if="error">
<div class="col">
<small class="bold fs-10 text-danger">{{error}}</small>
</div>
</div>
<div class="row justify-content-center" v-show="!isLoading">
<div class="col">
<div class="row m-b-20">
<div class="col">
<h3 class="all-caps">Are you Sure?</h3>
<div class="fs-11">Are you sure you want to detach custom from <span class="bold">{{this.item.name}}</span> segment?</div>
</div>
</div>
<div class="row">
<div class="col p-r-5">
<div class="btn btn-sm btn-success btn-block b-rad-none" data-dismiss="modal">Cancel</div>
</div>
<div class="col p-l-5">
<div class="btn btn-sm btn-danger btn-block b-rad-none" @click="submit(route('api.company.segment.detach', company_id, item.id), 'delete', 'customerProfileSection', true, true)">Remove Segment</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import componentHandler from '../../../general/mixins/componentHandler';
import ModalFormHandler from '../../../general/mixins/modalFormHandler';
export default {
props: {
company_id: {
required: true,
type: Number
}
},
mixins: [componentHandler, ModalFormHandler]
}
</script>
@@ -57,8 +57,8 @@
<div class="btn btn-default no-border" @click="expanded = !expanded">
<i class="fa" :class="{'fa-angle-down': !expanded, 'fa-angle-up': expanded}" ></i>
</div>
<a class="btn btn-default no-border" :href="route('container.refresh', item.container_reference)" target="_blank">
<i class="fa fa-refresh fa-fw"></i>
<a class="btn btn-default no-border" :href="route('container.show', item.container_reference)">
<i class="fa fa-angle-right fa-fw"></i>
</a>
</div>
</div>
@@ -13,18 +13,18 @@
<div class="col-1">{{ (parseFloat(cbm) + parseFloat(overweight)).toFixed(3)}}</div>
<div class="col-1 bold text-center" :class="{'text-danger': item.status === 5, 'text-success': item.status !== 5}">{{item.transport ? 'Delivery' : item.status === 5 ? 'On Hold' : 'Release'}}</div>
<div class="col-3">
<div v-if="item.order" style="word-break: break-word;">
<div v-if="item.order">
{{item.order.address.contact ? item.order.address.contact.reference+' '+item.order.address.contact.phone : ''}}<br>
{{item.order.address.street_one+' '+(item.order.address.street_two ? item.order.address.street_two : '')+', '+ item.order.address.district.name+', '+item.order.address.post_code+' '+item.order.address.state.name+', '+item.order.address.country.name}}<br>{{item.order.address.remark ? item.order.address.remark.content: ''}}
<div class="btn btn-xs btn-primary pointer m-t-10 requestModal hide" data-type="defineLocation">Define Location</div>
<div class="btn btn-xs btn-primary pointer m-t-10 requestModal" data-type="defineLocation">Define Location</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="defineLocation">
<declare-postcode-area-form-component :data="item.order.address.post_code"></declare-postcode-area-form-component>
<declare-postcode-area-form-component :section="section" :data="{postcode: item.order.address.post_code, postcodeArea: item.order.address.post_code_area}"></declare-postcode-area-form-component>
</modal-component>
</div>
</div>
<div class="col">
<p class="no-margin" v-if="item.transport">{{ item.transport.current_schedule.eta }}</p>
<p class="no-margin text-danger" v-if="!item.transport">{{ item.packages.length ? item.packages[0].container.transport ? item.packages[0].container.transport.dropped_days+' Days': 'n/a' : 'n/a'}}</p>
<p class="no-margin text-danger" v-if="!item.transport">{{ item.packages[0].container.transport ? item.packages[0].container.transport.dropped_days+' Days': 'n/a'}}</p>
<div class="btn btn-xs btn-primary pointer m-t-10 requestModal" data-type="rescheduleTransport">Reschedule Transport</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="rescheduleTransport">
<reschedule-transport-date-form-component :data="item"></reschedule-transport-date-form-component>
@@ -40,6 +40,23 @@
<div v-if="!item.order" class="text-danger">Unclaimed</div>
</div>
</div>
<div class="row">
<div class="col">
<div v-if="!item.shippng_transaction">
<div class="btn btn-xs btn-primary pointer" @click="generateInvoice()">Generate Invoice</div>
</div>
<div v-if="item.shippng_transaction">
<div v-for="files in item.shippng_transaction.documents.files" v-bind:key="files.id" class="col-auto no-padding">
<document-file-viewer-component :file="files">
<template slot="button">
<div class="btn btn-xs btn-primary pointer d-block m-b-5">View Invoice</div>
</template>
</document-file-viewer-component>
</div>
<!-- <div class="btn btn-xs btn-primary pointer d-block">Pay Invoice</div> -->
</div>
</div>
</div>
</div>
</div>
</template>
@@ -71,6 +88,9 @@
this.parameters.packing_list_id = this.data.id;
},
methods: {
generateInvoice() {
this.submit(this.route('api.transaction.supplier.create'), 'post', this.section, true, true);
},
updateStatus(status){
this.submit(this.route('api.packing_list.status.update', this.item.id, status), 'put', '', true, true)
},
@@ -32,8 +32,7 @@
</div>
<div class="col" v-if="$store.getters.isAdmin">
<p class="no-margin all-caps fs-10 light">Warehouse</p>
<p class="no-margin" v-if="item.order">{{item.order.warehouse.reference}}</p>
<span class='text-danger' v-if="!item.order">Unclaimed</span>
<p class="no-margin">{{item.order.warehouse.reference}}</p>
</div>
<div class="col-auto text-right">
<div class="btn btn-xs btn-default" @click="expanded = !expanded"><i class="fa" :class="{'fa-angle-up': expanded, 'fa-angle-down': !expanded}"></i></div>
File diff suppressed because one or more lines are too long
@@ -27,7 +27,7 @@
</div>
</div>
<div class="col col-md-3 p-l-5">
<div class="b-a b-thick p-t-15 p-b-15 p-l-35 p-r-35 pointer" @click="parameters.warehouse_id = 4" :class="{ 'b-primary': parameters.warehouse_id === 4, 'b-grey': parameters.warehouse_id !== 4 }">
<div class="b-a b-thick p-t-15 p-b-15 p-l-35 p-r-35 pointer" :class="{ 'b-primary': parameters.warehouse_id === 4, 'b-grey': parameters.warehouse_id !== 4 }" @click="parameters.warehouse_id = 4">
<div class="row m-b-15 justify-content-center">
<div class="col-8">
<img src="/images/yiwu-map.png" class="w-100">
@@ -52,8 +52,6 @@
</div>
<div class="row text-center justify-content-center">
<div class="col-8">
<p class="m-b-0 text-danger m-t-15" v-if="parameters.warehouse_id === 3">近期由于船期的安排和马来西亚海关的运作等一些不可控因数导致船期延迟请大家提前做好采购安排若有不便之处敬请谅解 <br>Due to inevitable circumstances, shipping arrangements and Malaysia custom clearance may have delays. Kindly plan your purchases in advance, thank you for your cooperation.</p>
<p class="m-b-0 text-danger m-t-15" v-if="false">由于义乌船期不稳定建议发广州仓库<br>Due to unexpected shipping delays for Yiwu warehouse, you may select an alternative warehouse.</p>
<p class="m-b-0 text-danger m-t-15" v-if="parameters.warehouse_id === 4">由于义乌船期不稳定建议发广州仓库<br>Due to unexpected shipping delays for Yiwu warehouse, you may select an alternative warehouse.</p>
</div>
</div>
@@ -1,458 +0,0 @@
<template>
<div class="row">
<div class="col no-margin">
<loading-component style="height: 200px; top: 0;" key="1" color="success" v-show="$store.getters.isLoading(section)"></loading-component>
<div class="row align-content-center h-100" v-if="step === 1">
<div class="col-8">
<div class="row m-b-20">
<div class="col-12 col-md-7">
<div class="row m-b-10 text-info">
<div class="col">
<h5 class="m-b-0 m-t-0 bold">Service Type</h5>
</div>
</div>
<div class="row text-center justify-content-center">
<div class="col p-l-5">
<div class="b-a b-thick p-t-15 p-b-15 p-l-35 p-r-35 pointer" :class="{ 'b-info': parameters.type === 1, 'b-grey': parameters.type !== 1 }" @click="parameters.type = 1">
<div class="row justify-content-center">
<div class="col-8">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABmJLR0QA/wD/AP+gvaeTAAAEJklEQVR4nO3aS6hVVRzH8c8tsUKvjWoQBGGPSZFGg0ot8+YgMBoKEQhBBBFNokFkUhOzGjSoUVnUMIugUQ8pe4gVRhFISpMI7UpGpuiN3vc0WOt0ttt93nufvW93fWFxNov9/6///p211l7rvzaJRCKRSCQSiUQikUgkEolEIpFIJBY5S/E0jqJVUZnDAWzHpZN5rMnxlOqEKyqncM9EnmxCzAoPdtOQdm1BBmEZbsbr0WYe9w7ZXmMZRogy7O4XBPwT60awbxyTFpAw57bwIy4Z0UdjqEPAc/FetP9UeJEtWOoQEC7Gkejj2TH81E5dAsIN+D362Tymr9qoU0B4IPo5jatL8Ddx6hYQXom+vsWFJfmcGE0Q8AJ8Gf29hamS/E6EJggIl+F49PlwiX4rpykCwp3CIvsvzJTpeEr5wS4EvsP7sbwrvGhGYjEK+Kuwh27zG/ZidywHhnVYxZAhBPXJBO0GZSk2YIfwgvnHmVmdo3gVdwuL8r5UJeBC4SLcJSx52hmkdpnHV0JqbgbnFTlY7ALmuQYP4R1huGcF/QlbsSRrUJScPIzbxwxknzAcx7XbWxDfKH5H4XxsxDP4OtP+m0LigoLgsiKOQ1lzYJGAVc6RvVgrpMpa2NKuLBrCaVh3Z7OgzWftiiRgbzZhP/5w9hkMqhvCZc2BdbJJ74Ms53QxPIL7xmx83mi9eFS7Kngi/j4iLGGmFCQk0nDtzilBm+W5+r49MBHYH38f1ON8paoe+H+YA2fwtxHmwG5sxE4hwzuHk8Lm+0XhLDY7PzRxDszHPxevd+K2gvv34A58IZw3FzJID7xc8YI2X3YLCcymMWj8H2PlAP7O0KyfgOuEntYSVuGPYpWQElqG1cL+sL1CP4HrB32yCTBs/Cexpo/PgQW8ShCkhdec/TbKMo1d8d6f8bn658BR4/8FV3SJZ5+OZqvoLuCU0KXbjQ9yIDOl86FPC28PYJOnrHzguPHv6RJPdir4nu4C3qrT7Xv9c3mmcSzarh/CrmzKiP+WHve10Or1Fm5nG54T3lZtsh9OzgqZ3ewa6TSez/mog4nF387C5ifOg7H+2lx90YeTT+buWR3rDw4SQI6y5sAy4v+mh///Ru6OAofZku/+WcHXxuvZ3D3TfXxOslQZ/+EleDwabTHcN3XZSbmqhW+VjBt/34RLtyFQ1GO35+4ZZAhUTe3xvxydbM3VL41BzOKH2Hh+o70t2r40TgBjUnv863WWAdND2K0QTq9awgfgddGI+D+KjnYZfCH6RrT5YNzGS6D2+K8UtjUtYYXe659ckWn8uLCBr5tGxL9GZz95DI/hOmF5sDxeb9Pp9idwY1mNl0Aj4l+pMxx6lQ81M53VmPhn8AIO6SQkD8W6DVU2XBILPf5EIpFIJBKJRCKRSCQSiUQiUSP/AlkkSdKJddQ3AAAAAElFTkSuQmCC" class="w-100">
</div>
</div>
<div class="row">
<div class="col">
<h5 class="no-margin" :class="{ 'text-info': parameters.type === 1, 'semi-bold': parameters.type === 1}">Pick Up</h5>
</div>
</div>
</div>
</div>
<div class="col p-r-5">
<div class="b-a b-thick p-t-15 p-b-15 p-l-35 p-r-35 pointer" :class="{ 'b-info': parameters.type === 2, 'b-grey': parameters.type !== 2 }" @click="parameters.type = 2">
<div class="row justify-content-center">
<div class="col-8">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABmJLR0QA/wD/AP+gvaeTAAAG00lEQVR4nO2caYwURRSAv4VhOWRBZEEFQgAFFVFARcEjyEpQMCggCoZA/IEHcoioARUNlxKjiTEeqIhRJFFBEQHxwPgDMYCcaqIEMSDBoKKcyyEsO/54r1O9Pd09Bz073UN/yaSnql7XvC6qq1699xaIiYmJiYmJiYmJiSlKWgIzgc1AJXAY2ATMAFoUUK9IMBQ4BCQ9PgeBwQXTLuQMBaqRgVoM9AbO0s+NwKfadop4EFNoiZl5j/nITVGZA0B5LegVGWYiA/NJBrJLVXZ6XjWKGFuQQemdgWwfld2UV40ixmFkUBpnIFumsofyqpEHdQrxoxmQzEK2JId7AiOsA/ibXq/KQNaS2Z4nXXwJ6wAu0+vDGchOctwTg5wwDiKv5RQfuSdVZj/QvBb0ihRDECM5iZgqfZBNpQyoAJZjDOnbC6Rj6BmMGMleR7n9xIOXlnLEcbARMW8OARuAacSvbUxQVABzga2Iy8rtdT0AfAX0K5COoaQDsArvNc7r80QhlA0b/TAbxF/AVKAr4q5yozkycFWIm6uiFnQMLfcAJ5DBWwQ0zeLeSXrfijzoFQmexjhKZ2POsplSrvf+G7BeoScBzEMevgp4IMd+mmkfJ4AmwagWDeYjD14JDHRp7wQsAK5P089NmM3kpSAVDDMjMSeHHi7tfYF9KvNymr6ewgxgFXBlcGqGF8tUGenS9iBwEjMo96bpa4XK/ajX9UDdwDQNIQ2RmXJSv1skgFeQQajGbCyX+/RVBzNTLwJ26vfxgWsdInogD/mTra4e8KXWHwMm6vfD+M+mzir3u5YHYuLDrQLVOkNqw6HaTa9bbHW3IIb034ibyvImb0DcU15cq9c1el2GRO6aAKsR/2Cb01c5c2pjALvq9QdbnTWo84G1wDVaXpemr14uchOAbUB7YBbyWn8O3AnUz03lcLEaec362uoWa90ILa/U8qA0fW1VuY1Aqa2+jvY/HzhCTX/hG0R4py7BuObtiUDbta4L8vD7tey3jp2D2WiSwDM+cuOROLHdAbEJ8XJHigsQ5f+w1ZUhA3Ec2UwuUZldafq6FbOBVOn3j4ABeG883RBj+x/Mbn9HDs9RMIYgin9mq7sO8xqCOBYsp4IfszDn59HI7m3Nrj3AC8BlHvfWR7zaSWpuZqFnOqL0s7a6sVo3T8tztPxomr6+UbnbtNwKidj9TOqrOhFJULLTFHOUjAxLEKWH2ere1LoJWv5eyzf49JNAHrwa96TKqxGj3HpVLWfDUuSVLUN8iUnS7/ShYgei9MW2unXUTBzaQ+om4+QKldmW5vdKkUjeEoy/0f6pBvpn9QQF5iiiuOVlTiBmRjVwNmIAW7HfRj79jFOZd7L47RbILF+PrJdridjggZltjyNrkLWQW8e6fpjZ0dmnnwUqMyZvmoaUAdS03ZyZBNNs9X4pHK+pzEqy92BHngHITKxEdkj7acM6gSSRc3Ezjz7Kgb0qNypvmkaMupg86M2ktwVHqcxe4j9vAKA7MiC/IicWK8Q51kO+BDNj36sNBcOOc2cdquXjiNniRjtM5sIZn6HwPqku/Fe1bjveseLJKrMD7yD8GcEuUs2X+sgZOQks9LgvgfG0PJdPBcNMG2QA9pHq1LXiJH52Xw9MnKV7nnQMNcNI9dKA7Mx/YgbQbz18kTMkKuekHsaBMNnRVoE5886xfXfLQGiMicplkoxeNFh/xrWLVMPZ8tTMoOZ6+KFHX/21/QgSEyl6eiHrVhWp7qtGmNOG5RjtiDG27/fo8wPcl4OiowwTC5nt0m5tHhsc9cMx8eOuzpuAczHB9uFBKRtG3sZ4jEsdbTdj4iRug/Q65tTith6OxhzzivLPXgdhZlEXR1s5xqn6iMf9DTC2n9t6WAJ8re1vBaBvqGiFcbW7nXMXadsq/M2RCzEhUrcEpI7IP1A1kgJXFJQgi3sSyYVx+vLuwwTA22bQ312YmexmQE/FmD4NclM5XDyEWZvOd7R1wOywd2fRp2XquNmHCcwfa8/MQd+88h3wbRblTkhMZA+pKRsJJEEoibjrs+m/IZJnY7/XTi/ENfYfcOlp6J8R2SQXWa75TMtjkId9HomS2ZkK9ESM6XFZ9n8MeZUrkdya0Y6+1yBZrKXUPKFkq3/BsXZWZ75LT8SYPoX89yW5MkL7P0pqRkJbbdt9Gv0XHGvHtOfrNUZsuaBcUXMxOTL1bPWtMXGWyPIx8hDLkUFsB3yBiYE4jelcaIjJlV4GnIecTKyd3+sMHQk6UTPVwvrsRGy2oGgP/OLyO/uQnT7StEZmwUHE1nsXmSVB0xyJHe9GTKaFFMHgxcTExMTExMTExBQt/wPtRjB5yTmw/QAAAABJRU5ErkJggg==" class="w-100">
</div>
</div>
<div class="row">
<div class="col">
<h5 class="no-margin"></h5>
<h5 class="no-margin" :class="{ 'text-info': parameters.type === 2, 'semi-bold': parameters.type === 2}">Drop Off</h5>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row m-t-20" v-if="parameters.type !== ''">
<div class="col bg-master-lightest p-t-15">
<div class="row m-b-20 text-info">
<div class="col">
<h5 class="m-b-0 m-t-0 bold">Packing list</h5>
</div>
</div>
<div class="row">
<div class="col">
<validation-wrapper-component selectable class="m-b-15" :validator="$v.productType">
<label>Product Type</label>
<selectable-component :endpoint="route('api.segment.air_shipment.price.list')" :section="section" valueColumn="details" :labelColumn="['name']" v-model="productType"></selectable-component>
</validation-wrapper-component>
</div>
<div class="col">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.product.productDesc">
<label>Product Description</label>
<input class="form-control" v-model="parameters.product.productDesc">
</validation-wrapper-component>
</div>
</div>
<div class="row">
<div class="col">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.product.quantity">
<label>Quantity</label>
<input class="form-control" type="number" v-model="parameters.product.quantity">
</validation-wrapper-component>
</div>
<div class="col">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.product.totalWeight">
<label>Total Weight (KG)</label>
<input type="text" class="form-control fs-12" v-model.trim="parameters.product.totalWeight" v-money="weight">
</validation-wrapper-component>
</div>
<div class="col" v-if="productTypeArray['hasGram'] === 'true'">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.product.gram">
<label>Gram</label>
<input class="form-control" v-model="parameters.product.gram">
</validation-wrapper-component>
</div>
</div>
<div class="row" v-if="productTypeArray['hasDimensionCharges'] === 'true'">
<div class="col-4">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.product.width">
<label>Width</label>
<input class="form-control" v-model="parameters.product.width">
</validation-wrapper-component>
</div>
<div class="col-4">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.product.length">
<label>Length</label>
<input class="form-control" v-model="parameters.product.length">
</validation-wrapper-component>
</div>
<div class="col-4">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.product.height">
<label>Height</label>
<input class="form-control" v-model="parameters.product.height">
</validation-wrapper-component>
</div>
</div>
<p v-if="productTypeArray['isProhibited'] === 'true'" class="text-danger text-center">This item is blacklisted to ship to bangladish. <span class="text-underline text-complete">Black listed items list</span></p>
<div class="row">
<div class="col">
<div class="btn btn-complete w-100 m-b-15 padding-10" :class="{'disabled': productTypeArray['isProhibited'] === 'true', 'not-allowed': productTypeArray['isProhibited'] === 'true'}" @click="addProduct()">Add Product</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-4">
<div class="margin-15 padding-15 bg-master-lightest">
<p class="m-b-15 bold fs-18">Order Summary</p>
<p class="m-b-15 bold fs-15">Products</p>
<div class="row" v-if="productList.length != 0">
<div class="col">
<div class="row m-l-0 m-r-0 m-b-10" v-for="(cartItem, index) in productList">
<div class="col p-t-10 p-b-10 bg-white">
<div class="row">
<div class="col">
<p class="bold no-margin">{{cartItem.productDesc}}</p>
</div>
</div>
<div class="row">
<div class="col">
<p class="muted no-margin">{{ cartItem.quantity }} &nbsp; X &nbsp; {{ cartItem.productType }} - {{ cartItem.totalWeight }}KG</p>
</div>
</div>
</div>
<div class="col-auto bg-white pointer" @click="removeElement(index)">
<div class="row h-100 align-content-center justify-content-center">
<div class="col">
<i class="fa fa-times fs-12"></i>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row m-l-0 m-r-0 m-b-10 b-a rounded b-primary-light" v-if="parameters.product.productDesc != '' || productType != ''">
<div class="col p-t-10 p-b-10 bg-white">
<div class="row">
<div class="col">
<p class="bold no-margin">{{parameters.product.productDesc}}</p>
</div>
</div>
<div class="row">
<div class="col">
<p class="muted no-margin">{{parameters.product.quantity}} &nbsp; X &nbsp; {{ productTypeArray['name'] }} - {{ parameters.product.totalWeight }}KG</p>
</div>
</div>
</div>
</div>
<div class="row" v-if="parameters.product.productDesc == '' && productType == '' && productList.length == 0">
<div class="col">
<p class="muted">There are no items added yet!</p>
</div>
</div>
<div class="row">
<div class="col">
<p class="bold fs-15">Quotation</p>
<div class="row justify-content-between m-b-5">
<div class="col">Total Weight</div>
<div class="col">{{ parameters.totalWeight }} kg</div>
</div>
<div class="row justify-content-between m-b-5">
<div class="col">Service Type</div>
<div class="col">{{ parameters.type === 1 ? 'Pick Up' : parameters.type === 2 ? 'Drop Off' : '' }}</div>
</div>
<div class="row justify-content-between m-b-5">
<div class="col">Price Per kg</div>
<div class="col">{{ parameters.pricePerKg }} RM</div>
</div>
<div class="row justify-content-between m-b-5">
<div class="col">Shipping Fee</div>
<div class="col">{{ parameters.totalShipping }} RM</div>
</div>
<div class="row justify-content-between">
<div class="col">Special Product Tax</div>
<div class="col">{{ parameters.totalTax }} RM</div>
</div>
<p class="text-complete text-underline pointer">What is this cost?</p>
<div class="row m-t-15 justify-content-between">
<div class="col fs-20 bold">Total</div>
<div class="col fs-20 bold">{{ parameters.totalCombine }} RM</div>
</div>
</div>
</div>
</div>
<div class="row m-t-15">
<div class="col">
<div class="btn btn-success w-100 m-b-15 padding-10" @click="step++">Procced Next</div>
</div>
</div>
</div>
</div>
<div class="row" v-if="step === 2">
<div class="col">
<new-registration-form-component section="loginSection"></new-registration-form-component>
<div class="row m-t-15">
<div class="col-auto">
<div class="btn btn-default w-100 m-b-15 padding-10" @click="step--">back</div>
</div>
<div class="col-auto">
<div class="btn btn-success w-100 m-b-15 padding-10" @click="step++">Procced Next</div>
</div>
</div>
</div>
</div>
<div class="row" v-if="step === 3">
<div class="col-8">
<div class="row m-t-20">
<div class="col bg-master-lightest p-t-15">
<div class="row">
<div class="col">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.pickUpAddress">
<label>Pick up address</label>
<input class="form-control" v-model="parameters.pickUpAddress">
</validation-wrapper-component>
</div>
<div class="col">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.pickUpDate">
<label>Pick up date</label>
<date-picker-component v-model.lazy="parameters.pickUpDate"></date-picker-component>
</validation-wrapper-component>
</div>
</div>
<div class="row">
<div class="col">
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.deliveryAddress">
<label>Delivery address</label>
<input class="form-control" v-model="parameters.deliveryAddress">
</validation-wrapper-component>
</div>
</div>
</div>
</div>
<div class="row m-t-20">
<div class="col">
<p>Addon Wrapping service</p>
<div class="row m-l-5">
<div class="col-4 p-r-10 p-l-0">
<div class="padding-20 bg-master-light text-center pointer" @click="parameters.wrappingService = 'Pick Up' " :class="{'bg-complete-light': parameters.wrappingService === 'Pick Up', 'text-white': parameters.wrappingService === 'Pick Up',}">
Wrap my goods
</div>
</div>
<div class="col-4 p-l-10">
<div class="padding-20 bg-master-light text-center pointer" @click="parameters.wrappingService = 'Drop Off'" :class="{'bg-complete-light': parameters.wrappingService === 'Drop Off', 'text-white': parameters.wrappingService === 'Drop Off',}">
No Thanks
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-4">
<div class="margin-15 padding-15 bg-master-lightest">
<p class="m-b-15 bold fs-18">Order Summary</p>
<div class="row m-b-15">
<div class="col">
<p class="bold fs-15">Products</p>
<p>1x product1 </p>
</div>
</div>
<div class="row">
<div class="col">
<p class="bold fs-15">Quotation</p>
<div class="row justify-content-between m-b-5">
<div class="col">Total Weight</div>
<div class="col">15 kg</div>
</div>
<div class="row justify-content-between m-b-5">
<div class="col">Service Type</div>
<div class="col">{{ parameters.servicetype }}</div>
</div>
<div class="row justify-content-between m-b-5">
<div class="col">Price Per kg</div>
<div class="col">26 RM</div>
</div>
<div class="row justify-content-between m-b-5">
<div class="col">Shipping Fee</div>
<div class="col">200 RM</div>
</div>
<div class="row justify-content-between">
<div class="col">Special Product Tax</div>
<div class="col">50 RM</div>
</div>
<p class="text-complete text-underline pointer">What is this cost?</p>
<div class="row m-t-15 justify-content-between">
<div class="col fs-20 bold">Total</div>
<div class="col fs-20 bold">50 RM</div>
</div>
</div>
</div>
</div>
<div class="row m-t-15">
<div class="col">
<div class="btn btn-success w-100 m-b-15 padding-10" @click="step++">Procced Next</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import componentHandler from '../../../general/mixins/componentHandler';
import { required } from "vuelidate/lib/validators";
import { VMoney } from 'v-money'
export default {
data(){
return {
section: 'createDelvieryOrderSectionComponent',
weight: {decimal: '.',thousands: ',', precision: 1},
step: 1,
productType: '',
productList: [],
parameters : {
type: '',
product: {
productType: '',
productDesc: '',
quantity: '1',
totalWeight: 10,
gram: '',
width: '',
length: '',
height: '',
},
pickUpAddress: '',
pickUpDate: '',
deliveryAddress: '',
wrappingService: '',
tax: 0,
totalWeight: 0,
pricePerKg: 0,
totalShipping: 0,
totalTax: 0,
totalCombine: 0,
}
}
},
validations: {
productType: { },
parameters: {
product: {
productDesc: { },
quantity: { },
totalWeight: { },
gram: { },
width: { },
length: { },
height: { },
},
pickUpAddress: { },
pickUpDate: { },
deliveryAddress: { },
wrappingService: { },
}
},
computed: {
productTypeArray() {
return this.productType === '' ? '' : JSON.parse(this.productType);
},
},
methods: {
addProduct() {
// todo: change this to vuelidate
if (this.parameters.product.productDesc != '' && this.productType != '') {
// add weight
this.parameters.totalWeight += parseInt(this.parameters.product.totalWeight);
// has tax
if (this.productTypeArray['tax']) {
this.parameters.totalTax += parseInt(this.productTypeArray['tax']);
}
var itemShippingFee = 0;
// pricePerKg * kg
if (this.productTypeArray['pricePerKg']) {
// add pricePerKg
this.parameters.pricePerKg += parseInt(this.productTypeArray['pricePerKg']);
itemShippingFee += parseInt(this.productTypeArray['pricePerKg']) * parseInt(this.parameters.product.totalWeight);
}
// pricePerPcs * quantity
if (this.productTypeArray['pricePerPcs']) {
itemShippingFee += parseInt(this.productTypeArray['pricePerPcs']) * this.parameters.product.quantity;
}
this.productList.push(
{
productType: this.productTypeArray['name'],
productDesc: this.parameters.product.productDesc,
quantity: this.parameters.product.quantity,
gram: '',
width: '',
length: '',
height: '',
totalWeight: this.parameters.product.totalWeight,
itemTax: this.productTypeArray['tax'],
pricePerKg: this.productTypeArray['pricePerKg'],
itemShippingFee: itemShippingFee,
}
);
this.parameters.totalShipping += itemShippingFee;
this.parameters.totalCombine += ( itemShippingFee + parseInt(this.productTypeArray['tax'] == '' ? 0 : this.productTypeArray['tax']) );
this.parameters.product.productDesc = '' ;
this.productType = '';
}
},
removeElement(index) {
var itemRemoved = this.productList.splice(index, 1)[0];
// remove weight
this.parameters.totalWeight -= parseInt(itemRemoved['totalWeight']);
// has tax
if (itemRemoved['itemTax']) {
this.parameters.totalTax -= parseInt(itemRemoved['itemTax']);
}
if (itemRemoved['itemShippingFee']) {
this.parameters.totalShipping -= parseInt(itemRemoved['itemShippingFee']);
}
// remove pricePerKg
if (itemRemoved['pricePerKg']) {
this.parameters.pricePerKg -= parseInt(itemRemoved['pricePerKg']);
}
this.parameters.totalCombine -= ( parseInt(itemRemoved['itemShippingFee']) + parseInt(itemRemoved['itemTax'] == '' ? 0 : parseInt(itemRemoved['itemTax'])) );
}
},
mixins: [componentHandler],
directives: {money: VMoney}
}
</script>
@@ -134,7 +134,7 @@
</div>
</div>
</div>
<div class="row" v-if="false">
<div class="row">
<div class="col">
<div class="row m-b-20">
<div class="col">
@@ -1,276 +0,0 @@
<template>
<div class="row m-b-15 m-l-5 m-r-10 parentContainer">
<div class="col bg-white rounded">
<div class="row">
<div class="col padding-20">
<div class="row align-items-center">
<div class="col">
<p class="no-margin fs-10 all-caps">Marking</p>
<div class="no-margin">
<div v-if="item.order">
<a :href="route('customer.profile', item.order.company_module.marking)">{{item.order.company_module.marking}}</a>/<a :href="route('order.show', item.order.reference)">{{item.order.reference}}</a>
<p>{{item.loading_days_ago}}</p>
</div>
<div v-else class="text-danger">Unclaimed Packing List</div>
</div>
</div>
<div class="col">
<p class="no-margin fs-10 all-caps">Invoice Date</p>
<div v-if="!item.shippng_transaction">n/a</div>
<div v-if="item.shippng_transaction"> {{ item.shippng_transaction.updated_at }}</div>
</div>
<div class="col">
<p class="no-margin fs-10 all-caps">Status</p>
<div class="all-caps">{{ invoice_status }}</div>
</div>
<div class="col">
<p class="no-margin fs-10 all-caps">Amount</p>
<div v-if="!item.shippng_transaction">n/a</div>
<div v-if="item.shippng_transaction">MYR {{ item.shippng_transaction.amount.toFixed(2) }}</div>
</div>
<div class="col-auto p-l-0 p-r-0" v-if="['Pending Payment', 'Paid Invoice', 'Suspended Invoice'].includes(invoice_status)">
<div v-if="item.shippng_transaction">
<div v-if="item.shippng_transaction.documents.length">
<div v-for="file in item.shippng_transaction.documents[0].files" v-bind:key="file.id" class="col-auto no-padding">
<document-file-viewer-component :file="file">
<template slot="button">
<div class="btn bg-grey no-border muted">
<i class="fa fa-file-pdf-o"></i>
</div>
</template>
</document-file-viewer-component>
</div>
</div>
<div v-else>
<div class="btn bg-grey no-border muted invisible">
<i class="fa fa-file-pdf-o"></i>
</div>
</div>
</div>
</div>
<div class="col-auto">
<div class="btn bg-grey no-border" @click="expanded = !expanded" v-if="['Pending Approval', 'Pending Payment'].includes(invoice_status)">
<i class="fa" :class="{'fa-angle-down': !expanded, 'fa-angle-up': expanded}" ></i>
</div>
<div v-if="!item.shippng_transaction">
<div v-if="item.order">
<div v-if="!item.order.company_module.billingAddress">
<div class="btn btn-primary btn-xs pointer requestModal btn-block" data-type="billingAddressComponent">Add Billing Address</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" size="extra-large" styleType="fill-in" type="billingAddressComponent">
<address-form-component :id="item.order.company_module.id" section="addressList" :type=1></address-form-component>
</modal-component>
</div>
<div v-if="!item.order.address.post_code_area">
<div class="btn btn-xs btn-primary pointer m-t-10 requestModal btn-block" data-type="defineLocation">Define Location</div>
<modal-component class="animate_animated animatefast animate_fadeIn" styleType="fill-in" type="defineLocation">
<declare-postcode-area-form-component :data="item.order.address"></declare-postcode-area-form-component>
</modal-component>
</div>
<div v-if="item.order.company_module.billingAddress && item.order.address.post_code_area" class="btn btn-outline-primary btn-lg pointer" @click="generateInvoice()">Generate Invoice</div>
</div>
<div v-else>
<div class="btn btn-outline-primary btn-lg pointer invisible">Generate Invoice</div>
</div>
</div>
<div class="btn bg-grey no-border muted requestModal" v-if="item.shippng_transaction && invoice_status == 'Pending Approval'" data-type="confirmInvoice">
<i class="fa fa-check fs-12"></i>
</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="confirmInvoice">
<approve-shipping-invoice-form-component :section="section" :data="data"></approve-shipping-invoice-form-component>
</modal-component>
</div>
</div>
</div>
</div>
<div class="row b-t b-grey p-t-10 m-l-5 m-r-5" v-show="expanded" v-if="item.shippng_transaction && ['Pending Approval', 'Suspended Invoice'].includes(invoice_status)">
<div class="col p-b-10">
<div class="row">
<div class="col p-l-20 p-r-20 p-t-10 p-b-10">
<div class="row align-items-center">
<div class="col">
<p class="no-margin fs-10 all-caps">Container Reference</p>
<div v-if="item.packages.length">{{ item.packages[0].container ? item.packages[0].container.container_reference : 'n/a' }}</div>
<div v-else>n/a</div>
</div>
<div class="col">
<p class="no-margin fs-10 all-caps">Due Date</p>
<div v-if="item.packages.length">
<div v-if="item.packages[0].container">
<div v-if="item.packages[0].container.transport">{{ item.packages[0].container.transport.drop_date == null ? item.packages[0].container.transport.current_schedule.etd : item.packages[0].container.transport.drop_date }}</div>
<div v-else>n/a</div>
</div>
<div v-else>n/a</div>
</div>
<div v-else>n/a</div>
</div>
<!-- <div class="col">
<p class="no-margin fs-10 all-caps">Paid Date</p>
<div>n/a</div>
</div> -->
<div class="col">
<p class="no-margin fs-10 all-caps">Total CBM</p>
<div>{{ (parseFloat(cbm) + parseFloat(overweight)).toFixed(3) }}</div>
</div>
</div>
</div>
</div>
<h5 class="text-underline text-center">Invoice Details</h5>
<invoice-items-form-component :data="item.shippng_transaction" :section="section"></invoice-items-form-component>
<div class="row">
<div class="col">
<p class="no-margin fs-10 all-caps">Subtotal</p>
<div>{{ item.shippng_transaction.amount - item.shippng_transaction.service_charge - item.shippng_transaction.tax }}</div>
</div>
<div class="col">
<p class="no-margin fs-10 all-caps">Service Charges</p>
<div>{{ item.shippng_transaction.service_charge }}</div>
</div>
<div class="col">
<p class="no-margin fs-10 all-caps">Tax</p>
<div>{{ item.shippng_transaction.tax }}</div>
</div>
<div class="col">
<p class="no-margin fs-10 all-caps">Total</p>
<div>{{ item.shippng_transaction.amount }}</div>
</div>
</div>
</div>
</div>
<div class="row b-t b-grey p-t-10 m-l-5 m-r-5" v-show="expanded" v-if="item.shippng_transaction && invoice_status == 'Pending Payment'">
<div class="col-12 col-md-7 padding-20">
<div class="row bg-master-lightest h-100">
<div class="col">
<div class="row bg-master-lightest" v-if="item.shippng_transaction.payment_attempts.length">
<div class="col">
<div class="row m-t-10 m-b-10">
<div class="col">
<div class="font-head fs-10 all-caps">Payment Attempt</div>
</div>
</div>
<div class="row">
<div class="col">
<shipping-transaction-component v-for="item in item.shippng_transaction.payment_attempts" v-bind:key="item.id" :data="item" ></shipping-transaction-component>
</div>
</div>
</div>
</div>
<div class="row bg-master-lightest" v-if="item.shippng_transaction.payment_history.length">
<div class="col">
<div class="row m-t-10 m-b-10">
<div class="col">
<div class="font-head fs-10 all-caps">Payment History</div>
</div>
</div>
<div class="row">
<div class="col">
<payment-history-component v-for="item in item.shippng_transaction.payment_history" v-bind:key="item.id" :data="item" ></payment-history-component>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-12 col-md-5 padding-20 parentContainer">
<div class="row bg-master-lightest h-100">
<div class="col">
<div class="row padding-10">
<div class="col">
<div class="row align-items-end m-b-10 text-complete">
<div class="col">
<div class="font-heading all-caps fs-12">Total Amount:</div>
</div>
<div class="col-auto text-right">
<div class="font-heading fs-12">MYR {{(Math.round((item.shippng_transaction.amount + Number.EPSILON) * 100) / 100).toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}}</div>
</div>
</div>
<div class="row align-items-end m-b-10 text-success">
<div class="col">
<div class="font-heading all-caps fs-12">Paid Total:</div>
</div>
<div class="col-auto text-right">
<!-- <div class="font-heading fs-12">MYR {{(Math.round((item.shippng_transaction.paid_amount + Number.EPSILON) * 100) / 100).toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}}</div> -->
<div class="font-heading fs-12">Paid Total</div>
</div>
</div>
<div class="row align-items-end m-b-10 ">
<div class="col">
<div class="font-heading all-caps fs-12">Floating Amount:</div>
</div>
<div class="col-auto text-right">
<!-- <div class="font-heading fs-12">MYR {{(Math.round((item.shippng_transaction.floating_amount + Number.EPSILON) * 100) / 100).toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}}</div> -->
<div class="font-heading fs-12">Floating Amount</div>
</div>
</div>
<div class="row align-items-end bold text-danger">
<div class="col">
<div class="font-heading all-caps fs-12">OutStanding Total:</div>
</div>
<div class="col-auto text-right">
<div class="font-heading fs-12">MYR {{(Math.round((item.shippng_transaction.outstanding + Number.EPSILON) * 100) / 100).toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}}</div>
</div>
</div>
<div class="row m-t-20" v-if="item.shippng_transaction.outstanding > 0">
<div class="col">
<div class="btn btn-sm all-caps b-rad-none btn-success btn-block requestModal" data-type="makePayment">Make Payment</div>
</div>
</div>
</div>
</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="makePayment">
<payment-form-component :data="item.shippng_transaction" :section="section"></payment-form-component>
</modal-component>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import componentHandler from '../../../general/mixins/componentHandler';
export default {
props: {
invoice_status: {
type: String,
required: true
},
section:{
type: String,
required: true
}
},
data(){
return {
parameters: {
packing_list_id: null,
transaction_details: [],
},
expanded: false,
}
},
computed: {
cbm () {
return (Math.ceil((this.item.packages.reduce((total, obj) => (obj.type === 2 ? 0 : obj.cbm) + total, 0)) * 1000) / 1000).toFixed(3)
},
overweight(){
return (Math.ceil((this.item.packages.reduce((total, obj) => (obj.type === 2 ? obj.cbm : 0) + total, 0)) * 1000) / 1000).toFixed(3)
}
},
created(){
this.parameters.packing_list_id = this.data.id;
},
methods: {
generateInvoice() {
this.submit(this.route('api.transaction.invoice.create'), 'post', this.section, true, true);
},
successHandler(response){
this.item = response.payload.data;
// this.$forceUpdate();
}
},
mixins: [componentHandler]
}
</script>
@@ -1,137 +0,0 @@
<template>
<div class="row m-l-0 m-b-10 m-r-0 parentContainer" :class="[{'b-a': item.status === 4}, {'b-danger': item.status === 4}, {'b-a': item.status === 5}, {'b-danger': item.status === 5}]" >
<div class="col">
<div class="row" v-if="!item.transaction_bill">
<div class="col">
<div class="row bg-white ">
<div class="col p-t-10 p-b-10 p-r-0 pointer" @click="clickExpand()" :class="[{'bg-master-lighter': item.status === 1 && item.type !== 6}, {'bg-white': item.status !== 1 && item.status !== 4}, {'bg-warning-lighter': item.type === 6}]">
<div class="row m-b-5">
<div class="col-auto">
<div class="font-heading fs-8 muted all-caps">Status</div>
<div class="font-heading fs-10 bold" :class="[{'text-danger': item.status === 1 || item.status === 4}, {'text-success': item.status !== 1 && item.status !== 4}]">
{{ item.status === 1 ? 'Pending Verification' : item.status === ( 4 || 5) ? 'Rejected' : 'Processing Payment'}}
</div>
</div>
<div class="col-auto p-l-0">
<div class="font-heading fs-8 muted all-caps">Payment Amount</div>
<div class="font-heading fs-10 bold">
{{item.currency.short_code}} {{(Math.round((item.amount + Number.EPSILON) * 100) / 100).toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}}
</div>
</div>
</div>
<div class="row">
<div class="col">
<div class="font-heading fs-8 all-caps" :class="[{'text-danger': item.status === 4}, {'text-primary': item.status !== 4}]">{{ item.status === 2 ? 'Received' : item.status === 4 ? 'Rejected' : 'Submitted'}} On: {{item.updated_at}}</div>
</div>
</div>
</div>
<div class="col-auto" v-if="item.status !== 3" :class="[{'bg-master-light': item.status === 1 && item.type !== 6}, {'bg-master-lighter': item.status === 2}, {'bg-warning-light': item.type === 6}]">
<div class="row align-items-center h-100" v-if="item.status !== 1 || item.payment_method !== 5">
<div class="col">
<i class="fa" :class="[{'fa-cloud-download': item.status === 1 || item.status === 2}, {'fa-ban': item.status === 4}, {'muted': item.status === 1 || item.status === 2}, {'text-danger': item.status === 4}]"></i>
</div>
</div>
<div class="row align-items-center h-100" v-if="item.payment_method === 5 && item.status === 1">
<div class="col">
<a :href="route('billplz.bill', item.payment_reference)"><i class="fa fa-repeat text-success"></i></a>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row b-t b-grey" v-if="expandPaymentDetails">
<div class="col bg-white padding-15">
<!-- <div class="row align-items-end m-b-10 text-success bold">
<div class="col">
<div class="font-heading all-caps fs-10">Recipient Gets</div>
</div>
<div class="col-auto text-right">
<div class="font-heading fs-10">{{item.original_currency.short_code}} {{(item.original_amount).toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}}</div>
</div>
</div>
<div class="row align-items-end bold m-b-10 text-primary">
<div class="col">
<div class="font-heading all-caps fs-10">Rate</div>
</div>
<div class="col-auto text-right">
<div class="font-heading fs-10 ">{{(Math.round((item.currency_rate + Number.EPSILON) * 100000) / 100000).toFixed(5) }}</div>
</div>
</div>
<div class="row align-items-end m-b-10 hint-text">
<div class="col">
<div class="font-heading all-caps fs-10">Transfer Charges</div>
</div>
<div class="col-auto text-right">
<div class="font-heading fs-10">MYR {{(Math.round((item.service_charge + Number.EPSILON) * 100) / 100).toFixed(2)}}</div>
</div>
</div>
<div class="row align-items-end m-b-5 hint-text">
<div class="col">
<div class="font-heading all-caps fs-10">Tax</div>
</div>
<div class="col-auto text-right">
<div class="font-heading fs-10">MYR {{(Math.round((item.tax + Number.EPSILON) * 100) / 100).toFixed(2)}}</div>
</div>
</div>
<div class="row align-items-end m-b-10 bold text-success">
<div class="col">
<div class="font-heading all-caps fs-10">Your Payment</div>
</div>
<div class="col-auto text-right">
<div class="font-heading fs-12">MYR {{(Math.round((item.amount + Number.EPSILON) * 100) / 100).toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}}</div>
</div>
</div> -->
<div class="row">
<div class="col">
<div class="font-heading all-caps fs-10 m-b-5">Your Payment Proof</div>
<div class="row no-margin" v-if="item.payment_method !== 5">
<div v-if="item.documents.length">
<div v-for="file in item.documents[0].files" v-bind:key="file.id" class="col-auto no-padding m-r-5">
<document-file-viewer-component :file="file">
<template slot="button">
<div class="icon-thumbnail fs-11 text-white icon-25 bg-primary btn-rounded float-left m-r-5">
<i class="fa fa-file-image-o fs-10"></i>
</div>
</template>
</document-file-viewer-component>
</div>
</div>
</div>
<div class="row no-margin" v-if="item.payment_method === 5 && (item.status === 2 || item.status === 3)">
<a :href="route('billplz.bill', item.payment_reference)" target="_blank">
<div class="icon-thumbnail fs-11 text-white icon-25 bg-primary btn-rounded float-left m-r-5">
<i class="fa fa-file-image-o fs-10"></i>
</div>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import componentHandler from '../../../general/mixins/componentHandler';
export default {
data(){
return {
expandPaymentDetails: false,
amount: (Math.round(1000 * 100) / 100).toFixed(2),
parameters: {
amount: (Math.round(1000 * 100) / 100).toFixed(2),
bank_id: 1
},
section: 'bookingDetailSection',
}
},
methods: {
clickExpand(){
this.expandPaymentDetails = !this.expandPaymentDetails;
},
},
mixins: [componentHandler]
}
</script>
@@ -1,159 +0,0 @@
<template>
<div class="row m-b-10 parentContainer">
<div class="col">
<loading-component style="height: 200px; top: 0;" key="1" color="success" v-show="isLoading"></loading-component>
<div class="row p-b-5 b-b b-grey" v-show="!isLoading">
<div class="col">
<div class="row">
<div class="col">
<div class="row m-b-10">
<div class="col-auto">
<div class="font-heading fs-10 muted all-caps">Date</div>
<div class="font-heading fs-10">
{{ item.updated_at }}
</div>
</div>
<!-- <div class="col-auto">
<div class="font-heading fs-10 muted all-caps">Order No</div>
<div class="font-heading fs-10">
</div>
</div> -->
<!-- <div class="col-auto">
<div class="font-heading fs-10 muted all-caps">Marking</div>
<div class="font-heading fs-10">
<a :href="route('customer.profile', item.booking.company.reference)">{{item.booking.company.reference}}</a>
</div>
</div> -->
<div class="col text-right">
<div class="font-heading fs-10 muted all-caps">Amount</div>
<div class="font-heading fs-14 text-success bold">
{{(Math.round((item.amount + Number.EPSILON) * 100) / 100).toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}}
</div>
</div>
</div>
<div class="row m-b-10">
<div class="col">
<div class="font-heading fs-10 muted all-caps">Payment Proof</div>
<div class="row no-margin" v-if="item.payment_method !==5 && item.payment_method !==4">
<div v-for="file in item.documents[0].files" v-bind:key="file.id" class="col-auto no-padding">
<document-file-viewer-component :file="file">
<template slot="button">
<div class="icon-thumbnail fs-11 text-white icon-25 bg-primary btn-rounded float-left m-r-5">
<i class="fa fa-file-image-o fs-10"></i>
</div>
</template>
</document-file-viewer-component>
</div>
</div>
<div class="row no-margin" v-if="item.payment_method ===5">
<div class="col no-padding">
<a :href="route('billplz.bill', item.payment_reference)" target="_blank">
<div class="icon-thumbnail fs-11 text-white icon-25 bg-complete btn-rounded float-left m-r-5">
Bz
</div>
</a>
</div>
</div>
<div class="row no-margin" v-if="item.payment_method ===4">
<div class="col no-padding">
<div class="font-heading fs-10">{{item.payment_reference}}</div>
</div>
</div>
</div>
<!-- <div class="col-auto">
<div class="font-heading fs-10 muted all-caps">Service</div>
<div class="font-heading fs-10">
{{item.booking.service.name}}
</div>
</div> -->
<!-- <div class="col">
<div class="font-heading fs-10 muted all-caps">Booking</div>
<div class="font-heading fs-10">
{{item.original_currency.short_code}} {{(Math.round((item.original_amount + Number.EPSILON) * 100) / 100).toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}}
</div>
</div> -->
<div class="col-auto">
<div class="row">
<div v-if="!no_action" class="col-6 col-md-auto text-right">
<button class="btn btn-xs btn-outline-danger b-rad-none m-r-5 requestModal" data-type="rejectPayment">
<i class="fa fa-times fa-fw"></i>
</button>
<button class="btn btn-xs btn-success b-rad-none requestModal" data-type="approvePayment">
<i class="fa fa-check fa-fw"></i>
</button>
<modal-component small type="rejectPayment">
<div class="row">
<div class="col text-center">
<div class="row">
<div class="col text-center">
<div class="row m-b-20">
<div class="col">
<h5 class="all-caps">Reject Document</h5>
<div class="fs-11">Are you sure you want to reject this payment?</div>
</div>
</div>
<div class="row">
<div class="col p-r-5">
<div data-dismiss="modal" class="btn btn-sm btn-default bg-master-lighter btn-block b-rad-none">Cancel</div>
</div>
<div class="col p-l-5">
<div data-dismiss="modal" class="btn btn-sm btn-danger btn-block b-rad-none" @click="approvePayment('reject')">Reject</div>
</div>
</div>
</div>
</div>
</div>
</div>
</modal-component>
<modal-component small type="approvePayment">
<div class="row">
<div class="col text-center">
<div class="row">
<div class="col text-center">
<div class="row m-b-20">
<div class="col">
<h5 class="all-caps">Approve Payment</h5>
<div class="fs-11">Are you sure you want to approve this payment?</div>
</div>
</div>
<div class="row">
<div class="col p-r-5">
<div data-dismiss="modal" class="btn btn-sm btn-default bg-master-lighter btn-block b-rad-none">Cancel</div>
</div>
<div class="col p-l-5">
<div data-dismiss="modal" class="btn btn-sm btn-success btn-block b-rad-none" @click="approvePayment('approve')">Approve</div>
</div>
</div>
</div>
</div>
</div>
</div>
</modal-component>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import componentHandler from '../../../general/mixins/componentHandler';
import staticFormHandler from '../../../general/mixins/staticFormHandler'
export default {
props: {
no_action: Boolean
},
methods: {
approvePayment(status){
this.isLoading = true;
this.submit(this.route('api.transaction.payment.approval', this.item.id, status), 'put', 'identificationVerificationSection', true, true);
},
},
mixins: [componentHandler, staticFormHandler]
}
</script>
@@ -1,70 +0,0 @@
<template>
<div class="row m-l-0 m-b-10 m-r-0 parentContainer">
<div class="col-auto bg-master-lighter requestModal pointer" data-type="deleteAttempt">
<div class="row align-items-center h-100">
<div class="col">
<i class="fa fa-times muted"></i>
</div>
</div>
</div>
<div class="col bg-white p-t-10 p-b-10 p-r-0">
<div class="row m-b-5">
<div class="col-auto">
<div class="font-heading fs-8 muted all-caps">Payment Amount</div>
<div class="font-heading fs-10 bold">
MYR {{(Math.round((item.original_amount + Number.EPSILON) * 100) / 100).toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}}
</div>
</div>
</div>
</div>
<div class="col-auto p-l-5 p-r-5 bg-success pointer" v-if="item.payment_method === 5">
<a :href="route('billplz.bill', item.payment_reference)">
<div class="row align-items-center h-100">
<div class="col">
<i class="fa fa-repeat fs-20 text-white p-l-10 p-r-10"></i>
</div>
</div>
</a>
</div>
<div class="col-auto p-l-5 p-r-5 bg-success requestModal pointer" v-if="item.payment_method !== 5" data-type="paymentProofModal">
<div @click="selectedID(item.id)" class="row align-items-center h-100">
<div class="col">
<svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" width="30" height="30" viewBox="0 0 172 172" style=" fill:#000000;"><defs><linearGradient x1="86" y1="70.76994" x2="86" y2="116.46013" gradientUnits="userSpaceOnUse" id="color-1_52139_gr1"><stop offset="0" stop-color="#ffffff"></stop><stop offset="1" stop-color="#ffffff"></stop></linearGradient><linearGradient x1="61.8125" y1="34.48869" x2="61.8125" y2="144.97181" gradientUnits="userSpaceOnUse" id="color-2_52139_gr2"><stop offset="0" stop-color="#ffffff"></stop><stop offset="1" stop-color="#ffffff"></stop></linearGradient><linearGradient x1="130.34375" y1="34.48869" x2="130.34375" y2="144.97181" gradientUnits="userSpaceOnUse" id="color-3_52139_gr3"><stop offset="0" stop-color="#ffffff"></stop><stop offset="1" stop-color="#ffffff"></stop></linearGradient><linearGradient x1="86" y1="32.25" x2="86" y2="148.71013" gradientUnits="userSpaceOnUse" id="color-4_52139_gr4"><stop offset="0" stop-color="#ffffff"></stop><stop offset="1" stop-color="#ffffff"></stop></linearGradient></defs><g fill="none" fill-rule="nonzero" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-dasharray="" stroke-dashoffset="0" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode: normal"><path d="M0,172v-172h172v172z" fill="none"></path><g><path d="M102.45825,99.43213h-5.70825c-1.4835,0 -2.6875,1.16637 -2.6875,2.65256v8.10013c0,1.48081 -1.19862,2.68481 -2.67944,2.68481h-10.76612c-1.48081,0 -2.67944,-1.204 -2.67944,-2.68481v-8.10013c0,-1.48619 -1.204,-2.65256 -2.6875,-2.65256h-5.70825c-1.93769,0 -3.04225,-2.39188 -1.88125,-4.05275l14.577,-20.855c1.8275,-2.61494 5.69481,-2.61763 7.52231,-0.00538l14.577,20.86306c1.16369,1.66088 0.05644,4.05006 -1.87856,4.05006z" fill="url(#color-1_52139_gr1)"></path><path d="M51.0625,67.1875h5.375c0,-8.0625 7.23206,-16.12231 16.125,-16.12231v-5.375c-11.85456,0 -21.5,10.74731 -21.5,21.49731z" fill="url(#color-2_52139_gr2)"></path><path d="M139.75,80.625c0,-10.75 -8.44144,-18.80981 -18.8125,-18.80981v5.375c7.40944,0 13.4375,5.37231 13.4375,13.43481z" fill="url(#color-3_52139_gr3)"></path><path d="M148.09738,92.27263c1.59369,-3.68188 2.40263,-7.59219 2.40263,-11.64494c0,-16.29969 -13.26281,-29.5625 -29.5625,-29.5625c-6.5145,0 -12.68769,2.08819 -17.78588,5.96088c-4.30269,-13.03438 -16.52006,-22.08587 -30.58912,-22.08587c-17.78319,0 -32.25,14.46681 -32.25,32.25c0,4.14681 0.16662,8.05981 1.42437,10.74731h-1.42437c-13.33806,0 -24.1875,10.84944 -24.1875,24.1875c0,11.56431 8.16194,21.24737 19.0275,23.62044c1.02394,6.39894 6.53869,11.31706 13.2225,11.31706h56.4375h16.125h5.375c6.54944,0 12.00238,-4.71388 13.18488,-10.92469c9.2235,-1.20131 16.37762,-9.08913 16.37762,-18.63513c0,-6.09256 -2.924,-11.72019 -7.77762,-15.23006zM126.3125,131.6875h-5.375h-16.125h-56.4375c-3.49912,0 -6.45538,-2.6875 -7.568,-5.375h93.0735c-1.11263,2.6875 -4.06888,5.375 -7.568,5.375zM137.0625,120.9375h-96.75c-10.37106,0 -18.8125,-8.44144 -18.8125,-18.8125c0,-10.37106 8.44144,-18.8125 18.8125,-18.8125h9.51375l-1.68506,-3.78131c-2.23063,-5.01488 -2.45369,-7.48737 -2.45369,-12.341c0,-14.81888 12.05613,-26.875 26.875,-26.875c13.01825,0 24.13106,9.29875 26.42619,22.11275l0.92719,5.17075l3.64962,-3.77325c4.60638,-4.76225 10.77687,-7.38525 17.372,-7.38525c13.33806,0 24.1875,10.84944 24.1875,24.1875c0,3.6765 -0.81431,7.21056 -2.37575,10.41944l-1.763,3.32713l2.37037,1.26044c4.40481,2.34081 7.14338,6.88806 7.14338,11.868c0,7.40944 -6.02806,13.43481 -13.4375,13.43481z" fill="url(#color-4_52139_gr4)"></path></g></g></svg>
</div>
</div>
</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="deleteAttempt">
<delete-payment-attempt-form-component :data="item" :section="section" class="text-center"></delete-payment-attempt-form-component>
</modal-component>
<modal-component type="paymentProofModal">
<payment-verification-form-component v-if="selected_id == item.id" :section="section" :data="item"></payment-verification-form-component>
</modal-component>
</div>
</template>
<script>
import componentHandler from '../../../general/mixins/componentHandler';
export default {
data(){
return {
expandPaymentDetails: false,
amount: (Math.round(1000 * 100) / 100).toFixed(2),
selected_id: '',
parameters: {
amount: (Math.round(1000 * 100) / 100).toFixed(2),
bank_id: 1
},
section: 'bookingDetailSection',
}
},
methods: {
clickExpand(){
this.expandPaymentDetails = !this.expandPaymentDetails;
},
selectedID(id){
this.selected_id = id;
}
},
mixins: [componentHandler]
}
</script>
@@ -1,31 +0,0 @@
<template>
<div class="row" @keyup.enter="submitForm">
<div class="col bg-white padding-40 b-rad-lg">
<div class="row">
<div class="col text-center">
<div class="row m-b-20">
<div class="col">
<h5 class="all-caps">Approve Invoice</h5>
<div class="fs-11">Are you sure you want to approve this invoice?</div>
</div>
</div>
<div class="row">
<div class="col p-r-5">
<div data-dismiss="modal" class="btn btn-sm btn-default bg-master-lighter btn-block b-rad-none">Cancel</div>
</div>
<div class="col p-l-5">
<div class="btn btn-success w-100 btn-sm" @click="submit(route('api.transaction.invoice.approve', data.id), 'put', section, true, true)">Confirm</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import modalFormHandler from '../../../general/mixins/modalFormHandler';
export default {
mixins: [modalFormHandler]
}
</script>
@@ -1,33 +0,0 @@
<template>
<div class="row">
<div class="col">
<loading-component style="height: 300px; top: 0;" key="1" color="success" v-show="isLoading" ></loading-component>
<div class="row justify-content-center" v-show="!isLoading">
<div class="col">
<div class="row m-b-20">
<div class="col">
<h3 class="all-caps">Are you Sure?</h3>
<div class="fs-11">Are you sure you want to delete payment booking? you will not be able to recover your booking after confirming your action.</div>
</div>
</div>
<div class="row">
<div class="col p-r-5">
<div class="btn btn-sm btn-success btn-block b-rad-none" data-dismiss="modal">Cancel</div>
</div>
<div class="col p-l-5">
<div class="btn btn-sm btn-danger btn-block b-rad-none" @click="submit(route('api.transaction.suspend', item.id), 'delete', section, true, true)">Delete</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import componentHandler from '../../../general/mixins/componentHandler';
import ModalFormHandler from '../../../general/mixins/modalFormHandler';
export default {
mixins: [componentHandler, ModalFormHandler]
}
</script>
@@ -1,171 +0,0 @@
<template>
<div class="row align-items-center">
<div class="col">
<div class="row bg-white b-a b-grey rounded padding-10" v-if="!isEdit">
<div class="col">
<div class="row align-items-center">
<div class="col-auto"><div class="icon-thumbnail icon-35 mr-0 bg-master-lightest light">{{index + 1}}</div></div>
<div class="col">
<p class="m-b-0 small muted">Name</p>
<p class="m-b-0 bold">{{product.name}}</p>
</div>
<div class="col">
<p class="m-b-0 small muted">Unit Price</p>
<p class="m-b-0 bold">{{product.price}}</p>
</div>
<div class="col">
<p class="m-b-0 small muted">Quantity</p>
<p class="m-b-0 bold">{{product.quantity}}</p>
</div>
<div class="col">
<p class="m-b-0 small muted">Total</p>
<p class="m-b-0 bold text-success">{{currency}} {{(Math.round((productTotal + Number.EPSILON) * 100) / 100).toFixed(2)}}</p>
</div>
<div class="col-auto" :class="{ 'invisible': ['SHIPPING_FEE', 'OVER_WEIGHT_CHARGES'].includes(product.reference) }">
<div @click="isEdit = !isEdit" class="pointer">
<i class="fa fa-pencil" />
</div>
</div>
<div class="col-auto" :class="{ 'invisible': ['SHIPPING_FEE', 'OVER_WEIGHT_CHARGES'].includes(product.reference) }">
<div @click="$emit('remove')" class="pointer">
<i class="fa fa-close" />
</div>
</div>
</div>
</div>
</div>
<div class="row" v-if="isEdit">
<div class="col padding-25 bg-master-lightest">
<div class="row">
<div class="col">
<validation-wrapper-component :validator="$v.product.name">
<label>Name</label>
<input class="form-control" v-model="product.name">
</validation-wrapper-component>
</div>
<div class="col">
<validation-wrapper-component :validator="$v.product.price">
<label>Unit Price</label>
<input class="form-control" v-model="product.price">
<!-- <input class="form-control" v-model="product.price" v-money="{decimal: '.',thousands: '', precision: 2}"> -->
</validation-wrapper-component>
</div>
<div class="col">
<validation-wrapper-component :validator="$v.product.quantity">
<label>Quantity</label>
<!-- <input class="form-control" v-model="product.quantity" v-money="{decimal: '.',thousands: '', precision: 2}"> -->
<input class="form-control" v-model="product.quantity" >
</validation-wrapper-component>
</div>
</div>
<p>{{ data }}</p>
<div class="row m-t-15">
<div class="col">
<p class="m-b-0 small">Total</p>
<h6 class="no-margin bold text-complete">{{currency}} {{productTotal.toFixed(3)}}</h6>
</div>
<div class="col text-right">
<button class="btn btn-lg btn-secondary b-rad-none" @click="cancelUpdate()">Cancel</button>
<button class="btn btn-lg btn-outline-success b-rad-none" @click="updateProduct()">Save Changes</button>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import formHandler from '../../../general/mixins/formHandler';
import { required } from "vuelidate/lib/validators";
export default {
props: {
editable: {
type: Boolean,
default: false
},
currency:{
type: String,
required: true
},
index:{
type: Number,
// required: true
default: 0
},
},
data(){
return {
isEdit: false,
product: {
name: '',
quantity: 0,
price: 0,
amount: 0,
},
products: []
}
},
validations: {
product: {
name: { required },
quantity: { required },
price: { required },
}
},
created() {
if (this.data) {
this.product = this.data;
} else {
this.isEdit = true;
}
this.product.amount = (Math.round((this.product.amount+ Number.EPSILON) * 1000) / 1000).toFixed(3);
},
computed: {
productTotal(){
return this.product.quantity * parseFloat((this.product.price).toString().replace(',', ''));
},
},
methods: {
clearInterval(){
clearInterval(this.interval);
this.interval = false;
},
updateProduct(){
if (!this.data) {
this.$emit('add', {
name: this.product.name,
quantity: this.product.quantity,
reference: 'CUSTOM_CHARGES',
price: parseFloat((this.product.price).toString().replace(',', '')),
amount: this.productTotal
});
} else {
this.isEdit = !this.isEdit;
console.log(this.data.reference);
this.$emit('change', {
name: this.product.name,
quantity: this.product.quantity,
reference: this.data.reference,
price: parseFloat((this.product.price).toString().replace(',', '')),
amount: this.productTotal
}, this.index);
}
},
cancelUpdate() {
if (!this.data) {
this.$emit('change', 'cancelAddProduct', true);
} else {
this.isEdit = !this.isEdit;
this.product = this.data;
}
}
},
mixins: [formHandler]
}
</script>
@@ -1,79 +0,0 @@
<template>
<div class="row">
<div class="col">
<div class="row no-margin">
<div class="col p-b-15 p-l-0 p-r-0">
<div class="row">
<div class="col">
<div class="row" v-for="(detail, index) in details">
<div class="col p-b-10 p-t-10 " :class="[{'b-grey' : index !== Object.keys(details).length - 1}, {'b-b' : index !== Object.keys(details).length - 1}]">
<invoice-item-form-component :data="detail" :index="index" currency="MYR" :editable="!submitted" :section="section" @change="updateProduct($event, index)" v-on:remove="removeProduct(index)"></invoice-item-form-component>
</div>
</div>
</div>
</div>
<div class="row" v-if="addCharges">
<div class="col">
<invoice-item-form-component currency="MYR" :editable="!submitted" :section="section" @change="addCharges = !addCharges" @add="addProduct($event)" v-on:remove="removeProduct(index)"></invoice-item-form-component>
</div>
</div>
<div class="row d-flex justify-content-center allign-items-between align-items-center m-b-15">
<div class="col-auto">
<div class="btn btn-outline-primary btn-md" @click="addCharges = !addCharges">{{ addCharges? 'Cancel' : 'Add Charges' }}</div>
<div class="btn btn-outline-primary btn-md" @click="submitForm()">Save Change</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import formHandler from '../../../general/mixins/formHandler';
export default {
data(){
return {
interval:false,
addCharges:false,
canSubmitChanges:false,
submitted: false,
details: this.data.details,
canSaveChange: false,
parameters: {
transaction_details: []
},
}
},
methods: {
updateProduct(product, index) {
this.details[index] = {
name: product.name,
quantity: product.quantity,
reference: product.reference,
price: parseFloat((product.price).toString().replace(',', '')),
amount: parseFloat((product.amount).toString().replace(',', '')),
};
},
removeProduct(index) {
this.canSubmitChanges = !this.canSubmitChanges;
this.data.details.splice(index, 1);
},
addProduct(newProduct) {
this.canSubmitChanges = !this.canSubmitChanges;
this.addCharges = !this.addCharges;
this.details.push(newProduct);
},
submitForm() {
this.canSubmitChanges = !this.canSubmitChanges;
this.parameters.transaction_details = this.details;
console.log(this.parameters.transaction_details);
this.submit(this.route('api.transaction.invoice.update', this.data.id), 'put', this.section, true, true);
}
},
mixins: [formHandler]
}
</script>
@@ -1,49 +0,0 @@
<template>
<div class="row" @keyup.enter="submitForm">
<div class="col">
<div class="row bg-white padding-40 b-rad-lg">
<div class="col">
<h3 class="text-center m-b-15">Outstanding: MYR <span class="text-success bold">{{ data.outstanding.toFixed(2) }}</span></h3>
<validation-wrapper-component :validator="$v.parameters.amount">
<label>Amount</label>
<input class="form-control" v-model="parameters.amount" v-money="{decimal: '.',thousands: '', precision: 2}">
</validation-wrapper-component>
<div class="row m-t-15 w-100 text-center">
<div class="col">
<button class="btn btn-lg btn-primary" @click="submitForm()" data-dismiss="modal">Make Payment</button>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import formHandler from '../../../general/mixins/formHandler';
import { required } from "vuelidate/lib/validators";
export default {
data(){
return {
parameters : {
amount: this.data.outstanding.toFixed(2),
transaction_id: this.data.id
}
}
},
validations: {
parameters : {
amount: { required },
},
},
methods:{
submitForm(){
this.submit(this.route('api.transaction.payment.create'), 'post', this.section, true, true);
}
},
mixins: [formHandler]
}
</script>
@@ -1,84 +0,0 @@
<template>
<div class="row" @keyup.enter="submitForm">
<div class="col">
<loading-component style="height: 200px; top: 0;" key="1" color="success" v-show="$store.getters.isLoading(section)"></loading-component>
<div class="row" v-show="!$store.getters.isLoading(section)">
<div class="col">
<div class="row m-b-10">
<div class="col">
<div class="font-heading fs-16 all-caps bold m-b-15">Payment Verification</div>
</div>
</div>
<div class="row m-b-10">
<div class="col">
<div class="row align-items-top">
<div class="col">
<div class="font-heading fs-10 muted all-caps">You are Paying</div>
<div class="font-heading fs-16 bold text-success">
{{data.currency.short_code}} {{(Math.round((data.amount + Number.EPSILON) * 100) / 100).toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}}
</div>
</div>
</div>
</div>
</div>
<error-message-component class="m-b-20" :error="error"></error-message-component>
<div class="row">
<div class="col">
<file-input-component :validator="$v.files" v-model="files">
<template slot="label">
<div class="font-heading fs-11 text-primary all-caps">Payment Proof</div>
</template>
</file-input-component>
</div>
</div>
<div class="row m-t-20">
<div class="col">
<div class="row">
<div class="col-auto">
<button type="button" class="btn btn-sm bg-master-lighter p-t-10 p-b-10 p-r-35 p-l-35 btn-default b-rad-none" data-dismiss="modal">Cancel</button>
</div>
<div class="col text-right">
<button type="button" class="btn btn-sm p-t-10 p-b-10 p-r-35 p-l-35 btn-success b-rad-none" @click="submitForm">Save and continue</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import ModalFromHandler from '../../../general/mixins/modalFormHandler'
import { required } from "vuelidate/lib/validators";
export default {
// props: {
// id: {
// required: true,
// type: Number
// }
// },
data(){
return {
files: [],
parameters: {}
}
},
validations: {
files: {
required
}
},
methods: {
submitForm(){
this.parameters = {
files: this.files
};
this.submit(this.route('api.transaction.payment.verification.create', this.data.id), 'post', this.section, true, true)
}
},
mixins: [ModalFromHandler]
}
</script>
File diff suppressed because one or more lines are too long
@@ -27,7 +27,7 @@
</div>
<div class="row">
<div class="col">
<div class="font-heading all-caps">MYR {{item.price[data.id].amount}} <i class="fa fa-edit pointer fa-fw m-l-5 requestModal text-primary" data-type="editSegmentPrice"></i></div>
<div class="font-heading all-caps">MYR 0.00 <i class="fa fa-edit pointer fa-fw m-l-5 requestModal text-primary" data-type="editSegmentPrice"></i></div>
<modal-component class="animate__animated animate__fast animate__fadeIn" type="editSegmentPrice">
<edit-segment-price-form-component :data="item" :section="section"></edit-segment-price-form-component>
</modal-component>
@@ -9,7 +9,7 @@
<validation-wrapper-component class="m-b-15" :validator="$v.parameters.value.amount">
<label class="text-primary">Segment Price (MYR)</label>
<div class="controls">
<input type="text" class="form-control fs-12" v-model.trim="parameters.price[data.id].amount" v-money="money">
<input type="text" class="form-control fs-12" v-model.trim="parameters.value.amount" v-money="money">
</div>
</validation-wrapper-component>
<div class="row m-t-15">
@@ -41,9 +41,8 @@
return {
parameters: {
reference: 'CUSTOM_PRICE',
id: this.data.id,
value : {
amount: this.data.price[this.data.id].amount
amount: 0
}
}
};
+1 -127
View File
@@ -11,135 +11,9 @@
body {
font-family: sun-extA;
padding: 0;
}
.header {
margin-top: 5em;
}
.separator {
text-align: right;
border-bottom: 0.5px solid black;
font-size: 0.7em;
}
img.logo {
top: 10px;
}
img {
height: 6em;
width: 9em;
}
.title {
font-size: 2em;
font-weight: 1200;
}
.details {
display: inline-block;
position: relative;
}
.sub-title {
font-size: 1.3em;
font-weight: bold;
}
.label {
font-size: 1.1em;
font-weight: bold;
}
.bill-to {
margin-top: 30px;
}
table {
width: 100%;
vertical-align: top;
}
th {
border-bottom: 1px solid black;
}
td {
padding: 0.4em;
/* text-align: center; */
}
td.title {
text-align: left;
}
td.description,
th.description {
text-align: justify;
max-width: 40em;
}
td.stock-code,
th.stock-code {
text-align: center;
}
th {
vertical-align: middle;
}
td,
th {
/* margin-top: 0.6em;
margin-right: 0.6em; */
}
.subtotal td {
border-top: 1px solid black;
}
.total {
border-top: 1px solid black;
border-bottom: 3px double black;
font-weight: bolder;
}
.address {}
*/ td.header-logo {
/* text-align: left; */
width: fit-content;
}
td.header-cief-address {
text-align: left;
margin-left: -30px;
}
td.header-details {
text-align: left;
vertical-align: top;
}
td.bill-to {
text-align: left;
}
td.document-detail {
text-align: left;
border: 1px solid black;
padding: 1em 1em 1em 1em;
width: 16em;
}
td.address {
text-align: left;
}
.right {
text-align: right;
}
</style>
</head>
@@ -1,4 +0,0 @@
@extends('layouts.base_portal')
@section('inner_content')
<delivery-orders-section-component></delivery-orders-section-component>
@endsection
File diff suppressed because one or more lines are too long
@@ -1,10 +1,6 @@
@extends('layouts.base_pdf')
@section('inner_content')
<br>
<htmlpageheader name="page-header">
<br><br>
<div class="separator"><strong><i>{{ $invoice_transaction->bill_no }}</i></strong></div>
</htmlpageheader>
<table>
<tr>
<td class="header-logo">
@@ -17,28 +13,27 @@
</strong>
</span>
<span class="company-reg">(1134596-M)</span><br>
No. 72-3, Jalan Jalil 1,<br>
The Earth Bukit Jalil,<br>
57000 Kuala Lumpur<br>
Tel: 03-8082 1252
Malaysian Global Innovation &amp; Creativity Center <br>
Level 1 CWS, Block 3730, Persiaran APEC, <br>
63000 Cyberjaya, Malaysian. <br>
Tel: 018-2909252
</td>
<td class="header-details">
<div class="title" style="font-size: 20px; text-transform: uppercase;">
<h2 class="title">
<strong>
Invoice
</strong>
</div>
</h2>
<div class="number">Invoice No: {{ $invoice_transaction->bill_no }}</div>
<div class="number">INV. NO. {{ $invoice_transaction->bill_no }}</div>
@php
$companyModule = $invoice_transaction->owner->owner->companyModule;
@endphp
<div class="date">Date: {{ $invoice_transaction->created_at }}</div>
<div class="ref">Order No: {{ $invoice_transaction->owner->owner->reference }}</div>
<div class="ref">Container Ref: {{ $invoice_transaction->owner->containers()->first()->reference }}</div>
{{--<div class="d-none">{{ $companyModule->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference }}</div>--}}
<div class="ref">Ref# {{ $invoice_transaction->owner->owner->reference }}</div>
<!-- <div class="d-none">{{ $companyModule->inviters()->withPivot('invitee_reference')->first()->pivot->invitee_reference }}</div> -->
<div class="date">Date: {{ $invoice_transaction->created_at->format('d-m-Y') }}</div>
<div>&nbsp;</div>
</div>
</td>
@@ -57,7 +52,7 @@
</div>
<div class="address">
@php
$addresses = $companyModule->addresses()->where('status', '=', \App\Classes\ValueObjects\Constants\ApprovalStatus::APPROVED)->where('type', '=', \App\Classes\ValueObjects\Constants\AddressType::BILLING)->first();
$addresses = $invoice_transaction->owner->owner->addresses()->where('status', '=', 2)->first();
@endphp
{{ $addresses->street_one }}
{{ $addresses->street_two }} ,
@@ -83,53 +78,53 @@
<tr>
<th width="5%">No</th>
<th class="description">Description</th>
<th width="15%">Quantity</th>
<th width="20%">Unit Price (RM)</th>
<th width="20%">Total Amount<br>(RM)</th>
<th width="10%">Quantity</th>
<th width="15%">Unit Price (RM)</th>
<th width="10%">Total Amount<br>(RM)</th>
</tr>
</thead>
<tbody>
@foreach ($invoice_transaction->transactionDetails as $key => $transaction_detail)
<tr>
<td width="5%" class="center top">{{ $key + 1 }}</td>
<td class="description">{!! $transaction_detail->name !!}</td>
<td width="15%" class="center top" style="text-align: center">{{ round($transaction_detail->quantity, 3) }}</td>
<td width="20%" class="center top" style="text-align: center">
{{ round($transaction_detail->price, 2) }}
<td class="description">{{ $transaction_detail->name }}</td>
<td width="10%" class="center top">{{ $transaction_detail->quantity }}</td>
<td width="15%" class="center top">
{{ $transaction_detail->price }}
</td>
<td width="20%" class="right top">
{{ round($transaction_detail->amount, 2) }}
{{ $transaction_detail->amount }}
</td>
</tr>
@endforeach
</tbody>
<tfoot>
<tr class="subtotal">
<td colspan="3"></td>
<td colspan="4"></td>
<td class="right middle">Subtotal</td>
<td class="right middle">
{{ round($invoice_transaction->amount, 2) }}
{{ number_format($invoice_transaction->amount, 2) }}
</td>
</tr>
<tr class="billingcharges">
<td colspan="3"></td>
<td colspan="4"></td>
<td class="right">Service Charges</td>
<td class="right">
{{ round($invoice_transaction->service_charge, 2) }}
{{ number_format($invoice_transaction->service_charge, 2) }}
</td>
</tr>
@if($invoice_transaction->tax > 0)
<tr class="billingcharges">
<td colspan="3"></td>
<td colspan="4"></td>
<td class="right">Tax</td>
<td class="right">{{ number_format($invoice_transaction->tax, 2) }}</td>
</tr>
@endif
<tr>
<td colspan="3"></td>
<td colspan="4"></td>
<td class="right middle">Total</td>
<td class="total right middle">
{{ round($invoice_transaction->amount, 2) }}
{{ number_format($invoice_transaction->amount, 2) }}
</td>
</tr>
</tfoot>
+1 -1
View File
@@ -285,7 +285,7 @@
<div class="row m-b-20">
<div class="col">
<!-- <list-component section="segmentsSection" :endpoint="route('api.segment.list')" :options="{'type': 2}"> -->
<list-component section="segmentsSection" :endpoint="route('api.segment.list')" :options="{'id_not': 1}">
<list-component section="segmentsSection" :endpoint="route('api.segment.list')">
<template slot="list" slot-scope="{data}">
<segment-component :data="data" section="segmentsSection"></segment-component>
</template>
+1 -1
View File
@@ -10,7 +10,7 @@
</div>
</div>
</div>
<div class="col-auto hide">
<div class="col-auto">
<notification-section-component section="section"></notification-section-component>
</div>
<div class="col-auto p-r-20 d-md-none">
File diff suppressed because one or more lines are too long
+4 -4
View File
@@ -11,10 +11,10 @@ Route::group(['prefix' => 'company', 'as' => 'company.', 'namespace' => 'Compani
Route::post('/team/create', 'AddNewMemberController@create')->name('team.create');
// Route::group(['prefix' => '{id}/segment', 'as' => 'segment.'], function () {
// Route::post('/assign', 'AssignCompanyToSegmentController@assign')->name('assign');
// Route::delete('/detach/{segment_id}', 'RemoveCompanyFromSegmentController@detach')->name('detach');
// });
Route::group(['prefix' => '{id}/segment', 'as' => 'segment.'], function () {
Route::post('/assign', 'AssignCompanyToSegmentController@assign')->name('assign');
Route::delete('/detach/{segment_id}', 'RemoveCompanyFromSegmentController@detach')->name('detach');
});
Route::group(['prefix' => '{id}/connection/{company_connection_id}', 'as' => 'connection.'], function () {
Route::post('/assign', 'AssignCompanyConnectionToConnectionSegmentController@assign')->name('assign');
-2
View File
@@ -9,8 +9,6 @@ Route::group(['prefix' => 'segment', 'as' => 'segment.', 'namespace' => 'Segment
Route::put('/update/{id}', 'UpdateSegmentController@update')->name('update');
Route::get('/list', 'ListSegmentsController@list')->name('list');
Route::get('/air-shipment/item-price/list', 'ListAirShipmentPriceController@list')->name('air_shipment.price.list');
Route::group(['prefix' => '{id}/constant', 'as' => 'constant.'], function () {
Route::put('/service/update', 'UpdateCustomServiceConstantController@update')->name('service.update');
Route::put('/update', 'UpdateConstantController@update')->name('update');
+6 -13
View File
@@ -5,21 +5,14 @@ use Illuminate\Support\Facades\Route;
Route::group(['prefix' => 'transactions', 'namespace' => 'Transactions', 'as' => 'transaction.'], function () {
Route::get('/list', 'ListTransactionsController@list')->name('list');
Route::delete('/suspend/{id}', 'SuspendTransactionController@suspend')->name('suspend');
// Route::delete('/suspend/{id}', 'SuspendTransactionController@suspend')->name('suspend');
Route::group(['prefix' => 'payment', 'as' => 'payment.'], function () {
Route::post('/create', 'CreatePaymentTransactionController@create')->name('create');
Route::post('/upload-verification-document/{transaction_id}', 'UploadPaymentVerificationDocumentController@upload')->name('verification.create');
Route::put('/approve/{transaction_id}/{status}', 'ApprovePaymentTransactionController@approve')->where('status', 'approve|reject')->name('approval');
});
Route::group(['prefix' => 'invoice', 'as' => 'invoice.'], function () {
route::post('/shipping-invoice/create', 'CreateShippingInvoiceTransactionController@create')->name('create');
route::put('/shipping-invoice/{id}/update', 'UpdateShippingInvoiceTransactionController@update')->name('update');
route::put('/shipping-invoice/{id}/approve', 'ApproveShippingInvoiceTransactionController@approve')->name('approve');
});
Route::post('/payment/create', 'CreatePaymentTransactionController@create')->name('payment.create');
Route::post('/payment/upload-verification-document/{transaction_id}', 'UploadPaymentVerificationDocumentController@upload')->name('verification.create');
Route::put('/payment/approve/{transaction_id}/{status}', 'ApprovePaymentTransactionController@approve')->where('status', 'approve|reject')->name('approval');
route::post('/shipping-invoice/calculator', 'ShippingEstimationCalculatorController@calculate')->name('shipping.estimation.calculator');
route::post('/shipping-invoice/create', 'CreateShippingInvoiceTransactionController@create')->name('supplier.create');
// Route::group(['prefix' => '{id}/payment', 'as' => 'payment.'], function () {
// Route::post('quotation', 'FetchBookingPaymentQuotationController@fetch')->name('quotation');
+13 -57
View File
@@ -7,7 +7,6 @@ use App\Classes\Jobs\FetchOrdersFromYDPortalJob;
use App\Classes\Jobs\FetchPackingListFromVTPortalJob;
use App\Classes\Jobs\FetchWarehouseReceiveListFromVTPortalJob;
use App\Classes\Modules\PackingLists\Processors\FetchOrderListsFromYdPortalProcessor;
use App\Classes\Modules\PackingLists\Processors\FetchPackingListFromVTPortalProcessor;
use App\Models\CompanyConnection;
use App\Models\CompanyModule;
use Illuminate\Support\Facades\Crypt;
@@ -56,16 +55,6 @@ Route::group(['prefix'=> '/last_mile_delivery', 'as' => 'last_mile_delivery.'],
});
Route::group(['prefix'=> '/air_shipment', 'as' => 'air_shipment.'], function () {
// Route::get('/', function () {
// return view('pages.accounts.signup');
// })->name('login');
Route::get('/quotation', function () {
return view('pages.airShipment.quotation');
})->name('quotation');
});
Route::get('', function () {
return view('pages.accounts.login');
})->name('login');
@@ -153,14 +142,13 @@ Route::get('/customer/{marking}/details', function ($marking) {
return view('pages.customers.profile_details', ['id' => $id]);
})->name('customer.profile.details');
Route::get('/orders/refresh', function(\Illuminate\Http\Request $request){
$packingLists = \App\Models\PackingList::where('type', \App\Classes\ValueObjects\Constants\PackingListType::WAREHOUSE_RECEIVE_LIST)->has('containers')->get();
dd($packingLists);
$packingLists->each(function (\App\Models\PackingList $packingList) {
$packingList->containers()->detach();
});
Route::get('/orders/refresh', function(){
FetchWarehouseReceiveListFromVTPortalJob::withChain([
new FetchLoadedContainersFromVTPortalJob,
new FetchPackingListFromVTPortalJob,
new FetchContainersStatusUpdateFromVTPortalJob,
new FetchDeliveryListFromVTPortalJob,
new FetchOrdersFromYDPortalJob
])->dispatch();
@@ -170,7 +158,7 @@ Route::get('/orders/refresh', function(\Illuminate\Http\Request $request){
Route::get('/containers/refresh', function(){
dd((App()->make(\App\Classes\Modules\PackingLists\Processors\FetchLoadedContainersFromVTPortalProcessor::class))->execute());
(App()->make(\App\Classes\Modules\PackingLists\Processors\FetchWarehouseReceiveListFromVTPortalProcessor::class))->execute();
// FetchLoadedContainersFromVTPortalJob::dispatch();
// FetchContainersStatusUpdateFromVTPortalJob::dispatch();
@@ -245,35 +233,9 @@ Route::get('/debug', function (){
dd($issues);
});
Route::get('/yd', function (\Illuminate\Http\Request $request){
$start = $request->input('start_date') ? \Carbon\Carbon::parse($request->input('start_date')): null;
$end = $request->input('end_date') ? \Carbon\Carbon::parse($request->input('end_date')): null;
(App()->make(FetchOrderListsFromYdPortalProcessor::class))->execute($start, $end);
(App()->make(FetchPackingListFromVTPortalProcessor::class))->execute();
})->name('yd.refresh');
Route::get('/container/{reference}/refresh/', function (string $reference){
$container = Container::where('reference', $reference)->first();
$supplier = in_array($container->owner_id, [3, 4]) ? 'VT' : 'YD';
$arrivalDates = \App\Models\PackingList::whereIn('reference', $container->packingLists->pluck('reference'))->where('type', \App\Classes\ValueObjects\Constants\PackingListType::WAREHOUSE_RECEIVE_LIST)->get()->map(function($packingList){
return $packingList->transports()->first()->drop_date;
})->sortBy(function($date){
return $date;
});
$startDate = $arrivalDates->first()->subDay()->format('d-m-Y');
$endDate = $arrivalDates->last()->addDay()->format('d-m-Y');
if($supplier === 'VT'){
return (App()->make(\App\Classes\Modules\PackingLists\Processors\FetchLoadedContainersFromVTPortalProcessor::class))->execute(\Carbon\Carbon::parse($endDate), \Carbon\Carbon::parse($endDate)->addDays(5));
}
if($supplier === 'YD'){
return redirect(route('yd.refresh').'?start_date='.$startDate.'&end_date='.$endDate);
}
})->name('container.refresh');
Route::get('/yd', function (){
(App()->make(FetchOrderListsFromYdPortalProcessor::class))->execute();
});
Route::get('/min_cbm', function (){
$companies = CompanyModule::where('type', \App\Classes\ValueObjects\Constants\BusinessType::IMPORTER)->whereHas('orders', function ($query){
@@ -316,7 +278,8 @@ Route::get('/settings', function () {
Route::get('/customer/{company_module_id}/summary', 'Exports\ExportCompanyModuleSummaryController@export')->name('customer.summary.export');
Route::get('/customer/summary/monthly', function () {
$containers = Container::whereMonth('loading_date', '>=', ((float)\Carbon\Carbon::now()->format('m') - 2))->whereYear('loading_date', (float)\Carbon\Carbon::now()->format('Y'))->get();
// $containers = Container::whereMonth('loading_date', 1)->where('owner_id', 3)->get();
$containers = Container::whereIn('reference', ['EPS-3850', 'EPS-3863', 'WP-1331', 'EPS-3856'])->get();
foreach ($containers as $container){
$packingLists = $container->packingLists()->get()->filter(function ($packingList) {
return $packingList->owner->company_module_id === 248;
@@ -324,7 +287,7 @@ Route::get('/customer/summary/monthly', function () {
if (!count($packingLists)) continue;
echo '<table style="width: 100%; text-align: center;">
echo '<table>
<tr>
<th>Date</th>
<th>Full Marking</th>
@@ -343,7 +306,7 @@ Route::get('/customer/summary/monthly', function () {
$packages = $packingList->packages;
foreach ($packages as $package){
echo '<tr>
<td>'.$container->loading_date->format('d-m-Y').'</td>
<td>-</td>
<td>MS/CIEF/769SMC/'.$packingList->owner->reference.'</td>
<td>'.$container->reference.'</td>
<td>'.$package->description.'</td>
@@ -410,11 +373,4 @@ Route::get('/customers/active/{active_start}/{active_end}/{inactive_start?}/{ina
Route::get('/online_payment/redirect', 'Billplz\CallbackBillplzController@callback')->name('online_payment.redirect');
Route::get('/order/{id}', function ($id) {
return view('pages.orders.profile', ['id' => $id]);
})->name('order.details');
Route::get('/payment-and-billing', function () {
return view('pages.paymentAndBilling');
})->name('admin.payment-and-billing');
Route::get('/notifications/list', 'Notifications\ListNotificationsController@list')->name('notifications.list');
+572
View File
@@ -0,0 +1,572 @@
<?php return array (
'codeToName' =>
array (
32 => 'space',
160 => 'space',
33 => 'exclam',
34 => 'quotedbl',
35 => 'numbersign',
36 => 'dollar',
37 => 'percent',
38 => 'ampersand',
146 => 'quoteright',
40 => 'parenleft',
41 => 'parenright',
42 => 'asterisk',
43 => 'plus',
44 => 'comma',
45 => 'hyphen',
173 => 'hyphen',
46 => 'period',
47 => 'slash',
48 => 'zero',
49 => 'one',
50 => 'two',
51 => 'three',
52 => 'four',
53 => 'five',
54 => 'six',
55 => 'seven',
56 => 'eight',
57 => 'nine',
58 => 'colon',
59 => 'semicolon',
60 => 'less',
61 => 'equal',
62 => 'greater',
63 => 'question',
64 => 'at',
65 => 'A',
66 => 'B',
67 => 'C',
68 => 'D',
69 => 'E',
70 => 'F',
71 => 'G',
72 => 'H',
73 => 'I',
74 => 'J',
75 => 'K',
76 => 'L',
77 => 'M',
78 => 'N',
79 => 'O',
80 => 'P',
81 => 'Q',
82 => 'R',
83 => 'S',
84 => 'T',
85 => 'U',
86 => 'V',
87 => 'W',
88 => 'X',
89 => 'Y',
90 => 'Z',
91 => 'bracketleft',
92 => 'backslash',
93 => 'bracketright',
94 => 'asciicircum',
95 => 'underscore',
145 => 'quoteleft',
97 => 'a',
98 => 'b',
99 => 'c',
100 => 'd',
101 => 'e',
102 => 'f',
103 => 'g',
104 => 'h',
105 => 'i',
106 => 'j',
107 => 'k',
108 => 'l',
109 => 'm',
110 => 'n',
111 => 'o',
112 => 'p',
113 => 'q',
114 => 'r',
115 => 's',
116 => 't',
117 => 'u',
118 => 'v',
119 => 'w',
120 => 'x',
121 => 'y',
122 => 'z',
123 => 'braceleft',
124 => 'bar',
125 => 'braceright',
126 => 'asciitilde',
161 => 'exclamdown',
162 => 'cent',
163 => 'sterling',
165 => 'yen',
131 => 'florin',
167 => 'section',
164 => 'currency',
39 => 'quotesingle',
147 => 'quotedblleft',
171 => 'guillemotleft',
139 => 'guilsinglleft',
155 => 'guilsinglright',
150 => 'endash',
134 => 'dagger',
135 => 'daggerdbl',
183 => 'periodcentered',
182 => 'paragraph',
149 => 'bullet',
130 => 'quotesinglbase',
132 => 'quotedblbase',
148 => 'quotedblright',
187 => 'guillemotright',
133 => 'ellipsis',
137 => 'perthousand',
191 => 'questiondown',
96 => 'grave',
180 => 'acute',
136 => 'circumflex',
152 => 'tilde',
175 => 'macron',
168 => 'dieresis',
184 => 'cedilla',
151 => 'emdash',
198 => 'AE',
170 => 'ordfeminine',
216 => 'Oslash',
140 => 'OE',
186 => 'ordmasculine',
230 => 'ae',
248 => 'oslash',
156 => 'oe',
223 => 'germandbls',
207 => 'Idieresis',
233 => 'eacute',
159 => 'Ydieresis',
247 => 'divide',
221 => 'Yacute',
194 => 'Acircumflex',
225 => 'aacute',
219 => 'Ucircumflex',
253 => 'yacute',
234 => 'ecircumflex',
220 => 'Udieresis',
218 => 'Uacute',
203 => 'Edieresis',
169 => 'copyright',
229 => 'aring',
224 => 'agrave',
227 => 'atilde',
154 => 'scaron',
237 => 'iacute',
251 => 'ucircumflex',
226 => 'acircumflex',
231 => 'ccedilla',
222 => 'Thorn',
179 => 'threesuperior',
210 => 'Ograve',
192 => 'Agrave',
215 => 'multiply',
250 => 'uacute',
255 => 'ydieresis',
238 => 'icircumflex',
202 => 'Ecircumflex',
228 => 'adieresis',
235 => 'edieresis',
205 => 'Iacute',
177 => 'plusminus',
166 => 'brokenbar',
174 => 'registered',
200 => 'Egrave',
142 => 'Zcaron',
208 => 'Eth',
199 => 'Ccedilla',
193 => 'Aacute',
196 => 'Adieresis',
232 => 'egrave',
211 => 'Oacute',
243 => 'oacute',
239 => 'idieresis',
212 => 'Ocircumflex',
217 => 'Ugrave',
254 => 'thorn',
178 => 'twosuperior',
214 => 'Odieresis',
181 => 'mu',
236 => 'igrave',
190 => 'threequarters',
153 => 'trademark',
204 => 'Igrave',
189 => 'onehalf',
244 => 'ocircumflex',
241 => 'ntilde',
201 => 'Eacute',
188 => 'onequarter',
138 => 'Scaron',
176 => 'degree',
242 => 'ograve',
249 => 'ugrave',
209 => 'Ntilde',
245 => 'otilde',
195 => 'Atilde',
197 => 'Aring',
213 => 'Otilde',
206 => 'Icircumflex',
172 => 'logicalnot',
246 => 'odieresis',
252 => 'udieresis',
240 => 'eth',
158 => 'zcaron',
185 => 'onesuperior',
128 => 'Euro',
),
'isUnicode' => false,
'FontName' => 'Helvetica',
'FullName' => 'Helvetica',
'FamilyName' => 'Helvetica',
'Weight' => 'Medium',
'ItalicAngle' => '0',
'IsFixedPitch' => 'false',
'CharacterSet' => 'ExtendedRoman',
'FontBBox' =>
array (
0 => '-166',
1 => '-225',
2 => '1000',
3 => '931',
),
'UnderlinePosition' => '-100',
'UnderlineThickness' => '50',
'Version' => '002.000',
'EncodingScheme' => 'WinAnsiEncoding',
'CapHeight' => '718',
'XHeight' => '523',
'Ascender' => '718',
'Descender' => '-207',
'StdHW' => '76',
'StdVW' => '88',
'StartCharMetrics' => '317',
'C' =>
array (
32 => 278.0,
160 => 278.0,
33 => 278.0,
34 => 355.0,
35 => 556.0,
36 => 556.0,
37 => 889.0,
38 => 667.0,
146 => 222.0,
40 => 333.0,
41 => 333.0,
42 => 389.0,
43 => 584.0,
44 => 278.0,
45 => 333.0,
173 => 333.0,
46 => 278.0,
47 => 278.0,
48 => 556.0,
49 => 556.0,
50 => 556.0,
51 => 556.0,
52 => 556.0,
53 => 556.0,
54 => 556.0,
55 => 556.0,
56 => 556.0,
57 => 556.0,
58 => 278.0,
59 => 278.0,
60 => 584.0,
61 => 584.0,
62 => 584.0,
63 => 556.0,
64 => 1015.0,
65 => 667.0,
66 => 667.0,
67 => 722.0,
68 => 722.0,
69 => 667.0,
70 => 611.0,
71 => 778.0,
72 => 722.0,
73 => 278.0,
74 => 500.0,
75 => 667.0,
76 => 556.0,
77 => 833.0,
78 => 722.0,
79 => 778.0,
80 => 667.0,
81 => 778.0,
82 => 722.0,
83 => 667.0,
84 => 611.0,
85 => 722.0,
86 => 667.0,
87 => 944.0,
88 => 667.0,
89 => 667.0,
90 => 611.0,
91 => 278.0,
92 => 278.0,
93 => 278.0,
94 => 469.0,
95 => 556.0,
145 => 222.0,
97 => 556.0,
98 => 556.0,
99 => 500.0,
100 => 556.0,
101 => 556.0,
102 => 278.0,
103 => 556.0,
104 => 556.0,
105 => 222.0,
106 => 222.0,
107 => 500.0,
108 => 222.0,
109 => 833.0,
110 => 556.0,
111 => 556.0,
112 => 556.0,
113 => 556.0,
114 => 333.0,
115 => 500.0,
116 => 278.0,
117 => 556.0,
118 => 500.0,
119 => 722.0,
120 => 500.0,
121 => 500.0,
122 => 500.0,
123 => 334.0,
124 => 260.0,
125 => 334.0,
126 => 584.0,
161 => 333.0,
162 => 556.0,
163 => 556.0,
'fraction' => 167.0,
165 => 556.0,
131 => 556.0,
167 => 556.0,
164 => 556.0,
39 => 191.0,
147 => 333.0,
171 => 556.0,
139 => 333.0,
155 => 333.0,
'fi' => 500.0,
'fl' => 500.0,
150 => 556.0,
134 => 556.0,
135 => 556.0,
183 => 278.0,
182 => 537.0,
149 => 350.0,
130 => 222.0,
132 => 333.0,
148 => 333.0,
187 => 556.0,
133 => 1000.0,
137 => 1000.0,
191 => 611.0,
96 => 333.0,
180 => 333.0,
136 => 333.0,
152 => 333.0,
175 => 333.0,
'breve' => 333.0,
'dotaccent' => 333.0,
168 => 333.0,
'ring' => 333.0,
184 => 333.0,
'hungarumlaut' => 333.0,
'ogonek' => 333.0,
'caron' => 333.0,
151 => 1000.0,
198 => 1000.0,
170 => 370.0,
'Lslash' => 556.0,
216 => 778.0,
140 => 1000.0,
186 => 365.0,
230 => 889.0,
'dotlessi' => 278.0,
'lslash' => 222.0,
248 => 611.0,
156 => 944.0,
223 => 611.0,
207 => 278.0,
233 => 556.0,
'abreve' => 556.0,
'uhungarumlaut' => 556.0,
'ecaron' => 556.0,
159 => 667.0,
247 => 584.0,
221 => 667.0,
194 => 667.0,
225 => 556.0,
219 => 722.0,
253 => 500.0,
'scommaaccent' => 500.0,
234 => 556.0,
'Uring' => 722.0,
220 => 722.0,
'aogonek' => 556.0,
218 => 722.0,
'uogonek' => 556.0,
203 => 667.0,
'Dcroat' => 722.0,
'commaaccent' => 250.0,
169 => 737.0,
'Emacron' => 667.0,
'ccaron' => 500.0,
229 => 556.0,
'Ncommaaccent' => 722.0,
'lacute' => 222.0,
224 => 556.0,
'Tcommaaccent' => 611.0,
'Cacute' => 722.0,
227 => 556.0,
'Edotaccent' => 667.0,
154 => 500.0,
'scedilla' => 500.0,
237 => 278.0,
'lozenge' => 471.0,
'Rcaron' => 722.0,
'Gcommaaccent' => 778.0,
251 => 556.0,
226 => 556.0,
'Amacron' => 667.0,
'rcaron' => 333.0,
231 => 500.0,
'Zdotaccent' => 611.0,
222 => 667.0,
'Omacron' => 778.0,
'Racute' => 722.0,
'Sacute' => 667.0,
'dcaron' => 643.0,
'Umacron' => 722.0,
'uring' => 556.0,
179 => 333.0,
210 => 778.0,
192 => 667.0,
'Abreve' => 667.0,
215 => 584.0,
250 => 556.0,
'Tcaron' => 611.0,
'partialdiff' => 476.0,
255 => 500.0,
'Nacute' => 722.0,
238 => 278.0,
202 => 667.0,
228 => 556.0,
235 => 556.0,
'cacute' => 500.0,
'nacute' => 556.0,
'umacron' => 556.0,
'Ncaron' => 722.0,
205 => 278.0,
177 => 584.0,
166 => 260.0,
174 => 737.0,
'Gbreve' => 778.0,
'Idotaccent' => 278.0,
'summation' => 600.0,
200 => 667.0,
'racute' => 333.0,
'omacron' => 556.0,
'Zacute' => 611.0,
142 => 611.0,
'greaterequal' => 549.0,
208 => 722.0,
199 => 722.0,
'lcommaaccent' => 222.0,
'tcaron' => 317.0,
'eogonek' => 556.0,
'Uogonek' => 722.0,
193 => 667.0,
196 => 667.0,
232 => 556.0,
'zacute' => 500.0,
'iogonek' => 222.0,
211 => 778.0,
243 => 556.0,
'amacron' => 556.0,
'sacute' => 500.0,
239 => 278.0,
212 => 778.0,
217 => 722.0,
'Delta' => 612.0,
254 => 556.0,
178 => 333.0,
214 => 778.0,
181 => 556.0,
236 => 278.0,
'ohungarumlaut' => 556.0,
'Eogonek' => 667.0,
'dcroat' => 556.0,
190 => 834.0,
'Scedilla' => 667.0,
'lcaron' => 299.0,
'Kcommaaccent' => 667.0,
'Lacute' => 556.0,
153 => 1000.0,
'edotaccent' => 556.0,
204 => 278.0,
'Imacron' => 278.0,
'Lcaron' => 556.0,
189 => 834.0,
'lessequal' => 549.0,
244 => 556.0,
241 => 556.0,
'Uhungarumlaut' => 722.0,
201 => 667.0,
'emacron' => 556.0,
'gbreve' => 556.0,
188 => 834.0,
138 => 667.0,
'Scommaaccent' => 667.0,
'Ohungarumlaut' => 778.0,
176 => 400.0,
242 => 556.0,
'Ccaron' => 722.0,
249 => 556.0,
'radical' => 453.0,
'Dcaron' => 722.0,
'rcommaaccent' => 333.0,
209 => 722.0,
245 => 556.0,
'Rcommaaccent' => 722.0,
'Lcommaaccent' => 556.0,
195 => 667.0,
'Aogonek' => 667.0,
197 => 667.0,
213 => 778.0,
'zdotaccent' => 500.0,
'Ecaron' => 667.0,
'Iogonek' => 278.0,
'kcommaaccent' => 500.0,
'minus' => 584.0,
206 => 278.0,
'ncaron' => 556.0,
'tcommaaccent' => 278.0,
172 => 584.0,
246 => 556.0,
252 => 556.0,
'notequal' => 549.0,
'gcommaaccent' => 556.0,
240 => 556.0,
158 => 500.0,
'ncommaaccent' => 556.0,
185 => 333.0,
'imacron' => 278.0,
128 => 556.0,
),
'CIDtoGID_Compressed' => true,
'CIDtoGID' => 'eJwDAAAAAAE=',
'_version_' => 6,
);
+572
View File
@@ -0,0 +1,572 @@
<?php return array (
'codeToName' =>
array (
32 => 'space',
160 => 'space',
33 => 'exclam',
34 => 'quotedbl',
35 => 'numbersign',
36 => 'dollar',
37 => 'percent',
38 => 'ampersand',
146 => 'quoteright',
40 => 'parenleft',
41 => 'parenright',
42 => 'asterisk',
43 => 'plus',
44 => 'comma',
45 => 'hyphen',
173 => 'hyphen',
46 => 'period',
47 => 'slash',
48 => 'zero',
49 => 'one',
50 => 'two',
51 => 'three',
52 => 'four',
53 => 'five',
54 => 'six',
55 => 'seven',
56 => 'eight',
57 => 'nine',
58 => 'colon',
59 => 'semicolon',
60 => 'less',
61 => 'equal',
62 => 'greater',
63 => 'question',
64 => 'at',
65 => 'A',
66 => 'B',
67 => 'C',
68 => 'D',
69 => 'E',
70 => 'F',
71 => 'G',
72 => 'H',
73 => 'I',
74 => 'J',
75 => 'K',
76 => 'L',
77 => 'M',
78 => 'N',
79 => 'O',
80 => 'P',
81 => 'Q',
82 => 'R',
83 => 'S',
84 => 'T',
85 => 'U',
86 => 'V',
87 => 'W',
88 => 'X',
89 => 'Y',
90 => 'Z',
91 => 'bracketleft',
92 => 'backslash',
93 => 'bracketright',
94 => 'asciicircum',
95 => 'underscore',
145 => 'quoteleft',
97 => 'a',
98 => 'b',
99 => 'c',
100 => 'd',
101 => 'e',
102 => 'f',
103 => 'g',
104 => 'h',
105 => 'i',
106 => 'j',
107 => 'k',
108 => 'l',
109 => 'm',
110 => 'n',
111 => 'o',
112 => 'p',
113 => 'q',
114 => 'r',
115 => 's',
116 => 't',
117 => 'u',
118 => 'v',
119 => 'w',
120 => 'x',
121 => 'y',
122 => 'z',
123 => 'braceleft',
124 => 'bar',
125 => 'braceright',
126 => 'asciitilde',
161 => 'exclamdown',
162 => 'cent',
163 => 'sterling',
165 => 'yen',
131 => 'florin',
167 => 'section',
164 => 'currency',
39 => 'quotesingle',
147 => 'quotedblleft',
171 => 'guillemotleft',
139 => 'guilsinglleft',
155 => 'guilsinglright',
150 => 'endash',
134 => 'dagger',
135 => 'daggerdbl',
183 => 'periodcentered',
182 => 'paragraph',
149 => 'bullet',
130 => 'quotesinglbase',
132 => 'quotedblbase',
148 => 'quotedblright',
187 => 'guillemotright',
133 => 'ellipsis',
137 => 'perthousand',
191 => 'questiondown',
96 => 'grave',
180 => 'acute',
136 => 'circumflex',
152 => 'tilde',
175 => 'macron',
168 => 'dieresis',
184 => 'cedilla',
151 => 'emdash',
198 => 'AE',
170 => 'ordfeminine',
216 => 'Oslash',
140 => 'OE',
186 => 'ordmasculine',
230 => 'ae',
248 => 'oslash',
156 => 'oe',
223 => 'germandbls',
207 => 'Idieresis',
233 => 'eacute',
159 => 'Ydieresis',
247 => 'divide',
221 => 'Yacute',
194 => 'Acircumflex',
225 => 'aacute',
219 => 'Ucircumflex',
253 => 'yacute',
234 => 'ecircumflex',
220 => 'Udieresis',
218 => 'Uacute',
203 => 'Edieresis',
169 => 'copyright',
229 => 'aring',
224 => 'agrave',
227 => 'atilde',
154 => 'scaron',
237 => 'iacute',
251 => 'ucircumflex',
226 => 'acircumflex',
231 => 'ccedilla',
222 => 'Thorn',
179 => 'threesuperior',
210 => 'Ograve',
192 => 'Agrave',
215 => 'multiply',
250 => 'uacute',
255 => 'ydieresis',
238 => 'icircumflex',
202 => 'Ecircumflex',
228 => 'adieresis',
235 => 'edieresis',
205 => 'Iacute',
177 => 'plusminus',
166 => 'brokenbar',
174 => 'registered',
200 => 'Egrave',
142 => 'Zcaron',
208 => 'Eth',
199 => 'Ccedilla',
193 => 'Aacute',
196 => 'Adieresis',
232 => 'egrave',
211 => 'Oacute',
243 => 'oacute',
239 => 'idieresis',
212 => 'Ocircumflex',
217 => 'Ugrave',
254 => 'thorn',
178 => 'twosuperior',
214 => 'Odieresis',
181 => 'mu',
236 => 'igrave',
190 => 'threequarters',
153 => 'trademark',
204 => 'Igrave',
189 => 'onehalf',
244 => 'ocircumflex',
241 => 'ntilde',
201 => 'Eacute',
188 => 'onequarter',
138 => 'Scaron',
176 => 'degree',
242 => 'ograve',
249 => 'ugrave',
209 => 'Ntilde',
245 => 'otilde',
195 => 'Atilde',
197 => 'Aring',
213 => 'Otilde',
206 => 'Icircumflex',
172 => 'logicalnot',
246 => 'odieresis',
252 => 'udieresis',
240 => 'eth',
158 => 'zcaron',
185 => 'onesuperior',
128 => 'Euro',
),
'isUnicode' => false,
'FontName' => 'Times-Bold',
'FullName' => 'Times Bold',
'FamilyName' => 'Times',
'Weight' => 'Bold',
'ItalicAngle' => '0',
'IsFixedPitch' => 'false',
'CharacterSet' => 'ExtendedRoman',
'FontBBox' =>
array (
0 => '-168',
1 => '-218',
2 => '1000',
3 => '935',
),
'UnderlinePosition' => '-100',
'UnderlineThickness' => '50',
'Version' => '002.000',
'EncodingScheme' => 'WinAnsiEncoding',
'CapHeight' => '676',
'XHeight' => '461',
'Ascender' => '683',
'Descender' => '-217',
'StdHW' => '44',
'StdVW' => '139',
'StartCharMetrics' => '317',
'C' =>
array (
32 => 250.0,
160 => 250.0,
33 => 333.0,
34 => 555.0,
35 => 500.0,
36 => 500.0,
37 => 1000.0,
38 => 833.0,
146 => 333.0,
40 => 333.0,
41 => 333.0,
42 => 500.0,
43 => 570.0,
44 => 250.0,
45 => 333.0,
173 => 333.0,
46 => 250.0,
47 => 278.0,
48 => 500.0,
49 => 500.0,
50 => 500.0,
51 => 500.0,
52 => 500.0,
53 => 500.0,
54 => 500.0,
55 => 500.0,
56 => 500.0,
57 => 500.0,
58 => 333.0,
59 => 333.0,
60 => 570.0,
61 => 570.0,
62 => 570.0,
63 => 500.0,
64 => 930.0,
65 => 722.0,
66 => 667.0,
67 => 722.0,
68 => 722.0,
69 => 667.0,
70 => 611.0,
71 => 778.0,
72 => 778.0,
73 => 389.0,
74 => 500.0,
75 => 778.0,
76 => 667.0,
77 => 944.0,
78 => 722.0,
79 => 778.0,
80 => 611.0,
81 => 778.0,
82 => 722.0,
83 => 556.0,
84 => 667.0,
85 => 722.0,
86 => 722.0,
87 => 1000.0,
88 => 722.0,
89 => 722.0,
90 => 667.0,
91 => 333.0,
92 => 278.0,
93 => 333.0,
94 => 581.0,
95 => 500.0,
145 => 333.0,
97 => 500.0,
98 => 556.0,
99 => 444.0,
100 => 556.0,
101 => 444.0,
102 => 333.0,
103 => 500.0,
104 => 556.0,
105 => 278.0,
106 => 333.0,
107 => 556.0,
108 => 278.0,
109 => 833.0,
110 => 556.0,
111 => 500.0,
112 => 556.0,
113 => 556.0,
114 => 444.0,
115 => 389.0,
116 => 333.0,
117 => 556.0,
118 => 500.0,
119 => 722.0,
120 => 500.0,
121 => 500.0,
122 => 444.0,
123 => 394.0,
124 => 220.0,
125 => 394.0,
126 => 520.0,
161 => 333.0,
162 => 500.0,
163 => 500.0,
'fraction' => 167.0,
165 => 500.0,
131 => 500.0,
167 => 500.0,
164 => 500.0,
39 => 278.0,
147 => 500.0,
171 => 500.0,
139 => 333.0,
155 => 333.0,
'fi' => 556.0,
'fl' => 556.0,
150 => 500.0,
134 => 500.0,
135 => 500.0,
183 => 250.0,
182 => 540.0,
149 => 350.0,
130 => 333.0,
132 => 500.0,
148 => 500.0,
187 => 500.0,
133 => 1000.0,
137 => 1000.0,
191 => 500.0,
96 => 333.0,
180 => 333.0,
136 => 333.0,
152 => 333.0,
175 => 333.0,
'breve' => 333.0,
'dotaccent' => 333.0,
168 => 333.0,
'ring' => 333.0,
184 => 333.0,
'hungarumlaut' => 333.0,
'ogonek' => 333.0,
'caron' => 333.0,
151 => 1000.0,
198 => 1000.0,
170 => 300.0,
'Lslash' => 667.0,
216 => 778.0,
140 => 1000.0,
186 => 330.0,
230 => 722.0,
'dotlessi' => 278.0,
'lslash' => 278.0,
248 => 500.0,
156 => 722.0,
223 => 556.0,
207 => 389.0,
233 => 444.0,
'abreve' => 500.0,
'uhungarumlaut' => 556.0,
'ecaron' => 444.0,
159 => 722.0,
247 => 570.0,
221 => 722.0,
194 => 722.0,
225 => 500.0,
219 => 722.0,
253 => 500.0,
'scommaaccent' => 389.0,
234 => 444.0,
'Uring' => 722.0,
220 => 722.0,
'aogonek' => 500.0,
218 => 722.0,
'uogonek' => 556.0,
203 => 667.0,
'Dcroat' => 722.0,
'commaaccent' => 250.0,
169 => 747.0,
'Emacron' => 667.0,
'ccaron' => 444.0,
229 => 500.0,
'Ncommaaccent' => 722.0,
'lacute' => 278.0,
224 => 500.0,
'Tcommaaccent' => 667.0,
'Cacute' => 722.0,
227 => 500.0,
'Edotaccent' => 667.0,
154 => 389.0,
'scedilla' => 389.0,
237 => 278.0,
'lozenge' => 494.0,
'Rcaron' => 722.0,
'Gcommaaccent' => 778.0,
251 => 556.0,
226 => 500.0,
'Amacron' => 722.0,
'rcaron' => 444.0,
231 => 444.0,
'Zdotaccent' => 667.0,
222 => 611.0,
'Omacron' => 778.0,
'Racute' => 722.0,
'Sacute' => 556.0,
'dcaron' => 672.0,
'Umacron' => 722.0,
'uring' => 556.0,
179 => 300.0,
210 => 778.0,
192 => 722.0,
'Abreve' => 722.0,
215 => 570.0,
250 => 556.0,
'Tcaron' => 667.0,
'partialdiff' => 494.0,
255 => 500.0,
'Nacute' => 722.0,
238 => 278.0,
202 => 667.0,
228 => 500.0,
235 => 444.0,
'cacute' => 444.0,
'nacute' => 556.0,
'umacron' => 556.0,
'Ncaron' => 722.0,
205 => 389.0,
177 => 570.0,
166 => 220.0,
174 => 747.0,
'Gbreve' => 778.0,
'Idotaccent' => 389.0,
'summation' => 600.0,
200 => 667.0,
'racute' => 444.0,
'omacron' => 500.0,
'Zacute' => 667.0,
142 => 667.0,
'greaterequal' => 549.0,
208 => 722.0,
199 => 722.0,
'lcommaaccent' => 278.0,
'tcaron' => 416.0,
'eogonek' => 444.0,
'Uogonek' => 722.0,
193 => 722.0,
196 => 722.0,
232 => 444.0,
'zacute' => 444.0,
'iogonek' => 278.0,
211 => 778.0,
243 => 500.0,
'amacron' => 500.0,
'sacute' => 389.0,
239 => 278.0,
212 => 778.0,
217 => 722.0,
'Delta' => 612.0,
254 => 556.0,
178 => 300.0,
214 => 778.0,
181 => 556.0,
236 => 278.0,
'ohungarumlaut' => 500.0,
'Eogonek' => 667.0,
'dcroat' => 556.0,
190 => 750.0,
'Scedilla' => 556.0,
'lcaron' => 394.0,
'Kcommaaccent' => 778.0,
'Lacute' => 667.0,
153 => 1000.0,
'edotaccent' => 444.0,
204 => 389.0,
'Imacron' => 389.0,
'Lcaron' => 667.0,
189 => 750.0,
'lessequal' => 549.0,
244 => 500.0,
241 => 556.0,
'Uhungarumlaut' => 722.0,
201 => 667.0,
'emacron' => 444.0,
'gbreve' => 500.0,
188 => 750.0,
138 => 556.0,
'Scommaaccent' => 556.0,
'Ohungarumlaut' => 778.0,
176 => 400.0,
242 => 500.0,
'Ccaron' => 722.0,
249 => 556.0,
'radical' => 549.0,
'Dcaron' => 722.0,
'rcommaaccent' => 444.0,
209 => 722.0,
245 => 500.0,
'Rcommaaccent' => 722.0,
'Lcommaaccent' => 667.0,
195 => 722.0,
'Aogonek' => 722.0,
197 => 722.0,
213 => 778.0,
'zdotaccent' => 444.0,
'Ecaron' => 667.0,
'Iogonek' => 389.0,
'kcommaaccent' => 556.0,
'minus' => 570.0,
206 => 389.0,
'ncaron' => 556.0,
'tcommaaccent' => 333.0,
172 => 570.0,
246 => 500.0,
252 => 556.0,
'notequal' => 549.0,
'gcommaaccent' => 500.0,
240 => 500.0,
158 => 444.0,
'ncommaaccent' => 556.0,
185 => 300.0,
'imacron' => 278.0,
128 => 500.0,
),
'CIDtoGID_Compressed' => true,
'CIDtoGID' => 'eJwDAAAAAAE=',
'_version_' => 6,
);
@@ -0,0 +1,89 @@
<?php return array (
'sans-serif' => array(
'normal' => $rootDir . '/lib/fonts/Helvetica',
'bold' => $rootDir . '/lib/fonts/Helvetica-Bold',
'italic' => $rootDir . '/lib/fonts/Helvetica-Oblique',
'bold_italic' => $rootDir . '/lib/fonts/Helvetica-BoldOblique',
),
'times' => array(
'normal' => $rootDir . '/lib/fonts/Times-Roman',
'bold' => $rootDir . '/lib/fonts/Times-Bold',
'italic' => $rootDir . '/lib/fonts/Times-Italic',
'bold_italic' => $rootDir . '/lib/fonts/Times-BoldItalic',
),
'times-roman' => array(
'normal' => $rootDir . '/lib/fonts/Times-Roman',
'bold' => $rootDir . '/lib/fonts/Times-Bold',
'italic' => $rootDir . '/lib/fonts/Times-Italic',
'bold_italic' => $rootDir . '/lib/fonts/Times-BoldItalic',
),
'courier' => array(
'normal' => $rootDir . '/lib/fonts/Courier',
'bold' => $rootDir . '/lib/fonts/Courier-Bold',
'italic' => $rootDir . '/lib/fonts/Courier-Oblique',
'bold_italic' => $rootDir . '/lib/fonts/Courier-BoldOblique',
),
'helvetica' => array(
'normal' => $rootDir . '/lib/fonts/Helvetica',
'bold' => $rootDir . '/lib/fonts/Helvetica-Bold',
'italic' => $rootDir . '/lib/fonts/Helvetica-Oblique',
'bold_italic' => $rootDir . '/lib/fonts/Helvetica-BoldOblique',
),
'zapfdingbats' => array(
'normal' => $rootDir . '/lib/fonts/ZapfDingbats',
'bold' => $rootDir . '/lib/fonts/ZapfDingbats',
'italic' => $rootDir . '/lib/fonts/ZapfDingbats',
'bold_italic' => $rootDir . '/lib/fonts/ZapfDingbats',
),
'symbol' => array(
'normal' => $rootDir . '/lib/fonts/Symbol',
'bold' => $rootDir . '/lib/fonts/Symbol',
'italic' => $rootDir . '/lib/fonts/Symbol',
'bold_italic' => $rootDir . '/lib/fonts/Symbol',
),
'serif' => array(
'normal' => $rootDir . '/lib/fonts/Times-Roman',
'bold' => $rootDir . '/lib/fonts/Times-Bold',
'italic' => $rootDir . '/lib/fonts/Times-Italic',
'bold_italic' => $rootDir . '/lib/fonts/Times-BoldItalic',
),
'monospace' => array(
'normal' => $rootDir . '/lib/fonts/Courier',
'bold' => $rootDir . '/lib/fonts/Courier-Bold',
'italic' => $rootDir . '/lib/fonts/Courier-Oblique',
'bold_italic' => $rootDir . '/lib/fonts/Courier-BoldOblique',
),
'fixed' => array(
'normal' => $rootDir . '/lib/fonts/Courier',
'bold' => $rootDir . '/lib/fonts/Courier-Bold',
'italic' => $rootDir . '/lib/fonts/Courier-Oblique',
'bold_italic' => $rootDir . '/lib/fonts/Courier-BoldOblique',
),
'dejavu sans' => array(
'bold' => $rootDir . '/lib/fonts/DejaVuSans-Bold',
'bold_italic' => $rootDir . '/lib/fonts/DejaVuSans-BoldOblique',
'italic' => $rootDir . '/lib/fonts/DejaVuSans-Oblique',
'normal' => $rootDir . '/lib/fonts/DejaVuSans',
),
'dejavu sans mono' => array(
'bold' => $rootDir . '/lib/fonts/DejaVuSansMono-Bold',
'bold_italic' => $rootDir . '/lib/fonts/DejaVuSansMono-BoldOblique',
'italic' => $rootDir . '/lib/fonts/DejaVuSansMono-Oblique',
'normal' => $rootDir . '/lib/fonts/DejaVuSansMono',
),
'dejavu serif' => array(
'bold' => $rootDir . '/lib/fonts/DejaVuSerif-Bold',
'bold_italic' => $rootDir . '/lib/fonts/DejaVuSerif-BoldItalic',
'italic' => $rootDir . '/lib/fonts/DejaVuSerif-Italic',
'normal' => $rootDir . '/lib/fonts/DejaVuSerif',
),
'simhei' => array(
'normal' => $fontDir . '/simhei',
'bold' => $fontDir . '/simhei',
'italic' => $fontDir . '/simhei',
'bold_italic' => $fontDir . '/simhei',
),
'fontawesome' => array(
'normal' => $fontDir . '/fontawesome_normal_c6d7408a227b5962c5926faffde7049d',
),
) ?>
@@ -0,0 +1,732 @@
StartFontMetrics 4.1
Notice Converted by PHP-font-lib
Comment https://github.com/PhenX/php-font-lib
EncodingScheme FontSpecific
Copyright Copyright Dave Gandy 2016. All rights reserved.
FontName FontAwesome
FontSubfamily Regular
UniqueID FONTLAB:OTFEXPORT
FullName FontAwesome
Version Version 4.7.0 2016
PostScriptName FontAwesome
Trademark Please refer to the Copyright section for the font trademark attribution notices.
Manufacturer Fort Awesome
Designer Dave Gandy
FontVendorURL http://fontawesome.io
LicenseURL http://fontawesome.io/license/
Weight Medium
ItalicAngle 0
IsFixedPitch false
UnderlineThickness 0
UnderlinePosition 0
FontHeightOffset 0
Ascender 857
Descender -143
FontBBox -1 -143 1286 857
StartCharMetrics 707
U 32 ; WX 250 ; N space ; G 3
U 168 ; WX 1000 ; N dieresis ; G 4
U 169 ; WX 1000 ; N copyright ; G 5
U 174 ; WX 1000 ; N registered ; G 6
U 180 ; WX 1000 ; N acute ; G 7
U 198 ; WX 1000 ; N AE ; G 8
U 216 ; WX 1000 ; N Oslash ; G 9
U 8482 ; WX 1000 ; N trademark ; G 10
U 8734 ; WX 1000 ; N infinity ; G 11
U 8800 ; WX 1000 ; N notequal ; G 12
U 61440 ; WX 1000 ; N glass ; G 13
U 61441 ; WX 857 ; N music ; G 14
U 61442 ; WX 929 ; N search ; G 15
U 61443 ; WX 1000 ; N envelope ; G 16
U 61444 ; WX 1000 ; N heart ; G 17
U 61445 ; WX 929 ; N star ; G 18
U 61446 ; WX 929 ; N star_empty ; G 19
U 61447 ; WX 714 ; N user ; G 20
U 61448 ; WX 1071 ; N film ; G 21
U 61449 ; WX 929 ; N th_large ; G 22
U 61450 ; WX 1000 ; N th ; G 23
U 61451 ; WX 1000 ; N th_list ; G 24
U 61452 ; WX 1000 ; N ok ; G 25
U 61453 ; WX 786 ; N remove ; G 26
U 61454 ; WX 929 ; N zoom_in ; G 27
U 61456 ; WX 929 ; N zoom_out ; G 28
U 61457 ; WX 857 ; N off ; G 29
U 61458 ; WX 1000 ; N signal ; G 30
U 61459 ; WX 857 ; N cog ; G 31
U 61460 ; WX 786 ; N trash ; G 32
U 61461 ; WX 929 ; N home ; G 33
U 61462 ; WX 857 ; N file_alt ; G 34
U 61463 ; WX 857 ; N time ; G 35
U 61464 ; WX 1071 ; N road ; G 36
U 61465 ; WX 929 ; N download_alt ; G 37
U 61466 ; WX 857 ; N download ; G 38
U 61467 ; WX 857 ; N upload ; G 39
U 61468 ; WX 857 ; N inbox ; G 40
U 61469 ; WX 857 ; N play_circle ; G 41
U 61470 ; WX 857 ; N repeat ; G 42
U 61473 ; WX 857 ; N refresh ; G 43
U 61474 ; WX 1000 ; N list_alt ; G 44
U 61475 ; WX 643 ; N lock ; G 45
U 61476 ; WX 1000 ; N flag ; G 46
U 61477 ; WX 929 ; N headphones ; G 47
U 61478 ; WX 429 ; N volume_off ; G 48
U 61479 ; WX 643 ; N volume_down ; G 49
U 61480 ; WX 929 ; N volume_up ; G 50
U 61481 ; WX 786 ; N qrcode ; G 51
U 61482 ; WX 1000 ; N barcode ; G 52
U 61483 ; WX 857 ; N tag ; G 53
U 61484 ; WX 1071 ; N tags ; G 54
U 61485 ; WX 929 ; N book ; G 55
U 61486 ; WX 714 ; N bookmark ; G 56
U 61487 ; WX 929 ; N print ; G 57
U 61488 ; WX 1071 ; N camera ; G 58
U 61489 ; WX 929 ; N font ; G 59
U 61490 ; WX 786 ; N bold ; G 60
U 61491 ; WX 571 ; N italic ; G 61
U 61492 ; WX 1000 ; N text_height ; G 62
U 61493 ; WX 857 ; N text_width ; G 63
U 61494 ; WX 1000 ; N align_left ; G 64
U 61495 ; WX 1000 ; N align_center ; G 65
U 61496 ; WX 1000 ; N align_right ; G 66
U 61497 ; WX 1000 ; N align_justify ; G 67
U 61498 ; WX 1000 ; N list ; G 68
U 61499 ; WX 1000 ; N indent_left ; G 69
U 61500 ; WX 1000 ; N indent_right ; G 70
U 61501 ; WX 1000 ; N facetime_video ; G 71
U 61502 ; WX 1071 ; N picture ; G 72
U 61504 ; WX 857 ; N pencil ; G 73
U 61505 ; WX 571 ; N map_marker ; G 74
U 61506 ; WX 857 ; N adjust ; G 75
U 61507 ; WX 571 ; N tint ; G 76
U 61508 ; WX 1000 ; N edit ; G 77
U 61509 ; WX 929 ; N share ; G 78
U 61510 ; WX 929 ; N check ; G 79
U 61511 ; WX 1000 ; N move ; G 80
U 61512 ; WX 571 ; N step_backward ; G 81
U 61513 ; WX 1000 ; N fast_backward ; G 82
U 61514 ; WX 929 ; N backward ; G 83
U 61515 ; WX 786 ; N play ; G 84
U 61516 ; WX 857 ; N pause ; G 85
U 61517 ; WX 857 ; N stop ; G 86
U 61518 ; WX 929 ; N forward ; G 87
U 61520 ; WX 1000 ; N fast_forward ; G 88
U 61521 ; WX 571 ; N step_forward ; G 89
U 61522 ; WX 858 ; N eject ; G 90
U 61523 ; WX 714 ; N chevron_left ; G 91
U 61524 ; WX 714 ; N chevron_right ; G 92
U 61525 ; WX 857 ; N plus_sign ; G 93
U 61526 ; WX 857 ; N minus_sign ; G 94
U 61527 ; WX 857 ; N remove_sign ; G 95
U 61528 ; WX 857 ; N ok_sign ; G 96
U 61529 ; WX 857 ; N question_sign ; G 97
U 61530 ; WX 857 ; N info_sign ; G 98
U 61531 ; WX 857 ; N screenshot ; G 99
U 61532 ; WX 857 ; N remove_circle ; G 100
U 61533 ; WX 857 ; N ok_circle ; G 101
U 61534 ; WX 857 ; N ban_circle ; G 102
U 61536 ; WX 857 ; N arrow_left ; G 103
U 61537 ; WX 857 ; N arrow_right ; G 104
U 61538 ; WX 929 ; N arrow_up ; G 105
U 61539 ; WX 929 ; N arrow_down ; G 106
U 61540 ; WX 1000 ; N share_alt ; G 107
U 61541 ; WX 857 ; N resize_full ; G 108
U 61542 ; WX 857 ; N resize_small ; G 109
U 61543 ; WX 786 ; N plus ; G 110
U 61544 ; WX 786 ; N minus ; G 111
U 61545 ; WX 929 ; N asterisk ; G 112
U 61546 ; WX 857 ; N exclamation_sign ; G 113
U 61547 ; WX 857 ; N gift ; G 114
U 61548 ; WX 1000 ; N leaf ; G 115
U 61549 ; WX 786 ; N fire ; G 116
U 61550 ; WX 1000 ; N eye_open ; G 117
U 61552 ; WX 1000 ; N eye_close ; G 118
U 61553 ; WX 1000 ; N warning_sign ; G 119
U 61554 ; WX 786 ; N plane ; G 120
U 61555 ; WX 929 ; N calendar ; G 121
U 61556 ; WX 1000 ; N random ; G 122
U 61557 ; WX 1000 ; N comment ; G 123
U 61558 ; WX 857 ; N magnet ; G 124
U 61559 ; WX 1000 ; N chevron_up ; G 125
U 61560 ; WX 1000 ; N chevron_down ; G 126
U 61561 ; WX 1071 ; N retweet ; G 127
U 61562 ; WX 929 ; N shopping_cart ; G 128
U 61563 ; WX 929 ; N folder_close ; G 129
U 61564 ; WX 1071 ; N folder_open ; G 130
U 61565 ; WX 429 ; N resize_vertical ; G 131
U 61566 ; WX 1000 ; N resize_horizontal ; G 132
U 61568 ; WX 1143 ; N bar_chart ; G 133
U 61569 ; WX 857 ; N twitter_sign ; G 134
U 61570 ; WX 857 ; N facebook_sign ; G 135
U 61571 ; WX 1000 ; N camera_retro ; G 136
U 61572 ; WX 1000 ; N key ; G 137
U 61573 ; WX 1071 ; N cogs ; G 138
U 61574 ; WX 1000 ; N comments ; G 139
U 61575 ; WX 857 ; N thumbs_up_alt ; G 140
U 61576 ; WX 857 ; N thumbs_down_alt ; G 141
U 61577 ; WX 500 ; N star_half ; G 142
U 61578 ; WX 1000 ; N heart_empty ; G 143
U 61579 ; WX 929 ; N signout ; G 144
U 61580 ; WX 857 ; N linkedin_sign ; G 145
U 61581 ; WX 643 ; N pushpin ; G 146
U 61582 ; WX 1000 ; N external_link ; G 147
U 61584 ; WX 857 ; N signin ; G 148
U 61585 ; WX 929 ; N trophy ; G 149
U 61586 ; WX 857 ; N github_sign ; G 150
U 61587 ; WX 929 ; N upload_alt ; G 151
U 61588 ; WX 857 ; N lemon ; G 152
U 61589 ; WX 786 ; N phone ; G 153
U 61590 ; WX 786 ; N check_empty ; G 154
U 61591 ; WX 714 ; N bookmark_empty ; G 155
U 61592 ; WX 857 ; N phone_sign ; G 156
U 61593 ; WX 929 ; N twitter ; G 157
U 61594 ; WX 571 ; N facebook ; G 158
U 61595 ; WX 857 ; N github ; G 159
U 61596 ; WX 929 ; N unlock ; G 160
U 61597 ; WX 1071 ; N credit_card ; G 161
U 61598 ; WX 786 ; N rss ; G 162
U 61600 ; WX 857 ; N hdd ; G 163
U 61601 ; WX 1000 ; N bullhorn ; G 164
U 61602 ; WX 1000 ; N bell ; G 165
U 61603 ; WX 857 ; N certificate ; G 166
U 61604 ; WX 1000 ; N hand_right ; G 167
U 61605 ; WX 1000 ; N hand_left ; G 168
U 61606 ; WX 857 ; N hand_up ; G 169
U 61607 ; WX 857 ; N hand_down ; G 170
U 61608 ; WX 857 ; N circle_arrow_left ; G 171
U 61609 ; WX 857 ; N circle_arrow_right ; G 172
U 61610 ; WX 857 ; N circle_arrow_up ; G 173
U 61611 ; WX 857 ; N circle_arrow_down ; G 174
U 61612 ; WX 857 ; N globe ; G 175
U 61613 ; WX 929 ; N wrench ; G 176
U 61614 ; WX 1000 ; N tasks ; G 177
U 61616 ; WX 786 ; N filter ; G 178
U 61617 ; WX 1000 ; N briefcase ; G 179
U 61618 ; WX 857 ; N fullscreen ; G 180
U 61632 ; WX 1071 ; N group ; G 181
U 61633 ; WX 929 ; N link ; G 182
U 61634 ; WX 1071 ; N cloud ; G 183
U 61635 ; WX 929 ; N beaker ; G 184
U 61636 ; WX 1000 ; N cut ; G 185
U 61637 ; WX 1000 ; N copy ; G 186
U 61638 ; WX 786 ; N paper_clip ; G 187
U 61639 ; WX 857 ; N save ; G 188
U 61640 ; WX 857 ; N sign_blank ; G 189
U 61641 ; WX 857 ; N reorder ; G 190
U 61642 ; WX 1000 ; N ul ; G 191
U 61643 ; WX 1000 ; N ol ; G 192
U 61644 ; WX 1000 ; N strikethrough ; G 193
U 61645 ; WX 857 ; N underline ; G 194
U 61646 ; WX 929 ; N table ; G 195
U 61648 ; WX 929 ; N magic ; G 196
U 61649 ; WX 1000 ; N truck ; G 197
U 61650 ; WX 857 ; N pinterest ; G 198
U 61651 ; WX 857 ; N pinterest_sign ; G 199
U 61652 ; WX 857 ; N google_plus_sign ; G 200
U 61653 ; WX 1286 ; N google_plus ; G 201
U 61654 ; WX 1071 ; N money ; G 202
U 61655 ; WX 571 ; N caret_down ; G 203
U 61656 ; WX 571 ; N caret_up ; G 204
U 61657 ; WX 357 ; N caret_left ; G 205
U 61658 ; WX 357 ; N caret_right ; G 206
U 61659 ; WX 929 ; N columns ; G 207
U 61660 ; WX 571 ; N sort ; G 208
U 61661 ; WX 571 ; N sort_down ; G 209
U 61662 ; WX 571 ; N sort_up ; G 210
U 61664 ; WX 1000 ; N envelope_alt ; G 211
U 61665 ; WX 857 ; N linkedin ; G 212
U 61666 ; WX 857 ; N undo ; G 213
U 61667 ; WX 1000 ; N legal ; G 214
U 61668 ; WX 1000 ; N dashboard ; G 215
U 61669 ; WX 1000 ; N comment_alt ; G 216
U 61670 ; WX 1000 ; N comments_alt ; G 217
U 61671 ; WX 500 ; N bolt ; G 218
U 61672 ; WX 1000 ; N sitemap ; G 219
U 61673 ; WX 929 ; N umbrella ; G 220
U 61674 ; WX 1000 ; N paste ; G 221
U 61675 ; WX 571 ; N light_bulb ; G 222
U 61676 ; WX 1000 ; N exchange ; G 223
U 61677 ; WX 1071 ; N cloud_download ; G 224
U 61678 ; WX 1071 ; N cloud_upload ; G 225
U 61680 ; WX 786 ; N user_md ; G 226
U 61681 ; WX 786 ; N stethoscope ; G 227
U 61682 ; WX 1000 ; N suitcase ; G 228
U 61683 ; WX 1000 ; N bell_alt ; G 229
U 61684 ; WX 1071 ; N coffee ; G 230
U 61685 ; WX 786 ; N food ; G 231
U 61686 ; WX 857 ; N file_text_alt ; G 232
U 61687 ; WX 786 ; N building ; G 233
U 61688 ; WX 786 ; N hospital ; G 234
U 61689 ; WX 1071 ; N ambulance ; G 235
U 61690 ; WX 1000 ; N medkit ; G 236
U 61691 ; WX 1071 ; N fighter_jet ; G 237
U 61692 ; WX 929 ; N beer ; G 238
U 61693 ; WX 857 ; N h_sign ; G 239
U 61694 ; WX 857 ; N f0fe ; G 240
U 61696 ; WX 571 ; N double_angle_left ; G 241
U 61697 ; WX 571 ; N double_angle_right ; G 242
U 61698 ; WX 643 ; N double_angle_up ; G 243
U 61699 ; WX 643 ; N double_angle_down ; G 244
U 61700 ; WX 357 ; N angle_left ; G 245
U 61701 ; WX 357 ; N angle_right ; G 246
U 61702 ; WX 643 ; N angle_up ; G 247
U 61703 ; WX 643 ; N angle_down ; G 248
U 61704 ; WX 1071 ; N desktop ; G 249
U 61705 ; WX 1071 ; N laptop ; G 250
U 61706 ; WX 643 ; N tablet ; G 251
U 61707 ; WX 429 ; N mobile_phone ; G 252
U 61708 ; WX 857 ; N circle_blank ; G 253
U 61709 ; WX 929 ; N quote_left ; G 254
U 61710 ; WX 929 ; N quote_right ; G 255
U 61712 ; WX 1000 ; N spinner ; G 256
U 61713 ; WX 857 ; N circle ; G 257
U 61714 ; WX 1000 ; N reply ; G 258
U 61715 ; WX 929 ; N github_alt ; G 259
U 61716 ; WX 929 ; N folder_close_alt ; G 260
U 61717 ; WX 1071 ; N folder_open_alt ; G 261
U 61718 ; WX 1000 ; N expand_alt ; G 262
U 61719 ; WX 1000 ; N collapse_alt ; G 263
U 61720 ; WX 857 ; N smile ; G 264
U 61721 ; WX 857 ; N frown ; G 265
U 61722 ; WX 857 ; N meh ; G 266
U 61723 ; WX 1071 ; N gamepad ; G 267
U 61724 ; WX 1071 ; N keyboard ; G 268
U 61725 ; WX 1000 ; N flag_alt ; G 269
U 61726 ; WX 1000 ; N flag_checkered ; G 270
U 61728 ; WX 929 ; N terminal ; G 271
U 61729 ; WX 1071 ; N code ; G 272
U 61730 ; WX 1000 ; N reply_all ; G 273
U 61731 ; WX 929 ; N star_half_empty ; G 274
U 61732 ; WX 786 ; N location_arrow ; G 275
U 61733 ; WX 929 ; N crop ; G 276
U 61734 ; WX 571 ; N code_fork ; G 277
U 61735 ; WX 929 ; N unlink ; G 278
U 61736 ; WX 571 ; N question ; G 279
U 61737 ; WX 357 ; N _279 ; G 280
U 61738 ; WX 357 ; N exclamation ; G 281
U 61739 ; WX 857 ; N superscript ; G 282
U 61740 ; WX 857 ; N subscript ; G 283
U 61741 ; WX 1071 ; N _283 ; G 284
U 61742 ; WX 929 ; N puzzle_piece ; G 285
U 61744 ; WX 643 ; N microphone ; G 286
U 61745 ; WX 786 ; N microphone_off ; G 287
U 61746 ; WX 714 ; N shield ; G 288
U 61747 ; WX 929 ; N calendar_empty ; G 289
U 61748 ; WX 786 ; N fire_extinguisher ; G 290
U 61749 ; WX 929 ; N rocket ; G 291
U 61750 ; WX 1000 ; N maxcdn ; G 292
U 61751 ; WX 857 ; N chevron_sign_left ; G 293
U 61752 ; WX 857 ; N chevron_sign_right ; G 294
U 61753 ; WX 857 ; N chevron_sign_up ; G 295
U 61754 ; WX 857 ; N chevron_sign_down ; G 296
U 61755 ; WX 786 ; N html5 ; G 297
U 61756 ; WX 1000 ; N css3 ; G 298
U 61757 ; WX 1000 ; N anchor ; G 299
U 61758 ; WX 643 ; N unlock_alt ; G 300
U 61760 ; WX 857 ; N bullseye ; G 301
U 61761 ; WX 786 ; N ellipsis_horizontal ; G 302
U 61762 ; WX 214 ; N ellipsis_vertical ; G 303
U 61763 ; WX 857 ; N _303 ; G 304
U 61764 ; WX 857 ; N play_sign ; G 305
U 61765 ; WX 1000 ; N ticket ; G 306
U 61766 ; WX 857 ; N minus_sign_alt ; G 307
U 61767 ; WX 786 ; N check_minus ; G 308
U 61768 ; WX 571 ; N level_up ; G 309
U 61769 ; WX 571 ; N level_down ; G 310
U 61770 ; WX 857 ; N check_sign ; G 311
U 61771 ; WX 857 ; N edit_sign ; G 312
U 61772 ; WX 857 ; N _312 ; G 313
U 61773 ; WX 857 ; N share_sign ; G 314
U 61774 ; WX 857 ; N compass ; G 315
U 61776 ; WX 857 ; N collapse ; G 316
U 61777 ; WX 857 ; N collapse_top ; G 317
U 61778 ; WX 857 ; N _317 ; G 318
U 61779 ; WX 571 ; N eur ; G 319
U 61780 ; WX 571 ; N gbp ; G 320
U 61781 ; WX 571 ; N usd ; G 321
U 61782 ; WX 501 ; N inr ; G 322
U 61783 ; WX 573 ; N jpy ; G 323
U 61784 ; WX 714 ; N rub ; G 324
U 61785 ; WX 1000 ; N krw ; G 325
U 61786 ; WX 714 ; N btc ; G 326
U 61787 ; WX 857 ; N file ; G 327
U 61788 ; WX 857 ; N file_text ; G 328
U 61789 ; WX 929 ; N sort_by_alphabet ; G 329
U 61790 ; WX 929 ; N _329 ; G 330
U 61792 ; WX 1000 ; N sort_by_attributes ; G 331
U 61793 ; WX 1000 ; N sort_by_attributes_alt ; G 332
U 61794 ; WX 857 ; N sort_by_order ; G 333
U 61795 ; WX 857 ; N sort_by_order_alt ; G 334
U 61796 ; WX 929 ; N _334 ; G 335
U 61797 ; WX 929 ; N _335 ; G 336
U 61798 ; WX 857 ; N youtube_sign ; G 337
U 61799 ; WX 857 ; N youtube ; G 338
U 61800 ; WX 786 ; N xing ; G 339
U 61801 ; WX 857 ; N xing_sign ; G 340
U 61802 ; WX 1000 ; N youtube_play ; G 341
U 61803 ; WX 1000 ; N dropbox ; G 342
U 61804 ; WX 857 ; N stackexchange ; G 343
U 61805 ; WX 857 ; N instagram ; G 344
U 61806 ; WX 857 ; N flickr ; G 345
U 61808 ; WX 857 ; N adn ; G 346
U 61809 ; WX 786 ; N f171 ; G 347
U 61810 ; WX 857 ; N bitbucket_sign ; G 348
U 61811 ; WX 571 ; N tumblr ; G 349
U 61812 ; WX 857 ; N tumblr_sign ; G 350
U 61813 ; WX 429 ; N long_arrow_down ; G 351
U 61814 ; WX 429 ; N long_arrow_up ; G 352
U 61815 ; WX 1000 ; N long_arrow_left ; G 353
U 61816 ; WX 1000 ; N long_arrow_right ; G 354
U 61817 ; WX 786 ; N applelogo ; G 355
U 61818 ; WX 929 ; N windows ; G 356
U 61819 ; WX 786 ; N android ; G 357
U 61820 ; WX 857 ; N linux ; G 358
U 61821 ; WX 857 ; N dribble ; G 359
U 61822 ; WX 857 ; N skype ; G 360
U 61824 ; WX 714 ; N foursquare ; G 361
U 61825 ; WX 857 ; N trello ; G 362
U 61826 ; WX 714 ; N female ; G 363
U 61827 ; WX 571 ; N male ; G 364
U 61828 ; WX 857 ; N gittip ; G 365
U 61829 ; WX 1000 ; N sun ; G 366
U 61830 ; WX 857 ; N _366 ; G 367
U 61831 ; WX 1000 ; N archive ; G 368
U 61832 ; WX 929 ; N bug ; G 369
U 61833 ; WX 1071 ; N vk ; G 370
U 61834 ; WX 1000 ; N weibo ; G 371
U 61835 ; WX 857 ; N renren ; G 372
U 61836 ; WX 786 ; N _372 ; G 373
U 61837 ; WX 714 ; N stack_exchange ; G 374
U 61838 ; WX 857 ; N _374 ; G 375
U 61840 ; WX 857 ; N arrow_circle_alt_left ; G 376
U 61841 ; WX 857 ; N _376 ; G 377
U 61842 ; WX 857 ; N dot_circle_alt ; G 378
U 61843 ; WX 929 ; N _378 ; G 379
U 61844 ; WX 857 ; N vimeo_square ; G 380
U 61845 ; WX 643 ; N _380 ; G 381
U 61846 ; WX 786 ; N plus_square_o ; G 382
U 61847 ; WX 1214 ; N _382 ; G 383
U 61848 ; WX 929 ; N _383 ; G 384
U 61849 ; WX 857 ; N _384 ; G 385
U 61850 ; WX 1000 ; N _385 ; G 386
U 61851 ; WX 1000 ; N _386 ; G 387
U 61852 ; WX 1143 ; N _387 ; G 388
U 61853 ; WX 1286 ; N _388 ; G 389
U 61854 ; WX 857 ; N _389 ; G 390
U 61856 ; WX 857 ; N uniF1A0 ; G 391
U 61857 ; WX 1000 ; N f1a1 ; G 392
U 61858 ; WX 857 ; N _392 ; G 393
U 61859 ; WX 857 ; N _393 ; G 394
U 61860 ; WX 1071 ; N f1a4 ; G 395
U 61861 ; WX 857 ; N _395 ; G 396
U 61862 ; WX 1143 ; N _396 ; G 397
U 61863 ; WX 857 ; N _397 ; G 398
U 61864 ; WX 1137 ; N _398 ; G 399
U 61865 ; WX 857 ; N _399 ; G 400
U 61866 ; WX 857 ; N _400 ; G 401
U 61867 ; WX 857 ; N f1ab ; G 402
U 61868 ; WX 1000 ; N _402 ; G 403
U 61869 ; WX 857 ; N _403 ; G 404
U 61870 ; WX 714 ; N _404 ; G 405
U 61872 ; WX 929 ; N uniF1B1 ; G 406
U 61873 ; WX 429 ; N _406 ; G 407
U 61874 ; WX 1000 ; N _407 ; G 408
U 61875 ; WX 1286 ; N _408 ; G 409
U 61876 ; WX 1143 ; N _409 ; G 410
U 61877 ; WX 857 ; N _410 ; G 411
U 61878 ; WX 1000 ; N _411 ; G 412
U 61879 ; WX 857 ; N _412 ; G 413
U 61880 ; WX 1000 ; N _413 ; G 414
U 61881 ; WX 1143 ; N _414 ; G 415
U 61882 ; WX 1143 ; N _415 ; G 416
U 61883 ; WX 857 ; N _416 ; G 417
U 61884 ; WX 857 ; N _417 ; G 418
U 61885 ; WX 571 ; N _418 ; G 419
U 61886 ; WX 1286 ; N _419 ; G 420
U 61888 ; WX 857 ; N uniF1C0 ; G 421
U 61889 ; WX 857 ; N uniF1C1 ; G 422
U 61890 ; WX 857 ; N _422 ; G 423
U 61891 ; WX 857 ; N _423 ; G 424
U 61892 ; WX 857 ; N _424 ; G 425
U 61893 ; WX 857 ; N _425 ; G 426
U 61894 ; WX 857 ; N _426 ; G 427
U 61895 ; WX 857 ; N _427 ; G 428
U 61896 ; WX 857 ; N _428 ; G 429
U 61897 ; WX 857 ; N _429 ; G 430
U 61898 ; WX 857 ; N _430 ; G 431
U 61899 ; WX 1000 ; N _431 ; G 432
U 61900 ; WX 1143 ; N _432 ; G 433
U 61901 ; WX 1000 ; N _433 ; G 434
U 61902 ; WX 1000 ; N _434 ; G 435
U 61904 ; WX 1000 ; N uniF1D0 ; G 436
U 61905 ; WX 1000 ; N uniF1D1 ; G 437
U 61906 ; WX 857 ; N uniF1D2 ; G 438
U 61907 ; WX 1000 ; N _438 ; G 439
U 61908 ; WX 857 ; N _439 ; G 440
U 61909 ; WX 714 ; N uniF1D5 ; G 441
U 61910 ; WX 1000 ; N uniF1D6 ; G 442
U 61911 ; WX 1143 ; N uniF1D7 ; G 443
U 61912 ; WX 1000 ; N _443 ; G 444
U 61913 ; WX 1000 ; N _444 ; G 445
U 61914 ; WX 857 ; N _445 ; G 446
U 61915 ; WX 857 ; N _446 ; G 447
U 61916 ; WX 1000 ; N _447 ; G 448
U 61917 ; WX 714 ; N _448 ; G 449
U 61918 ; WX 857 ; N _449 ; G 450
U 61920 ; WX 857 ; N uniF1E0 ; G 451
U 61921 ; WX 857 ; N _451 ; G 452
U 61922 ; WX 1000 ; N _452 ; G 453
U 61923 ; WX 1000 ; N _453 ; G 454
U 61924 ; WX 1000 ; N _454 ; G 455
U 61925 ; WX 1000 ; N _455 ; G 456
U 61926 ; WX 1000 ; N _456 ; G 457
U 61927 ; WX 1000 ; N _457 ; G 458
U 61928 ; WX 1000 ; N _458 ; G 459
U 61929 ; WX 857 ; N _459 ; G 460
U 61930 ; WX 1143 ; N _460 ; G 461
U 61931 ; WX 1143 ; N _461 ; G 462
U 61932 ; WX 1000 ; N _462 ; G 463
U 61933 ; WX 857 ; N _463 ; G 464
U 61934 ; WX 1000 ; N _464 ; G 465
U 61936 ; WX 1286 ; N uniF1F0 ; G 466
U 61937 ; WX 1286 ; N _466 ; G 467
U 61938 ; WX 1286 ; N _467 ; G 468
U 61939 ; WX 1286 ; N f1f3 ; G 469
U 61940 ; WX 1286 ; N _469 ; G 470
U 61941 ; WX 1286 ; N _470 ; G 471
U 61942 ; WX 1143 ; N _471 ; G 472
U 61943 ; WX 1143 ; N _472 ; G 473
U 61944 ; WX 786 ; N _473 ; G 474
U 61945 ; WX 857 ; N _474 ; G 475
U 61946 ; WX 857 ; N _475 ; G 476
U 61947 ; WX 1000 ; N _476 ; G 477
U 61948 ; WX 1000 ; N f1fc ; G 478
U 61949 ; WX 1000 ; N _478 ; G 479
U 61950 ; WX 1143 ; N _479 ; G 480
U 61952 ; WX 1000 ; N _480 ; G 481
U 61953 ; WX 1143 ; N _481 ; G 482
U 61954 ; WX 1000 ; N _482 ; G 483
U 61955 ; WX 857 ; N _483 ; G 484
U 61956 ; WX 1143 ; N _484 ; G 485
U 61957 ; WX 1143 ; N _485 ; G 486
U 61958 ; WX 1286 ; N _486 ; G 487
U 61959 ; WX 857 ; N _487 ; G 488
U 61960 ; WX 1143 ; N _488 ; G 489
U 61961 ; WX 714 ; N _489 ; G 490
U 61962 ; WX 1143 ; N _490 ; G 491
U 61963 ; WX 857 ; N _491 ; G 492
U 61964 ; WX 857 ; N _492 ; G 493
U 61965 ; WX 857 ; N _493 ; G 494
U 61966 ; WX 1143 ; N _494 ; G 495
U 61968 ; WX 857 ; N f210 ; G 496
U 61969 ; WX 857 ; N _496 ; G 497
U 61970 ; WX 1143 ; N f212 ; G 498
U 61971 ; WX 1143 ; N _498 ; G 499
U 61972 ; WX 857 ; N _499 ; G 500
U 61973 ; WX 1143 ; N _500 ; G 501
U 61974 ; WX 1143 ; N _501 ; G 502
U 61975 ; WX 929 ; N _502 ; G 503
U 61976 ; WX 929 ; N _503 ; G 504
U 61977 ; WX 1143 ; N _504 ; G 505
U 61978 ; WX 1143 ; N _505 ; G 506
U 61979 ; WX 857 ; N _506 ; G 507
U 61980 ; WX 1286 ; N _507 ; G 508
U 61981 ; WX 857 ; N _508 ; G 509
U 61982 ; WX 1000 ; N _509 ; G 510
U 61985 ; WX 714 ; N venus ; G 511
U 61986 ; WX 857 ; N _511 ; G 512
U 61987 ; WX 714 ; N _512 ; G 513
U 61988 ; WX 857 ; N _513 ; G 514
U 61989 ; WX 1000 ; N _514 ; G 515
U 61990 ; WX 1000 ; N _515 ; G 516
U 61991 ; WX 1071 ; N _516 ; G 517
U 61992 ; WX 1143 ; N _517 ; G 518
U 61993 ; WX 857 ; N _518 ; G 519
U 61994 ; WX 714 ; N _519 ; G 520
U 61995 ; WX 1143 ; N _520 ; G 521
U 61996 ; WX 714 ; N _521 ; G 522
U 61997 ; WX 714 ; N _522 ; G 523
U 61998 ; WX 1000 ; N _523 ; G 524
U 61999 ; WX 1000 ; N _524 ; G 525
U 62000 ; WX 857 ; N _525 ; G 526
U 62001 ; WX 714 ; N _526 ; G 527
U 62002 ; WX 857 ; N _527 ; G 528
U 62003 ; WX 1000 ; N _528 ; G 529
U 62004 ; WX 1143 ; N _529 ; G 530
U 62005 ; WX 1143 ; N _530 ; G 531
U 62006 ; WX 1143 ; N _531 ; G 532
U 62007 ; WX 857 ; N _532 ; G 533
U 62008 ; WX 857 ; N _533 ; G 534
U 62009 ; WX 857 ; N _534 ; G 535
U 62010 ; WX 1000 ; N _535 ; G 536
U 62011 ; WX 857 ; N _536 ; G 537
U 62012 ; WX 1281 ; N _537 ; G 538
U 62013 ; WX 1286 ; N _538 ; G 539
U 62014 ; WX 1000 ; N _539 ; G 540
U 62016 ; WX 1286 ; N _540 ; G 541
U 62017 ; WX 1286 ; N _541 ; G 542
U 62018 ; WX 1286 ; N _542 ; G 543
U 62019 ; WX 1286 ; N _543 ; G 544
U 62020 ; WX 1286 ; N _544 ; G 545
U 62021 ; WX 714 ; N _545 ; G 546
U 62022 ; WX 571 ; N _546 ; G 547
U 62023 ; WX 1143 ; N _547 ; G 548
U 62024 ; WX 1286 ; N _548 ; G 549
U 62025 ; WX 857 ; N _549 ; G 550
U 62026 ; WX 857 ; N _550 ; G 551
U 62027 ; WX 1286 ; N _551 ; G 552
U 62028 ; WX 1286 ; N _552 ; G 553
U 62029 ; WX 1000 ; N _553 ; G 554
U 62030 ; WX 1286 ; N _554 ; G 555
U 62032 ; WX 857 ; N _555 ; G 556
U 62033 ; WX 857 ; N _556 ; G 557
U 62034 ; WX 857 ; N _557 ; G 558
U 62035 ; WX 857 ; N _558 ; G 559
U 62036 ; WX 857 ; N _559 ; G 560
U 62037 ; WX 857 ; N _560 ; G 561
U 62038 ; WX 1000 ; N _561 ; G 562
U 62039 ; WX 1000 ; N _562 ; G 563
U 62040 ; WX 1143 ; N _563 ; G 564
U 62041 ; WX 1143 ; N _564 ; G 565
U 62042 ; WX 1000 ; N _565 ; G 566
U 62043 ; WX 857 ; N _566 ; G 567
U 62044 ; WX 1101 ; N _567 ; G 568
U 62045 ; WX 1000 ; N _568 ; G 569
U 62046 ; WX 1000 ; N _569 ; G 570
U 62048 ; WX 1143 ; N f260 ; G 571
U 62049 ; WX 1000 ; N f261 ; G 572
U 62050 ; WX 1286 ; N _572 ; G 573
U 62051 ; WX 714 ; N f263 ; G 574
U 62052 ; WX 857 ; N _574 ; G 575
U 62053 ; WX 960 ; N _575 ; G 576
U 62054 ; WX 1286 ; N _576 ; G 577
U 62055 ; WX 1000 ; N _577 ; G 578
U 62056 ; WX 1000 ; N _578 ; G 579
U 62057 ; WX 1000 ; N _579 ; G 580
U 62058 ; WX 1000 ; N _580 ; G 581
U 62059 ; WX 1000 ; N _581 ; G 582
U 62060 ; WX 1143 ; N _582 ; G 583
U 62061 ; WX 1000 ; N _583 ; G 584
U 62062 ; WX 857 ; N _584 ; G 585
U 62064 ; WX 1000 ; N _585 ; G 586
U 62065 ; WX 1000 ; N _586 ; G 587
U 62066 ; WX 1000 ; N _587 ; G 588
U 62067 ; WX 1000 ; N _588 ; G 589
U 62068 ; WX 1000 ; N _589 ; G 590
U 62069 ; WX 1000 ; N _590 ; G 591
U 62070 ; WX 571 ; N _591 ; G 592
U 62071 ; WX 1000 ; N _592 ; G 593
U 62072 ; WX 1143 ; N _593 ; G 594
U 62073 ; WX 1000 ; N _594 ; G 595
U 62074 ; WX 1000 ; N _595 ; G 596
U 62075 ; WX 1000 ; N _596 ; G 597
U 62076 ; WX 571 ; N _597 ; G 598
U 62077 ; WX 1000 ; N _598 ; G 599
U 62078 ; WX 857 ; N f27e ; G 600
U 62080 ; WX 857 ; N uniF280 ; G 601
U 62081 ; WX 1000 ; N uniF281 ; G 602
U 62082 ; WX 1000 ; N _602 ; G 603
U 62083 ; WX 1286 ; N _603 ; G 604
U 62084 ; WX 1000 ; N _604 ; G 605
U 62085 ; WX 1000 ; N uniF285 ; G 606
U 62086 ; WX 1000 ; N uniF286 ; G 607
U 62087 ; WX 1286 ; N _607 ; G 608
U 62088 ; WX 1000 ; N _608 ; G 609
U 62089 ; WX 1286 ; N _609 ; G 610
U 62090 ; WX 857 ; N _610 ; G 611
U 62091 ; WX 857 ; N _611 ; G 612
U 62092 ; WX 857 ; N _612 ; G 613
U 62093 ; WX 857 ; N _613 ; G 614
U 62094 ; WX 857 ; N _614 ; G 615
U 62096 ; WX 1000 ; N _615 ; G 616
U 62097 ; WX 1143 ; N _616 ; G 617
U 62098 ; WX 1000 ; N _617 ; G 618
U 62099 ; WX 857 ; N _618 ; G 619
U 62100 ; WX 571 ; N _619 ; G 620
U 62101 ; WX 857 ; N _620 ; G 621
U 62102 ; WX 1000 ; N _621 ; G 622
U 62103 ; WX 1000 ; N _622 ; G 623
U 62104 ; WX 857 ; N _623 ; G 624
U 62105 ; WX 1000 ; N _624 ; G 625
U 62106 ; WX 1000 ; N _625 ; G 626
U 62107 ; WX 857 ; N _626 ; G 627
U 62108 ; WX 857 ; N _627 ; G 628
U 62109 ; WX 786 ; N _628 ; G 629
U 62110 ; WX 1286 ; N _629 ; G 630
U 62112 ; WX 786 ; N uniF2A0 ; G 631
U 62113 ; WX 1214 ; N uniF2A1 ; G 632
U 62114 ; WX 1000 ; N uniF2A2 ; G 633
U 62115 ; WX 1286 ; N uniF2A3 ; G 634
U 62116 ; WX 1000 ; N uniF2A4 ; G 635
U 62117 ; WX 857 ; N uniF2A5 ; G 636
U 62118 ; WX 857 ; N uniF2A6 ; G 637
U 62119 ; WX 929 ; N uniF2A7 ; G 638
U 62120 ; WX 1000 ; N uniF2A8 ; G 639
U 62121 ; WX 714 ; N uniF2A9 ; G 640
U 62122 ; WX 857 ; N uniF2AA ; G 641
U 62123 ; WX 857 ; N uniF2AB ; G 642
U 62124 ; WX 929 ; N uniF2AC ; G 643
U 62125 ; WX 857 ; N uniF2AD ; G 644
U 62126 ; WX 1286 ; N uniF2AE ; G 645
U 62128 ; WX 857 ; N uniF2B0 ; G 646
U 62129 ; WX 929 ; N uniF2B1 ; G 647
U 62130 ; WX 1000 ; N uniF2B2 ; G 648
U 62131 ; WX 857 ; N uniF2B3 ; G 649
U 62132 ; WX 857 ; N uniF2B4 ; G 650
U 62133 ; WX 1286 ; N uniF2B5 ; G 651
U 62134 ; WX 1000 ; N uniF2B6 ; G 652
U 62135 ; WX 1000 ; N uniF2B7 ; G 653
U 62136 ; WX 857 ; N uniF2B8 ; G 654
U 62137 ; WX 929 ; N uniF2B9 ; G 655
U 62138 ; WX 929 ; N uniF2BA ; G 656
U 62139 ; WX 1143 ; N uniF2BB ; G 657
U 62140 ; WX 1143 ; N uniF2BC ; G 658
U 62141 ; WX 1000 ; N uniF2BD ; G 659
U 62142 ; WX 1000 ; N uniF2BE ; G 660
U 62144 ; WX 857 ; N uniF2C0 ; G 661
U 62145 ; WX 714 ; N uniF2C1 ; G 662
U 62146 ; WX 1143 ; N uniF2C2 ; G 663
U 62147 ; WX 1143 ; N uniF2C3 ; G 664
U 62148 ; WX 1000 ; N uniF2C4 ; G 665
U 62149 ; WX 1286 ; N uniF2C5 ; G 666
U 62150 ; WX 1000 ; N uniF2C6 ; G 667
U 62151 ; WX 571 ; N uniF2C7 ; G 668
U 62152 ; WX 571 ; N uniF2C8 ; G 669
U 62153 ; WX 571 ; N uniF2C9 ; G 670
U 62154 ; WX 571 ; N uniF2CA ; G 671
U 62155 ; WX 571 ; N uniF2CB ; G 672
U 62156 ; WX 1071 ; N uniF2CC ; G 673
U 62157 ; WX 1000 ; N uniF2CD ; G 674
U 62158 ; WX 857 ; N uniF2CE ; G 675
U 62160 ; WX 1000 ; N uniF2D0 ; G 676
U 62161 ; WX 1000 ; N uniF2D1 ; G 677
U 62162 ; WX 1143 ; N uniF2D2 ; G 678
U 62163 ; WX 1000 ; N uniF2D3 ; G 679
U 62164 ; WX 1000 ; N uniF2D4 ; G 680
U 62165 ; WX 1000 ; N uniF2D5 ; G 681
U 62166 ; WX 1001 ; N uniF2D6 ; G 682
U 62167 ; WX 857 ; N uniF2D7 ; G 683
U 62168 ; WX 857 ; N uniF2D8 ; G 684
U 62169 ; WX 1214 ; N uniF2D9 ; G 685
U 62170 ; WX 1000 ; N uniF2DA ; G 686
U 62171 ; WX 857 ; N uniF2DB ; G 687
U 62172 ; WX 929 ; N uniF2DC ; G 688
U 62173 ; WX 1000 ; N uniF2DD ; G 689
U 62174 ; WX 1000 ; N uniF2DE ; G 690
U 62176 ; WX 1071 ; N uniF2E0 ; G 691
U 62177 ; WX 1000 ; N uniF2E1 ; G 692
U 62178 ; WX 1000 ; N uniF2E2 ; G 693
U 62179 ; WX 1000 ; N uniF2E3 ; G 694
U 62180 ; WX 1000 ; N uniF2E4 ; G 695
U 62181 ; WX 1000 ; N uniF2E5 ; G 696
U 62182 ; WX 1000 ; N uniF2E6 ; G 697
U 62183 ; WX 1000 ; N uniF2E7 ; G 698
U 62184 ; WX 1000 ; N _698 ; G 699
U 62185 ; WX 1000 ; N uniF2E9 ; G 700
U 62186 ; WX 1000 ; N uniF2EA ; G 701
U 62187 ; WX 1000 ; N uniF2EB ; G 702
U 62188 ; WX 1000 ; N uniF2EC ; G 703
U 62189 ; WX 1000 ; N uniF2ED ; G 704
U 62190 ; WX 1000 ; N uniF2EE ; G 705
U 62720 ; WX 1000 ; N lessequal ; G 706
EndCharMetrics
EndFontMetrics
Binary file not shown.
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long