+
    |w¼j   ã            	       ó  € ^ RI H t HtHt ^ RIHtHtHtHt ^ RIH	t	H
t
 ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHtHtHt ^ RIHt ^ RIHt ^ RIHt ^ RI t ]! ]! ]! R4      4      .R7      t!] PD                  PG                  ] PD                  PG                  ] PD                  PG                  ] PD                  PI                  ]%4      4      4      4      t&]! ] PD                  PO                  ]&R4      R7      t(R R lt)]!PU                  R]	R7      ]! ]4      3R R ll4       t+]!PY                  R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! ]4      3R R ll4       t-]!PY                  R4      ]! R4      ]! ]4      3R  R! ll4       t.]!PY                  R"4      ]! R#4      ]! R4      ]! ]4      3R$ R% ll4       t/]!PY                  R&4      ]! ]4      3R' R( ll4       t0]!PY                  R)4      ]! ]4      3R* R+ ll4       t1R# ),é    )ÚdatetimeÚtimezoneÚ	timedelta)Ú	APIRouterÚRequestÚFormÚDepends)ÚHTMLResponseÚRedirectResponse)ÚJinja2Templates)ÚAsyncSession)Úselect)Úselectinload)Úget_db)Úrequire_roles)ÚCustomerÚInvoiceÚPayment)ÚMikrotikConfig)Úsync_customer_access)Úencrypt_secretNÚadmin_cs)Údependencieszapp/templates)Ú	directoryc                ó0   € V ^8„  d   QhR\         R\        /# )é   ÚperiodÚreturn)Ústrr   )Úformats   "Ú+/var/www/html/bestweb/app/routes/billing.pyÚ__annotate__r"      s   € ÷ :ñ :”sð :œxñ :ó    c                 ón   € R  V P                  R4       4       w  r\        W^
\        P                  R7      # )c              3   ó8   "  € T F  p\        V4      x € K  	  R # 5i)N)Úint)Ú.0Úxs   & r!   Ú	<genexpr>Úperiod_due.<locals>.<genexpr>   s   é € Ð5Ñ#4˜a”3�q—6�6Ó#4ùs   ‚Ú-©Útzinfo)Úsplitr   r   Úutc)r   ÚyearÚmonths   &  r!   Ú
period_duer2      s*   € Ù5 6§<¡<°Ô#4Ó5�K€DÜ�D ¬H¯L©LÔ9Ð9r#   ú/billing)Úresponse_classc                ó0   € V ^8„  d   QhR\         R\        /# )r   ÚrequestÚdb)r   r   )r    s   "r!   r"   r"      s   € ÷ Gñ G¤ð G¬\ñ Gr#   c              ƒ   ó0  "  € VP                  \        \        4      P                  \	        \        P
                  4      4      P                  \        P                  P                  4       \        P                  P                  4       4      4      G R j  x€L
 P                  4       P                  4       pVP                  \        \        4      P                  ^4      4      G R j  x€L
 P                  4       p\        P!                  V RRVRV/R7      #  L L05i)Nzbilling.htmlÚinvoicesÚmikrotik_config)r6   ÚnameÚcontext)Úexecuter   r   Úoptionsr   ÚcustomerÚorder_byÚdue_dateÚdescÚidÚscalarsÚallr   ÚlimitÚscalar_one_or_noneÚ	templatesÚTemplateResponse)r6   r7   r9   Úconfigs   &&  r!   Úbilling_pagerK      s  é € à—j‘j¤¬£×!8Ñ!8¼Äg×FVÑFVÓ9WÓ!X×!aÑ!aÔbi×brÑbr×bwÑbwÓbyô  |C÷  |Fñ  |F÷  |Kñ  |Kó  |Mó  "Nó  O÷  O÷  Xñ  Xó  Z÷  ^ñ  ^ó  `€HØ—J‘Jœv¤nÓ5×;Ñ;¸AÓ>Ó?×?×SÑSÓU€FÜ×%Ñ%¨g¸NÐU_ÐaiÐk|ð  Eð  UFÐ%ó  Gð  Gñ OÙ?ùs%   ‚BDÂDÂADÃ#DÃ$/DÄDz/billing/mikrotik.Ú i"  c          
      óT   € V ^8„  d   QhR\         R\         R\         R\        R\        /# )r   ÚhostÚusernameÚpasswordÚapi_portr7   )r   r&   r   )r    s   "r!   r"   r"   "   s;   € ÷ Jñ JÜ
