package Ġcom . v on H ous en . k app ust a . db . report DB Ċ Ċ import Ġandroidx . room .* Ċ import Ġcom . v on H ous en . k app ust a . db . report DB .* Ċ import Ġcom . v on H ous en . k app ust a . reporting . Money Ċ import Ġcom . v on H ous en . k app ust a . reporting . Report Record Ċ import Ġcom . v on H ous en . k app ust a . reporting . Sp ent Record Ċ import Ġjava . time . LocalDate Ċ Ċ @ Dao Ċ interface ĠReport DAO Ġ{ ĊĊĠĠĠ Ġ@ get : Query (" select Ġ* Ġfrom ĠEXP ENSE S ") ĊĠĠĠ Ġval Ġall Exp enses : ĠList < Expense Entity >? ĊĊĠĠĠ Ġ@ Insert ĊĠĠĠ Ġfun Ġinsert Expense ( expense : ĠExp ense Entity ): ĠLong ĊĊĠĠĠ Ġ@ Query (" delete Ġfrom ĠEXP ENSE S Ġwhere Ġexpense _ id Ġ= Ġ: expense ID ") ĊĠĠĠ Ġfun Ġdelete Expense ( expense ID : ĠLong ) ĊĊĠĠĠ Ġ@ get : Query (" select Ġ* Ġfrom ĠEXP ENSE _ TYPES ") ĊĠĠĠ Ġval Ġall Expense Types : ĠList < Expense Type Entity >? ĊĊĠĠĠ Ġ@ Insert ĊĠĠĠ Ġfun Ġinsert Expense Type ( expense Type : ĠExp ense Type Entity ) ĊĊĠĠĠ Ġ@ Delete ĊĠĠĠ Ġfun Ġdelete Expense Type ( expense Type : ĠExp ense Type Entity ) ĊĊĠĠĠ Ġ@ get : Query (" select Ġ* Ġfrom ĠPROFITS ") ĊĠĠĠ Ġval Ġall Pro fits : ĠList < Profit Entity >? ĊĊĠĠĠ Ġ@ Insert ĊĠĠĠ Ġfun Ġinsert Profit ( profit : ĠPro fit Entity ): ĠLong ĊĊĠĠĠ Ġ@ Query (" delete Ġfrom ĠPROFITS Ġwhere Ġprofit _ id Ġ= Ġ: profit ID ") ĊĠĠĠ Ġfun Ġdelete Profit ( profit ID : ĠLong ) ĊĊĠĠĠ Ġ@ get : Query (" select Ġ* Ġfrom ĠPROF IT _ TYPES ") ĊĠĠĠ Ġval Ġall Profit Types : ĠList < Profit Type Entity >? ĊĊĠĠĠ Ġ@ Insert ĊĠĠĠ Ġfun Ġinsert Profit Type ( profit Type : ĠPro fit Type Entity ) ĊĊĠĠĠ Ġ@ Delete ĊĠĠĠ Ġfun Ġdelete Profit Type ( profit Type : ĠPro fit Type Entity ) ĊĊĠĠĠ Ġ@ get : Query (""" ĊĠĠĠĠĠĠĠ Ġselect ĠDATE , ĠW OR TH , ĠC ATEG ORY , ĠCOMMENT , ĠTAG , ĠID ĊĠĠĠĠĠĠĠ Ġfrom Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO . date ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDATE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ, ĠĠ Ġ- O . worth ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠW OR TH ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ, ĠĠ ĠO T . expense _ type ĠĠĠĠĠĠĠĠĠĠĠĠ ĠC ATEG ORY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ, ĠĠ ĠO . comment ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOMMENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ, ĠĠ ĠET . expense _ tag ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ, ĠĠ ĠO . expense _ id ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom ĠEXP ENSE S ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Ġjoin ĠEXP ENSE _ TYPES ĠĠĠĠĠĠĠ ĠO T ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon ĠO . expense _ type _ id Ġ= ĠO T . expense _ type _ id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġouter Ġjoin ĠEXP ENSE _ TAGS ĠĠĠ ĠET ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon ĠO . expense _ tag _ id Ġ= ĠET . expense _ tag _ id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġunion ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselect ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP . date ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDATE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ, ĠĠ ĠP . worth ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠW OR TH ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ, ĠĠ ĠPT . profit _ type ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC ATEG ORY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ, ĠĠ ĠP . comment ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOMMENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ, ĠĠ ĠPT G . profit _ tag ĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ, ĠĠ ĠP . profit _ id ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom ĠPROFITS ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinner Ġjoin ĠPROF IT _ TYPES ĠĠĠĠĠĠĠĠ ĠPT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon ĠP . profit _ type _ id Ġ= ĠPT . profit _ type _ id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleft Ġouter Ġjoin ĠPROF IT _ TAGS ĠĠĠĠ ĠPT G ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon ĠPT G . profit _ tag _ id Ġ= ĠP . profit _ tag _ id ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġorder Ġby ĠDATE Ġdesc ĊĠĠĠ Ġ"" ") ĊĠĠĠ Ġval Ġfull Report : ĠList < Report Record >? ĊĊĠĠĠ Ġ@ Query (""" ĊĠĠĠĠĠĠĠ Ġselect ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsum ( worth ) ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM ONE Y _ SP ENT ĊĠĠĠĠĠĠĠ Ġfrom ĠEXP ENSE S ĊĠĠĠĠĠĠĠ Ġwhere Ġdate Ġbetween Ġ: startDate Ġand Ġ: endDate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġexpense _ type _ id Ġ!= Ġ 3 ĠĠĠ Ġ-- ĠOTHER ĊĠĠĠ Ġ"" ") ĊĠĠĠ Ġfun Ġhow M uch Money Is Sp ent Between ( startDate : ĠLocalDate , ĠendDate : ĠLocalDate ): ĠMoney ĊĊĠĠĠ Ġ@ Query (""" ĊĠĠĠĠĠĠĠ Ġselect ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsum ( worth ) ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM ONE Y _ SP ENT ĊĠĠĠĠĠĠĠ Ġfrom ĠEXP ENSE S ĊĠĠĠĠĠĠĠ Ġwhere Ġdate Ġbetween Ġ: startDate Ġand Ġ: endDate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġexpense _ type _ id Ġ= Ġ 1 ĠĠĠĠ Ġ-- ĠDA IL Y ĊĠĠĠ Ġ"" ") ĊĠĠĠ Ġfun Ġhow M uch Daily Money Is Sp ent Between ( startDate : ĠLocalDate , ĠendDate : ĠLocalDate ): ĠMoney ĊĊĠĠĠ Ġ@ Query (""" ĊĠĠĠĠĠĠĠ Ġselect Ġbudget _ worth ĊĠĠĠĠĠĠĠ Ġfrom ĠB UD GET ĊĠĠĠĠĠĠĠ Ġwhere Ġfirst _ day _ date Ġ= Ġ: first Day Date ĊĠĠĠ Ġ"" ") ĊĠĠĠ Ġfun ĠgetCurrent Budget ( first Day Date : ĠLocalDate ): ĠMoney ? ĊĊĠĠĠ Ġ@ Insert ( on Conflict Ġ= ĠOn Conflict Strategy . REPLACE ) ĊĠĠĠ Ġfun ĠsetCurrent Budget ( budget Entity : ĠBudget Entity ) ĊĊĠĠĠ Ġ@ Query (""" ĊĠĠĠĠĠĠĠ Ġselect ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate ĠĠĠĠĠĠĠĠĠĠĠ ĠDATE ĊĠĠĠĠĠĠĠ Ġ, ĠĠ Ġsum ( worth ) ĠĠĠĠĠ ĠSP ENT ĊĠĠĠĠĠĠĠ Ġfrom ĠEXP ENSE S ĊĠĠĠĠĠĠĠ Ġwhere Ġdate Ġbetween Ġ: startDate Ġand Ġ: endDate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġexpense _ type _ id Ġ!= Ġ 3 ĠĠĠĠĠĠĠ Ġ-- ĠOTHER ĊĠĠĠĠĠĠĠ Ġgroup Ġby Ġdate ĊĠĠĠĠĠĠĠ Ġorder Ġby Ġdate ĊĠĠĠ Ġ"" ") ĊĠĠĠ Ġfun Ġget Daily Sp ent Between ( startDate : ĠLocalDate , ĠendDate : ĠLocalDate ): ĠList < Sp ent Record > ĊĊĠĠĠ Ġ@ Query (""" ĊĠĠĠĠĠĠĠ Ġselect ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate ĊĠĠĠĠĠĠĠ Ġfrom ĠPROFITS ĊĠĠĠĠĠĠĠ Ġwhere Ġprofit _ type _ id Ġ= Ġ 1 ĠĠĠ Ġ-- ĠSAL ARY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġdate Ġbetween Ġ: startDate Ġand Ġ: endDate ĊĠĠĠĠĠĠĠ Ġgroup Ġby Ġdate ĊĠĠĠĠĠĠĠ Ġorder Ġby Ġdate Ġdesc ĊĠĠĠ Ġ"" ") ĊĠĠĠ Ġfun Ġget Closest Sal aries ( startDate : ĠLocalDate , ĠendDate : ĠLocalDate ): ĠList < LocalDate > ĊĊĠĠĠ Ġ@ Query (""" ĊĠĠĠĠĠĠĠ Ġselect ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate ĠĠĠĠĠĠĠĠĠĠĠ ĠDATE ĊĠĠĠĠĠĠĠ Ġ, ĠĠ Ġsum ( worth ) ĠĠĠĠĠ ĠSP ENT ĊĠĠĠĠĠĠĠ Ġfrom ĠEXP ENSE S ĊĠĠĠĠĠĠĠ Ġwhere Ġdate Ġbetween Ġ: startDate Ġand Ġ: endDate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġexpense _ type _ id Ġ= Ġ: expense TypeID ĊĠĠĠĠĠĠĠ Ġgroup Ġby Ġdate ĊĠĠĠĠĠĠĠ Ġorder Ġby Ġdate ĊĠĠĠ Ġ"" ") ĊĠĠĠ Ġfun Ġget Daily Sp ent Between ( ĊĠĠĠĠĠĠĠ ĠstartDate : ĠLocalDate , ĊĠĠĠĠĠĠĠ ĠendDate : ĠLocalDate , ĊĠĠĠĠĠĠĠ Ġexpense TypeID : ĠInt ): ĠList < Sp ent Record > ĊĊĠĠĠ Ġ@ Insert ĊĠĠĠ Ġfun Ġinsert Profit Tag ( profit Tag : ĠPro fit Tag Entity ): ĠLong ĊĊĠĠĠ Ġ@ Insert ĊĠĠĠ Ġfun Ġinsert Expense Tag ( expense Tag : ĠExp ense Tag Entity ): ĠLong ĊĊĠĠĠ Ġ@ get : Query (" select Ġ* Ġfrom ĠPROF IT _ TAGS ") ĊĠĠĠ Ġval Ġall Profit Tags : ĠList < Profit Tag Entity >? ĊĊĠĠĠ Ġ@ get : Query (" select Ġ* Ġfrom ĠEXP ENSE _ TAGS ") ĊĠĠĠ Ġval Ġall Expense Tags : ĠList < Expense Tag Entity >? ĊĊĠĠĠ Ġ@ Query (""" ĊĠĠĠĠĠĠĠ Ġselect ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpense _ tag _ id ĊĠĠĠĠĠĠĠ Ġfrom ĠEXP ENSE S ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe 1 ĊĠĠĠĠĠĠĠ Ġwhere Ġe 1 . expense _ id Ġ= Ġ: expense ID ĊĠĠĠ Ġ"" ") ĊĠĠĠ Ġfun Ġget Expense Tag ID From Expense ID ( expense ID : ĠLong ): ĠLong ? ĊĊĠĠĠ Ġ@ Query (""" ĊĠĠĠĠĠĠĠ Ġselect ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofit _ tag _ id ĊĠĠĠĠĠĠĠ Ġfrom ĠPROFITS ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 1 ĊĠĠĠĠĠĠĠ Ġwhere Ġp 1 . profit _ id Ġ= Ġ: profit ID ĊĠĠĠ Ġ"" ") ĊĠĠĠ Ġfun Ġget Profit Tag ID From Profit ID ( profit ID : ĠLong ): ĠLong ? ĊĊĠĠĠ Ġ@ Query (""" ĊĠĠĠĠĠĠĠ Ġselect ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount ( expense _ id ) ĠĠĠĠĠĠ ĠPOP ULAR ITY _ OF _ EXP ENSE _ TAG ĊĠĠĠĠĠĠĠ Ġfrom ĠEXP ENSE S ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe 1 ĊĠĠĠĠĠĠĠ Ġwhere Ġe 1 . expense _ tag _ id Ġ= Ġ: expense Tag ID ĊĠĠĠ Ġ"" ") ĊĠĠĠ Ġfun Ġcheck How Pop ular Expense Tag Is ( expense Tag ID : ĠLong ): ĠLong ĊĊĠĠĠ Ġ@ Query (""" ĊĠĠĠĠĠĠĠ Ġselect ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount ( profit _ id ) ĠĠĠĠĠĠ ĠPOP ULAR ITY _ OF _ PRO FIT _ TAG ĊĠĠĠĠĠĠĠ Ġfrom ĠPROFITS ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 1 ĊĠĠĠĠĠĠĠ Ġwhere Ġp 1 . profit _ tag _ id Ġ= Ġ: profit Tag ID ĊĠĠĠ Ġ"" ") ĊĠĠĠ Ġfun Ġcheck How Pop ular Profit Tag Is ( profit Tag ID : ĠLong ): ĠLong ĊĊĠĠĠ Ġ@ Query (" delete Ġfrom ĠEXP ENSE _ TAGS Ġwhere Ġexpense _ tag _ id Ġ= Ġ: expense Tag ID ") ĊĠĠĠ Ġfun Ġdelete Expense Tag ( expense Tag ID : ĠLong ) ĊĊĠĠĠ Ġ@ Query (" delete Ġfrom ĠPROF IT _ TAGS Ġwhere Ġprofit _ tag _ id Ġ= Ġ: profit Tag ID ") ĊĠĠĠ Ġfun Ġdelete Profit Tag ( profit Tag ID : ĠLong ) ĊĊ Ċ } Ċ