def get_two_way_entry_or_phone_number(cls, recipient, try_user_case=True): """ If recipient has a two-way number, returns it as a PhoneNumber entry. If recipient does not have a two-way number but has a phone number configured, returns the one-way phone number as a string. If try_user_case is True and recipient is a CommCareUser who doesn't have a two-way or one-way phone number, then it will try to get the two-way or one-way number from the user's user case if one exists. """ if use_phone_entries(): phone_entry = get_two_way_number_for_recipient(recipient) if phone_entry: return phone_entry phone_number = get_one_way_number_for_recipient(recipient) # Avoid processing phone numbers that are obviously fake (len <= 3) to # save on processing time if phone_number and len(phone_number) > 3: return phone_number if try_user_case and isinstance( recipient, CommCareUser) and recipient.memoized_usercase: return cls.get_two_way_entry_or_phone_number( recipient.memoized_usercase) return None
def get_two_way_entry_or_phone_number(cls, recipient, try_user_case=True, domain_for_toggles=None): """ If recipient has a two-way number, returns it as a PhoneNumber entry. If recipient does not have a two-way number but has a phone number configured, returns the one-way phone number as a string. If try_user_case is True and recipient is a CommCareUser who doesn't have a two-way or one-way phone number, then it will try to get the two-way or one-way number from the user's user case if one exists. """ if use_phone_entries(): phone_entry = get_two_way_number_for_recipient(recipient) if phone_entry: return phone_entry phone_number = get_one_way_number_for_recipient(recipient) if toggles.INBOUND_SMS_LENIENCY.enabled(domain_for_toggles) and \ toggles.ONE_PHONE_NUMBER_MULTIPLE_CONTACTS.enabled(domain_for_toggles): phone_entry = PhoneNumber.get_phone_number_for_owner(recipient.get_id, phone_number) if phone_entry: return phone_entry # Avoid processing phone numbers that are obviously fake (len <= 3) to # save on processing time if phone_number and len(phone_number) > 3: return phone_number if try_user_case and isinstance(recipient, CommCareUser) and recipient.memoized_usercase: return cls.get_two_way_entry_or_phone_number(recipient.memoized_usercase, domain_for_toggles=domain_for_toggles) return None
def sync_user_phone_numbers(self, couch_user_id): if not use_phone_entries(): return try: _sync_user_phone_numbers(couch_user_id) except Exception as e: self.retry(exc=e)
def sync_user_phone_numbers(self, couch_user_id): if not use_phone_entries(): return try: _sync_user_phone_numbers(couch_user_id) except Exception as e: self.retry(exc=e)
def _sync_case_for_messaging(domain, case_id): try: case = CaseAccessors(domain).get_case(case_id) sms_tasks.clear_case_caches(case) except CaseNotFound: case = None if case is None or case.is_deleted: sms_tasks.delete_phone_numbers_for_owners([case_id]) delete_schedule_instances_for_cases(domain, [case_id]) return if use_phone_entries(): sms_tasks._sync_case_phone_number(case) rules = AutomaticUpdateRule.by_domain_cached(case.domain, AutomaticUpdateRule.WORKFLOW_SCHEDULING) rules_by_case_type = AutomaticUpdateRule.organize_rules_by_case_type(rules) for rule in rules_by_case_type.get(case.type, []): rule.run_rule(case, utcnow())
def _sync_case_for_messaging(domain, case_id): try: case = CaseAccessors(domain).get_case(case_id) sms_tasks.clear_case_caches(case) except CaseNotFound: case = None case_load_counter("messaging_sync", domain)() update_messaging_for_case(domain, case_id, case) if case is not None: run_auto_update_rules_for_case(case) def update_messaging_for_case(domain, case_id, case): if case is None or case.is_deleted: clear_messaging_for_case(domain, case_id) elif use_phone_entries(): sms_tasks._sync_case_phone_number(case) def clear_messaging_for_case(domain, case_id): sms_tasks.delete_phone_numbers_for_owners([case_id]) delete_schedule_instances_for_cases(domain, [case_id]) def run_auto_update_rules_for_case(case): rules = AutomaticUpdateRule.by_domain_cached( case.domain, AutomaticUpdateRule.WORKFLOW_SCHEDULING) rules_by_case_type = AutomaticUpdateRule.organize_rules_by_case_type(rules) for rule in rules_by_case_type.get(case.type, []): rule.run_rule(case, utcnow())