diff --git a/admin/templates/resource/create.html b/admin/templates/resource/create.html index b1982ac..c8aa72d 100644 --- a/admin/templates/resource/create.html +++ b/admin/templates/resource/create.html @@ -14,7 +14,13 @@
- {% if 'VARCHAR' in attribute.type %} + {% if attribute["name"] == "roles" %} + + {% elif 'VARCHAR' in attribute.type %} {% elif attribute.type == 'INTEGER' %} diff --git a/admin/templates/resource/edit.html b/admin/templates/resource/edit.html index 030bd37..e65793c 100644 --- a/admin/templates/resource/edit.html +++ b/admin/templates/resource/edit.html @@ -14,7 +14,13 @@
- {% if attribute["name"] == admin_configs['user']['secret'] %} + {% if attribute["name"] == "roles" %} + + {% elif attribute["name"] == admin_configs['user']['secret'] %} {% elif 'VARCHAR' in attribute.type %} diff --git a/admin/views.py b/admin/views.py index 20c7326..35aa5e6 100644 --- a/admin/views.py +++ b/admin/views.py @@ -72,6 +72,7 @@ from flask_bcrypt import Bcrypt from flask_login import current_user, login_required, login_user, logout_user from flask_wtf import FlaskForm +from models.admin_portal_user import AdminPortalUser # TODO: remove project dependency from models.crop import CropModel @@ -173,12 +174,12 @@ def process_user_id(user_id): if user_id is None: return False - selected_user = UserModel.query.filter( - UserModel.roles == "cs_user", UserModel.id == user_id + selected_user = AdminPortalUser.query.filter( + AdminPortalUser.roles == "Data Collector", AdminPortalUser.id == user_id ).first() if selected_user is not None: - if selected_user.roles == "cs_user": + if selected_user.roles == "Data Collector": return "Team Member" else: return "Regular User" @@ -584,10 +585,6 @@ def filter_resources( and_(or_(*search_query_conditions), and_(*date_conditions)) ) - if model.__name__ == 'UserModel': - role_condition = model.roles.in_(['cs_user', 'admin', 'user', 'superadmin']) - filter_query = filter_query.filter(or_(role_condition, model.roles.isnot(None))) - if sort and len(sort): sort_conditions = [] for criterion in sort: @@ -733,12 +730,14 @@ def resource_create(resource_type): resource_class = get_resource_class(resource_type) model = resource_class.model editable_attributes = get_editable_attributes(resource_type) + roles_list = ["Super Admin", "Data Validator", "Data Collector", "Admin"] if request.method == "GET": return render_template( "resource/create.html", resource_type=resource_type, editable_attributes=editable_attributes, + roles_list=roles_list, ) attributes_to_save = {} @@ -845,6 +844,7 @@ def resource_edit(resource_type, resource_id): ) editable_attributes = get_editable_attributes(resource_type) + roles_list = ["Super Admin", "Data Validator", "Data Collector", "Admin"] old_resource = copy.copy( resource ) # make a clone before there are any updates @@ -856,6 +856,7 @@ def resource_edit(resource_type, resource_id): resource=resource, editable_attributes=editable_attributes, admin_configs=admin_configs, + roles_list=roles_list, ) if ( @@ -900,6 +901,10 @@ def resource_edit(resource_type, resource_id): ) setattr(resource, attribute["name"], validated_attribute_value) + update_roles_in_admin_portal_users( + resource.id, validated_attribute_value + ) + if resource_type == "mandi-receipt": updated_mandi = MandiModel.query.get(resource.mandi_id) updated_crop = CropModel.query.get(resource.crop_id) @@ -978,6 +983,16 @@ def resource_delete(resource_type, resource_id): ) +def update_roles_in_admin_portal_users(user_id, roles): + admin_user = AdminPortalUser.query.filter_by(id=user_id).first() + + if admin_user: + admin_user.roles = roles + + db.session.add(admin_user) + db.session.commit() + + @admin.route("/resource//download", methods=["GET"]) @login_required def resource_download(resource_type): @@ -1326,8 +1341,8 @@ def resource_filter(resource_type, status): # cs_user_details cs_users = ( - UserModel.query.filter(UserModel.roles == "cs_user") - .order_by(asc(UserModel.name)) + AdminPortalUser.query.filter(AdminPortalUser.roles == "Data Collector") + .order_by(asc(AdminPortalUser.name)) .all() ) list_display = resource_class.list_display @@ -1348,8 +1363,8 @@ def resource_filter(resource_type, status): selected_crop = crop_id if user_id: filter_conditions.append(model.user_id == user_id) - selected_user = UserModel.query.filter( - UserModel.roles == "cs_user", UserModel.id == user_id + selected_user = AdminPortalUser.query.filter( + AdminPortalUser.roles == "Data Collector", AdminPortalUser.id == user_id ).first() selected_user_mobile_number = selected_user.mobile_number selected_user_id = user_id