o
    Rgި                     @   s  d dl mZmZ ddlT d dlmZ d dlmZ d dlm	Z	 d dl
mZmZmZmZ d dlZd dl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mZ d dlmZ ddlT 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'm(Z(m)Z) d dl*m+Z+ d dl,Z,d dl-Z-d dl.Z.d dl/m0Z0 d dl1Z1d dl2Z2d dl3m4Z4 d dl5m6Z6 d dl/m0Z0 d dl7Z7d dl8Z8d dl9m9Z9 d dlmZ d dl:Z:d dl;m<Z< d dlm=Z= d dl>m?Z? d dl@mAZA edd ZBdd ZCG d d! d!e	ZDG d"d# d#e	ZEG d$d% d%e	ZFG d&d' d'e	ZGed(d) ZHed*d+ ZIG d,d- d-e	ZJG d.d/ d/e	ZKG d0d1 d1e	ZLed2d3 ZMed4d5 ZNed6d7 ZOed8d9 ZPd:d; ZQed<d= ZRd>eSfd?d@ZTdAdB ZUdCdD ZVdEdF ZWedGdH ZXedIdJ ZYG dKdL dLe	ZZedMdN Z[edOdP Z\edQdR Z]edSdT Z^edUdV Z_edWdX Z`G dYdZ dZe	Zaed[d\ Zbed]d^ Zce d_d` Zdedadb Zedcdd Zfdedf Zgdgdh Zhdidj Zidkdl Zjdmdn Zkdodp ZldS )q    )renderredirect   )*)messages)Q)View)authenticateloginupdate_session_auth_hashlogoutN)ContentFile)JsonResponseHttpResponse)login_required)datetime)settings)Image)	send_mailEmailMessage)Group)urlsafe_base64_decodeurlsafe_base64_encode)	smart_strforce_bytes)PasswordResetTokenGenerator)Document)	PdfReader)config)pytesseract)timezone)	timedelta)	timesince)serializersc                 C   s  t jj| jdd}tjj| jjdd}g }|D ] }t  d }|jr-|jj	r-|jj	}|
|j||jdd qtj|ddtd}g }|D ]1}d }d }|jr[|jjr[|jjj	}|jrd|jd	}|
|j||jj|jd	|j||jd
 qItj|ddtd}tj|ddtd}d||||d}	| jdkrXtd t| j}
