ó
    œ¯AiU'  ã                   óN   • S SK Jr  S SKJrJrJr  S SKJr  S SKr " S S\5      r	g)é    )ÚBaseCommand)Úcatch_up_work_balances_for_userÚschedule_catch_up_balancesÚnormalize_user_id)ÚStampNc                   ó$   • \ rS rSrSrS rS rSrg)ÚCommandé   z…Manually trigger balance catch-up task. This will recalculate balances for users, including dates with 0.0 balances that have stamps.c                 ó”   • UR                  S[        SS9  UR                  SSSS9  UR                  SSS	S9  UR                  S
SSS9  g )Nz	--user-idzSSpecific user ID to recalculate balances for (if not provided, processes all users))ÚtypeÚhelpz--asyncÚ
store_truez>Run asynchronously via Celery (default: synchronous execution))Úactionr   z--all-usersz?Process all users with stamps (uses schedule_catch_up_balances)z	--verbosezShow detailed output)Úadd_argumentÚstr)ÚselfÚparsers     ÚFD:\TimeStamps\worktimeservice\management\commands\catch_up_balances.pyÚadd_argumentsÚCommand.add_arguments
   sx   € Ø×ÑØÜØfð 	ñ 	
ð
 	×ÑØØØQð 	ñ 	
ð
 	×ÑØØØRð 	ñ 	
ð
 	×ÑØØØ'ð 	ò 	
