feat : update payroll
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9615c01..c33a494 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -49,6 +49,8 @@
<activity android:name=".ui.online.customers.customerpayroll.PayrollActivity" />
+ <activity android:name=".ui.online.customers.customerpayroll.editcustomerpayroll.EditPayrollActivity"/>
+
<activity android:name=".ui.online.depositaccounts.depositaccountslist.DepositAccountsActivity" />
<activity android:name=".ui.online.loanaccounts.loanaccountlist.LoanAccountsActivity" />
diff --git a/app/src/main/java/org/apache/fineract/data/datamanager/api/DataManagerPayroll.kt b/app/src/main/java/org/apache/fineract/data/datamanager/api/DataManagerPayroll.kt
index ac8b2d8..f588836 100644
--- a/app/src/main/java/org/apache/fineract/data/datamanager/api/DataManagerPayroll.kt
+++ b/app/src/main/java/org/apache/fineract/data/datamanager/api/DataManagerPayroll.kt
@@ -1,5 +1,6 @@
package org.apache.fineract.data.datamanager.api
+import io.reactivex.Completable
import io.reactivex.Observable
import io.reactivex.ObservableSource
import io.reactivex.functions.Function
@@ -21,4 +22,9 @@
.onErrorResumeNext(Function<Throwable, ObservableSource<PayrollConfiguration>>
{ Observable.just(FakeRemoteDataSource.getPayrollConfig()) })
+ fun editPayrollConfig(identifier: String, payrollConfiguration: PayrollConfiguration)
+ : Completable = baseManagerApi
+ .payrollService.updatePayrollConfig(identifier, payrollConfiguration)
+
+
}
\ No newline at end of file
diff --git a/app/src/main/java/org/apache/fineract/data/models/payroll/PayrollAllocation.kt b/app/src/main/java/org/apache/fineract/data/models/payroll/PayrollAllocation.kt
index 70c094e..084b900 100644
--- a/app/src/main/java/org/apache/fineract/data/models/payroll/PayrollAllocation.kt
+++ b/app/src/main/java/org/apache/fineract/data/models/payroll/PayrollAllocation.kt
@@ -1,10 +1,13 @@
package org.apache.fineract.data.models.payroll
+import android.os.Parcelable
import com.google.gson.annotations.SerializedName
+import kotlinx.android.parcel.Parcelize
import java.math.BigDecimal
+@Parcelize
data class PayrollAllocation(
@SerializedName("accountNumber") val accountNumber: String? = null,
@SerializedName("amount") val amount: BigDecimal,
@SerializedName("proportional") val proportional: Boolean = false
-)
\ No newline at end of file
+) : Parcelable
\ No newline at end of file
diff --git a/app/src/main/java/org/apache/fineract/data/models/payroll/PayrollConfiguration.kt b/app/src/main/java/org/apache/fineract/data/models/payroll/PayrollConfiguration.kt
index 1c6d663..3a01b3c 100644
--- a/app/src/main/java/org/apache/fineract/data/models/payroll/PayrollConfiguration.kt
+++ b/app/src/main/java/org/apache/fineract/data/models/payroll/PayrollConfiguration.kt
@@ -1,7 +1,10 @@
package org.apache.fineract.data.models.payroll
+import android.os.Parcelable
import com.google.gson.annotations.SerializedName
+import kotlinx.android.parcel.Parcelize
+@Parcelize
data class PayrollConfiguration(
@SerializedName("mainAccountNumber") val mainAccountNumber: String? = null,
@SerializedName("payrollAllocations") val payrollAllocations:
@@ -10,4 +13,4 @@
@SerializedName("createdBy") val createdBy: String? = null,
@SerializedName("lastModifiedOn") val lastModifiedOn: String? = null,
@SerializedName("lastModifiedBy") val lastModifiedBy: String? = null
-)
\ No newline at end of file
+) : Parcelable
\ No newline at end of file
diff --git a/app/src/main/java/org/apache/fineract/data/services/PayrollService.kt b/app/src/main/java/org/apache/fineract/data/services/PayrollService.kt
index d451fee..3a2621e 100644
--- a/app/src/main/java/org/apache/fineract/data/services/PayrollService.kt
+++ b/app/src/main/java/org/apache/fineract/data/services/PayrollService.kt
@@ -1,9 +1,12 @@
package org.apache.fineract.data.services
+import io.reactivex.Completable
import io.reactivex.Observable
import org.apache.fineract.data.models.payroll.PayrollConfiguration
import org.apache.fineract.data.remote.EndPoints
+import retrofit2.http.Body
import retrofit2.http.GET
+import retrofit2.http.PUT
import retrofit2.http.Path
@@ -11,4 +14,9 @@
@GET(EndPoints.API_PAYROLL_PATH + "/customers/{identifier}/payroll")
fun getPayrollConfig(@Path("identifier") identifier: String): Observable<PayrollConfiguration>
+
+ @PUT(EndPoints.API_PAYROLL_PATH + "/customers/{identifier}/payroll")
+ fun updatePayrollConfig(@Path("identifier") identifier: String,
+ @Body payrollConfiguration: PayrollConfiguration)
+ : Completable
}
diff --git a/app/src/main/java/org/apache/fineract/injection/component/ActivityComponent.java b/app/src/main/java/org/apache/fineract/injection/component/ActivityComponent.java
index 4019716..6c250f8 100644
--- a/app/src/main/java/org/apache/fineract/injection/component/ActivityComponent.java
+++ b/app/src/main/java/org/apache/fineract/injection/component/ActivityComponent.java
@@ -4,6 +4,7 @@
import org.apache.fineract.injection.module.ActivityModule;
import org.apache.fineract.ui.offline.CustomerPayloadFragment;
import org.apache.fineract.ui.online.DashboardActivity;
+import org.apache.fineract.ui.online.accounting.accounts.AccountsFragment;
import org.apache.fineract.ui.online.accounting.ledgers.LedgerFragment;
import org.apache.fineract.ui.online.customers.createcustomer.customeractivity
.CreateCustomerActivity;
@@ -12,6 +13,11 @@
import org.apache.fineract.ui.online.customers.customeractivities.CustomerActivitiesFragment;
import org.apache.fineract.ui.online.customers.customerdetails.CustomerDetailsFragment;
import org.apache.fineract.ui.online.customers.customerlist.CustomersFragment;
+import org.apache.fineract.ui.online.customers.customerpayroll.PayrollFragment;
+import org.apache.fineract.ui.online.customers.customerpayroll.editcustomerpayroll
+ .EditPayrollActivity;
+import org.apache.fineract.ui.online.customers.customerpayroll.editcustomerpayroll
+ .EditPayrollAllocationFragment;
import org.apache.fineract.ui.online.customers.customerprofile.editcustomerprofilebottomsheet
.EditCustomerProfileBottomSheet;
import org.apache.fineract.ui.online.customers.customertasks.CustomerTasksBottomSheetFragment;
@@ -43,9 +49,7 @@
import org.apache.fineract.ui.online.loanaccounts.plannedpayment.PlannedPaymentFragment;
import org.apache.fineract.ui.online.login.LoginActivity;
import org.apache.fineract.ui.online.review.AddLoanReviewFragment;
-import org.apache.fineract.ui.online.customers.customerpayroll.PayrollFragment;
import org.apache.fineract.ui.online.roles.roleslist.RolesFragment;
-import org.apache.fineract.ui.online.accounting.accounts.AccountsFragment;
import org.apache.fineract.ui.online.teller.TellerFragment;
import org.apache.fineract.ui.product.ProductFragment;
@@ -127,5 +131,9 @@
void inject(ProductFragment productFragment);
void inject(PayrollFragment payrollFragment);
+
+ void inject(EditPayrollAllocationFragment editPayrollAllocationFragment);
+
+ void inject(EditPayrollActivity editPayrollActivity);
}
diff --git a/app/src/main/java/org/apache/fineract/ui/adapters/EditPayrollStepAdapter.kt b/app/src/main/java/org/apache/fineract/ui/adapters/EditPayrollStepAdapter.kt
new file mode 100644
index 0000000..c09a4ec
--- /dev/null
+++ b/app/src/main/java/org/apache/fineract/ui/adapters/EditPayrollStepAdapter.kt
@@ -0,0 +1,31 @@
+package org.apache.fineract.ui.adapters
+
+import android.content.Context
+import android.support.v4.app.FragmentManager
+import com.stepstone.stepper.Step
+import com.stepstone.stepper.adapter.AbstractFragmentStepAdapter
+import com.stepstone.stepper.viewmodel.StepViewModel
+import org.apache.fineract.R
+import org.apache.fineract.data.models.payroll.PayrollConfiguration
+import org.apache.fineract.ui.online.customers.customerpayroll.editcustomerpayroll.EditPayrollAllocationFragment
+import org.apache.fineract.ui.online.customers.customerpayroll.editcustomerpayroll.EditPayrollFragment
+
+class EditPayrollStepAdapter(fm: FragmentManager, context: Context,
+ val payrollConfig: PayrollConfiguration)
+ : AbstractFragmentStepAdapter(fm, context) {
+
+ val payrollStep: Array<String> = context.resources.getStringArray(R.array.edit_payroll_steps)
+
+ override fun getViewModel(position: Int): StepViewModel = StepViewModel.Builder(context)
+ .setTitle(payrollStep[position])
+ .create()
+
+ override fun createStep(position: Int): Step? = when (position) {
+ 0 -> EditPayrollFragment.newInstance(payrollConfig)
+ 1 -> EditPayrollAllocationFragment.newInstance(payrollConfig)
+ else -> null
+ }
+
+ override fun getCount(): Int = payrollStep.size
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/apache/fineract/ui/adapters/PayrollAllocationAdapter.kt b/app/src/main/java/org/apache/fineract/ui/adapters/PayrollAllocationAdapter.kt
new file mode 100644
index 0000000..21640e2
--- /dev/null
+++ b/app/src/main/java/org/apache/fineract/ui/adapters/PayrollAllocationAdapter.kt
@@ -0,0 +1,70 @@
+package org.apache.fineract.ui.adapters
+
+import android.support.v7.widget.RecyclerView
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.CheckBox
+import android.widget.ImageView
+import android.widget.TextView
+import kotlinx.android.synthetic.main.item_payroll_allocation.view.*
+import org.apache.fineract.R
+import org.apache.fineract.data.models.payroll.PayrollAllocation
+import javax.inject.Inject
+
+class PayrollAllocationAdapter @Inject constructor()
+ : RecyclerView.Adapter<PayrollAllocationAdapter.ViewHolder>() {
+
+ lateinit var payrollAllocation: List<PayrollAllocation>
+ lateinit var onClickListener: OnClickEditDeleteListener
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ val view = LayoutInflater.from(parent.context)
+ .inflate(R.layout.item_payroll_allocation, parent, false)
+ return ViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val (accountNumber, amount, proportional) = payrollAllocation[position]
+ holder.tvAccount.text = accountNumber
+ holder.tvAmount.text = amount.toString()
+ holder.cbProportional.isChecked = proportional
+ }
+
+ override fun getItemCount(): Int {
+ return payrollAllocation.size
+ }
+
+ fun setPayrollAllocations(allocation: List<PayrollAllocation>) {
+ this.payrollAllocation = allocation
+ notifyDataSetChanged()
+ }
+
+ fun setOnClickEditDeleteListener(itemClickListener: OnClickEditDeleteListener) {
+ this.onClickListener = itemClickListener
+ }
+
+ inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+
+ val ivEdit: ImageView = itemView.iv_edit
+ val ivDelete: ImageView = itemView.iv_delete
+ val tvAccount: TextView = itemView.tv_account
+ val tvAmount: TextView = itemView.tv_amount
+ val cbProportional: CheckBox = itemView.cb_Proportional
+
+ init {
+ ivEdit.setOnClickListener {
+ onClickListener.onClickEdit(payrollAllocation[adapterPosition], adapterPosition)
+ }
+
+ ivDelete.setOnClickListener {
+ onClickListener.onClickDelete(payrollAllocation[adapterPosition], adapterPosition)
+ }
+ }
+ }
+
+ interface OnClickEditDeleteListener {
+ fun onClickEdit(payrollAllocation: PayrollAllocation, position: Int)
+ fun onClickDelete(payrollAllocation: PayrollAllocation, position: Int)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/PayrollFragment.kt b/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/PayrollFragment.kt
index 8502e01..1763c95 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/PayrollFragment.kt
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/PayrollFragment.kt
@@ -1,6 +1,7 @@
package org.apache.fineract.ui.online.customers.customerpayroll
+import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
@@ -11,6 +12,7 @@
import org.apache.fineract.data.models.payroll.PayrollConfiguration
import org.apache.fineract.ui.base.FineractBaseActivity
import org.apache.fineract.ui.base.FineractBaseFragment
+import org.apache.fineract.ui.online.customers.customerpayroll.editcustomerpayroll.EditPayrollActivity
import org.apache.fineract.utils.ConstantKeys
import javax.inject.Inject
@@ -22,6 +24,8 @@
lateinit var customerIdentifier: String
+ lateinit var payrollConfiguration: PayrollConfiguration
+
companion object {
fun newInstance(customerIdentifier: String) =
PayrollFragment().apply {
@@ -57,6 +61,13 @@
payrollPresenter.getPayrollConfiguration(customerIdentifier)
}
+ fabEditPayroll.setOnClickListener{
+ val intent = Intent(activity,EditPayrollActivity::class.java)
+ intent.putExtra(ConstantKeys.PAYROLL_CONFIG, payrollConfiguration)
+ intent.putExtra(ConstantKeys.CUSTOMER_IDENTIFIER,customerIdentifier)
+ startActivity(intent)
+ }
+
payrollPresenter.getPayrollConfiguration(customerIdentifier)
}
@@ -67,6 +78,7 @@
override fun showPayrollConfiguration(payrollConfiguration: PayrollConfiguration) {
+ this.payrollConfiguration = payrollConfiguration
clPayroll.visibility = View.VISIBLE
tvAccount.text = payrollConfiguration.mainAccountNumber
tvCreatedBy.text = payrollConfiguration.createdBy
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/EditPayrollActivity.kt b/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/EditPayrollActivity.kt
new file mode 100644
index 0000000..e377a60
--- /dev/null
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/EditPayrollActivity.kt
@@ -0,0 +1,92 @@
+package org.apache.fineract.ui.online.customers.customerpayroll.editcustomerpayroll
+
+import android.os.Bundle
+import android.view.View
+import com.stepstone.stepper.StepperLayout
+import com.stepstone.stepper.VerificationError
+import kotlinx.android.synthetic.main.activity_edit_payroll.*
+import org.apache.fineract.R
+import org.apache.fineract.data.models.payroll.PayrollAllocation
+import org.apache.fineract.data.models.payroll.PayrollConfiguration
+import org.apache.fineract.ui.adapters.EditPayrollStepAdapter
+import org.apache.fineract.ui.base.FineractBaseActivity
+import org.apache.fineract.ui.base.Toaster
+import org.apache.fineract.ui.online.accounting.accounts.EditPayrollContract
+import org.apache.fineract.utils.ConstantKeys
+import javax.inject.Inject
+
+class EditPayrollActivity : FineractBaseActivity(), StepperLayout.StepperListener,
+ OnNavigationBarListener.Payroll, EditPayrollContract.View {
+
+ lateinit var payrollConfig: PayrollConfiguration
+ lateinit var customerIdentifier: String
+
+ @Inject
+ lateinit var editPayrollPresenter: EditPayrollPresenter
+
+ override fun onStepSelected(newStepPosition: Int) {
+
+ }
+
+ override fun onError(verificationError: VerificationError?) {
+ }
+
+ override fun onReturn() {
+ }
+
+ override fun onCompleted(completeButton: View?) {
+ editPayrollPresenter.updatePayrollConfiguration(customerIdentifier, payrollConfig)
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_edit_payroll)
+
+ setToolbarTitle(getString(R.string.edit_payroll))
+ activityComponent.inject(this)
+ editPayrollPresenter.attachView(this)
+ val payrollConfig = intent.getParcelableExtra<PayrollConfiguration>(ConstantKeys
+ .PAYROLL_CONFIG)
+
+ customerIdentifier = intent.getStringExtra(ConstantKeys.CUSTOMER_IDENTIFIER)
+
+ val stepAdapter = EditPayrollStepAdapter(
+ supportFragmentManager, this, payrollConfig)
+ stepperLayout.adapter = stepAdapter
+ stepperLayout.setListener(this)
+ stepperLayout.setOffscreenPageLimit(stepAdapter.count)
+
+ showBackButton()
+ }
+
+ override fun setPayrollConfig(accountNo: String, lastModifiedBy: String,
+ lastModifiedOn: String, createdBy: String,
+ createdOn: String) {
+ payrollConfig = PayrollConfiguration(mainAccountNumber = accountNo,
+ createdOn = createdOn, createdBy = createdBy,
+ lastModifiedOn = lastModifiedOn, lastModifiedBy = lastModifiedBy)
+
+ }
+
+ override fun setPayrollAllocations(payrollAllocations: List<PayrollAllocation>) {
+ payrollConfig = payrollConfig.copy(payrollAllocations = payrollAllocations)
+ }
+
+ override fun updatePayrollSuccess() {
+ finish()
+ }
+
+ override fun showNoInternetConnection() {
+ Toaster.show(findViewById(android.R.id.content),
+ getString(R.string.no_internet_connection))
+ }
+
+ override fun showError(message: String?) {
+ Toaster.show(findViewById(android.R.id.content), message)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ editPayrollPresenter.detachView()
+ }
+}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/EditPayrollAllocationFragment.kt b/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/EditPayrollAllocationFragment.kt
new file mode 100644
index 0000000..714fd97
--- /dev/null
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/EditPayrollAllocationFragment.kt
@@ -0,0 +1,133 @@
+package org.apache.fineract.ui.online.customers.customerpayroll.editcustomerpayroll
+
+import android.content.Context
+import android.os.Bundle
+import android.support.v7.widget.LinearLayoutManager
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import com.stepstone.stepper.Step
+import com.stepstone.stepper.VerificationError
+import kotlinx.android.synthetic.main.fragment_edit_payroll_allocation.*
+import org.apache.fineract.R
+import org.apache.fineract.data.models.payroll.PayrollAllocation
+import org.apache.fineract.data.models.payroll.PayrollConfiguration
+import org.apache.fineract.ui.adapters.PayrollAllocationAdapter
+import org.apache.fineract.ui.base.FineractBaseActivity
+import org.apache.fineract.ui.base.FineractBaseFragment
+import org.apache.fineract.ui.online.customers.customerpayroll.editcustomerpayroll
+ .editpayrollbottomsheet.EditPayrollBottomSheet
+import org.apache.fineract.ui.online.customers.customerpayroll.editcustomerpayroll
+ .editpayrollbottomsheet.OnBottomSheetDialogListener
+import org.apache.fineract.ui.online.customers.customerpayroll.editcustomerpayroll.editpayrollbottomsheet.PayrollSource
+import org.apache.fineract.utils.ConstantKeys
+import javax.inject.Inject
+
+
+class EditPayrollAllocationFragment : FineractBaseFragment(), Step,
+ PayrollAllocationAdapter.OnClickEditDeleteListener,
+ OnBottomSheetDialogListener {
+
+ lateinit var payrollConfiguration: PayrollConfiguration
+ lateinit var listener: OnNavigationBarListener.Payroll
+ lateinit var payrollAllocations: MutableList<PayrollAllocation>
+
+ @Inject
+ lateinit var payrollAllocationAdapter: PayrollAllocationAdapter
+
+ companion object {
+ fun newInstance(payrollConfiguration: PayrollConfiguration) =
+ EditPayrollAllocationFragment().apply {
+ arguments = Bundle().apply {
+ putParcelable(ConstantKeys.PAYROLL_CONFIG, payrollConfiguration)
+ }
+ }
+ }
+
+ override fun onAttach(context: Context?) {
+ super.onAttach(context)
+ if (context is OnNavigationBarListener.Payroll) {
+ listener = context
+ } else {
+ throw RuntimeException(context.toString() +
+ " must implement OnFragmentInteractionListener")
+ }
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ arguments?.let {
+ payrollConfiguration = it.getParcelable(ConstantKeys.PAYROLL_CONFIG)
+ }
+ }
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?): View? {
+
+ (activity as FineractBaseActivity).activityComponent.inject(this)
+ return inflater.inflate(R.layout.fragment_edit_payroll_allocation, container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ showUserInterface()
+ fabAddPayrollAllocation.setOnClickListener {
+ val editPayrollBottomSheet = EditPayrollBottomSheet()
+ editPayrollBottomSheet.addPayrollSource(PayrollSource.ADD)
+ editPayrollBottomSheet.setBottomSheetListener(this)
+ editPayrollBottomSheet.show(childFragmentManager, getString(R.string.payroll_allocation))
+ }
+ }
+
+ fun showUserInterface() {
+
+ val layoutManager = LinearLayoutManager(activity)
+ layoutManager.orientation = LinearLayoutManager.VERTICAL
+ rvPayrollAllocation.layoutManager = layoutManager
+ rvPayrollAllocation.setHasFixedSize(true)
+
+ this.payrollAllocations = payrollConfiguration.payrollAllocations.toMutableList()
+ payrollAllocationAdapter.setPayrollAllocations(payrollAllocations)
+ payrollAllocationAdapter.setOnClickEditDeleteListener(this)
+ rvPayrollAllocation.adapter = payrollAllocationAdapter
+ }
+
+ override fun onSelected() {
+
+ }
+
+ override fun onClickEdit(payrollAllocation: PayrollAllocation, position: Int) {
+ val editPayrollBottomSheet = EditPayrollBottomSheet()
+ editPayrollBottomSheet.addPayrollSource(PayrollSource.EDIT)
+ editPayrollBottomSheet.editPayrollAllocation(payrollAllocation, position)
+ editPayrollBottomSheet.setBottomSheetListener(this)
+ editPayrollBottomSheet.show(childFragmentManager, getString(R.string.payroll_allocation))
+ }
+
+ override fun onClickDelete(payrollAllocation: PayrollAllocation, position: Int) {
+ payrollAllocations.removeAt(position)
+ payrollAllocationAdapter.setPayrollAllocations(payrollAllocations)
+ }
+
+ override fun editPayrollAllocation(payrollAllocation: PayrollAllocation, position: Int) {
+ payrollAllocations.removeAt(position)
+ payrollAllocations.add(position, payrollAllocation)
+ payrollAllocationAdapter.setPayrollAllocations(payrollAllocations)
+ }
+
+ override fun addPayrollAllocation(payrollAllocation: PayrollAllocation) {
+ payrollAllocations.add(payrollAllocation)
+ payrollAllocationAdapter.setPayrollAllocations(payrollAllocations)
+ }
+
+ override fun verifyStep(): VerificationError? {
+ listener.setPayrollAllocations(payrollAllocations.toList())
+ return null
+ }
+
+ override fun onError(error: VerificationError) {
+
+ }
+
+}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/EditPayrollContract.kt b/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/EditPayrollContract.kt
new file mode 100644
index 0000000..78f2976
--- /dev/null
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/EditPayrollContract.kt
@@ -0,0 +1,18 @@
+package org.apache.fineract.ui.online.accounting.accounts
+
+import org.apache.fineract.data.models.payroll.PayrollConfiguration
+import org.apache.fineract.ui.base.MvpView
+
+interface EditPayrollContract {
+
+ interface View : MvpView {
+
+ fun updatePayrollSuccess()
+ }
+
+ interface Presenter {
+
+ fun updatePayrollConfiguration(identifier: String,
+ payrollConfiguration: PayrollConfiguration)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/EditPayrollFragment.kt b/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/EditPayrollFragment.kt
new file mode 100644
index 0000000..0decfcf
--- /dev/null
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/EditPayrollFragment.kt
@@ -0,0 +1,145 @@
+package org.apache.fineract.ui.online.customers.customerpayroll.editcustomerpayroll
+
+import android.app.DatePickerDialog
+import android.content.Context
+import android.os.Bundle
+import android.text.TextUtils
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import com.stepstone.stepper.Step
+import com.stepstone.stepper.VerificationError
+import kotlinx.android.synthetic.main.fragment_edit_payroll.*
+import org.apache.fineract.R
+import org.apache.fineract.data.models.customer.DateOfBirth
+import org.apache.fineract.data.models.payroll.PayrollConfiguration
+import org.apache.fineract.ui.base.FineractBaseFragment
+import org.apache.fineract.utils.ConstantKeys
+import java.text.SimpleDateFormat
+import java.util.*
+
+
+class EditPayrollFragment : FineractBaseFragment(), Step {
+
+ lateinit var payrollConfiguration: PayrollConfiguration
+ lateinit var listener: OnNavigationBarListener.Payroll
+
+ val calendar: Calendar = Calendar.getInstance()
+
+ val dateOfBirth by lazy { DateOfBirth() }
+
+ companion object {
+ fun newInstance(payrollConfiguration: PayrollConfiguration) = EditPayrollFragment().apply {
+ arguments = Bundle().apply {
+ putParcelable(ConstantKeys.PAYROLL_CONFIG, payrollConfiguration)
+ }
+ }
+
+ const val DATE_FORMAT = "dd MMM yyyy"
+ }
+
+ override fun onAttach(context: Context?) {
+ super.onAttach(context)
+ if (context is OnNavigationBarListener.Payroll) {
+ listener = context
+ } else {
+ throw RuntimeException(context.toString() +
+ " must implement OnFragmentInteractionListener")
+ }
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ arguments?.let {
+ payrollConfiguration = it.getParcelable(ConstantKeys.PAYROLL_CONFIG)
+ }
+ }
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?): View? {
+ // Inflate the layout for this fragment
+ return inflater.inflate(R.layout.fragment_edit_payroll, container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ showUserInterface()
+ }
+
+ fun showUserInterface() {
+
+ etAccount.setText(payrollConfiguration.mainAccountNumber)
+ etCreatedBy.setText(payrollConfiguration.createdBy)
+ etLastModifiedBy.setText(payrollConfiguration.lastModifiedBy)
+ etCreatedOn.setText(payrollConfiguration.createdOn)
+ etLastModifiedOn.setText(payrollConfiguration.lastModifiedOn)
+
+ etLastModifiedOn.setOnClickListener {
+ showDatePicker(it)
+ }
+
+ etCreatedOn.setOnClickListener {
+ showDatePicker(it)
+ }
+
+ }
+
+ private fun showDatePicker(buttonView: View) {
+ val datePickerDialog = DatePickerDialog(activity!!,
+ R.style.MaterialDatePickerTheme,
+ DatePickerDialog.OnDateSetListener { view, year, monthOfYear, dayOfMonth ->
+ calendar.set(Calendar.YEAR, year)
+ calendar.set(Calendar.MONTH, monthOfYear)
+ calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth)
+ dateOfBirth.day = dayOfMonth
+ dateOfBirth.month = monthOfYear + 1
+ dateOfBirth.year = year
+
+ if (buttonView.id == R.id.etLastModifiedOn) {
+ setLastModifiedDate()
+ } else {
+ setCreatedOnDate()
+ }
+
+ }, calendar
+ .get(Calendar.YEAR), calendar.get(Calendar.MONTH),
+ calendar.get(Calendar.DAY_OF_MONTH))
+ datePickerDialog.datePicker.maxDate = System.currentTimeMillis()
+ datePickerDialog.show()
+ }
+
+ fun setLastModifiedDate() {
+ val sdf = SimpleDateFormat(DATE_FORMAT, Locale.ENGLISH)
+ etLastModifiedOn.setText(sdf.format(calendar.time))
+ }
+
+ fun setCreatedOnDate() {
+ val sdf = SimpleDateFormat(DATE_FORMAT, Locale.ENGLISH)
+ etCreatedOn.setText(sdf.format(calendar.time))
+ }
+
+
+ override fun onSelected() {
+ }
+
+ override fun verifyStep(): VerificationError? {
+ if (TextUtils.isEmpty(etAccount.text.toString()) ||
+ TextUtils.isEmpty(etCreatedBy.text.toString())
+ || TextUtils.isEmpty(etLastModifiedBy.text.toString())) {
+ return VerificationError(null)
+
+ } else {
+
+ listener.setPayrollConfig(etAccount.text.toString(), etLastModifiedBy.text.toString(),
+ etLastModifiedOn.text.toString(), etCreatedBy.text.toString(),
+ etCreatedOn.text.toString())
+ }
+
+ return null
+ }
+
+ override fun onError(error: VerificationError) {
+
+ }
+
+}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/EditPayrollPresenter.kt b/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/EditPayrollPresenter.kt
new file mode 100644
index 0000000..33c3574
--- /dev/null
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/EditPayrollPresenter.kt
@@ -0,0 +1,40 @@
+package org.apache.fineract.ui.online.customers.customerpayroll.editcustomerpayroll
+
+import android.content.Context
+import io.reactivex.android.schedulers.AndroidSchedulers
+import io.reactivex.disposables.CompositeDisposable
+import io.reactivex.observers.DisposableCompletableObserver
+import io.reactivex.schedulers.Schedulers
+import org.apache.fineract.R
+import org.apache.fineract.data.datamanager.api.DataManagerPayroll
+import org.apache.fineract.data.models.payroll.PayrollConfiguration
+import org.apache.fineract.injection.ApplicationContext
+import org.apache.fineract.ui.base.BasePresenter
+import org.apache.fineract.ui.online.accounting.accounts.EditPayrollContract
+import javax.inject.Inject
+
+class EditPayrollPresenter @Inject constructor(@ApplicationContext context: Context,
+ val dataManagerPayroll: DataManagerPayroll) :
+ BasePresenter<EditPayrollContract.View>(context), EditPayrollContract.Presenter {
+
+ val compositeDisposable = CompositeDisposable()
+
+ override fun updatePayrollConfiguration(identifier: String,
+ payrollConfiguration: PayrollConfiguration) {
+
+ compositeDisposable.add(dataManagerPayroll
+ .editPayrollConfig(identifier, payrollConfiguration)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribeWith(object : DisposableCompletableObserver() {
+ override fun onComplete() {
+ mvpView.updatePayrollSuccess()
+ }
+
+ override fun onError(e: Throwable) {
+ mvpView.showError(context.getString(R.string.error_updating_payroll))
+ }
+ })
+ )
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/OnNavigationBarListener.kt b/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/OnNavigationBarListener.kt
new file mode 100644
index 0000000..42e0cfe
--- /dev/null
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/OnNavigationBarListener.kt
@@ -0,0 +1,15 @@
+package org.apache.fineract.ui.online.customers.customerpayroll.editcustomerpayroll
+
+import org.apache.fineract.data.models.payroll.PayrollAllocation
+
+interface OnNavigationBarListener {
+
+ interface Payroll {
+
+ fun setPayrollConfig(accountNo: String, lastModifiedBy: String,
+ lastModifiedOn: String, createdBy: String,
+ createdOn: String)
+
+ fun setPayrollAllocations(payrollAllocations: List<PayrollAllocation>)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/editpayrollbottomsheet/EditPayrollBottomSheet.kt b/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/editpayrollbottomsheet/EditPayrollBottomSheet.kt
new file mode 100644
index 0000000..df444f3
--- /dev/null
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/editpayrollbottomsheet/EditPayrollBottomSheet.kt
@@ -0,0 +1,84 @@
+package org.apache.fineract.ui.online.customers.customerpayroll.editcustomerpayroll.editpayrollbottomsheet
+
+import android.app.Dialog
+import android.os.Bundle
+import android.support.design.widget.BottomSheetDialogFragment
+import android.view.View
+import kotlinx.android.synthetic.main.bottom_sheet_edit_payroll_allocations.view.*
+import org.apache.fineract.R
+import org.apache.fineract.data.models.payroll.PayrollAllocation
+import java.math.BigDecimal
+
+class EditPayrollBottomSheet : BottomSheetDialogFragment() {
+
+ lateinit var payrollAllocation: PayrollAllocation
+ lateinit var payrollSource: PayrollSource
+ lateinit var onBottomSheetDialogListener: OnBottomSheetDialogListener
+ var position: Int = -1
+
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+ val bottomSheetDialog = super.onCreateDialog(savedInstanceState)
+ val rootView = View.inflate(context, R.layout.bottom_sheet_edit_payroll_allocations, null)
+ bottomSheetDialog.setContentView(rootView)
+
+ rootView.btnCancel.setOnClickListener {
+ dismiss()
+ }
+
+ rootView.btnAddAllocation.setOnClickListener {
+
+ if (!rootView.etAccount.text.isBlank()
+ && !rootView.etAmount.text.isBlank()) {
+
+ val updatedPayrollAllocation = PayrollAllocation(accountNumber =
+ rootView.etAccount.text.toString(),
+ amount = BigDecimal(rootView.etAmount.text.toString()),
+ proportional = rootView.cbProportional.isChecked)
+
+ when (payrollSource) {
+
+ PayrollSource.ADD -> onBottomSheetDialogListener
+ .addPayrollAllocation(updatedPayrollAllocation)
+
+ PayrollSource.EDIT -> onBottomSheetDialogListener
+ .editPayrollAllocation(updatedPayrollAllocation, position)
+ }
+
+ dismiss()
+ }
+ }
+
+ when (payrollSource) {
+
+ PayrollSource.EDIT -> {
+ rootView.btnAddAllocation.text = getString(R.string.edit)
+ rootView.etAmount.setText("${payrollAllocation.amount}")
+ rootView.etAccount.setText(payrollAllocation.accountNumber)
+ rootView.cbProportional.isChecked = payrollAllocation.proportional
+ }
+
+ PayrollSource.ADD -> {
+ rootView.btnAddAllocation.text = getString(R.string.add)
+ rootView.etAmount.setText("0")
+ rootView.etAccount.setText("")
+ rootView.cbProportional.isChecked = false
+ }
+ }
+
+
+ return bottomSheetDialog
+ }
+
+ fun addPayrollSource(payrollSource: PayrollSource) {
+ this.payrollSource = payrollSource
+ }
+
+ fun editPayrollAllocation(payrollAllocation: PayrollAllocation, position: Int) {
+ this.payrollAllocation = payrollAllocation
+ this.position = position
+ }
+
+ fun setBottomSheetListener(onBottomSheetDialogListener: OnBottomSheetDialogListener) {
+ this.onBottomSheetDialogListener = onBottomSheetDialogListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/editpayrollbottomsheet/OnBottomSheetDialogListener.kt b/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/editpayrollbottomsheet/OnBottomSheetDialogListener.kt
new file mode 100644
index 0000000..4e86f43
--- /dev/null
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/editpayrollbottomsheet/OnBottomSheetDialogListener.kt
@@ -0,0 +1,11 @@
+package org.apache.fineract.ui.online.customers.customerpayroll.editcustomerpayroll.editpayrollbottomsheet
+
+import org.apache.fineract.data.models.payroll.PayrollAllocation
+
+
+interface OnBottomSheetDialogListener {
+
+ fun editPayrollAllocation(payrollAllocation: PayrollAllocation, position: Int)
+
+ fun addPayrollAllocation(payrollAllocation: PayrollAllocation)
+}
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/editpayrollbottomsheet/PayrollSource.kt b/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/editpayrollbottomsheet/PayrollSource.kt
new file mode 100644
index 0000000..7c01e89
--- /dev/null
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerpayroll/editcustomerpayroll/editpayrollbottomsheet/PayrollSource.kt
@@ -0,0 +1,8 @@
+package org.apache.fineract.ui.online.customers.customerpayroll.editcustomerpayroll.editpayrollbottomsheet
+
+enum class PayrollSource {
+
+ EDIT,
+
+ ADD
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/apache/fineract/utils/ConstantKeys.java b/app/src/main/java/org/apache/fineract/utils/ConstantKeys.java
index 2258a7e..028076b 100644
--- a/app/src/main/java/org/apache/fineract/utils/ConstantKeys.java
+++ b/app/src/main/java/org/apache/fineract/utils/ConstantKeys.java
@@ -26,6 +26,7 @@
public static final String DEPOSIT_ACCOUNT = "deposit";
public static final String COUNTRIES = "countries";
+ public static final String PAYROLL_CONFIG = "payrollConfiguration";
public static final int REQUEST_PERMISSION_SETTING = 254;
diff --git a/app/src/main/res/layout/activity_edit_payroll.xml b/app/src/main/res/layout/activity_edit_payroll.xml
new file mode 100644
index 0000000..01c00ba
--- /dev/null
+++ b/app/src/main/res/layout/activity_edit_payroll.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.design.widget.CoordinatorLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:fitsSystemWindows="true"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent">
+
+ <LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ style="@style/LinearLayout.Base">
+
+ <include layout="@layout/toolbar"/>
+
+ <com.stepstone.stepper.StepperLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:id="@+id/stepperLayout"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ app:ms_activeStepColor="?attr/colorPrimary"
+ app:ms_backButtonColor="#FFFFFF"
+ app:ms_bottomNavigationBackground="?attr/colorPrimary"
+ app:ms_completeButtonColor="#FFFFFF"
+ app:ms_inactiveStepColor="#cccccc"
+ app:ms_nextButtonColor="#FFFFFF"
+ app:ms_stepperType="tabs"
+ app:ms_tabNavigationEnabled="false"
+ app:ms_tabStepDividerWidth="138dp"
+ app:ms_stepperFeedbackType="tabs|content|disabled_bottom_navigation"/>
+
+ </LinearLayout>
+
+</android.support.design.widget.CoordinatorLayout>
+
+
+
diff --git a/app/src/main/res/layout/bottom_sheet_edit_payroll_allocations.xml b/app/src/main/res/layout/bottom_sheet_edit_payroll_allocations.xml
new file mode 100644
index 0000000..ef1ecf4
--- /dev/null
+++ b/app/src/main/res/layout/bottom_sheet_edit_payroll_allocations.xml
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.design.widget.CoordinatorLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:paddingBottom="@dimen/layout_padding_24dp">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/tv_header"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:paddingBottom="@dimen/layout_padding_30dp"
+ android:paddingLeft="@dimen/layout_padding_24dp"
+ android:paddingRight="@dimen/layout_padding_24dp"
+ android:paddingStart="@dimen/layout_padding_24dp"
+ android:paddingTop="@dimen/layout_padding_24dp"
+ android:text="@string/payroll_allocation"
+ android:textColor="@color/colorPrimaryDark"
+ android:textStyle="bold" />
+
+ <android.support.design.widget.TextInputLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:paddingLeft="@dimen/layout_padding_24dp"
+ android:paddingRight="@dimen/layout_padding_24dp">
+
+ <EditText
+ android:id="@+id/etAccount"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:inputType="text"
+ android:hint="@string/account" />
+
+ </android.support.design.widget.TextInputLayout>
+
+ <android.support.design.widget.TextInputLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:paddingLeft="@dimen/layout_padding_24dp"
+ android:paddingRight="@dimen/layout_padding_24dp"
+ android:paddingTop="@dimen/layout_padding_16dp">
+
+ <EditText
+ android:id="@+id/etAmount"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:hint="@string/amount"
+ android:inputType="numberDecimal"/>
+
+ </android.support.design.widget.TextInputLayout>
+
+ </LinearLayout>
+
+ <CheckBox
+ android:id="@+id/cbProportional"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="@dimen/layout_padding_16dp"
+ android:layout_marginStart="@dimen/layout_padding_16dp"
+ android:layout_marginTop="@dimen/layout_padding_16dp"
+ android:checked="false"
+ android:text="@string/proportional" />
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="end"
+ android:orientation="horizontal"
+ android:paddingBottom="@dimen/layout_padding_30dp"
+ android:paddingEnd="@dimen/layout_padding_24dp"
+ android:paddingLeft="@dimen/layout_padding_30dp"
+ android:paddingRight="@dimen/layout_padding_24dp"
+ android:paddingStart="@dimen/layout_padding_30dp"
+ android:paddingTop="@dimen/layout_padding_16dp">
+
+ <Button
+ android:id="@+id/btnCancel"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_marginEnd="@dimen/layout_padding_16dp"
+ android:layout_marginRight="@dimen/layout_padding_16dp"
+ android:text="@string/cancel"
+ android:textAllCaps="false" />
+
+ <Button
+ android:id="@+id/btnAddAllocation"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:text="Add"
+ android:textAllCaps="false" />
+
+ </LinearLayout>
+
+ </LinearLayout>
+
+</android.support.design.widget.CoordinatorLayout>
+
+
+
diff --git a/app/src/main/res/layout/fragment_edit_payroll.xml b/app/src/main/res/layout/fragment_edit_payroll.xml
new file mode 100644
index 0000000..fabdfb1
--- /dev/null
+++ b/app/src/main/res/layout/fragment_edit_payroll.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.design.widget.CoordinatorLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/clEditPayroll"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="visible">
+
+ <android.support.v4.widget.NestedScrollView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:id="@+id/ncvEditPayroll"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@color/gray_light"
+ android:visibility="visible"
+ app:layout_behavior="@string/appbar_scrolling_view_behavior">
+
+ <android.support.v7.widget.CardView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:id="@+id/cvEditPayroll"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="@dimen/layout_padding_8dp"
+ android:layout_marginTop="@dimen/layout_padding_8dp"
+ app:cardBackgroundColor="@color/white">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:padding="@dimen/layout_padding_16dp">
+
+ <android.support.design.widget.TextInputLayout
+ android:id="@+id/tilAccount"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="@dimen/layout_padding_16dp"
+ app:errorEnabled="true">
+
+ <EditText
+ android:id="@+id/etAccount"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:hint="@string/account"
+ android:inputType="text" />
+ </android.support.design.widget.TextInputLayout>
+
+ <android.support.design.widget.TextInputLayout
+ android:id="@+id/tilCreatedBy"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ app:errorEnabled="true">
+
+ <EditText
+ android:id="@+id/etCreatedBy"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:hint="@string/created_by"
+ android:inputType="text" />
+ </android.support.design.widget.TextInputLayout>
+
+ <android.support.design.widget.TextInputLayout
+ android:id="@+id/tilCreatedOn"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ app:errorEnabled="true">
+
+ <EditText
+ android:id="@+id/etCreatedOn"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:focusable="false"
+ android:hint="@string/created_on"
+ android:inputType="date" />
+ </android.support.design.widget.TextInputLayout>
+
+ <android.support.design.widget.TextInputLayout
+ android:id="@+id/tilLastModifiedBy"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ app:errorEnabled="true">
+
+ <EditText
+ android:id="@+id/etLastModifiedBy"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:hint="@string/last_modified_by"
+ android:inputType="text" />
+ </android.support.design.widget.TextInputLayout>
+
+ <android.support.design.widget.TextInputLayout
+ android:id="@+id/tilLastModifiedOn"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ app:errorEnabled="true">
+
+ <EditText
+ android:id="@+id/etLastModifiedOn"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:focusable="false"
+ android:hint="@string/last_modified_by"
+ android:inputType="text" />
+ </android.support.design.widget.TextInputLayout>
+
+ </LinearLayout>
+
+ </LinearLayout>
+
+ </android.support.v7.widget.CardView>
+
+ </android.support.v4.widget.NestedScrollView>
+
+</android.support.design.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_edit_payroll_allocation.xml b/app/src/main/res/layout/fragment_edit_payroll_allocation.xml
new file mode 100644
index 0000000..22145a2
--- /dev/null
+++ b/app/src/main/res/layout/fragment_edit_payroll_allocation.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:id="@+id/clEditPayroll"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:visibility="visible">
+
+ <android.support.v7.widget.RecyclerView
+ android:id="@+id/rvPayrollAllocation"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent" />
+
+ <android.support.design.widget.FloatingActionButton
+ android:id="@+id/fabAddPayrollAllocation"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="bottom|end"
+ android:layout_margin="@dimen/fab_margin"
+ android:clickable="true"
+ android:focusable="true"
+ android:tint="@color/white"
+ app:srcCompat="@drawable/ic_add_black_24dp" />
+
+</android.support.design.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_payroll.xml b/app/src/main/res/layout/fragment_payroll.xml
index 3fe7b5f..95d0709 100644
--- a/app/src/main/res/layout/fragment_payroll.xml
+++ b/app/src/main/res/layout/fragment_payroll.xml
@@ -201,5 +201,15 @@
layout="@layout/layout_exception_handler"
android:visibility="gone" />
+ <android.support.design.widget.FloatingActionButton
+ android:clickable="true"
+ android:focusable="true"
+ android:id="@+id/fabEditPayroll"
+ android:layout_gravity="bottom|end"
+ android:layout_height="wrap_content"
+ android:layout_margin="@dimen/fab_margin"
+ android:layout_width="wrap_content"
+ android:tint="@color/white"
+ app:srcCompat="@drawable/ic_edit_black_24dp"/>
</android.support.design.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_payroll_allocation.xml b/app/src/main/res/layout/item_payroll_allocation.xml
new file mode 100644
index 0000000..3b02da1
--- /dev/null
+++ b/app/src/main/res/layout/item_payroll_allocation.xml
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:padding="@dimen/layout_padding_8dp">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:baselineAligned="false"
+ android:orientation="horizontal"
+ android:paddingEnd="0dp"
+ android:paddingLeft="@dimen/layout_padding_16dp"
+ android:paddingRight="0dp"
+ android:paddingStart="@dimen/layout_padding_16dp"
+ android:paddingTop="@dimen/layout_padding_4dp"
+ android:weightSum="2">
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:orientation="vertical">
+
+ <TextView
+ style="@style/Base.TextAppearance.AppCompat.Small"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/account"
+ android:textSize="@dimen/text_size_12sp" />
+
+ <TextView
+ android:id="@+id/tv_account"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:paddingTop="@dimen/layout_padding_4dp"
+ android:textSize="@dimen/text_medium"
+ tools:text="Account Number" />
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:gravity="end"
+ android:orientation="horizontal">
+
+ <ImageView
+ android:id="@+id/iv_edit"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_marginEnd="@dimen/layout_padding_16dp"
+ android:layout_marginRight="@dimen/layout_padding_16dp"
+ android:clickable="true"
+ android:contentDescription="@string/debt_income_edit_image"
+ android:foreground="?android:attr/selectableItemBackground"
+ android:tint="@color/colorAccent"
+ app:srcCompat="@drawable/ic_edit_black_24dp" />
+
+ <ImageView
+ android:id="@+id/iv_delete"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_marginEnd="@dimen/layout_padding_8dp"
+ android:layout_marginRight="@dimen/layout_padding_8dp"
+ android:clickable="true"
+ android:contentDescription="@string/debt_income_delete_image"
+ android:foreground="?android:attr/selectableItemBackground"
+ android:tint="@color/colorAccent"
+ app:srcCompat="@drawable/ic_delete_black_24dp" />
+ </LinearLayout>
+
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:paddingEnd="0dp"
+ android:paddingLeft="@dimen/layout_padding_16dp"
+ android:paddingRight="0dp"
+ android:paddingStart="@dimen/layout_padding_16dp"
+ android:paddingTop="@dimen/layout_padding_16dp">
+
+ <TextView
+ style="@style/Base.TextAppearance.AppCompat.Small"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/amount"
+ android:textSize="@dimen/text_size_12sp" />
+
+ <TextView
+ android:id="@+id/tv_amount"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:paddingTop="@dimen/layout_padding_4dp"
+ android:textSize="@dimen/text_medium"
+ tools:text="4500" />
+
+ </LinearLayout>
+
+ <CheckBox
+ android:id="@+id/cb_Proportional"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="@dimen/layout_padding_16dp"
+ android:layout_marginStart="@dimen/layout_padding_16dp"
+ android:layout_marginTop="@dimen/layout_padding_16dp"
+ android:clickable="false"
+ android:text="@string/proportional" />
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:layout_marginTop="@dimen/layout_padding_16dp"
+ android:background="@color/collapse_image" />
+ </LinearLayout>
+
+</android.support.design.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 0b7297f..d82a0ba 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -75,6 +75,7 @@
<string name="account">Account</string>
<string name="balance">Balance</string>
<string name="beneficiaries">Beneficiaries</string>
+ <string name="proportional">Proportional</string>
<string name="payroll_configuration">Payroll Configuration</string>
<string name="payroll_allocation">Payroll Allocation</string>
<string name="no_payroll_allocation">No Payroll Allocation</string>
@@ -92,6 +93,8 @@
<string name="day">Day</string>
<string name="in">In</string>
<string name="required">Required</string>
+ <string name="edit">Edit</string>
+ <string name="add">Add</string>
<string name="add_debt">Add Debt</string>
<string name="add_document">Add Document</string>
<string name="add_income">Add Income</string>
@@ -120,6 +123,7 @@
<string name="is_member">Is member?</string>
<string name="create_customer">Create Customer</string>
<string name="edit_customer">Edit customer</string>
+ <string name="edit_payroll">Edit payroll</string>
<string name="create_new_identification">Create new Identification</string>
<string name="create_new_deposit">Create new deposit</string>
<string name="update_deposit">Update deposit</string>
@@ -176,6 +180,7 @@
<string name="customer_created_successfully">%1$s created successfully</string>
<string name="customer_updated_successfully">%1$s updated successfully</string>
<string name="created_by">Created by</string>
+ <string name="created_on">Created on</string>
<string name="no_deposit_account">No deposit account</string>
<string name="identification_search">Search identification card</string>
<string name="ledger_search">Ledger Search</string>
@@ -267,6 +272,7 @@
<string name="error_loading_countries">Error while fetching countries</string>
<string name="error_creating_customer">Error while creating customer</string>
<string name="error_updating_customer">Error while updating customer</string>
+ <string name="error_updating_payroll">Error while updating payroll</string>
<string name="error_updating_status">Error while updating customer</string>
<string name="error_fetching_identification_list">Error while fetching identification cards</string>
<string name="error_creating_identification_card">Error while creating identification card</string>
@@ -405,6 +411,11 @@
<item>Review</item>
</string-array>
+ <string-array name="edit_payroll_steps">
+ <item>Customer payroll</item>
+ <item>Payroll allocations</item>
+ </string-array>
+
<string-array name="repay_unit_type">
<item>weeks</item>
<item>months</item>
@@ -475,7 +486,6 @@
<item>29.</item>
<item>30.</item>
</string-array>
-<<<<<<< HEAD
<!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">Hello blank fragment</string>
@@ -485,6 +495,4 @@
<string name="no_documents_to_show_add_documents">No documents to show. add documents</string>
<string name="customer_payloads">Customer Payloads</string>
<string name="email">Email</string>
-=======
->>>>>>> feat: payroll configurations of customer
</resources>