
    7iN                     
   d dl 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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mZ d	dlmZmZmZmZmZm Z m!Z!m"Z"m#Z#  e       Z$e$jK                  de       ee       ee      fde&de	defd       Z'e$jK                  d       ee       ee      fde&de	defd       Z(e$jK                  d       ee       ee      fde&de	defd       Z)e$jK                  de       ee       ee      fde&de	defd       Z*e$jK                  d       ee       ee      fde&de	defd       Z+e$jK                  d       ee       ee      fde&de	defd       Z,e$jK                  de       ee       ee      fde&de	defd       Z-e$jK                  d       ee       ee      fde&de	defd       Z.e$jK                  d        ee       ee      fde&de	defd!       Z/e$jK                  d"e       ee       ee      fde&de	defd#       Z0e$jK                  d$       ee       ee      fde&de	defd%       Z1e$jK                  d&       ee       ee      fde&de	defd'       Z2e$jK                  d(e       ee       ee      fde&de	defd)       Z3e$jK                  d*       ee       ee      fde&de	defd+       Z4e$jK                  d,       ee       ee      fde&de	defd-       Z5e$jK                  d.e        ee       ee      fde&de	defd/       Z6e$jK                  d0       ee       ee      fde&de	defd1       Z7e$jK                  d2       ee       ee      fde&de	defd3       Z8e$jK                  d4e!       ee       ee      fde&de	defd5       Z9e$jK                  d6       ee       ee      fde&de	defd7       Z:e$jK                  d8       ee       ee      fde&de	defd9       Z;e$jK                  d:e"       ee       ee      fde&de	defd;       Z<e$jK                  d<       ee       ee      fde&de	defd=       Z=e$jK                  d>       ee       ee      fde&de	defd?       Z>e$jK                  d@e#       ee       ee      fde&de	defdA       Z?e$jK                  dB       ee       ee      fde&de	defdC       Z@e$jK                  dD       ee       ee      fde&de	defdE       ZAe$jK                  dF      dG        ZBy)H    )	APIRouterDependsHTTPExceptionQuery)StreamingResponseJSONResponse)Session)OptionalN)datetime)get_db)JWTPayloadSchemaget_current_user   )Module1ReportServiceModule2ReportServiceModule3ReportServiceModule4ReportServiceModule8ReportServiceModule9ReportService)	Module1ReportResponseModule2ReportResponseModule3ReportResponseModule4ReportResponseModule5ReportResponseModule6ReportDataModule7ReportResponseModule8ReportResponseModule9ReportResponsez/module1/preview/{group_id})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  Error: status_codedetail)r   generate_module1_reportr   	Exceptionstrr    r!   r"   servicees        D/var/www/html/retail-simulation-api/app/api/module_reports/router.pypreview_module1_reportr1      [     H&r*..x88  Hgc!fX4FGGH$   A  AAAAAz/module1/download/{group_id}c                   K   	 t        |      }|j                  |       }t        t        |j	                         g      ddd|  di      S # t
        $ r  t        $ r}t        ddt        |             d }~ww xY ww)	Napplication/pdfContent-Dispositionz*attachment; filename=module1_report_group_.pdf
media_typeheadersr%   r&   r'   )r   generate_pdf_reportr   itergetvaluer   r+   r,   r    r!   r"   r.   
pdf_bufferr/   s         r0   download_module1_reportr@           H&r*00:
 z':':'<&=!>K\(=Akltkuuy?z'{} 	}  Hgc!fX4FGGH)   A?AA A?A<A77A<<A?z/module1/summary/{group_id}c                   K   	 t        |      }|j                  |       }d|j                  j                  dk7  rdnd|j                  j                  t	        |j
                        |j                  j                  |j                  j                  d}t        |      S # t        $ r}t        ddt        |       	      d }~ww xY ww)
NzBrand, Customers & StorezNot Set	completed
incomplete)module_namecompletion_status
brand_nametotal_segmentstotal_investment_format_atotal_investment_format_bcontentr%   r&   r'   )r   r*   brand_detailsrH   lenconsumer_segmentscapital_expenses_format_atotalcapital_expenses_format_br   r+   r   r,   r    r!   r"   r.   report_datasummaryr/   s          r0   get_module1_summaryrW   &   s     H&r*55h?50;0I0I0T0TXa0ags%33>>!+"?"?@)4)N)N)T)T)4)N)N)T)T
 G,, Hgc!fX4FGGHs)   C	BB C		C(CCC	z/module2/preview/{group_id}c                    K   	 t        |      }|j                  |       S # t        $ r  t        $ r}t        ddt	        |             d }~ww xY wwr$   )r   generate_module2_reportr   r+   r,   r-   s        r0   preview_module2_reportrZ   8   r2   r3   z/module2/download/{group_id}c                   K   	 t        |      }|j                  |       }t        t        |j	                         g      ddd|  di      S # t
        $ r  t        $ r}t        ddt        |             d }~ww xY ww)	Nr5   r6   z*attachment; filename=module2_report_group_r7   r8   r%   r&   r'   )r   r;   r   r<   r=   r   r+   r,   r>   s         r0   download_module2_reportr\   B   rA   rB   z/module2/summary/{group_id}c                   K   	 t        |      }|j                  |       }dt        |j                        dkD  rdndt        |j                        |j                  |j
                  j                  |j                  j                  d}t        |      S # t        $ r}t        ddt        |       	      d }~ww xY ww)
