Skip to content

Commit

Permalink
Merge pull request #114 from rkumar0206/109-add-new-graph-in-expenseg…
Browse files Browse the repository at this point in the history
…raphfragment-in-which-data-is-showed-for-individual-categories

Closes #109 #107
  • Loading branch information
rkumar0206 authored Aug 1, 2023
2 parents a426856 + e0ab073 commit bf5961b
Show file tree
Hide file tree
Showing 23 changed files with 1,049 additions and 501 deletions.
2 changes: 1 addition & 1 deletion .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -83,17 +83,18 @@ class BudgetRVAdapter : ListAdapter<Budget, BudgetRVAdapter.BudgetViewHolder>(Di
myBudget.budgetLimit.format(2)
)

//Log.d(TAG, "setData: budget: $myBudget")

val numberOfDaysLeftInMonth =
WorkingWithDateAndTime.getNumberOfDaysLeftInAnyMonth(
myBudget.month, myBudget.year
)

//Log.d(TAG, "setData: numberOfDaysLeftInMonth: $numberOfDaysLeftInMonth")
Log.d(TAG, "setData: numberOfDaysLeftInMonth: $numberOfDaysLeftInMonth")

var perDayExpense =
var perDayExpense = if (numberOfDaysLeftInMonth != 0) {
(myBudget.budgetLimit - myBudget.currentExpenseAmount) / numberOfDaysLeftInMonth
} else {
0.0
}

if (perDayExpense < 0) perDayExpense = 0.0

Expand All @@ -113,17 +114,6 @@ class BudgetRVAdapter : ListAdapter<Budget, BudgetRVAdapter.BudgetViewHolder>(Di

changeProgressColorsByProgressPercent(progressInPercent)

Log.d(
TAG,
"setData: ${myBudget.categoryName} - percent: $progressInPercent"
)
Log.d(
TAG,
"setData: ${myBudget.categoryName} - progressDrawable: ${
changeProgressColorsByProgressPercent(progressInPercent).hashCode()
}"
)

baProgressBar.max = myBudget.budgetLimit.toInt()

if (myBudget.currentExpenseAmount > myBudget.budgetLimit) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.rohitthebest.manageyourrenters.data

