예제 #1
0
    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))
예제 #2
0
    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)
예제 #3
0
    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
예제 #4
0
    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)
예제 #5
0
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
예제 #6
0
파일: soh.py 프로젝트: ansarbek/commcare-hq
 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})
예제 #7
0
 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
             })
예제 #8
0
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
예제 #9
0
    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
예제 #10
0
 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)
예제 #11
0
 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)
예제 #12
0
 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)
     ]
예제 #13
0
 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)
예제 #14
0
 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)
     ]
예제 #15
0
 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)
예제 #16
0
    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))