package Ġio . github . sky walk erd ar ren . simple accounting . view _ model čĊč Ċ import Ġandroid . text . TextUtils č Ċ import Ġandroidx . lifecycle . LiveData č Ċ import Ġandroidx . lifecycle . Mutable LiveData č Ċ import Ġandroidx . lifecycle . Transform ations č Ċ import Ġandroidx . lifecycle . ViewModel č Ċ import Ġio . github . sky walk erd ar ren . simple accounting . model . entity . Account č Ċ import Ġio . github . sky walk erd ar ren . simple accounting . model . entity . Bill č Ċ import Ġio . github . sky walk erd ar ren . simple accounting . model . entity . Type č Ċ import Ġio . github . sky walk erd ar ren . simple accounting . model . repository . App Repository č Ċ import Ġorg . joda . time . DateTime č Ċ import Ġjava . math . BigDecimal čĊč Ċ /** čĊ Ġ* Ġ@ author Ġdar ren čĊ Ġ* Ġ@ date Ġ 2 0 1 8 / 4 / 4 čĊ Ġ*/ č Ċ class ĠBill Edit ViewModel ( private Ġval Ġm Repository : ĠApp Repository ) Ġ: ĠViewModel () Ġ{ čĊčĊĠĠĠ Ġval Ġis Expense Ġ= ĠMutable LiveData < Boolean >( true ) čĊĠĠĠ Ġval Ġtypes Ġ= ĠTransform ations . switch Map ( is Expense ) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpense Types čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġincome Types čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊĠĠĠ Ġval Ġbalance Ġ= ĠMutable LiveData < String ?> () čĊĠĠĠ Ġval Ġbill Ġ= ĠMutable LiveData < Bill >() čĊĠĠĠ Ġvar Ġtype Ġ= ĠMutable LiveData < Type >() čĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue čĊĠĠĠĠĠĠĠĠĠĠĠ Ġbill . value ?. type Id Ġ= Ġtype . value ?. uuid Ġ?: Ġreturn čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġvar Ġaccount Ġ= ĠMutable LiveData < Account >() čĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue čĊĠĠĠĠĠĠĠĠĠĠĠ Ġbill . value ?. accountId Ġ= Ġtype . value ?. uuid Ġ?: Ġreturn čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġprivate Ġval Ġexpense Types Ġ= ĠMutable LiveData < List < Type >>() čĊĠĠĠ Ġprivate Ġval Ġincome Types Ġ= ĠMutable LiveData < List < Type >>() čĊĠĠĠ Ġprivate Ġval Ġaccounts Ġ= ĠMutable LiveData < List < Account >>() čĊčĊĠĠĠ Ġfun Ġset Bill ( b : ĠBill ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġ// Ġempty Ġbill čĊĠĠĠĠĠĠĠ Ġif Ġ( b Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Repository . get Accounts Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccount Ġ= Ġit ?. get ( 0 ) Ġ?: Ġreturn @ get Accounts čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Bill Edit ViewModel . account . value Ġ= Ġaccount čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Repository . get Types ( true ) Ġ{ Ġtypes Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġtypes ?. get ( 0 ) Ġ?: Ġreturn @ get Types čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Bill Edit ViewModel . type . value Ġ= Ġtype čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbill . value Ġ= ĠBill ( type . uuid , Ġaccount . uuid , ĠDateTime (), Ġtype . name ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġbill . value Ġ= Ġb čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Repository . get Account ( b . accountId ) Ġ{ Ġthis @ Bill Edit ViewModel . account . value Ġ= Ġit Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Repository . getType ( b . type Id ) Ġ{ Ġtype Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Bill Edit ViewModel . type . value Ġ= Ġtype Ġ?: Ġreturn @ getType čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġbalance . value Ġ= Ġif Ġ( b . balance Ġ== Ġnull ) Ġnull Ġelse Ġb . balance . toString () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* Ġ ä¿ĿåŃĺ è´¦ åįķ čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġfun Ġsave Bill ( failed : ĠSave Failed ): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġfinal Bill Ġ= Ġbill . value čĊĠĠĠĠĠĠĠ Ġval Ġfinal Account Ġ= Ġaccount . value čĊĠĠĠĠĠĠĠ Ġval Ġfinal Type Ġ= Ġtype . value čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( balance . value ) Ġ|| čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Bill Ġ== Ġnull Ġ|| čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Account Ġ== Ġnull Ġ|| čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Type Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfailed . save Failed (" è´¦ åįķ ä¸įèĥ½ä¸ºç©º ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġfinal Bill . accountId Ġ= Ġfinal Account . uuid čĊĠĠĠĠĠĠĠ Ġfinal Bill . type Id Ġ= Ġfinal Type . uuid čĊĠĠĠĠĠĠĠ Ġfinal Bill . name Ġ= Ġfinal Type . name čĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= ĠBigDecimal ( balance . value ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( r Ġ== ĠBigDecimal . ZERO ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfailed . save Failed (" è´¦ åįķ ä¸įèĥ½ ä¸º 0 ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Bill . balance Ġ= Ġr čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĪ·æĸ° è´¦ åįķ æķ°æį®åºĵ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Repository . get Bill ( final Bill . uuid ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Repository . add Bill ( final Bill ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Bill . id Ġ= Ġit . id čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal Bill . uuid Ġ= Ġit . uuid čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Repository . update Bill ( final Bill ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfailed . save Failed (" è¡¨è¾¾å¼ı éĶĻè¯¯ ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġget Types ( b : ĠBoolean ): ĠLive Data < List < Type >> Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( b ) Ġexpense Types Ġelse Ġincome Types čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġget Accounts (): ĠLive Data < List < Account >> Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġaccounts čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġinterface ĠSave Failed Ġ{ čĊĠĠĠĠĠĠĠ Ġfun Ġsave Failed ( msg : ĠString ?) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġinit Ġ{ čĊĠĠĠĠĠĠĠ Ġm Repository . get Types ( true ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpense Types . value Ġ= Ġit čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġm Repository . get Types ( false ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġincome Types . value Ġ= Ġit čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġm Repository . get Accounts Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Bill Edit ViewModel . accounts . value Ġ= Ġit čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} č Ċ }