def respond(self, message, **kwargs): phone_number = get_preferred_phone_number_for_recipient(self.user) if not phone_number: return send_sms(self.domain, self.user, phone_number, six.text_type(message % kwargs))
def send_ms_alert(self, previous_stockouts, transactions, ms_type): stockouts = { SQLProduct.objects.get(product_id=transaction.product_id).name for transaction in transactions if transaction.quantity == 0 and transaction.action == 'stockonhand' } with_stock = { SQLProduct.objects.get(product_id=transaction.product_id).name for transaction in transactions if transaction.quantity != 0 and transaction.action == 'stockonhand' } resolved_stockouts = previous_stockouts.intersection(with_stock) locations = self.sql_location.parent.get_descendants(include_self=True)\ .filter(location_type__administrative=True) for sql_location in locations: for user in get_all_users_by_location(self.domain, sql_location.location_id): phone_number = get_preferred_phone_number_for_recipient(user) if not phone_number: continue stockouts_and_resolved = [(MS_RESOLVED_STOCKOUTS, resolved_stockouts), (MS_STOCKOUT, stockouts)] for message, data in stockouts_and_resolved: if data: message = message % { 'products_names': ', '.join(data), 'ms_type': ms_type } send_sms(self.domain, user, phone_number, message)
def get_users_messages(self): locations = SQLLocation.active_objects.filter( domain=self.domain, location_type__administrative=False) for sql_location in locations: in_charges = list( map( CommCareUser.wrap, iter_docs(CommCareUser.get_db(), [ in_charge.user_id for in_charge in sql_location.facilityincharge_set.all() ]))) web_users = [ web_user for web_user in get_web_users_by_location( self.domain, sql_location.location_id) if has_notifications_enabled(self.domain, web_user) ] message, kwargs = self.get_message_for_location(sql_location) for user in web_users + in_charges: phone_number = get_preferred_phone_number_for_recipient(user) if not phone_number: continue kwargs['name'] = user.full_name if message: yield user, phone_number, message % kwargs
def send_ms_alert(self, previous_stockouts, transactions, ms_type): stockouts = { SQLProduct.objects.get(product_id=transaction.product_id).name for transaction in transactions if transaction.quantity == 0 and transaction.action == 'stockonhand' } with_stock = { SQLProduct.objects.get(product_id=transaction.product_id).name for transaction in transactions if transaction.quantity != 0 and transaction.action == 'stockonhand' } resolved_stockouts = previous_stockouts.intersection(with_stock) locations = self.sql_location.parent.get_descendants(include_self=True)\ .filter(location_type__administrative=True) for sql_location in locations: for user in get_all_users_by_location(self.domain, sql_location.location_id): phone_number = get_preferred_phone_number_for_recipient(user) if not phone_number: continue stockouts_and_resolved = [ (MS_RESOLVED_STOCKOUTS, resolved_stockouts), (MS_STOCKOUT, stockouts) ] for message, data in stockouts_and_resolved: if data: message = message % {'products_names': ', '.join(data), 'ms_type': ms_type} send_sms(self.domain, user, phone_number, message)
def send_messages_for_config(config, actually_send=True): query_engine = QueryEngine(template_vars=config.template_variables) params = get_parsed_params(config.template) sent_messages = [] for user in config.group.get_users(): phone_number = get_preferred_phone_number_for_recipient(user) if phone_number: query_context = QueryContext( user, config.group, template_vars=config.template_variables) message_context = query_engine.get_context(params, query_context) message = config.template.format(**message_context) if actually_send: metadata = MessageMetadata(workflow=WORKFLOW_PERFORMANCE) if isinstance(phone_number, PhoneNumber): send_sms_to_verified_number(phone_number, message, metadata=metadata) else: send_sms(config.domain, user, phone_number, message, metadata=metadata) sent_messages.append(MessageResult(user, message)) return sent_messages
def send_message_to_admins(self, message): in_charge_users = map(CommCareUser.wrap, iter_docs( CommCareUser.get_db(), [in_charge.user_id for in_charge in self.sql_location.facilityincharge_set.all()] )) for in_charge_user in in_charge_users: phone_number = get_preferred_phone_number_for_recipient(in_charge_user) if not phone_number: continue send_sms(self.sql_location.domain, in_charge_user, phone_number, message % {'name': in_charge_user.full_name, 'location': self.sql_location.name})
def send_message_to_admins(self, message): in_charge_users = map( CommCareUser.wrap, iter_docs(CommCareUser.get_db(), [ in_charge.user_id for in_charge in self.sql_location.facilityincharge_set.all() ])) for in_charge_user in in_charge_users: phone_number = get_preferred_phone_number_for_recipient( in_charge_user) if not phone_number: continue send_sms( self.sql_location.domain, in_charge_user, phone_number, message % { 'name': in_charge_user.full_name, 'location': self.sql_location.name })
def send_messages_for_config(config, actually_send=True): query_engine = QueryEngine(template_vars=config.template_variables) params = get_parsed_params(config.template) sent_messages = [] for user in config.group.get_users(): phone_number = get_preferred_phone_number_for_recipient(user) if phone_number: query_context = QueryContext(user, config.group, template_vars=config.template_variables) message_context = query_engine.get_context(params, query_context) message = config.template.format(**message_context) if actually_send: metadata = MessageMetadata(workflow=WORKFLOW_PERFORMANCE) if isinstance(phone_number, PhoneNumber): send_sms_to_verified_number(phone_number, message, metadata=metadata) else: send_sms(config.domain, user, phone_number, message, metadata=metadata) sent_messages.append(MessageResult(user, message)) return sent_messages
def get_users_messages(self): locations = SQLLocation.active_objects.filter(domain=self.domain, location_type__administrative=False) for sql_location in locations: in_charges = list(map(CommCareUser.wrap, iter_docs( CommCareUser.get_db(), [in_charge.user_id for in_charge in sql_location.facilityincharge_set.all()] ))) web_users = [ web_user for web_user in get_web_users_by_location(self.domain, sql_location.location_id) if has_notifications_enabled(self.domain, web_user) ] message, kwargs = self.get_message_for_location(sql_location) for user in web_users + in_charges: phone_number = get_preferred_phone_number_for_recipient(user) if not phone_number: continue kwargs['name'] = user.full_name if message: yield user, phone_number, message % kwargs
def send(self): for recipient, message in self.get_users_messages(): phone_number = get_preferred_phone_number_for_recipient(recipient) if phone_number and has_notifications_enabled(self.domain, recipient): send_sms(self.domain, recipient, phone_number, message)
def send(self): for recipient, message in self.get_users_messages(): phone_number = get_preferred_phone_number_for_recipient(recipient) if phone_number and has_notifications_enabled(self.domain, recipient): send_sms(self.domain, recipient, phone_number, message)
def get_users(self, sql_location): return [ user for user in get_web_users_by_location(self.domain, sql_location.location_id) if get_preferred_phone_number_for_recipient(user) ]
def send(self): phone_number = get_preferred_phone_number_for_recipient(self.user) if phone_number and has_notifications_enabled(self.domain, self.user): send_sms(self.domain, self.user, phone_number, self.message)
def get_users(self, sql_location): return [ user for user in get_web_users_by_location(self.domain, sql_location.location_id) if get_preferred_phone_number_for_recipient(user) ]
def send(self): phone_number = get_preferred_phone_number_for_recipient(self.user) if phone_number and has_notifications_enabled(self.domain, self.user): send_sms(self.domain, self.user, phone_number, self.message)
def respond(self, message, **kwargs): phone_number = get_preferred_phone_number_for_recipient(self.user) if not phone_number: return send_sms(self.domain, self.user, phone_number, six.text_type(message % kwargs))