+
    }SÂj#i  ã                   ó   € ^ RI H t  ^ RIHtHtHtHtHtHtHtH	t	H
t
 ^ RIHt ^ RIHt ^ RIt^ RIHt  ! R R]]P                  4      t ! R	 R
]]P                  4      t ! R R]4      t ! R R]]P                  4      t ! R R]]P                  4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R]4      t ! R R ]4      t ! R! R"]4      t  ! R# R$]4      t! ! R% R&]4      t" ! R' R(]4      t# ! R) R*]4      t$ ! R+ R,]4      t% ! R- R.]4      t& ! R/ R0]4      t'^ RIt ! R1 R2]]P                  4      t( ! R3 R4]4      t) ! R5 R6]4      t* ! R7 R8]4      t+ ! R9 R:]4      t, ! R; R<]4      t- ! R= R>]4      t. ! R? R@]4      t/ ! RA RB]4      t0 ! RC RD]4      t1 ! RE RF]4      t2R# )Gé    )Údatetime)	ÚColumnÚIntegerÚStringÚBooleanÚ
ForeignKeyÚDateTimeÚEnumÚTextÚUniqueConstraint)Úrelationship)ÚfuncN)ÚBasec                   ó&   € ] tR t^tRtRtRtRtRtR# )ÚUserRoleÚsuper_adminÚadmin_csÚteknisiÚagen_voucher© N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚSUPER_ADMINÚADMIN_CSÚTEKNISIÚAGEN_VOUCHERÚ__static_attributes__r   ó    Ú*/var/www/html/bestweb/app/models/models.pyr   r      s   † Ø€KØ€HØ€GØ!„Lr    r   c                   ó   € ] tR t^tRtRtRtR# )ÚCustomerTypeÚbulanan_pppÚhotspot_voucherr   N)r   r   r   r   ÚBULANAN_PPPÚHOTSPOT_VOUCHERr   r   r    r!   r#   r#      s   † Ø€KØ'„Or    r#   c                   ób  € ] tR t^tRtRt]! ]RRR7      t]! ]	RRRR7      t
]! ]	RR7      t]! ]	RRR	7      t]! ]	RR
R	7      t]! ]R^ R	7      t]! ]	4      t]! ]	RR7      t]! ]^¯R7      t]! ]^dR7      t]! ]^–R7      t]! ]^ÈR7      t]! ]]! R4      RR7      t]! ]RR7      t]! R].R7      tRtR# )ÚServicePackagezHAdmin-maintained commercial/service options shown in installation forms.Úservice_packagesT©Úprimary_keyÚindexF©ÚuniqueÚnullabler-   ©r0   r$   ©r0   ÚdefaultÚprivate_pppoeÚbnbv1009©r3   úservice_profiles.idÚServiceProfile©Úforeign_keysr   N)r   r   r   r   Ú__doc__Ú__tablename__r   r   Úidr   ÚcodeÚnameÚservice_typeÚservice_modeÚpriceÚmikrotik_profileÚolt_vlan_profileÚservice_vlanÚ
pppoe_vlanÚhotspot_vlanÚ	iptv_vlanr   Úservice_profile_idr   Ú	is_activer   Úservice_profiler   r   r    r!   r)   r)      sØ   † ÙRØ&€MÙ	� T°Ô	6€BÙ�& °¸TÔB€DÙ�& 5Ô)€DÙ˜&¨5¸-ÔH€LÙ˜&¨5¸/ÔJ€LÙ�7 U°AÔ6€EÙ˜f“~ÐÙ˜f¨jÔ9ÐÙ˜'¨3Ô/€LÙ˜¨Ô-€JÙ˜'¨3Ô/€LÙ�w¨Ô,€IÙ ©Ð4IÓ)JÐUYÔZÐÙ�w¨Ô-€IÙ"Ð#3ÐCUÐBVÔW„Or    r)   c                   ó*   € ] tR t^%tRtRtRtRtRtRt	R# )ÚCustomerStatusÚrequestÚ
installingÚconfiguringÚactiveÚ	suspendedr   N)
r   r   r   r   ÚREQUESTÚ
INSTALLINGÚCONFIGURINGÚACTIVEÚ	SUSPENDEDr   r   r    r!   rM   rM   %   s   † Ø€GØ€JØ€KØ€FØ„Ir    rM   c                   ó   € ] tR t^,tRtRtRtR# )ÚServiceModeÚhotspotr4   r   N)r   r   r   r   ÚHOTSPOTÚPRIVATE_PPPOEr   r   r    r!   rY   rY   ,   s   † Ø€GØ#„Mr    rY   c                   ó¢   € ] tR t^0tRt]! ]RRR7      t]! ]RRR7      t	]! ]4      t
]! ]4      t]! ]]P                  R7      t]! ]RR7      tRtR# )ÚUserÚusersTr+   )r/   r-   r6   r   N)r   r   r   r   r<   r   r   r=   r   ÚusernameÚ	full_nameÚhashed_passwordr   r   Úroler   rJ   r   r   r    r!   r^   r^   0   sS   † Ø€Má	� T°Ô	6€BÙ�f T°Ô6€HÙ�v“€IÙ˜V“n€OÙ�& (×"2Ñ"2Ô3€DÙ�w¨Ô-„Ir    r^   c                   ór   € ] tR t^:tRt]! ]RR7      t]! ]4      t	]! ]4      t
]! ]4      t]! ]RR7      tRtR# )ÚMikrotikConfigÚmikrotik_configsT)r,   é"  r6   r   N)r   r   r   r   r<   r   r   r=   r   Úhostr`   ÚpasswordÚapi_portr   r   r    r!   re   re   :   s:   † Ø&€MÙ	� TÔ	*€BÙ�&‹>€DÙ�f‹~€HÙ�f‹~€HÙ�g tÔ,„Hr    re   c                   ó4  € ] tR t^BtRt]! ]RRR7      t]! ]RR7      t	]! ]RRRR7      t
]! ]RRRR7      t]! ]4      t]! ]4      t]! ]4      t]! ]RR7      t]! ]]P$                  R7      t]! ]^ R7      t]! ]]! R4      RR	7      t]! ]]! R
4      RR	7      t]! ]RR7      t]! ]RR7      t]! ]! RR7      RR	7      t]! ]4      t]! ]4      t]! ]4      t]! ]4      t ]! ]4      t!]! ]]! R4      RR	7      t"]! ]]! R4      RR	7      t#]! ]RR7      t$]! ]RR7      t%]! ]4      t&]! ]4      t']! ]4      t(]! ]RR7      t)]! ]RR7      t*]! ]RR7      t+]! ]RR7      t,]! ]RR7      t-]! ]4      t.]! ]4      t/]! ]4      t0]! ]4      t1]! ]4      t2]! ]4      t3]! ]4      t4]! ]4      t5]! ]4      t6]! ]4      t7]! ]RR7      t8]! ]! RR7      4      t9]! ]4      t:]! ]4      t;]! ]4      t<]! ]4      t=]! ]! RR7      RR	7      t>]! ]^R7      t?]! ]]@P‚                  P„                  R7      tC]! ]4      tD]! ]4      tE]! ]RR	7      tF]! ]4      tG]! ]RR7      tH]! ]RR7      tI]! ]RR7      tJ]! ]4      tK]! ]^¯R7      tL]! ]^¯R7      tM]! ]^dR7      tN]! ]^–R7      tO]! ]^ÈR7      tP]! ]RR7      tQ]! ]4      tR]! ]! RR7      ]SP¨                  ! 4       R7      tU]! ]! RR7      ]SP¨                  ! 4       R7      tV]! ]]! R4      4      tW]! ]]! R4      RR	7      tX]! ]RR	7      tY]Z! R]W.R7      t[]Z! R]X.R7      t\]Z! R]".R7      t]]Z! R ]#.R7      t^]Z! R!].R7      t_]Z! R"].R7      t`]! ]R#R7      ta]! ]R$R7      tb]! ]R$R7      tc]! ]4      td]! ]! RR7      RR	7      teR%tfR&# )'ÚCustomerÚ	customersTr+   ©r-   ©r/   r-   r0   Ú1playr6   zservice_packages.idr1   r7   F©Útimezoneúolt_devices.idúmikrotik_devices.idÚZTEÚC320ÚmanualÚunavailableÚnot_configuredr4   z	["pppoe"]Únoner5   ©Úserver_default©Úonupdateúusers.idzodps.idr^   r9   ÚODPÚ	OLTDeviceÚMikrotikDevicer)   r8   Únot_startedÚpendingr   N)gr   r   r   r   r<   r   r   r=   r   r?   Úcustomer_codeÚnikr   ÚaddressÚphoneÚtypeÚ	play_typerM   rS   ÚstatusÚharga_paketr   Úservice_package_idrI   r   Úis_paidÚis_archivedr	   Újatuh_tempoÚodp_infoÚont_snÚ	ont_brandÚont_rx_powerÚont_tx_powerÚolt_device_idÚmikrotik_device_idÚ
olt_vendorÚ	olt_modelÚolt_adapter_keyÚolt_fields_jsonÚolt_portÚont_sn_modeÚonu_id_modeÚolt_port_modeÚont_brand_modeÚhardware_discovery_statusÚodp_latitudeÚodp_longitudeÚcustomer_latitudeÚcustomer_longitudeÚwifi_ssid_24Úwifi_password_24_encÚwifi_ssid_5Úwifi_password_5_encÚwifi_ssid_hotspotÚwifi_password_hotspot_encÚacs_wifi_statusÚacs_last_syncÚmikrotik_userÚmikrotik_passÚpppoe_usernameÚpppoe_passwordÚpppoe_secret_revealed_atÚpppoe_secret_versionrY   r\   ÚvaluerA   Úmanagement_pppoe_usernameÚmanagement_pppoe_passwordÚmanagement_pppoe_vlanrK   Úprovisioning_modeÚservice_modes_jsonÚont_management_modeÚonu_idÚwan_vlanrE   rF   rG   rH   rD   Úvlan_idr   ÚnowÚ
created_atÚ
updated_atÚassigned_teknisi_idÚodp_idÚodp_portr   Úassigned_teknisiÚodpÚ
olt_deviceÚmikrotik_deviceÚservice_packageÚservice_catalog_profileÚprovisioning_statusÚmikrotik_provisioning_statusÚolt_provisioning_statusÚprovisioning_messageÚprovisioned_atr   r   r    r!   rl   rl   B   s+  † Ø€Má	� T°Ô	6€BÙ�& Ô%€DÙ˜6¨$°dÀTÔJ€MÙ
� ¨D¸4Ô
@€CÙ�T‹l€GÙ�6‹N€Eá�&‹>€DÙ�v wÔ/€IÙ�F N×$:Ñ$:Ô;€Fñ ˜¨!Ô,€KÙ ©Ð4IÓ)JÐUYÔZÐÙ ©Ð4IÓ)JÐUYÔZÐÙ�W eÔ,€GÙ˜¨%Ô0€KÙ™¨4Ô0¸4Ô@€Ká�f‹~€HÙ�F‹^€FÙ�v“€IÙ˜&“>€LÙ˜&“>€Lá˜7¡JÐ/?Ó$@È4ÔP€MÙ ©Ð4IÓ)JÐUYÔZÐÙ˜¨Ô.€JÙ�v vÔ.€IÙ˜V“n€OÙ˜T“l€OÙ�f‹~€HÙ˜¨Ô2€KÙ˜¨Ô2€KÙ˜6¨8Ô4€MÙ˜F¨HÔ5€NÙ & v°}Ô EÐÙ˜&“>€LÙ˜6“N€MÙ˜v›ÐÙ ›ÐÙ˜&“>€LÙ! &›>ÐÙ˜“.€KÙ  ›.ÐÙ˜v›ÐÙ & v£ÐÙ˜VÐ-=Ô>€OÙ™8¨TÔ2Ó3€Má˜6“N€MÙ˜6“N€MÙ˜F“^€NÙ˜F“^€NÙ%¡h¸Ô&=ÈÔMÐÙ! '°1Ô5ÐÙ˜&¨+×*CÑ*C×*IÑ*IÔJ€LÙ & v£ÐÙ & v£ÐÙ" 7°TÔ:ÐÙ˜V“n€OÙ˜v¨Ô?ÐÙ ¨kÔ:ÐÙ  °Ô8ÐÙ�G‹_€FÙ�g sÔ+€HÙ˜'¨3Ô/€LÙ˜¨Ô-€JÙ˜'¨3Ô/€LÙ�w¨Ô,€IÙ˜f¨jÔ9ÐÙ�W‹o€Gá™¨$Ô/ÀÇÂÃ
ÔK€JÙ™¨$Ô/¸$¿(º(»*ÔE€Já  ©*°ZÓ*@ÓAÐÙ�G™Z¨	Ó2¸TÔB€FÙ�g¨Ô-€HÙ# FÐ:MÐ9NÔOÐÙ
�u¨F¨8Ô
4€CÙ˜k¸¸ÔH€JÙ"Ð#3ÐCUÐBVÔW€OÙ"Ð#3ÐCUÐBVÔW€OÙ*Ð+;ÐK]ÐJ^Ô_Ðñ ! °Ô?ÐÙ#)¨&¸)Ô#DÐ Ù$ V°YÔ?ÐÙ! $›<ÐÙ™H¨dÔ3¸dÔC„Nr    rl   c                   ó0  € ] tR t^¢tRt]! ]RRR7      t]! ]RR7      t	]! ]4      t
]! ]RR7      t]! ]^ R7      t]! ]RR7      t]! ]RR7      t]! ]RR7      t]! ]RR7      t]! ]RR7      t]! ]RR7      t]! ]]P,                  R7      t]! ]RR7      tRtR	# )
ÚVoucherAgentÚvoucher_agentsTr+   Fr1   rn   r6   r   N)r   r   r   r   r<   r   r   r=   r   r?   rˆ   ÚareaÚcommission_rateÚnama_ispÚ
domain_ispÚprefixr>   Úcommentr   rJ   r	   r   r¾   r¿   rÀ   r   r   r    r!   rÐ   rÐ   ¢   s¨   † Ø$€MÙ	� T°Ô	6€BÙ�& 5Ô)€DÙ�6‹N€EÙ�& Ô%€DÙ˜W¨aÔ0€Oñ �f tÔ,€HÙ˜¨Ô.€JÙ�F TÔ*€FÙ�& 4Ô(€DÙ�V dÔ+€GÙ�w¨Ô-€IÙ˜¨(¯,©,Ô7€JÙ˜¨4Ô0„Jr    rÐ   c                   ó,  € ] tR t^´tRt]! ]RRR7      t]! ]RRRR7      t	]! ]RRR7      t
]! ]RR7      t]! ]RR	7      t]! ]RR7      t]! ]RR7      t]! ]RR7      t]! ]]! R
4      RR7      t]! ]^ R	7      t]! ]RR	7      t]! ]]! R4      RR7      t]! ]RR7      t]! ]RR7      t]! ]RR7      t]! ]! RR7      RR7      t]! ]! RR7      RR7      t]! ]^ RR7      t]! ]^ RR7      t]! ]! RR7      RR7      t]! ]RR	7      t]! ]RR7      t ]! ]]! R4      RR7      t!]! ]]! R4      RR7      t"]! ]]! R4      RR7      t#]! ]]$PJ                  R	7      t&]! ]]! R4      RR7      t']! ]RR7      t(])! R].R7      t*])! R]!.RR7      t+])! R].R7      t,Rt-R# )ÚVoucherÚvouchersTr+   Fro   ©r0   r-   r1   Úlegacy_samer6   úhotspot_profiles.idÚ	availableúvoucher_agents.idrq   ©r3   r0   r„   úvoucher_batches.idrt   úsites.idr   rÐ   r9   ÚVoucherBatch©r:   Úback_populatesÚHotspotProfiler   N).r   r   r   r   r<   r   r   r=   r   r>   r`   r   Úpassword_ciphertextÚcredential_modeÚcredential_lengthÚcharacter_modeÚprofiler   Ú
profile_idrB   r‹   Úagent_idr×   Úlimit_uptimeÚlimit_idle_timer	   Úsold_atÚused_atÚused_secondsÚlast_poll_uptimeÚ
expires_atÚsync_statusÚsync_updated_atÚbatch_idÚ	device_idÚsite_idr   r¾   r¿   Ú
created_byÚ
sold_pricer   ÚagentÚbatchÚhotspot_profiler   r   r    r!   rÙ   rÙ   ´   s×  † Ø€MÙ	� T°Ô	6€Bá�& ¨T¸EÔB€DÙ�f t°4Ô8€HÙ  °Ô5ÐÙ˜V¨]Ô;€OÙ˜w°Ô6ÐÙ˜F¨TÔ2€NÙ�V eÔ,€GÙ˜¡Ð,AÓ!BÈTÔR€JÙ�7 AÔ&€EÙ�F KÔ0€FÙ�g™zÐ*=Ó>ÈÔN€HÙ�V dÔ+€GÙ˜&¨4Ô0€LÙ˜V¨dÔ3€OÙ‘X tÔ,°tÔ<€GÙ‘X tÔ,°tÔ<€Gñ ˜'¨1°uÔ=€Lá˜g¨q¸5ÔAÐÙ™¨$Ô/¸$Ô?€JÙ˜¨Ô3€KÙ˜X°Ô5€OÙ�g™zÐ*>Ó?È$ÔO€HÙ�w¡
Ð+@Ó AÈDÔQ€IÙ�W™j¨Ó4¸tÔD€GÙ˜¨(¯,©,Ô7€JÙ˜¡¨JÓ!7À$ÔG€JÙ˜¨$Ô/€JÙ˜°x°jÔA€EÙ˜°x°jÐQ[Ô\€EÙ"Ð#3À:À,ÔO„Or    rÙ   c                   ó„  € ] tR t^ÛtRt]! ]RRR7      t]! ]]! R4      RRR7      t	]! ]RR7      t
]! ]RR7      t]! ]RR	7      t]! ]R
R	7      t]! ]4      t]! ]! RR7      ]P$                  ! 4       R7      t]! ]]! R4      RR7      t]! ]RR7      t]! ]]! R4      RR7      t]! ]]! R4      RR7      t]! R]	.R7      tRtR# )ÚPaymentÚpaymentsTr+   úcustomers.idFrÛ   r1   Úcashr6   Úpaidrq   r{   úvouchers.idrt   râ   rl   r9   r   N)r   r   r   r   r<   r   r   r=   r   Úcustomer_idÚamountr   ÚperiodÚmethodr‹   Ú	referencer	   r   r¾   Úpaid_atÚ
voucher_idÚreference_typerø   rù   r   Úcustomerr   r   r    r!   r   r   Û   sÏ   † Ø€MÙ	� T°Ô	6€BÙ˜¡*¨^Ó"<ÀuÐTXÔY€KÙ�G eÔ,€FÙ�F UÔ+€FÙ�F FÔ+€FÙ�F FÔ+€FÙ�v“€IÙ‘X tÔ,¸T¿XºX»ZÔH€GÙ˜¡¨MÓ!:ÀTÔJ€JÙ˜F¨TÔ2€NÙ�w¡
Ð+@Ó AÈDÔQ€IÙ�W™j¨Ó4¸tÔD€GÙ˜J°k°]ÔC„Hr    r   c                   óî   € ] tR t^ëtRt]! ]RRR7      t]! ]]! R4      RRR7      t	]! ]
RRR7      t]! ]RR7      t]! ]! RR7      RR7      t]! ]
R	RR
7      t]! ]! RR7      RR7      t]! R]	.R7      tRtR# )ÚInvoiceÚinvoicesTr+   r  FrÛ   r1   rq   Úunpaid©r3   r-   rl   r9   r   N)r   r   r   r   r<   r   r   r=   r   r  r   r  r  r	   Údue_dater‹   r  r   r  r   r   r    r!   r  r  ë   sƒ   † Ø€MÙ	� T°Ô	6€BÙ˜¡*¨^Ó"<ÀuÐTXÔY€KÙ�F U°$Ô7€FÙ�G eÔ,€FÙ‘h¨Ô-¸Ô>€HÙ�F H°DÔ9€FÙ‘X tÔ,°tÔ<€GÙ˜J°k°]ÔC„Hr    r  c                   óò   € ] tR t^ötRtRt]! ]RRR7      t]! ]	RRRR7      t
]! ]	RR7      t]! ]	RR7      t]! ]RR7      t]! ]RRR7      t]! ]! RR	7      ]P&                  ! 4       R
7      t]! ]	RR7      tRtR# )ÚDeviceCredentialzKEncrypted login material referenced by a device; plaintext is never stored.Údevice_credentialsTr+   Fr.   r1   r2   rq   r{   r   N)r   r   r   r   r;   r<   r   r   r=   r   r?   Úprotocolr`   r   Úencrypted_secretr   rJ   r	   r   r¾   r¿   Ú	cred_typer   r   r    r!   r  r  ö   s~   † ÙUØ(€MÙ	� T°Ô	6€BÙ�& °¸TÔB€DÙ�f uÔ-€HÙ�f uÔ-€HÙ˜d¨UÔ3ÐÙ�w¨¸Ô=€IÙ™¨$Ô/ÀÇÂÃ
ÔK€JÙ�v¨Ô-„Ir    r  c                   ó>  € ] tR tRtRt]! ]RRR7      t]! ]RR7      t	]! ]RR7      t
]! ]RR7      t]! ]RR	7      t]! ]R
R7      t]! ]RR7      t]! ]]! R4      RR7      t]! ]RR7      t]! ]]! R4      RR7      t]! ]RR7      t]! ]RR7      t]! R].R7      tRtR# )r‚   i  Úmikrotik_devicesTr+   Fr1   rg   r6   rn   Ú
registeredúdevice_credentials.idrâ   r  r9   r   N)r   r   r   r   r<   r   r   r=   r   r?   rh   rj   rÒ   r‹   r   rJ   r   Úcredential_idÚhotspot_namerù   r	   Úlast_sync_atÚoffline_moder   Ú
credentialr   r   r    r!   r‚   r‚     s¸   † Ø&€MÙ	� T°Ô	6€BÙ�& 5Ô)€DÙ�& 5Ô)€DÙ�g tÔ,€HÙ�& Ô%€DÙ�F LÔ1€FÙ�w¨Ô-€IÙ˜7¡JÐ/FÓ$GÐRVÔW€MÙ˜&¨4Ô0€LÙ�W™j¨Ó4¸tÔD€GÙ˜(¨TÔ2€LÙ˜'¨5Ô1€LÙÐ0À¸ÔO„Jr    r‚   c                   ó8  € ] tR tRtRt]! ]RRR7      t]! ]RR7      t	]! ]RR7      t
]! ]RR7      t]! ]RR7      t]! ]4      t]! ]4      t]! ]RR7      t]! ]4      t]! ]R	R7      t]! ]RR7      t]! ]]! R
4      RR7      t]! ]RR7      t]! R].R7      tRtR# )r�   i  Úolt_devicesTr+   Fr1   Ússhr6   r  r  r  r9   r   N)r   r   r   r   r<   r   r   r=   r   r?   rh   ÚvendorÚmodelÚlocationÚpop_nameÚmanagement_protocolrj   r‹   r   rJ   r   r  r   r   r#  r   r   r    r!   r�   r�     sµ   † Ø!€MÙ	� T°Ô	6€BÙ�& 5Ô)€DÙ�& 5Ô)€DÙ�F UÔ+€FÙ�6 EÔ*€EÙ�f‹~€HÙ�f‹~€HÙ  °Ô7ÐÙ�g‹€HÙ�F LÔ1€FÙ�w¨Ô-€IÙ˜7¡JÐ/FÓ$GÐRVÔW€MÙ˜&¨4Ô0€LÙÐ0À¸ÔO„Jr    r�   c                   óÚ   € ] tR tRtRt]! ]RRR7      t]! ]RRR7      t	]! ]RR7      t
]! ]4      t]! ]4      t]! ]^R7      t]! ]]! R	4      RR7      t]! R
].R7      t]! ]RR7      tRtR# )r€   i$  ÚodpsTr+   F©r/   r0   r1   r6   rt   r‚   r9   r   N)r   r   r   r   r<   r   r   r=   r   r>   r?   ÚlatitudeÚ	longitudeÚ
port_countr   r—   r   rÇ   r   rJ   r   r   r    r!   r€   r€   $  s€   † Ø€MÙ	� T°Ô	6€BÙ�& °Ô6€DÙ�& 5Ô)€DÙ�f‹~€HÙ�v“€IÙ˜¨Ô+€JÙ ©Ð4IÓ)JÐUYÔZÐÙ"Ð#3ÐCUÐBVÔW€OÙ�w¨Ô-„Ir    r€   c                   ó²   € ] tR tRtRtRt]! ]RRR7      t]! ]	RRRR7      t
]! ]	RR7      t]! ]	RR7      t]! ]RR7      t]! ]RR7      t]! ]RRR	7      tR
tR# )r8   i0  z;Admin-managed technical profile used by installation forms.Úservice_profilesTr+   Fr.   r1   r2   r   N)r   r   r   r   r;   r<   r   r   r=   r   r>   r?   rD   Údownload_kbpsÚupload_kbpsr   rJ   r   r   r    r!   r8   r8   0  sg   † ÙEØ&€MÙ	� T°Ô	6€BÙ�& °¸TÔB€DÙ�& 5Ô)€DÙ˜f¨tÔ4ÐÙ˜7¨TÔ2€MÙ˜¨4Ô0€KÙ�w¨¸Ô=„Ir    r8   c                   óž   € ] tR tRtRt]! ]RRR7      t]! ]RRR7      t]! ]RR7      t	]! ]
RRR	7      t]! ]RRR	7      t]! R
RRR7      3tRtR# )ÚVlanMappingRulei;  Úvlan_mapping_rulesTr+   FrÛ   r1   Úservicer2   Úsource_vlanÚpurposeÚuq_vlan_mapping_source_purpose)r?   r   N)r   r   r   r   r<   r   r   r=   r:  Útarget_vlanr   r;  r   rJ   r   Ú__table_args__r   r   r    r!   r7  r7  ;  s]   † Ø(€MÙ	� T°Ô	6€BÙ˜¨5¸Ô=€KÙ˜¨5Ô1€KÙ�V e°YÔ?€GÙ�w¨¸Ô=€IÙ& }°iÐFfÔgÐi„Nr    r7  c                   óì   € ] tR tRtRt]! ]RRR7      t]! ]]! R4      RR7      t	]! ]
RR7      t]! ]
4      t]! ]4      t]! ]4      t]! ]! RR7      ]P$                  ! 4       R	7      t]! R
]	.R7      tRtR# )ÚAuditLogiD  Ú
audit_logsTr+   r   r1   Frq   r{   r^   r9   r   N)r   r   r   r   r<   r   r   r=   r   Úuser_idr   ÚactionÚentityÚ	entity_idr   Údetailr	   r   r¾   r¿   r   Úuserr   r   r    r!   r@  r@  D  st   † Ø €MÙ	� T°Ô	6€BÙ�W™j¨Ó4¸tÔD€GÙ�F UÔ+€FÙ�F‹^€FÙ�w“€IÙ�D‹\€FÙ™¨$Ô/ÀÇÂÃ
ÔK€JÙ˜¨g¨YÔ7„Dr    r@  c                   óÎ  € ] tR tRtRt]! ]RRR7      t]! ]]! R4      RRR7      t	]! ]
RR7      t]! ]
R	RR
7      t]! ]
4      t]! ]
4      t]! ]]! R4      RR7      t]! ]]! R4      RR7      t]! ]4      t]! ]^ R7      t]! ]4      t]! ]! RR7      RR7      t]! ]! RR7      ]P0                  ! 4       R7      t]! ]! RR7      ]P0                  ! 4       R7      t]! R]	.R7      tRtR# )ÚProvisioningJobiO  Úprovisioning_jobsTr+   r  FrÛ   r1   Úqueuedr  rs   rt   r6   rq   r{   r}   rl   r9   r   N)r   r   r   r   r<   r   r   r=   r   r  r   Útargetr‹   r'  Úadapter_keyr–   r—   r   Úpayload_summaryÚattemptsÚ
last_errorr	   Úexecuted_atr   r¾   r¿   rÀ   r   r  r   r   r    r!   rI  rI  O  sì   † Ø'€MÙ	� T°Ô	6€BÙ˜¡*¨^Ó"<ÀuÐTXÔY€KÙ�F UÔ+€FÙ�F H°DÔ9€FÙ�F‹^€FÙ˜“.€KÙ˜7¡JÐ/?Ó$@È4ÔP€MÙ ©Ð4IÓ)JÐUYÔZÐÙ˜T“l€OÙ�g qÔ)€HÙ˜“€JÙ™¨4Ô0¸4Ô@€KÙ™¨$Ô/ÀÇÂÃ
ÔK€JÙ™¨$Ô/¸$¿(º(»*ÔE€JÙ˜J°k°]ÔC„Hr    rI  c                   ó^  € ] tR tRtRtRt]! ]RRR7      t]! ]]	! R4      RRR7      t
]! ]RR	7      t]! ]RRR7      t]! ]4      t]! ]]	! R
4      RR	7      t]! ]]	! R4      RR	7      t]! ]4      t]! ]4      t]! ]4      t]! ]! RR7      ]P.                  ! 4       RR7      t]! R]
.R7      tRtR# )ÚProvisioningEventia  zPImmutable, sanitized audit trail for preview, queue, and device acknowledgement.Úprovisioning_eventsTr+   r  FrÛ   r1   rs   rt   rq   )r|   r0   rl   r9   r   N)r   r   r   r   r;   r<   r   r   r=   r   r  r   rL  r‹   r'  r–   r—   rM  r   rN  Úmessager	   r   r¾   rQ  r   r  r   r   r    r!   rS  rS  a  s¾   † ÙZØ)€MÙ	� T°Ô	6€BÙ˜¡*¨^Ó"<ÀuÐTXÔY€KÙ�F UÔ+€FÙ�F U°$Ô7€FÙ�F‹^€FÙ˜7¡JÐ/?Ó$@È4ÔP€MÙ ©Ð4IÓ)JÐUYÔZÐÙ˜“.€KÙ˜T“l€OÙ�T‹l€GÙ™¨4Ô0ÀÇÂÃÐV[Ô\€KÙ˜J°k°]ÔC„Hr    rS  c                   ó&   € ] tR tRtRtRtRtRtRtR# )ÚEntityStatusit  rÞ   ÚsoldÚusedÚexpiredr   N)	r   r   r   r   rÞ   rX  rY  rZ  r   r   r    r!   rW  rW  t  s   † Ø€IØ€DØ€DØ„Gr    rW  c                   óÞ   € ] tR tRtRt]! ]RRR7      t]! ]RRR7      t	]! ]RR7      t
]! ]4      t]! ]4      t]! ]RR	7      t]! ]RR	7      t]! ]]P&                  R	7      t]! R
RR7      tRtR# )ÚSiteiz  ÚsitesTr+   Fr.  r1   zAsia/Jakartar6   r‚   zMikrotikDevice.site_idr9   r   N)r   r   r   r   r<   r   r   r=   r   r>   r?   rÒ   r   r)  rr   r   rJ   r	   r   r¾   r¿   r   Údevicesr   r   r    r!   r\  r\  z  sw   † Ø€MÙ	� T°Ô	6€BÙ�& °Ô6€DÙ�& 5Ô)€DÙ�&‹>€DÙ�d‹|€HÙ�f nÔ5€HÙ�w¨Ô-€IÙ˜¨(¯,©,Ô7€JáÐ+Ð:RÔS„Gr    r\  c                   óX  € ] tR tRtRt]! ]RRR7      t]! ]RRR7      t	]! ]RR7      t
]! ]]! R4      RR7      t]! ]RR7      t]! ]^ R	7      t]! ]RR7      t]! ]RR7      t]! ]RR7      t]! ]RR7      t]! ]RR7      t]! ]RR7      t]! ]RR7      t]! ]RR7      t]! ]R
R	7      t]! ]]! R4      RR7      t]! ]]! R4      RR7      t]! ]]! R4      RR7      t]! ]]! R4      RR7      t]! ]4      t]! ]RR	7      t]! ]] PB                  R	7      t"]#! RRRR7      t$]#! R].R7      t%Rt&R# )rã   i‡  Úvoucher_batchesTr+   Fr.  r1   rÝ   r6   Ú	generatedrß   râ   rt   r   r„   rÙ   zVoucher.batch_idrý   rä   ræ   r9   r   N)'r   r   r   r   r<   r   r   r=   r   Ú
batch_coderë   r   rì   ÚquantityÚgenerated_countrB   Úduration_daysÚduration_secondsrî   rï   Ú	user_modeÚcharacter_lengthrê   r‹   rí   rù   rø   rú   r   r×   rõ   r	   r   r¾   r¿   r   rÚ   rþ   r   r   r    r!   rã   rã   ‡  s]  † Ø%€MÙ	� T°Ô	6€BÙ˜ t°eÔ<€JÙ�V eÔ,€GÙ˜¡Ð,AÓ!BÈTÔR€JÙ�g¨Ô.€HÙ˜W¨aÔ0€OÙ�7 UÔ+€EÙ˜7¨TÔ2€Mñ ˜g°Ô5ÐÙ˜&¨4Ô0€LÙ˜V¨dÔ3€OÙ�v¨Ô-€IÙ˜g°Ô5ÐÙ˜F¨TÔ2€NÙ�F KÔ0€FÙ�g™zÐ*=Ó>ÈÔN€HÙ�W™j¨Ó4¸tÔD€GÙ�w¡
Ð+@Ó AÈDÔQ€IÙ˜¡¨JÓ!7À$ÔG€JÙ�T‹l€GÙ˜¨Ô3€KÙ˜¨(¯,©,Ô7€JÙ˜IÐ4FÐW^Ô_€HÙ"Ð#3À:À,ÔO„Or    rã   c                   ó~  € ] tR tRtRt]! ]RRR7      t]! ]RR7      t	]! ]RR7      t
]! ]RR7      t]! ]RR7      t]! ]RR7      t]! ]RR7      t]! ]^R7      t]! ]^ R7      t]! ]^R7      t]! ]RR7      t]! ]RR7      t]! ]]! R	4      RR7      t]! ]R
R7      t]! ]]P4                  R7      t]! ]RR7      tRtR# )ræ   i¤  Úhotspot_profilesTr+   Fr1   Ú12hr6   râ   r„   r   N)r   r   r   r   r<   r   r   r=   r   r?   Úlocal_profileÚ	rate_downÚrate_upÚsession_timeoutÚidle_timeoutÚsharedrB   Úvoucher_expiry_daysÚvoucher_expiry_secondsr   rJ   r   rù   rõ   r	   r   r¾   r¿   rÀ   r   r   r    r!   ræ   ræ   ¤  sÖ   † Ø&€MÙ	� T°Ô	6€BÙ�& 5Ô)€DÙ˜6¨DÔ1€MÙ�w¨Ô.€IÙ�W tÔ,€GÙ˜V¨UÔ3€OÙ˜&¨4Ô0€LÙ�G QÔ'€FÙ�7 AÔ&€Eá  °"Ô5ÐÙ# G°dÔ;ÐÙ�w¨Ô-€IÙ�W™j¨Ó4¸tÔD€GÙ˜¨Ô3€KÙ˜¨(¯,©,Ô7€JÙ˜¨4Ô0„Jr    ræ   c                   óD  € ] tR tRtRt]! ]RRR7      t]! ]4      t]! ]	4      t
]! ]	4      t]! ]	4      t]! ]4      t]! ]	4      t]! ]4      t]! ]4      t]! ]^ R7      t]! ]]P(                  R7      t]! ]	4      t]! ]4      t]! ]4      t]! ]]P(                  R7      tRtR# )ÚVoucherArchivei¸  Úvoucher_archivesTr+   r6   r   N)r   r   r   r   r<   r   r   r=   r  r   r>   r`   rë   rB   r‹   r	   rð   rñ   rò   r   r¾   Ú
deleted_atÚreasonr÷   rí   r¿   r   r   r    r!   ru  ru  ¸  s¦   † Ø&€MÙ	� T°Ô	6€BÙ˜“€JÙ�&‹>€DÙ�f‹~€HÙ�V‹n€GÙ�7‹O€EÙ�F‹^€FÙ�XÓ€GÙ�XÓ€Gá˜'¨1Ô-€LÙ˜¨(¯,©,Ô7€JÙ�F‹^€FÙ�g‹€HÙ�g‹€HÙ˜¨(¯,©,Ô7„Jr    ru  c                   ó@  € ] tR tRtRt]! ]RRR7      t]! ]]! R4      RR7      t	]! ]]! R4      RR7      t
]! ]]! R	4      RR7      t]! ]RR7      t]! ]RR7      t]! ]RR7      t]! ]]! R
4      RR7      t]! ]4      t]! ]RR7      t]! ]]P*                  R7      tRtR# )ÚAgentCommissioniË  Úagent_commissionsTr+   rß   Fr1   r  rá   zpayments.idr„   r6   r   N)r   r   r   r   r<   r   r   r=   r   rí   r  r÷   r  ÚrateÚvoucher_priceÚtransaction_idr   r  r‹   r	   r   r¾   r¿   r   r   r    r!   rz  rz  Ë  s¬   † Ø'€MÙ	� T°Ô	6€BÙ�g™zÐ*=Ó>ÈÔO€HÙ˜¡¨MÓ!:ÀTÔJ€JÙ�g™zÐ*>Ó?È$ÔO€HÙ�G eÔ,€FÙ�' EÔ*€DÙ˜7¨UÔ3€MÙ˜G¡Z°Ó%>ÈÔN€NÙ�F‹^€FÙ�F IÔ.€FÙ˜¨(¯,©,Ô7„Jr    rz  c                   óP  € ] tR tRtRt]! ]RRR7      t]! ]]! R4      RR7      t	]! ]]! R4      RR7      t
]! ]RR7      t]! ]R	R
7      t]! ]4      t]! ]RR7      t]! ]4      t]! ]RR7      t]! ]]! R4      RR7      t]! ]]! R4      RR7      t]! ]]P,                  R
7      tRtR# )ÚWalletTransactioniÙ  Úwallet_transactionsTr+   r   r1   r  FÚwalletr6   rt   râ   r   N)r   r   r   r   r<   r   r   r=   r   rB  r  r  r   r	  Úwallet_typer‹   r
  r	   rñ   rø   rù   r   r¾   r¿   r   r   r    r!   r€  r€  Ù  s´   † Ø)€MÙ	� T°Ô	6€BÙ�W™j¨Ó4¸tÔD€GÙ˜¡¨MÓ!:ÀTÔJ€JÙ�G eÔ,€FÙ�F HÔ-€FÙ˜“.€KÙ�F UÔ+€FÙ�v“€IÙ�X¨Ô-€GÙ�w¡
