Ë
    à™þiL ã                  ój  — d Z ddlmZ ddlZddl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 ddl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j2                  e«      ZdZ e	 ed¬«      «      ZdCd„ZdDd„ZdEd„Z dFd„Z!dGd„Z"dHd„Z#	 dI	 	 	 	 	 	 	 	 	 	 	 	 	 dJd„Z$	 	 	 	 	 	 	 	 	 	 dKd„Z%dLd„Z&dMd„Z'dNd„Z(dFd„Z)dOd„Z*	 	 	 	 	 	 dPd„Z+dQd„Z,dQd„Z-dQd „Z.	 	 	 	 	 	 	 	 	 	 dRd!„Z/dSd"„Z0dSd#„Z1	 	 	 	 	 	 	 	 	 	 dTd$„Z2dSd%„Z3dSd&„Z4	 	 	 	 	 	 	 	 dUd'„Z5dVd(„Z6dVd)„Z7	 	 	 	 	 	 	 	 	 	 dWd*„Z8dVd+„Z9dXd,„Z:dSd-„Z;dSd.„Z<dYd/„Z=dYd0„Z>	 	 	 	 	 	 	 	 	 	 dZd1„Z?dYd2„Z@d[d3„ZAd[d4„ZB	 	 	 	 	 	 	 	 	 	 d\d5„ZCd]d6„ZDd]d7„ZE	 	 	 	 	 	 	 	 	 	 d^d8„ZFd_d9„ZGd`d:„ZHdad;„ZIdbd<„ZJdcd=„ZKddd>„ZLdYd?„ZMded@„ZN	 	 	 	 	 	 	 	 dfdA„ZO	 dg	 	 	 	 	 	 	 	 	 dhdB„ZPy)iu  Telegram notification service.

All notify_* functions are fire-and-forget â€” call via FastAPI BackgroundTasks.
They open their own DB session so the request lifecycle doesn't affect them.
Errors are logged and swallowed; Telegram failures must never break the main flow.
é    )ÚannotationsN)Údefaultdict)ÚdatetimeÚ	timedeltaÚtimezone©ÚDecimal)ÚPath)Úselect)Úselectinload)Úsettings)ÚAsyncSessionLocal)ÚTelegramConfigz,https://api.telegram.org/bot{token}/{method}é   )Úhoursc                óL   — t         j                  t        j                  | ¬«      S )N)ÚtokenÚmethod)ÚTELEGRAM_APIÚformatr   ÚTELEGRAM_BOT_TOKEN)r   s    ú?/var/www/html/spbu.com/backend/app/services/telegram_service.pyÚ_apir   !   s   € Ü×Ñ¤X×%@Ñ%@ÈÐÓPÐPó    c                ó@   — dt        | «      d›�j                  dd«      S )NzRp Ú,Ú.)ÚintÚreplace©Úvalues    r   Ú_fmt_rpr"   %   s"   € Ø”�U“˜A�Ð×'Ñ'¨¨SÓ1Ð1r   c                ó€   — t        | «      d›d�j                  dd«      j                  dd«      j                  dd«      S )Nz,.1fz Lr   ÚXr   )Úfloatr   r    s    r   Ú_fmt_volr&   )   s?   € Ü�E‹l˜4Ð  Ð#×+Ñ+¨C°Ó5×=Ñ=¸cÀ3ÓG×OÑOÐPSÐUXÓYÐYr   c                óP   — | sy| j                  t        «      j                  d«      S )Nõ   â€”z%d %b %Y, %H:%M WIB)Ú
astimezoneÚWIBÚstrftime)Údts    r   Ú_wibr-   -   s#   € ÙØØ�=‰=œÓ×&Ñ&Ð'<Ó=Ð=r   c                ó  — | sy| j                  d«      ry	 | j                  d«      }t        |«      }|j                  «       r|j	                  «       S 	 y# t
        $ r!}t        j                  d| |«       Y d}~yd}~ww xY w)zMRead file bytes from local storage. Returns None if file not found or GDrive.Nzhttps://Ú/u'   telegram: failed to read file %s â€” %s)Ú
startswithÚlstripr
   ÚexistsÚ
read_bytesÚ	ExceptionÚloggerÚwarning)Ú
stored_urlÚrelÚpathÚes       r   Ú_read_file_bytesr;   3   sƒ   € áØØ×Ñ˜ZÔ(ØðQØ×Ñ Ó$ˆÜ�C‹yˆØ�;‰;Œ=Ø—?‘?Ó$Ð$ð ð øô ò QÜ�‰Ð@À*Èa×PÐPØûðQús   —;A Á	A?ÁA:Á:A?c              ƒ  ó"  K  — | |ddœ}|r||d<   t        j                  d¬«      4 ƒd {  –—† }|j                  t        d«      |¬«      ƒ d {  –—† }|j	                  «        d d d «      ƒd {  –—†  y 7 ŒI7 Œ'7 Œ	# 1 ƒd {  –—†7  sw Y   y xY w­w)NÚHTML)Úchat_idÚtextÚ
parse_modeÚmessage_thread_idé
   ©ÚtimeoutÚsendMessage)Újson)ÚhttpxÚAsyncClientÚpostr   Úraise_for_status)r>   Ú	thread_idr?   ÚpayloadÚclientÚresps         r   Ú
_send_textrO   C   sx   è ø€ Ø '°ÀVÑL€GÙØ'0ˆÐ#Ñ$Ü× Ñ ¨×,Õ,°Ø—[‘[¤ mÓ!4¸7�[ÓC×CˆØ×ÑÔ÷ -×,Ñ,øØCøð -ø×,×,Ñ,üsV   ‚(BªA4«B® A:ÁA6ÁA:Á#BÁ.A8Á/BÁ6A:Á8BÁ:BÂ BÂBÂBc              ƒ  óD  K  — | |ddœ}|rt        |«      |d<   d|||fi}t        j                  d¬«      4 ƒd{  –—† }|j                  t	        d«      ||¬	«      ƒ d{  –—† }	|	j                  «        ddd«      ƒd{  –—†  y7 ŒJ7 Œ'7 Œ	# 1 ƒd{  –—†7  sw Y   yxY w­w)
z(Send a file document to a Telegram chat.r=   )r>   Úcaptionr@   rA   Údocumenté   rC   NÚsendDocument©ÚdataÚfiles)ÚstrrG   rH   rI   r   rJ   )
r>   rK   rQ   ÚfilenameÚ
file_bytesÚcontent_typeÚdata_fieldsrW   rM   rN   s
             r   Ú_send_documentr]   L   s‘   è ø€ ð %,¸ÈvÑV€KÙÜ+.¨y«>ˆÐ'Ñ(Ø˜( J°Ð=Ð>€EÜ× Ñ ¨×,Õ,°Ø—[‘[¤ nÓ!5¸KÈu�[ÓU×UˆØ×ÑÔ÷ -×,Ñ,øØUøð -ø×,×,Ñ,üsV   ‚8B ºB»B ¾!BÁBÁ BÁ4B Á?B	Â B ÂBÂ	B ÂBÂBÂBÂB c              ƒ  óú  K  — |syg }i }t        |dd «      D ]8  \  }\  }}d|› �}	|j                  dd|	› �dœ|dk(  r|dd	œni ¥«       ||d
f||	<   Œ: | t        j                  |«      dœ}
|rt	        |«      |
d<   t        j                  d¬«      4 ƒd{  –—† }|j                  t        d«      |
|¬«      ƒ d{  –—† }|j                  «        ddd«      ƒd{  –—†  y7 ŒJ7 Œ'7 Œ	# 1 ƒd{  –—†7  sw Y   yxY w­w)zDSend up to 10 photos as a media group. First photo gets the caption.NrB   Úphoto_Úphotoz	attach://)ÚtypeÚmediar   r=   )rQ   r@   z
image/jpeg)r>   rb   rA   rS   rC   ÚsendMediaGrouprU   )
Ú	enumerateÚappendrF   ÚdumpsrX   rG   rH   rI   r   rJ   )r>   rK   rQ   Úfile_bytes_listrb   rW   ÚirY   rV   Úkeyr\   rM   rN   s                r   Ú_send_media_grouprj   ^   s  è ø€ ñ Øà€EØ€EÜ(¨¸¸"Ð)=Ö>ÑˆÑˆH�dØ�q�cˆlˆØ�‰ØØ   Ð&ñ
ð >?À!ºV˜7°&Ò9Èð
ô 	ð
   lÐ3ˆˆcŠ
ð  ?ð %,´d·j±jÀÓ6GÑH€KÙÜ+.¨y«>ˆÐ'Ñ(ä× Ñ ¨×,Õ,°Ø—[‘[¤Ð&6Ó!7¸kÐQV�[ÓW×WˆØ×ÑÔ÷ -×,Ñ,øØWøð -ø×,×,Ñ,üsZ   ‚BC;ÂC ÂC;Â!C&Â:C"Â;C&ÃC;ÃC$ÃC;Ã"C&Ã$C;Ã&C8Ã,C/Ã-C8Ã4C;c                ó„   — g }| D ]8  }|sŒt        |«      }|sŒ|j                  |j                  d«      d   |f«       Œ: |S )Nr/   éÿÿÿÿ)r;   re   Úsplit)ÚurlsÚresultÚurlrV   s       r   Ú_collect_photosrq   |   sI   € Ø&(€FÛˆÙØÜ Ó$ˆÚØ�M‰M˜3Ÿ9™9 S›>¨"Ñ-¨tÐ4Õ5ð ð €Mr   c           	   ƒ  óp  K  — t        «       4 ƒd {  –—† }|j                  t        t        «      j	                  t        j
                  | k(  t        j                  j                  d«      «      «      ƒ d {  –—† }|j                  «       cd d d «      ƒd {  –—†  S 7 Œ‰7 Œ'7 Œ	# 1 ƒd {  –—†7  sw Y   y xY w­w)NT)	r   Úexecuter   r   ÚwhereÚspbu_idÚ	is_activeÚis_Úscalar_one_or_none)ru   Údbro   s      r   Ú_get_configrz   ‰   sˆ   è ø€ Ü ×"Ô" bØ—z‘zÜ”>Ó"×(Ñ(Ü×&Ñ&¨'Ñ1Ü×(Ñ(×,Ñ,¨TÓ2óó
÷ 
ˆð ×(Ñ(Ó*÷ #×"Ò"øð
øð #ø×"×"Ñ"üsW   ‚B6‘B’B6•A B!Á5BÁ6B!Â	B6ÂBÂB6ÂB!ÂB6Â!B3Â'B*Â(B3Â/B6c                ó.   — dt         j                  › | › d�S )Nz	<a href="u   ">Buka â†’</a>)r   ÚFRONTEND_URL)r9   s    r   Ú_linkr}   ”   s   € Ø”x×,Ñ,Ð-¨d¨V°>ÐBÐBr   c                óR   — | €yt        | dd«      }t        | dd«      }|r|› d|› �S |S )NÚSPBUÚnameÚnomor_pertaminaÚ õ    â€” )Úgetattr)Úspbur€   Únomors      r   Ú_spbu_headerr‡   ˜   s?   € Ø€|ØÜ�4˜ Ó(€DÜ�DÐ+¨RÓ0€EÙ$)ˆdˆV�5˜˜Ð Ð3¨tÐ3r   c              ƒ  ó¶   K  — ddl m} | j                  t        |«      j	                  |j
                  |k(  «      «      ƒ d {  –—† }|j                  «       S 7 Œ­w)Nr   )ÚSpbu)Úapp.models.spbur‰   rs   r   rt   Úidrx   )ry   ru   r‰   ro   s       r   Ú
_load_spburŒ       sG   è ø€ Ý$Ø—:‘:œf T›l×0Ñ0°·±¸GÑ1CÓDÓE×E€FØ×$Ñ$Ó&Ð&ð Fús   ‚A AÁAÁAc                óF   — | › d|› d|› d|› d|› d|› d|› dt        |«      › �S )Nz <b>u    Di-Unlock</b>

ðŸ�ª õ   
ðŸ“… Ú
u   ðŸ”“ Di-unlock oleh : u   
ðŸ“� Alasan         : u   
ðŸ•� Waktu          : )r-   )ÚiconÚmodulÚspbu_hdrÚtanggal_strÚextraÚunlocked_byÚalasanÚunlocked_ats           r   Ú_unlock_textr˜   ¨   sU   € ð ˆ&��U�Gð Øˆzð Øˆ}˜BØˆ'Ø
   ð .!Ø!' ð )!Ü!% kÓ!2Ð 3ð	5ðr   c              ƒ  ó:  K  — t         j                  rt         j                  sy 	 t        | «      ƒ d {  –—† }|r|j                  r|j
                  sy t        || |d¬«      ƒ d {  –—†  y 7 Œ77 Œ# t        $ r }t        j                  d|«       Y d }~y d }~ww xY w­w)NÚ	submitted©Úeventz-telegram notify_penjualan_submitted error: %s©
r   r   Úis_productionrz   Úchat_operasional_idÚthread_penjualan_idÚ_do_notify_penjualanr4   r5   Úerror©ru   Ú
laporan_idÚcfgr:   s       r   Únotify_penjualan_submittedr¦   ·   s†   è ø€ Ü×&Ò&¬h×.DÒ.DØðIÜ Ó(×(ˆÙ˜#×1Ò1¸×9PÒ9PØÜ" 3¨°À;ÔO×OÑOð )øð 	PùÜò IÜ�‰ÐDÀa×HÑHûðIüó\   ‚"B¥A/ ³A+´A/ ÁBÁA/ Á%A-Á&A/ Á*BÁ+A/ Á-A/ Á/	BÁ8BÂBÂBÂBc              ƒ  ó:  K  — t         j                  rt         j                  sy 	 t        | «      ƒ d {  –—† }|r|j                  r|j
                  sy t        || |d¬«      ƒ d {  –—†  y 7 Œ77 Œ# t        $ r }t        j                  d|«       Y d }~y d }~ww xY w­w)NÚapprovedr›   z,telegram notify_penjualan_approved error: %sr�   r£   s       r   Únotify_penjualan_approvedrª   Ã   s†   è ø€ Ü×&Ò&¬h×.DÒ.DØðHÜ Ó(×(ˆÙ˜#×1Ò1¸×9PÒ9PØÜ" 3¨°À:ÔN×NÑNð )øð 	OùÜò HÜ�‰ÐCÀQ×GÑGûðHür§   c           
   ƒ  óò  K  — t         j                  rt         j                  sy 	 t        | «      ƒ d {  –—† }|r|j                  r|j
                  sy ddlm} t        «       4 ƒd {  –—† }|j                  t        |«      j                  |j                  |k(  |j                  | k(  «      j                  t        |j                   «      t        |j"                  «      t        |j$                  «      «      «      ƒ d {  –—† }|j'                  «       }|s	 d d d «      ƒd {  –—†  y d d d «      ƒd {  –—†  j"                  r|j"                  j(                  nd}|j*                  r|j*                  j-                  d«      nd}t/        ddt1        |j                   «      |› d|› �d|j$                  r|j$                  j2                  nd|j4                  xs d|j6                  «      }	|	d	t9        d
|› �«      › �z  }	t;        |j                  |j
                  |	«      ƒ d {  –—†  y 7 �Œò7 �ŒÁ7 �Œ.7 �Œ7 Œÿ# 1 ƒd {  –—†7  sw Y   �ŒxY w7 Œ)# t<        $ r }
t>        jA                  d|
«       Y d }
~
y d }
~
ww xY w­w)Nr   ©ÚLaporanShiftr(   ú%d %b %Yõ   ðŸ”“zLaporan Shiftõ    Â· r‚   õ   
ðŸ”— ú/penjualan/z,telegram notify_penjualan_unlocked error: %s)!r   r   rž   rz   rŸ   r    Úapp.models.operationalr­   r   rs   r   rt   r‹   ru   Úoptionsr   r…   Úshiftr•   rx   ÚnamaÚtanggalr+   r˜   r‡   r€   Úunlock_reasonr—   r}   rO   r4   r5   r¢   )ru   r¤   r¥   r­   ry   ro   ÚlaporanÚ
shift_namar“   r?   r:   s              r   Únotify_penjualan_unlockedr»   Ï   s  è ø€ Ü×&Ò&¬h×.DÒ.DØðHÜ Ó(×(ˆÙ˜#×1Ò1¸×9PÒ9PØÝ7Ü$×&Ô&¨"ØŸ:™:Ü�|Ó$ß‘�|—‘¨*Ñ4°l×6JÑ6JÈgÑ6UÓVß‘œ l×&7Ñ&7Ó8¼,À|×GYÑGYÓ:ZÜ% l×&>Ñ&>Ó?óAó÷ ˆFð ×/Ñ/Ó1ˆGÙØ÷ '×&×&×&Ð&ð ,3¯=ª=�W—]‘]×'Ò'¸eˆ
Ø>E¿oºo�g—o‘o×.Ñ.¨zÔ:ÐSXˆÜØ�O¤\°'·,±,Ó%?Øˆm˜4 
˜|Ð,ØØ(/×(;Ò(;ˆG×Ñ×$Ò$ÀØ×!Ñ!Ò* UØ×Ñó
ˆð 	�'œ% +¨j¨\Ð :Ó;Ð<Ð=Ñ=ˆÜ˜×0Ñ0°#×2IÑ2IÈ4ÓP×PÑPð3 )ùð 'ùðùð 'ùÐ&ø×&×&Ò&úð* 	QùÜò HÜ�‰ÐCÀQ×GÑGûðHüóÐ   ‚"I7¥I ³H%´I ÁI7ÁI Á'H(Á(I Á+BH3Ã=H+Ã>H3ÄI Ä H.Ä!I Ä%I7Ä&I Ä1H1Ä2C-I ÈI	È I È$I7È%I È(I È+H3È.I È1I È3IÈ9H<È:IÉ	I É	I4ÉI/É*I7É/I4É4I7c           !   ƒ  óÞ  K  — ddl m}m} ddlm} t        «       4 ƒd {  –—† }|j                  t        |«      j                  |j                  |k(  |j                  |k(  «      j                  t        |j                  «      t        |j                  «      t        |j                  «      t        |j                   «      t        |j"                  «      j                  |j$                  «      j                  |j&                  «      t        |j(                  «      «      «      ƒ d {  –—† }|j+                  «       }	|	s	 d d d «      ƒd {  –—†  y d d d «      ƒd {  –—†  t-        	j                  «      }
|	j                  r|	j                  j.                  nd}|	j                  r%|	j                  j0                  j3                  d«      nd}|	j                  r%|	j                  j4                  j3                  d«      nd}|	j6                  r|	j6                  j3                  d«      nd}t9        d„ «      }|	j"                  D ]z  }|j$                  r6|j$                  j&                  r |j$                  j&                  j.                  nd	}||   d
xx   |j:                  z  cc<   ||   dxx   |j<                  z  cc<   Œ| t?        d„ |jA                  «       D «       «      }t?        d„ |jA                  «       D «       «      }djC                  d„ |jE                  «       D «       «      }|dk(  �rÑ|	jF                  dz  |	jH                  dz  z   |	jJ                  dz  z   |	jL                  dz  z   |	jN                  dz  z   |	jP                  dz  z   |	jR                  dz  z   |	jT                  z   }|	j                  r|	j                  jV                  nd}d|
› d|› d|› d|› d|› d|› d|› dtY        |«      › d t[        |«      › d!t[        |«      › d"t[        |	j\                  «      › d#t[        |	j^                  «      › d$t[        |	j`                  «      › d%tc        |	jd                  «      › d&tg        d'|› �«      › �}ti        | jj                  | jl                  |«      ƒ d {  –—†  to        |	j(                  D �cg c]  }|jp                  ‘Œ c}«      }|r6d(|
› d|› d)|› �}ts        | jj                  | jl                  ||«      ƒ d {  –—†  y y |d*k(  rÃ|	j                   r|	j                   jV                  nd}|	j                  r|	j                  jV                  nd}d+|
› d|› d)|› d,t[        |«      › d-tY        |«      › d.|› d/|› d0|› d1tc        |	jt                  «      › d&tg        d'|› �«      › �}ti        | jj                  | jl                  |«      ƒ d {  –—†  y y 7 �Œ 7 �ŒŸ7 �Œ7 �Œq# 1 ƒd {  –—†7  sw Y   �Œ‚xY w7 �ŒVc c}w 7 Œù7 Œ2­w)2Nr   )r­   ÚPenjualanNozzle)ÚNozzler(   z%H:%Mr‚   z%A, %d %b %Yc                 ó0   — t        d«      t        d«      dœS )Nr   )ÚvolumeÚnilair   © r   r   Ú<lambda>z&_do_notify_penjualan.<locals>.<lambda>  s   € ÄGÈAÃJÔY`ÐabÓYcÒ9dr   Ú?rÁ   rÂ   c              3  ó&   K  — | ]	  }|d    –— Œ y­w)rÁ   NrÃ   ©Ú.0Úvs     r   Ú	<genexpr>z'_do_notify_penjualan.<locals>.<genexpr>  s   è ø€ ÐCÑ,B q�q˜•{Ñ,Bùó   ‚c              3  ó&   K  — | ]	  }|d    –— Œ y­w)rÂ   NrÃ   rÇ   s     r   rÊ   z'_do_notify_penjualan.<locals>.<genexpr>  s   è ø€ ÐAÑ*@ Q�a˜•jÑ*@ùrË   r�   c           
   3  ól   K  — | ],  \  }}d |d›dt        |d   «      d›dt        |d   «      › �–— Œ. y­w)õ   â›½ ú<12Ú rÁ   z<14rÂ   N)r&   r"   )rÈ   r¶   rÉ   s      r   rÊ   z'_do_notify_penjualan.<locals>.<genexpr>  sG   è ø€ ð á,‰GˆD�!ð ˆt�Cˆj˜œ( 1 X¡;Ó/°Ð4°A´g¸aÀ¹jÓ6IÐ5JÔKÙ,ùs   ‚24rš   i † iPÃ  i N  i'  iˆ  iÐ  iè  u&   ðŸ“‹ <b>Laporan Shift Masuk</b>

