a
    Öò‘i}T  ã                   @   sz  d dl mZmZmZmZmZmZmZmZ d dl	Z
d dlmZmZ d dlZd dlmZ d dlmZmZ d dlmZ d dlZd dlZd dlmZmZ d dlZd dlmZ d d	lmZ d dlZee ƒZ!d
e!_"de!j#d< de!j#d< de!j#d< de!j#d< de!j#d< de!j#d< ee!ƒZ$dddddœZ%dd„ Z&dd„ Z'dd „ Z(e! )d!¡d"d#„ ƒZ*e!j)d$d%gd&d'd(„ ƒZ+e!j)d)d%gd&d*d+„ ƒZ,e! )d,¡e(d-d.„ ƒƒZ-e! )d/¡d0d1„ ƒZ.e! )d2¡e(d3d4„ ƒƒZ/e!j)d5d6gd&e(d7d8„ ƒƒZ0e!j)d5d%gd&e(d9d:„ ƒƒZ1e!j)d;d%gd&e(d<d=„ ƒƒZ2d>d?„ Z3d@dA„ Z4e! )dB¡e(dCdD„ ƒƒZ5e! )dE¡e(dFdG„ ƒƒZ6e!j)dHd%gd&e(dIdJ„ ƒƒZ7e dKkrve!j8dLdMdNdO dS )Pé    )ÚFlaskÚrender_templateÚrequestÚjsonifyÚsessionÚredirectÚurl_forÚ	send_fileN)ÚdatetimeÚ	timedelta)ÚDocument)ÚPtÚRGBColor)ÚWD_ALIGN_PARAGRAPH)ÚMailÚMessage)ÚMIMEText)ÚMIMEMultipartzR0mt3l3c0m!zbox.lbsol.roÚMAIL_SERVERiK  Ú	MAIL_PORTTZMAIL_USE_TLSzconcedii@lbsol.roÚMAIL_USERNAMEzQpq9kbmbr6!ÚMAIL_PASSWORDÚMAIL_DEFAULT_SENDERZ	localhostÚrootZ
romtelecomZevidenta_deconturi)ÚhostÚuserÚpasswordZdatabasec                   C   s   t jjf i t¤ŽS )N)ÚmysqlZ	connectorZconnectÚ	DB_CONFIG© r   r   ú&/var/www/html/concedii/app_mysql_v2.pyÚget_db_connection)   s    r!   c                    s*   ‡ fdd„}t j|d}d|_| ¡  dS )z:Trimite email la HR cand ambele parti au semnat - asincronc                     s¶  zzt ƒ } | jdd}| dˆ f¡ | ¡ }| ¡  |  ¡  |sFW d S tƒ }tjd |d< d|d< d|d	 › |d
< d|d	 › d|d › d|d  d¡› d|d  d¡› d|d › d|d › d|d rÔ|d  d¡nd› d|d rð|d  d¡nd› d}| 	t
|dƒ¡ tjtjd tjd  d!d"}| ¡  | tjd# tjd$ ¡ | ¡ }| |d |d |¡ | ¡  td%ˆ › ƒ W n4 ty° } ztd&|› ƒ W Y d }~n
d }~0 0 d S )'NT©Ú
dictionaryú+SELECT * FROM cereri_concediu WHERE id = %sr   ZFromzhr@lbsol.roZTozCerere de concediu semnata - ÚnameZSubjectzd
Buna ziua,

O cerere de concediu a fost semnata de ambele parti si asteapta aprobare:

Solicitant: z
Inlocuitor: Úinlocuitor_namez
Perioada: Ú
data_startú%d.%m.%Yz - Údata_sfarsitz
Numar zile: Únr_zilez
Data completare: Údata_completarez

Data semnare solicitant: Údata_semnare_solicitantz%d.%m.%Y %H:%MzN/Az
Data semnare inlocuitor: Údata_semnare_inlocuitorzX

Accesati aplicatia pentru a aproba cererea.

