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

Feat: Add support for viewing, creating, updating and deleting Roles #90

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
22 changes: 3 additions & 19 deletions app/src/main/AndroidManifest.xml
Expand Up @@ -20,6 +20,7 @@
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".ui.online.roles.roledetails.RolesActivity"></activity>

<provider
android:name="androidx.core.content.FileProvider"
Expand All @@ -36,54 +37,36 @@
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<activity android:name=".ui.online.launcher.LauncherActivity" />

<activity android:name=".ui.online.PassCodeActivity" />

<activity
android:name=".ui.online.login.LoginActivity"
android:windowSoftInputMode="adjustResize" />

<activity android:name=".ui.online.DashboardActivity" />

<activity android:name=".ui.online.customers.customerdetails.CustomerDetailsActivity" />

<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" />

<activity android:name=".ui.online.loanaccounts.plannedpayment.PlannedPaymentActivity" />

<activity android:name=".ui.online.loanaccounts.loanapplication.loanactivity.LoanApplicationActivity" />

<activity
android:name=".ui.online.customers.createcustomer.customeractivity.CreateCustomerActivity"
android:windowSoftInputMode="adjustResize|stateHidden" />

<activity android:name=".ui.online.loanaccounts.debtincomereport.DebtIncomeReportActivity" />

<activity android:name=".ui.online.identification.identificationlist.IdentificationsActivity" />

<activity android:name=".ui.online.identification.createidentification.identificationactivity.CreateIdentificationActivity" />

<activity android:name=".ui.online.identification.viewscancard.ViewScanCardActivity" />

<activity
android:name=".ui.online.customers.customerprofile.CustomerProfileActivity"
android:theme="@style/AppTheme.Black" />

<activity
android:name=".ui.online.depositaccounts.createdepositaccount.createdepositactivity.CreateDepositActivity"
android:windowSoftInputMode="adjustPan" />

<activity android:name=".ui.online.customers.customeractivities.CustomerActivitiesActivity" />

<receiver
Expand All @@ -93,6 +76,7 @@
<action android:name="org.apache.fineract.JobsReceiver" />
</intent-filter>
</receiver>

<meta-data
android:name="preloaded_fonts"
android:resource="@array/preloaded_fonts" />
Expand Down
Expand Up @@ -10,13 +10,14 @@
import javax.inject.Inject;
import javax.inject.Singleton;

import io.reactivex.Completable;
import io.reactivex.Observable;
import io.reactivex.ObservableSource;
import io.reactivex.functions.Function;

/**
* @author Rajan Maurya
* On 24/08/17.
* On 24/08/17.
*/
@Singleton
public class DataManagerRoles extends FineractBaseDataManager {
Expand All @@ -26,7 +27,7 @@ public class DataManagerRoles extends FineractBaseDataManager {

@Inject
public DataManagerRoles(BaseApiManager baseApiManager,
DataManagerAuth dataManagerAuth, PreferencesHelper preferencesHelper) {
DataManagerAuth dataManagerAuth, PreferencesHelper preferencesHelper) {
super(dataManagerAuth, preferencesHelper);
this.baseApiManager = baseApiManager;
this.preferencesHelper = preferencesHelper;
Expand All @@ -44,4 +45,23 @@ public ObservableSource<List<Role>> apply(Throwable throwable)
}
});
}

public Completable createRole(Role role) {
return authenticatedCompletableApi(
baseApiManager.getRolesAndPermissionsService()
.createRole(role));
}

public Completable deleteRole(String identifier) {
return authenticatedCompletableApi(
baseApiManager.getRolesAndPermissionsService()
.deleteRole(identifier));
}

public Completable updateRole(String identifier, Role role) {
return authenticatedCompletableApi(
baseApiManager.getRolesAndPermissionsService()
.updateRole(
identifier, role));
}
}
Expand Up @@ -5,15 +5,31 @@

import java.util.List;

import io.reactivex.Completable;
import io.reactivex.Observable;
import retrofit2.http.Body;
import retrofit2.http.DELETE;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Path;

