
    c@i)+                     ^    S SK Jr  S SKJr  S SKJrJrJr  S SKJr  S SK	J
r
   " S S\5      rg)	    )BaseCommand)
connection)datetimedate	timedelta)Stamp)WorkBalancec                   $    \ rS rSrSrS rS rSrg)Command   zGDebug why monthly_balance endpoint shows 00:00 even after recalculationc                     UR                  S[        SSS9  UR                  S[        SSS9  UR                  S[        SS	9  UR                  S
[        SS	9  g )Nz	--user-idTzUser ID to debug)typerequiredhelpz--datezDate to check (YYYY-MM-DD)z--start-datez!Start date for range (YYYY-MM-DD))r   r   z
--end-datezEnd date for range (YYYY-MM-DD))add_argumentstr)selfparsers     AD:\TimeStamps\stamps\management\commands\debug_monthly_balance.pyadd_argumentsCommand.add_arguments   s^    KcDGYZH3D`aN;^_Ls9Z[    c                 !  ^ US   nUS   n [         R                  " US5      R                  5       nU R                  R                  S5        U R                  R                  S5        U R                  R                  S5        U R                  R                  SU 35        U R                  R                  S	U 35        U R                  R                  S
5        U R                  R                  S5        U R                  R                  S5        [        R                  R                  [        U5      US9R                  5       nU(       GaY  U R                  R                  U R                  R                  S5      5        U R                  R                  SUR                   35        U R                  R                  SUR                   35        U R                  R                  SUR                   35        U R                  R                  SUR                    SUR                   S-  S S35        U R                  R                  SUR"                   SUR"                  S-  S S35        U R                  R                  SUR$                   SUR$                  S-  S S35        U R                  R                  SUR&                   SUR&                  S-  S S35        U R                  R                  SUR(                   SUR(                  S-  S S35        U R                  R                  SUR*                   SUR*                  S-  S S35        U R                  R                  SUR,                   35        U R                  R                  SUR.                   35        O4U R                  R                  U R                  R                  S5      5        U R                  R                  S
5        U R                  R                  S5        U R                  R                  S5        [0        R2                  " 5        nUR5                  S [        U5      U/5        UR7                  5       nU(       a  U R                  R                  U R                  R                  S!5      5        UR8                   V	s/ s H  oS"   PM	     n
n	[;        U
5       H9  u  pU[=        U5      :  d  M  U R                  R                  S#U	 S$X    35        M;     O4U R                  R                  U R                  R                  S%5      5        S S S 5        U R                  R                  S
5        U R                  R                  S&5        U R                  R                  S5        [        R                  R                  [        U5      US9R                  5       nU(       a^  U R                  R                  U R                  R                  S'5      5        U R                  R                  S(UR                   35        GOcU R                  R                  U R                  R                  S)5      5        [        R                  R                  UUS9R                  5       nU(       a  U R                  R                  U R                  R?                  S*5      5        U R                  R                  S(UR                   35        U R                  R                  S+[A        UR                  5       35        U R                  R                  S,UR                   S-35        U R                  R                  S.[A        U5       35        U R                  R                  S/U S-35        U R                  R                  S
5        U R                  R                  S05        U R                  R                  S5        [        R                  R                  [        U5      S19RC                  S5      S S2 nURE                  5       (       a  U R                  R                  S35        U Hh  nUR                  U:X  a  S4OS5nU R                  R                  S6U S7UR                   S8[A        UR                  5       S9U S8[A        U5       S:35        Mj     O4U R                  R                  U R                  R?                  S;5      5        U R                  R                  S
5        U R                  R                  S<5        U R                  R                  S5        URG                  S=5      (       ag  URG                  S>5      (       aQ  [         R                  " US=   S5      R                  5       n[         R                  " US>   S5      R                  5       nOUnUn[        R                  R                  [        U5      UU/S?9RC                  S5      nU R                  R                  S@U SAU SBU SC35        U R                  R                  SDURI                  5        35        URE                  5       (       aY  U R                  R                  SE5        U H8  nU R                  R                  S#UR                   SFUR"                   35        M:     UmTU::  Ga  [K        U4SG jU 5       S 5      n[        R                  R                  [        U5      TS9R                  5       nTU:X  Ga  U R                  R                  SHT SI35        U(       aB  U R                  R                  U R                  R                  SJUR"                   35      5        O4U R                  R                  U R                  R                  SK5      5        U(       aB  U R                  R                  U R                  R                  SLUR"                   35      5        O4U R                  R                  U R                  R                  SM5      5        [         RL                  " T[         RN                  RQ                  5       5      [S        SNSO9-   R                  5       mTU::  a  GM  U R                  R                  S
5        U R                  R                  SP5        U R                  R                  S5        [T        R                  R                  X5S9RC                  SQ5      nU R                  R                  SRURI                  5        35        U H8  nU R                  R                  S#URV                   SSURP                   35        M:     U R                  R                  S
5        U R                  R                  ST5        U R                  R                  S5        U R                  R                  SU[0        RX                  SV    35        U R                  R                  SW[0        RZ                   35        U R                  R                  S
5        U R                  R                  S5        U R                  R                  SX5        U R                  R                  S5        U(       GaP  UR"                  S":  a  U R                  R                  U R                  R                  SY5      5        U R                  R                  U R                  R?                  SZ5      5        U R                  R                  S[5        U R                  R                  S\5        U R                  R                  S]5        U R                  R                  S^5        U R                  R                  S_5        g U R                  R                  U R                  R?                  S`5      5        U R                  R                  Sa5        g U R                  R                  U R                  R                  S5      5        U R                  R                  Sb5        g ! [         a;    U R                  R                  U R                  R                  SU S35      5         g f = fs  sn	f ! , (       d  f       GN>= f)cNuser_idr   z%Y-%m-%dzInvalid date format: z. Use YYYY-MM-DDzP================================================================================z"DEBUGGING MONTHLY_BALANCE ENDPOINTz	User ID: zDate:  z#1. CHECKING WORKBALANCE IN DATABASEzP--------------------------------------------------------------------------------)r   r   u   ✓ WorkBalance record foundz  - ID: z
  - Date: z  - User ID: z  - regular_work_seconds: z (i  z.2fz hours)z  - total_work_seconds: z  - daily_break_seconds: z  - net_work_seconds: z  - overtime_seconds: z  - flex_seconds: z  - created_at: z  - updated_at: u   ✗ No WorkBalance record foundz2. CHECKING RAW SQL QUERYz;SELECT * FROM workbalances WHERE user_id = %s AND date = %su   ✓ Record found via raw SQLr   z  - z: u   ✗ No record found via raw SQLz83. CHECKING QUERY WITH STR() CONVERSION (as in endpoint)u!   ✓ Query with str(user_id) worksz  - Found: u(   ✗ Query with str(user_id) returns Noneu"   ⚠ But query without str() works!z  - user_id type in DB: z  - user_id value in DB: ''z  - user_id type in query: z  - user_id value in query: 'z 4. CHECKING DATE FORMAT MATCHING)r   
   z'Sample WorkBalance dates for this user:u   ✓u   ✗z   z (type: z) vs )z*No WorkBalance records found for this userz"5. SIMULATING ENDPOINT QUERY LOGIC
start_dateend_date)r   date__rangezQueryset filter: user_id=str('z'), date__range=[z, ]zQueryset count: zRecords in queryset:z: total_work_seconds=c              3   J   >#    U  H  oR                   T:X  d  M  Uv   M     g 7f)N)r   ).0wbcurrent_dates     r   	<genexpr>!Command.handle.<locals>.<genexpr>   s     $[-B77lCZRR-s   #	#z

For date :u6     ✓ Old method (next()): Found - total_work_seconds=u$     ✗ Old method (next()): Not foundu<     ✓ New method (direct query): Found - total_work_seconds=u*     ✗ New method (direct query): Not found   )daysz 6. CHECKING STAMPS FOR THIS DATEtimezStamps found: z at z7. CHECKING DATABASE STATEz
Database: NAMEzIn transaction: SUMMARYu+   ✓ WorkBalance exists with non-zero valuesu/   ⚠ But endpoint shows 00:00 - possible causes:z  1. Query cache issuez  2. Date format mismatchz+  3. User ID type mismatch (str vs non-str)z  4. Transaction not committedz"  5. Different database connectionu'   ⚠ WorkBalance exists but values are 0z5  This suggests the calculation didn't work correctlyz?  This suggests the calculation didn't create/update the record).r   strptimer   
ValueErrorstdoutwritestyleERRORr	   objectsfilterr   firstSUCCESSidr   regular_work_secondstotal_work_secondsdaily_break_secondsnet_work_secondsovertime_secondsflex_seconds
created_at
updated_atr   cursorexecutefetchonedescription	enumeratelenWARNINGr   order_byexistsgetcountnextcombineminr-   r   r   stamp_functionsettings_dictin_atomic_block)r   argsoptionsr   check_date_str
check_datework_balancerC   rowcolcolumnsiwork_balance_strwork_balance_no_strall_balancesr&   
date_matchstart_date_objend_date_objwork_balanceswork_balance_oldwork_balance_newstampsstampr'   s                           @r   handleCommand.handle   s   )$ 	!**>:FKKMJ
 	(#>?(#IgY/0F:,/0" 	?@(#"**11L 2 
 %' 	
 KKdjj001OPQKK(9:;KK
<+<+<*=>?KKl.B.B-CDEKK :<;\;\:]]_`l  aB  aB  EI  aI  JM  `N  NU  V  WKK 89X9X8YY[\h\{\{  C  ]C  DG  \H  HO  P  QKK 9,:Z:Z9[[]^j^~^~  BF  _F  GJ  ^K  KR  S  TKK 6|7T7T6UUWXdXuXux|X|  ~A  XB  BI  J  KKK 6|7T7T6UUWXdXuXux|X|  ~A  XB  BI  J  KKK 2<3L3L2MRP\PiPilpPpqtOuu|}~KK 01H1H0IJKKK 01H1H0IJKKKdjj../PQR" 	56(# FNNMWz* //#C!!$**"4"45S"TU-3-?-?@-?cq6-?@'0FA3s8|))DRx*@A 1 !!$**"2"23T"UV ! 	" 	TU(#&..55L 6 
 %' 	
 KKdjj001TUVKK,<,?,?+@ABKKdjj../YZ["-"5"5"<"< #= # eg   #!!$**"4"45Y"Z[!!K0C0F0F/G"HI!!$<TBUB]B]=^<_"`a!!$>?R?Z?Z>[[\"]^!!$?W"OP!!$A'!"LM" 	<=(#"**11#g,1GPPQWXY\Z\]  KKGH"&(gg&;U
!!Bzl!BGG9HT"'']OSXYcXddlmqr|m}l~~  #A  B # KKdjj001]^_" 	>?(# ;;|$$Z)@)@%..w|/DjQVVXN#,,WZ-@*MRRTL (N%L $++22L'6 3 
 (6
 	
 	:7)CTUcTddfgsfttuvw,]-@-@-B,CDE!!KK45#!!D	1FrG\G\F]"^_ $ &l*#$[-$[]ab  +2299G!  :   eg 
 z)!!K~Q"?@#KK%%djj&8&8;q  sC  sV  sV  rW  :X  'Y  ZKK%%djj&6&69]&_`#KK%%djj&8&8;w  yI  y\  y\  x]  :^  '_  `KK%%djj&6&69c&ef$,,\8<<;L;L;NOR[abRcciikL- l*. 	" 	<=(#%%g%GPPQWXN6<<>*:;<EKKU%9%9$:$uzzlKL " 	67(#Jz'?'?'G&HIJ,Z-G-G,HIJ" 	(#)$(#..2!!$**"4"45b"cd!!$**"4"45f"gh!!":;!!"=>!!"OP!!"BC!!"FG!!$**"4"45^"_`!!"YZKKdjj../PQRKK_`s  	KKdjj..1F~FVVf/ghi	` A ! sE   %A@.  A7AA;7AA6AA;(AAA;@.AAA3A2AA3A6AA;A;
AB
 N)__name__
__module____qualname____firstlineno__r   r   rh   __static_attributes__rj   r   r   r   r      s    TD\ar   r   N)django.core.management.baser   	django.dbr   r   r   r   stamps.modelsr   worktimeservice.modelsr	   r   rj   r   r   <module>rt      s'    3   . .  .Hak Har   