
    Ni!                     \    d Z ddlmZ ddlmZmZ ddlmZ ddlmZ ddZ	dZ
 G d d	      Zy
)u7   Lógica para differentiated_strategies_implementations.    )datetime)OptionalAny)Session)+DifferentiatedStrategiesImplementationModelc                 |    | y t        | t              r| S t        | d      r| j                  |      S t        |       S )Nstrftime)
isinstancestrhasattrr	   )vfmts     k/var/www/pie360backend.cl/public_html/app/backend/classes/differentiated_strategies_implementation_class.py	_date_strr   	   s:    y!Sq*zz#q6M       c                       e Zd ZdefdZddee   dee   defdZdded	ed
ee   dee   de	f
dZ
d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)+DifferentiatedStrategiesImplementationClassdbc                     || _         y N)r   )selfr   s     r   __init__z4DifferentiatedStrategiesImplementationClass.__init__   s	    r   N	period_id
exclude_idreturnc                    | j                   j                  t              j                  t        j                  j                  d             }|/|j                  t        j                  j                  d             }n"|j                  t        j                  |k(        }|"|j                  t        j                  |k7        }|j                         S r   )	r   queryr   filterdeleted_dateis_r   idcount)r   r   r   qs       r   _count_for_periodz=DifferentiatedStrategiesImplementationClass._count_for_period   s    GGMMEFMM7DDHHN
 DNNRRSWXYADNNR[[\A!DGG:UVAwwyr   pageitems_per_pageactions_takenapplied_strategiesc                 ^   	 | j                   j                  t              j                  t        j                  j                  d            }|rYt        |      j                         r@|j                  t        j                  j                  d|j                          d            }|rYt        |      j                         r@|j                  t        j                  j                  d|j                          d            }|j                  t        j                  j                               }|dkD  r|dkD  r|j                         }||z   dz
  |z  xs d}|dk  s||kD  r||||g dS |j                  |dz
  |z        j!                  |      j#                         }|D 	cg c]Y  }	|	j                  |	j$                  |	j                  |	j                  t'        |	j(                        t'        |	j*                        d[ }
}	|||||
dS |j#                         }|D 	cg c]Y  }	|	j                  |	j$                  |	j                  |	j                  t'        |	j(                        t'        |	j*                        d[ c}	S c c}	w c c}	w # t,        $ r}dt        |      g dcY d}~S d}~ww xY w)	z6Lista implementaciones activas (deleted_date is None).N%r      )total_itemstotal_pagescurrent_pager'   datar"   r   r(   r)   
added_dateupdated_dateerrorstatusmessager0   )r   r   r   r   r    r!   r   stripr(   liker)   order_byr"   descr#   offsetlimitallr   r   r2   r3   	Exception)r   r&   r'   r(   r)   r   r-   r.   rowsrr0   es               r   get_allz3DifferentiatedStrategiesImplementationClass.get_all&   s   4	FGGMM"MNUU;HHLLTRE ]!3!9!9!;%P%^%^%c%cfghuh{h{h}g~~  eA  &B  C!c*<&=&C&C&E%P%c%c%h%hklm  nF  nF  nH  mI  IJ  jK  &L  MNN#N#Q#Q#V#V#XYEaxNQ.#kkm*^;a?NRWVW!8tk1'2'2(,*8 "  ||TAX$?@FF~VZZ\ "
   dd%&[[)*./.B.B&/&=(1!..(A
 
 $/#.$(&4   99;D 
  $$!"%&__*+*>*>"+ALL"9$-ann$=
 
'
&
  	F%#a&"EE	FsJ   E(J
 +8J
 #AJ 	J
 J
 AJ=J
  
J
 
	J,J'!J,'J,r"   c           	         	 | j                   j                  t              j                  t        j                  |k(  t        j
                  j                  d            j                         }|sddddS d|j                  |j                  |j                  |j                  t        |j                        t        |j                        ddS # t        $ r}dt        |      ddcY d}~S d}~ww xY w)u#   Obtiene una implementación por id.Nr4   Registro no encontrado.r5   successr1   )r6   r0   )r   r   r   r   r"   r    r!   firstr   r(   r)   r   r2   r3   r?   r   r   r"   rowrB   s       r   getz/DifferentiatedStrategiesImplementationClass.get^   s    	HIJ?BBbH?LLPPQUV   ")6OY]^^#&&!$%(%6%6*-*@*@"+CNN";$-c.>.>$?
 
  	H%#a&$GG	Hs%   A2C 5AC 	C1C,&C1,C1r0   c                    	 |j                  d      }|t        |      nd}| j                  |      t        k\  rddt         ddS |j                  d      xs dj	                         xs d}|j                  d	      xs dj	                         xs d}t        j                         }t        |||||d
      }| j                  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)u   Crea una implementación.r   Nr4      Máximo     registros por período.r6   r7   r(    r)   )r   r(   r)   r2   r3   r    rF   zRegistro creado.r6   r7   r"   )rJ   intr%   IMPL_EVAL_MAX_PER_PERIODr8   r   nowr   r   addcommitrefreshr"   r?   rollbackr   )r   r0   r   r(   r)   rS   rI   rB   s           r   storez1DifferentiatedStrategiesImplementationClass.storey   s4   	:-I*3*?ITI%%i04LL%!)*B)CC[\  "XXo6<"CCEMM"&((+?"@"FB!M!M!O!WSW,,.C=#+#5 !C GGKKGGNNGGOOC '4FcffUU 	:GG%#a&99	:s%   AD CD 	E#'E
EEc                    	 | j                   j                  t              j                  t        j                  |k(        j                         }|sdddS d|v rT|d   t        |d         nd}|j                  }||k7  r'| j                  ||      t        k\  rddt         ddS ||_        d	|v r |d	   xs d
j                         xs d|_        d|v r |d   xs d
j                         xs d|_        t        j                         |_        | 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%   Actualiza una implementación por id.r4   rE   rN   r   N)r   rL   rM   r(   rO   r)   rF   zRegistro actualizado.rP   )r   r   r   r   r"   rG   rQ   r   r%   rR   r8   r(   r)   r   rS   r3   rU   rV   r?   rW   r   )r   r"   r0   rI   
new_period
old_periodrB   s          r   updatez2DifferentiatedStrategiesImplementationClass.update   s   	:''-- KLSST  UC  UC  GI  UI  J  P  P  RC")6OPPd"7;K7H7TSk!23Z^
 ]]
