
    Ni"                         d dl Z d dlmZ d dlmZmZ d dlmZmZ d dlm	Z	 d dl
mZ dedee   fd	Zd
edeedf   fdZd
efdZdee   dee   fdZdedefdZ G d d      Zy)    N)datetime)OptionalAny)or_func)Session)&RegularTeacherDiversifiedStrategyModeldatareturnc                 J   dD ]3  }| j                  |      }|	 t        |      }|dv rt        |      c S 5 | j                  d      }|yt        |t        t        f      rt        |      }|dv rt        |      S t        |      j                         }|sy|dv r|S t        j                  d|      }|r|j                  d      S |j                         }|j                  d      ry	|j                  d
      ry|j                  d      ryy# t        t        f$ r Y w xY w)uY   period_id / periodId 1..3 → '1'..'3'. period puede ser número o texto (1er, 2do, …).)	period_idperiodIdN         period123^\s*([123])\br   1er   1ºprimerr   2do   2ºsegundr   3er   3ºtercerr   )getintstr	TypeError
ValueError
isinstancefloatstriprematchgrouplower
startswith)r
   keypidnpsmsls           g/var/www/pie360backend.cl/public_html/app/backend/classes/regular_teacher_diversified_strategy_class.py_normalize_period_from_payloadr:   	   s    ( hhsm?H	>q6M " 	Ay!c5\"F	>q6MAAO
!1%Awwqz	
B	}}-.	}}-.	}}-.3 z* s   DD"!D"r   .c                 B    ddddj                  | t        |       f      S )N)r   r   r   r   primeroi)r   r   r   segundoii)r   r"   r#   r$   terceroiiir   )r%   r'   )r   s    r9   _period_synonymsrB   .   s*    8/: 
c)c)n&'	(    c                 B   t         j                  }t        j                  t        j                  |            }t        |       }t        |D cg c]  }||j                         k(   c} }| dk(  r*t        |j                  d      |dk(        }t        ||      S |S c c}w )u-   Período 1 incluye filas sin period (legacy).r   N )r	   r   r   r0   trimrB   r   is_)r   pcolcolsynvr.   legacys          r9   _period_sql_filterrM   6   s    188D
**TYYt_
%C
9
%CC0q#"01EA~TXXd^TRZ05&!!L	 1s   Br   c                 P   | y t        |       j                         }|sy |dv rt        |      S t        j                  d|      }|rt        |j                  d            S |j                         }|j                  d      ry|j                  d      ry|j                  d      ryy )	Nr   r   r   r   r   r   r!   r   )r'   r,   r&   r-   r.   r/   r0   r1   )r   r6   r7   r8   s       r9   _infer_period_idrO   B   s    ~FAO1v
!1%A1771:	
B	}}-.	}}-.	}}-.rC   rc                    t        | j                        }|1| j                  #t        | j                        j                         sd}| j                  | j
                  | j                  | j                  | j                  | j                  || j                  | j                  r| j                  j                         nd | j                  r| j                  j                         d