data class ExpenseCategoryAndTheirTotalExpenseAmounts(
var expenseCategoryKey: String,
var categoryName: String,
var totalAmount: Double
)
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ interface ExpenseCategoryDAO {
@Query("SELECT * FROM expense_category_table ORDER BY modified DESC")
fun getAllExpenseCategories(): Flow<List<ExpenseCategory>>

@Query("SELECT * FROM expense_category_table limit :limit")
fun getAllExpenseCategoriesByLimit(limit: Int): Flow<List<ExpenseCategory>>

@Query("SELECT * FROM expense_category_table WHERE `key` = :key")
fun getExpenseCategoryByKey(key: String): Flow<ExpenseCategory>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.rohitthebest.manageyourrenters.database.dao

import androidx.room.*
import com.rohitthebest.manageyourrenters.data.ExpenseCategoryAndTheirTotalExpenseAmounts
import com.rohitthebest.manageyourrenters.database.model.Expense
import kotlinx.coroutines.flow.Flow

Expand Down Expand Up @@ -60,6 +61,12 @@ interface ExpenseDAO {
date2: Long
): Flow<Double>

@Query("SELECT SUM(amount) FROM expense_table WHERE categoryKey IN (:expenseCategoryKeys)")
fun getTotalExpenseByCategoryKeys(
expenseCategoryKeys: List<String>
): Flow<Double>


@Query("SELECT SUM(amount) FROM expense_table WHERE categoryKey IN (:expenseCategoryKeys) AND created BETWEEN :date1 AND :date2")
fun getTotalExpenseByCategoryKeysAndDateRange(
expenseCategoryKeys: List<String>,
Expand Down Expand Up @@ -103,4 +110,98 @@ interface ExpenseDAO {

@Query("UPDATE expense_table SET isSynced = 0 WHERE `key` = :key")
suspend fun updateIsSyncedValueToFalse(key: String)

@Query(
"SELECT expense_category_table.`key` as expenseCategoryKey, " +
"expense_category_table.categoryName AS categoryName, " +
"SUM(expense_table.amount) AS totalAmount " +
"FROM expense_table " +
"INNER JOIN expense_category_table " +
"ON expense_table.categoryKey = expense_category_table.`key` " +
"GROUP BY expense_category_table.`key`"
)
fun getTotalExpenseAmountsWithTheirExpenseCategoryKeys(): Flow<List<ExpenseCategoryAndTheirTotalExpenseAmounts>>

@Query(
"SELECT expense_category_table.`key` as expenseCategoryKey, " +
"expense_category_table.categoryName AS categoryName, " +
"SUM(expense_table.amount) AS totalAmount " +
"FROM expense_table " +
"INNER JOIN expense_category_table " +
"ON expense_table.categoryKey = expense_category_table.`key` " +
"WHERE expense_table.`key` in (:expenseKeys) " +
"GROUP BY expense_category_table.`key`"
)
fun getTotalExpenseAmountsWithTheirExpenseCategoryKeysByListOfExpenseKeys(
expenseKeys: List<String>
): Flow<List<ExpenseCategoryAndTheirTotalExpenseAmounts>>


@Query(
"SELECT expense_category_table.`key` AS expenseCategoryKey, " +
"expense_category_table.categoryName AS categoryName, " +
"SUM(expense_table.amount) AS totalAmount " +
"FROM expense_table " +
"INNER JOIN expense_category_table " +
"ON expense_table.categoryKey = expense_category_table.`key` " +
"WHERE expense_table.created BETWEEN :date1 AND :date2 " +
"GROUP BY expense_category_table.`key`"
)
fun getTotalExpenseAmountsWithTheirExpenseCategoryKeysByDateRange(
date1: Long,
date2: Long
): Flow<List<ExpenseCategoryAndTheirTotalExpenseAmounts>>

@Query(
"SELECT expense_category_table.`key` AS expenseCategoryKey, " +
"expense_category_table.categoryName AS categoryName, " +
"SUM(expense_table.amount) AS totalAmount " +
"FROM expense_table " +
"INNER JOIN expense_category_table " +
"ON expense_table.categoryKey = expense_category_table.`key` " +
"WHERE expense_table.created BETWEEN :date1 AND :date2 " +
"AND expense_table.`key` IN (:expenseKeys) " +
"GROUP BY expense_category_table.`key`"
)
fun getTotalExpenseAmountsWithTheirExpenseCategoryKeysByDateRangeAndByListOfExpenseKeys(
date1: Long,
date2: Long,
expenseKeys: List<String>
): Flow<List<ExpenseCategoryAndTheirTotalExpenseAmounts>>


@Query(
"SELECT expense_category_table.`key` AS expenseCategoryKey, " +
"expense_category_table.categoryName AS categoryName, " +
"SUM(expense_table.amount) AS totalAmount " +
"FROM expense_table " +
"INNER JOIN expense_category_table " +
"ON expense_table.categoryKey = expense_category_table.`key` " +
"WHERE expense_table.categoryKey IN (:selectedExpenseCategories) " +
"GROUP BY expense_category_table.`key`"
)
fun getTotalExpenseAmountsWithTheirExpenseCategoryKeysForSelectedExpenseCategories(
selectedExpenseCategories: List<String>
): Flow<List<ExpenseCategoryAndTheirTotalExpenseAmounts>>

@Query(
"SELECT expense_category_table.`key` AS expenseCategoryKey, " +
"expense_category_table.categoryName AS categoryName, " +
"SUM(expense_table.amount) AS totalAmount " +
"FROM expense_table " +
"INNER JOIN expense_category_table " +
"ON expense_table.categoryKey = expense_category_table.`key` " +
"WHERE expense_table.categoryKey IN (:selectedExpenseCategories) " +
"AND expense_table.created BETWEEN :date1 AND :date2 " +
"GROUP BY expense_category_table.`key`"
)
fun getTotalExpenseAmountsWithTheirExpenseCategoryKeysForSelectedExpenseCategoriesByDateRange(
selectedExpenseCategories: List<String>,
date1: Long,
date2: Long
): Flow<List<ExpenseCategoryAndTheirTotalExpenseAmounts>>


@Query("SELECT EXISTS(select `key` from expense_table limit 1)")
fun isAnyExpenseAdded(): Flow<Boolean>
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,5 @@ class ExpenseCategoryRepository @Inject constructor(

fun getExpenseCategoryByKey(key: String) = dao.getExpenseCategoryByKey(key)

fun getAllExpenseCategoriesByLimit(limit: Int) = dao.getAllExpenseCategoriesByLimit(limit)
}
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,10 @@ class ExpenseRepository @Inject constructor(
) =
dao.getTotalExpenseAmountByCategoryKeyAndDateRange(expenseCategoryKey, date1, date2)

fun getTotalExpenseByCategoryKeys(
expenseCategoryKeys: List<String>
) = dao.getTotalExpenseByCategoryKeys(expenseCategoryKeys)

fun getTotalExpenseByCategoryKeysAndDateRange(
expenseCategoryKeys: List<String>,
date1: Long,
Expand Down Expand Up @@ -94,8 +98,45 @@ class ExpenseRepository @Inject constructor(
suspend fun getKeysByExpenseCategoryKey(expenseCategoryKey: String) =
dao.getKeysByExpenseCategoryKey(expenseCategoryKey)

fun getTotalExpenseAmountsWithTheirExpenseCategoryKeys() =
dao.getTotalExpenseAmountsWithTheirExpenseCategoryKeys()

fun getTotalExpenseAmountsWithTheirExpenseCategoryKeysByListOfExpenseKeys(
expenseKeys: List<String>
) = dao.getTotalExpenseAmountsWithTheirExpenseCategoryKeysByListOfExpenseKeys(expenseKeys)

fun getTotalExpenseAmountsWithTheirExpenseCategoryKeysByDateRange(date1: Long, date2: Long) =
dao.getTotalExpenseAmountsWithTheirExpenseCategoryKeysByDateRange(date1, date2)

fun getTotalExpenseAmountsWithTheirExpenseCategoryKeysByDateRangeAndByListOfExpenseKeys(
date1: Long,
date2: Long,
expenseKeys: List<String>
) = dao.getTotalExpenseAmountsWithTheirExpenseCategoryKeysByDateRangeAndByListOfExpenseKeys(
date1, date2, expenseKeys
)

fun getTotalExpenseAmountsWithTheirExpenseCategoryKeysForSelectedExpenseCategories(
selectedExpenseCategories: List<String>
) = dao.getTotalExpenseAmountsWithTheirExpenseCategoryKeysForSelectedExpenseCategories(
selectedExpenseCategories
)

fun getTotalExpenseAmountsWithTheirExpenseCategoryKeysForSelectedExpenseCategoriesByDateRange(
selectedExpenseCategories: List<String>,
date1: Long,
date2: Long
) =
dao.getTotalExpenseAmountsWithTheirExpenseCategoryKeysForSelectedExpenseCategoriesByDateRange(
selectedExpenseCategories,
date1,
date2
)

fun isAnyExpenseAdded() = dao.isAnyExpenseAdded()

fun applyExpenseFilterByPaymentMethods(
paymentMethodKeys: List<String>,
paymentMethodKeys: List<String?>,
expenses: List<Expense>
): List<Expense> {

Expand Down
5 changes: 5 additions & 0 deletions app/src/main/java/com/rohitthebest/manageyourrenters/todo.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// done
- all the data should be created in viewModels and not in the fragments
- add new graph in expense graph
- individual category graph
- add option to filter data in graph using payment methods (#107)
Loading

0 comments on commit bf5961b

Please sign in to comment.