Exemple #1
0
def send_message_to_admins(user, message):
    users = get_users_by_location_id(user.domain, user.location.get_id)
    in_charge_users = [
        u
        for u in users
        if get_verified_number_for_recipient(u) and "In Charge" in u.user_data.get('role', [])
    ]
    for in_charge_user in in_charge_users:
        send_sms_to_verified_number(get_verified_number_for_recipient(in_charge_user),
                                    message % (in_charge_user.full_name, in_charge_user.location.name))
Exemple #2
0
def report_completion_check(user):
    sp_id = SQLLocation.objects.get(domain=user.domain, location_id=user.location._id).supply_point_id
    now = datetime.datetime.utcnow()
    reported_products = set(StockTransaction.objects.filter(case_id=sp_id, type='stockonhand',
                                                            report__date=now).values_list('sql_product__name',
                                                                                          flat=True))
    expected_products = set(SQLProduct.objects.filter(domain=user.domain).values_list('name', flat=True))
    missing_products = set.difference(reported_products, expected_products)

    if not missing_products:
        message = COMPLETE_REPORT
        send_sms_to_verified_number(get_verified_number_for_recipient(user), message % user.username)
    elif missing_products:
        message = INCOMPLETE_REPORT % (user.name, user.location.name, ", ".join(sorted(missing_products)))
        send_sms_to_verified_number(get_verified_number_for_recipient(user), message)
Exemple #3
0
    def test_get_verified_number_for_recipient(self):
        self.assertIsNone(get_verified_number_for_recipient(self.user))

        self.user.phone_numbers = ['123', '456', '789']
        self.user.save_verified_number('test', '456', True)
        self.assertEqual(get_verified_number_for_recipient(self.user).phone_number, '456')

        self.user.save_verified_number('test', '789', True)
        self.assertEqual(get_verified_number_for_recipient(self.user).phone_number, '456')

        self.user.set_default_phone_number('789')
        self.assertEqual(self.user.phone_numbers, ['789', '123', '456'])
        v = get_verified_number_for_recipient(self.user)
        self.assertEqual(v.phone_number, '789')

        v.verified = False
        v.save()
        self.assertEqual(get_verified_number_for_recipient(self.user).phone_number, '456')
    def handle(self, *args, **options):
        # This is ok, there's only like 50k of these and we're only querying ids
        vns = VerifiedNumber.view(
            'phone_numbers/verified_number_by_owner_id',
            include_docs=False
        ).all()

        # Convert to a dict of {owner id: count of total numbers}
        owners = {}
        for vn in vns:
            owner_id = vn['key']
            if owner_id in owners:
                owners[owner_id] += 1
            else:
                owners[owner_id] = 1

        # Convert to a list of owner ids that have more than one VerifiedNumber
        # (excluding pending numbers)
        mult_list = []
        for owner_id, count in owners.iteritems():
            if count > 1:
                owner_vns = VerifiedNumber.view(
                    'phone_numbers/verified_number_by_owner_id',
                    key=owner_id,
                    include_docs=True
                ).all()
                owner_vns = [vn for vn in owner_vns if vn.verified]
                if len(owner_vns) > 1:
                    mult_list.append(owner_id)

        # If the old methodology's preferred number doesn't match the
        # new one, report it here. Only fix it if options['fix'] is True
        for owner_id in mult_list:
            user = CouchUser.get_by_user_id(owner_id)
            if not user:
                print 'ERROR: User not found: %s' % owner_id
                continue
            if not self.phones_are_strings(user):
                print 'ERROR: Phone numbers should be strings: %s' % owner_id
                continue
            preferred_old_vn = get_verified_number_for_recipient_old(user)
            preferred_new_vn = get_verified_number_for_recipient(user)

            if preferred_old_vn._id != preferred_new_vn._id:
                print "Need to change %s %s from %s to %s" % (
                    user.domain,
                    owner_id,
                    preferred_new_vn.phone_number,
                    preferred_old_vn.phone_number,
                )
                if preferred_old_vn.phone_number not in user.phone_numbers:
                    print 'ERROR: Phone numbers are out of sync: %s' % owner_id
                    continue
                if options.get('fix', False):
                    print "  fixing..."
                    user.set_default_phone_number(preferred_old_vn.phone_number)
    def get_message(self, recipient):
        user = recipient.owner
        if not user_has_reporting_location(user) or not get_verified_number_for_recipient(user):
            return

        message, kwargs = self.get_message_for_location(user.location)
        if not message:
            return
        kwargs['name'] = user.name
        return message % kwargs
    def get_message(self, recipient):
        user = recipient.owner
        if not user_has_reporting_location(
                user) or not get_verified_number_for_recipient(user):
            return

        message, kwargs = self.get_message_for_location(user.location)
        if not message:
            return
        kwargs['name'] = user.name
        return message % kwargs
Exemple #7
0
    def test_get_verified_number_for_recipient(self):
        self.assertIsNone(get_verified_number_for_recipient(self.user))

        self.user.phone_numbers = ['123', '456', '789']
        self.user.save_verified_number('test', '456', True)
        self.assertEqual(
            get_verified_number_for_recipient(self.user).phone_number, '456')

        self.user.save_verified_number('test', '789', True)
        self.assertEqual(
            get_verified_number_for_recipient(self.user).phone_number, '456')

        self.user.set_default_phone_number('789')
        self.assertEqual(self.user.phone_numbers, ['789', '123', '456'])
        v = get_verified_number_for_recipient(self.user)
        self.assertEqual(v.phone_number, '789')

        v.verified = False
        v.save()
        self.assertEqual(
            get_verified_number_for_recipient(self.user).phone_number, '456')
Exemple #8
0
 def get_recipients(self):
     for user in self.get_users():
         vn = get_verified_number_for_recipient(user)
         if vn and self.recipients_filter(user):
             yield vn
Exemple #9
0
 def get_recipients(self):
     for user in self.get_users():
         vn = get_verified_number_for_recipient(user)
         if vn and self.recipients_filter(user):
             yield vn