Skip to content
This repository has been archived by the owner on Jan 11, 2024. It is now read-only.

Commit

Permalink
All teller functionalities implemented using couchbase
Browse files Browse the repository at this point in the history
  • Loading branch information
varsvat committed Jul 12, 2021
1 parent 31fffb8 commit fa6db4f
Show file tree
Hide file tree
Showing 9 changed files with 67 additions and 74 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@ package org.apache.fineract.couchbase

enum class DocumentType(val value: String) {
GROUP("Group"),
CUSTOMER("customer")
CUSTOMER("customer"),
TELLER("Teller")
}
35 changes: 18 additions & 17 deletions app/src/main/java/org/apache/fineract/data/models/teller/Teller.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ class TellerDetailsFragment : FineractBaseFragment() {
putExtra(Constants.TELLER_ACTION, TellerAction.EDIT)
}
startActivity(intent)
activity!!.finish()
}
}
return super.onOptionsItemSelected(item)
Expand Down
Original file line number Diff line number Diff line change
@@ -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

/*
Expand All @@ -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<ArrayList<Teller>>()
Expand All @@ -44,13 +47,18 @@ class TellerViewModel(private val synchronizationManager: SynchronizationManager

@SuppressLint("CheckResult")
fun getTellers(): MutableLiveData<ArrayList<Teller>>? {

dataManagerTeller.getTellers().subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe{
tellersList.value = it as ArrayList<Teller>?
}

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<Teller>()
for (map in hashMapList) {
list.add(map.toDataClass())
}
tellersList.value = list
return tellersList
}

Expand Down Expand Up @@ -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
}
Expand All @@ -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
}
Expand All @@ -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
}
Expand Down Expand Up @@ -179,6 +166,7 @@ class TellerViewModel(private val synchronizationManager: SynchronizationManager
override fun onCleared() {
super.onCleared()
viewModelJob.cancel()
synchronizationManager.closeDatabase()
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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 <T: ViewModel?> create(modelClass: Class<T>): T {
return TellerViewModel(synchronizationManager, dataManagerAnonymous, preferencesHelper, dataManagerTeller) as T
return TellerViewModel(synchronizationManager, dataManagerAnonymous, preferencesHelper) as T
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand All @@ -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)
Expand Down

0 comments on commit fa6db4f

Please sign in to comment.