mirror of
https://gitlab.com/CIEFWorldwideSdnBhd/exchange-2.0.git
synced 2026-08-19 04:23:55 +00:00
fixing bugs
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace App\Classes\General\Eloquent\Filters;
|
||||
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
|
||||
class PaymentApprovals implements Filter
|
||||
{
|
||||
|
||||
/**
|
||||
* @param Builder $builder
|
||||
* @param $value
|
||||
* @return Builder|mixed
|
||||
*/
|
||||
public static function apply(Builder $builder, $value)
|
||||
{
|
||||
return $builder->payments()->inComplete();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -2,32 +2,17 @@
|
||||
|
||||
namespace App\Classes\Modules\Bookings\Services;
|
||||
|
||||
|
||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||
use App\Classes\ValueObjects\Constants\TransactionType;
|
||||
use App\Models\Booking;
|
||||
use Carbon\Carbon;
|
||||
|
||||
class CalculatesBookingFloatingAmount
|
||||
{
|
||||
|
||||
public function execute(Booking $booking, int $type){
|
||||
return $type === 1 ?
|
||||
$booking->transactions()->selectRaw('sum(amount - service_charge - tax) as sub_total')
|
||||
->where('type', TransactionType::PAYMENT)
|
||||
->where(function($query){
|
||||
$query->whereIn('status', [ApprovalStatus::PENDING_SUBMISSION])
|
||||
->whereDate('expires_on', '>=', Carbon::now());
|
||||
})->orWhere(function($query){
|
||||
$query->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION]);
|
||||
})->get()->sum('sub_total')
|
||||
: $booking->transactions()->where('type', TransactionType::PAYMENT)
|
||||
->where(function($query){
|
||||
$query->whereIn('status', [ApprovalStatus::PENDING_SUBMISSION])
|
||||
->whereDate('expires_on', '>=', Carbon::now());
|
||||
})->orWhere(function($query){
|
||||
$query->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION]);
|
||||
})->get()->sum('original_amount');
|
||||
$booking->transactions()->payments()->inComplete()
|
||||
->selectRaw('sum(amount - service_charge - tax) as sub_total')
|
||||
->get()->sum('sub_total')
|
||||
: $booking->transactions()->payments()->inComplete()->get()->sum('original_amount');
|
||||
}
|
||||
|
||||
}
|
||||
@@ -13,11 +13,9 @@ class CalculatesBookingPaidAmount
|
||||
|
||||
public function execute(Booking $booking, int $type){
|
||||
return $type === 1 ?
|
||||
$booking->transactions()->selectRaw('sum(amount - service_charge - tax) as sub_total')
|
||||
->where('type', TransactionType::PAYMENT)
|
||||
->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])->get()->sum('sub_total') :
|
||||
$booking->transactions()->where('type', TransactionType::PAYMENT)
|
||||
->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED])->sum('original_amount');
|
||||
$booking->transactions()->payments()->complete()
|
||||
->selectRaw('sum(amount - service_charge - tax) as sub_total')->get()->sum('sub_total') :
|
||||
$booking->transactions()->payments()->complete()->sum('original_amount');
|
||||
}
|
||||
|
||||
}
|
||||
-5
@@ -20,13 +20,8 @@ use App\Classes\ValueObjects\Constants\TransactionType;
|
||||
use App\Http\Resources\TransactionResource;
|
||||
use App\Models\Booking;
|
||||
use App\Models\Transaction;
|
||||
use Barryvdh\DomPDF\PDF;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\File;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class CreatePurchaseOrderTransactionLogic extends AbstractControllerLogic
|
||||
{
|
||||
|
||||
@@ -17,11 +17,10 @@ use App\Classes\Modules\Documents\DataTransferObjects\DocumentObject;
|
||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||
use App\Classes\ValueObjects\Constants\TransactionType;
|
||||
use App\Classes\ValueObjects\Constants\DocumentType;
|
||||
|
||||
use App\Models\Booking;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Meneses\LaravelLaravelMpdf\Facades\LaravelLaravelMpdf;
|
||||
use Meneses\LaravelMpdf\Facades\LaravelMpdf;
|
||||
|
||||
use MPDF;
|
||||
class CreateInvoiceTransactionProcessor
|
||||
{
|
||||
/** @var ListsTransactions */
|
||||
@@ -73,10 +72,8 @@ class CreateInvoiceTransactionProcessor
|
||||
|
||||
/**
|
||||
* @param Booking $booking
|
||||
* @return Model
|
||||
* @throws \App\Classes\Exceptions\AccessForbiddenException
|
||||
* @return void
|
||||
* @throws \App\Classes\Exceptions\MalformedRequestException
|
||||
* @throws \App\Classes\Exceptions\RequestValidationException
|
||||
*/
|
||||
public function execute(Booking $booking)
|
||||
{
|
||||
@@ -118,7 +115,7 @@ class CreateInvoiceTransactionProcessor
|
||||
|
||||
$supplier = $this->fetchesCompany->execute(['id' => $transaction->receiver]);
|
||||
|
||||
$purchase_order_pdf = MPDF::loadView('pages.pdfs.purchase_order', ['transaction' => $po_order_transaction, 'supplier' => $supplier]);
|
||||
$purchase_order_pdf = LaravelMpdf::loadView('pages.pdfs.purchase_order', ['transaction' => $po_order_transaction, 'supplier' => $supplier]);
|
||||
$document_object = new DocumentObject(
|
||||
DocumentType::PURCHASE_ORDER,
|
||||
[chunk_split('data:application/pdf;base64,'.base64_encode($purchase_order_pdf->output()))],
|
||||
@@ -129,7 +126,7 @@ class CreateInvoiceTransactionProcessor
|
||||
$document = $this->createsDocument->execute($po_order_transaction->booking, $document_object);
|
||||
$this->createsFile->execute($document, $document_object);
|
||||
|
||||
$deliver_order_pdf = MPDF::loadView('pages.pdfs.deliver_order', ['transaction' => $po_order_transaction, 'supplier' => $supplier]);
|
||||
$deliver_order_pdf = LaravelMpdf::loadView('pages.pdfs.deliver_order', ['transaction' => $po_order_transaction, 'supplier' => $supplier]);
|
||||
$document_object = new DocumentObject(
|
||||
DocumentType::DELIVER_ORDER,
|
||||
[chunk_split('data:application/pdf;base64,'.base64_encode($deliver_order_pdf->output()))],
|
||||
@@ -140,7 +137,7 @@ class CreateInvoiceTransactionProcessor
|
||||
$document = $this->createsDocument->execute($po_order_transaction->booking, $document_object);
|
||||
$this->createsFile->execute($document, $document_object);
|
||||
|
||||
$payment_order_pdf = MPDF::loadView('pages.pdfs.payment_order', ['transaction' => $po_order_transaction, 'supplier' => $supplier]);
|
||||
$payment_order_pdf = LaravelMpdf::loadView('pages.pdfs.payment_order', ['transaction' => $po_order_transaction, 'supplier' => $supplier]);
|
||||
$document_object = new DocumentObject(
|
||||
DocumentType::PAYMENT_ORDER,
|
||||
[chunk_split('data:application/pdf;base64,'.base64_encode($payment_order_pdf->output()))],
|
||||
@@ -151,7 +148,7 @@ class CreateInvoiceTransactionProcessor
|
||||
$document = $this->createsDocument->execute($po_order_transaction->booking, $document_object);
|
||||
$this->createsFile->execute($document, $document_object);
|
||||
|
||||
$supplier_order_pdf = MPDF::loadView('pages.pdfs.supplier_deliver_order', ['transaction' => $po_order_transaction, 'supplier' => $supplier]);
|
||||
$supplier_order_pdf = LaravelMpdf::loadView('pages.pdfs.supplier_deliver_order', ['transaction' => $po_order_transaction, 'supplier' => $supplier]);
|
||||
$document_object = new DocumentObject(
|
||||
DocumentType::SUPPLIER_DELIVER_ORDER,
|
||||
[chunk_split('data:application/pdf;base64,'.base64_encode($supplier_order_pdf->output()))],
|
||||
|
||||
@@ -44,11 +44,11 @@ class BookingResource extends JsonResource
|
||||
'created_at' => Carbon::parse($this->created_at)->format('d-m-Y'),
|
||||
$this->mergeWhen($this->relationLoaded('transactions'), [
|
||||
'purchase_order' => new TransactionResource($this->transactions()->where('type', TransactionType::PURCHASE_ORDER)->first()),
|
||||
'payment_attempts' => TransactionResource::collection($this->transactions()->where('type', TransactionType::PAYMENT)->where('status', ApprovalStatus::PENDING_SUBMISSION)->whereDate('expires_on', '>=', Carbon::now())->get()),
|
||||
'expired_payment_attempts' => TransactionResource::collection($this->transactions()->where('type', TransactionType::PAYMENT)->where('status', ApprovalStatus::PENDING_SUBMISSION)->whereDate('expires_on', '<', Carbon::now())->get()),
|
||||
'payment_attempts' => TransactionResource::collection($this->transactions()->payments()->where('status', ApprovalStatus::PENDING_SUBMISSION)->whereDate('expires_on', '>=', Carbon::now())->get()),
|
||||
'expired_payment_attempts' => TransactionResource::collection($this->transactions()->payments()->where('status', ApprovalStatus::PENDING_SUBMISSION)->whereDate('expires_on', '<', Carbon::now())->get()),
|
||||
'payment_history' => TransactionResource::collection($this->transactions()->where(function($query){
|
||||
$query->where(function($query){
|
||||
$query->where('type', TransactionType::PAYMENT)->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::REJECTED]);
|
||||
$query->payments()->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::REJECTED]);
|
||||
})->orWhere(function($query){
|
||||
$query->where('type', TransactionType::BILL)->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
|
||||
});
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
namespace App\Models;
|
||||
|
||||
use App\Classes\General\Interfaces\Documentable;
|
||||
use App\Classes\ValueObjects\Constants\ApprovalStatus;
|
||||
use App\Classes\ValueObjects\Constants\TransactionType;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
use Illuminate\Database\Eloquent\Relations\MorphMany;
|
||||
@@ -60,4 +64,38 @@ class Transaction extends AbstractModel implements Documentable
|
||||
}
|
||||
return $this->original_amount;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Builder $query
|
||||
* @return Builder
|
||||
*/
|
||||
public function scopePayments(Builder $query)
|
||||
{
|
||||
return $query->where('type', TransactionType::PAYMENT);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Builder $query
|
||||
* @return Builder
|
||||
*/
|
||||
public function scopeInComplete(Builder $query)
|
||||
{
|
||||
return $query->where(function(Builder $query){
|
||||
$query->where(function(Builder $query){
|
||||
$query->where('status', ApprovalStatus::PENDING_SUBMISSION)
|
||||
->whereDate('expires_on', '>=', Carbon::now());
|
||||
})->orWhere(function(Builder $query){
|
||||
$query->where('status', ApprovalStatus::PENDING_VERIFICATION);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Builder $query
|
||||
* @return Builder
|
||||
*/
|
||||
public function scopeComplete(Builder $query)
|
||||
{
|
||||
return $query->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
</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">Stay Here</div>
|
||||
<div class="btn btn-sm btn-default btn-block b-rad-none" data-dismiss="modal">Stay Here</div>
|
||||
</div>
|
||||
<div class="col p-l-5">
|
||||
<div class="btn btn-sm btn-danger btn-block b-rad-none" data-dismiss="modal" @click="logout()">Logout</div>
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
<div class="col p-t-10 p-b-5 ">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="font-heading bold lh-15">{{selectedAddress.street_one}}, {{selectedAddress.street_two}}</div>
|
||||
<div class="font-heading bold lh-15">{{selectedAddress.street_one}}{{selectedAddress.street_two ? ', ': ''}}{{selectedAddress.street_two}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
@@ -70,7 +70,7 @@
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<!-- <div class="font-heading bold lh-15 fs-10">{{address.post_code ? address.post_code + ' - ':''}}{{address.post_code}}</div> -->
|
||||
<div class="font-heading bold lh-15 fs-10">{{address.street_one}},{{address.street_two}}</div>
|
||||
<div class="font-heading bold lh-15 fs-10">{{address.street_one}}{{selectedAddress.street_two ? ', ': ''}}{{address.street_two}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
<div class="font-heading fs-12">{{this.data.fixed_currency.short_code}} {{(Math.round((this.data.outstanding_amount + Number.EPSILON) * 100) / 100).toFixed(2).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row m-t-20" v-if="data.company.employee.status === 2 && data.company.status === 2">
|
||||
<div class="row m-t-20" v-if="data.company.employee.status === 2 && data.company.status === 2 && data.outstanding_amount > 0">
|
||||
<div class="col">
|
||||
<button class="btn btn-xs all-caps b-rad-none btn-success btn-block" @click="makePayment()">Make Payment</button>
|
||||
</div>
|
||||
|
||||
@@ -32,7 +32,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row m-b-10">
|
||||
<div class="col">
|
||||
<div class="row align-items-top">
|
||||
|
||||
@@ -35,6 +35,36 @@
|
||||
</div>
|
||||
<div class="row m-b-20">
|
||||
<div class="col">
|
||||
<div class="row" v-if="!submitted">
|
||||
<div class="col p-b-5 p-t-5 b-b b-grey">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-auto p-r-0" style="min-width: 40px;">
|
||||
<div class="font-heading all-caps fs-10"></div>
|
||||
</div>
|
||||
<div class="col p-r-5">
|
||||
<input type="text" class="form-control fs-10 b-rad-none" placeholder="Stock Code" v-model="product.stockCode" />
|
||||
</div>
|
||||
<div class="col-4 p-r-5 p-l-5">
|
||||
<textarea class="form-control fs-10 b-rad-none" placeholder="Description" rows="1" v-model="product.description"></textarea>
|
||||
</div>
|
||||
<div class="col text-center p-r-5 p-l-5">
|
||||
<input type="text" class="form-control fs-10 b-rad-none text-center" placeholder="Quantity" v-model.lazy="product.quantity" v-mask="'#########'"/>
|
||||
</div>
|
||||
<div class="col text-center p-r-5 p-l-5">
|
||||
<input type="text" class="form-control fs-10 b-rad-none text-center" placeholder="Unit Price" v-model.lazy="product.unit_price" v-money="money" />
|
||||
</div>
|
||||
<div class="col-1 text-center p-r-5 p-l-5">
|
||||
<div class="font-heading all-caps fs-10">{{data.fixed_currency.short_code}}</div>
|
||||
</div>
|
||||
<div class="col-1 text-right p-r-5 p-l-5">
|
||||
<div class="font-heading all-caps fs-10">{{(Math.round((productTotal + Number.EPSILON) * 100) / 100).toFixed(2) }}</div>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<button class="btn btn-xs btn-outline-success b-rad-none" @click="addProduct()"><i class="fa fa-check"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" v-for="(product, index) in products">
|
||||
<div class="col p-b-10 p-t-10 b-b b-grey">
|
||||
<div class="row align-items-center">
|
||||
@@ -65,36 +95,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" v-if="!submitted">
|
||||
<div class="col p-b-5 p-t-5 b-b b-grey">
|
||||
<div class="row align-items-center">
|
||||
<div class="col-auto p-r-0" style="min-width: 40px;">
|
||||
<div class="font-heading all-caps fs-10">{{products.length + 1}}</div>
|
||||
</div>
|
||||
<div class="col p-r-5">
|
||||
<input type="text" class="form-control fs-10 b-rad-none" placeholder="Stock Code" v-model="product.stockCode" />
|
||||
</div>
|
||||
<div class="col-4 p-r-5 p-l-5">
|
||||
<textarea class="form-control fs-10 b-rad-none" placeholder="Description" rows="1" v-model="product.description"></textarea>
|
||||
</div>
|
||||
<div class="col text-center p-r-5 p-l-5">
|
||||
<input type="text" class="form-control fs-10 b-rad-none text-center" placeholder="Quantity" v-model.lazy="product.quantity" v-mask="'#########'"/>
|
||||
</div>
|
||||
<div class="col text-center p-r-5 p-l-5">
|
||||
<input type="text" class="form-control fs-10 b-rad-none text-center" placeholder="Unit Price" v-model.lazy="product.unit_price" v-money="money" />
|
||||
</div>
|
||||
<div class="col-1 text-center p-r-5 p-l-5">
|
||||
<div class="font-heading all-caps fs-10">{{data.fixed_currency.short_code}}</div>
|
||||
</div>
|
||||
<div class="col-1 text-right p-r-5 p-l-5">
|
||||
<div class="font-heading all-caps fs-10">{{(Math.round((productTotal + Number.EPSILON) * 100) / 100).toFixed(2) }}</div>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<button class="btn btn-xs btn-outline-success b-rad-none" @click="addProduct()"><i class="fa fa-check"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+5
-10
@@ -86,19 +86,14 @@
|
||||
{{booking.company.address.street_one}} {{booking.company.address.street_two}}, {{booking.company.address.district.name}}, {{booking.company.address.post_code}} {{booking.company.address.state.name}}, {{booking.company.address.country.name}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-auto p-l-0 hide">
|
||||
<button class="btn btn-xs btn-default bg-master-lightest no-border b-rad-none"><i class="fa fa-pencil text-complete"></i></button>
|
||||
<div class="col-auto p-l-0">
|
||||
<button class="btn btn-xs btn-default bg-master-lightest no-border b-rad-none requestModal" data-type="addressesList"><i class="fa fa-pencil text-complete"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row p-b-15">
|
||||
<div class="col">
|
||||
<div class="btn btn-sm btn-block btn-success b-rad-none shadow-sm pointer requestModal" data-type="addressesList" >Edit</div>
|
||||
</div>
|
||||
</div>
|
||||
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="addressesList" size="large">
|
||||
<address-list-component :section="section" :company_id="booking.company.id" v-on:updateDefaultAddress="updateDefaultAddress"></address-list-component>
|
||||
</modal-component>
|
||||
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="addressesList" size="large">
|
||||
<address-list-component :section="section" :company_id="booking.company.id" v-on:updateDefaultAddress="updateDefaultAddress"></address-list-component>
|
||||
</modal-component>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<div class="requestModal pointer" @click="loadFile" data-type="filePreview">
|
||||
<slot name="button" ></slot>
|
||||
</div>
|
||||
<modal-component styleType="fill-in" type="filePreview">
|
||||
<modal-component styleType="fill-in" size="extra-large" type="filePreview">
|
||||
<loading-component style="height: 200px; top: 0;" key="1" color="success" v-show="isLoading"></loading-component>
|
||||
<div class="row">
|
||||
<div class="col text-center">
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="modal modalContainer fade" :class="styleType" :data-type="type">
|
||||
<div class="modal-dialog" v-bind:class="[{'modal-lg': size === 'large'}, {'modal-sm': size === 'small'}]">
|
||||
<div class="modal-dialog" v-bind:class="[{'modal-lg': size === 'large'}, {'modal-xl': size === 'extra-large'}, {'modal-sm': size === 'small'}]">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body">
|
||||
<slot></slot>
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
<div class="col">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<list-component key="2" section="paymentVerificationSection" :endpoint="route('api.transaction.list')" :options="{'status': 1, 'type': 1}">
|
||||
<list-component key="2" section="paymentVerificationSection" :endpoint="route('api.transaction.list')" :options="{'payment_approvals': true}">
|
||||
<template slot="list" slot-scope="{data}">
|
||||
<payment-verification-component section="paymentVerificationSection" :data="data"></payment-verification-component>
|
||||
</template>
|
||||
|
||||
Reference in New Issue
Block a user