o
    `vÊjz  ã                   @   sÜ  d dl Z d dlZd dlmZmZm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 ej ej e¡¡ZeeƒZejjej  !dd	¡d
ej "ed¡› �ddej  !dej "edd¡¡dd� ej#ejd dd� eeƒZ$eeƒ G dd„ de$j%ƒZ&G dd„ de$j%ƒZ'G dd„ de$j%ƒZ(G dd„ de$j%ƒZ)dd„ Z*dzdd„Z+d d!„ Z,d"d#„ Z-d$d%„ Z.d&d'„ Z/d(d)„ Z0d*d+„ Z1d,d-„ Z2d{d.d/„Z3d0d1„ Z4d2d3„ Z5d4d5„ Z6d6d7„ Z7d8d9„ Z8d:d;„ Z9d<d=„ Z:d>d?„ Z;d@dA„ Z<d|dBdC„Z=ej>dDdEdFgdG�dHdI„ ƒZ?e >dJ¡dKdL„ ƒZ@e >dM¡e*dNdO„ ƒƒZAej>dPdEdFgdG�e*dQdR„ ƒƒZBej>dSdEdFgdG�e*dTdU„ ƒƒZCe DdV¡e*dWdX„ ƒƒZEej>dYdEdFgdG�e*dZd[„ ƒƒZFej>d\dEdFgdG�e*d]d^„ ƒƒZGe Dd_¡e*d`da„ ƒƒZHe Ddb¡e*dcdd„ ƒƒZIej>dedEdFgdG�e*dfdg„ ƒƒZJej>dhdEdFgdG�e*didj„ ƒƒZKe >dk¡e*dldm„ ƒƒZLe >dn¡e*dodp„ ƒƒZMe Ddq¡e*drds„ ƒƒZNejOdtdu„ ƒZPdvdw„ ZQe R¡ � e$ S¡  eQƒ  W d  ƒ n	1 �sÚw   Y  edxk�rìejTddy� dS dS )}é    N)ÚdateÚdatetimeÚ	timedelta©Úwraps)ÚFlaskÚflashÚredirectÚrender_templateÚrequestÚsessionÚurl_for)ÚSession)Ú
SQLAlchemy)ÚinspectÚselectÚtextÚ
SECRET_KEYz)gelistirmede-degistirilecek-guclu-anahtarz
sqlite:///zstudy_manager.sqlite3FÚ
filesystemÚSESSION_FILE_DIRÚinstanceÚflask_session)r   ÚSQLALCHEMY_DATABASE_URIÚSQLALCHEMY_TRACK_MODIFICATIONSÚSESSION_TYPEr   ÚSESSION_PERMANENTT)Úexist_okc                   @   sª   e Zd ZdZejejdd�Zeje d¡dd�Z	eje d¡dd�Z
eje d¡dd�Zeje d	¡dd
d�Zejejejdd�Zejddddd�Zejddddd�ZdS )ÚBookÚbooksT©Úprimary_keyé´   F©Únullableéd   é<   é
   ÚYok©r#   Údefault©r)   r#   ÚTaskÚbookzall, delete-orphan)ÚbackrefÚcascadeÚlazyÚProgressLogN)Ú__name__Ú
