§
    YŸ’j•G  ã                  óì   — U d dl mZ 	 d dlZd dlZd dlZd dlZd dlmZmZ d dlm	Z	 d dl
mZ d dlmZ  ej        d¦  «        Z ej        dd	¦  «        Zg d
¢Z G d„ d¦  «        Zdaded<   dd„Zdd„ZdS )é    )ÚannotationsN)ÚdatetimeÚ	timedelta)ÚAny)ÚBrevoEmailService)ÚInvoiceProcessingServicezdscons.invoice.auto_syncÚINVOICE_SYNC_ALERT_EMAILzcontact@dinhsonconstruction.com)é   é   é	   é   é   é   c                  ól   — e Zd ZdZdefd#d	„Zed$d„¦   «         Z	 d%d&d„Z	 	 	 d'd(d„Z		 	 	 d)d*d!„Z
d+d"„ZdS ),ÚInvoiceAutoSyncSchedulerServiceud   Service Ä‘iá»�u phá»‘i tá»± Ä‘á»™ng quÃ©t vÃ  Ä‘á»“ng bá»™ hÃ³a Ä‘Æ¡n theo khung giá»� Ä‘á»‹nh ká»³.NÚinvoice_serviceúInvoiceProcessingService | NoneÚalert_emailÚstrÚreturnÚNonec                óv   — |pt          ¦   «         | _        || _        g | _        d| _        d | _        d | _        d S )NF)r   Ú_invoice_serviceÚ_alert_emailÚ_execution_historyÚ_is_runningÚ_last_run_timeÚ_last_run_status)Úselfr   r   s      úJC:\Projects\DSCons\app\modules\invoices\application\auto_sync_scheduler.pyÚ__init__z(InvoiceAutoSyncSchedulerService.__init__    sF   € ð
 !0Ð MÕ3KÑ3MÔ3MˆÔØ'ˆÔØ8:ˆÔØ!&ˆÔØ/3ˆÔØ,0ˆÔÐÐó    ú	list[int]c                ó*   — t          t          ¦  «        S ©N)ÚlistÚSCHEDULED_HOURS)r   s    r    Úscheduled_hoursz/InvoiceAutoSyncSchedulerService.scheduled_hours,   s   € å•OÑ$Ô$Ð$r"   Úcurrent_timeúdatetime | Noneútuple[datetime, float]c                ój  ‡‡— |pt          j        ¦   «         Š‰                     ¦   «         Šˆˆfd„t          D ¦   «         }|r	|d         }nA‰t	          d¬¦  «        z   }t          |j        |j        |j        t          d         dd¦  «        }t          d|‰z
   	                    ¦   «         ¦  «        }||fS )u�   TÃ­nh toÃ¡n thá»�i Ä‘iá»ƒm vÃ  sá»‘ giÃ¢y chá»� Ä‘áº¿n khung giá»� cháº¡y káº¿ tiáº¿p (01:00, 05:00, 09:00, 13:00, 17:00, 21:00).c           
     ó¤   •— g | ]L}t          ‰j        ‰j        ‰j        |d d ¦  «        ‰k    ¯)t          ‰j        ‰j        ‰j        |d d ¦  «        ‘ŒMS )r   )r   ÚyearÚmonthÚday)Ú.0ÚhÚnowÚtodays     €€r    ú
<listcomp>zFInvoiceAutoSyncSchedulerService.calculate_next_run.<locals>.<listcomp>8   s^   ø€ ð 
ð 
ð 
àÝ˜œ
 E¤K°´¸A¸qÀ!ÑDÔDÀsÒJÐJõ �U”Z ¤¨e¬i¸¸A¸qÑAÔAàJÐJÐJr"   r   r
   ©Údaysg        )
