fixing bugs

This commit is contained in:
omair saleh
2021-04-27 14:56:53 +08:00
parent 812d4ccc66
commit 69eccb2d9c
16 changed files with 117 additions and 90 deletions
@@ -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');
}
}
@@ -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()))],
+3 -3
View File
@@ -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]);
});
+38
View File
@@ -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>
@@ -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>