+0F0Fz^`0F0ae}0}")%-.F-GG_#`  !+$&%)/%:%@b$G$G$I$QT!#t+*./C*D*J)Q)Q)S)[W[&'||~CGGNNGGOOC '4KSUVV 	:GG%#a&99	:s,   AE
 AE
 'B"E
 
	F'F :F Fc                    	 | j                   j                  t              j                  t        j                  |k(        j                         }|sdddS t        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   Borrado lógico (deleted_date).r4   rE   rN   rF   zRegistro eliminado.rP   N)r   r   r   r   r"   rG   r   rS   r    r3   rU   r?   rW   r   rH   s       r   deletez2DifferentiatedStrategiesImplementationClass.delete   s    
	:''-- KLSST  UC  UC  GI  UI  J  P  P  RC")6OPP'||~C"//CGGNN'4IQSTT 	:GG%#a&99	:s%   AB  A	B   	C)'CCCr   )r   d   NN)__name__
__module____qualname__r   r   r   rQ   r%   r   r   rC   rJ   dictrX   r\   r^    r   r   r   r      s    7 
8C= 
hsm 
_b 
6FC 6FS 6FxX[} 6F  zB  CF  zG 6F  SV 6FpHc Hc H6:$ :3 ::: :D :S :6: : :r   r   N)z%Y-%m-%d %H:%M:%S)__doc__r   typingr   r   sqlalchemy.ormr   app.backend.db.modelsr   r   rR   r   rd   r   r   <module>ri      s-    =    " M  g: g:r   