|
d}|
d}|
d}|
d}t|||| |rtt|dnd }|rtt|dnd }t }|r|t|dO }|r|t|dO }|r|t| dO }|r|t| dO }||}t|  g }|D ]5}d }d }|jr)|jjr)|jjj	}|jr3|jd	}|
|j||jj|jd	|j||jd qt| t || dS t!| d|	dS )Nuser-id	recipientz%Y-%m-%d, %H:%M)iddocumentsign_at   Tindent	sort_keysdefault%Y-%m-%d %H:%M)r)   r*   	send_fromsent_atis_signr+   linkHome)titledatadocuments_send_to_me	json_datasendme_json_dataPOSTcalldocument_nameemail	sent_date	sign_date%Y-%m-%d-main_document__main_document__name__icontains)user__email__icontainscreated_at__datesign_at__date)r)   r>   	sent_fromr3   r4   r+   r5   r8   resultszmyapp/home.htmlcontext)"sign_documentsobjectsfilterr%   order_byRecipients_sign_documentsr?   printmain_documentnameappendr)   
created_atstrftimejsondumpsstrr+   get_full_namer4   r5   methodloadsbodygetr    
make_awarer   strptimer   datecountr   r   )requestr8   r9   sign_json_datair>   r:   r;   timerN   r`   doc_namer?   r@   rA   filter_query rl    /var/www/html/dev/myapp/views.pyhome'   s   




	






	rn   c           	      C   s   | j dkrh| jd}| jd}| jd}| jd}| jd}tjt|d}| r<tj	| dd	d
 t
dS ||kr\tjj|||||d}tjjdd}|j| t
dS tj	| dd	d
 t
dS t| dS )Nr<   r?   
first_name	last_name	password1	password2r?   Email Already Exists !*alert alert-warning alert-dismissible show
extra_tagsregisterr?   usernamero   rp   passwordAdminrV   r
   )Password and Confirm Password not matchedzmyapp/register.html)r^   r<   ra   User_ProfilerP   rQ   r   existsr   errorr   create_userr   groupsaddr   )	rf   r?   ro   rp   rq   rr   queryr%   admin_grouprl   rl   rm   rx   |   s$   

rx   c                   @      e Zd Zdd Zdd ZdS )Add_userc                 C   s   t  }d|d}t|d|dS )NAdd Userr7   formmyapp/add_user.htmlrM   )Add_User_Formr   )selfrf   r   rN   rl   rl   rm   ra      s   
zAdd_user.getc                 C   s   t |j|j}|jd}t| | rI| }|jj|_t	j
jdd}|j| |r0||_|  tj|d|j d|j ddd td	S tj|d
dd d|d}t|d|dS )Nimageregular userr}   zUser  z created successfully !!z+alert alert-success alert-dismissible showsrv   add_userz'Something went wrong please check belowz+alert alert-warning alert-dismissible showsr   r   r   rM   )r   r<   FILESra   rT   is_validsaver%   organisationr   rP   r   r   profile_picr   successro   rp   r   warningr   )r   rf   r   r   r%   
user_grouprN   rl   rl   rm   post   s    
"
zAdd_user.postN__name__
__module____qualname__ra   r   rl   rl   rl   rm   r          r   c                   @   r   )	LoginViewc                 C   s
   t |dS )Nzmyapp/login.htmlr   )r   rf   rl   rl   rm   ra      s   
zLoginView.getc                 C   s~   |j d}t| |j d}t||d}t| |jd}|d ur3t|| |r/t|S tdS tj|ddd td	S )
Nr?   rq   r?   r{   nextrn   zEmail or password is incorrectru   rv   r
   )	r<   ra   rT   r	   GETr
   r   r   r   )r   rf   r?   r{   r%   next_urlrl   rl   rm   r      s   
zLoginView.postNr   rl   rl   rl   rm   r      s    r   c                   @      e Zd Zdd ZdS )Profileviewc                 C   s.   d}t jj|jjd}||d}t|d|dS )Nz
My Profiler)   )r7   r%   zmyapp/profile.htmlrM   )r   rP   ra   r%   r)   r   )r   rf   r7   r%   rN   rl   rl   rm   ra      s   
zProfileview.getNr   r   r   ra   rl   rl   rl   rm   r          r   c                   @   r   )ProfileUpdateviewc                 C   s8   d}t jj|jjd}t|d}||d}t|d|dS )NProfiler   instancer   myapp/update_profile.htmlrM   )r   rP   ra   r%   r)   Update_Profile_Formr   )r   rf   r7   r   r   rN   rl   rl   rm   ra      s
   

zProfileUpdateview.getc                 C   s   t jj|jjd}t|j|j|d}|jd}| r5|	  |r)||_
|	  tj|ddd tdS tj|dd	d d
}t jj|jjd}||d}t|d|dS )Nr   r   r   zProfile Updated Successfully !!alert alert-successrv   profilez(Something went wrong, Please check belowalert alert-warningzUpdate Profiler   r   rM   )r   rP   ra   r%   r)   r   r<   r   r   r   r   r   r   r   r   r   )r   rf   r   r   r   r7   rN   rl   rl   rm   r      s   
zProfileUpdateview.postNr   rl   rl   rl   rm   r      s    r   c                 C   s   | j dkr=t| j| j}| r'|jdd}t| | tj| ddd t	dS tj
| dd	d d
}||d}t| d|dS t| j}d
}||d}t| d|dS )Nr<   T)commitzPassword changed successfullyr   rv   change_passwordz6New password & confirm new password are not matched !!r   zChange Password)r   r7   zmyapp/change_password.htmlrM   )r^   ChangePasswordFormr%   r<   r   r   r   r   r   r   r   r   )rf   r   r%   r7   rN   rl   rl   rm   changepassword   s   




r   c                 C   s   t |  tdS )Nr
   )r   r   rf   rl   rl   rm   user_logout   s   r   c                   @   r   )Signatureiewc                 C   s,   d}t jj|jd}||d}t|d|dS )N
Signaturesr$   )r7   
signatureszmyapp/signature.htmlrM   )	SignaturerP   rQ   r%   r   )r   rf   r7   r   rN   rl   rl   rm   ra     s   
zSignatureiew.getNr   rl   rl   rl   rm   r     r   r   c                   @   r   )AddSignatureiewc                 C      d}d|i}t |d|dS )Nr   r7   zmyapp/add_signature.htmlrM   r   r   rf   r7   rN   rl   rl   rm   ra        zAddSignatureiew.getc           	      C   sx   t d t|j}t | |d }|d\}}|dd }tt|d| d}t|j	|d}|
  td	d
iS )Nr=   r   z;base64,/z
signature.r}   r%   	signaturer   T)rT   rZ   r_   r`   splitr   base64	b64decoder   r%   r   r   )	r   rf   r8   
image_dataformatimgstrextfileobjrl   rl   rm   r     s   zAddSignatureiew.postNr   rl   rl   rl   rm   r     r   r   c                   @   r   )UploadSignatureiewc                 C   r   )Nr   r7   zmyapp/upload_signature.htmlrM   r   r   rl   rl   rm   ra   !  r   zUploadSignatureiew.getc                 C   sf   t d |jd}t | t|j|d}|  |jddkr'tddiS tj	|dd	d
 t
