
    'Xi=)                     r    d Z ddlmZ ddlmZmZmZ ddlmZ ddlm	Z	m
Z
mZ d Zde
defd	Z G d
 d      Zy)zFLogic for 5. Estrategias de trabajo con la familia y con la comunidad.    )datetime)OptionalAnyList)Session) FamilyCommunityStrategyTypeModelCourseFamilyCommunityModel%CourseFamilyCommunityObservationModelc                 ^    | y t        | d      r| j                         S | rt        |       S d S )N	isoformat)hasattrr   str)vs    Z/var/www/pie360backend.cl/public_html/app/backend/classes/course_family_community_class.py_serialize_dater      s1    yq+{{}3q6 D     rreturnc                    | j                   | j                  | j                  | j                  | j                  | j
                  t        | j                        t        | j                        t        | j                        d	S )N)	id	course_id!family_community_strategy_type_iddescripcionseguimiento
evaluacion
added_dateupdated_datedeleted_date)
r   r   r   r   r   r   r   r   r   r   )r   s    r   _row_to_dictr      s\    dd[[-.-P-P}}}}ll%all3'7'7
 
r   c                       e Zd ZdefdZdefdZdedefdZdedefdZ	dedefd	Z
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)CourseFamilyCommunityClassdbc                     || _         y )N)r"   )selfr"   s     r   __init__z#CourseFamilyCommunityClass.__init__$   s	    r   r   c           	         	 | j                   j                  t              j                  t        j                  j                  d            j                  t        j                        j                         }d|D cg c]1  }|j                  |j                  |j                  |j                  d3 c}dS c c}w # t        $ r}dt        |      g dcY d}~S d}~ww xY w)zBList strategy types (deleted_date is None), ordered by sort_order.Nsuccessr   keylabel
sort_orderstatusdataerrorr-   messager.   )r"   queryr   filterr   is_order_byr+   allr   r)   r*   	Exceptionr   )r$   rowsr   es       r   	get_typesz$CourseFamilyCommunityClass.get_types'   s    	F>?8EEII$OP:EEF	  $ " 44q||\ 
  	F%#a&"EE	Fs0   A;B= =6B83B= 8B= =	CCCCr   c           	         	 | j                   j                  t              j                  t        j                  j                  d            j                  t        j                        j                         }| j                   j                  t              j                  t        j                  |k(  t        j                  j                  d            j                         }|D ci c]  }|j                  | }}| j                   j                  t              j                  t        j                  |k(  t        j                  j                  d            j                         }|r|j                  nd}g }|D ]  }	|j                  |	j                         }|j#                  |	j                   |	j$                  |	j&                  |	j                  d|rt)        |      nd|r|j*                  nd|r|j,                  nd|r|j.                  ndd        d||dS c c}w # t0        $ r}
dt3        |
      g ddcY d}
~
S d}
~
ww xY w)zdFull structure for the course: each type with descripcion, seguimiento, evaluacion and observations.Nr(   )typerowr   r   r   r'   )r-   r.   observationsr/   )r-   r1   r.   r>   )r"   r2   r   r3   r   r4   r5   r+   r6   r	   r   r   r
   firstr>   getr   appendr)   r*   r   r   r   r   r7   r   )r$   r   
types_rowsr8   r   row_by_typeobs_rowr>   resulttr9   s              r   get_by_course_idz+CourseFamilyCommunityClass.get_by_course_id:   s   %	\>?8EEII$OP:EEF	  89.88IE.;;??E   LPPa1>>APKPCD9CCyP9FFJJ4P   4;7//LF OOADD)#$44WXWcWcd./<?T451==4451==423!,,  (VV) Q*  	\%#a&"VZ[[	\s1   C%H" 'H;D!H" H" "	I+I :I Ir   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&Get one course_family_community by id.r/   Registro no encontrado.Nr0   r'   r,   )	r"   r2   r	   r3   r   r?   r   r7   r   r$   r   r=   r9   s       r   	get_by_idz$CourseFamilyCommunityClass.get_by_idc   s    
	H89255;< 
 ")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(  t        j
                  j                  d            j                         }dd|r|j                  ndidS # t        $ r}dt        |      ddcY d}~S d}~ww xY w)z0Get observations for section 5 (one per course).Nr'   r>   r,   r/   r0   )r"   r2   r
   r3   r   r   r4   r?   r>   r7   r   )r$   r   r=   r9   s       r   get_observationsz+CourseFamilyCommunityClass.get_observationsq   s    	HCD9CCyP9FFJJ4P   (.VY#BRBR_c1dee 	H%#a&$GG	Hs   A?B 	B$BB$B$r>   c           	      B   	 | j                   j                  t              j                  t        j                  |k(        j                         }t        j                         }||xs dj                         nd}|r|xs d|_	        ||_
        d|_        n-| j                   j                  t        ||xs d||d             | j                   j                          dddS # t        $ r2}| j                   j                          dt!        |      dcY d}~S d}~ww xY w)zECreate or update observations for the course (one row per course_id).N )r   r>   r   r   r   r'   zObservaciones guardadas.r-   r1   r/   )r"   r2   r
   r3   r   r?   r   nowstripr>   r   r   addcommitr7   rollbackr   )r$   r   r>   r=   rQ   textr9   s          r   set_observationsz+CourseFamilyCommunityClass.set_observations   s    	:CD=GG9TU 
 ,,.C3?3KL&B--/QSD#'<4 #& #' A'!%"!$!%  GGNN'4NOO 	:GG%#a&99	:s   C C# #	D,'DDDr.   c           
         	 |j                  d      }|j                  d      }||dddS t        |      }t        |      }|j                  d      xs dj                         xs d}|j                  d	      xs dj                         xs d}|j                  d
      xs dj                         xs d}t        j                         }| j
                  j                  t              j                  t        j                  |k(  t        j                  |k(        j                         }|rg||_        ||_        ||_        ||_        d|_        | j
                  j#                          | j
                  j%                  |       |j&                  }	d}
