
    wh                         d dl mZ 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mZmZmZ d dlmZmZ d dlmZ d dlmZ  G d	 d
      Zy)    )Session)DictAnyList)BytesIO)A4)SimpleDocTemplate	ParagraphSpacerTable
TableStyle)getSampleStyleSheetParagraphStyle)inch)colorsc                      e Zd ZdZdefdZdededeee	f   fdZ
dedeee	f   fdZdedeee	f   fd	Zdedeee	f   fd
Zdedeee	f   fdZdedeee	f   fdZdedeee	f   fdZdedeee	f   fdZdedeee	f   fdZdedeee	f   fdZdedeee	f   fdZdededeee	f   fdZdededefdZdeee	f   defdZdeee	f   defdZdeee	f   defdZdeee	f   defdZdeee	f   defdZdeee	f   defdZd eee	f   defd!Zd"eee	f   defd#Zd$eee	f   defd%Zd&eee	f   defd'Z defd(Z!dedede"fd)Z#d*eee	f   de$fd+Z%d,edefd-Z&y.)/DynamicReportServicezCService for generating dynamic reports using actual simulation datadbc                     || _         y )N)r   )selfr   s     M/var/www/html/retail-simulation-api/app/api/module_reports/dynamic_service.py__init__zDynamicReportService.__init__   s	        simulation_idgroup_idreturnc                 ^   	 ||i d}| j                  |      |d   d<   | j                  |      |d   d<   | j                  |      |d   d<   | j                  |      |d   d<   | j	                  |      |d   d<   | j                  |      |d   d<   | j                  |      |d   d	<   | j                  |      |d   d
<   | j                  |      |d   d<   | j                  |      |d   d<   |S # t        $ r3}t        dt        |              | j                  ||      cY d}~S d}~ww xY w)z;Get all simulation data from database for dynamic reportingr   r   modulesr   module1module2module3module4module5module6module7module8module9module10zError getting simulation data: N)_get_module1_data_get_module2_data_get_module3_data_get_module4_data_get_module5_data_get_module6_data_get_module7_data_get_module8_data_get_module9_data_get_module10_data	Exceptionprintstr_get_fallback_data)r   r   r   simulation_dataes        r   get_simulation_dataz(DynamicReportService.get_simulation_data   so   )	D!.$O 594J4J84TOI&y1 594J4J84TOI&y1 594J4J84TOI&y1 594J4J84TOI&y1 594J4J84TOI&y1 594J4J84TOI&y1 594J4J84TOI&y1 594J4J84TOI&y1 594J4J84TOI&y1 6:5L5LX5VOI&z2"" 	D3CF8<=**=(CC	Ds   C-C0 0	D,9(D'!D,'D,c                    	 ddl m} ddlm} ddlm} | j                  j                  |      j                  |j                  |k(        j                         }|r|j                  nd|r|j                  nd|r|j                  ndd}| j                  j                  |      j                  |j                  |k(        j                         }g }|D ]@  }	|j                  |	j                   |	j"                  |	j$                  |	j&                  d	       B | j                  j                  |      j                  |j                  |k(        j                         }
i }|
D ]I  }|j(                  |j*                  |j,                  |j.                  |j&                  d
||j0                  <   K |||dS # t2        $ r)}t5        dt7        |              ddig i dcY d}~S d}~ww xY w)zGet Module 1 data from databaser   )TblBrand)
TblSegment)TblStoreFormatzNot SetNNot provided)
brand_name
brand_logo	rationale)nameisec_segmenttotal_populationlocation)
store_name
store_sizemerchandisepricing_strategyrF   brandsegmentsstore_formatszError getting Module 1 data: r@   )app.models.main.brandr<   app.models.main.segmentr=   app.models.main.store_formater>   r   queryfilterr   firstr@   brand_imagerB   allappendrC   ISEC_SegmentrE   rF   rG   rH   rI   rJ   store_format_typer4   r5   r6   )r   r   r<   r=   r>   rL   
brand_datarM   segments_datasegmentrN   formats_datastore_formatr9   s                 r   r*   z&DynamicReportService._get_module1_data=   s   ,	]6:D GGMM(+2283D3D3PQWWYE27e..Y38e//d05U__>J ww}}Z077
8K8Kx8WX\\^HM#$$#LL$+$8$8(/(@(@ ' 0 0	&  $ !GGMM.9@@AXAX\dAdeiikML -"."9"9"."9"9#/#;#;(4(E(E , 5 5@\;;< !. $)!-   	]1#a&:;*I6BY[\\	]s   F-F0 0	G"9GG"G"c                    	 ddl m} ddlm} ddlm} | j                  j                  |      j                  |j                  |k(        j                         }g }|D ]F  }|j                  t        |j                        |j                  xs d|j                  xs dd       H | j                  j                  |      j                  |j                  |k(        j                         }i }	|D ]3  }
|
j                   }||	vri |	|<   |
j"                  |	|   |
j$                  <   5 | j                  j                  |      j                  |j                  |k(        j                         }i }|D ]3  }|j&                  |j(                  |j*                  d||j,                  <   5 ||	|dS # t.        $ r'}t1        d	t        |              g i i dcY d
}~S d
}~ww xY w)zGet Module 2 data from databaser   )TblCatchmentPotential)TblSalesEstimate)TblLocationDetailsg        )rD   percentage_of_segmentpotential_households)trading_radiusadjacencieslocation_characteristicscatchment_potentialsales_estimates	locationszError getting Module 2 data: N)#app.models.main.catchment_potentialr`   app.models.main.sales_estimatera    app.models.main.location_detailsrb   r   rR   rS   r   rV   rW   r6   rX   rc   potential_number_of_householdsstore_formate_typevalue	parameterre   rf   rg   rY   r4   r5   )r   r   r`   ra   rb   catchment_datacatchment_listcp
sales_datarj   saleformat_typelocation_datark   locr9   s                   r   r+   z&DynamicReportService._get_module2_datam   s   3	WQGK "WW]]+@AHH%..(:ce   N$%%$'$8-/-E-E-L,.,M,M,RQR'  % '78?? ))X5ce  !O""55o535OK0?Czz,T^^<	 # !GGMM*<=DD"++x7ce  I$&)&8&8#&??030L0L4	#//0 % (6#2&   	W1#a&:;+-"SUVV	Ws   F'F* *	G3GGGc                    	 ddl m} ddlm} | j                  j                  |      j                  |j                  |k(        j                         }g }|D ]9  }|j                  |j                  xs d|j                  |j                  d       ; | j                  j                  |      j                  |j                  |k(        j                         }i }|r?|j                  xs d|j                  xs d|j                   xs d|j"                  xs dd}||dS # t$        $ r&}	t'        dt)        |	              g i dcY d}	~	S d}	~	ww xY w)	zGet Module 3 data from databaser   )TblNetworkPlanning)TblStoreInvestmentSummary)target_stores	geographyyear)total_investment_format_atotal_investment_format_bcapital_expenses_format_acapital_expenses_format_bnetwork_plansinvestment_summaryzError getting Module 3 data: N)app.models.main.network_planr|   (app.models.main.store_investment_summaryr}   r   rR   rS   r   rV   rW   r~   geography_selectionr   rT    total_store_investments_format_a total_store_investments_format_b!capital_expenses_excl_it_format_a!capital_expenses_excl_it_format_br4   r5   r6   )
r   r   r|   r}   network_datar   networkinvestment_datar   r9   s
             r   r,   z&DynamicReportService._get_module3_data   sT   &	CGZ  77==);<CC"++x7ce  M'$$%,%:%:%?a!(!<!<#LL&  ( #ggmm,EFMM)22h>eg  "$1@1a1a1fef1@1a1a1fef1@1b1b1gfg1@1b1b1gfg	&" "/&8 
  	C1#a&:;%'rBB	Cs   DD   	E)E
