
    J)i6K                        d dl mZmZmZmZ d dlmZ d dlmZ 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mZmZmZ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$ d dl%m&Z&  e       Z'e'jQ                  de       ee       ee!      fde)dede fd       Z*e'jQ                  d       ee       ee!      fde)dede fd       Z+e'jQ                  d       ee       ee!      fde)dede fd       Z,y)    )	APIRouterDependsResponseHTTPException)FileResponse)Session)BytesION)A4)colors)getSampleStyleSheet)SimpleDocTemplate	ParagraphSpacerTable
TableStyleImage)Module1ReportPreview)Module1ReportService)get_db)JWTPayloadSchemaget_current_student)
TblSummary)r   ParagraphStyle)inchz/{group_id}/preview1)response_modelgroup_iddbtokenc                    K   	 t        ||      }|j                  |       S # t        $ r  t        $ r}t        ddt	        |             d }~ww xY ww)N  zError: status_codedetail)r   _fetch_module1_datar   	Exceptionstr)r   r   r   servicees        >/var/www/html/retail-simulation-api/app/api/module_1/router.pypreview_reportr*      s]     H&r%0**844  Hgc!fX4FGGHs$   A! AAAAAz/{group_id}/download1c                 j2  K   t        ||      }|j                  |       }t        |j                  D cg c]*  }dt	        |j
                        v s|j                  xs d, c}      }t        |j                  D cg c]*  }dt	        |j
                        v s|j                  xs d, c}      }t        |j                  D cg c]*  }dt	        |j
                        v s|j                  xs d, c}      }t        |j                  D cg c]*  }dt	        |j
                        v s|j                  xs d, c}      }	t        |j                  D cg c]*  }dt	        |j
                        v s|j                  xs d, c}      }
t        |j                  D cg c]*  }dt	        |j
                        v s|j                  xs d, c}      }t        |j                  D cg c]*  }dt	        |j
                        v s|j                  xs d, c}      }t        |j                  D cg c]  }|j                  xs d c}      }t        |j                  D cg c]  }|j                  xs d c}      }t        |j                  D cg c]  }|j                   xs d c}      }||z   |z   |	z   |
z   |z   |z   |z   |z   |z   }t        |j                  D cg c]*  }dt	        |j
                        v s|j                  xs d, c}      }t        |j                  D cg c]*  }dt	        |j
                        v s|j                  xs d, c}      }t        |j                  D cg c]*  }dt	        |j
                        v s|j                  xs d, c}      }t        |j                  D cg c]*  }dt	        |j
                        v s|j                  xs d, c}      }t        |j                  D cg c]*  }dt	        |j
                        v s|j                  xs d, c}      }t        |j                  D cg c]*  }dt	        |j
                        v s|j                  xs d, c}      }t        |j                  D cg c]*  }dt	        |j
                        v s|j                  xs d, c}      }|}|}|}||z   |z   |z   |z   |z   |z   |z   |z   |z   }t#               }t%        |t&        dddd      }t)               }g }	 t+        ddd	      } d
