package Ġcom . example . wood in vo ic etest Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . widget . TableRow Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġcom . example . wood in vo ic etest . databinding . Activity Show Single Invoice Binding Ċ import Ġkotlinx . android . synt hetic . main . activity _ show _ single _ invoice .* Ċ Ċ class ĠShow Single Invoice Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġ@ Suppress Lint (" SetText I 1 8 n ") ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġval Ġbinding : ĠActivity Show Single Invoice Binding Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Binding Util . set ContentView ( this , ĠR . layout . activity _ show _ single _ invoice ) ĊĠĠĠĠĠĠĠ Ġval Ġinvoice Number Ġ= Ġintent . getString Extra (" invoice Id ") ĊĠĠĠĠĠĠĠ Ġval Ġinvoice Notes Ġ= Ġintent . getString Extra (" invoice Note ") ĊĠĠĠĠĠĠĠ Ġval Ġinvoice S old Ġ= Ġintent . getString Extra (" invoice S old ") ĊĠĠĠĠĠĠĠ Ġval Ġnet Invoice Value Ġ= Ġintent . getString Extra (" net Invoice Value ") ĊĊĠĠĠĠĠĠĠ Ġval Ġapplication Ġ= Ġrequire NotNull ( this ). application ĊĠĠĠĠĠĠĠ Ġval ĠdataSource Ġ= ĠW ood In voices Database . getInstance ( application ). wood Invoice Dao ĊĠĠĠĠĠĠĠ Ġval Ġwood In voices ViewModel Factory Ġ= ĠW ood In voices ViewModel Factory ( dataSource , Ġapplication ) ĊĠĠĠĠĠĠĠ Ġval Ġwood In voices ViewModel Ġ= ĠViewModel Providers . of ( this , Ġwood In voices ViewModel Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( W ood In voices ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġbinding . wood In voices ViewModel Ġ= Ġwood In voices ViewModel ĊĊĠĠĠĠĠĠĠ Ġvar Ġinvoice Total Sum Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġfirst Row Ġ= ĠTable Row ( this ) ĊĠĠĠĠĠĠĠ Ġcreate Table Columns Titles ( first Row ) ĊĠĠĠĠĠĠĠ Ġinvoice Table . addView ( first Row ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmy Live D At a Observer Ġ= ĠObserver < List < Products Table >> Ġ{ Ġproducts List Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( ordered Product I Ġin Ġproducts List . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproduct I Ġ= Ġproducts List [ ordered Product I ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrow Ġ= ĠTable Row ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproduct Number Ġ= Ġordered Product I Ġ+ Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow One Product ( product I , Ġrow , Ġproduct Number ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvoice Table . addView ( row ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvoice Total Sum Ġ+= Ġproduct I . total Price ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Price . text Ġ= Ġdecimal Format Ch anger . format ( invoice Total Sum ). toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( invoice Number Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwood In voices ViewModel . get Products ( invoice Number ). observe ( this , Ġmy Live D At a Observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvoice Number Text view . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ${ getString ( R . string . invoice Number Place Holder )} Ġ$ invoice Number """ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvoice Note Text . text Ġ= Ġinvoice Notes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġs oldValue Text . text Ġ= Ġinvoice S old ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnet Value Text . text Ġ= Ġdecimal Format Ch anger . format ( net Invoice Value . toDouble ()). toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Table Columns Titles ( row : ĠTable Row ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġinvoice Text Ġ= ĠgetString ( R . string . id Text ) ĊĠĠĠĠĠĠĠ Ġcreate TextView ( row , Ġinvoice Text ) ĊĠĠĠĠĠĠĠ Ġinvoice Text Ġ= ĠgetString ( R . string . properties Label Text ) ĊĠĠĠĠĠĠĠ Ġcreate TextView ( row , Ġinvoice Text ) ĊĠĠĠĠĠĠĠ Ġinvoice Text Ġ= ĠgetString ( R . string . total Number Short Text ) ĊĠĠĠĠĠĠĠ Ġcreate TextView ( row , Ġinvoice Text ) ĊĠĠĠĠĠĠĠ Ġinvoice Text Ġ= ĠgetString ( R . string . total Volume Short Text ) ĊĠĠĠĠĠĠĠ Ġcreate TextView ( row , Ġinvoice Text ) ĊĠĠĠĠĠĠĠ Ġinvoice Text Ġ= ĠgetString ( R . string . unit Price Text ) ĊĠĠĠĠĠĠĠ Ġcreate TextView ( row , Ġinvoice Text ) ĊĠĠĠĠĠĠĠ Ġinvoice Text Ġ= ĠgetString ( R . string . total Price Text ) ĊĠĠĠĠĠĠĠ Ġcreate TextView ( row , Ġinvoice Text ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate TextView ( row : ĠTable Row , Ġinvoice Text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠtextView : ĠTextView Ġ= ĠTextView ( this ) ĊĠĠĠĠĠĠĠ ĠtextView . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params Ġ= ĠTable Row . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTable Row . LayoutParams . WRAP _ CONTENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTable Row . LayoutParams . WRAP _ CONTENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġinvoice Text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Size Ġ= Ġ 1 6 F ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgravity Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠtextView . margin ( 2 F , Ġ 2 F , Ġ 2 F , Ġ 2 F ) ĊĠĠĠĠĠĠĠ Ġrow . addView ( textView ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow One Product ( product I : ĠProducts Table , Ġrow : ĠTable Row , Ġproduct Number : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġinvoice Text Ġ= Ġif Ġ( product Number Ġ< Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ 0 0 $ product Number Ġ Ġ" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ 0 $ product Number Ġ Ġ" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcreate TextView ( row , Ġinvoice Text ) ĊĠĠĠĠĠĠĠ Ġinvoice Text Ġ= Ġproduct I . market ProductName ĊĊĠĠĠĠĠĠĠ Ġif Ġ( product I . product Width Ġ> Ġ 0 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvoice Text Ġ+= Ġ""" Ġ${ getString ( R . string . width Text )} Ġ${ ( product I . product Width Ġ* Ġ 1 0 0 )} Ġ Ġ${ getString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . cm ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)} Ġ""" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( product I . product Thickness Ġ> Ġ 0 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvoice Text Ġ+= Ġ""" Ġ${ getString ( R . string . thickness Text )} Ġ${ ( product I . product Thickness Ġ* Ġ 1 0 0 0 )} Ġ${ getString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . mm ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)} Ġ""" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( product I . product Length Ġ> Ġ 0 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvoice Text Ġ+= Ġ""" Ġ${ getString ( R . string . length Text )} Ġ${ product I . product Length } Ġ${ getString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . m ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)} Ġ""" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( product I . product Property 1 . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvoice Text Ġ+= Ġ""" Ġ${ product I . product Property 1 } Ġ""" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( product I . product Property 2 . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvoice Text Ġ+= Ġ""" Ġ${ product I . product Property 2 } Ġ""" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( product I . product Property 3 . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvoice Text Ġ+= Ġ""" Ġ${ product I . product Property 3 } Ġ""" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcreate TextView ( row , Ġinvoice Text ) ĊĠĠĠĠĠĠĠ Ġinvoice Text Ġ= Ġif Ġ( product I . numberOf Units Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" Ġ${ product I . numberOf Units } Ġ""" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" Ġ${ getString ( R . string . not Given Text )} Ġ""" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcreate TextView ( row , Ġinvoice Text ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( product I . product Type Ġ== ĠProduct Type . S awn wood . toString ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvoice Text Ġ= Ġ""" ${ product I . total Volume } Ġ Ġ${ getString ( R . string . m 3 Unit )} Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate TextView ( row , Ġinvoice Text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( product I . product Type Ġ== ĠProduct Type . P ly wood . toString ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvoice Text Ġ= Ġ""" Ġ${ getString ( R . string . not Given Text )} Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate TextView ( row , Ġinvoice Text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinvoice Text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ${ decimal Format Ch anger . format ( product I . unit Price )} Ġ${ getString ( R . string . currency Unit Text )} Ġ""" ĊĠĠĠĠĠĠĠ Ġcreate TextView ( row , Ġinvoice Text ) ĊĠĠĠĠĠĠĠ Ġinvoice Text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ${ decimal Format Ch anger . format ( product I . total Price )} Ġ${ getString ( R . string . currency Unit Text )} Ġ""" ĊĠĠĠĠĠĠĠ Ġcreate TextView ( row , Ġinvoice Text ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