+
    `Øj.t  ã                   ó  € ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHtHt ^ RI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IHt ^ R	IHtHtHt ^ R
I H!t! ^RI"H#t#H$t$ ^RI"H%t% ^RI"H&t& ]! 4       t']'PQ                  R]#PR                  R7      ]! ]4      ]! ]! RR.R4      4      3R R ll4       t*]'PQ                  R]+]#PX                  ,          R7      ]! RRR7      ]! ]4      ]! ]! RR4      4      3R R ll4       t-]'P]                  R]#P^                  ^ÉR7      ]! ]4      ]! ]! RR4      4      3R R ll4       t0]'PQ                  R]#Pb                  R7      ]! ]4      ]! ]! RR.R4      4      3R R  ll4       t2]'Pg                  R!]#P^                  R7      ]! ]4      ]! ]! RR"4      4      3R# R$ ll4       t4]'Pg                  R%]#P^                  R7      ]! ]4      ]! ]! RR"4      4      3R& R' ll4       t5]'Pm                  R(]#P^                  R7      ]! ]4      ]! ]! RR"4      4      3R) R* ll4       t7]'Pg                  R+4      ]! ]4      ]! ]! RR"4      4      3R, R- ll4       t8]'P]                  R.]#Pr                  ^ÉR7      ]! ]4      ]! ]! RR"4      4      3R/ R0 ll4       t:]'Pg                  R1]#Pr                  R7      ]! ]4      ]! ]! RR"4      4      3R2 R3 ll4       t;]'Pm                  R14      ]! ]4      ]! ]! RR"4      4      3R4 R5 ll4       t<]'P]                  R6]#Pz                  ^ÉR7      ]! ]4      ]! ]! RR"4      4      3R7 R8 ll4       t>]'P]                  R9]#P~                  ^ÉR7      ]! ]4      ]! ]! RR"4      4      3R: R; ll4       t@]'Pg                  R<]#P‚                  R7      ]! ]4      ]! ]! RR"4      4      3R= R> ll4       tB]'P]                  R?4      ]! ]4      ]! ]! RR.R4      4      3R@ RA ll4       tC]'PQ                  RB4      ]! ]4      ]! ]! RR.R4      4      3RC RD ll4       tD]'PQ                  RE4      ]! ]4      ]! ]! RR.R4      4      3RF RG ll4       tE]'P]                  RH]#P^                  R7      ]! ]4      ]! ]! RRI4      4      3RJ RK ll4       tF]'PQ                  RL4      ]! RMRNRO7      ]! ]4      ]! ]! RR4      4      3RP RQ ll4       tG^ RIHtH^ RRIIHJtJHKtKHLtLHMtMHNtN ^ RSIOHPtP RT RU ltQRV RW ltRRX RY ltS]'PQ                  RZ4      ]! RMRNRO7      ]! ]4      ]! ]! RR4      4      3R[ R\ ll4       tT]'PQ                  R]4      ]! RMRNRO7      ]! ]4      ]! ]! RR4      4      3R^ R_ ll4       tU]'PQ                  R`4      ]! RM4      ]! RM4      ]! RaRbRc7      ]! ]4      ]! ]! RR4      4      3Rd Re ll4       tV]'PQ                  Rf4      ]! RM4      ]! RM4      ]! RaRbRc7      ]! ]4      ]! ]! RR4      4      3Rg Rh ll4       tW]'PQ                  Ri4      ]! R4      ]! R4      ]! ]4      ]! ]! RR4      4      3Rj Rk ll4       tX]'PQ                  Rl4      ]! R4      ]! R4      ]! ]4      ]! ]! RR4      4      3Rm Rn ll4       tY]'PQ                  Ro]#P´                  R7      ]! ]4      3Rp Rq ll4       t[]'P]                  Rr]#P´                  R7      ]! ]4      ]! ]! RR"4      4      3Rs Rt ll4       t\]'P]                  Ru]#Pº                  R7      ]! ]4      ]! ]4      3Rv Rw ll4       t^]'PQ                  Rx]	]#P¾                  ,          R7      ]! ]4      ]! ]4      3Ry Rz ll4       t`]'PQ                  R{]	]#PÂ                  ,          R7      ]! ]4      ]! ]4      3R| R} ll4       tb]'PQ                  R~4      ]! ]4      ]! ]! RR4      4      3R€ R� ll4       tc]'P]                  R‚]#PÈ                  ^ÉR7      ]! RM4      ]! R4      ]! R4      ]! R4      ]! R4      ]! R4      ]! ]4      ]! ]! RR"4      4      3Rƒ R„ ll4       te]'PÍ                  R…]#PÈ                  R7      ]! ]4      ]! ]! RR"4      4      3R† R‡ ll4       tg]'Pm                  Rˆ4      ]! ]4      ]! ]! RR"4      4      3R‰ RŠ ll4       th]'P]                  R‹]#PÒ                  ^ÉR7      ]! ]4      ]! ]! RR4      4      3RŒ R� ll4       tj]'PÍ                  RŽ]#PÒ                  R7      ]! ]4      ]! ]! RR"4      4      3R� R� ll4       tk]'PQ                  R‘]+]#PØ                  ,          R7      ]! ]4      ]! ]! RR4      4      3R’ R“ ll4       tm]'P]                  R‘]#PØ                  ^ÉR7      ]! ]4      ]! ]! RR4      4      3R” R• ll4       tn]'Pg                  R–]#PØ                  R7      ]! ]4      ]! ]! RR"4      4      3R— R˜ ll4       to]'PQ                  R™]+]#Pà                  ,          R7      ]! ]4      ]! ]! RR4      4      3Rš R› ll4       tq]'P]                  R™]#Pà                  ^ÉR7      ]! ]4      ]! ]! RR4      4      3Rœ R� ll4       tr]'Pg                  Rž]#Pà                  R7      ]! ]4      ]! ]! RR"4      4      3RŸ R  ll4       ts]'Pm                  Rž4      ]! ]4      ]! ]! RR¡4      4      3R¢ R£ ll4       tt]'PQ                  R¤]+]#Pê                  ,          R7      ]! ]4      ]! ]! RR4      4      3R¥ R¦ ll4       tv]'P]                  R§]#Pê                  ^ÉR7      ]! ]4      ]! ]! RR4      4      3R¨ R© ll4       tw]'PQ                  Rª4      ]! ]4      ]! ]! RR4      4      3R« R¬ ll4       tx]'PQ                  R­4      ]! ]4      ]! ]! RR4      4      3R® R¯ ll4       ty^ R°IzH{t{ ^ R±IH
t
  ! R² R³]{4      t|]'Pg                  R´4      ]! ]4      ]! ]! RR"4      4      3Rµ R¶ ll4       t}R# )·é    N)ÚdateÚdatetime)ÚListÚOptional)Ú	APIRouterÚDependsÚQueryÚRequestÚ