E
Ec                    	 ddl m} ddlm} | j                  j                  |      j                  |j                  |k(        j                         }g }|D ]:  }|j                  |j                  r|j                  j                  nddddd       < | j                  j                  |      j                  |j                  |k(        j                         }g }|D ]@  }	|j                  d	|	j                   |	j                  xs d|	j                  xs dd
       B ||dS # t        $ r&}
t!        dt#        |
              g g dcY d}
~
S d}
~
ww xY w)zGet Module 4 data from databaser   )TblCategory)TblGrossMarginContributionUnknownDestination      9@g      >@)category_namecategory_rolesales_contributionmargin_contributionz	Category )r   contribution_to_salesgross_margins
categoriesmargin_contributionszError getting Module 4 data: N)app.models.main.categoryr   *app.models.main.gross_margin_contributionsr   r   rR   rS   r   rV   rW   choose_categoryrq   gross_idcontribution_to_total_salescontribution_to_gross_marginr4   r5   r6   )r   r   r   r   r   category_listcatmargin_datar   gmr9   s              r   r-   z&DynamicReportService._get_module4_data   sS   #	B<] {3::;;O;OS[;[\``bJM!$$BEBUBUS%8%8%>%>[d%2*.+/	&  " ''--(BCJJ*33x?ce  $& !$++'0%>-/-K-K-Pq%'%D%D%I-  " ,(< 
  	B1#a&:;"$bAA	Bs   D"D% %	E.E	EEc                    	 ddl m} ddlm} | j                  j                  |      j                  |j                  |k(        j                         }g }|D ]P  }|j                  |j                  xs d|j                  xs d|j                  xs d|j                  xs dd       R | j                  j                  |      j                  |j                  |k(        j                         }g }|D ]P  }	|j                  |	j                  xs d	|	j                  xs d
|	j                   xs d|	j"                  xs dd       R ||dS # t$        $ r&}
t'        dt)        |
              g g dcY d}
~
S d}
~
ww xY w)zGet Module 5 data from databaser   )TblVendorMetricsPriorityList)TblVendorScorecard   QualityzQuality ScorezImportant for business)priorityareametricsremarkszMargin %r   Highz15%)metric	weightage
importancebatnavendor_priority_matrixvendor_scorecardzError getting Module 5 data: N),app.models.main.vendor_metrics_priority_listr    app.models.main.vendor_scorecardr   r   rR   rS   r   rV   rW   r   r   r   r   r   r   r   r   r4   r5   r6   )r   r   r   r   priority_datapriority_matrixr   scorecard_data	scorecardscorer9   s              r   r.   z&DynamicReportService._get_module5_data   st   '	JaK !GGMM*FGNN,55Ace  !O)&& ( 1 1 6Q$MM6Y'//B?'//K3K	(  * "WW]]+=>EE"++x7ce  I'  #ll8j!&!8D"'"2"2"<f"[[1E	"  ( +:$- 
  	J1#a&:;.0bII	Js   EE 	E:E5/E:5E:c                    	 ddl m} ddlm} | j                  j                  |      j                  |j                  |k(        j                         }i }|r0|j                  xs d|j                  xs d|j                  xs dd}| j                  j                  |      j                  |j                  |k(        j                         }g }|D ]A  }|j                  |j                  xs d|j                  xs d	|j                  xs d
d       C ||dS # t         $ r&}	t#        dt%        |	              i g dcY d}	~	S d}	~	ww xY w)zGet Module 6 data from databaser   )TblCompetitorPricingAnalysis) TblStoreFormatePricingStrategies
Big BazaarzHigh-Low PricingzCompetitive pricing strategy)reference_competitorrJ   key_observationszStore Format AzEveryday Low PricezCompetitive positioning)r^   rJ   rB   competitor_pricingpricing_strategieszError getting Module 6 data: N)+app.models.main.competitor_pricing_analysisr   0app.models.main.store_formate_pricing_strategiesr   r   rR   rS   r   rT   r   rJ   r   rV   rW   rp   rB   r4   r5   r6   )
r   r   r   r   pricing_datar   format_pricingr   pricingr9   s
             r   r/   z&DynamicReportService._get_module6_data   sU   %	H`i  77==)EFMM,55Aeg  "$,8,M,M,]Q](4(E(E([I[(4(E(E(gIg&" "WW]]+KLSS099XEce  "$)"))$+$>$>$RBR(/(@(@(XDX!(!2!2!O6O+  * '9&8 
  	H1#a&:;*,BGG	Hs   DD 	E"E=EEc                    	 ddl m} ddlm} | j                  j                  |      j                  |j                  |k(        j                         }g }|D ]P  }|j                  |j                  xs d|j                  xs d|j                  xs d|j                  xs dd       R | j                  j                  |      j                  |j                  |k(        j                         }i }|r0|j                  xs d	|j                   xs d
|j"                  xs dd}||dS # t$        $ r&}	t'        dt)        |	              g i dcY d}	~	S d}	~	ww xY w)zGet Module 7 data from databaser   )TblIntegratedMarketing)TblMarketingCompetitorAnalysiszDigital Marketingr   zBrand awarenesszReach and engagement)activity_namebudget_allocated	objectivemeasurement_metricr   z Comprehensive marketing approachzCommunity-focused marketing)reference_retailermarketing_activity_briefdifferentiationmarketing_activitiescompetitor_analysiszError getting Module 7 data: N)$app.models.main.integrated_marketingr   -app.models.main.marketing_competitor_analysisr   r   rR   rS   r   rV   rW   r   r   r   r   rT   r   r   r   r4   r5   r6   )
r   r   r   r   marketing_datar   	marketingcompetitor_datar   r9   s
             r   r0   z&DynamicReportService._get_module7_dataI  sc   &	KSd "WW]]+ABII&//8;ce  $& +	$++%.%<%<%S@S(1(B(B(Jd!*!4!4!I8I*3*F*F*`J`	-  , #ggmm,JKRR.778Ceg  #%*9*L*L*\P\0?0X0X0~\~'6'F'F'gJg'# )=': 
  	K1#a&:;,.rJJ	Ks   D%D( (	E1EEEc                    	 ddl m} ddlm} ddlm} | j                  j                  |      j                  |j                  |k(        j                         }g }|D ]A  }|j                  |j                  xs d|j                  xs d|j                  xs dd       C | j                  j                  |      j                  |j                  |k(        j                         }g }	|D ]L  }
|	j                  |
j                  xs d	|
j                   xs d
|
j"                  xs d|
j$                  d       N | j                  j                  |      j                  |j                  |k(        j                         }g }|D ]=  }|j                  |j&                  xs d|j(                  xs d|j*                  d       ? ||	|dS # t,        $ r'}t/        dt1        |              g g g dcY d}~S d}~ww xY w)zGet Module 8 data from databaser   )TblCorporateConceptOffice)TblStoreLevelStaffNeeds)
TblUtilityzSenior Leadershipg    O2A   )role_categorycost_to_companyy1_countManagerg     @)designationaverage_salarycountrY   Electricityg     L@)utility_namecost_per_monthrY   corporate_rolesstaff_needs	utilitieszError getting Module 8 data: N)(app.models.main.corporate_concept_officer   'app.models.main.store_level_staff_needsr   app.models.main.utilityr   r   rR   rS   r   rV   rW   r   r   y1r   r   r   rp   r   r   rY   r4   r5   r6   )r   r   r   r   r   corporate_datar   role
staff_datar   staffutilities_datar   utilityr9   s                  r   r1   z&DynamicReportService._get_module8_datas  s   5	OZW: "WW]]+DELL)22h>ce  !O&&&%)%7%7%N;N'+';';'Hy $1(  ' '>?FF'00H<ce  K#""#(#4#4#A	&+&:&:&Eg"[[-A).)A)A	$  $ "WW]]:6==##x/ce  I)  $+$8$8$IM&-&<&<&G)0)B)B"  * $3*&   	O1#a&:;')"2NN	Os   GG 	G8G3-G83G8c           	         	 ddl m} | j                  j                  |      j	                  |j
                  |k(        j                         }g }|D ][  }|j                  |j                  |j                  xs g |j                  xs d|j                  xs d|j                  xs dd       ] d|iS # t        $ r%}t        dt        |              dg icY d}~S d}~ww xY w)	zGet Module 9 data from databaser   )TblAdaptingSupplyChain No)adapting_idr   r   adaptation_neededrB   supply_chain_entrieszError getting Module 9 data: N)%app.models.main.adapting_supply_chainr  r   rR   rS   r   rV   rW   r  what_are_some_categoriesremarks_about_these_categoriesdo_you_think_you_needat_which_point_and_whyr4   r5   r6   )r   r   r  supply_chain_datar  entryr9   s          r   r2   z&DynamicReportService._get_module9_data  s    	0T !%.D E L L&//8;!ce  $& *$++#(#4#4"'"@"@"FB$CCIr).)D)D)L!&!=!=!C-  + '(<   	01#a&:;*B//	0s   B0B3 3	C!<CC!C!c                    	 ddl m}  || j                        }|j                  |      }i }|rd|v rO|d   }|j	                  dd      |j	                  dd      |j	                  dd	      |j	                  d
d      d|d<   d|v rO|d   }|j	                  dd      |j	                  dd      |j	                  dd      |j	                  d
d      d|d<   d|v r>|d   }|j	                  dd      |j	                  dd      |j	                  dd      d|d<   ||dS # t
        $ r&}	t        dt        |	              i i dcY d}	~	S d}	~	ww xY w)z;Get Module 10 data from database using the existing servicer   )DatabaseServicemodel_a_assumptionsB6   B7   B82   B9g      @)sales_per_sqftgross_marginstore_countinvestment_per_storezStore Format A ROImodel_b_assumptions         g      @zStore Format B ROIonline_assumptionsB5i  i	     )customer_baseaverage_order_valuemarginzOnline Businessinputscalculated_metricszError getting Module 10 data: N)#app.api.module10_metrics.db_servicer  r   get_simulation_inputsgetr4   r5   r6   )
r   r   r  
db_servicer'  r   model_amodel_bonliner9   s
             r   r3   z'DynamicReportService._get_module10_data  ss   +	<K(1J55h?F G(F2$%:;G*1++dB*?(/D"(='.{{4'<07D#0F	5G01 )F2$%:;G*1++dB*?(/D"(='.{{4'<07D#0F	5G01 (61#$89F)/D&)A/5zz$/E"(**T2"62G-. !&- 
  	<23q6(;< ;;	<s   DD 	E%E EEc                 h    ||ddig i dg i i dg i dg g dg g di g dg i d	g g g d
dg ii i dd
dS )z(Fallback data when database queries failr@   zSample BrandrK   rh   r   r   r   r   r   r   r  r&  )
r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r    )r   r   r   s      r   r7   z'DynamicReportService._get_fallback_data  sx     + &2N%CQSfhi35"[]^-/rJ*,bI68bQ24BO46rR/1"SUV2B7')D
 	
r   c                    | j                  ||      }dj                  g d| d|d    d|d    d| j                          d| j                  |d	   d
          d| j	                  |d	   d          d| j                  |d	   d          d| j                  |d	   d          d| j                  |d	   d          d| j                  |d	   d          d| j                  |d	   d          d| j                  |d	   d          d| j                  |d	   d          d| j                  |d	   d          d|d	   d
   d   d    dt        |d	   d
   d          dt        |d	   d   d          dt        |d	   d   d          dt        |d	   d   d          d t        |d	   d   d!          d"      }|S )#zFGenerate comprehensive HTML report with all modules using dynamic datar  zl<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Comprehensive Simulation Report - Group a  </title>
    <style>
        body { font-family: 'Times New Roman', serif; font-size: 14px; margin: 20px; }
        .module-header { font-size: 18px; font-weight: bold; margin: 30px 0 15px 0; color: #2c3e50; border-bottom: 2px solid #3498db; padding-bottom: 5px; }
        .section-header { font-size: 16px; font-weight: bold; margin: 20px 0 10px 0; color: #34495e; }
        table { border-collapse: collapse; width: 100%; margin: 15px 0; }
        th, td { border: 1px solid #bdc3c7; padding: 8px; text-align: left; }
        th { background-color: #ecf0f1; font-weight: bold; }
        .summary-box { background-color: #f8f9fa; padding: 15px; border-left: 4px solid #3498db; margin: 15px 0; }
        .metric-value { font-weight: bold; color: #27ae60; }
        .no-data { color: #e74c3c; font-style: italic; }
    </style>
</head>
<body>

<h1>Comprehensive Retail Simulation Report</h1>
<div class="summary-box">
    <strong>Simulation ID:</strong> r   z$<br>
    <strong>Group ID:</strong> r   z,<br>
    <strong>Report Generated:</strong> z	
</div>

r   r    
r!   r"   r#   r$   r%   r&   r'   r(   r)   z

<div class="module-header">Summary & Conclusions</div>
<div class="summary-box">
    <p><strong>Key Insights:</strong></p>
    <ul>
        <li>Brand Strategy: rL   r@   z with rM   z4 target segments</li>
        <li>Network Planning: r   z? network plans developed</li>
        <li>Category Management: r   z< categories analyzed</li>
        <li>Marketing Activities: r   z> marketing initiatives planned</li>
        <li>Supply Chain: r  zJ supply chain adaptations evaluated</li>
    </ul>
</div>

</body>
</html>)r:   join_get_current_timestamp_generate_module1_html_generate_module2_html_generate_module3_html_generate_module4_html_generate_module5_html_generate_module6_html_generate_module7_html_generate_module8_html_generate_module9_html_generate_module10_htmllen)r   r   r   r8   html_contents        r   "generate_comprehensive_html_reportz7DynamicReportService.generate_comprehensive_html_report
  s   22=(K2 2 4 2 5=:	2>%	2* &5_%E$F+2*G +2, !0
 ;<-2,=(-2. )-(C(C(E'F/2.G/24 _Y7	BC D524E526 _Y7	BC D726E728 _Y7	BC D928E92: _Y7	BC D;2:E;2< _Y7	BC D=2<E=2> _Y7	BC D?2>E?2@ _Y7	BC DA2@EA2B _Y7	BC DC2BEC2D _Y7	BC DE2DEE2F oi8DE FG2FGG2R -Y7	B7KLYZS2R [aS2R beetu~e  AJ  fK  LV  fW  bX  aYS2RYS2T  #?9#=i#H#YZ[U2T\"U2V #&oi&@&KL&Y"Z![W2V\#W2X $'y'A)'LMc'd#e"fY2XgY2Z y9)DE[\]^[2Z_[2h r   module1_datac                 `   |d   }|d   }|d   }d}t        |d      D ]*  \  }}|d| d|d    d|d	    d|d
   xs d d|d    dz  }, d}|j                         D ]&  \  }	}