ðŸ�ª rŽ   u   
â�° ú (õ    â€“ u   )
ðŸ‘¤ Operator: u¤   

â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
<b>PENJUALAN PER PRODUK</b>
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
uW   
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
ðŸ“¦ Total Volume  u   
ðŸ’µ Total Nilai   up   
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€

ðŸ’³ <b>KAS &amp; PEMBAYARAN</b>
Tunai     z
Kartu     z
QR Code   z
Instansi  õ   

ðŸ•� Submit: r±   r²   u   ðŸ“¸ <b>Foto Island</b> â€” r°   r©   u)   âœ… <b>Laporan Shift Disetujui</b>

ðŸ�ª uX   

â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
ðŸ’µ Total Nilai   u   
ðŸ“¦ Total Volume  uD   
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
u   

ðŸ‘¤ Operator  : õ   
âœ�ï¸� Disetujui : õ   
ðŸ•� Waktu     : );r³   r­   r¾   rŠ   r¿   r   rs   r   rt   r‹   ru   r´   r   r…   rµ   Úsubmitted_byÚreviewed_byÚpenjualan_nozzleÚnozzleÚprodukÚisland_fotosrx   r‡   r¶   Ú	jam_mulair+   Újam_selesair·   r   rÁ   rÂ   ÚsumÚvaluesÚjoinÚitemsÚkas_100kÚkas_50kÚkas_20kÚkas_10kÚkas_5kÚkas_2kÚkas_1kÚ	kas_logamr€   r&   r"   Úpembayaran_kartuÚpembayaran_qrÚpembayaran_instansir-   Úsubmitted_atr}   rO   rŸ   r    rq   Úfoto_urlrj   Úreviewed_at)r¥   ru   r¤   rœ   r­   r¾   r¿   ry   ro   r¹   r’   rº   rÜ   rÝ   r“   Úproduk_totalsÚpnr¶   Útotal_volumeÚtotal_nilaiÚproduk_linesÚ	kas_tunaiÚoperator_namer?   ÚfÚphotosrQ   Úapprover_names                               r   r¡   r¡   ñ   s¥  è ø€ ÷ EÝ&ä ×"Ô" bØ—z‘zÜ�<Ó ß‰U�<—?‘? jÑ0°,×2FÑ2FÈ'Ñ2QÓRß‰WÜ˜\×.Ñ.Ó/Ü˜\×/Ñ/Ó0Ü˜\×6Ñ6Ó7Ü˜\×5Ñ5Ó6Ü˜\×:Ñ:Ó;×HÑHØ#×*Ñ*óç‘,˜vŸ}™}Ó-Ü˜\×6Ñ6Ó7ó	ó
÷ 
ˆð ×+Ñ+Ó-ˆÙØ÷# #×"×"×"Ð"ô& ˜GŸL™LÓ)€HØ'.§}¢}�—‘×#Ò#¸%€JØ=D¿]º]�—‘×'Ñ'×0Ñ0°Ô9ÐPR€IØAHÇÂ�'—-‘-×+Ñ+×4Ñ4°WÔ=ÐTV€KØ>E¿oºo�'—/‘/×*Ñ*¨>Ô:ÐSX€Kä%0Ñ1dÓ%e€MØ×&Ô&ˆØ)+¯ª°r·y±y×7GÒ7G�—	‘	× Ñ ×%Ò%ÈSˆØ�dÑ˜HÓ%¨¯©Ñ2Ó%Ø�dÑ˜GÓ$¨¯©Ñ0Ô$ð 'ô
 ÑC¨M×,@Ñ,@Ô,BÓCÓC€LÜÑA¨-×*>Ñ*>Ô*@ÓAÓA€KØ—9‘9ñ à$×*Ñ*Ô,óó €Lð
 �Óà×Ñ˜vÑ%¨¯©¸%Ñ(?Ñ?Ø�O‰O˜eÑ#ñ$Ø&-§o¡o¸Ñ&=ñ>à�N‰N˜TÑ!ñ"à$+§N¡N°TÑ$9ñ:ð �N‰N˜TÑ!ñ"ð %,×$5Ñ$5ñ6ð 	ð 6=×5IÒ5I˜×,Ñ,×1Ò1ÈuˆðØ�:ð Ø�=ð !Ø�,˜b  ¨5°°ð >Ø+˜_ð -Sð ˆnð "ä"*¨<Ó"8Ð!9ð :"Ü")¨+Ó"6Ð!7ð 8ô ! Ó+Ð,ð -Ü  ×!9Ñ!9Ó:Ð;ð <Ü  ×!6Ñ!6Ó7Ð8ð 9Ü  ×!<Ñ!<Ó=Ð>ð ?Ü  ×!5Ñ!5Ó6Ð7ð 8Ü˜K¨
 |Ð4Ó5Ð6ð'8ð 	ô, ˜×0Ñ0°#×2IÑ2IÈ4ÓP×PÐPä °g×6JÒ6JÓ!KÑ6J° !§*£*Ð6JÑ!KÓLˆÙØ4°X°J¸bÀÀÈDÐQ\ÐP]Ð^ˆGÜ# C×$;Ñ$;¸S×=TÑ=TÐV]Ð_eÓf×fÑfð ð 
�*Ò	Ø4;×4GÒ4G˜×+Ñ+×0Ò0ÈUˆØ5<×5IÒ5I˜×,Ñ,×1Ò1ÈuˆðØ�:ð Ø�=  Z Lð 1"ä")¨+Ó"6Ð!7ð 8"Ü"*¨<Ó"8Ð!9ð :Sàˆnð  Ø -˜ð /"Ø"/ ð 1 Ü $ W×%8Ñ%8Ó 9Ð:ð ;Ü˜K¨
 |Ð4Ó5Ð6ð8ð 	ô ˜×0Ñ0°#×2IÑ2IÈ4ÓP×PÑPð# 
