
    Ji@.                        d 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mZ ddlmZ d	ed
edee   fdZd	ed
ededefdZd	ed
edee   dedef
dZd	eded
edefdZd	ed
ededefdZd	ed
edededef
dZ	 d4d	ed
edededededededz  defdZd	ed
ededdfd Z d	ed
eded!efd"Z!d	ed
ededefd#Z"d	ed
edefd$Z#	 d5d	ed
edededee   d%ee$eef      d&edefd'Z%d	ed
ed(eddfd)Z&d	ed
ed(ed!efd*Z'd	ed
ed(efd+Z(d	ed
ededefd,Z)d	ed
edefd-Z*	 d5d	ed
ededed.edz  d/ee   d&edefd0Z+d	ed
ed1efd2Z,d	ed
ed1eddfd3Z-y)6uJ   General Affairs service — business logic for operators, jadwal, absensi.    )date)IntegrityErrorSQLAlchemyError)AsyncSession)general_affairs_repository)JadwalCreate)save_uploadUploadContextcompress_imagedbspbu_idreturnc                 J   K   t        j                  | |       d {   S 7 wN)repoget_operators)r   r   s     F/var/www/html/spbu.com/backend/app/services/general_affairs_service.pylist_operatorsr      s     ##B0000s   #!#startendc                 N   K   t        j                  | |||       d {   S 7 wr   )r   
get_jadwalr   r   r   r   s       r   list_jadwalr      !     WeS9999   %#%itemscreated_by_idc                 b  K   t        j                  | |       d {   }|D ch c]  }|d   	 }}|D ])  }|j                  |vst        d|j                   d       	 t        j                  | ||D cg c]&  }|j                  |j
                  |j                  d( c}|       d {   }	| j                          d {    |	S 7 c c}w c c}w 7 *7 # t        $ r% | j                          d {  7   t        d      t        $ r | j                          d {  7    w xY ww)NidzUser z- tidak terdaftar sebagai operator di SPBU ini)user_idshift_idtanggalz"Data jadwal konflik atau sudah ada)r   r   r"   
