+
    `Øj\‡  ã                   óF  € R t ^ RIt^ RIt^ RIHtHtHt ^ RIHt ^ RIt^ RI	H
t
HtHtHtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHtHt ^ R
IHtHtHt ^ RIHtH t H!t!H"t"H#t#H$t$H%t%H&t& ^ RI'H(t( ^ RI)H*t* ^ RI+H,t, R R lt-R R lt.R R lt/R R lt0R R lt1R R lt2R# )uÿ  
Production Report â€” data aggregation + Excel generation.

Queries all chassis with confirmed orders, joins across order details,
special features, chassis inwarding data, and manual entries to produce
the full production report â€” both as JSON (for the web viewer) and as
a styled .xlsx download.

The special-features section is **dynamic**: columns are determined at
query time by the current set of active SpecialFeatureMaster rows, so
additions/removals in Production Masters are reflected immediately.
N)ÚdateÚdatetimeÚtimezone)ÚOptional)ÚFontÚPatternFillÚ	AlignmentÚBorderÚSide)Úget_column_letter)Úselect)ÚAsyncSession)Úaliased)ÚChassisMasterÚVehicleModelMaster)ÚCustomerMasterÚClientMasterÚTransportMaster)ÚDealerOrderÚDealerOrderVehicleÚDealerOrderVehicleChassisÚDealerOrderVehicleFeatureÚBodyTypeMasterÚCustomerSegmentMasterÚSpecialFeatureMasterÚSpecialFeatureOptionMaster)ÚStationMaster)ÚChassisLocationMaster)ÚProductionReportManualEntryc                óF   € V ^8„  d   QhR\         \        ,          R\        /# )é   ÚvalÚreturn)r   ÚstrÚbool)Úformats   "ÚL/var/www/html/audi_dev/backend/app/modules/yard/production_report_service.pyÚ__annotate__r'   .   s"   € ÷ eñ e¤8¬C¥=ð e´Tñ eó    c                ó¦  € V '       g   R# V P                  4       P                  4       P                  RR4      P                  RR4      pRP                  VP                  RR4      P	                  4       4      pRP                  V P                  4       P                  4       P	                  4       4      p0 RmpW$9   ;'       g    W49   ;'       g    W9   # )zWReturn True if value represents 'None', 'Not Required', 'N/A', etc. (case-insensitive).TÚ_Ú Ú-Ú.Ú >
   r,   ÚnaÚnoÚnilÚnoneõ   â€”ú--ún/aúnot requiredúnot applicable)ÚstripÚlowerÚreplaceÚjoinÚsplit)r!   ÚcleanedÚcleaned_no_dotÚcleaned_origÚexcluded_sets   &    r&   Úis_excluded_feature_valuerA   .   s¦   € çÙØ�i‰i‹k×ÑÓ!×)Ñ)¨#¨sÓ3×;Ñ;¸CÀÓE€GØ—X‘X˜gŸo™o¨c°2Ó6×<Ñ<Ó>Ó?€NØ—8‘8˜CŸI™I›K×-Ñ-Ó/×5Ñ5Ó7Ó8€Lò€Lð Ñ)×dÐd¨\Ñ-I×dÐdÈWÑMdÐdr(   c                óF   € V ^8„  d   QhR\         R\        \        ,          /# ©r    Údbr"   )r   ÚlistÚdict)r%   s   "r&   r'   r'   D   s   € ÷ )ñ )¬,ð )¼4Ä½:ñ )r(   c              ƒ  ó:  "  € V P                  \        \        4      P                  \        P                  R8H  4      P                  \        P                  4      4      G Rj  x€L
 P                  4       P                  4       pV P                  \        \        4      P                  \        P                  R8H  4      P                  \        P                  4      4      G Rj  x€L
 P                  4       P                  4       p/ pV F|  pVP                  ;'       g    RP                  4       p\        V4      '       d   K:  VP                  VP                  . 4      P                  R\!        VP"                  4      RV/4       K~  	  . pV F†  pVP%                  VP                  . 4      pVP&                  R8X  d   V'       g   K:  VP                  R\!        VP                  4      RVP(                  R	VP*                  R
VP&                  RV/4       Kˆ  	  V#  EL´ EL85i)zÑ
Return the dynamic column structure for special features.
Each feature becomes a group; DROPDOWN features expand into sub-columns.
Options representing 'None' or 'Not Required' are excluded from the columns.
TNr.   Ú	option_idÚoption_valueÚDROPDOWNÚ
feature_idÚfeature_nameÚsectionÚ
input_typeÚoptions)Úexecuter   r   ÚwhereÚ	is_activeÚorder_byÚsequence_noÚscalarsÚallr   rI   r8   rA   Ú
setdefaultrK   Úappendr#   rH   ÚgetrN   rL   rM   )	rD   ÚfeaturesrO   Úopts_by_featureÚoÚopt_valÚresultÚfÚfeature_optss	   &        r&   Úget_special_feature_columnsra   D   s¬  é € ð —j‘jÜÔ#Ó$ß	‰Ô#×-Ñ-°Ñ5Ó	6ß	‰Ô&×2Ñ2Ó	3ó÷ ÷ �wƒy—‘“ð	 ð —Z‘ZÜÔ)Ó*ß	‰Ô)×3Ñ3°tÑ;Ó	<ß	‰Ô,×8Ñ8Ó	9ó÷ ÷ �wƒy—‘“ð	 ð .0€OÛˆØ—>‘>×'Ð' R×.Ñ.Ó0ˆÜ$ W×-Ò-ÙØ×"Ñ" 1§<¡<°Ó4×;Ñ;Øœ˜QŸ[™[Ó)Ø˜Gð=
ö 	ñ	 ð €FÛˆØ&×*Ñ*¨1¯<©<¸Ó<ˆà�<‰<˜:Ô%¯lÙØ�‰Øœ#˜aŸl™lÓ+Ø˜AŸN™NØ�q—y‘yØ˜!Ÿ,™,Ø�|ð
ö 	ñ ð €MòGòùs3   ‚AHÁ!HÁ"A>HÃ HÃ!9HÄB%HÇAHÈHc                ó0   € V ^8„  d   QhR\         R\        /# rC   )r   rF   )r%   s   "r&   r'   r'   t   s   € ÷ Tñ T¬ð T¼$ñ Tr(   c              ƒ  óˆ&  "  € \         P                  ! 4       p\        V 4      G Rj  x€L
 p\        \        4      p\        \        P                  \        P                  \        P                  \        P                  \        P                  \        P                  \        P                  \        P                  \        P                  \        P                   \        P"                  \        P$                  \        P&                  \        P(                  \*        P,                  \.        P0                  P3                  R4      \4        P6                  P3                  R4      VP8                  P3                  R4      \        P:                  \<        P>                  \<        P@                  \<        PB                  \<        PD                  \<        PF                  \<        PH                  \<        PJ                  4      PM                  \*        \        PN                  \*        PN                  8H  4      PM                  \.        \        P&                  \.        PP                  8H  4      PM                  \4        \        P(                  \4        PR                  8H  4      PM                  V\        P"                  VP"                  8H  4      PM                  \<        \<        P                  \        P                  8H  4      PU                  \        P                  R8H  4      PW                  \        P                  PY                  4       P[                  4       \        P\                  PY                  4       4      pV P_                  V4      G Rj  x€L
 Pa                  4       pV Uu. uF0  qfP                  '       g   K  VP                  Pc                  4       NK2  	  pp/ pV'       d«   \        \d        P                  \d        Pf                  4      PU                  \d        P                  Pi                  V4      4      p	V P_                  V	4      G Rj  x€L
 Pa                  4        F+  w  r«V
'       g   K  V'       g   K  W¸V
Pc                  4       &   K-  	  \k        4       pV Fo  pVP$                  ;'       g>    VP                  '       d*   VPm                  VP                  Pc                  4       4      MRpV'       g   K^  VPo                  V4       Kq  	  \q        V4      p/ pV'       Edù   \        \r        Pf                  \r        PN                  \r        Pt                  \r        Pv                  \r        Px                  \z        P|                  \z        P~                  \€        P8                  P3                  R4      \‚        P8                  P3                  R4      \*        P,                  P3                  R4      \„        P8                  P3                  R	4      \†        P8                  P3                  R
4      4      P‰                  \z        \r        Px                  \z        Px                  8H  4      PM                  \€        \r        Pt                  \€        Pt                  8H  4      PM                  \‚        \r        Pv                  \‚        Pv                  8H  4      PM                  \*        \r        PN                  \*        PN                  8H  4      PM                  \„        \z        P|                  \„        PŠ                  8H  4      PM                  \†        \z        P~                  \†        P~                  8H  4      PU                  \r        Pf                  Pi                  V4      4      pV P_                  V4      G Rj  x€L
 Pa                  4        Ff  pRVPŒ                  RVPŽ                  RVP�                  R	VP’                  R
VP”                  RVP|                  RVP~                  /VVPf                  &   Kh  	  / pV'       EdÓ   \        \–        Pf                  \–        P˜                  \–        Pš                  \–        Pœ                  \–        Pž                  \         P¢                  \         P¤                  \¦        P¨                  4      P‰                  \         \–        P˜                  \         P˜                  8H  4      PM                  \¦        \–        Pš                  \¦        Pª                  8H  4      PU                  \–        Pf                  Pi                  V4      4      pV P_                  V4      G Rj  x€L
 Pa                  4        F“  pVP­                  VPf                  / 4      pRVP¢                  RVP¤                  RVPš                  '       d   \¯        VPš                  4      MRRVP¨                  RVPœ                  RVPž                  /VVP˜                  &   K•  	  . p\±        V^R7       EFñ  w  ppVP                  '       d   VP                  Pc                  4       MRpVP$                  ;'       g    VPm                  V4      pV'       d   VPm                  V/ 4      M/ pV'       d   VPm                  V/ 4      M/ pVPm                  R4      ;'       g    VP,                  ;'       g    RpVPm                  RR4      pVPm                  RR4      pRpRpRpRpRp VP³                  4        EFž  w  p!p"V"R,          Pµ                  4       p#V"Pm                  R4      ;'       g    Rp$V"Pm                  R4      ;'       g    Rp%RV#9   d:   V$'       d   V$Pµ                  4       R`9  d   RpMV"Pm                  R4      '       d   RpRV#9   d@   RV#9   g   RV#9   g   V#R8X  d+   V$'       d   V$Pµ                  4       Ra9  d   T$pM