ðW #ùð
ùð #ùÐ"ù×"×"Ò"úðH 	Qûâ!Kð gøð& 	Qús§   ‚W-ŸV? W-£D WÄ#WÄ$WÄ;W-ÅWÅW-ÅWÅL3W-ÒW!ÒW-Ò#W$Ò69W-Ó/W)Ó0CW-Ö8W+Ö9W-×W×W-×W-×W×W×W×	W-×$W-×+W-c              ƒ  ó:  K  — t         j                  rt         j                  sy 	 t        | «      ƒ d {  –—† }|r|j                  r|j
                  sy t        || |d¬«      ƒ d {  –—†  y 7 Œ77 Œ# t        $ r }t        j                  d|«       Y d }~y d }~ww xY w­w)Nrš   r›   z.telegram notify_penerimaan_submitted error: %s©
r   r   rž   rz   rŸ   Úthread_penerimaan_idÚ_do_notify_penerimaanr4   r5   r¢   ©ru   Úpenerimaan_idr¥   r:   s       r   Únotify_penerimaan_submittedr   X  s†   è ø€ Ü×&Ò&¬h×.DÒ.DØðJÜ Ó(×(ˆÙ˜#×1Ò1¸×9QÒ9QØÜ# C¨°-À{ÔS×SÑSð )øð 	TùÜò JÜ�‰ÐEÀq×IÑIûðJür§   c              ƒ  ó:  K  — t         j                  rt         j                  sy 	 t        | «      ƒ d {  –—† }|r|j                  r|j
                  sy t        || |d¬«      ƒ d {  –—†  y 7 Œ77 Œ# t        $ r }t        j                  d|«       Y d }~y d }~ww xY w­w)Nr©   r›   z-telegram notify_penerimaan_approved error: %srû   rþ   s       r   Únotify_penerimaan_approvedr  d  s†   è ø€ Ü×&Ò&¬h×.DÒ.DØðIÜ Ó(×(ˆÙ˜#×1Ò1¸×9QÒ9QØÜ# C¨°-ÀzÔR×RÑRð )øð 	SùÜò IÜ�‰ÐDÀa×HÑHûðIür§   c              ƒ  óD  ‡K  — ddl m}m}m} t	        «       4 ƒd {  –—† }|j                  t        |«      j                  |j                  |k(  |j                  |k(  «      j                  t        |j                  «      t        |j                  «      t        |j                  «      j                  |j                  «      t        |j                   «      «      «      ƒ d {  –—† }|j#                  «       }	|	s	 d d d «      ƒd {  –—†  y t%        ||«      ƒ d {  –—† }
d d d «      ƒd {  –—†  t'        
«      }	j(                  r|	j(                  j+                  d«      nd}t-        d„ |	j                  D «       «      }dd„Šdj/                  ˆfd„|	j                  D «       «      }|d	k(  �rƒ|	j                  r|	j                  j0                  nd}|	j2                  xs d}d
|› d|› d|› d|› d|› dt5        |«      › dt7        |	j8                  «      › dt;        d|› �«      › �}t=        | j>                  | j@                  |«      ƒ d {  –—†  |	j                   D �cg c]  }|jB                  dv sŒ|jD                  ‘Œ }}tG        |«      }|r2d|› d|› �}tI        | j>                  | j@                  ||«      ƒ d {  –—†  |	j                   D �cg c]  }|jB                  dv sŒ|jD                  ‘Œ }}tG        |«      }|r3d|› d|› �}tI        | j>                  | j@                  ||«      ƒ d {  –—†  y y |dk(  r´|	j                  r|	j                  j0                  nd}|	j                  r|	j                  j0                  nd}d|› d|› d|› dt5        |«      › d|› d|› dt7        |	jJ                  «      › dt;        d|› �«      › �}t=        | j>                  | j@                  |«      ƒ d {  –—†  y y 7 �ŒË7 �Œ7 �Œë7 �ŒÙ7 �ŒÌ# 1 ƒd {  –—†7  sw Y   �ŒÝxY w7 �ŒÈc c}w 7 �Œ_c c}w 7 Œõ7 Œ=­w)Nr   )Ú
PenerimaanÚPenerimaanFotoÚPenerimaanItemr®   r(   c              3  ó4   K  — | ]  }|j                   –— Œ y ­w©N©Úvolume_diterima©rÈ   Úitems     r   rÊ   z(_do_notify_penerimaan.<locals>.<genexpr>‡  s   è ø€ ÐB¹'°$˜×-Õ-¹'ùó   ‚c                óÔ   — | j                   r| j                   j                  nd}t        | j                  «      }| j                  rt        | j                  «      nd}d|d›d|d›d|› �S )NrÅ   r(   õ   ðŸ›¢ rÏ   rÐ   ú<16z exp: )rÚ   r¶   r&   r
  Úvolume_expected)r  rÚ   ÚditerimaÚexpecteds       r   Ú_penerimaan_linez/_do_notify_penerimaan.<locals>._penerimaan_line‰  s`   € Ø%)§[¢[�—‘×!Ò!°cˆÜ˜D×0Ñ0Ó1ˆØ59×5IÒ5I”8˜D×0Ñ0Ô1ÈuˆØ�v˜c�l ! H¨S >°¸°zÐBÐBr   r�   c              3  ó.   •K  — | ]  } ‰|«      –— Œ y ­wr  rÃ   )rÈ   r  r  s     €r   rÊ   z(_do_notify_penerimaan.<locals>.<genexpr>�  s   øè ø€ ÐF¹g°dÑ+¨D×1¹gùó   ƒrš   õ'   ðŸšš <b>Penerimaan BBM Masuk</b>

ðŸ�ª rŽ   u   
ðŸš› Kendaraan: u   
ðŸ‘¤ Petugas: uŸ   

â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
<b>VOLUME DITERIMA</b>
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
õP   
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
ðŸ“¦ Total: rÓ   r±   ú/penerimaan/)ÚtruckÚsurat_jalanÚcompartment_bukaÚcompartment_kosongu-   ðŸ“¸ <b>Foto Kendaraan & Kompartemen</b> â€” )Údipstick_sebelumÚdipstick_sesudahÚ
stick_awalÚstick_akhiru%   ðŸ“� <b>Foto Dipstick Tangki</b> â€” r©   u*   âœ… <b>Penerimaan BBM Disetujui</b>

ðŸ�ª õE   

â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
u   

ðŸ‘¤ Petugas   : rÔ   rÕ   ©ÚreturnrX   )&Úapp.models.penerimaanr  r  r  r   rs   r   rt   r‹   ru   r´   r   rÖ   r×   rá   rÚ   Úfotosrx   rŒ   r‡   r·   r+   rÞ   rà   r€   Ú	no_polisir&   r-   rí   r}   rO   rŸ   rü   Útiperp   rq   rj   rï   )r¥   ru   rÿ   rœ   r  r  r  ry   ro   Úpr…   r’   r“   Útotal_diterimaÚ
item_linesrö   r'  r?   r÷   Úvehicle_urlsÚvehicle_photosrQ   Údipstick_urlsÚdipstick_photosrù   r  s                            @r   rý   rý   p  s  øè ø€ ÷ QÑPä ×"Ô" bØ—z‘zÜ�:Óß‰U�:—=‘= MÑ1°:×3EÑ3EÈÑ3PÓQß‰WÜ˜Z×4Ñ4Ó5Ü˜Z×3Ñ3Ó4Ü˜Z×-Ñ-Ó.×;Ñ;¸N×<QÑ<QÓRÜ˜Z×-Ñ-Ó.ó	ó	
÷ 	
ˆð ×%Ñ%Ó'ˆÙØ÷ #×"Ð"ô    GÓ,×,ˆ÷ #×"ô  ˜DÓ!€HØ45·I²I�!—)‘)×$Ñ$ ZÔ0À5€KÜÑB¸!¿'º'ÓBÓB€NóCð —‘ÓF¸a¿gºgÓFÓF€Jà�ÓØ/0¯~ª~˜Ÿ™×+Ò+À5ˆØ—K‘KÒ( 5ˆ	ðØ�:ð Ø�=ð !Ø(˜kð *Ø*˜Oð ,Sð ˆlð ä# NÓ3Ð4ð 5Ü  §¡Ó0Ð1ð 2Ü˜L¨¨Ð8Ó9Ð:ð<ð 	ô ˜×0Ñ0°#×2JÑ2JÈDÓQ×QÐQà'(§w¢wÓ¡w !°!·&±&Ð<~Ò2~˜Ÿ› wˆÐÜ(¨Ó6ˆÙØEÀhÀZÈrÐR]ÐQ^Ð_ˆGÜ# C×$;Ñ$;¸S×=UÑ=UÐW^Ð`nÓo×oÐoà()¯ªó  D© 1°1·6±6ð  >Cò  4C˜Ÿ›¨ˆð  DÜ)¨-Ó8ˆÙØ=¸h¸ZÀrÈ+ÈÐWˆGÜ# C×$;Ñ$;¸S×=UÑ=UÐW^Ð`oÓp×pÑpð ð 
�*Ò	Ø./¯mªm˜Ÿ™×*Ò*ÀˆØ/0¯~ª~˜Ÿ™×+Ò+À5ˆðØ�:ð Ø�=ð !Sàˆlð ä# NÓ3Ð4ð 5 Ø -˜ð /"Ø"/ ð 1 Ü $ Q§]¡]Ó 3Ð4ð 5Ü˜L¨¨Ð8Ó9Ð:ð
<ð 	ô ˜×0Ñ0°#×2JÑ2JÈDÓQ×QÑQð! 
ðy #ùð	
ùð #ùð -ùð #ù×"×"Ò"úð\ 	Rûâð pûò Dð qøð$ 	Rúsï   ƒP œO'�P  B?O6ÃO*Ã O6Ã7P ÄO-ÄP ÄO6ÄO0ÄO6ÄP Ä'O3Ä(DP ÉPÉP ÉPÉ+PÉ9<P Ê5PÊ6P ËPËPË*<P Ì&PÌ'B9P Ï PÏ!P Ï*O6Ï-P Ï0O6Ï3P Ï6P	Ï<O?Ï=P	Ð	P ÐP ÐP ÐP c           
   ƒ  ó¢  K  — t         j                  rt         j                  sy 	 t        | «      ƒ d {  –—† }|r|j                  r|j
                  sy ddlm} t        «       4 ƒd {  –—† }|j                  t        |«      j                  |j                  |k(  |j                  | k(  «      j                  t        |j                   «      «      «      ƒ d {  –—† }|j#                  «       }|s	 d d d «      ƒd {  –—†  y t%        || «      ƒ d {  –—† }d d d «      ƒd {  –—†  j&                  r|j&                  j)                  d«      nd}|j*                  rd|j*                  › d�nd}	t-        dd	t/        «      ||	|j                   r|j                   j0                  nd|j2                  xs d|j4                  «      }
|
d
t7        d|› �«      › �z  }
t9        |j                  |j
                  |
«      ƒ d {  –—†  y 7 �ŒÉ7 �Œ˜7 �Œ-7 �Œ7 Œú7 Œì# 1 ƒd {  –—†7  sw Y   ŒüxY w7 Œ*# t:        $ r }t<        j?                  d|«       Y d }~y d }~ww xY w­w)Nr   ©r  r®   r(   u   ðŸš› Kendaraan : r�   r‚   r¯   zPenerimaan BBMr±   r  z-telegram notify_penerimaan_unlocked error: %s) r   r   rž   rz   rŸ   rü   r%  r  r   rs   r   rt   r‹   ru   r´   r   r•   rx   rŒ   r·   r+   r'  r˜   r‡   r€   r¸   r—   r}   rO   r4   r5   r¢   )ru   rÿ   r¥   r  ry   ro   r)  r…   r“   r'  r?   r:   s               r   Únotify_penerimaan_unlockedr2  Ä  sí  è ø€ Ü×&Ò&¬h×.DÒ.DØðIÜ Ó(×(ˆÙ˜#×1Ò1¸×9QÒ9QØÝ4Ü$×&Ô&¨"ØŸ:™:Ü�zÓ"ß‘�z—}‘}¨Ñ5°z×7IÑ7IÈWÑ7TÓUß‘œ j×&<Ñ&<Ó=Ó>ó÷ ˆFð
 ×)Ñ)Ó+ˆAÙØ÷ '×&Ð&ô $ B¨Ó0×0ˆD÷ '×&ð 9:¿	º	�a—i‘i×(Ñ(¨Ô4ÀuˆØ;<¿;º;Ð'¨¯© }°BÑ7ÈBˆ	ÜØÐ$¤l°4Ó&8Ø˜Ø"#§-¢-ˆA�M‰M×Ò°UØ�O‰OÒ$˜uØ�M‰Mó
ˆð 	�'œ% ,¨}¨oÐ >Ó?Ð@ÐAÑAˆÜ˜×0Ñ0°#×2JÑ2JÈDÓQ×QÑQð1 )ùð 'ùðùð 'ùð 1øð 'ø×&×&Ñ&úð( 	RùÜò IÜ�‰ÐDÀa×HÑHûðIüsè   ‚"I¥H# ³G<´H# ÁIÁH# Á'G?Á(H# Á+A*HÃHÃHÃ-H# Ã8HÃ9H# Ã=IÃ>HÄHÄHÄH# ÄH
ÄCH# Ç6H!Ç7H# Ç;IÇ<H# Ç?H# ÈHÈH# ÈHÈ
H# ÈHÈHÈHÈH# È#	IÈ,IÉIÉIÉIc              ƒ  ó6  K  — t         j                  rt         j                  sy	 t        | «      ƒ d{  –—† }|r|j                  r|j
                  syt        || |«      ƒ d{  –—†  y7 Œ57 Œ# t        $ r }t        j                  d|«       Y d}~yd}~ww xY w­w)zLAlert ke thread_penerimaan_id jika ada losses pengiriman melebihi threshold.Nz1telegram notify_penerimaan_losses_alert error: %s)
r   r   rž   rz   rŸ   rü   Ú_do_notify_penerimaan_lossesr4   r5   r¢   rþ   s       r   Únotify_penerimaan_losses_alertr5  å  s„   è ø€ ä×&Ò&¬h×.DÒ.DØðMÜ Ó(×(ˆÙ˜#×1Ò1¸×9QÒ9QØÜ*¨3°¸ÓG×GÑGð )øð 	HùÜò MÜ�‰ÐHÈ!×LÑLûðMüó\   ‚"B¥A- ³A)´A- ÁBÁA- Á#A+Á$A- Á(BÁ)A- Á+A- Á-	BÁ6BÂBÂBÂBc              ƒ  ó€  K  — ddl m}m} ddlm} t        «       4 ƒd {  –—† }|j                  t        |«      j                  |j                  |k(  |j                  |k(  «      j                  t        |j                  «      j                  |j                  «      «      «      ƒ d {  –—† }|j                  «       }|s	 d d d «      ƒd {  –—†  y t!        ||«      ƒ d {  –—† }	|j                  D �
cg c]:  }
|
j                  r,|
j                  j"                  r|
j                  j"                  ‘Œ< }}
i }|r||j                  t        |«      j                  |j                  j%                  |«      «      «      ƒ d {  –—† }|j'                  «       j)                  «       D ]  }|||j                  <   Œ g }|j                  D ]¦  }
|
j                  }|r|j"                  sŒ|j+                  |j"                  «      }|j-                  |
j.                  |
j0                  |j"                  |j2                  |r|j2                  ndt5        t7        |r|j8                  nd«      «      dœ«       Œ¨ |j:                  }t=        |	«      }d d d «      ƒd {  –—†  g }D ]‘  }|d   }|d   }|�|�|dk  rŒ||z
  }|dk\  rŒ"t?        |«      }||z  d	z  }|d
   }||k  rŒ@|j-                  d|d   › d|d   › dtA        |«      › dtA        |«      › dtA        |«      › dtC        |d«      › d|› d�«       Œ“ |sy rtE        |«      nd}djG                  |«      }d› d|› d|› dtI        d|› �«      › �}tK        | jL                  | jN                  |«      ƒ d {  –—†  y 7 �Œp7 �Œì7 �ŒÌ7 �Œºc c}
w 7 �Œ%7 �Œ# 1 ƒd {  –—†7  sw Y   �Œ)xY w7 Œ2­w)Nr   )r  r  ©ÚProdukrÅ   z0.150)r
  r  Útangki_produk_idÚtangki_namaÚproduk_namaÚ	thresholdr
  r  éd   r=  r  r<  u    â†’ r;  z
   DO: z | Diterima: z
   Losses: -ú (-é   u   %) âš ï¸� batas Ú%r(   ú

u)   âš ï¸� <b>Losses Pengiriman BBM</b>
ðŸ�ª u   

ðŸ“… r±   r  )(r%  r  r  Úapp.models.productr9  r   rs   r   rt   r‹   ru   r´   r   rá   Útangkirx   rŒ   Ú	produk_idÚin_ÚscalarsÚallÚgetre   r
  r  r¶   r	   rX   Úlosses_threshold_penerimaan_pctrí   r‡   Úabsr&   Úroundr-   rà   r}   rO   rŸ   rü   )r¥   ru   rÿ   r  r  r9  ry   ro   r)  r…   r  Ú
produk_idsÚ
produk_mapÚprÚprodÚitem_snapshotsrD  rÚ   rí   Úspbu_headerÚexceed_linesÚsnapr
  r  ÚlossesÚ
abs_lossesÚ
losses_pctr=  r“   Ú
items_textr?   s                                  r   r4  r4  ò  s·  è ø€ ÷ AÝ)ä ×"Ô" bØ—z‘zÜ�:Óß‰U�:—=‘= MÑ1°:×3EÑ3EÈÑ3PÓQß‰WÜ˜Z×-Ñ-Ó.×;Ñ;¸N×<QÑ<QÓRóó
÷ 
ˆð ×%Ñ%Ó'ˆÙØ÷ #×"Ð"ô    GÓ,×,ˆð
 Ÿšó
á�Ø�{Š{˜tŸ{™{×4Ò4ð �K‰K×!Ó!Øð 	ð 
ð
 )+ˆ
ÙØ—z‘z¤&¨£.×"6Ñ"6°v·y±y·}±}ÀZÓ7PÓ"QÓR×RˆBØŸ
™
›×(Ñ(Ö*�Ø&*�
˜4Ÿ7™7Ò#ð +ð ˆØ—G”GˆDØ—[‘[ˆFÙ ×!1Ò!1ØØ—^‘^ F×$4Ñ$4Ó5ˆFØ×!Ñ!Ø#'×#7Ñ#7Ø#'×#7Ñ#7Ø$*×$4Ñ$4Ø%Ÿ{™{Ù.4˜vŸ{š{¸#Ü$¤SÑSY¨×)OÒ)OÐ_fÓ%gÓhñ#õ ð ð —~‘~ˆÜ" 4Ó(ˆ÷U #×"ðZ €LÛˆØÐ0Ñ1ˆØÐ0Ñ1ˆØÐ" oÐ&=ÀÐTUÒAUØØ  ?Ñ2ˆØ�QŠ;ØÜ˜“[ˆ
Ø  ?Ñ2°cÑ9ˆ
Ø˜Ñ%ˆ	Ø˜Ò"Øà×ÑØ�D˜Ñ'Ð(¨¨d°=Ñ.AÐ-Bð CÜ˜Ó/Ð0°¼hÀÓ>WÐ=Xð YÜ# JÓ/Ð0°´E¸*ÀaÓ4HÐ3IÐIYÐZcÐYdÐdeðgõ	
ð ñ( Øá(4”$�|Ô$¸%€KØ—‘˜\Ó*€JðØˆ}˜DØˆ,ð Øˆ}ð Ü˜ ] OÐ4Ó5Ð6ð		8ð 	ô �S×,Ñ,¨c×.FÑ.FÈÓ
M×MÑMð_ #ùð
ùð #ùð -ûò
ð Sùð+ #ù×"×"Ò"úð^ Nús´   ‚N>ŸN N>£BN&Â&NÂ'N&Â>N>Ã	NÃ
N>ÃN&ÃNÃN&Ã1?NÄ0AN&Å;N Å<DN&Ê N>ÊN#ÊC=N>Î	N<Î
N>ÎN&ÎN>ÎN&ÎN&Î#N>Î&N9Î,N/Î-N9Î4	N>c              ƒ  ó:  K  — t         j                  rt         j                  sy 	 t        | «      ƒ d {  –—† }|r|j                  r|j
                  sy t        || |d¬«      ƒ d {  –—†  y 7 Œ77 Œ# t        $ r }t        j                  d|«       Y d }~y d }~ww xY w­w)Nrš   r›   z)telegram notify_stock_submitted error: %s©
r   r   rž   rz   rŸ   Úthread_stock_idÚ_do_notify_stockr4   r5   r¢   ©ru   Úadj_idr¥   r:   s       r   Únotify_stock_submittedr_  L  s†   è ø€ Ü×&Ò&¬h×.DÒ.DØðEÜ Ó(×(ˆÙ˜#×1Ò1¸×9LÒ9LØÜ˜s G¨V¸;ÔG×GÑGð )øð 	HùÜò EÜ�‰Ð@À!×DÑDûðEür§   c              ƒ  ó:  K  — t         j                  rt         j                  sy 	 t        | «      ƒ d {  –—† }|r|j                  r|j
                  sy t        || |d¬«      ƒ d {  –—†  y 7 Œ77 Œ# t        $ r }t        j                  d|«       Y d }~y d }~ww xY w­w)Nr©   r›   z(telegram notify_stock_approved error: %srZ  r]  s       r   Únotify_stock_approvedra  X  s†   è ø€ Ü×&Ò&¬h×.DÒ.DØðDÜ Ó(×(ˆÙ˜#×1Ò1¸×9LÒ9LØÜ˜s G¨V¸:ÔF×FÑFð )øð 	GùÜò DÜ�‰Ð?À×CÑCûðDür§   c              ƒ  óÌ  ‡K  — ddl m}m}m} ddlm} t        «       4 ƒd {  –—† }|j                  t        |«      j                  |j                  |k(  |j                  |k(  «      j                  t        |j                  «      t        |j                  «      t        |j                   «      t        |j"                  «      t        |j$                  «      j                  |j&                  «      j                  |j(                  «      t        |j$                  «      j                  |j*                  «      «      «      ƒ d {  –—† }	|	j-                  «       }
|
s	 d d d «      ƒd {  –—†  y d d d «      ƒd {  –—†  t/        
j                  «      }|
j                  r|
j                  j0                  nd}|
j2                  r|
j2                  j5                  d«      nd}dd„Šdj7                  ˆfd„|
j$                  D «       «      }|d	k(  rý|
j                   r|
j                   j8                  nd}d
|› d|› d|› d|› d|› dt;        |
j<                  «      › dt?        d|› �«      › �}tA        | jB                  | jD                  |«      ƒ d {  –—†  |
j$                  D ��cg c]  }|j*                  D ]  }|jF                  ‘Œ Œ! }}}tI        |«      }|r6d|› d|› d|› �}tK        | jB                  | jD                  ||«      ƒ d {  –—†  y y |dk(  r«|
j"                  r|
j"                  j8                  nd}|
j                   r|
j                   j8                  nd}d|› d|› d|› d|› d|› d|› dt;        |
jL                  «      › dt?        d|› �«      › �}tA        | jB                  | jD                  |«      ƒ d {  –—†  y y 7 �Œ“7 �Œy7 �ŒY7 �ŒK# 1 ƒd {  –—†7  sw Y   �Œ\xY w7 �ŒRc c}}w 7 Œâ7 Œ3­w)Nr   )ÚStockAdjustmentÚStockAdjustmentItemÚStockAdjustmentItemFoto)ÚTangkir(   r®   c           	     óˆ  — | j                   r| j                   j                  nd}| j                   r6| j                   j                  r | j                   j                  j                  nd}|r|› d|› �n|}| j                  xs | j                  }|�t        |«      › d�nd}d|d›d|d	›dt        | j                  xs d
«      › �S )NrÅ   r‚   z - z mmu   â€” mmr  z<22rÐ   z<10r   )rD  r¶   rÚ   Údipstick_manual_mmÚdipstick_digital_mmr   r&   Úvolume_final_liter)r  r;  r<  ÚlabelÚdipstickÚ
height_strs         r   Ú
_item_linez$_do_notify_stock.<locals>._item_line  s´   € Ø*.¯+ª+�d—k‘k×&Ò&¸3ˆØ26·+²+À$Ç+Á+×BTÒBT�t—{‘{×)Ñ)×.Ò.ÐZ\ˆÙ4?�;�-˜s ; -Ñ0À[ˆØ×*Ñ*ÒF¨d×.FÑ.FˆØ.6Ð.Bœ˜H›� cÑ*Èˆ
Ø�u˜S�k  :¨cÐ"2°!´H¸T×=TÑ=TÒ=YÐXYÓ4ZÐ3[Ð\Ð\r   r�   c              3  ó.   •K  — | ]  } ‰|«      –— Œ y ­wr  rÃ   )rÈ   r  rn  s     €r   rÊ   z#_do_notify_stock.<locals>.<genexpr>‡  s   øè ø€ ÐB¹	°™: d×+¹	ùr  rš   u&   ðŸ“Š <b>Sounding Stok Masuk</b>

ðŸ�ª rŽ   r°   u   
ðŸ‘¤ Operator: u¡   

â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
<b>VOLUME PER TANGKI</b>
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
uR   
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€

ðŸ•� Submit: r±   ú/stock/u   ðŸ“¸ <b>Foto Sounding</b> â€” r©   u)   âœ… <b>Sounding Stok Disetujui</b>