| _        |j/                  |        |j/                  t1        dd             t3        d|d   dddd      }!|j/                  t5        d|!             |j/                  t1        dd             t3        d|d   ddd      }"|j/                  t5        d|"             |j/                  t1        dd             |j/                  t5        d|j6                  j8                  xs d |d                |j/                  t5        d|j6                  j:                  xs d |d                |j/                  t1        dd             |j/                  t5        d|"             |j/                  t1        dd              t=        |j>                  d      D ]b  \  }#}$|$j@                  r|$j@                  dk7  r|$j@                  nd!|# }%|j/                  t5        d"|# d#|% d$|d                |j/                  t1        dd%             |j/                  t5        d&|$jB                  xs d |d                |j/                  t1        dd'             |j/                  t5        d(|$jD                  dk7  r|$jD                  nd) |d                |j/                  t1        dd*             |j/                  t5        d+|$jF                  dk7  r|$jF                  nd) |d                |j/                  t1        dd*             |j/                  t5        d,|$jH                  dk7  r|$jH                  nd) |d                |j/                  t1        dd*             |j/                  t5        d-|$jJ                  dk7  r|$jJ                  nd) |d                |j/                  t1        dd*             |j/                  t5        d.|$jL                  xs d) |d                |j/                  t1        dd/             e |j/                  t5        d0|"             |j/                  t1        dd              tO        |jP                        dkD  r|jP                  d   jR                  dk7  r|jP                  d   }&|j/                  t5        d1|&jR                   d$|d                |j/                  t1        dd%             |j/                  t5        d2|&jT                  xs d3 |d                |j/                  t1        dd*             |j/                  t5        d4|&jV                  xs d5 |d                |j/                  t1        dd*             |j/                  t5        d6tY        |&d7d8       |d                |j/                  t1        dd*             |j/                  t5        d9tY        |&d:d5       |d                |j/                  t1        dd*             |j/                  t5        d-|&jJ                  xs d5 |d                |j/                  t1        dd*             |j/                  t5        d;|&jZ                  xs d5 |d                |j/                  t1        dd*             |j/                  t5        d<|&j\                  xs d5 |d                |j/                  t1        dd*             |j/                  t5        d=|&j^                  xs d5 |d                n|j/                  t5        d>|d                |j/                  t1        dd%             |j/                  t5        d?|d                |j/                  t1        dd*             |j/                  t5        d@|d                |j/                  t1        dd*             |j/                  t5        dA|d                |j/                  t1        dd*             |j/                  t5        dB|d                |j/                  t1        dd*             |j/                  t5        dC|d                |j/                  t1        dd*             |j/                  t5        dD|d                |j/                  t1        dd*             |j/                  t5        dE|d                |j/                  t1        dd*             |j/                  t5        dF|d                |j/                  t1        dd             tO        |jP                        dkD  r|jP                  d   jR                  dk7  r|jP                  d   }'|j/                  t5        dG|'jR                   d$|d                |j/                  t1        dd%             |j/                  t5        d2|'jT                  xs d3 |d                |j/                  t1        dd*             |j/                  t5        d4|'jV                  xs d5 |d                |j/                  t1        dd*             |j/                  t5        d6tY        |'d7d8       |d                |j/                  t1        dd*             |j/                  t5        d9tY        |'d:d5       |d                |j/                  t1        dd*             |j/                  t5        d-|'jJ                  xs d5 |d                |j/                  t1        dd*             |j/                  t5        d;|'jZ                  xs d5 |d                |j/                  t1        dd*             |j/                  t5        d<|'j\                  xs d5 |d                |j/                  t1        dd*             |j/                  t5        d=|'j^                  xs d5 |d                n|j/                  t5        dH|d                |j/                  t1        dd%             |j/                  t5        d?|d                |j/                  t1        dd*             |j/                  t5        d@|d                |j/                  t1        dd*             |j/                  t5        dA|d                |j/                  t1        dd*             |j/                  t5        dB|d                |j/                  t1        dd*             |j/                  t5        dC|d                |j/                  t1        dd*             |j/                  t5        dD|d                |j/                  t1        dd*             |j/                  t5        dE|d                |j/                  t1        dd*             |j/                  t5        dF|d                |j/                  t1        dd             |j/                  t5        dI|"             |j/                  t1        dd             |j/                  t5        dJ|d                |j/                  t1        dd             t5        dK|d         t5        dL|dM|d         gt5        dN|d         t5        dL|dM|d         gt5        dO|d         t5        dL|dM|d         gt5        dP|d         t5        dL|	dM|d         gt5        dQ|d         t5        dL|
dM|d         gt5        dR|d         t5        dL|dM|d         gt5        dS|d         t5        dL|dM|d         gt5        dT|d         t5        dL|dM|d         gt5        dU|d         t5        dL|dM|d         gt5        dV|d         t5        dL|dM|d         gt5        dW|d         t5        dX|dMd$|d         gg}(ta        |(dYtb        z  dZtb        z  g[      })|)je                  tg        d\d]d^d_d`th        jj                  fdadbd`dcth        jl                  fdddedfdgdhg	             |j/                  |)       |j/                  t1        ddi             |j/                  t5        dj|d                |j/                  t1        dd             t5        dK|d         t5        dL|dM|d         gt5        dN|d         t5        dL|dM|d         gt5        dO|d         t5        dL|dM|d         gt5        dP|d         t5        dL|dM|d         gt5        dQ|d         t5        dL|dM|d         gt5        dR|d         t5        dL|dM|d         gt5        dS|d         t5        dL|dM|d         gt5        dT|d         t5        dL|dM|d         gt5        dU|d         t5        dL|dM|d         gt5        dV|d         t5        dL|dM|d         gt5        dk|d         t5        dX|dMd$|d         gg}*ta        |*dYtb        z  dZtb        z  g[      }+|+je                  tg        d\d]d^d_d`th        jj                  fdadbd`dcth        jl                  fdddedfdgdhg	             |j/                  |+       |j/                  t1        dd             |j/                  t5        dl|"             |j/                  t1        dd             t5        dl|d         t5        |jn                  jp                  xs d5|d         gt5        dm|d         t5        t	        |jn                  jr                  xs d      |d         gg},ta        |,d*tb        z  dntb        z  g[      }-|-je                  tg        d\d]dadbd`dcth        jl                  fdddodpdqdrg             |j/                  |-       |ju                  |       |jw                  d       ty        |j{                         dsdtduiv      S c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w #  Y xY ww)wNAr   B2   )pagesize
leftMarginrightMargin	topMarginbottomMarginzTS Logo.png   K   )widthheightLEFT   
   CustomTitleHeading1      zHelvetica-Bold)parentfontSize