r   r3   Údater'   r   r.   r/   r0   ÚmaxÚtotal_seconds)r   r)   Ú
candidatesÚnext_runÚtomorrowÚdelay_secondsr3   r4   s         @@r    Úcalculate_next_runz2InvoiceAutoSyncSchedulerService.calculate_next_run0   sÑ   øø€ ð Ð,�hœl™nœnˆØ—’‘
”
ˆð
ð 
ð 
ð 
ð 
å$ð
ñ 
ô 
ˆ
ð ð 	Ø! !”}ˆHˆHð �y¨aÐ0Ñ0Ô0Ñ0ˆHÝØ”˜xœ~¨x¬|½_ÈQÔ=OÐQRÐTUñô ˆHõ ˜C (¨S¡.×!?Ò!?Ñ!AÔ!AÑBÔBˆØ˜Ð&Ð&r"   FÚallÚtrigger_slotú
str | NoneÚforceÚboolÚ	sync_typeúdict[str, Any]c           	   ƒ  ót  K  — t          j        ¦   «         }|p|                     d¦  «        }t                               d|¦  «         |                     ¦   «         ||ddddddœ}	 |                     d¦  «        }|t          d	¬
¦  «        z
                       d¦  «        }| j                             |||¬¦  «        }	|	 	                    dd¦  «        }
