
    Ji>                     
   d Z ddlmZ ddlmZmZmZmZ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mZmZmZmZmZmZ dd	lmZ  e       ZejA                  d
e!e          ee       ee      fde"dedede!e   fd       Z#ejA                  de!e          ee       ee      fde"dedededede!e   fd       Z$ejK                  de
jL                         ee       ee      fde"dededede'f
d       Z(ejS                  de
jT                         ee       ee      fde"de"dedede'f
d       Z+ejA                  de       ee       ee      fde"dede"dededefd       Z,ejA                  de!e          ee       ee      fde"dedededede!e   fd        Z-ejK                  de
jL                         ed!       ed!       ed"       ed!       ee       ee      fde"de"ded#e.d"z  d$e	dedede'fd%       Z/eja                  d&       ee       ee      fde"d'e"dedede'f
d(       Z1ejS                  d)e
jd                         ee       ee      fde"d'e"dededd"f
d*       Z3defd+Z4ejA                  d,e!e          ee       ee      fde"dedededede!e   fd-       Z5ejA                  d.ed"z         ee       ee      fde"dededefd/       Z6ejK                  d,e
jL                         ed!       ed01       ed21       eg 1       ee       ee      fde"ded3e.d4e7d5e!e	   dedede'fd6       Z8eja                  d7       ee       ee      fde"d8e"dedede'f
d9       Z9eja                  d:       ee       ee      fde"d8e"dedede'f
d;       Z:ejS                  d<e
jd                         ee       ee      fde"d8e"dededd"f
d=       Z;defd>Z<ejA                  d?e!e          ee       ee      fde"dedededede!e   fd@       Z=ejA                  dAed"z         ee       ee      fde"dededefdB       Z>ejK                  d?e
jL                         ed!       ed"       ed21       ed01       eg 1       eg 1       ee       ee      fde"dedCe.d"z  d4e7d3e.dDe!e	   dEe!e	   dedede'fdF       Z?eja                  dG       ee       ee      fde"dHe"dedede'f
dI       Z@ejS                  dJe
jd                         ee       ee      fde"dHe"dededd"f
dK       ZAy")Lu@   General Affairs router — operators, jadwal, absensi endpoints.    )date)	APIRouterDependsFileFormHTTPException
UploadFilestatus)AsyncSession)get_db)get_current_userget_spbu_access)User)AbsensiResponseAbsensiSlotResponseAbsensiSlotOperatorHousekeepingResponseJadwalBulkCreateJadwalResponseOperatorResponseSaprasResponse)general_affairs_servicez/spbus/{spbu_id}/operators)response_modelspbu_iddbcurrent_userreturnc                    K   t        j                  ||        d {   }|D cg c]  }t        di | c}S 7 c c}w w)N )r   list_operatorsr   )r   r   r   opsops        =/var/www/html/spbu.com/backend/app/routers/general_affairs.pyr    r       sD      (66r7C
CC-01Sr"r"S11 D1s   A:A<AAz/spbus/{spbu_id}/jadwalstartendc                   K   t        j                  || ||       d {   }|D cg c]  }t        |j                  |j                  |j
                  |j                  |j                  |j                  r|j                  j                  nd |j                  r|j                  j                  nd        c}S 7 c c}w w)N)idr   user_idshift_idtanggal	user_nama
shift_nama)r   list_jadwalr   r'   r   r(   r)   r*   usernameshiftnamar   r$   r%   r   r   rowsrs          r#   r-   r-   (   s      )44R%MMD  A 	ttIIIIZZII%&VVaffkk'(wwqww||D	
   Ns!   C B9C BB;6C ;C )status_codedatac                   K   	 t        j                  || |j                  |j                         d {   }dt        |       diS 7 # t        $ r)}t        t        j                  t        |            d }~ww xY ww)Nr5   detailmessagez jadwal berhasil dibuat)
