diff --git a/app/src/main/java/org/apache/fineract/couchbase/DocumentType.kt b/app/src/main/java/org/apache/fineract/couchbase/DocumentType.kt index 9e32fd45..0bce9bd3 100644 --- a/app/src/main/java/org/apache/fineract/couchbase/DocumentType.kt +++ b/app/src/main/java/org/apache/fineract/couchbase/DocumentType.kt @@ -6,5 +6,6 @@ package org.apache.fineract.couchbase enum class DocumentType(val value: String) { GROUP("Group"), - CUSTOMER("customer") + CUSTOMER("customer"), + TELLER("Teller") } \ No newline at end of file diff --git a/app/src/main/java/org/apache/fineract/data/models/teller/Teller.kt b/app/src/main/java/org/apache/fineract/data/models/teller/Teller.kt index e916d150..f294a380 100644 --- a/app/src/main/java/org/apache/fineract/data/models/teller/Teller.kt +++ b/app/src/main/java/org/apache/fineract/data/models/teller/Teller.kt @@ -3,28 +3,29 @@ package org.apache.fineract.data.models.teller import android.os.Parcelable import com.google.gson.annotations.SerializedName import kotlinx.android.parcel.Parcelize +import org.apache.fineract.couchbase.DocumentType import java.math.BigDecimal @Parcelize data class Teller( - @SerializedName("code") var code: String? = null, - @SerializedName("password") var password: String? = null, - @SerializedName("cashdrawLimit") var cashdrawLimit: BigDecimal? = null, - @SerializedName("tellerAccountIdentifier") var tellerAccountIdentifier: String? = null, - @SerializedName("vaultAccountIdentifier") var vaultAccountIdentifier: String? = null, - @SerializedName("chequesReceivableAccount") var chequesReceivableAccount: String? = null, - @SerializedName("cashOverShortAccount") var cashOverShortAccount: String? = null, - @SerializedName("denominationRequired") var denominationRequired: Boolean = false, - @SerializedName("assignedEmployee") var assignedEmployee: String? = null, - @SerializedName("state") var state: State? = null, - @SerializedName("createdBy") var createdBy: String? = null, - @SerializedName("createdOn") var createdOn: String? = null, - @SerializedName("lastModifiedBy") var lastModifiedBy: String? = null, - @SerializedName("lastModifiedOn") var lastModifiedOn: String? = null, - @SerializedName("lastOpenedBy") var lastOpenedBy: String? = null, - @SerializedName("lastOpenedOn") var lastOpenedOn: String? = null - + var code: String? = null, + var password: String? = null, + var cashdrawLimit: BigDecimal? = null, + var tellerAccountIdentifier: String? = null, + var vaultAccountIdentifier: String? = null, + var chequesReceivableAccount: String? = null, + var cashOverShortAccount: String? = null, + var denominationRequired: Boolean = false, + var assignedEmployee: String? = null, + var state: State? = State.OPEN, + var createdBy: String? = null, + var createdOn: String? = null, + var lastModifiedBy: String? = null, + var lastModifiedOn: String? = null, + var lastOpenedBy: String? = null, + var lastOpenedOn: String? = null, + var documentType: String = DocumentType.TELLER.value ) : Parcelable { enum class State { diff --git a/app/src/main/java/org/apache/fineract/data/models/teller/tellerCommand.kt b/app/src/main/java/org/apache/fineract/data/models/teller/tellerCommand.kt index 81c42200..e752244f 100644 --- a/app/src/main/java/org/apache/fineract/data/models/teller/tellerCommand.kt +++ b/app/src/main/java/org/apache/fineract/data/models/teller/tellerCommand.kt @@ -3,7 +3,7 @@ package org.apache.fineract.data.models.teller import com.google.gson.annotations.SerializedName data class TellerCommand ( - @SerializedName("action") var action: String? = null, + @SerializedName("action") var action: TellerAction? = null, @SerializedName("adjustment") var adjustment: String? = "NONE", @SerializedName("assignedEmployeeIdentifier") var assignedEmployeeIdentifier: String? = null ) { diff --git a/app/src/main/java/org/apache/fineract/ui/online/teller/TellerFragment.kt b/app/src/main/java/org/apache/fineract/ui/online/teller/TellerFragment.kt index 5125e2cd..3be699ad 100644 --- a/app/src/main/java/org/apache/fineract/ui/online/teller/TellerFragment.kt +++ b/app/src/main/java/org/apache/fineract/ui/online/teller/TellerFragment.kt @@ -5,10 +5,10 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.text.TextUtils -import android.util.Log +import android.util.Log.e import android.view.* -import android.widget.Toast import androidx.appcompat.widget.SearchView +import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProviders import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -84,7 +84,7 @@ class TellerFragment : FineractBaseFragment(), OnItemClickListener, SwipeRefresh override fun onStart() { super.onStart() - viewModel.getTellers()?.observe(this, androidx.lifecycle.Observer { + viewModel.getTellers()?.observe(this, Observer { it?.let { tellerList = it tellerAdapter.setTellerList(it) @@ -120,7 +120,7 @@ class TellerFragment : FineractBaseFragment(), OnItemClickListener, SwipeRefresh override fun onRefresh() { showProgressbar() - viewModel.getTellers()?.observe(this, androidx.lifecycle.Observer { + viewModel.getTellers()?.observe(this, Observer { it?.let { tellerList = it tellerAdapter.setTellerList(it) diff --git a/app/src/main/java/org/apache/fineract/ui/online/teller/createteller/TellerDetailsStepFragment.kt b/app/src/main/java/org/apache/fineract/ui/online/teller/createteller/TellerDetailsStepFragment.kt index 914ee196..9abc3fc5 100644 --- a/app/src/main/java/org/apache/fineract/ui/online/teller/createteller/TellerDetailsStepFragment.kt +++ b/app/src/main/java/org/apache/fineract/ui/online/teller/createteller/TellerDetailsStepFragment.kt @@ -11,6 +11,7 @@ import android.view.View import android.view.ViewGroup import android.widget.EditText import com.wajahatkarim3.easyvalidation.core.view_ktx.validator +import kotlinx.android.synthetic.main.fragment_step_group_details.view.* import kotlinx.android.synthetic.main.fragment_step_teller_details.* import kotlinx.android.synthetic.main.fragment_step_teller_details.view.* import org.apache.fineract.R @@ -57,6 +58,7 @@ class TellerDetailsStepFragment : FineractBaseFragment(), Step { private fun populateData() { val teller = (activity as CreateTellerActivity).getTeller() rootView.etTellerCode.setText(teller.code) + rootView.etTellerAccountIdentifier.isEnabled = false rootView.etTellerPassword.setText(teller.password) rootView.etTellerCashdrawlimit.setText(teller.cashdrawLimit.toString()) rootView.etTellerAccountIdentifier.setText(teller.tellerAccountIdentifier) diff --git a/app/src/main/java/org/apache/fineract/ui/online/teller/tellerdetails/TellerDetailsFragment.kt b/app/src/main/java/org/apache/fineract/ui/online/teller/tellerdetails/TellerDetailsFragment.kt index e6bd0832..c9953e8d 100644 --- a/app/src/main/java/org/apache/fineract/ui/online/teller/tellerdetails/TellerDetailsFragment.kt +++ b/app/src/main/java/org/apache/fineract/ui/online/teller/tellerdetails/TellerDetailsFragment.kt @@ -80,6 +80,7 @@ class TellerDetailsFragment : FineractBaseFragment() { putExtra(Constants.TELLER_ACTION, TellerAction.EDIT) } startActivity(intent) + activity!!.finish() } } return super.onOptionsItemSelected(item) diff --git a/app/src/main/java/org/apache/fineract/ui/online/teller/tellerlist/TellerViewModel.kt b/app/src/main/java/org/apache/fineract/ui/online/teller/tellerlist/TellerViewModel.kt index 096acf7f..6b4f0cec 100644 --- a/app/src/main/java/org/apache/fineract/ui/online/teller/tellerlist/TellerViewModel.kt +++ b/app/src/main/java/org/apache/fineract/ui/online/teller/tellerlist/TellerViewModel.kt @@ -1,23 +1,27 @@ package org.apache.fineract.ui.online.teller.tellerlist import android.annotation.SuppressLint +import android.util.Log.e import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import com.couchbase.lite.Expression import io.reactivex.Observable import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.observers.DisposableCompletableObserver import io.reactivex.schedulers.Schedulers import kotlinx.coroutines.* +import org.apache.fineract.couchbase.DocumentType import org.apache.fineract.couchbase.SynchronizationManager import org.apache.fineract.data.Status -import org.apache.fineract.data.datamanager.DataManagerTeller import org.apache.fineract.data.datamanager.api.DataManagerAnonymous import org.apache.fineract.data.local.PreferencesHelper +import org.apache.fineract.data.models.Group import org.apache.fineract.data.models.customer.Country import org.apache.fineract.data.models.teller.Teller import org.apache.fineract.data.models.teller.TellerCommand import org.apache.fineract.utils.DateUtils +import org.apache.fineract.utils.serializeToMap +import org.apache.fineract.utils.toDataClass import java.lang.Exception /* @@ -29,8 +33,7 @@ import java.lang.Exception */ class TellerViewModel(private val synchronizationManager: SynchronizationManager, private val dataManagerAnonymous: DataManagerAnonymous, - private val preferencesHelper: PreferencesHelper, - private val dataManagerTeller: DataManagerTeller + private val preferencesHelper: PreferencesHelper ) : ViewModel() { var tellersList = MutableLiveData>() @@ -44,13 +47,18 @@ class TellerViewModel(private val synchronizationManager: SynchronizationManager @SuppressLint("CheckResult") fun getTellers(): MutableLiveData>? { - - dataManagerTeller.getTellers().subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe{ - tellersList.value = it as ArrayList? - } - + val expression = Expression.property("documentType") + .equalTo(Expression.string(DocumentType.TELLER.value)) + .and(Expression.property("state").notEqualTo(Expression.string("null"))) + val hashMapList = synchronizationManager.getDocuments(expression) + if (hashMapList?.isEmpty() == null) { + return null + } + val list = arrayListOf() + for (map in hashMapList) { + list.add(map.toDataClass()) + } + tellersList.value = list return tellersList } @@ -81,17 +89,8 @@ class TellerViewModel(private val synchronizationManager: SynchronizationManager teller.lastModifiedOn = DateUtils.getCurrentDate() teller.lastOpenedBy = preferencesHelper.userName teller.lastOpenedOn = DateUtils.getCurrentDate() - dataManagerTeller.createTeller(teller).subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeWith(object : DisposableCompletableObserver() { - override fun onComplete() { - _status.value = Status.DONE - } - - override fun onError(e: Throwable) { - _status.value = Status.ERROR - } - }) + synchronizationManager.saveDocument(teller.tellerAccountIdentifier!!, teller.serializeToMap()) + _status.value = Status.DONE } catch (exception: Exception) { _status.value = Status.ERROR } @@ -110,17 +109,8 @@ class TellerViewModel(private val synchronizationManager: SynchronizationManager teller.lastModifiedOn = DateUtils.getCurrentDate() teller.lastOpenedBy = preferencesHelper.userName teller.lastOpenedOn = DateUtils.getCurrentDate() - dataManagerTeller.updateTeller(teller).subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeWith(object : DisposableCompletableObserver() { - override fun onComplete() { - _status.value = Status.DONE - } - - override fun onError(e: Throwable) { - _status.value = Status.ERROR - } - }) + synchronizationManager.updateDocument(teller.tellerAccountIdentifier!!, teller.serializeToMap()) + _status.value = Status.DONE } catch (exception: Exception) { _status.value = Status.ERROR } @@ -133,17 +123,14 @@ class TellerViewModel(private val synchronizationManager: SynchronizationManager withContext(Dispatchers.Main) { try { _status.value = Status.LOADING - dataManagerTeller.changeTellerStatus(teller, command).subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribeWith(object : DisposableCompletableObserver() { - override fun onComplete() { - _status.value = Status.DONE - } - - override fun onError(e: Throwable) { - _status.value = Status.ERROR - } - }) + when (command.action) { + TellerCommand.TellerAction.ACTIVATE -> teller.state = Teller.State.ACTIVE + TellerCommand.TellerAction.CLOSE -> teller.state = Teller.State.CLOSED + TellerCommand.TellerAction.REOPEN -> teller.state = Teller.State.OPEN + else -> teller.state = Teller.State.PAUSED + } + synchronizationManager.updateDocument(teller.tellerAccountIdentifier!!, teller.serializeToMap()) + _status.value = Status.DONE } catch (e: Exception) { _status.value = Status.ERROR } @@ -179,6 +166,7 @@ class TellerViewModel(private val synchronizationManager: SynchronizationManager override fun onCleared() { super.onCleared() viewModelJob.cancel() + synchronizationManager.closeDatabase() } } \ No newline at end of file diff --git a/app/src/main/java/org/apache/fineract/ui/online/teller/tellerlist/TellerViewModelFactory.kt b/app/src/main/java/org/apache/fineract/ui/online/teller/tellerlist/TellerViewModelFactory.kt index 38f114a1..f841332a 100644 --- a/app/src/main/java/org/apache/fineract/ui/online/teller/tellerlist/TellerViewModelFactory.kt +++ b/app/src/main/java/org/apache/fineract/ui/online/teller/tellerlist/TellerViewModelFactory.kt @@ -17,12 +17,11 @@ import javax.inject.Inject class TellerViewModelFactory @Inject constructor(@ApplicationContext var context: Context, private val synchronizationManager: SynchronizationManager, private val dataManagerAnonymous: DataManagerAnonymous, - private val preferencesHelper: PreferencesHelper, - private val dataManagerTeller: DataManagerTeller + private val preferencesHelper: PreferencesHelper ) : ViewModelProvider.NewInstanceFactory() { @Suppress("UNCHECKED_CAST") override fun create(modelClass: Class): T { - return TellerViewModel(synchronizationManager, dataManagerAnonymous, preferencesHelper, dataManagerTeller) as T + return TellerViewModel(synchronizationManager, dataManagerAnonymous, preferencesHelper) as T } } \ No newline at end of file diff --git a/app/src/main/java/org/apache/fineract/ui/online/teller/tellertasks/TellerTasksBottomSheetFragment.kt b/app/src/main/java/org/apache/fineract/ui/online/teller/tellertasks/TellerTasksBottomSheetFragment.kt index 836b2924..70bc5c2e 100644 --- a/app/src/main/java/org/apache/fineract/ui/online/teller/tellertasks/TellerTasksBottomSheetFragment.kt +++ b/app/src/main/java/org/apache/fineract/ui/online/teller/tellertasks/TellerTasksBottomSheetFragment.kt @@ -103,28 +103,28 @@ class TellerTasksBottomSheetFragment(val teller: Teller) : FineractBaseBottomShe fun onTaskImageViewClicked() { when (teller.state) { Teller.State.ACTIVE -> { - command.action = TellerCommand.TellerAction.CLOSE.toString() + command.action = TellerCommand.TellerAction.CLOSE command.assignedEmployeeIdentifier = teller.assignedEmployee.toString() rootView.tvTellerHeader.text = getString(R.string.close) rootView.tvTellerSubHeader.text = getString(R.string.please_verify_following_teller_task, getString(R.string.close)) rootView.btnTellerSubmitTask.text = getString(R.string.close) } Teller.State.PAUSED -> { - command.action = TellerCommand.TellerAction.ACTIVATE.toString() + command.action = TellerCommand.TellerAction.ACTIVATE command.assignedEmployeeIdentifier = teller.assignedEmployee.toString() rootView.tvTellerHeader.text = getString(R.string.activate) rootView.tvTellerSubHeader.text = getString(R.string.please_verify_following_teller_task, getString(R.string.activate)) rootView.btnTellerSubmitTask.text = getString(R.string.activate) } Teller.State.CLOSED -> { - command.action = TellerCommand.TellerAction.REOPEN.toString() + command.action = TellerCommand.TellerAction.REOPEN command.assignedEmployeeIdentifier = teller.assignedEmployee.toString() rootView.tvTellerHeader.text = getString(R.string.reopen) rootView.tvTellerSubHeader.text = getString(R.string.please_verify_following_teller_task, getString(R.string.reopen)) rootView.btnTellerSubmitTask.text = getString(R.string.reopen) } Teller.State.OPEN -> { - command.action = TellerCommand.TellerAction.CLOSE.toString() + command.action = TellerCommand.TellerAction.CLOSE command.assignedEmployeeIdentifier = teller.assignedEmployee.toString() rootView.tvTellerHeader.text = getString(R.string.close) rootView.tvTellerSubHeader.text = getString(R.string.please_verify_following_teller_task, getString(R.string.close)) @@ -138,6 +138,7 @@ class TellerTasksBottomSheetFragment(val teller: Teller) : FineractBaseBottomShe @OnClick(R.id.btnTellerSubmitTask) fun submitTask() { viewModel.changeTellerStatus(teller, command) + activity!!.finish() } @OnClick(R.id.btnTellerCancel)