NzLocation Analysisr   rD   rE   )rF   rG   total_customer_segmentsestimated_market_sharesales_estimate_format_asales_estimate_format_brL   r%   r&   r'   )r   rY   rO   customer_segmentsr_   r`   sales_valuera   r   r+   r   r,   rT   s          r0   get_module2_summaryrd   N   s     H&r*55h?.03K4Q4Q0RUV0V\h'*;+H+H'I&1&H&H'2'J'J'V'V'2'J'J'V'V
 G,, Hgc!fX4FGGHs)   B>BB B>	B;B66B;;B>z/module3/preview/{group_id}c                    K   	 t        |      }|j                  |       S # t        $ r  t        $ r}t        ddt	        |             d }~ww xY wwr$   )r   generate_module3_reportr   r+   r,   r-   s        r0   preview_module3_reportrg   `   r2   r3   z/module3/download/{group_id}c                   K   	 t        |      }|j                  |       }t        t        |j	                         g      ddd|  di      S # t
        $ r  t        $ r}t        ddt        |             d }~ww xY ww)	Nr5   r6   z*attachment; filename=module3_report_group_r7   r8   r%   r&   r'   )r   r;   r   r<   r=   r   r+   r,   r>   s         r0   download_module3_reportri   j   rA   rB   z/module3/summary/{group_id}c                 :  K   	 t        |      }|j                  |       }dd|j                  |j                  |j                  j
                  |j                  j                  d}t        |      S # t        $ r}t        ddt        |             d }~ww xY ww)NzNetwork PlanningrD   )rF   rG   target_storesgeography_selectionrJ   rK   rL   r%   r&   r'   )r   rf   rk   rl   store_investment_summary total_store_investments_format_a total_store_investments_format_br   r+   r   r,   rT   s          r0   get_module3_summaryrp   v   s     H&r*55h?-!,(66#.#B#B)4)M)M)n)n)4)M)M)n)n
 G,, Hgc!fX4FGGHs)   BA,A1 0B1	B:BBBz/module4/preview/{group_id}c                    K   	 t        |      }|j                  |       S # t        $ r  t        $ r}t        ddt	        |             d }~ww xY wwr$   )r   generate_module4_reportr   r+   r,   r-   s        r0   preview_module4_reportrs      r2   r3   z/module4/download/{group_id}c                   K   	 t        |      }|j                  |       }t        t        |j	                         g      ddd|  di      S # t
        $ r  t        $ r}t        ddt        |             d }~ww xY ww)	Nr5   r6   z*attachment; filename=module4_report_group_r7   r8   r%   r&   r'   )r   r;   r   r<   r=   r   r+   r,   r>   s         r0   download_module4_reportru      rA   rB   z/module4/summary/{group_id}c                 R  K   	 t        |      }|j                  |       }dd|j                  j                  |j                  j                  z   |j
                  |j                  j                  d}t        |      S # t        $ r}t        ddt        |             d }~ww xY ww)NzCategory ManagementrD   )rF   rG   total_categoriestotal_weighted_average_marginreference_competitorrL   r%   r&   r'   )r   rr   category_levelsstore_format_a_categoriesstore_format_b_categories#total_weighted_average_gross_margincompetitor_researchry   r   r+   r   r,   rT   s          r0   get_module4_summaryr      s     H&r*55h?0!, + ; ; U UXcXsXs  YN  YN  !N-8-\-\$/$C$C$X$X
 G,, Hgc!fX4FGGHs)   B'A8A= <B'=	B$BB$$B'z/module5/preview/{group_id}c                    K   	 t        |      }|j                  |       S # t        $ r  t        $ r}t        ddt	        |             d }~ww xY wwr$   )r   generate_module5_reportr   r+   r,   r-   s        r0   preview_module5_reportr      r2   r3   z/module5/download/{group_id}c                   K   	 t        |      }|j                  |       }t        t        |j	                         g      ddd|  di      S # t
        $ r  t        $ r}t        ddt        |             d }~ww xY ww)	Nr5   r6   z*attachment; filename=module5_report_group_r7   r8   r%   r&   r'   )r   generate_module5_pdf_reportr   r<   r=   r   r+   r,   r>   s         r0   download_module5_reportr           H&r*88B
 z':':'<&=!>K\(=Akltkuuy?z'{} 	}  Hgc!fX4FGGHrB   z/module5/summary/{group_id}c                 x  K   	 t        |      }|j                  |       }ddt        |j                        t        |j                        t        |j
                  D cg c]  }|j                  dk(  s| c}      d}t        |      S c c}w # t        $ r}t        ddt        |             d }~ww xY ww)	NzVendor ManagementrD   Yes)rF   rG   total_priority_areastotal_scorecard_metricsprivate_label_countrL   r%   r&   r'   )r   r   rO   vendor_priority_matrixvendor_scorecardprivate_labellingprivate_labelr   r+   r   r,   )r    r!   r"   r.   rU   plrV   r/   s           r0   get_module5_summaryr      s     H&r*55h?.!,$'(J(J$K'*;+G+G'H#&[5R5R'p5RrVXVfVfjoVo5R'p#q
 G,, (q  Hgc!fX4FGGHsA   B:AB B2B6B 
B:B 	B7B22B77B:z/module6/preview/{group_id}c                    K   	 t        |      }|j                  |       S # t        $ r  t        $ r}t        ddt	        |             d }~ww xY wwr$   )r   generate_module6_reportr   r+   r,   r-   s        r0   preview_module6_reportr      r2   r3   z/module6/download/{group_id}c                   K   	 t        |      }|j                  |       }t        t        |j	                         g      ddd|  di      S # t
        $ r  t        $ r}t        ddt        |             d }~ww xY ww)	Nr5   r6   z*attachment; filename=module6_report_group_r7   r8   r%   r&   r'   )r   generate_module6_pdf_reportr   r<   r=   r   r+   r,   r>   s         r0   download_module6_reportr      r   rB   z/module6/summary/{group_id}c                 6  K   	 t        |      }|j                  |       }ddt        |j                        |j                  j
                  |j                  j                  d}t        |      S # t        $ r}t        ddt        |             d }~ww xY ww)NzPricing & PromotionsrD   )rF   rG   total_promotionshas_loyalty_programpricing_competitorrL   r%   r&   r'   )r   r   rO   yearly_promotionsloyalty_programhas_programcompetitor_pricingry   r   r+   r   r,   rT   s          r0   get_module6_summaryr      s     H&r*55h?1!, #K$A$A B#.#>#>#J#J"-"@"@"U"U
 G,, Hgc!fX4FGGHs)   BA*A/ .B/	B8BBBz/module7/preview/{group_id}c                    K   	 t        |      }|j                  |       S # t        $ r  t        $ r}t        ddt	        |             d }~ww xY wwr$   )r   generate_module7_reportr   r+   r,   r-   s        r0   preview_module7_reportr      r2   r3   z/module7/download/{group_id}c                   K   	 t        |      }|j                  |       }t        t        |j	                         g      ddd|  di      S # t
        $ r  t        $ r}t        ddt        |             d }~ww xY ww)	Nr5   r6   z*attachment; filename=module7_report_group_r7   r8   r%   r&   r'   )r   generate_module7_pdf_reportr   r<   r=   r   r+   r,   r>   s         r0   download_module7_reportr     r   rB   z/module7/summary/{group_id}c                    K   	 t        |      }|j                  |       }dd|j                  t        |j                        t        |j
                        d}t        |      S # t        $ r}t        ddt        |             d }~ww xY ww)NzMarketing & CommunicationsrD   )rF   rG   marketing_budget_percentagetotal_marketing_activitiesbrand_attributes_countrL   r%   r&   r'   )