dS )Nr=   r   r   z	X-Is-Ajaxtruer   Tz"Signature uploaded successfully !!r   rv   upload_signature)rT   r   ra   r   r%   r   headersr   r   r   r   )r   rf   r   r   rl   rl   rm   r   &  s   zUploadSignatureiew.postNr   rl   rl   rl   rm   r      r   r   c                 C   s`   | j dkr)| jd r)td | jd}t| t| j|d}|  tddiS tddd	S )
Nr<   r   r=   )r%   stampr   TFzInvalid request)r   r   )r^   r   rT   ra   Stampr%   r   r   )rf   r   r   rl   rl   rm   UploadStampiew1  s   r   c                 C   .   t jj|d}|  tj| ddd tdS )Nr   zSign Deleted Successfullyr   rv   r   )r   rP   ra   deleter   r   r   )rf   r)   signrl   rl   rm   delete_sign<  s   r   c                 C      t dS )Nr   r   r   rl   rl   rm   delete_sign_cancelC     r   c                 C   sh  d}| j dkr0| jd}| jd}| jd}| jd}t| j g }g }| jD ]}|dr<|| j|  q,|drI|| j|  q,t| t| g }	d	d
 t||D }
|r$|j	dsm|j	drt
|| jd}|  |jj}t d}|j}tj|d }| dtj|d  | }tjtjd}tj||}t|| t|}|d}tj||dd d }|| d|dd  d|_|  t| n|j	ds|j	drdtjd< dtjd< dtjd< dtjd < d!tjd"< t
||j| jd#}|  |jj}t| t d}|j}tj|d }| dtj|d  | }tjtjd}tj||}t|| d$}d%d&d'd(|d)|g}tj|tj tj tj! d*}t|j"#  t|j$#  |dkrtd+ ntd,|  t| d|dd  d|_|  nUt
||j| jd#}|  |jj}t| t d}|j}tj|d }| dtj|d  | }tjtjd}tj||}t|| d| |_|  |rt%d-S |	|
||d. t&'|	}|(d/}t)*|}|#d/}t%d0|d1S t+j,| d2d3d4 t%d5S t%d5S )6NzAdd documentr<   r   checksubjectmessageemail_name_c                 S   s   g | ]	\}}||d qS ))r?   rV   rl   ).0r?   rV   rl   rl   rm   
<listcomp>]  s    z add_document.<locals>.<listcomp>z.jpgz.png)r*   r%   z%Y%m%d_%H%M%Sr   _r   	documentsRGB..pdfz
documents/z.docxz.docz/var/www/.libreofficeHOMEz/var/www/.libreoffice/.cacheXDG_CACHE_HOMEz/var/www/.libreoffice/.configXDG_CONFIG_HOMEz"/var/www/.libreoffice/.local/shareXDG_DATA_HOMEz"/usr/lib/jvm/java-11-openjdk-amd64	JAVA_HOME)r*   rV   r%   z!/var/www/html/dev/media/documentslibreoffice
--headless--convert-tozpdf:writer_pdf_Export--outdir)stdoutstderrenvpdf conversion completed	error is sign_document)emailsr   r   utf-8make_envelope)encoded_listzPlease select a file to upload.z/alert alert-warning alert-dismissible fade showrv   rn   )-r^   r   ra   r<   rT   
startswithrW   ziprV   endswith	Documentsr%   r   r*   pathr   nowrY   ossplitextjoinr   
MEDIA_ROOTrenamer   openconvertr   removeenviron
subprocessrunPIPEcopyr   decoder   r   rZ   r[   encoder   urlsafe_b64encoder   r   )rf   r7   r   r   r   r   namesr   key
recipientslist_of_dictsr   
input_pathcurrent_datetimeoriginal_filenamefile_extensionnew_filenamefolder_pathnew_file_pathr   imlr  outdircommandStringsresultlist_string
list_bytesencoded_bytesencoded_stringrl   rl   rm   add_documentG  s   



















