where('account_number',$account_number)->where('booking_date',$period)->get(); $saldo = '23984352604'; $runningBalance = (float) $saldo; // Map the data to transform or format specific fields $mappedData = $stmt->sortBy(['ACTUAL.DATE', 'REFERENCE.NUMBER'])->map(function ($item, $index) use (&$runningBalance) { $runningBalance += (float) $item->amount_lcy; return [ 'NO' => 0, // Use $index instead of $item->count() 'TRANSACTION.DATE' => \Carbon\Carbon::createFromFormat('YmdHi', $item->booking_date . substr($item->ft?->date_time ?? '0000000000', 6, 4))->format('d/m/Y H:i'), 'REFERENCE.NUMBER' => $item->trans_reference, 'TRANSACTION.AMOUNT' => $item->amount_lcy, 'TRANSACTION.TYPE' => $item->amount_lcy < 0 ? 'D' : 'C', 'DESCRIPTION' => $this->generateNarative($item), 'END.BALANCE' => $runningBalance, 'ACTUAL.DATE' => \Carbon\Carbon::createFromFormat('ymdHi', $item->ft?->date_time ?? '2505120000') ->format('d/m/Y H:i'), ]; })->values(); // Then apply the sequential numbers $mappedData = $mappedData->map(function ($item, $index) { $item['NO'] = $index + 1; return $item; }); return response()->json($mappedData); $csvFileName = $account_number."_".$period.".csv"; $headers = [ "Content-Type" => "text/csv", "Content-Disposition" => "attachment; filename={$csvFileName}" ]; $callback = function () use ($mappedData) { $file = fopen('php://output', 'w'); // Write headers without quotes, using pipe separator fputs($file, implode('|', array_keys($mappedData[0])) . "\n"); // Write data rows without quotes, using pipe separator foreach ($mappedData as $row) { fputs($file, implode('|', $row) . "\n"); } fclose($file); }; return response()->stream($callback, 200, $headers); } function generateNarative($item){ $narr = ''; if($item->transaction->narr_type){ $narr .= $item->transaction->stmt_narr.' '; $narr .= $this->getFormatNarrative($item->transaction->narr_type,$item); } else { $narr .= $item->transaction->stmt_narr.' '; } if($item->ft?->recipt_no) { $narr .= 'Receipt No: ' . $item->ft->recipt_no; } return $narr; } function getFormatNarrative($narr,$item){ $narrParam = TempStmtNarrParam::where('_id', $narr)->first(); if (!$narrParam) { return ''; } $fmt = ''; if($narrParam->_id=='FTIN'){ $fmt = 'FT.IN'; }elseif($narrParam->_id=='FTOUT'){ $fmt = 'FT.IN'; } else { $fmt = $narrParam->_id; } $narrFormat = TempStmtNarrFormat::where('_id', $fmt)->first(); if (!$narrFormat) { return ''; } // Get the format string from the database $formatString = $narrFormat->text_data ?? ''; // Parse the format string // Split by the separator ']' $parts = explode(']', $formatString); $result = ''; foreach ($parts as $index => $part) { if (empty($part)) { continue; } if ($index === 0) { // For the first part, take only what's before the '!' $splitPart = explode('!', $part); if (count($splitPart) > 0) { // Remove quotes, backslashes, and other escape characters $cleanPart = trim($splitPart[0]); // Remove quotes at the beginning and end $cleanPart = preg_replace('/^["\'\\\\]+|["\'\\\\]+$/', '', $cleanPart); // Remove any remaining backslashes $cleanPart = str_replace('\\', '', $cleanPart); // Remove any remaining quotes $cleanPart = str_replace('"', '', $cleanPart); $result .= $cleanPart; } } else { // For other parts, these are field placeholders $fieldName = strtolower(str_replace('.', '_', $part)); // Get the corresponding parameter value from narrParam $paramValue = null; // Check if the field exists as a property in narrParam if (property_exists($narrParam, $fieldName)) { $paramValue = $narrParam->$fieldName; } elseif (isset($narrParam->$fieldName)) { $paramValue = $narrParam->$fieldName; } // If we found a value, add it to the result if ($paramValue !== null) { $result .= $paramValue; } else { // If no value found, try to use the original field name as a fallback if($fieldName!='recipt_no') { $result .= $this->getTransaction($item->trans_reference, $fieldName).' '; // $result .= "[$fieldName]"; } } } } return $result; } public function getTransaction($ref, $field){ $trans = TempFundsTransfer::where('ref_no', $ref)->first(); return $trans->$field ?? ""; } /** * Show the form for creating a new resource. */ public function create() { return view('webstatement::create'); } /** * Store a newly created resource in storage. */ public function store(Request $request) { // } /** * Show the specified resource. */ public function show($id) { return view('webstatement::show'); } /** * Show the form for editing the specified resource. */ public function edit($id) { return view('webstatement::edit'); } /** * Update the specified resource in storage. */ public function update(Request $request, $id) { // } /** * Remove the specified resource from storage. */ public function destroy($id) { // } }