+
    |w¼jI  ã                   óÐ   € R t ^ RIHt ^ RIHtHt ^ RIHt ^ RIHtH	t	H
t
 ^ RIHtHt ^ RIHt ] ! R R4      4       tR	R
RR
RR
/R R lltR R ltR R ltR R ltRR R lltR
# )zßOrchestration boundary for OLT discovery and MikroTik PPPoE provisioning.

Hardware is never contacted by default.  Callers must inject explicit adapters;
MockOLTAdapter/MockMikrotikAdapter are safe in-memory alternatives.
)Ú	dataclass)ÚdatetimeÚtimezone)ÚCustomer)Úget_olt_adapterÚUnsupportedOLTErrorÚONTNotFoundError)ÚMikrotikAdapterÚMikrotikProvisioningError)Údecrypt_pppoe_passwordc                   ó,   a € ] tR t^t o V 3R ltRtV tR# )ÚProvisioningResultc                ó>   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[ ;R&   # )é   Úmikrotik_statusÚ
olt_statusÚmessage)Ústr)ÚformatÚ__classdict__s   "€Ú./var/www/html/bestweb/app/core/provisioning.pyÚ__annotate__ÚProvisioningResult.__annotate__   s(   ø‡ ‚ áÑñ ñ �Oñ ñ �Lò	 ó    © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__)r   s   @r   r   r      s   ø‡ ‡ „ r   r   Úolt_adapterNÚmikrotik_adapterÚused_onu_idsc                óz   € V ^8„  d   QhR\         R\        R,          R\        \        ,          R,          R\        /# )r   Úcustomerr#   Nr$   Úreturn)r   r	   ÚsetÚintr   )r   s   "r   r   r      sE   € ÷ >Oñ >OÜð>Oô &¨Õ,ð	>Oô
 ”c•(˜T•/ð>Oô ñ>Or   c          	   ƒ  ó€  "  € . pV P                   '       g   VP                  R4       V P                  '       g   VP                  R4       V'       d>   \        RV9   d   RMRRV9   d   RMRRRP	                  V4      ,           R,           R7      # VfF   V P
                  '       g   V P                  '       d"    \        V P
                  V P                  4       R
p. pVe×    VP                  V P                  4      pVP                  V n        VP                  V n        V P                  f"   VP!                  VP                  V4      V n        VP"                  P$                  P'                  R4      '       d   RMRpVP                  RVP                   RVP                   RV P                   R24       MVP                  R4       R
p	Ve¼   V P.                  '       d   V P0                  '       g   \        RVR4      #  VP3                  V P.                  \5        V P0                  4      V P6                  4       VP"                  P$                  P'                  R4      '       d   RMRp	VP                  RV P.                   R24       MVP                  R4       \        W–RP	                  V4      4      #   \         d!   p\        R
R\        T4      4      u R	p?# R	p?ii ; i  \(        \*        \,        3 d   p\        R
RRT 24      u R	p?# R	p?ii ; i  \8         d   p\        RTRT 24      u R	p?# R	p?ii ; i5i)a   Discover/prepare both targets without implying hardware success.

``olt_adapter`` and ``mikrotik_adapter`` are explicit dependencies.  With
neither supplied this function only validates configuration and reports
``not_configured``; it does not queue a false success or open a connection.
zuser MikroTikzSN ONTÚblockedÚpendingzData belum lengkap: z, Ú.)r   r   r   NÚnot_configuredÚunsupportedÚMockÚ	simulatedÚ
discoveredzONT ditemukan: z pada port z	, ONU ID ÚfailedzDiscovery OLT gagal: zAAdapter OLT hardware belum diberikan; discovery tidak dijalankan.z1Username dan password PPPoE wajib untuk MikroTik.ÚprovisionedzSecret PPPoE z dibuat/diperbarui.zProvisioning MikroTik gagal: zFAdapter MikroTik hardware belum diberikan; secret PPPoE tidak dikirim.Ú )Úmikrotik_userÚappendÚont_snr   ÚjoinÚ
olt_vendorÚ	olt_modelr   r   r   Údiscover_ontÚbrandÚ	ont_brandÚportÚolt_portÚonu_idÚallocate_onu_idÚ	__class__r   Ú
startswithr   Ú
ValueErrorÚRuntimeErrorÚpppoe_usernameÚpppoe_passwordÚupsert_pppoe_secretr   Úservice_profiler
   )
r&   r"   r#   r$   ÚmissingÚexcr   ÚmessagesÚ	discoveryr   s
   &$$$      r   Úprovision_customerrO      s×  é € ð €GØ×!×!Ð!Ø�‰�Ô'Ø�?�?ˆ?Ø�‰�xÔ ßÜ!Ø)8¸GÔ)C™IÈØ$,°Ô$7‘y¸YØ*¨T¯Y©Y°wÓ-?Õ?À#ÕEô
