U
    "MîhÁ  ã                   @   s¼   d dl mZ d dlmZmZ d dlmZ d dlmZmZ d dl	Z	d dl
Z
d dlZeedœdd„Zeed	œd
d„Zeedœdd„Zee
jdœdd„Zeeedœdd„Zeeeedœdd„ZdS )é    )ÚSession)ÚfuncÚand_)Údatetime)ÚListÚDictN©ÚdbÚuser_idc                 C   s   |   tj¡ tjj|k¡ ¡ S ©N)ÚqueryÚmodelsÚUserÚfilterÚidÚfirstr   © r   ú'/var/www/html/timesheet/backend/crud.pyÚget_user   s    r   ©r	   Úusernamec                 C   s   |   tj¡ tjj|k¡ ¡ S r   )r   r   r   r   r   r   r   r   r   r   Úget_user_by_username
   s    r   ©r	   Úemailc                 C   s   |   tj¡ tjj|k¡ ¡ S r   )r   r   r   r   r   r   r   r   r   r   Úget_user_by_email   s    r   )r	   Úuserc                 C   s@   t  |j¡}tj|j|j|d}|  |¡ |  ¡  |  	|¡ |S )N)r   r   Úhashed_password)
ÚauthZget_password_hashÚpasswordr   r   r   r   ÚaddÚcommitÚrefresh)r	   r   r   Údb_userr   r   r   Úcreate_user   s    ý

r#   )r	   Úactivity_datar
   c                 C   sÀ  ddl m} | dd¡d |d< | d¡r8| d¡dkrb| dd¡}d	|krb| d	¡d  ¡ |d< |  tj¡ t	tjj
|ktjj| d
d¡ktjj| dd¡ktjj| dt ¡ ¡ktjj| dd¡kƒ¡ ¡ }|r|js||ƒ}| d¡|_| d¡|_| d¡|_|  ¡  |S ||ƒ}tj|| d
d¡| dd¡| d¡| d¡| d¡| d¡| d¡| dd¡| dd¡| dt ¡ ¡| d¡| d¡| d¡d}|  |¡ |  ¡  |  |¡ |S )z2Create a new activity record (prevents duplicates)r   )Úextract_project_infoÚdurationiè  Úproject_nameZgeneralÚwindow_titleÚ z - Úapplication_nameÚUnknownÚ	timestampÚproject_typeÚproject_fileÚurlÚ	file_pathÚdatabase_connectionÚspecific_processÚdetailed_activityÚcategoryÚother)r
   r*   r(   r/   r0   r1   r2   r3   r4   r&   r,   r'   r-   r.   )Zimproved_project_extractorr%   ÚgetÚsplitÚstripr   r   ÚActivityRecordr   r   r
   r*   r(   r,   r   Únowr&   r   r'   r-   r.   r    r   r!   )r	   r$   r
   r%   r(   Zexisting_recordÚproject_infoZdb_activityr   r   r   Úcreate_activity_record   sX    
ûÿ




ñ

r<   )r	   r
   Ú
start_dateÚend_datec                 C   sj  ddl m} |  ¡ j}dt|ƒkrŒ|  tjjt	 
tjjd¡ d¡t	 tjj¡ d¡¡ ttjj|ktjj|ktjj|kƒ¡ tjj¡ ¡ }nf|  tjjt	 tjj¡ d¡t	 tjj¡ d¡¡ ttjj|ktjj|ktjj|kƒ¡ tjj¡ ¡ }tdd„ |D ƒƒ}g }|D ]D}	tt|	jr*|	j d¡ng ƒƒ}
d	d
„ |
D ƒ}
|  tj¡ ttjj|ktjj|	jktjj|ktjj|kƒ¡ tjj ¡ ¡ ¡ }| |	j|r¤|jnd|	j|dkrÂ|	j| d nd|
rÖ|
dd… ng |rä|jnd|rò|j nd|r |j!nd|r|j"nd|r|j#nd|r*|j$nd|r8|j%nd|rF|j&nddœ¡ q|j'dd„ dd |S )z+Get activity summary grouped by applicationr   )ÚtextÚ
postgresqlú,ÚurlsÚtotal_durationc                 s   s   | ]}|j V  qd S r   )rC   )Ú.0Úresultr   r   r   Ú	<genexpr>~   s     z'get_activity_summary.<locals>.<genexpr>c                 S   s   g | ]}|r|d kr|‘qS )ÚNoner   )rD   r/   r   r   r   Ú
<listcomp>ƒ   s       z(get_activity_summary.<locals>.<listcomp>r5   éd   Né
   )r*   r4   r&   Ú
percentagerB   r0   r1   r2   r3   r(   r'   r-   r.   c                 S   s   | d S )Nr&   r   )Úxr   r   r   Ú<lambda>¡   ó    z&get_activity_summary.<locals>.<lambda>T)ÚkeyÚreverse)(Ú
sqlalchemyr?   Úget_bindr/   Ústrr   r   r9   r*   r   Z
string_aggÚlabelÚsumr&   r   r   r
   r,   Úgroup_byÚallZgroup_concatÚlistÚsetrB   r7   Úorder_byÚdescr   Úappendr4   rC   r0   r1   r2   r3   r(   r'   r-   r.   Úsort)r	   r
   r=   r>   r?   Zdatabase_urlÚresultsÚ
total_timeÚsummaryrE   rB   Zsample_recordr   r   r   Úget_activity_summaryY   sz    
ý


ýûõ
ý


ýûõ
 


üÿ
ù	òra   )Úsqlalchemy.ormr   rQ   r   r   r   Útypingr   r   r   Úschemasr   Úintr   rS   r   r   Ú
UserCreater#   r<   ra   r   r   r   r   Ú<module>   s   =