package Ġcom . y ash ov ard han 9 9 . core . backup _ restore Ċ Ċ import Ġcom . y ash ov ard han 9 9 . core . database . He aling Ċ import Ġcom . y ash ov ard han 9 9 . core . database . Patient Ċ import Ġcom . y ash ov ard han 9 9 . core . database . Payment Ċ import Ġkotlin . math . round ToInt Ċ Ċ object ĠBackup Utils Ġ{ ĊĠĠĠ Ġfun Ġget Csv Row ( var arg Ġfields : ĠAny ): ĠString Ġ= ĊĠĠĠĠĠĠĠ Ġfields . join ToString (",") Ġ{ Ġit . toString (). escape String () Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠString . escape String (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( contains ("\ n ") Ġ|| Ġcontains ("\" ") Ġ|| Ġcontains ("," )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\"" Ġ+ Ġreplace (" \"", Ġ"\" \" ") Ġ+ Ġ"\"" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Expected Size ( type : ĠDataType ) Ġ= Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠ ĠDataType . He al ings Ġ-> Ġ 5 ĊĠĠĠĠĠĠĠ ĠDataType . Pat ients Ġ-> Ġ 7 ĊĠĠĠĠĠĠĠ ĠDataType . Payments Ġ-> Ġ 5 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Headers ( type : ĠDataType ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDataType . He al ings Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHe aling :: id . name , ĠHe aling :: time . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHe aling :: charge . name , ĠHe aling :: notes . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHe aling :: patient Id . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDataType . Pat ients Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPatient :: id . name , ĠPatient :: name . name , ĠPatient :: charge . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPatient :: due . name , ĠPatient :: notes . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPatient :: lastModified . name , ĠPatient :: created . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDataType . Payments Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPayment :: id . name , ĠPayment :: time . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPayment :: amount . name , ĠPayment :: notes . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPayment :: patient Id . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetCurrent Progress ( ĊĠĠĠĠĠĠĠ Ġcurrent Mask : ĠInt , ĊĠĠĠĠĠĠĠ Ġselected Mask : ĠInt , ĊĠĠĠĠĠĠĠ Ġdone : ĠInt Array Ġ= ĠInt Array ( 3 ), ĊĠĠĠĠĠĠĠ Ġtotal : ĠInt Array Ġ= ĠInt Array ( 3 ) ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcur Progress Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( current Mask Ġ> ĠDataType . Pat ients . mask Ġ&& ĠDataType . Pat ients Ġin Ġselected Mask ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcur Progress Ġ+= ĠDataType . Pat ients . max Progress ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( current Mask Ġ== ĠDataType . Pat ients . mask ) Ġcur Progress Ġ+= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetType Progress ( DataType . Pat ients , Ġdone [ 0 ], Ġtotal [ 0 ]) ĊĠĠĠĠĠĠĠ Ġif Ġ( current Mask Ġ> ĠDataType . He al ings . mask Ġ&& ĠDataType . He al ings Ġin Ġselected Mask ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcur Progress Ġ+= ĠDataType . He al ings . max Progress ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( current Mask Ġ== ĠDataType . He al ings . mask ) Ġcur Progress Ġ+= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetType Progress ( DataType . He al ings , Ġdone [ 1 ], Ġtotal [ 1 ]) ĊĠĠĠĠĠĠĠ Ġif Ġ( current Mask Ġ> ĠDataType . Payments . mask Ġ&& ĠDataType . Payments Ġin Ġselected Mask ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcur Progress Ġ+= ĠDataType . Payments . max Progress ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( current Mask Ġ== ĠDataType . Payments . mask ) Ġcur Progress Ġ+= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetType Progress ( DataType . Payments , Ġdone [ 2 ], Ġtotal [ 2 ]) ĊĠĠĠĠĠĠĠ Ġreturn Ġcur Progress ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetMax Progress ( ĊĠĠĠĠĠĠĠ Ġselected Mask : ĠInt , ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmax Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( DataType . Pat ients Ġin Ġselected Mask ) Ġmax Ġ+= ĠDataType . Pat ients . max Progress ĊĠĠĠĠĠĠĠ Ġif Ġ( DataType . He al ings Ġin Ġselected Mask ) Ġmax Ġ+= ĠDataType . He al ings . max Progress ĊĠĠĠĠĠĠĠ Ġif Ġ( DataType . Payments Ġin Ġselected Mask ) Ġmax Ġ+= ĠDataType . Payments . max Progress ĊĠĠĠĠĠĠĠ Ġreturn Ġmax ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetType Progress ( ĊĠĠĠĠĠĠĠ Ġtype : ĠDataType , ĊĠĠĠĠĠĠĠ Ġdone : ĠInt , ĊĠĠĠĠĠĠĠ Ġtotal : ĠInt ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( total Ġ== Ġ 0 ) Ġ 0 ĊĠĠĠĠĠĠĠ Ġelse Ġ( done . toFloat () Ġ/ Ġtotal Ġ* Ġtype . max Progress ). round ToInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠInput Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠPAT IENT S _ FILE _ URI _ KEY Ġ= Ġ" patient _ file _ uri " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠHE AL INGS _ FILE _ URI _ KEY Ġ= Ġ" he al ings _ file _ uri " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠP AY MENTS _ FILE _ URI _ KEY Ġ= Ġ" payments _ file _ uri " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDATA _ TYPE _ KEY Ġ= Ġ" data _ type " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠExport Folder Uri Key Ġ= Ġ" export _ folder _ uri " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠProgress Ġconstants Ġfor Ġsending Ġupdates Ġand Ġresults ĊĠĠĠ Ġobject ĠProgress Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠProgress Message Ġ= Ġ" progress _ message " Ġ// ĠMessage Ġbeing Ġshown Ġin Ġnotification ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠRequired Bit Ġ= Ġ" required _ bit " Ġ// ĠThe Ġdata Ġtype ( s ) Ġbit Ġrequired Ġto Ġbe Ġhandled ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCurrent Bit Ġ= Ġ" current _ bit " Ġ// ĠThe Ġdata Ġtype Ġbit Ġbeing Ġcurrently Ġbeing Ġhandled ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTimestamp Ġ= Ġ" timestamp " Ġ// ĠTime Ġin Ġms Ġof Ġthe Ġlast Ġupdate ĊĊĠĠĠĠĠĠĠ Ġ// ĠInt Array Ġwill Ġalways Ġbe Ġin Ġorder Ġ[ Pat ients , ĠHe al ings , ĠPay ments ] ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠExport Counts Ġ= Ġ" export _ count " Ġ// ĠInt Array Ġcontaining Ġthe Ġno . Ġof Ġexports Ġdone ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠExport Total Ġ= Ġ" export _ total " Ġ// ĠInt Array Ġcontaining Ġthe Ġtotal Ġno . Ġto Ġexport ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠFile Error Bit Ġ= Ġ" file _ error _ bit " Ġ// ĠBit Ġmask Ġof Ġwhere Ġthe Ġfile Ġerror Ġoccurred ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠImport Success Ġ= Ġ" import _ success " Ġ// ĠInt Array Ġcontaining Ġthe Ġno . Ġof Ġsuc cesses ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠImport Failure Ġ= Ġ" import _ failure " Ġ// ĠInt Array Ġcontaining Ġthe Ġno . Ġof Ġfailures ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠInvalid Format Bit Ġ= Ġ" invalid _ format _ bit " Ġ// ĠBit Ġof Ġwhere Ġinvalid Ġformat Ġwas Ġfound ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsealed Ġclass ĠDataType ( val Ġmask : ĠInt , Ġval Ġidx : ĠInt , Ġval Ġmax Progress : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġobject ĠPat ients Ġ: ĠDataType ( 1 Ġshl Ġ 0 , Ġ 0 , Ġ 1 0 ) ĊĠĠĠĠĠĠĠ Ġobject ĠHe al ings Ġ: ĠDataType ( 1 Ġshl Ġ 1 , Ġ 1 , Ġ 2 0 0 ) ĊĠĠĠĠĠĠĠ Ġobject ĠPay ments Ġ: ĠDataType ( 1 Ġshl Ġ 2 , Ġ 2 , Ġ 4 0 ) ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠDone Mask Ġ= Ġ 7 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCheck Ġwhether Ġa Ġ[ DataType ] Ġis Ġincluded Ġin Ġa Ġbit - mask . ĊĠĠĠĠ Ġ* Ġ@ param Ġtype ĠData Ġtype Ġto Ġcheck ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġthe Ġdata Ġtype Ġis Ġincluded Ġin Ġthe Ġgiven Ġmask ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun ĠInt . contains ( type : ĠDataType ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Ġand Ġtype . mask Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInclude Ġthe Ġdata Ġtype Ġin Ġthe Ġbit . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun ĠInt . plus ( type : ĠDataType ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Ġor Ġtype . mask ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemove Ġthe Ġdata Ġtype Ġfrom Ġthe Ġbit , Ġif Ġpresent . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoperator Ġfun ĠInt . minus ( type : ĠDataType ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( type Ġin Ġthis ) Ġthis Ġxor Ġtype . mask ĊĠĠĠĠĠĠĠ Ġelse Ġthis ĊĠĠĠ Ġ} Ċ } Ċ