采购单入库商品默认显示采购单信息;采集数据显示优化
This commit is contained in:
@@ -28,6 +28,7 @@ import com.sw.inbound.databinding.LayoutEmptySearchBinding
|
|||||||
import com.sw.inbound.dialog.CollectSearchDialog
|
import com.sw.inbound.dialog.CollectSearchDialog
|
||||||
import com.sw.inbound.dialog.CustomDialog
|
import com.sw.inbound.dialog.CustomDialog
|
||||||
import com.sw.inbound.dialog.Loading
|
import com.sw.inbound.dialog.Loading
|
||||||
|
import com.sw.inbound.dialog.WarnDialog
|
||||||
import com.sw.inbound.model.response.SearchGoodsInfo
|
import com.sw.inbound.model.response.SearchGoodsInfo
|
||||||
import com.sw.inbound.objbox.Food
|
import com.sw.inbound.objbox.Food
|
||||||
import com.sw.inbound.objbox.FoodCollectionBean
|
import com.sw.inbound.objbox.FoodCollectionBean
|
||||||
@@ -182,8 +183,7 @@ class FoodCollectionActivity : ComponentActivity() {
|
|||||||
}
|
}
|
||||||
// vectorThread()
|
// vectorThread()
|
||||||
// uploadAllImage()
|
// uploadAllImage()
|
||||||
|
showUploadDialog()
|
||||||
upload()
|
|
||||||
}
|
}
|
||||||
binding.btnTakePhoto.clickWithDebounce(800) {
|
binding.btnTakePhoto.clickWithDebounce(800) {
|
||||||
takePhoto()
|
takePhoto()
|
||||||
@@ -224,6 +224,20 @@ class FoodCollectionActivity : ComponentActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun showUploadDialog() {
|
||||||
|
val goodsName = searchGoodsList[clickIndex].goodsName
|
||||||
|
WarnDialog(
|
||||||
|
context = this,
|
||||||
|
content = "选择错误会影响识别结果,请确认当前采集物品是:${goodsName}?",
|
||||||
|
cancelBlock = {
|
||||||
|
|
||||||
|
},
|
||||||
|
confirmBlock = {
|
||||||
|
upload()
|
||||||
|
}
|
||||||
|
) .show()
|
||||||
|
}
|
||||||
|
|
||||||
private var pageNo = 1
|
private var pageNo = 1
|
||||||
private var clickIndex = -1
|
private var clickIndex = -1
|
||||||
|
|
||||||
|
|||||||
@@ -38,19 +38,13 @@ import com.sw.inbound.model.request.UploadInfo
|
|||||||
import com.sw.inbound.model.response.DictType
|
import com.sw.inbound.model.response.DictType
|
||||||
import com.sw.inbound.model.response.GoodsInfo
|
import com.sw.inbound.model.response.GoodsInfo
|
||||||
import com.sw.inbound.model.response.SearchGoodsInfo
|
import com.sw.inbound.model.response.SearchGoodsInfo
|
||||||
import com.sw.inbound.objbox.Food
|
|
||||||
import com.sw.inbound.objbox.FoodModule
|
import com.sw.inbound.objbox.FoodModule
|
||||||
import com.sw.inbound.objbox.FoodModule.IdNameScore
|
import com.sw.inbound.objbox.FoodModule.IdNameScore
|
||||||
import com.sw.inbound.objbox.FoodModule.bitmap2FloatArray
|
|
||||||
import com.sw.inbound.objbox.Food_
|
|
||||||
import com.sw.inbound.objbox.ObjectBox
|
|
||||||
import com.sw.inbound.sdk.SensorScaleUtils
|
import com.sw.inbound.sdk.SensorScaleUtils
|
||||||
import com.sw.inbound.utils.AssetsTool
|
|
||||||
import com.sw.inbound.utils.BitmapCropper
|
import com.sw.inbound.utils.BitmapCropper
|
||||||
import com.sw.inbound.utils.BitmapSaver
|
import com.sw.inbound.utils.BitmapSaver
|
||||||
import com.sw.inbound.utils.CameraUtils
|
import com.sw.inbound.utils.CameraUtils
|
||||||
import com.sw.inbound.utils.DateTimeUtils
|
import com.sw.inbound.utils.DateTimeUtils
|
||||||
import com.sw.inbound.utils.FileUtils
|
|
||||||
import com.sw.inbound.utils.ImageUtil
|
import com.sw.inbound.utils.ImageUtil
|
||||||
import com.sw.inbound.utils.LogSaveUtil
|
import com.sw.inbound.utils.LogSaveUtil
|
||||||
import com.sw.inbound.utils.PreciseDelayHandler
|
import com.sw.inbound.utils.PreciseDelayHandler
|
||||||
@@ -63,7 +57,6 @@ import com.sw.inbound.utils.ext.toast
|
|||||||
import com.sw.inbound.viewmodel.ReceiptViewModel
|
import com.sw.inbound.viewmodel.ReceiptViewModel
|
||||||
import com.sw.inbound.viewmodel.UserViewModel
|
import com.sw.inbound.viewmodel.UserViewModel
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
import io.objectbox.query.Query
|
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import okhttp3.RequestBody
|
import okhttp3.RequestBody
|
||||||
@@ -483,7 +476,7 @@ abstract class GoodsListActivity : ComponentActivity() {
|
|||||||
context = this,
|
context = this,
|
||||||
list = goodsList.toMutableList(),
|
list = goodsList.toMutableList(),
|
||||||
goodsFile = file,
|
goodsFile = file,
|
||||||
goodsName = name,
|
goodsName = name
|
||||||
) {
|
) {
|
||||||
GoodsSearchDialog(this).show()
|
GoodsSearchDialog(this).show()
|
||||||
}.apply {
|
}.apply {
|
||||||
|
|||||||
@@ -85,6 +85,8 @@ class ReceiptActivity : GoodsListActivity() {
|
|||||||
list.forEach { goodsInfo ->
|
list.forEach { goodsInfo ->
|
||||||
goodsInfo.recUnitPriceTaxInBak = goodsInfo.recUnitPriceTaxIn
|
goodsInfo.recUnitPriceTaxInBak = goodsInfo.recUnitPriceTaxIn
|
||||||
goodsInfo.recUnitPriceTaxIn = 0.0
|
goodsInfo.recUnitPriceTaxIn = 0.0
|
||||||
|
goodsInfo.recPriceExItemBak = goodsInfo.recPriceExItem
|
||||||
|
goodsInfo.receiveCountBak = goodsInfo.receiveCount
|
||||||
goodsInfo.unitNameBak = goodsInfo.unitName
|
goodsInfo.unitNameBak = goodsInfo.unitName
|
||||||
goodsInfo.receivedNumBak = goodsInfo.receivedNum
|
goodsInfo.receivedNumBak = goodsInfo.receivedNum
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,6 +79,7 @@ class CollectSearchDialog(
|
|||||||
it.setEnableLoadMore(false)
|
it.setEnableLoadMore(false)
|
||||||
it.setOnRefreshListener {
|
it.setOnRefreshListener {
|
||||||
pageNo = 1
|
pageNo = 1
|
||||||
|
this@CollectSearchDialog.clickIndex = -1
|
||||||
val searchName = binding.etInputGoods.text.toString().trim()
|
val searchName = binding.etInputGoods.text.toString().trim()
|
||||||
getCollectGoods(searchName)
|
getCollectGoods(searchName)
|
||||||
}
|
}
|
||||||
@@ -121,17 +122,13 @@ class CollectSearchDialog(
|
|||||||
private val searchAdapter by lazy {
|
private val searchAdapter by lazy {
|
||||||
CollectSearchAdapter(list).apply {
|
CollectSearchAdapter(list).apply {
|
||||||
isStateViewEnable = true
|
isStateViewEnable = true
|
||||||
//setOnItemClickListener { _, _, position ->
|
setOnItemClickListener { _, _, position ->
|
||||||
// this@CollectSearchDialog.clickIndex = position
|
activity?.lifecycleScope?.launch {
|
||||||
// if (list[position].isSelected) {
|
val goodsName = list[position].goodsName?:""
|
||||||
// return@setOnItemClickListener
|
val count = ObjectBox.count(goodsName)
|
||||||
// }
|
activity?.toast("已采集数据${count}条")
|
||||||
// list.forEach { item ->
|
}
|
||||||
// item.isSelected = false
|
}
|
||||||
// }
|
|
||||||
// list[position].isSelected = true
|
|
||||||
// notifyDataSetChanged()
|
|
||||||
//}
|
|
||||||
addOnItemChildClickListener(R.id.ivDelete) { _, _, position ->
|
addOnItemChildClickListener(R.id.ivDelete) { _, _, position ->
|
||||||
this@CollectSearchDialog.clickIndex = position
|
this@CollectSearchDialog.clickIndex = position
|
||||||
list.forEach { item ->
|
list.forEach { item ->
|
||||||
@@ -139,7 +136,9 @@ class CollectSearchDialog(
|
|||||||
}
|
}
|
||||||
list[position].isSelected = true
|
list[position].isSelected = true
|
||||||
notifyDataSetChanged()
|
notifyDataSetChanged()
|
||||||
showDeleteDialog(position)
|
showDeleteDialog(position) {
|
||||||
|
this@CollectSearchDialog.clickIndex = -1
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -147,7 +146,12 @@ class CollectSearchDialog(
|
|||||||
private fun showDeleteDialog(position: Int, deleteAction: () -> Unit = {}) {
|
private fun showDeleteDialog(position: Int, deleteAction: () -> Unit = {}) {
|
||||||
WarnDialog(
|
WarnDialog(
|
||||||
context = context,
|
context = context,
|
||||||
content = "请确认是否删除物品:${list[position].goodsName}?",
|
content = "请确认是否删除物品:${list[position].goodsName?.split("WP")?.get(0)}?",
|
||||||
|
cancelBlock = {
|
||||||
|
this@CollectSearchDialog.clickIndex = -1
|
||||||
|
list[position].isSelected = false
|
||||||
|
searchAdapter.notifyItemChanged(position)
|
||||||
|
},
|
||||||
confirmBlock = {
|
confirmBlock = {
|
||||||
// Thread {
|
// Thread {
|
||||||
// }.start()
|
// }.start()
|
||||||
|
|||||||
@@ -8,11 +8,9 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
|||||||
import com.sw.inbound.activity.GoodsListActivity
|
import com.sw.inbound.activity.GoodsListActivity
|
||||||
import com.sw.inbound.adapter.RecognizeAdapter
|
import com.sw.inbound.adapter.RecognizeAdapter
|
||||||
import com.sw.inbound.databinding.DialogGoodsRecognizeBinding
|
import com.sw.inbound.databinding.DialogGoodsRecognizeBinding
|
||||||
import com.sw.inbound.databinding.LayoutEmptyRecognizeBinding
|
|
||||||
import com.sw.inbound.model.response.SearchGoodsInfo
|
import com.sw.inbound.model.response.SearchGoodsInfo
|
||||||
import com.sw.inbound.utils.ext.clickWithDebounce
|
import com.sw.inbound.utils.ext.clickWithDebounce
|
||||||
import com.sw.inbound.utils.ext.gone
|
import com.sw.inbound.utils.ext.gone
|
||||||
import com.sw.inbound.utils.ext.toast
|
|
||||||
import com.sw.inbound.utils.ext.visible
|
import com.sw.inbound.utils.ext.visible
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
|
|||||||
@@ -114,28 +114,7 @@ class GoodsStoreDialog(
|
|||||||
) { dictType ->
|
) { dictType ->
|
||||||
try {
|
try {
|
||||||
v.hideKeyboard()
|
v.hideKeyboard()
|
||||||
binding.tvProcurementUnit.run {
|
loadDropdownMenu(dictType)
|
||||||
text = dictType.value
|
|
||||||
tag = dictType.id
|
|
||||||
}
|
|
||||||
val unit = dictType.value
|
|
||||||
binding.tvCountUnit.text = unit
|
|
||||||
binding.etProcurementCount.let {
|
|
||||||
//it.isEnabled = true
|
|
||||||
it.inputType = if (unit == "千克" || unit == "公斤" || unit == "斤") {
|
|
||||||
InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL
|
|
||||||
} else {
|
|
||||||
InputType.TYPE_CLASS_NUMBER
|
|
||||||
}
|
|
||||||
}
|
|
||||||
val first = goods.unitVoList!!.first { it.businessUnitId == dictType.id }
|
|
||||||
val stringBuilder =
|
|
||||||
StringBuilder().append("1").append(dictType.value).append("=")
|
|
||||||
.append(first.purchaseValue!!.toInt().toString())
|
|
||||||
.append(goods.kcUnitName).append(",").append("1")
|
|
||||||
.append(goods.kcUnitName).append("=").append(first.consumeValue)
|
|
||||||
.append("克")
|
|
||||||
binding.tvUnitCalculate.text = stringBuilder.toString()
|
|
||||||
//val count = getUnitCount(dictType.id!!)
|
//val count = getUnitCount(dictType.id!!)
|
||||||
//if (count.isBlank() || "0" == count) {
|
//if (count.isBlank() || "0" == count) {
|
||||||
// //context.toast("入库数量不能为0")
|
// //context.toast("入库数量不能为0")
|
||||||
@@ -206,9 +185,60 @@ class GoodsStoreDialog(
|
|||||||
if (it.isNullOrBlank()) invisible() else visible()
|
if (it.isNullOrBlank()) invisible() else visible()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
setPurchaseOrderInfo()
|
||||||
addWeightListener()
|
addWeightListener()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 加载下拉菜单
|
||||||
|
*/
|
||||||
|
private fun loadDropdownMenu(dictType: DictType) {
|
||||||
|
binding.tvProcurementUnit.run {
|
||||||
|
text = dictType.value
|
||||||
|
tag = dictType.id
|
||||||
|
}
|
||||||
|
val unit = dictType.value
|
||||||
|
binding.tvCountUnit.text = unit
|
||||||
|
binding.etProcurementCount.let {
|
||||||
|
//it.isEnabled = true
|
||||||
|
it.inputType = if (unit == "千克" || unit == "公斤" || unit == "斤") {
|
||||||
|
InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_FLAG_DECIMAL
|
||||||
|
} else {
|
||||||
|
InputType.TYPE_CLASS_NUMBER
|
||||||
|
}
|
||||||
|
}
|
||||||
|
val first = goods.unitVoList!!.first { it.businessUnitId == dictType.id }
|
||||||
|
val stringBuilder =
|
||||||
|
StringBuilder().append("1").append(dictType.value).append("=")
|
||||||
|
.append(first.purchaseValue!!.toInt().toString())
|
||||||
|
.append(goods.kcUnitName).append(",").append("1")
|
||||||
|
.append(goods.kcUnitName).append("=").append(first.consumeValue)
|
||||||
|
.append("克")
|
||||||
|
binding.tvUnitCalculate.text = stringBuilder.toString()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置采购单信息
|
||||||
|
*/
|
||||||
|
private fun setPurchaseOrderInfo() {
|
||||||
|
isLoadPurchaseOrderInfo = false
|
||||||
|
val item = activity?.goodsList?.firstOrNull { it.goodId == goods.id }
|
||||||
|
if (item == null || dropdownList.isEmpty()) return
|
||||||
|
val unit = item.unitNameBak
|
||||||
|
val price = item.recPriceExItemBak
|
||||||
|
val amount = item.recUnitPriceTaxInBak
|
||||||
|
val count = item.receiveCountBak
|
||||||
|
|
||||||
|
val dictType = dropdownList.firstOrNull { it.value == unit }
|
||||||
|
if (dictType == null) return
|
||||||
|
loadDropdownMenu(dictType)
|
||||||
|
|
||||||
|
count?.let { binding.etProcurementCount.setText("$count") }
|
||||||
|
price?.let { binding.tvProcurementPrice.text = "$price" }
|
||||||
|
amount?.let { binding.etProcurementAmount.setText("$amount") }
|
||||||
|
isLoadPurchaseOrderInfo = true
|
||||||
|
}
|
||||||
|
private var isLoadPurchaseOrderInfo = true
|
||||||
private fun addWeightListener() {
|
private fun addWeightListener() {
|
||||||
activity?.readWeightInfo { weight ->
|
activity?.readWeightInfo { weight ->
|
||||||
if (abs(this.realWeight - weight) < 10 && binding.etProcurementCount.text.isNotBlank()) {
|
if (abs(this.realWeight - weight) < 10 && binding.etProcurementCount.text.isNotBlank()) {
|
||||||
@@ -217,7 +247,7 @@ class GoodsStoreDialog(
|
|||||||
}
|
}
|
||||||
this.realWeight = weight
|
this.realWeight = weight
|
||||||
binding.tvTotalWeight.text = getSpannable(weight)
|
binding.tvTotalWeight.text = getSpannable(weight)
|
||||||
if (binding.etProcurementCount.isFocused) {
|
if (isLoadPurchaseOrderInfo || binding.etProcurementCount.isFocused) {
|
||||||
return@readWeightInfo
|
return@readWeightInfo
|
||||||
}
|
}
|
||||||
val unitTag = binding.tvProcurementUnit.tag
|
val unitTag = binding.tvProcurementUnit.tag
|
||||||
@@ -334,10 +364,10 @@ class GoodsStoreDialog(
|
|||||||
collectGoodsVector(uri) {
|
collectGoodsVector(uri) {
|
||||||
activity?.uploadImage(goods.id!!, goods.goodsName!!, imageFile)
|
activity?.uploadImage(goods.id!!, goods.goodsName!!, imageFile)
|
||||||
}
|
}
|
||||||
binding.root.postDelayed({
|
binding.root.postDelayed({
|
||||||
Loading.dismiss()
|
Loading.dismiss()
|
||||||
confirm(unitName, count, price, totalPrice)
|
confirm(unitName, count, price, totalPrice)
|
||||||
}, 500)
|
}, 500)
|
||||||
}
|
}
|
||||||
cameraUtils.addFailCallback {
|
cameraUtils.addFailCallback {
|
||||||
binding.root.postDelayed({
|
binding.root.postDelayed({
|
||||||
@@ -350,7 +380,7 @@ class GoodsStoreDialog(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun confirm(unitName:String, count:Double, price:Double, totalPrice:Double?) {
|
private fun confirm(unitName: String, count: Double, price: Double, totalPrice: Double?) {
|
||||||
val id = binding.tvProcurementUnit.tag.toString()
|
val id = binding.tvProcurementUnit.tag.toString()
|
||||||
val unitVo = goods.unitVoList!!.first { it.businessUnitId == id }
|
val unitVo = goods.unitVoList!!.first { it.businessUnitId == id }
|
||||||
confirmBlock(
|
confirmBlock(
|
||||||
@@ -464,7 +494,7 @@ class GoodsStoreDialog(
|
|||||||
private var imageFile: File? = null
|
private var imageFile: File? = null
|
||||||
|
|
||||||
// private var box: Box<Food>? = null
|
// private var box: Box<Food>? = null
|
||||||
private fun collectGoodsVector(imageUri:Uri, block: ()-> Unit = {}) {
|
private fun collectGoodsVector(imageUri: Uri, block: () -> Unit = {}) {
|
||||||
try {
|
try {
|
||||||
ImageUtil.uriToBitmap(context, imageUri)?.let { bitmap ->
|
ImageUtil.uriToBitmap(context, imageUri)?.let { bitmap ->
|
||||||
val cropBitmap = BitmapCropper.cropCenter(
|
val cropBitmap = BitmapCropper.cropCenter(
|
||||||
|
|||||||
@@ -54,13 +54,15 @@ data class GoodsInfo(
|
|||||||
* 采购数量
|
* 采购数量
|
||||||
*/
|
*/
|
||||||
var receiveCount: Double? = null,
|
var receiveCount: Double? = null,
|
||||||
|
var receiveCountBak: Double? = null,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 金额
|
* 金额
|
||||||
*/
|
*/
|
||||||
var recPriceExItem: Double? = null,
|
var recPriceExItem: Double? = null,
|
||||||
|
var recPriceExItemBak: Double? = null,
|
||||||
// 金额 界面显示
|
// 金额 界面显示
|
||||||
var recPriceExItemTemp: String = "",
|
// var recPriceExItemTemp: String = "",
|
||||||
/**
|
/**
|
||||||
* 仓库id
|
* 仓库id
|
||||||
*/
|
*/
|
||||||
@@ -144,16 +146,16 @@ data class GoodsInfo(
|
|||||||
return receivedNum?.toSafeString(unitName) ?: "0"
|
return receivedNum?.toSafeString(unitName) ?: "0"
|
||||||
}
|
}
|
||||||
|
|
||||||
val dualCountStr: String
|
// val dualCountStr: String
|
||||||
get() {
|
// get() {
|
||||||
return if (receivedNum != null && receivedNum != 0.toDouble() && receiveCount != null && receiveCount != 0.toDouble()) {
|
// return if (receivedNum != null && receivedNum != 0.toDouble() && receiveCount != null && receiveCount != 0.toDouble()) {
|
||||||
"${receivedNum.toSafeString(unitName)}/${receiveCount.toSafeString(unitName)}"
|
// "${receivedNum.toSafeString(unitName)}/${receiveCount.toSafeString(unitName)}"
|
||||||
} else if (receivedNum != null && receivedNum != 0.toDouble()) {
|
// } else if (receivedNum != null && receivedNum != 0.toDouble()) {
|
||||||
"${receivedNum.toSafeString(unitName)}/-"
|
// "${receivedNum.toSafeString(unitName)}/-"
|
||||||
} else {
|
// } else {
|
||||||
receiveCountListStr
|
// receiveCountListStr
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
val recUnitPriceTaxInStr: String
|
val recUnitPriceTaxInStr: String
|
||||||
get() {
|
get() {
|
||||||
@@ -167,11 +169,11 @@ data class GoodsInfo(
|
|||||||
return recUnitPriceTaxIn?.toFormattedString() ?: "-"
|
return recUnitPriceTaxIn?.toFormattedString() ?: "-"
|
||||||
}
|
}
|
||||||
|
|
||||||
val newRecUnitPriceTaxInListStr: String
|
// val newRecUnitPriceTaxInListStr: String
|
||||||
get() {
|
// get() {
|
||||||
if (newRecUnitPriceTaxIn == 0.toDouble()) return "-"
|
// if (newRecUnitPriceTaxIn == 0.toDouble()) return "-"
|
||||||
return newRecUnitPriceTaxIn?.toFormattedString() ?: "-"
|
// return newRecUnitPriceTaxIn?.toFormattedString() ?: "-"
|
||||||
}
|
// }
|
||||||
|
|
||||||
val receiveCountStr: String
|
val receiveCountStr: String
|
||||||
get() {
|
get() {
|
||||||
@@ -180,13 +182,13 @@ data class GoodsInfo(
|
|||||||
else -> receiveCount?.toSafeString(unitName) ?: ""
|
else -> receiveCount?.toSafeString(unitName) ?: ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val receiveCountListStr: String
|
// val receiveCountListStr: String
|
||||||
get() {
|
// get() {
|
||||||
return when (receiveCount) {
|
// return when (receiveCount) {
|
||||||
0.toDouble() -> "-"
|
// 0.toDouble() -> "-"
|
||||||
else -> receiveCount?.toSafeString(unitName) ?: "-"
|
// else -> receiveCount?.toSafeString(unitName) ?: "-"
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
val recPriceExItemStr: String
|
val recPriceExItemStr: String
|
||||||
get() {
|
get() {
|
||||||
@@ -195,13 +197,13 @@ data class GoodsInfo(
|
|||||||
else -> recPriceExItem?.toFormattedString() ?: ""
|
else -> recPriceExItem?.toFormattedString() ?: ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val recPriceExItemListStr: String
|
// val recPriceExItemListStr: String
|
||||||
get() {
|
// get() {
|
||||||
return when (recPriceExItem) {
|
// return when (recPriceExItem) {
|
||||||
0.toDouble() -> "-"
|
// 0.toDouble() -> "-"
|
||||||
else -> recPriceExItem?.toFormattedString() ?: "-"
|
// else -> recPriceExItem?.toFormattedString() ?: "-"
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
val unitNameStr: String
|
val unitNameStr: String
|
||||||
get() {
|
get() {
|
||||||
@@ -220,14 +222,14 @@ data class GoodsInfo(
|
|||||||
return goodsWeight?.toFormattedString() ?: ""
|
return goodsWeight?.toFormattedString() ?: ""
|
||||||
}
|
}
|
||||||
|
|
||||||
val goodsWeightUnitStr: String
|
// val goodsWeightUnitStr: String
|
||||||
get() {
|
// get() {
|
||||||
return if (goodsWeight == null || goodsWeight!!.toInt() < 1) {
|
// return if (goodsWeight == null || goodsWeight!!.toInt() < 1) {
|
||||||
"克"
|
// "克"
|
||||||
} else {
|
// } else {
|
||||||
"千克"
|
// "千克"
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
|
||||||
var purchaseUnitIdStr: String
|
var purchaseUnitIdStr: String
|
||||||
@@ -238,30 +240,30 @@ data class GoodsInfo(
|
|||||||
return GlobalData.unitTypeList.find { it.id == purchaseUnitId.toString() }?.value ?: ""
|
return GlobalData.unitTypeList.find { it.id == purchaseUnitId.toString() }?.value ?: ""
|
||||||
}
|
}
|
||||||
|
|
||||||
val warehouseNameStr: String
|
// val warehouseNameStr: String
|
||||||
get() {
|
// get() {
|
||||||
if (warehouseName == null) {
|
// if (warehouseName == null) {
|
||||||
return ""
|
// return ""
|
||||||
}
|
// }
|
||||||
return warehouseName!!
|
// return warehouseName!!
|
||||||
}
|
// }
|
||||||
|
|
||||||
fun hasNullField(): String? {
|
// fun hasNullField(): String? {
|
||||||
if (warehouseId.isNullOrBlank()) {
|
// if (warehouseId.isNullOrBlank()) {
|
||||||
return "请选择仓库"
|
// return "请选择仓库"
|
||||||
}
|
// }
|
||||||
if (receivedNum == null || receivedNum == 0.toDouble()) {
|
// if (receivedNum == null || receivedNum == 0.toDouble()) {
|
||||||
return "请输入收货数量或进行称重"
|
// return "请输入收货数量或进行称重"
|
||||||
}
|
// }
|
||||||
if (newRecUnitPriceTaxIn == null || newRecUnitPriceTaxIn == 0.toDouble()) {
|
// if (newRecUnitPriceTaxIn == null || newRecUnitPriceTaxIn == 0.toDouble()) {
|
||||||
return "请输入收货单价"
|
// return "请输入收货单价"
|
||||||
}
|
// }
|
||||||
if (recPriceExItem == null || recPriceExItem == 0.toDouble()) {
|
// if (recPriceExItem == null || recPriceExItem == 0.toDouble()) {
|
||||||
return "请输入收货金额"
|
// return "请输入收货金额"
|
||||||
}
|
// }
|
||||||
if (goodsWeight == null || goodsWeight!!.toFloat() <= 0) {
|
// if (goodsWeight == null || goodsWeight!!.toFloat() <= 0) {
|
||||||
return "请放入要称重的物品"
|
// return "请放入要称重的物品"
|
||||||
}
|
// }
|
||||||
return null
|
// return null
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
@@ -183,6 +183,10 @@ object ObjectBox {
|
|||||||
box?.put(entities)
|
box?.put(entities)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
suspend fun count(name: String) = safeDbOp {
|
||||||
|
getBox<Food>()?.all?.count() { it.name == name }
|
||||||
|
} ?: 0
|
||||||
|
|
||||||
suspend fun filter(name: String?) = safeDbOp {
|
suspend fun filter(name: String?) = safeDbOp {
|
||||||
val list = getBox<Food>()?.all?.distinctBy { it.name }
|
val list = getBox<Food>()?.all?.distinctBy { it.name }
|
||||||
if (name.isNullOrBlank().not()) {
|
if (name.isNullOrBlank().not()) {
|
||||||
|
|||||||
@@ -1,157 +1,157 @@
|
|||||||
package com.sw.inbound.ui.weight
|
//package com.sw.inbound.ui.weight
|
||||||
|
//
|
||||||
import androidx.compose.foundation.Image
|
//import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.background
|
//import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.clickable
|
//import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.layout.Column
|
//import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Row
|
//import androidx.compose.foundation.layout.Row
|
||||||
import androidx.compose.foundation.layout.Spacer
|
//import androidx.compose.foundation.layout.Spacer
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
//import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.height
|
//import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.padding
|
//import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.size
|
//import androidx.compose.foundation.layout.size
|
||||||
import androidx.compose.foundation.layout.width
|
//import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
//import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.foundation.lazy.itemsIndexed
|
//import androidx.compose.foundation.lazy.itemsIndexed
|
||||||
import androidx.compose.material3.HorizontalDivider
|
//import androidx.compose.material3.HorizontalDivider
|
||||||
import androidx.compose.runtime.Composable
|
//import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
//import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableIntStateOf
|
//import androidx.compose.runtime.mutableIntStateOf
|
||||||
import androidx.compose.runtime.remember
|
//import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.setValue
|
//import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Alignment
|
//import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
//import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Color
|
//import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.res.colorResource
|
//import androidx.compose.ui.res.colorResource
|
||||||
import androidx.compose.ui.res.painterResource
|
//import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
//import androidx.compose.ui.text.style.TextAlign
|
||||||
import androidx.compose.ui.unit.dp
|
//import androidx.compose.ui.unit.dp
|
||||||
import com.sw.inbound.R
|
//import com.sw.inbound.R
|
||||||
import com.sw.inbound.ext.bold
|
//import com.sw.inbound.ext.bold
|
||||||
import com.sw.inbound.model.response.GoodsInfo
|
//import com.sw.inbound.model.response.GoodsInfo
|
||||||
import com.sw.inbound.ui.theme.AppTypography
|
//import com.sw.inbound.ui.theme.AppTypography
|
||||||
import com.sw.inbound.ui.theme.Gray_DCDCF0
|
//import com.sw.inbound.ui.theme.Gray_DCDCF0
|
||||||
|
//
|
||||||
/**
|
///**
|
||||||
* 收货-未调整列表
|
// * 收货-未调整列表
|
||||||
*/
|
// */
|
||||||
@Composable
|
//@Composable
|
||||||
fun ReceiptUnadjustedListView(
|
//fun ReceiptUnadjustedListView(
|
||||||
modifier: Modifier = Modifier,
|
// modifier: Modifier = Modifier,
|
||||||
productList: List<GoodsInfo>,
|
// productList: List<GoodsInfo>,
|
||||||
checkedItem: GoodsInfo? = null,
|
// checkedItem: GoodsInfo? = null,
|
||||||
onItemCheckedClick: (Int, GoodsInfo) -> Unit = { _, _ -> },
|
// onItemCheckedClick: (Int, GoodsInfo) -> Unit = { _, _ -> },
|
||||||
showClose: Boolean = false,
|
// showClose: Boolean = false,
|
||||||
onCloseClick: (GoodsInfo) -> Unit = {},
|
// onCloseClick: (GoodsInfo) -> Unit = {},
|
||||||
) {
|
//) {
|
||||||
var selectIndex by remember { mutableIntStateOf(-1) }
|
// var selectIndex by remember { mutableIntStateOf(-1) }
|
||||||
|
//
|
||||||
Column(
|
// Column(
|
||||||
modifier = modifier
|
// modifier = modifier
|
||||||
// .padding(horizontal = 30.dp)
|
//// .padding(horizontal = 30.dp)
|
||||||
) {
|
// ) {
|
||||||
// 左侧列表标题
|
// // 左侧列表标题
|
||||||
Row(
|
// Row(
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
.fillMaxWidth()
|
// .fillMaxWidth()
|
||||||
.padding(horizontal = 60.dp)
|
// .padding(horizontal = 60.dp)
|
||||||
.height(84.dp),
|
// .height(84.dp),
|
||||||
verticalAlignment = Alignment.CenterVertically
|
// verticalAlignment = Alignment.CenterVertically
|
||||||
) {
|
// ) {
|
||||||
CustomSingleRightText(
|
// CustomSingleRightText(
|
||||||
modifier = Modifier.weight(1f),
|
// modifier = Modifier.weight(1f),
|
||||||
text = "名称",
|
// text = "名称",
|
||||||
style = AppTypography.gray96a0aaTextStyle.bold(),
|
// style = AppTypography.gray96a0aaTextStyle.bold(),
|
||||||
textAlign = TextAlign.Start
|
// textAlign = TextAlign.Start
|
||||||
)
|
// )
|
||||||
Spacer(modifier = Modifier.width(10.dp))
|
// Spacer(modifier = Modifier.width(10.dp))
|
||||||
CustomSingleRightText(
|
// CustomSingleRightText(
|
||||||
modifier = Modifier.width(120.dp),
|
// modifier = Modifier.width(120.dp),
|
||||||
text = "单价(元)",
|
// text = "单价(元)",
|
||||||
style = AppTypography.gray96a0aaTextStyle.bold()
|
// style = AppTypography.gray96a0aaTextStyle.bold()
|
||||||
)
|
// )
|
||||||
Spacer(modifier = Modifier.width(20.dp))
|
// Spacer(modifier = Modifier.width(20.dp))
|
||||||
CustomSingleRightText(
|
// CustomSingleRightText(
|
||||||
modifier = Modifier.width(200.dp),
|
// modifier = Modifier.width(200.dp),
|
||||||
text = "数量",
|
// text = "数量",
|
||||||
style = AppTypography.gray96a0aaTextStyle.bold()
|
// style = AppTypography.gray96a0aaTextStyle.bold()
|
||||||
)
|
// )
|
||||||
Spacer(modifier = Modifier.width(20.dp))
|
// Spacer(modifier = Modifier.width(20.dp))
|
||||||
CustomSingleRightText(
|
// CustomSingleRightText(
|
||||||
modifier = Modifier.width(120.dp),
|
// modifier = Modifier.width(120.dp),
|
||||||
text = "金额(元)",
|
// text = "金额(元)",
|
||||||
style = AppTypography.gray96a0aaTextStyle.bold()
|
// style = AppTypography.gray96a0aaTextStyle.bold()
|
||||||
)
|
// )
|
||||||
if (showClose) {
|
// if (showClose) {
|
||||||
Spacer(modifier = Modifier.width(78.dp))
|
// Spacer(modifier = Modifier.width(78.dp))
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
// Spacer(modifier = Modifier.height(31.dp))
|
//// Spacer(modifier = Modifier.height(31.dp))
|
||||||
HorizontalDivider(thickness = 1.dp, color = colorResource(R.color.divider))
|
// HorizontalDivider(thickness = 1.dp, color = colorResource(R.color.divider))
|
||||||
// Spacer(modifier = Modifier.height(31.dp))
|
//// Spacer(modifier = Modifier.height(31.dp))
|
||||||
// 左侧列表
|
// // 左侧列表
|
||||||
LazyColumn() {
|
// LazyColumn() {
|
||||||
itemsIndexed(
|
// itemsIndexed(
|
||||||
items = productList,
|
// items = productList,
|
||||||
// key = { index, it -> it.id ?: index }) { index, it ->
|
//// key = { index, it -> it.id ?: index }) { index, it ->
|
||||||
key = { index, it -> index }) { index, it ->
|
// key = { index, it -> index }) { index, it ->
|
||||||
|
//
|
||||||
val checkedBg =
|
// val checkedBg =
|
||||||
if (/*selectIndex == index ||*/ checkedItem?.id == it.id) Gray_DCDCF0 else Color.Transparent
|
// if (/*selectIndex == index ||*/ checkedItem?.id == it.id) Gray_DCDCF0 else Color.Transparent
|
||||||
Row(
|
// Row(
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
.background(color = checkedBg)
|
// .background(color = checkedBg)
|
||||||
.height(80.dp)
|
// .height(80.dp)
|
||||||
.padding(horizontal = 60.dp)
|
// .padding(horizontal = 60.dp)
|
||||||
.clickable {
|
// .clickable {
|
||||||
selectIndex = index
|
// selectIndex = index
|
||||||
onItemCheckedClick(index, it)
|
// onItemCheckedClick(index, it)
|
||||||
}, verticalAlignment = Alignment.CenterVertically
|
// }, verticalAlignment = Alignment.CenterVertically
|
||||||
) {
|
// ) {
|
||||||
CustomSingleRightText(
|
// CustomSingleRightText(
|
||||||
modifier = Modifier.weight(1f),
|
// modifier = Modifier.weight(1f),
|
||||||
text = it.goodNameStr,
|
// text = it.goodNameStr,
|
||||||
textAlign = TextAlign.Start
|
// textAlign = TextAlign.Start
|
||||||
)
|
// )
|
||||||
Spacer(modifier = Modifier.width(10.dp))
|
// Spacer(modifier = Modifier.width(10.dp))
|
||||||
CustomSingleRightText(
|
// CustomSingleRightText(
|
||||||
modifier = Modifier.width(120.dp),
|
// modifier = Modifier.width(120.dp),
|
||||||
text = it.recUnitPriceTaxInListStr,
|
// text = it.recUnitPriceTaxInListStr,
|
||||||
style = AppTypography.blackTextStyle
|
// style = AppTypography.blackTextStyle
|
||||||
)
|
// )
|
||||||
Spacer(modifier = Modifier.width(20.dp))
|
// Spacer(modifier = Modifier.width(20.dp))
|
||||||
CustomSingleRightText(
|
// CustomSingleRightText(
|
||||||
modifier = Modifier.width(200.dp),
|
// modifier = Modifier.width(200.dp),
|
||||||
text = "${it.dualCountStr}${it.unitNameStr}",
|
// text = "${it.dualCountStr}${it.unitNameStr}",
|
||||||
style = AppTypography.blackTextStyle
|
// style = AppTypography.blackTextStyle
|
||||||
)
|
// )
|
||||||
Spacer(modifier = Modifier.width(20.dp))
|
// Spacer(modifier = Modifier.width(20.dp))
|
||||||
CustomSingleRightText(
|
// CustomSingleRightText(
|
||||||
modifier = Modifier.width(120.dp),
|
// modifier = Modifier.width(120.dp),
|
||||||
text = it.recPriceExItemListStr,
|
// text = it.recPriceExItemListStr,
|
||||||
style = AppTypography.blackTextStyle
|
// style = AppTypography.blackTextStyle
|
||||||
)
|
// )
|
||||||
if (showClose) {
|
// if (showClose) {
|
||||||
Spacer(modifier = Modifier.width(30.dp))
|
// Spacer(modifier = Modifier.width(30.dp))
|
||||||
Image(
|
// Image(
|
||||||
modifier = Modifier
|
// modifier = Modifier
|
||||||
.size(48.dp)
|
// .size(48.dp)
|
||||||
.clickable {
|
// .clickable {
|
||||||
onCloseClick(it)
|
// onCloseClick(it)
|
||||||
},
|
// },
|
||||||
painter = painterResource(R.mipmap.ic_delete),
|
// painter = painterResource(R.mipmap.ic_delete),
|
||||||
contentDescription = "删除"
|
// contentDescription = "删除"
|
||||||
)
|
// )
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
// Spacer(modifier = Modifier.height(33.dp))
|
//// Spacer(modifier = Modifier.height(33.dp))
|
||||||
// if (productList.indexOf(it) != productList.lastIndex)
|
//// if (productList.indexOf(it) != productList.lastIndex)
|
||||||
HorizontalDivider(
|
// HorizontalDivider(
|
||||||
thickness = 1.dp,
|
// thickness = 1.dp,
|
||||||
color = colorResource(R.color.divider)
|
// color = colorResource(R.color.divider)
|
||||||
)
|
// )
|
||||||
// Spacer(modifier = Modifier.height(33.dp))
|
//// Spacer(modifier = Modifier.height(33.dp))
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
Reference in New Issue
Block a user