Aplicatie Cereri de Concediu
            Zplainr   r   é
   )Ztimeoutr   r   z(? Email trimis cu succes pentru cererea z? Eroare trimitere email: )r!   ÚcursorÚexecuteÚfetchoneÚcloser   ÚappÚconfigÚstrftimeZattachr   ÚsmtplibZSMTPZstarttlsÚloginZ	as_stringZsendmailÚquitÚprintÚ	Exception)Úconnr/   ÚcerereÚmsgÚbodyZserverÚtextÚe©Ú	cerere_idr   r    Ú
send_async.   sP    ûúùùø	÷õôz+send_email_notification.<locals>.send_async)ÚtargetTN)Ú	threadingZThreadZdaemonÚstart)rB   rC   Úthreadr   rA   r    Úsend_email_notification,   s    8rH   c                    s$   ddl m} |ˆ ƒ‡ fdd„ƒ}|S )Nr   )Úwrapsc                     s&   dt vrtddiƒdfS ˆ | i |¤ŽS )NÚuser_idÚerrorZNeautentificaté‘  )r   r   )ÚargsÚkwargs©Úfr   r    Údecorated_functionm   s    z*login_required.<locals>.decorated_function)Ú	functoolsrI   )rP   rI   rQ   r   rO   r    Úlogin_requiredk   s    rS   z/loginc                   C   s   t dƒS )Nz
login.html)r   r   r   r   r    Ú
login_pagev   s    rT   z
/api/loginZPOST)Úmethodsc               
   C   sL  t  ¡ } |  d¡}|  d¡}tƒ }|jdd}| d|f¡ | ¡ }| ¡  | ¡  |shtddiƒdfS zD|d }t	|t
ƒr†| d	¡}t | d	¡|¡sªtddiƒdfW S W nB tyî } z*td
|› ƒ tddiƒdfW  Y d }~S d }~0 0 |d td< |d td< |d td< | dd¡td< td|d |d |d td dœdœƒS )NÚusernamer   Tr"   z+SELECT * FROM employees WHERE username = %srK   u   Username sau parolÄƒ incorectÄƒrL   zutf-8u   Eroare verificare parolÄƒ: ÚidrJ   r%   Úroler   ©rW   r%   rV   rX   )Úsuccessr   )r   Úget_jsonÚgetr!   r/   r0   r1   r2   r   Ú
isinstanceÚstrÚencodeÚbcryptZcheckpwr:   r9   r   )ÚdatarV   r   r;   r/   r   Zpassword_hashr@   r   r   r    r7   z   s@    



&üþr7   z/api/logoutc                   C   s   t  ¡  tddiƒS )NrZ   T)r   Úclearr   r   r   r   r    Úlogout¨   s    rc   z/api/current-userc                   C   s"   t td td td td dœƒS )NrJ   r%   rV   rX   rY   )r   r   r   r   r   r    Úcurrent_user­   s    ürd   ú/c                   C   s   dt vrttdƒƒS tdƒS )NrJ   rT   zindex_mysql_v2.html)r   r   r   r   r   r   r   r    Úindex¹   s    rf   z
/api/usersc                  C   s<   t ƒ } | jdd}| d¡ | ¡ }| ¡  |  ¡  t|ƒS )NTr"   z6SELECT id, name, username FROM employees ORDER BY name)r!   r/   r0   Úfetchallr2   r   )r;   r/   Zusersr   r   r    Ú	get_usersÀ   s    
rh   z/api/cereriZGETc            	      C   sÐ   t ƒ } | jdd}t dd¡}t dd¡}t d¡}g d¢}|d	ksL||v rX| d
¡ n| d||f¡ | ¡ }| ¡  |  ¡  |D ]B}dD ]8}| |¡rŒt|| dƒr´||  ¡ n
t	|| ƒ||< qŒq„t
|ƒS )NTr"   rX   r   rV   Ú rJ   ©Úadminzcalin.lisovschizrares.lisovschirk   a  
            SELECT c.*, e1.name as name, e2.name as inlocuitor_name
            FROM cereri_concediu c
            LEFT JOIN employees e1 ON c.user_id = e1.id
            LEFT JOIN employees e2 ON c.inlocuitor_id = e2.id
            ORDER BY c.created_at DESC
        aF  
            SELECT c.*, e1.name as name, e2.name as inlocuitor_name
            FROM cereri_concediu c
            LEFT JOIN employees e1 ON c.user_id = e1.id
            LEFT JOIN employees e2 ON c.inlocuitor_id = e2.id
            WHERE c.user_id = %s OR c.inlocuitor_id = %s
            ORDER BY c.created_at DESC
        )r'   r)   r,   r-   Z
