command->info('Reset All no_po and rearrange it...'); // Cleansing PurchaseOrder::whereNotNull('no_po')->update(['no_po' => null]); // Ambil data PurchaseOrder, urutkan berdasarkan created_at $datas = PurchaseOrder::selectRaw('id, no_po')->orderBy('created_at')->get(); if ($datas->isEmpty()) { $this->command->info('No matching data found'); return; } // Hitung jumlah data untuk menentukan panjang padding yang diperlukan $totalRecords = $datas->count(); // Tentukan panjang maksimal PO $maxPoLength = 7; // maksimal 7 digit $maxPoNumber = 1000000; // PO maksimal sampai 1 juta // Mulai progress bar $this->command->getOutput()->progressStart($totalRecords); // Mulai transaksi database DB::transaction(function () use ($datas, $maxPoLength, $maxPoNumber) { $counter = 1; foreach ($datas as $po) { // Cek apakah counter melebihi maksimal PO (1 juta) if ($counter >= $maxPoNumber) { // Jika lebih dari 1 juta, tidak ada padding nol lagi $noPo = 'PO-' . $counter; } else { // Jika masih kurang dari 1 juta, tambahkan padding nol di depan $noPo = 'PO-' . str_pad($counter, $maxPoLength, '0', STR_PAD_LEFT); } // Update nomor PO $po->no_po = $noPo; $po->save(); // Increment counter untuk nomor PO berikutnya $counter++; $this->command->getOutput()->progressAdvance(); } }); $this->command->getOutput()->progressFinish(); } }