r   r   r   rO   marketing_activitiesbrand_attributesr   r+   r   r,   rT   s          r0   get_module7_summaryr     s     H&r*55h?7!,+6+R+R*-k.N.N*O&)+*F*F&G
 G,, Hgc!fX4FGGHs)   BAA$ #B$	B-BBBz/module8/preview/{group_id}c                    K   	 t        |      }|j                  |       S # t        $ r  t        $ r}t        ddt	        |             d }~ww xY wwr$   )r   generate_module8_reportr   r+   r,   r-   s        r0   preview_module8_reportr   $  r2   r3   z/module8/download/{group_id}c                   K   	 t        |      }|j                  |       }t        t        |j	                         g      ddd|  di      S # t
        $ r  t        $ r}t        ddt        |             d }~ww xY ww)	Nr5   r6   z*attachment; filename=module8_report_group_r7   r8   r%   r&   r'   )r   r;   r   r<   r=   r   r+   r,   r>   s         r0   download_module8_reportr   .  rA   rB   z/module8/summary/{group_id}c                 p  K   	 t        |      }|j                  |       }ddt        |j                  D cg c]  }|j                   c}      |j
                  j                  |j                  j                  d}t        |      S c c}w # t        $ r}t        ddt        |             d }~ww xY ww)NzServices & UtilitiesrD   )rF   rG   total_corporate_stafftotal_utilities_cost_atotal_utilities_cost_brL   r%   r&   r'   )r   r   sumcorporate_office_rolesy1_countutilities_format_atotal_utility_costutilities_format_br   r+   r   r,   )r    r!   r"   r.   rU   rolerV   r/   s           r0   get_module8_summaryr   :  s     H&r*55h?1!,%(KDfDf)gDfD$--Df)g%h&1&D&D&W&W&1&D&D&W&W
 G,,	 *h
  Hgc!fX4FGGHs9   B61B B>B B6B 	B3B..B33B6z/module9/preview/{group_id}c                    K   	 t        |      }|j                  |       S # t        $ r  t        $ r}t        ddt	        |             d }~ww xY wwr$   )r   generate_module9_reportr   r+   r,   r-   s        r0   preview_module9_reportr   K  r2   r3   z/module9/download/{group_id}c                   K   	 t        |      }|j                  |       }t        t        |j	                         g      ddd|  di      S # t
        $ r  t        $ r}t        ddt        |             d }~ww xY ww)	Nr5   r6   z*attachment; filename=module9_report_group_r7   r8   r%   r&   r'   )r   r;   r   r<   r=   r   r+   r,   r>   s         r0   download_module9_reportr   U  rA   rB   z/module9/summary/{group_id}c                   K   	 t        |      }|j                  |       }|j                  dkD  r|j                  |j                  z  dz  nd}d|j                  dkD  rdnd|j                  |j                  t	        |d      t        |j                        d}t        |      S # t        $ r}t        d	d