r'  c                  C   sF   d} dddddd| g}t |}|dkrtd	 d S td
|  d S )Nz/var/www/html/devr   r   r   pdfz*Lavender_Bay_Boatshed_Website_Testing.docxr   r   r   r   )r  r=   rT   )r   r!  r"  rl   rl   rm   r
    s   
r
  c                 C   s  t | t|}|d}t|}t | d}tjj| j	d}|r+|
 }t | | jdkrt d tjj| j	jd}|j d|j }d| jvrTtd	d
dddS | jd }	| jd}
| jd}| jd}t | t|}t | tjj|
d}| j	}d|j dt d d}tjtjd|}t|d}|	 D ]}|| qW d    n1 sw   Y  tjj ||d| |d}||_!|"  |}|d d D ]}t#jj |||d d qt$|||j%| j	j|j}td|j&j'dS ||d}t(| d |d!S )"Nr   zPrepare Documentr$   r<   r=   r   r   r(  r   No PDF file uploaded.statusr     r+  doc_idimagesdynamic_valuezprepare document_r   %Y%m%d%H%M%Sr   prepare_documentswbzprepare_documents/)rU   r%   r*   rV   r   r   r?   )rU   r%   r(   r   )r+  pdf_path)r7   r*   zmyapp/make_envelope.htmlrM   ))rT   r   urlsafe_b64decoder  rZ   r_   r  rP   rQ   r%   lastr^   r   ra   r)   ro   rp   r   r   r<   r   r  rY   r  r  r  r   r  r	  chunkswriter2  createsign_positionsr   rS   
send_emailr?   r*   urlr   )rf   r   decoded_bytesdecoded_stringdecoded_listr7   r*   r%   rV   pdf_filer.  r:  r0  	positionspdf_namer4  fchunk
signed_docr  rh   r   rN   rl   rl   rm   r     sT   







r   r  c              
   C   sZ  t t|}t t|}| d d D ]}|d }d}	| dtj d}
tjj|d rqtjj|d}t	 
|}t t|j}d| d	| d	| d	| d		}tjj|d
 }||_|  | d}t|j||d}|  n!tt }d| d	| d	| d	}| d}t||d}|  d| }|g}t|	||
||gd}|jdd qd S )Nr   r   r?   zComplete with DigiSignz via Digisign <>rs   z&https://dev.arushhr.com/sign-document/r   r'   z send you document for signr%   r   r5   z!https://dev.arushhr.com/new-user/)r%   r   z
DigiSign: )reply_toF)fail_silently)r   r   r   EMAIL_HOST_USERr   rP   rQ   r   ra   r   
make_tokenr)   rS   r6  r5   r   Notificationr?   r\   uuiduuid4r   send)r  rV   
user_emailuser_idr.  uiddoc_id_encodedrh   r?   r   
from_emailr%   tokenuser_id_encodedr5   r(   r   r   custom_tokenrecipient_listrl   rl   rm   r;  
  s6   



r;  c              	   C   s  t t|}| jdkr| jd}| jd}| jd}| jd}| jd}	tjt|d}
|
	 rBt
j| dd	d
 tdS ||	krtjj|||||d}tjj|d}|j|_|  tjjdd}|j| t||d}|d urt| | t |}tt|j}d| d| d| d| d	}tjj|jd }||_|  tjj|jd }||_|  t|S nt