__module__Ú__qualname__Ú__tablename__ÚdbÚColumnÚIntegerÚidÚStringÚnameÚcategoryÚgradeÚ	exam_typeÚDateTimer   ÚutcnowÚ
created_atÚrelationshipÚtasksÚprogress_logs© rD   rD   ú/var/www/html/kitap/app.pyr      s    
ÿr   c                   @   sÚ   e Zd ZdZejejdd�Zejeje d¡ddd�Z	eje 
d¡dd�Zejejdd�Zejejdd�Zejejdd	d
�Zeje 
d¡dd�Zejejddd�Zejejdddd�Zejejejdd�Zedd„ ƒZdS )r+   rB   Tr   úbooks.idF©r#   Úindexr&   r"   é   r(   éú   ©r#   r)   rH   r*   c                 C   s   | j | j d S ©Né   )Úend_pageÚ
start_page)ÚselfrD   rD   rE   Ú
page_count;   s   zTask.page_countN)r1   r2   r3   r4   r5   r6   r7   r8   Ú
ForeignKeyÚbook_idr9   Ú	task_typerO   rN   ÚpriorityÚdescriptionÚDateÚcontrol_dateÚBooleanÚis_completedr>   r   r?   r@   ÚpropertyrQ   rD   rD   rD   rE   r+   -   s    r+   c                   @   s„   e Zd ZdZejejdd�Zejeje d¡ddd�Z	ejejdd�Z
ejejdd�Zejejdejdd�Zejejejdd	�Zd
S )r0   rC   Tr   rF   FrG   r"   rK   r*   N)r1   r2   r3   r4   r5   r6   r7   r8   rR   rS   rO   rN   rW   r   ÚtodayÚcompleted_onr>   r   r?   r@   rD   rD   rD   rE   r0   @   s    r0   c                   @   sd   e Zd ZdZejejdd�Zejejdd�Z	ejejdd�Z
ejejdd�Zejejejdd�ZdS )ÚScheduleÚ	schedulesTr   Fr"   r*   N)r1   r2   r3   r4   r5   r6   r7   r8   rW   Ú
start_dateÚend_dateÚTextÚ	json_datar>   r   r?   r@   rD   rD   rD   rE   r^   K   s    r^   c                    s   t ˆ ƒ‡ fdd„ƒ}|S )Nc                     s.   t  d¡stddƒ ttdƒƒS ˆ | i |¤ŽS )NÚ	logged_inu9   Bu sayfayÄ± gÃ¶rÃ¼ntÃ¼lemek iÃ§in giriÅŸ yapmalÄ±sÄ±nÄ±z.ÚwarningÚlogin)r   Úgetr   r	   r   )ÚargsÚkwargs©ÚviewrD   rE   Úwrapped_viewV   s   

z$login_required.<locals>.wrapped_viewr   )rk   rl   rD   rj   rE   Úlogin_requiredU   s   rm   c              	   C   sz   zt | ƒ}W n ttfy   t|› d�ƒ‚w |d ur)||k r)t|› d|› d�ƒ‚|d ur;||kr;t|› d|› d�ƒ‚|S )Nu     geÃ§erli bir sayÄ± olmalÄ±dÄ±r.z en az u    olmalÄ±dÄ±r.z
 en fazla z
 olabilir.)ÚintÚ	TypeErrorÚ