r   create_jadwal_bulkitemsr'   
ValueErrorr   r
   HTTP_400_BAD_REQUESTstrlen)r   r6   r   r   createdes         r#   create_jadwalrC   ?   s{     T/BB\__
 

 #g,'>?@@
  T(C(CCPQFSSTs7   A?/A
 AA
 A?A
 
	A<$A77A<<A?z#/spbus/{spbu_id}/jadwal/{jadwal_id}	jadwal_idc                    K   t        j                  |||        d {   }|st        t        j                  d      ddiS 7 %w)NzJadwal tidak ditemukanr8   r:   zJadwal berhasil dihapus)r   delete_jadwalr   r
   HTTP_404_NOT_FOUND)r   rD   r   r   deleteds        r#   rF   rF   O   sH      ,99"iQQG(A(AJbcc011 Rs   AA&Az/spbus/{spbu_id}/absensi/slotr*   r)   c                 h  K   t        j                  || ||       d {   }|d   }d }|rt        |j                  |j                  |j
                  |j                  |j                  |j                  |j                  |j                  r|j                  j                  nd |j                  |j                  r|j                  j                  nd |j                  |j                  r|j                  j                   nd       }t#        ||d   D cg c]  }t%        di | c}      S 7 c c}w w)Nabsensi)r'   r   r)   r*   foto_urlfoto_eksif_waktur
   uploaded_by_namauploaded_atreviewed_by_namareviewed_atr,   	operators)rJ   rQ   r   )r   get_absensi_slotr   r'   r   r)   r*   rK   rL   r
   uploaded_byr/   rN   reviewed_byrP   r0   r1   r   r   )	r   r*   r)   r   r   resultrJ   absensi_respr"   s	            r#   rR   rR   ^   s     +;;BSZ[[FYGL&zzOO%%OO%%$55>>9@9L9LW0055RV++9@9L9LW0055RV++-4]]w}}))
 7=k7JK7J&,,7JK % \( Ls"   D2D*C1D2D-
"	D2-D2z/spbus/{spbu_id}/absensic                   K   t        j                  || ||       d {   }|D cg c]  }t        |j                  |j                  |j
                  |j                  |j                  |j                  |j                  r|j                  j                  nd |j                  |j                  r|j                  j                  nd |j                  |j                  r|j                  j                  nd        c}S 7 c c}w w)N)r'   r   r)   r*   rK   r
   rM   rN   rO   rP   r,   )r   list_absensir   r'   r   r)   r*   rK   r
   rS   r/   rN   rT   rP   r0   r1   r2   s          r#   rX   rX   ~   s      )55b'5#NND  A 	ttIIZZIIZZ8834==Q]]//d34==Q]]//d'(wwqww||D	
   Os!   DC=DCC?:D?D.NrL   fotoc           
        K   |j                          d {   }t        |      dk(  rt        t        j                  d      	 t        j                  || ||||j                  xs d|j                  |       d {   }d|j                  |j                  dS 7 7  # t        $ r)}	t        t        j                  t        |	            d }	~	wt        $ r)}	t        t        j                  t        |	            d }	~	ww xY ww)Nr   zFile kosongr8   zabsensi.jpgzFoto absensi berhasil diupload)r:   r'   rK   )readr@   r   r
   r>   r   upload_absensifilenamer'   r=   r?   	ExceptionHTTP_500_INTERNAL_SERVER_ERRORrK   )
r   r)   r*   rL   rY   r   r   
file_bytesrJ   rB   s
             r#   r\   r\      s      yy{"J
:!(C(CMZZ	^/>>76
 
 8wzzW^WgWghh #

  T(C(CCPQFSS ^(M(MVYZ[V\]]^sQ   DB-D7B <B=B DB 	D($CD$C<<DDz-/spbus/{spbu_id}/absensi/{absensi_id}/approve
absensi_idc                   K   	 t        j                  || ||j                         d {   }d|j                  |j
                  dS 7 # t        $ r)}t	        t
        j                  t        |            d }~ww xY ww)Nr8   zAbsensi diapprover:   r'   r
   )r   approve_absensir'   r=   r   r
   rG   r?   )r   ra   r   r   rJ   rB   s         r#   rd   rd      sq     R/??GZYeYhYhii +'**WW j R(A(A#a&QQR7   A?%A
 AA
 A?A
 
	A<$A77A<<A?z%/spbus/{spbu_id}/absensi/{absensi_id}c                    K   	 t        j                  || |       d {    y 7 # t        $ r)}t        t        j
                  t        |            d }~ww xY wwNr8   )r   delete_absensir=   r   r
   r>   r?   )r   ra   r   r   rB   s        r#   rh   rh      sM     T%44R*MMM T(C(CCPQFSST0   A& $& A& 	A$AAAc                 j   t        | j                  | j                  | j                  | j                  | j
                  | j                  r| j                  j                  nd | j                  | j                  r| j                  j                  nd | j                  | j                  | j                        S )N)r'   r   r)   r*   r
   rM   rN   rO   rP   r<   fotos)r   r'   r   r)   r*   r
   rS   r/   rN   rT   rP   r<   rk   )hks    r#   _hk_responserm      sx    55



