package Ġcom . money budget . operations . operations List Ċ Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . money budget . database . Operation Ċ import Ġcom . money budget . database . Operation Minimal Ċ import Ġcom . money budget . repository . Repository Ċ import Ġcom . money budget . repository . Repository . operations DataSource Ċ import Ġcom . money budget . utils . view Models . List ViewModel Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġkotlinx . coroutines . flow . combine Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠOperations List ViewModel Ġ: ĠList ViewModel < Operation >( operations DataSource ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ categoryId Filtered Ġ= ĠMutable State Flow ( 0 L ) ĊĠĠĠ Ġval Ġcategory Id Filtered : ĠState Flow < Long > Ġ= Ġ_ categoryId Filtered ĊĊĠĠĠ Ġprivate Ġval Ġ_ accountId Filtered Ġ= ĠMutable State Flow ( 0 L ) ĊĠĠĠ Ġval ĠaccountId Filtered : ĠState Flow < Long > Ġ= Ġ_ accountId Filtered ĊĊĠĠĠ Ġfun Ġset CategoryId Filtered ( categoryId : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( categoryId Ġ== Ġ_ categoryId Filtered . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ categoryId Filtered . value Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ categoryId Filtered . value Ġ= Ġcategory Id ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset AccountId Filtered ( accountId : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( accountId Ġ== Ġ_ accountId Filtered . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ accountId Filtered . value Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ accountId Filtered . value Ġ= ĠaccountId ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Deleted Flag ( element Ġ: ĠAny , Ġflag Ġ: ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( element Ġis ĠOperation Minimal ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoperation Ġ= Ġrepository DataSource . get ( element . operation Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( operation Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoperation . is Deleted Ġ= Ġflag ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository DataSource . update ( operation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġoperations List Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġflow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperations DataSource ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getAll Minimal () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. combine (_ accountId Filtered ) Ġ{ Ġlist , ĠaccountId Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( accountId Ġ!= Ġ 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . filter Ġ{ Ġoperation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoperation . accountId Ġ== ĠaccountId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. combine (_ categoryId Filtered ) Ġ{ Ġlist , Ġcategory Id Filtered Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( categoryId Filtered Ġ!= Ġ 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . filter Ġ{ Ġoperation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoperation . categoryId Ġ== Ġcategory Id Filtered ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( it . sorted By Descending Ġ{ Ġoperation Ġ-> Ġoperation . operation Date Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Categories List () Ġ= ĠRepository . categories DataSource . getAll Names () ĊĊĠĠĠ Ġfun Ġget Accounts List () Ġ= ĠRepository . accounts DataSource . getAll Names () Ċ }