Skip to content
This repository was archived by the owner on Jun 27, 2020. It is now read-only.

Commit 710f433

Browse files
author
Evgenii Kanivets
committed
#95. Display transfers as records in account operations.
1 parent 85e09ab commit 710f433

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/account/edit/fragment/AccountOperationsFragment.kt

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,20 @@ import com.blogspot.e_kanivets.moneytracker.R
66
import com.blogspot.e_kanivets.moneytracker.activity.base.BaseFragment
77
import com.blogspot.e_kanivets.moneytracker.adapter.RecordAdapter
88
import com.blogspot.e_kanivets.moneytracker.controller.data.RecordController
9+
import com.blogspot.e_kanivets.moneytracker.controller.data.TransferController
910
import com.blogspot.e_kanivets.moneytracker.entity.data.Account
11+
import com.blogspot.e_kanivets.moneytracker.entity.data.Category
12+
import com.blogspot.e_kanivets.moneytracker.entity.data.Record
13+
import com.blogspot.e_kanivets.moneytracker.entity.data.Transfer
1014
import kotlinx.android.synthetic.main.fragment_account_operations.*
1115
import javax.inject.Inject
1216

1317
class AccountOperationsFragment : BaseFragment() {
1418

1519
@Inject
1620
internal lateinit var recordController: RecordController
21+
@Inject
22+
internal lateinit var transferController: TransferController
1723

1824
private lateinit var account: Account
1925

@@ -25,7 +31,33 @@ class AccountOperationsFragment : BaseFragment() {
2531
}
2632

2733
override fun initViews(view: View) {
28-
listView.adapter = RecordAdapter(activity, recordController.getRecordsForAccount(account))
34+
listView.adapter = RecordAdapter(activity, getRecords())
35+
}
36+
37+
private fun getRecords(): List<Record> {
38+
val accountRecords = recordController.getRecordsForAccount(account)
39+
val accountTransfers = transferController.getTransfersForAccount(account)
40+
41+
accountRecords += calculateRecordsFromTransfers(accountTransfers)
42+
accountRecords.sortByDescending { it.time }
43+
44+
return accountRecords
45+
}
46+
47+
private fun calculateRecordsFromTransfers(transfers: List<Transfer>): List<Record> {
48+
val records = mutableListOf<Record>()
49+
50+
transfers.forEach {
51+
val type = if (it.fromAccountId == account.id) Record.TYPE_EXPENSE else Record.TYPE_INCOME
52+
val title = "Transfer ${if (type == Record.TYPE_EXPENSE) "to" else "from"}"
53+
val category = Category("transfer")
54+
val price = if (type == Record.TYPE_EXPENSE) it.fromAmount else it.toAmount
55+
val decimals = if (type == Record.TYPE_EXPENSE) it.fromDecimals else it.toDecimals
56+
57+
records += Record(it.id, it.time, type, title, category, price, account, account.currency, decimals)
58+
}
59+
60+
return records.toList()
2961
}
3062

3163
companion object {

app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/TransferController.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.blogspot.e_kanivets.moneytracker.controller.data
22

33
import com.blogspot.e_kanivets.moneytracker.controller.base.BaseController
4+
import com.blogspot.e_kanivets.moneytracker.entity.data.Account
45
import com.blogspot.e_kanivets.moneytracker.entity.data.Transfer
6+
import com.blogspot.e_kanivets.moneytracker.repo.DbHelper
57
import com.blogspot.e_kanivets.moneytracker.repo.base.IRepo
68

79
/**
@@ -24,4 +26,11 @@ class TransferController(
2426
}
2527
}
2628

29+
fun getTransfersForAccount(account: Account): List<Transfer> {
30+
val condition = "${DbHelper.FROM_ACCOUNT_ID_COLUMN}=? OR ${DbHelper.TO_ACCOUNT_ID_COLUMN}=?"
31+
val args = arrayOf(account.id.toString(), account.id.toString())
32+
33+
return readWithCondition(condition, args)
34+
}
35+
2736
}

0 commit comments

Comments
 (0)