V%'       d   T%pRV#9   g   RV#9   d    V$'       d   V$Pµ                  4       Ra9  d   T$pRV#9   d   RV#9   d   V$'       d   T$pM
V%'       d   T%pRV#9   g   R V#9   g   EK;  V"Pm                  R4      '       d   R!p EKW  V$'       d   V$Pµ                  4       Rb9  d   T$p EKy  V%'       g   EK„  V%Pµ                  4       Rb9  g   EKœ  T%p EK¡  	  Rp&V'       dA   R"VPµ                  4       9   d   R#p&M(R$VPµ                  4       9   d   R%p&MVP·                  4       p&V'       d   VP·                  4       MRp'V'       d   VP·                  4       MRp(TTT&V''       d   V' R&2MRV('       d   V( R'2MR3 U)u. uF  p)V)'       g   K  V)NK  	  p*p)R(P‰                  V*4      p+Rp,VP                  '       d5   VP                  R)8X  d   R*p,M VP                  R+8X  d   R,p,MVP                  p,Rp-VP                  '       d   WP                  ,
          P¸                  p-Rp.VP                  '       dG   \»        VP                  \¼        4      '       d   VP                  P                  4       MVP                  p.Rp/V.'       d   VV.,
          P¸                  p/Rp0VP¾                  '       d   VP¾                  p0MBVP                  '       d1   R-R.R/R/R0R1R2R3/p1V1Pm                  VP                  VP                  4      p0VP                  ;'       g    Rp2/ p3V EFæ  p4\À        PÂ                  ! V4R4,          4      p!VPm                  V!4      p5V4R,          R58X  d5   R6\Å        T5;'       d    V5Pm                  R4      4      R7R/V3V4R4,          &   Kt  V4R,          R88X  dÚ   V5'       d   V5Pm                  R4      MRp6V5'       d*   V5Pm                  R4      ;'       g    RPc                  4       MRp7\Ç        V74      p8/ p9V4R9,           F(  p:V:R,          V68H  ;'       d    V8'       * V9V:R,          &   K*  	  R6V6RJ;'       d    V8'       * R7V8'       d   RMV5'       d   V5Pm                  R4      MRR:V9/V3V4R4,          &   EK[  V4R,          R;8X  g   EKl  V5'       d*   V5Pm                  R4      ;'       g    RPc                  4       MRp;\Ç        V;4      p8R6\Å        T;;'       d    V8'       * 4      R7V8'       d   RMT;;'       g    R/V3V4R4,          &   EKé  	  / R<VbR=\¯        VP                  4      bR>VP                  ;'       g    RbR?V+bRVbR@V,bRAVbRBV bRCVbRDVbREV'bRFVbR	VPm                  R	R4      bRGVPm                  R
R4      bRHVP>                  ;'       g    RbRIVP                  ;'       g    RbRJVP                  '       d   \¯        VP                  4      MRb/ RKV-bRLV0bRMVP:                  ;'       g    RbRNVP@                  ;'       g    RbROVPB                  ;'       g    RbRPVPD                  ;'       g    RbRQVPF                  ;'       g    RbRRVPH                  ;'       g    RbRSV2bRTV.'       d   \¯        V.4      MRbRUV/bRVVP                   '       d$   \¯        VP                   P                  4       4      MRbRVPÈ                  ;'       g    RbRWRbRXVP                  ;'       g!    VP6                  '       d   VP6                  MRbRYVPJ                  ;'       g    RbRZRbCR[V3/CpVPË                  V4       EKô  	  R\VR]VR^\¼        PÌ                  ! \Î        PÐ                  4      PÓ                  4       R_\Õ        V4      /#  EL EL¸u upi  ELÿ EL° E
Lu up)i 5i)czk
Build the full production report payload.
Returns { columns: [...], feature_columns: [...], rows: [...] }
NÚcurrent_station_nameÚlocation_nameÚreceiving_transporterÚHANDED_TO_PRODUCTIONÚbody_type_nameÚsegment_nameÚov_model_numberÚdealer_nameÚclient_nameÚmodel_numberÚ	dealer_idÚ	client_idrL   rN   rH   rI   Ú
bool_valueÚ
text_value©Ústartr.   ÚacÚACÚdoorÚ	operationÚtypeÚseatingz	seat typeÚseatÚsupplierÚfapsÚfireÚYesÚsinglezSINGLE DOORÚdoublezDOUBLE DOORz BUSz SEATr+   ÚSQUARE_LIGHTzSQUARE LIGHTÚROUND_LIGHTzROUND LIGHTÚ
CHASSIS_INÚYARDÚWIPÚREADY_FOR_DISPATCHÚRFDÚ
DISPATCHEDÚDISPrK   ÚBOOLEANÚselectedÚvaluerJ   rO   Úoption_ticksÚTEXTÚsr_noÚ
chassis_idÚ
chassis_noÚdescriptionÚ	tail_lampÚseat_supplierÚfaps_requiredÚ	body_typeÚseating_layoutÚschool_staffÚmodelÚcustomer_nameÚ
contractorÚchassis_da_lite_statusÚchassis_receive_dateÚchassis_ageÚstatusÚprocurement_statusÚac_makeÚinterior_workÚdriver_requestÚdocument_pendingÚseat_fitting_pendingÚda_lite_status_fviÚinduction_dateÚbody_ageÚdispatch_dateÚdispatch_transporterÚyard_chassis_locationÚremarkÚpdi_inspector_nameÚfeature_ticksÚfeature_columnsÚrowsÚgenerated_atÚtotal_count)r6   r2   znon-acr0   )r6   r2   )r6   r2   r0   )kr   Útodayra   r   r   r   r   r�   r‘   Ú
light_typeÚda_lite_statusÚarrival_dateÚtracking_statusÚcurrent_statusÚyard_locationÚhanded_to_production_atÚdispatched_atÚtransport_idÚdealer_order_vehicle_idÚcurrent_station_idÚcurrent_location_idr   rm   r   Ústation_nameÚlabelr   re   Únamer    r   Úcontractor_groupr¡   r¢   r£   r¤   r¥   r¬   Ú	outerjoinÚmodel_idÚ
station_idÚlocation_idrQ   rS   ÚdescÚ	nullslastÚ
created_atrP   rV   r8   r   Úorder_vehicle_idÚin_ÚsetrY   ÚaddrE   r   Úbody_type_idÚ
segment_idÚorder_idr   rn   ro   r   r   r   r   r;   Úcustomer_idrh   ri   rj   rk   rl   r   rK   Úfeature_option_idrp   rq   r   rL   rN   r   rI   rH   rW   r#   Ú	enumerateÚitemsr9   ÚupperÚdaysÚ
isinstancer   rd   ÚuuidÚUUIDr$   rA   rf   rX   Únowr   ÚutcÚ	isoformatÚlen)<rD   r³   r¯   ÚReceivingTransportÚstmtÚchassis_rowsÚrÚchassis_nosÚchassis_to_ov_mapÚ	dovc_stmtÚc_noÚov_idÚ
ov_ids_setÚov_idsÚorder_vehicle_mapÚov_stmtÚrowÚfeatures_mapÚ	feat_stmtÚov_featsr°   ÚidxÚ
c_no_cleanÚov_dataÚov_featuresÚ	model_numri   rh   Úac_valueÚ
door_valuer—   r”   r•   ÚfidÚfdataÚfname_lowerr]   Útxt_valÚ
door_shortÚsegment_shortÚlayout_shortÚpÚdescription_partsr’   r“   rž   r§   r¨   rŸ   Ú
status_mapÚfvi_da_lite_statusr®   ÚfcÚ	feat_dataÚselected_option_idÚselected_option_valÚis_excludedr�   ÚoptÚraw_txts<   &                                                           r&   Úget_production_report_datar	  t   s  é € ô
 �JŠJ‹L€Eô 8¸Ó;×;€Oô !¤Ó1Ðô 	Ü×$Ñ$Ü×$Ñ$Ü×$Ñ$Ü×(Ñ(Ü×&Ñ&Ü×)Ñ)Ü×(Ñ(Ü×'Ñ'Ü×1Ñ1Ü×'Ñ'Ü×&Ñ&Ü×1Ñ1Ü×,Ñ,Ü×-Ñ-Ü×+Ñ+Ü×&Ñ&×,Ñ,Ð-CÓDÜ!×/Ñ/×5Ñ5°oÓFØ×#Ñ#×)Ñ)Ð*AÓBÜ×,Ñ,ä'×8Ñ8Ü'×/Ñ/Ü'×5Ñ5Ü'×6Ñ6Ü'×8Ñ8Ü'×<Ñ<Ü'×.Ñ.ó7	
÷: 
‰Ô%¤}×'=Ñ'=ÔAS×A\ÑA\Ñ'\Ó	]ß	‰”=¤-×"BÑ"BÄm×F^ÑF^Ñ"^Ó	_ß	‰Ô(¬-×*KÑ*KÔOd×OpÑOpÑ*pÓ	qß	‰Ð%¤}×'AÑ'AÐEW×EdÑEdÑ'dÓ	eß	‰Ô.Ô0K×0VÑ0VÔZg×ZrÑZrÑ0rÓ	sß	‰Ü×(Ñ(Ð,BÑBó

÷ 
‰”-×,Ñ,×1Ñ1Ó3×=Ñ=Ó?Ä×AYÑAY×A^ÑA^ÓA`Ó	aðM 	ðP Ÿ*™* TÓ*×*×/Ñ/Ó1€Lñ 2>ÓN±¨AÇÅÔ'�1—<‘<×%Ñ%Ö'±€KÐNØ.0ÐßäÔ,×7Ñ7Ô9R×9cÑ9cÓdß‰UÔ,×7Ñ7×;Ñ;¸KÓHÓIð 	ð #%§*¡*¨YÓ"7×7×<Ñ<Ö>‰KˆDß‰tŸ™Ø27 $§*¡*£,Ó/ñ ?ô
 “€JÛˆØ×)Ñ)×tÐtÐ]^×]i×]iÐ]iÐ.?×.CÑ.CÀAÇLÁL×DVÑDVÓDXÔ.YÐosˆß‰5Ø�N‰N˜5Ö!ñ ô �*Ó€Fð 02Ðß€väÜ"×3Ñ3Ü"×+Ñ+Ü"×/Ñ/Ü"×-Ñ-Ü"×+Ñ+Ü×%Ñ%Ü×%Ñ%Ü×#Ñ#×)Ñ)Ð*:Ó;Ü%×*Ñ*×0Ñ0°Ó@Ü"×/Ñ/×5Ñ5Ð6GÓHÜ×#Ñ#×)Ñ)¨-Ó8Ü×!Ñ!×'Ñ'¨Ó6ó÷ ‰T”+Ô1×:Ñ:¼k×>RÑ>RÑRÓSß‰Y”~Ô'9×'FÑ'FÌ.×JeÑJeÑ'eÓfß‰YÔ,Ô.@×.KÑ.KÔOd×OoÑOoÑ.oÓpß‰YÔ)Ô+=×+FÑ+FÔJ\×JeÑJeÑ+eÓfß‰Y”~¤{×'<Ñ'<Ä×@ZÑ@ZÑ'ZÓ[ß‰Y”|¤[×%:Ñ%:¼l×>TÑ>TÑ%TÓUß‰UÔ%×6Ñ6×:Ñ:¸6ÓBÓCð+ 	ð. Ÿ*™* WÓ-×-×2Ñ2Ö4ˆCà  #×"4Ñ"4Ø × 0Ñ 0Ø × 3Ñ 3Ø˜sŸ™Ø˜sŸ™Ø˜SŸ]™]Ø˜SŸ]™]ð7Ð˜c×2Ñ2Ó3ñ 5ð <>€Lß€väÜ)×:Ñ:Ü)×4Ñ4Ü)×;Ñ;Ü)×4Ñ4Ü)×4Ñ4Ü$×1Ñ1Ü$×/Ñ/Ü*×7Ñ7ó	÷ ‰TÔ&Ô(A×(LÑ(LÔPd×PoÑPoÑ(oÓpß‰YÔ1Ô3L×3^Ñ3^Ôb|÷  cGñ  cGñ  4Gó  Hß‰UÔ,×=Ñ=×AÑAÀ&ÓIÓJð 	ð Ÿ*™* YÓ/×/×4Ñ4Ö6ˆCØ#×.Ñ.¨s×/CÑ/CÀRÓHˆHà × 0Ñ 0Ø˜cŸn™nØ¸3×;P×;PÐ;PœS ×!6Ñ!6Ô7ÐVZØ × 0Ñ 0Ø˜cŸn™nØ˜cŸn™nð(ˆH�S—^‘^Ó$ñ 7ð €DÜ˜L°×2Ð2‰ˆˆQØ-.¯\¯\¨\�Q—\‘\×'Ñ'Ô)¸rˆ
Ø×)Ñ)×NÐNÐ->×-BÑ-BÀ:Ó-Nˆß6;Ð#×'Ñ'¨¨rÔ2Àˆß5:�l×&Ñ& u¨bÔ1Àˆð —K‘K Ó/×GÐG°1·>±>×GÐGÀRˆ	Ø—{‘{ >°2Ó6ˆØ Ÿ™Ð%5°rÓ:ˆð ˆØˆ
ØˆØˆØˆà%×+Ñ+×-‰JˆC�Ø Õ/×5Ñ5Ó7ˆKØ—i‘i Ó/×5Ð5°2ˆGØ—i‘i Ó-×3Ð3°ˆGð �{Ô"ß˜wŸ}™}›Ð6^Ô^Ø#‘HØ—Y‘Y˜|×,Ò,Ø#�Hð ˜Ô$¨+¸Ô*DÈÐR]ÔH]ÐalÐpvÔavß˜wŸ}™}›Ð6NÔNØ!(‘JßØ!(�Jð ˜KÔ'¨;¸+Ô+Eß˜wŸ}™}›Ð6NÔNØ%,�Nð ˜Ô$¨°{Ô)BßØ$+‘MßØ$+�Mð ˜Ô$¨°+×(=Ø—9‘9˜\×*Ò*Ø$)“Mß §¡£Ð8VÔ!VØ$+“Mß’W §¡£Ð8V×!VØ$+“MñM .ðR ˆ
ßØ˜:×+Ñ+Ó-Ô-Ø*‘
Ø˜Z×-Ñ-Ó/Ô/Ø*‘
à'×-Ñ-Ó/�
ç0<˜×*Ñ*Ô,À"ˆß1?�~×+Ñ+Ô-ÀRˆð ØØß&3ˆ}ˆo˜TÑ"¸ß&2ˆ|ˆn˜EÑ"¸ñ)
ó ñ )
 1ô ÷ ˜Qñ )
Ðð ð —h‘hÐ0Ó1ˆð ˆ	Ø�<�<ˆ<Ø�|‰|˜~Ô-Ø*‘	Ø—‘ Ô.Ø)‘	àŸL™L�	ð ˆØ�>�>ˆ>Ø §>¡>Õ1×7Ñ7ˆKð ˆØ×$×$Ð$ÜAKÈA×LeÑLeÔgo×ApÒAp˜Q×6Ñ6×;Ñ;Ô=Ðvw÷  wPñ  wPˆNð ˆßØ Õ.×4Ñ4ˆHð ˆØ×!×!Ð!Ø×+Ñ+‰FØ××Ðà˜fØ�uØ$ eØ˜fð	ˆJð  —^‘^ A×$5Ñ$5°q×7HÑ7HÓIˆFð ×-Ñ-×3Ð3°Ðð ˆÜ!ˆBÜ—)’)˜B˜|Õ,Ó-ˆCØ#Ÿ™¨Ó,ˆIØ�,Õ 9Ô,à¤ Y×%NÐ%N°9·=±=ÀÓ3NÓ OØ˜Tð3�˜b Õ.Ó/ð �LÕ! ZÔ/ßCL Y§]¡]°;Ô%?ÐRVÐ"ßW` y§}¡}°^Ó'D×'JÐ'JÈ×&QÑ&QÔ&SÐfhÐ#Ü7Ð8KÓL�Ø!�Ø˜iŸ=˜=�Cà˜KÕ(Ð,>Ñ>×RÐRÀ{Ä?ð !  [Õ!1Ó2ñ )ð
 Ð!3¸4Ð!?×!SÐ!SÈÄOØ§[™T×Xa°y·}±}À^Ô7TÐgkØ" Lð3�˜b Õ.Ô/ð
 �LÕ! V×+ßIR˜9Ÿ=™=¨Ó6×<Ð<¸"×CÑCÔEÐXZ�Ü7¸Ó@�à¤ W×%@Ð%@°[´Ó AØ§[™T°w·°À$ð3�˜b Õ.Ô/ñ3 "ð<$