S d d
S )Nr   )
id	school_id	course_id
subject_idstrategyr   r   criteria
added_dateupdated_date)rO   r   r'   r,   rR   rS   rT   rU   rV   rW   rX   	isoformatrY   )rP   r3   s     r9   _row_to_dictr[   W   s    
188
$C
{(AHH0C0C0Edd[[[[llJJ((JJ23,,all,,.D67nn002  KO rC   c                       e Zd ZdefdZ	 	 	 	 ddee   dee   dee   dee   def
d	Zd
edefdZ	ddedee   defdZ
dedefdZd
ededefdZd
edefdZy)&RegularTeacherDiversifiedStrategyClassdbc                     || _         y N)r^   )selfr^   s     r9   __init__z/RegularTeacherDiversifiedStrategyClass.__init__j   s	    rC   NrS   rT   rU   r   r   c                 $   	 | j                   j                  t              }|'|dk7  r"|j                  t        j                  |k(        }|'|dk7  r"|j                  t        j
                  |k(        }|'|dk7  r"|j                  t        j                  |k(        }||dv r|j                  t        |            }|j                         }d|D cg c]  }t        |       c}dS c c}w # t        $ r}dt        |      g dcY d}~S d}~ww xY w)z`Lista registros. Filtros opcionales por school_id, course_id, subject_id y period_id (1, 2 o 3).Nr   successstatusr
   errorrg   messager
   )r^   queryr	   filterrS   rT   rU   rM   allr[   	Exceptionr'   )	ra   rS   rT   rU   r   qrowsrP   es	            r9   r%   z*RegularTeacherDiversifiedStrategyClass.getm   s    	FDEA$bHHCMMQZZ[$bHHCMMQZZ[%**:HHCNNR\\]$i)?HH/	:;557D'41Pa,q/1PQQ1P 	F%#a&"EE	Fs0   CC- C(#C- (C- -	D6D
D
DrR   c                    	 | j                   j                  t              j                  t        j                  |k(        j                         }|sddddS dt        |      dS # t        $ r}dt        |      ddcY d}~S d}~ww xY w)zObtiene un registro por id.rh   Registro no encontrado.Nri   re   rf   )	r^   rk   r	   rl   rR   firstr[   rn   r'   ra   rR   rowrq   s       r9   	get_by_idz0RegularTeacherDiversifiedStrategyClass.get_by_id   s    	H''-- FGNNOuOxOx|~O~  F  F  HC")6OY]^^'c1BCC 	H%#a&$GG	Hs$   AA% A% %	B.B<BBc                 n   	 | j                   j                  t              j                  t        j                  |k(        }||dv r|j                  t        |            }|j                         }d|D cg c]  }t        |       c}dS c c}w # t        $ r}dt        |      g dcY d}~S d}~ww xY w)uN   Obtiene registros por course_id; opcionalmente filtra por período (1, 2 o 3).Nr   re   rf   rh   ri   )
r^   rk   r	   rl   rT   rM   rm   r[   rn   r'   )ra   rT   r   ro   rp   rP   rq   s          r9   get_by_course_idz7RegularTeacherDiversifiedStrategyClass.get_by_course_id   s    		FDELL6@@IMA $i)?HH/	:;557D'41Pa,q/1PQQ1P 	F%#a&"EE	Fs0   A4B 6BB B 	B4B/)B4/B4r
   c           
      J   	 t        j                         }t        |j                  d      |j                  d      |j                  d      |j                  d      t	        |      |j                  d      ||      }| j
                  j                  |       | j
                  j                          | j
                  j                  |       dd|j                  t        |      d	S # t        $ r2}| j
                  j                          d
t        |      dcY d}~S d}~ww xY w)u_   Crea un nuevo registro en regular_teacher_diversified_strategies. school_id del body o sesión.rS   rT   rU   rV   rW   )rS   rT   rU   rV   r   rW   rX   rY   re   zRegistro creado.)rg   rj   rR   r
   rh   rg   rj   N)r   nowr	   r%   r:   r^   addcommitrefreshrR   r[   rn   rollbackr'   )ra   r
   r|   rv   rq   s        r9   storez,RegularTeacherDiversifiedStrategyClass.store   s    	:,,.C8((;/((;/88L1*-5d;*- 	C GGKKGGNNGGOOC '4Fcff^jkn^opp 	:GG%#a&99	:s   C$C' '	D"0'DD"D"c                 $   	 | j                   j                  t              j                  t        j                  |k(        j                         }|sdddS d|v r
|d   |_        d|v r
|d   |_        d|v r
|d   |_        d|v r
|d   |_	        d|v sd	|v sd
|v rN|j                  d
|j                        |j                  d      |j                  d	      d}t        |      |_        d|v r
|d   |_        t        j                         |_        | j                   j#                          | j                   j%                  |       dd|j                  dS # t&        $ r2}| j                   j)                          dt+        |      dcY d}~S d}~ww xY w)z7Actualiza un registro por id; solo los campos enviados.rh   rs   r{   rS   rT   rU   rV   r   r   r   )r   r   r   rW   re   zRegistro actualizado.)rg   rj   rR   N)r^   rk   r	   rl   rR   rt   rS   rT   rU   rV   r%   r   r:   rW   r   r|   rY   r~   r   rn   r   r'   )ra   rR   r
   rv   mergedrq   s         r9   updatez-RegularTeacherDiversifiedStrategyClass.update   s|   	:''-- FGNNOuOxOx|~O~  F  F  HC")6OPPd" $[ 1d" $[ 1t#!%l!3T!#J/d"jD&8H<L"hhx<!%+!6 $ 4
 <FC
T!#J/'||~CGGNNGGOOC '4KSVSYSYZZ 	:GG%#a&99	:s%   AE C=E 	F'F
F
Fc                    	 | j                   j                  t              j                  t        j                  |k(        j                         }|sdddS | j                   j                  |       | j                   j                          dddS # t        $ r2}| j                   j                          dt        |      dcY d}~S d}~ww xY w)u!   Elimina físicamente el registro.rh   rs   r{   re   zRegistro eliminado.N)r^   rk   r	   rl   rR   rt   deleter~   rn   r   r'   ru   s       r9   r   z-RegularTeacherDiversifiedStrategyClass.delete   s    		:''-- FGNNOuOxOx|~O~  F  F  HC")6OPPGGNN3GGNN'4IJJ 	:GG%#a&99	:s$   AB 9B 	C'C CC)NNNNr`   )__name__
__module____qualname__r   rb   r   r&   r   r%   rw   ry   dictr   r   r    rC   r9   r]   r]   i   s    7 
 $(#'$(#'FC=F C=F SM	F
 C=F 
F.HC HC HF# F(3- FSV F:$ :3 :,: :D :S :>: : :rC   r]   )r-   r   typingr   r   
sqlalchemyr   r   sqlalchemy.ormr   app.backend.db.modelsr	   r   r'   r:   r&   tuplerB   rM   rO   r[   r]   r   rC   r9   <module>r      s    	      " H" "(3- "J( (c3h (	# 	Xc] x} *: t $r: r:rC   