UploadFileÚFileÚFormÚHTTPException)ÚStreamingResponse)ÚClientDisconnect©ÚAsyncSession)Úget_db)Úrequire_permissionÚrequire_permission_anyÚget_current_user)Ú
LoginUsers)ÚschemasÚservice)Úproduction_dashboard)Úproduction_report_servicez/masters)Úresponse_modelÚYARDÚ	INVENTORYÚviewc                ó$   € V ^8„  d   QhR\         /# ©é   Údbr   )Úformats   "Ú9/var/www/html/audi_dev/backend/app/modules/yard/routes.pyÚ__annotate__r&      s   € ÷ )ñ )Üñ)ó    c              ƒ   óJ   "  € \         P                  ! V 4      G R j  x€L
 #  L5i©N)r   Úget_masters©r#   Ú_s   &&r%   r*   r*      s   é € ô
 ×$Ò$ RÓ(×(Ð(Ñ(ùó   ‚#œ!�#z/chassisz8YARD_PENDING_CHECK / YARD_CHECKED / HANDED_TO_PRODUCTION)Údescriptionc                ó>   € V ^8„  d   QhR\         R,          R\        /# )r"   ÚstatusNr#   ©Ústrr   )r$   s   "r%   r&   r&   !   s    € ÷ 2ñ 2Ü�$�Jð2äñ2r'   c              ƒ   óJ   "  € \         P                  ! W4      G R j  x€L
 #  L5ir)   )r   Úlist_chassis)r0   r#   r,   s   &&&r%   r4   r4       s   é € ô ×%Ò% bÓ1×1Ð1Ñ1ùr-   )r   Ústatus_codeÚcreatec                óP   € V ^8„  d   QhR\         P                  R\        R\        /# ©r"   Úpayloadr#   Úuser)r   ÚChassisCreater   r   )r$   s   "r%   r&   r&   *   s1   € ÷ Cñ CÜ×"Ñ"ðCäðCô ñCr'   c              ƒ   ó`   "  € \         P                  ! WVP                  4      G R j  x€L
 #  L5ir)   )r   Úcreate_chassisÚuser_id©r9   r#   r:   s   &&&r%   r=   r=   )   s$   é € ô ×'Ò'¨°T·\±\ÓB×BÐBÑBùó   ‚%.§,¨.z/chassis/{chassis_id}c                óD   € V ^8„  d   QhR\         P                  R\        /# )r"   Ú
chassis_idr#   ©ÚuuidÚUUIDr   )r$   s   "r%   r&   r&   3   s    € ÷ <ñ <Ü—	‘	ð<äñ<r'   c              ƒ   óJ   "  € \         P                  ! W4      G R j  x€L
 #  L5ir)   )r   Úget_chassis_detail)rB   r#   r,   s   &&&r%   rG   rG   2   s   é € ô ×+Ò+¨BÓ;×;Ð;Ñ;ùr-   z/chassis/{chassis_id}/arrivalÚeditc                óp   € V ^8„  d   QhR\         P                  R\        P                  R\        R\
        /# ©r"   rB   r9   r#   r:   )rD   rE   r   ÚUpdateArrivalRequestr   r   )r$   s   "r%   r&   r&   <   s@   € ÷ Añ AÜ—	‘	ðAä×)Ñ)ðAô 	ðAô ñ	Ar'   c              ƒ   óL   "  € \         P                  ! W V4      G R j  x€L
 #  L5ir)   )r   Úupdate_arrival©rB   r9   r#   r:   s   &&&&r%   rM   rM   ;   s    é € ô ×'Ò'¨¸Ó@×@Ð@Ñ@ùó   ‚$�"ž$z/chassis/{chassis_id}/da-litec                ó\   € V ^8„  d   QhR\         P                  R\        R\        R\        /# )r"   rB   Úrequestr#   r:   )rD   rE   r
   r   r   )r$   s   "r%   r&   r&   F   s:   € ÷ $rñ $rÜ—	‘	ð$räð$rô 	ð$rô ñ	$rr'   c              ƒ   ó„  "  € VP                   P                  R R4      pRpRpRpRV9   EdV    VP                  4       G Rj  x€L
 pTP                  R4      pTP                  R4      pTP                  R	4      p	T	'       Ed    \        T	R
4      '       dî   T	P                  '       dÜ   \        P                  P                  T	P                  4      ^,          ;'       g    Rp
RT  R\        \        P                  ! 4       4       T
 2p\        P                  ! RRR7       \        P                  P                  RT4      p\        TR4      ;_uu_ 4       p\        P                   ! T	P"                  T4       RRR4       RT 2pML VP%                  4       G Rj  x€L
 pVP                  R4      pVP                  R4      pVP                  R4      p\(        P*                  ! W WgVP,                  V4      G Rj  x€L
 #  EL¸  \         d    \	        RRR7      hi ; i  + '       g   i     L¬; i L”  \&         d     Lli ; i LI5i)zcontent-typeÚ Nzmultipart/form-dataió  zUpload cancelled by client©r5   ÚdetailÚda_lite_statusÚda_lite_remarksÚfileÚfilenamez.jpgÚdalite_r,   zuploads/da_liteT)Úexist_okÚwbz/uploads/da_lite/Úda_lite_photo_url)ÚheadersÚgetÚformr   r   ÚhasattrrY   ÚosÚpathÚsplitextÚintÚtimeÚmakedirsÚjoinÚopenÚshutilÚcopyfileobjrX   ÚjsonÚ	Exceptionr   Úupdate_da_liter>   )rB   rQ   r#   r:   Úcontent_typeÚ	photo_urlrV   rW   r`   Úfile_objÚextrY   Ú	file_pathÚbufferÚbodys   &&&&           r%   rn   rn   E   sä  é € ð —?‘?×&Ñ& ~°rÓ:€LØ€IØ€NØ€OØ Õ,ð	VØ Ÿ™›×'ˆDð Ÿ™Ð"2Ó3ˆØŸ(™(Ð#4Ó5ˆØ—8‘8˜FÓ#ˆßˆ8œ ¨*×5Ò5¸(×:K×:KÐ:KÜ—'‘'×"Ñ" 8×#4Ñ#4Ó5°aÕ8×BÐB¸FˆCØ   ¨A¬c´$·)²)³+Ó.>Ð-?À¸uÐEˆHÜ�KŠKÐ)°DÕ9ÜŸ™Ÿ™Ð%6¸ÓAˆIÜ�i ×&Ô&¨&Ü×"Ò" 8§=¡=°&Ô9÷ 'à+¨H¨:Ð6ˆIøð	Ø Ÿ™›×'ˆDØ!ŸX™XÐ&6Ó7ˆNØ"Ÿh™hÐ'8Ó9ˆOØŸ™Ð!4Ó5ˆIô ×'Ò'¨¸ÐY]×YeÑYeÐgpÓq×qÐqò1 (øÜô 	VÜ¨CÐ8TÔUÐUð	Vú÷ '×&úñ
 (øô ô 	Ùð	úñ rùs›   ‚+I ®G< ÁG9ÁG< Á;I Â#I Â&6I ÃA5I Å"HÅ4I ÆH- ÆH+Æ7H- Ç&I Ç4H>Ç5I Ç9G< Ç<HÈI ÈH(	È#I È+H- È-H;È8I È:H;È;I z#/chassis/{chassis_id}/da-lite/photoc                óP   € V ^8„  d   QhR\         P                  R\        R\        /# ©r"   rB   r#   r:   ©rD   rE   r   r   )r$   s   "r%   r&   r&   n   s/   € ÷ Lñ LÜ—	‘	ðLäðLô ñLr'   c              ƒ   ó`   "  € \         P                  ! WVP                  4      G R j  x€L
 #  L5ir)   )r   Údelete_da_lite_photor>   ©rB   r#   r:   s   &&&r%   rz   rz   m   s$   é € ô ×-Ò-¨b¸d¿l¹lÓK×KÐKÑKùr@   z"/chassis/{chassis_id}/qa-checklistc                ód   € V ^8„  d   QhR\         P                  R\        P                  R\        /# ©r"   rB   r9   r#   )rD   rE   r   ÚQaChecklistBulkUpdater   )r$   s   "r%   r&   r&   w   s0   € ÷ *ñ *Ü—	‘	ð*ä×*Ñ*ð*ô 	ñ*r'   c              ƒ   óh   "  € \         P                  ! W VP                  4      G R j  x€L
  RR/#  L5i)NÚmessagezChecklist saved)r   Úupsert_qa_checklistÚentries©rB   r9   r#   r,   s   &&&&r%   r�   r�   v   s3   é € ô ×
%Ò
% b°g·o±oÓ
F×FÐFØÐ(Ð)Ð)ñ Gùs   ‚%2§0¨	2z	/qa-itemsc                óD   € V ^8„  d   QhR\         P                  R\        /# ©r"   r9   r#   )r   ÚQaItemCreater   )r$   s   "r%   r&   r&   ‚   s"   € ÷ 5ñ 5Ü×!Ñ!ð5äñ5r'   c              ƒ   óJ   "  € \         P                  ! W4      G R j  x€L
 #  L5ir)   )r   Úcreate_qa_item©r9   r#   r,   s   &&&r%   rˆ   rˆ   �   ó   é € ô ×'Ò'¨Ó4×4Ð4Ñ4ùr-   z/qa-items/{item_id}c                ód   € V ^8„  d   QhR\         P                  R\        P                  R\        /# )r"   Úitem_idr9   r#   )rD   rE   r   ÚQaItemUpdater   )r$   s   "r%   r&   r&   ‹   s0   € ÷ >ñ >Ü�Y‰Yð>ä×!Ñ!ð>ô 	ñ>r'   c              ƒ   óL   "  € \         P                  ! W V4      G R j  x€L
 #  L5ir)   )r   Úupdate_qa_item)rŒ   r9   r#   r,   s   &&&&r%   r�   r�   Š   s    é € ô ×'Ò'¨°WÓ=×=Ð=Ñ=ùrO   c                óD   € V ^8„  d   QhR\         P                  R\        /# )r"   rŒ   r#   rC   )r$   s   "r%   r&   r&   •   s    € ÷ 5ñ 5Ü�Y‰Yð5äñ5r'   c              ƒ   óJ   "  € \         P                  ! W4      G R j  x€L
 #  L5ir)   )r   Údelete_qa_item)rŒ   r#   r,   s   &&&r%   r’   r’   ”   rŠ   r-   z/handover-partsc                óD   € V ^8„  d   QhR\         P                  R\        /# r…   )r   ÚHandoverPartCreater   )r$   s   "r%   r&   r&   ž   s"   € ÷ ;ñ ;Ü×'Ñ'ð;äñ;r'   c              ƒ   óJ   "  € \         P                  ! W4      G R j  x€L
 #  L5ir)   )r   Úcreate_handover_partr‰   s   &&&r%   r–   r–   �   s   é € ô ×-Ò-¨bÓ:×:Ð:Ñ:ùr-   z/chassis/{chassis_id}/movementc                ód   € V ^8„  d   QhR\         P                  R\        P                  R\        /# r}   )rD   rE   r   ÚMovementLogCreater   )r$   s   "r%   r&   r&   §   s5   € ÷ Cñ CÜ—	‘	ðCä×&Ñ&ðCô 	ñCr'   c              ƒ   óL   "  € \         P                  ! W V4      G R j  x€L
 #  L5ir)   )r   Úadd_movement_logrƒ   s   &&&&r%   rš   rš   ¦   s    é € ô ×)Ò)¨"¸'ÓB×BÐBÑBùrO   z$/chassis/{chassis_id}/store-handoverc                ód   € V ^8„  d   QhR\         P                  R\        P                  R\        /# r}   )rD   rE   r   ÚStoreHandoverUpdater   )r$   s   "r%   r&   r&   ±   s5   € ÷ Hñ HÜ—	‘	ðHä×(Ñ(ðHô 	ñHr'   c              ƒ   óL   "  € \         P                  ! W V4      G R j  x€L
 #  L5ir)   )r   Úupsert_store_handoverrƒ   s   &&&&r%   rž   rž   °   s    é € ô ×.Ò.¨r¸wÓG×GÐGÑGùrO   z3/chassis/{chassis_id}/store-handover/approve/{role}c                ó\   € V ^8„  d   QhR\         P                  R\        R\        R\        /# )r"   rB   Úroler#   r:   )rD   rE   r2   r   r   )r$   s   "r%   r&   r&   »   s:   € ÷ Tñ TÜ—	‘	ðTä
ðTô 	ðTô ñ	Tr'   c              ƒ   ó`   "  € \         P                  ! W WP                  4      G R j  x€L
 #  L5ir)   )r   Úapprove_store_handoverr>   )rB   r    r#   r:   s   &&&&r%   r¢   r¢   º   s$   é € ô ×/Ò/°ÀÇlÁlÓS×SÐSÑSùr@   z/pending-store-handoversc                ó0   € V ^8„  d   QhR\         R\        /# ©r"   r#   r:   ©r   r   )r$   s   "r%   r&   r&   Å   ó   € ÷ ?ñ ?Üð?ä
ñ?r'   c              ƒ   óJ   "  € \         P                  ! W4      G R j  x€L
 #  L5ir)   )r   Úget_pending_store_handovers©r#   r:   s   &&r%   Úpending_store_handoversrª   Ä   ó   é € ô
 ×4Ò4°RÓ>×>Ð>Ñ>ùr-   z/history-store-handoversc                ó0   € V ^8„  d   QhR\         R\        /# r¤   r¥   )r$   s   "r%   r&   r&   Ì   r¦   r'   c              ƒ   óJ   "  € \         P                  ! W4      G R j  x€L
 #  L5ir)   )r   Úget_history_store_handoversr©   s   &&r%   Úhistory_store_handoversr¯   Ë   r«   r-   z,/chassis/{chassis_id}/handover-to-productionÚapprovec                óP   € V ^8„  d   QhR\         P                  R\        R\        /# rw   rx   )r$   s   "r%   r&   r&   Ô   s/   € ÷ Nñ NÜ—	‘	ðNäðNô ñNr'   c              ƒ   ó`   "  € \         P                  ! WVP                  4      G R j  x€L
 #  L5ir)   )r   Úhandover_to_productionr>   r{   s   &&&r%   r³   r³   Ó   s$   é € ô ×/Ò/°ÀÇÁÓM×MÐMÑMùr@   z/reports/daily.r   )Úaliasc                ó0   € V ^8„  d   QhR\         R\        /# ©r"   Úreport_dater#   ©r   r   )r$   s   "r%   r&   r&   Ý   s   € ÷ 7ñ 7Üð7äñ7r'   c              ƒ   óJ   "  € \         P                  ! W4      G R j  x€L
 #  L5ir)   )r   Údaily_report)r·   r#   r,   s   &&&r%   rº   rº   Ü   s   é € ô ×%Ò% bÓ6×6Ð6Ñ6ùr-   )ÚFontÚPatternFillÚ	AlignmentÚBorderÚSide)Úget_column_letterc                óf   € V ^8„  d   QhR\         \        ,          R\        R\        P                  /# )r"   Úrowsr·   Úreturn)ÚlistÚdictr   ÚioÚBytesIO)r$   s   "r%   r&   r&   ê   s.   € ÷ Vñ V¤d¬4¥jð V¼tð VÌÏ
É
ñ Vr'   c           
      óf  € \         P                  ! 4       pVP                  ;'       g    VP                  4       pR Vn        RVP
                  P                  ^ ,          n        . R$OpV Uu. uF  qU^,          NK  	  ppVP                  V4       \        R^RRR7      p\        RR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
^VP                  ^,          n        V^,           F  pW{n        W‹n        W›n        W«n        K  	  \        RRR	R
7      p\        RRR	R
7      p\        R^
R7      p0 R%mp\)        V ^R7       EF9  w  pp^VP                  V,          n        V^,          ^8X  d   TMTp\)        V^R7       F÷  w  pw  ppVP+                  V4      pVR8X  d5   V'       d-   VR8X  d   RM!VR8X  d   RM\-        V4      P	                  4       pM^VR8X  dG   VeC   VP+                  R4      R8X  d   V R2M%VP+                  R4      R8X  d   V R2M
\-        V4      pMVe   \-        V4      MRpVP/                  VVVR7      pWën        VVn        W«n        VV9   d   RMRp\        VRR7      Vn        Kù  	  EK<  	  R Vn        \3        \5        V 4      ^,           ^4      p\7        \5        V4      4      pR!V V 2VP8                  n        VP<                   Fk  pV^ ,          P>                  pVe   \7        \A        V4      4      MR"p\3        R# V 4       4      p\3        V^,           ^4      VPB                  V,          n"        Km  	  \F        PH                  ! 4       pVPK                  V4       VPM                  ^ 4       V# u upi )&zDaily Receiving ReportTÚ	fuel_typeÚ
light_typeÚfuel_receivingúSegoe UIÚFFFFFF©ÚnameÚsizeÚboldÚcolorÚ1F4E79Úsolid©Ústart_colorÚ	end_colorÚ	fill_typeÚcenter©Ú
horizontalÚverticalÚ	wrap_textÚthinÚD9D9D9©ÚstylerÒ   ©ÚleftÚrightÚtopÚbottomÚF8FAFC©rÏ   rÐ   ©ÚstartÚSQUARE_LIGHTzSquare LightÚROUND_LIGHTzRound LightÚDIESELz LÚCNGz BARrS   ©ÚrowÚcolumnÚvaluerã   ©rÛ   rÜ   ÚA2úA1:ÚAc              3   ór   "  € T F-  p\        \        VP                  ;'       g    R 4      4      x € K/  	  R# 5i©rS   N©Úlenr2   rò   ©Ú.0Úcells   & r%   Ú	<genexpr>Ú.generate_daily_excel_report.<locals>.<genexpr>:  ó)   é € ÐA¹S°T”cœ#˜dŸj™j×.Ð.¨BÓ/×0Ð0»Sùó   ‚!7¤7))Ú
chassis_noz
Chassis No)Ú
model_namez
Model Name)Úyard_locationÚYard)rÉ   z	Fuel Type)rÊ   z
Light Type)rË   zFuel Receiving)Údealer_namezDealer Name)ÚremarksÚRemarks)Útransport_namezTransport Name)rV   zDA Lite Status)ÚvoltageÚVoltage>   r
  rÉ   r  rÊ   r  rV   rË   )'ÚopenpyxlÚWorkbookÚactiveÚcreate_sheetÚtitleÚviewsÚ	sheetViewÚshowGridLinesÚappendr»   r¼   r½   r¾   r¿   Úrow_dimensionsÚheightÚfontÚfillÚ	alignmentÚborderÚ	enumerater_   r2   rý   Úfreeze_panesÚmaxrú   rÀ   Úauto_filterÚrefÚcolumnsrñ   re   Úcolumn_dimensionsÚwidthrÆ   rÇ   ÚsaveÚseek)rÂ   r·   r\   ÚwsÚcolumns_specÚcolÚheader_titlesÚheader_fontÚheader_fillÚheader_alignmentÚthin_borderrý   Ú	even_fillÚodd_fillÚ	data_fontÚcenter_colsÚrow_idxÚrÚrow_fillÚcol_idxÚkeyr,   Úraw_valÚvalÚalign_hÚlast_rowÚlast_col_letterÚ