created_atZdata_aprobareÚ	isoformat)r!   r/   r   r\   r0   rg   r2   Úhasattrrl   r^   r   )	r;   r/   Ú	user_rolerV   rJ   Úallowed_usersÚcererir<   Úkeyr   r   r    Ú
get_cereriË   s&    
	ù	
.rr   c                  C   sÚ  t  ¡ } |  d¡}|  d¡}|  d¡}|  d¡}t||||gƒsPtddiƒdfS ||krhtddiƒdfS t |d	¡}t |d	¡}|| jd
 }|dkr¦tddiƒdfS tƒ }|j	dd}	|	 
d|f¡ |	 ¡ }
|	 
d|f¡ |	 ¡ }|
rî|s|	 ¡  | ¡  tddiƒdfS t ¡  d¡}|	 
d||
d |||||d |f¡ |	j}| ¡  z8t||
d |d ||||ƒ}|	 
d||f¡ | ¡  W n4 tyº } ztd|› ƒ W Y d }~n
d }~0 0 |	 ¡  | ¡  td|dœƒS )NrJ   r'   r)   Úinlocuitor_idrK   u!   Toate cÃ¢mpurile sunt obligatoriié  u3   ÃŽnlocuitorul trebuie sÄƒ fie o persoanÄƒ diferitÄƒú%Y-%m-%dé   r   u   Perioada invalidÄƒTr"   z(SELECT name FROM employees WHERE id = %szUtilizator invalidr(   zÙ
        INSERT INTO cereri_concediu 
        (user_id, name, data_start, data_sfarsit, nr_zile, inlocuitor_id, inlocuitor_name, data_completare, status)
        VALUES (%s, %s, %s, %s, %s, %s, %s, %s, 'pending')
    r%   ú6UPDATE cereri_concediu SET pdf_path = %s WHERE id = %szEroare generare PDF: )rZ   rW   )r   r[   r\   Úallr   r
   ÚstrptimeÚdaysr!   r/   r0   r1   r2   Únowr5   Z	lastrowidÚcommitÚgenerate_pdfr:   r9   )ra   rJ   r'   r)   rs   rF   Úendr*   r;   r/   Ú
solicitantÚ
inlocuitorr+   rB   Úpdf_pathr@   r   r   r    Úcreate_cerereø   sN    




ü$r‚   z/api/cereri/<int:id>/semneazac           
   
   C   s|  t  ¡ }| d¡}|dvr*tddiƒdfS tƒ }|jdd}| d| f¡ | ¡ }|sv| ¡  | ¡  tdd	iƒd
