
    G	/iT                     $   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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 d dlmZ d dlm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+m,Z,m-Z- d dl.m/Z/  G d d      Z0y)    )HTTPException)SessionN)datetime)BytesIO)A4)SimpleDocTemplate	ParagraphSpacerTable
TableStyleImage)getSampleStyleSheet)colors)TblVendorMetricsPriorityList)TblVendorScorecard)TblPrivateLablling)TblCategoryCaptinshipPlanning)
TblSummary)TblGroup)SummaryCreate)VendorPriorityMatrixVendorScorecardPrivateLabellingCategoryCaptainshipPrimaryResearchDamageExpirySummaryModule5ReportPreview)JWTPayloadSchemac                   l    e Zd ZdedefdZdedefdZdedefdZ	dede
fd	Zdede
fd
Zdede
fdZy)Module5ReportServicedbtokenc                      || _         || _        y N)r"   r#   )selfr"   r#   s      F/var/www/html/retail-simulation-api/app/api/module_5_report/service.py__init__zModule5ReportService.__init__"   s    
    group_idreturnc                   K   |st        dd      | j                  j                  t              j	                  |      j                         xs | j                  j                  t              j	                  |      j                         xs | j                  j                  t              j	                  |      j                         xs| | j                  j                  t              j	                  |      j                         xs= | j                  j                  t              j	                  |      j                         }|rO| j                  j                  t              j	                  |      j                         }| j                  j                  t              j	                  |      j                         }| j                  j                  t              j	                  |      j                         }| j                  j                  t              j	                  |      j                         }| j                  j                  t              j	                  |      j                         }t        |t        dd      |D cg c]  }t        di |j                   c}xs t               g|D 	cg c]  }	t        di |	j                   c}	xs t               gt!        dd d      |D 
cg c]  }
t#        di |
j                   c}
xs t#               g|D cg c]  }t%        di |j                   c}xs t%               g|rt'        di |j                  n	t'               t(        j*                  j-                         	      S | j                  j                  t.              j	                  |      j                         }|r}t        |t        dd      t        |      gt        |      gt!        dd	d      t#        |      gt%        |      gt'        |      t(        j*                  j-                         	      S t        d
d      c c}w c c}	w c c}
w c c}w w)Ni  zgroup_id is required)status_codedetail)r*   N/A)profiles_interviewedinsights_gathered)negotiation_strategyrecovery_percentagepredictions)	r*   primary_researchvendor_priority_matrixvendor_scorecarddamage_expiryprivate_labellingcategory_captainshipsummarylast_updatedg        i  zGroup ID not found in database )r   r"   queryr   	filter_byfirstr   r   r   r   allr   r   r   __dict__r   r   r   r   r   pd	Timestampnowr   )r&   r*   module_data_existsvendor_priorityr7   r9   r:   r;   vpvsplccgroup_existss                r'   _fetch_module5_dataz(Module5ReportService._fetch_module5_data&   s    C8NOO GGMM67AA8ATZZ\ KGGMM,-777JPPRKGGMM,-777JPPRK GGMM78BBHBU[[]K GGMM*%///BHHJ 	 "ggmm,HISS]eSfjjlO#ww}}-?@JJT\J]aac $.@ A K KU] K ^ b b d#'77==1N#O#Y#Yck#Y#l#p#p#r ggmmJ/9989LRRTG'!!0).&+" Wf'fVePR(<(Kr{{(KVe'f  (Ck  lB  kCK[!\K[R/"@BKK"@K[!\!sapar`s*).(, %
 N_"_M^r#3#Bbkk#BM^"_"wdtdvcwSg%hSgR&9&HBKK&HSg%h  &D  nA  nC  mD7>3'"2"23GI\\--/! (  77==2<<h<OUUWL+%%4-2*/& -A(,S+T&5x&H%I".-2,/$)#
 (8'J&K*=x*P)Q#X6!#!1!1!3! ( $<\]]M (g!\ #`%hs7   JQ:Q&1Q:Q+  Q: Q0Q:/Q5D/Q:c                 @   K   | j                  |       d {   S 7 wr%   )rM   )r&   r*   s     r'   get_report_previewz'Module5ReportService.get_report_previewi   s     --h7777s   datac                    t               }t        |t        dddd      }t               }g }	 t	        ddd      }d|_        |j                  |       |j                  t        dd	             |j                  t        d
|d                |j                  t        dd             |d   }d|_	        d	|_
        |j                  t        d|d                |j                  t        dd	             t        d|      t        d|      gt        d|      t        t        |j                  j                  xs d      |      gt        d|      t        t        |j                  j                  xs d      |      gg}t        |ddg      }	|	j!                  t#        ddddt$        j&                  fddddt$        j&                  fddd d!d"d#d$d%d&d'g             |j                  |	       |j                  t        dd             |j                  t        d(|d                |j                  t        dd	             t        d)|      t        d*|      t        d+|      t        d,|      g}