col_letterÚmax_lenÚbufs   &&                            r%   Úgenerate_daily_excel_reportr>  ê   so  € Ü	×	Ò	Ó	€BØ	�‰×	'Ð	'�b—o‘oÓ'€BØ'€B„HØ*.€B‡H�H×Ñ�qÕÔ'ò€Lñ (4Ó4¡| ˜—V�V¡|€MÐ4Ø‡I�IˆmÔô ˜J¨R°dÀ(ÔK€KÜ¨(¸hÐRYÔZ€KÜ ¨H¸xÐSWÔXÐÜÜ˜ hÔ/Ü˜ xÔ0Ü�v XÔ.Ü˜&¨Ô1ô	€Kð #%€B×Ñ�aÕÔà�1—�ˆØŒ	ØŒ	Ø)ŒØ!Žñ	 ô ¨¸HÐPWÔX€IÜ x¸8ÈwÔW€HÜ˜*¨2Ô.€IÚx€Kä ¨A×.Ð.‰
ˆ�Ø,.ˆ×Ñ˜'Õ"Ô)Ø&¨�{¨aÔ/‘8°YˆÜ!*¨<¸q×!AÑˆG‘X�c˜1Ø—e‘e˜C“jˆGØ�lÔ"§wØ(/°>Ô(A‘nÐX_ÐcpÔXpÁ}Ôvyð  {Bó  wC÷  wIñ  wIó  wK‘ØÐ(Ô(¨WÒ-@Ø()¯©¨kÓ(:¸hÔ(F˜˜	 ‘nÐ`a×`eÑ`eÐfqÓ`rÐv{Ô`{ÈwÈiÐW[ÑL\ô  BEð  FMó  BN‘à&-Ò&9”c˜'”l¸r�à—7‘7˜w¨w¸c�7ÓBˆDØ!ŒIØ ˆDŒIØ%ŒKØ"%¨Ô"4‘h¸&ˆGÜ&°'ÀHÔMˆDŽNô "Bñ /ð( €B„Oô ”3�t“9˜q•= !Ó$€HÜ'¬¨LÓ(9Ó:€OØ˜Ð/°¨zÐ:€B‡N�NÔð �zŒzˆØ�a•&—-‘-ˆØ8?Ò8KÔ&¤s¨7£|Ô4ÐQTˆ
ÜÑA¹SÓAÓAˆÜ14°W¸qµ[À"Ó1Eˆ×Ñ˜ZÕ(Ö.ñ	 ô �*Š*‹,€CØ‡G�GˆC„LØ‡H�HˆQ„KØ€JùòC 5s   Á+N.c                óT   € V ^8„  d   QhR\         \        ,          R,          R\        /# )r"   ÚdNrÃ   )r   r2   )r$   s   "r%   r&   r&   C  s#   € ÷ ñ œD¤3�J¨Õ-ð ´#ñ r'   c                 óN  € V '       g   R # \        V \        \        34      '       d   V P                  R4      #  V P	                  R4      ^ ,          P	                  R4      p\        V4      ^8X  d#   V^,           RV^,           RV^ ,          RR  2#  V #   \         d     T # i ; i)rS   z%d_%m_%yÚTÚ-r,   Néþÿÿÿ)Ú
isinstancer   r   ÚstrftimeÚsplitrú   rm   )r@  Úpartss   & r%   Úformat_date_dd_mm_yyrI  C  s£   € ßÙÜ�!”dœHÐ%×&Ò&Ø�z‰z˜*Ó%Ð%ðØ—‘˜“˜Q•×%Ñ% cÓ*ˆÜˆu‹:˜Œ?Ø˜A•h�Z˜q  q¥ 
¨!¨E°!­H°R°S¨M¨?Ð;Ð;ð ð €Høô ô ØØ€Hðús   ¹AB ÂB$Â#B$c          
      ó~   € V ^8„  d   QhR\         \        ,          R\        R\        R\        R\        P
                  /# )r"   rÂ   Úgroup_byrê   ÚendrÃ   )rÄ   rÅ   r2   r   rÆ   rÇ   )r$   s   "r%   r&   r&   Q  sB   € ÷ Gñ G¤t¬D¥zð G¼Sð GÌð GÔTXð GÔ]_×]gÑ]gñ Gr'   c           
      óº  € \         P                  ! 4       pVP                  ;'       g    VP                  4       pVP	                  4        R 2Vn        RVP                  P                  ^ ,          n        . ROpV Uu. uF  qw^,          NK  	  ppVP                  V4       \        R^RRR7      p	\        RR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^VP                  ^,          n        V^,           F  pW�n        W­n        W½n        WÍn        K  	  \        RRRR	7      p\        RRRR	7      p\        R^