ðŸ�ª r"  uV   
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€

ðŸ‘¤ Operator  : rÔ   rÕ   )r  rd  r$  rX   )'r³   rc  rd  re  rŠ   rf  r   rs   r   rt   r‹   ru   r´   r   r…   rµ   rÖ   r×   rá   rD  rÚ   r&  rx   r‡   r¶   r·   r+   rà   r€   r-   rí   r}   rO   rŸ   r[  rp   rq   rj   rï   )r¥   ru   r^  rœ   rc  rd  re  rf  ry   ro   Úadjr’   rº   r“   r+  rö   r?   r  r÷   Ú	foto_urlsrø   rQ   rù   rn  s                          @r   r\  r\  d  sŸ  øè ø€ ÷ eÑdÝ&ä ×"Ô" bØ—z‘zÜ�?Ó#ß‰U�?×%Ñ%¨Ñ/°×1HÑ1HÈGÑ1SÓTß‰WÜ˜_×1Ñ1Ó2Ü˜_×2Ñ2Ó3Ü˜_×9Ñ9Ó:Ü˜_×8Ñ8Ó9Ü˜_×2Ñ2Ó3×@Ñ@ÐAT×A[ÑA[Ó\×iÑiÐjp×jwÑjwÓxÜ˜_×2Ñ2Ó3×@Ñ@ÐAT×AZÑAZÓ[óó
÷ 
ˆð ×'Ñ'Ó)ˆÙØ÷ #×"×"×"Ð"ô" ˜CŸH™HÓ%€HØ#&§9¢9�—‘—’°%€JØ69·k²k�#—+‘+×&Ñ& zÔ2Àu€Kó]ð —‘ÓB¸¿	º	ÓBÓB€Jà�ÒØ14×1AÒ1A˜×(Ñ(×-Ò-ÀuˆðØ�:ð Ø�=  Z Lð 1Ø+˜_ð -Sð ˆlð ä  ×!1Ñ!1Ó2Ð3ð 4Ü˜G F 8Ð,Ó-Ð.ð
0ð 	ô ˜×0Ñ0°#×2EÑ2EÀtÓL×LÐLà'*§y¢yÔE¡y˜t¸$¿*¼*°Q�Q—U“U¸*�U yˆ	ÑEÜ  Ó+ˆÙØ6°x°jÀÀ:À,ÈdÐS^ÐR_Ð`ˆGÜ# C×$;Ñ$;¸S×=PÑ=PÐRYÐ[aÓb×bÑbð ð 
�*Ò	Ø03·²˜Ÿ™×,Ò,ÀUˆØ14×1AÒ1A˜×(Ñ(×-Ò-ÀuˆðØ�:ð Ø�=  Z Lð 1Sàˆlð  à -˜ð /"Ø"/ ð 1 Ü $ S§_¡_Ó 5Ð6ð 7Ü˜G F 8Ð,Ó-Ð.ð	0ð 	ô ˜×0Ñ0°#×2EÑ2EÀtÓL×LÑLð 
ðm #ùð
ùð #ùÐ"ù×"×"Ò"úð\ 	MûãEð cøð" 	Mús¨   ƒO$¢N5£O$¦DOÄ?N8Å OÅO$Å"N;Å#O$Å3N>Å4DO$ÊOÊO$Ê$OÊ=A O$Ë=O Ë>B0O$Î.O"Î/O$Î8OÎ;O$Î>O$ÏOÏO
ÏOÏ	O$ÏO$Ï"O$c           
   ƒ  óò  K  — t         j                  rt         j                  sy 	 t        | «      ƒ d {  –—† }|r|j                  r|j
                  sy ddlm} t        «       4 ƒd {  –—† }|j                  t        |«      j                  |j                  |k(  |j                  | k(  «      j                  t        |j                   «      t        |j"                  «      t        |j$                  «      «      «      ƒ d {  –—† }|j'                  «       }|s	 d d d «      ƒd {  –—†  y d d d «      ƒd {  –—†  j"                  r|j"                  j(                  nd}|j*                  r|j*                  j-                  d«      nd}t/        ddt1        |j                   «      |› d|› �d|j$                  r|j$                  j2                  nd|j4                  xs d|j6                  «      }	|	d	t9        d
|› �«      › �z  }	t;        |j                  |j
                  |	«      ƒ d {  –—†  y 7 �Œò7 �ŒÁ7 �Œ.7 �Œ7 Œÿ# 1 ƒd {  –—†7  sw Y   �ŒxY w7 Œ)# t<        $ r }
t>        jA                  d|
«       Y d }
~
y d }
~
ww xY w­w)Nr   )rc  r(   r®   r¯   zSounding Stokr°   r‚   r±   rp  z(telegram notify_stock_unlocked error: %s)!r   r   rž   rz   rŸ   r[  r³   rc  r   rs   r   rt   r‹   ru   r´   r   r…   rµ   r•   rx   r¶   r·   r+   r˜   r‡   r€   r¸   r—   r}   rO   r4   r5   r¢   )ru   r^  r¥   rc  ry   ro   rq  rº   r“   r?   r:   s              r   Únotify_stock_unlockedrt  ²  sý  è ø€ Ü×&Ò&¬h×.DÒ.DØðDÜ Ó(×(ˆÙ˜#×1Ò1¸×9LÒ9LØÝ:Ü$×&Ô&¨"ØŸ:™:Ü�Ó'ß‘�×)Ñ)¨VÑ3°_×5LÑ5LÐPWÑ5WÓXß‘œ o×&:Ñ&:Ó;¼\È/×J_ÑJ_Ó=`Ü% o×&AÑ&AÓBóDó÷ ˆFð ×+Ñ+Ó-ˆCÙØ÷ '×&×&×&Ð&ð (+§y¢y�S—Y‘Y—^’^°eˆ
Ø:=¿+º+�c—k‘k×*Ñ*¨:Ô6È5ˆÜØ�O¤\°#·(±(Ó%;Øˆm˜4 
˜|Ð,¨bØ$'§O¢OˆC�O‰O× Ò ¸Ø×ÑÒ& Ø�O‰Oó
ˆð 	�'œ% '¨&¨Ð 2Ó3Ð4Ð5Ñ5ˆÜ˜×0Ñ0°#×2EÑ2EÀtÓL×LÑLð1 )ùð 'ùðùð 'ùÐ&ø×&×&Ò&úð( 	MùÜò DÜ�‰Ð?À×CÑCûðDür¼   c              ƒ  óB  K  — t         j                  rt         j                  sy	 t        | «      ƒ d{  –—† }|r|j                  r|j
                  syddlm}m} t        «       4 ƒd{  –—† }|j                  t        |«      j                  |j                  |k(  |j                  | k(  «      j                  t!        |j"                  «      t!        |j$                  «      j!                  |j&                  «      «      «      ƒ d{  –—† }|j)                  «       }|s	 ddd«      ƒd{  –—†  yddd«      ƒd{  –—†  t+        j"                  «      }|j,                  r|j,                  j/                  d«      nd}	dj1                  d„ |j$                  D «       «      }
t3        d„ |j$                  D «       «      }|j4                  rd	|j4                  › �nd
}d|› d|	› d|j6                  › d|› d|
› dt9        |«      › dt;        |j<                  «      › dt?        d|› �«      › �}tA        |j                  |j
                  |«      ƒ d{  –—†  y7 �Œ7 �Œæ7 �ŒN7 �Œ.7 �Œ # 1 ƒd{  –—†7  sw Y   �Œ1xY w7 Œ*# tB        $ r }tD        jG                  d|«       Y d}~yd}~ww xY w­w)u(   Fire when penebusan DRAFT â†’ SUBMITTED.Nr   )Ú	PenebusanÚPenebusanItemr®   r(   r�   c              3  ó˜   K  — | ]B  }d |j                   r|j                   j                  ndd›dt        |j                  «      › �–— ŒD y­w)rÎ   rÅ   rÏ   rÐ   N)rÚ   r¶   r&   Úvolume_pesanr  s     r   rÊ   z-notify_penebusan_submitted.<locals>.<genexpr>ê  sF   è ø€ ð 
á!�ð  t§{¢{�4—;‘;×#Ò#¸¸CÐ@ÀÄ(È4×K\ÑK\ÓB]ÐA^Ô_Ù!ùs   ‚AA
c              3  ó4   K  — | ]  }|j                   –— Œ y ­wr  ©ry  r  s     r   rÊ   z-notify_penebusan_submitted.<locals>.<genexpr>î  s   è ø€ Ð@±i¨d˜×)Õ)±iùr  u   ðŸ“„ No. SO: u   ðŸ“„ No. SO: (belum ada)u)   ðŸ“¤ <b>Penebusan BBM Disubmit</b>

ðŸ�ª rŽ   õ   
ðŸ”– Booking: r"  r  u   
ðŸ’µ Total Nilai: r±   ú/penebusan/z-telegram notify_penebusan_submitted error: %s)$r   r   rž   rz   Úchat_finansial_idÚthread_penebusan_idÚapp.models.penebusanrv  rw  r   rs   r   rt   r‹   ru   r´   r   r…   rá   rÚ   rx   r‡   r·   r+   rà   rÞ   Úno_soÚbooking_coder&   r"   Útotalr}   rO   r4   r5   r¢   )ru   Úpenebusan_idr¥   rv  rw  ry   ro   Úpnbr’   r“   r+  Ú	total_volÚ
no_so_liner?   r:   s                  r   Únotify_penebusan_submittedrˆ  Ö  sI  è ø€ ä×&Ò&¬h×.DÒ.DØð%IÜ Ó(×(ˆÙ˜#×/Ò/°s×7NÒ7NØßAÜ$×&Ô&¨"ØŸ:™:Ü�yÓ!ß‘�y—|‘| |Ñ3°Y×5FÑ5FÈ'Ñ5QÓRß‘œ i§n¡nÓ5´|ÀIÇOÁOÓ7T×7aÑ7aÐbo×bvÑbvÓ7wÓxó÷ ˆFð
 ×+Ñ+Ó-ˆCÙØ÷ '×&×&×&Ð&ô   §¡Ó)ˆØ:=¿+º+�c—k‘k×*Ñ*¨:Ô6È5ˆØ—Y‘Yñ 
àŸ	š	ó
ó 
ˆ
ô Ñ@°c·i²iÓ@Ó@ˆ	Ø47·I²I�} S§Y¡Y KÑ0ÐC]ˆ
ðØ�:ð Ø�=ð !Ø ×-Ñ-Ð.¨bØˆlð Sàˆlð ä# IÓ.Ð/ð 0!Ü!(¨¯©Ó!3Ð 4ð 5Ü˜K¨ ~Ð6Ó7Ð8ð
:ð 	ô ˜×.Ñ.°×0GÑ0GÈÓN×NÑNðE )ùð 'ùðùð 'ùÐ&ù×&×&Ò&úð< 	OùÜò IÜ�‰ÐDÀa×HÑHûðIüsÐ   ‚"J¥I3 ³I´I3 ÁJÁI3 Á)IÁ*I3 Á-BIÄIÄIÄI3 Ä'IÄ(I3 Ä,JÄ-I3 Ä8IÄ9DI3 ÉI1ÉI3 ÉJÉI3 ÉI3 ÉIÉI3 ÉI3 ÉI.É!I$É"I.É)	I3 É3	JÉ<JÊJÊJÊJc              ƒ  ó~  K  — t         j                  rt         j                  sy	 t        | «      ƒ d{  –—† }|r|j                  r|j
                  syddlm}m}m	} ddl
m} t        «       4 ƒd{  –—† }|j                  t        |«      j                  |j                   |k(  «      j#                  t%        |j&                  «      j%                  |j(                  «      t%        |j&                  «      j%                  |j*                  «      j%                  |j,                  «      t%        |j*                  «      «      «      ƒ d{  –—† }|j/                  «       }	|	s	 ddd«      ƒd{  –—†  y|	j&                  }
|
s	 ddd«      ƒd{  –—†  y|
j0                  |j2                  k(  r	 ddd«      ƒd{  –—†  yddd«      ƒd{  –—†  t5        
j(                  «      }|
j6                  r|
j6                  j9                  d«      nd}t;        d„ |
j*                  D «       «      }t;        d„ |
j*                  D «       «      }d	j=                  d
„ |
j*                  D «       «      }d|› d|› d|
j>                  › d|
j@                  xs d› d|› dtC        |«      › dtC        |«      › dtE        d|
j                   › �«      › �}tG        |j                  |j
                  |«      ƒ d{  –—†  y7 �Œ±7 �Œv7 �Œ¦7 �Œ†7 �Œi7 �ŒA7 �Œ3# 1 ƒd{  –—†7  sw Y   �ŒDxY w7 Œ0# tH        $ r }tJ        jM                  d|«       Y d}~yd}~ww xY w­w)um   Fire on every penerimaan submit â€” shows cumulative progress. Skip if FULLY_RECEIVED (handled by completed).Nr   ©rv  rw  ÚStatusPenebusanr1  r®   r(   c              3  ó4   K  — | ]  }|j                   –— Œ y ­wr  r{  r  s     r   rÊ   z4notify_penebusan_partial_received.<locals>.<genexpr>  s   è ø€ ÐB¹	°˜$×+Õ+¹	ùr  c              3  ó4   K  — | ]  }|j                   –— Œ y ­wr  r	  r  s     r   rÊ   z4notify_penebusan_partial_received.<locals>.<genexpr>   s   è ø€ ÐH¹i°d˜T×1Õ1¹iùr  r�   c           	   3  óÆ   K  — | ]Y  }d |j                   r|j                   j                  ndd›dt        |j                  «      d›dt        |j                  «      › �–— Œ[ y­w)rÎ   rÅ   rÏ   z terima r  z	 / pesan N)rÚ   r¶   r&   r
  ry  r  s     r   rÊ   z4notify_penebusan_partial_received.<locals>.<genexpr>!  sd   è ø€ ð 
ñ "�ð  t§{¢{�4—;‘;×#Ò#¸¸CÐ@ð AÜ˜t×3Ñ3Ó4°SÐ9¸Ä8ÈD×L]ÑL]ÓC^ÐB_ôaá!ùs   ‚AA!r  rŽ   r|  u   
ðŸ“„ No. SO: r"  uY   
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
ðŸ“¦ Total diterima: z / r±   r}  z4telegram notify_penebusan_partial_received error: %s)'r   r   rž   rz   r~  r  r€  rv  rw  r‹  r%  r  r   rs   r   rt   r‹   r´   r   Ú	penebusanr…   rá   rÚ   rx   ÚstatusÚFULLY_RECEIVEDr‡   r·   r+   rÞ   rà   r‚  r�  r&   r}   rO   r4   r5   r¢   )ru   rÿ   r¥   rv  rw  r‹  r  ry   rO  Ú
penerimaanr…  r’   r“   Útotal_pesanr*  r+  r?   r:   s                     r   Ú!notify_penebusan_partial_receivedr”    sÅ  è ø€ ä×&Ò&¬h×.DÒ.DØð.PÜ Ó(×(ˆÙ˜#×/Ò/°s×7NÒ7NØßRÑRÝ4Ü$×&Ô&¨"Ø—z‘zÜ�zÓ"×(Ñ(¨¯©¸-Ñ)GÓHß‘Ü  ×!5Ñ!5Ó6×CÑCÀIÇNÁNÓSÜ  ×!5Ñ!5Ó6×CÑCÀIÇOÁOÓT×aÑaÐbo×bvÑbvÓwÜ  ×!1Ñ!1Ó2óó÷ ˆBð ×.Ñ.Ó0ˆJÙØ÷ '×&Ð&ð ×&Ñ&ˆCÙØ÷ '×&Ð&ð �z‰z˜_×;Ñ;Ò;Ø÷! '×&×&×&Ð&ô"   §¡Ó)ˆØ:=¿+º+�c—k‘k×*Ñ*¨:Ô6È5ˆÜÑB¸¿	º	ÓBÓBˆÜÑH¸c¿iºiÓHÓHˆØ—Y‘Yñ 
ð Ÿ	š	ó
ó 
ˆ
ðØ�:ð Ø�=ð !Ø ×-Ñ-Ð.ð /ØŸI™IÒ.¨Ð/ð 0Sàˆlð $ä$,¨^Ó$<Ð#=¸SÄÈ+ÓAVÐ@Wð XÜ˜K¨¯© xÐ0Ó1Ð2ð	4ð 	ô ˜×.Ñ.°×0GÑ0GÈÓN×NÑNðW )ùð
 'ùðùð 'ùÐ&ùÐ&ùÐ&ù×&×&Ò&úðL 	OùÜò PÜ�‰ÐKÈQ×OÑOûðPüs  ‚"L=¥L ³K$´L ÁL=ÁL Á1K'Á2L Á5CK9ÅK*ÅK9ÅL Å'K-Å(L Å,L=Å-K9Å<L ÆK0ÆL ÆL=ÆK9Æ'L Æ2K3Æ3L Æ7L=Æ8L ÇK6ÇDL ËLËL Ë#L=Ë$L Ë'L Ë*K9Ë-L Ë0L Ë3L Ë6L Ë9LË?LÌ LÌ	L Ì	L:ÌL5Ì0L=Ì5L:Ì:L=c              ƒ  óŒ  K  — t         j                  rt         j                  sy	 t        | «      ƒ d{  –—† }|r|j                  r|j
                  syddlm}m}m	} ddl