ValueError)ÚvalueÚlabelÚminimumÚmaximumÚparsedrD   rD   rE   Ú	parse_int`   s   ÿrv   c              	   C   s4   z	t  | d¡ ¡ W S  ttfy   t|› d�ƒ‚w )Nz%Y-%m-%du     geÃ§erli bir tarih olmalÄ±dÄ±r.)r   Ústrptimer   ro   rp   ©rq   rr   rD   rD   rE   Úparse_iso_datel   s
   ÿry   c                 C   s<   t |  d¡ddƒ}t |  d¡ddƒ}||krtdƒ‚||fS )NrO   õ   BaÅŸlangÄ±Ã§ sayfasÄ±rM   rN   õ   BitiÅŸ sayfasÄ±õ9   BaÅŸlangÄ±Ã§ sayfasÄ± bitiÅŸ sayfasÄ±ndan bÃ¼yÃ¼k olamaz.)rv   rg   rp   )ÚformrO   rN   rD   rD   rE   Úget_page_ranges   s
   r~   c                 C   s4   |dkrd S t |  d¡dƒ}|t ¡ krtdƒ‚|S )Nõ   Ã–devrX   zKontrol tarihiu3   Ã–devin kontrol tarihi bugÃ¼nden sonra olmalÄ±dÄ±r.)ry   rg   r   r\   rp   )r}   rT   rX   rD   rD   rE   Úget_control_date{   s   r€   c                 C   s,   |   dd¡ ¡ }t|ƒdkrtdƒ‚|pd S )NrV   Ú rJ   u*   AÃ§Ä±klama en fazla 250 karakter olabilir.)rg   ÚstripÚlenrp   )r}   rV   rD   rD   rE   Úget_optional_description„   s   r„   c                 C   sf   || j k s
|| jkr| j | jfgS g }| j |k r"| | j |d f¡ || jk r1| |d | jf¡ |S rL   )rO   rN   Úappend)ÚtaskÚremove_startÚ
remove_endÚ	remainingrD   rD   rE   Úsubtract_interval‹   s   

rŠ   c                 C   sP   t j | ¡ |D ]\}}||kr%t j t| j| j||| j| j| j	dd�¡ qdS )z3Replace one task with its remaining page intervals.F)rS   rT   rO   rN   rU   rV   rX   rZ   N)
r5   r   ÚdeleteÚaddr+   rS   rT   rU   rV   rX   )r†   ÚrangesrO   rN   rD   rD   rE   Úreplace_task_with_ranges–   s"   øÿ€þrŽ   c                 C   sB   d}| D ]}|j |k s|j|krq|d7 }t|t|||ƒƒ q|S )Nr   rM   )rN   rO   rŽ   rŠ   )rB   rO   rN   Úaffectedr†   rD   rD   rE   Úremove_range_from_tasks©   s   r�   c                    sl   t tƒ tj| ktjdktj d¡tj|ktj|k¡}t	t
j |¡ƒ}ˆ d ur0‡ fdd„|D ƒ}t|||ƒS )Nõ   GÃ¶revFc                    s   g | ]	}|j ˆ kr|‘qS rD   )r8   ©Ú.0r†   ©Úexcluded_task_idrD   rE   Ú
<listcomp>½   ó    z/apply_assignment_precedence.<locals>.<listcomp>)r   r+   ÚwhererS   rT   rZ   Úis_rN   rO   Úlistr5   r   Úscalarsr�   )rS   rO   rN   r•   Ú	statementÚ
candidatesrD   r”   rE   Úapply_assignment_precedence³   s   
ûrž   c                   C   s2   t tj ttƒ tj d¡¡ 	tj
 ¡ tj¡¡ƒS )NF)rš   r5   r   r›   r   r+   r˜   rZ   r™   Úorder_byrU   Údescr@   rD   rD   rD   rE   Úactive_tasksÁ   s
   $ÿÿr¡   c              
   C   sB   | j | j| jj| j| jpd| j| j| j| j	r| j	 
¡ dœ	S d dœ	S )Nr�   )	r8   rS   Ú	book_namerT   rV   rO   rN   rU   rX   )r8   rS   r,   r:   rT   rV   rO   rN   rU   rX   Ú	isoformat©r†   rD   rD   rE   Úserialize_builder_taskÉ   s   ÷	÷r¥   c                  C   sT   t ƒ } dd„ | D ƒ}dd„ | D ƒ}|jdd„ d� |jdd„ d� dd„ || D ƒS )	zJOrder assignments by nearest control date, then regular tasks by priority.c                 S   s   g | ]	}|j d kr|‘qS ©r   ©rT   r’   rD   rD   rE   r–   Ú   r—   z!builder_tasks.<locals>.<listcomp>c                 S   s   g | ]	}|j d kr|‘qS r¦   r§   r’   rD   rD   rE   r–   Û   r—   c                 S   s   | j d u | j p	tj| jfS ©N)rX   r   Úmaxr@   r¤   rD   rD   rE   Ú<lambda>Ü   r—   zbuilder_tasks.<locals>.<lambda>)Úkeyc                 S   s   | j  | jfS r¨   )rU   r@   r¤   rD   rD   rE   rª   Ý   s    c                 S   ó   g | ]}t |ƒ‘qS rD   )r¥   r’   rD   rD   rE   r–   Þ   ó    )r¡   Úsort)Ú
open_tasksÚassignmentsÚregular_tasksrD   rD   rE   Úbuilder_tasks×   s   r²   c              
   C   sH   t tj ttƒ tjdktj 	d¡tj
 d ¡tj
| k¡ tj
tj¡¡ƒS )Nr   F)rš   r5   r   r›   r   r+   r˜   rT   rZ   r™   rX   Úis_notrŸ   r@   )ra   rD   rD   rE   Úassignment_alertsá   s   

üøÿr´   c                 C   sP   g }| }||kr|  | ¡ g dœ¡ |tdd�7 }||ksd|  ¡ | ¡ |dœS )N©r   ÚslotsrM   ©ÚdaysrI   ©Úversionr`   ra   r¸   )r…   r£   r   )r`   ra   r¸   ÚcurrentrD   rD   rE   Úempty_builder_stateð   s   þür¼   c              	   C   s:   zt  t| ƒd¡ d¡W S  ttfy   t|› d�ƒ‚w )Nz%H:%Mu0    SS:DD biÃ§iminde geÃ§erli bir saat olmalÄ±dÄ±r.)r   rw   ÚstrÚstrftimero   rp   rx   rD   rD   rE   Ú
parse_timeþ   s
   ÿr¿   c                 C   sŽ  zt  | ¡}W n tt jfy   tdƒ‚w t|tƒr | d¡nd}|dvr*tdƒ‚t| d¡dƒ}t| d¡d	ƒ}||krBtd
ƒ‚| d¡}t|t	ƒsPtdƒ‚g }|}||krj| 
| ¡ ¡ |tdd�7 }||ksXt|ƒt|ƒkrvtdƒ‚i }g }	t|ƒD �]\}
}t|tƒr‘| d¡||
 kr•tdƒ‚| d¡}t|t	ƒs£tdƒ‚g }|D ]Ò}t|tƒs²tdƒ‚t| d¡dƒ}t| d¡dƒ}||krÊtdƒ‚|dkrÛ| d¡dv r×g n|g}n| dg ¡}t|t	ƒsêtdƒ‚g }|D ]�}t|tƒsùtdƒ‚t| d¡d ƒ}tj ttƒ tj|ktj d!¡¡¡}|du �rtd"ƒ‚t| d#¡d$dƒ}t| d%¡d&dƒ}||k�r8td'ƒ‚||jk �sD||jk�rMt|jj› d(�ƒ‚| |jg ¡ 
||f¡ | 
|j|j|jj|j |j!�pid)||d*œ¡ qî| 
|||d+œ¡ q§|	 
||
 |d,œ¡ q~| "¡ D ]/\}}| #¡  d}|D ]!\}}|du�r³||k�r³tj t|¡}t|jj› d-�ƒ‚|}�q•�q‰d.| ¡ | ¡ |	d/œ||fS )0zKValidate browser state and write a canonical, historical schedule snapshot.u=   Program verisi okunamadÄ±. SayfayÄ± yenileyip tekrar deneyin.rº   N¾   é   rI   u2   Program verisi geÃ§erli bir builder kaydÄ± deÄŸil.r`   õ   BaÅŸlangÄ±Ã§ tarihira   õ   BitiÅŸ tarihiõ3   BaÅŸlangÄ±Ã§ tarihi bitiÅŸ tarihinden sonra olamaz.r¸   u   Program gÃ¼nleri geÃ§ersiz.rM   r·   uC   Program, seÃ§ilen tarih aralÄ±ÄŸÄ±ndaki tÃ¼m gÃ¼nleri iÃ§ermelidir.r   u;   Program gÃ¼nleri seÃ§ilen tarih aralÄ±ÄŸÄ±yla eÅŸleÅŸmiyor.r¶   u&   Bir gÃ¼nÃ¼n saat hÃ¼creleri geÃ§ersiz.u   Saat hÃ¼cresi geÃ§ersiz.Ú