R7      p\+        V ^R7       FÙ  w  pp^VP                  V,          n        V^,          ^8X  d   TMTp\+        V^R7       F˜  w  pw  ppVP-                  V4      pVR8X  d   V'       d   \/        V4      R,          pM"VR8X  d   Ve   V R2pMVe   \/        V4      MRpVP1                  VVVR7      pVVn        VVn        WÍn        \        R
R
R7      Vn        Kš  	  KÛ  	  RVn        \5        \7        V 4      ^,           ^4      pR\9        \7        V4      4       V 2VP:                  n        VP>                   Fk  pV^ ,          P@                  pVe   \9        \C        V4      4      MRp\5        R V 4       4      p\5        V^,           ^4      VPD                  V,          n#        Km  	  \H        PJ                  ! 4       pVPM                  V4       VPO                  ^ 4       V# u upi )z ReportTÚperiodÚstraight_pass_pctrÌ   rÍ   rÎ   rÓ   rÔ   rÕ   rÙ   rÚ   rÞ   rß   rà   râ   rç   rè   ré   :Né
   NÚ%rS   rï   ró   rô   rõ   rö   c              3   ór   "  € T F-  p\        \        VP                  ;'       g    R 4      4      x € K/  	  R# 5irø   rù   rû   s   & r%   rþ   Ú/generate_period_excel_report.<locals>.<genexpr>’  r   r  ))rN  ÚPeriod)Útotal_inwardedzTotal Inwarded)Ú
