package Ġser g . ch up rin . fin ances . feature . transaction . domain . use case Ċ Ċ import Ġser g . ch up rin . fin ances . core . api . domain . model . Id Ċ import Ġser g . ch up rin . fin ances . core . api . domain . model . category . Category Ċ import Ġser g . ch up rin . fin ances . core . api . domain . model . money account . Money Account Ċ import Ġser g . ch up rin . fin ances . core . api . domain . model . transaction . Plain Transaction Type Ċ import Ġser g . ch up rin . fin ances . core . api . domain . model . transaction . Transaction Type Ċ import Ġser g . ch up rin . fin ances . core . api . domain . model . transaction . query . Transactions Query Ċ import Ġser g . ch up rin . fin ances . core . api . domain . repository . Transaction Repository Ċ import Ġser g . ch up rin . fin ances . feature . transaction . domain . model . Transaction Ch osen Operation Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . LocalDateTime Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠSer ge y ĠCh up rin Ġon Ġ 0 3 . 0 1 . 2 0 2 1 . Ċ Ġ*/ Ċ class ĠEdit Transaction UseCase Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġtransaction Repository : ĠTransaction Repository Ċ ) Ġ{ ĊĊĠĠĠ Ġsuspend Ġfun Ġexecute ( ĊĠĠĠĠĠĠĠ Ġtransaction Id : ĠId , ĊĠĠĠĠĠĠĠ Ġowner Id : ĠId , ĊĠĠĠĠĠĠĠ Ġnew Date : ĠLocalDate , ĊĠĠĠĠĠĠĠ Ġamount : ĠBigDecimal , ĊĠĠĠĠĠĠĠ Ġmoney Account : ĠMoney Account , ĊĠĠĠĠĠĠĠ Ġcategory : ĠCategory ?, ĊĠĠĠĠĠĠĠ Ġoperation : ĠTransaction Ch osen Operation , ĊĠĠĠĠĠĠĠ Ġexisting DateTime : ĠLocalDateTime ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtransaction Type Ġ= Ġwhen Ġ( operation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠTransaction Ch osen Operation . Plain Ġ-> ĠTransaction Type . PLAIN ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġupdated Transaction Ġ= Ġget Transaction ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġowner Id Ġ= Ġowner Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Id Ġ= Ġtransaction Id ĊĠĠĠĠĠĠĠ Ġ). copy ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġtransaction Type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Id Ġ= Ġcategory ?. id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmoney AccountId Ġ= Ġmoney Account . id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ dateTime Ġ= Ġadjust DateTime ( new Date , Ġexisting DateTime ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ amount Ġ= Ġnormalize Amount ( operation , Ġamount ). toString () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġtransaction Repository . create OrUpdate ( listOf ( updated Transaction )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIf Ġnew Ġdate 's Ġday Ġis Ġthe Ġsame Ġas Ġexisting , Ġuse Ġit Ġwithout Ġchanging . ĊĠĠĠĠ Ġ* ĠOtherwise Ġuse Ġnew Ġdate Ġwith Ġtime Ġset Ġto Ġday Ġstart . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġadjust DateTime ( ĊĠĠĠĠĠĠĠ Ġnew Date : ĠLocalDate , ĊĠĠĠĠĠĠĠ Ġexisting DateTime : ĠLocalDateTime ĊĠĠĠ Ġ): ĠLocalDateTime Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( new Date Ġ== Ġexisting DateTime . to LocalDate ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexisting DateTime ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Date . at Start OfDay () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġget Transaction ( ĊĠĠĠĠĠĠĠ Ġowner Id : ĠId , ĊĠĠĠĠĠĠĠ Ġtransaction Id : ĠId ĊĠĠĠ Ġ) Ġ= Ġtransaction Repository ĊĠĠĠĠĠĠĠ Ġ. transactions ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransactions Query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġowner Id Ġ= Ġowner Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransaction Ids Ġ= Ġset Of ( transaction Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ. first () ĊĊĠĠĠ Ġprivate Ġfun Ġnormalize Amount ( ĊĠĠĠĠĠĠĠ Ġoperation : ĠTransaction Ch osen Operation . Plain , ĊĠĠĠĠĠĠĠ Ġamount : ĠBigDecimal ĊĠĠĠ Ġ): ĠBigDecimal Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperation . is Plain () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( operation . type Ġ== ĠPlain Transaction Type . EXP ENSE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount . neg ate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamount ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġamount ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }