o
    Uh                     @   s"  d dl mZmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZmZ d dlmZ ddlmZmZmZmZ d d	lmZmZ d d
lZd d
lZd dlmZ e Zejdddee	eefdededefddZejdddee	eefdededefddZej dddee	eefdededefddZ!ej"deddee	eefde#dedefddZ$ej%dddee	eefde#dedefd d!Z&d"ej'd#e(fd$d%Z)ed&ed'd(d)ee	eefd*e#dedefd+d,Z*ed-ed'd.d)ee	eefd*e#dedefd/d0Z+d
S )1    )	APIRouterDependsQuery)Session)service)get_db)JWTPayloadSchemaget_current_student)TblStoreFormat   )StoreFormateCreateStoreFormateResponseStoreFormateUpdateStoreFormateCreate11)JSONResponseStreamingResponseN)FPDFz/store-formateT)response_model_exclude_nonerequestdbtokenc                       t ||| I d H S N)r   StoreFormateServicecreate_store_formater   r   r    r   7/var/www/html/RetailAPI/app/api/store_formate/router.pyr         r   z/store-formatesc                 C   s   t ||}|| S r   )r   r   create_store_format3)r   r   r   service_instancer   r   r   create_store_formate111   s   
r!   z/store-formate/updatec                    r   r   )r   r   update_store_formater   r   r   r   update_store_format   r   r#   z/store-formate/{store_id})response_modelr   store_idc                    r   r   )r   r   get_store_formater%   r   r   r   r   r   r&      r   r&   z /store-formate/delete/{store_id}c                    r   r   )r   r   delete_store_formater'   r   r   r   delete_store    r   r)   dfreturnc                 C   s   t  }|  |jddd |jt| jd  }|jd }| jD ]}|j|||dd q || | 	 D ]\}}|D ]}|j||t
|dd q;|| q5|jddd	S )
NArial
   )sizer   g      ?)borderS)destlatin1)r   add_pageset_fontwlencolumns	font_sizecelllniterrowsstroutputencode)r*   pdf	col_width
row_heightcol_name_rowitemr   r   r   df_to_pdf_bytes%   s   


rF   z/store-formate/download.zGroup ID to filter data)descriptiongroup_idc                    s   | ttj| k }|stdd|  dddS dd |D }t|}t|}t	
|}|d t|d	d
d|  didS )N0z+No store format records found for group_id .statusmessagecontentc                 S      g | ]}|  qS r   as_dict.0recordr   r   r   
<listcomp>H       z3download_store_formate_by_group.<locals>.<listcomp>r   zapplication/pdfContent-Disposition(attachment; filename=store_format_group_z.pdf
media_typeheaders)queryr
   filterrH   allr   pd	DataFramerF   ioBytesIOseekr   )rH   r   r   all_recordsdatar*   	pdf_bytes
pdf_streamr   r   r   download_store_formate_by_group;   s   


ri   z/store-formate/download-htmlz$Group ID to filter store format datac           	         s   | ttj| k }|stdd|  dddS dd |D }t|}|jdd	}d
|  d| d}t	
|}|d t|ddd|  didS )NrI   zNo records found for group_id rJ   rK   rN   c                 S   rP   r   rQ   rS   r   r   r   rV   c   rW   z/download_store_formate_html.<locals>.<listcomp>F)indexaw  
    <!DOCTYPE html>
    <html>
    <head>
        <title>Store Format Report</title>
        <style>
            table { border-collapse: collapse; width: 100%; }
            th, td { border: 1px solid #dddddd; text-align: left; padding: 8px; }
            th { background-color: #f2f2f2; }
        </style>
    </head>
    <body>
        <h2>Store Format Report (Group ID: z)</h2>
        z
    </body>
    </html>
    r   zapplication/octet-streamrX   rY   z.htmlrZ   )r]   r
   r^   rH   r_   r   r`   ra   to_htmlrb   StringIOrd   r   )	rH   r   r   recordsrf   r*   html_content	html_pagestreamr   r   r   download_store_formate_htmlX   s&   


rq   ),fastapir   r   r   sqlalchemy.ormr   app.api.store_formater   app.database.main.mysqlr   app.dependency.authanticationr   r	   app.models.main.store_formater
   schemasr   r   r   r   fastapi.responsesr   r   rb   pandasr`   fpdfr   store_formate_routerpostr   r!   putr#   getintr&   deleter)   ra   bytesrF   ri   rq   r   r   r   r   <module>   sZ    &&&&&

