
    Owi                         d dl 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	 d dl
mZmZ  G d d	      Z G d
 d      Zy)    N)transaction)IntegrityError)now)slugify)ValidationError)ServiceRepositoryServicePriceRepositoryc                   V    e Zd Zededefd       Zed        Zed        Zed        Z	y)ServiceDomainServicenamereturnc                     t        |       j                  dd      j                         }t        j                  dd|      S )zh
        Convert name to enterprise-safe code:
        "Oil Change Basic" -> "OIL_CHANGE_BASIC"
        -_z
[^A-Z0-9_] )r   replaceupperresub)r   codes     O/var/www/html/dp2/backend_v2.1/server/apps/companies/services/service_domain.pygenerate_code_from_namez,ServiceDomainService.generate_code_from_name   s6     t}$$S#.446vvmR..    c                    | j                  |      }t        j                  ||      rt        ddi      t        j                  ||||d      S )Nr   &Service with this name already exists.T)companyr   descriptionr   	is_active)r   r   service_existsr   create_service)clsr   r   r   r   s        r   r    z#ServiceDomainService.create_service   s\    **40++GT:!AB  !//#
 	
r   c                     | j                  |      }t        j                  |||      rt        ddi      t        j                  ||||||      S )N
exclude_pkr   r   )pkr   r   r   r   r   )r   r   r   r   update_service)r!   r%   r   r   r   r   r   s          r   r&   z#ServiceDomainService.update_service(   sa    **40++GTbI!AB  !//#
 	
r   c                R   t        j                         5  | j                  |||      }|j                  dd       |j                  dd       |j                  dt	               j                                t        j                  d	||d|}ddd       ||fS # 1 sw Y   fS xY w)
zL
        Creates a Service and its initial ServicePrice atomically.
        )r   r   r   r   Tstarting_atFeffective_from)servicer   N )r   atomicr    
setdefaultr   dateServicePriceDomainServicecreate_price)r!   r   r   r   
price_datar*   prices          r   create_service_with_pricez.ServiceDomainService.create_service_with_price:   s    
 !((' ) G !!+t4!!-7!!"2CEJJLA-::  E "" ~# "" ~s   A9BB&N)
__name__
__module____qualname__staticmethodstrr   classmethodr    r&   r3   r+   r   r   r   r      s^    /c /c / / 
 
  
 
"  r   r   c                   <    e Zd Zed        Zed        Zed        Zy)r/   c                     | |d<   ||d<   |j                  dd      |d<   |j                  dd      |d<   |j                  d      xs t               j                         |d<   |S )Nr*   r   r   Tr(   Fr)   )getr   r.   r*   r   datas      r   _normalize_price_dataz/ServicePriceDomainService._normalize_price_dataT   se    !Y!Y HH[$7["hh}e<]!%*:!;!Ksuzz|r   c                     t        j                  | ||j                  d            rt        ddi      t        j                  | ||      }	 t        j                  di |S # t        $ r t        ddi      w xY w)Nr)   r*   /Price already exists for this service and date.z1A price already exists for this service and date.r+   )r	   price_existsr<   r   r/   r?   r0   r   r=   s      r   r0   z&ServicePriceDomainService.create_price]   s     "..HH%&

 "MN  )>>wQUV	)66>>> 	!N#  	s   A! !A8c                     t        j                  |||j                  d      |       rt        ddi      t        j                  |||      }t        j                  dd| i|S )Nr)   r#   r*   rA   r%   r+   )r	   rB   r<   r   r/   r?   update_price)r%   r*   r   r>   s       r   rD   z&ServicePriceDomainService.update_pricer   sp     "..HH%&	
 "MN  )>>wQUV%22AbADAAr   N)r4   r5   r6   r7   r?   r0   rD   r+   r   r   r/   r/   R   s>       ( B Br   r/   )r   	django.dbr   r   django.utils.timezoner   django.utils.textr   rest_framework.exceptionsr   apps.companies.repositoriesr   r	   r   r/   r+   r   r   <module>rJ      s5    	 ! $ % % 5
D DL.B .Br   