/* čĊ Ġ* Ġ@ copyright Ġ: ĠTo X SL ĠTechnologies ĠP vt . ĠLtd . Ġ< Ġwww . to xsl . com Ġ> čĊ Ġ* Ġ@ author ĠĠĠĠ Ġ: ĠSh iv ĠChar an ĠPan jeta Ġ< Ġsh iv @ to xsl . com Ġ> čĊ Ġ* ĠAll ĠRights ĠReserved . čĊ Ġ* ĠPro pri etary Ġand Ġconf idential Ġ: Ġ ĠAll Ġinformation Ġcontained Ġherein Ġis , Ġand Ġremains čĊ Ġ* Ġthe Ġproperty Ġof ĠTo X SL ĠTechnologies ĠP vt . ĠLtd . Ġand Ġits Ġpart ners . čĊ Ġ* ĠUnauthorized Ġcopying Ġof Ġthis Ġfile , Ġvia Ġany Ġmedium Ġis Ġstrictly Ġpro hibited . čĊ Ġ* čĊ Ġ*/ čĊč Ċ package Ġcom . signal Doc _ patient . ui . fragment . patient čĊč Ċ import Ġandroid . os . Bundle č Ċ import Ġandroid . util . Log č Ċ import Ġandroid . view . LayoutInflater č Ċ import Ġandroid . view . View č Ċ import Ġandroid . view . ViewGroup č Ċ import Ġandroid . widget . LinearLayout č Ċ import Ġandroidx . constraint layout . widget . Constraint Layout č Ċ import Ġandroidx . core . content . Context Compat č Ċ import Ġandroidx . databinding . Data Binding Util č Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager č Ċ import Ġco . pay stack . android . Transaction č Ċ import Ġco . pay stack . android . model . Charge č Ċ import Ġcom . google . android . material . bottom sheet . Bottom Sheet Behavior č Ċ import Ġcom . google . gson . Gson č Ċ import Ġcom . pro l ific interactive . material calendar view . Calendar Day č Ċ import Ġcom . signal Doc _ patient . Build Config č Ċ import Ġcom . signal Doc _ patient . R č Ċ import Ġcom . signal Doc _ patient . databinding . Fragment Available Appointment Binding č Ċ import Ġcom . signal Doc _ patient . model . Cons ul at ition Data č Ċ import Ġcom . signal Doc _ patient . model . Profile Data č Ċ import Ġcom . signal Doc _ patient . model . Time Slots Data č Ċ import Ġcom . signal Doc _ patient . ui . activity . MainActivity č Ċ import Ġcom . signal Doc _ patient . ui . adapter . A val Appointment Adapter č Ċ import Ġcom . signal Doc _ patient . ui . adapter . Base Adapter č Ċ import Ġcom . signal Doc _ patient . ui . adapter . Doctor Cons ulate Adapter č Ċ import Ġcom . signal Doc _ patient . ui . extensions . handle Exception č Ċ import Ġcom . signal Doc _ patient . ui . extensions . replace Frag With Args č Ċ import Ġcom . signal Doc _ patient . ui . extensions . replace Fragment č Ċ import Ġcom . signal Doc _ patient . ui . fragment . Base Fragment č Ċ import Ġcom . signal Doc _ patient . utils . Const č Ċ import Ġcom . signal Doc _ patient . utils . Day Enable Decorator č Ċ import Ġcom . signal Doc _ patient . utils . pay Stack . CallBack Payment č Ċ import Ġcom . signal Doc _ patient . utils . pay Stack . Payment Gateway č Ċ import Ġcom . to xsl . rest ful Client . api . Api 3 Params č Ċ import Ġkotlinx . android . synt hetic . main . fragment _ available _ appointment .* č Ċ import Ġorg . json . JSONObject č Ċ import Ġjava . lang . Exception č Ċ import Ġjava . util .* č Ċ import Ġkotlin . collections . ArrayList čĊč Ċ class ĠAvailable Appointment Fragment Ġ: ĠBase Fragment () Ġ{ čĊčĊĠĠĠ Ġprivate Ġvar Ġprofile Data : ĠProfile Data ? Ġ= Ġnull čĊčĊĠĠĠ Ġprivate Ġvar Ġbinding : ĠFragment Available Appointment Binding ? Ġ= Ġnull čĊĠĠĠ Ġprivate Ġvar Ġenabled Dates : ĠArrayList < Calendar Day > Ġ= ĠArrayList () čĊĠĠĠ Ġprivate Ġvar Ġtime Slots ArrayList Ġ= ĠArrayList < Time Slots Data >() čĊĠĠĠ Ġprivate Ġvar Ġslots Adapter : ĠAval Appointment Adapter ? Ġ= Ġnull čĊĠĠĠ Ġprivate Ġvar Ġold Position Ġ= Ġ- 1 čĊĠĠĠ Ġprivate Ġvar Ġtime Slots Id : ĠString ? Ġ= Ġnull čĊčĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) čĊĠĠĠĠĠĠĠ Ġarguments ?. let Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile Data Ġ= Ġit . get Parcelable ( Const . PROFILE _ DATA ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ čĊĠĠĠĠĠĠĠ Ġ( base Activity Ġas ĠMainActivity ). set Toolbar ( false , Ġbase Activity !!. getString ( R . string . available _ app ointments ), Ġfalse ) čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( binding Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . inflate ( in flater , ĠR . layout . fragment _ available _ appointment , Ġcontainer , Ġfalse ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġbinding !!. root čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) čĊčĊĠĠĠĠĠĠĠ Ġbinding !!. cal ender V . setOn Date Changed Listener Ġ{ Ġwidget , Ġdate , Ġselected Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Date Ġ= ĠCalendar . getInstance () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Date . set ( Calendar . YEAR , Ġdate . year ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Date . set ( Calendar . MONTH , Ġdate . month Ġ- Ġ 1 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Date . set ( Calendar . DAY _ OF _ MONTH , Ġdate . day ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog (" date _ selection Ġ: Ġ" Ġ+ Ġbase Activity !!. change DateFormat From Date ( selected Date . time , Ġ" yyyy - MM - dd ")) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi Get Doctor Slots ( base Activity !!. change DateFormat From Date ( selected Date . time , Ġ" yyyy - MM - dd ")) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġinit Ui () čĊĠĠĠĠĠĠĠ Ġapi Get Doctor List () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġinit Ui () Ġ{ čĊĠĠĠĠĠĠĠ Ġbinding !!. com firm Bottom . card CV . setOnClickListener ( this ) čĊĠĠĠĠĠĠĠ Ġbinding !!. book App o it ment CV . setOnClickListener ( this ) čĊĠĠĠĠĠĠĠ ĠsetData () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun ĠsetData () Ġ{ čĊĠĠĠĠĠĠĠ Ġbinding !!. dr TV . setText ( getString ( R . string . dr ) Ġ+ Ġ" Ġ" Ġ+ Ġprofile Data !!. fullName ) čĊĠĠĠĠĠĠĠ Ġbinding !!. name TV . setText ( getString ( R . string . dr ) Ġ+ Ġ" Ġ" Ġ+ Ġprofile Data !!. fullName ) čĊĠĠĠĠĠĠĠ Ġif Ġ( profile Data !!. profile File . isNotEmpty ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Activity !!. load Image ( base Activity !! , Ġprofile Data !!. profile File , ĠR . mip map . ic _ default _ profile , Ġbinding !!. image IV ) čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. image IV . setImage Resource ( R . mip map . ic _ default _ profile ) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġset Available Appointment Adapter () Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( slots Adapter Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġslots Adapter Ġ= ĠAval Appointment Adapter ( time Slots ArrayList , Ġthis , Ġbase Activity ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Activity !!. time Slot RV . adapter Ġ= Ġslots Adapter čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġslots Adapter !!. notify DataSet Changed () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ) Ġ{ čĊĠĠĠĠĠĠĠ Ġwhen Ġ( v . id ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . book App o it ment CV Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( validation ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . put Boolean ( Const . IS _ OPEN _ FROM _ TOP _ BUTTON , Ġfalse ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . put Parcelable ( Const . PROFILE _ DATA , Ġprofile Data ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . putString ( Const . SELECTED _ TIME _ SLOT S , time Slots Id ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase Activity !!. replace Frag With Args ( Appointment Info Fragment (), ĠR . id . frame _ container , Ġbundle ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊčĊĠĠĠĠĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġselected Slots ( position : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( old Position Ġ== Ġ- 1 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Position Ġ= Ġposition čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Slots Id Ġ= Ġtime Slots ArrayList [ old Position ]. id . toString () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Slots ArrayList [ old Position ]. isSelected Ġ= Ġtrue čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Slots ArrayList [ old Position ]. isSelected Ġ= Ġfalse čĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Position Ġ= Ġposition čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Slots Id Ġ= Ġtime Slots ArrayList [ old Position ]. id . toString () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Slots ArrayList [ old Position ]. isSelected Ġ= Ġtrue čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġbinding !!. book App o it ment TV . setTextColor ( Context Compat . getColor ( base Activity !! , ĠR . color . White )) čĊĠĠĠĠĠĠĠ Ġbinding !!. book App o it ment TV . set BackgroundColor ( Context Compat . getColor ( base Activity !! , ĠR . color . color Accent )) čĊĠĠĠĠĠĠĠ Ġset Available Appointment Adapter () čĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġoverride Ġfun Ġon Sync Success ( response Code : ĠInt , Ġresponse Message : ĠString , Ġresponse Url : ĠString , Ġresponse : ĠString ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . on Sync Success ( response Code , Ġresponse Message , Ġresponse Url , Ġresponse ) čĊĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠjsonObject Ġ= ĠJSONObject ( response !! ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( response Url ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConst . API _ GET _ DO CTOR _ DATE _ LIST Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Code Ġ== ĠConst . STATUS _ OK ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenabled Dates . clear () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Array Ġ= ĠjsonObject . get JSONArray (" dates ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfirst Date Ġ= Ġjson Array . getString ( 0 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata 1 Ġ= Ġfirst Date . split ("- ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Date Ġ= ĠCalendar Day . from ( data 1 [ 0 ]. toInt (), Ġdata 1 [ 1 ]. toInt (), Ġdata 1 [ 2 ]. toInt ()) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġjson Array . length ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobject 1 Ġ= Ġjson Array . getString ( i ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġobject 1 . split ("- ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenabled Dates . add ( Calendar Day . from ( data [ 0 ]. toInt (), Ġdata [ 1 ]. toInt (), Ġdata [ 2 ]. toInt ())) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. cal ender V . add Decorator ( Day Enable Decorator ( enabled Dates )) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. cal ender V . setSelected Date ( selected Date ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslots Adapter Ġ= Ġnull čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Get Doctor Slots ( first Date ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConst . API _ GET _ DO CTOR _ TIME _ SLOT S _ LIST Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response Code Ġ== ĠConst . STATUS _ OK ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Slots ArrayList . clear () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Array Ġ= ĠjsonObject . get JSONArray (" detail ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġjson Array . length ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobject 1 Ġ= Ġjson Array . getJSONObject ( i ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠGson (). fromJson < Time Slots Data >( object 1 . toString (), ĠTime Slots Data :: class . java ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Slots ArrayList . add ( data ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Available Appointment Adapter () čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Exception ( e ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġapi Get Doctor List () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġcall Ġ= Ġapi !!. api Get Doctor Date List ( profile Data !!. id ) čĊĠĠĠĠĠĠĠ Ġrest Full Client !!. send Request ( call , Ġthis ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġapi Get Doctor Slots ( change DateFormat From Date : ĠString ) Ġ{ čĊĠĠĠĠĠĠĠ Ġslots Adapter Ġ= Ġnull čĊĠĠĠĠĠĠĠ Ġbinding !!. today TV . setText ( change DateFormat From Date ) čĊĠĠĠĠĠĠĠ Ġval Ġparam Ġ= ĠApi 3 Params () čĊĠĠĠĠĠĠĠ Ġparam . put (" Availability Time [ date ]", Ġchange DateFormat From Date ) čĊĠĠĠĠĠĠĠ Ġval Ġcall Ġ= Ġapi !!. api Get Doctor Time List ( profile Data !!. id , Ġparam . getServer HashMap ()) čĊĠĠĠĠĠĠĠ Ġrest Full Client !!. send Request ( call , Ġthis ) čĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġprivate Ġfun Ġvalidation (): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠ Ġwhen Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime Slots Id . isNull OrEmpty () Ġ-> Ġshow Toast One ( getString ( R . string . please _ select _ time _ slot _ first )) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġtrue čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn Ġfalse čĊĠĠĠ Ġ} čĊčĊč Ċ } čĊ