
    7i*                         d dl mZmZmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZmZmZmZmZ d dlmZmZ d dlmZ d dlmZ d d	lZd d	lZd d
lmZ d dlmZ d dlmZ d dlm Z   G d d      Z!y	)    )ListDictAny)Session)FileResponse)letterA4)SimpleDocTemplateTable
TableStyle	ParagraphSpacer)getSampleStyleSheetParagraphStyle)colors)inchN)datetime)schema)Module10Service)JWTPayloadSchemac                      e Zd ZdedefdZddedej                  fdZ	de
ej                     fdZdeeef   fd	Zdeeef   fd
Zdeeef   fdZdede
ej                     fdZde
ej                     fdZdefdZy)KPIDashboardServicedbtokenc                      || _         || _        y N)r   r   )selfr   r   s      D/var/www/html/retail-simulation-api/app/api/kpi_dashboard/service.py__init__zKPIDashboardService.__init__   s    
    Nsimulation_idreturnc                    K   |r| j                  |       d{   }n| j                          d{   }t        |      t        d |D              ddd}t	        j
                  ||      S 7 T7 =w)z&Display KPI Overview with dynamic dataNc              3   F   K   | ]  }t        |j                          y wr   )lenmetrics).0sections     r   	<genexpr>z7KPIDashboardService.get_kpi_overview.<locals>.<genexpr>"   s      NX'W__!5Xs   !   z
Rs in Lacs)total_sectionstotal_metricsyears_coveredcurrency)sectionssummary_stats)_build_excel_kpi_sections_build_kpi_sectionsr%   sumr   KPIDashboardResponse)r   r!   r/   r0   s       r   get_kpi_overviewz$KPIDashboardService.get_kpi_overview   sx      !;;MJJH!5577H "(m  NX NN$	
 **'
 	
 K7s   A2A.A2A0<A20A2c                   K   	 | j                         }| j                         }| j                         }t        j                  dt        j
                  d|      t        j
                  d|      t        j
                  d|      g      t        j                  dt        j
                  dd	d
ddddddddddd      t        j
                  dddddddddddddd      g      g}|S # t        $ r | j                         cY S w xY ww) z@Build KPI sections with database data or fallback to static dataGeneral Metrics (Overall)Salesmetric_namevaluesGross MarginOperating Expensessection_namer&   z#Store-Wise Metrics (Store Format A)GMROIz1.1z2.3z4.5z7.7z6.6z10.7z17.9z18.7z19.0Y1Y2Y3Y4Y5Y6Y7Y8Y9Y10Y11Y12zSales per Square Feetz2.8z8.7z15.6z22.3z30.6z36.6z40.6z44.9z49.5z54.6z60.1z66.3)_get_sales_data_get_margin_data_get_expense_datar   
KPISection	KPIMetric	Exception_get_static_sections)r   
sales_datamargin_dataexpense_datar/   s        r   r2   z'KPIDashboardService._build_kpi_sections,   s)    (	/--/J//1K113L !!!<((WZP((^KX((5IR^_ !!!F(((/&+5U&+6v&,VFSY$ (((?&+5f&,F&PV&,VFSY$H> O 	/,,..	/s)   DC'C, +D,DDDDc                      ddddddddd	d
dddS )z2Get sales data from database or return static dataz3,266z9,794z17,924z25,725z33,915z39,954z44,436z49,221z54,439z60,199z66,364z73,160rA    r   s    r   rN   z#KPIDashboardService._get_sales_dataX   s)     (((8HX
 	
r    c                      ddddddddd	d
dddS )z3Get margin data from database or return static data707z2,075z3,773z5,415z7,146z8,460z9,476z10,570z11,767z13,094z14,434z15,913rA   rY   rZ   s    r   rO   z$KPIDashboardService._get_margin_data`   s)     wgWx8HX
 	
r    c                      ddddddddd	d
dddS )z4Get expense data from database or return static data579z1,546z2,680z3,730z4,759z5,457z6,000z6,596z7,203z7,900z8,553z9,222rA   rY   rZ   s    r   rP   z%KPIDashboardService._get_expense_datah   s)     wgWw'''
 	
r    c                   K   	 t               }ddlm}  |       }|j                  |       d{   }|j                  s| j                         S g }|j                  j                         D ]:  \  }}t        |j                        t        |j                  dz        t        |j                  dz        t        |j                  dz        t        |j                        t        |j                  dz        t        |j                  dz        t        |j                  dz        t        |j                  d	z        t        |j                  dz        t        |j                  d
z        t        |j                        d}	|j                  t        j                  ||	             = t        j                  d|      gS 7 # t        $ r | j                         cY S w xY ww)z*Build KPI sections from Excel calculationsr   )Module10RequestNg333333?g      ?g?g?g?gffffff?g?rA   r9   z#Calculated Metrics from Excel Modelr>   )r   app.api.module10_metrics.schemar`   calculate_metricsmetrics_valuesrT   itemsstrrB   rF   rM   appendr   rR   rQ   rS   )
r   r!   excel_servicer`   requestprocessed_datar&   r:   metric_valuefull_year_valuess
             r   r1   z-KPIDashboardService._build_excel_kpi_sectionsp   s    )	/+-MG%'G#0#B#B7#KKN!000022G-;-J-J-P-P-R)\ loo.loo34loo34loo34loo.loo34loo34loo34loo34|45|45|//0$  v// ++  # .S. !!!F# 9 LF  	/,,..	/sE   G$+G GG G$E1G G$G G!G$ G!!G$c           
      
   t        j                  dt        j                  d| j                               t        j                  d| j	                               t        j                  d| j                               g      gS )zFallback static datar7   r8   r9   r<   r=   r>   )r   rQ   rR   rN   rO   rP   rZ   s    r   rT   z(KPIDashboardService._get_static_sections   sp     8$$AUAUAWX$$H]H]H_`$$1EdNdNdNfg	
 		
