+
    1vÀj*  ã            	       óÆ  € ^ RI HtHtHtHt ^ RIHtHtHt ^ RI	H
t
 ^ RIHt ^ RIHtHt ^ RIHt ^ RIHtHt ^ RIHt ^ R	It^ R	It^ R
IHtHtHt ]! ]! ]! RRR4      4      .R7      t]P:                  P=                  ]P:                  P=                  ]P:                  P=                  ]P:                  P?                  ] 4      4      4      4      t!]
! ]P:                  PE                  ]!R4      R7      t#]PI                  R4      ]! R4      ]! ]4      3R R ll4       t%]PI                  R]R7      ]! R	R7      ]! R	R7      ]! ^^R7      ]! ]4      ]! ]4      3R R ll4       t&R	# )é    )Ú	APIRouterÚRequestÚDependsÚQuery)ÚHTMLResponseÚRedirectResponseÚJSONResponse)ÚJinja2Templates)ÚAsyncSession)ÚselectÚfunc)Úget_db)Úrequire_rolesÚget_current_user)ÚCustomerN)ÚdatetimeÚtimezoneÚ	timedeltaÚadmin_csÚteknisiÚagen_voucher)Údependencieszapp/templates)Ú	directoryz/api/customers/liveÚ c                ó0   € V ^8„  d   QhR\         R\        /# )é   ÚidsÚdb)Ústrr   )Úformats   "Ú2/var/www/html/bestweb/app/routes/list_customers.pyÚ__annotate__r"      s   € ÷ 4,ñ 4,¤#ð 4,´|ñ 4,ó    c              ƒ   óÚ  "  € V '       g   \        R . /4      # V P                  R4       Uu. uFA  q"P                  4       P                  4       '       g   K(  \	        VP                  4       4      NKC  	  ppV'       g   \        R . /4      # VP                  \        \        4      P                  \        P                  P                  V4      4      4      G Rj  x€L
 pVP                  4       P                  4       p. pV EFT  pVP                  R8X  d   RpRp	M0VP                  R8X  d   RpRp	MVP                  R!9   d   R	pR