Ð+@Ó AÈDÔQ€IÙ�W™j¨Ó4¸tÔD€GÙ˜¨(¯,©,Ô7„Jr    r€  c                   óò   € ] tR tRtRt]! ]RRR7      t]! ]RR7      t	]! ]RR7      t
]! ]RR7      t]! ]RR7      t]! ]RR7      t]! ]RR7      t]! ]]! R	4      RR7      t]! ]]P(                  R7      tR
tR# )ÚRadiusServeriè  Úradius_serversTr+   Fr1   i  r6   râ   r   N)r   r   r   r   r<   r   r   r=   r   r?   rh   ÚportÚsecretr   Ú
is_primaryrJ   r   rù   r	   r   r¾   r¿   r   r   r    r!   r…  r…  è  s€   † Ø$€MÙ	� T°Ô	6€BÙ�& 5Ô)€DÙ�& 5Ô)€DÙ�' 4Ô(€DÙ�F UÔ+€FÙ˜¨Ô/€JÙ�w¨Ô-€IÙ�W™j¨Ó4¸tÔD€GÙ˜¨(¯,©,Ô7„Jr    r…  c                   ó   € ] tR tRtRt]! ]RRR7      t]! ]RR7      t	]! ]RR7      t
]! ]]! R4      RR7      t]! ]]! R4      RR7      t]! ]R	R
7      t]! ]^ R
7      t]! ]4      t]! ]4      t]! ]]P*                  R
7      t]! ]RR7      tRtR# )Ú	SyncQueueiô  Ú
sync_queueTr+   Fr1   râ   rt   r„   r6   r   N)r   r   r   r   r<   r   r   r=   r   Úentity_typerE  r   Útarget_site_idÚtarget_device_idr‹   rO  r   rP  Úpayloadr	   r   r¾   r¿   Ú	synced_atr   r   r    r!   r‹  r‹  ô  sœ   † Ø €MÙ	� T°Ô	6€BÙ˜¨%Ô0€KÙ�w¨Ô/€IÙ˜G¡Z°
Ó%;ÀdÔK€NÙ˜g¡zÐ2GÓ'HÐSWÔXÐÙ�F IÔ.€FÙ�g qÔ)€HÙ˜“€JÙ�T‹l€GÙ˜¨(¯,©,Ô7€JÙ�x¨$Ô/„Ir    r‹  c                   óü   € ] tR tRtRt]! ]RRR7      t]! ]]! R4      RR7      t	]! ]]! R4      RR7      t
]! ]RR7      t]! ]RR7      t]! ]RR7      t]! ]4      t]! ]R	R
7      t]! ]]P(                  R
7      tRtR# )Ú
OfflineLogi  Úoffline_logsTr+   rt   r1   râ   Fr„   r6   r   N)r   r   r   r   r<   r   r   r=   r   rø   rù   r   r�  rE  rC  r   r�  r‹   r	   r   r¾   r¿   r   r   r    r!   r“  r“    s…   † Ø"€MÙ	� T°Ô	6€BÙ�w¡
Ð+@Ó AÈDÔQ€IÙ�W™j¨Ó4¸tÔD€GÙ˜¨%Ô0€KÙ�w¨Ô/€IÙ�F UÔ+€FÙ�T‹l€GÙ�F IÔ.€FÙ˜¨(¯,©,Ô7„Jr    r“  c                   óF  € ] tR tRtRtRt]! ]RRR7      t]! ]	RRRR7      t
]! ]	RR7      t]! ]	RR7      t]! ]	RR7      t]! ]	RR7      t]! ]]! R	4      RR7      t]! ]	RR7      t]! ]^RR
7      t]! ]RR7      t]! ]	RRRR7      t]! ]RR7      t]! ]	RR7      t]! ]	RR7      t]! ]	RR7      t]! ]! RR7      RR7      t]! ]! RR7      RR7      t]! ]! RR7      RR7      t]! ]RR7      t]! ]]P@                  RR
7      t!]! ]]P@                  ]P@                  R7      t"Rt#R# )ÚOnlineOrderi  u²  
Pesanan voucher dari katalog publik. Berbeda dari Invoice, tabel ini
tidak terkait pelanggan existing: pembeli boleh orang luar sistem.