|	 	                    dd¦  «        }|	 	                    dd¦  «        }|	 	                    dg ¦  «        }d„ |D ¦   «         }|
dvpt          |¦  «        dk    }|
|d<   ||d<   ||d<   |	|d<   || _        |
| _        |r]|	 	                    d¦  «        pd}||d<   t                               d||¦  «         |                      ||||	¬¦  «        ƒ d{V —†}||d<   nt                               d|||¦  «         n™# t          $ rŒ}t!          j        ¦   «         }t%          |¦  «        }t                               d|||¦  «         d|d<   |› d|› �|d<   || _        d| _        |                      |d |› �|¬!¦  «        ƒ d{V —†}||d<   Y d}~nd}~ww xY w| j                             d|¦  «         t          | j        ¦  «        d"k    r| j        dd"…         | _        |S )#uh   Thá»±c thi tiáº¿n trÃ¬nh Ä‘á»“ng bá»™ hÃ³a Ä‘Æ¡n Ä‘á»‹nh ká»³ vÃ  gá»­i email thÃ´ng bÃ¡o khi cÃ³ lá»—i.ú%H:%Muk   ðŸš€ [AUTO-SYNC] Báº¯t Ä‘áº§u phiÃªn Ä‘á»“ng bá»™ hÃ³a Ä‘Æ¡n tá»± Ä‘á»™ng Ä‘á»‹nh ká»³ (Khung giá»�: %s)...Úrunningr   NF)Úexecution_timerA   rC   ÚstatusÚnew_importedÚ
duplicatesÚerror_detailsÚ
alert_sentz%Y-%m-%dé   r6   )Ú	from_dateÚto_daterE   rK   ÚerrorÚ	total_newÚtotal_duplicatesÚ
connectorsc                ó@   — g | ]}|                      d ¦  «        dv¯|‘ŒS )rK   )Úsuccess)Úget)r1   Úcs     r    r5   zJInvoiceAutoSyncSchedulerService.execute_scheduled_sync.<locals>.<listcomp>t   s3   € ð !ð !ð !Ø¨¯ª¨x©¬ÀÐ)LÐ)L�Ð)LÐ)LÐ)Lr"   )rX   Únot_configuredrL   rM   Úraw_responseÚmessageu0   Lá»—i káº¿t ná»‘i Cá»•ng Thuáº¿ / HÃ²m thÆ° IMAPrN   uF   âš ï¸� [AUTO-SYNC] PhÃ¡t hiá»‡n lá»—i trong phiÃªn Ä‘á»“ng bá»™ %s: %s)Ú
slot_labelÚerror_messagerV   Úsync_responserO   u_   âœ… [AUTO-SYNC] PhiÃªn Ä‘á»“ng bá»™ %s thÃ nh cÃ´ng: %d hÃ³a Ä‘Æ¡n má»›i, %d hÃ³a Ä‘Æ¡n trÃ¹ng.uP   â�Œ [AUTO-SYNC] Ngoáº¡i lá»‡ báº¥t ngá»� khi Ä‘á»“ng bá»™ tá»± Ä‘á»™ng %s: %s
%sÚ	exceptionú
u    Lá»—i há»‡ thá»‘ng báº¥t ngá»�: )r^   r_   ra   é2   )r   r3   ÚstrftimeÚloggerÚinfoÚ	isoformatr   r   Úrun_gdt_tax_syncrY   Úlenr   r   ÚwarningÚsend_sync_failure_alertÚ	ExceptionÚ	tracebackÚ
format_excr   rS   r   Úinsert)r   rA   rC   rE   rJ   r^   Úhistory_entryÚto_date_strÚfrom_date_strÚsync_resrK   rT   Ú	total_duprV   Úfailed_connectorsÚ	has_errorÚ	error_msgÚalert_successÚexcÚstackÚerr_strs                        r    Úexecute_scheduled_syncz6InvoiceAutoSyncSchedulerService.execute_scheduled_syncJ   s°  è è € õ "œ™œˆØ!ÐE ^×%<Ò%<¸WÑ%EÔ%Eˆ
Ý�ŠØyØñ	
ô 	
ð 	
ð -×6Ò6Ñ8Ô8Ø&ØØØØØ!Øð	)
ð 	)
ˆðQ	8à(×1Ò1°*Ñ=Ô=ˆKØ+­i¸RÐ.@Ñ.@Ô.@Ñ@×JÒJÈ:ÑVÔVˆMàÔ,×=Ò=Ø'Ø#Ø#ð >ñ ô ˆHð —\’\ (¨GÑ4Ô4ˆFØ Ÿš [°!Ñ4Ô4ˆIØ ŸšÐ%7¸Ñ;Ô;ˆIØ!Ÿš l°BÑ7Ô7ˆJð!ð !Ø%ð!ñ !ô !Ðð  Ð'DÐDð ÝÐ%Ñ&Ô&¨Ò*ð ð '-ˆM˜(Ñ#Ø,5ˆM˜.Ñ)Ø*3ˆM˜,Ñ'Ø,4ˆM˜.Ñ)à"0ˆDÔØ$*ˆDÔ!àð à—L’L Ñ+Ô+ÐaÐ/að ð 2;�˜oÑ.Ý—’Ø\ØØñô ð ð '+×&BÒ&BØ)Ø"+Ø)Ø"*ð	 'Cñ 'ô 'ð !ð !ð !ð !ð !ð !�ð /<�˜lÑ+Ð+õ —’ØuØØØñ	ô ð øøõ ð 	8ð 	8ð 	8ÝÔ(Ñ*Ô*ˆEÝ˜#‘h”hˆGÝ�LŠLØcØØØñ	ô ð ð '2ˆM˜(Ñ#Ø07Ð-BÐ-B¸5Ð-BÐ-BˆM˜/Ñ*Ø"0ˆDÔØ$/ˆDÔ!à"&×">Ò">Ø%ØJÀÐJÐJØð #?ñ #ô #ð ð ð ð ð ð ˆMð
 +8ˆM˜,Ñ'Ð'Ð'Ð'Ð'Ð'øøøøð)	8øøøð. 	Ô×&Ò& q¨-Ñ8Ô8Ð8ÝˆtÔ&Ñ'Ô'¨"Ò,Ð,Ø&*Ô&=¸c¸r¸cÔ&BˆDÔ#àÐs   Á&E1G Ç