Ø�Sð$
àœ#˜aŸl™lÓ+ð$
ð ˜!Ÿ,™,×,Ð,¨"ð$
ð ˜;ð	$
ð
 �(ð$
ð ˜ð$
ð ˜]ð$
ð ˜]ð$
ð ˜ð$
ð ˜nð$
ð ˜Mð$
ð �Yð$
ð ˜7Ÿ;™; }°bÓ9ð$
ð ˜WŸ[™[¨¸Ó;ð$
ð ˜!×,Ñ,×2Ð2°ð$
ð  % a×&6Ñ&6×&<Ð&<¸"ð!$
ð" #¸1¿>¿>¸>¤C¨¯©Ô$7Èrñ#$
ð$ ˜;ð%$
ð& �fð'$
ð( ! !×"6Ñ"6×"<Ð"<¸"ð)$
ð* �q—y‘y—� Bð+$
ð, ˜QŸ_™_×2Ð2°ð-$
ð. ˜a×.Ñ.×4Ð4°"ð/$
ð0  × 2Ñ 2× 8Ð 8°bð1$
ð2 # A×$:Ñ$:×$@Ð$@¸bð3$
ð4 !Ð"4ð5$
ð6 ·^œc .Ô1Èð7$
ð8 ˜ð9$
ð: ¸A¿O¿O¸OœS §¡×!5Ñ!5Ó!7Ô8ÐQSð;$
ð< $ Q×%<Ñ%<×%BÐ%BÀð=$
ð> # Bð?$
ð@ $ Q§_¡_×%dÐ%dÈAÏOÏOÈO¸¿ºÐacðA$
ðB �a—h‘h—n�n "ðC$
ðD ! "ñE$
ðF ˜]ñG$
ˆðJ 	�‰�C×ñ} 3ðB 	˜?Ø�ØœŸš¤X§\¡\Ó2×<Ñ<Ó>Ø”s˜4“yð	ð òO
 <òZ +ùò Oò 8òL .ò: 0ùòhùs�  ‚$AM¦AL)§MAMÍ4AL,Í5AMÎAL/Î#AL/ÏA4AMÐ5AL4Ð6AMÑAMÑ!7AMÒAMÒ,0AMÓ!J&AMÞAL7ÞBAMàD(AMä7AL:ä8C?AMè8AMéAMé.+AMêAMê.A6AMì%AMí AMí.AMî%AMî'AMïAMï,AMð