m} t        «       4 ƒd{  –—† }|j                  t        |«      j                  |j                   |k(  «      j#                  t%        |j&                  «      j%                  |j(                  «      t%        |j&                  «      j%                  |j*                  «      j%                  |j,                  «      «      «      ƒ d{  –—† }|j/                  «       }	|	s	 ddd«      ƒd{  –—†  y|	j&                  }
|
r|
j0                  |j2                  k7  r	 ddd«      ƒd{  –—†  yddd«      ƒd{  –—†  t5        
j(                  «      }|
j6                  r|
j6                  j9                  d«      nd}t;        d„ |
j*                  D «       «      }d|› d	|› d
|
j<                  › d|
j>                  xs d› dtA        |«      › dtC        d|
j                   › �«      › �}tE        |j                  |j
                  |«      ƒ d{  –—†  y7 �Œ>7 �Œ7 �ŒG7 �Œ'7 Œð7 Œá# 1 ƒd{  –—†7  sw Y   ŒñxY w7 Œ*# tF        $ r }tH        jK                  d|«       Y d}~yd}~ww xY w­w)u�   Fire when all volumes received â€” penebusan status becomes FULLY_RECEIVED.
    Called from penerimaan submit; checks internally before sending.Nr   rŠ  r1  r®   r(   c              3  ó4   K  — | ]  }|j                   –— Œ y ­wr  r	  r  s     r   rÊ   z-notify_penebusan_completed.<locals>.<genexpr>P  s   è ø€ ÐC¹°˜×,Õ,¹ùr  u7   ðŸŽ‰ <b>DO Selesai â€” Semua Volume Diterima</b>

ðŸ�ª rŽ   u   
ðŸ”– Booking : u   
ðŸ“„ No. SO  : u   
ðŸ“¦ Total   : u'   

âœ… Semua volume sudah diterima
ðŸ”— r}  z-telegram notify_penebusan_completed error: %s)&r   r   rž   rz   r~  r  r€  rv  rw  r‹  r%  r  r   rs   r   rt   r‹   r´   r   r�  r…   rá   rÚ   rx   r�  r‘  r‡   r·   r+   rÞ   r‚  r�  r&   r}   rO   r4   r5   r¢   )ru   rÿ   r¥   rv  rw  r‹  r  ry   rO  r’  r…  r’   r“   r†  r?   r:   s                   r   Únotify_penebusan_completedr—  7  sU  è ø€ ô ×&Ò&¬h×.DÒ.DØð!IÜ Ó(×(ˆÙ˜#×/Ò/°s×7NÒ7NØßRÑRÝ4Ü$×&Ô&¨"Ø—z‘zÜ�zÓ"×(Ñ(¨¯©¸-Ñ)GÓHß‘œ j×&:Ñ&:Ó;×HÑHÈÏÉÓXÜ% j×&:Ñ&:Ó;×HÑHÈÏÉÓY×fÑfÐgt×g{Ñg{Ó|ó~ó÷ ˆBð
 ×.Ñ.Ó0ˆJÙØ÷ '×&Ð&ð ×&Ñ&ˆCÙ˜#Ÿ*™*¨×(FÑ(FÒFØ÷ '×&×&×&Ð&ô   §¡Ó)ˆØ:=¿+º+�c—k‘k×*Ñ*¨:Ô6È5ˆÜÑC¸¿ºÓCÓCˆ	ðØ�:ð Ø�=ð !Ø!×.Ñ.Ð/ð 0Ø!Ÿi™iÒ0¨5Ð1ð 2Ü& yÓ1Ð2ð 3ä˜K¨¯© xÐ0Ó1Ð2ð4ð 	ô ˜×.Ñ.°×0GÑ0GÈÓN×NÑNð= )ùð
 'ùðùð 'ùÐ&øÐ&ø×&×&Ñ&úð2 	OùÜò IÜ�‰ÐDÀa×HÑHûðIüsô   ‚"K¥J ³I1´J ÁKÁJ Á1I4Á2J Á5B;JÄ0I7Ä1JÅJ ÅI:ÅJ ÅKÅ(JÆJ ÆI=ÆJ ÆKÆJ ÆI?ÆCJ É+JÉ,J É0KÉ1J É4J É7JÉ:J É=J É?J ÊJÊJ
ÊJÊJ Ê	KÊ!J<Ê7KÊ<KËKc              ƒ  ó:  K  — t         j                  rt         j                  sy 	 t        | «      ƒ d {  –—† }|r|j                  r|j
                  sy t        || |d¬«      ƒ d {  –—†  y 7 Œ77 Œ# t        $ r }t        j                  d|«       Y d }~y d }~ww xY w­w)Nrš   r›   z.telegram notify_penyetoran_submitted error: %s©
r   r   rž   rz   r~  Úthread_penyetoran_idÚ_do_notify_penyetoranr4   r5   r¢   ©ru   Úbatch_idr¥   r:   s       r   Únotify_penyetoran_submittedrž  b  s†   è ø€ Ü×&Ò&¬h×.DÒ.DØðJÜ Ó(×(ˆÙ˜#×/Ò/°s×7OÒ7OØÜ# C¨°(À+ÔN×NÑNð )øð 	OùÜò JÜ�‰ÐEÀq×IÑIûðJür§   c              ƒ  ó:  K  — t         j                  rt         j                  sy 	 t        | «      ƒ d {  –—† }|r|j                  r|j
                  sy t        || |d¬«      ƒ d {  –—†  y 7 Œ77 Œ# t        $ r }t        j                  d|«       Y d }~y d }~ww xY w­w)Nr©   r›   z-telegram notify_penyetoran_approved error: %sr™  rœ  s       r   Únotify_penyetoran_approvedr   n  s†   è ø€ Ü×&Ò&¬h×.DÒ.DØðIÜ Ó(×(ˆÙ˜#×/Ò/°s×7OÒ7OØÜ# C¨°(À*ÔM×MÑMð )øð 	NùÜò IÜ�‰ÐDÀa×HÑHûðIür§   c              ƒ  óÄ  ‡K  — ddl m}m} ddlm} ddlm} t        «       4 ƒd {  –—† }|j                  t        |«      j                  |j                  |k(  |j                  |k(  «      j                  t        |j                  «      t        |j                   «      t        |j"                  «      t        |j$                  «      j                  |j&                  «      j                  |j(                  «      «      «      ƒ d {  –—† }	|	j+                  «       }
|
s	 d d d «      ƒd {  –—†  y d d d «      ƒd {  –—†  t-        
j                  «      }|
j.                  r|
j.                  j1                  d«      nd}|
j2                  r|
j2                  j1                  d«      nd}|› d|› �}dd	„Šd
j5                  ˆfd„t7        |
j$                  d„ ¬«      D «       «      }|dk(  r—|
j                   r|
j                   j8                  nd}d|› d|› d|› d|› dt;        |
j<                  «      › dt?        |
j@                  «      › dtC        d|› �«      › �}tE        | jF                  | jH                  |«      ƒ d {  –—†  y |dk(  r»|
j"                  r|
j"                  j8                  nd}|
j                   r|
j                   j8                  nd}d|› d|› dt;        |
j<                  «      › d|› d|› dt?        |
jJ                  «      › dtC        d|› �«      › �}tE        | jF                  | jH                  |«      ƒ d {  –—†  y y 7 �Œ7 �Œ;7 �Œ7 �Œ# 1 ƒd {  –—†7  sw Y   �ŒxY w7 Œè7 Œ*­w)Nr   )Ú
PenyetoranÚPenyetoranBatchr¬   )ÚShiftú%d %br(   r®   rÒ   c                ó  — | j                   r| j                   j                  d«      nd}| j                  r6| j                  j                  r | j                  j                  j                  nd}d|› d|d›dt        | j                  «      › �S )Nr¥  rÅ   r(   u   ðŸ“… r°   rÏ   rÐ   )r·   r+   Úlaporan_shiftrµ   r¶   r"   Útotal_penjualan)r  Útglrµ   s      r   Ú_setor_linez*_do_notify_penyetoran.<locals>._setor_line—  su   € Ø04·²ˆd�l‰l×#Ñ# GÔ,À#ˆØ15×1CÒ1CÈ×HZÑHZ×H`ÒH`�×"Ñ"×(Ñ(×-Ò-ÐfkˆØ�s�e˜4  c˜{¨!¬G°D×4HÑ4HÓ,IÐ+JÐKÐKr   r�   c              3  ó.   •K  — | ]  } ‰|«      –— Œ y ­wr  rÃ   )rÈ   r  rª  s     €r   rÊ   z(_do_notify_penyetoran.<locals>.<genexpr>œ  s   øè ø€ ð áYˆDñ 	�D×ÙYùr  c                óB   — | j                   xs d| j                  xs dfS )Nr‚   r   )r·   Úshift_id)Úxs    r   rÄ   z'_do_notify_penyetoran.<locals>.<lambda>ž  s   € °q·y±y²ÀBÈÏ
É
ÊÐVWÑ6Xr   )ri   rš   u)   ðŸ’° <b>Batch Penyetoran Masuk</b>

ðŸ�ª u   
ðŸ“… Periode: õ   
ðŸ‘¤ Disubmit: u¢   

â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
<b>DETAIL PER TANGGAL</b>
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
uP   
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
ðŸ’µ Total: rÓ   r±   ú/penyetoran/r©   u&   âœ… <b>Penyetoran Disetujui</b>

ðŸ�ª u   
ðŸ’µ Total: õ   