I.Ç"BI)É)I.r^   r_   rV   úlist[dict[str, Any]] | Noner`   údict[str, Any] | Nonera   úException | Nonec              ƒ  óÚ  K  — t          j        ¦   «                              d¦  «        }|rt          j        ¦   «         nd}d}|r¯|D ]«}	t          |	                     dd¦  «        ¦  «                             ¦   «         }
t          |	                     dd¦  «        ¦  «                             ¦   «         }t          |	                     dd¦  «        ¦  «        }|d	k    rd
nd}|d|
› d|› d|› d|› d�	z  }Œ¬nd|› d�}d}|r|dk    rd|› d�}d|› d|› d|› d|› d|› d�}d|› d|› �}	 t          j	        | j
        ||dd¬ ¦  «        ƒ d!{V —†}|                     d"d#¦  «        }|r!t                               d$| j
        ¦  «         n.t                               d%|                     d&¦  «        ¦  «         	 d'd(lm}  |¦   «         }|rC|                     ¦   «         r/d)|› d*|› d+|› d,| j
        › d-�	}|                     |¦  «        ƒ d!{V —† n2# t$          $ r%}t                               d.|¦  «         Y d!}~nd!}~ww xY w|S # t$          $ r&}t                               d/|¦  «         Y d!}~d#S d!}~ww xY w)0uw   Gá»­i email cáº£nh bÃ¡o sá»± cá»‘ Ä‘á»“ng bá»™ hÃ³a Ä‘Æ¡n vá»� hÃ²m thÆ° cáº¥u hÃ¬nh (contact@dinhsonconstruction.com).z%d/%m/%Y %H:%M:%SÚ ÚserviceÚUnknownrK   Úunknownr]   zN/AÚSUCCESSz#4ade80z#f87171zŽ
                <tr>
                    <td style="padding: 8px 12px; border-bottom: 1px solid #334155; color: #38bdf8; font-weight: bold;">za</td>
                    <td style="padding: 8px 12px; border-bottom: 1px solid #334155; color: z; font-weight: bold;">z|</td>
                    <td style="padding: 8px 12px; border-bottom: 1px solid #334155; color: #cbd5e1; font-size: 12px;">z,</td>
                </tr>
                z”
            <tr>
                <td colspan="3" style="padding: 8px 12px; border-bottom: 1px solid #334155; color: #f87171;">
                    z5
                </td>
            </tr>
            zNoneType: None
u¡  
            <div style="background-color: #0f172a; padding: 12px; border-radius: 6px; border-left: 4px solid #ef4444; margin-top: 14px;">
                <h4 style="margin: 0 0 6px 0; color: #cbd5e1; font-size: 13px;">Chi tiáº¿t lá»—i há»‡ thá»‘ng (Stack Trace):</h4>
                <pre style="color: #fca5a5; font-size: 11px; overflow-x: auto; white-space: pre-wrap; font-family: Consolas, monospace; margin: 0;">z&</pre>
            </div>
            u4  
        <div style="background-color: #0b0f19; color: #f8fafc; padding: 24px; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; border-radius: 8px; max-width: 680px; margin: 0 auto; border: 1px solid #1e293b;">
            <div style="border-bottom: 1px solid #334155; padding-bottom: 14px; margin-bottom: 16px;">
                <h2 style="color: #ef4444; margin: 0; font-size: 18px; display: flex; align-items: center;">
                    ðŸš¨ [DSCons ERP Alert] Sá»± Cá»‘ Ä�á»“ng Bá»™ HÃ³a Ä�Æ¡n Ä�á»‹nh Ká»³ (uÚ   )
                </h2>
            </div>
            
            <p style="margin: 4px 0; color: #cbd5e1; font-size: 13px;">
                <strong>Thá»�i Ä‘iá»ƒm ghi nháº­n:</strong> <span style="color: #f8fafc;">u  </span>
            </p>
            <p style="margin: 4px 0; color: #cbd5e1; font-size: 13px;">
                <strong>Khung giá»� cháº¡y tá»± Ä‘á»™ng:</strong> <span style="background: #1e293b; padding: 2px 8px; border-radius: 4px; color: #38bdf8; font-weight: bold;">uû  </span> (Lá»‹ch cá»‘ Ä‘á»‹nh: 01:00, 05:00, 09:00, 13:00, 17:00, 21:00)
            </p>
            <p style="margin: 4px 0; color: #cbd5e1; font-size: 13px;">
                <strong>MÃ£ Sá»‘ Thuáº¿ Ä�Æ¡n Vá»‹:</strong> <span style="color: #fbbf24; font-weight: bold;">0202111150 (CÃ´ng ty TNHH XÃ¢y Dá»±ng Ä�á»‹nh SÆ¡n)</span>
            </p>

            <div style="margin-top: 16px;">
                <h4 style="margin: 0 0 8px 0; color: #94a3b8; font-size: 13px; text-transform: uppercase; letter-spacing: 0.5px;">
                    Chi Tiáº¿t Tráº¡ng ThÃ¡i Káº¿t Ná»‘i Ä�á»“ng Bá»™
                </h4>
                <table style="width: 100%; border-collapse: collapse; background: #1e293b; border-radius: 6px; overflow: hidden; font-size: 13px;">
                    <thead>
                        <tr style="background: #334155; text-align: left; color: #94a3b8;">
                            <th style="padding: 8px 12px; font-size: 12px;">Dá»‹ch vá»¥</th>
                            <th style="padding: 8px 12px; font-size: 12px;">Tráº¡ng thÃ¡i</th>
                            <th style="padding: 8px 12px; font-size: 12px;">ThÃ´ng bÃ¡o</th>
                        </tr>
                    </thead>
                    <tbody>
                        zW
                    </tbody>
                </table>
            </div>

            u  

            <div style="background-color: #1e293b; padding: 14px; border-radius: 6px; margin-top: 18px; border-left: 4px solid #38bdf8;">
                <h4 style="margin: 0 0 6px 0; color: #38bdf8; font-size: 13px;">ðŸ“Œ Khuyáº¿n Nghá»‹ HÃ nh Ä�á»™ng Cho Káº¿ ToÃ¡n / Quáº£n Trá»‹ ViÃªn:</h4>
                <ul style="margin: 0; padding-left: 20px; color: #cbd5e1; font-size: 12px; line-height: 1.6;">
                    <li>Kiá»ƒm tra láº¡i thÃ´ng tin tÃ i khoáº£n, máº­t kháº©u Cá»•ng HÄ�Ä�T Tá»•ng Cá»¥c Thuáº¿ trÃªn há»‡ thá»‘ng DSCons ERP.</li>
                    <li>Ä�áº£m báº£o dá»‹ch vá»¥ máº¡ng vÃ  hÃ²m thÆ° nháº­n hÃ³a Ä‘Æ¡n (IMAP) khÃ´ng bá»‹ khÃ³a hoáº·c Ä‘á»•i máº­t kháº©u á»©ng dá»¥ng.</li>
                    <li>Truy cáº­p má»¥c <strong>Quáº£n lÃ½ HÃ³a Ä�Æ¡n &rarr; Cáº¥u hÃ¬nh Káº¿t ná»‘i</strong> trÃªn DSCons ERP Ä‘á»ƒ kiá»ƒm tra trá»±c tiáº¿p.</li>
                </ul>
            </div>

            <hr style="border: none; border-top: 1px solid #334155; margin: 20px 0 14px 0;" />
            <p style="font-size: 11px; color: #64748b; margin: 0; text-align: center;">
                Há»‡ Thá»‘ng Láº­p Lá»‹ch Tá»± Ä�á»™ng & GiÃ¡m SÃ¡t HÃ³a Ä�Æ¡n - CÃ´ng Ty TNHH XÃ¢y Dá»±ng Ä�á»‹nh SÆ¡n (MST: 0202111150).
            </p>
        </div>
        uQ   ðŸš¨ [DSCons ERP Alert] Lá»—i Ä�á»“ng Bá»™ HÃ³a Ä�Æ¡n Tá»± Ä�á»™ng Ä�á»‹nh Ká»³ (z) - u$   Ban Quáº£n Trá»‹ & Káº¿ ToÃ¡n DSConsz DSCons Auto Invoice Sync Monitor)Úrecipient_emailÚsubjectÚhtml_contentÚrecipient_nameÚsender_nameNrX   FuM   ðŸ“§ [AUTO-SYNC] Ä�Ã£ gá»­i email cáº£nh bÃ¡o sá»± cá»‘ thÃ nh cÃ´ng tá»›i %suE   âš ï¸� [AUTO-SYNC] KhÃ´ng thá»ƒ gá»­i email cáº£nh bÃ¡o qua Brevo: %srS   r   )Úget_telegram_serviceuS   ðŸš¨ *[DSCons ERP - Lá»—i Ä�á»“ng Bá»™ HÃ³a Ä�Æ¡n Ä�á»‹nh Ká»³]*