ValueErrorcreate_jadwal_bulkr#   r$   commitr   rollbackr   )
r   r   r   r   	operatorsopoperator_idsitemiresults
             r   r&   r&      s&     ((W55I'01yBtHyL1<<|+~%RS  
..[`a[`VW

qyyQ[`a	
 
 iik 61 b
 	 ?kkm=>> kkms   D/CD/CD/D/"C 7+C"C -C.C CC D/D/C C D,8C;9+D,$D'%D,,D/	jadwal_idc                    K   	 t        j                  | ||       d {   }| j                          d {    |S 7 7 # t        $ r | j	                          d {  7    w xY wwr   )r   delete_jadwalr'   r   r(   )r   r/   r   r.   s       r   r1   r1   5   s`     ))"iAAiik B kkmsC   A(A =A ?A A(A A A%A A%%A(c                 N   K   t        j                  | |||       d {   S 7 wr   )r   get_absensir   s       r   list_absensir4   ?   s#     !!"guc::::r   r#   r$   c                    K   t        j                  | ||       d{   }t        j                  | |||       d{   }t        fd|D        d      }||dS 7 >7  w)zHReturn jadwal operators + existing absensi record for a shift+date slot.Nc              3   B   K   | ]  }|j                   k(  s|  y wr   )r#   .0rr#   s     r   	<genexpr>z#get_absensi_slot.<locals>.<genexpr>G   s     >t!qzzX'=Ats   )r)   absensi)r   get_jadwal_for_slotr3   next)r   r   r#   r$   r)   rowsr;   s     `    r   get_absensi_slotr?   C   s`     ..r7HgNNI!!"gw@@D>t>EG"w77 O@s    A"AA"A  A" A"N
file_bytesfilenameuploaded_by_idfoto_eksif_waktuc           	      d  K   ddl m} t        j                  | |||       d {   }	t	        fd|	D        d       }
t        |      }ddl m}  || |       d {   }t        |d|      }t        |||       d {   }	 t        j                  | |||||       d {   }| j                          d {     ||
       d {    |S 7 7 v7 V7 47 # t        $ r% | j                          d {  7   t        d      t        $ r | j                          d {  7    w xY w7 cw)Nr   delete_filec              3   V   K   | ]   }|j                   k(  s|j                   " y wr   )r#   foto_urlr7   s     r   r:   z!upload_absensi.<locals>.<genexpr>Y   s!     E]ajjH.D]s   ))get_spbu_coder;   z#Data absensi konflik atau sudah ada)app.utils.file_uploadrF   r   r3   r=   r   rJ   r
   r	   upsert_absensir'   r   r(   r%   r   )r   r   r#   r$   r@   rA   rB   rC   rF   existing_rowsold_foto_url
compressedrJ   	spbu_codectxrH   r.   s     `              r   upload_absensirR   K   s,     2**2wIIME]EtL  
+J3#B00I
	9g
6C Xs;;H
**7HnFV
 
 iik l
###M+ J 1;
 	 @kkm>?? kkm $s   "D0C6D0C!D0>C?D0C "C#C :C;C ?D0
D.D0D0D0C C D+7C:8+D+#D&$D++D0
absensi_idc                   K   ddl m} t        j                  | |       d {   }|r|j                  |k7  rt        d      |j                  dk7  rt        d      |j                  }	 t        j                  | |       d {    | j                          d {     ||       d {    y 7 7 /7 # t        $ r | j                          d {  7    w xY w7 2w)Nr   rE   Absensi tidak ditemukanpending/Tidak dapat menghapus data yang sudah disetujui)rK   rF   r   get_absensi_by_idr   r%   statusrH   hard_delete_absensir'   r   r(   )r   r   rS   rF   r;   rH   s         r   delete_absensir[   o   s     1**2z::Ggoo0233~~"JKKH&&r:666iik h
 ; 	7 kkm  sd    C B1AC *B7 B3B7 B5B7  C +C,C 3B7 5B7 7CCCC reviewed_by_idc                   K   	 t        j                  | |||       d {   }|st        d      | j                          d {    |S 7 +7 # t        $ r  t        $ r | j                          d {  7    w xY ww)NrU   )r   approve_absensir%   r'   r   r(   )r   r   rS   r\   r;   s        r   r^   r^      s~     
,,R*nUU677iik	 V 	  kkmJ   A?A A$A AA 
A?A A %A<4A75A<<A?c                 N   K   t        j                  | |||       d {   S 7 wr   )r   get_housekeepingr   s       r   get_housekeeping_listrb      s#     &&r7E3????r   c                 L   K   t        j                  | ||       d {   S 7 wr   )r   get_housekeeping_slotr   r   r$   s      r   rd   rd      s!     ++BAAAA   $"$files	submittedc           	        K   ddl m} t        j                  | ||       d {   }|r|j                  ng D 	cg c]  }	|	j
                   }
}	ddl m}  || |       d {   }t        |d|      dt        dt        dt        ffd}|D cg c]  \  }} |||       d {    }}}	 t        j                  | ||||||	       d {   }| j                          d {    |
D ]  } ||       d {     |S 7 c c}	w 7 7 hc c}}w 7 F7 0# t        $ r% | j                          d {  7   t        d
      t        $ r | j                          d {  7    w xY w7 pw)Nr   rE   rI   housekeepingr@   rA   r   c                 V   K   ddl m}  ||       }t        ||       d {   S 7 w)Nr   r   )app.utils.imager   r	   )r@   rA   r   rO   rQ   s       r   _savez"submit_housekeeping.<locals>._save   s)     2#J/
 Xs;;;;s   )')rh   z(Data housekeeping konflik atau sudah ada)rK   rF   r   rd   fotosrH   rJ   r
   bytesstrupsert_housekeepingr'   r   r(   r%   r   )r   r   r$   rB   r   rg   rh   rF   existing_slotfold_foto_urlsrJ   rP   rm   bn	foto_urlsr.   urlrQ   s                      @r   submit_housekeepingrz      sq     244R'JJMAN-*=*=TV*VX*VAQZZ*VMX3#B00I
	>7
;C< < < <
 055utq!uQ{""uI5//.9	
 
 iik # M9 KX 1 #5
 	 EkkmCDD kkm 	s   !E/DE/DE/"D#.E/D%D&D,E/0D DD 'D(D ,E/<E-=	E/E/DE/D D E*6D97+E*"E%#E**E/hk_idc                   K   ddl m} t        j                  | |       d {   }|r|j                  |k7  rt        d      |j                  dk7  rt        d      |j                  xs g D cg c]  }|j                   }}	 t        j                  | |       d {    | j                          d {    |D ]  } ||       d {     y 7 c c}w 7 ;7 %# t        $ r | j                          d {  7    w xY w7 9w)Nr   rE   Housekeeping tidak ditemukanrV   rW   )rK   rF   r   get_housekeeping_by_idr   r%   rY   ro   rH   hard_delete_housekeepingr'   r   r(   )r   r   r{   rF   hkrt   rx   ry   s           r   delete_housekeepingr      s     1**2u5	5Bw&788	yyIJKK&(hhn"n6nnI6++B666iik #  
6
 76 kkm 	sv    DCAD/CDC CC 6C7C ;DDDDC C D:C=;DDc                   K   	 t        j                  | |||       d {   }|st        d      | j                          d {    |S 7 +7 # t        $ r  t        $ r | j                          d {  7    w xY wwNr}   )r   approve_housekeepingr%   r'   r   r(   )r   r   r{   r\   r   s        r   r   r      s~     
,,R%PP;<<iik		 Q 	  kkmr_   c                    K   	 t        j                  | ||       d {   }|st        d      | j                          d {    |S 7 +7 # t        $ r  t        $ r | j                          d {  7    w xY wwr   )r   back_to_draft_housekeepingr%   r'   r   r(   )r   r   r{   r   s       r   r   r      s|     
222wFF;<<iik		 G 	  kkmJ   A>A A
$A AA 	A>
A A %A;3A64A;;A>c                 N   K   t        j                  | |||       d {   S 7 wr   )r   
get_saprasr   s       r   get_sapras_listr      r   r   c                 L   K   t        j                  | ||       d {   S 7 wr   )r   get_sapras_slotre   s      r   r   r      s!     %%b'7;;;;rf   catatanitems_filesc           	        K   ddl m}m} ddlm t        j                  | ||       d {   }	g }
|	r`|	j                  D ]Q  }|j                  r|
j                  |j                         |j                  s7|
j                  |j                         S  || |       d {   }t        |d|      dt        dt        dt        ffd}g }|D ]  }d }d }|j                  d	      r|d	   \  }} |||       d {   }|j                  d
      r|d
   \  }} |||       d {   }|j                  |j                  dd      ||d        	 t        j                  | ||||||       d {   }| j!                          d {    |
D ]  } ||       d {     |S 7 |7 
7 7 7 ?7 )# t"        $ r% | j%                          d {  7   t'        d      t(        $ r | j%                          d {  7    w xY w7 iw)Nr   )rF   rJ   r   saprasr@   rA   r   c                 J   K    |       }t        ||       d {   S 7 wr   )r	   )r@   rA   rO   r   rQ   s      r   rm   zsubmit_sapras.<locals>._save  s&     #J/
 Xs;;;;s   #!#file_sebelumfile_sesudahkegiatan )r   foto_sebelum_urlfoto_sesudah_urlrn   z"Data sapras konflik atau sudah ada)rK   rF   rJ   rl   r   r   r   r   r   appendr   r
   rp   rq   getupsert_saprasr'   r   r(   r%   r   )r   r   r$   rB   r   r   rh   rF   rJ   rs   old_urlsr,   rP   rm   