da_lite_okz
DA Lite OK)Úda_lite_holdzDA Lite Hold)Úhanded_to_productionzHanded to Production)rO  zStraight Pass %)Úrework_countzRework Count)(r  r  r  r  Ú
capitalizer  r  r  r  r  r»   r¼   r½   r¾   r¿   r  r  r  r  r  r  r  r_   r2   rý   r  r  rú   rÀ   r  r  r   rñ   re   r!  r"  rÆ   rÇ   r#  r$  )rÂ   rK  rê   rL  r\   r%  r&  r'  r(  r)  r*  r+  r,  rý   r-  r.  r/  r1  r2  r3  r4  r5  r,   r6  r7  r9  r;  r<  r=  s   &&&&                         r%   Úgenerate_period_excel_reportr[  Q  sî  € Ü	×	Ò	Ó	€BØ	�‰×	'Ð	'�b—o‘oÓ'€BØ×%Ñ%Ó'Ð(¨Ð0€B„HØ*.€B‡H�H×Ñ�qÕÔ'ò€Lñ (4Ó4¡| ˜—V�V¡|€MÐ4Ø‡I�IˆmÔä˜J¨R°dÀ(ÔK€KÜ¨(¸hÐRYÔZ€KÜ ¨H¸xÐSWÔXÐÜÜ˜ hÔ/Ü˜ xÔ0Ü�v XÔ.Ü˜&¨Ô1ô	€Kð #%€B×Ñ�aÕÔØ�1—�ˆØŒ	ØŒ	Ø)ŒØ!Žñ	 ô ¨¸HÐPWÔX€IÜ x¸8ÈwÔW€HÜ˜*¨2Ô.€Iä ¨A×.‰
ˆ�Ø,.ˆ×Ñ˜'Õ"Ô)Ø&¨�{¨aÔ/‘8°YˆÜ!*¨<¸q×!AÑˆG‘X�c˜1Ø—e‘e˜C“jˆGØ�hŒ§7Ü˜'“l 3Õ'‘ØÐ+Ô+°Ò0CØ ˜	 �m‘à&-Ò&9”c˜'”l¸r�à—7‘7˜w¨w¸c�7ÓBˆDØ!ˆDŒIØ ˆDŒIØ%ŒKÜ&°(ÀXÔNˆDŽNó "Bñ /ð$ €B„OÜ”3�t“9˜q•= !Ó$€HØÔ0´°\Ó1BÓCÐDÀXÀJÐO€B‡N�NÔà�zŒzˆØ�a•&—-‘-ˆØ8?Ò8KÔ&¤s¨7£|Ô4ÐQTˆ
ÜÑA¹SÓAÓAˆÜ14°W¸qµ[À"Ó1Eˆ×Ñ˜ZÕ(Ö.ñ	 ô �*Š*‹,€CØ‡G�GˆC„LØ‡H�HˆQ„KØ€Jùòo 5s   Á<Mz/reports/daily.xlsxc                ó0   € V ^8„  d   QhR\         R\        /# r¶   r¸   )r$   s   "r%   r&   r&   œ  ó   € ÷ ñ Üðäñr'   c              ƒ   ó¦   "  € \         P                  ! W4      G R j  x€L
 p\        W04      pR\        V 4       R2p\	        VRRRV R2/R7      #  L25i©NÚChassis_receiving_report_ú.xlsxúAapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetúContent-Dispositionúattachment; filename="Ú"©Ú
media_typer^   ©r   rº   r>  rI  r   ©r·   r#   r,   rÂ   r=  Úfns   &&&   r%   Údaily_report_xlsxrk  ›  óc   é € ô ×%Ò% bÓ6×6€DÜ
% dÓ
8€CØ$Ô%9¸+Ó%FÐ$GÀuÐ	M€BÜØØVØ&Ð*@ÀÀÀAÐ(FÐGôð ñ 7ùó   ‚AœA�3Az/reports/daily.csvc                ó0   € V ^8„  d   QhR\         R\        /# r¶   r¸   )r$   s   "r%   r&   r&   ¬  r]  r'   c              ƒ   ó¦   "  € \         P                  ! W4      G R j  x€L
 p\        W04      pR\        V 4       R2p\	        VRRRV R2/R7      #  L25ir_  rh  ri  s   &&&   r%   Údaily_report_csvrp  «  rl  rm  z/reports/periodÚdayz^(day|week|month)$)Úpatternc                óH   € V ^8„  d   QhR\         R\         R\        R\        /# ©r"   rê   rL  rK  r#   ©r   r2   r   )r$   s   "r%   r&   r&   ¼  s6   € ÷ Bñ BÜðBä	ðBô ðBô 	ñ	Br'   c              ƒ   óL   "  € \         P                  ! W0W4      G R j  x€L
 #  L5ir)   )r   Úperiod_summary)rê   rL  rK  r#   r,   s   &&&&&r%   rw  rw  »  s    é € ô ×'Ò'¨°3ÓA×AÐAÑAùrO   z/reports/period.xlsxc                óH   € V ^8„  d   QhR\         R\         R\        R\        /# rt  ru  )r$   s   "r%   r&   r&   Ç  s0   € ÷ ñ Üðä	ðô ðô 	ñ	r'   c              ƒ   óð   "  € \         P                  ! W0W4      G R j  x€L
 p\        WRW4      pVR8X  d   RM
VR8X  d   RMRpRV R\        V 4       R\        V4       R	2p\	        VR
RRV R2/R7      #  LV5i)NÚweekÚweeklyÚmonthÚmonthlyÚdailyÚChassis_Ú_report_Ú_to_ra  rb  rc  rd  re  rf  )r   rw  r[  rI  r   )	rê   rL  rK  r#   r,   rÂ   r=  Úlabelrj  s	   &&&&&    r%   Úperiod_summary_xlsxrƒ  Æ  s•   é € ô ×'Ò'¨°3ÓA×A€DÜ
& t°uÓ
B€CØ  FÔ*‰H¸XÈÔ=P±	ÐV]€EØ�E�7˜(Ô#7¸Ó#>Ð"?¸tÔDXÐY\ÓD]ÐC^Ð^cÐ	d€BÜØØVØ&Ð*@ÀÀÀAÐ(FÐGôð ñ	 Bùs   ‚A6�A4žAA6z/reports/podc                óX   € V ^8„  d   QhR\         R,          R\         R,          R\        /# ©r"   rê   NrL  r#   r¸   )r$   s   "r%   r&   r&   Ú  s.   € ÷ 4ñ 4Ü�$�;ð4ä	��ð4ô 	ñ4r'   c              ƒ   óL   "  € \         P                  ! W V4      G R j  x€L
 #  L5ir)   )r   Ú
pod_report)rê   rL  r#   r,   s   &&&&r%   r‡  r‡  Ù  s    é € ô ×#Ò# B¨sÓ3×3Ð3Ñ3ùrO   z/reports/pod.csvc                óX   € V ^8„  d   QhR\         R,          R\         R,          R\        /# r…  r¸   )r$   s   "r%   r&   r&   ä  s.   € ÷ +ñ +Ü�$�;ð+ä	��ð+ô 	ñ+r'   c              ƒ   ó–  "  € \         P                  ! W V4      G R j  x€L
 p\        P                  ! 4       p\        P
                  ! V4      pVP                  R.4       VP                  . RO4       VP                  R. 4       FR  pVP                  VR,          VR,          VR,           R2VR,           R2VR,          VR	,          VR
,          .4       KT  	  VP                  . 4       VP                  R.4       VP                  R. 4       EF<  pVP                  RVR,           2.4       VP                  . RO4       VP                  R. 4       FR  p	VP                  V	R,          V	R,          V	R,           R2V	R,           R2V	R,          V	R	,          V	R
,          .4       KT  	  VP                  R/ 4      p
VP                  RV
P                  R^ 4      V
P                  R^ 4       R2V
P                  R^ 4       R2V
P                  R^ 4      V
P                  R	^ 4      V
P                  R
^ 4      .4       VP                  . 4       EK?  	  VP                  ^ 4       R\        VP                  R4      4       R\        VP                  R4      4       R2p\        \        VP                  4       .4      RRRV R2/R7      #  EL©5i)Nz--- MONTHLY SUMMARY ---Úmonthly_summaryÚmonth_labelÚtotal_checked_cowlÚloss_pctrQ  rO  Ústopped_cowlÚrework_statusÚtotal_hold_pendingz#--- DEALER / LOCATION BREAKDOWN ---Údealer_breakdownzDEALER: r  rÂ   r   ÚsummaryÚTOTALÚChassis_pod_report_Ú
start_dater�  Úend_datez.csvztext/csvrc  rd  re  rf  )ÚMonthúTotal Checked CowlúTotal Loss %úTotal Straight Pass %úStopped CowlúRework StatusúTotal Hold Pending)ÚDater˜  r™  rš  r›  rœ  r�  )r   r‡  rÆ   ÚStringIOÚcsvÚwriterÚwriterowr_   r$  rI  r   ÚiterÚgetvalue)rê   rL  r#   r,   Údatart   r¡  Úmr@  r2  Úsummrj  s   &&&&        r%   Úpod_report_csvr¨  ã  s¸  é € ô ×#Ò# B¨sÓ3×3€DÜ�[Š[‹]€FÜ�ZŠZ˜Ó€Fð ‡O�OÐ.Ð/Ô0Ø
‡O�Oò  Tô  UØ�X‰XÐ'¨Ö,ˆØ�‰ØˆmÕ˜aÐ 4Õ5¸!¸J½-¸ÈÐ7JÈqÐQdÕOeÐNfÐfgÐLhØˆnÕ˜q Õ1°1Ð5IÕ3Jð
ö 	ñ -ð ‡O�O�BÔà
‡O�OÐ:Ð;Ô<Ø�X‰XÐ(¨"×-ˆØ�‰˜8 A mÕ$4Ð#5Ð6Ð7Ô8Ø�‰ò  Wô  	XØ—‘�v˜rÖ"ˆAØ�O‰OØ�&•	˜1Ð1Õ2°q¸µ}°oÀQÐ4GÈAÐNaÕLbÐKcÐcdÐIeØ�.Õ! 1 _Õ#5°qÐ9MÕ7Nðö ñ #ð
 �u‰u�Y Ó#ˆØ�‰Ø�T—X‘XÐ2°AÓ6¸4¿8¹8ÀJÐPQÓ;RÐ:SÐSTÐ8UÐZ^×ZbÑZbÐcvÐxyÓZzÐY{Ð{|ÐW}Ø�H‰H�^ QÓ'¨¯©°/À1Ó)EÀtÇxÁxÐPdÐfgÓGhð