Lifecycle status:
    pending  â†’ order dibuat, voucher belum direservasi (checkout masih jalan)
    reserved â†’ voucher sudah dipegang order ini, menunggu pembayaran
    paid     â†’ Midtrans mengonfirmasi pembayaran
    deliveredâ†’ voucher sudah diserahkan ke pembeli
    expired  â†’ batas bayar habis, voucher dilepas kembali ke stok
    cancelledâ†’ dibatalkan manual oleh admin

Aturan penting: hanya `reserved` yang memegang voucher. Menjalankan
expired harus mengembalikan voucher ke status 'available' supaya stok
tidak berkurang permanen.
Úonline_ordersTr+   Fr.   r1   rÝ   rà   r„   )r3   r0   r-   rq   )r3   r~   r   N)$r   r   r   r   r;   r<   r   r   r=   r   Ú
order_codeÚcustomer_nameÚcustomer_phoneÚcustomer_emailÚprofile_namer   rì   Úduration_labelrc  Útotal_pricer‹   r   Úreserved_voucher_idsÚmidtrans_order_idÚ
snap_tokenÚpayment_methodr	   r  Údelivered_atrô   Ú
admin_noter   r¾   r¿   rÀ   r   r   r    r!   r–  r–    sA  † ñð  $€MÙ	� T°Ô	6€BÙ˜ t°eÀ4ÔH€JÙ˜6¨EÔ2€MÙ˜F¨UÔ3€NÙ˜F¨TÔ2€Nñ ˜&¨4Ô0€LÙ˜¡Ð,AÓ!BÈTÔR€JÙ˜F¨TÔ2€NÙ�g q°5Ô9€HÙ˜¨5Ô1€KÙ�F I¸ÀTÔJ€Fá! $°Ô6ÐÙ˜v°Ô5ÐÙ˜¨Ô.€JÙ˜F¨TÔ2€Ná‘X tÔ,°tÔ<€GÙ™(¨DÔ1¸DÔA€LÙ™¨$Ô/¸$Ô?€JÙ˜ tÔ,€JÙ˜¨(¯,©,ÀÔG€JÙ˜¨(¯,©,ÀÇÁÔN„Jr    r–  )3r   Ú
sqlalchemyr   r   r   r   r   r	   r
   r   r   Úsqlalchemy.ormr   Úsqlalchemy.sqlr   ÚenumÚapp.core.databaser   Ústrr   r#   r)   rM   rY   r^   re   rl   rÐ   rÙ   r   r  r  r‚   r�   r€   r8   r7  r@  rI  rS  rW  r\  rã   ræ   ru  rz  r€  r…  r‹  r“  r–  r   r    r!   Ú<module>r«     sÞ  ðÝ ß k× kÕ kÝ 'Ý Û Ý "ô"ˆs�D—I‘Iô "ô(�3˜Ÿ	™	ô (ôX�Tô Xô&�S˜$Ÿ)™)ô ô$�#�t—y‘yô $ô.ˆ4ô .ô-�Tô -ô^Dˆtô ^Dô@1�4ô 1ô$%Pˆdô %PôNDˆdô Dô 	Dˆdô 	Dô
.�tô 
.ôP�Tô Pô P�ô Pô"
.ˆ$ô 
.ô	>�Tô 	>ôj�dô jô	8ˆtô 	8ôD�dô Dô$D˜ô Dó" ô�3˜Ÿ	™	ô ôTˆ4ô TôP�4ô Pô:1�Tô 1ô(8�Tô 8ô&8�dô 8ô8˜ô 8ô
8�4ô 
8ô0�ô 0ô
8�ô 
8ô*O�$ö *Or    