time_startu   BaÅŸlangÄ±Ã§ saatiÚtime_endu   BitiÅŸ saatiu@   Saat aralÄ±ÄŸÄ±nÄ±n bitiÅŸi baÅŸlangÄ±cÄ±ndan sonra olmalÄ±dÄ±r.rÁ   Útask_id)Nr�   Úcontentsu&   Saat dilimindeki iÃ§erikler geÃ§ersiz.u    Saat dilimi iÃ§eriÄŸi geÃ§ersiz.r‘   Fu@   SeÃ§tiÄŸiniz gÃ¶rev artÄ±k aktif deÄŸil. ProgramÄ± gÃ¼ncelleyin.Ú
page_startrz   Úpage_endr{   r|   u:    iÃ§in seÃ§ilen sayfalar gÃ¶rev aralÄ±ÄŸÄ±nÄ±n dÄ±ÅŸÄ±nda.r�   )rÇ   rS   r¢   rT   rV   rÉ   rÊ   ©rÅ   rÆ   rÈ   rµ   u'    iÃ§in aynÄ± sayfa iki kez planlanamaz.rI   r¹   )$ÚjsonÚloadsro   ÚJSONDecodeErrorrp   Ú
isinstanceÚdictrg   ry   rš   r…   r£   r   rƒ   Ú	enumerater¿   rv   r5   r   Úscalarr   r+   r˜   r8   rZ   r™   rO   rN   r,   r:   Ú
setdefaultrS   rT   rV   Úitemsr®   )Úraw_jsonÚpayloadrº   r`   ra   Úraw_daysÚexpected_datesr»   ÚallocationsÚcanonical_daysrH   Úraw_dayÚ	raw_slotsÚcanonical_slotsÚraw_slotrÅ   rÆ   Úraw_contentsÚcanonical_contentsÚraw_contentrÇ   r†   rÉ   rÊ   Ú	intervalsÚprevious_endrO   rN   rD   rD   rE   Úvalidate_builder_schedule  sÀ   ÿ

þ




ÿ

ÿ
ùÿýÿüüûrä   c                 C   s²   t | tƒsddg dœS |  d¡}t |tƒsKg }|  d¡s!|  d¡rK| |  d¡|  d¡|  dd¡|  dd¡|  dd¡|  d	¡|  d
¡|  dd¡dœ¡ |  dd¡|  dd¡|dœS )zDConvert a single-content v2 slot to the current multi-content shape.r�   rË   rÈ   rÇ   r¢   rS   rT   rV   rÉ   rÊ   Úpages_label©rÇ   rS   r¢   rT   rV   rÉ   rÊ   rå   rÅ   rÆ   )rÏ   rÐ   rg   rš   r…   )rÞ   rÈ   rD   rD   rE   Únormalize_slot_for_viewt  s*   






øÿ

ýrç   c                 C   s~  zt  | j¡}W n t jy   tdƒ‚w t|tƒrJ| d¡dv rJ| dg ¡}t|tƒs0tdƒ‚d| d| j	 
¡ ¡| d| j 
¡ ¡d	d
„ |D ƒdœS t|tƒsStdƒ‚i }|D ]Q}t|tƒrc| d¡sdqW| |d g ¡ t| dd¡ƒ d¡d  ¡ d t| dd¡ƒ d¡dd… ¡ ¡ dd| dd¡| dd¡ddd| dd¡dœgdœ¡ qWd| j	 
¡ | j 
¡ dd
„ t| ¡ ƒD ƒdœS )zKKeep v2 and older flat-list schedule records readable after the v3 upgrade.u.   Bu programÄ±n kaydedilmiÅŸ verisi okunamÄ±yor.rº   rÀ   r¸   u#   Bu programÄ±n gÃ¼nleri okunamÄ±yor.rI   r`   ra   c                 S   sL   g | ]"}t |tƒrt | d g ¡tƒr| dd¡dd„ | d g ¡D ƒdœ‘qS )r¶   r   r�   c                 S   r¬   rD   )rç   )r“   ÚslotrD   rD   rE   r–   ¡  r­   z:normalize_schedule_for_view.<locals>.<listcomp>.<listcomp>rµ   ©rÏ   rÐ   rg   rš   ©r“   ÚdayrD   rD   rE   r–   ž  s    úú
þÿz/normalize_schedule_for_view.<locals>.<listcomp>r¹   u%   Bu programÄ±n biÃ§imi desteklenmiyor.rW   Ú	Time_Slotr�   ú-r   rM   NÚ	Book_NameÚ	Task_TypeÚPages_to_Readræ   rË   c                 S   s   g | ]	\}}||d œ‘qS )rµ   rD   )r“   rë   r¶   rD   rD   rE   r–   Ä  r—   )rÌ   rÍ   rc   rÎ   rp   rÏ   rÐ   rg   rš   r`   r£   ra   rÓ   r…   r½   Úsplitr‚   ÚjoinÚsortedrÔ   )ÚscheduleÚraw_datar×   ÚgroupedÚitemrD   rD   rE   Únormalize_schedule_for_view�  sT   ÿ
ûü
&


øÿýÿürø   c              
   C   s\   | d uo|d u}|r|d u rt | |ƒ}td|| |||rtƒ ng |r%t|ƒng t ¡  ¡ d�S )Nzschedule_create.html)Úbuilder_moder`   ra   Úbuilder_stater²   Údue_assignmentsÚ	today_iso)r¼   r
   r²   r´   r   r\   r£   )r`   ra   Ústaterù   rD   rD   rE   Úrender_schedule_builderÈ  s   

ørþ   z/girisÚGETÚPOST)Úmethodsc                  C   sŒ   t  d¡rttdƒƒS tjdkrBtj dd¡} tj dd¡}| dkr=|dkr=t  ¡  d	t d< | t d< td
dƒ ttdƒƒS tddƒ t	dƒS )Nrd   Ú	dashboardr   Úusernamer�   ÚpasswordÚmervanz	Mmty2676*Tu   Tekrar hoÅŸ geldin, Mervan.Úsuccessu%   KullanÄ±cÄ± adÄ± veya parola hatalÄ±.Úerrorz
login.html)
r   rg   r	   r   r   Úmethodr}   Úclearr   r
   )r  r  rD   rD   rE   rf   Ø  s   



rf   z/cikisc                   C   s   t  ¡  tddƒ ttdƒƒS )Nu   GÃ¼venle Ã§Ä±kÄ±ÅŸ yaptÄ±nÄ±z.r  rf   )r   r	  r   r	   r   rD   rD   rD   rE   Úlogouté  s   
r
  ú/c                  C   sŒ   t ƒ } tdd„ | D ƒƒ}tdd„ | D ƒƒ}ttj ttƒ tj	 
¡ ¡ d¡¡ƒ}tdt| ƒ||tj ttj tj¡ƒ¡p=d| d d… |d�S )	Nc                 s   s   � | ]}|j V  qd S r¨   )rQ   r’   rD   rD   rE   Ú	<genexpr>ô  s   € zdashboard.<locals>.<genexpr>c                 s   s   � | ]
}|j d krdV  qdS )é   rM   N)rU   r’   rD   rD   rE   r  õ  s   € rI   zdashboard.htmlr   é   )Úactive_task_countÚtotal_pagesÚhigh_priorityÚ
book_countrB   r_   )r¡   Úsumrš   r5   r   r›   r   r^   rŸ   r@   r    Úlimitr
   rƒ   rÒ   ÚfuncÚcountr   r8   )rB   r  r  Úrecent_schedulesrD   rD   rE   r  ð  s    ÿ
ùr  z	/kitaplarc                  C   sÖ   t jdkrYt j dd¡ ¡ } t j dd¡ ¡ }t j dd¡ ¡ }t j dd¡}| r-|r-|s3tdd	ƒ n&|d
vr=tdd	ƒ ntj t	| |||d�¡ tj 
¡  tddƒ ttdƒƒS tdttj tt	ƒ t	j¡¡ƒd�S )Nr   r:   r�   r;   r<   r=   r'   u5   Kitap adÄ±, kategori ve sÄ±nÄ±f alanlarÄ± zorunludur.r  ¾   ÚAYTÚTYTr'   u!   GeÃ§ersiz sÄ±nav tÃ¼rÃ¼ seÃ§ildi.©r:   r;   r<   r=   u   Kitap baÅŸarÄ±yla eklendi.r  r   z
books.html)r   )r   r  r}   rg   r‚   r   r5   r   rŒ   r   Úcommitr	   r   r
   rš   r›   r   rŸ   r:   r  rD   rD   rE   r     s   


$r   z/kitaplar/<int:book_id>/duzenlec                 C   sÂ   t  t| ¡}tjdkr[tj dd¡ ¡ }tj dd¡ ¡ }tj dd¡ ¡ }tj dd¡}|r7|r7|r7|dvr=td	d
ƒ n||||f\|_	|_
|_|_t j ¡  tddƒ ttdƒƒS td|d�S )Nr   r:   r�   r;   r<   r=   r'   r  u:   LÃ¼tfen tÃ¼m kitap bilgilerini geÃ§erli biÃ§imde doldurun.r  u   Kitap bilgileri gÃ¼ncellendi.r  r   zbook_form.html)r,   )r5   Ú
get_or_404r   r   r  r}   rg   r‚   r   r:   r;   r<   r=   r   r  r	   r   r
   )rS   r,   r:   r;   r<   r=   rD   rD   rE   Ú	edit_book  s   


r  z/kitaplar/<int:book_id>/silc                 C   ó4   t j t  t| ¡¡ t j ¡  tddƒ ttdƒƒS )Nu(   Kitap ve buna baÄŸlÄ± gÃ¶revler silindi.r  r   )	r5   r   r‹   r  r   r  r   r	   r   )rS   rD   rD   rE   Údelete_book+  ó   

r   z	/gorevlerc            
      C   sJ  t tj ttƒ tj¡¡ƒ} tj	dkr“zft
tj d¡dƒ}t t|¡}tj d¡}|dvr1tdƒ‚ttjƒ\}}t
tj d¡dd	d
ƒ}ttjƒ}ttj|ƒ}|dkrYt|j||ƒ tj t|j||||||d�¡ tj ¡  tddƒ ttdƒƒW S  ty’ }	 ztt|	ƒdƒ W Y d }	~	nd }	~	ww tdtƒ | t ¡ tdd�   ¡ d�S )Nr   rS   ÚKitaprT   ¾   r   r‘   õ&   GeÃ§erli bir iÅŸ tÃ¼rÃ¼ seÃ§melisiniz.rU   õ   Ã–nem derecesir   é   r   )rS   rT   rO   rN   rU   rV   rX   uX   Ä°ÅŸ baÅŸarÄ±yla kaydedildi. Ã–dev varsa Ã§akÄ±ÅŸan gÃ¶rev sayfalarÄ± ayrÄ±ÅŸtÄ±rÄ±ldÄ±.r  rB   r  z
tasks.htmlrM   r·   )rB   r   Úminimum_control_date)!rš   r5   r   r›   r   r   rŸ   r:   r   r  rv   r}   rg   r  rp   r~   r„   r€   rž   r8   rŒ   r+   r  r   r	   r   r½   r
   r¡   r   r\   r   r£   )
Ú
books_listrS   r,   rT   rO   rN   rU   rV   rX   r  rD   rD   rE   rB   4  sL   

ùÿ

€ÿürB   z/gorevler/<int:task_id>/duzenlec              
   C   sf  t  t| ¡}tt j ttƒ tj	¡¡ƒ}t
jdkr¢zott
j d¡dƒ}t  t|¡}t
j d¡}|dvr7tdƒ‚tt
jƒ\}}tt
j d¡dd	d
ƒ}tt
jƒ}	tt
j|ƒ}
|j|_||_||_||_||_|	|_|
|_|dkrxt|j|||jd� t j ¡  tddƒ ttdƒƒW S  ty¡ } ztt |ƒdƒ W Y d }~nd }~ww t!d||t" #¡ t$dd�  %¡ d�S )Nr   rS   r"  rT   r#  r$  rU   r%  r   r&  r   r”   u   Ä°ÅŸ gÃ¼ncellendi.r  rB   r  ztask_form.htmlrM   r·   )r†   r   r'  )&r5   r  r+   rš   r   r›   r   r   rŸ   r:   r   r  rv   r}   rg   rp   r~   r„   r€   r8   rS   rT   rO   rN   rU   rV   rX   rž   r  r   r	   r   r½   r
   r   r\   r   r£   )rÇ   r†   r(  rS   r,   rT   rO   rN   rU   rV   rX   r  rD   rD   rE   Ú	edit_task]  sF   



€ÿür)  z/gorevler/<int:task_id>/tamamlac                 C   sT   t  t| ¡}t j t|j|j|jt	 
¡ d�¡ d|_t j ¡  tddƒ ttdƒƒS )N©rS   rO   rN   r]   TuG   Ä°ÅŸ tamamlandÄ± olarak iÅŸaretlendi ve ilerleme gÃ¼nlÃ¼ÄŸÃ¼ne eklendi.r  rB   )r5   r  r+   r   rŒ   r0   rS   rO   rN   r   r\   rZ   r  r   r	   r   )rÇ   r†   rD   rD   rE   Úcomplete_taskƒ  s   üÿ

r+  z/gorevler/<int:task_id>/silc                 C   r  )Nu   Ä°ÅŸ silindi.r  rB   )	r5   r   r‹   r  r+   r  r   r	   r   )rÇ   rD   rD   rE   Údelete_task•  r!  r,  z	/ilerlemec            
   
   C   sr  t tj ttƒ tj¡¡ƒ} tj	dkr–zit
tj d¡dƒ}t t|¡}ttjƒ\}}ttj d¡dƒ}t tj ttƒ tj|jktj d¡tj|ktj|k¡¡ƒ}t|||ƒ}tj t|j|||d�¡ tj ¡  |rqtdd	ƒ ntd
dƒ ttdƒƒW S  ty• } ztt |ƒdƒ W Y d }~nd }~ww t tj ttƒ tj! "¡ tj# "¡ ¡ $d¡¡ƒ}	t%d| |	t& '¡  (¡ d�S )Nr   rS   r"  r]   zTamamlanma tarihiFr*  uC   Ä°lerleme kaydedildi; ilgili aktif sayfa aralÄ±klarÄ± gÃ¼ncellendi.r  u:   Ä°lerleme kaydedildi. Bu aralÄ±kta aktif iÅŸ bulunmuyordu.re   Úprogressr  é   zprogress.html)r   Úlogsrü   ))rš   r5   r   r›   r   r   rŸ   r:   r   r  rv   r}   rg   r  r~   ry   r+   r˜   rS   r8   rZ   r™   rN   rO   r�   rŒ   r0   r  r   r	   r   rp   r½   r]   r    r@   r  r
   r   r\   r£   )
r(  rS   r,   rO   rN   r]   r�   r�   r  r/  rD   rD   rE   r-  ž  sZ   


üÿÿ
üÿ

€ÿýÿÿr-  z/program/yenic            
      C   sB  t jdkrtƒ S t j d¡} | dkrOz tt j d¡dƒ}tt j d¡dƒ}||kr-tdƒ‚t||ƒW S  tyN } ztt|ƒd	ƒ tƒ W  Y d }~S d }~ww | d
k�rt j dd¡}d }z2t	 
|¡}t|ƒ\}}}t||t	j|dd�d�}tj |¡ tj ¡  tddƒ ttd|jd�ƒW S  ttt	jf�y } zxtt|ƒd	ƒ t|tƒ�r| d¡dk�rzOt| d¡dƒ}t| d¡dƒ}||krÿ|| jd }| d¡}	t|	tƒrót|	ƒ|krótdd„ |	D ƒƒrót|||ƒW W  Y d }~S t||ƒW W  Y d }~S W n
 t�y
   Y nw tƒ W  Y d }~S d }~ww tdd	ƒ tƒ S )Nrÿ   ÚintentÚ	configurer`   rÂ   ra   rÃ   rÄ   r  ÚsaveÚschedule_jsonr�   F)Úensure_ascii)r`   ra   rc   u'   Manuel Ã§alÄ±ÅŸma programÄ± kaydedildi.r  Úview_schedule©Úschedule_idrº   rI   rM   r¸   c                 s   s*   � | ]}t |tƒot | d ¡tƒV  qdS )r¶   Nré   rê   rD   rD   rE   r  ü  s   € 
þ
þz"schedule_create.<locals>.<genexpr>u   GeÃ§ersiz program isteÄŸi.)r   r  rþ   r}   rg   ry   rp   r   r½   rÌ   rÍ   rä   r^   Údumpsr5   r   rŒ   r  r	   r   r8   ro   rÎ   rÏ   rÐ   r¸   rš   rƒ   Úall)
r0  r`   ra   r  rÕ   Údraft_staterý   rô   Úexpected_daysr¸   rD   rD   rE   Úschedule_createÏ  sr   
€þ