ô 	ð 	�‰˜×ñ .ð ‡K�K�„NØÔ3°D·H±H¸\Ó4JÓKÐLÈDÔQeÐfj×fnÑfnÐoyÓfzÓQ{ÐP|ð  }Að  
B€BÜÜˆf�o‰oÓÐ Ó!ØØ&Ð*@ÀÀÀAÐ(FÐGôð òC 4ùs   ‚K	�KžJ)K	z/track/{chassis_no}c                ó0   € V ^8„  d   QhR\         R\        /# )r"   r  r#   r1   )r$   s   "r%   r&   r&     s   € ÷ ;ñ ;Üð;äñ;r'   c              ƒ  óJ   "  € \         P                  ! W4      G Rj  x€L
 #  L5i)z3Public tracking info for QR scan (no auth required)N)r   Úget_tracking_info)r  r#   s   &&r%   r«  r«    s   é € ô ×*Ò*¨2Ó:×:Ð:Ñ:ùr-   z/track/{chassis_no}/scanc                ó\   € V ^8„  d   QhR\         R\        P                  R\        R\        /# )r"   r  r9   r#   r:   )r2   r   ÚTrackingScanInputr   r   )r$   s   "r%   r&   r&     s<   € ÷ Wñ WÜðWä×&Ñ&ðWô 	ðWô ñ	Wr'   c              ƒ  ó`   "  € \         P                  ! W WP                  4      G Rj  x€L
 #  L5i)zWAuthenticated scan endpoint to update tracking status (CHASSIS_IN -> WIP -> DISPATCHED)N)r   Úupdate_tracking_statusr>   )r  r9   r#   r:   s   &&&&r%   r¯  r¯    s$   é € ô ×/Ò/°ÀÏÉÓV×VÐVÑVùr@   z/supervisor-scanc                óP   € V ^8„  d   QhR\         P                  R\        R\        /# r8   )r   ÚSupervisorScanInputr   r   )r$   s   "r%   r&   r&   +  s1   € ÷ Lñ LÜ×(Ñ(ðLäðLô ñLr'   c              ƒ  ó`   "  € \         P                  ! WVP                  4      G Rj  x€L
 #  L5i)uX   Supervisor scans chassis at a station â€” auto-detects ARRIVAL (IN) or COMPLETION (OUT).N)r   Úsupervisor_station_scanr>   r?   s   &&&r%   Úsupervisor_scanr´  *  s$   é € ô ×0Ò0°¸d¿l¹lÓK×KÐKÑKùr@   z/supervisor/stationsc                ó0   € V ^8„  d   QhR\         R\        /# )r"   r#   r,   r¥   )r$   s   "r%   r&   r&   5  s   € ÷ 5ñ 5Üð5äñ5r'   c              ƒ  óJ   "  € \         P                  ! V 4      G Rj  x€L
 #  L5i)zOList all active stations in sequence order with live chassis counts (IN / OUT).N)r   Úget_supervisor_stationsr+   s   &&r%   r·  r·  4  s   é € ô ×0Ò0°Ó4×4Ð4Ñ4ùr-   z(/supervisor/station/{station_id}/chassisc                óP   € V ^8„  d   QhR\         P                  R\        R\        /# )r"   Ú
station_idr#   r,   rx   )r$   s   "r%   r&   r&   >  s/   € ÷ Hñ HÜ—	‘	ðHäðHô ñHr'   c              ƒ  óJ   "  € \         P                  ! W4      G Rj  x€L
 #  L5i)zRList chassis currently at this station with elapsed dwell times and IN/OUT status.N)r   Úget_supervisor_station_chassis©r¹  r#   r,   s   &&&r%   r»  r»  =  s   é € ô ×7Ò7¸ÓG×GÐGÑGùr-   z/production-dashboardÚ
PRODUCTIONc                ó$   € V ^8„  d   QhR\         /# r!   r   )r$   s   "r%   r&   r&   N  s   € ÷ Cñ CÜñCr'   c              ƒ  óJ   "  € \         P                  ! V 4      G Rj  x€L
 #  L5i)zPAggregated production dashboard: KPIs, station pipeline, WIP list, activity feedN)r   Úget_production_dashboardr+   s   &&r%   rÀ  rÀ  M  s   é € ô &×>Ò>¸rÓB×BÐBÑBùr-   z/chassis/{chassis_id}/documentsc                ó˜   € V ^8„  d   QhR\         P                  R\        R\        R\        R\        R\        R\        R\        R	\
        /	# )
r"   rB   Údocument_typeÚdocument_numberÚ
issue_dateÚvalid_untilÚissuing_authorityrX   r#   r:   )rD   rE   r2   r   r   r   )r$   s   "r%   r&   r&   Y  sf   € ÷ ñ Ü—	‘	ðäðô ðô ð	ô
 ðô ðô ðô 	ðô ñr'   c	              ƒ   óf   "  € \         P                  ! WpWW4WVVP                  4	      G R j  x€L
 #  L5ir)   )r   Úupload_documentr>   )	rB   rÂ  rÃ  rÄ  rÅ  rÆ  rX   r#   r:   s	   &&&&&&&&&r%   rÈ  rÈ  X  s5   é € ô ×(Ò(Ø