ð 	
ð Ò × 3× 3Ð 3°x×7I×7IÐ7Ið	QÜ˜H×/Ñ/°×1CÑ1CÔDð "€JØ€HØÒð		aØ#×0Ñ0°·±ÓAˆIØ!*§¡ˆHÔØ )§¡ˆHÔØ�‰Ò&Ø"-×"=Ñ"=¸i¿n¹nÈlÓ"[�”Ø(3×(=Ñ(=×(FÑ(F×(QÑ(QÐRX×(YÒ(Y™Ð_kˆJØ�O‰O˜o¨i¯o©oÐ->¸kÈ)Ï.É.ÐIYÐYbÐck×crÑcrÐbsÐstÐuÕvð 	�‰Ð[Ô\à&€OØÒ#Ø×&×&Ð&¨h×.E×.EÐ.EÜ% i°Ð=pÓqÐqð	cØ×0Ñ0Ø×'Ñ'Ô)?À×@WÑ@WÓ)XÐZb×ZrÑZrôð .>×-GÑ-G×-PÑ-P×-[Ñ-[Ð\b×-cÒ-c™kÐivˆOØ�O‰O˜m¨H×,CÑ,CÐ+DÐDWÐXÕYð 	�‰Ð`Ôaä˜o¸3¿8¹8ÀHÓ;MÓNÐNøôE #ô 	QÜ%Ð&6¸ÄsÈ3ÃxÓPÕPûð	Qûô !¤*¬lÐ;ô 	aÜ%Ð&6¸ÐDYÐZ]ÐY^ÐB_Ó`Õ`ûð	aûô )ô 	cÜ% h°
Ð>[Ð\_Ð[`Ð<aÓbÕbûð	cüs»   ‚7L>ºL>ÁAL>Â&L>Â9 J5 ÃL>Ã"BK# Å9=K# Æ6)L>Ç L>Ç2L>È BL Ê-L>Ê5K Ë KËK ËL>ËK Ë L>Ë#LË9LÌLÌ	L>ÌLÌL>ÌL;Ì!L6Ì0L;Ì1L>Ì6L;Ì;L>c                ó@   € V ^8„  d   QhR\         R\        R\        RR/# )r   r&   ÚadapterÚenabledr'   N)r   r	   Úbool)r   s   "r   r   r   W   s0   € ÷ Gñ G¬(ð G¼_ð GÔW[ð GÐ`dñ Gr   c                 óx   € V P                   '       g   \        R 4      hVP                  V P                   V4       R# )zUsername PPPoE belum diisiN)rG   r
   Úset_pppoe_secret_enabled)r&   rQ   rR   s   &&&r   Ú_set_customer_pppoe_enabledrV   W   s0   € Ø×"×"Ð"Ü'Ð(DÓEÐEØ×$Ñ$ X×%<Ñ%<¸gÖFr   c                ó4   € V ^8„  d   QhR\         R\        RR/# ©r   r&   rQ   r'   N©r   r	   )r   s   "r   r   r   ]   s&   € ÷ [ñ [¤Xð [¼ð [ÈDñ [r   c                ó:   € \        WR4       RV n        RV n        R# )z4Suspend only through an explicitly supplied adapter.FÚ	suspendedz4Secret PPPoE dinonaktifkan melalui adapter MikroTik.N©rV   ÚstatusÚprovisioning_message©r&   rQ   s   &&r   Úsuspend_customer_pppoer`   ]   s   € ä °5Ô9Ø!€H„OØ$Z€HÖ!r   c                ó4   € V ^8„  d   QhR\         R\        RR/# rX   rY   )r   s   "r   r   r   d   s&   € ÷ `ñ `¤xð `¼/ð `Èdñ `r   c                 ó:   € \        WR 4       RV n        RV n        R# )TÚactivez9Secret PPPoE diaktifkan kembali melalui adapter MikroTik.Nr\   r_   s   &&r   Úunsuspend_customer_pppoerd   d   s   € Ü °4Ô8Ø€H„OØ$_€HÖ!r   c                óN   € V ^8„  d   QhR\         R\        R\        R,          RR/# )r   r&   Údbr   Nr'   )r   ÚAsyncSessionr   )r   s   "r   r   r   j   s.   € ÷ 	ñ 	¤Xð 	´<ð 	Ì#ÐPTÍ*ð 	Ð`dñ 	r   c              ƒ  óè   "  € RV n         RV n        RV n        V'       d   W n        \        P
                  ! \        P                  4      V n        RV n	        VP                  4       G Rj  x€L
  R#  L5i)z@Use only after real adapters independently confirm both targets.r4   rc   N)Úprovisioning_statusÚmikrotik_provisioning_statusÚolt_provisioning_statusr^   r   Únowr   ÚutcÚprovisioned_atr]   Úcommit)r&   rf   r   s   &&&r   Úmark_provisionedrp   j   sQ   é € à#0€HÔ Ø,9€HÔ)Ø'4€HÔ$ßØ(/Ô%Ü&Ÿlšl¬8¯<©<Ó8€HÔØ€H„OØ
�)‰)‹+×Ôùs   ‚A'A2Á)A0Á*A2)N)Ú__doc__Údataclassesr   r   r   Úapp.models.modelsr   Úapp.core.olt_adaptersr   r   r   Úapp.core.mikrotikr	   r
   Úapp.core.customer_identityr   r   rO   rV   r`   rd   rp   r   r   r   Ú<module>rw      s~   ðñõ
 "ß 'å &ß XÑ Xß HÝ =ð ÷ð ó ðð>Oð ð>Oð 04ð	>Oð
 %)÷>OõBGõ[õ`÷	ñ 	r   