ý


ÿýÿóÿ€ê
r<  z/programlarimc                  C   s,   t tj ttƒ tj ¡ ¡¡ƒ} t	d| d�S )Nzschedules.html)r_   )
rš   r5   r   r›   r   r^   rŸ   r@   r    r
   )Úschedule_listrD   rD   rE   r_     s    r_   z/programlarim/<int:schedule_id>c              
   C   sf   t  t| ¡}zt|ƒ}W n ty+ } ztt|ƒdƒ ttdƒƒW  Y d }~S d }~ww t	d||d�S )Nr  r_   zschedule_view.html)rô   Úschedule_state)
r5   r  r^   rø   rp   r   r½   r	   r   r
   )r7  rô   r>  r  rD   rD   rE   r5    s   €þr5  z#/programlarim/<int:schedule_id>/silc                 C   r  )NzProgram silindi.r  r_   )	r5   r   r‹   r  r^   r  r   r	   r   r6  rD   rD   rE   Údelete_schedule  r!  r?  c                   C   s   dt  ¡ iS )Nr\   )r   r\   rD   rD   rD   rE   Úinject_today(  s   r@  c                  C   sÄ   t j ¡ �S} dd„ tt jƒ d¡D ƒ}d|vr|  tdƒ¡ d|vr)|  tdƒ¡ |  tdƒ¡ d	d„ tt jƒ d