fS t	 
¡ }|dkr˜| d|| f¡ n| d|| f¡ | ¡  | d| f¡ | ¡ }| ¡  | ¡  zBt| ƒ}tƒ }| ¡ }| d|| f¡ | ¡  | ¡  | ¡  W n4 tyL }	 ztd|	› ƒ W Y d }	~	n
d }	~	0 0 |rp|d rp|d rpt| ƒ tddiƒS )NÚtip)r   r€   rK   zTip invalidrt   Tr"   r$   õ   Cerere negÄƒsitÄƒé”  r   zŒ
            UPDATE cereri_concediu 
            SET semnat_solicitant = 1, data_semnare_solicitant = %s 
            WHERE id = %s
        zŒ
            UPDATE cereri_concediu 
            SET semnat_inlocuitor = 1, data_semnare_inlocuitor = %s 
            WHERE id = %s
        zNSELECT semnat_solicitant, semnat_inlocuitor FROM cereri_concediu WHERE id = %srw   zEroare regenerare PDF: Úsemnat_solicitantÚsemnat_inlocuitorrZ   )r   r[   r\   r   r!   r/   r0   r1   r2   r
   r{   r|   Úgenerate_pdf_with_signaturesr:   r9   rH   )
rW   ra   rƒ   r;   r/   r<   r{   Úcheckr   r@   r   r   r    Úsemneaza_cerere9  sL    
üü$rŠ   c                 C   sT  d}t j |¡std|› ƒ‚t|ƒ}||t |d¡ d¡t |d¡ d¡t|ƒ|dddddœ
}	|j	D ]0}
|	 
¡ D ]"\}}||
jv rr|
j ||¡|
_qrqf|jD ]H}|jD ]<}|jD ]0}|	 
¡ D ]"\}}||jv r¾|j ||¡|_q¾q²q¨qž| dd	¡› d	t ¡  d
¡› d}d|› }| |¡ | dd¡}d|› }tjdddddd|gdd |S )u)   GenereazÄƒ PDF iniÈ›ial fÄƒrÄƒ semnÄƒturiúC/var/www/html/concedii/templates_word/cerere_concediu_template.docxu   Template nu existÄƒ: ru   r(   ú ................................ri   ©
z{NUME_SOLICITANT}z{NUME_INLOCUITOR}z{DATA_START}z{DATA_SFARSIT}z	{NR_ZILE}z{DATA_COMPLETARE}z{SEMNATURA_SOLICITANT}z{DATA_SEMNARE_SOLICITANT}z{SEMNATURA_INLOCUITOR}z{DATA_SEMNARE_INLOCUITOR}ú ú-ú%Y%m%dú.docxú"/var/www/html/concedii/cereri_pdf/ú.pdfÚlibreofficeú
--headlessú--convert-toÚpdfú--outdirú!/var/www/html/concedii/cereri_pdfT©r‰   )ÚosÚpathÚexistsÚFileNotFoundErrorr   r
   ry   r5   r^   Ú
paragraphsÚitemsr?   ÚreplaceÚtablesÚrowsÚcellsr{   ÚsaveÚ
subprocessÚrun)rB   Znume_solicitantZnume_inlocuitorr'   r)   r*   r+   Útemplate_pathÚdocÚreplacementsÚ	paragraphrq   ÚvalueÚtableÚrowÚcellÚfilenameÚ	docx_pathÚpdf_filenamer   r   r   r    r}   x  sL    ö





"


