o
    I@h                     @   s  d dl Z d dlmZ d dlZd dlmZ d dlmZmZmZmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZmZmZ d dlmZmZ d d	lmZ d d
lmZmZmZ ededdZedZ dZ!dd Z"ej#dddgdeeddd Z$e%deeddd Z&dS )    N)datetime)croniter)	Blueprintrender_templateredirecturl_forflashrequestcurrent_app)login_required)PlanfixSettingsForm)PlanfixTokenPlanfixFetchLogPlanfixCompany)db	scheduler)role_required)reschedule_jobfetch_contracts_do_test
planfix_bpz/admin/planfix)
url_prefixzEurope/Kyiv   c                 C   s^   t jjddtd}|  }t|t pd}| t	j
 |d t t }|||fS )um   
    Простая пагинация: из SQLAlchemy-query возвращаем (items, page, pages).
    page   )type)r	   argsgetintcountmathceilPER_PAGEorder_byr   nameascoffsetlimitall)queryr   totalpagesitems r-   ./var/www/html/app/blueprints/planfix/routes.py	_paginate   s   
r/   /GETPOST)methodsadminc                  C   sd  t j } t| d}|jjr`| r`| du rt  } tj	|  |j
jdur,|j
j | _
|jjr7|jj | _|jj}|j d|j d| _tj  t }t| |d tdd ttdS |jjrt|j
jpo| rn| j
nd	|jjpy| rx| jnd	\}}t||rdnd
 |jjr| rtt d tdd ttdS td}tjtj ! "d# }|r|d j$%t&nd}d}	|r|j'r|j'%t&}	n| rt()t&}
zt*| j|
+t(}	W n t,y   d}	Y nw t-j./dd	 }t0j}|r|1 r|2t0j3t4|k}nd| d}|2t0j56|}t7|\}}}|8 }t9d|| ||||	|||||dS )u
  
    Маршрут /admin/planfix/ — форма настроек, тест подключения, запуск “сейчас”,
    а также отображение журнала запусков и списка компаний (с поиском).
    )objN z * * *appu/   Налаштування збережено ✔success	.settings dangeru   Запуск виконаноinfoplanfix_fetch   r   search%zadmin/planfix_settings.html)formtokenjoblogslast_runnext_run	companiesr   r+   total_companiessearch_query):r   r)   firstr   Zsubmit_savedatavalidater   sessionadd	api_loginstrip	api_tokenrun_timeminutehour	cron_exprcommitr
   _get_current_objectr   r   r   r   Zsubmit_testr   Z
submit_runr   r   get_jobr   r#   iddescr'   r(   run_at
astimezone
PLANFIX_TZnext_run_timer   nowr   Zget_next	Exceptionr	   r   r   r   isdigitfilterpf_company_idr   r$   iliker/   r   r   )rC   rB   rtreal_appokmsgrD   rE   rF   rG   baserJ   Zcompanies_qwildcardrH   r   r+   rI   r-   r-   r.   settings/   s   
	








rl   z/togglec                  C   sz   t j } | du rtdd ttdS | j | _tj	  t
 }t| |d | jr-dnd}td| d	 ttdS )
u   
    Переключатель ON/OFF интеграции PlanFix. Меняем is_enabled
    и сразу же перепланируем задачу APScheduler.
    NuR   Спочатку збережіть налаштування інтеграції.warningr:   r7   u   увімкненоu   вимкненоu   Інтеграцію r=   )r   r)   rK   r   r   r   
is_enabledr   rN   rW   r
   rX   r   )rC   rg   Zstatus_textr-   r-   r.   toggle   s   



ro   )'r    r   Zpytzr   flaskr   r   r   r   r   r	   r
   flask_loginr   Z	app.formsr   app.models.planfix_modelsr   r   r   app.extensionsr   r   app.security.rbacr   app.services.planfix_jobsr   r   r   __name__r   timezoner^   r"   r/   routerl   postro   r-   r-   r-   r.   <module>   s.   $
x