Exemple #1
0
    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
Exemple #2
0
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()
Exemple #3
0
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()
Exemple #4
0
    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()
Exemple #5
0
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()
Exemple #6
0
    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
Exemple #7
0
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)
Exemple #8
0
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)
Exemple #9
0
 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
Exemple #13
0
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()
Exemple #14
0
    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
Exemple #15
0
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)))
Exemple #16
0
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)))
Exemple #17
0
 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)
Exemple #18
0
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')
Exemple #20
0
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()
Exemple #21
0
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
Exemple #22
0
    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
Exemple #23
0
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
Exemple #24
0
 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()
Exemple #25
0
    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()
Exemple #28
0
    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
Exemple #29
0
    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()