Merge branch 'export-booking-transaction' of https://gitlab.com/CIEFWorldwideSdnBhd/exchange-2.0 into development

# Conflicts:
#	routes/web.php
This commit is contained in:
edmondlang
2022-04-26 21:55:42 +08:00
7 changed files with 281 additions and 0 deletions
@@ -0,0 +1,74 @@
<?php
namespace App\Classes\Modules\Exports\Services;
use App\Models\Transaction;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Illuminate\Http\Request;
use Carbon\Carbon;
class ExportsBookingTransactions implements FromQuery, WithHeadings, WithHeadingRow, WithMapping, ShouldAutoSize
{
use Exportable;
private $request;
public function __construct(Request $request)
{
$this->request = $request;
}
public function headings(): array
{
return [
'Ref No',
'Creted Date',
'Amount',
'Rate'
];
}
/**
* @return \Illuminate\Support\Collection|mixed
*/
public function query()
{
$supplierIds = array_map(function($value){
return ['id' => $value];
}, json_decode($this->request->input('supplierIds')));
$dateFrom =Carbon::parse($this->request->input('startDate'))->format('Y-m-d');
$dateTo =Carbon::parse($this->request->input('endDate'))->format('Y-m-d');
return Transaction::where('type', 3)->whereIn('issuer', $supplierIds)->whereBetween('created_at', [$dateFrom, $dateTo]);
}
/**
* @param $transaction
* @return array
*/
public function map($transaction): array
{
if ($transaction->owner->owner == null){
$refNo = $transaction->owner->marking;
} else {
$refNo = $transaction->owner->owner->marking;
}
$createdAt = $transaction->created_at->format('d-m-Y');
$amount = $transaction->amount;
$rate = $transaction->currency_rate;
return [
$refNo,
$createdAt,
$amount,
$rate,
];
}
}
@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Exports;
use App\Classes\Modules\Exports\Services\ExportsCustomers;
use App\Classes\Modules\Exports\Services\ExportsTransactions;
use App\Classes\Modules\Exports\Services\ExportsBookingTransactions;
use App\Classes\Modules\Exports\Services\ExportsNullDebtors;
use App\Classes\Modules\Exports\Services\ExportsPaymentTransactions;
@@ -54,4 +55,10 @@ class ExportCustomersToExcelController
ob_end_clean();
return $response;
}
public function bookingTransactions(ExportsBookingTransactions $exportsBookingTransactions, Request $request){
$response = $exportsBookingTransactions->download('bookingTransactions.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']);
ob_end_clean();
return $response;
}
}
@@ -0,0 +1,96 @@
<template>
<div class="row m-b-20">
<div class="col">
<div class="row">
<div class="col">
<div class="row m-l-0 m-r-0 bg-master-light padding-10 parentContainer">
<div class="col">
<div class="row requestModal pointer" data-type="deleteBank">
<div class="col">
<validation-wrapper-component :validator="$v.parameters.supplierNames">
<label>Supplier</label>
<input type="text" class="form-control fs-12 pointer" v-model="parameters.supplierNames" disabled>
</validation-wrapper-component>
</div>
</div>
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="deleteBank">
<select-supplier-form-component section="supplierListSection" v-on:input="updateList($event)"></select-supplier-form-component>
</modal-component>
</div>
<div class="col-12 col-md mb-2 mb-md-0">
<validation-wrapper-component :validator="$v.parameters.startDate">
<label class="all-caps">Start Date</label>
<date-picker-component :parameters="parameters" v-model.lazy="parameters.startDate"></date-picker-component>
</validation-wrapper-component>
</div>
<div class="col-12 col-md mb-2 mb-md-0">
<validation-wrapper-component :validator="$v.parameters.endDate">
<label class="all-caps">End Date</label>
<date-picker-component :parameters="parameters" v-model.lazy="parameters.endDate"></date-picker-component>
</validation-wrapper-component>
</div>
<div class="col-12 col-md-auto d-flex justify-content-center align-items-center">
<button type="button" class="btn btn-lg btn-primary fs-11 w-100" @click="submitSearch()">Download</button>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import componentHandler from "../../../general/mixins/componentHandler";
import { required, minValue} from "vuelidate/lib/validators";
import {VMoney} from 'v-money'
export default {
data(){
return {
parameters: {
startDate: '',
endDate: '',
supplier: null,
supplierIds: [],
supplierNames: []
},
}
},
validations: {
parameters: {
startDate: {
required
},
endDate: {
required
},
supplierIds: {
required
},
supplierNames: {
required
},
}
},
methods: {
submitSearch(){
if(!this.validate()){ return; }
var supplierIds = JSON.stringify(this.parameters.supplierIds);
window.open(route('export.transactions.booking')+'?startDate='+this.parameters.startDate+'&endDate='+this.parameters.endDate+'&supplierIds='+supplierIds, '_blank');
},
updateList(supplierList){
let supplierIds = [];
let supplierNames = [];
supplierList.forEach(function(supplier) {
supplierIds.push(supplier.id);
supplierNames.push(supplier.name);
});
this.parameters.supplierIds = supplierIds;
this.parameters.supplierNames = supplierNames;
},
},
mixins: [componentHandler]
};
</script>
@@ -0,0 +1,43 @@
<template>
<div class="row">
<div class="col b-a b-grey" :class="{'b-gray': !selected, 'b-primary': selected, 'bg-primary-lighter': selected}">
<div class="row">
<div class="col padding-20">
<div class="row align-items-center">
<div class="col-auto pointer align-items-center" @click="selectSupplier()">
<i class="fa fs-30 fa-fw" :class="{'fa-square-o': !selected, 'fa-check-square': selected, 'text-primary':selected}" ></i>
</div>
<div class="col">
<h5 class="no-margin">{{ item.name }}</h5>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import componentHandler from "../../../general/mixins/componentHandler";
export default {
props: {
selectedSupplier: {
type: Array,
required: false,
}
},
data(){
return {
selected: false
}
},
methods: {
selectSupplier(){
this.selected = !this.selected;
this.$emit('input', this.item);
}
},
mixins: [componentHandler]
};
</script>
@@ -0,0 +1,59 @@
<template>
<div class="row bg-white padding-40">
<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 text-center">Please select the supplier.</h3>
</div>
</div>
<div class="row m-b-20">
<div class="col">
<list-component section="supplierListSection" :endpoint="route('api.company.list')" :options="{business_type: 3}">
<template slot="list" slot-scope="{data}">
<div class="row">
<div class="col">
<select-individual-supplier-form-component :data="data" :selectedSupplier="selectedSupplier" v-on:input="updateList($event)"></select-individual-supplier-form-component>
</div>
</div>
</template>
</list-component>
</div>
</div>
<div class="row">
<div class="col">
<div class="btn btn-sm btn-success btn-block b-rad-none" @click="submitForm()">Confirm</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import componentHandler from "../../../general/mixins/componentHandler";
import ModalFormHandler from '../../../general/mixins/modalFormHandler';
import { required, minValue} from "vuelidate/lib/validators";
import {VMoney} from 'v-money'
export default {
data(){
return {
selectedSupplier: [],
}
},
methods: {
submitForm() {
this.$emit('input', this.selectedSupplier);
this.closeModal();
},
updateList(supplier){
this.selectedSupplier.includes(supplier) ? this.selectedSupplier.splice(this.selectedSupplier.indexOf(supplier), 1) : this.selectedSupplier.push(supplier);
},
},
mixins: [componentHandler, ModalFormHandler]
};
</script>
@@ -2,6 +2,7 @@
@section('inner_content')
<div class="row">
<div class="col p-t-15 p-b-15">
<export-booking-transaction-form-component></export-booking-transaction-form-component>
<div class="row">
<div class="col-4">
<div class="row tabsContainer">
+1
View File
@@ -151,6 +151,7 @@ Route::get('/export/transactions/f614e339d7058904a831aad742e24d55', 'Exports\Exp
Route::get('/export/null-debtor/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@nullDebtor')->name('newDebtor.export');
Route::get('/export/payment-transactions/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@paymentTransactions')->name('paymentTransactions.export');
Route::get('/export/wallet-transactions/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@walletTransactions')->name('walletTransactions.export');
Route::get('/export/booking-transactions', 'Exports\ExportCustomersToExcelController@bookingTransactions')->name('export.transactions.booking');
Route::get('/products', function (\App\Classes\Modules\Exports\Services\ExportsProducts $exportsProducts) {
$bookings = Booking::where(function($query){