def save_verified_number(self, domain, phone_number, verified, backend_id=None, ivr_backend_id=None, only_one_number_allowed=False): """ Saves the given phone number as this contact's verified phone number. backend_id - the name of an SMSBackend to use when sending SMS to this number; if specified, this will override any project or global settings for which backend will be used to send sms to this number return The PhoneNumber raises InvalidFormatException if the phone number format is invalid raises PhoneNumberInUseException if the phone number is already in use by another contact """ from corehq.apps.sms.models import PhoneNumber phone_number = apply_leniency(phone_number) self.verify_unique_number(phone_number) if only_one_number_allowed: v = self.get_verified_number() else: v = self.get_verified_number(phone_number) if v is None: v = PhoneNumber( owner_doc_type=self.doc_type, owner_id=self.get_id ) v.domain = domain v.phone_number = phone_number v.verified = verified v.backend_id = backend_id v.ivr_backend_id = ivr_backend_id v.save()
def save_verified_number(self, domain, phone_number, verified, backend_id=None, ivr_backend_id=None, only_one_number_allowed=False): """ Saves the given phone number as this contact's verified phone number. backend_id - the name of an SMSBackend to use when sending SMS to this number; if specified, this will override any project or global settings for which backend will be used to send sms to this number return The PhoneNumber raises InvalidFormatException if the phone number format is invalid raises PhoneNumberInUseException if the phone number is already in use by another contact """ from corehq.apps.sms.models import PhoneNumber phone_number = apply_leniency(phone_number) self.verify_unique_number(phone_number) if only_one_number_allowed: v = self.get_verified_number() else: v = self.get_verified_number(phone_number) if v is None: v = PhoneNumber(owner_doc_type=self.doc_type, owner_id=self.get_id) v.domain = domain v.phone_number = phone_number v.verified = verified v.backend_id = backend_id v.ivr_backend_id = ivr_backend_id v.save()
def _sync_case_phone_number(contact_case): phone_info = contact_case.get_phone_info() lock_keys = ['sync-case-phone-number-for-%s' % contact_case.case_id] if phone_info.phone_number: lock_keys.append('verifying-phone-number-%s' % phone_info.phone_number) with CriticalSection(lock_keys, timeout=5 * 60): phone_number = contact_case.get_verified_number() if ( phone_number and phone_number.contact_last_modified and phone_number.contact_last_modified >= contact_case.server_modified_on ): return if phone_info.requires_entry: try: contact_case.verify_unique_number(phone_info.phone_number) except (InvalidFormatException, PhoneNumberInUseException): if phone_number: phone_number.delete() return if not phone_number: phone_number = PhoneNumber( domain=contact_case.domain, owner_doc_type=contact_case.doc_type, owner_id=contact_case.case_id, ) elif _phone_number_is_same(phone_number, phone_info): return phone_number.phone_number = phone_info.phone_number phone_number.backend_id = phone_info.sms_backend_id phone_number.ivr_backend_id = phone_info.ivr_backend_id phone_number.verified = True phone_number.contact_last_modified = contact_case.server_modified_on phone_number.save() else: if phone_number: phone_number.delete()