j| dd	d
 tdS t| dS )Nr<   r?   ro   rp   rq   rr   rs   rt   ru   rv   rx   ry   r   r   r}   r   z$http://127.0.0.1:8000/sign-document/r   r'   r$   r~   zmyapp/new_user.html) r   r   r^   r<   ra   r   rP   rQ   r   r   r   r   r   r   r   r   r   r   r   r	   r
   r   rK  r   r   r)   rS   r?   r6  r5   rL  r   )rf   admin_idrU  r.  r)   r?   ro   rp   rq   rr   r   r%   adminr   user_obj
encoded_idr5   r(   r   rl   rl   rm   new_user+  sF   


r]  c                 C   <   t jj|dj}d}|  d}tj}|g}t|||| d S )Nr   zDocument open notificationz open your document for signr   rP   ra   r?   r   rJ  r   rV   rQ  r?   r   r   rT  rX  rl   rl   rm   document_open_emailT     
ra  c                 C   r^  )Nr   zDocument sign notificationz sign on your documentr_  r`  rl   rl   rm   document_sign_email^  rb  rc  c                 C   s  t t|}t t|}t| tjj|d}tjj| jjd}|r3|	 }t
|j d|j |j d}tjj|d}	tt|	j t|	j}
tjj| jd}td|}||	|
||d}| jdkrtd d	| jvrwtd
ddddS | jd	 }d|j dt d d}tjtjd|}t |d}|! D ]}|"| qW d    n1 sw   Y  t#jj||j$d	 }d| |_%||_&d|_'t }||_(|)  |j d|j }t*||j d| }d|j }t+|j$||d}|)  td|jdS t,| d|dS )Nr   r   zRecipient Signaturer$   rZ   )r7   r*   r:   r   signatures_jsonr<   r=   r(  r   r)  r*  r,  r-  signed_r   r1  r   recipient_sign_documentsr3  )main_document__idr(   zrecipient_sign_documents/TzYour document has beed sign by z4https://dev.arushhr.com/download-recipient_document/rG  r   r+  r)   zmyapp/recipient_sign.htmlrM   )-r   r   rT   r   rP   ra   rQ   r%   r)   firstra  ro   rp   r2  typer:  rZ   r[   r   r#   	serializer^   r   r   r   r  rY   r  r  r  r   r  r	  r7  r8  rS   r?   r*   rV   r4   r+   r   rc  rL  r   )rf   rY  rQ  rU  r.  r)   rZ  r%   r7   r*   r:   r   rd  rN   r@  rB  r4  rC  rD  rE  time_nowrV   r   r5   r   rl   rl   rm   recipient_signi  sT   


rm  c                 C      d}||d}t | d|dS )NzRecipient signature successr7   r)   z!myapp/recipient_sign_success.htmlrM   r   rf   r)   r7   rN   rl   rl   rm   recipient_sign_success     
rq  c                   @   r   )sent_agreementsc                 C   r   )NzAgreements Sentr7   zmyapp/sent_agreements.htmlrM   r   r   rl   rl   rm   ra     r   zsent_agreements.getNr   rl   rl   rl   rm   rs    r   rs  c                 C   s  d}t jj| jdd}g }|D ]!}d }|jr!|jjr!|jjj}||j||j	|j
|j|jd qtj|ddtd}|||d}| jd	krtd
 t| j}|d}|d}	|d}
|d}t||	|
| |
rxtt|
dnd }
|rtt|dnd }t }|r|t|dO }|	r|t|	dO }|
r|t|
 dO }|r|t| dO }||}t|  g }|D ]3}d }d }|jr|jjr|jjj}|jr|jd}||j||j	|jj|j
d|j||jd qt| t|| dS t | d|dS )NzSent Agreementsr$   r&   )r)   r*   r(   r3   r4   r+   r,   Tr-   )r7   r8   r:   r<   r=   r>   r?   r@   rA   rB   rC   r'   rF   rH   r1   )r)   r>   r(   rJ   r3   r4   r+   r5   rK   zmyapp/agreements.htmlrM   )!rS   rP   rQ   r%   rR   rU   rV   rW   r)   r(   rX   r4   r+   rZ   r[   r\   r^   rT   r_   r`   ra   r    rb   r   rc   r   rd   re   rY   r]   r5   r   r   )rf   r7   r8   r:   rh   r>   rN   r`   rj   r?   r@   rA   rk   r9   data1ri   rl   rl   rm   
Agreements  sv   










ru  c                 C   s  d}t jt| jdtdd@ }||d}| jdkrtd t| j	}|
d}|
d	}|
d
}|
d}t|||| |rKtt|dnd }|rXtt|dnd }t }	|rf|	t|dO }	|ro|	t|dO }	|rz|	t| dO }	|r|	t| dO }	||	}
t|
  g }|
D ]0}d }d }|jr|jjr|jjj}|jr|jd}||j||j|jd|j||jd qt| t||
 dS t| d|dS )N	Completedr$   T)r4   )r7   r8   r<   r=   r>   r?   r@   rA   rB   rC   r'   rF   rH   r1   )r)   r>   r(   r3   r4   r+   r5   rK   zmyapp/complete_agreements.htmlrM   )rS   rP   rQ   r   r%   r^   rT   rZ   r_   r`   ra   r    rb   r   rc   rd   re   rU   rV   r+   rY   rW   r)   r(   rX   r4   r5   r   r   )rf   r7   r8   rN   r`   rj   r?   r@   rA   rk   r9   rh   r>   ri   rl   rl   rm   complete_agreements  sX   









	rw  c                 C   b   t jj|d}t|jjd}t| dd}d|j |d< |W  d    S 1 s*w   Y  d S Nr   rbzapplication/pdf)content_typezinline; filename=zContent-Disposition)	rS   rP   ra   r	  r*   r  r   readrV   rf   r)   	agreementrC  responserl   rl   rm   download_recipient_document"     $r  c                 C   s8   t jj|d}|  tj| d|j ddd tdS )Nr   zAgreement of z Deleted Successfullyru   rv   rn   )rS   rP   ra   r   r   r   r(   r   )rf   r)   r~  rl   rl   rm   delete_agreement*  s   r  c                 C   rx  ry  )	r2  rP   ra   r	  r*   r  r   r|  rV   r}  rl   rl   rm   download_prepare_document1  r  r  c                 C   r   Nrn   r   r   rl   rl   rm   delete_cancel9  r   r  c                   @   r   )SignvDocumentiewc                 C   sX   d}t jj|jd}|r| }tjj|jd}td|}||||d}t|d|dS )NzSign Documentsr$   rZ   )r7   r*   rd  r   zmyapp/sign_document.htmlrM   )	r  rP   rQ   r%   r6  r   r#   rk  r   )r   rf   r7   r*   r   rd  rN   rl   rl   rm   ra   ?  s   zSignvDocumentiew.getc                 C   s   t d d|jvrtdddddS |jd }|j}|jd}tjj|d	}d
|j dt	
 d d}tjtjd|}t|d}| D ]}	||	 qIW d    n1 s[w   Y  tjj||d| |d}
td|
jdS )Nr=   r(  r   r)  r*  r,  r-  r.  r   re  r   r1  r   signed_documentsr3  zsigned_documents/)r%   rU   r*   rV   r   rh  )rT   r   r   r%   r<   ra   r  rP   r)   r   r  rY   r  r  r  r   r  r	  r7  r8  rO   r9  )r   rf   r@  r%   r.  r*   rB  r4  rC  rD  rE  rl   rl   rm   r   J  s    

zSignvDocumentiew.postNr   rl   rl   rl   rm   r  >  s    r  c                 C   rn  )NzOwn Document Signature Successro  zmyapp/own_sign_success.htmlrM   r   rp  rl   rl   rm   own_sign_success`  rr  r  c                 C   sd   t jj|d}t|jjd}t| dd}d|jj	 |d< |W  d    S 1 s+w   Y  d S ry  )
rO   rP   ra   r	  r*   r  r   r|  rU   rV   r}  rl   rl   rm   download_own_documentf  s   $r  c                 C   r   )Nr   zDocument deleted successfullyz*alert alert-success alert-dismissible showrv   rn   )rO   rP   ra   r   r   r   r   )rf   r)   r   rl   rl   rm   delete_own_documentn  s   r  c                 C   r   r  r   r   rl   rl   rm   delete_own_agreement_cancelv  r   r  c                 C   sH   t | }d}|jD ]}|| 7 }q	t| t| }t|}||7 }|S )N )r   pagesextract_textrT   extract_images_from_pdf
ocr_images)r4  readertextpager/  	text_datarl   rl   rm   extract_text_from_pdfz  s   
r  c                 C   s~   t | }g }t|jD ]0}||}|jdd}t|D ]\}}|d }||}	|	d }
tt	
|
}|| qq|S )NT)fullr   r   )fitzr	  range
page_count	load_page
get_images	enumerateextract_imager   ioBytesIOrW   )r4  docr/  page_numr  
image_list	img_indeximgxref
base_imageimage_bytesr   rl   rl   rm   r    s   


