def web_user_sync(self, ews_webuser): username = ews_webuser.email.lower() if not username: try: validate_email(ews_webuser.username) username = ews_webuser.username except ValidationError: return None user = WebUser.get_by_username(username) user_dict = { 'first_name': ews_webuser.first_name, 'last_name': ews_webuser.last_name, 'is_active': ews_webuser.is_active, 'last_login': force_to_datetime(ews_webuser.last_login), 'date_joined': force_to_datetime(ews_webuser.date_joined), 'password_hashed': True, } location_id = None if ews_webuser.location: try: location = SQLLocation.objects.get(domain=self.domain, external_id=ews_webuser.location) location_id = location.location_id except SQLLocation.DoesNotExist: pass if user is None: try: user = WebUser.create(domain=None, username=username, password=ews_webuser.password, email=ews_webuser.email, **user_dict) user.add_domain_membership(self.domain, location_id=location_id) except Exception as e: logging.error(e) else: if self.domain not in user.get_domains(): user.add_domain_membership(self.domain, location_id=location_id) ews_webuser_extension(user, ews_webuser) dm = user.get_domain_membership(self.domain) if dm.location_id != location_id: dm.location_id = location_id if ews_webuser.is_superuser: dm.role_id = UserRole.by_domain_and_name(self.domain, 'Administrator')[0].get_id elif ews_webuser.groups and ews_webuser.groups[0].name == 'facility_manager': dm.role_id = UserRole.by_domain_and_name(self.domain, 'Facility manager')[0].get_id else: if ews_webuser.supply_point: supply_point = get_supply_point_case_by_domain_external_id(self.domain, ews_webuser.supply_point) if supply_point: dm.location_id = supply_point.location_id dm.role_id = UserRole.by_domain_and_name(self.domain, 'Web Reporter')[0].get_id else: dm.role_id = UserRole.get_read_only_role_by_domain(self.domain).get_id else: dm.role_id = UserRole.get_read_only_role_by_domain(self.domain).get_id user.save() return user
def _create_or_edit_administrator_role(domain): administrator_role = UserRole.by_domain_and_name(domain, 'Administrator') reports_list = [ "corehq.apps.reports.standard.sms.MessageLogReport", "custom.ewsghana.reports.specific_reports.dashboard_report.DashboardReport", "custom.ewsghana.reports.specific_reports.stock_status_report.StockStatus", "custom.ewsghana.reports.specific_reports.reporting_rates.ReportingRatesReport", "custom.ewsghana.reports.maps.EWSMapReport", "custom.ewsghana.reports.email_reports.CMSRMSReport", "custom.ewsghana.reports.email_reports.StockSummaryReport", "custom.ewsghana.comparison_report.ProductsCompareReport", "custom.ewsghana.comparison_report.LocationsCompareReport", "custom.ewsghana.comparison_report.SupplyPointsCompareReport", "custom.ewsghana.comparison_report.WebUsersCompareReport", "custom.ewsghana.comparison_report.SMSUsersCompareReport" ] if administrator_role: permissions = Permissions(edit_web_users=True, edit_commcare_users=True, edit_locations=True, view_reports=False, view_report_list=reports_list) administrator_role[0].permissions = permissions administrator_role[0].save() else: role = UserRole(domain=domain, permissions=Permissions(view_reports=False, edit_web_users=True, edit_commcare_users=True, edit_locations=True, view_report_list=reports_list), name='Administrator') role.save()
def _create_or_edit_facility_manager_role(domain): facility_manager_role = UserRole.by_domain_and_name(domain, 'Facility manager') reports_list = [ "corehq.apps.reports.standard.sms.MessageLogReport", "custom.ewsghana.reports.specific_reports.dashboard_report.DashboardReport", "custom.ewsghana.reports.specific_reports.stock_status_report.StockStatus", "custom.ewsghana.reports.specific_reports.reporting_rates.ReportingRatesReport", "custom.ewsghana.reports.maps.EWSMapReport" ] if facility_manager_role: permissions = Permissions( edit_web_users=True, edit_commcare_users=True, view_reports=False, view_report_list=reports_list ) facility_manager_role[0].permissions = permissions facility_manager_role[0].save() else: role = UserRole( domain=domain, permissions=Permissions( view_reports=False, edit_web_users=True, edit_commcare_users=True, view_report_list=reports_list ), name='Facility manager' ) role.save()
def _create_or_edit_facility_manager_role(self): facility_manager_role = UserRole.by_domain_and_name(self.domain, 'Facility manager') reports_list = [ "corehq.apps.reports.standard.sms.MessageLogReport", "custom.ewsghana.reports.specific_reports.dashboard_report.DashboardReport", "custom.ewsghana.reports.specific_reports.stock_status_report.StockStatus", "custom.ewsghana.reports.specific_reports.reporting_rates.ReportingRatesReport", "custom.ewsghana.reports.maps.EWSMapReport" ] if facility_manager_role: permissions = Permissions( edit_web_users=True, edit_commcare_users=True, view_reports=False, view_report_list=reports_list ) facility_manager_role[0].permissions = permissions facility_manager_role[0].save() else: role = UserRole( domain=self.domain, permissions=Permissions( view_reports=False, edit_web_users=True, edit_commcare_users=True, view_report_list=reports_list ), name='Facility manager' ) role.save()
def set_default_role(domain, commcare_user): from corehq.apps.users.models import UserRole if commcare_user.get_role(domain): return roles = UserRole.by_domain_and_name(domain, DEFAULT_MOBILE_WORKER_ROLE) if roles: commcare_user.set_role(domain, roles[0].get_qualified_id()) commcare_user.save()
def web_user_sync(self, ews_webuser): username = ews_webuser.email.lower() if not username: try: validate_email(ews_webuser.username) username = ews_webuser.username except ValidationError: return None user = WebUser.get_by_username(username) user_dict = { 'first_name': ews_webuser.first_name, 'last_name': ews_webuser.last_name, 'is_active': ews_webuser.is_active, 'last_login': force_to_datetime(ews_webuser.last_login), 'date_joined': force_to_datetime(ews_webuser.date_joined), 'password_hashed': True, } sp = SupplyPointCase.view('hqcase/by_domain_external_id', key=[self.domain, str(ews_webuser.location)], reduce=False, include_docs=True, limit=1).first() location_id = sp.location_id if sp else None if user is None: try: user = WebUser.create(domain=None, username=username, password=ews_webuser.password, email=ews_webuser.email, **user_dict) user.add_domain_membership(self.domain, location_id=location_id) except Exception as e: logging.error(e) else: if self.domain not in user.get_domains(): user.add_domain_membership(self.domain, location_id=location_id) ews_webuser_extension(user, ews_webuser) dm = user.get_domain_membership(self.domain) if ews_webuser.is_superuser: dm.role_id = UserRole.by_domain_and_name(self.domain, 'Administrator')[0].get_id elif ews_webuser.groups and ews_webuser.groups[0].name == 'facility_manager': dm.role_id = UserRole.by_domain_and_name(self.domain, 'Facility manager')[0].get_id else: dm.role_id = UserRole.get_read_only_role_by_domain(self.domain).get_id user.save() return user
def _set_role_for_bundle(kwargs, bundle): # check for roles associated with the domain domain_roles = UserRole.by_domain_and_name(kwargs['domain'], bundle.data.get('role')) if domain_roles: qualified_role_id = domain_roles[0].get_qualified_id() bundle.obj.set_role(kwargs['domain'], qualified_role_id) else: # check for preset roles and now create them for the domain permission_preset_name = UserRole.get_preset_permission_by_name(bundle.data.get('role')) if permission_preset_name: bundle.obj.set_role(kwargs['domain'], permission_preset_name)
def _set_user_role(self, user, role_name): from corehq.apps.users.models import UserRole roles = UserRole.by_domain_and_name(self.domain, role_name) if len(roles) == 0: raise AssertionError("There is no user role '{}', did someone change the name?" .format(role_name)) elif len(roles) > 1: raise AssertionError("There are more than one roles called '{}', please delete or " "rename one.".format(role_name)) else: role = roles[0] user.set_role(self.domain, role.get_qualified_id())
def test_create_facility_manager(self): with open(os.path.join(self.datapath, 'sample_webusers.json')) as f: webuser = EWSUser(json.loads(f.read())[1]) self.assertEqual(0, len(WebUser.by_domain(TEST_DOMAIN))) self.api_object.web_user_sync(webuser) web_users = list(WebUser.by_domain(TEST_DOMAIN)) self.assertEqual(1, len(web_users)) self.assertEqual(0, len(CommCareUser.by_domain(TEST_DOMAIN))) facility_manager_role = UserRole.by_domain_and_name(TEST_DOMAIN, 'Facility manager')[0] dm = web_users[0].get_domain_membership(TEST_DOMAIN) self.assertEqual(facility_manager_role.get_id, dm.role_id)
def test_create_web_reporter(self): with open(os.path.join(self.datapath, 'sample_webusers.json')) as f: webuser = EWSUser(json.loads(f.read())[2]) ewsghana_webuser = self.api_object.web_user_sync(webuser) web_users = list(WebUser.by_domain(TEST_DOMAIN)) self.assertEqual(1, len(web_users)) self.assertEqual(0, len(CommCareUser.by_domain(TEST_DOMAIN))) web_reporter_role = UserRole.by_domain_and_name(TEST_DOMAIN, 'Web Reporter')[0] dm = web_users[0].get_domain_membership(TEST_DOMAIN) self.assertEqual(web_reporter_role.get_id, dm.role_id) location = SQLLocation.objects.get(external_id=620, domain=TEST_DOMAIN) self.assertEqual(location.location_id, ewsghana_webuser.get_domain_membership(TEST_DOMAIN).location_id)
def main_context(self): contacts = CommCareUser.by_domain(self.domain, reduce=True) web_users = WebUser.by_domain(self.domain) web_users_admins = web_users_read_only = 0 facilities = SQLLocation.objects.filter(domain=self.domain, location_type__name__iexact='FACILITY') admin_role_list = UserRole.by_domain_and_name(self.domain, 'Administrator') if admin_role_list: admin_role = admin_role_list[0] else: admin_role = None for web_user in web_users: dm = web_user.get_domain_membership(self.domain) if admin_role and dm.role_id == admin_role.get_id: web_users_admins += 1 else: web_users_read_only += 1 main_context = super(GlobalStats, self).main_context entities_reported_stock = SQLLocation.objects.filter( domain=self.domain, location_type__administrative=False ).count() context = { 'root_name': self.root_name, 'country': SQLLocation.objects.filter(domain=self.domain, location_type__name__iexact=self.root_name).count(), 'region': SQLLocation.objects.filter(domain=self.domain, location_type__name__iexact='region').count(), 'district': SQLLocation.objects.filter( domain=self.domain, location_type__name__iexact='district' ).count(), 'entities_reported_stock': entities_reported_stock, 'facilities': len(facilities), 'contacts': contacts[0]['value'] if contacts else 0, 'web_users': len(web_users), 'web_users_admins': web_users_admins, 'web_users_read_only': web_users_read_only, 'products': SQLProduct.objects.filter(domain=self.domain, is_archived=False).count(), 'product_stocks': StockState.objects.filter(sql_product__domain=self.domain).count(), 'stock_transactions': StockTransaction.objects.filter(report__domain=self.domain).count(), 'inbound_messages': SMS.count_by_domain(self.domain, direction=INCOMING), 'outbound_messages': SMS.count_by_domain(self.domain, direction=OUTGOING), } if self.show_supply_point_types: counts = SQLLocation.objects.values('location_type__name').filter(domain=self.domain).annotate( Count('location_type') ).order_by('location_type__name') context['location_types'] = counts main_context.update(context) return main_context
def _create_or_edit_administrator_role(domain): administrator_role = UserRole.by_domain_and_name(domain, 'Administrator') reports_list = [ "corehq.apps.reports.standard.sms.MessageLogReport", "custom.ewsghana.reports.specific_reports.dashboard_report.DashboardReport", "custom.ewsghana.reports.specific_reports.stock_status_report.StockStatus", "custom.ewsghana.reports.specific_reports.reporting_rates.ReportingRatesReport", "custom.ewsghana.reports.maps.EWSMapReport", "custom.ewsghana.reports.email_reports.CMSRMSReport", "custom.ewsghana.reports.email_reports.StockSummaryReport", "custom.ewsghana.comparison_report.ProductsCompareReport", "custom.ewsghana.comparison_report.LocationsCompareReport", "custom.ewsghana.comparison_report.SupplyPointsCompareReport", "custom.ewsghana.comparison_report.WebUsersCompareReport", "custom.ewsghana.comparison_report.SMSUsersCompareReport" ] if administrator_role: permissions = Permissions( edit_web_users=True, view_web_users=True, view_roles=True, edit_commcare_users=True, view_commcare_users=True, edit_groups=True, view_groups=True, edit_locations=True, view_locations=True, view_reports=False, view_report_list=reports_list ) administrator_role[0].permissions = permissions administrator_role[0].save() else: role = UserRole( domain=domain, permissions=Permissions( view_reports=False, edit_web_users=True, view_web_users=True, view_roles=True, edit_commcare_users=True, view_commcare_users=True, edit_groups=True, view_groups=True, edit_locations=True, view_locations=True, view_report_list=reports_list ), name='Administrator' ) role.save()
def main_context(self): contacts = CommCareUser.by_domain(self.domain, reduce=True) web_users = WebUser.by_domain(self.domain) web_users_admins = web_users_read_only = 0 facilities = SQLLocation.objects.filter(domain=self.domain, location_type__name__iexact='FACILITY') admin_role_list = UserRole.by_domain_and_name(self.domain, 'Administrator') if admin_role_list: admin_role = admin_role_list[0] else: admin_role = None for web_user in web_users: dm = web_user.get_domain_membership(self.domain) if admin_role and dm.role_id == admin_role.get_id: web_users_admins += 1 else: web_users_read_only += 1 main_context = super(GlobalStats, self).main_context entities_reported_stock = SQLLocation.objects.filter( domain=self.domain, location_type__administrative=False ).count() context = { 'root_name': self.root_name, 'country': SQLLocation.objects.filter(domain=self.domain, location_type__name__iexact=self.root_name).count(), 'region': SQLLocation.objects.filter(domain=self.domain, location_type__name__iexact='region').count(), 'district': SQLLocation.objects.filter( domain=self.domain, location_type__name__iexact='district' ).count(), 'entities_reported_stock': entities_reported_stock, 'facilities': len(facilities), 'contacts': contacts[0]['value'] if contacts else 0, 'web_users': len(web_users), 'web_users_admins': web_users_admins, 'web_users_read_only': web_users_read_only, 'products': SQLProduct.objects.filter(domain=self.domain, is_archived=False).count(), 'product_stocks': StockState.objects.filter(sql_product__domain=self.domain).count(), 'stock_transactions': StockTransaction.objects.filter(report__domain=self.domain).count(), 'inbound_messages': SMSLog.count_incoming_by_domain(self.domain), 'outbound_messages': SMSLog.count_outgoing_by_domain(self.domain) } if self.show_supply_point_types: counts = SQLLocation.objects.values('location_type__name').filter(domain=self.domain).annotate( Count('location_type') ).order_by('location_type__name') context['location_types'] = counts main_context.update(context) return main_context
def add_domain_to_team(request, org, team_id): domain = request.POST.get("project_name", None) if not domain: messages.error(request, "You must specify a project name") elif domain not in [d.name for d in Domain.get_by_organization(org)]: messages.error(request, "You cannot add a domain that isn't managed by this organization") else: team = Team.get(team_id) team.add_domain_membership(domain) read_only_role = UserRole.by_domain_and_name(domain, 'Read Only').one() team.set_role(domain, 'user-role:%s' % read_only_role.get_id) team.save() return HttpResponseRedirect(reverse(request.POST.get('redirect_url', 'orgs_team_members'), args=(org, team_id)))
def test_create_web_reporter(self): with open(os.path.join(self.datapath, 'sample_webusers.json')) as f: webuser = EWSUser(json.loads(f.read())[2]) ewsghana_webuser = self.api_object.web_user_sync(webuser) web_users = list(WebUser.by_domain(TEST_DOMAIN)) self.assertEqual(1, len(web_users)) self.assertEqual(0, len(CommCareUser.by_domain(TEST_DOMAIN))) web_reporter_role = UserRole.by_domain_and_name( TEST_DOMAIN, 'Web Reporter')[0] dm = web_users[0].get_domain_membership(TEST_DOMAIN) self.assertEqual(web_reporter_role.get_id, dm.role_id) location = SQLLocation.objects.get(external_id=620, domain=TEST_DOMAIN) self.assertEqual( location.location_id, ewsghana_webuser.get_domain_membership(TEST_DOMAIN).location_id)
def set_user_role(domain, user, usertype, user_form): """Auto-assign mobile workers a role based on usertype""" from corehq.apps.users.models import UserRole roles = UserRole.by_domain_and_name(domain, usertype) if len(roles) == 0: msg = _("There is no role called '{}', you cannot create this user " "until that role is created.").format(usertype) user_form.add_error(None, msg) elif len(roles) > 1: msg = _("There are more than one roles called '{}', please delete or " "rename one.").format(usertype) user_form.add_error(None, msg) else: role = roles[0] user.set_role(domain, role.get_qualified_id())
def test_create_facility_manager(self): with open(os.path.join(self.datapath, 'sample_webusers.json')) as f: webuser = EWSUser(json.loads(f.read())[1]) self.assertEqual(0, len(WebUser.by_domain(TEST_DOMAIN))) ewsghana_webuser = self.api_object.web_user_sync(webuser) web_users = list(WebUser.by_domain(TEST_DOMAIN)) self.assertEqual(1, len(web_users)) facility_manager_role = UserRole.by_domain_and_name(TEST_DOMAIN, 'Facility manager')[0] dm = web_users[0].get_domain_membership(TEST_DOMAIN) self.assertEqual(facility_manager_role.get_id, dm.role_id) location = SQLLocation.objects.get(external_id=1, domain=TEST_DOMAIN) self.assertEqual(ewsghana_webuser.get_domain_membership(TEST_DOMAIN).location_id, location.location_id) extension = EWSExtension.objects.get(user_id=ewsghana_webuser.get_id, domain=TEST_DOMAIN) self.assertEqual(SQLLocation.objects.get(location_id=extension.location_id).site_code, 'rsp2') self.assertListEqual(ewsghana_webuser.phone_numbers, ['1233232']) self.assertEqual(ewsghana_webuser.default_phone_number, '1233232')
def _create_or_edit_web_reporter_role(domain): web_reporter_roles = UserRole.by_domain_and_name(domain, 'Web Reporter') report_list = [ "corehq.apps.reports.standard.sms.MessageLogReport", "custom.ewsghana.reports.specific_reports.dashboard_report.DashboardReport", "custom.ewsghana.reports.specific_reports.stock_status_report.StockStatus", "custom.ewsghana.reports.specific_reports.reporting_rates.ReportingRatesReport", "custom.ewsghana.reports.maps.EWSMapReport" ] if web_reporter_roles: web_reporter_role = web_reporter_roles[0] web_reporter_role.permissions.view_reports = False web_reporter_role.permissions.view_report_list = report_list web_reporter_role.save() else: role = UserRole(domain=domain, permissions=Permissions(view_reports=False, view_report_list=report_list), name='Web Reporter') role.save()
def has_input_stock_permissions(couch_user, location, domain): if not couch_user.is_web_user(): return False domain_membership = couch_user.get_domain_membership(domain) if not domain_membership: return False administrator_role_id = UserRole.by_domain_and_name( domain, 'Administrator')[0].get_id if domain_membership.role_id == administrator_role_id: return True try: location_id = EWSExtension.objects.get(user_id=couch_user.get_id, domain=domain).location_id if location_id == location.location_id: return True except EWSExtension.DoesNotExist: pass if not domain_membership.location_id: return False try: user_location = SQLLocation.objects.get( location_id=domain_membership.location_id) except SQLLocation.DoesNotExist: return False if not user_location.location_type.administrative: if user_location.location_id != location.location_id: return False else: parents = location.get_ancestors().values_list('location_id', flat=True) if user_location.location_id not in parents: return False return True
def sms_user_sync(self, ews_smsuser, **kwargs): sms_user = super(EWSApi, self).sms_user_sync(ews_smsuser, **kwargs) if not sms_user: return None sms_user.user_data['to'] = ews_smsuser.to if ews_smsuser.supply_point: if ews_smsuser.supply_point.id: sp = SupplyPointCase.view('hqcase/by_domain_external_id', key=[self.domain, str(ews_smsuser.supply_point.id)], reduce=False, include_docs=True, limit=1).first() else: sp = None if sp: couch_location_id = sp.location_id elif ews_smsuser.supply_point.location_id: try: location = SQLLocation.objects.get(domain=self.domain, external_id=ews_smsuser.supply_point.location_id) couch_location_id = location.location_id except SQLLocation.DoesNotExist: couch_location_id = None else: couch_location_id = None if couch_location_id: dm = sms_user.get_domain_membership(self.domain) dm.location_id = couch_location_id sms_user.save() add_location(sms_user, couch_location_id) if ews_smsuser.role == 'facility_manager': role = UserRole.by_domain_and_name(self.domain, 'Facility manager') if role: dm = sms_user.get_domain_membership(self.domain) dm.role_id = role[0].get_id sms_user.save() return sms_user
def has_input_stock_permissions(couch_user, location, domain): if not couch_user.is_web_user(): return False domain_membership = couch_user.get_domain_membership(domain) if not domain_membership: return False administrator_role_id = UserRole.by_domain_and_name(domain, 'Administrator')[0].get_id if domain_membership.role_id == administrator_role_id: return True try: location_id = EWSExtension.objects.get(user_id=couch_user.get_id, domain=domain).location_id if location_id == location.location_id: return True except EWSExtension.DoesNotExist: pass if not domain_membership.location_id: return False try: user_location = SQLLocation.objects.get(location_id=domain_membership.location_id) except SQLLocation.DoesNotExist: return False if not user_location.location_type.administrative: if user_location.location_id != location.location_id: return False else: parents = location.get_ancestors().values_list('location_id', flat=True) if user_location.location_id not in parents: return False return True
def _create_or_edit_web_reporter_role(self): web_reporter_roles = UserRole.by_domain_and_name(self.domain, 'Web Reporter') report_list = [ "corehq.apps.reports.standard.sms.MessageLogReport", "custom.ewsghana.reports.specific_reports.dashboard_report.DashboardReport", "custom.ewsghana.reports.specific_reports.stock_status_report.StockStatus", "custom.ewsghana.reports.specific_reports.reporting_rates.ReportingRatesReport", "custom.ewsghana.reports.maps.EWSMapReport" ] if web_reporter_roles: web_reporter_role = web_reporter_roles[0] web_reporter_role.permissions.view_reports = False web_reporter_role.permissions.view_report_list = report_list web_reporter_role.save() else: role = UserRole( domain=self.domain, permissions=Permissions( view_reports=False, view_report_list=report_list ), name='Web Reporter' ) role.save()
def create_user(self, agency, agency_loc, user_level): assert agency_loc.location_type.has_user agency_loc_id = agency_loc.location_id domain = agency_loc.domain user = CommCareUser.get_by_username( '%s@%s.commcarehq.org' % (agency_loc.site_code, agency_loc.domain)) if user is None: user = make_location_user(agency_loc) user.user_location_id = agency_loc_id user.set_location(agency_loc, commit=False) user.user_data['agency_id_legacy'] = agency_loc.metadata[ 'private_sector_agency_id'] user.set_role( domain, UserRole.by_domain_and_name( domain, 'Default Mobile Worker')[0].get_qualified_id()) user.user_data['user_level'] = user_level user.user_data['usertype'] = agency.usertype user.save() agency_loc.user_id = user._id agency_loc.save()
def setUpClass(cls): super(TestInputStockView, cls).setUpClass() cls.domain = initial_bootstrap(TEST_DOMAIN) cls.setup_subscription(TEST_DOMAIN, SoftwarePlanEdition.ENTERPRISE) test_utils.prepare_commtrack_config(TEST_DOMAIN) test_utils.prepare_custom_fields(TEST_DOMAIN) test_utils.create_or_edit_roles(TEST_DOMAIN) test_utils.create_test_products(TEST_DOMAIN) test_utils.create_test_locations(TEST_DOMAIN) cls.test_facility3 = SQLLocation.objects.get(domain=TEST_DOMAIN, site_code='tsactive') cls.testregion2 = SQLLocation.objects.get(domain=TEST_DOMAIN, site_code='testregion2') cls.rsp = SQLLocation.objects.get(domain=TEST_DOMAIN, site_code='rsp') cls.test_district = SQLLocation.objects.get(domain=TEST_DOMAIN, site_code='testdistrict') cls.username1 = 'ews_user1' cls.password1 = 'dummy' cls.web_user1 = WebUser.create(TEST_DOMAIN, cls.username1, cls.password1) cls.web_user1.eula.signed = True cls.web_user1.save() cls.username2 = 'ews_user2' cls.password2 = 'dummy' cls.web_user2 = WebUser.create(TEST_DOMAIN, cls.username2, cls.password2) cls.web_user2.get_domain_membership(TEST_DOMAIN).location_id = cls.test_facility3.location_id cls.web_user2.eula.signed = True cls.web_user2.save() cls.username3 = 'ews_user3' cls.password3 = 'dummy' cls.web_user3 = WebUser.create(TEST_DOMAIN, cls.username3, cls.password3) cls.web_user3.get_domain_membership(TEST_DOMAIN).location_id = cls.testregion2.location_id cls.web_user3.eula.signed = True cls.web_user3.save() cls.username4 = 'ews_user4' cls.password4 = 'dummy' cls.web_user4 = WebUser.create(TEST_DOMAIN, cls.username4, cls.password4) cls.web_user4.get_domain_membership(TEST_DOMAIN).location_id = cls.rsp.location_id cls.web_user4.eula.signed = True cls.web_user4.save() cls.username5 = 'ews_user5' cls.password5 = 'dummy' cls.web_user5 = WebUser.create(TEST_DOMAIN, cls.username5, cls.password5, first_name='test', last_name='test2') cls.web_user5.set_default_phone_number('1111') cls.web_user5.save() domain_membership = cls.web_user5.get_domain_membership(TEST_DOMAIN) domain_membership.location_id = cls.test_district.location_id domain_membership.role_id = UserRole.get_read_only_role_by_domain(cls.domain.name).get_id cls.web_user5.eula.signed = True cls.web_user5.save() cls.username6 = 'ews_user6' cls.password6 = 'dummy' cls.web_user6 = WebUser.create(TEST_DOMAIN, cls.username6, cls.password6) domain_membership = cls.web_user6.get_domain_membership(TEST_DOMAIN) domain_membership.role_id = UserRole.get_read_only_role_by_domain(cls.domain.name).get_id cls.web_user6.eula.signed = True cls.web_user6.save() cls.admin_username = '******' cls.admin_password = '******' cls.admin = WebUser.create(TEST_DOMAIN, cls.admin_username, cls.admin_password) domain_membership = cls.admin.get_domain_membership(TEST_DOMAIN) domain_membership.role_id = UserRole.by_domain_and_name(cls.domain.name, 'Administrator')[0].get_id cls.admin.eula.signed = True cls.admin.save() EWSExtension.objects.create( user_id=cls.web_user6.get_id, domain=TEST_DOMAIN, location_id=cls.test_facility3.get_id ) cls.ad = SQLProduct.objects.get(domain=TEST_DOMAIN, code='ad') cls.al = SQLProduct.objects.get(domain=TEST_DOMAIN, code='al') cls.backend, cls.mapping = setup_default_sms_test_backend() cls.client = Client()
def setUpClass(cls): cls.domain = initial_bootstrap(TEST_DOMAIN) db = get_db() if db.doc_exist(DOMAIN_MODULE_KEY): module_config = db.open_doc(DOMAIN_MODULE_KEY) module_map = module_config.get('module_map') if module_map: module_map[TEST_DOMAIN] = 'custom.ewsghana' else: module_config['module_map'][TEST_DOMAIN] = 'custom.ewsghana' else: module_config = db.save_doc( { '_id': DOMAIN_MODULE_KEY, 'module_map': { 'ewsghana-test-input-stock': 'custom.ewsghana' } } ) db.save_doc(module_config) cls.setup_subscription(TEST_DOMAIN, SoftwarePlanEdition.ENTERPRISE) cls.endpoint = MockEndpoint('http://test-api.com/', 'dummy', 'dummy') cls.api_object = EWSApi(TEST_DOMAIN, cls.endpoint) cls.api_object.prepare_commtrack_config() cls.api_object.prepare_custom_fields() cls.api_object.create_or_edit_roles() cls.datapath = os.path.join(os.path.dirname(__file__), 'data') with open(os.path.join(cls.datapath, 'sample_products.json')) as f: for p in json.loads(f.read()): cls.api_object.product_sync(Product(p)) create_test_locations(TEST_DOMAIN) cls.test_facility3 = SQLLocation.objects.get(domain=TEST_DOMAIN, site_code='tsactive') cls.testregion2 = SQLLocation.objects.get(domain=TEST_DOMAIN, site_code='testregion2') cls.rsp = SQLLocation.objects.get(domain=TEST_DOMAIN, site_code='rsp') cls.test_district = SQLLocation.objects.get(domain=TEST_DOMAIN, site_code='testdistrict') cls.username1 = 'ews_user1' cls.password1 = 'dummy' cls.web_user1 = WebUser.create(TEST_DOMAIN, cls.username1, cls.password1) cls.web_user1.eula.signed = True cls.web_user1.save() cls.username2 = 'ews_user2' cls.password2 = 'dummy' cls.web_user2 = WebUser.create(TEST_DOMAIN, cls.username2, cls.password2) cls.web_user2.get_domain_membership(TEST_DOMAIN).location_id = cls.test_facility3.location_id cls.web_user2.eula.signed = True cls.web_user2.save() cls.username3 = 'ews_user3' cls.password3 = 'dummy' cls.web_user3 = WebUser.create(TEST_DOMAIN, cls.username3, cls.password3) cls.web_user3.get_domain_membership(TEST_DOMAIN).location_id = cls.testregion2.location_id cls.web_user3.eula.signed = True cls.web_user3.save() cls.username4 = 'ews_user4' cls.password4 = 'dummy' cls.web_user4 = WebUser.create(TEST_DOMAIN, cls.username4, cls.password4) cls.web_user4.get_domain_membership(TEST_DOMAIN).location_id = cls.rsp.location_id cls.web_user4.eula.signed = True cls.web_user4.save() cls.username5 = 'ews_user5' cls.password5 = 'dummy' cls.web_user5 = WebUser.create(TEST_DOMAIN, cls.username5, cls.password5, first_name='test', last_name='test2') cls.web_user5.set_default_phone_number('1111') cls.web_user5.save() domain_membership = cls.web_user5.get_domain_membership(TEST_DOMAIN) domain_membership.location_id = cls.test_district.location_id domain_membership.role_id = UserRole.get_read_only_role_by_domain(cls.domain.name).get_id cls.web_user5.eula.signed = True cls.web_user5.save() cls.username6 = 'ews_user6' cls.password6 = 'dummy' cls.web_user6 = WebUser.create(TEST_DOMAIN, cls.username6, cls.password6) domain_membership = cls.web_user6.get_domain_membership(TEST_DOMAIN) domain_membership.role_id = UserRole.get_read_only_role_by_domain(cls.domain.name).get_id cls.web_user6.eula.signed = True cls.web_user6.save() cls.admin_username = '******' cls.admin_password = '******' cls.admin = WebUser.create(TEST_DOMAIN, cls.admin_username, cls.admin_password) domain_membership = cls.admin.get_domain_membership(TEST_DOMAIN) domain_membership.role_id = UserRole.by_domain_and_name(cls.domain.name, 'Administrator')[0].get_id cls.admin.eula.signed = True cls.admin.save() EWSExtension.objects.create( user_id=cls.web_user6.get_id, domain=TEST_DOMAIN, location_id=cls.test_facility3.get_id ) cls.ad = SQLProduct.objects.get(domain=TEST_DOMAIN, code='ad') cls.al = SQLProduct.objects.get(domain=TEST_DOMAIN, code='al') cls.backend, cls.mapping = setup_default_sms_test_backend() cls.client = Client()
def web_user_sync(self, ews_webuser): username = ews_webuser.email.lower() if not username: try: validate_email(ews_webuser.username) username = ews_webuser.username except ValidationError: return None user = WebUser.get_by_username(username) user_dict = { 'first_name': ews_webuser.first_name, 'last_name': ews_webuser.last_name, 'is_active': ews_webuser.is_active, 'last_login': force_to_datetime(ews_webuser.last_login), 'date_joined': force_to_datetime(ews_webuser.date_joined), 'password_hashed': True, } location_id = None if ews_webuser.location: try: sql_location = SQLLocation.objects.get(domain=self.domain, external_id=ews_webuser.location) location_id = sql_location.location_id except SQLLocation.DoesNotExist: pass if user is None: try: user = WebUser.create(domain=None, username=username, password=ews_webuser.password, email=ews_webuser.email.lower(), **user_dict) user.add_domain_membership(self.domain, location_id=location_id) except Exception as e: logging.error(e) else: if self.domain not in user.get_domains(): user.add_domain_membership(self.domain, location_id=location_id) # We are migrating only active users user.is_active = True dm = user.get_domain_membership(self.domain) if dm.location_id != location_id: dm.location_id = location_id if ews_webuser.program: self._set_program(user, ews_webuser.program) self._set_extension(user, ews_webuser.supply_point, ews_webuser.sms_notifications) if ews_webuser.is_superuser: dm.role_id = UserRole.by_domain_and_name(self.domain, 'Administrator')[0].get_id elif ews_webuser.groups and ews_webuser.groups[0].name == 'facility_manager': dm.role_id = UserRole.by_domain_and_name(self.domain, 'Facility manager')[0].get_id else: if ews_webuser.supply_point: supply_point = get_supply_point_case_by_domain_external_id(self.domain, ews_webuser.supply_point) if supply_point: dm.role_id = UserRole.by_domain_and_name(self.domain, 'Web Reporter')[0].get_id else: dm.role_id = UserRole.get_read_only_role_by_domain(self.domain).get_id else: dm.role_id = UserRole.get_read_only_role_by_domain(self.domain).get_id if ews_webuser.contact: user.phone_numbers = [] connections = [] for connection in ews_webuser.contact.phone_numbers: phone_number = apply_leniency(connection.phone_number) if connection.default: user.phone_numbers = [phone_number] + user.phone_numbers else: user.phone_numbers.append(phone_number) connections.append({ 'phone_number': connection.phone_number, 'backend': connection.backend, 'default': connection.default }) if connections != user.user_data.get('connections'): user.user_data['connections'] = connections user.save() return user
def web_user_sync(self, ews_webuser): username = ews_webuser.email.lower() if not username: try: validate_email(ews_webuser.username) username = ews_webuser.username except ValidationError: return None user = WebUser.get_by_username(username) user_dict = { 'first_name': ews_webuser.first_name, 'last_name': ews_webuser.last_name, 'is_active': ews_webuser.is_active, 'last_login': force_to_datetime(ews_webuser.last_login), 'date_joined': force_to_datetime(ews_webuser.date_joined), 'password_hashed': True, } location_id = None if ews_webuser.location: try: location = SQLLocation.objects.get( domain=self.domain, external_id=ews_webuser.location) location_id = location.location_id except SQLLocation.DoesNotExist: pass if user is None: try: user = WebUser.create(domain=None, username=username, password=ews_webuser.password, email=ews_webuser.email, **user_dict) user.add_domain_membership(self.domain, location_id=location_id) except Exception as e: logging.error(e) else: if self.domain not in user.get_domains(): user.add_domain_membership(self.domain, location_id=location_id) ews_webuser_extension(user, ews_webuser) dm = user.get_domain_membership(self.domain) if dm.location_id != location_id: dm.location_id = location_id if ews_webuser.is_superuser: dm.role_id = UserRole.by_domain_and_name(self.domain, 'Administrator')[0].get_id elif ews_webuser.groups and ews_webuser.groups[ 0].name == 'facility_manager': dm.role_id = UserRole.by_domain_and_name( self.domain, 'Facility manager')[0].get_id else: if ews_webuser.supply_point: supply_point = get_supply_point_case_by_domain_external_id( self.domain, ews_webuser.supply_point) if supply_point: dm.location_id = supply_point.location_id dm.role_id = UserRole.by_domain_and_name( self.domain, 'Web Reporter')[0].get_id else: dm.role_id = UserRole.get_read_only_role_by_domain( self.domain).get_id else: dm.role_id = UserRole.get_read_only_role_by_domain( self.domain).get_id user.save() return user
def setUpClass(cls): super(TestInputStockView, cls).setUpClass() cls.domain = initial_bootstrap(TEST_DOMAIN) db = get_db() if db.doc_exist(DOMAIN_MODULE_KEY): module_config = db.open_doc(DOMAIN_MODULE_KEY) module_map = module_config.get('module_map') if module_map: module_map[TEST_DOMAIN] = 'custom.ewsghana' else: module_config['module_map'][TEST_DOMAIN] = 'custom.ewsghana' else: module_config = db.save_doc( { '_id': DOMAIN_MODULE_KEY, 'module_map': { 'ewsghana-test-input-stock': 'custom.ewsghana' } } ) db.save_doc(module_config) cls.setup_subscription(TEST_DOMAIN, SoftwarePlanEdition.ENTERPRISE) test_utils.prepare_commtrack_config(TEST_DOMAIN) test_utils.prepare_custom_fields(TEST_DOMAIN) test_utils.create_or_edit_roles(TEST_DOMAIN) test_utils.create_test_products(TEST_DOMAIN) test_utils.create_test_locations(TEST_DOMAIN) cls.test_facility3 = SQLLocation.objects.get(domain=TEST_DOMAIN, site_code='tsactive') cls.testregion2 = SQLLocation.objects.get(domain=TEST_DOMAIN, site_code='testregion2') cls.rsp = SQLLocation.objects.get(domain=TEST_DOMAIN, site_code='rsp') cls.test_district = SQLLocation.objects.get(domain=TEST_DOMAIN, site_code='testdistrict') cls.username1 = 'ews_user1' cls.password1 = 'dummy' cls.web_user1 = WebUser.create(TEST_DOMAIN, cls.username1, cls.password1) cls.web_user1.eula.signed = True cls.web_user1.save() cls.username2 = 'ews_user2' cls.password2 = 'dummy' cls.web_user2 = WebUser.create(TEST_DOMAIN, cls.username2, cls.password2) cls.web_user2.get_domain_membership(TEST_DOMAIN).location_id = cls.test_facility3.location_id cls.web_user2.eula.signed = True cls.web_user2.save() cls.username3 = 'ews_user3' cls.password3 = 'dummy' cls.web_user3 = WebUser.create(TEST_DOMAIN, cls.username3, cls.password3) cls.web_user3.get_domain_membership(TEST_DOMAIN).location_id = cls.testregion2.location_id cls.web_user3.eula.signed = True cls.web_user3.save() cls.username4 = 'ews_user4' cls.password4 = 'dummy' cls.web_user4 = WebUser.create(TEST_DOMAIN, cls.username4, cls.password4) cls.web_user4.get_domain_membership(TEST_DOMAIN).location_id = cls.rsp.location_id cls.web_user4.eula.signed = True cls.web_user4.save() cls.username5 = 'ews_user5' cls.password5 = 'dummy' cls.web_user5 = WebUser.create(TEST_DOMAIN, cls.username5, cls.password5, first_name='test', last_name='test2') cls.web_user5.set_default_phone_number('1111') cls.web_user5.save() domain_membership = cls.web_user5.get_domain_membership(TEST_DOMAIN) domain_membership.location_id = cls.test_district.location_id domain_membership.role_id = UserRole.get_read_only_role_by_domain(cls.domain.name).get_id cls.web_user5.eula.signed = True cls.web_user5.save() cls.username6 = 'ews_user6' cls.password6 = 'dummy' cls.web_user6 = WebUser.create(TEST_DOMAIN, cls.username6, cls.password6) domain_membership = cls.web_user6.get_domain_membership(TEST_DOMAIN) domain_membership.role_id = UserRole.get_read_only_role_by_domain(cls.domain.name).get_id cls.web_user6.eula.signed = True cls.web_user6.save() cls.admin_username = '******' cls.admin_password = '******' cls.admin = WebUser.create(TEST_DOMAIN, cls.admin_username, cls.admin_password) domain_membership = cls.admin.get_domain_membership(TEST_DOMAIN) domain_membership.role_id = UserRole.by_domain_and_name(cls.domain.name, 'Administrator')[0].get_id cls.admin.eula.signed = True cls.admin.save() EWSExtension.objects.create( user_id=cls.web_user6.get_id, domain=TEST_DOMAIN, location_id=cls.test_facility3.get_id ) cls.ad = SQLProduct.objects.get(domain=TEST_DOMAIN, code='ad') cls.al = SQLProduct.objects.get(domain=TEST_DOMAIN, code='al') cls.backend, cls.mapping = setup_default_sms_test_backend() cls.client = Client()