ðŸ‘¤ Disubmit : õ   
âœ�ï¸� Disetujui: õ   
ðŸ•� Waktu    : )r  r¢  r$  rX   )&Úapp.models.penyetoranr¢  r£  r³   r­   rŠ   r¤  r   rs   r   rt   r‹   ru   r´   r   r…   rÖ   r×   rá   r§  rµ   rx   r‡   Útanggal_fromr+   Ú
tanggal_torà   Úsortedr€   r"   Útotal_amountr-   rí   r}   rO   r~  rš  rï   )r¥   ru   r�  rœ   r¢  r£  r­   r¤  ry   ro   Úbatchr’   Útgl_fromÚtgl_toÚperioder+  Úsubmitter_namer?   rù   rª  s                      @r   r›  r›  z  s9  øè ø€ ÷ BÝ3Ý%ä ×"Ô" bØ—z‘zÜ�?Ó#ß‰U�?×%Ñ%¨Ñ1°?×3JÑ3JÈgÑ3UÓVß‰WÜ˜_×1Ñ1Ó2Ü˜_×9Ñ9Ó:Ü˜_×8Ñ8Ó9Ü˜_×2Ñ2Ó3ß!‘\ *×":Ñ":Ó;ß!‘\ ,×"4Ñ"4Ó5óó
÷ 
ˆð ×)Ñ)Ó+ˆÙØ÷ #×"×"×"Ð"ô" ˜EŸJ™JÓ'€HØ7<×7IÒ7Iˆu×!Ñ!×*Ñ*¨7Ô3Èu€HØ6;×6FÒ6FˆU×Ñ×&Ñ& zÔ2ÈE€FØ�
˜% ˜xÐ(€GóLð
 —‘ó ä˜5Ÿ;™;Ñ,XÕYóó €Jð
 �ÒØ49×4FÒ4F˜×+Ñ+×0Ò0ÈEˆðØ�:ð Ø$˜Ið &Ø,Ð-ð .Sð ˆlð ä" 5×#5Ñ#5Ó6Ð7ð 8Ü  ×!3Ñ!3Ó4Ð5ð 6Ü˜L¨¨
Ð3Ó4Ð5ð7ð 	ô ˜×.Ñ.°×0HÑ0HÈ$ÓO×OÑOà	�*Ò	Ø27×2CÒ2C˜×)Ñ)×.Ò.ÈˆØ49×4FÒ4F˜×+Ñ+×0Ò0ÈEˆðØ�:ð Ø$˜Ið &Ü" 5×#5Ñ#5Ó6Ð7ð 8Ø-Ð.ð /!Ø!. ð 0Ü# E×$5Ñ$5Ó6Ð7ð 8Ü˜L¨¨
Ð3Ó4Ð5ð7ð 	ô ˜×.Ñ.°×0HÑ0HÈ$ÓO×OÑOð 
ðe #ùð
ùð #ùÐ"ù×"×"Ò"úð` 	Pøð 	Pús‰   ƒ#M ¦L:§M ªCMÄL=ÄMÄM Ä%M Ä&M Ä6MÄ7D<M É3MÉ4B?M Ì3MÌ4M Ì=MÍ M ÍM ÍMÍMÍMÍ	M ÍM c           
   ƒ  ó  K  — t         j                  rt         j                  sy 	 t        | «      ƒ d {  –—† }|r|j                  r|j
                  sy ddlm} t        «       4 ƒd {  –—† }|j                  t        |«      j                  |j                  |k(  |j                  | k(  «      j                  t        |j                   «      t        |j"                  «      «      «      ƒ d {  –—† }|j%                  «       }|s	 d d d «      ƒd {  –—†  y d d d «      ƒd {  –—†  j&                  r|j&                  j)                  d«      nd}|j*                  r|j*                  j)                  d«      nd}t-        ddt/        |j                   «      |› d|› �d	t1        |j2                  «      › d
�|j"                  r|j"                  j4                  nd|j6                  xs d|j8                  «      }	|	dt;        d|› �«      › �z  }	t=        |j                  |j
                  |	«      ƒ d {  –—†  y 7 �Œú7 �ŒÉ7 �ŒJ7 �Œ*7 �Œ# 1 ƒd {  –—†7  sw Y   �Œ-xY w7 Œ*# t>        $ r }
t@        jC                  d|
«       Y d }
~
y d }
~
ww xY w­w)Nr   )r£  r¥  r(   r®   r¯   zBatch PenyetoranrÒ   u   ðŸ’µ Total: r�   r±   r°  z-telegram notify_penyetoran_unlocked error: %s)"r   r   rž   rz   r~  rš  r´  r£  r   rs   r   rt   r‹   ru   r´   r   r…   r•   rx   rµ  r+   r¶  r˜   r‡   r"   r¸  r€   r¸   r—   r}   rO   r4   r5   r¢   )ru   r�  r¥   r£  ry   ro   r¹  rº  r»  r?   r:   s              r   Únotify_penyetoran_unlockedr¿  Ã  s  è ø€ Ü×&Ò&¬h×.DÒ.DØðIÜ Ó(×(ˆÙ˜#×/Ò/°s×7OÒ7OØÝ9Ü$×&Ô&¨"ØŸ:™:Ü�Ó'ß‘�×)Ñ)¨XÑ5°×7NÑ7NÐRYÑ7YÓZß‘œ o×&:Ñ&:Ó;¼\È/×JeÑJeÓ=fÓgó÷ ˆFð
 ×-Ñ-Ó/ˆEÙØ÷ '×&×&×&Ð&ð <A×;MÒ;M�5×%Ñ%×.Ñ.¨wÔ7ÐSXˆØ:?×:JÒ:J�×!Ñ!×*Ñ*¨:Ô6ÐPUˆÜØÐ&¬°U·Z±ZÓ(@Øˆj˜˜f˜XÐ&Øœ7 5×#5Ñ#5Ó6Ð7°rÐ:Ø&+×&7Ò&7ˆE×Ñ×"Ò"¸UØ×ÑÒ( 5Ø×Ñó
ˆð 	�'œ% ,¨x¨jÐ 9Ó:Ð;Ð<Ñ<ˆÜ˜×.Ñ.°×0HÑ0HÈ$ÓO×OÑOð1 )ùð 'ùðùð 'ùÐ&ù×&×&Ò&úð( 	PùÜò IÜ�‰ÐDÀa×HÑHûðIüsÐ   ‚"J ¥I ³H-´I ÁJ ÁI Á'H0Á(I Á+A>H<Ã)H3Ã*H<ÄI ÄH6ÄI ÄJ ÄI ÄH9ÄD	I È'IÈ(I È,J È-I È0I È3H<È6I È9I È<IÉIÉIÉ
	I É	I=ÉI8É3J É8I=É=J c              ƒ  ó:  K  — t         j                  rt         j                  sy 	 t        | «      ƒ d {  –—† }|r|j                  r|j
                  sy t        || |d¬«      ƒ d {  –—†  y 7 Œ77 Œ# t        $ r }t        j                  d|«       Y d }~y d }~ww xY w­w)Nrš   r›   z+telegram notify_expense_submitted error: %s©
r   r   rž   rz   r~  Úthread_expense_idÚ_do_notify_expenser4   r5   r¢   ©ru   Ú
expense_idr¥   r:   s       r   Únotify_expense_submittedrÆ  æ  s†   è ø€ Ü×&Ò&¬h×.DÒ.DØðGÜ Ó(×(ˆÙ˜#×/Ò/°s×7LÒ7LØÜ   g¨zÀÔM×MÑMð )øð 	NùÜò GÜ�‰ÐBÀA×FÑFûðGür§   c              ƒ  ó:  K  — t         j                  rt         j                  sy 	 t        | «      ƒ d {  –—† }|r|j                  r|j
                  sy t        || |d¬«      ƒ d {  –—†  y 7 Œ77 Œ# t        $ r }t        j                  d|«       Y d }~y d }~ww xY w­w)Nr©   r›   z*telegram notify_expense_approved error: %srÁ  rÄ  s       r   Únotify_expense_approvedrÈ  ò  s†   è ø€ Ü×&Ò&¬h×.DÒ.DØðFÜ Ó(×(ˆÙ˜#×/Ò/°s×7LÒ7LØÜ   g¨zÀÔL×LÑLð )øð 	MùÜò FÜ�‰ÐAÀ1×EÑEûðFür§   c              ƒ  óæ  K  — ddl m} t        «       4 ƒd {  –—† }|j                  t	        |«      j                  |j                  |k(  |j                  |k(  «      j                  t        |j                  «      t        |j                  «      t        |j                  «      «      «      ƒ d {  –—† }|j                  «       }|s	 d d d «      ƒd {  –—†  y t        ||«      ƒ d {  –—† }d d d «      ƒd {  –—†  t        «      }	j                   r|j                   j#                  d«      nd}
|j                  r|j                  j$                  nd}|j&                  xs d}|dk(  rš|j                  r|j                  j(                  nd}d|	› d|
› d|› d	t+        |j,                  «      › d
|› d|› dt/        |j0                  «      › dt3        d|› �«      › �}t5        | j6                  | j8                  |«      ƒ d {  –—†  y |dk(  rÁ|j                  r|j                  j(                  nd}|j                  r|j                  j(                  nd}d|	› d|
› d|› dt+        |j,                  «      › d|› d|› d|› dt/        |j:                  «      › dt3        d|› �«      › �}t5        | j6                  | j8                  |«      ƒ d {  –—†  y y 7 �Œ±7 �Œ7 �Œþ7 �Œì7 �Œß# 1 ƒd {  –—†7  sw Y   �ŒðxY w7 Œñ7 Œ-­w)Nr   )ÚExpenser®   r(   rš   u.   ðŸ§¾ <b>Pengeluaran (Expense) Masuk</b>

ðŸ�ª rŽ   u   
ðŸ�· Kategori: u   
ðŸ’µ Jumlah: u   
ðŸ“� Keterangan: r¯  rÓ   r±   z
/expenses/r©   u#   âœ… <b>Expense Disetujui</b>

ðŸ�ª u   
ðŸ�· z  õ   
ðŸ“� r±  r²  r³  )Úapp.models.expensesrÊ  r   rs   r   rt   r‹   ru   r´   r   ÚkategorirÖ   r×   rx   rŒ   r‡   r·   r+   r¶   Ú
keteranganr€   r"   Újumlahr-   rí   r}   rO   r~  rÂ  rï   )r¥   ru   rÅ  rœ   rÊ  ry   ro   Úexpr…   r’   r“   Úkategori_namarÎ  rö   r?   rù   s                   r   rÃ  rÃ  þ  sà  è ø€ õ ,ä ×"Ô" bØ—z‘zÜ�7‹Oß‰U�7—:‘: Ñ+¨W¯_©_ÀÑ-GÓHß‰WÜ˜W×-Ñ-Ó.Ü˜W×1Ñ1Ó2Ü˜W×0Ñ0Ó1óó
÷ 
ˆð ×'Ñ'Ó)ˆÙØ÷ #×"Ð"ô    GÓ,×,ˆ÷ #×"ô ˜DÓ!€HØ69·k²k�#—+‘+×&Ñ& zÔ2Àu€KØ),¯ª�C—L‘L×%Ò%¸5€MØ—‘Ò( 5€Jà�ÒØ14×1AÒ1A˜×(Ñ(×-Ò-ÀuˆðØ�:ð Ø�=ð !Ø+˜_ð -Ü# C§J¡JÓ/Ð0ð 1 Ø *˜|ð ,Ø+˜_ð -Ü  ×!1Ñ!1Ó2Ð3ð 4Ü˜J z lÐ3Ó4Ð5ð7ð 	ô ˜×.Ñ.°×0EÑ0EÀtÓL×LÑLà	�*Ò	Ø03·²˜Ÿ™×,Ò,ÀUˆØ14×1AÒ1A˜×(Ñ(×-Ò-ÀuˆðØ�:ð Ø�=ð !Ø!�? "¤W¨S¯Z©ZÓ%8Ð$9ð :Ø�<ð  Ø,˜oð .!Ø!. ð 0Ü# C§O¡OÓ4Ð5ð 6Ü˜J z lÐ3Ó4Ð5ð7ð 	ô ˜×.Ñ.°×0EÑ0EÀtÓL×LÑLð 
ðG #ùð
ùð #ùð -ùð #ù×"×"Ò"úðB 	Møð  	Mús§   ‚K1—K˜K1›BKÂ-KÂ.KÃK1ÃKÃK1ÃKÃ%KÃ&KÃ*K1Ã5KÃ6DK1Ç;K-Ç<CK1ËK/ËK1ËKËK1ËKËK1ËK*ËK ËK*Ë%	K1Ë/K1c              ƒ  ó:  K  — t         j                  rt         j                  sy 	 t        | «      ƒ d {  –—† }|r|j                  r|j
                  sy t        || |d¬«      ƒ d {  –—†  y 7 Œ77 Œ# t        $ r }t        j                  d|«       Y d }~y d }~ww xY w­w)Nrš   r›   z&telegram notify_pb_submitted error: %s©
r   r   rž   rz   r~  Úthread_pb_idÚ_do_notify_pbr4   r5   r¢   ©ru   Úpb_idr¥   r:   s       r   Únotify_pb_submittedrØ  9  s†   è ø€ Ü×&Ò&¬h×.DÒ.DØðBÜ Ó(×(ˆÙ˜#×/Ò/°s×7GÒ7GØÜ˜C ¨%°{ÔC×CÑCð )øð 	DùÜò BÜ�‰Ð=¸q×AÑAûðBür§   c              ƒ  ó:  K  — t         j                  rt         j                  sy 	 t        | «      ƒ d {  –—† }|r|j                  r|j
                  sy t        || |d¬«      ƒ d {  –—†  y 7 Œ77 Œ# t        $ r }t        j                  d|«       Y d }~y d }~ww xY w­w)NÚreviewedr›   z%telegram notify_pb_reviewed error: %srÓ  rÖ  s       r   Únotify_pb_reviewedrÛ  E  s†   è ø€ Ü×&Ò&¬h×.DÒ.DØðAÜ Ó(×(ˆÙ˜#×/Ò/°s×7GÒ7GØÜ˜C ¨%°zÔB×BÑBð )øð 	CùÜò AÜ�‰Ð<¸a×@Ñ@ûðAür§   c              ƒ  óŠ  K  — ddl m}m} t        «       4 ƒd {  –—† }|j	                  t        |«      j                  |j                  |k(  |j                  |k(  «      j                  t        |j                  «      t        |j                  «      t        |j                  «      «      «      ƒ d {  –—† }|j                  «       }|s	 d d d «      ƒd {  –—†  y t        ||«      ƒ d {  –—† }	d d d «      ƒd {  –—†  t!        	«      }
t#        d„ j                  D «       «      }dj%                  d„ |j                  D «       «      }|dk(  rº|j                  r|j                  j&                  nd}d|
› d	|j(                  › d
|j*                  › d|› dt-        |j                  «      › d|› dt/        |«      › dt1        |j2                  «      › dt5        d|› �«      › �}t7        | j8                  | j:                  |«      ƒ d {  –—†  y |dk(  �r|j                  r|j                  j&                  nd}t#        d„ |j                  D «       «      }t#        d„ |j                  D «       «      }t#        d„ |j                  D «       «      }|j<                  xs d}d|
› d	|j(                  › d|j*                  › d|› dt/        |«      › d|› d|› d|› dt1        |j>                  «      › dt5        d|› �«      › �}t7        | j8                  | j:                  |«      ƒ d {  –—†  y y 7 �Œ 7 �Œm7 �ŒM7 �Œ;7 �Œ.# 1 ƒd {  –—†7  sw Y   �Œ?xY w7 �Œ@7 Œ.­w)Nr   )ÚPBÚPBItemc              3  óN   K  — | ]  }|j                   |j                  z  –— Œ y ­wr  )Úqty_requestedÚharga_satuanr  s     r   rÊ   z _do_notify_pb.<locals>.<genexpr>f  s%   è ø€ ð Ù=E°Tˆ×	Ñ	˜d×/Ñ/Õ	/¹Xùs   ‚#%r�   c              3  ó¶   K  — | ]Q  }d |j                   › d|j                  d›d|j                  › dt        |j                  |j                  z  «      › �–— ŒS y­w)õ   â€¢ rÑ   ÚgrÐ   u   ) â€” N)Ú	nama_itemrà  Úsatuanr"   rá  r  s     r   rÊ   z _do_notify_pb.<locals>.<genexpr>i  s\   è ø€ ð áˆDð ˆt�~‰~Ð˜b ×!3Ñ!3°AÐ 6°a¸¿¹°}ÀFÌ7ÐSW×SeÑSeÐhl×hyÑhyÑSyÓKzÐJ{Ô|Ùùs   ‚AArš   r(   u)   ðŸ›’ <b>Permintaan Barang Baru</b>

ðŸ�ª u   
ðŸ“‹ rË  u   
ðŸ‘¤ Dibuat: uN   

â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
<b>ITEM (õN    item)</b>
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
uY   
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
ðŸ’µ Total Estimasi: rÓ   r±   z/pb/rÚ  c              3  ó@   K  — | ]  }|j                   d k(  sŒd–— Œ y­w)r©   é   N©r�  ©rÈ   rh   s     r   rÊ   z _do_notify_pb.<locals>.<genexpr>ƒ  ó   è ø€ ÐK© 1°A·H±HÀ
Ó4JœQ©ùó   ‚—c              3  ó@   K  — | ]  }|j                   d k(  sŒd–— Œ y­w)Úrejectedré  Nrê  rë  s     r   rÊ   z _do_notify_pb.<locals>.<genexpr>„  rì  rí  c              3  óˆ   K  — | ]:  }|j                   d k(  r)|j                  xs |j                  |j                  z  –— Œ< y­w)r©   N)r�  Úqty_approvedrà  rá  rë  s     r   rÊ   z _do_notify_pb.<locals>.<genexpr>…  s9   è ø€ ð 
á� §¡¨ZÒ!7ð �^‰^Ò.˜qŸ™°!·.±.Õ@Ùùs   ‚A Au   ðŸ“‹ <b>PB Direview</b>

ðŸ�ª rƒ   u   

âœ… Disetujui : u
    item â€” u   
â�Œ Ditolak   : u    item
ðŸ“� Catatan   : u   

âœ�ï¸� Reviewer : r³  ) Úapp.models.pbrÝ  rÞ  r   rs   r   rt   r‹   ru   r´   r   Ú
created_byr×   rá   rx   rŒ   r‡   rÞ   rà   r€   r†   ÚjudulÚlenr"   r-   rí   r}   rO   r~  rÔ  Úcatatan_headrï   )r¥   ru   r×  rœ   rÝ  rÞ  ry   ro   Úpbr…   r’   Útotal_estimasir+  Úcreator_namer?   Úreviewer_nameÚapproved_countÚrejected_countÚtotal_approvedÚcatatans                       r   rÕ  rÕ  Q  s*  è ø€ ÷ )ä ×"Ô" bØ—z‘zÜ�2‹Jß‰U�2—5‘5˜E‘> 2§:¡:°Ñ#8Ó9ß‰WÜ˜RŸ]™]Ó+Ü˜RŸ^™^Ó,Ü˜RŸX™XÓ&óó
÷ 
ˆð ×&Ñ&Ó(ˆÙØ÷ #×"Ð"ô    GÓ,×,ˆ÷ #×"ô ˜DÓ!€HÜñ Ø=?¿XºXóó €Nð —‘ñ à—H’Hóó €Jð
 �ÒØ-/¯]ª]�r—}‘}×)Ò)ÀˆðØ�:ð Ø—H‘H�:ð Ø—H‘H�:ð Ø(˜>ð *ä˜BŸH™H›�ð 'Sàˆlð $ä$+¨NÓ$;Ð#<ð =Ü  §¡Ó1Ð2ð 3Ü˜D  ˜.Ó)Ð*ð,ð 	ô ˜×.Ñ.°×0@Ñ0@À$ÓG×GÑGà	�*Ó	Ø/1¯~ª~˜Ÿ™×+Ò+À5ˆÜÑK¨¯ªÓKÓKˆÜÑK¨¯ªÓKÓKˆÜñ 
à—X’Xó
ó 
ˆð —/‘/Ò* UˆðØ�:ð Ø—H‘H�:˜U 2§8¡8 *ð -Ø-Ð.¨j¼ÀÓ9PÐ8Qð RØ-Ð.ð / Ø '˜yð )!Ø!. ð 0Ü# B§N¡NÓ3Ð4ð 5Ü˜D  ˜.Ó)Ð*ð,ð 	ô ˜×.Ñ.°×0@Ñ0@À$ÓG×GÑGð) 
ðW #ùð
ùð #ùð -ùð #ù×"×"Ò"úðR 	Hùð, 	Hús§   ‚M™LšM�BL(Â/LÂ0L(ÃMÃLÃMÃL(Ã'L"Ã(L(Ã,MÃ7L%Ã8DMÇ>L>Ç?DMÌMÌMÌL(ÌMÌ"L(Ì%MÌ(L;Ì.L1Ì/L;Ì6	MÍMc              ƒ  ó6  K  — t         j                  rt         j                  sy 	 t        | «      ƒ d {  –—† }|r|j                  r|j
                  sy t        || |«      ƒ d {  –—†  y 7 Œ57 Œ# t        $ r }t        j                  d|«       Y d }~y d }~ww xY w­w)Nz*telegram notify_absensi_uploaded error: %s)
r   r   rž   rz   Ú
chat_ga_idÚthread_absensi_idÚ_do_notify_absensir4   r5   r¢   )ru   Ú
absensi_idr¥   r:   s       r   Únotify_absensi_uploadedr  š  s�   è ø€ Ü×&Ò&¬h×.DÒ.DØðFÜ Ó(×(ˆÙ˜#Ÿ.š.°×0EÒ0EØÜ   g¨zÓ:×:Ñ:ð )øð 	;ùÜò FÜ�‰ÐAÀ1×EÑEûðFür6  c              ƒ  ód  K  — ddl m} t        «       4 ƒd {  –—† }|j                  t	        |«      j                  |j                  |k(  |j                  |k(  «      j                  t        |j                  «      t        |j                  «      «      «      ƒ d {  –—† }|j                  «       }|s	 d d d «      ƒd {  –—†  y d d d «      ƒd {  –—†  t        j                  «      }|j                  r|j                  j                  d«      nd}|j                  r|j                  j                   nd}	|j"                  rd|j"                  › �nd}
d|› d|› d	|	› |
› d
t%        d|j                  j'                  «       › �«      › �	}t)        | j*                  | j,                  |«      ƒ d {  –—†  |j.                  rOt1        |j.                  g«      }|r6d|› d|	› d	|› �}t3        | j*                  | j,                  ||«      ƒ d {  –—†  y y y 7 �Œó7 �Œt7 �ŒT7 �ŒF# 1 ƒd {  –—†7  sw Y   �ŒWxY w7 Œ‚7 Œ+­w)Nr   )ÚAbsensir®   r(   u   
ðŸ•� EXIF Waktu: r‚   u$   ðŸ“� <b>Absensi Terupload</b>

ðŸ�ª rŽ   r°   r±   z/general-affairs/absensi?date=u   ðŸ“¸ Foto Absensi â€” r�   )Úapp.models.general_affairsr  r   rs   r   rt   r‹   ru   r´   r   r…   rµ   rx   r‡   r·   r+   r¶   Úfoto_eksif_waktur}   Ú	isoformatrO   r   r  rî   rq   rj   )r¥   ru   r  r  ry   ro   Úar’   r“   rº   Ú
exif_waktur?   rø   rQ   s                 r   r  r  ¦  së  è ø€ Ý2ä ×"Ô" bØ—z‘zÜ�7‹Oß‰U�7—:‘: Ñ+¨W¯_©_ÀÑ-GÓHß‰WÜ˜WŸ\™\Ó*Ü˜WŸ]™]Ó+óó
÷ 
ˆð ×%Ñ%Ó'ˆÙØ÷ #×"×"×"Ð"ô ˜AŸF™FÓ#€HØ45·I²I�!—)‘)×$Ñ$ ZÔ0À5€KØ!"§¢�—‘—’¨e€JØ?@×?QÒ?QÐ& q×'9Ñ'9Ð&:Ñ;ÐWY€JðØˆzð Øˆ}˜D  Øˆ,ð ÜÐ6°q·y±y×7JÑ7JÓ7LÐ6MÐNÓOÐPð		Rð 	ô �S—^‘^ S×%:Ñ%:¸DÓ
A×AÐAà‡z‚zÜ  !§*¡* Ó.ˆÙØ.¨x¨j¸¸:¸,ÀdÈ;È-ÐXˆGÜ# C§N¡N°C×4IÑ4IÈ7ÐTZÓ[×[Ñ[ð ð ð7 #ùð
ùð #ùÐ"ù×"×"Ò"úð2 Bøð \ús‰   ‚H0—H
˜H0›A>HÂHÂHÂ1H0Â<HÂ=H0ÃHÃCH0Æ)H,Æ*AH0ÈH.ÈH0ÈHÈH0ÈH0ÈH)ÈHÈH)È$	H0È.H0c              ƒ  ó6  K  — t         j                  rt         j                  sy 	 t        | «      ƒ d {  –—† }|r|j                  r|j
                  sy t        || |«      ƒ d {  –—†  y 7 Œ57 Œ# t        $ r }t        j                  d|«       Y d }~y d }~ww xY w­w)Nz0telegram notify_housekeeping_submitted error: %s)
r   r   rž   rz   r   Úthread_housekeeping_idÚ_do_notify_housekeepingr4   r5   r¢   )ru   Úhk_idr¥   r:   s       r   Únotify_housekeeping_submittedr  Í  s�   è ø€ Ü×&Ò&¬h×.DÒ.DØðLÜ Ó(×(ˆÙ˜#Ÿ.š.°×0JÒ0JØÜ% c¨7°EÓ:×:Ñ:ð )øð 	;ùÜò LÜ�‰ÐGÈ×KÑKûðLür6  c              ƒ  óB  K  — ddl m}m}m} t	        «       4 ƒd {  –—† }|j                  t        |«      j                  |j                  |k(  |j                  |k(  «      j                  t        |j                  «      t        |j                  «      «      «      ƒ d {  –—† }|j                  «       }|s	 d d d «      ƒd {  –—†  y t        ||«      ƒ d {  –—† }	d d d «      ƒd {  –—†  t!        	«      }
j"                  r|j"                  j%                  d«      nd}t'        |j                  «      }t'        |j                  «      }|j                  r7dj)                  d„ |j                  d d D «       «      }|dkD  r|d|dz
  › d	�z  }n
