+
    `Øjïh  ã            	       ó  € R t ^ RIHtHtHtHt ^ RIHtHt ^ RIH	t	 ^ RI
HtHtHtHt ^ RIHtHt ^ RIHtHt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&H't' ^ RI(H)t) ^ RI*H+t+H,t, ^ RI-H.t. ^ RI/H0t0H1t1H2t2 ^ RI3H4t4H5t5 ^ RI6H7t7 ]! 4       t8R^t9RRRR/t:R t;R R lt<R R lt=R R lt>R R lt? ! R  R!]4      t@ ! R" R#]4      tA ! R$ R%]4      tB ! R& R']4      tC ! R( R)]4      tD ! R* R+]4      tE ! R, R-]4      tF ! R. R/]4      tG ! R0 R1]4      tH ! R2 R3]4      tI ! R4 R5]4      tJ ! R6 R7]4      tKR8 R9 ltLR: R; ltMR< R= ltN]8PŸ                  R>]]D,          R?7      ]! ]4      ]! ]! R@RA4      4      3RB RC ll4       tP]8PŸ                  RD]]B,          R?7      RE]! ]4      ]! ]! R@RA4      4      3RF RG ll4       tQ]8P¥                  RD]B^ÉRH7      ]! ]4      ]! ]! R@RI4      4      3RJ RK ll4       tS]8P©                  RL^ÌRM7      ]! ]4      ]! ]! R@RI4      4      3RN RO ll4       tU]8PŸ                  RP]AR?7      ]! RRQRR7      ]! ]4      ]! ]4      3RS RT ll4       tV]8PŸ                  RU]HR?7      ]! RRQRR7      ]! ]4      ]! ]4      3RV RW ll4       tW]8PŸ                  RX]IR?7      ]! RRQRR7      ]! ]4      ]! ]4      3RY RZ ll4       tX]8P¥                  R[]KR?7      ]! ]4      ]! ]4      3R\ R] ll4       tYRE# )_a±  
Station work: who works at which station, and what a station operator or QA inspector
sees there (chassis at the station, the queue coming to it, parts, checksheets).

Access rule used throughout: a user assigned to a station (station_user_assignment) may
work there. A user with no assignment for that role falls back to module permissions
(PRODUCTION for operators, QA for inspectors), which keeps supervisors and admins working.
)ÚdatetimeÚtimezoneÚ	timedeltaÚdate)ÚListÚOptional)ÚUUID)Ú	APIRouterÚDependsÚHTTPExceptionÚQuery)Ú	BaseModelÚField)ÚselectÚfuncÚdesc)ÚIntegrityError©ÚAsyncSession)Úget_db)Úget_current_userÚrequire_permissionÚuser_has_permission)Ú
LoginUsers)ÚStationMasterÚRmMaster)ÚChassisMasterÚVehicleModelMaster)ÚCustomerMaster)ÚChassisStationLogÚProductionHold)ÚChassisBomSnapshot)ÚQaStationTemplateMapÚQaChecksheetTemplateÚQaChecksheetInstance)ÚStationUserAssignmentÚChassisStationHandoff)ÚflowÚOPERATORÚQAÚ
PRODUCTIONc                  óJ   € \         P                  ! \        P                  4      # ©N)r   Únowr   Úutc© ó    ÚA/var/www/html/audi_dev/backend/app/modules/station_work/routes.pyÚ_nowr2   %   s   € Ü�<Š<œŸ™Ó%Ð%r0   c                ó:   € V ^8„  d   QhR\         \        ,          /# )é   Úreturn)r   Úint)Úformats   "r1   Ú__annotate__r8   )   s   € ÷ Nñ N”Xœc•]ñ Nr0   c                 óŠ   € V P                   '       d1   \        P                  ! 4       V P                   ,
          P                  # R # r,   )Úarrival_dater   ÚtodayÚdays)Úcms   &r1   Ú	_age_daysr>   )   s*   € Ø46·O·O°OŒD�JŠJ‹L˜2Ÿ?™?Õ*×0Ñ0ÐMÈÐMr0   c                ó\   € V ^8„  d   QhR\         \        ,          R\         \        ,          /# )r4   Ústartr5   )r   r   r6   )r7   s   "r1   r8   r8   -   s'   € ÷ Qñ Q”HœXÕ&ð Q¬8´C­=ñ Qr0   c                 óˆ   € V '       d:   \        ^ \        \        4       V ,
          P                  4       ^<,          4      4      # R# )é    N)Úmaxr6   r2   Útotal_seconds)r@   s   &r1   Ú_elapsedrE   -   s/   € ßAFŒ3ˆq”#”t“v •~×4Ñ4Ó6¸Õ;Ó<Ó=ÐPÈDÐPr0   c                óH   € V ^8„  d   QhR\         R\        R\        R\        /# )r4   ÚdbÚuser_idÚroler5   )r   r   ÚstrÚset)r7   s   "r1   r8   r8   2   s(   € ÷ ñ ¤<ð ¼$ð Äcð Ìcñ r0   c              ƒ   óD  "  € V P                  \        \        P                  4      P	                  \        P
                  V8H  \        P                  V8H  \        P                  R 8H  4      4      G Rj  x€L
 P                  4       P                  4       p\        V4      #  L+5i)TN)Úexecuter   r%   Ú
station_idÚwhererH   rI   Ú	is_activeÚscalarsÚallrK   )rG   rH   rI   Úrowss   &&& r1   Úassigned_station_idsrT   2   s   é € Ø—*‘*ÜÔ$×/Ñ/Ó0×6Ñ6Ü!×)Ñ)¨WÑ4Ü!×&Ñ&¨$Ñ.Ü!×+Ñ+¨tÑ3ó	
ó÷ ÷ �wƒy—‘“ð 	ô ˆt‹9Ðñùs   ‚A0B Á2BÁ3,B c          
      óL   € V ^8„  d   QhR\         R\        R\        R\        RR/# )r4   rG   ÚuserrN   rI   r5   N)r   r   r   rJ   )r7   s   "r1   r8   r8   =   s9   € ÷ Hñ H¤Lð H¼
ð HÔPTð HÔ\_ð HÐdhñ Hr0   c              ƒ  óH  "  € VP                   R8X  d   R# VP                   R8X  d
   VR8X  d   R# \        WP                  V4      G Rj  x€L
 pV'       d   W$9  d   \        RR4      hR# \	        W\
        V,          R4      G Rj  x€L
 '       g   \        RR4      hR#  LT L5i)	z†Raise 403 if the user is assigned to stations for this role but not to this one,
or has no assignment and no module permission either.ÚADMINNÚQA_SUPERVISORr)   é“  z$You are not assigned to this stationÚviewz#You are not assigned to any station)Ú	role_coderT   rH   r   r   ÚROLE_MODULE)rG   rV   rN   rI   Úassigneds   &&&& r1   Úensure_station_accessr_   =   s�   é € ð ‡~�~˜Ô ÙØ‡~�~˜Ô(¨T°T¬\ÙÜ)¨"¯l©l¸DÓA×A€HßØÔ%Ü Ð%KÓLÐLÙÜ$ R¬{¸4Õ/@À&ÓI×IÖIÜ˜CÐ!FÓGÐGñ Jñ Bñ
 Jùs0   ‚AB"Á	BÁ
B"Á/B"ÂB Â	B"ÂB"Â B"c                   ó8   a € ] tR t^Nt o RtRtRtV 3R ltRtV t	R# )ÚStationBriefNFc                ó‚   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   S[;R&   S[S[,          ;R&   S[;R&   S[S[,          ;R&   # )r4   rN   Ústation_codeÚstation_nameÚsequence_noÚrequires_qaÚcycle_time_min©r   rJ   r   r6   Úbool)r7   Ú__classdict__s   "€r1   r8   ÚStationBrief.__annotate__N   sW   ø‡ ‚ ÙÑñ áÑñ ñ Ññ ñ ™#•Ñ%ñ	 ñ
 Ññ ñ ™S•MÑ(ò r0   r/   )
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__re   rf   rg   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©rj   s   @r1   ra   ra   N   s   ø‡ € ð "&€KØ€KØ$(€N÷ ƒ r0   ra   c                   ó,   a € ] tR t^Wt o V 3R ltRtV tR# )ÚMyStationsOutc                óN   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   S[S[,          ;R&   # )r4   rI   Úsupervisor_modeÚstations)rJ   ri   r   ra   )r7   rj   s   "€r1   r8   ÚMyStationsOut.__annotate__W   s,   ø‡ ‚ Ù
�Iñ áÑñ ñ ‘<Õ Ñ ò r0   r/   N©rl   rm   rn   ro   rp   rq   rr   rs   s   @r1   ru   ru   W   ó   ø‡ ‡ „ r0   ru   c                   ó8   a € ] tR t^]t o RtRtRtV 3R ltRtV t	R# )ÚAssignmentOutNc                óÎ   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[;R&   S[S[,          ;R&   S[S[,          ;R&   S[ ;R&   S[;R&   S[;R&   S[S[,          ;R	&   S[;R
&   S[;R&   # )r4   Úassignment_idrH   Ú	user_nameÚemployee_codeÚuser_role_coderN   rd   rc   re   rI   rP   rh   )r7   rj   s   "€r1   r8   ÚAssignmentOut.__annotate__]   s˜   ø‡ ‚ ÙÑñ á�Mñ ñ �Nñ ñ ™C•=Ñ'ñ	 ñ
 ™S•MÑ(ñ ñ Ññ ñ Ññ ñ Ññ ñ ™#•Ñ%ñ ñ �Iñ ñ �Oò r0   r/   )
rl   rm   rn   ro   r�   r‚   re   rp   rq   rr   rs   s   @r1   r}   r}   ]   s   ø‡ € ð $(€MØ$(€Nð "&€K÷ ƒ r0   r}   c                   ó@   a € ] tR t^kt o ]! RRR7      tV 3R ltRtV tR# )ÚAssignmentCreate.ú^(OPERATOR|QA)$©Úpatternc                ó>   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   S[;R&   # )r4   rH   rN   rI   )r   rJ   )r7   rj   s   "€r1   r8   ÚAssignmentCreate.__annotate__k   s'   ø‡ ‚ Ù�Mñ áÑñ ñ Ñ5ò r0   r/   N)	rl   rm   rn   ro   r   rI   rp   rq   rr   rs   s   @r1   r…   r…   k   s   ø‡ € ñ �cÐ#4Ô5€D÷ ƒ r0   r…   c                   ó4   a € ] tR t^qt o RtRtV 3R ltRtV tR# )Ú	UserBriefNc                ój   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   S[S[,          ;R&   S[S[,          ;R&   # )r4   rH   Únamer�   r\   )r   rJ   r   )r7   rj   s   "€r1   r8   ÚUserBrief.__annotate__q   s;   ø‡ ‚ Ù�Mñ á
�Iñ ñ ™C•=Ñ'ñ ñ ™�}Ñ#ò	 r0   r/   )	rl   rm   rn   ro   r�   r\   rp   rq   rr   rs   s   @r1   rŒ   rŒ   q   s   ø‡ € ð $(€MØ#€I÷	 ƒ r0   rŒ   c                   óL   a € ] tR t^xt o RtRtRtRtRtRt	Rt
RtV 3R ltRtV tR# )ÚBoardChassisNÚNONEÚNOT_STARTEDc                óò   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   S[S[,          ;R&   S[;R&   S[S[,          ;R&   S[S[,          ;R&   S[;R&   S[S[,          ;R&   S[S[,          ;R	&   S[S[,          ;R
&   # )r4   Ú
chassis_idÚ
chassis_noÚ
model_nameÚhold_statusÚsinceÚelapsed_minutesÚ	qa_statusÚage_daysÚhandoff_statusÚnext_station_name)r   rJ   r   r   r6   )r7   rj   s   "€r1   r8   ÚBoardChassis.__annotate__x   s›   ø‡ ‚ ÙÑñ á�Oñ ñ ™•Ñ$ñ ñ Ññ	 ñ
 ‘HÕÑ$ñ ñ ™c•]Ñ)ñ ñ Ñ"ñ ñ ‘s�mÑ"ñ ñ ™S•MÑ(ñ ñ  ¡•}Ñ+ò r0   r/   )rl   rm   rn   ro   r—   r˜   r™   rš   r›   rœ   r�   rž   rp   rq   rr   rs   s   @r1   r‘   r‘   x   s7   ø‡ € ð !%€JØ€KØ $€EØ%)€OØ"€IØ"€HØ$(€NØ'+Ð÷ ƒ r0   r‘   c                   ó<   a € ] tR t^…t o RtRtRtRtV 3R ltRt	V t
R# )ÚPartRowNc                ó¢   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   S[S[,          ;R&   S[S[,          ;R&   S[S[,          ;R&   S[S[,          ;R&   # )r4   Úrm_idrŽ   Úpart_noÚunitÚquantityÚconsumed_qty)r   rJ   r   Úfloat)r7   rj   s   "€r1   r8   ÚPartRow.__annotate__…   s]   ø‡ ‚ Ù�Kñ á
�Iñ ñ ‘c�]Ñ!ñ ñ ‘3�-Ññ	 ñ
 ‘u�oÑ$ñ ñ ™5•/Ñ(ò r0   r/   )rl   rm   rn   ro   r¤   r¥   r¦   r§   rp   rq   rr   rs   s   @r1   r¡   r¡   …   s"   ø‡ € ð "€GØ€DØ $€HØ$(€L÷ ƒ r0   r¡   c                   ó0   a € ] tR t^Žt o RtV 3R ltRtV tR# )ÚChecksheetBriefTc                óJ   <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   S[;R&   S[;R&   # )r4   Útemplate_idÚtemplate_codeÚtemplate_nameÚis_mandatory)r   rJ   ri   )r7   rj   s   "€r1   r8   ÚChecksheetBrief.__annotate__Ž   s5   ø‡ ‚ ÙÑñ áÑñ ñ Ññ ñ Ñò	 r0   r/   N)rl   rm   rn   ro   r°   rp   rq   rr   rs   s   @r1   r«   r«   Ž   s   ø‡ € ð €L÷	 ƒ r0   r«   c                   ó0   a € ] tR t^•t o RtV 3R ltRtV tR# )ÚStationBoardOutNc                óê   <€ V ^8„  d   Qh/ S[ ;R&   S[S[,          ;R&   S[S[,          ;R&   S[S[,          ;R&   S[S[,          ;R&   S[S[,          ;R&   S[S[,          ;R&   S[S[,          ;R&   # )	r4   ÚstationÚdescriptionÚ
at_stationÚqueueÚawaiting_qaÚcompleted_hereÚchecksheetsÚparts)ra   r   rJ   r   r‘   r«   r¡   )r7   rj   s   "€r1   r8   ÚStationBoardOut.__annotate__•   sŠ   ø‡ ‚ ÙÑñ á™#•Ñ%ñ ñ ‘\Õ"Ñ"ñ ñ ‘ÕÑñ	 ñ
 ‘lÕ#Ñ#ñ ñ ™Õ&Ñ&ñ ñ ‘oÕ&Ñ&ñ ñ ‘�=Ñò r0   r/   )rl   rm   rn   ro   r¶   rp   rq   rr   rs   s   @r1   r³   r³   •   s   ø‡ € à!%€K÷ ƒ r0   r³   c                   ót   a € ] tR t^ t o RtRtRtRtRt. t	Rt
RtRtRtRtRtRtRtRtRtRtRtV 3R ltRtV tR# )ÚChassisAtStationOutNr’   Fr“   c                ó>  <€ V ^8„  d   Qh/ S[ ;R&   S[;R&   S[S[,          ;R&   S[S[,          ;R&   S[S[,          ;R&   S[S[,          ;R&   S[;R&   S[S[,          ;R&   S[S[,          ;R	&   S[S[,          ;R
&   S[;R&   S[S[,          ;R&   S[S[,          ;R&   S[S[,          ;R&   S[S[,          ;R&   S[S[,          ;R&   S[S[,          ;R&   S[S[,          ;R&   S[;R&   S[S[,          ;R&   S[S[,          ;R&   S[S[,          ;R&   S[;R&   # )r4   r•   r–   r—   Ú	fuel_typeÚdealer_nameÚtracking_statusr˜   Úhold_reasonsÚcurrent_station_nameÚcurrent_station_seqÚ
state_hereÚ
arrived_atrš   rg   Únext_actionÚblocked_reasonr�   rž   Úcan_releaserœ   r¼   r»   r›   )	r   rJ   r   r   r6   r   ri   r¡   r«   )r7   rj   s   "€r1   r8   Ú ChassisAtStationOut.__annotate__    sp  ø‡ ‚ ÙÑñ á�Oñ ñ ™•Ñ$ñ ñ ™�}Ñ#ñ	 ñ
 ™#•Ñ%ñ ñ ™c•]Ñ)ñ ñ Ññ ñ ‘s•)Ñ ñ ñ #¡3�-Ñ.ñ ñ "¡#�Ñ-ñ ñ �Oñ ñ ™Õ"Ñ)ñ ñ ™c•]Ñ)ñ ñ ™S•MÑ(ñ ñ ™#•Ñ%ñ ñ  ™S•MÑ(ñ! ñ" ™S•MÑ(ñ# ñ$  ¡•}Ñ+ñ% ñ& Ññ' ñ( ‘s�mÑ"ñ) ñ* ‘�=Ññ+ ñ, ‘oÕ&Ñ&ñ- ñ. Ñ"ò/ r0   r/   )rl   rm   rn   ro   r—   rÁ   rÂ   rÃ   r˜   rÄ   rÅ   rÆ   rÈ   rš   rg   rÉ   rÊ   r�   rž   rË   rœ   r›   rp   rq   rr   rs   s   @r1   r¿   r¿       sm   ø‡ € ð !%€JØ#€IØ!%€KØ%)€OØ€KØ €LØ*.ÐØ)-Ðà%)€JØ%)€OØ$(€NØ!%€KØ$(€NØ$(€NØ'+ÐØ€KØ"€Hð #€I÷/ ƒ r0   r¿   c                   ó0   a € ] tR t^ºt o RtV 3R ltRtV tR# )Ú	ReleaseInNc                ó6   <€ V ^8„  d   Qh/ S[ S[,          ;R&   # )r4   Úremarks)r   rJ   )r7   rj   s   "€r1   r8   ÚReleaseIn.__annotate__º   s   ø‡ ‚ Ù‘c�]Ñ!ò r0   r/   )rl   rm   rn   ro   rÐ   rp   rq   rr   rs   s   @r1   rÎ   rÎ   º   s   ø‡ € Ø!€G÷ ƒ r0   rÎ   c                   ó,   a € ] tR t^¾t o V 3R ltRtV tR# )Ú
ReleaseOutc                ó2   <€ V ^8„  d   Qh/ S[ ;R&   S[ ;R&   # )r4   Úmessagerž   )rJ   )r7   rj   s   "€r1   r8   ÚReleaseOut.__annotate__¾   s   ø‡ ‚ Ù�Lñ áÑò r0   r/   Nrz   rs   s   @r1   rÓ   rÓ   ¾   r{   r0   rÓ   c                ó0   € V ^8„  d   QhR\         R\        /# )r4   Ústr5   )r   ra   )r7   s   "r1   r8   r8   Ã   s   € ÷ Cñ CŒ}ð C¤ñ Cr0   c           	      ó®   € \        V P                  V P                  V P                  V P                  \        V P                  4      V P                  R 7      # ))rN   rc   rd   re   rf   rg   )ra   rN   rc   rd   re   ri   rf   Ústandard_cycle_time_min)rØ   s   &r1   Ú_briefrÛ   Ã   sA   € Ü 2§=¡=¸r¿¹Ð]_×]lÑ]lØ$&§N¡NÄÀRÇ^Á^Ó@TØ')×'AÑ'AôCð Cr0   c                ó^   € V ^8„  d   QhR\         R\        R\        \        ,          R\        /# )r4   rG   rN   Úchassis_idsr5   )r   r   r   Údict)r7   s   "r1   r8   r8   É   s-   € ÷ ñ œð ´4ð ÄdÌ4Åjð ÔUYñ r0   c              ƒ   óf  "  € V'       g   / # V P                  \        \        P                  \        P                  \        P
                  4      P                  \        P                  V8H  \        P                  P                  V4      4      4      G R j  x€L
 P                  4       p/ pV FC  w  rVpVP                  V. 4      pTP                  T;'       g    RT;'       g    R34       W„V&   KE  	  / p	VP                  4        Fž  w  rZV
 UUu. uF  w  r¼VNK	  	  ppp\        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      '       d   RW•&   KZ  \        ;QJ d    R V 4       F  '       d   K   RM	  RM! R V 4       4      '       d   RW•&   Kš  RW•&   K   	  V	#  ELu uppi 5i)	NÚPENDINGc              3   ó*   "  € T F	  qR 8H  x € K  	  R# 5i)ÚFAILEDNr/   ©Ú.0Úrs   & r1   Ú	<genexpr>Ú_qa_status.<locals>.<genexpr>Ø   s   é € Ð.¡g �HŽ}£gùó   ‚TFrâ   c              3   ó*   "  € T F	  qR 8H  x € K  	  R# 5i)ÚPASSEDNr/   rã   s   & r1   ræ   rç   Ú   s   é € Ð0© 1�h–«ùrè   rê   ÚIN_PROGRESS)rM   r   r$   r•   Ústation_qa_statusÚoverall_resultrO   rN   Úin_rR   ÚgetÚappendÚitemsÚany)rG   rN   rÝ   rS   ÚoutÚcidÚsqaÚresultÚcurÚstatusrñ   rå   Ú_Úresultss   &&&           r1   Ú
_qa_statusrû   É   s]  é € ßØˆ	Ø—*‘*ÜÔ#×.Ñ.Ô0D×0VÑ0VÔXl×X{ÑX{Ó|ß	‰Ô#×.Ñ.°*Ñ<Ô>R×>]Ñ>]×>aÑ>aÐbmÓ>nÓ	oó÷ ÷ �sƒuð 	ð €CÛ Ñˆ�&Ø�g‰g�c˜2ÓˆØ�
‰
�F×'Ð'˜i¨×)9Ð)9°	Ð:Ô;ØˆC‹ñ !ð €FØ—i‘i–k‰
ˆÙ!&Ô'¡™˜“1¡ˆÑ'ß‹3Ñ.¡gÓ.�3�3Š3Ñ.¡gÓ.×.Ò.Ø"ˆF‹Kß‹SÑ0©Ó0�S�SŠSÑ0©Ó0×0Ò0Ø"ˆF‹Kà'ˆF‹Kñ "ð €Mò%ùó (ùsO   ‚BF1ÂF(ÂAF1Ã
F1Ã",F1ÄF+ÄF1Ä=F1ÅF1Å)F1Å=F1ÆF1Æ+F1c                óR   € V ^8„  d   QhR\         R\        R\        \        ,          /# )r4   rG   rN   r5   )r   r   r   r«   )r7   s   "r1   r8   r8   á   s&   € ÷ ñ œ<ð ´Tð ¼dÄ?Õ>Sñ r0   c              ƒ   ót  "  € V P                  \        \        \        4      P	                  \        \        P
                  \        P
                  8H  4      P                  \        P                  V8H  \        P                  R 8H  4      4      G Rj  x€L
 P                  4       p\        4       . rCV F‚  w  rVVP
                  V9   d   K  VP                  VP
                  4       VP                  \        VP
                  VP                  VP                  \!        VP"                  4      R7      4       K„  	  V#  L§5i)TN)r­   r®   r¯   r°   )rM   r   r"   r#   Újoinr­   rO   rN   rP   rR   rK   Úaddrð   r«   r®   r¯   ri   r°   )rG   rN   rS   Úseenró   ÚmÚts   &&     r1   Ú_checksheetsr  á   sí   é € Ø—*‘*ÜÔ#Ô%9Ó:ß	‰Ô"Ô$8×$DÑ$DÔH\×HhÑHhÑ$hÓ	iß	‰Ô#×.Ñ.°*Ñ<Ô>R×>\Ñ>\Ð`dÑ>dÓ	eó÷ ÷ �sƒuð	 	ô
 “�rˆ#Û‰ˆØ�=‰=˜DÔ ÙØ�‰�—‘ÔØ�
‰
”?¨q¯}©}ÈAÏOÉOØ12·±ÌtÐTU×TbÑTbÓOcôeö 	fñ	 ð €Jñùs   ‚BD8ÂD6ÂB(D8z/users)Úresponse_modelÚ	LOCATIONSr[   c                ó$   € V ^8„  d   QhR\         /# )r4   rG   r   )r7   s   "r1   r8   r8   ó   s   € ÷ {ñ {œñ {r0   c           
   ƒ   ó¤  "  € V P                  \        \        4      P                  \        P                  R 8H  4      P                  \        P                  4      4      G Rj  x€L
 P                  4       P                  4       pV Uu. uF:  p\        VP                  VP                  VP                  VP                  R7      NK<  	  up#  Lgu upi 5i)TN)rH   rŽ   r�   r\   )rM   r   r   rO   rP   Úorder_byrŽ   rQ   rR   rŒ   rH   r�   r\   )rG   rù   rS   Úus   &&  r1   Ú
list_usersr
  ò   s”   é € à—*‘*œV¤JÓ/×5Ñ5´j×6JÑ6JÈdÑ6RÓS×\Ñ\Ô]g×]lÑ]lÓmÓn×n×wÑwÓy×}Ñ}Ó€DÙuyÓzÑuyÐpqŒI˜aŸi™i¨a¯f©fÀAÇOÁOÐ_`×_jÑ_j×kÑuyÑzÐzñ oùÚzùs%   ‚ACÁ!C	Á"$CÂA CÃCÃCz/assignmentsNc                óF   € V ^8„  d   QhR\         \        ,          R\        /# )r4   rN   rG   )r   r   r   )r7   s   "r1   r8   r8   ù   s    € ÷ !ñ !Üœ•ð!äñ!r0   c              ƒ   óh  "  € \        \        \        \        4      P	                  \        \        P
                  \        P
                  8H  4      P	                  \        \        P                  \        P                  8H  4      pV '       d#   VP                  \        P                  V 8H  4      pVP                  VP                  \        P                  \        P                  \        P                  4      4      G R j  x€L
 P                  4       pV UUUu. uFŠ  w  rVp\        VP                  VP
                  VP                  VP                   VP"                  VP                  VP$                  VP&                  VP                  VP                  VP(                  R7      NKŒ  	  uppp#  L­u upppi 5i)N©r   rH   r€   r�   r‚   rN   rd   rc   re   rI   rP   )r   r%   r   r   rþ   rH   rN   rO   rM   r  re   rI   rŽ   rR   r}   r   r�   r\   rd   rc   rP   )rN   rG   rù   ÚstmtrS   Úar	  Úss   &&&     r1   Úlist_assignmentsr  ø   s=  é € ô Ô(¬*´mÓDß‰T”*œj×0Ñ0Ô4I×4QÑ4QÑQÓRß‰T”-¤×!9Ñ!9Ô=R×=]Ñ=]Ñ!]Ó^ð 	÷ Ø�z‰zÔ/×:Ñ:¸jÑHÓIˆØ—*‘*˜TŸ]™]¬=×+DÑ+DÔF[×F`ÑF`Ôbl×bqÑbqÓrÓs×s×xÑxÓz€Dñ  õ!ñ  ‘��aô ¨¯©ÀÇÁÐVW×V\ÑV\Ðlm×l{Ñl{Ø)*¯©ÀÇÁÐ\]×\jÑ\jØ'(§~¡~À1Ç=Á=ÐWX×W]ÑW]Ðij×itÑit÷vñ  ó!ð !ñ tùô!ùs%   ‚C9F2Ã;F)Ã<F2ÄBF+Æ$F2Æ+F2)r  Ústatus_codeÚeditc                ó<   € V ^8„  d   QhR\         R\        R\        /# )r4   ÚpayloadrG   Úadmin)r…   r   r   )r7   s   "r1   r8   r8     s+   € ÷ #Añ #AÜð#Aäð#Aô ñ#Ar0   c              ƒ   ó°  "  € VP                   R 8X  d   V P                  R8w  d   \        RR4      hVP                  \        V P
                  4      G Rj  x€L
 pVP                  \        V P                  4      G Rj  x€L
 pV'       d	   V'       g   \        RR4      hVP                  \        \        4      P                  \        P
                  V P
                  8H  \        P                  V P                  8H  \        P                  V P                  8H  4      4      G Rj  x€L
 P                  4       P                  4       pV'       dO   VP                  '       d3   \        RVP                   RV P                   R	VP                    24      hR
Vn        TpMH\        V P
                  V P                  V P                  VP
                  R7      pVP#                  V4        VP%                  4       G Rj  x€L
  TP+                  T4      G Rj  x€L
  \-        TP.                  TP
                  TP                  TP0                  TP                   TP                  TP                   TP2                  TP4                  TP                  TP                  R7      #  ELA EL EL{ Lª  \&         d'    TP)                  4       G Rj  x€L 
  \        RR4      hi ; i LÇ5i)rY   r)   rZ   z+QA Supervisors can only assign QA personnelNé”  zUser or station not foundi™  z is already z at T)rH   rN   rI   Ú
created_byzThis assignment already existsr  )r\   rI   r   rï   r   rH   r   rN   rM   r   r%   rO   rQ   ÚfirstrP   rŽ   rd   rÿ   Úcommitr   ÚrollbackÚrefreshr}   r   r�   rc   re   )r  rG   r  rV   rµ   ÚexistingÚrows   &&&    r1   Úcreate_assignmentr   
  s-  é € ð ‡�˜/Ô)¨g¯l©l¸dÔ.BÜ˜CÐ!NÓOÐOØ—‘œ
 G§O¡OÓ4×4€DØ—F‘Fœ=¨'×*<Ñ*<Ó=×=€Gß—wÜ˜CÐ!<Ó=Ð=Ø—j‘j¤Ô(=Ó!>×!DÑ!DÜ×%Ñ%¨¯©Ñ8Ü×(Ñ(¨G×,>Ñ,>Ñ>Ü×"Ñ" g§l¡lÑ2ó"ó ÷ ÷ 	‰‹	—%‘%“'ð	 ÷
 Ø××ÐÜ ¨¯	©	 {°,¸w¿|¹|¸nÈDÐQX×QeÑQeÐPfÐ%gÓhÐhØ!ˆÔØ‰ä#¨G¯O©OÈ×HZÑHZØ)0¯©À%Ç-Á-ôQˆà
�‰ˆsŒðCØ�i‰i‹k×Ðð �*‰*�S‹/×ÐÜ s×'8Ñ'8À$Ç,Á,ÐZ^×ZcÑZcØ'+×'9Ñ'9È$Ï.É.Ø$+×$6Ñ$6ÀW×EYÑEYØ&-×&:Ñ&:È×H[ÑH[Ø!Ÿh™h°#·-±-ô	Að Aò1 5Ú=òñ 	øÜô CØ�k‰k‹m×ÑÜ˜CÐ!AÓBÐBðCúñ ùs“   ‚AKÁJÁ'KÁ<JÁ=KÂ	KÂBKÄ JÄ!'KÅ	KÅBKÇ J  Ç3JÇ4J  Ç8KÈKÈB	KÊKÊKÊJ  Ê KÊ>KÊ?KËKz/assignments/{assignment_id})r  c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r4   r   rG   r  )r   r   r   )r7   s   "r1   r8   r8   2  s&   € ÷ ñ Üðäðô ñr0   c              ƒ   ó<  "  € VP                  \        V 4      G R j  x€L
 pV'       g   \        RR4      hVP                  R8X  d   VP                  R8w  d   \        RR4      hVP                  V4      G R j  x€L
  VP                  4       G R j  x€L
  R #  Ly L  L
5i)Nr  zAssignment not foundrY   r)   rZ   z-QA Supervisors can only manage QA assignments)rï   r%   r   r\   rI   Údeleter  )r   rG   r  r  s   &&& r1   Údelete_assignmentr$  1  s~   é € ð —‘Ô,¨mÓ<×
<€CßÜ˜CÐ!7Ó8Ð8Ø‡�˜/Ô)¨c¯h©h¸$Ô.>Ü˜CÐ!PÓQÐQØ
�)‰)�C‹.×ÐØ
�)‰)‹+×Òñ =ñ
 Ùùs9   ‚BœB�B©ABÁ7BÁ8BÂBÂBÂBÂBz/my-stationsr†   r‡   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r4   rI   rG   rV   )rJ   r   r   )r7   s   "r1   r8   r8   B  s+   € ÷ jñ jÜ
ðjäðjô ñjr0   c           
   ƒ   óò  "  € VP                   R 8X  g   VP                   R8X  dÙ   V R8X  dÒ   \        \        4      P                  \        P                  R8H  4      pV R8X  d#   VP                  \        P
                  R8H  4      pVP                  VP                  \        P                  4      4      G Rj  x€L
 P                  4       P                  4       p\        T RV Uu. uF  p\        V4      NK  	  upR7      # \        WP                  V 4      G Rj  x€L
 p\        \        4      P                  \        P                  R8H  4      pV'       d0   VP                  \        P                  P!                  V4      4      pM4\#        W\$        V ,          R4      G Rj  x€L
 '       g   \        V R. R7      # V R8X  d+   V'       g#   VP                  \        P
                  R8H  4      pVP                  VP                  \        P                  4      4      G Rj  x€L
 P                  4       P                  4       p\        Y'       * V Uu. uF  p\        V4      NK  	  upR7      #  EL®u upi  ELU LÑ LXu upi 5i)rX   rY   r)   TN)rI   rw   rx   r[   F)r\   r   r   rO   rP   rf   rM   r  re   rQ   rR   ru   rÛ   rT   rH   rN   rî   r   r]   )rI   rG   rV   r  rx   r  r^   s   &&&    r1   Úmy_stationsr'  A  sÎ  é € ð ‡~�~˜Ô  T§^¡^°Ô%FÈ4ÐSWÌ<Ü”mÓ$×*Ñ*¬=×+BÑ+BÀdÑ+JÓKˆØ�4Œ<Ø—:‘:œm×7Ñ7¸4Ñ?Ó@ˆDØŸ*™* T§]¡]´=×3LÑ3LÓ%MÓN×N×WÑWÓY×]Ñ]Ó_ˆÜ $¸Ñ[cÓGdÑ[cÐVWÌÈqÎ	Ñ[cÑGdÔeÐeä)¨"¯l©l¸DÓA×A€HÜ”-Ó ×&Ñ&¤}×'>Ñ'>À$Ñ'FÓG€DßØ�z‰zœ-×2Ñ2×6Ñ6°xÓ@ÓA‰Ü& r´¸TÕ1BÀFÓK×KÖKÜ $¸ÈÔKÐKØˆt„|ŸHØ�z‰zœ-×3Ñ3°tÑ;Ó<ˆØ—j‘j §¡¬}×/HÑ/HÓ!IÓJ×J×SÑSÓU×YÑYÓ[€HÜ˜d´LÑ_gÓKhÑ_gÐZ[ÌFÐSTÎIÑ_gÑKhÔiÐiò OùÚGdâAñ Lñ KùÚKhùst   ‚B3I7Â5I#Â6+I7Ã!I&Ã5!I7ÄI+ÄBI7ÆI.Æ	I7Æ'I7ÇAI7ÈI0È/I7ÉI2É	I7É&I7É.I7É0I7É2I7z/stations/{station_id}/boardc                óH   € V ^8„  d   QhR\         R\        R\        R\        /# )r4   rN   rI   rG   rV   ©r   rJ   r   r   )r7   s   "r1   r8   r8   [  s6   € ÷ rñ rÜðrä
ðrô 	ðrô ñ	rr0   c              ƒ   óR  "  € \        W#W4      G R j  x€L
  VP                  \        V 4      G R j  x€L
 pV'       g   \        RR4      hRR lp\	        \
        \        \        P                  4      P                  \        \        P                  \
        P                  8H  4      P                  \        \        P                  \        P                  8H  4      p\	        \        \        \        P                  4      P                  \        \        P                  \        P                  8H  4      P                  \        \        P                  \        P                  8H  4      pVP                  \	        \        4      4      G R j  x€L
 P                  4       P!                  4        Uu/ uF  qˆP"                  VP$                  bK  	  p	pVP                  VP'                  \
        P"                  V 8H  \
        P(                  R8H  \
        P*                  R8H  4      P-                  \
        P.                  4      4      G R j  x€L
 P!                  4       p
V
 UUUu. uF  w  r¼qÕ! WÍVP.                  4      NK  	  ppppV Uu0 uF  qÿP                  kK  	  pp. pVP                  VP'                  \        P0                  V 8H  \        P*                  P3                  R4      4      P-                  \        P4                  4      4      G R j  x€L
 P!                  4        Fr  w  prÍVP                  V9  g   K  VP7                  VP                  4       VP9                  V! WÍVP4                  VV	P                  VP:                  R4      4      4       Kt  	  . pVP                  VP'                  \        P:                  V 8H  \        P*                  R8H  4      P-                  \        P<                  4      4      G R j  x€L
 P!                  4        FW  w  prÍVP                  V9  g   K  VP7                  VP                  4       VP9                  V! WÍVP<                  V4      4       KY  	  . pVP                  VP'                  \        P0                  V 8H  \        P*                  P3                  R4      \        P4                  \?        4       \A        ^R7      ,
          8¬  4      P-                  \C        \        P4                  4      4      4      G R j  x€L
 P!                  4        F†  w  prÍVP                  V9  g   K  VP7                  VP                  4       TP9                  T! YÍVP<                  ;'       g    VP4                  VV	P                  VP:                  R4      4      4       Kˆ  	  \E        VP                  \	        \        P                  4      PG                  4       4      G R j  x€L
 P                  4       P!                  4       4      pVP                  VP'                  \
        P"                  V 8H  \
        P(                  R	8H  \
        P.                  \?        4       \A        ^R7      ,
          8¬  \        PH                  R
8H  4      P-                  \C        \
        P.                  4      4      4      G R j  x€L
 P!                  4        Fi  w  r¼pVP                  V9  g   K  VP                  V9  g   K,  VP7                  VP                  4       VP9                  V! WÍVP.                  4      4       Kk  	  VPJ                  Ee   VP                  \	        \        4      P'                  \        PL                  R8H  \        PJ                  VPJ                  8  4      P-                  \C        \        PJ                  4      4      PO                  ^4      4      G R j  x€L
 P                  4       PQ                  4       pVP                  \	        \        \        P                  4      P                  \        \        P                  \        P                  8H  4      P'                  \        PH                  R
8H  4      4      G R j  x€L
 P!                  4       pV EFË  w  rÍVP                  V9   g   VP                  V9   d   K*  VP                  \	        \
        PR                  4      P'                  \
        P                  VP                  8H  \
        P*                  R8H  4      4      G R j  x€L
 PQ                  4       pV'       d   K®  VP                  \	        \
        4      P'                  \
        P                  VP                  8H  \
        P(                  R	8H  4      P-                  \C        \
        P.                  4      4      PO                  ^4      4      G R j  x€L
 P                  4       PQ                  4       pVf   Ve-   Vf   EKp  Vf   EKw  VP"                  VP"                  8X  g   EK•  TP9                  T! YÍV'       d   VP.                  MVPT                  4      4       EKÎ  	  VV,           V,           V,           p\W        Y V Uu. uF  qÿP                  NK  	  up4      G R j  x€L
 pV F$  pVP                  VP                  R4      Vn,        K&  	  VP                  \	        \Z        4      P'                  \Z        P"                  V 8H  \Z        PL                  R8H  4      P-                  \Z        P\                  4      PO                  ^È4      4      G R j  x€L
 P                  4       P!                  4       p\_        \a        V4      VPb                  TTTT\e        W 4      G R j  x€L
 V Uu. uF:  p\g        VPh                  VP\                  VPj                  VPl                  R7      NK<  	  upR7      #  ELÌ EL± E
Lcu upi  E	L²u upppi u upi  ELû EL EL  EL( EL] EL? ELž ELû ELOu upi  ELˆ LÜ L‘u upi 5i)Nr  úStation not foundc                 óÒ   € \        V P                  V P                  TV P                  ;'       g    R T\	        V4      \        V 4      V'       d   VP                  VR7	      # RVR7	      # )r’   N)	r•   r–   r—   r˜   r™   rš   rœ   r�   rž   )r‘   r•   r–   Úproduction_hold_statusrE   r>   rø   )r=   r—   r™   ÚhandoffÚ	next_names   &&&&&r1   Úchassis_rowÚ"station_board.<locals>.chassis_rowf  sd   € Ü r§}¡}ÀÇÁÐ[eØ(*×(AÑ(A×(KÐ(KÀVÐSXÜ,4°U«OÄiÐPRÃmß=D¨7¯>©>Ðbkômð 	mð KOÐbkômð 	mr0   ÚARRIVALÚ
AT_STATIONzend of lineÚRELEASED)r<   Ú
COMPLETIONÚWIPTr“   ©r£   rŽ   r¤   r¥   )rµ   r¶   r·   r¸   r¹   rº   r»   r¼   )NN)ÚAWAITING_QAÚ	QA_PASSED)r4  ÚRECEIVED)7r_   rï   r   r   r   r   r   r   Úmodel_numberrþ   r•   Ú	outerjoinÚmodel_idr&   rM   rQ   rR   rN   rd   rO   Ú
event_typerø   r  Ú
scanned_atÚfrom_station_idrî   Úcompleted_atrÿ   rð   Úto_station_idÚreleased_atr2   r   r   rK   ÚdistinctrÃ   re   rP   Úlimitr  Úlog_idÚhanded_to_production_atrû   r›   r   rŽ   r³   rÛ   Ústation_descriptionr  r¡   r£   r¤   Úunit_of_measurement)rN   rI   rG   rV   rµ   r0  ÚbaseÚhbaser  ÚnamesÚat_rowsÚlogr=   Úmnr·   Úcr   r¹   Úhr¸   rº   Úwith_handoffsÚprevÚwipÚopen_logÚlastÚeveryoneÚqar¼   Úps   &&&&                          r1   Ústation_boardrZ  Z  s	  é € ô   ¨*Ó
;×;Ð;Ø—F‘Fœ=¨*Ó5×5€GßÜ˜CÐ!4Ó5Ð5ômô Ô$¤mÔ5G×5TÑ5TÓUß‰T”-¤×!9Ñ!9Ô=N×=YÑ=YÑ!YÓZß‰YÔ)Ô+=×+FÑ+FÌ-×J`ÑJ`Ñ+`Óað 	ô Ô)¬=Ô:L×:YÑ:YÓZß‰d”=¤-×":Ñ":Ô>S×>^Ñ>^Ñ"^Ó_ß‰iÔ*Ô,>×,GÑ,GÌ=×KaÑKaÑ,aÓbð 
ð ;=¿*¹*ÄVÌMÓEZÓ:[×4[×3dÑ3dÓ3f×3jÑ3jÔ3lÓmÑ3l¨a�\‰\˜1Ÿ>™>Ò)Ñ3l€EÐmð —Z‘Z §
¡
Ü×$Ñ$¨
Ñ2Ü×$Ñ$¨	Ñ1Ü× Ñ  LÑ0ó!÷ �hÔ ×+Ñ+Ó,ó	.÷ .÷ 03©s«uð	 ñ
 JQÕQÉ¹+¸#À2�+˜b c§n¡nÖ5É€JÒQÙ",Ó-¡*˜Q�LŒL¡*€DÐ-ð €KØŸJ™J u§{¡{Ü×-Ñ-°Ñ;Ü×$Ñ$×(Ñ(Ð)EÓFó(÷ �hÔ$×1Ñ1Ó2ó4÷ 4÷ 69±S³Uò;‰	ˆˆ2ð �=‰= Ö$Ø�H‰H�R—]‘]Ô#Ø×Ñ™{¨2°1·>±>À1ÀeÇiÁiÐPQ×P_ÑP_ÐanÓFoÓpÖqñ;ð €EØŸJ™J u§{¡{Ü×+Ñ+¨zÑ9Ü×$Ñ$¨
Ñ2ó(÷ �hÔ$×0Ñ0Ó1ó3÷ 3÷ 58±C³Eò:‰	ˆˆ2ð �=‰= Ö$Ø�H‰H�R—]‘]Ô#Ø�L‰L™ R¨Q¯]©]¸AÓ>Ö?ñ:ð €NØŸJ™J u§{¡{Ü×-Ñ-°Ñ;Ü×$Ñ$×(Ñ(Ð)AÓBÜ×*Ñ*¬d«f´yÀaÔ7HÕ.HÑHó(÷ �hŒtÔ)×6Ñ6Ó7Ó8ó	:÷ :÷ <?¹3»5ò	A‰	ˆˆ2ð
 �=‰= Ö$Ø�H‰H�R—]‘]Ô#Ø×!Ñ!¡+¨b°a·m±m×6UÐ6UÀqÇ~Á~ÐWXÐZ_×ZcÑZcÐde×dsÑdsð  vCó  [Dó  #Eö  FñAô ˜rŸz™z¬&Ô1F×1QÑ1QÓ*R×*[Ñ*[Ó*]Ó^×^×gÑgÓi×mÑmÓoÓp€MØ Ÿj™j¨¯©Ü×$Ñ$¨