â�° Khung giá»�: `z` (u   )
âš ï¸� Chi tiáº¿t: `u.   `
ðŸ“§ Ä�Ã£ gá»­i bÃ¡o cÃ¡o chi tiáº¿t vá»�: `ú`z#Telegram alert skipped or error: %su5   â�Œ [AUTO-SYNC] Lá»—i khi gá»­i email cáº£nh bÃ¡o: %s)r   r3   rd   rm   rn   r   rY   Úupperr   Ú
send_emailr   re   rf   rj   Ú5app.modules.integrations.application.telegram_servicer‹   Úis_configuredÚsend_messagerl   ÚdebugrS   )r   r^   r_   rV   r`   ra   Útime_strÚstack_traceÚconnector_rowsrZ   ÚsrvÚstÚmsgÚcolorÚstack_sectionrˆ   r‡   ÚresÚ
is_successr‹   ÚtgÚtg_msgÚtg_errÚmail_errs                           r    rk   z7InvoiceAutoSyncSchedulerService.send_sync_failure_alert½   s	  è è € õ ”<‘>”>×*Ò*Ð+>Ñ?Ô?ˆØ09ÐA•iÔ*Ñ,Ô,Ð,¸rˆð ˆØð 	Øð ð �Ý˜!Ÿ%š% 	¨9Ñ5Ô5Ñ6Ô6×<Ò<Ñ>Ô>�Ý˜Ÿš˜x¨Ñ3Ô3Ñ4Ô4×:Ò:Ñ<Ô<�Ý˜!Ÿ%š% 	¨5Ñ1Ô1Ñ2Ô2�Ø%'¨9¢_ _˜	˜	¸)�Øð #ày|ð#ð #ð ]bð#ð #ð z|ð#ð #ð x{ð	#ð #ð #ñ ��ððð #ðð ð ˆNð ˆØð 	˜;Ð*<Ò<Ð<ðð Vaðð ð ˆMð4ð ^hð	4ð 4ð \dð4ð 4ð pzð4ð 4ð> (ð?4ð 4ðH ðI4ð 4ð 4ˆðl AÐfpð  Að  AÐv~ð  Að  Aˆð'	Ý)Ô4Ø $Ô 1ØØ)ØEØ>ðñ ô ð ð ð ð ð ð ˆCð Ÿš ¨EÑ2Ô2ˆJØð 	Ý—’ØcØÔ%ñô ð ð õ
 —’Ø[Ø—G’G˜GÑ$Ô$ñô ð ðLØfÐfÐfÐfÐfÐfà)Ð)Ñ+Ô+�Øð 2˜"×*Ò*Ñ,Ô,ð 2ð\Ø-7ð\ð \Ø<Dð\ð \à/<ð\ð \ð HLÔGXð\ð \ð \ð ð Ÿ/š/¨&Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1øøÝð Lð Lð LÝ—’ÐBÀFÑKÔKÐKÐKÐKÐKÐKÐKøøøøðLøøøð ÐøÝð 	ð 	ð 	Ý�LŠLÐPÐRZÑ[Ô[Ð[Ø�5�5�5�5�5øøøøð	øøøsD   Ä$BH: Æ0AH ÈH: È
H5ÈH0È+H: È0H5È5H: È:
I*ÉI%É%I*c                óN  — |                       ¦   «         \  }}| j        t          d„ t          D ¦   «         | j        |                     ¦   «         t          |d¦  «        | j        r| j                             ¦   «         nd| j        t          | j	        ¦  «        | j	        dd…         dœ
S )ua   Láº¥y thÃ´ng tin tráº¡ng thÃ¡i láº­p lá»‹ch hiá»‡n táº¡i vÃ  lá»‹ch sá»­ cÃ¡c láº§n Ä‘á»“ng bá»™.c                ó   — g | ]}|d ›d�‘Œ	S )Ú02dú:00© ©r1   r2   s     r    r5   z>InvoiceAutoSyncSchedulerService.get_status.<locals>.<listcomp>Q  s    € ÐGÐGÐG°! 1    ÐGÐGÐGr"   r
   Né
   )
Ú
is_runningr(   Úscheduled_slotsÚalert_recipient_emailÚnext_run_atÚseconds_until_next_runÚlast_run_atÚlast_run_statusÚhistory_countÚrecent_history)
r?   r   r'   r   rg   Úroundr   r   ri   r   )r   r<   r>   s      r    Ú
get_statusz*InvoiceAutoSyncSchedulerService.get_statusK  s¨   € à"&×"9Ò"9Ñ";Ô";Ñˆ�-àÔ*Ý.ØGÐGµÐGÑGÔGØ%)Ô%6Ø#×-Ò-Ñ/Ô/Ý&+¨M¸1Ñ&=Ô&=àÔ"ð˜4Ô.×8Ò8Ñ:Ô:Ð:àØ#Ô4Ý  Ô!8Ñ9Ô9Ø"Ô5°c°r°cÔ:ð
ð 
ð 	
r"   )r   r   r   r   r   r   )r   r#   r%   )r)   r*   r   r+   )NFr@   )rA   rB   rC   rD   rE   r   r   rF   )NNN)r^   r   r_   r   rV   r}   r`   r~   ra   r   r   rD   )r   rF   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚINVOICE_SYNC_ALERT_RECIPIENTr!   Úpropertyr(   r?   r|   rk   r²   r¥   r"   r    r   r      sâ   € € € € € ØnÐnð <@Ø7ð
1ð 
1ð 
1ð 
1ð 
1ð ð%ð %ð %ñ „Xð%ð /3ð'ð 'ð 'ð 'ð 'ð8 $(ØØð	qð qð qð qð qðn 37Ø/3Ø&*ðLð Lð Lð Lð Lð\
ð 
ð 
ð 
ð 
ð 
r"   r   z&InvoiceAutoSyncSchedulerService | NoneÚ_invoice_auto_sync_instancer   c                 ó:   — t           €t          ¦   «         a t           S )z6Singleton factory cho InvoiceAutoSyncSchedulerService.)r¹   r   r¥   r"   r    Úget_invoice_auto_sync_servicer»   a  s   € õ #Ð*Ý&EÑ&GÔ&GÐ#Ý&Ð&r"   r   c               ƒ  ó   K  — t          ¦   «         } d| _        t                               dd                     d„ t
          D ¦   «         ¦  «        ¦  «         	 	 |                      ¦   «         \  }}t                               d|                     d¦  «        t          |¦  «        ¦  «         t          j
        |¦  «        ƒ d{V —† |                     d¦  «        }|                      |¬	¦  «        ƒ d{V —† t          j
        d
¦  «        ƒ d{V —† n~# t          j        $ r% d| _        t                               d¦  «         Y dS t          $ r?}t                               d|¦  «         t          j
        d¦  «        ƒ d{V —† Y d}~nd}~ww xY w�Œ:)u­   VÃ²ng láº·p cháº¡y ná»�n cá»§a Invoice Auto-Sync Scheduler.

    Tá»± Ä‘á»™ng kÃ­ch hoáº¡t Ä‘Ãºng cÃ¡c má»‘c giá»� 01:00, 05:00, 09:00, 13:00, 17:00, 21:00 má»—i ngÃ y.
    Tua   â�° [DSCons] Invoice Auto-Sync Scheduler Loop Ä‘Ã£ khá»Ÿi Ä‘á»™ng. Lá»‹ch cháº¡y: %s hÃ ng ngÃ y.z, c              3  ó"   K  — | ]
}|d ›d�V — ŒdS )r£   r¤   Nr¥   r¦   s     r    ú	<genexpr>z9start_invoice_auto_sync_scheduler_loop.<locals>.<genexpr>r  s*   è è € Ð9Ð9 A�Q�-�-�-�-Ð9Ð9Ð9Ð9Ð9Ð9r"   uN   â�³ [AUTO-SYNC] Ä�ang chá»� phiÃªn káº¿ tiáº¿p vÃ o lÃºc %s (cÃ²n %d giÃ¢y)...z%Y-%m-%d %H:%M:%SNrH   )rA   é   FuJ   ðŸ›‘ [AUTO-SYNC] Invoice Auto-Sync Scheduler Loop Ä‘Ã£ dá»«ng (Cancelled).u/   â�Œ [AUTO-SYNC] Lá»—i vÃ²ng láº·p Scheduler: %srP   )r»   r   re   rf   Újoinr'   r?   rd   ÚintÚasyncioÚsleepr|   ÚCancelledErrorrl   rS   )r‚   r<   r>   rA   Úerrs        r    Ú&start_invoice_auto_sync_scheduler_looprÆ   i  sÚ  è è € õ
 ,Ñ-Ô-€GØ€GÔÝ