/**
* @author Rajan Maurya
* On 24/08/17.
* On 24/08/17.
*/
public interface RolesService {

@GET(EndPoints.API_IDENTITY_PATH + "/roles")
Observable<List<Role>> getRoles();

@POST(EndPoints.API_IDENTITY_PATH + "/roles")
Completable createRole(@Body Role role);

@DELETE(EndPoints.API_IDENTITY_PATH + "/roles/{identifier}")
Completable deleteRole(@Path("identifier") String identifier);

@PUT(EndPoints.API_ACCOUNTING_PATH + "/roles/{identifier}")
Completable updateRole(@Path("identifier") String identifier,
@Body Role role);
}
Expand Up @@ -49,6 +49,9 @@
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.roles.createrole.CreateRoleFragment;
import org.apache.fineract.ui.online.roles.roledetails.RolesActivity;
import org.apache.fineract.ui.online.roles.roledetails.RolesDetailsFragment;
import org.apache.fineract.ui.online.roles.roleslist.RolesFragment;
import org.apache.fineract.ui.online.teller.TellerFragment;
import org.apache.fineract.ui.product.ProductFragment;
Expand Down Expand Up @@ -135,5 +138,11 @@ public interface ActivityComponent {
void inject(EditPayrollAllocationFragment editPayrollAllocationFragment);

void inject(EditPayrollActivity editPayrollActivity);

void inject(RolesDetailsFragment rolesDetailsFragment);

void inject(CreateRoleFragment createRoleFragment);

void inject(RolesActivity rolesActivity);
}

@@ -0,0 +1,127 @@
package org.apache.fineract.ui.adapters

import android.content.Context
import android.graphics.Color
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.chip.Chip
import kotlinx.android.synthetic.main.roles_details_item.view.*
import org.apache.fineract.R
import org.apache.fineract.data.models.rolesandpermission.AllowedOperation
import org.apache.fineract.data.models.rolesandpermission.Permission
import org.apache.fineract.injection.ApplicationContext
import org.apache.fineract.ui.online.roles.createrole.RoleAction
import javax.inject.Inject

class RolesPermissionAdapter @Inject constructor(
@ApplicationContext val context: Context)
: RecyclerView.Adapter<RolesPermissionAdapter.ViewHolder>() {

private var permissionList: ArrayList<Permission> = ArrayList()
private var roleAction: RoleAction = RoleAction.CREATE
private var onItemClickListener: OnItemClickListener? = null

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder.from(parent)
}

override fun getItemCount(): Int {
return permissionList.size
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(permissionList[position],
context,
roleAction,
onItemClickListener)
}

fun submitList(permissionList: List<Permission>) {
this.permissionList.clear()
this.permissionList.addAll(permissionList)
notifyDataSetChanged()
}

fun setRoleAction(roleAction: RoleAction) {
this.roleAction = roleAction
}

fun setOnItemClickListener(onItemClickListener: OnItemClickListener) {
this.onItemClickListener = onItemClickListener
}

class ViewHolder constructor(private val viewItem: View)
: RecyclerView.ViewHolder(viewItem) {

fun bind(permission: Permission,
context: Context,
roleAction: RoleAction,
onItemClickListener: OnItemClickListener?) {
setItemActionsVisibility(viewItem, roleAction)
viewItem.tv_permittable_end_group_id.text =
permission.permittableEndpointGroupIdentifier
viewItem.cg_allowed_operation.removeAllViews()
permission.allowedOperations?.let {
for (operation in it) {
when (operation) {
AllowedOperation.CHANGE -> {
createChip(context, context.getString(R.string.change))
}
AllowedOperation.DELETE -> {
createChip(context, context.getString(R.string.delete))
}
AllowedOperation.READ -> {
createChip(context, context.getString(R.string.read))
}
}
}
}
viewItem.iv_delete.setOnClickListener {
onItemClickListener?.onDeleteClick(adapterPosition)
}
viewItem.iv_edit.setOnClickListener {
onItemClickListener?.onEditClick(adapterPosition)
}
}

private fun createChip(context: Context, text: String) {
val chip = Chip(viewItem.cg_allowed_operation.context)
chip.text = text
chip.setChipBackgroundColorResource(R.color.colorPrimary)
chip.setTextColor(Color.WHITE)
chip.setChipIconTintResource(R.color.white)
chip.chipIcon = ContextCompat.getDrawable(
context, R.drawable.ic_done_black_24dp)
viewItem.cg_allowed_operation.addView(chip)
}

private fun setItemActionsVisibility(viewItem: View,
roleAction: RoleAction) {
when (roleAction) {
RoleAction.CREATE, RoleAction.EDIT -> {
viewItem.iv_edit.visibility = View.VISIBLE
viewItem.iv_delete.visibility = View.VISIBLE
}
RoleAction.VIEW -> {
viewItem.iv_edit.visibility = View.GONE
viewItem.iv_delete.visibility = View.GONE
}
}
}

companion object {
fun from(parent: ViewGroup): ViewHolder {
return ViewHolder(LayoutInflater.from(parent.context)
.inflate(R.layout.roles_details_item, parent, false))
}
}
}
}

interface OnItemClickListener {
fun onDeleteClick(position: Int)
fun onEditClick(position: Int)
}