Skip to content
Snippets Groups Projects
Commit 40fa927c authored by Naufal-Nalendra's avatar Naufal-Nalendra
Browse files

feat: save transaction from scanning

parent f7410f47
Branches
Tags
2 merge requests!14Dev,!10Hotfix
......@@ -16,15 +16,24 @@ import itb.bos.bondoman.databinding.FragmentQrCapturedBinding
import itb.bos.bondoman.helper.NetworkObserver
import itb.bos.bondoman.helper.TokenHelper
import itb.bos.bondoman.helper.uploadScannedBill
import itb.bos.bondoman.retrofit.data.TransactionData
import itb.bos.bondoman.retrofit.data.models.SqlTransaction
import itb.bos.bondoman.retrofit.data.models.TransactionCategory
import kotlinx.coroutines.launch
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
import okhttp3.RequestBody.Companion.asRequestBody
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
import kotlin.math.roundToInt
import kotlin.random.Random
class QrCapturedFragment : Fragment() {
private lateinit var binding: FragmentQrCapturedBinding
private lateinit var tokenHelper: TokenHelper
private lateinit var networkObserver: NetworkObserver
private lateinit var database: TransactionData
override fun onCreateView(
inflater: LayoutInflater,
......@@ -41,6 +50,8 @@ class QrCapturedFragment : Fragment() {
networkObserver = NetworkObserver(requireContext())
networkObserver.observeNetworkChanges()
database = TransactionData.getInstance(requireContext())
// Retrieve the captured image bitmap from arguments
val bitmap = arguments?.getParcelable<Bitmap>("capturedImage")
bitmap?.let {
......@@ -90,6 +101,36 @@ class QrCapturedFragment : Fragment() {
val response = uploadScannedBill(body, token)
if (response.isSuccessful) {
// Handle successful response
// Handle successful response
val scanUploadResponse = response.body()
scanUploadResponse?.let { uploadResponse ->
val items = uploadResponse.items.items // List of items
// Now you can loop through the list of items and access each item
val currentDate = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(
Date()
)
items.forEach { item ->
val itemName = item.name
val itemQty = item.qty
val itemPrice = item.price
val category = if (Random.nextBoolean()) {
TransactionCategory.PEMASUKAN
} else {
TransactionCategory.PENGELUARAN
}
val newTransaction = SqlTransaction(
name = itemName,
category = category,
date = currentDate,
price = (itemPrice * itemQty).roundToInt(),
location = "Unknown"
)
database.transactionDao().insertAll(newTransaction)
Log.d("ScanUpload", "Item: $itemName, Qty: $itemQty, Price: $itemPrice")
}
}
Log.d("UploadImage", "Success in upload image with response : $response")
Toast.makeText(requireContext(), "Image uploaded successfully", Toast.LENGTH_SHORT).show()
} else {
......
......@@ -33,10 +33,18 @@ import itb.bos.bondoman.databinding.FragmentQrBinding
import itb.bos.bondoman.helper.NetworkObserver
import itb.bos.bondoman.helper.TokenHelper
import itb.bos.bondoman.helper.uploadScannedBill
import itb.bos.bondoman.retrofit.data.TransactionData
import itb.bos.bondoman.retrofit.data.models.SqlTransaction
import itb.bos.bondoman.retrofit.data.models.TransactionCategory
import kotlinx.coroutines.launch
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.MultipartBody
import okhttp3.RequestBody.Companion.asRequestBody
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
import kotlin.math.roundToInt
import kotlin.random.Random
class QrFragment : Fragment() {
private lateinit var binding: FragmentQrBinding
......@@ -45,6 +53,7 @@ class QrFragment : Fragment() {
private var imageCapture: ImageCapture? = null
private lateinit var tokenHelper: TokenHelper
private lateinit var networkObserver: NetworkObserver
private lateinit var database: TransactionData
private val CAMERA_PERMISSION_REQUEST_CODE = 100
private val galleryActivityResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
......@@ -57,14 +66,13 @@ class QrFragment : Fragment() {
}
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentQrBinding.inflate(inflater, container, false)
tokenHelper = TokenHelper(requireContext()) // Initialize TokenHelper
tokenHelper = TokenHelper(requireContext())
return binding.root
}
......@@ -75,6 +83,8 @@ class QrFragment : Fragment() {
networkObserver = NetworkObserver(requireContext())
networkObserver.observeNetworkChanges()
database = TransactionData.getInstance(requireContext())
if (ContextCompat.checkSelfPermission(
requireContext(),
Manifest.permission.CAMERA
......@@ -226,7 +236,35 @@ class QrFragment : Fragment() {
val response = uploadScannedBill(body, token)
if (response.isSuccessful) {
// Handle successful response
// You can show a message or navigate to another screen
val scanUploadResponse = response.body()
scanUploadResponse?.let { uploadResponse ->
val items = uploadResponse.items.items // List of items
// Now you can loop through the list of items and access each item
val currentDate = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(
Date()
)
items.forEach { item ->
val itemName = item.name
val itemQty = item.qty
val itemPrice = item.price
val category = if (Random.nextBoolean()) {
TransactionCategory.PEMASUKAN
} else {
TransactionCategory.PENGELUARAN
}
val newTransaction = SqlTransaction(
name = itemName,
category = category,
date = currentDate,
price = (itemPrice * itemQty).roundToInt(),
location = "Unknown"
)
database.transactionDao().insertAll(newTransaction)
Log.d("ScanUpload", "Item: $itemName, Qty: $itemQty, Price: $itemPrice")
}
}
Log.d("UploadImage", "Success in upload image with response : $response")
Toast.makeText(requireContext(), "Image uploaded successfully", Toast.LENGTH_SHORT).show()
} else {
......
......@@ -16,7 +16,6 @@ suspend fun uploadScannedBill(file: MultipartBody.Part, token: String): Response
val response = endpoint.uploadBill("Bearer $token", file)
Log.d("UploadImage", "The response is : $response")
response
}
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment