§
    3~Ëi†  ã            
       óR  — 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
 d dlmZ d dlmZ d dlmZmZmZ d d	lmZ d d
lmZmZmZ  eddg¬¦  «        Zdededefd„Ze                     dee         ¬¦  «         ee
¦  «         ee¦  «        fdedefd„¦   «         Ze                     de¬¦  «         ee
¦  «         ee¦  «        fdededefd„¦   «         Z e !                    de¬¦  «         e¦   «          ee
¦  «         ee¦  «        fde"dededefd„¦   «         Z#e !                    de¬¦  «         e¦   «          ee
¦  «         ee¦  «        fde"dededefd„¦   «         Z$e %                    dd¬ ¦  «         ee
¦  «         ee¦  «        fde"dedefd!„¦   «         Z&d"S )#é    )Údatetime)Ú	APIRouterÚDependsÚHTTPException)ÚAsyncSession)Úselect)Úget_db)ÚLeaveRequest)ÚUser)ÚLeaveRequestCreateÚLeaveRequestReviewÚLeaveRequestOut)Úget_current_user)Únotify_adminsÚnotify_user_by_idÚnotify_admin_groupú/leave-requestszleave-requests)ÚprefixÚtagsÚreqÚdbÚreturnc              ƒ   óô  K  — |                      t          t          ¦  «                             t          j        | j        k    ¦  «        ¦  «        ƒ d {V —†}|                     ¦   «         }d }| j        rg|                      t          t          ¦  «                             t          j        | j        k    ¦  «        ¦  «        ƒ d {V —†}|                     ¦   «         }i | j        ¥|r|j	        nd|r|j	        nd dœ¥S )NÚ )ÚusernameÚreviewed_by_username)
Úexecuter   r   ÚwhereÚidÚuser_idÚscalar_one_or_noneÚreviewed_byÚ__dict__r   )r   r   Úuser_resÚuserÚreviewerÚrev_ress         úB/var/www/html/jarvis.com/web/backend/app/routers/leave_requests.pyÚ_enrichr)      sø   è è € Ø—Z’Z¥¥t¡¤× 2Ò 2µ4´7¸c¼kÒ3IÑ JÔ JÑKÔKÐKÐKÐKÐKÐKÐK€HØ×&Ò&Ñ(Ô(€Dà€HØ
„ð 0ØŸ
š
¥6­$¡<¤<×#5Ò#5µd´gÀÄÒ6PÑ#QÔ#QÑRÔRÐRÐRÐRÐRÐRÐRˆØ×-Ò-Ñ/Ô/ˆðØ
Œ,ðà%)Ð1�D”M�M¨rØ5=Ð G Ô 1Ð 1À4ðð ð ð ó    r   )Úresponse_modelÚcurrent_userc              ƒ   óP  ‡ K  — |j         dk    r]‰                      t          t          ¦  «                             t          j                             ¦   «         ¦  «        ¦  «        ƒ d {V —†}n‚‰                      t          t          ¦  «                             t          j        |j	        k    ¦  «                             t          j                             ¦   «         ¦  «        ¦  «        ƒ d {V —†}| 
                    ¦   «                              ¦   «         }ˆ fd„|D ¦   «         ƒ d {V —†S )NÚadminc              “   ó@   •K  — g | ]}t          |‰¦  «        ƒ d {V —†‘ŒS )N)r)   )Ú.0Úrr   s     €r(   ú
<listcomp>z'list_leave_requests.<locals>.<listcomp>.   s7   øè è € Ð/Ð/Ð/ Q•'˜!˜R‘.”.Ð Ð Ð Ð Ð Ð Ð/Ð/Ð/r*   )Úroler   r   r
   Úorder_byÚ
created_atÚdescr   r    r   ÚscalarsÚall)r   r,   ÚresultÚrowss   `   r(   Úlist_leave_requestsr;       s  øè è € ð
 Ô˜GÒ#Ð#Ø—z’z¥&­Ñ"6Ô"6×"?Ò"?ÅÔ@W×@\Ò@\Ñ@^Ô@^Ñ"_Ô"_Ñ`Ô`Ð`Ð`Ð`Ð`Ð`Ð`ˆˆà—z’zÝ•<Ñ Ô ßŠU•<Ô'¨<¬?Ò:Ñ;Ô;ßŠX•lÔ-×2Ò2Ñ4Ô4Ñ5Ô5ñ
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð
 �>Š>ÑÔ×ÒÑ!Ô!€DØ/Ð/Ð/Ð/¨$Ð/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/r*   Úpayloadc              ƒ   óŽ  K  — | j         | j        k     rt          dd¦  «        ‚|}|j        dk    r€| j        ry|                     t          t          ¦  «                             t          j	        | j        k    ¦  «        ¦  «        ƒ d {V —†}| 
                    ¦   «         }|st          dd¦  «        ‚t          |j	        | j        | j         | j        d¬¦  «        }|                     |¦  «         |                     ¦   «         ƒ d {V —† |                     |¦  «        ƒ d {V —† | j         | j        z
  j        dz   }|› d	| j        › d
| j         › d| j        pd› �}t#          |d|j        › �|d¦  «        ƒ d {V —† t'          |d|j        › �|d¦  «        ƒ d {V —† |                     ¦   «         ƒ d {V —† t)          ||¦  «        ƒ d {V —†S )Né¦  z!End date must be after start dater.   é”  zUser not foundÚpending)r    Ú
start_dateÚend_dateÚreasonÚstatusé   z hari (õ    â€“ z): Ú-zPengajuan cuti: r   )rB   rA   r   r3   r    r   r   r   r   r   r!   r
   rC   ÚaddÚcommitÚrefreshÚdaysr   r   r   r)   )r<   r   r,   Útarget_userÚ
target_resr   rK   Ú	body_texts           r(   Úcreate_leave_requestrO   1   s  è è € ð Ô˜'Ô,Ò,Ð,Ý˜CÐ!DÑEÔEÐEà€KØÔ˜GÒ#Ð#¨¬Ð#ØŸ:š:¥f­T¡l¤l×&8Ò&8½¼ÀGÄOÒ9SÑ&TÔ&TÑUÔUÐUÐUÐUÐUÐUÐUˆ
Ø ×3Ò3Ñ5Ô5ˆØð 	7Ý Ð%5Ñ6Ô6Ð6å
Ø”ØÔ%ØÔ!ØŒ~Øðñ ô €Cð ‡F‚Fˆ3�K„K€KØ
�)Š)‰+Œ+ÐÐÐÐÐÐÐØ
�*Š*�S‰/Œ/ÐÐÐÐÐÐÐàÔ˜wÔ1Ñ1Ô7¸!Ñ;€DØÐeÐe Ô 2ÐeÐe¸Ô9IÐeÐeÈgÌnÐNcÐ`cÐeÐe€IÝ
˜ÐE¨{Ô/CÐEÐEÀyÐRcÑ
dÔ
dÐdÐdÐdÐdÐdÐdÐdÝ
˜RÐ!J°KÔ4HÐ!JÐ!JÈIÐWhÑ
iÔ
iÐiÐiÐiÐiÐiÐiÐiØ
�)Š)‰+Œ+ÐÐÐÐÐÐÐÝ˜˜bÑ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!r*   z/{req_id}/approveÚreq_idÚbodyc              ƒ   óà  K  — |j         dk    rt          dd¦  «        ‚|                     t          t          ¦  «                             t          j        | k    ¦  «        ¦  «        ƒ d {V —†}|                     ¦   «         }|st          dd¦  «        ‚d|_        |j	        |_	        |j        |_
        t          j        ¦   «         |_        |                     ¦   «         ƒ d {V —† |                     |¦  «        ƒ d {V —† t!          ||j        dd|j        › d	|j        › d
|j	        r
d|j	        z   nd› �d¦  «        ƒ d {V —† |                     ¦   «         ƒ d {V —† t)          ||¦  «        ƒ d {V —†S )Nr.   é“  ú
Admin onlyr?   ú	Not foundÚapprovedzCuti disetujuiúCuti rF   z telah disetujui.z
 Catatan: r   r   ©r3   r   r   r   r
   r   r   r!   rD   Úadmin_notesr"   r   ÚutcnowÚreviewed_atrI   rJ   r   r    rA   rB   r)   ©rP   rQ   r   r,   r9   r   s         r(   Úapprove_leave_requestr]   T   s  è è € ð Ô˜GÒ#Ð#Ý˜C Ñ.Ô.Ð.Ø—:’:�f¥\Ñ2Ô2×8Ò8½¼ÈFÒ9RÑSÔSÑTÔTÐTÐTÐTÐTÐTÐT€FØ
×
#Ò
#Ñ
%Ô
%€CØð .Ý˜C Ñ-Ô-Ð-Ø€C„JØÔ&€C„OØ"”o€C„OÝ”oÑ'Ô'€C„OØ
�)Š)‰+Œ+ÐÐÐÐÐÐÐØ
�*Š*�S‰/Œ/ÐÐÐÐÐÐÐõ ˜B ¤Ð-=ð  @{ÀsÄ~ð  @{ð  @{Ð\_Ô\hð  @{ð  @{ð  aeô  aqð  |yð  }Ið  LPô  L\ñ  }\ð  }\ð  wyð  @{ð  @{ð  }Nñ  Oô  Oð  Oð  Oð  Oð  Oð  Oð  Oð  OØ
�)Š)‰+Œ+ÐÐÐÐÐÐÐÝ˜˜bÑ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!r*   z/{req_id}/rejectc              ƒ   óà  K  — |j         dk    rt          dd¦  «        ‚|                     t          t          ¦  «                             t          j        | k    ¦  «        ¦  «        ƒ d {V —†}|                     ¦   «         }|st          dd¦  «        ‚d|_        |j	        |_	        |j        |_
        t          j        ¦   «         |_        |                     ¦   «         ƒ d {V —† |                     |¦  «        ƒ d {V —† t!          ||j        dd|j        › d	|j        › d
|j	        r
d|j	        z   nd› �d¦  «        ƒ d {V —† |                     ¦   «         ƒ d {V —† t)          ||¦  «        ƒ d {V —†S )Nr.   rS   rT   r?   rU   ÚrejectedzCuti ditolakrW   rF   z	 ditolak.z	 Alasan: r   r   rX   r\   s         r(   Úreject_leave_requestr`   n   sõ  è è € ð Ô˜GÒ#Ð#Ý˜C Ñ.Ô.Ð.Ø—:’:�f¥\Ñ2Ô2×8Ò8½¼ÈFÒ9RÑSÔSÑTÔTÐTÐTÐTÐTÐTÐT€FØ
×
#Ò
#Ñ
%Ô
%€CØð .Ý˜C Ñ-Ô-Ð-Ø€C„JØÔ&€C„OØ"”o€C„OÝ”oÑ'Ô'€C„OØ
�)Š)‰+Œ+ÐÐÐÐÐÐÐØ
�*Š*�S‰/Œ/ÐÐÐÐÐÐÐõ ˜B ¤¨^ð  >pÀSÄ^ð  >pð  >pÐZ]ÔZfð  >pð  >pð  VZô  Vfð  rnÐr}ð  AEô  AQñ  sQð  sQð  lnð  >pð  >pð  rCñ  Dô  Dð  Dð  Dð  Dð  Dð  Dð  Dð  DØ
�)Š)‰+Œ+ÐÐÐÐÐÐÐÝ˜˜bÑ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!r*   z	/{req_id}éÌ   )Ústatus_codec              ƒ   óþ  K  — |                      t          t          ¦  «                             t          j        | k    ¦  «        ¦  «        ƒ d {V —†}|                     ¦   «         }|st          dd¦  «        ‚|j        dk    r |j        |j        k    rt          dd¦  «        ‚|j        dk    r|j	        dk    rt          dd¦  «        ‚| 
                    |¦  «        ƒ d {V —† |                     ¦   «         ƒ d {V —† d S )	Nr?   rU   r.   rS   Ú	Forbiddenr@   r>   z Can only cancel pending requests)r   r   r
   r   r   r!   r   r3   r    rD   ÚdeleterI   )rP   r   r,   r9   r   s        r(   Údelete_leave_requestrf   ˆ   s  è è € ð —:’:�f¥\Ñ2Ô2×8Ò8½¼ÈFÒ9RÑSÔSÑTÔTÐTÐTÐTÐTÐTÐT€FØ
×
#Ò
#Ñ
%Ô
%€CØð .Ý˜C Ñ-Ô-Ð-ØÔ˜GÒ#Ð#¨¬°|´Ò(FÐ(FÝ˜C Ñ-Ô-Ð-ØÔ˜GÒ#Ð#¨¬
°iÒ(?Ð(?Ý˜CÐ!CÑDÔDÐDØ
�)Š)�C‰.Œ.ÐÐÐÐÐÐÐØ
�)Š)‰+Œ+ÐÐÐÐÐÐÐÐÐr*   N)'r   Úfastapir   r   r   Úsqlalchemy.ext.asyncior   Ú
sqlalchemyr   Úapp.databaser	   Úapp.models.leave_requestr
   Úapp.models.userr   Úapp.schemas.leave_requestr   r   r   Úapp.depsr   Úapp.services.notifierr   r   r   ÚrouterÚdictr)   ÚgetÚlistr;   ÚpostrO   ÚpatchÚintr]   r`   re   rf   © r*   r(   ú<module>rx      sj  ðØ Ð Ð Ð Ð Ð Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø /Ð /Ð /Ð /Ð /Ð /Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø  Ð  Ð  Ð  Ð  Ð  Ø ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ø %Ð %Ð %Ð %Ð %Ð %Ø VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ Và	ˆÐ+Ð3CÐ2DÐ	EÑ	EÔ	E€ð�|ð ¨ð ¸$ð ð ð ð ð  ‡‚ˆB˜t OÔ4€Ñ5Ô5à�w˜v‘”Ø ˜Ð!1Ñ2Ô2ð0ð 0Øð0àð0ð 0ð 0ñ 6Ô5ð0ð  ‡‚ˆR €Ñ0Ô0ð �w˜v‘”Ø ˜Ð!1Ñ2Ô2ð"ð "Øð"àð"ð ð"ð "ð "ñ 1Ô0ð"ðD ‡‚Ð!°/€ÑBÔBð  2Ð1Ñ3Ô3Ø�w˜v‘”Ø ˜Ð!1Ñ2Ô2ð	"ð "Øð"à
ð"ð 	ð"ð ð	"ð "ð "ñ CÔBð"ð2 ‡‚Ð °€ÑAÔAð  2Ð1Ñ3Ô3Ø�w˜v‘”Ø ˜Ð!1Ñ2Ô2ð	"ð "Øð"à
ð"ð 	ð"ð ð	"ð "ð "ñ BÔAð"ð2 ‡‚ˆ{¨€Ñ,Ô,ð �w˜v‘”Ø ˜Ð!1Ñ2Ô2ðð Øðàðð ðð ð ñ -Ô,ðð ð r*   