|d|	 d|
d    d|
d    d|
d    d|
d    dz  }( d|d    d|d   xs d d|d    d|r|nd d|r| dS d dS )zGenerate Module 1 HTML sectionrL   rM   rN   r  r   z.
            <tr>
                <td>Segment </td>
                <td>rC   rD   rE   Not specifiedrF   </td>
            </tr>&
            <tr>
                <td>rG   rH   rI   rJ   z
<div class="module-header">Module 1: Brand, Customers & Stores</div>

<div class="section-header">Brand Details</div>
<table>
    <tr><th>Brand Name</th><td class="metric-value">r@   z*</td></tr>
    <tr><th>Brand Logo</th><td>rA   r?   z)</td></tr>
    <tr><th>Rationale</th><td>rB   z</td></tr>
</table>

<div class="section-header">Customer Segments</div>
<table>
    <tr><th>Segment</th><th>Name</th><th>ISEC Category</th><th>Population</th><th>Location</th></tr>
    zH<tr><td colspan="5" class="no-data">No segments data available</td></tr>z
</table>

<div class="section-header">Store Formats</div>
<table>
    <tr><th>Format Type</th><th>Store Name</th><th>Size (sq ft)</th><th>Merchandise</th><th>Pricing Strategy</th></tr>
    zM<tr><td colspan="5" class="no-data">No store formats data available</td></tr>

