
    Ui                     d    d dl mZmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ  G d d      Zy	)
    )OptionalIterable)Q)Company)UserProfile)CompanyBotSettingsnormalize_phonec                       e Zd ZdZededefd       Zededee   fd       Ze	dddddede
e   d	e
e   d
e
e   def
d       Zy)PhoneUniquenessServicez
    Ensures a phone number is globally unique across:
    - Company.phone
    - UserProfile.phone_number
    - CompanyBotSettings.phone_number
    valuereturnc                     t        |       S )Nr	   )r   s    L/var/www/html/dp2/backend_v2.1/server/apps/core/services/phone_uniqueness.py	normalizez PhoneUniquenessService.normalize   s    u%%    c                 @    t        |       }||j                  d      | hS )N+)r
   lstrip)r   	canonicals     r   possible_matchesz'PhoneUniquenessService.possible_matches   s*    #E*	S!
 	
r   N)exclude_company_idexclude_user_idexclude_bot_idr   r   r   c                ,   |s|S | j                  |      }| j                  |      }t        j                  j	                  |      }|r|j                  |      }|j                         rt        d      t        j                  j	                  |      }|r|j                  |      }|j                         rt        d      t        j                  j	                  |      }	|r|	j                  |      }	|	j                         rt        d      |S )N)	phone__in)idz*Phone number already exists for a company.)phone_number__in)user_idz(Phone number already exists for a staff.z&Phone number already exists for a bot.)
r   r   r   objectsfilterexcludeexists
ValueErrorr   r   )
clsr   r   r   r   r   matches
company_qsuser_qsbot_qss
             r   assert_uniquez$PhoneUniquenessService.assert_unique   s     LMM%(	&&u- __++g+>
#++/A+BJIJJ %%,,g,Foooo>G>>GHH $++22G2L^^~^6F==?EFFr   )__name__
__module____qualname____doc__staticmethodstrr   setr   classmethodr   intr*    r   r   r   r   
   s     & & & & 
 
C 
 
 
 -1)-(,&& %SM	&
 "#& !& 
& &r   r   N)typingr   r   django.db.modelsr   apps.companies.modelsr   apps.userprofile.modelsr   r   utils.normalize_phoner
   r   r4   r   r   <module>r:      s!    %  ) / 4 1< <r   