Merge branch 'master' of gitlab.com:CIEFWorldwideSdnBhd/exchange-2.0 into development

# Conflicts:
#	app/Classes/ValueObjects/Constants/TransactionType.php
This commit is contained in:
edmondlang
2022-04-08 20:16:51 +08:00
23 changed files with 90 additions and 76 deletions
@@ -23,8 +23,6 @@ class PendingPurchaseOrder implements Filter
});
})->whereDoesntHave('transactions', function($transaction){
return $transaction->where('type', TransactionType::PURCHASE_ORDER)->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
})->whereHas('transactions', function($transaction){
return $transaction->where('type', TransactionType::PAYMENT)->whereIn('status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED]);
});
}
@@ -65,15 +65,12 @@ class AutoPurchaseOrderFillLogic extends AbstractControllerLogic
public function logic(Request $request) : JsonResponse
{
$bookings = Booking::where(function($query){
return $query->whereMonth('created_at', 10)->orWhere(function ($query){
return $query->whereMonth('created_at', 10);
});
})
->whereYear('created_at', 2021)
->whereDoesntHave('transactions', function($q){
return $query->whereMonth('created_at', 11)->orWhereMonth('created_at', 12);
})->whereDoesntHave('transactions', function($q){
$q->where('type', TransactionType::PURCHASE_ORDER);
$q->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::APPROVED]);
})->get();
foreach ($bookings as $booking) {
$po = Transaction::where('type', TransactionType::PURCHASE_ORDER)
->where('status', ApprovalStatus::APPROVED)->where('issuer', $booking->company_id)
@@ -3,6 +3,7 @@
namespace App\Classes\Modules\Bookings\ControllersLogic;
use App\Classes\ValueObjects\Constants\TransactionType;
use Illuminate\Support\Facades\File;
use ZipArchive;
use Carbon\Carbon;
@@ -35,7 +36,11 @@ class DownloadBookingDocumentLogic
$bookings = Booking::where('status', ApprovalStatus::COMPLETED)
->whereDate('created_at', '>=', Carbon::parse($request->input('startDate')))
->whereDate('created_at', '<=', Carbon::parse($request->input('endDate')))->get();
->whereDate('created_at', '<=', Carbon::parse($request->input('endDate')))->whereHas('transactions', function ($query) use ($request){
return $query->where('type', TransactionType::PAYMENT)->whereHas('transactions', function ($query) use ($request){
return $query->where('type', TransactionType::BILL)->where('issuer', $request->input('supplier'));
});
})->get();
if (!count($bookings)) throw new MalformedRequestException('No available file to download');
@@ -24,34 +24,28 @@ class ExportsNullDebtors implements FromQuery, WithHeadings, WithHeadingRow, Wit
{
return [
'Code',
'DebtorControlAcc',
'ControlAccount',
'AccNo',
'CompanyName',
'Desc2',
'AreaCode',
'SalesAgent',
'DebtorType',
'DisplayTerm',
'AgingOn',
'StatementType',
'CurrencyCode',
'RegisterNo',
'Address1',
'Address2',
'Address3',
'Address4',
'PostCode',
'DeliverAddr1',
'DeliverAddr2',
'DeliverAddr3',
'DeliverAddr4',
'DeliverPostCode',
'EmailAddress',
'Attention',
'Phone1',
'Phone2',
'Fax1',
'Fax2',
'ExemptNo',
'ExpiryDate',
'PriceCategory',
'Fax1'
];
}
@@ -62,7 +56,7 @@ class ExportsNullDebtors implements FromQuery, WithHeadings, WithHeadingRow, Wit
{
return Company::where(function($query){
$query->whereNull('debtor')->orWhere('debtor', '');
})->where('business_type', BusinessType::IMPORTER)->where('status', ApprovalStatus::APPROVED)->whereHas('transactions', function($query){
})->whereNotIn('id', [2207, 2248, 2029])->where('business_type', BusinessType::IMPORTER)->where('status', ApprovalStatus::APPROVED)->whereHas('transactions', function($query){
return $query->whereIn('type', [TransactionType::PAYMENT, TransactionType::TOP_UP])->whereIn('transactions.status', [ApprovalStatus::APPROVED, ApprovalStatus::COMPLETED, ApprovalStatus::PENDING_VERIFICATION]);
});
}
@@ -75,35 +69,29 @@ class ExportsNullDebtors implements FromQuery, WithHeadings, WithHeadingRow, Wit
public function map($company): array
{
return [
'<<New>>', //Code
$company->name.' (PURCHASE)', //CompanyName
$company->reference, //Desc2
'', //AreaCode
'', //SalesAgent
'', //DebtorType
'', //DisplayTerm
'', //AgingOn
'', //StatementType
'MYR', //CurrencyCode
'', //RegisterNo
'', //Address1
'', //Address2
'', //Address3
'', //Address4
'', //PostCode
'', //DeliverAddr1
'', //DeliverAddr2
'', //DeliverAddr3
'', //DeliverAddr4
'', //DeliverPostCode
'', //Attention
'', //Phone1
'', //Phone2
'', //Fax1
'', //Fax2
'', //ExemptNo
'', //ExpiryDate
'', //PriceCategory
'<<New>>',
'300-0000',
'300-0000',
'300-0000',
$company->name.' (PURCHASE)',
$company->reference,
'',
'PIA',
'MYR',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',//EmailAddress
'',
'',
'',
''
];
}
}
@@ -4,6 +4,7 @@ namespace App\Classes\Modules\Exports\Services;
use App\Classes\ValueObjects\Constants\BusinessType;
use App\Classes\ValueObjects\Constants\CompanyType;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Models\Company;
use App\Models\Transaction;
use Maatwebsite\Excel\Concerns\Exportable;
@@ -41,6 +42,10 @@ class ExportsTransactions implements FromQuery, WithHeadingRow, WithMapping
6 => 'REFUND',
7 => 'PURCHASE_ORDER',
8 => 'SUPPLIER_DELIVER',
9 => 'CREDIT_NOTE',
10 => 'WITHDRAW',
11 => 'DEBIT_NOTE',
12 => 'TRANSFER_FEE'
];
$transactionStatus = [
@@ -55,9 +60,11 @@ class ExportsTransactions implements FromQuery, WithHeadingRow, WithMapping
return [
$transaction->bill_no,
$transaction->booking->marking,
$transaction->booking->company->reference,
$transaction->owner_id,
$transaction->owner_type,
$transactionTypes[$transaction->type],
$transaction->issuer,
$transaction->reciver,
$transaction->currency_id === 1 ? 'MYR' : 'RMB',
$transaction->amount,
$transaction->original_currency_id === 1 ? 'MYR' : 'RMB',
@@ -18,7 +18,7 @@ class ImportsDebtor implements ToModel, WithHeadingRow, WithBatchInserts, WithVa
public function model($row = [])
{
try {
preg_match_all('/([0-9]{3,4}[a-zA-Z]{3,4})/', $row['2nd_description'], $matches);
preg_match_all('/([0-9]{3,4}[a-zA-Z]{3,4})/', $row['desc2'], $matches);
foreach ($matches[0] as $match){
$reference = $match;
@@ -32,7 +32,9 @@ class ImportsDebtor implements ToModel, WithHeadingRow, WithBatchInserts, WithVa
}
} catch (\Exception $exception){}
} catch (\Exception $exception){
dd($exception);
}
}
public function batchSize(): int
@@ -22,6 +22,7 @@ class FileType
'image/jpeg' => 'jpeg',
'application/pdf' => 'pdf',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => 'excel',
'application/vnd.ms-excel' => 'excel',
];
}
@@ -24,11 +24,11 @@ final class TransactionType {
public const CREDIT_NOTE = 9;
public const DEBIT_NOTE = 11;
public const WITHDRAW = 10;
public const TRANSFER_FEE = 11;
public const DEBIT_NOTE = 11;
public const CASH_BACK = 12;
public const TRANSFER_FEE = 12;
public const CASH_BACK = 13;
}
@@ -15,7 +15,7 @@ class DownloadBookingDocumentController
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function download(Request $request, DownloadBookingDocumentLogic $logic) {
return $logic->execute($request);
$logic->execute($request);
}
}
@@ -43,14 +43,14 @@ class ExportCustomersToExcelController
public function paymentTransactions(Request $request){
$exportsTransactions = new ExportsPaymentTransactions($request);
$response = $exportsTransactions->download('payment-transactions.xls', Excel::XLSX, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']);
$response = $exportsTransactions->download('payment-transactions.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']);
ob_end_clean();
return $response;
}
public function walletTransactions(Request $request){
$exportsTransactions = new ExportsWalletTransactions($request);
$response = $exportsTransactions->download('wallet-transactions.xls', Excel::XLS, ['Content-Type' => 'application/vnd.ms-excel']);
$response = $exportsTransactions->download('wallet-transactions.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']);
ob_end_clean();
return $response;
}
@@ -23,7 +23,7 @@
</div>
<div class="row m-b-15">
<div class="col-7 p-r-5">
<validation-wrapper-component selecatable :validator="$v.parameters.district_id">
<validation-wrapper-component selectable :validator="$v.parameters.district_id">
<label>District</label>
<selectable-component :endpoint="route('api.address.district.list')" section="districtListSection" valueColumn="id" :labelColumn="['city']" v-model="parameters.district_id"></selectable-component>
</validation-wrapper-component>
@@ -17,7 +17,7 @@
</div>
<div class="row m-b-15">
<div class="col">
<validation-wrapper-component selecatable :validator="$v.parameters.segment_id">
<validation-wrapper-component selectable :validator="$v.parameters.segment_id">
<label>Segment</label>
<selectable-component :endpoint="route('api.segment.list') + '?filters=' + JSON.stringify({'id_not_in': currentSegmentIds})" :section="'segmentsListSection_'+data.id" valueColumn="id" :labelColumn="['name']" v-model="parameters.segment_id"></selectable-component>
</validation-wrapper-component>
@@ -74,7 +74,7 @@
</div>
<div class="row m-b-20" v-if="type !== 2">
<div class="col">
<validation-wrapper-component selecatable :validator="$v.parameters.bank_name">
<validation-wrapper-component selectable :validator="$v.parameters.bank_name">
<label>Bank Name</label>
<selectable-component endpoint="malaysian_banks.json" section="banksListSection" valueColumn="name" :labelColumn="['name']" v-model="parameters.bank_name"></selectable-component>
</validation-wrapper-component>
@@ -42,6 +42,12 @@
</div>
</div>
</div>
<div class="col">
<validation-wrapper-component selectable :validator="$v.parameters.supplier">
<label>Supplier</label>
<selectable-component :endpoint="route('api.company.list')+'?filters={%22business_type%22:3}'" section="supplierListSection" valueColumn="id" :labelColumn="['name']" v-model="parameters.supplier"></selectable-component>
</validation-wrapper-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>
@@ -76,6 +82,7 @@ export default {
startDate: '',
endDate: '',
type: 'INVOICE',
supplier: null
},
documents: ['INVOICE', 'PURCHASE_ORDER', 'DELIVER_ORDER', 'SUPPLIER_DELIVER_ORDER'],
selectedDocumentStatus: false
@@ -92,12 +99,13 @@ export default {
type: {
required
},
supplier: {},
}
},
methods: {
submitSearch(){
if(!this.validate()){ return; }
window.open(route('documents.download')+'?type='+this.parameters.type+'&startDate='+this.parameters.startDate+'&endDate='+this.parameters.endDate, '_blank');
window.open(route('documents.download')+'?type='+this.parameters.type+'&startDate='+this.parameters.startDate+'&endDate='+this.parameters.endDate+'&supplier='+this.parameters.supplier, '_blank');
},
updateDocumentType(documentType) {
this.parameters.type = documentType;
@@ -17,7 +17,7 @@
</div>
<div class="row m-b-15">
<div class="col">
<validation-wrapper-component selecatable :validator="$v.parameters.segment_id">
<validation-wrapper-component selectable :validator="$v.parameters.segment_id">
<label>Segment</label>
<selectable-component :endpoint="route('api.segment.list') + '?filters=' + JSON.stringify({'id_not_in': currentSegmentIds})" :section="multiple?'segmentsListSection_'+data.id:'segmentsListSection'" valueColumn="id" :labelColumn="['name']" v-model="parameters.segment_id"></selectable-component>
</validation-wrapper-component>
@@ -2,7 +2,7 @@
<div class="animate__animated" :class="[{'animate__shake': validator.$error}]">
<div class="row">
<div class="col">
<div class="form-group no-margin form-group-default" :class="[{' has-error': validator.$error}, {'form-group-default-select2': selecatable}, {'p-b-5': selecatable}]">
<div class="form-group no-margin form-group-default" :class="[{' has-error': validator.$error}, {'form-group-default-select2': selectable}, {'p-b-5': selectable}]">
<slot></slot>
</div>
</div>
@@ -21,7 +21,7 @@
validator: {
required: true
},
selecatable: {
selectable: {
type: Boolean,
default: false
}
@@ -17,7 +17,7 @@
</div>
<div class="row m-b-15">
<div class="col">
<validation-wrapper-component selecatable :validator="$v.parameters.country_short_code">
<validation-wrapper-component selectable :validator="$v.parameters.country_short_code">
<label>Currency</label>
<selectable-component :endpoint="route('api.service.list.countries')" section="countriesListSection" valueColumn="iso_3166_1_alpha2" :labelColumn="['currency', 'name']" v-model="parameters.country_short_code"></selectable-component>
</validation-wrapper-component>
@@ -43,7 +43,7 @@
<div class="col p-l-5 p-r-5">
<div class="row">
<div class="col-5 p-r-0">
<validation-wrapper-component selecatable :validator="$v.custom_field">
<validation-wrapper-component selectable :validator="$v.custom_field">
<label>Custom Fields</label>
<select-component :options="inActiveFields" v-model="custom_field"></select-component>
</validation-wrapper-component>
@@ -115,7 +115,7 @@
</validation-wrapper-component>
</div>
<div class="col-7 p-l-5 p-r-5" v-show="custom_fields.bank_id.active">
<validation-wrapper-component selecatable :validator="$v.parameters.configurations.bank_id" >
<validation-wrapper-component selectable :validator="$v.parameters.configurations.bank_id" >
<label>Receivable Bank Account</label>
<selectable-component :endpoint="route('api.bank.list')+'?filters={%22company_id%22:1}'" section="BankAccountListSection" valueColumn="id" :labelColumn="['bank_name', 'account_no']" v-model="parameters.configurations.bank_id"></selectable-component>
<div class="absolute lh-10" style="top: 0; right: 0;">
@@ -97,7 +97,7 @@
</validation-wrapper-component>
</div>
<div class="col">
<validation-wrapper-component selecatable :validator="$v.parameters.configurations.bank_id">
<validation-wrapper-component selectable :validator="$v.parameters.configurations.bank_id">
<label>Receivable Bank Account</label>
<selectable-component :endpoint="route('api.bank.list')+'?filters={%22company_id%22:1}'" section="BankAccountListSection" valueColumn="id" :labelColumn="['bank_name', 'account_no']" v-model="parameters.configurations.bank_id"></selectable-component>
</validation-wrapper-component>
@@ -2,14 +2,14 @@
<div class="col">
<div class="row">
<div class="col col-md-5 bg-white padding-25">
<list-component ref="paymentProofList" section="paymentProofSection" :endpoint="route('api.transaction.list')" :options="{status: 1, type: 3, issuer_not_in: [2, 1937, 2165]}">
<list-component ref="paymentProofList" section="paymentProofSection" :endpoint="route('api.transaction.list')" :options="{status: 1, type: 3, issuer_in: [1921, 1970, 2185]}">
<template slot="list" slot-scope="{data}">
<payment-proof-component :data="data" class="m-b-15 m-r-0"></payment-proof-component>
</template>
</list-component>
</div>
<div class="col col-md-5 bg-white padding-25">
<list-component ref="paymentProofList" section="paymentProofHistorySection" :endpoint="route('api.transaction.list')" :options="{status_in: [2, 3], type: 3, issuer_not_in: [2, 1937, 2165]}">
<list-component ref="paymentProofList" section="paymentProofHistorySection" :endpoint="route('api.transaction.list')" :options="{status_in: [2, 3], type: 3, issuer_in: [1921, 1970, 2185]}">
<template slot="list" slot-scope="{data}">
<payment-proof-component :data="data" class="m-b-15 m-r-0"></payment-proof-component>
</template>
@@ -20,7 +20,7 @@
<span class="company-reg">(1134596-M)</span><br>
Malaysian Global Innovation &amp; Creativity Center <br>
Level 1 CWS, Block 3730, Persiaran APEC, <br>
63000 Cyberjaya, Malaysian. <br>
63000 Cyberjaya, Malaysia. <br>
Tel: 018-2909252
</td>
<td class="header-details">
+1 -1
View File
@@ -19,7 +19,7 @@
<span class="company-reg">(1134596-M)</span><br>
Malaysian Global Innovation &amp; Creativity Center <br>
Level 1 CWS, Block 3730, Persiaran APEC, <br>
63000 Cyberjaya, Malaysian. <br>
63000 Cyberjaya, Malaysia. <br>
Tel: 018-2909252
</td>
<td class="header-details">
+8
View File
@@ -6,6 +6,7 @@ use App\Classes\Modules\Documents\Services\CreatesFiles;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\DocumentType;
use App\Classes\ValueObjects\Constants\TransactionType;
use App\Models\Booking;
use App\Models\Company;
use App\Models\Transaction;
use App\Models\User;
@@ -148,6 +149,13 @@ Route::get('/export/payment-transactions/f614e339d7058904a831aad742e24d55', 'Exp
Route::get('/export/wallet-transactions/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@walletTransactions')->name('walletTransactions.export');
Route::get('/products', function (\App\Classes\Modules\Exports\Services\ExportsProducts $exportsProducts) {
$bookings = Booking::where(function($query){
return $query->whereMonth('created_at', 7)->orWhereMonth('created_at', 8)->orWhereMonth('created_at', 9)->orWhereMonth('created_at', 10)->orWhereMonth('created_at', 11)->orWhereMonth('created_at', 12);
})->whereDoesntHave('transactions', function($q){
$q->where('type', TransactionType::PURCHASE_ORDER);
$q->whereIn('status', [ApprovalStatus::PENDING_VERIFICATION, ApprovalStatus::APPROVED]);
})->get();
dd($bookings->count());
return $exportsProducts->download('products.csv', Excel::CSV, ['Content-Type' => 'text/csv']);
})->name('products.random');