</table>
)	enumerateitems)r   rC  rL   rM   rN   segments_htmlir\   formats_htmlrx   format_datas              r   r6  z+DynamicReportService._generate_module1_htmlD  s   W%
+$_5#Ha0JAw "C  V_% &^,- ./0COD EZ() * M 1 (5(;(;(=$K ! M " ./ 0 ./ 0 /0 1 !345 6 L )>5
 6;<5H4I J  %l 3 E~F G$[12 3 $])st u "\w x' 	& (ww x' 	r   module2_datac           	          |d   }|d   }|d   }d}|D ]  }|d|d    d|d    d	|d
   ddz  } d|r|nd dt        |       dt        |       dS )zGenerate Module 2 HTML sectionri   rj   rk   r  rH  rD   rE  rc   %</td>
                <td>rd   ,rG  z
<div class="module-header">Module 2: Location Analysis</div>

<div class="section-header">Catchment Potential</div>
<table>
    <tr><th>ISEC Category</th><th>Percentage of Segment</th><th>Potential Households</th></tr>
    zI<tr><td colspan="3" class="no-data">No catchment data available</td></tr>z
</table>

<div class="section-header">Sales Estimates Summary</div>
<div class="summary-box">
    <p><strong>Store Formats Analyzed:</strong> z2</p>
    <p><strong>Location Parameters:</strong> z locations defined</p>
</div>
)r@  )r   rP  	catchmentsalesrk   catchment_htmlru   s          r   r7  z+DynamicReportService._generate_module2_htmlw  s     !67	./ -	B #'( )/01 2./2 3	 N  &^+vw x1
 25U =..1)n-= > 	r   module3_datac                 
   |d   }|d   }d}|D ]  }|d|d    d|d    d|d    d	z  } d
|r|nd d|j                  dd      dd|j                  dd      dd|j                  dd      |j                  dd      z   dd	S )zGenerate Module 3 HTML sectionr   r   r  z+
            <tr>
                <td>Year r   rE  r~   r   rG  z
<div class="module-header">Module 3: Network Planning</div>

<div class="section-header">Network Expansion Plans</div>
<table>
    <tr><th>Year</th><th>Target Stores</th><th>Geography</th></tr>
    zH<tr><td colspan="3" class="no-data">No network plans available</td></tr>u   
</table>

<div class="section-header">Investment Summary</div>
<table>
    <tr><th>Store Format A Investment</th><td class="metric-value">₹r   r   z,.2fuQ   </td></tr>
    <tr><th>Store Format B Investment</th><td class="metric-value">₹r   uP   </td></tr>
    <tr><th>Total Capital Investment</th><td class="metric-value">₹r   r   </td></tr>