|rd
|› d�nd}|r|› d�nd}|r|r|› d|› d�n|› d�}d|
› d|› d|› d|› dt+        d|j"                  j-                  «       › �«      › �
}t/        | j0                  | j2                  |«      ƒ d {  –—†  |j                  D �cg c]  }|j4                  ‘Œ }}t7        |«      }|r3d|
› d|› �}t9        | j0                  | j2                  ||«      ƒ d {  –—†  y y 7 �ŒV7 �Œ×7 �Œ·7 �Œ¥7 �Œ˜# 1 ƒd {  –—†7  sw Y   �Œ©xY w7 Œ�c c}w 7 Œ2­w)Nr   )ÚHousekeepingÚHousekeepingFotoÚHousekeepingItemr®   r(   r�   c              3  ó:   K  — | ]  }d |j                   › �–— Œ y­w©rã  N)Ú	deskripsir  s     r   rÊ   z*_do_notify_housekeeping.<locals>.<genexpr>ñ  s   è ø€ ÐQÁ=¸4  d§n¡nÐ%5Ô6Á=ùó   ‚rB   u	   
â€¦ dan z area lainnyau   ðŸ“· z foto diuploadz arear‚   z, z fotou(   ðŸ§¹ <b>Housekeeping Disubmit</b>

ðŸ�ª rŽ   uN   

â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
<b>AREA (uI   )</b>
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
r±   z#/general-affairs/housekeeping?date=u   ðŸ“¸ Foto Housekeeping â€” )r  r  r  r  r   rs   r   rt   r‹   ru   r´   r   rá   r&  rx   rŒ   r‡   r·   r+   rõ  rà   r}   r	  rO   r   r  rî   rq   rj   )r¥   ru   r  r  r  r  ry   ro   Úhkr…   r’   r“   Ún_areaÚn_fotoÚ
area_linesÚsummaryr?   r÷   rr  rø   rQ   s                        r   r  r  Ù  s‰  è ø€ ß[Ñ[ä ×"Ô" bØ—z‘zÜ�<Ó ß‰U�<—?‘? eÑ+¨\×-AÑ-AÀWÑ-LÓMß‰WÜ˜\×/Ñ/Ó0Ü˜\×/Ñ/Ó0óó
÷ 
ˆð ×&Ñ&Ó(ˆÙØ÷ #×"Ð"ô    GÓ,×,ˆ÷ #×"ô ˜DÓ!€HØ57·Z²Z�"—*‘*×%Ñ% jÔ1ÀU€Kä�—‘‹]€FÜ�—‘‹]€Fà	‡x‚xØ—Y‘YÑQÀ2Ç8Á8ÈCÈRÁ=ÓQÓQˆ
Ø�BŠ;Ø˜J v°¡{ m°=ÐAÑA‰Já7=�u˜V˜H NÑ3À5ˆ
á"(��˜Ñ¨b€GÙÙ18�W�I˜R ˜x uÑ-ÀÀÈÐ>NˆðØˆzð Øˆ}ð à�9ð Oàˆ,ð ÜÐ;¸B¿J¹J×<PÑ<PÓ<RÐ;SÐTÓUÐVð	Xð 	ô �S—^‘^ S×%?Ñ%?ÀÓ
F×FÐFà%'§X¢XÓ.¡X �—“ X€IÐ.Ü˜YÓ'€FÙØ/°¨z¸¸K¸=ÐIˆÜ §¡°×0JÑ0JÈGÐU[Ó\×\Ñ\ð ð[ #ùð
ùð #ùð -ùð #ù×"×"Ò"úðR Gúâ.ð 	]ús²   ‚J›I1œJŸA>J ÂI4ÂJ Â5JÃ I7ÃJÃJ ÃI:ÃJ ÃJÃ%I=Ã&D"JÈJÈ	JÈJÈ.<JÉ*JÉ+JÉ4J É7JÉ:J É=JÊ JÊJ	ÊJÊ	JÊJc              ƒ  ó6  K  — t         j                  rt         j                  sy 	 t        | «      ƒ d {  –—† }|r|j                  r|j
                  sy t        || |«      ƒ d {  –—†  y 7 Œ57 Œ# t        $ r }t        j                  d|«       Y d }~y d }~ww xY w­w)Nz*telegram notify_sapras_submitted error: %s)
r   r   rž   rz   r   Úthread_sapras_idÚ_do_notify_saprasr4   r5   r¢   )ru   Ú	sapras_idr¥   r:   s       r   Únotify_sapras_submittedr"    s�   è ø€ Ü×&Ò&¬h×.DÒ.DØðFÜ Ó(×(ˆÙ˜#Ÿ.š.°×0DÒ0DØÜ  W¨iÓ8×8Ñ8ð )øð 	9ùÜò FÜ�‰ÐAÀ1×EÑEûðFür6  c              ƒ  óð  K  — ddl m}m} t        «       4 ƒd {  –—† }|j	                  t        |«      j                  |j                  |k(  |j                  |k(  «      j                  t        |j                  «      «      «      ƒ d {  –—† }|j                  «       }|s	 d d d «      ƒd {  –—†  y t        ||«      ƒ d {  –—† }d d d «      ƒd {  –—†  t        «      }	j                  r|j                  j!                  d«      nd}
|j"                  xs d}|j                  r%dj%                  d„ |j                  d d D «       «      nd}d	|	› d
|
› d�|rd|› d�ndz   dt'        |j                  «      › d|› dt)        d|j                  j+                  «       › �«      › �z   }t-        | j.                  | j0                  |«      ƒ d {  –—†  |j                  D ��cg c]$  }|j2                  |j4                  fD ]  }|sŒ|‘Œ	 Œ& }}}t7        |«      }|r3d|	› d|
› �}t9        | j.                  | j0                  ||«      ƒ d {  –—†  y y 7 �Œ.7 �ŒÃ7 �Œ£7 �Œ‘7 �Œ„# 1 ƒd {  –—†7  sw Y   �Œ•xY w7 Œ¥c c}}w 7 Œ3­w)Nr   )ÚSaprasÚ
SaprasItemr®   r(   r‚   r�   c              3  ó:   K  — | ]  }d |j                   › �–— Œ y­wr  )Úkegiatanr  s     r   rÊ   z$_do_notify_sapras.<locals>.<genexpr>0  s    è ø€ ð Ù+< 4ˆ$ˆt�}‰}ˆoÔÑ+<ùr  rB   u2   ðŸ”§ <b>Sarana &amp; Prasarana Disubmit</b>

ðŸ�ª rŽ   u   ðŸ“� uQ   
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
<b>KEGIATAN (rç  r±   z/general-affairs/sapras?date=u   ðŸ“¸ Foto Sapras â€” )r  r$  r%  r   rs   r   rt   r‹   ru   r´   r   rá   rx   rŒ   r‡   r·   r+   rþ  rà   rõ  r}   r	  rO   r   r  Úfoto_sebelum_urlÚfoto_sesudah_urlrq   rj   )r¥   ru   r!  r$  r%  ry   ro   Úsaprasr…   r’   r“   rþ  Úkegiatan_linesr?   r  Úurr  rø   rQ   s                      r   r   r     s`  è ø€ ß=ä ×"Ô" bØ—z‘zÜ�6‹Nß‰U�6—9‘9 	Ñ)¨6¯>©>¸WÑ+DÓEß‰WÜ˜VŸ\™\Ó*óó
÷ 
ˆð ×*Ñ*Ó,ˆÙØ÷ #×"Ð"ô    GÓ,×,ˆ÷ #×"ô ˜DÓ!€HØ9?¿º�&—.‘.×)Ñ)¨*Ô5ÈU€KØ�n‰nÒ" €Gð 
�Šð —Y‘Yñ Ø+1¯<©<¸¸Ñ+<óô à ð ð
Øˆzð Øˆ}˜Bð	 ñ #*ˆU�7�)˜2Ñ¨rñ	3ðÜ˜FŸL™LÓ)Ð*ð +OàÐ
ð ÜÐ5°f·n±n×6NÑ6NÓ6PÐ5QÐRÓSÐTð	Vñ		Vð 	ô �S—^‘^ S×%9Ñ%9¸4Ó
@×@Ð@à%Ÿ|š|Ôi™|�t°d×6KÑ6KÈT×MbÑMbÓ5c°Ògh’Ð5c�˜|€IÑiÜ˜YÓ'€FÙØ)¨(¨°2°k°]ÐCˆÜ §¡°×0DÑ0DÀgÈvÓV×VÑVð ðI #ùð
ùð #ùð -ùð #ù×"×"Ò"úð@ Aúãið 	Wús¸   ‚I6™IšI6�A*IÂI
ÂIÂI6Â*IÂ+I6Â0IÂ?IÃ IÃI6ÃIÃC6I6ÇI,ÇI6Ç"I.Ç=I.È=I6É I4ÉI6É
IÉI6ÉIÉI6ÉI)ÉIÉI)É$	I6É.I6c              ƒ  ó6  K  — t         j                  rt         j                  sy 	 t        | «      ƒ d {  –—† }|r|j                  r|j
                  sy t        || |«      ƒ d {  –—†  y 7 Œ57 Œ# t        $ r }t        j                  d|«       Y d }~y d }~ww xY w­w)Nz$telegram notify_pos_upload error: %s)
r   r   rž   rz   rŸ   Úthread_pos_upload_idÚ_do_notify_pos_uploadr4   r5   r¢   rœ  s       r   Únotify_pos_uploadr0  J  sƒ   è ø€ Ü×&Ò&¬h×.DÒ.DØð@Ü Ó(×(ˆÙ˜#×1Ò1¸×9QÒ9QØÜ# C¨°(Ó;×;Ñ;ð )øð 	<ùÜò @Ü�‰Ð;¸Q×?Ñ?ûð@ür6  c              ƒ  ó&  K  — ddl m} ddlm} ddlm} t        «       4 ƒd {  –—† }|j                  t        |«      j                  |j                  |k(  |j                  |k(  «      «      ƒ d {  –—† j                  «       }|s	 d d d «      ƒd {  –—†  y |j                  t        |«      j                  |j                  |j                  k(  «      «      ƒ d {  –—† j                  «       }d }	|j                  rV|j                  t        |«      j                  |j                  |j                  k(  «      «      ƒ d {  –—† j                  «       }	t        ||«      ƒ d {  –—† }
d d d «      ƒd {  –—†  t!        
«      }r|j"                  nd}j$                  j'                  d«      }|j(                  j'                  d«      }||k(  r|n|› d|› �}	r|	j*                  nd}d|› d	|› d
|› d|j,                  d›dt/        |j0                  «      › dt3        |j4                  «      › d|› dt7        d|› �«      › �}t9        | j:                  | j<                  |«      ƒ d {  –—†  y 7 �ŒA7 �Œø7 �ŒÚ7 �Œ”7 �Œ37 �Œ7 �Œ# 1 ƒd {  –—†7  sw Y   �ŒxY w7 Œ0­w)Nr   )ÚPosUploadBatchr8  )ÚUserr(   r®   rÒ   u&   ðŸ“Š <b>POS Upload Berhasil</b>

ðŸ�ª u   
â›½ rŽ   uU   

â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
Transaksi  : <b>r   z</b> baris
Volume     : <b>z</b>
Nilai      : <b>uM   </b>
â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€
ðŸ‘¤ r±   z/pos-upload?batch_id=)Úapp.models.pos_analyticsr2  rC  r9  Úapp.models.userr3  r   rs   r   rt   r‹   ru   rx   rE  Úuploaded_by_idrŒ   r‡   r¶   Útanggal_mulair+   Útanggal_selesaiÚ	full_nameÚ
total_rowsr&   rò   r"   ró   r}   rO   rŸ   r.  )r¥   ru   r�  r2  r9  r3  ry   r¹  rÚ   Úuploaderr…   r’   r<  Ú	tgl_mulaiÚtgl_selesaiÚ	tgl_rangeÚuploader_namer?   s                     r   r/  r/  V  sd  è ø€ Ý7Ý)Ý$ä ×"Ô" bØ—z‘zÜ�>Ó"×(Ñ(Ø×!Ñ! XÑ-Ø×&Ñ&¨'Ñ1óó
÷ 
÷
 ÑÓð 	ñ Ø÷ #×"Ð"ð Ÿ
™
¤6¨&£>×#7Ñ#7¸¿	¹	ÀUÇ_Á_Ñ8TÓ#UÓV×V×jÑjÓlˆØ $ˆØ×ÒØ Ÿj™j¬°«×);Ñ);¸D¿G¹GÀu×G[ÑG[Ñ<[Ó)\Ó]×]×qÑqÓsˆHÜ  GÓ,×,ˆ÷ #×"ô ˜DÓ!€HÙ!'�&—+’+¨U€KØ×#Ñ#×,Ñ,¨ZÓ8€IØ×'Ñ'×0Ñ0°Ó<€KØ&¨+Ò5‘	¸i¸[ÈÈkÈ]Ð;[€IÙ*2�H×&Ò&¸€MðØˆzð Øˆmð Øˆ{ð à ×+Ñ+¨AÐ.ð /Ü# E×$6Ñ$6Ó7Ð8ð 9Ü" 5×#4Ñ#4Ó5Ð6ð 7àˆð ÜÐ-¨h¨ZÐ8Ó9Ð:ð
	<ð 	ô �S×,Ñ,¨c×.FÑ.FÈÓ
M×MÑMðG #ùð
ùð #ùð Wùð ^ùØ,ùð #ù×"×"Ò"úðF Núsº   ‚!J£I$¤J§AI9Á/I'Á0I9ÂJÂI*ÂJÂAI9ÃI-ÃA#I9Ä=I0Ä>!I9ÅI3Å I9Å$JÅ/I6Å0C.JÉJÉJÉ'I9É*JÉ-I9É0I9É3I9É6JÉ9JÉ?JÊ JÊ	Jc              ƒ  óx  K  — t         j                  rt         j                  sy	 t        | «      ƒ d{  –—† }|r|j                  r|j
                  syt        «       4 ƒd{  –—† }t        || «      ƒ d{  –—† }ddd«      ƒd{  –—†  t        «      }|j                  dd«      }|dk(  rd}nd}|j                  dg «      }	g }
|	D �]‡  }|j                  d«      xs d	|j                  d
«      › �}|j                  d«      xs d}t        t        |j                  dd«      «      «      }|j                  d«      }|j                  d«      }t        t        |j                  dd«      «      «      }|j                  d«      }|�,|�*t        t        |«      «      t        t        |«      «      kD  }nd}|dk  r-|rdnd}|�|› d�nd}dt        t        |«      «      › d|› d|› �}n#|rdnd}|�|› d�nd}dt        |«      › d|› d|› �}d|› d|› d |› �}|dk  r'|�|› d�nd}|d!t        t        |«      «      › d|› d"�z  }|
j                  |«       �ŒŠ d#j                  |
«      }|j                  d$«      xs d%}t        t        |j                  d&«      xs d«      «      }t        t        |j                  d'«      xs d«      «      }t        t        |j                  d(«      xs d«      «      }d)t!        |«      › �}|dk7  r|d*t!        |«      › d+t!        |«      › �z  }d,|› d-|› d#|› d#|› d#|› d.|› d/t#        d0|› �«      › �}t%        |j                  |j
                  |«      ƒ d{  –—†  y7 �Œ77 �Œ7 �Œû7 �Œî# 1 ƒd{  –—†7  sw Y   �ŒÿxY w7 Œ'# t&        $ r } t(        j+                  d1| «       Y d} ~ yd} ~ ww xY w­w)2z9Notif ke thread_rekonsiliasi_id saat rekonsiliasi di-run.Nr�  ÚpendingÚbalancedu1   âœ… Status: BALANCED â€” semua tangki dalam batasu8   âš ï¸� Status: PENDING â€” ada tangki melebihi thresholdrá   r;  zTangki #Ú	tangki_idr<  rÅ   rU  Ú0rW  Úthreshold_pctÚpenerimaan_losses_literÚpenerimaan_losses_pctFr   u   âš ï¸�u   âœ…rA  u   â€”%z	Losses: -r?  z) zGain: +z (+r  r°   z
   z
   Losses Pengiriman: -u   ) âš ï¸�rB  Úrun_by_namer(   Útotal_nilai_lossesÚtotal_nilai_penerimaan_lossesÚtotal_gabungan_lossesu   ðŸ’° Total Losses: u   
ðŸ’° Total Losses Pengiriman: u   
ðŸ’° Total Gabungan: u%   ðŸ”„ <b>Rekonsiliasi Harian</b>
ðŸ�ª rŽ   u   

ðŸ‘¤ Dijalankan oleh: r±   ú/rekonsiliasi?tanggal=z*telegram notify_rekonsiliasi_run error: %s)r   r   rž   rz   rŸ   Úthread_rekonsiliasi_idr   rŒ   r‡   rI  r	   rX   r&   rK  re   rà   r"   r}   rO   r4   r5   r¢   )!ru   r“   Úresult_datar¥   ry   r…   rR  r�  Ústatus_linerá   Ú
tank_linesr  r;  r<  rU  rW  r=  Úpenerimaan_lossesrG  ÚexceedÚlosses_iconÚpct_strÚlosses_lineÚlineÚpen_pct_strÚtank_sectionÚrun_byró   Útotal_penerimaan_nilaiÚtotal_gabunganÚ
rp_sectionr?   r:   s!                                    r   Únotify_rekonsiliasi_runr]  �  sì  è ø€ ô ×&Ò&¬h×.DÒ.DØðHFÜ Ó(×(ˆÙ˜#×1Ò1¸×9SÒ9SØä$×&Ô&¨"Ü# B¨Ó0×0ˆD÷ '×&ä" 4Ó(ˆà—‘ ¨9Ó5ˆØ�ZÒØM‰KàTˆKà—‘ ¨Ó,ˆØˆ
ÜˆDØŸ(™( =Ó1ÒW°xÀÇÁÈÓ@UÐ?VÐ5WˆKØŸ(™( =Ó1Ò8°SˆKÜœS §¡¨(°CÓ!8Ó9Ó:ˆFØŸ™ ,Ó/ˆJØŸ™ Ó1ˆIÜ '¬¨D¯H©HÐ5NÐPSÓ,TÓ(UÓ VÐØ$(§H¡HÐ-DÓ$EÐ!àÐ%¨)Ð*?Ü ¤ Z£Ó1´G¼CÀ	»NÓ4KÑK‘à�à˜ŠzÙ*0™h°e�Ø.8Ð.D˜Z˜L¨Ñ*È&�Ø )¬(´3°v³;Ó*?Ð)@ÀÀGÀ9ÈBÈ{ÈmÐ\‘á*0™h°e�Ø.8Ð.D˜Z˜L¨Ñ*È&�Ø '¬°Ó(8Ð'9¸¸W¸IÀRÈÀ}ÐU�à˜;˜- t¨K¨=¸¸k¸]ÐKˆDØ  1Ò$Ø=RÐ=^Ð!6Ð 7°qÑ9Ðdj�ØÐ3´H¼SÐARÓ=SÓ4TÐ3UÐUXÐYdÐXeÐemÐnÑn�Ø×Ñ˜dÖ#ð7 ð: —{‘{ :Ó.ˆà—‘ Ó/Ò8°5ˆÜœc +§/¡/Ð2FÓ"GÒ"NÈ3ÓOÓPˆÜ!(¬¨[¯_©_Ð=\Ó-]Ò-dÐadÓ)eÓ!fÐÜ ¤ [§_¡_Ð5LÓ%MÒ%TÐQTÓ!UÓVˆà*¬7°;Ó+?Ð*@ÐAˆ
Ø! QÒ&ØØ2´7Ð;QÓ3RÐ2SØ)¬'°.Ó*AÐ)BðDñˆJðØ�=ð !Ø�= Øˆm˜4Øˆn˜DØˆlð %Ø%+ Hð -ÜÐ2°;°-Ð@ÓAÐBðDð 	ô ˜×0Ñ0°#×2LÑ2LÈdÓS×SÑSðK )ùð 'ùØ0ùð 'ù×&×&Ò&úðB 	TùÜò FÜ�‰ÐAÀ1×EÑEûðFüs±   ‚"N:¥N ³M*´N ÁN:ÁN Á!M-Á"N Á%M6Á5M0Á6M6Á:N ÂM3ÂKN Í$NÍ%N Í)N:Í*N Í-N Í0M6Í3N Í6N	Í<M?Í=N	Î	N Î	N7ÎN2Î-N:Î2N7Î7N:c              ƒ  ó  K  — t         j                  rt         j                  sy	 t        | «      ƒ d{  –—† }|r|j                  r|j
                  syt        «       4 ƒd{  –—† }t        || «      ƒ d{  –—† }ddd«      ƒd{  –—†  t        «      }t        t        j                  t        j                  «      «      }d|› d|› d|› d|› dt        d|› �«      › �
}	|rô	 dd	lm}
 |j#                  d
g «      }|j#                  dg «      }|D �ci c]H  }|j#                  d«      �5|j#                  d«      �$t%        |d   «      t'        t)        |d   «      «      “ŒJ }}|j#                  d«      }|j#                  d«      } |
|j*                  |||xs d|xs d|||¬«      }d|› d�}t-        |j                  |j
                  |	||«      ƒ d{  –—†  yt5        |j                  |j
                  |	«      ƒ d{  –—†  y7 �ŒË7 �Œ 7 �Œ�7 �Œ‚# 1 ƒd{  –—†7  sw Y   �Œ“xY wc c}w 7 ŒV# t.        $ r }t0        j3                  d|«       Y d}~Œwd}~ww xY w7 ŒZ# t.        $ r }t0        j7                  d|«       Y d}~yd}~ww xY w­w)zUNotif ke thread_rekonsiliasi_id saat rekonsiliasi di-approve, dengan lampiran BA PDF.Nu'   âœ… <b>Rekonsiliasi Diapprove</b>
ðŸ�ª rŽ   u   

ðŸ‘¤ Diapprove oleh: r°   r±   rL  r   )Úgenerate_ba_rekonsiliasirá   Úshift_breakdownrC  Úharga_per_literrH  Ú
updated_at)Ú	spbu_namer·   rá   r`  Úharga_per_tangkirH  Úapproved_by_nameÚapproved_atzBA-Rekonsiliasi-z.pdfz2BA PDF generation failed, falling back to text: %sz/telegram notify_rekonsiliasi_approved error: %s)r   r   rž   rz   rŸ   rM  r   rŒ   r‡   r-   r   Únowr   Úutcr}   Úapp.utils.ba_pdfr_  rI  r   r	   rX   r€   r]   r4   r5   r6   rO   r¢   )ru   r“   re  rN  r¥   ry   r…   rR  Ú	waktu_strrQ   r_  rá   r`  r  rd  rH  rf  Ú	pdf_bytesrY   Úpdf_errr:   s                        r   Únotify_rekonsiliasi_approvedrm  Ò  s†  è ø€ ô
 ×&Ò&¬h×.DÒ.DØð5KÜ Ó(×(ˆÙ˜#×1Ò1¸×9SÒ9SØä$×&Ô&¨"Ü# B¨Ó0×0ˆD÷ '×&ä" 4Ó(ˆäœŸ™¤h§l¡lÓ3Ó4ˆ	ðØ�=ð !Ø�=ð !$Ø$4Ð#5°T¸)¸ð EÜÐ2°;°-Ð@ÓAÐBð	Dð 	ñ ð^ÝEØ#Ÿ™¨°Ó4�Ø"-§/¡/Ð2CÀRÓ"H�ñ !&ó$á %˜Ø—x‘x Ó,Ð8¸T¿X¹XÐFWÓ=XÐ=dô ˜˜[Ñ)Ó*¬G´C¸Ð=NÑ8OÓ4PÓ,QÑQØ %ð !ð $ð
 *Ÿo™o¨mÓ<�Ø)Ÿo™o¨lÓ;�Ù4Ø"Ÿi™iØ'ØØ$3Ò$;°tØ%5Ò%=¸Ø +Ø%5Ø +ô	�	ð .¨k¨]¸$Ð?�Ü$Ø×+Ñ+¨S×-GÑ-GØ˜X yó÷ ð ð ô ˜×0Ñ0°#×2LÑ2LÈgÓV×VÑVðe )ùð 'ùØ0ùð 'ù×&×&Ò&üò($ð$ùô
 ò ^Ü—‘ÐSÐU\×]Ñ]ûð^úð 	WùÜò KÜ�‰ÐFÈ×JÑJûðKüs  ‚"J¥I ³G>´I ÁJÁI Á!HÁ"I Á%H
Á5HÁ6H
Á:I ÂHÂAI Ã!.H' ÄAH ÅA2H' ÇH%ÇH' ÇJÇ$I Ç8IÇ9I Ç=JÇ>I ÈI ÈH
ÈI È
HÈHÈHÈI È H' È'	IÈ0IÉI ÉIÉI É	I>ÉI9É4JÉ9I>É>J)r   rX   r$  rX   )r!   zDecimal | float | intr$  rX   )r!   zDecimal | floatr$  rX   r#  )r7   rX   r$  zbytes | None)r>   rX   rK   ú
int | Noner?   rX   r$  ÚNone)zapplication/pdf)r>   rX   rK   rn  rQ   rX   rY   rX   rZ   Úbytesr[   rX   r$  ro  )
r>   rX   rK   rn  rQ   rX   rg   úlist[tuple[str, bytes]]r$  ro  )rn   zlist[str | None]r$  rq  )ru   r   r$  zTelegramConfig | None)r9   rX   r$  rX   )ru   r   )r�   rX   r‘   rX   r’   rX   r“   rX   r”   rX   r•   rX   r–   rX   r$  rX   )ru   r   r¤   r   r$  ro  )
r¥   r   ru   r   r¤   r   rœ   rX   r$  ro  )ru   r   rÿ   r   r$  ro  )
r¥   r   ru   r   rÿ   r   rœ   rX   r$  ro  )r¥   r   ru   r   rÿ   r   r$  ro  )ru   r   r^  r   r$  ro  )
r¥   r   ru   r   r^  r   rœ   rX   r$  ro  )ru   r   r„  r   r$  ro  )ru   r   r�  r   r$  ro  )
r¥   r   ru   r   r�  r   rœ   rX   r$  ro  )ru   r   rÅ  r   r$  ro  )
r¥   r   ru   r   rÅ  r   rœ   rX   r$  ro  )ru   r   r×  r   r$  ro  )
r¥   r   ru   r   r×  r   rœ   rX   r$  ro  )ru   r   r  r   r$  ro  )r¥   r   ru   r   r  r   r$  ro  )ru   r   r  r   r$  ro  )r¥   r   ru   r   r  r   r$  ro  )ru   r   r!  r   r$  ro  )r¥   r   ru   r   r!  r   r$  ro  )r¥   r   ru   r   r�  r   r$  ro  )ru   r   r“   rX   rN  Údictr$  ro  r  )
ru   r   r“   rX   re  rX   rN  zdict | Noner$  ro  )QÚ__doc__Ú
__future__r   rF   ÚloggingÚcollectionsr   r   r   r   Údecimalr	   Úpathlibr
   rG   Ú
sqlalchemyr   Úsqlalchemy.ormr   Úapp.core.configr   Úapp.core.databaser   Úapp.models.telegram_configr   Ú	getLoggerÚ__name__r5   r   r*   r   r"   r&   r-   r;   rO   r]   rj   rq   rz   r}   r‡   rŒ   r˜   r¦   rª   r»   r¡   r   r  rý   r2  r5  r4  r_  ra  r\  rt  rˆ  r”  r—  rž  r   r›  r¿  rÆ  rÈ  rÃ  rØ  rÛ  rÕ  r  r  r  r  r"  r   r0  r/  r]  rm  rÃ   r   r   Ú<module>r€     sÕ  ðñõ #ã Û Ý #ß 2Ñ 2Ý Ý ã Ý Ý 'å $Ý /Ý 5à	ˆ×	Ñ	˜8Ó	$€à=€Ù‰y˜qÔ!Ó"€ó
Qó2óZó>óó  ð *ð Øð àð ð ð ð ð	 ð
 ð ð ð ð 
ó ð$ Øð àð ð ð ð -ð	 ð
 
ó ó<ó+óCó4ó'ð
Ø!ð
Ø+.ð
Ø@Có
ó	Ió	HóHðDbQØ	ðbQØ"%ðbQØ36ðbQØ?BðbQà	óbQóN	Jó	IðQRØ	ðQRØ"%ðQRØ69ðQRØBEðQRà	óQRóhIóB
MðUNØ	ðUNØ"%ðUNØ69ðUNà	óUNót	Eó	DðKMØ	ðKMØ"%ðKMØ/2ðKMØ;>ðKMà	óKMó\DóH)IóX2Pój&IóV	Jó	IðFPØ	ðFPØ"%ðFPØ14ðFPØ=@ðFPà	óFPóRIóF	Gó	Fð6MØ	ð6MØ"%ð6MØ36ð6MØ?Bð6Mà	ó6Móv	Bó	AðDHØ	ðDHØ"%ðDHØ.1ðDHØ:=ðDHà	óDHóR	Fó"\óN	Ló2]ón	Fó)Wó\	@ó(NðVNFØðNFØ"ðNFØ15ðNFà	óNFðf  $ð<KØð<KØ"ð<KØ69ð<Kàð<Kð 
ô<Kr   