yy02,,DNN02,,DNNhhhh     z/spbus/{spbu_id}/housekeepingc                    K   t        j                  || ||       d {   }|D cg c]  }t        |       c}S 7 c c}w wN)r   get_housekeeping_listrm   r2   s          r#   list_housekeepingrr      sD      )>>r7ESVWWD%)*TLOT** X*   A<A>AAz"/spbus/{spbu_id}/housekeeping/slotc                 j   K   t        j                  || |       d {   }|rt        |      S d S 7 wrp   )r   get_housekeeping_slotrm   )r   r*   r   r   rl   s        r#   ru   ru      s7      '<<R'R	RB!<+t+ 
S   313z[])defaultFr<   	submittedrk   c           	        K   dd l }	 |j                  |      }|D 	cg c]7  }	|	j                  s|	j                          d {   |	j                  xs df9 }
}		 t        j                  || ||j                  ||
|       d {   }d|j                  |j                  dS # t        $ r t        t        j
                  d      w xY w7 c c}	w 7 M# t        $ r)}t        t        j
                  t        |            d }~ww xY ww)Nr   zitems harus JSON array stringr8   zfoto.jpgrx   zHousekeeping berhasil disimpanrc   )jsonloadsr^   r   r
   r>   r]   r[   r   submit_housekeepingr'   r=   r?   )r   r*   r<   rx   rk   r   r   r{   	item_listffilesrl   rB   s                r#   r}   r}      s      m#zz%0	 BGUA!**AFFHnajj6J7EUT*>>,//u	
 
 8ruuPRPYPYZZ  m(C(CLkllm U
  T(C(CCPQFSSTsy   D
B$ D
CCC
CD
)C CC 
D
$%C		D
CD
C 	D$DDD
z-/spbus/{spbu_id}/housekeeping/{hk_id}/approvehk_idc                   K   	 t        j                  || ||j                         d {   }d|j                  |j
                  dS 7 # t        $ r)}t	        t
        j                  t        |            d }~ww xY ww)Nr8   zHousekeeping diapproverc   )r   approve_housekeepingr'   r=   r   r
   rG   r?   r   r   r   r   rl   rB   s         r#   r   r     sq     R*??GUT`TcTcdd 0ruu		RR e R(A(A#a&QQRre   z3/spbus/{spbu_id}/housekeeping/{hk_id}/back-to-draftc                    K   	 t        j                  || |       d {   }d|j                  |j                  dS 7 # t        $ r)}t        t        j
                  t        |            d }~ww xY ww)Nr8   z"Housekeeping dikembalikan ke draftrc   )r   back_to_draft_housekeepingr=   r   r
   rG   r?   r'   r   s         r#   r   r   !  sl     R*EEb'SXYY <255TVT]T]^^ Z R(A(A#a&QQR1   A4? =? A4? 	A1$A,,A11A4z%/spbus/{spbu_id}/housekeeping/{hk_id}c                    K   	 t        j                  || |       d {    y 7 # t        $ r)}t        t        j
                  t        |            d }~ww xY wwrg   )r   delete_housekeepingr=   r   r
   r>   r?   )r   r   r   r   rB   s        r#   r   r   /  sM     T%99"guMMM T(C(CCPQFSSTri   c                 T   t        | j                  | j                  | j                  | j                  | j
                  | j                  r| j                  j                  nd | j                  | j                  r| j                  j                  nd | j                  | j                  
      S )N)
r'   r   r*   catatanr
   rM   rN   rO   rP   r<   )r   r'   r   r*   r   r
   rS   r/   rN   rT   rP   r<   )ss    r#   _sapras_responser   >  sq    44						xx/0}}++$MM/0}}++$MMgg rn   z/spbus/{spbu_id}/saprasc                    K   t        j                  || ||       d {   }|D cg c]  }t        |       c}S 7 c c}w wrp   )r   get_sapras_listr   r2   s          r#   list_saprasr   M  sE      )88WeSQQD)-.AQ.. R.rs   z/spbus/{spbu_id}/sapras/slotc                 j   K   t        j                  || |       d {   }|rt        |      S d S 7 wrp   )r   get_sapras_slotr   )r   r*   r   r   r   s        r#   r   r   Y  s8      &55b'7KKA"#A-- 	Lrv   r   fotos_sebelumfotos_sesudahc	           	      r  K   dd l }		 |	j                  |      }