p	MRpRp	VP                  R8H  ;'       g    VP                  R8H  ;'       d>    VP                   R8H  ;'       g'    VP"                  R"9   ;'       g    VP$                  R8g  p
V
'       d   RMRpRV V R2pV
'       dI   RVP                   ;'       g    R RVP"                  ;'       g    R RVP$                  ;'       g    R R2MRpTP'                  RVP                  RVP(                  ;'       g    RRVRV	R V/4       EKW  	  \        R V/4      # u upi  EL’5i)#Ú	customersÚ,NÚactivezi<span class="status-icon status-icon-online" title="Pelanggan aktif" aria-label="Pelanggan aktif"></span>u   Hijau â€” pelanggan aktifÚisolirzl<span class="status-icon status-icon-los" title="Pelanggan diisolir" aria-label="Pelanggan diisolir"></span>u   Merah â€” pelanggan diisolirzŠ<span class="status-icon status-icon-waiting" title="Status pelanggan masih diproses" aria-label="Status pelanggan masih diproses"></span>u*   Kuning â€” status pelanggan masih diprosesz„<span class="status-icon status-icon-offline" title="Status pelanggan tidak aktif" aria-label="Status pelanggan tidak aktif"></span>u!   Abu-abu â€” pelanggan tidak aktifÚhotspotÚhotspot_voucherÚpendingÚprovisionedz‡<span class="status-icon status-icon-waiting" title="Layanan WiFi/Hotspot masih menunggu konfigurasi" aria-label="WiFi pending"></span>r   z;<div class="inline-flex items-center justify-center gap-2">z</div>u=   Kuning berkedip â€” layanan WiFi/Hotspot masih pending (ACS: Ú-z, MikroTik: z, provisioning: Ú)u;   Tidak ada indikator tambahan â€” layanan WiFi tidak pendingÚidÚpowerzN/AÚ	indicatorÚcustomer_explanationÚwifi_explanation)ÚrequestÚpending_provisioningÚconfiguring)Úpending_configurationÚwaiting_sessionÚwaiting_internet)r	   ÚsplitÚstripÚisdigitÚintÚexecuter   r   Úwherer/   Úin_ÚscalarsÚallÚstatusÚservice_modeÚtypeÚacs_wifi_statusÚmikrotik_provisioning_statusÚprovisioning_statusÚappendÚont_rx_power)r   r   ÚiÚid_listÚresultr%   ÚoutÚcÚcustomer_indicatorr2   Úwifi_pendingÚ
wifi_badger1   r3   s   &&            r!   Úget_live_customersrS      sˆ  é € çÜ˜[¨"Ð-Ó.Ð.Ø'*§y¡y°¤~ÓM¡~ !¿¹»×9JÑ9J×9LŒ~Œs�1—7‘7“9Ž~¡~€GÐMßÜ˜[¨"Ð-Ó.Ð.à—:‘:œf¤XÓ.×4Ñ4´X·[±[·_±_ÀWÓ5MÓNÓO×O€FØ—‘Ó ×$Ñ$Ó&€Ià
€CÜˆà�8‰8�xÔð "MÐØ#>Ñ Ø�X‰X˜Ô!ð "PÐØ#AÑ Ø�X‰XÐKÔKð "nÐØ#OÑ ð "hÐØ#FÐ ð �^‰^˜yÑ(×GÐG¨A¯F©FÐ6GÑ,G÷ ð à×!Ñ! YÑ.÷ :ð :Ø×1Ñ1Ð5uÑu÷:ð :à×(Ñ(¨MÑ9ð 	÷ ñ VØ!#ð 	ð RÐRdÐQeÐfpÐeqÐqwÐxˆ	÷ ðØ×&Ñ&×-Ð-¨#Ð.¨l¸1×;YÑ;Y×;`Ð;`Ð]`Ð:aÐaqÐrs÷  sHñ  sH÷  sOð  sOð  LOð  rPð  PQñRà!^ð 	ð 	�
‰
Ø�!—$‘$Ø�Q—^‘^×,Ð, uØ˜Ø"Ð$8ØÐ 0ð
÷ 	ñE ôR ˜ cÐ*Ó+Ð+ùòc Nò PùsZ   ‚)I+«%I#ÁI#Á2A$I+ÃI(ÃBI+ÅI+Å4I+Æ.I+Æ:I+ÇI+Ç"I+Ç9I+È2I+É&I+z
/customers)Úresponse_class)Údefault)rU   Úgec          
      óp   € V ^8„  d   QhR\         R\        R,          R\        R,          R\        R\        /# )r   r4   rE   NrC   Úpager   )r   r   r=   r   )r    s   "r!   r"   r"   I   sI   € ÷ &Uñ &UÜð&Uä
��*ð&Uô �$�Jð&Uô ð	&Uô
 	ñ&Ur#   c              ƒ  ó²  "  € VP                   R8X  d   \        RRR7      #  ^p\        P                  R8H  .pV'       d#   VP	                  \        P
                  V8H  4       VR8X  d0   VP	                  \        P                  P                  R4      4       M*V'       d#   VP	                  \        P                  V8H  4       VP                  \        \        P                  ! \        P                  4      4      P                  ! V!  4      G Rj  x€L
 ;'       g    ^ p\        ^W†,           ^,
          V,          4      p	\        W94      p^ RIHp
 VP%                  \        \        4      P'                  V