items_datar   r   rv   fnr.   ry   r   rQ   s                        @@r   submit_saprasr      s     A. ..r7GDDMH!''D$$ 5 56$$ 5 56	 ( $B00I
	8W
5C< < < < J88N#(EAr%*1b\188N#(EAr%*1b\1R0 0 0
 	 )).Z9
 
 iik # M] E 1  2  2
 	 ?kkm=>> kkm 	s   )HF)A
H9)H"F,#AH=F/>)H'F1(+HF7 3F34F7 F5F7 H H
!	H,H/H1H3F7 5F7 7HG+H?H HH	sapras_idc                    K   	 t        j                  | ||       d {   }|st        d      | j                          d {    |S 7 +7 # t        $ r  t        $ r | j                          d {  7    w xY ww)NSapras tidak ditemukan)r   back_to_draft_saprasr%   r'   r   r(   )r   r   r   r   s       r   r   r   6  s|     
00WiHH566iik	 I 	  kkmr   c                   K   ddl m} t        j                  | |       d {   }|r|j                  |k7  rt        d      |j                  dk7  rt        d      g }|j                  xs g D ]Q  }|j                  r|j                  |j                         |j                  s7|j                  |j                         S 	 t        j                  | |       d {    | j                          d {    |D ]  } ||       d {     y 7 7 67  # t        $ r | j                          d {  7    w xY w7 4w)Nr   rE   r   rV   z.Tidak dapat menghapus data yang sudah disubmit)rK   rF   r   get_sapras_by_idr   r%   rY   r   r   r   r   hard_delete_saprasr'   r   r(   )r   r   r   rF   r   r   r,   ry   s           r   delete_saprasr   D  s    1((Y77FV^^w.122}}	!IJJH##  OOD112  OOD112	 $
%%b)444iik # # 8 	5 kkm 	sj    EDBE&ED DD 5D6D :E
D?ED D D<4D75D<<Er   )F).__doc__datetimer   sqlalchemy.excr   r   sqlalchemy.ext.asyncior   app.repositoriesr   r   app.schemas.general_affairsr   rK   r	   r
   rl   r   intlistdictr   r   r&   boolr1   r4   r?   rp   rq   objectrR   r[   r^   rb   rd   tuplerz   r   r   r   r   r   r   r   r        r   <module>r      s   P  : / ? 4 < *1\ 1C 1DJ 1:, : :T : :  	
 
>L S 3 4 ;< ;# ;d ; ;8| 8c 8S 8SW 8\` 8  $(!!! ! 	!
 ! ! ! Dj! !H \  C  S  T  "l S c [^ @L @3 @t @RV @BL B3 B B ''' ' 	'
 9' eSj!"' ' 'T,  S T $< # c [^   C  :l :S : :D :<l <S <4 < ;;; ; 	;
 4Z; d; ; ;|< # # L 3 3 4 r   