nqt        |||||||d      }| j
                  j)                  |       | j
                  j#                          | j
                  j%                  |       |j&                  }	d}
d|v r!| j+                  ||j                  d             d|
|	t-        |      dS # t.        $ r2}| j
                  j1                          dt3        |      dcY d}~S d}~ww xY w)ziCreate or update one row by (course_id, family_community_strategy_type_id). Optionally save observations.r   r   Nr/   z=course_id y family_community_strategy_type_id son requeridos.rP   r   rO   r   r   Registro actualizado.)r   r   r   r   r   r   r   r   zRegistro creado.r>   r'   r-   r1   r   r.   )r@   intrR   r   rQ   r"   r2   r	   r3   r   r   r?   r   r   r   r   r   rT   refreshr   rS   rW   r   r7   rU   r   )r$   r.   r   r   r   r   r   rQ   r=   response_idmsgr9   s               r   storez CourseFamilyCommunityClass.store   s$   4	:-I049\0]- $E$M")6uvvII034U0V-88M28b??AITK88M28b??AITK((<06B==?G4J,,.C 89.88IE.PPTuu   "-"-!+#& #'  $!ff-0'6W + +)"!$!%	 C  $!ff(%%%i.1IJ'C{T`adTeff 	:GG%#a&99	:s#   *H: HH: :	I5'I0*I50I5c                    	 | j                   j                  t              j                  t        j                  |k(        j                         }|sd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|_        d|v r |d   xs dj                         xs d|_	        t        j                         |_        | j                   j                          | j                   j                  |       d	d
|t        |      dS # t         $ r2}| j                   j#                          dt%        |      dcY d}~S d}~ww xY w)zZUpdate one course_family_community by id (optional: descripcion, seguimiento, evaluacion).r/   rI   rP   r   rO   Nr   r   r'   rY   rZ   )r"   r2   r	   r3   r   r?   rR   r   r   r   r   rQ   r   rT   r\   r   r7   rU   r   )r$   r   r.   r=   r9   s        r   updatez!CourseFamilyCommunityClass.update   s2   	:''-- :;BBC]C`C`dfCfgmmoC")6OPP$#'#6#<""C"C"E"M$#'#6#<""C"C"E"Mt#"&|"4":!A!A!C!Kt'||~CGGNNGGOOC '4KSU_klo_pqq 	: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 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)zSoft delete (deleted_date).r/   rI   rP   r'   zRegistro eliminado.)r-   r1   r   N)r"   r2   r	   r3   r   r?   r   rQ   r   r   rT   r7   rU   r   rJ   s       r   deletez!CourseFamilyCommunityClass.delete   s    
	:''-- :;BBC]C`C`dfCfgmmoC")6OPP'||~C"//CGGNN'4IQSTT 	:GG%#a&99	:s%   AB  A	B   	C)'CCCN)__name__
__module____qualname__r   r%   r   r:   r[   rG   rK   rM   r   r   rW   dictr_   ra   rc    r   r   r!   r!   #   s    7 F3 F&'\# '\# '\RHC HC HH# H# H:# :Xc] :s :86:$ 6:3 6:p: :D :S :(: : :r   r!   N)__doc__r   typingr   r   r   sqlalchemy.ormr   app.backend.db.modelsr   r	   r
   r   rg   r   r!   rh   r   r   <module>rm      sC    L  & & " !. 4 Q: Q:r   