U
    ¾%Ðhg  ã                   @   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   sf  ddl m} |  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Úapplication_nameÚUnknownÚwindow_titleÚ Ú	timestampÚdurationÚproject_nameÚ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project_extractorr%   r   r   ÚActivityRecordr   r   r
   r&   Úgetr(   r*   r   Únowr+   r   r,   r-   r.   r    r   r!   )r	   r$   r
   r%   Zexisting_recordÚproject_infoZdb_activityr   r   r   Úcreate_activity_record   sN    
ûÿ




ñ

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   )rA   )Ú.0Úresultr   r   r   Ú	<genexpr>t   s     z'get_activity_summary.<locals>.<genexpr>c                 S   s   g | ]}|r|d kr|‘qS )ÚNoner   )rB   r/   r   r   r   Ú
<listcomp>y   s       z(get_activity_summary.<locals>.<listcomp>r5   éd   Né
   )r&   r4   r+   Ú
percentager@   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   r6   r&   r   Z
string_aggÚlabelÚsumr+   r   r   r
   r*   Úgroup_byÚallZgroup_concatÚlistÚsetr@   ÚsplitÚorder_byÚdescr   Úappendr4   rA   r0   r1   r2   r3   r(   r,   r-   r.   Úsort)r	   r
   r;   r<   r=   Zdatabase_urlÚresultsÚ
total_timeÚsummaryrC   r@   Zsample_recordr   r   r   Úget_activity_summaryO   sz    
ý


ýûõ
ý


ýûõ
 


üÿ
ù	òr`   )Úsqlalchemy.ormr   rO   r   r   r   Útypingr   r   r   Úschemasr   Úintr   rQ   r   r   Ú
UserCreater#   r:   r`   r   r   r   r   Ú<module>   s   3