blob: 871f53f3187898d52906752504aad9b1f8fce35a [file] [log] [blame]
package org.apache.fineract.ui.online.groups.creategroup
import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProviders
import com.stepstone.stepper.StepperLayout
import com.stepstone.stepper.VerificationError
import kotlinx.android.synthetic.main.activity_create_group.*
import org.apache.fineract.R
import org.apache.fineract.data.Status
import org.apache.fineract.data.models.Group
import org.apache.fineract.data.models.customer.Address
import org.apache.fineract.ui.base.FineractBaseActivity
import org.apache.fineract.ui.base.Toaster
import org.apache.fineract.ui.online.groups.GroupAction
import org.apache.fineract.ui.online.groups.grouplist.GroupViewModel
import org.apache.fineract.ui.online.groups.grouplist.GroupViewModelFactory
import org.apache.fineract.utils.Constants
import org.apache.fineract.utils.DateUtils
import javax.inject.Inject
/*
* Created by saksham on 02/July/2019
*/
class CreateGroupActivity : FineractBaseActivity(), StepperLayout.StepperListener {
private var group = Group()
private var groupAction = GroupAction.CREATE
@Inject
lateinit var groupViewModelFactory: GroupViewModelFactory
lateinit var viewModel: GroupViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_create_group)
activityComponent.inject(this)
groupAction = intent.getSerializableExtra(Constants.GROUP_ACTION) as GroupAction
when (groupAction) {
GroupAction.CREATE -> {
setToolbarTitle(getString(R.string.create_group))
}
GroupAction.EDIT -> {
setToolbarTitle(getString(R.string.edit_group))
intent?.extras?.getParcelable<Group>(Constants.GROUP)?.let {
group = it
}
}
}
viewModel = ViewModelProviders.of(this, groupViewModelFactory).get(GroupViewModel::class.java)
subscribeUI()
showBackButton()
slCreateGroup.adapter = CreateGroupAdapter(supportFragmentManager, this, groupAction)
slCreateGroup.setOffscreenPageLimit(slCreateGroup.adapter.count)
slCreateGroup.setListener(this)
}
override fun onStepSelected(newStepPosition: Int) {}
override fun onError(verificationError: VerificationError?) {}
override fun onReturn() {}
private fun subscribeUI() {
viewModel.status.observe(this, Observer { status ->
when (status) {
Status.LOADING ->
if (groupAction == GroupAction.CREATE) {
showMifosProgressDialog(getString(R.string.create_group))
} else {
showMifosProgressDialog(getString(R.string.updating_group_please_wait))
}
Status.ERROR -> {
hideMifosProgressDialog()
if (groupAction == GroupAction.CREATE) {
Toaster.show(findViewById(android.R.id.content), R.string.error_while_creating_group, Toast.LENGTH_SHORT)
} else {
Toaster.show(findViewById(android.R.id.content), R.string.error_while_updating_group_status, Toast.LENGTH_SHORT)
}
}
Status.DONE -> {
hideMifosProgressDialog()
if (groupAction == GroupAction.CREATE) {
Toast.makeText(this, getString(R.string.group_identifier_created_successfully, group.identifier), Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, getString(R.string.group_identifier_updated_successfully, group.identifier), Toast.LENGTH_SHORT).show()
}
finish()
}
}
})
}
override fun onCompleted(completeButton: View?) {
when (groupAction) {
GroupAction.EDIT -> group.identifier?.let {
viewModel.updateGroup(group)
}
GroupAction.CREATE -> viewModel.createGroup(group)
}
}
fun setGroupDetails(identifier: String, groupDefinitionIdentifier: String, name: String, office: String, assignedEmployee: String) {
group.identifier = identifier
group.groupDefinitionIdentifier = groupDefinitionIdentifier
group.name = name
group.office = office
group.assignedEmployee = assignedEmployee
group.weekday = DateUtils.getWeekDayIndex(DateUtils.getPresentDay())
}
fun setMembers(members: List<String>) {
group.members = members
}
fun setLeaders(leaders: List<String>) {
group.leaders = leaders
}
fun setGroupAddress(street: String, city: String, region: String, postalCode: String, country: String, countryCode: String?) {
val address = Address()
address.street = street
address.city = city
address.region = region
address.postalCode = postalCode
address.country = country
address.countryCode = countryCode
group.address = address
}
fun getGroup(): Group {
return group
}
}