˜ØÐ!2¸$¿,¹,ó÷ ð ñ ùs   ‚(1ª/«1z/documents/{doc_id}/verifyc                óp   € V ^8„  d   QhR\         P                  R\        P                  R\        R\
        /# )r"   Údoc_idr9   r#   r:   )rD   rE   r   ÚDocumentVerifyr   r   )r$   s   "r%   r&   r&   k  s@   € ÷ Lñ LÜ�I‰IðLä×#Ñ#ðLô 	ðLô ñ	Lr'   c              ƒ   ó`   "  € \         P                  ! W WP                  4      G R j  x€L
 #  L5ir)   )r   Úverify_documentr>   )rÊ  r9   r#   r:   s   &&&&r%   rÍ  rÍ  j  s$   é € ô ×(Ò(¨°W¿l¹lÓK×KÐKÑKùr@   z/documents/{doc_id}c                óD   € V ^8„  d   QhR\         P                  R\        /# )r"   rÊ  r#   rC   )r$   s   "r%   r&   r&   u  s    € ÷ 5ñ 5Ü�I‰Ið5äñ5r'   c              ƒ   óJ   "  € \         P                  ! W4      G R j  x€L
 #  L5ir)   )r   Údelete_document)rÊ  r#   r,   s   &&&r%   rÐ  rÐ  t  s   é € ô ×(Ò(¨Ó4×4Ð4Ñ4ùr-   z/chassis/{chassis_id}/cspc                óp   € V ^8„  d   QhR\         P                  R\        P                  R\        R\
        /# rJ   )rD   rE   r   Ú	CspCreater   r   )r$   s   "r%   r&   r&   €  s@   € ÷ Kñ KÜ—	‘	ðKä×ÑðKô 	ðKô ñ	Kr'   c              ƒ   ó`   "  € \         P                  ! W WP                  4      G R j  x€L
 #  L5ir)   )r   Ú
create_cspr>   rN   s   &&&&r%   rÔ  rÔ    s$   é € ô ×#Ò# B°G¿\¹\ÓJ×JÐJÑJùr@   z/csp/{csp_id}c                óp   € V ^8„  d   QhR\         P                  R\        P                  R\        R\
        /# )r"   Úcsp_idr9   r#   r:   )rD   rE   r   ÚCspStatusUpdater   r   )r$   s   "r%   r&   r&   Š  s@   € ÷ Gñ GÜ�I‰IðGä×$Ñ$ðGô 	ðGô ñ	Gr'   c              ƒ   ó`   "  € \         P                  ! W WP                  4      G R j  x€L
 #  L5ir)   )r   Ú
update_cspr>   )rÖ  r9   r#   r:   s   &&&&r%   rÙ  rÙ  ‰  s$   é € ô ×#Ò# B°¿¹ÓF×FÐFÑFùr@   z
/locationsc                ó$   € V ^8„  d   QhR\         /# r!   r   )r$   s   "r%   r&   r&   ™  s   € ÷ +ñ +Üñ+r'   c              ƒ   óJ   "  € \         P                  ! V 4      G R j  x€L
 #  L5ir)   )r   Úget_locationsr+   s   &&r%   Úlist_locationsrÝ  ˜  s   é € ô
 ×&Ò& rÓ*×*Ð*Ñ*ùr-   c                óD   € V ^8„  d   QhR\         P                  R\        /# r…   )r   ÚLocationCreater   )r$   s   "r%   r&   r&   ¡  s"   € ÷ 6ñ 6Ü×#Ñ#ð6äñ6r'   c              ƒ   óJ   "  € \         P                  ! W4      G R j  x€L
 #  L5ir)   )r   Úcreate_locationr‰   s   &&&r%   rá  rá     s   é € ô ×(Ò(¨Ó5×5Ð5Ñ5ùr-   z/locations/{location_id}c                ód   € V ^8„  d   QhR\         P                  R\        P                  R\        /# )r"   Úlocation_idr9   r#   )rD   rE   r   ÚLocationUpdater   )r$   s   "r%   r&   r&   ª  s5   € ÷ Cñ CÜ—‘ðCä×#Ñ#ðCô 	ñCr'   c              ƒ   óL   "  € \         P                  ! W V4      G R j  x€L
 #  L5ir)   )r   Úupdate_location)rã  r9   r#   r,   s   &&&&r%   ræ  ræ  ©  s    é € ô ×(Ò(¨¸'ÓB×BÐBÑBùrO   z	/stationsc                ó$   € V ^8„  d   QhR\         /# r!   r   )r$   s   "r%   r&   r&   ´  s   € ÷ .ñ .Üñ.r'   c              ƒ   óJ   "  € \         P                  ! V 4      G R j  x€L
 #  L5ir)   )r   Úget_all_stationsr+   s   &&r%   ré  ré  ³  s   é € ô
 ×)Ò)¨"Ó-×-Ð-Ñ-ùr-   c                óD   € V ^8„  d   QhR\         P                  R\        /# r…   )r   ÚStationCreater   )r$   s   "r%   r&   r&   ¼  s"   € ÷ 5ñ 5Ü×"Ñ"ð5äñ5r'   c              ƒ   óJ   "  € \         P                  ! W4      G R j  x€L
 #  L5ir)   )r   Úcreate_stationr‰   s   &&&r%   rí  rí  »  rŠ   r-   z/stations/{station_id}c                óp   € V ^8„  d   QhR\         P                  R\        P                  R\        R\
        /# )r"   r¹  r9   r#   r:   )rD   rE   r   ÚStationUpdater   r   )r$   s   "r%   r&   r&   Å  s@   € ÷ Añ AÜ—	‘	ðAä×"Ñ"ðAô 	ðAô ñ	Ar'   c              ƒ   óˆ   "  € VP                   R9  d   \        RRR7      h\        P                  ! W V4      G Rj  x€L
 #  L5i)ÚADMINé“  z-Only Admin and Client Admin can edit stationsrT   N©rñ  ÚCLIENT_ADMINÚC_ADMIN)Ú	role_coder   r   Úupdate_station)r¹  r9   r#   r:   s   &&&&r%   r÷  r÷  Ä  s;   é € ð ‡~�~ÐAÔAÜ¨Ð4cÔdÐdÜ×'Ò'¨¸Ó@×@Ð@Ñ@ùs   ‚9A»A ¼AÚdeletec                óP   € V ^8„  d   QhR\         P                  R\        R\        /# )r"   r¹  r#   r:   rx   )r$   s   "r%   r&   r&   Ñ  s*   € ÷ 8ñ 8Ü—	‘	ð8äð8ô ñ8r'   c              ƒ   ó†   "  € VP                   R9  d   \        RRR7      h\        P                  ! W4      G Rj  x€L
 #  L5i)rñ  rò  z/Only Admin and Client Admin can delete stationsrT   Nró  )rö  r   r   Údelete_station)r¹  r#   r:   s   &&&r%   rû  rû  Ð  s9   é € ð ‡~�~ÐAÔAÜ¨Ð4eÔfÐfÜ×'Ò'¨Ó7×7Ð7Ñ7ùs   ‚8Aº?»Az/stations/{station_id}/qa-itemsc                óD   € V ^8„  d   QhR\         P                  R\        /# )r"   r¹  r#   rC   )r$   s   "r%   r&   r&   Ü  s    € ÷ >ñ >Ü—	‘	ð>äñ>r'   c              ƒ   óJ   "  € \         P                  ! W4      G R j  x€L
 #  L5ir)   )r   Úget_station_qa_itemsr¼  s   &&&r%   rþ  rþ  Û  s   é € ô ×-Ò-¨bÓ=×=Ð=Ñ=ùr-   z/stations/qa-itemsc                óD   € V ^8„  d   QhR\         P                  R\        /# r…   )r   ÚStationQaItemCreater   )r$   s   "r%   r&   r&   å  s"   € ÷ =ñ =Ü×(Ñ(ð=äñ=r'   c              ƒ   óJ   "  € \         P                  ! W4      G R j  x€L
 #  L5ir)   )r   Úcreate_station_qa_itemr‰   s   &&&r%   r  r  ä  s   é € ô ×/Ò/°Ó<×<Ð<Ñ<ùr-   z/production-reportc                ó$   € V ^8„  d   QhR\         /# r!   r   )r$   s   "r%   r&   r&   ð  s   € ÷ Jñ JÜñJr'   c              ƒ  óJ   "  € \         P                  ! V 4      G Rj  x€L
 #  L5i)zHFull production report data (JSON) with dynamic special-feature columns.N)r   Úget_production_report_datar+   s   &&r%   Úget_production_reportr  ï  s   é € ô +×EÒEÀbÓI×IÐIÑIùr-   z/production-report/downloadc                ó$   € V ^8„  d   QhR\         /# r!   r   )r$   s   "r%   r&   r&   ù  s   € ÷ ñ Üñr'   c              ƒ  óÆ   "  € \         P                  ! V 4      G Rj  x€L
 p\        P                  ! 4       P	                  R4      pRV R2p\        VRRRV R2/R	7      #  LB5i)
z6Download the production report as a styled .xlsx file.Nz%d-%b-%YÚProduction_Report_ra  rb  rc  rd  re  rf  )r   Ú generate_production_report_excelr   ÚtodayrF  r   )r#   r,   r=  Ú	today_strrY   s   &&   r%   Údownload_production_reportr  ø  si   é € ô *×JÒJÈ2ÓN×
N€CÜ—
’
“×%Ñ% jÓ1€IØ# I ;¨eÐ4€HÜØØVØ&Ð*@ÀÀ
È!Ð(LÐMôð ñ Oùs   ‚A!œA�AA!)Ú	BaseModel)r   c                   óH   a € ] tR tRt o RtRtRtRtRtRt	Rt
V 3R ltRtV tR# )ÚManualEntryUpdatei  Nc                óÞ   <€ V ^8„  d   Qh/ S[ S[,          ;R&   S[ S[,          ;R&   S[ S[,          ;R&   S[ S[,          ;R&   S[ S[,          ;R&   S[ S[,          ;R&   S[ S[,          ;R&   # )r"   Úcontractor_groupÚac_makeÚinterior_workÚdriver_requestÚdocument_pendingÚseat_fitting_pendingÚremark)r   r2   )r$   Ú__classdict__s   "€r%   r&   ÚManualEntryUpdate.__annotate__  sx   ø‡ ‚ Ù™s•mÑ*ñ á‘c�]Ñ!ñ ñ ™C•=Ñ'ñ ñ ™S•MÑ(ñ	 ñ
 ™s•mÑ*ñ ñ #¡3�-Ñ.ñ ñ ‘S�MÑ ò r'   © )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r  r  r  r  r  r  r  Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__)r  s   @r%   r  r    s2   ø‡ € Ø&*ÐØ!€GØ#'€MØ$(€NØ&*ÐØ*.ÐØ €F÷ ƒ r'   r  z,/production-report/{chassis_id}/manual-entryc                óP   € V ^8„  d   QhR\         P                  R\        R\        /# r}   )rD   rE   r  r   )r$   s   "r%   r&   r&     s/   € ÷ Uñ UÜ—	‘	ðUäðUô 	ñUr'   c              ƒ  óp   "  € VP                  RR7      p\        P                  ! W V4      G Rj  x€L
 #  L5i)zLCreate or update manual-entry fields for a chassis in the production report.T)Úexclude_unsetN)Ú
model_dumpr   Úupsert_manual_entry)rB   r9   r#   r,   r¥  s   &&&& r%   Úupdate_manual_entryr(    s3   é € ð ×Ñ¨DÐÓ1€DÜ*×>Ò>¸rÈtÓT×TÐTÑTùs   ‚-6¯4°6)~r   rÆ   rb   rj   rf   rD   r   r   Útypingr   r   Úfastapir   r   r	   r
   r   r   r   r   Úfastapi.responsesr   Ústarlette.requestsr   Úsqlalchemy.ext.asyncior   Úapp.core.databaser   Úapp.core.securityr   r   r   Úapp.models.core_modelsr   rS   r   r   r   r   Úrouterr_   ÚYardMastersOutr*   rÄ   ÚChassisListItemr4   ÚpostÚ
