From 5b681ac8c05e2f1f1fbd9b2292caaa2982322f26 Mon Sep 17 00:00:00 2001 From: Steve Ng Date: Sun, 29 Oct 2023 08:44:31 +0800 Subject: [PATCH] fixing the structure of export receipt to autocount and import receipt to exchange map failed --- .../Services/ExportsInvoiceTransactions.php | 21 +-- .../Services/ExportsReceiptTransactions.php | 132 ++++++++++++++++++ .../ExportCustomersToExcelController.php | 10 +- .../ImportStatementReceiptsController.php | 11 +- .../sections/TransactionsMappingComponent.vue | 5 +- routes/web.php | 1 + 6 files changed, 158 insertions(+), 22 deletions(-) create mode 100644 app/Classes/Modules/Exports/Services/ExportsReceiptTransactions.php diff --git a/app/Classes/Modules/Exports/Services/ExportsInvoiceTransactions.php b/app/Classes/Modules/Exports/Services/ExportsInvoiceTransactions.php index 2ecaada8..796ec19d 100644 --- a/app/Classes/Modules/Exports/Services/ExportsInvoiceTransactions.php +++ b/app/Classes/Modules/Exports/Services/ExportsInvoiceTransactions.php @@ -34,19 +34,12 @@ class ExportsInvoiceTransactions implements FromQuery, WithHeadings, WithHeading public function headings(): array { - $header = []; - if ($this->request->input('type') == 'invoices') { - $header[] = 'DocNo'; - $header[] = 'DocDate'; - $header[] = 'DebtorCode'; - } else { - $header[] = 'OrNo'; - $header[] = 'OrDate'; - $header[] = 'CreditorCode'; - } - $header[] = 'Ref'; - $header[] = ($this->request->input('type') == 'invoices' ? 'DebtorName' : 'CreditorName'); - $header = array_merge($header, [ + $header = [ + 'DocNo', + 'DocDate', + 'DebtorCode', + 'Ref', + 'DebtorName', 'CurrencyCode', 'ShipInfo', 'ItemCode', @@ -56,7 +49,7 @@ class ExportsInvoiceTransactions implements FromQuery, WithHeadings, WithHeading 'UnitPrice', 'AccNo', 'DeptNo' - ]); + ]; return $header; } diff --git a/app/Classes/Modules/Exports/Services/ExportsReceiptTransactions.php b/app/Classes/Modules/Exports/Services/ExportsReceiptTransactions.php new file mode 100644 index 00000000..07c5d3c1 --- /dev/null +++ b/app/Classes/Modules/Exports/Services/ExportsReceiptTransactions.php @@ -0,0 +1,132 @@ +request = $request; + } + + public function headings(): array + { + $header = [ + 'DocNo', + 'DocDate', + 'DebtorCode', + 'Description', + 'DocNo2', + 'ProjNo', + 'DeptNo', + 'CurrencyCode', + 'ToHomeRate', + 'ToDebtorRate', + 'Note', + 'PaymentMethod', + 'ChequeNo', + 'PaymentAmt', + 'BankCharge', + 'ToBankRate', + 'BankChargeTaxType', + 'BankChargeTaxRefNo', + 'BankChargeProjNo', + 'BankChargeDeptNo', + 'PaymentBy', + 'FloatDay', + 'IsRCHQ', + 'RCHQDate', + 'KnockOffDocType', + 'KnockOffDocNo', + 'KnockOffAmt', + '', + ]; + return $header; + } + + /** + * @return \Illuminate\Support\Collection|mixed + */ + public function query() + { + $data = (new ApplyFiltersToQuery())->execute(StatementTransaction::query(), json_decode($this->request->input('filter'), true)); + if ($this->request->has('bankStatementTransactionId')) $data = $data->whereIn('id',json_decode($this->request->input('bankStatementTransactionId'), true)); + + return $data; + } + + /** + * @param StatementTransaction $transaction + * + * @return array + */ + public function map($transaction): array + { + $statementTransactionOwner = $transaction->owners()->whereIn('status', [ApprovalStatus::APPROVED])->first(); + $logArray = [ + 'counter' => $this->counter, + 'system' => $statementTransactionOwner->system, + 'StatementTransactionOwner_id' => $statementTransactionOwner->id, + 'transaction_table_id' => $statementTransactionOwner->owner_id, + ]; + $this->counter += 1; + $logArray = json_encode($logArray); + + $filePath = storage_path('logs/exports_receipt_transactions.log'); + $errorFilePath = storage_path('logs/exports_receipt_transactions_error.log'); + $textToAppend = Carbon::now()->format('[Y-m-d H:i:s]') . ' ' . $logArray . PHP_EOL; + file_put_contents($filePath, $textToAppend, FILE_APPEND); + + $company = Company::where('name',$transaction->transaction_description_2)->first(); + + return [ + '<>', + Carbon::parse($transaction->posting_date)->format('d/m/Y'), + ($company ? $company->debtor : null), + $transaction->transaction_description, + '', + '', + '', + 'MYR', + 1, + 1, + '', + 'MBB', + '', + $transaction->amount, + '', + 1, + '', + '', + '', + '', + '', + '0', + '', + '', + 'RI', + $transaction->transaction_ref, + $transaction->amount, + '', + ]; + } +} diff --git a/app/Http/Controllers/Exports/ExportCustomersToExcelController.php b/app/Http/Controllers/Exports/ExportCustomersToExcelController.php index 7dfe0485..733c84fa 100644 --- a/app/Http/Controllers/Exports/ExportCustomersToExcelController.php +++ b/app/Http/Controllers/Exports/ExportCustomersToExcelController.php @@ -17,6 +17,7 @@ use Illuminate\Support\Facades\Auth; use Maatwebsite\Excel\Excel; use App\Classes\Modules\Exports\Services\ExportsImportedInvoiceMappeds; use App\Models\TransactionMappingLog; +use App\Classes\Modules\Exports\Services\ExportsReceiptTransactions; class ExportCustomersToExcelController { @@ -61,7 +62,14 @@ class ExportCustomersToExcelController public function invoiceTransactions(Request $request){ $exportsTransactions = new ExportsInvoiceTransactions($request); - $response = $exportsTransactions->download(($request->input('type') == 'invoices' ? 'invoice-transactions' : 'receipt-transactions').'.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); + $response = $exportsTransactions->download('invoice-transactions.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); + ob_end_clean(); + return $response; + } + + public function receiptTransactions(Request $request){ + $exportsTransactions = new ExportsReceiptTransactions($request); + $response = $exportsTransactions->download('receipt-transactions.xls', Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']); ob_end_clean(); return $response; } diff --git a/app/Http/Controllers/Imports/ImportStatementReceiptsController.php b/app/Http/Controllers/Imports/ImportStatementReceiptsController.php index 8021e3a9..f3b89db7 100644 --- a/app/Http/Controllers/Imports/ImportStatementReceiptsController.php +++ b/app/Http/Controllers/Imports/ImportStatementReceiptsController.php @@ -21,6 +21,7 @@ use App\Models\TransactionMappingLog; use App\Classes\ValueObjects\Response\ApiResponseObject; use App\Classes\ValueObjects\Constants\HttpStatus; use Illuminate\Http\JsonResponse; +use Illuminate\Support\Facades\DB; class ImportStatementReceiptsController { @@ -78,11 +79,11 @@ class ImportStatementReceiptsController private function mappingExchange(Array $row) { $date = $row['date']; - $transactions = Transaction::where('original_amount', $row['local_payment_amount'])->whereRaw("DATE(created_at) = '$date'") - ->whereHas('issuerCompany', function($q) use($row) { - $q->where('debtor',$row['debtor_code']); - }) - ->get(); + $transactions = Transaction::getReceiverWithJoinStatementTransactionAndOwner($row)->select('transactions.*')->where('statement_transactions.amount', $row['payment_amount'])->whereRaw("DATE(posting_date) = '$date'")->get(); + + if ($transactions && $transactions->count() == 0) { + $transactions = Transaction::getReceiverWithJoinStatementTransactionAndOwner($row)->select('transactions.*')->where(DB::raw('FLOOR(statement_transactions.amount)'), floor($row['payment_amount']))->whereRaw("DATE(posting_date) = '$date'")->get(); + } if ($transactions && $transactions->count() == 1) { foreach ($transactions as $key => $transaction) { diff --git a/resources/assets/vue/components/accounting/sections/TransactionsMappingComponent.vue b/resources/assets/vue/components/accounting/sections/TransactionsMappingComponent.vue index 160221bf..7a677bad 100644 --- a/resources/assets/vue/components/accounting/sections/TransactionsMappingComponent.vue +++ b/resources/assets/vue/components/accounting/sections/TransactionsMappingComponent.vue @@ -267,7 +267,7 @@ export default { exportInvoiceToAutoCount(){ const checkedStatementTransactions = this.getCheckedStatementOwners(); - let route = this.route('invoiceTransactions.export')+'?type=invoices&filter='+JSON.stringify(this.filter); + let route = this.route('invoiceTransactions.export')+'?filter='+JSON.stringify(this.filter); if (checkedStatementTransactions) { route += '&bankStatementTransactionId='+checkedStatementTransactions; } @@ -277,7 +277,8 @@ export default { exportReceiptToAutoCount(){ const checkedStatementTransactions = this.getCheckedStatementOwners(); - let route = this.route('invoiceTransactions.export')+'?type=receipts&filter='+JSON.stringify(this.filter); + this.filter['statement_transaction_owner_type_in'] = [3,4,5,7,13,14]; + let route = this.route('receiptTransactions.export')+'?filter='+JSON.stringify(this.filter); if (checkedStatementTransactions) { route += '&bankStatementTransactionId='+checkedStatementTransactions; } diff --git a/routes/web.php b/routes/web.php index 1dece5c3..18f8aa86 100644 --- a/routes/web.php +++ b/routes/web.php @@ -261,6 +261,7 @@ Route::get('/export/payment-transactions/f614e339d7058904a831aad742e24d55', 'Exp 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('/export/invoice-transactions/f614e339d7058904a831aad742e24d55', 'Exports\ExportCustomersToExcelController@receiptTransactions')->name('receiptTransactions.export'); Route::get('/export/imported-invoice-mapped', 'Exports\ExportCustomersToExcelController@importedInvoiceMapped')->name('importedInvoiceMapped.export'); Route::get('/products', function (\App\Classes\Modules\Exports\Services\ExportsProducts $exportsProducts) {