|
g}|j(                  D ]  }t        t        |j*                  xs d-      |      t        |j,                  xs d|      t        |j.                  xs d|      t        |j0                  xs d|      g}|j                  |        g d.}t        |d/      }|j!                  t#        ddddt$        j&                  fddddt$        j&                  fddd d!d0d1d2d3d&d'g             |j                  |       |j                  t        dd             |j                  t        d4|d                |j                  t        dd	             t        d5|      t        d6|      t        d7|      t        d8|      g}|g}|j2                  D ]  }t        |j4                  xs d|      t        t        |j6                  xs d-      |      t        |j8                  xs d|      t        |j:                  xs d|      g}|j                  |        g d9}t        |d/      }|j!                  t#        ddddt$        j&                  fddddt$        j&                  fddd d!d0d1d2d3d&d'g             |j                  |       |j                  t        dd             |j                  t        d:|d                |j                  t        dd	             t        d|      t        d|      gt        d;|      t        t        |j<                  j>                  xs d      |      gt        d<|      t        t        |j<                  j@                  xs d=      |      gt        d>|      t        t        |j<                  jB                  xs d      |      gg}t        |ddg      }|j!                  t#        ddddt$        j&                  fddddt$        j&                  fddd d!d"d#d$d%d&d'g             |j                  |       |j                  t        dd             |j                  t        d?|d                |j                  t        dd	             t        d@|      t        dA|      t        dB|      g}|g}|jD                  D ]`  }t        |jF                  xs d|      t        |jH                  xs d|      t        |jJ                  xs d|      g}|j                  |       b g dC}t        |d/      }|j!                  t#        ddddt$        j&                  fddddt$        j&                  fddd d!d0d1d2d3d&d'g             |j                  |       |j                  t        dd             |j                  t        dD|d                |j                  t        dd	             t        d@|      t        dE|      t        dB|      g}|g}|jL                  D ]`  }t        |jF                  xs d|      t        |jN                  xs d|      t        |jJ                  xs d|      g}|j                  |       b g dC}t        |d/      } | j!                  t#        ddddt$        j&                  fddddt$        j&                  fddd d!d0d1d2d3d&d'g             |j                  |        |j                  t        dd             |j                  t        dF|d                |j                  t        dd	             t        d|      t        d|      gt        dG|      t        t        |jP                  jR                  xs d=      |      gt        dH|      t        t        |jP                  jT                  xs d=      |      gt        dI|      t        t        |jP                  jV                  xs d=      |      gt        dJ|      t        t        |jP                  jX                  xs d=      |      gt        dK|      t        t        |jP                  jZ                  xs d=      |      gt        dL|      t        t        |jP                  j\                  xs d=      |      gt        dM|      t        t        |jP                  j^                  xs d=      |      gt        dN|      t        t        |jP                  j`                  xs d=      |      gt        dO|      t        t        |jP                  jb                  xs d=      |      gt        dP|      t        t        |jP                  jd                  xs d=      |      gt        dQ|      t        t        |jP                  jf                  xs d=      |      gt        dR|      t        t        |jP                  jh                  xs d=      |      gt        dS|      t        t        |jP                  jj                  xs d=      |      gt        dT|      t        t        |jP                  jl                  xs d=      |      gt        dU|      t        t        |jP                  jn                  xs d=      |      gt        dV|      t        t        |jP                  jp                  xs d=      |      gt        dW|      t        t        |jP                  jr                  xs d=      |      gt        dX|      t        t        |jP                  jt                  xs d=      |      gg}!t        |!ddg      }"|"j!                  t#        ddddt$        j&                  fddddt$        j&                  fddd d!d"d#d$d%d&d'g             |j                  |"       |j                  t        dd             |j                  t        dd	             |j                  t        dY|jv                  jy                  dZ       |d                |j{                  |       |j}                  d-       t        j                         jy                  d[      }#d\|j                   d]|# d^}$d_|$ }%t        j                  t        j                  j                  |%      d`a       t        |%db      5 }&|&j                  |j                                dcdcdc       t        j                  j                  dd|$      S #  Y xY w# 1 sw Y   1xY w)ez(Generate PDF report and return file path2   )pagesize
leftMarginrightMargin	topMarginbottomMarginzTS Logo.png   K   )widthheightLEFT   
   z"Module 5: Vendor Management ReportTitle   Normal   zPrimary ResearchHeading2z<b>Field</b>z<b>Value</b>zProfiles Interviewedr/   zInsights Gathered   iT  )	colWidthsGRIDr   r   ri   g      ?BOX)FONTNAMErg   ri   r   zHelvetica-Bold)FONTSIZErg   rl   rb   )rk   r   r]   rh   	Helvetica)rm   rn   rh   rb   )LEFTPADDINGrg   rh      )RIGHTPADDINGrg   rh   rq   )