‡K‚KØkØ�	Š	Ð9Ð9­Ð9Ñ9Ô9Ñ9Ô9ñô ð ð
$ð	$Ø&-×&@Ò&@Ñ&BÔ&BÑ#ˆH�mÝ�KŠKØ`Ø×!Ò!Ð"5Ñ6Ô6Ý�MÑ"Ô"ñô ð õ ”- Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ð $×,Ò,¨WÑ5Ô5ˆLØ×0Ò0¸lÐ0ÑKÔKÐKÐKÐKÐKÐKÐKÐKõ ”- Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"øåÔ%ð 	ð 	ð 	Ø"'ˆGÔÝ�KŠKØ\ñô ð ð ˆEˆEÝð 	$ð 	$ð 	$Ý�LŠLÐJÈCÑPÔPÐPÝ”- Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#Ð#øøøøð	$øøøñ3$s   ÁB8D Ä0FÅ	FÅ5FÆF)r   r   )r   r   )Ú
__future__r   rÂ   ÚloggingÚosrm   r   r   Útypingr   Ú*app.modules.core.application.alert_servicer   Ú(app.modules.invoices.application.servicer   Ú	getLoggerre   Úgetenvr·   r'   r   r¹   Ú__annotations__r»   rÆ   r¥   r"   r    ú<module>rÐ      sI  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "ðð €€€Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð à HÐ HÐ HÐ HÐ HÐ HØ MÐ MÐ MÐ MÐ MÐ Mà	ˆÔ	Ð5Ñ	6Ô	6€à(˜rœyØÐ Añ ô  Ð ð (Ð'Ð'€ð~
ð ~
ð ~
ð ~
ð ~
ñ ~
ô ~
ð ~
ðB
 GKÐ Ð JÐ JÐ JÑ Jð'ð 'ð 'ð 'ð'$ð '$ð '$ð '$ð '$ð '$r"   