r    c                 Z  K   | j                          d{   }t        j                  dd      }|j                          t	        |j
                  t              }t               }g }t        d|d   dd	d
      }|j                  t        d|             |j                  t        d
d             t        d|d   d
      }|j                  t        dt        j                         j                  d       |             |j                  t        d
d	             ddgdt        |j                   d         gdt        |j                   d         gdt        |j                   d         gd|j                   d   gg}t#        |dt$        z  dt$        z  g      }	|	j'                  t)        d d!d"t*        j,                  fd#d!d"t*        j.                  fd$d%d&d'd d(d)t*        j0                  fd*d!d)d
t*        j2                  fg             |j                  |	       |j                  t        d
d	             |j4                  D ]  }
t        d+|d,   d-.      }|j                  t        |
j6                  |             |
j8                  D ]N  }|j                  t        d/|j:                   d0|d1                t=        |j>                  jA                               }t=        |j>                  j?                               }tC        d2tE        |      d3      D ]  }|||d3z    }|||d3z    }||g}t#        |      }|j'                  t)        d d!d"t*        jF                  fd#d!d"t*        j2                  fd4d%d5d6d*d!d)d
t*        j2                  fg             |j                  |       |j                  t        d
d7              |j                  t        d
d             Q  |jI                  |       d8t        j                         j                  d9       d}tK        |j
                  |d:;      S 7 w)<z'Generate and download KPI report as PDFNFz.pdf)deletesuffix)pagesizeCustomTitleHeading1         )parentfontSize
spaceAfter	alignmentz1Module 10: Metrics and Performance Indexes Report   	DateStyleNormal)rv   ry   zGenerated on: z	%B %d, %YzSummary Statistics zTotal Sectionsr+   zTotal Metricsr,   zYears Coveredr-   Currencyr.         )	colWidths
BACKGROUNDr   r   r   	TEXTCOLOR)ALIGNr   r   r   LEFT)FONTNAMEr   r   zHelvetica-Bold)FONTSIZEr   r   r*   )BOTTOMPADDINGr   r   r*   )r   ru   r   GRIDSectionTitleHeading2   )rv   rx   z<b>z</b>Heading3r      )r   r   r   CENTER)r   r   r   
   )r   r   r      r   Module_10_KPI_Report_z%Y%m%d_%H%M%Szapplication/pdf)pathfilename
media_type)&r5   tempfileNamedTemporaryFilecloser
   namer	   r   r   rf   r   r   r   nowstrftimere   r0   r   r   setStyler   r   grey
whitesmokebeigeblackr/   r?   r&   r:   listr;   keysranger%   	lightbluebuildr   )r   kpi_data	temp_filedocstylesstorytitle_style
date_stylesummary_datasummary_tabler(   section_stylemetricyearsr;   i
year_chunkvalue_chunkmetric_datametric_tabler   s                        r   generate_kpi_pdfz$KPIDashboardService.generate_kpi_pdf   s    ..00//uVL		<$&$]6*;MXZgiuvwYRT_`aVAr]##Kx8HTUV
Y0G0G0T/UVXbcdVAr]# "2&s8#9#9:J#KLMc("8"8"IJKc("8"8"IJK//
;<
 lqvqv6FGz67FKK8&'6+<+<=/;-268V\\:VXq&,,7	+
 	  		 	]#VAr]#((G*>&BTacdMLL7#7#7GH!//YV-?-?,@'EvjGYZ[V]]//12fmm2245q#e*a0A!&q1J"(1Q3-K#-{";K#(#5L ))*%vw8H8HI$fgv||D=G:>1fllC6 +  LL.LL2/# 1& VAr]+3 *	 )> 			%*8<<>+B+B?+S*TTXY(O`aaU 1s   P+P(PP+r   )__name__
__module____qualname__r   r   r   intr   r4   r5   r   rQ   r2   r   re   rN   rO   rP   r1   rT   r   r   rY   r    r   r   r      s    7 +; 
C 
6C^C^ 
,*/40A0A+B */X
c3h 

$sCx. 

4S> 
+/S +/T&J[J[E\ +/Z
d6+<+<&= 
Lb Lbr    r   )"typingr   r   r   sqlalchemy.ormr   fastapi.responsesr   reportlab.lib.pagesizesr   r	   reportlab.platypusr
   r   r   r   r   reportlab.lib.stylesr   r   reportlab.libr   reportlab.lib.unitsr   osr   r   app.api.kpi_dashboardr    app.api.module10_metrics.servicer   app.dependency.authanticationr   r   rY   r    r   <module>r      sC    " " " * . V V D   $ 	   ( < :eb ebr    