¡D ƒ}d|vrP|  tdƒ¡ W d  ƒ dS W d  ƒ dS 1 s[w   Y  dS )zIApply additive SQLite migrations for databases created by older releases.c                 S   ó   h | ]}|d  ’qS ©r:   rD   ©r“   ÚcolumnrD   rD   rE   Ú	<setcomp>0  r­   z*migrate_database_schema.<locals>.<setcomp>rB   rX   z.ALTER TABLE tasks ADD COLUMN control_date DATErV   z5ALTER TABLE tasks ADD COLUMN description VARCHAR(250)zHCREATE INDEX IF NOT EXISTS ix_tasks_control_date ON tasks (control_date)c                 S   rA  rB  rD   rC  rD   rD   rE   rE  7  r­   r   r=   zIALTER TABLE books ADD COLUMN exam_type VARCHAR(10) NOT NULL DEFAULT 'Yok'N)r5   ÚengineÚbeginr   Úget_columnsÚexecuter   )Ú
connectionÚtask_columnsÚbook_columnsrD   rD   rE   Úmigrate_database_schema-  s   ÿö	"÷rM  Ú__main__)Údebug)NNr¨   )NNN)UrÌ   Úosr   r   r   Ú	functoolsr   Úflaskr   r   r	   r
   r   r   r   r   r   Úflask_sqlalchemyr   Ú
sqlalchemyr   r   r   ÚpathÚabspathÚdirnameÚ__file__ÚBASE_DIRr1   ÚappÚconfigÚupdateÚenvironrg   rò   Úmakedirsr5   ÚModelr   r+   r0   r^   rm   rv   ry   r~   r€   r„   rŠ   rŽ   r�   rž   r¡   r¥   r²   r´   r¼   r¿   rä   rç   rø   rþ   Úrouterf   r
  r  r   r  Úpostr   rB   r)  r+  r,  r-  r<  r_   r5  r?  Úcontext_processorr@  rM  Úapp_contextÚ
create_allÚrunrD   rD   rD   rE   Ú<module>   sÈ    $ÿø


	


o
9

'$/;


þ
ÿ