r  c                 C   s2   t |  d}dt_| D ]}t|}||7 }q|S )Nr  z5--tessdata-dir /usr/share/tesseract-ocr/4.00/tessdata)rT   r   tessdata_dir_configimage_to_string)r/  	text_listr  r  rl   rl   rm   r    s   

r  c                 C   s   t | }|j}|S )N)r   
paragraphs)r4  r*   r  rl   rl   rm   extract_text_from_docx  s   r  c           
      C   s   | j dkrg| jd}t| | jd}t| tjj|d}|jj}d }|dr3t	|}t| | d| d}t
jtdd	}|jjjd
d|dgd dd}t| |jd jj}	t|	 td|	iS d S )Nr<   questionr.  r   r   z

Question: z
Answer:openai_apikey)api_keyzgpt-3.5-turbor%   )rolecontentg      ?)modelr   stoptemperaturer   answer)r^   r<   ra   rT   r2  rP   r*   r  r   r  openaiOpenAIr   chatcompletionsr9  choicesr   r  r   )
rf   r  r.  r*   r4  pdf_textpromptclientr  r  rl   rl   rm   chatbot  s:   

r  c              	   C   sd  t jj| jjddd d }d}d}g }|D ]}t|j ztjj	| j|d}|r-d}W n tj
y:   d}Y nw |sA|d }t }||j }|jd	}	||j tdd
kre|jd	}	t|	 n6||j tddkr~t|j}	t|	 |	 d}	nt||j  d }
|
 d|