AMðAMð*AMñAMñAMñ3AMòAMòAAMó$AMó>AMôAMô)
AMô3
AL=õAL=õA.AMö7/AM÷'AAMø7&AMùAMù=AAMû AAMü:AMýAMý,AMþ>AMÿ!AMÿ%AMÿ5	AMÿ?.AMÁ@3AMÁ@;AMÁA,AMÁB AMÁB
AMÁBA AMÁC AAMÁD8AMÁEAMÁE%1AMÁFAMÁF.AMÁGAMÁGAMÁG3AMÁH
AMÁH"AMÁH<8AMÁI5AMÁJAMÁJ"!AMÁKA&AMÁL,AMÁL/AMÁL7AMÁL:AMÁL=AMc                ó\   € V ^8„  d   QhR\         R\        P                  R\        R\        /# )r    rD   r�   Údatar"   )r   rÙ   rÚ   rF   )r%   s   "r&   r'   r'   Ï  s4   € ÷ +ñ +Üð+ä—	‘	ð+ô ð+ô 
ñ	+r(   c              ƒ  ó¦  "  € V P                  \        \        4      P                  \        P                  V8H  4      4      G Rj  x€L
 P                  4       p0 RmpV'       db   VP                  4        F  w  rVWT9   g   K  \        W5V4       K  	  V P                  4       G Rj  x€L
  V P                  V4      G Rj  x€L
  TpM�VP                  4        UUu/ uF  w  rVWT9   g   K  WVbK  	  ppp\        RR	\        P                  ! 4       R
V/VB pV P                  V4       V P                  4       G Rj  x€L
  V P                  V4      G Rj  x€L
  R
\        VP                  4      RVP                  RVP                  RVP                   RVP"                  RVP$                  RVP&                  RVP(                  /#  ELz EL ELu uppi  L— L€5i)z3Create or update manual-entry fields for a chassis.NrÃ   r¡   r¢   r£   r¤   r¥   r¬   Úidr�   >   r¬   r¡   r¢   r£   rÃ   r¤   r¥   © )rP   r   r   rQ   r�   Úscalar_one_or_nonerÕ   ÚsetattrÚcommitÚrefreshrÙ   Úuuid4rÎ   r#   rÃ   r¡   r¢   r£   r¤   r¥   r¬   )	rD   r�   r  ÚexistingÚallowed_fieldsÚkÚvÚentryÚfiltereds	   &&&      r&   Úupsert_manual_entryr  Ï  sš  é € ð —j‘jÜÔ*Ó+ß	‰Ô*×5Ñ5¸ÑCÓ	Dó÷ ÷ ÑÓð ò
€N÷
 Ø—J‘J–L‰DˆAØÖ"Ü˜ QÖ'ñ !ð �i‰i‹k×ÐØ�j‰j˜Ó"×"Ð"Ø‰à%)§Z¡Z¤\ÔI¡\™T˜Q°QÑ5H”D�A’D¡\ˆÑIÜ+ñ 