ðJÜ%(ðJÜ@CðJäðJä$0ñJr#   c           
   ƒ  óÌ  "  € V P                  4       '       d(   VP                  4       '       d   ^Tu;8:  d   R8:  g   M \        RRR7      # VP                  \        \        4      P                  ^4      4      G Rj  x€L
 P                  4       pV'       dL   V P                  4       VP                  4       VuVn        Vn        Vn	        V'       d   \        V4      Vn        MXV'       g   \        RRR7      # VP                  \	        V P                  4       VP                  4       V\        V4      R7      4       VP                  4       G Rj  x€L
  \        RRR7      #  Lâ L5i)zIConfigure the RouterOS target from Billing; no second application needed.iÿÿ  z/billing?config_error=1é/  ©ÚurlÚstatus_codeN)rN   rO   rQ   rP   z/billing?configured=1)Ústripr   r=   r   r   rF   rG   rN   rO   rQ   r   rP   ÚaddÚcommit)rN   rO   rP   rQ   r7   rJ   s   &&&&& r!   Úsave_billing_mikrotikrZ   !   s  é € ð �:‰:�<Š<˜xŸ~™~×/Ò/°q¸HÖ7MÈÖ7MÜÐ$=È3ÔOÐOØ—J‘Jœv¤nÓ5×;Ñ;¸AÓ>Ó?×?×SÑSÓU€FßØ8<¿
¹
»ÀhÇnÁnÓFVÐX`Ð5ˆŒ�V”_ f¤oßÜ,¨XÓ6ˆFŒOøçÜ#Ð(AÈsÔSÐSØ
�‰Œ~ 4§:¡:£<¸(¿.¹.Ó:JÐU]ÔhvÐwó  iAô  Bô  	CØ
�)‰)‹+×ÐÜÐ 7ÀSÔIÐIñ @ñ ùs7   ‚,E$¯AE$Á=E Á>E$ÂAE$Ã+A#E$ÅE"ÅE$Å"E$z/billing/generatec                ó0   € V ^8„  d   QhR\         R\        /# )r   r   r7   )r   r   )r    s   "r!   r"   r"   7   s   € ÷ 
Pñ 
P¤3ð 
P¼ñ 
Pr#   c           
   ƒ   ó¸  "  € \        V 4      pVP                  \        \        4      P	                  \        P
                  R 8H  4      4      G Rj  x€L
 P                  4       P                  4       p^ pV F³  pVP                  \        \        4      P	                  \        P                  VP                  8H  \        P                  V 8H  4      4      G Rj  x€L
 pV'       d   Ko  TP                  \        VP                  YP                  ;'       g    ^ VR7      4       V^,          pKµ  	  VP                  4       G Rj  x€L
  \!        RV 2RR7      #  EL L� L5i)Úbulanan_pppN)Úcustomer_idr   ÚamountrA   z/billing?created=rS   rT   )r2   r=   r   r   ÚwhereÚtyperD   rE   Úscalarr   r^   rC   r   rX   Úharga_paketrY   r   )r   r7   rA   Ú	customersÚcreatedr?   Úexistss   &&     r!   Úgenerate_billingrg   6   s  é € ä˜&Ó!€HØ—z‘z¤&¬Ó"2×"8Ñ"8¼¿¹È-Ñ9WÓ"XÓY×Y×bÑbÓd×hÑhÓj€IØ€GÛˆØ—y‘y¤¬£×!6Ñ!6´w×7JÑ7JÈhÏkÉkÑ7YÔ[b×[iÑ[iÐmsÑ[sÓ!tÓu×uˆß‰vØ�F‰F”7 x§{¡{¸6×J^ÑJ^×JcÐJcÐbcÐnvÔwÔxØ�q�LŠGñ	 ð
 �)‰)‹+×ÐÜÐ"3°G°9Ð =È3ÔOÐOò Zñ vñ ùsC   ‚AEÁEÁBEÃEÃ	EÃ#-EÄ-EÄ>EÄ?EÅEÅEz/billing/{invoice_id}/payÚcashc                óH   € V ^8„  d   QhR\         R\        R\        R\        /# )r   Ú
invoice_idÚmethodÚ	referencer7   )r&   r   r   )r    s   "r!   r"   r"   E   s)   € ÷ =ñ =¤#ð =¬sð =Ìcð =Ôdpñ =r#   c           
   ƒ   óÞ  "  € VP                  \        V 4      G R j  x€L
 pV'       Ed.   VP                  R8w  Ed   RVn        \        P                  ! \
        P                  4      Vn        VP                  \        VP                  4      G R j  x€L
 pV'       dh   RVn
        \        WSRR7      G R j  x€L
 pVP                  Vn        VP                  Vn        VP                  R8X  d   VP                  R8w  d   RVn        VP                  \!        VP                  VP"                  VP$                  WR7      4       VP'                  4       G R j  x€L
  \)        RR	R
7      #  ELH L× Lµ L5i)NÚpaidT©ÚenabledÚ	suspendedÚfailedÚactive)r^   r_   r   rk   rl   r3   rS   rT   )Úgetr   Ústatusr   Únowr   r/   Úpaid_atr   r^   Úis_paidr   ÚmessageÚprovisioning_messageÚmikrotik_provisioning_statusrX   r   r_   r   rY   r   )rj   rk   rl   r7   Úinvoicer?   Úsyncs   &&&&   r!   Úpay_invoicer~   D   s  é € à—F‘Fœ7 JÓ/×/€Gß€w�7—>‘> VÕ+ØˆŒÜ"Ÿ,š,¤x§|¡|Ó4ˆŒØŸ™¤¨'×*=Ñ*=Ó>×>ˆßØ#ˆHÔÜ-¨hÀDÔI×IˆDØ,0¯L©LˆHÔ)Ø48·K±KˆHÔ1Ø�‰ +Ô-°$·+±+ÀÔ2IØ"*�”Ø
�‰Œw 7×#6Ñ#6¸w¿~¹~ÐV]×VdÑVdÐmsô  Jô  	KØ�i‰i‹k×ÐÜ 
¸Ô<Ð<ò 0ñ ?ñ Jñ 	ùsR   ‚E-œE$�E-ªA%E-ÂE'ÂE-ÂE-Â3E)Â4BE-ÅE+ÅE-Å'E-Å)E-Å+E-z/billing/{invoice_id}/suspendc                ó0   € V ^8„  d   QhR\         R\        /# ©r   rj   r7   ©r&   r   )r    s   "r!   r"   r"   X   s   € ÷ =ñ =¬sð =¼ñ =r#   c              ƒ   óØ  "  € VP                  \        V 4      G R j  x€L
 pV'       d   VP                  MR pV'       d/   VP                  f!   VP	                  \
        P                  R7      pV'       dà   VP                  R8w  dÏ   V'       dÇ   V\        P                  ! \
        P                  4      8:  dž   VP                  \        VP                  4      G R j  x€L
 pV'       dn   RVn        RVn        \        WARR7      G R j  x€L
 pRVP                   RVP                   2Vn        VP                  Vn        VP%                  4       G R j  x€L
  \'        RR	R
7      #  ELE L‰ L` L5i)Nr,   rn   rq   Fro   zSuspended karena invoice z belum dibayar. r3   rS   rT   )rt   r   rA   r-   Úreplacer   r/   ru   r   rv   r   r^   rx   r   r   ry   rz   r{   rY   r   )rj   r7   r|   Úduer?   r}   s   &&    r!   Úsuspend_invoice_customerr…   W   s  é € à—F‘Fœ7 JÓ/×/€Gß%ˆ'×
Ò
¨4€Cß
ˆs�z‰zÒ!Ø�k‰k¤§¡ˆkÓ.ˆß�7—>‘> VÔ+·¸¼x¿|º|ÌHÏLÉLÓ?YÔ8YØŸ™¤¨'×*=Ñ*=Ó>×>ˆßØ)ˆHŒOØ$ˆHÔÜ-¨hÀEÔJ×JˆDØ.GÈÏÉÐGWÐWgÐhl×htÑhtÐguÐ,vˆHÔ)Ø48·K±KˆHÔ1Ø—)‘)“+×ÐÜ 
¸Ô<Ð<ò 0ñ
 ?ñ Kñ ùsc   ‚E*œE!�E*©E*¿5E*Á5E*ÂAE*ÃE$ÃE*Ã'E*ÄE&ÄA	E*ÅE(ÅE*Å$E*Å&E*Å(E*z/billing/{invoice_id}/syncc                ó0   € V ^8„  d   QhR\         R\        /# r€   r�   )r    s   "r!   r"   r"   j   s   € ÷ =ñ =¬#ð =´<ñ =r#   c              ƒ  óú  "  € VP                  \        V 4      G Rj  x€L
 pV'       d¾   VP                  \        VP                  4      G Rj  x€L
 pV'       dŽ   \	        W1VP
                  R8H  R7      G Rj  x€L
 pVP                  Vn        VP
                  Vn        VP
                  R8w  d!   VP
                  R8X  d   RRuVn        Vn	        VP                  4       G Rj  x€L
  \        RRR	7      #  LÖ L¨ L€ L5i)
