Merge branches 'development' and 'dillon/accounting-bank-mapping' of gitlab.com:CIEFWorldwideSdnBhd/exchange-2.0 into development

This commit is contained in:
edmondlang
2023-07-07 01:19:32 +08:00
7 changed files with 215 additions and 3 deletions
@@ -59,7 +59,7 @@ class UpdateBankStatementDetailLogic extends AbstractControllerLogic
$salesSystems = ['lite', 'cntr', 'probashi', 'pets'];
$allowedSystems = array_merge($salesSystems, ['exchange', 'izyim']);
if (!in_array($systemReference, $allowedSystems)) {
if (!in_array($systemReference, $allowedSystems) && !in_array($request->input('pay_for'), ['internal_bank_transfer', 'others'])) {
throw new MalformedRequestException('System Reference not allowed');
}
@@ -0,0 +1,38 @@
<?php
namespace App\Classes\Modules\Accounting\Processors;
use App\Classes\Exceptions\MalformedRequestException;
use App\Models\Transaction;
use Illuminate\Support\Facades\Log;
use \Illuminate\Database\Eloquent\Collection;
class ListShippingPortalTransactions
{
public function execute($filters)
{
try {
$url = 'https://izyim.cief-malaysia.com/public/api/v1/transactions/query';
$client = new \GuzzleHttp\Client(['verify' => false]);
$response = $client->request('GET', $url . '?api-key=510acd13d8d24375cf038ad626c282565451461a9c2399357e0b65365300787e&filters=' . json_encode($filters));
$body = $response->getBody();
$data = json_decode($body, true);
$payload = $data['payload'];
return $data['payload']['data'];
// return $payload['data'];
// $return_data = Collection::hydrate($payload['data']);
// return $return_data;
} catch (\Exception $exception) {
dd($exception->getMessage());
// preg_match('/\{.*\}/s', $exception->getMessage(), $matches);
// $jsonError = json_decode($matches[0]);
// Retrieved Transactions failed
// throw new MalformedRequestException($jsonError->title);
}
// if not found
throw new MalformedRequestException('Bill Number Not Found.');
}
}
@@ -0,0 +1,123 @@
<?php
namespace App\Classes\Modules\Exports\Services;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use App\Classes\ValueObjects\Constants\StatementTransactionOwnerType;
use App\Models\StatementTransactionOwner;
use App\Models\Transaction;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Illuminate\Http\Request;
use Carbon\Carbon;
use App\Classes\Modules\Accounting\Processors\ListShippingPortalTransactions;
use App\Classes\ValueObjects\Constants\ShippingTransactionType;
use App\Classes\ValueObjects\Constants\TransactionType;
class ExportsInvoiceTransactions implements FromQuery, WithHeadings, WithHeadingRow, WithMapping, ShouldAutoSize
{
use Exportable;
private $request;
public function __construct(Request $request)
{
$this->request = $request;
}
public function headings(): array
{
return [
'DocNo',
'DocDate',
'DebtorCode',
'Ref',
'DebtorName',
'CurrencyCode',
'ShipInfo',
'ItemCode',
'DetailDescription',
'FurtherDescription',
'Qty',
'UnitPrice',
'AccNo',
'DeptNo'
];
}
/**
* @return \Illuminate\Support\Collection|mixed
*/
public function query()
{
$query = StatementTransactionOwner::whereNull('invoice_reference')
->whereIn('type', [StatementTransactionOwnerType::SALES, StatementTransactionOwnerType::WALLET_TOP_UP])
->whereIn('status', [ApprovalStatus::COMPLETED, ApprovalStatus::APPROVED]);
return $query;
}
/**
* @param Transaction $transaction
*
* @return array
*/
public function map($transaction): array
{
$row = null;
if($transaction->system == 'EXCHANGE') {
$row = (App()->make($transaction->owner_type))->where('id', $transaction->owner_id)->first();
$company = $row->type === TransactionType::PAYMENT ? $row->owner->company : $row->owner->owner;
$booking = $row->owner;
return [
'<<New>>',
$row->updated_at->format('m/d/Y H:m'),
$company->debtor,
$row->type === TransactionType::PAYMENT ? $booking->marking : $company->reference,
'',
'MYR',
$row->type === TransactionType::PAYMENT ? $booking->marking : $row->bill_no,
$row->type === TransactionType::PAYMENT ? '' : 'W1',
$row->type === TransactionType::PAYMENT ? 'PLEASE REFER TO THE ATTACHED APPENDIX REF ' . $booking->marking : 'CREDIT SALES',
'',
1,
round($row->amount, 2),
'500-0000',
'CIEF'
];
}
else {
$row = (App()->make(ListShippingPortalTransactions::class))->execute([
'id' => $transaction->owner_id,
'with_company' => true,
])[0];
$order = $row['order'];
$company_module = $order['company_module'];
return [
'<<New>>',
$row['updated_at'],
$company_module['debtor'],
$row['type'] === ShippingTransactionType::PAYMENT ? $order['reference'] : $company_module['marking'],
'',
'MYR',
$row['type'] === ShippingTransactionType::PAYMENT ? $order['reference'] : $row['bill_no'],
$row['type'] === ShippingTransactionType::PAYMENT ? '' : 'W1',
$row['type'] === ShippingTransactionType::PAYMENT ? 'PLEASE REFER TO THE ATTACHED APPENDIX REF `' . $order['reference'] : 'CREDIT SALES',
'',
1,
round($row['amount'], 2),
'500-0000',
'CIEF'
];
}
}
}
@@ -0,0 +1,39 @@
<?php
namespace App\Classes\ValueObjects\Constants;
final class ShippingTransactionType
{
// public const PAYMENT_ATTEMPT = 0;
public const SHIPPING_INVOICE = 1;
public const PAYMENT = 2;
// public const BILL = 3;
// public const PERFORMA = 4;
public const TOP_UP = 5;
// public const REFUND = 6;
// public const PURCHASE_ORDER = 7;
// public const SUPPLIER_DELIVER = 8;
public const CREDIT_NOTE = 9;
public const WITHDRAW = 10;
public const DEBIT_NOTE = 11;
public const TRANSFER_FEE = 12;
public const CASH_BACK = 13;
// public const SHIPPING_COST = 14;
public const GROUP_PAYMENT = 15;
}
@@ -9,8 +9,8 @@ use App\Classes\Modules\Exports\Services\ExportsBookingTransactions;
use App\Classes\Modules\Exports\Services\ExportsLeadsTransactions;
use App\Classes\Modules\Exports\Services\ExportsNullDebtors;
use App\Classes\Modules\Exports\Services\ExportsPaymentTransactions;
use App\Classes\Modules\Exports\Services\ExportsWalletTransactions;
use App\Classes\Modules\Exports\Services\ExportsInvoiceTransactions;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
@@ -57,6 +57,13 @@ class ExportCustomersToExcelController
return $response;
}
public function invoiceTransactions(Request $request){
$exportsTransactions = new ExportsInvoiceTransactions($request);
$response = $exportsTransactions->download('invoice-transactions.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']);
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();
@@ -102,7 +102,8 @@
<div class="col">
<div class="row text-center m-t-50 m-b-50 p-t-50 p-b-50" v-show="exportStage === 0">
<div class="col">
<div class="btn btn-lg btn-primary" @click="exportStage++">Export Invoices To AutoCount</div>
<div class="btn btn-lg btn-primary" @click="exportInvoiceToAutoCount">Export Invoices To AutoCount</div>
<!-- todo-new: delete later --><br><div class="btn btn-lg btn-primary m-t-20" @click="exportStage++">Nest Step</div>
<br>
<div class="row">
<div class="col">
@@ -209,6 +210,9 @@ export default {
};
this.submit(this.route('api.import_receipts.upload'), 'post', this.section, true, false);
},
exportInvoiceToAutoCount(){
window.open(this.route('invoiceTransactions.export'), '_blank');
},
successHandler(){
this.step += 1;
+1
View File
@@ -232,6 +232,7 @@ Route::get('/export/null-debtor/f614e339d7058904a831aad742e24d55', 'Exports\Expo
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('/export/invoice-transactions/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@invoiceTransactions')->name('invoiceTransactions.export');
Route::get('/products', function (\App\Classes\Modules\Exports\Services\ExportsProducts $exportsProducts) {
$bookings = Booking::where(function($query){