ó    c                 óP  • UR                  SS 5      nUR                  SS5      nUR                  SS5      nUR                  SS5      nU(       aL  [        U5      nXs:w  a;  U R                  R                  U R                  R                  SU SU S35      5        OS nU(       Ga…  U(       Ga  U R                  R                  U R                  R                  S	5      5        U R                  R                  S
5         [        R                  " 5       nU R                  R                  S5        U R                  R                  U R                  R                  S5      5        U R                  R                  SUR                   35        U R                  R                  S5        U R                  R                  S5        g U R                  R                  U R                  R                  S5      5        U R                  R                  S5        U R                  R                  S5         [        5       nU(       a¹  U R                  R                  S5        U R                  R                  U R                  R                  S5      5        U R                  R                  S5        U R                  R                  S5        U R                  R                  [        R                   " US[        S95        g U R                  R                  U R                  R                  S5      5        g U(       Ga  U(       Ga  U R                  R                  U R                  R                  SU S35      5        U R                  R                  S
5         ["        R                  " U5      nU R                  R                  S5        U R                  R                  U R                  R                  S5      5        U R                  R                  SUR                   35        U R                  R                  S5        U R                  R                  S5        g U R                  R                  U R                  R                  SU S35      5        U R                  R                  S5        U R                  R                  S5         U(       a  U R                  R                  SU 35        ["        R$                  " U/S 9nUR'                  5       (       a¢  UR(                  nU R                  R                  U R                  R                  S!U 35      5        U(       aW  SS Kn
[+        U[        5      (       a>  U R                  R                  U
R-                  [/        U5      XÝR0                  5      5        g UR(                  nU(       a6  U R                  R                  S"U(       a  UR                  S#5      OS$ 35        U(       GaV  U R                  R                  S5        U R                  R                  U R                  R                  S5      5        U R                  R                  S5        U R                  R                  S5        U R                  R                  [        R                   " US[        S95        UR                  S%5      (       a‡  U R                  R                  S5        U R                  R                  U R                  R                  S&5      5        UR                  S%/ 5       H!  nU R                  R                  S'U 35        M#     g g UR                  S#S(5      nUS):X  aþ  UR                  S*S5      nUR                  S+S5      nU R                  R                  S5        U R                  R                  U R                  R                  S,5      5        U R                  R                  S-U S.U S/35        UR                  S%5      (       aR  U R                  R                  U R                  R                  S0[3        UR                  S%/ 5      5       S135      5        g g US2:X  aP  U R                  R                  S5        U R                  R                  U R                  R                  S35      5        g U R                  R                  S5        U R                  R                  U R                  R                  S4U 35      5        S5U;   a.  U R                  R                  S6UR                  S55       35        g g U R                  R                  U R                  R                  S75      5        U R                  R                  S5        U R                  R                  S85        U R                  R                  S95        U R                  R                  S:5        U R                  R                  S;5        U R                  R                  S<5        g ! [         aÔ  n	U R                  R                  S5        U R                  R                  U R                  R                  S[        U	5       35      5        U(       ah  SS Kn
U R                  R                  S5        U R                  R                  S5        U R                  R                  U
R                  5       5         S n	A	g  S n	A	g S n	A	ff = f! [         aÔ  n	U R                  R                  S5        U R                  R                  U R                  R                  S[        U	5       35      5        U(       ah  SS Kn
U R                  R                  S5        U R                  R                  S5        U R                  R                  U
R                  5       5         S n	A	g  S n	A	g S n	A	ff = f! [         aÔ  n	U R                  R                  S5        U R                  R                  U R                  R                  S[        U	5       35      5        U(       ah  SS Kn
U R                  R                  S5        U R                  R                  S5        U R                  R                  U
R                  5       5         S n	A	g  S n	A	g S n	A	ff = f! [         aÔ  n	U R                  R                  S5        U R                  R                  U R                  R                  S[        U	5       35      5        U(       ah  SS Kn
U R                  R                  S5        U R                  R                  S5        U R                  R                  U
R                  5       5         S n	A	g  S n	A	g S n	A	ff = f)=NÚuser_idÚasyncFÚ	all_usersÚverbosezUser ID normalized: 'z' -> 'Ú'z8Queuing balance catch-up for all users asynchronously...z8Note: Celery worker must be running for this to execute.Ú u   âœ“ Task queued successfully!z	Task ID: z"Check Celery logs to see progress.u   âœ— Failed to queue task: r   z
Traceback:z7Running balance catch-up for all users synchronously...z7This may take a while depending on the number of users.zTask completed successfully!zResult:é   )ÚindentÚdefaultu,   âœ“ Balance catch-up completed for all usersu   âœ— Failed: z"Queuing balance catch-up for user z asynchronously...z"Running balance catch-up for user z synchronously...zPThis will recalculate balances for the last 30 days and dates with 0.0 balances.z2Calling catch_up_work_balances_for_user for user: )Úargsu   âœ— Task failed: z&Function returned result with status: ÚstatusÚNoneÚerrorszErrors encountered:z  - ÚunknownÚokÚdates_processedÚtotal_dates_checkedu   âœ“ Balance catch-up completed!zDates processed: z out of z checkedu   âš  z/ errors occurred (use --verbose to see details)Úno_datazNo stamps found for this userzTask failed with status: ÚerrorzError: z/Please specify --user-id USER_ID or --all-usersz	Examples:zO  python manage.py catch_up_balances --user-id edd631c63c1848c681244f5c7c868801z0  python manage.py catch_up_balances --all-usersz>  python manage.py catch_up_balances --user-id USER_ID --asyncz8  python manage.py catch_up_balances --all-users --async)Úgetr   ÚstdoutÚwriteÚstyleÚWARNINGr   ÚdelayÚSUCCESSÚidÚ	ExceptionÚERRORr   Ú	tracebackÚ
format_excÚjsonÚdumpsr   ÚapplyÚfailedÚresultÚ
isinstanceÚformat_exceptionr   Ú__traceback__Úlen)r   r"   ÚoptionsÚuser_id_rawÚis_asyncr   r   r   ÚtaskÚer6   r<   Útask_resultr+   r#   r(   Útotal_checkeds                    r   ÚhandleÚCommand.handle    s%
  € Ø—k‘k )¨TÓ2ˆØ—;‘;˜w¨Ó.ˆØ—K‘K ¨UÓ3ˆ	Ø—+‘+˜i¨Ó/ˆö Ü'¨Ó4ˆGØÓ%Ø—‘×!Ñ! $§*¡*×"4Ñ"4Ð7LÈ[ÈMÐY_Ð`gÐ_hÐhiÐ5jÓ"kÔløàˆGççØ—‘×!Ñ! $§*¡*×"4Ñ"4Ð5oÓ"pÔqØ—‘×!Ñ!Ð"\Ô]ðBÜ5×;Ò;Ó=DØ—K‘K×%Ñ% bÔ)Ø—K‘K×%Ñ% d§j¡j×&8Ñ&8Ð9XÓ&YÔZØ—K‘K×%Ñ%¨	°$·'±'°Ð&;Ô<Ø—K‘K×%Ñ% bÔ)Ø—K‘K×%Ñ%Ð&JÕKð —‘×!Ñ! $§*¡*×"4Ñ"4Ð5nÓ"oÔpØ—‘×!Ñ!Ð"[Ô\Ø—‘×!Ñ! "Ô%ðBÜ7Ó9FæØŸ™×)Ñ)¨"Ô-ØŸ™×)Ñ)¨$¯*©*×*<Ñ*<Ð=[Ó*\Ô]ØŸ™×)Ñ)¨"Ô-ØŸ™×)Ñ)¨)Ô4ØŸ™×)Ñ)¬$¯*ª*°VÀAÌsÑ*SÕTàŸ™×)Ñ)¨$¯*©*×*<Ñ*<Ð=kÓ*lÕm÷ çØ—‘×!Ñ! $§*¡*×"4Ñ"4Ð7YÐZaÐYbÐbtÐ5uÓ"vÔwØ—‘×!Ñ!Ð"\Ô]ðBÜ:×@Ò@ÀÓIDØ—K‘K×%Ñ% bÔ)Ø—K‘K×%Ñ% d§j¡j×&8Ñ&8Ð9XÓ&YÔZØ—K‘K×%Ñ%¨	°$·'±'°Ð&;Ô<Ø—K‘K×%Ñ% bÔ)Ø—K‘K×%Ñ%Ð&JÕKð —‘×!Ñ! $§*¡*×"4Ñ"4Ð7YÐZaÐYbÐbsÐ5tÓ"uÔvØ—‘×!Ñ!Ð"tÔuØ—‘×!Ñ! "Ô%ðABö ØŸ™×)Ñ)Ð,^Ð_fÐ^gÐ*hÔiô #B×"GÒ"GÈgÈYÑ"WKð #×)Ñ)×+Ñ+Ø +× 2Ñ 2˜ØŸ™×)Ñ)¨$¯*©*×*:Ñ*:Ð=NÈuÈgÐ;VÓ*WÔXÞ"Û,Ü)¨%´×;Ñ;Ø $§¡× 1Ñ 1°)×2LÑ2LÌTÐRWË[ÐZ_×atÑatÓ2uÔ vØð )×/Ñ/FæØŸ™×)Ñ)Ð,RÖkqÐSY×S]ÑS]Ð^fÔSgÐw}ÐR~Ð*ô  AçØŸ™×)Ñ)¨"Ô-ØŸ™×)Ñ)¨$¯*©*×*<Ñ*<Ð=[Ó*\Ô]ØŸ™×)Ñ)¨"Ô-ØŸ™×)Ñ)¨)Ô4ØŸ™×)Ñ)¬$¯*ª*°VÀAÌsÑ*SÔTð "Ÿ:™: h×/Ñ/Ø ŸK™K×-Ñ-¨bÔ1Ø ŸK™K×-Ñ-¨d¯j©j×.@Ñ.@ÐAVÓ.WÔXØ)/¯©°H¸bÖ)A Ø $§¡× 1Ñ 1°D¸¸°.Ö Aò *Bð 0ð "(§¡¨H°iÓ!@˜Ø! T›>Ø.4¯j©jÐ9JÈAÓ.N˜OØ,2¯J©JÐ7LÈaÓ,P˜MØ ŸK™K×-Ñ-¨bÔ1Ø ŸK™K×-Ñ-¨d¯j©j×.@Ñ.@ÐCbÓ.dÔeØ ŸK™K×-Ñ-Ð0AÀ/ÐARÐRZÐ[hÐZiÐiqÐ.rÔsà%Ÿz™z¨(×3Ñ3Ø $§¡× 1Ñ 1°$·*±*×2DÑ2DÀtÌCÐPV×PZÑPZÐ[cÐegÓPhÓLiÐKjð  kZð  F[ó  3\õ  !]ð  4à# yÓ0Ø ŸK™K×-Ñ-¨bÔ1Ø ŸK™K×-Ñ-¨d¯j©j×.@Ñ.@ÐA`Ó.aÕbà ŸK™K×-Ñ-¨bÔ1Ø ŸK™K×-Ñ-¨d¯j©j×.>Ñ.>ÐAZÐ[aÐZbÐ?cÓ.dÔeØ&¨&Ó0Ø $§¡× 1Ñ 1°G¸F¿J¹JÀwÓ<OÐ;PÐ2QÕ Rð  1ð K‰K×Ñ˜dŸj™j×.Ñ.Ð/`ÓaÔbØK‰K×Ñ˜bÔ!ØK‰K×Ñ˜kÔ*ØK‰K×ÑÐoÔpØK‰K×ÑÐPÔQØK‰K×ÑÐ^Ô_ØK‰K×ÑÐXÕYøôG !ó BØ—K‘K×%Ñ% bÔ)Ø—K‘K×%Ñ% d§j¡j×&6Ñ&6Ð9SÔTWÐXYÓTZÐS[Ð7\Ó&]Ô^ÞÛ(ØŸ™×)Ñ)¨"Ô-ØŸ™×)Ñ)¨,Ô7ØŸ™×)Ñ)¨)×*>Ñ*>Ó*@×AÑAô	 ûðBûô0 !ó BØ—K‘K×%Ñ% bÔ)Ø—K‘K×%Ñ% d§j¡j×&6Ñ&6¸ÄcÈ!ÃfÀXÐ7NÓ&OÔPÞÛ(ØŸ™×)Ñ)¨"Ô-ØŸ™×)Ñ)¨,Ô7ØŸ™×)Ñ)¨)×*>Ñ*>Ó*@×AÑAô	 ûðBûô* !ó BØ—K‘K×%Ñ% bÔ)Ø—K‘K×%Ñ% d§j¡j×&6Ñ&6Ð9SÔTWÐXYÓTZÐS[Ð7\Ó&]Ô^ÞÛ(ØŸ™×)Ñ)¨"Ô-ØŸ™×)Ñ)¨,Ô7ØŸ™×)Ñ)¨)×*>Ñ*>Ó*@×AÑAô	 ûðBûôN !ó BØ—K‘K×%Ñ% bÔ)Ø—K‘K×%Ñ% d§j¡j×&6Ñ&6¸ÄcÈ!ÃfÀXÐ7NÓ&OÔPÞÛ(ØŸ™×)Ñ)¨"Ô-ØŸ™×)Ñ)¨,Ô7ØŸ™×)Ñ)¨)×*>Ñ*>Ó*@×AÑAô	 ûðBúsŠ   Ã>Ch$ È,C	l Ë64l ÎCo& ÓC0s Ö3F%s ÝDs á0As ãBs è$
lè.Ck=ë=lì
o#ìCoïo#ï&
sï0Cr?ò?só
v%óCv ö v%© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   rH   Ú__static_attributes__rJ   r   r   r	   r	      s   † ð S€Dò
õ,^Zr   r	   )
Údjango.core.management.baser   Úworktimeservice.tasksr   r   r   Ústamps.modelsr   r8   r	   rJ   r   r   Ú<module>rS      s$   ðÝ 3ß pÑ pÝ Û ôwZˆkõ wZr   