zERetry the exact access state from Billing after device configuration.Nrn   ro   rr   rs   Tr3   rS   rT   )rt   r   r   r^   r   ru   ry   rz   r{   rx   rY   r   )rj   r7   r|   r?   r}   s   &&   r!   Úsync_invoice_accessrˆ   i   s¾   é € ð —F‘Fœ7 JÓ/×/€GßØŸ™¤¨'×*=Ñ*=Ó>×>ˆßÜ-¨hÀGÇNÁNÐV\ÑD\Ô]×]ˆDØ,0¯L©LˆHÔ)Ø48·K±KˆHÔ1Ø�{‰{˜hÔ&¨7¯>©>¸VÔ+CØ4<¸dÐ1�” Ô!1Ø—)‘)“+×ÐÜ 
¸Ô<Ð<ñ 0á>á]ñ
 ùsQ   ‚C;œC3�C;©#C;ÁC5ÁC;ÁC;Á6C7Á7A*C;Ã!C9Ã"C;Ã5C;Ã7C;Ã9C;)2r   r   r   Úfastapir   r   r   r	   Úfastapi.responsesr
   r   Úfastapi.templatingr   Úsqlalchemy.ext.asyncior   Ú
sqlalchemyr   Úsqlalchemy.ormr   Úapp.core.databaser   Úapp.core.securityr   Úapp.models.modelsr   r   r   r   Úapp.core.billing_accessr   Úapp.core.secretsr   ÚosÚrouterÚpathÚdirnameÚabspathÚ__file__ÚBASE_DIRÚjoinrH   r2   rt   rK   ÚpostrZ   rg   r~   r…   rˆ   © r#   r!   Ú<module>rž      sÆ  ðß 2Ñ 2ß 5Ó 5ß <Ý .Ý /Ý Ý 'Ý $Ý +ß 8Ñ 8Ý ,Ý 8Ý +Û 	á	¡©°zÓ)BÓ!CÐ DÔ	E€Ø�7‰7�?‰?˜2Ÿ7™7Ÿ?™?¨2¯7©7¯?©?¸2¿7¹7¿?¹?È8Ó;TÓ+UÓVÓW€Ù b§g¡g§l¡l°8¸_Ó&MÔN€	õ:ð
 ‡�ˆJ |€Ó4Ù<CÀF»Oö Gó 5ðGð ‡�Ð Ó!á�S“	©4°«9ÁdÈ2ÃhÙ˜“J±7¸6³?öJó "ðJð( ‡�Ð Ó!Ù)-¨c«ÁwÈvÃö 
Pó "ð
Pð ‡�Ð(Ó)Ù59¸&³\ÑTXÐY]ÓT^Ñszð  |Bó  tCö =ó *ð=ð$ ‡�Ð,Ó-ÙGNÈvÃö =ó .ð=ð" ‡�Ð)Ó*ÙBIÈ&Ã/ö =ó +ò=r#   