3000, 'CLAS' => 3000, 'SILVER' => 5000, 'SILV' => 5000, 'GOLD' => 10000 ]; private const CSV_FILENAME = 'atmcards.csv'; /** * Display a listing of the resource. */ public function index() { $filename = $this->generateAtmCardCsv(); return response()->download($filename)->deleteFileAfterSend(true); } /** * Generate CSV file with ATM card data * * @return string Filename of generated CSV */ private function generateAtmCardCsv() : string { $cards = $this->getEligibleAtmCards(); $filename = self::CSV_FILENAME; $handle = fopen($filename, 'w+'); if (!$handle) { throw new RuntimeException("Tidak dapat membuat file CSV: $filename"); } try { foreach ($cards as $card) { $fee = $this->determineCardFee($card); $csvRow = $this->createCsvRow($card, $fee); fputcsv($handle, $csvRow, '|'); } } finally { fclose($handle); } $this->cleanupCsvFile($filename); return $filename; } /** * Get eligible ATM cards from database * * @return \Illuminate\Database\Eloquent\Collection */ private function getEligibleAtmCards() { return Atmcard::where('crsts', 1) ->whereNotNull('accflag') ->whereNotNull('branch') ->whereNotNull('currency') ->whereIn('ctdesc', array_keys(self::DEFAULT_FEES)) ->get(); } /** * Determine fee for a card based on its type * * @param Atmcard $card * * @return int */ private function determineCardFee(Atmcard $card) : int { if ($card->fee) { return $card->fee; } return self::DEFAULT_FEES[$card->ctdesc] ?? 0; } /** * Create CSV row data for a card * * @param Atmcard $card * @param int $fee * * @return array */ private function createCsvRow(Atmcard $card, int $fee) : array { $today = date('Ymd'); return [ '', $card->accflag, $card->currency ?? 'IDR', $fee, 'PL65129', '', '', $card->branch, $today, $today, '', '', 'ADMIN FEE ATM::' . $card->crdno . '::' . $today, '', '', '', '', '', '', 'AC' ]; } /** * Remove double quotes from CSV file * * @param string $filename * * @return void */ private function cleanupCsvFile(string $filename) : void { $fileContent = file_get_contents($filename); if ($fileContent === false) { throw new RuntimeException("Tidak dapat membaca file CSV: $filename"); } $fileContent = str_replace('"', '', $fileContent); if (file_put_contents($filename, $fileContent) === false) { throw new RuntimeException("Tidak dapat menulis ke file CSV: $filename"); } } /** * 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) { // } }