package Ġcom . c act ust e am . money . ui . grouping Ċ Ċ import Ġandroid . support . v 4 . util . Array Map Ċ import Ġcom . c act ust e am . money . data . dao . Category Ċ import Ġcom . c act ust e am . money . data . dao . Transaction Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġ@ author Ġv pot ap enko Ċ Ġ*/ Ċ class ĠCategories Report Transactions Group er ( private Ġvar Ġtype : ĠInt ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠGROUP _ NAME _ COMP AR ATOR Ġ= ĠComparator < Transactions Group er . Group > Ġ{ Ġlhs , Ġrhs Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠCategory . EXP ENSE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjava . lang . Double . compare ( rhs . expense , Ġlhs . expense ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjava . lang . Double . compare ( rhs . income , Ġlhs . income ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Type ( type : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . type Ġ= Ġtype ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġgroup ( transactions : ĠList < Transaction >): ĠList < Transactions Group er . Group > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgroups Ġ= ĠTreeMap < String , ĠMutable List < Transaction >>() ĊĠĠĠĠĠĠĠ Ġval Ġcategories Ġ= ĠArray Map < String , ĠCategory >() ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( transaction Ġin Ġtransactions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( transaction . type Ġ!= Ġtype ) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcategory Ġ= Ġtransaction . category ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠgroupName Ġ= Ġcategory . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtransaction List : ĠMutable List < Transaction >? Ġ= Ġgroups [ groupName ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( transaction List Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction List Ġ= ĠArrayList < Transaction >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroups . put ( groupName , Ġtransaction List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategories . put ( groupName , Ġcategory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction List . add ( transaction ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsub Groups Ġ= ĠArray Map < String , ĠTransactions Group er . Group >() ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArrayList < Transactions Group er . Group >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( groupName Ġin Ġgroups . keys ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcategory Ġ= Ġcategories [ groupName ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Group : ĠTransactions Group er . Group ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( category Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Group Ġ= ĠTransactions Group er . Group (- 1 , ĠgroupName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Group Ġ= ĠTransactions Group er . Group ( category . id !! , ĠgroupName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Group . icon Ġ= Ġcategory . icon ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( current Group ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub Groups . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( transaction Ġin Ġgroups [ groupName ] !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( transaction . type Ġ== ĠTransaction . EXP ENSE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Group . expense Ġ= Ġcurrent Group . expense Ġ+ Ġtransaction . amount In Main Currency ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( transaction . type Ġ== ĠTransaction . IN CO ME ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Group . income Ġ= Ġcurrent Group . income Ġ+ Ġtransaction . amount In Main Currency ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Sub Group ( sub Groups , Ġtransaction ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply Sub Groups ( sub Groups , Ġcurrent Group ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠCollections . sort ( result , ĠGROUP _ NAME _ COMP AR ATOR ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġapply Sub Groups ( sub Groups : ĠMap < String , ĠTransactions Group er . Group >, Ġcurrent Group : ĠTransactions Group er . Group ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( sub Groups . isEmpty ()) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġcurrent Group . sub Groups . clear () ĊĠĠĠĠĠĠĠ Ġcurrent Group . sub Groups . addAll ( sub Groups . values ) ĊĠĠĠĠĠĠĠ Ġcurrent Group . sub Groups . sort With ( GROUP _ NAME _ COMP AR ATOR ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Sub Group ( sub Groups : ĠMutable Map < String , ĠTransactions Group er . Group >, Ġtransaction : ĠTransaction ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsub category Ġ= Ġtransaction . subcategory Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġvar Ġgroup : ĠTransactions Group er . Group ? Ġ= Ġsub Groups [ subcategory . name ] ĊĠĠĠĠĠĠĠ Ġif Ġ( group Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= ĠTransactions Group er . Group ( subcategory . id !! , Ġsub category . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub Groups . put ( subcategory . name , Ġgroup ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( transaction . type Ġ== ĠTransaction . EXP ENSE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup . expense Ġ= Ġgroup . expense Ġ+ Ġtransaction . amount In Main Currency ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( transaction . type Ġ== ĠTransaction . IN CO ME ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup . income Ġ= Ġgroup . income Ġ+ Ġtransaction . amount In Main Currency ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