Compare commits

..

1 Commits

18 changed files with 52 additions and 458 deletions
@@ -15,7 +15,6 @@ use App\Classes\Modules\Contacts\Processors\CreateContactProcessor;
use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject; use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor; use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor;
use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\RemarkTypes;
use App\Http\Resources\AddressResource; use App\Http\Resources\AddressResource;
use App\Models\Address; use App\Models\Address;
use ErrorException; use ErrorException;
@@ -101,16 +100,6 @@ class CreateAddressLogic extends AbstractControllerLogic
$this->createRemarkProcessor->execute($address, $remarkObject); $this->createRemarkProcessor->execute($address, $remarkObject);
} }
$addressExtraFields = [
'property_type' => $request->input('property_type'),
'tools_required_unload' => $request->input('tools_required_unload'),
'pickup_time_from' => $request->input('pickup_time_from'),
'pickup_time_to' => $request->input('pickup_time_to'),
];
$addressExtraFieldsObject = new RemarkObject(json_encode($addressExtraFields), Auth()->user()->id, RemarkTypes::ADDRESS_EXTRA_COLUMNS);
$this->createRemarkProcessor->execute($address, $addressExtraFieldsObject);
return $this->resourceResponse(new AddressResource($address)); return $this->resourceResponse(new AddressResource($address));
} }
@@ -15,7 +15,6 @@ use App\Classes\Modules\Remarks\DataTransferObjects\RemarkObject;
use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor; use App\Classes\Modules\Remarks\Processors\CreateRemarkProcessor;
use App\Classes\ValueObjects\Constants\AddressType; use App\Classes\ValueObjects\Constants\AddressType;
use App\Classes\ValueObjects\Constants\ApprovalStatus; use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\RemarkTypes;
use App\Http\Resources\AddressResource; use App\Http\Resources\AddressResource;
use App\Models\Address; use App\Models\Address;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
@@ -103,16 +102,6 @@ class UpdateAddressLogic extends AbstractControllerLogic
$this->createRemarkProcessor->execute($address, $remarkObject); $this->createRemarkProcessor->execute($address, $remarkObject);
} }
$addressExtraFields = [
'property_type' => $request->input('property_type'),
'tools_required_unload' => $request->input('tools_required_unload'),
'pickup_time_from' => $request->input('pickup_time_from'),
'pickup_time_to' => $request->input('pickup_time_to'),
];
$addressExtraFieldsObject = new RemarkObject(json_encode($addressExtraFields), Auth()->user()->id, RemarkTypes::ADDRESS_EXTRA_COLUMNS);
$this->createRemarkProcessor->execute($address, $addressExtraFieldsObject);
return $this->resourceResponse(new AddressResource($address)); return $this->resourceResponse(new AddressResource($address));
} }
@@ -13,14 +13,10 @@ class RemarkObject implements DataTransferObject
/** @var string*/ /** @var string*/
private $content; private $content;
/** @var int|null */ public function __construct(string $content, int $commenterID)
private $type;
public function __construct(string $content, int $commenterID, int $type = null)
{ {
$this->commenterID = $commenterID; $this->commenterID = $commenterID;
$this->content = $content; $this->content = $content;
$this->type = $type;
} }
/** /**
@@ -39,12 +35,4 @@ class RemarkObject implements DataTransferObject
return $this->content; return $this->content;
} }
/**
* @return int|null
*/
public function getType(): ?int
{
return $this->type;
}
} }
@@ -24,7 +24,6 @@ class CreatesRemark extends AbstractUpdateRelationshipRecord
$model->commenter_id = $object->getCommenterId(); $model->commenter_id = $object->getCommenterId();
$model->content = $object->getContent(); $model->content = $object->getContent();
$model->type = $object->getType();
return $this->handler($remarkable->remarks(), $model); return $this->handler($remarkable->remarks(), $model);
@@ -1,188 +0,0 @@
<?php
namespace App\Classes\Modules\Transactions\Processors;
use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\Modules\Transactions\Services\FetchesTransaction;
use App\Classes\Modules\Transactions\Services\GeneratesTransactionBillNumber;
use App\Classes\Modules\Transactions\Services\CreatesPaymentTransaction;
use App\Classes\Modules\Transactions\Services\CreatesTransactionDetail;
use App\Classes\Modules\Billplzs\Services\CreatesBillplzBill;
use App\Classes\Modules\Transactions\Services\CreatesTransactionableTransaction;
use App\Classes\Modules\Transactions\DataTransferObjects\TransactionObject;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Classes\ValueObjects\Constants\PaymentMethodType;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\Modules\Wallets\Services\UpdatesWalletBalance;
use App\Models\Transaction;
use App\Models\Wallet;
use App\Classes\Modules\Orders\Processors\UpdateDoFromVTPortalProcessor;
use App\Classes\Modules\Orders\Processors\UpdateDoFromYDPortalProcessor;
use App\Classes\Modules\Transactions\Services\UpdatesTransactionStatus;
use Illuminate\Support\Facades\Log;
//DATE: 20240616
//THIS IS A ONE TIME FIX PROCESSOR MEANT TO FIX A GROUP PAYMENT THAT GOT STUCK: https://izyim.cief-malaysia.com/customer/943GCC/payment-and-billing
//TRNASACTION WITH ID: 16803
//GROUP WITH ID: 609
class CreatePaymentTransactionOneTimeFixProcessor
{
/** @var GeneratesTransactionBillNumber */
private $generatesTransactionBillNumber;
/** @var CreatesPaymentTransaction */
private $createsPaymentTransaction;
/** @var CreatesBillplzBill */
private $createsBillplzBill;
/** @var CreatesTransactionableTransaction */
private $createsTransactionableTransaction;
/** @var UpdatesWalletBalance */
private $updatesWalletBalance;
/** @var UpdateDoFromVTPortalProcessor */
private $updateDoFromVTPortalProcessor;
/** @var UpdateDoFromYDPortalProcessor */
private $updateDoFromYDPortalProcessor ;
/** @var UpdatesTransactionStatus */
private $updatesTransactionStatus ;
/**
* @param FetchesTransaction $fetchesTransaction,
* @param GeneratesTransactionBillNumber $generatesTransactionBillNumber,
* @param CreatesPaymentTransaction $createsPaymentTransaction
* @param CreatesTransactionDetail $createsTransactionDetail
* @param CreatesBillplzBill $createsBillplzBil
* @param CreatesTransactionableTransaction $createsTransactionableTransaction
* @param UpdatesWalletBalance $updatesWalletBalance
* @param UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor
* @param UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor
* @param UpdatesTransactionStatus $updatesTransactionStatus
*/
public function __construct(
GeneratesTransactionBillNumber $generatesTransactionBillNumber,
CreatesPaymentTransaction $createsPaymentTransaction,
CreatesBillplzBill $createsBillplzBill,
CreatesTransactionableTransaction $createsTransactionableTransaction,
UpdatesWalletBalance $updatesWalletBalance,
UpdateDoFromVTPortalProcessor $updateDoFromVTPortalProcessor,
UpdateDoFromYDPortalProcessor $updateDoFromYDPortalProcessor,
UpdatesTransactionStatus $updatesTransactionStatus
)
{
$this->generatesTransactionBillNumber = $generatesTransactionBillNumber;
$this->createsPaymentTransaction = $createsPaymentTransaction;
$this->createsBillplzBill = $createsBillplzBill;
$this->createsTransactionableTransaction = $createsTransactionableTransaction;
$this->updatesWalletBalance = $updatesWalletBalance;
$this->updateDoFromVTPortalProcessor = $updateDoFromVTPortalProcessor;
$this->updateDoFromYDPortalProcessor = $updateDoFromYDPortalProcessor;
$this->updatesTransactionStatus = $updatesTransactionStatus;
}
/**
* @throws MalformedRequestException
*/
public function execute(Transaction $invoice, $payment_method, $bank_code, $date, $run = true)
{
$amount = $invoice->amount;
Log::info($invoice->owner);
$company_module = $invoice->owner->owner->companyModule()->first();
$approvalStatus = ApprovalStatus::PENDING_SUBMISSION;
$billNumber = $this->generatesTransactionBillNumber->execute('PYMT-');
$payment_reference = null;
if ($payment_method == PaymentMethodType::PAYMENT_GATEWAY) {
// create billplz transaction
$payment_method = PaymentMethodType::PAYMENT_GATEWAY;
$billPlzBill = $this->createsBillplzBill->execute(
$company_module->name,
(app()->environment(['production'])) ? $company_module->employees()->first()->email : 'uldvstar@gmail.com',
'This payment is for the invoice number . ' . $billNumber,
$amount,
$billNumber,
$bank_code,
true
);
$payment_reference = $billPlzBill->id;
}
else if ($payment_method === PaymentMethodType::WALLET) {
/** @var Wallet $wallet */
$wallet = $company_module->wallets()->first();
// if((float) number_format(($wallet->amount - $amount),2) < 0){
// throw new MalformedRequestException('Insufficient wallet balance. Please Top up your wallet.');
// }
$walletPaymentBillNumber = $this->generatesTransactionBillNumber->execute('PYMT-');
$transaction_object = new TransactionObject($walletPaymentBillNumber, TransactionType::PAYMENT, 1, $company_module->id, 1, PaymentMethodType::WALLET, $amount, $amount, 1, 1, 1, 0, 0, null, ApprovalStatus::APPROVED, [], '');
$transaction = $this->createsTransactionableTransaction->execute($wallet, $transaction_object);
$transaction->created_at = $date;
$transaction->updated_at = $date;
$transaction->save();
$payment_reference = $walletPaymentBillNumber;
$this->updatesWalletBalance->execute($wallet, ($amount * -1));
if($run)
{
$packingList = $invoice->owner;
$order = $packingList->owner;
$packingList->status = ApprovalStatus::APPROVED;
$packingList->save();
if(app()->environment('production')){
$this->updateDoFromVTPortalProcessor->execute($packingList);
$this->updateDoFromYDPortalProcessor->execute($packingList);
}
}
// later use this variabke to create a approved payment transaction
$approvalStatus = ApprovalStatus::APPROVED;
// update invoice to completed
if($run){
$this->updatesTransactionStatus->execute($invoice, ApprovalStatus::COMPLETED);
}
}
else {
$payment_method = PaymentMethodType::CASH;
}
$object = new TransactionObject(
$billNumber,
TransactionType::PAYMENT,
$company_module->id,
1,
1,
$payment_method,
$amount,
$amount,
1,
1,
0,
0,
0,
null,
$approvalStatus,
null,
$payment_reference
);
$payment_transaction = $this->createsPaymentTransaction->execute($invoice, $object);
return $payment_transaction;
}
}
@@ -10,6 +10,4 @@ final class RemarkTypes
public const EXTERNAL = 1; public const EXTERNAL = 1;
public const ADDRESS_EXTRA_COLUMNS = 2; }
}
@@ -55,12 +55,11 @@ class OneTimeTransactionFixBillplzFailedCallback extends Command
$this->outputArray = []; $this->outputArray = [];
$start = new Carbon(); $start = new Carbon();
//Transaction fix with this one time fix command: 15205, 16803 //This transaction, 15205 has approve payment but not its owner, shipping invoice
//This transaction, 16803 has approve payment but not its owner, shipping invoice $transaction = Transaction::whereIn('id', [15205])->first();
$transaction = Transaction::whereIn('id', [16803])->first(); $this->info(Carbon::now() . ' : One time fix failled callback from billplz for transaction with id 15205 cron started.');
$this->info(Carbon::now() . ' : One time fix failled callback from billplz for transaction with id 16803 cron started.');
if($transaction && $transaction->id == 16803){ if($transaction && $transaction->id == 15205){
$status = ApprovalStatus::APPROVED; $status = ApprovalStatus::APPROVED;
$this->callbackBillplzProcessor->execute($transaction, $status); $this->callbackBillplzProcessor->execute($transaction, $status);
@@ -69,6 +68,6 @@ class OneTimeTransactionFixBillplzFailedCallback extends Command
$end = new Carbon(); $end = new Carbon();
$elapsedTime = $start->diff($end)->format('%H:%I:%S'); $elapsedTime = $start->diff($end)->format('%H:%I:%S');
$this->info(Carbon::now() . ' : One time fix failled callback from billplz for transaction with id 16803 cron ended. ElapsedTime: ' . $elapsedTime); $this->info(Carbon::now() . ' : One time fix failled callback from billplz for transaction with id 15205 cron ended. ElapsedTime: ' . $elapsedTime);
} }
} }
-8
View File
@@ -27,9 +27,6 @@ class AddressResource extends JsonResource
$outstationPostcodeConstant = $outstationPostcodeConstantObject->isEmpty() ? [] : (array)$outstationPostcodeConstantObject->first()->value; $outstationPostcodeConstant = $outstationPostcodeConstantObject->isEmpty() ? [] : (array)$outstationPostcodeConstantObject->first()->value;
in_array((String)$this->postcode, $outstationPostcodeConstant) ? $postcodeArea = 'OUTSTATION_POSTCODE' : null; in_array((String)$this->postcode, $outstationPostcodeConstant) ? $postcodeArea = 'OUTSTATION_POSTCODE' : null;
$extrafields = json_decode($this->addressExtraFields->first());
$extrafields = $extrafields ? (isset($extrafields->content) ? json_decode($extrafields->content) : null) : null;
return [ return [
'id' => $this->id, 'id' => $this->id,
'reference' => $this->reference, 'reference' => $this->reference,
@@ -46,11 +43,6 @@ class AddressResource extends JsonResource
'contact' => new ContactResource($this->contacts->first()), 'contact' => new ContactResource($this->contacts->first()),
'remark' => new RemarkResource($this->remarks->first()), 'remark' => new RemarkResource($this->remarks->first()),
'type' => $this->type, 'type' => $this->type,
'extrafields' => $extrafields,
'property_type' => $extrafields ? $extrafields->property_type : null,
'tools_required_unload' => $extrafields ? $extrafields->tools_required_unload : null,
'pickup_time_from' => $extrafields ? $extrafields->pickup_time_from : null,
'pickup_time_to' => $extrafields ? $extrafields->pickup_time_to : null,
$this->mergeWhen($this->relationLoaded('owner'), [ $this->mergeWhen($this->relationLoaded('owner'), [
'owner' => $this->when($this->owner instanceof Order, [ 'owner' => $this->when($this->owner instanceof Order, [
'reference' => $this->owner->reference, 'reference' => $this->owner->reference,
@@ -28,9 +28,7 @@ class TransactionWithStorageResource extends JsonResource
$groupPaymentAttemptsFiltered = []; $groupPaymentAttemptsFiltered = [];
$group_payment_expired = null; $group_payment_expired = null;
$group_payment_history = null; $group_payment_history = null;
$group_payment_history_query = null;
$groupTotalAmount = 0; $groupTotalAmount = 0;
$payment_history = null;
if ($this->owner instanceof Transaction) { if ($this->owner instanceof Transaction) {
if ($this->owner) { if ($this->owner) {
@@ -46,8 +44,7 @@ class TransactionWithStorageResource extends JsonResource
if($this->groups){ if($this->groups){
$group_payment_attempts = GroupForOrderV2Resource::collection($this->groups->whereNotIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])); $group_payment_attempts = GroupForOrderV2Resource::collection($this->groups->whereNotIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]));
$group_payment_expired = GroupForOrderV2Resource::collection($this->groupsWithTrashed->whereIn('status', [ApprovalStatus::EXPIRED])); $group_payment_expired = GroupForOrderV2Resource::collection($this->groupsWithTrashed->whereIn('status', [ApprovalStatus::EXPIRED]));
$group_payment_history_query = $this->groups->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::REJECTED]); $group_payment_history = GroupForOrderV2Resource::collection($this->groups->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::REJECTED]));
$group_payment_history = GroupForOrderV2Resource::collection($group_payment_history_query);
} }
} else { } else {
@@ -64,7 +61,7 @@ class TransactionWithStorageResource extends JsonResource
} }
$ts = $this->groups->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION])->last(); $ts = $this->groups->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION])->last();
if ($ts && $group_payment_history && $group_payment_attempts) { if ($ts) {
$paymentTransaction = Transaction::where('payment_reference', $ts->reference)->whereIn('status', [ApprovalStatus::PENDING_SUBMISSION])->first(); $paymentTransaction = Transaction::where('payment_reference', $ts->reference)->whereIn('status', [ApprovalStatus::PENDING_SUBMISSION])->first();
if($paymentTransaction){ if($paymentTransaction){
$groupTotalAmount = (double) $this->amount; $groupTotalAmount = (double) $this->amount;
@@ -84,21 +81,6 @@ class TransactionWithStorageResource extends JsonResource
} }
$payment_history = TransactionResource::collection($this->transactions()
->payments()
->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::COMPLETED, ApprovalStatus::REJECTED])
->get());
//For 'Your Payment Proof' at frontend
if($group_payment_history_query && count($group_payment_history_query) > 0){
if($this->getReferenceForGroupPayment($group_payment_history_query)){
foreach ($payment_history as $item) {
$item['payment_reference'] = $this->getReferenceForGroupPayment($group_payment_history_query);
}
}
}
return [ return [
'id' => $this->id, 'id' => $this->id,
'owner_type' => $this->owner_type, 'owner_type' => $this->owner_type,
@@ -135,7 +117,12 @@ class TransactionWithStorageResource extends JsonResource
->payments()->where('status', ApprovalStatus::EXPIRED) ->payments()->where('status', ApprovalStatus::EXPIRED)
->get() ->get()
), ),
'payment_history' => $payment_history, 'payment_history' => TransactionResource::collection(
$this->transactions()
->payments()
->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::COMPLETED, ApprovalStatus::REJECTED])
->get()
),
'remarks' => RemarkResource::collection($this->remarks), 'remarks' => RemarkResource::collection($this->remarks),
'packing_list_reference' => $packingListReference, 'packing_list_reference' => $packingListReference,
'storages' => $this->storages ? $this->storages : null, //from middleware 'storages' => $this->storages ? $this->storages : null, //from middleware
@@ -145,12 +132,4 @@ class TransactionWithStorageResource extends JsonResource
'created_at' => Carbon::parse($this->created_at)->format('d-m-Y') 'created_at' => Carbon::parse($this->created_at)->format('d-m-Y')
]; ];
} }
private function getReferenceForGroupPayment($groups){
if(count($groups)){
$firstGroup = $groups[0];
return $firstGroup['reference'];
}
return null;
}
} }
-9
View File
@@ -4,7 +4,6 @@ namespace App\Models;
use App\Classes\General\Interfaces\Contactable; use App\Classes\General\Interfaces\Contactable;
use App\Classes\General\Interfaces\Remarkable; use App\Classes\General\Interfaces\Remarkable;
use App\Classes\ValueObjects\Constants\RemarkTypes;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasOne; use Illuminate\Database\Eloquent\Relations\HasOne;
@@ -90,12 +89,4 @@ class Address extends AbstractModel implements Contactable, Remarkable
{ {
return $this->morphMany(Remark::class, 'owner'); return $this->morphMany(Remark::class, 'owner');
} }
/**
* @return MorphMany
*/
public function addressExtraFields(): MorphMany
{
return $this->morphMany(Remark::class, 'owner')->where('type', RemarkTypes::ADDRESS_EXTRA_COLUMNS);
}
} }
@@ -1,32 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddTypeToRemarksTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('remarks', function (Blueprint $table) {
$table->string('type')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('remarks', function (Blueprint $table) {
$table->dropColumn('type');
});
}
}
@@ -1,58 +0,0 @@
<template>
<div>
<label class="text-primary">卸货工具 Tools required to unload goods</label>
<vue-multi-select
ref="multiSelect"
:options="options"
:btnLabel="btnLabel"
@open="open"
@close="close"
:selectOptions="data">
<template v-slot:option="{ option }">
<input type="checkbox" :checked="option.selected"/>
<span>{{ option.name }}</span>
</template>
</vue-multi-select>
</div>
</template>
<script>
import vueMultiSelect from 'vue-multi-select';
import 'vue-multi-select/dist/lib/vue-multi-select.css';
export default {
data() {
return {
values: [],
data: [{
list: [
{ name: 'Manpower' },
{ name: 'Forklift' },
{ name: 'None of the above' }
],
}],
options: {
multi: true,
groups: true,
},
};
},
methods: {
open() {
console.log('open');
},
close() {
console.log('close');
},
btnLabel(values) {
if (values.length === 0) {
return 'Select Tools required';
}
return values.map(v => v.name).join(', ');
},
},
components: {
vueMultiSelect,
},
};
</script>
@@ -3,6 +3,14 @@
<div class="col"> <div class="col">
<div class="row" v-if="![7,8].includes($store.getters.getCompanyModuleType)"> <div class="row" v-if="![7,8].includes($store.getters.getCompanyModuleType)">
<div class="col"> <div class="col">
<div class="row m-b-15">
<div class="col">
<validation-wrapper-component :validator="$v.parameters.reference">
<label>Address Reference/Label</label>
<input class="form-control" name="reference" v-model="parameters.reference">
</validation-wrapper-component>
</div>
</div>
<div class="row m-b-15"> <div class="row m-b-15">
<div class="col"> <div class="col">
<validation-wrapper-component :validator="$v.parameters.street_one"> <validation-wrapper-component :validator="$v.parameters.street_one">
@@ -33,14 +41,6 @@
</validation-wrapper-component> </validation-wrapper-component>
</div> </div>
</div> </div>
<div class="row m-b-15">
<div class="col">
<validation-wrapper-component :validator="$v.parameters.reference">
<label>Address Name / Label</label>
<input class="form-control" name="reference" v-model="parameters.reference" placeholder="E.g. Home Address">
</validation-wrapper-component>
</div>
</div>
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<div class="row"> <div class="row">
@@ -59,6 +59,14 @@
</validation-wrapper-component> </validation-wrapper-component>
</div> </div>
</div> </div>
<div class="row m-b-15">
<div class="col">
<validation-wrapper-component :validator="$v.parameters.remark">
<label>Delivery Remark</label>
<input class="form-control" name="remark" v-model="parameters.remark">
</validation-wrapper-component>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
@@ -117,48 +125,14 @@
</validation-wrapper-component> </validation-wrapper-component>
</div> </div>
</div> </div>
</div> <div class="row m-b-15">
</div> <div class="col">
<div class="row m-b-15"> <validation-wrapper-component :validator="$v.parameters.remark">
<div class="col"> <label>Remark</label>
<validation-wrapper-component :validator="$v.parameters.remark"> <input class="form-control" name="remark" v-model="parameters.remark">
<label>Delivery Remark</label> </validation-wrapper-component>
<input class="form-control" name="remark" v-model="parameters.remark"> </div>
</validation-wrapper-component> </div>
</div>
</div>
<div class="row m-b-15">
<div class="col-12 col-md pr-md-1 pb-3 pb-md-0">
<validation-wrapper-component :validator="$v.parameters.pickup_time_from">
<label>收货时间从 Available Hours From</label>
<input type="time" class="form-control" name="pickup_time" v-model="parameters.pickup_time_from">
</validation-wrapper-component>
</div>
<div class="col-12 col-md pl-md-1">
<validation-wrapper-component :validator="$v.parameters.pickup_time_to">
<label>最晚收货时间 Available Hours To</label>
<input type="time" class="form-control" name="latest_pickup_time" v-model="parameters.pickup_time_to">
</validation-wrapper-component>
</div>
</div>
<div class="row m-b-15">
<div class="col-12 col-md pr-md-1 pb-3 pb-md-0">
<validation-wrapper-component selectable :validator="$v.parameters.property_type">
<label>房型 Receiver's property type</label>
<select-component :options="['住家Landed house', '公寓Condominium (Drop on lobby only)', '工厂Factory', '店面Shop', '商场Shopping Mall (Drop on loading bay only)', 'Others']" v-model="parameters.property_type"></select-component>
</validation-wrapper-component>
</div>
<div class="col-12 col-md pl-md-1 pb-3 pb-md-0">
<!-- <validation-wrapper-component selectable :validator="$v.parameters.tools_required_unload">
<label>卸货工具 Tools require to unload goods</label>
<select-component :options="['Manpower', 'Forklift', 'None of above']" v-model="parameters.tools_required_unload"></select-component>
</validation-wrapper-component> -->
<address-extra-details-component v-model="parameters.tools_required_unload"></address-extra-details-component>
</div>
</div>
<div class="row justify-content-center allign-items-center">
<div class="col-12 col-sm-7">
<h6 class="text-center fs-12 text-danger">**kindly reply within 2 hours while warehouse contact to arrange for delivery, otherwise, reschedule of delivery date will apply</h6>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
@@ -180,7 +154,7 @@
props: { props: {
id: { id: {
type: Number, type: Number,
// required: true required: true
}, },
type: { type: {
type: Number, type: Number,
@@ -200,10 +174,6 @@
remark: '', remark: '',
phone: '', phone: '',
person_in_charge: '', person_in_charge: '',
property_type: '',
tools_required_unload: '',
pickup_time_from: '',
pickup_time_to: '',
} }
} }
@@ -219,16 +189,12 @@
this.parameters.phone = this.data.contact ? this.data.contact.phone : ''; this.parameters.phone = this.data.contact ? this.data.contact.phone : '';
this.parameters.person_in_charge = this.data.contact ? this.data.contact.reference : ''; this.parameters.person_in_charge = this.data.contact ? this.data.contact.reference : '';
this.parameters.remark = this.data.remark ? this.data.remark.content : ''; this.parameters.remark = this.data.remark ? this.data.remark.content : '';
this.parameters.property_type = this.data.property_type ? this.data.property_type : '';
this.parameters.tools_required_unload = this.data.tools_required_unload ? this.data.tools_required_unload : '';
this.parameters.pickup_time_from = this.data.pickup_time_from ? this.data.pickup_time_from : '';
this.parameters.pickup_time_to = this.data.pickup_time_to ? this.data.pickup_time_to : '';
} }
}, },
watch: { watch: {
'id': function () { 'id': function () {
this.parameters.company_module_id = this.id; this.parameters.company_module_id = this.id;
}, }
}, },
methods:{ methods:{
submitForm(){ submitForm(){
@@ -116,10 +116,9 @@
}, },
sumAmount () { sumAmount () {
var new_object = this.selectedInvoice; var new_object = this.selectedInvoice;
var total = Object.keys(new_object).reduce(function(total, key) { return Object.keys(new_object).reduce(function(total, key) {
return total + new_object[key].amount; return total + Math.round(new_object[key].amount * 100) / 100;
}, 0).toFixed(2); }, 0).toFixed(2);
return Math.round(total * 100) / 100;
}, },
selectedIds () { selectedIds () {
return this.selectedInvoice.map(s=>s.id); return this.selectedInvoice.map(s=>s.id);
@@ -17,7 +17,7 @@
<div class="col-auto hide" v-if="$store.getters.isSuperAdmin"> <div class="col-auto hide" v-if="$store.getters.isSuperAdmin">
<button type="button" class="btn b-rad-none btn-danger fs-11 requestModal" data-type="deletePackingList"><i class="fa fa-times text-white fs-12"></i></button> <button type="button" class="btn b-rad-none btn-danger fs-11 requestModal" data-type="deletePackingList"><i class="fa fa-times text-white fs-12"></i></button>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="deletePackingList"> <modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="deletePackingList">
<delete-packinglist-form-component :data="data" :section="section"></delete-packinglist-form-component> <delete-packinglist-form-component :data="data" section="section"></delete-packinglist-form-component>
</modal-component> </modal-component>
<button type="button" class="btn b-rad-none btn-primary fs-11 requestModal" data-type="claimPackingList">Claim</button> <button type="button" class="btn b-rad-none btn-primary fs-11 requestModal" data-type="claimPackingList">Claim</button>
</div> </div>
@@ -81,8 +81,7 @@
mixins: [componentHandler], mixins: [componentHandler],
data() { data() {
return { return {
isLoading: false, isLoading: false
section: 'unclaimedPackingListSection',
} }
} }
} }
@@ -157,13 +157,6 @@
</div> </div>
</a> </a>
</div> </div>
<div class="row no-margin" v-if="item.payment_method === 4 && item.payment_reference">
<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>
@@ -188,13 +181,9 @@
}, },
methods: { methods: {
clickExpand(){ clickExpand(){
// if(this.item if(this.item
// && ((this.item.payment_method !== 5 && this. item.documents.length) && ((this.item.payment_method !== 5 && this. item.documents.length)
// || (this.item.payment_method === 5 && (this.item.status === 2 || this.item.status === 3)))){ || (this.item.payment_method === 5 && (this.item.status === 2 || this.item.status === 3)))){
// this.expandPaymentDetails = !this.expandPaymentDetails;
// }
if(this.item){
this.expandPaymentDetails = !this.expandPaymentDetails; this.expandPaymentDetails = !this.expandPaymentDetails;
} }
}, },
@@ -10,20 +10,15 @@ export default {
}, },
street_one: { required }, street_one: { required },
street_two: { street_two: {
required required: requiredIf(function(){
// required: requiredIf(function(){ return [7,8].includes(this.$store.getters.getCompanyModuleType);
// return [7,8].includes(this.$store.getters.getCompanyModuleType); })
// })
}, },
district_id: { required }, district_id: { required },
post_code: { required }, post_code: { required },
remark: {}, remark: {},
phone: {required, numeric}, phone: {required, numeric},
person_in_charge: { required }, person_in_charge: { required },
property_type: { required },
tools_required_unload: { required },
pickup_time_from: { required },
pickup_time_to: { required },
} }
}, },
mixins: [addressFormHandler] mixins: [addressFormHandler]
@@ -131,7 +131,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="row" v-if="$store.getters.isAdmin"> <div class="row">
<div class="col"> <div class="col">
<admin-payments-billing-polling-section-component></admin-payments-billing-polling-section-component> <admin-payments-billing-polling-section-component></admin-payments-billing-polling-section-component>
</div> </div>