Ü�zŠz‹|ð
à!ð
ð ñ
ˆð
 	�‰ˆuŒØ�i‰i‹k×ÐØ�j‰j˜Ó×Ðð 	”c˜%×*Ñ*Ó+Ø˜E×2Ñ2Ø�5—=‘=Ø˜×,Ñ,Ø˜%×.Ñ.Ø˜E×2Ñ2Ø × :Ñ :Ø�%—,‘,ð	ð 	ò9ò 	Ú"ùó Jñ 	Ùùst   ‚AGÁF>Á6GÂ #GÂ#GÂ$GÂ<GÂ=GÃ
GÃ&GÃ,A	GÄ5GÄ6GÅGÅA0GÇGÇGÇGÇGc                óD   € V ^8„  d   QhR\         R\        P                  /# )r    Úreport_datar"   )rF   ÚioÚBytesIO)r%   s   "r&   r'   r'     s"   € ÷ Cñ C´4ð C¼B¿J¹Jñ Cr(   c                ó’  € \         P                  ! 4       pVP                  pRVn        RVP                  P
                  ^ ,          n        V R,          pV R,          p\        R^
RRR7      p\        R^	RRR7      p\        R^	R7      p\        R^RR	R7      p\        \        R
RR7      \        R
RR7      \        R
RR7      \        R
RR7      R7      p	\        RRRR7      p
\        RRRR7      p\        RRRR7      p\        RRRR7      p\        RRRR7      p\        RRRR7      p\        RRRR7      p\        RRRR7      p\        RRRR7      p\        RRRR7      p\        RRRR7      p. pVP                  RRRV
RV
RRRRRR R!R"^/RR#RR$R R!R"^R%R/./4       VP                  RR&RVRVRRR'RR(R R)R"^#/RR*RR+R R!R"^/RR,RR-R R!R"^/./4       V EF  p. pVR.,          R/8X  d|   VP                  R04      '       de   VR0,           FV  pVP                  R1VR1,          R2VR2,          RVR3,          R R!R"\        ^\        VR3,          4      ^,           4      R4R/4       KX  	  MWVR.,          R58X  d&   VP                  R1VR1,          R2R6RR7R R!R"^
R4R/4       M$VP                  R1VR1,          R2R6RR8R R!R"^R4R/4       V'       g   Kð  VP                  RVR9,          P                  4       RVRVRV/4       EK!  	  VP                  RR:RVRVRRR;RR<R R!R"^/RR=RR>R R!R"^/RR?RR@R R!R"^/RRARRBR R!R"^/RRCRRDR R!R"^/RRERRFR R!R"^/./4       VP                  RRGRVRVRRRHRRIR R)R"^/RRJRRKR R)R"^/./4       VP                  RRLRVRVRRRMRRNR R!R"^/RRORRPR R!R"^/RRQRRRR R!R"^/RRSRRTR R)R"^/RRURRVR R)R"^/RRWRRXR R)R"^/./4       VP                  RRYRVRVRRRZRR[R R!R"^/RR\RR]R R!R"^/RR^RR_R R!R"^/RR`RRaR R!R"^/RRbRRcR R!R"^/RRdRReR R!R"^/RRfRRgR R!R"^/RRhRRiR R!R"^/RRjRRkR R!R"^/RRlRRmR R)R"^/.
/4       VP                  RRnRVRVRRRoRRpR R)R"^/RRqRRrR R!R"^/./4       . p^pV EFu  pTp\        VR,          4      pVV,           ^,
          pVP!                  ^VVR,          Rs7       V^8”  d   VP#                  ^V^VRt7       \%        VV^,           4       FE  pVP!                  ^VRu7      p VV n        VR,          V n        \+        R!R!RRv7      V n        V	V n        KG  	  \1        VR,          4       F›  w  p!p"VV!,           p#VP!                  ^V#V"R,          Rs7      p$VV$n        VR,          V$n        \+        R!R!RRv7      V$n        V	V$n        V"P                  R"^4      VP2                  \5        V#4      ,          n        VP                  V"4       K�  	  V^,           pEKx  	  V^,
          p%^VP8                  ^,          n        ^VP8                  ^,          n        \1        V^Rw7       EF´  w  p&p'^VP8                  V&,          n        V&^,          ^8X  d   TMTp(\1        V^Rw7       EFq  w  pp"VP!                  V&VRu7      p)V(V)n        V	V)n        V"P                  R44      '       dÙ   V"R1,          p*V"P                  R24      p+V'P                  Rx/ 4      P                  V*/ 4      p,Ryp-V+e-   V,P                  Rz/ 4      p.V.P                  V+4      '       d   R{p-M>V,P                  R|4      '       d(   V,P                  R}4      f   R{MV,P                  R}R{4      p-V-V)n        V-R{8X  d   TMTV)n        \+        R!R!R~7      V)n        EK  V'P                  V"R,          Ry4      p/V/e   \?        V/4      MRyV)n        VV)n        V"P                  R R)4      p0\+        V0R!R~7      V)n        EKt  	  EK·  	  RVn         R€\5        V%4       \        V4      ^,            2VPB                  n"        \F        PH                  ! 4       p1VPK                  V14       V1PM                  ^ 4       V1# )�z�
Generate a styled Excel workbook with 2-tier grouped merged headers
matching the web dashboard layout and displaying every sub-option clearly.
zProduction ReportTr¯   r°   zSegoe UIÚFFFFFF)rÂ   ÚsizeÚboldÚcolor)rÂ   r!  Ú1E8449ÚthinÚCBD5E1)Ústyler#  )ÚleftÚrightÚtopÚbottomÚ0F172AÚsolid)Ústart_colorÚ	end_colorÚ	fill_typeÚ1E293BÚ312E81Ú3730A3Ú172554Ú134E4AÚF8FAFCÚtitleÚIDENTIFICATIONÚ
super_fillÚsub_fillÚcolsÚkeyr�   Ú	sub_titlezSr No.ÚalignÚcenterÚwidthr‘   zChassis No.r"  z
CORE SPECSr’   ÚDescriptionr(  rt   ru   r“   z	Tail LamprN   rJ   rO   rK   rH   rI   Ú
is_featurerŠ   Nu	   âœ“ / âœ—ÚValuerL   zSEATING & BODY CONFIGURATIONr”   zSeat Supplierr•   z	FAPS Req.r–   z	Body Typer—   ÚLayoutr˜   ÚSegmentr™   ÚModelÚ
COMMERCIALrk   zDealer Namerš   zCustomer NamezLINE & SHOP FLOOR (EDITABLE)r›   Ú
Contractorr¡   zAC Maker¢   zInterior Workr£   zDriver Requestr¤   zDoc Pendingr¥   zSeat FittingzTRACKING, AGEING & LOGISTICSrœ   zDA-Lite (Yard)r�   z	Rec. Daterž   zChassis AgerŸ   ÚStatusr¦   zDA-Lite (FVI)r§   zInduction Dater¨   zBody Ager©   zDispatch Daterf   zRec. TPTr«   zYard LocationzNOTES & PDIr¬   ÚRemarkr­   zPDI Inspector)rì   ÚcolumnrŒ   )Ú	start_rowÚstart_columnÚend_rowÚ
end_column)rì   rK  )Ú
horizontalÚverticalÚ	wrap_textrr   r®   r.   r�   u   âœ“r‹   rŒ   )rP  rQ  ÚC3zA2:)'ÚopenpyxlÚWorkbookÚactiver7  ÚviewsÚ	sheetViewÚshowGridLinesr   r	   r
   r   rX   rY   ÚmaxrÞ   rÖ   ÚcellÚmerge_cellsÚrangeÚfontÚfillr   Ú	alignmentÚborderrÔ   Úcolumn_dimensionsr   r@  Úrow_dimensionsÚheightrŒ   r#   Úfreeze_panesÚauto_filterÚrefr  r  ÚsaveÚseek)2r  ÚwbÚwsr¯   r°   Ú
super_fontÚsub_fontÚ	data_fontÚ	tick_fontÚthin_borderÚfill_idÚ	fill_coreÚfill_features_superÚfill_features_subÚ	fill_seatÚ	fill_commÚ	fill_lineÚ
fill_trackÚ
fill_notesÚ	even_fillÚodd_fillÚgroupsr  Úsub_colsr  Ú	flat_colsÚcurrent_colÚgÚ	start_colÚnum_colsÚend_colÚc_idxÚcÚc_offsetÚcol_specÚcol_numÚcell_subÚ
total_colsÚr_idxrâ   Úrow_fillr[  r÷   ÚoidÚftr!   Ú	opt_ticksÚraw_valÚalign_hÚbufs2   &                                                 r&   Ú!_generate_production_report_excelr“    s
  € ô
 
×	Ò	Ó	€BØ	�‰€BØ"€B„HØ*.€B‡H�H×Ñ�qÕÔ'à!Ð"3Õ4€OØ�vÕ€Dô ˜:¨B°TÀÔJ€JÜ˜¨!°$¸hÔG€HÜ˜*¨1Ô-€IÜ˜*¨2°DÀÔI€IäÜ˜ hÔ/Ü˜ xÔ0Ü�v XÔ.Ü˜&¨Ô1ô	€Kô  h¸(ÈgÔV€GÜ¨¸HÐPWÔX€IÜ%°(ÀhÐZaÔbÐÜ#°ÀHÐX_Ô`ÐÜ¨¸HÐPWÔX€IÜ¨¸HÐPWÔX€IÜ¨¸HÐPWÔX€IÜ¨¸XÐQXÔY€JÜ¨¸XÐQXÔY€Jä¨¸HÐPWÔX€IÜ x¸8ÈwÔW€Hð €Fð ‡M�MØÐ!Ø�gØ�GØØ�G˜[¨(°G¸XÀwÐPQÐRØ�L +¨}¸gÀxÐQXÐZ\Ð^dÐfjÐkð
ð	ô ð ‡M�MØ�Ø�iØ�IØØ�M ;°¸wÈÐPWÐY[Ð\Ø�D˜+ t¨W°hÀÈÐKØ�K ¨k¸7ÀHÈgÐWYÐZð
ð		ô 	ô ˆØˆØˆlÕ˜zÔ)¨b¯f©f°Y×.?Ò.?Ø˜)—}�}�Ø—‘Ø  " \Õ"2Ø  [Õ!1Ø  ^Õ!4Ø˜XØœS ¤S¨¨^Õ)<Ó%=ÀÕ%AÓBØ  $ð!ö ò %ð �Õ Ô*Ø�O‰OØ˜b Õ.Ø˜TØ˜[Ø˜Ø˜Ø˜dðõ ð �O‰OØ˜b Õ.Ø˜TØ˜WØ˜Ø˜Ø˜dðô ÷ ‰8Ø�M‰MØ˜˜NÕ+×1Ñ1Ó3ØÐ1ØÐ-Ø˜ð	÷ ñA ðP ‡M�MØÐ/Ø�iØ�IØØ�O [°/À7ÈHÐV]Ð_aÐbØ�O [°+¸wÈÐRYÐ[]Ð^Ø�K ¨k¸7ÀHÈgÐWYÐZØÐ$ k°8¸WÀhÐPWÐY[Ð\Ø�N K°¸GÀXÈwÐXZÐ[Ø�G˜[¨'°7¸HÀgÈrÐRð
ð	ô ð ‡M�MØ�Ø�iØ�IØØ�M ;°¸wÈÐPWÐY[Ð\Ø�O [°/À7ÈFÐT[Ð]_Ð`ð
ð	ô ð ‡M�MØÐ/Ø�iØ�IØØ�L +¨|¸WÀhÐPWÐY[Ð\Ø�I˜{¨I°wÀÈ'ÐSUÐVØ�O [°/À7ÈHÐV]Ð_aÐbØÐ$ kÐ3CÀWÈfÐV]Ð_aÐbØÐ&¨°]ÀGÈVÐU\Ð^`ÐaØÐ*¨K¸ÈÐRXÐZaÐceÐfð
ð	ô ð ‡M�MØÐ/Ø�jØ�JØØÐ,¨kÐ;KÈWÐV^Ð`gÐikÐlØÐ*¨K¸ÀgÈxÐY`ÐbdÐeØ�M ;°¸wÈÐRYÐ[]Ð^Ø�H˜k¨8°W¸hÈÐQSÐTØÐ(¨+°ÈÐQYÐ[bÐdfÐgØÐ$ kÐ3CÀWÈhÐX_ÐacÐdØ�J ¨Z¸À(ÈGÐUWÐXØ�O [°/À7ÈHÐV]Ð_aÐbØÐ+¨[¸*ÀgÈxÐY`ÐbdÐeØÐ+¨[¸/È7ÐTZÐ\cÐegÐhð
ð	ô ð& ‡M�MØ�Ø�jØ�JØØ�H˜k¨8°W¸fÀgÈrÐRØÐ(¨+°ÈÐQYÐ[bÐdfÐgð
ð	ô ð €IØ€KäˆØˆ	Ü�q˜•y“>ˆØ˜hÕ&¨Õ*ˆð 	�‰�A˜i¨q°­zˆÔ:Ø�aŒ<Ø�N‰N Q°YÈÐV]ˆNÔ^ä˜9 g°¥kÖ2ˆEØ—‘˜A e�Ó,ˆAØˆAŒFØ�|•_ˆAŒFÜ#¨xÀ(ÐVZÔ[ˆAŒKØ"ˆAŽHñ 3ô #,¨A¨f­IÖ"6ÑˆH�hØ (Õ*ˆGØ—w‘w 1¨W¸HÀ[Õ<Q�wÓRˆHØ$ˆHŒMØ˜j�MˆHŒMÜ!*°hÈÐ]aÔ!bˆHÔØ)ˆHŒOð FNÇ\Á\ÐRYÐ[]ÓE^ˆB× Ñ Ô!2°7Ó!;Õ<ÔBØ×Ñ˜XÖ&ñ #7ð  •k‹ñ= ð@ ˜q•€JØ"$€B×Ñ�aÕÔØ"$€B×Ñ�aÕÔô ˜d¨!×,Ð,‰ˆˆqØ*,ˆ×Ñ˜%Õ Ô'Ø$ q�y¨Aœ~‘8°9ˆä(¨¸!×<Ð<‰OˆE�8Ø—7‘7˜u¨U�7Ó3ˆDØ ˆDŒIØ%ˆDŒKà�|‰|˜L×)Ò)Ø˜|Õ,�Ø—l‘l ;Ó/�Ø—U‘U˜?¨BÓ/×3Ñ3°C¸Ó<�à�Ø’?Ø "§¡ ~°rÓ :�IØ —}‘} S×)Ò)Ø#˜øà—v‘v˜j×)Ò)Ø')§v¡v¨g£Ò'>™eÀBÇFÁFÈ7ÐTYÓDZ˜à �”
Ø),°¬™I¸9�”	Ü!*°hÈÔ!R�—àŸ%™% ¨¥°Ó4�Ø-4Ò-@œS œ\Àb�”
Ø%�”	Ø"Ÿ,™, w°Ó7�Ü!*°gÈÔ!Q�—ô7  =ñ	 -ðD €B„Oð Ô0°Ó<Ð=¼cÀ$»iÈ!½m¸_ÐM€B‡N�NÔä
�*Š*‹,€CØ‡G�GˆC„LØ‡H�HˆQ„KØ€Jr(   c                óD   € V ^8„  d   QhR\         R\        P                  /# rC   )r   r  r  )r%   s   "r&   r'   r'     s   € ÷ :ñ :¬|ð :ÄÇ
Á
ñ :r(   c              ƒ  óJ   "  € \        V 4      G Rj  x€L
 p\        V4      #  L5i)z'Fetch data and generate the Excel file.N)r	  r“  )rD   r  s   & r&   Ú generate_production_report_excelr–    s"   é € ä2°2Ó6×6€KÜ,¨[Ó9Ð9ñ 7ùs   ‚#‘!’#)3Ú__doc__r  rÙ   r   r   r   Útypingr   rT  Úopenpyxl.stylesr   r   r   r	   r
   Úopenpyxl.utilsr   Ú
sqlalchemyr   Úsqlalchemy.ext.asyncior   Úsqlalchemy.ormr   Úapp.models.yard_modelsr   r   Úapp.models.sales_modelsr   r   r   Úapp.models.dealer_modelsr   r   r   r   r   r   r   r   Úapp.models.rm_modelsr   Úapp.models.location_modelsr   Ú#app.models.production_report_modelsr   rA   ra   r	  r  r“  r–  r  r(   r&   Ú<module>r¤     s~   ðñó 
Û ß -Ñ -Ý ã ß FÕ FÝ ,å Ý /Ý "÷÷ñ ÷÷ ó õ
 /Ý <Ý Kõeõ,)õ`Tõv
+õdC÷L:r(   