TOPPADDINGrg   rh      )BOTTOMPADDINGrg   rh   rt   )VALIGNrg   rh   TOP)ALIGNrg   rh   r\   zVendor Priority MatrixPriorityAreaMetricsRemarksr   )<   x         )
repeatRows)rp   rg   rh   rt   )rr   rg   rh   rt   )rs   rg   rh      )ru   rg   rh   r   zVendor ScorecardMetric	Weightage
ImportanceBATNA)r~   P   d      zDamage ExpiryzNegotiation StrategyzRecovery PercentagenullPredictionszPrivate LabellingzCategory NamezPrivate LabelRational)rX   r      zCategory CaptainshipzCategory<br/>Captainshipr   zStore SubmissionszStore SummarisezLocation SubmissionszLocation SummarisezNetwork SubmissionszNetwork SummarisezCategory SubmissionszCategory SummarisezPromotions SubmissionszPromotions SummarisezMarketing SubmissionszMarketing SummarisezService SubmissionszService SummarisezBackend SubmissionszBackend SummarisezMetrics SubmissionszMetrics SummarisezLast Updated: z%Y-%m-%d %H:%M:%Sz%Y%m%d_%H%M%Smodule5_complete_report_group__z.pdfzuploaded_files/T)exist_okwbNuploaded_files)Jr   r   r   r   r   hAlignappendr
   r	   fontSizeleadingstrr5   r0   r1   r   setStyler   r   blackr6   priorityareametricsremarksr7   metric	weightage
importancebatnar8   r2   r3   r4   r9   category_nameprivate_labelrationalr:   category_captinshipr;   store_submissionsstore_summariselocation_submissionslocation_summarisenetwork_submissionsnetwork_summarisecategory_submissionscategory_summarisepromotions_submissionspromotions_summarisemarketing_submissionsmarketing_summariseservice_submissionsservice_summarisebackend_submissionsbackend_summarisemetrics_submissionsmetrics_summariser<   strftimebuildseekr   rE   r*   osmakedirspathdirnameopenwritegetvaluejoin)'r&   rP   bufferdocstylesstorylogonormal_styleresearch_dataresearch_tableheaders
table_rowsvendorrowcolumn_widthsvendor_tablescorecard_headersscorecard_rows	scorecardscorecard_column_widthsscorecard_tabledamage_datadamage_tableprivate_headersprivate_rowsprivateprivate_column_widthsprivate_tablecaptainship_headerscaptainship_rowscaptainshipcaptainship_column_widthscaptainship_tablesummary_datasummary_table	timestampfilenamefilepathfs'                                          r'   _generate_pdf_reportz)Module5ReportService._generate_pdf_reportl   s   PR^`oqr$&	c"=D DKLLLL2'
 	YCVG_UVVAr]# h' !!Y16*3EFGVAr]# ~|4iP\6]^-|<iDLaLaLvLvLz  IA  CO  ?P  Q*L99SI^I^IpIpIytyEz  }I  <J  K
 }c
C
VXsFLL9FHa6;,7-01/2//,
 ! 	 	^$VAr]# 	Y7
9KLMVAr]# j,/fl+i.i.	
 Y
11F#foo23\B&++.=&..1E<@&..1E<@	C c" 2 ,ZA6jVXsFLL9FHa6;,7-01/2//*
  	 	\"VAr]# 	Y16*3EFGVAr]# h-k<0lL1g|,	
 ,,..I)**3e\B#i116Q7F)..7%F)//2ULA	C !!#& / #61=  VXsFLL9FHa6;,7-01/2//-
 " 	 	_%VAr]# 	Yz0BCDVAr]# ~|4iP\6]^-|<iDL^L^LsLsL|w|H}  @L  ?M  N,l;Ys4K]K]KqKqK{u{G|  K  >L  M}l3Ys4CUCUCaCaCjej?kmy5z{	
 [S#J?jVXsFLL9FHa6;,7-01/2//*
  	 	\"VAr]# 	Y2F:4FGHVAr]# o|4o|4j,/
 ((--G'//85,G'//85,G'**3e\BC
 $ . !0lq9zVXsFLL9FHa6;,7-01/2//+
   	 	]#VAr]# 	Y5vj7IJKVAr]# o|40,?j,/
 0044K+33<ulK+99BULQ+..7%FC
 ##C( 5 %4!!"2qA"":VXsFLL9FHa6;,7-01/2///
 $ 	 	&'VAr]# 	Yy&*<=>VAr]# ~|4iP\6]^*L99SIgIgIqkqEr  uA  <B  C(,73t||GcGcGmgmCnp|9}~-|<iDLLLmLmLwqwHx  {G  ?H  I+\:Ic$,,JiJiJsmsFt  wC  =D  E,l;Ys4<<KkKkKuouGv  yE  >F  G*L99SIgIgIqkqEr  uA  <B  C-|<iDLLLmLmLwqwHx  {G  ?H  I+\:Ic$,,JiJiJsmsFt  wC  =D  E/>	#dllNqNqN{u{J|  K  AL  M-|<iDLLLmLmLwqwHx  {G  ?H  I.=yT\\MoMoMysyIz  }I  @J  K,l;Ys4<<KkKkKuouGv  yE  >F  G,l;Ys4<<KkKkKuouGv  yE  >F  G*L99SIgIgIqkqEr  uA  <B  C,l;Ys4<<KkKkKuouGv  yE  >F  G*L99SIgIgIqkqEr  uA  <B  C,l;Ys4<<KkKkKuouGv  yE  >F  G*L99SIgIgIqkqEr  uA  <B  C'
, lsCjAzVXsFLL9FHa6;,7-01/2//+
   	 	]#VAr]# 	VAr]#Y0A0A0J0JK^0_/`acijrcstu		%A LLN++O<	3DMM?!I;dS$XJ/
