payments and billing

This commit is contained in:
edmondlang
2022-07-23 20:28:50 +08:00
parent 55882aaacb
commit 72f555d7d2
8 changed files with 362 additions and 1 deletions
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
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);
});
}
}
@@ -0,0 +1,20 @@
<?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);
});
}
}
@@ -0,0 +1,20 @@
<?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);
});
}
}
@@ -0,0 +1,129 @@
<template>
<div class="row m-b-15 m-l-5 m-r-10">
<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 v-if="item.receive_packing_list">{{item.receive_packing_list.transport.drop_date}}</p>
</div>
<div v-if="!item.order" 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.subtotal }}</div>
</div>
<div class="col-auto">
<div class="btn bg-grey no-border" @click="expanded = !expanded" v-if="item.shippng_transaction">
<i class="fa" :class="{'fa-angle-down': !expanded, 'fa-angle-up': expanded}" ></i>
</div>
<div class="btn bg-grey no-border muted" v-if="item.shippng_transaction">
<i class="fa fa-check fs-12"></i>
</div>
<div v-if="!item.shippng_transaction">
<div class="btn btn-outline-primary btn-lg pointer" @click="generateInvoice()">Generate Invoice</div>
</div>
</div>
</div>
</div>
</div>
<div class="row b-t b-grey p-t-10" v-show="expanded" v-if="item.shippng_transaction">
<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>{{ item.packages[0].container.container_reference }}</div>
</div>
<div class="col">
<p class="no-margin fs-10 all-caps">Due Date</p>
<div v-if="!item.packages[0].container.transport">n/a</div>
<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>
<div class="col">
<p class="no-margin fs-10 all-caps">Date Paid</p>
<div>Date paid or last payment date?</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 class="col">
<div class="btn btn-outline-complete btn-lg pointer" @click="generateInvoice()">Add Additional Chrges</div>
</div>
<div class="col-auto" v-if="item.shippng_transaction.documents">
<div v-for="file in item.shippng_transaction.documents.files" v-bind:key="file.id" class="col-auto no-padding">
<document-file-viewer-component :file="file">
<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>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import componentHandler from '../../../general/mixins/componentHandler';
export default {
props: {
invoice_status: {
type: String,
required: true
}
},
data(){
return {
parameters: {
packing_list_id: null,
},
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.supplier.create'), 'post', '', true, true);
},
updateStatus(status){
this.submit(this.route('api.packing_list.status.update', this.item.id, status), 'put', '', true, true)
},
successHandler(response){
this.item = response.payload.data;
// this.$forceUpdate();
}
},
mixins: [componentHandler]
}
</script>
File diff suppressed because one or more lines are too long
@@ -0,0 +1,8 @@
@extends('layouts.base_portal')
@section('inner_content')
<div class="row">
<div class="col-12 col-md-12 col-lg-9">
<admin-payments-billing-section-component></admin-payments-billing-section-component>
</div>
</div>
@endsection
File diff suppressed because one or more lines are too long
+5 -1
View File
@@ -397,4 +397,8 @@ Route::get('/online_payment/redirect', 'Billplz\CallbackBillplzController@callba
Route::get('/order/{id}', function ($id) {
return view('pages.orders.profile', ['id' => $id]);
})->name('order.details');
})->name('order.details');
Route::get('/payment-and-billing', function () {
return view('pages.paymentAndBilling');
})->name('admin.payment-and-billing');