spaceAfter	alignmentfontNamez Module 1: Store Format & DetailsSectionHeaderHeading2   )r?   r@   rA   rC   zBranding & Store Details   z<b>Name of the Store:</b> zN/ANormalz<b>Rationale:</b>    z#Consumer Segments & Catchment Sizes   zSegment z<b>Segment z: z</b>   z<b>ISEC Segmentation:</b>    u+   • <b>Chief Wage Earner's Occupation:</b> zNot specified   u9   • <b>Education of the highest educated male adult:</b> u;   • <b>Education of the highest educated female adult:</b> u   • <b>Location:</b> u   • <b>Catchment Size:</b>    zStore Format Detailsz<b>Store Format A: u$   • <b>Store Size (in sq. ft.):</b> g        u   • <b>Merchandise:</b> zNot Setu"   • <b>Merchandise Rationale:</b> merchandise_rationalezNot providedu   • <b>Pricing Strategy:</b> pricing_strategyu   • <b>Service Parameters:</b> u    • <b>Technology Adoption:</b> u   • <b>Other Parameters:</b> z<b>Store Format A: Not Set</b>u'   • <b>Store Size (in sq. ft.):</b> 0.0u   • <b>Merchandise:</b> Not Setu.   • <b>Merchandise Rationale:</b> Not providedu$   • <b>Pricing Strategy:</b> Not Setu   • <b>Location:</b> Not Setu&   • <b>Service Parameters:</b> Not Setu'   • <b>Technology Adoption:</b> Not Setu$   • <b>Other Parameters:</b> Not Setz<b>Store Format B: z<b>Store Format B: Not Set</b>zCapital Expensesz<b>Store Format A</b>z
Civil WorkzRs. z,.2fzRacking and Display UnitszCarpentry and FurniturezElectrical and CablingzCommercial EquipmentzSignage and Display BoardszInformation TechnologyzVisual MerchandisingPlumbingOthersz<b>Total</b>z<b>Rs. g      @g      ?)	colWidths)ALIGNr   r   rW   r8   )VALIGNrU   rV   TOP
BACKGROUND)r   rW   rV   GRIDrU   g      ?)WORDWRAPrU   rV   T)LEFTPADDINGrU   rV   rL   )RIGHTPADDINGrU   rV   rL   )
TOPPADDINGrU   rV   rL   )BOTTOMPADDINGrU   rV   rL      z<b>Store Format B</b>z<b>Total Investments</b>zDepreciation MethodzDepreciation Years (in Years)   )r]   rU   rV   rK   )r^   rU   rV   rK   )r_   rU   rV   rK   )r`   rU   rV   rK   zapplication/pdfzContent-Dispositionz'attachment; filename=module1_report.pdf)content
media_typeheaders)>r   r$   sumcivilr&   store_format_typetotaldisplay_racking_units	carpentryelectrical_cablingcommercial_equipmentdisplay_boardsinfotechvisual_merchandisingplumbingadditional_installations
total_costr	   r   r
   r   r   hAlignappendr   r   r   brand
brand_name	rationale	enumeratesegmentssegment_name
isec_valuechief_wage_earner_occupationmale_educationfemale_educationlocationtotal_populationlenstore_formats
store_name
store_sizemerchandisegetattrservice_parameterstechnology_adoptionother_parametersr   r   setStyler   r   	lightgreyblackdepreciationdepreciation_method	slm_yearsbuildseekr   getvalue).r   r   r   r'   reportitemformat_a_civilformat_a_displayformat_a_carpentryformat_a_electricalformat_a_equipmentformat_a_signageformat_a_itformat_a_visualformat_a_plumbingformat_a_othersformat_a_totalformat_b_civilformat_b_displayformat_b_carpentryformat_b_electricalformat_b_equipmentformat_b_signageformat_b_itformat_b_visualformat_b_plumbingformat_b_othersformat_b_totalbufferdocstylesstorylogotitle_stylesection_styleisegmentr{   sf_asf_bcapex_a_datacapex_a_tablecapex_b_datacapex_b_tabledepreciation_datadepreciation_tables.                                                 r)   download_reportr   %   s     #2e,G((2F fllildcSQUQgQgMhFh$**//lijN8T8T{8TX[_bcgcycy_zXzDJJO!O8T{|&:J:Jq:J$cUXY]YoYoUpNpdjjoAo:Jqr6;T;T{;T4X[_bcgcycy_zXztzzQ;T{|&:U:U|:U$Y\`cdhdzdz`{Y{djjoAo:U|}8M8Mt8MQTX[\`\r\rXsQsDJJO!O8Mtu6??i?4cSQUQgQgMhFhtzzQ?ijKv7R7RS7Rt4::??7RSTOITZZ_1_IJF<[<[\<[D4??/a/<[\]O)),>>ATT	-	.0;	<>M	N	+	,  fllildcSQUQgQgMhFh$**//lijN8T8T{8TX[_bcgcycy_zXzDJJO!O8T{|&:J:Jq:J$cUXY]YoYoUpNpdjjoAo:Jqr6;T;T{;T4X[_bcgcycy_zXztzzQ;T{|&:U:U|:U$Y\`cdhdzdz`{Y{djjoAo:U|}8M8Mt8MQTX[\`\r\rXsQsDJJO!O8Mtu6??i?4cSQUQgQgMhFhtzzQ?ijK%O)%O)),>>ATT	-	.0;	<>M	N	+	,  YF
FRBBZ\km
nC "FE]#b9TVAr]#
 !j!!K 
LL={KL	LL2 #j!!M 
LL5}EF	LL1	LL78O8O8XSX7YZ\bck\lmn	LL/0F0F0O%/PQSYZbScde	LL2 
LL@-PQ	LL23
7/6/C/CH\H\`eHew++muvwuxkyYQCr,tDfXFVWXVAq\"Y!;G<N<N<SRS;TUW]^fWghiVAq\"Y!Lu|  vZ  vZ  ^c  vcWMqMq  ix  My   z  |B  CK  |L  M  	NVAq\"Y!Zu|  vL  vL  PU  vU[b[q[q  [j  [k   l  nt  u}  n~    	@VAq\"Y!\  zA  zR  zR  V[  z[]d]u]u  ap  ]q   r  tz  {C  tD  E  	FVAq\"Y!67K[K[_dKdw7G7Gjy6z{  ~D  EM  ~N  O  	PVAq\"Y!<W=U=U=hYh<ijlrs{l|}~VAr]#! 4& 
LL1=AB	LL2 6 1$)=)=a)@)K)Ku)T##A&Y!4T__4ETJFS[L\]^VAq\"Y!EdooF\Y\E]^`fgo`pqrVAq\"Y!9$:J:J:Wi9XY[abj[klmVAq\"Y!CGDRikyDzC{|  E  FN  O  P  	QVAq\"Y!>wtM_aj?k>lmouv~o  A  	BVAq\"Y!6t}}7Q	6RSU[\dUefgVAq\"Y!@AXAXAe\e@fgiopxiyz{VAq\"Y!A$BZBZBg^gAhikqrzk{|}VAq\"Y!>t?T?T?aXa>bceklteuvw 	Y?AQRSVAq\"YH&QYJZ[\VAq\"Y@&BRSTVAq\"YOQWX`QabcVAq\"YEvhGWXYVAq\"Y=vh?OPQVAq\"YGPXIYZ[VAq\"YH&QYJZ[\VAq\"YEvhGWXY	LL2 6 1$)=)=a)@)K)Ku)T##A&Y!4T__4ETJFS[L\]^VAq\"Y!EdooF\Y\E]^`fgo`pqrVAq\"Y!9$:J:J:Wi9XY[abj[klmVAq\"Y!CGDRikyDzC{|  E  FN  O  P  	QVAq\"Y!>wtM_aj?k>lmouv~o  A  	BVAq\"Y!6t}}7Q	6RSU[\dUefgVAq\"Y!@AXAXAe\e@fgiopxiyz{VAq\"Y!A$BZBZBg^gAhikqrzk{|}VAq\"Y!>t?T?T?aXa>bceklteuvw 	Y?AQRSVAq\"YH&QYJZ[\VAq\"Y@&BRSTVAq\"YOQWX`QabcVAq\"YEvhGWXYVAq\"Y=vh?OPQVAq\"YGPXIYZ[VAq\"YH&QYJZ[\VAq\"YEvhGWXY	LL2 
LL-}=>	LL2 
LL2F84DEF	LL2	<!1	2I^TXDY>Z\bck\l4mn	.x0@	A9tTdeiSjMkmst|m}C~	,fX.>	?TRdeiQjKkmst|m}A~	+VH-=	>	DQdeiPjJkmst|m}@~	)6(+;	<i$OabfNgHhjpqyjz>{|	/1A	BIPTUefjTkNlntu}n~D  	A	+VH-=	>	DQ\]aPbJceklteu@vw	)6(+;	<i$_cNdHegmnvgw>xy	:vh/	0)dCTUYBZ<[]cdl]m2no	8VH-	.	DQU@V:WY_`hYi0jk	>6(#3	4i'.Y]I^^b@ceklteu6vwL ,3t8SX2FGM:++	w&*:*:;	35,,-+.
' 
 
 
LL	LL2 
LL2F84DEF	LL2	<!1	2I^TXDY>Z\bck\l4mn	.x0@	A9tTdeiSjMkmst|m}C~	,fX.>	?TRdeiQjKkmst|m}A~	+VH-=	>	DQdeiPjJkmst|m}@~	)6(+;	<i$OabfNgHhjpqyjz>{|	/1A	BIPTUefjTkNlntu}n~D  	A	+VH-=	>	DQ\]aPbJceklteu@vw	)6(+;	<i$_cNdHegmnvgw>xy	:vh/	0)dCTUYBZ<[]cdl]m2no	8VH-	.	DQU@V:WY_`hYi0jk	-vh/?	@)gVdeiUjjnLoqw  yA  rB  CC  	DL ,3t8SX2FGM:++	w&*:*:;	35,,-+.
' 
 
 
LL	LL2 
LL0-@A	LL2 
(&*:	;YvGZGZGnGnG{r{  ~D  EM  ~N  >O  	P	2F84D	EyQTU[UhUhUrUrUwvwQx  {A  BJ  {K  HL  	M
 0QtVQtV<LM
++	35,,-+.	, 	! 	 
LL#$IIe
KKN!$&(QR g j{q{|tiSI\ j{q{|ti*sw  1Ad3AcAc"Ad3<AcAc+Ad3Ac "Ac 4Ad3Ac%+Ac%=Ad3Ac*4Ac*Ad3 Ac/=Ac/Ad3)Ac4Ac4Ad32Ac9	Ad3#Ac>:Ad3Ad+7Ad3"Ad?AdAd3+AdAdAd34AdAd#Ad3=AdAd,Ad3Ad#Ad5Ad3Ad!,Ad!>Ad3Ad&5Ad&AAd3AAd+ AOAd3d+Ad0d-Ad3z/{group_id}/preview-report-pdf1c                    K   	 t        ||      }|j                  |       }| |dS # t        $ r  t        $ r}t        ddt	        |             d}~ww xY ww)z4Generate PDF report and return file path information)r   	file_pathr    zError generating PDF: r!   N)r   generate_and_save_pdfr   r%   r&   )r   r   r   r'   r   r(   s         r)   generate_and_serve_pdfr   I  sr     W&r%011(;	 !"
 	

   W6LSQRVH4UVVWs$   A!& AAAAA)-fastapir   r   r   r   fastapi.responsesr   sqlalchemy.ormr   ior	   osreportlab.lib.pagesizesr
   reportlab.libr   reportlab.lib.stylesr   reportlab.platypusr   r   r   r   r   r   app.api.module_1.schemar   app.api.module_1.servicer   app.database.main.mysqlr   app.dependency.authanticationr   r   app.models.main.summaryr   r   reportlab.lib.unitsr   module_1_report_routergetintr*   r   r        r)   <module>r      s@   ? ? * "  	 &   4 ] ] 8 9 * O . D $ #  2CWX &/%&9:HHH H YH 34 &/%&9:``` ` 5`F	 => &/%&9:WWW W ?Wr   