BGGOOH-=(D!QGGFOO%& " ww||,h77O		F	 "!s   A|= 5 }=}}c                    K   | j                  |       d{   }| j                  |      }| j                  ||       |S 7 )w)z3Generate PDF and save to database, return file pathN)rM   r   _save_file_path_to_db)r&   r*   report_data	file_paths       r'   generate_and_save_pdfz*Module5ReportService.generate_and_save_pdf  sD      44X>>--k:	""8Y7 ?s   AA*Ar   c                    	 d| d}t        d|        | j                  j                  t              j	                  t        j
                  |k(        j                         }|rSt        d       ||_        | j                  j                          | j                  j                  |       t        d       yt        d       t        |||      }| j                  j                  |       | j                  j                          | j                  j                  |       t        d|j                          y# t        $ rF}| j                  j                          t        d	|        d
dl}|j                          Y d}~yd}~ww xY w)z;Save or update file path in summary table with group_id_modg_m5z6DEBUG: Looking for existing record with group_id_mod: z5DEBUG: Found existing record, updating uploaded_filesz"DEBUG: Updated record successfullyz1DEBUG: No existing record found, creating new one)r*   group_id_modr   z+DEBUG: Created new record with summary_id: z$ERROR saving file path to database: r   N)printr"   r>   r   filterr   r@   r   commitrefreshadd
summary_id	Exceptionrollback	traceback	print_exc)r&   r*   r   r   existing_summarynew_summaryer   s           r'   r   z*Module5ReportService._save_file_path_to_db  s:   	"xj,LJ<.YZ#ww}}Z8??
@W@W[g@ghnnpMO2; /  01:<IK(%!-#,
 K( ,CKDZDZC[\] 	"GG8<=!!		"s   B5D: 8BD: :	F	<FF	N)__name__
__module____qualname__r   r   r(   intr   rM   rO   r   r   r   r   r=   r)   r'   r!   r!   !   s    7 +; A^# A^:N A^F8 89M 8t8)= t8# t8l	C C "c "c "r)   r!   )1fastapir   sqlalchemy.ormr   pandasrC   r   r   ior   reportlab.lib.pagesizesr   reportlab.platypusr   r	   r
   r   r   r   reportlab.lib.stylesr   reportlab.libr   ,app.models.main.vendor_metrics_priority_listr    app.models.main.vendor_scorecardr    app.models.main.private_labllingr   ,app.models.main.category_captinship_planningr   app.models.main.summaryr   app.models.main.groupr   app.api.summary.schemar   app.api.module_5_report.schemar   r   r   r   r   r   r   r   app.dependency.authanticationr   r!   r=   r)   r'   <module>r     s[    ! "  	   & ] ] 4   U ? ? V . * 0	 	 	 ;d" d"r)   