+
    `Øj?  ã                   óê   € ^ RI t ^ RIHtHtHt ^ RIHt ^ RIHt ^ RIH	t	H
t
Ht ^ RIHtHtHtHt ^ RIHtHtHtHt ^ RIHtHt ^ R	IHtHt R
 R ltR R ltRR R llt^ RIH t  R R lt!R R lt"R# )é    N)ÚdatetimeÚ	timedeltaÚtimezone)ÚHTTPException)ÚAsyncSession)ÚselectÚfuncÚcase)ÚVendorMasterÚRmPurchaseOrderÚRmReceivingLogÚ	GrnDetail)ÚVendorPortalLogÚVendorPortalActionLogÚRejectionLogÚNCRLog)Úverify_passwordÚcreate_access_token)ÚVendorLoginRequestÚVendorLoginResponsec          
      óT   € V ^8„  d   QhR\         R\        R\        R\        R\        /# )é   ÚdbÚreqÚipÚ
user_agentÚreturn)r   r   Ústrr   )Úformats   "ÚC/var/www/html/audi_dev/backend/app/modules/vendor_portal/service.pyÚ__annotate__r!      s2   € ÷ %ñ %¤,ð %Ô5Gð %ÌSð %Ô^að %Ôfyñ %ó    c              ƒ   óú  "  € V P                  \        \        4      P                  \        P                  VP                  8H  4      P                  \        P
                  R 8H  4      P                  \        P                  R 8H  4      4      G Rj  x€L
 pVP                  4       pV'       d   VP                  '       g   \        RRR7      h\        VP                  VP                  4      '       g   \        RRR7      h\        \        P                  ! 4       P                  4      p\!        VP"                  VVV\$        P&                  ! \(        P*                  4      \-        ^R7      ,           R7      pV P/                  V4       V P1                  4       G Rj  x€L
  R\        VP"                  4      R	R
R\        VP2                  4      /p\5        V4      p	\7        V	VP"                  VP8                  R7      #  ELh Lb5i)TNi‘  z)Invalid credentials or portal not enabled)Ústatus_codeÚdetailzInvalid credentials)Údays)Ú	vendor_idÚsession_tokenÚ
ip_addressr   Ú
expires_atÚsubÚsub_typeÚvendorÚ
session_id)Úaccess_tokenr'   Úvendor_name)Úexecuter   r   ÚwhereÚportal_usernameÚportal_enabledÚ	is_activeÚscalar_one_or_noneÚportal_password_hashr   r   Úportal_passwordr   ÚuuidÚuuid4Úhexr   r'   r   Únowr   Úutcr   ÚaddÚcommitÚlog_idr   r   Úname)
r   r   r   r   Úvendor_resultr-   r(   Ú	log_entryÚtoken_payloadr/   s
   &&&&      r    Úauthenticate_vendorrE      sˆ  é € ØŸ*™*ÜŒ|Óß	‰Œ|×+Ñ+¨s×/BÑ/BÑBÓ	Cß	‰Œ|×*Ñ*¨dÑ2Ó	3ß	‰Œ|×%Ñ%¨Ñ-Ó	.ó	÷ €Mð ×-Ñ-Ó/€Fß˜×4×4Ð4Ü¨Ð4_Ô`Ð`ä˜3×.Ñ.°×0KÑ0K×LÒLÜ¨Ð4IÔJÐJô œŸ
š
›×(Ñ(Ó)€MÜØ×"Ñ"Ø#ØØÜ—<’<¤§¡Ó-´	¸rÔ0BÕBô€Ið ‡F�Fˆ9ÔØ
�)‰)‹+×Ðð 	Œs�6×#Ñ#Ó$Ø�HØ”c˜)×*Ñ*Ó+ð€Mô
 ' }Ó5€LäØ!Ø×"Ñ"Ø—K‘Kôð òAñ. ùs2   ‚BG;ÂG6ÂG;Â+G;Â=CG;ÆG9ÆA G;Ç9G;c                óD   € V ^8„  d   QhR\         R\        P                  /# )r   r   r.   )r   r9   ÚUUID)r   s   "r    r!   r!   3   s   € ÷ ñ œLð ´d·i±iñ r"   c              ƒ   óè   "  € V P                  \        V4      G R j  x€L
 pV'       dD   \        P                  ! \        P
                  4      Vn        V P                  4       G R j  x€L
  R # R #  LQ L
5i)N)Úgetr   r   r<   r   r=   Úinvalidated_atr?   )r   r.   rC   s   && r    Úlogout_vendorrK   3   sN   é € Ø—f‘fœ_¨jÓ9×9€IßÜ#+§<¢<´·±Ó#=ˆ	Ô Ø�i‰i‹k×Òñ ñ :ñ 	ùs&   ‚A2œA.�A2©<A2Á%A0Á&	A2Á0A2c                ó”   € V ^8„  d   QhR\         R\        P                  R\        R\        R\        P                  R\        R\        /# )r   r   r'   Úaction_typeÚentity_typeÚ	entity_idÚdetailsr   )r   r9   rG   r   Údict)r   s   "r    r!   r!   9   s\   € ÷ 
ñ 
¤ð 
¼¿¹ð 
ÔQTð 
Ôcfð 
Ôz~÷  {Dñ  {Dð 
ô  VZð 
ô  gjñ 
r"   c           	   ƒ   ó†   "  € \        VVVVVVR 7      pV P                  V4       V P                  4       G Rj  x€L
  R#  L5i))r'   rM   rN   rO   Úaction_detailsr)   N)r   r>   r?   )r   r'   rM   rN   rO   rP   r   Ú
action_logs   &&&&&&& r    Úlog_vendor_actionrU   9   s>   é € Ü&ØØØØØØô€Jð ‡F�Fˆ:ÔØ
�)‰)‹+×Ôùs   ‚6A¸?¹A)ÚDecimalc          
      ó�   € V ^8„  d   QhR\         R\        P                  R\        P                  R\        P                  R\
        /# )r   r   r'   Ú
start_dateÚend_dater   )r   r9   rG   r   ÚdaterQ   )r   s   "r    r!   r!   H   sM   € ÷ Mñ M¤ð M¼$¿)¹)ð MÔQY×Q^ÑQ^ð MÔjr×jwÑjwð Mô  }Añ Mr"   c              ƒ   óâ  "  € \        \        P                  ! \        P                  4      P                  R 4      \        P                  ! \        \        P                  \        P                  8*  ^3^ R7      4      P                  R4      \        P                  ! \        P                  \        P                  ,
          4      P                  R4      4      P                  \        4      P                  \        \        P                  \        P                  8H  4      P!                  \        P"                  V8H  4      P!                  \        P                  V8¬  4      P!                  \        P                  V8*  4      pV P%                  V4      G Rj  x€L
 pVP'                  4       pVP(                  ;'       g    ^ pVP*                  '       d   \-        VP*                  4      M^ pVP.                  p	\1        V	R4      '       d   \3        V	P4                  4      p
M$V	e   \3        \7        V	4      4      p
M\3        R4      p
\        \        P                  ! \8        P:                  4      P                  R 4      \        P                  ! \        \        P<                  ! \8        P>                  ^ 4      ^ 8H  ^3^ R7      4      P                  R4      4      P                  \8        4      P                  \        \8        P                  \        P                  8H  4      P!                  \        P"                  V8H  4      P!                  \        P                  V8¬  4      P!                  \        P                  V8*  4      pV P%                  V4      G Rj  x€L
 pVP'                  4       pVP(                  ;'       g    ^ pVP@                  '       d   \-        VP@                  4      M^ p\        \        P                  ! \B        PD                  4      4      P!                  \B        P"                  V8H  4      P!                  \        PF                  ! \B        PH                  4      V8¬  4      P!                  \        PF                  ! \B        PH                  4      V8*  4      pV P%                  V4      G Rj  x€L
 PK                  4       ;'       g    ^ p\        \        P                  ! \L        PN                  4      4      P!                  \L        P"                  V8H  4      P!                  \        PF                  ! \L        PH                  4      V8¬  4      P!                  \        PF                  ! \L        PH                  4      V8*  4      pV P%                  V4      G Rj  x€L
 PK                  4       ;'       g    ^ pV^ 8”  d,   \3        V4      \3        V4      ,          \3        R4      ,          M
\3        R4      pV^ 8”  d,   \3        V4      \3        V4      ,          \3        R4      ,          M
\3        R4      pR	\P        PR                  ! 4       R
VRVRVRVRVRVRVRVRV
R\U        V^4      R\U        V^4      /#  ELÔ ELÞ ELÄ Là5i)Útotal)Úelse_Úon_timeÚavg_lead_timeNr&   z0.0Ú
first_passz100.0Úscorecard_idÚperiod_startÚ
period_endÚdeliveries_totalÚdeliveries_on_timeÚbatches_totalÚbatches_first_passÚrejection_countÚ	ncr_countÚavg_lead_time_daysÚon_time_pctÚfirst_pass_pct)+r   r	   Úcountr   Úgrn_idÚlabelÚsumr
   Úreceived_dater   Úexpected_delivery_dateÚavgÚ
order_dateÚselect_fromÚjoinÚpo_idr2   r'   r1   Úoner\   r^   Úintr_   ÚhasattrrV   r&   Úfloatr   Úgrn_detail_idÚcoalesceÚrejected_qtyr`   r   Úrejection_idrZ   Ú
created_atÚscalarr   Úncr_idr9   r:   Úround)r   r'   rX   rY   Údel_stmtÚdel_resÚdel_rowrd   re   Úavg_lead_time_valrj   Ú
batch_stmtÚ	batch_resÚ	batch_rowrf   rg   Úrej_stmtrh   Úncr_stmtri   rk   rl   s   &&&&                  r    Úget_live_scorecardr�   H   s¼  é € äÜ�
Š
”>×(Ñ(Ó)×/Ñ/°Ó8Ü�ŠÜ”.×.Ñ.´/×2XÑ2XÑXÐZ[Ð\ÐdeÔfó	
ç
‰%�	Ó
Ü�Š”×-Ñ-´×0JÑ0JÕJÓK×QÑQÐRaÓbó÷ �k”.Ó!§$¡$¤¼×8LÑ8LÔP_×PeÑPeÑ8eÓ"fß�eŒN×$Ñ$¨	Ñ1Ó2ß�eŒN×(Ñ(¨JÑ6Ó7ß�eŒN×(Ñ(¨HÑ4Ó5ð ð —J‘J˜xÓ(×(€GØ�k‰k‹m€Gà—}‘}×)Ð)¨ÐØ18··°œ˜WŸ_™_Ô-ÀaÐð  ×-Ñ-ÐÜÐ  &×)Ò)Ü$Ð%6×%;Ñ%;Ó<ÑØ	Ò	&Ü$¤UÐ+<Ó%=Ó>Ñä$ U›^Ðô Ü�
Š
”9×*Ñ*Ó+×1Ñ1°'Ó:Ü�ŠÜ”$—-’-¤	× 6Ñ 6¸Ó:¸aÑ?ÀÐCÈ1ÔMó	
ç
‰%�Ó
ó	÷
 �k”)ÓŸT™T¤.´)×2BÑ2BÄn×F[ÑF[Ñ2[Ó\ß�eŒN×$Ñ$¨	Ñ1Ó2ß�eŒN×(Ñ(¨JÑ6Ó7ß�eŒN×(Ñ(¨HÑ4Ó5ð ð —j‘j Ó,×,€IØ—‘“€Ià—O‘O×(Ð( q€MØ6?×6J×6JÐ6Jœ˜Y×1Ñ1Ô2ÐPQÐô ”d—j’j¤×!:Ñ!:Ó;Ó<ß	‰Œ|×%Ñ%¨Ñ2Ó	3ß	‰Œt�yŠyœ×0Ñ0Ó1°ZÑ?Ó	@ß	‰Œt�yŠyœ×0Ñ0Ó1°XÑ=Ó	>ð ð  ŸZ™Z¨Ó1×1×9Ñ9Ó;×@Ð@¸q€Oô ”d—j’j¤§¡Ó/Ó0ß	‰Œv×Ñ 9Ñ,Ó	-ß	‰Œt�yŠyœ×*Ñ*Ó+¨zÑ9Ó	:ß	‰Œt�yŠyœ×*Ñ*Ó+¨xÑ7Ó	8ð ð —z‘z (Ó+×+×3Ñ3Ó5×:Ð:¸€Ià`pÐstÔ`t”'Ð,Ó-´Ð8HÓ0IÕIÌGÐT[ÓL\Ö\ô  {Bð  CHó  {I€KØ`mÐpqÔ`q”WÐ/Ó0´7¸=Ó3IÕIÌGÐT[ÓL\Ö\Ôw~ð  @Eó  xF€Nð 	œŸ
š
›Ø˜
Ø�hØÐ,ØÐ0Ø˜ØÐ0Ø˜?Ø�YØÐ0Ø”u˜[¨!Ó,Øœ% °Ó2ðð òg )ò8 -ò 2ñ ,ùsp   ‚FY/ÆY$Æ&Y/Æ8Y/ÇF<Y/Î	Y'Î
&Y/Î1Y/ÏC Y/Ò&Y*Ò'Y/Ó CY/ÖY-ÖY/Ö&B?Y/Ù'Y/Ù*Y/Ù-Y/c                ó0   € V ^8„  d   QhR\         R\        /# )r   r   r   )r   r   )r   s   "r    r!   r!   —   s   € ÷ 'ñ '¤,ð '´3ñ 'r"   c              ƒ   óÊ   "  € \         P                  ! 4       P                  R 4      p\        P                  ! 4       P
                  R,          P                  4       pRV RV 2# 5i)z%Y%m%d:Né   NzASN-Ú-)r   ÚutcnowÚstrftimer9   r:   r;   Úupper)r   Údate_strÚhex_strs   &  r    Úgenerate_asn_numberr—   —   sN   é € Ü�ŠÓ ×)Ñ)¨(Ó3€HÜ�jŠj‹l×Ñ˜rÕ"×(Ñ(Ó*€GØ�(�˜1˜W˜IÐ&Ð&ùs   ‚A!A#)NNNN)#r9   r   r   r   Úfastapir   Úsqlalchemy.ext.asyncior   Ú
sqlalchemyr   r	   r
   Úapp.models.rm_modelsr   r   r   r   Úapp.models.vendor_portalr   r   r   r   Úapp.core.securityr   r   Ú!app.modules.vendor_portal.schemasr   r   rE   rK   rU   ÚdecimalrV   r�   r—   © r"   r    Ú<module>r¡      sM   ðÛ ß 2Ñ 2Ý !Ý /ß )Ñ )ç YÓ Yß aÓ aß Bß Uõ%õN÷
õ õM÷^'r"   