
    Wi              
       H   d dl m Z  d dlmZmZmZ d dlmZ d dlmZ d dl	m
Z
mZ d dlmZ d dlmZmZ d dlmZ  ed	d
g      Z G d de      Z G d de      Z G d de      Zej/                  ded       ee       ee      fdededefd       Zej3                  dee          ee       ee      fdedefd       Zej7                  de       ee       ee      fdedededefd       Zej=                  d       ee       ee      fdededefd       Zy)     )datetime)	APIRouterDependsHTTPException)Session)	BaseModel)OptionalList)get_db)CustomFieldUser)get_current_userz/custom-fieldszcustom-fields)prefixtagsc                   T    e Zd ZU eed<   eed<   eed<   dZeee      ed<   dZe	ed<   y)CustomFieldCreatenamelabeltypeNoptionsFrequired)
__name__
__module____qualname__str__annotations__r   r	   r
   r   bool     //var/www/notifications/app/api/custom_fields.pyr   r      s.    
IJ
I#'GXd3i 'Hdr   r   c                   x    e Zd ZU dZee   ed<   dZee   ed<   dZee   ed<   dZ	ee
e      ed<   dZee   ed<   y)CustomFieldUpdateNr   r   r   r   r   )r   r   r   r   r	   r   r   r   r   r   r
   r   r   r   r   r    r"   r"      sM    D(3-E8C=D(3-#'GXd3i '#Hhtn#r   r"   c                       e Zd ZU eed<   eed<   eed<   eed<   dZeee      ed<   e	ed<   e
ed<   e
ed	<    G d
 d      Zy)CustomFieldOutidr   r   r   Nr   r   
created_at
updated_atc                       e Zd ZdZy)CustomFieldOut.ConfigTN)r   r   r   from_attributesr   r   r    Configr)   (   s    r   r+   )r   r   r   intr   r   r   r	   r
   r   r   r+   r   r   r    r$   r$      sD    G
IJ
I#'GXd3i 'N r   r$       )response_modelstatus_codedatacurrent_userdbc           
      n  K   	 |j                  t              j                  t        j                  |j                  k(  t        j                  | j                  k(        j                         }|rt        dd| j                   d      g d}| j                  |vrt        dddj                  |             | j                  dk(  r1| j                  rt        | j                        d	k(  rt        dd
      t        |j                  | j                  | j                  | j                  | j                  dk(  r| j                  nd| j                        }|j                  |       |j                          |j                  |       t!        |j"                  |j                  |j                  |j                  |j                  xs g |j                  |j$                  |j&                        S # t        $ r  t(        $ r.}|j+                          t        ddt-        |             d}~ww xY ww)u5   Создать новое кастомное поле     Поле с именем '   ' уже существуетr0   detailtextnumberdateselectbooleanI   Недопустимый тип поля. Допустимые типы: , r>   r   uZ   Для типа 'select' необходимо указать варианты выбораN)	tenant_idr   r   r   r   r   r%   r   r   r   r   r   r&   r'   i  u=   Ошибка создания кастомного поля: )queryr   filterrB   r   firstr   r   joinr   lenr   r   addcommitrefreshr$   r%   r&   r'   	Exceptionrollbackr   )r1   r2   r3   existingvalid_typesdb_custom_fieldes          r    create_custom_fieldrR   ,   s    9
88K(//!!\%;%;;		)
 %' 	
 3DII;>[\  F99K'bcgclclmxcybz{  99 $,,#dll:Kq:Ps 
 &",,**$(II$9DLLt]]
 	
		


?#!! %%!'' %%#++1r$--&11&11	
 		
   

RSVWXSYRZ[
 	

s)   H5G-G2 1H52H2)H--H22H5)r/   c                   K   |j                  t              j                  t        j                  | j                  k(        j	                  t        j
                  j                               j                         }g }|D ]x  }|j                  t        |j                  |j                  |j                  |j                  |j                  xs g |j                  |j
                  |j                                z |S w)u;   Получить список кастомных полейrC   )rD   r   rE   rB   order_byr&   descallappendr$   r%   r   r   r   r   r   r'   )r2   r3   fieldsresultfields        r    list_custom_fieldsr[   o   s      XXk"))!7!77h{%%**,-cce  F 
nxx++MM'R^^''''	
 		
 Ms   C:C<z/{field_id}field_idc           
      H  K   |j                  t              j                  t        j                  | k(  t        j                  |j                  k(        j                         }|st        dd      |j                  r|j                  |j                  k7  r|j                  t              j                  t        j                  |j                  k(  t        j                  |j                  k(  t        j                  | k7        j                         }|rt        dd|j                   d      |j                  |j                  |_        |j                  |j                  |_        |j                  Bg d}|j                  |vrt        dd	d
j                  |             |j                  |_	        |j                  "|j                  dk(  r|j                  nd|_        |j                  |j                  |_        t        j                         |_        |j!                          |j#                  |       t%        |j                  |j                  |j                  |j                  |j                  xs g |j                  |j&                  |j                        S w)u,   Обновить кастомное поле  /   Кастомное поле не найденоr8   r5   r6   r7   Nr:   r@   rA   r>   rC   )rD   r   rE   r%   rB   rF   r   r   r   r   rG   r   r   r   utcnowr'   rJ   rK   r$   r&   )r\   r1   r2   r3   rZ   rN   rO   s          r    update_custom_fieldra      s     HH[!((("!7!77 eg 

 4eff yyTYY%**,88K(//!!\%;%;;		)NNh&
 %'	 	 3DII;>[\ 
 yyYY
zzjjyyE99K'bcgclclmxcybz{  YY
||(,		X(=4}} (EIIKJJu88ZZkkZZ#####	 	s   J J"c                 2  K   |j                  t              j                  t        j                  | k(  t        j                  |j                  k(        j                         }|st        dd      |j                  |       |j                          dddS w)u*   Удалить кастомное полеr^   r_   r8   Tu*   Кастомное поле удалено)okmessage)	rD   r   rE   r%   rB   rF   r   deleterJ   )r\   r2   r3   rZ   s       r    delete_custom_fieldrf      s      HH[!((("!7!77 eg 

 4effIIeIIK#OPPs   BBN) r   fastapir   r   r   sqlalchemy.ormr   pydanticr   typingr	   r
   app.db.sessionr   app.db.modelsr   r   app.api.depsr   routerr   r"   r$   postrR   getr[   putr,   ra   re   rf   r   r   r    <module>rr      s    5 5 "  ! ! + )	*/1B	C	 $	 $Y  RC@ !!12&/?

?
?
 	?
 A?
D BtN34 !12&/ 52 M.9 !!12&/	<<
< < 		< :<~ } !!12&/QQQ 	Q Qr   