ýür}   c                 C   s°  t ƒ }|jdd}| d| f¡ | ¡ }| ¡  | ¡  |sDtdƒ‚d}t|ƒ}|d r`|d nd}|d	 rz|d	  d
¡nd}|d rŽ|d nd}|d r¨|d  d
¡nd}	|d |d |d  d
¡|d  d
¡t|d ƒ|d ||||	dœ
}
|j	D ]}|
 
¡ D ]‚\}}||jv r d|v rp|dkrp|jD ]>}||jv r.|j ||¡|_d|j_tdƒ|j_d|j_q.n|j ||¡|_q qô|jD ]¼}|jD ]®}|jD ] }|
 
¡ D ]\}}||jv r¬d|v r*|dkr*|j	D ]L}|jD ]>}||jv rä|j ||¡|_d|j_tdƒ|j_d|j_qäqÚn|j ||¡|_q¬q q–qŒ|d  dd¡› dt ¡  d¡› d}d|› }| |¡ | dd¡}tjdddd d!d"|gdd# |S )$u0   RegenereazÄƒ PDF cu semnÄƒturi (nume Ã®n cursiv)Tr"   r$   r„   r‹   r†   r%   rŒ   r,   r(   ri   r‡   r&   r-   r'   r)   r*   r+   r   Z	SEMNATURAzBrush Script MTé   rŽ   r   r   r‘   r’   r“   r”   r•   r–   r—   r˜   r™   rš   )r!   r/   r0   r1   r2   Ú
ValueErrorr   r5   r^   rŸ   r    r?   Úrunsr¡   Zfontr%   r   ÚsizeZboldr¢   r£   r¤   r
   r{   r¥   r¦   r§   )rB   r;   r/   r<   r¨   r©   Zsemn_solZdata_semn_solZsemn_inlZdata_semn_inlrª   r«   rq   r¬   r§   r­   r®   r¯   r°   r±   r²   r   r   r    rˆ   ¬  s|    
ö






 &

ýürˆ   z/api/cereri/<int:id>/pdfc                 C   sŠ   t ƒ }|jdd}| d| f¡ | ¡ }| ¡  | ¡  |rD|d sTtddiƒdfS d|d › }tj |¡s~tdd	iƒdfS t	|dd
S )NTr"   z2SELECT pdf_path FROM cereri_concediu WHERE id = %sr   rK   u   PDF negÄƒsitr…   r’   u   FiÈ™ier PDF negÄƒsit)Zas_attachment)
r!   r/   r0   r1   r2   r   r›   rœ   r   r	   )rW   r;   r/   r<   r   r   r   r    Údownload_pdfÿ  s    r·   z/api/calendarc                  C   s¢   t ƒ } | jdd}| d¡ | ¡ }| ¡  |  ¡  g }|D ]\}| |d |d  ¡ |d tdd  ¡ |d	 d
krxdnd|d |d |d	 dœdœ¡ q<t|ƒS )NTr"   zÒ
        SELECT c.*, e1.name as name, e2.name as inlocuitor_name
        FROM cereri_concediu c
        LEFT JOIN employees e1 ON c.user_id = e1.id
        LEFT JOIN employees e2 ON c.inlocuitor_id = e2.id
    r%   r'   r)   rv   )rz   ÚstatusZpendingz#667eeaz#27ae60r*   r&   )r*   r€   r¸   )ÚtitlerF   r~   ZcolorZextendedProps)	r!   r/   r0   rg   r2   Úappendrl   r   r   )r;   r/   rp   Zeventsr<   r   r   r    Úget_calendar  s&    

ýû
r»   z/api/cereri/<int:id>/aprobac           	   
   C   sz  t  dd¡}t  dd¡}g d¢}|dkr@||vr@tddiƒd	fS tƒ }|jd
d}| d| f¡ | ¡ }|sŒ| ¡  | ¡  tddiƒdfS |d rœ|d s¼| ¡  | ¡  tddiƒdfS | dt d | f¡ | ¡  | ¡  | ¡  zPt	| ƒ}tƒ }| ¡ }| d|| f¡ | ¡  | ¡  | ¡  t
d|› ƒ W n4 tyl } zt
d|› ƒ W Y d }~n
d }~0 0 tdd
iƒS )NrX   r   rV   ri   rj   rk   rK   z#Nu aveti dreptul sa aprobati cererii“  Tr"   r$   zCerere negasitar…   r†   r‡   z;Cererea trebuie semnata de ambele parti inainte de aprobarert   zœ
        UPDATE cereri_concediu 
        SET status = 'approved', 
            data_aprobare = NOW(),
            aprobat_de = %s
        WHERE id = %s
    r%   rw   z? PDF regenerat la aprobare: z%? Eroare regenerare PDF la aprobare: rZ   )r   r\   r   r!   r/   r0   r1   r2   r|   rˆ   r9   r:   )	rW   rn   rV   ro   r;   r/   r<   r   r@   r   r   r    Úaproba_cerere2  sF    
ú$r¼   Ú__main__z0.0.0.0iˆ  F)r   ZportÚdebug)9Zflaskr   r   r   r   r   r   r   r	   Zmysql.connectorr   r
   r   r›   Zdocxr   Zdocx.sharedr   r   Zdocx.enum.textr   r¦   r`   Z
flask_mailr   r   r6   Zemail.mime.textr   Zemail.mime.multipartr   rE   Ú__name__r3   Z
secret_keyr4   Zmailr   r!   rH   rS   ZrouterT   r7   rc   rd   rf   rh   rr   r‚   rŠ   r}   rˆ   r·   r»   r¼   r§   r   r   r   r    Ú<module>   s„   (





ü?

-


	+?=4S8
