o
    h'                     @   s   d dl mZmZmZmZmZ d dlmZ d dlZd dl	Z	d dl
Ze	eZedeZdZejddgde d	d
 Zejddgde dd Zejddgde dd ZdS )    )	Blueprint	send_filejsonifycurrent_apprequest)jwt_requiredNexcelzrolecall.xlsxz/api/download-excelGET)methodsc               
      s6  zt jd } tj| t}td|  td|   tdtj|  tj|s@t	ddt d| | dd	fW S zt
j|d
d g d} fdd|D } fdd|D }|svt	ddt j |t jddfW W S  | }ddg}|D ]}||jv rt
j|| ddjd||< q|d}t|}	tdt d|	 dt| d |rtd|  t	dt|	|d W W S  ty }
 z#td!t d"|
  t	d#d$t d%t|
 d&d'fW  Y d(}
~
W S d(}
~
ww  ty }
 ztd)|
  t	d*t|
d&d'fW  Y d(}
~
S d(}
~
ww )+zBConvert Excel file to JSON with headers as keys and rows as valuesUPLOAD_FOLDERzLooking for Excel file at: zUploads folder: zFile exists: File not foundzExcel file "z" not found at path: )errormessageuploads_folder  openpyxlengine)zPayroll NumberzEmployee NamezLicense NumberzLicense Code
Start DateExpiry/Update  DateStatec                    s   g | ]	}| j v r|qS  columns.0coldfr   $/var/www/html/routes/excel_routes.py
<listcomp>6       z"download_excel.<locals>.<listcomp>c                    s   g | ]	}| j vr|qS r   r   r   r   r   r   r    7   r!   zNo required columns foundzINone of the required columns found in the Excel file. Available columns: )r   r   required_columnsavailable_columns  r   r   coerce)errorsz%Y-%m-%drecordszSuccessfully read Excel file: z, z rows, z columnszMissing columns in Excel file: T)successfilename
total_rowsdatazError reading Excel file : zExcel reading failedzCould not read Excel file "": r   r     NzExcel processing error: zExcel processing failed)r   configospathjoinEXCEL_FILENAMEloggerinfoexistsr   pd
read_excellistr   to_datetimedtstrftimeto_dictlenwarning	Exceptionr   str)r   	file_pathr"   r#   missing_columnsfiltered_dfdate_columnsr   r+   r*   er   r   r   download_excel   s   


"rH   z/api/file-data/<filename>c              
   C   s  z1t jt jt jt}t j|d}td|  d|  t j|s5t	dd| ddfW S t j|| }t j|
t j|sSt	dd	dd
fW S t j|sgt	dd|  dddfW S t j|s{t	dd|  ddd
fW S td|  t j| d  }zu|dv rtj|dd}n|dkrt|}nt	dd| ddd
fW W S |d}t|}d| v r| dd nd}zt | td|   W n ty }	 ztd|  d |	  W Y d!}	~	nd!}	~	ww t	d"| |||d"d#W W S  ty2 }
 z#td$|  d%|
  t	d&d'|  d(t|
 dd)fW  Y d!}
~
W S d!}
~
ww  tyX }
 ztd*|
  t	d+t|
dd)fW  Y d!}
~
S d!}
~
ww ),z=Get file data as JSON with headers as keys and rows as valuesresultszLooking for file 'z' in results folder: Results folder not foundResults folder not found at: r.   r   zInvalid file pathz'File path is outside the results folderr$   r   zFile "z" not found in results folderzInvalid file"z" is not a filezFound file:    )z.xlsxz.xlsr   r   z.csvzUnsupported file typezFile type "zC" is not supported. Only .xlsx, .xls, and .csv files are supported.r'   _r   UNKNOWNz)Successfully deleted file after reading: zCould not delete file z after reading: NT)r(   r)   scraper_typer*   r+   file_deletedzError reading file r,   zFile reading failedzCould not read file "r-   r/   zGet file data error: zGet file data failed)r1   r2   dirnameabspath__file__r3   r5   r6   r7   r   
startswithisfilesplitextlowerr8   r9   read_csvr>   r?   splitremoverA   r@   r   rB   )r)   project_rootresults_folderrC   file_extr   r+   r*   rP   delete_errorrG   r   r   r   get_file_datak   s   




"
r`   z/api/list-resultsc               
   C   sH  z~t jt jt jt} t j| d}td|  t j|s2t	dd| g ddfW S g }t 
|D ]%}t j||}t j|r^|ds^t |}|||j|j|d q9|jd	d
 dd tdt| d t	dt|||dW S  ty } ztd|  t	dt|ddfW  Y d}~S d}~ww )z8List all files in the results folder without downloadingrI   zLooking for results folder at: rJ   rK   )r   r   filesr   .)r)   sizemodifiedr2   c                 S   s   | d S )Nrd   r   )xr   r   r   <lambda>   s    zlist_results.<locals>.<lambda>T)keyreversezFound z files in results folder)r(   countra   r]   zList results error: zList results failedr.   r/   N)r1   r2   rR   rS   rT   r3   r5   r6   r7   r   listdirrV   rU   statappendst_sizest_mtimesortr?   rA   r   rB   )r\   r]   result_filesfilerC   	file_statrG   r   r   r   list_results   sT   

rs   )flaskr   r   r   r   r   flask_jwt_extendedr   r1   loggingpandasr8   	getLogger__name__r5   excel_bpr4   routerH   r`   rs   r   r   r   r   <module>   s"    

Xb