t        |             d }~ww xY ww)Nr   d   zBackend & Supply ChainrD   rE      )rF   rG   total_entriesadaptation_neededadaptation_rate_percentagecategories_requiring_adaptationrL   r%   r&   r'   )r   r   r   adaptation_needed_countroundrO   r   r   r+   r   r,   )r    r!   r"   r.   rU   adaptation_raterV   r/   s           r0   get_module9_summaryr   a  s     H&r*55h?epe~e~  BC  fC;>>AZAZZ]``  IJ30;0I0IA0MS_(66!,!D!D*/*C/2;3^3^/_
 G,, Hgc!fX4FGGHs)   CBB$ #C$	C-CCCz/healthc                  V   K   ddt        j                         j                         dS w)Nhealthymodule_reports)statusr.   	timestamp)r   now	isoformat     r0   health_checkr   s  s#     ,<8<<>KcKcKeffs   '))Cfastapir   r   r   r   fastapi.responsesr   r   sqlalchemy.ormr	   typingr
   jsonr   app.database.main.mysqlr   app.dependency.authanticationr   r   r.   r   r   r   r   r   r   schemasr   r   r   r   r   r   r   r   r   module_reports_routergetintr1   r@   rW   rZ   r\   rd   rg   ri   rp   rs   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r0   <module>r      s	   < < = "    * L X  X _  _  _!  8I^_>Efoip  rB  jC H3 HG HVf H `H 9:?Fvjq  sC  kD 	HC 	HW 	HWg 	H ;	H 89;B6?fmn~f H H HSc H :H" 8I^_>Efoip  rB  jC H3 HG HVf H `H 9:?Fvjq  sC  kD 	HC 	HW 	HWg 	H ;	H 89;B6?fmn~f H H HSc H :H" 8I^_>Efoip  rB  jC H3 HG HVf H `H 9:?Fvjq  sC  kD 	HC 	HW 	HWg 	H ;	H 89;B6?fmn~f H H HSc H :H" 8I^_>Efoip  rB  jC H3 HG HVf H `H 9:?Fvjq  sC  kD 	HC 	HW 	HWg 	H ;	H 89;B6?fmn~f H H HSc H :H  8I^_>Efoip  rB  jC H3 HG HVf H `H 9:?Fvjq  sC  kD 	HC 	HW 	HWg 	H ;	H 89;B6?fmn~f H H HSc H :H  8IZ[>Efoip  rB  jC H3 HG HVf H \H 9:?Fvjq  sC  kD 	HC 	HW 	HWg 	H ;	H 89;B6?fmn~f H H HSc H :H  8I^_>Efoip  rB  jC H3 HG HVf H `H 9:?Fvjq  sC  kD 	HC 	HW 	HWg 	H ;	H 89;B6?fmn~f H H HSc H :H  8I^_>Efoip  rB  jC H3 HG HVf H `H 9:?Fvjq  sC  kD 	HC 	HW 	HWg 	H ;	H 89;B6?fmn~f H H HSc H :H  8I^_>Efoip  rB  jC H3 HG HVf H `H 9:?Fvjq  sC  kD 	HC 	HW 	HWg 	H ;	H 89;B6?fmn~f H H HSc H :H" 9%g &gr   