Cetak CSV pada Catatan Kredit

Waktu itu lebih mudah menjalankan cetak CSV, karena opencsv banyak panduan dan blog di googling. Tapi juga sebetulnya jadi awal yang mudah bagi cetak PDF. Seperti bagaimana mudahnya melakukan share PDF ke aplikasi lainnya.

Oke kita mulai, untuk CSV perlu third party library, yaitu opencsv. Dan hanya library saja, tanpa meminta data aplikasi dan lain lain yang aneh. Jadi diletakkan di dependencies spt ini:

dependencies {
implementation 'com.opencsv:opencsv:5.2'

setelah itu perlu ke Manifest untuk membuat alokasi file/cache nantinya csv/pdf disimpan sementara sebelum dikirimkan, dalam proses pembuatan isinya.

        <provider
android:name="androidx.core.content.FileProvider"
android:authorities="com.blogspot.budilaks.catatankredit.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>

</application>

</manifest>

File bisa diganti menjadi Cache, tetapi untuk hape yang memori ram nya kecil, akan menjadikan crash aplikasi karena tidak cukup besar memori cache, sehingga saya gunakan File. Silahkan aja test dengan cache dan file dan bandingkan.

<?xml version="1.0" encoding="utf-8"?>
<paths>
<files-path
name="data"
path="."/>

<!--name is the file name
path is the root of external storage, it means here: Environment.getExternalStorageDirectory()
<cache-path name="name" path="path" />
<external-path name="scale" path="."/>
<files-path
name="data"
path="."/>

another example: Environment.getExternalStorageDirectory() + File.separator + "temps" + "myFile.pdf"

<external-path name="myFile" path="temps"/>
-->
</paths>

Mau gunakan file path atau cache path ditulis diatas ini, di xml baru, berjudul provider_paths.xml

Saat awal perlu inisiasi lokasi tuk file yang hendak dibuat, dengan nama yang sama saat share.

public void cetakCsv() {
File file = new File(getFilesDir(), "transaksi.csv");

Sehingga saat share bisa ada itu file/cache :

        writer.close();
} catch (IOException e) {e.printStackTrace();}
});

try {
if (!nengKu.isEmpty()) {
Toast.makeText(getApplicationContext(), "Transaksi : " + nengKu + " dicetak ...",
Toast.LENGTH_LONG).show();
Context context = getApplicationContext();
File filelocation = new File(getFilesDir(), "transaksi.csv");
Uri path = FileProvider.getUriForFile(context, "com.blogspot.budilaks.catatankredit.fileprovider", filelocation);
Intent fileIntent = new Intent(Intent.ACTION_SEND);
fileIntent.setType("text/csv");
fileIntent.putExtra(Intent.EXTRA_SUBJECT, "Trk. : " + nengKu + " (tgl." + formatFk.format(new Date().getTime()) + ")");
fileIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
fileIntent.putExtra(Intent.EXTRA_STREAM, path);
startActivity(Intent.createChooser(fileIntent, "Share "));
}
} catch (Exception e) {
e.printStackTrace();
}

Perhatikan filelocation, penting tuk tidak salah ketik nama file/cache spt saat inisiasi. Juga apakah file/cache tipenya. setType menentukan tipe file apakah text atau pdf, untuk Share boleh tulis apa aja sih, entah buat apa ini. Saya ubah ubah (ganti Send Email, dll) ga ngaruh.

cetakCSV spt dot matrix printer, maju terus pantang mundur, apalagi kekiri kekanan. Jadi header dibuat dulu, lalu masuk iterasi tuk isi nya baris demi baris, barulah dibuat footer alias penjumlahan dan periksa. Lumayan ribet sih logikanya, mesti berpikir urut.

mRestaurantRef.collection("ratings").orderBy("timestamp").limit(100)
.get().addOnCompleteListener(task -> {
try {
CSVWriter writer = new CSVWriter((new FileWriter(file.getAbsoluteFile())));
writer.writeNext(new String[]{formatFk.format(new Date())});
writer.writeNext(new String[]{"Nama : ", nengKu});
writer.writeNext(new String[]{"Tgl. Transaksi", "---","Tgl. JatuhTempo", "---", "Kredit", "---", "Bayar", "---",
"Berita"});
double sumKreditKu = 0.0;
double sumBayarKu = 0.0;
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : Objects.requireNonNull(task.getResult())) {
String beritaKu = document.getString("text");
String bayarKu = "0";
String kreditKu = "0";

if (document.getDouble("rating") != null) {
if (Objects.requireNonNull(document.getDouble("rating")) < 0.0) {
bayarKu = mNumberFormat.format(Math.abs(Objects.requireNonNull(document.getDouble("rating"))));
} else
kreditKu = mNumberFormat.format(Objects.requireNonNull(document.getDouble("rating")));
}

if (document.getDate("timestamp") != null) {
String priceKu = (formatFb.format(Objects.requireNonNull(document.getDate("timestamp"))));
if (document.getDate("jtpRating") != null) {
String jtpKu = (formatFb.format(Objects.requireNonNull(document.getDate("jtpRating"))));
uniNames.add(new String[]{priceKu, " ", jtpKu, " ", kreditKu, " ", bayarKu, " ",
beritaKu});
}
}
if (document.getDouble("rating") != null) {
if (Objects.requireNonNull(document.getDouble("rating")) < 0.0) {
sumBayarKu -= Objects.requireNonNull(document.getDouble("rating"));
} else
sumKreditKu += Objects.requireNonNull(document.getDouble("rating"));
}
}
}
writer.writeAll(uniNames);
writer.writeNext(new String[]{" "});
writer.writeNext(new String[]{" ", " ", "_____________", " ", "_____________"});
writer.writeNext(new String[]{" ", " "," ", " Kredit : Rp.", mNumberFormat.format(sumKreditKu), " Bayar : Rp.", mNumberFormat.format(sumBayarKu)});
writer.writeNext(new String[]{" ", " "," ", " ", "_____________", "_____________", "____________"});
writer.writeNext(new String[]{" ", " "," ", " ", " Sisa : Rp.", mNumberFormat.format(sumKreditKu-sumBayarKu), " "});
writer.writeNext(new String[]{" "});
writer.writeNext(new String[]{" ", " "," ", " ", " Periksa : Rp.", nengKk, " "});

writer.close();
} catch (IOException e) {e.printStackTrace();}
});

try {
if (!nengKu.isEmpty()) {

Ternyata sederhana coding nya, kalau dah temukan polanya.



Berguna juga ilmu dasar dulu kuliah, bikin Fortran, dan Visual Basic tuk skripsi dan dilanjutkan bikin database Enterprise menggunakan Microsoft Access tuk gudang, produksi, penjualan, pembelian dan akunting.

Inilah kupas cetakCSV yang saya contek dari internet dah disesuaikan dengan kebutuhan saya.

Tidak ada yang sulit selama kita berusaha.

Terimakasih dah membaca.

Kupas tuntas aplikasi Catatan Kredit

Lanjutan  antisipasi null pada aplikasi Catatan Kredit

Komentar