! \        P(                  4      V
! \        P*                  4      V
! \        P,                  4      4      P                  ! V!  P/                  \        P0                  P3                  4       4      P5                  V^,
          V,          4      P7                  V4      4      G Rj  x€L
 pVP9                  4       P;                  4       p\<        P?                  V R	R
VRVRVRVRVRVRV	R\A        \        ^V^,
          4      \        W“^,           4      ^,           4      /R7      #  EL� L  \B         d&    \D        PF                  ! 4        \I        RRR7      u # i ; i5i)z<Server-side pagination: safe for large customer populations.r   z/tasksi/  )ÚurlÚstatus_codeFr+   N)Úselectinloadzcustomers.htmlr%   Útype_filterÚstatus_filterrX   Ú	page_sizeÚtotalÚtotal_pagesÚpage_numbers)r4   ÚnameÚcontextzGagal memuat data pelanggan.iô  )Úcontentr[   )r4   r5   )%Úroler   r   Úis_archivedrI   rE   rC   r@   Úscalarr   r   Úcountr/   r?   ÚmaxÚminÚsqlalchemy.ormr\   r>   ÚoptionsÚodpÚservice_packageÚ
olt_deviceÚorder_byÚ
created_atÚdescÚoffsetÚlimitrA   rB   Ú	templatesÚTemplateResponseÚrangeÚ	ExceptionÚ	tracebackÚ	print_excr   )r4   rE   rC   rX   r   Úuserr_   Úfiltersr`   ra   r\   rM   r%   s   &&&&&&       r!   Úlist_customersr~   H   s¤  é € ð ‡y�y�IÔÜ H¸#Ô>Ð>ðUØˆ	Ü×'Ñ'¨5Ñ0Ð1ˆßØ�N‰Nœ8Ÿ=™=¨DÑ0Ô1Ø�YÔØ�N‰Nœ8Ÿ?™?×.Ñ.Ð/RÓSÕTßØ�N‰Nœ8Ÿ?™?¨fÑ4Ô5Ø—i‘i¤¤t§z¢z´(·+±+Ó'>Ó ?× EÒ EÀwÑ OÓP×P×UÐUÐTUˆÜ˜!˜eÕ/°!Õ3¸	ÕAÓBˆÜ�4Ó%ˆÝ/Ø—z‘zÜ”8Ó×$Ñ$¡\´(·,±,Ó%?ÁÌh×NfÑNfÓAgÑiuÔv~÷  wJñ  wJó  jKó  L÷  Rò  Rð  T[ñ  \÷  eñ  eô  fn÷  fyñ  fy÷  f~ñ  f~ó  f@ó  A÷  Hñ  Hð  JNð  QRõ  JRð  V_õ  I_ó  `÷  fñ  fð  gpó  qó
÷ 
ˆð —N‘NÓ$×(Ñ(Ó*ˆ	Ü×)Ñ)ØÐ"2à˜Y¨°t¸_ÈfØ˜˜k¨9°g¸uÀmÐU`Ø¤¤c¨!¨T°A­XÓ&6¼¸KÐPQÍÓ8RÐUVÕ8VÓ Wðð *ó 
ð 	
ò Qñ
øô ô UÜ×ÒÔÜÐ$BÐPSÔTÒTðUüsb   ‚K¢J$ Á AJ$ Â A/J$ ÄJÄ
J$ ÄDJ$ È"J"È#A;J$ ÊKÊJ$ Ê"J$ Ê$-KËKËKËK)'Úfastapir   r   r   r   Úfastapi.responsesr   r   r	   Úfastapi.templatingr
   Úsqlalchemy.ext.asyncior   Ú
sqlalchemyr   r   Úapp.core.databaser   Úapp.core.securityr   r   Úapp.models.modelsr   Úosrz   r   r   r   ÚrouterÚpathÚdirnameÚabspathÚ__file__ÚBASE_DIRÚjoinrv   ÚgetrS   r~   © r#   r!   Ú<module>r‘      s  ðß 6Ó 6ß JÑ JÝ .Ý /ß #Ý $ß =Ý &Û 	Û ß 2Ñ 2á	¡©°zÀ9ÈnÓ)]Ó!^Ð _Ô	`€Ø�7‰7�?‰?˜2Ÿ7™7Ÿ?™?¨2¯7©7¯?©?¸2¿7¹7¿?¹?È8Ó;TÓ+UÓVÓW€Ù b§g¡g§l¡l°8¸_Ó&MÔN€	à‡�Ð!Ó"Ù(-¨b«	ÁgÈfÃoö 4,ó #ð4,ðl ‡�ˆL¨€Ó6ñ  TÔ*Ù tÔ,Ù˜a AÔ&Ù˜v“ÙÐ#Ó$ö&Uó 7ò&Ur#   