Ñ2Ü×$Ñ$¨Ñ4Ü×$Ñ$¬«´ÀÔ1BÕ(BÑBÜ×%Ñ%¨Ñ.ó	*÷
 �hŒtÔ%×0Ñ0Ó1Ó2ó4÷ 4÷
 69±S³Uò;‰ˆ�ð �=‰= Ö$¨¯©¸mÖ)KØ�H‰H�R—]‘]Ô#Ø×!Ñ!¡+¨b°c·n±nÓ"EÖFñ;ð ×ÑÓ&Ø—j‘j¤¬Ó!6×!<Ñ!<Ü×#Ñ# tÑ+¬]×-FÑ-FÈ×I\ÑI\Ñ-\ó"
ç
‰(”4œ×1Ñ1Ó2Ó
3·E±E¸!³Hó>÷ >ç?F¹w»yÏÉËð 	ð —Z‘ZÜ”=Ô"4×"AÑ"AÓBß‰YÔ)Ô+=×+FÑ+FÌ-×J`ÑJ`Ñ+`Óaß‰U”=×0Ñ0°EÑ9Ó:ó
÷ 
÷ ‰3‹5ð	 	ô
 ‰FˆBØ�}‰} Ô$¨¯©¸Ô(FÙØ Ÿj™j¬Ô0A×0HÑ0HÓ)I×)OÑ)OÜ!×,Ñ,°·±Ñ=Ô?P×?WÑ?WÐ[gÑ?gó*ó ÷ ç‘“ð ÷ ÙØŸ*™*¤VÔ,=Ó%>×%DÑ%DÜ!×,Ñ,°·±Ñ=Ô?P×?[Ñ?[Ð_kÑ?kó&ç‰h”tÔ-×8Ñ8Ó9Ó:¿5¹5À»8óE÷ EçFMÁgÃi×PUÑPUÓPWð ð ’ ¢°4Õ3CÈÕHXÐ]a×]lÑ]lÐpt×pÑp×]Ø—‘™[¨ÇD°·²Èb×NhÑNhÓi×jñ ð ˜EÕ! KÕ/°.Õ@€HÜ˜"ÁÓ*JÁ¸A¯<¬<ÁÑ*JÓK×	K€BÛˆØ—f‘f˜QŸ\™\¨=Ó9ˆŽñ ð —:‘:œf¤XÓ.×4Ñ4Ü×Ñ˜zÑ)¬8×+=Ñ+=ÀÑ+Eóç�hŒx�}‰}ÓŸe™e C›jó*÷ *ç+2©7«9·S±S³Uð 
ô Ü�w“¨W×-HÑ-HØ U¸ÐTbÜ& rÓ6×6ÙkpÓqÑkpÐfgŒw˜QŸW™W¨1¯6©6¸1¿9¹9È1×K`ÑK`×aÑkpÑqô	ð òO <Ú5ò  5\ùÒmò.ùô
 RùÚ-ò4ò3ò:ò _ò4ò>ò
òò
Eùò +KÒ	Kñ*ñ 7ùÚqùs­  ‚p'’o“p'°o!±p'½Ep'Æo$Æ"p'Æ$o'ÇA7p'È:o,È;p'Éo/É1p'É9o6ÊA3p'Ì o;Ì&p'Ì,Cp'Ï.o>Ï/&p'ÐC'p'ÔpÔ&p'Ô-;p'Õ)A3p'×p×Cp'Ú*pÚ+&p'Ûp'Û)C"p'ßp
ßB#p'á/pá0B%p'äpäp'ä0Bp'çpç)p'ç4p'ç;p'èAp'é5pê	
p'êpêB-p'ípíAp'îp îp'îA p"ï	p'ï!p'ï$p'ï'p'ï/p'ï>p'ðp'ðp'ðp'ð
p'ðp'ðp'ðp'ðp'ðp'ð p'ð"p'z+/stations/{station_id}/chassis/{chassis_no}c          
      óT   € V ^8„  d   QhR\         R\        R\        R\        R\        /# )r4   rN   r–   rI   rG   rV   r)  )r7   s   "r1   r8   r8   Ñ  sA   € ÷ Wñ WÜðWäðWô ðWô 	ð	Wô
 ñWr0   c              ƒ   óx  "  € \        W4W4      G R j  x€L
  VP                  \        V 4      G R j  x€L
 pV'       g   \        RR4      hVP	                  \        \        4      P                  \        P                  ! \        P                  4      VP                  4       P                  4       8H  4      4      G R j  x€L
 P                  4       P                  4       pV'       g   \        RRV R24      hVP                  '       d)   VP                  \        VP                  4      G R j  x€L
 MR pVP                   '       d)   VP                  \"        VP                   4      G R j  x€L
 MR pVP$                  '       d)   VP                  \        VP$                  4      G R j  x€L
 MR p	VP	                  \        \&        4      P                  \&        P(                  VP(                  8H  \&        P*                  V 8H  4      P-                  \/        \&        P0                  4      4      P3                  ^4      4      G R j  x€L
 P                  4       P                  4       p
V
'       d1   V
P4                  R8X  d    V
P6                  R8X  d   RV
P0                  rËMV
'       d   RR rËMRR rËVP8                  R	8H  p\;        W0VP(                  .4      G R j  x€L
 P                  VP(                  R
4      pVP	                  \        \<        4      P                  \<        P(                  VP(                  8H  \<        P>                  V 8H  \<        P4                  R8g  4      P-                  \/        \<        P@                  4      4      P3                  ^4      4      G R j  x€L
 P                  4       P                  4       pR R ppV'       go   VPB                  R-9   d^   VR8X  d   RpMSVR8X  g!   V'       dE   VP4                  R8X  d4   VR8X  d-    \D        PF                  ! W6P(                  V4      G R j  x€L
  RpVP	                  \        \J        PL                  4      P                  \J        P(                  VP(                  8H  \J        P4                  R8H  4      4      G R j  x€L
 P                  4       PO                  4       pVP	                  \        \P        \R        4      PU                  \R        \R        PV                  \P        PV                  8H  4      P                  \P        P(                  VP(                  8H  \P        P*                  V 8H  4      P-                  \R        PX                  4      4      G R j  x€L
 PO                  4       pV'       d‰   V UUu. uFy  w  pp\[        VPV                  VPX                  VP\                  VP^                  \a        VPb                  ;'       g    ^ 4      \a        VPd                  ;'       g    ^ 4      R7      NK{  	  pppMæVP	                  \        \R        4      P                  \R        P*                  V 8H  \R        Pf                  R8H  4      P-                  \R        PX                  4      P3                  ^È4      4      G R j  x€L
 P                  4       PO                  4       pV Uu. uF:  p\[        VPV                  VPX                  VP\                  VP^                  R7      NK<  	  pp\i        R./ RVP(                  bRVP                  bRV'       d   VPj                  MR bRVPl                  bRV'       d   VPX                  MR bRVPB                  bRVP8                  ;'       g    RbR\o        V4      bRV	'       d   V	Pp                  MR bRV	'       d   V	Pr                  MR bRVbR VbR!\u        V4      bR"VPv                  bR#VbR$VbR%V'       d   VP4                  MR bR&V'       d)   \D        Pp                  ! W?Px                  4      G R j  x€L
 MR bR'\{        T;'       d    VP4                  R(8H  4      bR)\}        V4      bR*VbR+\        W04      G R j  x€L
 bR,Vb #  ELM EL2 EL« EL@ EL ELÎ EL8 ELª ELê ELY  \         d   pTPH                  p R p?ELrR p?ii ; i EL ELCu uppi  EL*u upi  L¨ Lb5i)/Nr  r+  z	Chassis 'z' not foundr3  r2  Ú	COMPLETEDÚNOT_ARRIVEDÚON_HOLDr“   Ú
SUPERSEDEDÚCOMPLETEr8  râ   ÚCHECK_INÚACTIVE)r£   rŽ   r¤   r¥   r¦   r§   Tr7  r•   r–   r—   rÁ   rÂ   rÃ   r˜   r’   rÄ   rÅ   rÆ   rÇ   rÈ   rš   rg   rÉ   rÊ   r�   rž   rË   r9  rœ   r¼   r»   r›   )r6  Ú
CHASSIS_INr/   )@r_   rï   r   r   rM   r   r   rO   r   Úlowerr–   ÚstriprQ   r  r=  r   Ú	dealer_idr   Úcurrent_station_idr   r•   rN   r  r   r?  rE  rø   r>  r-  rû   r&   r@  rA  rÃ   r'   Úcheck_arrivalÚdetailr    Úhold_reasonrR   r!   r   rþ   r£   rŽ   r¡   r¤   rI  r¨   r¦   r§   rP   r¿   r;  rÁ   Úlistrd   re   rE   rÚ   rB  ri   r>   r  )rN   r–   rI   rG   rV   rµ   r=   ÚmodelÚdealerÚcurrentÚ	last_hereÚstateÚarrivedÚon_holdÚqa_hereÚ	from_hererÉ   rÊ   ÚexcÚholdsÚsnapr  rå   r¼   rS   rY  s   &&&&&                     r1   Úchassis_at_stationry  Ð  s	  é € ô   ¨*Ó
;×;Ð;Ø—F‘Fœ=¨*Ó5×5€GßÜ˜CÐ!4Ó5Ð5Ø—
‘
œ6¤-Ó0×6Ñ6Ü�
Š
”=×+Ñ+Ó,°
×0@Ñ0@Ó0B×0HÑ0HÓ0JÑJóó ÷ ç‰‹	—%‘%“'ð ÷ Ü˜C 9¨Z¨L¸Ð!DÓEÐEà=?¿[¿[¸[�"—&‘&Ô+¨R¯[©[Ó9×9Ð9Èd€EØ;=¿<¿<¸<�2—6‘6œ.¨"¯,©,Ó7×7Ð7ÈT€FØDF×DY×DYÐDY�B—F‘Fœ=¨"×*?Ñ*?Ó@×@Ð@Ð_c€Gà—z‘z¤&Ô):Ó";×"AÑ"AÜ×$Ñ$¨¯©Ñ5Ô7H×7SÑ7SÐWaÑ7aó#ç�hŒtÔ%×0Ñ0Ó1Ó2·5±5¸³8ó=÷ =ç>E¹g»iÏÉËð ÷ �Y×%Ñ%¨Ô5¸)×:NÑ:NÐR[Ô:[Ø% y×';Ñ';‰wß	Ø$ d‰wà&¨ˆwà×'Ñ'¨9Ñ4€GÜ °·±°Ó@×@×EÑEÀbÇmÁmÐUbÓc€Gð —z‘z¤&Ô)>Ó"?×"EÑ"EÜ×(Ñ(¨B¯M©MÑ9Ü×-Ñ-°Ñ;Ü×$Ñ$¨Ñ4ó#÷ �hŒtÔ)×6Ñ6Ó7Ó8¿¹¸q»ó	C÷ C÷ ELÁGÃIÏeÉeËgð	 ð #'¨�€Kß�r×)Ñ)Ð-BÔBØ�LÔ Ø$‰KØ�mÔ#¯	°i×6FÑ6FÈ-Ô6WÐ\cÐgoÔ\oð,Ü×(Ò(¨¯]©]¸GÓD×DÐDØ(�ð —:‘:œf¤^×%?Ñ%?Ó@×FÑFÜ×!Ñ! R§]¡]Ñ2´N×4IÑ4IÈXÑ4Uóó ÷ ç‰‹	—#‘#“%ð 
ð —*‘*ÜÔ!¤8Ó,×1Ñ1´(¼H¿N¹NÔN`×NfÑNfÑ<fÓgß	‰Ô!×,Ñ,°·±Ñ=Ô?Q×?\Ñ?\Ð`jÑ?jÓ	kß	‰”(—-‘-Ó	 ó÷ ÷ �sƒuð	 	÷
 áosôuÙosÑgkÐghÐjkô ˜qŸw™w¨Q¯V©V¸Q¿Y¹YÈQ×MbÑMbÜ"'¨¯
©
¯¨°aÓ"8ÄuÈQÏ^É^×M`ÐM`Ð_`ÓGa÷cÙosð 	ñ uˆð —j‘j¤¬Ó!1×!7Ñ!7Ü×Ñ :Ñ-¬x×/AÑ/AÀTÑ/Ió"
ç
‰(”8—=‘=Ó
!§%¡%¨£*ó.÷ .ç/6©w«y¿¹»ð 	ñ nrÓrÑmqÐhi”˜qŸw™w¨Q¯V©V¸Q¿Y¹YÈQ×MbÑMb×cÑmqˆÐräò Ø—=’=ðØ-/¯]ª]ðç).�5×%Ò%°DøðàDFÇLÂLð÷ $*�F—K’K¨tøðð FH×EWÒEWðð ×-Ñ-×7Ð7°øð	ô GKÈ5Äkð	÷
 6=˜W×1Ò1À$øð÷ 4;˜G×/Ò/Àøðñ ðñ &-ðô ?GÀwÔ>Oðð ×6Ò6ðñ EPðñ &ð÷ ,5�y×'Ò'¸$øð÷ S\¤× 1Ò 1°"×6MÑ6MÓ N×NÐNÐaeøðô ˜×FÐF y×'7Ñ'7¸;Ñ'FÔGðô ˜2”ðñ ðô (4°BÓ'C×!CÐ!Cðñ ðð òA <Ú5òò :Ú7Ú@ò=ò AòCò Eøä ô ,Ø!$§¡–ûð,úòòùóuò.ùò sñ Oñ "Dùs¯  ‚b:’a“b:°a"±b:½A=b:Â:a%Â;'b:Ã#!b:Ä#b:Ä(a(Ä)b:Å#b:Å$a+Å%b:Å=#b:Æ a.Æ!Bb:È9a1È:'b:É"7b:Ê0b:Ë
a4ËCb:Îa7ÎAb:Ï$b:Ï=$a= Ð!a:Ð"a= Ð(A'b:Òb"ÒCb:Õ"b%Õ#b:Õ=b:ÖAb(×b(×1b(ØBb:Úb.Ú$b:Ú)A b1Û)Ab:Ü9.b:Ý(.b:ÞAb:ß*#b:àb6àb:à#2b:áb8á
b:á"b:á%b:á(b:á+b:á.b:á1b:á4b:á7b:á:a= á=bâbâb:âbâb:â%b:â(b:â1b:â8b:z3/stations/{station_id}/chassis/{chassis_id}/releasec          
      óT   € V ^8„  d   QhR\         R\         R\        R\        R\        /# )r4   rN   r•   r  rG   rV   )r   rÎ   r   r   )r7   s   "r1   r8   r8   ,  sA   € ÷ Uñ UÜðUäðUô ðUô 	ð	Uô
 ñUr0   c              ƒ  óü   "  € \        W4V R4      G Rj  x€L
  \        P                  ! W1WP                  VP                  4      G Rj  x€L
 w  rVVP                  4       G Rj  x€L
  \        RV 2VR7      #  Lb L0 L5i)zRQA passes the chassis on: it now shows at the next station, which can check it in.r)   Nz
Passed to )rÕ   rž   )r_   r'   ÚreleaserH   rÐ   r  rÓ   )rN   r•   r  rG   rV   rù   r/  s   &&&&&  r1   Úrelease_to_next_stationr}  +  si   é € ô   ¨*°dÓ
;×;Ð;ÜŸš b°jÇ,Á,ÐPW×P_ÑP_Ó`×`�L€AØ
�)‰)‹+×ÐÜ 
¨9¨+Ð6È)ÔTÐTñ <Ù`Ùùs3   ‚A<“A6”3A<ÁA8ÁA<Á!A:Á"A<Á8A<Á:A<)r(   r)   )ZÚ__doc__r   r   r   r   Útypingr   r   Úuuidr   Úfastapir	   r
   r   r   Úpydanticr   r   Ú
sqlalchemyr   r   r   Úsqlalchemy.excr   Úsqlalchemy.ext.asyncior   Úapp.core.databaser   Úapp.core.securityr   r   r   Úapp.models.core_modelsr   Úapp.models.rm_modelsr   r   Úapp.models.yard_modelsr   r   Úapp.models.sales_modelsr   Úapp.models.production_modelsr   r    Úapp.models.procurement_modelsr!   Úapp.models.qa_modelsr"   r#   r$   Úapp.models.station_work_modelsr%   r&   Úapp.modules.station_workr'   ÚrouterÚROLESr]   r2   r>   rE   rT   r_   ra   ru   r}   r…   rŒ   r‘   r¡   r«   r³   r¿   rÎ   rÓ   rÛ   rû   r  rï   r
  r  Úpostr   r#  r$  r'  rZ  ry  r}  r/   r0   r1   Ú<module>r”     s#  ðñ÷ 9Ó 8ß !Ý ç <Ó <ß %ß )Ñ )Ý )Ý /å $ß WÑ WÝ -ß 8ß DÝ 2ß JÝ <ß aÑ aß WÝ )á	‹€à€Ø˜<¨¨tÐ4€ò&õNõQõ
õHô")�9ô )ô!�Iô !ô�Iô ô6�yô 6ô$�	ô $ô
,�9ô 
,ô)ˆiô )ô�iô ô�iô ô#˜)ô #ô4"�	ô "ô�ô õ
Cõõ0ð" ‡�ˆH T¨)¥_€Ó5Ù(/°«¹7ÑCUÐVaÐciÓCjÓ;kö {ó 6ð{ð
 ‡�ˆN¨4°Õ+>€Ó?à!%Ù˜v“ÙÑ  ¨fÓ5Ó6ö!ó @ð!ð" ‡�ˆ^¨MÀs€ÓKñ ˜v“ÙÑ 2°;ÀÓ GÓHö#Aó Lð#AðL ‡�Ð-¸3€Ó?ñ ˜v“ÙÑ 2°;ÀÓ GÓHöó @ðð ‡�ˆN¨=€Ó9á�jÐ*;Ô<Ù˜v“ÙÐ/Ó0öjó :ðjð0 ‡�Ð*¸?€ÓKñ �jÐ*;Ô<Ù˜v“ÙÐ/Ó0ö	ró Lðrðj ‡�Ð9ÐJ]€Ó^ñ �jÐ*;Ô<Ù˜v“ÙÐ/Ó0öWó _ðWðt ‡�ÐBÐS]€Ó^ñ
 ˜v“ÙÐ/Ó0öUó _òUr0   