i }t        |      D ]>  \  }}|j                  s|j                          d {   }|s.||j                  f||<   @ i }t        |      D ]>  \  }}|j                  s|j                          d {   }|s.||j                  f||<   @ t        |
      D cg c]9  \  }}|j                  dd      |j                  |      |j                  |      d; }}}	 t        j                  || ||j                  |||       d {   }d|j                  |j                  d	S # t        $ r t        t        j
                  d      w xY w7 )7 c c}}w 7 Q# t        $ r)}t        t        j
                  t        |            d }~ww xY ww)
Nr   zitems harus JSON arrayr8   kegiatan )r   file_sebelumfile_sesudahrz   zSapras berhasil disimpanrc   )r{   r|   r^   r   r
   r>   	enumerater]   r[   getr   submit_saprasr'   r=   r?   )r   r*   r   rx   r<   r   r   r   r   r{   items_parsedsebelum_mapir   contentsesudah_mapitemitems_filesr   rB   s                       r#   r   r   d  s     f#'::e#4
 13K-(1::FFHnG")1::!6A	 ) 13K-(1::FFHnG")1::!6A	 ) !. /GAt	 R0'OOA.'OOA.	

 /  T)77,//[I
 
 2RRE  f(C(CLdeef % %
  T(C(CCPQFSSTs   F7E F7F7E5F72F7F7E8F7"!F7>E:F7)F .F /F 3F7%E22F78F7:F7 F 	F4$F//F44F7z1/spbus/{spbu_id}/sapras/{sapras_id}/back-to-draft	sapras_idc                    K   	 t        j                  || |       d {   }d|j                  |j                  dS 7 # t        $ r)}t        t        j
                  t        |            d }~ww xY ww)Nr8   zSapras dikembalikan ke draftrc   )r   back_to_draft_saprasr=   r   r
   rG   r?   r'   )r   r   r   r   r   rB   s         r#   r   r     sh     R)>>r7IVV 6QTTQXXVV W R(A(A#a&QQRr   z#/spbus/{spbu_id}/sapras/{sapras_id}c                    K   	 t        j                  || |       d {    y 7 # t        $ r)}t        t        j
                  t        |            d }~ww xY wwrg   )r   delete_saprasr=   r   r
   r>   r?   )r   r   r   r   rB   s        r#   r   r     sM     T%33BKKK T(C(CCPQFSSTri   )B__doc__datetimer   fastapir   r   r   r   r   r	   r
   sqlalchemy.ext.asyncior   app.core.databaser   app.dependenciesr   r   app.models.userr   app.schemas.general_affairsr   r   r   r   r   r   r   r   app.servicesr   routerr   listintr    r-   postHTTP_201_CREATEDdictrC   deleteHTTP_200_OKrF   rR   rX   r?   r\   patchrd   HTTP_204_NO_CONTENTrh   rm   rr   ru   boolr}   r   r   r   r   r   r   r   r   r   r   rn   r#   <module>r      s	   F  U U U / $ >  	 	 	 1	
 (>N9OP v 1222 2 

	2 Q2 %d>6JK
 v 1 
 		
  
. L, &F4K4KL v 1	AA
A 	A 	A
 
A MA 4&BTBTU v 1		2	2	2 		2 		2
 
	2 V	2 +<OP
 v 1  		
   Q> &tO7LM
 v 1 
 		
  
/ N4 'V5L5LM II#':Cyv 1iii i Dj	i
 i 	i i 
i Ni2 => v 1	
X
X
X 	
X 	
X
 

X ?
X 6FD^D^_ v 1		T	T	T 		T 		T
 
	T `	T,   +DAU<VW
 v 1+++ 
+ 		+
 + 

+ X+ 0AUX\A\] v 1	,,, 	, 	, ^, ,&:Q:QR Id#5)"2.v 1[[[ [ 	[
 
[ 	[ [ 
[ S[6 => v 1	
S
S
S 	
S 	
S
 

S ?
S CD v 1	
_
_
_ 	
_ 	
_
 

_ E
_ 6FD^D^_ v 1		T	T	T 		T 		T
 
	T `	T>  %d>6JK
 v 1/// 
/ 		/
 / 
./ L/ *>D;PQ v 1	... 	. 	. R. &F4K4KL It*5)d#&*2&6&*2&6v 10S0S0S 4Z0S 	0S
 0S 
#0S 
#0S 	0S 0S 
0S M0Sf AB v 1	
W
W
W 	
W 	
W
 

W C
W 4&B\B\] v 1		T	T	T 		T 		T
 
	T ^	Trn   