
    ɈiS                        d dl mZmZmZ d dlmZ 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 d d	lmZ  ed
dg      Z G d de      Z G d de      ZdedefdZej1                  dee         dd ee      fdee   dee   defd       Zej9                  dee          ee      fdedefd       Zej=                  d ee      g       ee      fdedefd        Zej=                  d! ee      g       ee      fdedefd"       Z ejC                  d#       ee      fdedefd$       Z"y)%    )	APIRouterDependsHTTPException)Session)ListOptional)datetime)	BaseModel)get_db)AsimAreaUnavailability)Area)require_pengurusz/api/area-unavailabilitieszArea Unavailabilities)prefixtagsc                   P    e Zd ZU eed<   ee   ed<   dZee   ed<   dZ	ee   ed<   y)AreaUnavailCreateasim_idarea_idsNreasonpendingstatus)
__name__
__module____qualname__int__annotations__r   r   r   strr        @/var/www/html/asim.com/backend/app/routes/area_unavailability.pyr   r      s-    L3i FHSM %FHSM%r   r   c                       e Zd ZU eed<   eed<   dZee   ed<   dZee   ed<   eed<   dZ	ee   ed<   dZ
ee   ed<   eed	<   eed
<   dZee   ed<    G d d      Zy)AreaUnavailResponseidr   N	asim_nameasim_noarea_id	area_namar   r   	is_active
created_atc                       e Zd ZdZy)AreaUnavailResponse.ConfigTN)r   r   r   from_attributesr   r   r    Configr+   !   s    r   r-   )r   r   r   r   r   r$   r   r   r%   r'   r   boolr)   r	   r-   r   r   r    r"   r"      sl    GL#Ix}#!GXc]!L#Ix}# FHSM KO%)J") r   r"   aureturnc                    t        | j                  | j                  | j                  r| j                  j                  nd | j                  r| j                  j
                  nd | j                  | j                  r| j                  j                  nd | j                  | j                  | j                  | j                  
      S )N)
r#   r   r$   r%   r&   r'   r   r   r(   r)   )r"   r#   r   asim	full_nameno_asimr&   areanamar   r   r(   r)   )r/   s    r    _to_responser7   %   s{    55

')ww"''##D#%77

"$''"'',,tyyyy,,== r   /)response_modelNr   r   dbc                 j   |j                  t              }| r"|j                  t        j                  | k(        }|r"|j                  t        j                  |k(        }|j                  t        j                  j                               j                         D cg c]  }t        |       c}S c c}w )N)
queryr   filterr   r   order_byr)   descallr7   )r   r   r:   qr/   s        r    get_allrB   4   s    
'(AHH+33w>?HH+22f<='(zz2H2S2S2X2X2Z'['_'_'ab'aL'abbbs   B0datac           	         | j                   sg S |j                  t              j                  t        j                  j                  | j                         t        j                  dk(        j                         D ch c]  }|j                   }}| j                   D ]  }||vst        dd| d       |j                  t              j                  t        j                  | j                  k(  t        j                  j                  | j                         t        j                  dk(        j                         D ci c]  }|j                  | }}g }| j                   D ]  }|j                  |      }|r|j                  t        |             1| j                  xs d}	t        | j                  || j                   |	|	dk(        }|j#                  |       |j%                          |j'                  |       |j                  t        |              	 |j)                          |S c c}w c c}w # t*        $ r |j-                          t        d	d
      w xY w)NT  zArea z tidak ditemukanstatus_codedetailr   approved)r   r&   r   r   r(     z#Gagal menyimpan area unavailability)r   r<   r   r=   r#   in_r(   r@   r   r   r   r&   r   getappendr7   r   addflushrefreshcommit	Exceptionrollback)
rC   r:   avalid_areasr&   r/   existing_mapresultsexistingfinal_statuss
             r    createrZ   >   s   ==	 hhtn++GGKK&$(>

#%   
 ==+%C%yHX8YZZ ! "$*@!A!H!H"**dll:"**..t}}="))Y6"
 #%	""2

B "   G==##G,NN<12{{/i#LL;;#z1
 	r





2|B'(! !"[
		 NS8  [
4YZZ[s   <H- H2H7 7'Iz/{unavail_id}/approve)dependencies
unavail_idc                 @   |j                  t              j                  t        j                  | k(        j	                         }|st        dd      d|_        d|_        	 |j                          dd	iS # t        $ r |j                          t        dd      w xY w)
NrE   Tidak ditemukanrF   rI   TrJ   z$Gagal menyetujui area unavailabilitymessage	Disetujuir<   r   r=   r#   firstr   r   r(   rQ   rR   rS   r\   r:   r/   s      r    approverd   p   s    	(	)	0	01G1J1Jj1X	Y	_	_	aB4EFFBIBL\
		 {##  \
4Z[[\   "A6 6'Bz/{unavail_id}/rejectc                 @   |j                  t              j                  t        j                  | k(        j	                         }|st        dd      d|_        d|_        	 |j                          dd	iS # t        $ r |j                          t        dd      w xY w)
NrE   r^   rF   rejectedFrJ   z!Gagal menolak area unavailabilityr_   Ditolakra   rc   s      r    rejectri      s    	(	)	0	01G1J1Jj1X	Y	_	_	aB4EFFBIBLY
		 y!!  Y
4WXXYre   z/{unavail_id}/deactivatec                 F   |j                  t              j                  t        j                  | k(        j	                         }|st        dd      |j                  |       	 |j                          ddiS # t        $ r |j                          t        dd      w xY w)NrE   r^   rF   rJ   z#Gagal menghapus area unavailabilityr_   zArea unavailability dihapus)
r<   r   r=   r#   rb   r   deleterQ   rR   rS   rc   s      r    
deactivaterl      s    	(	)	0	01G1J1Jj1X	Y	_	_	aB4EFFIIbM[
		 455  [
4YZZ[s   %A9 9'B )#fastapir   r   r   sqlalchemy.ormr   typingr   r   r	   pydanticr
   app.databaser   app.models.area_unavailabilityr   app.models.arear   app.core.securityr   routerr   r"   r7   rL   r   r   rB   postrZ   putrd   ri   rk   rl   r   r   r    <module>rx      s   5 5 " !    A   .	6>U=V	W&	 &)  + 0C  C%8 9:%)4W^_eWf cXc] c8C= cW c ;c S&9!:;29&/ ." . . <.b #7;K3L2MN+26? $ $ $ O$ "':J2K1LM*1&/ "s " " N" )*.5fo 
63 
6G 
6 +
6r   