diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7d760a5e0cb43c980fe1c071a02760b50157b7ba..58d9bf3daeef791ce0866be18d545d715a31703c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -33,8 +33,14 @@ android { buildFeatures { viewBinding = true } + + packaging { + resources.excludes.add("META-INF/DEPENDENCIES") + } } + + dependencies { implementation("androidx.core:core-ktx:1.8.0") @@ -64,6 +70,8 @@ dependencies { implementation("com.squareup.retrofit2:converter-moshi:2.9.0") implementation("androidx.preference:preference:1.2.1") + implementation("io.github.evanrupert:excelkt:1.0.2") + testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f1ec3ca3962e81c27a5cfc2d2f70cc2cf38411e2..524104533e9a21551af37a80fdf31a32e97deb80 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,6 +3,7 @@ xmlns:tools="http://schemas.android.com/tools"> <uses-permission android:name="android.permission.INTERNET" /> + <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:allowBackup="true" diff --git a/app/src/main/java/com/example/bondoyap/ui/settings/SettingsFragment.kt b/app/src/main/java/com/example/bondoyap/ui/settings/SettingsFragment.kt index 8018684cc1dabee268479d5c16e1e2029ee1dba6..4e59685263b89adacc8550050b17a4e34b81a240 100644 --- a/app/src/main/java/com/example/bondoyap/ui/settings/SettingsFragment.kt +++ b/app/src/main/java/com/example/bondoyap/ui/settings/SettingsFragment.kt @@ -63,9 +63,16 @@ class SettingsFragment : Fragment() { //todo } + val database = MockDatabase() + val exporter = TransactionsExporter(database) + saveButton.setOnClickListener{ Toast.makeText(appContext, "Menyimpan transaksi...", Toast.LENGTH_SHORT).show() - //todo + //todo choose one + exporter.exportToXLS() + exporter.exportToXLSX() + + Toast.makeText(appContext, "Penyimpanan pada folder Documents berhasil...", Toast.LENGTH_SHORT).show() } sendButton.setOnClickListener{ diff --git a/app/src/main/java/com/example/bondoyap/ui/settings/SettingsViewModel.kt b/app/src/main/java/com/example/bondoyap/ui/settings/SettingsViewModel.kt index 6038adcbe40a12ade0663f68d32d295401f2690a..126d2f8867aa68b32386f7eb25275f64d1044596 100644 --- a/app/src/main/java/com/example/bondoyap/ui/settings/SettingsViewModel.kt +++ b/app/src/main/java/com/example/bondoyap/ui/settings/SettingsViewModel.kt @@ -16,7 +16,6 @@ class SettingsViewModel(private val loginRepository: LoginRepository) : ViewMode fun logout(){ loginRepository.logout() } - fun getUser(): LoggedInUser? { return loginRepository.getUser() } diff --git a/app/src/main/java/com/example/bondoyap/ui/settings/TransactionsExporter.kt b/app/src/main/java/com/example/bondoyap/ui/settings/TransactionsExporter.kt new file mode 100644 index 0000000000000000000000000000000000000000..f145acb54d27261c0369c924ba8ccc3efb5e5491 --- /dev/null +++ b/app/src/main/java/com/example/bondoyap/ui/settings/TransactionsExporter.kt @@ -0,0 +1,87 @@ +package com.example.bondoyap.ui.settings + +import android.os.Environment +import android.util.Log +import io.github.evanrupert.excelkt.Sheet +import io.github.evanrupert.excelkt.workbook +import org.apache.poi.ss.usermodel.FillPatternType +import org.apache.poi.ss.usermodel.IndexedColors +import java.io.File + +interface Database { + fun getTransactions(): List<Transaction> +} + +class MockDatabase : Database { + override fun getTransactions(): List<Transaction> { + return findTransactions() + } +} + +data class Transaction( + val date: String, + val category: String, + val amount: Double, + val name: String, + val location: String +) + +fun findTransactions(): List<Transaction> = listOf( + Transaction("2024-04-01", "Pemasukan", 100.0, "Gaji", "AAAAA"), + Transaction("2024-04-02", "Pengeluaran", 50.0, "Belanja", "BBBBB"), + Transaction("2024-04-03", "Pemasukan", 200.0, "Bonus", "CCCC") +) + +class TransactionsExporter(private val database: Database) { + fun exportToXLS() { + val transactions = database.getTransactions() + Log.d("SaveDebug", "xls function") + writeToExcel("transactions.xls", transactions) + } + + fun exportToXLSX() { + val transactions = database.getTransactions() + Log.d("SaveDebug", "xls function") + writeToExcel("transactions.xlsx", transactions) + } + + private fun writeToExcel(fileName: String, transactions: List<Transaction>) { + val downloadsDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS) + val file = File(downloadsDir, fileName) + + workbook { + sheet("Transactions") { + transactionsHeader() + + for (transaction in transactions) { + row { + cell(transaction.date) + cell(transaction.category) + cell(transaction.amount) + cell(transaction.name) + cell(transaction.location) + } + } + } + }.write(file.absolutePath) + } + + + private fun Sheet.transactionsHeader() { + val headings = listOf("Tanggal", "Kategori Transaksi", "Nominal Transaksi", "Nama Transaksi", "Lokasi") + + val headingStyle = createCellStyle { + setFont(createFont { + fontName = "IMPACT" + color = IndexedColors.BLACK.index + }) + + fillPattern = FillPatternType.SOLID_FOREGROUND + fillForegroundColor = IndexedColors.YELLOW.index + } + + row(headingStyle) { + headings.forEach { cell(it) } + } + } +} \ No newline at end of file