dkrdnd d}	t|	 ||j|j||	|jd qt||ddS )Nr$   r&      Fr   )r%   notifTr   rB   )days)hoursz ago<   z minutesr  )r)   notify_detailnotifStatusri   r5   employee)r8   total_unreadr  )rL  rP   rQ   r%   r?   rR   rT   createdmark_read_notificationsra   DoesNotExistr    r  rY   r!   r"   inttotal_secondsrW   r)   r   r5   r   )rf   notificationsr  r  r:   dnotif_statusr  diffri   minutesrl   rl   rm   r    sJ    




	r  c                 C   s|   | j d }tjj|d}tjj| jjd}tjt	|dt	| jd@ t	dd@ }t
| |s8tjj||dd td	diS )
N	notify_idr   )pk)r  r$   Tr-  )r  r%   r+  msg)r   rL  rP   ra   r   r%   r)   r  rQ   r   rT   r9  r   )rf   r  r   emp
notif_datarl   rl   rm   mark_read_notify  s   
(r  )mdjango.shortcutsr   r   modelsdjango.contribr   django.db.modelsr   django.viewsr   django.contrib.authr	   r
   r   r   rZ   r   r  django.core.files.baser   django.httpr   r   django.contrib.auth.decoratorsr   r   django.confr   formsPILr   django.core.mailr   r   django.contrib.auth.modelsr   django.utils.httpr   r   django.utils.encodingr   r   django.contrib.auth.tokensr   pypandocr  pdfkitdocxr   docx2pdfr  PyPDF2r   decoupler   rM  r  r   r  django.utilsr    r!   django.utils.timesincer"   django.corer#   rn   rx   r   r   r   r   r   r   r   r   r   r   r   r   r'  r
  r   listr;  r]  ra  rc  rm  rq  rs  ru  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rl   rl   rl   rm   <module>   s    
T






}
9!)

1

E
4



"



(2