diff --git a/app/src/main/java/com/example/bondoman/DetailTransactionFragment.kt b/app/src/main/java/com/example/bondoman/DetailTransactionFragment.kt new file mode 100644 index 0000000000000000000000000000000000000000..736ebcd5eaba016113a65ab3efd7816d74492c3a --- /dev/null +++ b/app/src/main/java/com/example/bondoman/DetailTransactionFragment.kt @@ -0,0 +1,24 @@ +package com.example.bondoman + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.example.bondoman.databinding.FragmentDetailTransactionBinding +import com.example.bondoman.databinding.FragmentEditTransactionBinding + +class DetailTransactionFragment : Fragment() { + private lateinit var binding : FragmentDetailTransactionBinding + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + binding = FragmentDetailTransactionBinding.inflate(inflater, container, false) + return binding.root + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/bondoman/EditTransactionFragment.kt b/app/src/main/java/com/example/bondoman/EditTransactionFragment.kt new file mode 100644 index 0000000000000000000000000000000000000000..f05307faecb115a672226f7f67c31b065178aabf --- /dev/null +++ b/app/src/main/java/com/example/bondoman/EditTransactionFragment.kt @@ -0,0 +1,24 @@ +package com.example.bondoman + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.example.bondoman.databinding.FragmentEditTransactionBinding + +class EditTransactionFragment : Fragment() { + private lateinit var binding : FragmentEditTransactionBinding + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + binding = FragmentEditTransactionBinding.inflate(inflater, container, false) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/bondoman/SettingFragment.kt b/app/src/main/java/com/example/bondoman/SettingFragment.kt index 6692595c8ea6a187d7421b4ee473877df195a314..84a8b4f65fd57a88006748174aedc7dc7922eb5d 100644 --- a/app/src/main/java/com/example/bondoman/SettingFragment.kt +++ b/app/src/main/java/com/example/bondoman/SettingFragment.kt @@ -1,4 +1,5 @@ package com.example.bondoman +import android.app.AlertDialog import android.content.ActivityNotFoundException import android.content.Context.MODE_PRIVATE import android.content.Intent @@ -6,14 +7,17 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.Button import android.widget.Toast import androidx.fragment.app.Fragment import androidx.navigation.fragment.findNavController import com.example.bondoman.databinding.FragmentSettingBinding +import com.example.bondoman.helper.Xls +import com.example.bondoman.models.SqlTransaction +import com.example.bondoman.sql.TransactionSQL class SettingFragment: Fragment() { private lateinit var binding : FragmentSettingBinding + private var savedFilePath: String? = null // private lateinit var sendEmailButton: Button override fun onCreateView( @@ -38,6 +42,22 @@ class SettingFragment: Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + binding.saveButton.setOnClickListener{ + + // Retrieve transactions from the database + val dbTransaction = TransactionSQL(requireContext()) + dbTransaction.open() + val listTransaction = dbTransaction.findAll() + + if (listTransaction.isNotEmpty()) { + // If there are transactions, show the format selection dialog + showFormatSelectionDialog(listTransaction) + } else { + // Handle case when there are no transactions in the database + Toast.makeText(requireContext(), "No transactions found in the database", Toast.LENGTH_SHORT).show() + } + } + binding.sendEmailButton.setOnClickListener { sendEmail() } @@ -45,6 +65,39 @@ class SettingFragment: Fragment() { binding.logoutButton.setOnClickListener { logout() } + binding.randomizeButton.setOnClickListener { + sendEmail() + } + } + + private fun showFormatSelectionDialog(listTransaction: List<SqlTransaction>) { + val formatOptions = arrayOf("XLS", "XLSX") + + val builder = AlertDialog.Builder(requireContext()) + builder.setTitle("Select File Format") + .setItems(formatOptions) { dialog, which -> + val fileFormat = if (which == 0) "xls" else "xlsx" + savedFilePath = Xls.saveXls(requireContext(), listTransaction, fileFormat) + showMassage("File has been saved successfully") + dialog.dismiss() + } + .setNegativeButton("Cancel") { dialog, _ -> + dialog.dismiss() + } + val dialog = builder.create() + dialog.show() + } + + private fun showMassage(message: String) { + val alertDialogBuilder = AlertDialog.Builder(requireContext()) + alertDialogBuilder + .setMessage(message) + .setPositiveButton("OK") { dialog, _ -> + // Do something when OK button is clicked + dialog.dismiss() + } + .create() + .show() } private fun sendEmail() { diff --git a/app/src/main/java/com/example/bondoman/TransactionActivity.kt b/app/src/main/java/com/example/bondoman/TransactionActivity.kt deleted file mode 100644 index a2aa17e7a69630b7479aa3943d966e7cb1c1b903..0000000000000000000000000000000000000000 --- a/app/src/main/java/com/example/bondoman/TransactionActivity.kt +++ /dev/null @@ -1,112 +0,0 @@ -package com.example.bondoman - -import androidx.appcompat.app.AppCompatActivity -import android.os.Bundle -import android.text.Editable -import android.text.TextWatcher -import android.widget.TextView -import androidx.recyclerview.widget.RecyclerView -import androidx.recyclerview.widget.LinearLayoutManager -import com.example.bondoman.databinding.ActivityTransactionBinding -import com.example.bondoman.retrofit.data.Transaction - -class TransactionActivity : AppCompatActivity() { - -// private lateinit var binding: ActivityTransactionBinding -// private lateinit var transactionData : RecyclerView -// private val listTransaction= ArrayList<Transaction>() -// private lateinit var searchBar: TextView -// override fun onCreate(savedInstanceState: Bundle?) { -// super.onCreate(savedInstanceState) -// -// binding = ActivityTransactionBinding.inflate(layoutInflater) -// setContentView(binding.root) -// transactionData = findViewById(R.id.itemTransaction) -// transactionData.setHasFixedSize(true) -// transactionData.layoutManager = LinearLayoutManager(this) -// -// listTransaction.add( -// Transaction( -// "Semen Tiga Roda", -// "22 Maret 2024", -// "Pengeluaran", -// 200000, -// "Jakarta" -// ) -// ) -// listTransaction.add( -// Transaction( -// "Semen Tiga Roda", -// "22 Maret 2024", -// "Pengeluaran", -// 300000, -// "Jakarta" -// ) -// ) -// listTransaction.add( -// Transaction( -// "Semen Tiga Roda", -// "22 Maret 2024", -// "Pengeluaran", -// 300000, -// "Jakarta" -// ) -// ) -// listTransaction.add( -// Transaction( -// "Mapel Sirup", -// "22 Maret 2024", -// "Pengeluaran", -// 100000, -// "Jakarta" -// ) -// ) -// listTransaction.add( -// Transaction( -// "Jeruks", -// "22 Maret 2024", -// "Pengeluaran", -// 200000, -// "Jakarta" -// ) -// ) -// listTransaction.add(Transaction("Apel", "22 Maret 2024", "Pengeluaran", 300000, "Jakarta")) -// val filteredList: ArrayList<Transaction> = ArrayList(listTransaction) -// var transactionAdapter = TransactionAdapter(filteredList) -// transactionData.adapter = transactionAdapter -// -// searchBar = findViewById(R.id.searchBar) -// searchBar.addTextChangedListener(object : TextWatcher { -// override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { -// // Not used -// } -// -// override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { -// // Update the filteredList based on the search text -// val searchText = s.toString().trim() -// filteredList.clear() -// -// if (searchText.isEmpty()) { -// // If search text is empty, show all items -// filteredList.addAll(listTransaction) -// } else { -// // Filter the list based on the search text -// filteredList.addAll(listTransaction.filter { transaction -> -// transaction.name != null && transaction.name.contains( -// searchText, -// ignoreCase = true -// ) -// }) -// } -// -// // Notify the adapter about the updated list -// transactionAdapter = TransactionAdapter(filteredList) -// transactionData.adapter = transactionAdapter -// } -// -// override fun afterTextChanged(s: Editable?) { -// // Not used -// } -// }) -// } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/bondoman/TransactionFragment.kt b/app/src/main/java/com/example/bondoman/TransactionFragment.kt index dac2a8d40978645b74d2d371ec6459c0aa96a858..d7b1fbf814558e5296e75b69e07cfe1343bdad83 100644 --- a/app/src/main/java/com/example/bondoman/TransactionFragment.kt +++ b/app/src/main/java/com/example/bondoman/TransactionFragment.kt @@ -147,6 +147,7 @@ class TransactionFragment : Fragment() { fun loadDatas(view: View) { + insertDummyTransactions() val datas = dbTransaction.findAll() datas.forEach { diff --git a/app/src/main/java/com/example/bondoman/helper/Xls.kt b/app/src/main/java/com/example/bondoman/helper/Xls.kt index 12cb9fd0765e234e46ef4be8e59bff1d80333256..b72942e2e2c5652b1db0e480675e8fb29f94e288 100644 --- a/app/src/main/java/com/example/bondoman/helper/Xls.kt +++ b/app/src/main/java/com/example/bondoman/helper/Xls.kt @@ -1,7 +1,7 @@ package com.example.bondoman.helper import android.content.Context -import com.example.bondoman.retrofit.data.Transaction +import com.example.bondoman.models.SqlTransaction import org.apache.poi.hssf.usermodel.HSSFWorkbook import org.apache.poi.xssf.usermodel.XSSFWorkbook import java.io.File @@ -10,7 +10,7 @@ import java.io.FileOutputStream class Xls { companion object { // Dummy Transaction class for testing - fun saveTransactionSpreadsheet(context: Context, transactionList: List<Transaction>, fileFormat: String): String { + fun saveXls(context: Context, transactionList: List<SqlTransaction>, fileFormat: String): String { // Create a new XSSFWorkbook or HSSFWorkbook based on the file format val workbook = if (fileFormat == "xlsx") XSSFWorkbook() else HSSFWorkbook() diff --git a/app/src/main/java/com/example/bondoman/services/JWTExpiry.kt b/app/src/main/java/com/example/bondoman/services/JWTExpiry.kt index 2453c41fa9f47bbfd10280afee8dd87f8f9a3133..30273fb3b19c7494a2ab0fa35c37a4c1f520f1f8 100644 --- a/app/src/main/java/com/example/bondoman/services/JWTExpiry.kt +++ b/app/src/main/java/com/example/bondoman/services/JWTExpiry.kt @@ -6,7 +6,7 @@ import android.content.Intent import android.os.IBinder import android.util.Log import com.example.bondoman.LoginActivity -import com.example.bondoman.TransactionActivity +import com.example.bondoman.MainActivity import com.example.bondoman.utils.RetrofitInstance import kotlinx.coroutines.Job import kotlinx.coroutines.CoroutineScope @@ -77,7 +77,7 @@ class JWTExpiry : Service() { // } private fun redirectToTransaction() { - val transactionIntent = Intent(this, TransactionActivity::class.java) + val transactionIntent = Intent(this, MainActivity::class.java) transactionIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK startActivity(transactionIntent) } diff --git a/app/src/main/res/drawable/container_edit.xml b/app/src/main/res/drawable/container_edit.xml new file mode 100644 index 0000000000000000000000000000000000000000..9aeba85dd1a789346252df3eddbdbeb03c3bbbec --- /dev/null +++ b/app/src/main/res/drawable/container_edit.xml @@ -0,0 +1,9 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="320dp" + android:height="550dp" + android:viewportWidth="279" + android:viewportHeight="448"> + <path + android:pathData="M20,0L259,0A20,20 0,0 1,279 20L279,428A20,20 0,0 1,259 448L20,448A20,20 0,0 1,0 428L0,20A20,20 0,0 1,20 0z" + android:fillColor="#ffffff"/> +</vector> diff --git a/app/src/main/res/drawable/cornered_edit.xml b/app/src/main/res/drawable/cornered_edit.xml new file mode 100644 index 0000000000000000000000000000000000000000..462c9c30593b0aa850c5cd63e59a96e88de554f5 --- /dev/null +++ b/app/src/main/res/drawable/cornered_edit.xml @@ -0,0 +1,4 @@ +<shape xmlns:android="http://schemas.android.com/apk/res/android"> + <solid android:color="@color/light_grey" /> + <corners android:radius="50dp" /> +</shape> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_transaction.xml b/app/src/main/res/layout/activity_transaction.xml deleted file mode 100644 index fc805638141c7f47238421122237a4f069f8a051..0000000000000000000000000000000000000000 --- a/app/src/main/res/layout/activity_transaction.xml +++ /dev/null @@ -1,82 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:app="http://schemas.android.com/apk/res-auto" - xmlns:tools="http://schemas.android.com/tools" - android:id="@+id/main" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:background="@color/broken_white" - tools:context=".TransactionActivity"> - - <ImageView - android:id="@+id/bg_transaction" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:src="@drawable/bg_transaction" - android:scaleType="fitXY" - app:layout_constraintTop_toTopOf="parent" - /> - <LinearLayout - android:layout_width="match_parent" - android:layout_height="700dp" - android:layout_gravity="top" - android:orientation="vertical" - android:paddingTop="?attr/actionBarSize" - app:layout_constraintTop_toTopOf="parent"> - - - <LinearLayout - android:layout_width="360dp" - android:layout_height="60dp" - android:layout_gravity="center" - android:background="@drawable/cornered_input" - android:orientation="horizontal" - android:paddingHorizontal="5dp"> - - <LinearLayout - android:layout_width="280dp" - android:layout_height="50dp" - android:layout_gravity="center" - android:layout_marginEnd="10dp" - android:orientation="horizontal" - android:paddingHorizontal="10dp"> - - <ImageView - android:layout_width="24dp" - android:layout_height="24dp" - android:layout_gravity="center" - android:src="@drawable/ic_search" /> - - <EditText - android:id="@+id/searchBar" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:background="@android:color/transparent" - android:hint="Search" - android:textColor="@color/broken_white" - android:inputType="textEmailAddress" - android:paddingHorizontal="20dp" /> - - </LinearLayout> - - <ImageView - android:layout_width="50dp" - android:layout_height="50dp" - android:layout_weight="1" - android:layout_gravity="center" - android:src="@drawable/ic_filter" /> - - </LinearLayout> - - <androidx.recyclerview.widget.RecyclerView - android:id="@+id/itemTransaction" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:layout_marginTop="100dp" - android:layout_marginHorizontal="20dp" - tools:listitem="@layout/list_transaction" /> - - </LinearLayout> - - -</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_detail_transaction.xml b/app/src/main/res/layout/fragment_detail_transaction.xml new file mode 100644 index 0000000000000000000000000000000000000000..d175656c33cf67c56c8203031938c0645fe35920 --- /dev/null +++ b/app/src/main/res/layout/fragment_detail_transaction.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".DetailTransactionFragment"> + + <!-- TODO: Update blank fragment layout --> + <TextView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:text="@string/hello_blank_fragment" /> + +</FrameLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_edit_transaction.xml b/app/src/main/res/layout/fragment_edit_transaction.xml new file mode 100644 index 0000000000000000000000000000000000000000..f4cb513d8c5dedad844e66325cb9b2f1fde8d4b1 --- /dev/null +++ b/app/src/main/res/layout/fragment_edit_transaction.xml @@ -0,0 +1,125 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@color/broken_white" + android:paddingTop="?attr/actionBarSize" + tools:context=".AddTransactionFragment"> + + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:src="@drawable/container_edit" + android:layout_marginTop="24dp" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent"> + </ImageView> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="500dp" + android:layout_marginTop="64dp" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" + android:paddingHorizontal="72dp" + android:orientation="vertical" + > + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:text="Nama Transaksi" + android:textColor="@color/dark_grey" + /> + + <EditText + android:layout_width="match_parent" + android:layout_height="48dp" + android:layout_marginTop="8dp" + android:text="Nama Transaksi" + android:textColor="@color/grey" + android:paddingHorizontal="20dp" + android:textSize="16sp" + android:background="@drawable/cornered_add" + /> + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:text="Nominal" + android:textColor="@color/dark_grey" + /> + + <EditText + android:layout_width="match_parent" + android:layout_marginTop="8dp" + android:layout_height="48dp" + android:text="Nominal" + android:textColor="@color/grey" + android:paddingHorizontal="20dp" + android:textSize="16sp" + android:background="@drawable/cornered_add" + /> + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:text="Lokasi" + android:textColor="@color/dark_grey" + /> + + <EditText + android:layout_width="match_parent" + android:layout_marginTop="8dp" + android:layout_height="48dp" + android:text="Lokasi" + android:textColor="@color/grey" + android:paddingVertical="12dp" + android:paddingHorizontal="20dp" + android:textSize="16sp" + android:background="@drawable/cornered_add" + /> + + + <TextView + android:layout_width="match_parent" + android:layout_marginTop="24dp" + android:layout_height="48dp" + android:text="Kategori" + android:textColor="@color/grey" + android:paddingVertical="12dp" + android:paddingHorizontal="20dp" + android:textSize="16sp" + android:background="@drawable/cornered_edit" + /> + + <TextView + android:layout_width="match_parent" + android:layout_marginTop="24dp" + android:layout_height="48dp" + android:text="Tanggal" + android:textColor="@color/grey" + android:paddingVertical="12dp" + android:paddingHorizontal="20dp" + android:textSize="16sp" + android:background="@drawable/cornered_edit" + /> + + <Button + android:layout_width="match_parent" + android:layout_height="56dp" + android:layout_marginTop="24dp" + android:layout_gravity="bottom" + android:background="@drawable/cornered_simpan" + android:text="Simpan" + android:textSize="16sp" + android:textStyle="bold" /> + </LinearLayout> + +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_setting.xml b/app/src/main/res/layout/fragment_setting.xml index d809f0a4a2b1792c5474f12c91efd4e1c92cf6f6..53cb1566f120e962c9049faf1595a5b2f6d0cf1c 100644 --- a/app/src/main/res/layout/fragment_setting.xml +++ b/app/src/main/res/layout/fragment_setting.xml @@ -49,7 +49,7 @@ <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" - android:id="@+id/save_transaction" + android:id="@+id/saveButton" android:background="@android:color/transparent" android:clickable="true" android:orientation="horizontal" @@ -96,6 +96,31 @@ android:layout_gravity="center" /> </LinearLayout> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@android:color/transparent" + android:id="@+id/randomizeButton" + android:clickable="true" + android:layout_marginTop="@android:dimen/app_icon_size" + android:orientation="horizontal" + > + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:src="@drawable/ic_kirim" + android:layout_gravity="center"/> + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Randomize" + android:textSize="16sp" + android:textStyle="bold" + android:layout_marginHorizontal="16dp" + android:layout_weight="1" + android:layout_gravity="center" + /> + </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" diff --git a/app/src/main/res/layout/fragment_transaksi.xml b/app/src/main/res/layout/fragment_transaksi.xml index fc805638141c7f47238421122237a4f069f8a051..c6130c515d9a4d535e6f9fe56f97a1b19fcbbce5 100644 --- a/app/src/main/res/layout/fragment_transaksi.xml +++ b/app/src/main/res/layout/fragment_transaksi.xml @@ -5,8 +5,7 @@ android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="@color/broken_white" - tools:context=".TransactionActivity"> + android:background="@color/broken_white"> <ImageView android:id="@+id/bg_transaction" diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 754d59fb3be584b89cba1106403f23290d91b83f..f97cf6dffd64c6c08a9f0cc08f90558d282fac72 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -9,4 +9,6 @@ <color name="red">#BA0808</color> <color name="grey">#475569</color> <color name="light_purple">#9290C3</color> + <color name="light_grey">#EAEAEA</color> + <color name="text_grey">#475569</color> </resources> \ No newline at end of file