From a56fbae0921ce1bf5dbb2e7e387ddaa63156d4d4 Mon Sep 17 00:00:00 2001 From: fadhilAmri <13521066@std.stei.itb.ac.id> Date: Mon, 1 Apr 2024 17:10:34 +0700 Subject: [PATCH] feat: create excel from list transactions and write it to internal storage --- app/build.gradle.kts | 3 + .../transaction/TransactionAdapter.kt | 4 + .../transaction/TransactionFragment.kt | 113 +++++++++++++++++- .../res/drawable/border_save_selection.xml | 13 ++ app/src/main/res/drawable/button_save.png | Bin 0 -> 6110 bytes app/src/main/res/drawable/button_send.png | Bin 0 -> 6043 bytes .../drawable/round_corner_save_selection.xml | 6 + .../main/res/layout/fragment_transaction.xml | 72 +++++++++-- app/src/main/res/values/strings.xml | 7 ++ 9 files changed, 205 insertions(+), 13 deletions(-) create mode 100644 app/src/main/res/drawable/border_save_selection.xml create mode 100644 app/src/main/res/drawable/button_save.png create mode 100644 app/src/main/res/drawable/button_send.png create mode 100644 app/src/main/res/drawable/round_corner_save_selection.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 5ab29eb..9cb72b9 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -95,6 +95,9 @@ dependencies { api ("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1") api ("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1") + // POI: excel + implementation ("org.apache.poi:poi:5.0.0") + implementation ("org.apache.poi:poi-ooxml:5.2.3") //DataBinding kapt ("com.android.databinding:compiler:3.2.0-alpha10") diff --git a/app/src/main/java/com/example/nerbos/fragments/transaction/TransactionAdapter.kt b/app/src/main/java/com/example/nerbos/fragments/transaction/TransactionAdapter.kt index ae9cd89..5962918 100644 --- a/app/src/main/java/com/example/nerbos/fragments/transaction/TransactionAdapter.kt +++ b/app/src/main/java/com/example/nerbos/fragments/transaction/TransactionAdapter.kt @@ -60,6 +60,10 @@ class TransactionAdapter() : RecyclerView.Adapter<TransactionAdapter.Transaction onLocationClick?.invoke(holder.location.text.toString()) } } + + fun getTransactionList() : List<Transaction>{ + return this.transactionList + } @SuppressLint("NotifyDataSetChanged") fun setData(transactions: List<Transaction>){ this.transactionList = transactions diff --git a/app/src/main/java/com/example/nerbos/fragments/transaction/TransactionFragment.kt b/app/src/main/java/com/example/nerbos/fragments/transaction/TransactionFragment.kt index 3a82a2c..cfdd0d6 100644 --- a/app/src/main/java/com/example/nerbos/fragments/transaction/TransactionFragment.kt +++ b/app/src/main/java/com/example/nerbos/fragments/transaction/TransactionFragment.kt @@ -1,20 +1,22 @@ package com.example.nerbos.fragments.transaction import android.Manifest -import android.app.AlertDialog import android.app.Dialog +import android.content.Context +import android.content.Context.STORAGE_SERVICE import android.content.Intent import android.content.pm.PackageManager -import android.location.Address import android.location.Geocoder import android.location.Location import android.os.Bundle +import android.os.Environment +import android.os.storage.StorageManager +import android.provider.SyncStateContract import android.text.TextUtils import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.view.Window import android.view.WindowManager import android.widget.Button import android.widget.EditText @@ -24,6 +26,8 @@ import android.widget.RadioGroup import android.widget.TextView import android.widget.Toast import androidx.core.app.ActivityCompat +import androidx.core.content.ContextCompat +import androidx.core.content.ContextCompat.getSystemService import androidx.fragment.app.Fragment import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider @@ -38,8 +42,21 @@ import com.example.nerbos.service.Authentication import com.example.nerbos.service.Utils import com.google.android.gms.location.FusedLocationProviderClient import com.google.android.gms.location.LocationServices -import com.google.android.gms.maps.CameraUpdateFactory -import com.google.android.gms.maps.model.LatLng +import org.apache.poi.hssf.usermodel.HSSFCell +import org.apache.poi.hssf.usermodel.HSSFRow +import org.apache.poi.hssf.usermodel.HSSFSheet +import org.apache.poi.hssf.usermodel.HSSFWorkbook +import org.apache.poi.ss.usermodel.Cell +import org.apache.poi.ss.usermodel.Row +import org.apache.poi.ss.usermodel.Sheet +import org.apache.poi.ss.usermodel.Workbook +import org.apache.poi.xssf.usermodel.XSSFSheet +import org.apache.poi.xssf.usermodel.XSSFWorkbook +import java.io.File +import java.io.FileNotFoundException +import java.io.FileOutputStream +import java.io.IOException +import java.io.OutputStream import java.util.Locale // TODO: Rename parameter arguments, choose names that match @@ -95,13 +112,99 @@ class TransactionFragment : Fragment() { transactionViewModel.readAllData!!.observe(viewLifecycleOwner, Observer { transactions -> transactionAdapter.setData(transactions) }) + // Add Transaction Button view.findViewById<ImageView>(R.id.addTransactionButton).setOnClickListener { showAddTransactionDialog() } + // Save Transaction + val xlsSave = view.findViewById<TextView>(R.id.xlsSave) + val xlsxSave = view.findViewById<TextView>(R.id.xlsxSave) + + view.findViewById<ImageView>(R.id.saveTransactionsButton).setOnClickListener{ + + if (xlsSave.visibility == View.VISIBLE){ + xlsSave.visibility = View.GONE + xlsxSave.visibility = View.GONE + } else if(xlsSave.visibility == View.GONE){ + xlsSave.visibility = View.VISIBLE + xlsxSave.visibility = View.VISIBLE + } + } + + xlsSave.setOnClickListener { + createExcelFile(transactionAdapter.getTransactionList(), "xls") + } + + xlsxSave.setOnClickListener { + createExcelFile(transactionAdapter.getTransactionList(), "xlsx") + } + return view } + private fun createExcelFile(transactions : List<Transaction>, extension: String) { + var workbook : Workbook + var sheet : Sheet + if (extension == "xls"){ + workbook = HSSFWorkbook() + sheet = workbook.createSheet("My Transactions") + } else { // "xlsx" + workbook = XSSFWorkbook() + sheet = workbook.createSheet("My Transactions") + } + + // Setup Header + val header : Row = sheet.createRow(0) + var cell : Cell = header.createCell(0) + cell.setCellValue("Date") + cell = header.createCell(1) + cell.setCellValue("Category") + cell = header.createCell(2) + cell.setCellValue("Nominal") + cell = header.createCell(3) + cell.setCellValue("Name") + cell = header.createCell(4) + cell.setCellValue("Location") + + // Fill the cell for transaction data + for (i in transactions.indices){ + val row : Row= sheet.createRow(i+1) + cell = row.createCell(0) + cell.setCellValue(transactions[i].date.toString()) + cell = row.createCell(1) + cell.setCellValue(transactions[i].category.toString()) + cell = row.createCell(2) + cell.setCellValue(transactions[i].nominal.toDouble()) + cell = row.createCell(3) + cell.setCellValue(transactions[i].name) + cell = row.createCell(4) + cell.setCellValue(transactions[i].location) + } + + saveWorkBook(workbook, extension) + } + private fun saveWorkBook(workbook: Workbook, extension: String) { + val appDirectory = requireContext().filesDir + + val filepath:File = File(appDirectory , "Transaction Report.$extension") + + try{ + if(!filepath.exists()){ + filepath.createNewFile() + } + Log.i("Write file", filepath.toString()) + val fileOutputStream : FileOutputStream = FileOutputStream(filepath) + workbook.write(fileOutputStream) + fileOutputStream.flush() + fileOutputStream.close() + + }catch (e:Exception){ + Log.i("Write file", "Failed ${filepath.toString()}") + e.printStackTrace() + } + } + private fun showLocationOnMap(location: String) { val mapIntent = Intent(requireActivity(), MapsActivity::class.java) mapIntent.putExtra("locationName", location) diff --git a/app/src/main/res/drawable/border_save_selection.xml b/app/src/main/res/drawable/border_save_selection.xml new file mode 100644 index 0000000..8983d53 --- /dev/null +++ b/app/src/main/res/drawable/border_save_selection.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <shape android:shape="rectangle"> + <solid android:color="@color/base_bg" /> + </shape> + </item> + <item android:bottom="2dp"> + <shape android:shape="rectangle"> + <solid android:color="@color/white"/> + </shape> + </item> +</layer-list> diff --git a/app/src/main/res/drawable/button_save.png b/app/src/main/res/drawable/button_save.png new file mode 100644 index 0000000000000000000000000000000000000000..14956f537e47b091899be3f8065e3bd6994f2570 GIT binary patch literal 6110 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/button_send.png b/app/src/main/res/drawable/button_send.png new file mode 100644 index 0000000000000000000000000000000000000000..2a201a3dbd4d4953bb3cce8089a952608fa62835 GIT binary patch literal 6043 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 V5zce>;imuq002ovPDHLkV1oIzxPSlv literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/round_corner_save_selection.xml b/app/src/main/res/drawable/round_corner_save_selection.xml new file mode 100644 index 0000000..8fc1858 --- /dev/null +++ b/app/src/main/res/drawable/round_corner_save_selection.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle"> + <solid android:color="@color/white" /> + <corners android:bottomLeftRadius="10dp" android:bottomRightRadius="10dp" /> +</shape> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_transaction.xml b/app/src/main/res/layout/fragment_transaction.xml index 690063b..97a7f7f 100644 --- a/app/src/main/res/layout/fragment_transaction.xml +++ b/app/src/main/res/layout/fragment_transaction.xml @@ -13,20 +13,40 @@ android:background="@color/base_bg" android:padding="20dp" > + <ImageView + android:id="@+id/saveTransactionsButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:src="@drawable/button_save" + + android:layout_marginStart="10dp" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + android:contentDescription="@string/save_transactions_button" /> + + <ImageView + android:id="@+id/sendTransactionsButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:src="@drawable/button_send" + android:layout_marginEnd="10dp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" + android:contentDescription="@string/send_transactions_button" /> <TextView android:id="@+id/myTransaction" android:layout_width="0sp" android:layout_height="wrap_content" - android:text="My Transaction" + android:text="@string/my_transaction" android:textColor="@color/white" android:textSize="20sp" android:textStyle="bold" android:layout_marginStart="10dp" - android:layout_marginTop="8dp" + android:layout_marginTop="40dp" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" + app:layout_constraintTop_toBottomOf="@+id/saveTransactionsButton" /> <ImageView @@ -34,12 +54,10 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/plus" - app:layout_constraintTop_toTopOf="parent" + android:layout_marginTop="30dp" + app:layout_constraintTop_toBottomOf="@id/sendTransactionsButton" app:layout_constraintEnd_toEndOf="parent" - > </ImageView> - - - + android:contentDescription="@string/add_transaction_button"/> <androidx.recyclerview.widget.RecyclerView android:layout_width="match_parent" @@ -49,5 +67,43 @@ app:layout_constraintTop_toBottomOf="@+id/myTransaction" /> + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="vertical" + android:layout_marginStart="28dp" + android:background="@drawable/round_corner_save_selection" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/saveTransactionsButton" > + + <TextView + android:id="@+id/xlsSave" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="@string/xls" + android:background="@drawable/border_save_selection" + android:textSize="18sp" + android:textColor="@color/base_bg" + android:paddingTop="2dp" + android:paddingStart="30dp" + android:paddingBottom="4dp" + android:paddingEnd="30dp" + android:visibility="gone" + /> + + <TextView + android:id="@+id/xlsxSave" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textSize="18sp" + android:textColor="@color/base_bg" + android:text="@string/xlsx" + android:paddingBottom="3dp" + android:paddingStart="26dp" + android:paddingEnd="30dp" + android:visibility="gone" + /> + </LinearLayout> + </androidx.constraintlayout.widget.ConstraintLayout> </FrameLayout> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b51f00d..061b129 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -51,5 +51,12 @@ <string name="network_sensing_string">No Internet Connection Please check your connection and try again.</string> <string name="close_button">Close Button</string> <string name="pie_chart">Pie Chart</string> + <string name="my_transaction">My Transaction</string> + <string name="add_transaction_button">Add Transaction Button</string> + <string name="send">Send</string> + <string name="save_transactions_button">Save Transactions Button</string> + <string name="send_transactions_button">Send Transactions Button</string> + <string name="xls">.xls</string> + <string name="xlsx">.xlsx</string> </resources> \ No newline at end of file -- GitLab