</table>
r+  )r   rW  r   
investmentnetwork_htmlplans         r   r8  z+DynamicReportService._generate_module3_html  s   $_5!"67
!D !v, (/*+ ,+&' (	 L " "\'qr sG
 HR~~VqstGuvzF{ |GGQ~~VqstGuvzF{ |FFPnnUprsFt  xB  xF  xF  Gb  de  xf  Gf  gk  Fl l 	r   module4_datac                     |d   }|d   }d}|D ]   }|d|d    d|d    d|d    d	|d
    d	z  }" d}|D ]  }|d|d    d|d    d	|d    dz  } d|r|nd d|r| dS d dS )zGenerate Module 4 HTML sectionr   r   r  rH  r   rE  r   r   rR  r   z%</td>
            </tr>r   r   z
<div class="module-header">Module 4: Category Management</div>

<div class="section-header">Category Roles</div>
<table>
    <tr><th>Category</th><th>Role</th><th>Sales Contribution</th><th>Margin Contribution</th></tr>
    zJ<tr><td colspan="4" class="no-data">No categories data available</td></tr>z
</table>

<div class="section-header">Gross Margin Contributions</div>
<table>
    <tr><th>Category</th><th>Sales Contribution</th><th>Gross Margin</th></tr>
    zF<tr><td colspan="3" class="no-data">No margin data available</td></tr>rI  r1  )r   r^  r   marginscategories_htmlr   margins_htmlr%  s           r   r9  z+DynamicReportService._generate_module4_html  s   !,/
56C $)* +)* +-./ 0./0 1  O  F !O,- .345 6O,- .	 L  (_-yz { "\p q 	 (pp q 	r   module5_datac                     |d   }|d   }d}|D ]   }|d|d    d|d    d|d    d|d	    d
	z  }" d}|D ]   }|d|d    d|d    d|d    d|d    d
	z  }" d|r|nd d|r| dS d dS )zGenerate Module 5 HTML sectionr   r   r  rH  r   rE  r   r   r   rG  r   r   rR  r   r   z
<div class="module-header">Module 5: Vendor Management</div>

<div class="section-header">Vendor Priority Matrix</div>
<table>
    <tr><th>Priority</th><th>Area</th><th>Metrics</th><th>Remarks</th></tr>
    zO<tr><td colspan="4" class="no-data">No priority matrix data available</td></tr>z
</table>

<div class="section-header">Vendor Scorecard</div>
<table>
    <tr><th>Metric</th><th>Weightage</th><th>Importance</th><th>BATNA</th></tr>
    zI<tr><td colspan="4" class="no-data">No scorecard data available</td></tr>rI  r1  )r   rc  r   r   priority_htmlr   scorecard_htmlr   s           r   r:  z+DynamicReportService._generate_module5_html  s)   &'?@ !34	'H "j)* +f%& 'i() *i() * M ( E #8_% &;'( )<() *7^$ % N  $])z{ | &^w x 	 ,ww x 	r   module6_datac           	          |d   }|d   }d}|D ]  }|d|d    d|d    d|d    d	z  } d
|j                  dd       d|j                  dd       d|j                  dd       d|r| d	S d d	S )zGenerate Module 6 HTML sectionr   r   r  rH  r^   rE  rJ   rB   rG  z
<div class="module-header">Module 6: Pricing & Promotions</div>

<div class="section-header">Competitor Pricing Analysis</div>
<table>
    <tr><th>Reference Competitor</th><td>r   rF  z0</td></tr>
    <tr><th>Pricing Strategy</th><td>z0</td></tr>
    <tr><th>Key Observations</th><td>r   z</td></tr>
</table>

<div class="section-header">Store Format Pricing Strategies</div>
<table>
    <tr><th>Store Format</th><th>Pricing Strategy</th><th>Rationale</th></tr>
    zR<tr><td colspan="3" class="no-data">No pricing strategies data available</td></tr>rI  rZ  )r   rg  r   r   strategies_htmlstrategys         r   r;  z+DynamicReportService._generate_module6_html  s    )*>?)*>?*H $n-. /012 3k*+ ,	  O +*
 +=*@*@AWYh*i)j k&&8&<&<=OQ`&a%b c&&8&<&<=OQ`&a%b c (_  C C 	 .B  C C 	r   module7_datac                     |d   }|d   }d}|D ]   }|d|d    d|d    d|d	    d|d
    d	z  }" d|r|nd d|j                  dd       d|j                  dd       d|j                  dd       d	S )zGenerate Module 7 HTML sectionr   r   r  rH  r   rE  r   rR  r   r   rG  z
<div class="module-header">Module 7: Marketing & Communications</div>

<div class="section-header">Marketing Activities</div>
<table>
    <tr><th>Activity</th><th>Budget %</th><th>Objective</th><th>Measurement Metric</th></tr>
    zT<tr><td colspan="4" class="no-data">No marketing activities data available</td></tr>zz
</table>

<div class="section-header">Competitor Marketing Analysis</div>
<table>
    <tr><th>Reference Retailer</th><td>r   rF  z/</td></tr>
    <tr><th>Marketing Brief</th><td>r   z/</td></tr>
    <tr><th>Differentiation</th><td>r   rY  rZ  )r   rk  r   r   activities_htmlactivitys         r   r<  z+DynamicReportService._generate_module7_html%  s    +,BC*+@A,H $o./ 0012 3k*+ ,234 5  O - (_  .D  E E(
 )<(?(?@TVe(f'g h%%8%<%<=WYh%i$j k%%8%<%<=NP_%`$a b 	r   module8_datac                 .   |d   }|d   }|d   }d}|D ]  }|d|d    d|d   d	d
|d    dz  } d}|D ]!  }|d|d    d|d   d	d
|d    d
|d    d	z  }# d}	|D ]  }
|	d|
d    d|
d   d	d
|
d    dz  }	 d|r|nd d|r|nd d|	r|	 dS d dS )zGenerate Module 8 HTML sectionr   r   r   r  rH  r   u   </td>
                <td>₹r   z,.0frE  r   rG  r   r   r   rY   r   r   z
<div class="module-header">Module 8: Services & Utilities</div>

<div class="section-header">Corporate Office Roles</div>
<table>
    <tr><th>Role Category</th><th>Cost to Company</th><th>Year 1 Count</th></tr>
    zO<tr><td colspan="3" class="no-data">No corporate roles data available</td></tr>z
</table>

<div class="section-header">Store Level Staff</div>
<table>
    <tr><th>Designation</th><th>Average Salary</th><th>Count</th><th>Store Format</th></tr>
    zE<tr><td colspan="4" class="no-data">No staff data available</td></tr>z
</table>

<div class="section-header">Utilities</div>
<table>
    <tr><th>Utility Type</th><th>Cost per Month</th><th>Store Format</th></tr>
    zI<tr><td colspan="3" class="no-data">No utilities data available</td></tr>rI  r1  )r   ro  r   r   r   corporate_htmlr   
staff_htmlr   utilities_htmlr   s              r   r=  z+DynamicReportService._generate_module8_htmlE  s   &'89"=1 -	#D #/*+ ,./5 6*%& '	 N $ 
 E =)* +./5 67^$ %./0 1 J !  G #^,- . 01$7 8012 3	 N ! &^+|} ~ Z#jk l &^w x% 	$ ,ww x% 	r   module9_datac                    |d   }d}|D ]X  }t        |d   t              rdj                  |d         nt        |d         }|d|d    d| d|d    d|d	    d|d
    dz  }Z d|r|nd dt	        |       dt        d |D               dS )zGenerate Module 9 HTML sectionr  r  r   z, rH  r  rE  r   r  rB   rG  z
<div class="module-header">Module 9: Backend & Supply Chain</div>

<div class="section-header">Supply Chain Adaptation Analysis</div>
<table>
    <tr><th>ID</th><th>Categories</th><th>Remarks</th><th>Adaptation Needed</th><th>Rationale</th></tr>
    zL<tr><td colspan="5" class="no-data">No supply chain data available</td></tr>zL
</table>

<div class="summary-box">
    <p><strong>Total Entries:</strong> z1</p>
    <p><strong>Adaptations Needed:</strong> c              3   N   K   | ]  }|d    j                         dk(  sd  yw)r  yesr   N)lower).0r  s     r   	<genexpr>z>DynamicReportService._generate_module9_html.<locals>.<genexpr>  s6       1E@TuX]^qXrXxXxXz  D  YD@Ts   %%z</p>
</div>
)
isinstancelistr4  r6   r@  sum)r   rt  r  entries_htmlr  categories_strs         r   r>  z+DynamicReportService._generate_module9_html}  s   +,BC)E?I%P\J]_c?dTYYu\':;jmns  uA  oB  kCN !=)* +#$ %9%& './0 1;'( ) L * "\'uv w( ),,@(A'B C--0  1E@T  1E  .E  -F F 	r   module10_datac           
      :   |d   }|d   }d}|j                         D ][  \  }}t        |t              s|j                         D ]2  \  }}|d| d|j                  dd      j	                          d| d	z  }4 ] d
|r|nd dt        |       dt        |       dS )zGenerate Module 10 HTML sectionr'  r(  r  z6
                    <tr>
                        <td>z - _ z7</td>
                        <td class="metric-value">z</td>
                    </tr>z
<div class="module-header">Module 10: Metrics & Performance Indexes</div>

<div class="section-header">Key Performance Metrics</div>
<table>
    <tr><th>Metric</th><th>Value</th></tr>
    zG<tr><td colspan="2" class="no-data">No metrics data available</td></tr>zK
</table>

<div class="summary-box">
    <p><strong>Data Sources:</strong> zL input categories processed</p>
    <p><strong>Calculated Metrics:</strong> z# performance indicators</p>
</div>
)rK  r{  dictreplacetitler@  )	r   r  r'  r   metrics_htmlmetric_namemetric_datakeyrq   s	            r   r?  z,DynamicReportService._generate_module10_html  s    x( 45(/$K+t,"-"3"3"5JC  )(MS[[c-B-H-H-J,K L227 9% L #6 )8 "\'pq r' (+6{m 4--0\N ; 	r   c                 L    ddl m } |j                         j                  d      S )z Get current timestamp for reportr   )datetimez%Y-%m-%d %H:%M:%S)r  nowstrftime)r   r  s     r   r5  z+DynamicReportService._get_current_timestamp  s    %||~&&':;;r   c                    | j                  ||      }t               }t        |t        dddd      }t	               }g }t        d|d   dddd	      }|j                  t        d
|             |j                  t        dd             dt        |d         gdt        |d         gd| j                         gd|d   d   d   d   gdt        t        |d   d   d               gdt        t        |d   d   d               gg}	t        |	dt        z  dt        z  g      }
|
j                  t        dddd d!dt         j"                  fd"d#g             |j                  |
       |j                  t        dd             |j%                  | j'                  ||             |j)                  |       |j+                  d$       |S )%z2Generate comprehensive PDF report with all modulesr  )pagesize
leftMarginrightMargin	topMarginbottomMarginCustomTitleHeading1r"  r  r   Helvetica-Bold)parentfontSize
spaceAfter	alignmentfontNamez&Comprehensive Retail Simulation ReportzSimulation IDr   zGroup IDr   zReport Generatedz
Brand Namer   r    rL   r@   zTotal SegmentsrM   zNetwork Plansr"   r   r      )	colWidths)ALIGNr   r   r  LEFT)FONTNAMEr  )r   r  r  GRIDr  r  )VALIGNr  r  TOP)FONTSIZEr  r  
   r   )r:   r   r	   r   r   r   rW   r
   r   r6   r5  r@  r   r   setStyler   r   blackextend_generate_pdf_module_sectionsbuildseek)r   r   r   r8   bufferdocstylesstorytitle_stylesummary_datasummary_tables              r   !generate_comprehensive_pdf_reportz6DynamicReportService.generate_comprehensive_pdf_report  s   22=(KPR^`oqr$& %*%%
 	YGUVVAr]# c//"BCD_Z89:!<!<!>??95i@I,WXs3y'A)'LZ'X#YZ[c#oi&@&KO&\"]^_
 lqvqv6FGz/;VXq&,,7/.+
   	 	]#VAr]# 	T77PQ		%Ar   r8   c                    g }t        d|d   dddt        j                        }t        dd      D ]  }d	| }||d
   v s|d
   |   }|j	                  t        d| d| j                  |       |             |dk(  rV|j	                  t        d|d   d    |d                |j	                  t        dt        |d          |d                n|dk(  r/|j	                  t        dt        |d          |d                n|dk(  r/|j	                  t        dt        |d          |d                ne|dk(  r/|j	                  t        dt        |d          |d                n1|dk(  r.|j	                  t        dt        |d          |d                n|dk(  r.|j	                  t        d t        |d!          |d                n|d"k(  r.|j	                  t        d#t        |d$          |d                n|d%k(  r.|j	                  t        d&t        |d'          |d                ne|d(k(  r.|j	                  t        d)t        |d*          |d                n2|d+k(  r-|j	                  t        d,t        |d-          |d                |j	                  t        dd              |S ).z%Generate PDF sections for all modulesModuleHeaderHeading2   r  r  )r  r  r  r  	textColorr      moduler   Module z: zBrand: rL   r@   Normalz
Segments: rM   r   zCatchment Areas: ri   r  zNetwork Plans: r      zCategories: r      zVendor Priorities: r      zPricing Strategies: r      zMarketing Activities: r      zCorporate Roles: r   	   zSupply Chain Entries: r  r  zPerformance Metrics: r(  )	r   r   darkbluerangerW   r
   _get_module_namer@  r   )r   r8   r  r  module_style
module_num
module_keymodule_datas           r   r  z2DynamicReportService._generate_pdf_module_sections  s    &*%%oo
  2,J!*.J_Y77-i8DYBt?T?TU_?`>a'bdpqr ?LLW[5I,5W4X+Y[abj[k!lmLLZK
<S8T7U+VX^_gXh!ij1_LL->s;OdCe?f>g+hjpqyjz!{|1_LL_S_A]=^<_+`bhiqbr!st1_LL\#k,>W:X9Y+Z\bck\l!mn1_LL-@[QiEjAk@l+mouv~o  "A  B1_LL-A#kRfFgBhAi+jlrs{l|!}~1_LL-CCTjHkDlCm+npvw  qA  "B  C1_LL->s;O`Ca?b>c+dflmufv!wx1_LL-CCTjHkDlCm+npvw  qA  "B  C2%LL-B3{SgGhCiBj+kmst|m}!~VAr]+= '@ r   r  c                 F    ddddddddd	d
d
}|j                  |d|       S )zGet module name by numberzBrand, Customers & StoreszLocation AnalysiszNetwork PlanningzCategory ManagementzVendor ManagementzPricing & PromotionszMarketing & CommunicationszServices & UtilitieszBackend & Supply ChainzMetrics & Performance Indexes)
r   r   r  r  r  r  r  r  r  r  r  rZ  )r   r  module_namess      r   r  z%DynamicReportService._get_module_name!  sE     +"!$"%+%'/
 
gj\,BCCr   N)'__name__
__module____qualname____doc__r   r   intr   r6   r   r:   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r7   rB  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r5  r   r  r   r  r  r1  r   r   r   r   
   s   M7 +D +D +DSRUX +DZ.]# .]$sCx. .]`5W# 5W$sCx. 5Wn(C# (C$sCx. (CT%B# %B$sCx. %BN)J# )J$sCx. )JV'H# 'H$sCx. 'HR(K# (K$sCx. (KT7O# 7O$sCx. 7Or0# 0$sCx. 08-<3 -<4S> -<^
 
s 
tCQTH~ 
&8 8s 8WZ 8t14S> 1c 1f4S> c >4S> c >&4S> &c &P'4S> 'c 'R4S> c >4S> c @64S> 6c 6p4S> c >T#s(^  << <
/s /c /V] /b/T#s(^ /X\ /bD3 D3 Dr   r   N)sqlalchemy.ormr   typingr   r   r   ior   reportlab.lib.pagesizesr   reportlab.platypusr	   r
   r   r   r   reportlab.lib.stylesr   r   reportlab.lib.unitsr   reportlab.libr   r   r1  r   r   <module>r     s1    " " "  & V V D $  eD eDr   