From ec4748608a2a43ce76266a9eb79dc4a0efbb04c3 Mon Sep 17 00:00:00 2001
From: DewanaGustavus <76590469+DewanaGustavus@users.noreply.github.com>
Date: Wed, 3 Apr 2024 10:42:55 +0700
Subject: [PATCH] feat: save scanner note

---
 .../bondoyap/ui/scanner/ScanResultFragment.kt | 63 ++++++++++++++++++-
 1 file changed, 60 insertions(+), 3 deletions(-)

diff --git a/app/src/main/java/com/example/bondoyap/ui/scanner/ScanResultFragment.kt b/app/src/main/java/com/example/bondoyap/ui/scanner/ScanResultFragment.kt
index 96f2ba0..1f72aec 100644
--- a/app/src/main/java/com/example/bondoyap/ui/scanner/ScanResultFragment.kt
+++ b/app/src/main/java/com/example/bondoyap/ui/scanner/ScanResultFragment.kt
@@ -5,11 +5,24 @@ import android.util.Log
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import android.widget.Toast
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.activityViewModels
+import androidx.fragment.app.viewModels
+import androidx.navigation.NavController
+import androidx.navigation.fragment.findNavController
 import androidx.recyclerview.widget.LinearLayoutManager
 import com.example.bondoyap.databinding.FragmentScanResultBinding
+import com.example.bondoyap.service.LocationManager
+import com.example.bondoyap.service.api.data.Item
 import com.example.bondoyap.ui.scanner.listAdapter.ScanResultListAdapter
+import com.example.bondoyap.ui.transactions.TransactionsApplication
+import com.example.bondoyap.ui.transactions.TransactionsViewModel
+import com.example.bondoyap.ui.transactions.TransactionsViewModelFactory
+import com.example.bondoyap.ui.transactions.data.Transactions
+import java.text.SimpleDateFormat
+import java.util.Date
+import java.util.Locale
 
 
 class ScanResultFragment : Fragment() {
@@ -17,6 +30,7 @@ class ScanResultFragment : Fragment() {
     // onDestroyView.
     private var _binding: FragmentScanResultBinding? = null
     private val binding get() = _binding!!
+    private lateinit var navController: NavController
 
 
     override fun onCreateView(
@@ -27,15 +41,23 @@ class ScanResultFragment : Fragment() {
         _binding = FragmentScanResultBinding.inflate(inflater, container, false)
         val root: View = binding.root
 
+        navController = findNavController()
         val scannerViewModel: ScannerViewModel by activityViewModels()
+        val items = scannerViewModel.items ?: throw Exception("Scan Result is null")
+        Log.d("Scan Result", "Result Received: $items")
 
         val recyclerView = binding.recyclerView
         val adapter = ScanResultListAdapter()
         recyclerView.adapter = adapter
         recyclerView.layoutManager = LinearLayoutManager(requireContext())
-        scannerViewModel.items?.let { items ->
-            adapter.submitList(items)
-            Log.d("Scan Result", "Result Received: $items")
+        adapter.submitList(items)
+
+        binding.cancelButton.setOnClickListener {
+            navController.popBackStack()
+        }
+
+        binding.saveButton.setOnClickListener {
+            saveNota(items)
         }
 
         return root
@@ -45,4 +67,39 @@ class ScanResultFragment : Fragment() {
         super.onDestroyView()
         _binding = null
     }
+
+    private fun saveNota(items: List<Item>) {
+        val dateDateFormat = SimpleDateFormat("dd/MM/yyyy", Locale.getDefault())
+        val titleDateFormat = SimpleDateFormat("dd_MM_yyyy_HH_mm_ss", Locale.getDefault())
+        val currentTime = Date()
+        val currentDate = dateDateFormat.format(currentTime)
+        val title = titleDateFormat.format(currentTime)
+
+        val value = items.sumOf { it.quantity * it.price }
+
+        val transactionsViewModel: TransactionsViewModel by viewModels {
+            TransactionsViewModelFactory((requireContext().applicationContext as TransactionsApplication).repository)
+        }
+
+        LocationManager.askLocationPermission(requireContext(), requireActivity())
+        val location = LocationManager.getLocation(requireContext())
+        var longitude = ""
+        var latitude = ""
+        location?.let { it1 ->
+            longitude = it1.longitude.toString()
+            latitude = it1.latitude.toString()
+        }
+
+        val transaction: Transactions = Transactions(
+            judul = "Scanner_${title}",
+            nominal = value,
+            isPemasukan = false,
+            tanggal = currentDate,
+            longitude = longitude,
+            latitude = latitude
+        )
+        transactionsViewModel.upsert(transaction)
+
+        Toast.makeText(requireContext(), "Nota berhasil disimpan", Toast.LENGTH_SHORT).show()
+    }
 }
\ No newline at end of file
-- 
GitLab