ChassisOutr=   ÚChassisDetailOutrG   ÚputrM   rn   rø  rz   r�   Ú	QaItemOutrˆ   r�   r’   ÚHandoverPartOutr–   ÚMovementLogOutrš   ÚStoreHandoverOutrž   r¢   rª   r¯   r³   rº   r  Úopenpyxl.stylesr»   r¼   r½   r¾   r¿   Úopenpyxl.utilsrÀ   r>  rI  r[  rk  rp  rw  rƒ  r‡  r¨  ÚChassisTrackingOutr«  r¯  ÚSupervisorScanResponser´  ÚSupervisorStationSummaryr·  ÚSupervisorStationChassisItemr»  rÀ  ÚDocumentOutrÈ  ÚpatchrÍ  rÐ  ÚCspOutrÔ  rÙ  ÚLocationOutrÝ  rá  ræ  ÚStationDetailOutré  rí  r÷  rû  ÚStationQaItemOutrþ  r  r  r  Úpydanticr  r  r(  r  r'   r%   Ú<module>rI     sÝ  ðÛ 
Û 	Û 	Û Û Û ß #ß !ß ]× ]Ó ]Ý /Ý /Ý /å $ß ZÑ ZÝ -ß Ý "Ý 'á	‹€ð ‡�ˆJ w×'=Ñ'=€Ó>á˜v“ÙÑ$ f¨kÐ%:¸FÓCÓDö)ó ?ð)ð ‡�ˆJ t¨G×,CÑ,CÕ'D€ÓEá˜tÐ1kÔlÙ˜v“ÙÑ  ¨Ó0Ó1ö2ó Fð2ð ‡�ˆZ¨×(:Ñ(:È€ÓLñ ˜v“ÙÑ1°&¸(ÓCÓDöCó MðCð ‡�Ð#°G×4LÑ4L€ÓMñ ˜v“ÙÑ$ f¨kÐ%:¸FÓCÓDö<ó Nð<ð ‡�Ð+¸G×<NÑ<N€ÓOñ ˜v“ÙÑ1°&¸&ÓAÓBö	Aó PðAð ‡�Ð+¸G×<NÑ<N€ÓOñ ˜v“ÙÑ1°&¸&ÓAÓBö	$ró Pð$rðN ‡�Ð4ÀW×EWÑEW€ÓXñ ˜v“ÙÑ1°&¸&ÓAÓBöLó YðLð ‡�Ð0Ó1ñ ˜v“ÙÑ  ¨Ó0Ó1ö	*ó 2ð*ð ‡�ˆ[¨×):Ñ):È€ÓLñ ˜v“ÙÑ  ¨Ó0Ó1ö5ó Mð5ð ‡�Ð!°'×2CÑ2C€ÓDñ ˜v“ÙÑ  ¨Ó0Ó1ö	>ó Eð>ð ‡�Ð$Ó%ñ ˜v“ÙÑ  ¨Ó0Ó1ö5ó &ð5ð ‡�Ð¨w×/FÑ/FÐTW€ÓXñ ˜v“ÙÑ  ¨Ó0Ó1ö;ó Yð;ð ‡�Ð-¸g×>TÑ>TÐbe€Ófñ ˜v“ÙÑ  ¨Ó0Ó1ö	Có gðCð ‡�Ð2À7×C[ÑC[€Ó\ñ ˜v“ÙÑ  ¨Ó0Ó1ö	Hó ]ðHð ‡�ÐBÓCñ ˜v“ÙÑ5°v¸{Ð6KÈVÓTÓUö	Tó DðTð ‡�Ð&Ó'á˜v“ÙÑ5°v¸{Ð6KÈVÓTÓUö?ó (ð?ð ‡�Ð&Ó'á˜v“ÙÑ5°v¸{Ð6KÈVÓTÓUö?ó (ð?ð ‡�Ð;ÈG×L^ÑL^€Ó_ñ ˜v“ÙÑ1°&¸)ÓDÓEöNó `ðNð ‡�ÐÓá˜c¨Ô0Ù˜v“ÙÑ  ¨Ó0Ó1ö7ó ð7ó ß FÕ FÝ ,õVõrõGðT ‡�Ð!Ó"á˜c¨Ô0Ù˜v“ÙÑ  ¨Ó0Ó1öó #ðð ‡�Ð Ó!á˜c¨Ô0Ù˜v“ÙÑ  ¨Ó0Ó1öó "ðð ‡�ÐÓá˜“*Ù�c“
Ù˜%Ð)=Ô>Ù˜v“ÙÑ  ¨Ó0Ó1öBó ðBð ‡�Ð"Ó#á˜“*Ù�c“
Ù˜%Ð)=Ô>Ù˜v“ÙÑ  ¨Ó0Ó1öó $ðð$ ‡�ˆNÓá˜t›Ù˜T“{Ù˜v“ÙÑ  ¨Ó0Ó1ö	4ó ð4ð ‡�ÐÓá˜t›Ù˜T“{Ù˜v“ÙÑ  ¨Ó0Ó1ö	+ó  ð+ð` ‡�Ð!°'×2LÑ2L€ÓMñ ˜v“ö;ó Nð;ð ‡�Ð'¸×8RÑ8R€ÓSñ ˜v“ÙÑ1°&¸&ÓAÓBö	Wó TðWð ‡�Ð°×0NÑ0N€ÓOñ ˜v“ÙÐ/Ó0öLó PðLð ‡�Ð"°4¸×8XÑ8XÕ3Y€ÓZá˜v“ÙÐ,Ó-ö5ó [ð5ð ‡�Ð6ÀtÈG×LpÑLpÕGq€Órñ ˜v“ÙÐ,Ó-öHó sðHð ‡�Ð#Ó$á˜v“ÙÑ  ¨vÓ6Ó7öCó %ðCð ‡�Ð.¸w×?RÑ?RÐ`c€Ódñ ˜c›Ù ›:Ù˜4“jÙ˜D“zÙ! $›ZÙ˜D“zÙ˜v“ÙÑ1°&¸&ÓAÓBöó eðð" ‡�Ð*¸7×;NÑ;N€ÓOñ ˜v“ÙÑ1°&¸&ÓAÓBö	Ló PðLð ‡�Ð$Ó%ñ ˜v“ÙÑ  ¨Ó0Ó1ö5ó &ð5ð ‡�Ð(¸¿¹ÐUX€ÓYñ ˜v“ÙÑ1°&¸(ÓCÓDö	Kó ZðKð ‡�ˆo¨g¯n©n€Ó=ñ ˜v“ÙÑ1°&¸&ÓAÓBö	Gó >ðGð ‡�ˆL¨¨g×.AÑ.AÕ)B€ÓCá˜v“ÙÑ  ¨Ó0Ó1ö+ó Dð+ð ‡�ˆ\¨'×*=Ñ*=È3€ÓOñ ˜v“ÙÑ  ¨Ó2Ó3ö6ó Pð6ð ‡�Ð&°w×7JÑ7J€ÓKñ ˜v“ÙÑ  ¨Ó0Ó1ö	Có LðCð ‡�ˆK¨¨W×-EÑ-EÕ(F€ÓGá˜v“ÙÑ  ¨Ó0Ó1ö.ó Hð.ð ‡�ˆ[¨×)AÑ)AÈs€ÓSñ ˜v“ÙÑ  ¨Ó2Ó3ö5ó Tð5ð ‡�Ð$°W×5MÑ5M€ÓNñ ˜v“ÙÑ1°&¸&ÓAÓBö	Aó OðAð ‡�Ð'Ó(ñ ˜v“ÙÑ1°&¸(ÓCÓDö8ó )ð8ð ‡�Ð-¸dÀ7×C[ÑC[Õ>\€Ó]ñ ˜v“ÙÑ  ¨Ó0Ó1ö>ó ^ð>ð ‡�Ð!°'×2JÑ2JÐX[€Ó\ñ ˜v“ÙÑ  ¨Ó2Ó3ö=ó ]ð=ð ‡�Ð Ó!á˜v“ÙÑ  ¨vÓ6Ó7öJó "ðJð ‡�Ð)Ó*á˜v“ÙÑ  ¨vÓ6Ó7öó +ðõ Ý ô!˜	ô !ð ‡�Ð:Ó;ñ ˜v“ÙÑ  ¨vÓ6Ó7ö	Uó <òUr'   