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))
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)
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
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 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