Skip to content
Snippets Groups Projects

Dev

Open Кирилл Шустов requested to merge dev into play-market
3 files
+ 70
40
Compare changes
  • Side-by-side
  • Inline
Files
3
@@ -31,8 +31,12 @@ import kotlinx.serialization.json.Json
import java.text.ParseException
import java.util.*
import java.util.stream.Collectors.groupingBy
import javax.inject.Inject
import javax.inject.Singleton
import kotlin.collections.ArrayList
import kotlin.collections.HashMap
import kotlin.collections.HashSet
@Singleton
@@ -763,6 +767,10 @@ class DatabaseRepository @Inject constructor(private val context: Context) {
}
private fun isExistOperation(matchModel: QRMatchModel?, receipt: ReceiptBase, dateTime: Long): List<Int> {
return isExistOperation(matchModel, receipt.sum, dateTime)
}
private fun isExistOperation(matchModel: QRMatchModel?, sum: Double, dateTime: Long): List<Int> {
val listId = arrayListOf<Int>()
val date = Constants.str2unix(context, Utils._convertMillisToStringDateUTC(context, dateTime)).toString()
@@ -770,9 +778,9 @@ class DatabaseRepository @Inject constructor(private val context: Context) {
val selection = SELECTION_EXPENSES_JOURNAL_OPERATION
val data = if (matchModel!!.subCategoryId > 0)
arrayOf(receipt.baseSum.toString(), date, matchModel.subCategoryId.toString())
arrayOf(sum.toString(), date, matchModel.subCategoryId.toString())
else
arrayOf(receipt.baseSum.toString(), date, matchModel.categoryId.toString())
arrayOf(sum.toString(), date, matchModel.categoryId.toString())
val cursor = context.contentResolver.query(uri, arrayOf(Expenses._ID), selection, data, null)
@@ -788,36 +796,59 @@ class DatabaseRepository @Inject constructor(private val context: Context) {
return listId
}
private fun getDuplicatesReceiptItem(items: List<ReceiptItemUI>): Map<String, List<ReceiptItemUI>> {
return items.groupBy { it.name }
}
private fun getResultCountItems(items: List<ReceiptItemUI>, dateTime: Long): HashMap<ReceiptItemUI, Int> {
val duplicates: Map<String, List<ReceiptItemUI>> = getDuplicatesReceiptItem(items)
val resultDuplicates: HashMap<ReceiptItemUI, Int> = HashMap(items.size / 2)
duplicates.forEach {
val qrMatch: QRMatchModel? = getQRMatch(it.key)
val listId: List<Int> = isExistOperation(qrMatch, it.value[0].sum, dateTime)
resultDuplicates[it.value[0]] = when {
listId.size == it.value.size || listId.size > it.value.size -> 0
it.value.size > listId.size -> it.value.size - listId.size
else -> 0
}
}
return resultDuplicates
}
@SuppressLint("NewApi")
suspend fun saveExpenses(items: List<ReceiptItemUI>, account: Account, dateTime: Long): Boolean {
return try {
GlobalScope.async {
val accId = account.id
for (item: ReceiptItemUI in items) {
val qrMatch: QRMatchModel? = getQRMatch(item.name)
if (qrMatch == null || isExistOperation(qrMatch, item, dateTime/* * 1000L*/).isNotEmpty())
continue
if (item.sum > 0.0) {
val contentValues = ContentValues()
contentValues.put(Expenses.ACCOUNT, accId)
if (item.subCategoryId == -1)
contentValues.put(Expenses.CATEGORY, item.categoryId)
else
contentValues.put(Expenses.CATEGORY, item.subCategoryId)
contentValues.put(Expenses.QUANTITY, item.quantity)
try {
contentValues.put(Expenses.MONEY, item.sum)
contentValues.put(Expenses.MYDATE, Constants.str2unix(context, Utils._convertMillisToStringDateUTC(context, dateTime)))
} catch (e: ParseException) {
e.printStackTrace()
val resultDuplicates = getResultCountItems(items, dateTime)
resultDuplicates.forEach {
for (i: Int in 0 until it.value) {
if (it.key.sum > 0.0) {
val contentValues = ContentValues()
contentValues.put(Expenses.ACCOUNT, accId)
if (it.key.subCategoryId == -1)
contentValues.put(Expenses.CATEGORY, it.key.categoryId)
else
contentValues.put(Expenses.CATEGORY, it.key.subCategoryId)
contentValues.put(Expenses.QUANTITY, it.key.quantity)
try {
contentValues.put(Expenses.MONEY, it.key.sum)
contentValues.put(Expenses.MYDATE, Constants.str2unix(context, Utils._convertMillisToStringDateUTC(context, dateTime)))
} catch (e: ParseException) {
e.printStackTrace()
}
contentValues.putNull(Expenses.RATE)
contentValues.put(Expenses.LASTCHANGE, System.currentTimeMillis())
contentValues.put(Expenses.DELETED, 0)
contentValues.put(Expenses.NUMCURRENCY, getCurrencyByCurrencyList("1"))
context.contentResolver.insert(Expenses.CONTENT_URI, contentValues)
}
contentValues.putNull(Expenses.RATE)
contentValues.put(Expenses.LASTCHANGE, System.currentTimeMillis())
contentValues.put(Expenses.DELETED, 0)
contentValues.put(Expenses.NUMCURRENCY, getCurrencyByCurrencyList("1"))
context.contentResolver.insert(Expenses.CONTENT_URI, contentValues)
}
}
true
Loading