
    ,	id0                        d dl mZmZ d dlmZ d dlmZ d dlmZ d dl	Z	d dl
Z
ddlmZmZmZ d dlmZ d	 Zed
             Zd dlmZ d dlmZ d dlmZ d dl
Z
ddlmZmZmZ ed             Zd dlmZmZmZ d dlmZ d dlmZ ddlmZ d dl
Z
e edg          d                         Ze edg          d                         Ze edg          d                         ZdS )    )renderredirect)JsonResponse)settings)csrf_exemptN   )DiccionarioTablaDiccionarioCampoDiccionarioRelacion)Usuarioc                 R    d| j         vrt          d          S t          | d          S )Nuser_id/zdatahub.html)sessionr   r   )requests    ,/var/www/html/Desarrollo/bi/datahub/views.pydatahubr      s+    ''}}'>***    c                 B   t           j                            dd                                          }g }|D ]}g }|j                                                            d          D ]x}g }|j                                        D ]+}|                    |j        |j	        |j
        dd           ,|                    |j        |j        |j
        |j        |d           y|                    |j        t          |dd          |j        |j
        |j        |j        |j        |j        d	|d
           t'                      }|D ]`}	|	                    dg           D ]G}|                    dg           D ].}
|
                    d          }|r|                    |           /Hai }|rt           j                            |                              d          }|D ]|}|j        t          |dd          |j        |j
        |j        |j        |j        |j        d |j                                                            d          D             d	||j        <   }|D ]}	|	                    dg           D ]}|                    dg           D ]{}
|
                    d          }t/          |t0                    r.||v r*||         d         |
                    d          pdd|
d<   Z|r|nd|
                    d          pdd|
d<   |t3          d|dddi          S )z>Devuelve todas las tablas con sus campos y relaciones en JSON.camposcampos__relaciones_origenidN)tabla_destinocampo_destinodescripcionnombres_exactos)r   nombrer   	tipo_dato
relaciones
nombre_sap )r   r    r   r   tipoorigenactualizacionarea)tablar   r   r   )
nombre__inc                 D    g | ]}|j         |j        |j        |j        d S )r   r   r   r   r)   ).0cs     r   
<listcomp>z#get_tables_json.<locals>.<listcomp>X   sE     	 	 	   d"#('(}%&[	 	 	 	r   )	r   r    r   r   r"   r#   r$   r%   r   r   r   )r   r   r   T)successdataensure_asciiF)json_dumps_params)r	   objectsprefetch_relatedallr   order_byrelaciones_origenappendr   r   r   r   r   r   getattrr"   r#   r$   r%   setgetaddfilter
isinstancestrr   )r   qsr.   tr   r+   r   reldestino_nombresitemrtdtablas_destinotqss                 r   get_tables_jsonrG      s    
	!	2	2#
 
 
cee 
 D " " ((.. 	 	AJ*..00  !!%(%6%(%6#&?'+	# #     MMd( }[(      	d%ar::( }(!"	 	 
 
 	 	 	 	 eeO , ,(B'' 	, 	,AUU<,, , ,UU?++ ,#''+++,	, N &---IIZZ[cdd 	 	Be%b,;;)!~)!#!1	 	  Y]]__55d;;	 	 	) )N29%%,   (B'' 	 	AUU<,,  UU?++b#&& 	2+?+?"0"4X">)*)?)?)E2, ,A'(( )+"2"")*)?)?)E2, ,A'((	 D$77N\aKbccccr   )transactionc                    	 t          j        | j                  }n)# t           j        $ r t	          dddd          cY S w xY wi }i }	 t          j                    5  |                    dg           D ]}|                    d          pd                                }|s/t          j
                            ||                    d	d          |                    d
d          |                    dd          |                    dd          |                    dd          |                    dd          d          \  }}|j        ||<   |                    dg           D ]}|                    d          pd                                }	|	s.t          j
                            ||	|                    d
d          |                    dd          d          \  }
}|
j        || d|	 <   |                    dg           D ]}|                    d          pd                                }|s/|                    dg           D ]F}|                    d          pd                                }|s/|                    | d|           }|sL|                    dg           D ]}t          |t                    r,|                    dd            |                    dd            |                    d          pd                                }|                    d          pd                                }|                    d
          pd                                }t"          j
                            |||d
|i           H	 d d d            n# 1 swxY w Y   t	          ddd          S # t&          $ r+}t	          dt)          |          dd          cY d }~S d }~ww xY w) NF   JSON inválido)r-   error  statustablasr   r!   r    r   r"   r#   r$   r%   )r    r   r"   r#   r$   r%   )r   defaultsr   r   )r   r   )r&   r   rP   .r   r   pkr   r   )campo_origen_idr   r   rP   TzDatos guardados correctamenter-   message  )jsonloadsbodyJSONDecodeErrorr   rH   atomicr9   stripr	   r1   update_or_creater   r
   r<   dictpopr   get_or_create	Exceptionr=   )r   	json_data	tabla_ids	campo_idsr?   nombre_tabla	tabla_obj_r+   c_name	campo_objtnamecnamerS   rC   r   r   r   es                      r   create_table_from_jsonrm   |   s   WJw|,,		 W W W8HIIRUVVVVVVW IIGM!! A	 A	]]8R00  I  I !h 52<<>># /7HH'&'eeL"&=&='(uu]B'?'? !fb 1 1"#%%""5"5)*)C)C !fb 1 1   I 
  
 	1 +4,	,' x,, I IAeeHoo3::<<F! ! #3#;#L#L'%+,55+C+C)*{B)?)?" " $M $ $LIq =FLI888899I  ]]8R00  x.B5577 x,,  AUU8__299;;E  ! &/mmu4F4Fu4F4F&G&GO* ! UU<44  %a.. .EE$---EE$---)*)?)?)E2(L(L(N(N)*)?)?)E2(L(L(N(N'(uu]';';'Ar&H&H&J&J ,3AA,;*7*7&3[%A	 B    	KA	 A	 A	 A	 A	 A	 A	 A	 A	 A	 A	 A	 A	 A	 A	F 9XYYZZZ M M MA??LLLLLLLLLMsR    #AA
O L>N(O (N,,O /N,0O 
O: O5/O:5O:)r   HttpResponseHttpResponseNotFound)require_http_methods)r
   POSTc           
      :   	 t          j        | j                  }n(# t           j        $ r t	          ddid          cY S w xY w	 t
          j                            |          }n(# t
          j        $ r t          d| d          cY S w xY w|                    dd	          
                                }|st	          dd
id          S 	 t          j                    5  t          j                            |||                    dd	          |                    dd	                    }ddd           n# 1 swxY w Y   t	          dd| d|j        |j        dd          S # t"          $ r*}t	          dt%          |          id          cY d}~S d}~ww xY w)z
    Crea un nuevo campo (DiccionarioCampo) asociado a una tabla (DiccionarioTabla).
    Recibe: {nombre: str, descripcion: str, tipo_dato: str}
    rK   rJ   rL   rM   rR   zTabla con ID z no encontrada.r   r!   z#El nombre del campo es obligatorio.r   r   )r&   r   r   r   NTzCampo "z" creado exitosamente.)r-   rU   r   r      rV   )rW   rX   rY   rZ   r   r	   r1   r9   DoesNotExistro   r\   rH   r[   r
   creater   r   ra   r=   )r   tabla_idr.   r&   r   nuevo_camporl   s          r   crear_campo_apiry      sC   Ez','' E E EW&67DDDDDDEO (,,,99( O O O#$MH$M$M$MNNNNNO XXh##))++F ZW&KLUXYYYY;!! 	 	*299 HH]B77((;33	 :  K	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ????.!(	
 

    	  ; ; ;Wc!ff-c:::::::::;sd    "A A A& &"B
BE& AD7+E& 7D;;E& >D;?&E& &
F0FFFDELETEc                    	 t           j                            |          }nZ# t           j        $ r t	          d| d          cY S t
          $ r*}t          dt          |          id          cY d}~S d}~ww xY w	 |                                 t          d          S # t
          $ r2}t          d	| d
|            t          ddid          cY d}~S d}~ww xY w)z
    Elimina un campo de DiccionarioCampo dado su ID.
    
    Args:
        request: Objeto HttpRequest.
        campo_id: ID (PK) del DiccionarioCampo a eliminar.
    rs   Campo con ID  no encontrado.rK   rV   rM   N   zError al eliminar campo z: z7No se pudo eliminar el campo debido a un error interno.)r
   r1   r9   ru   ro   ra   r   r=   deletern   print)r   campo_idcamporl   s       r   eliminar_campo_apir     s7   ; (,,,99( O O O#$MH$M$M$MNNNNN ; ; ;Wc!ff-c:::::::::;n3'''' n n n 	888Q88999W&_`ilmmmmmmmmm	ns?    # "A:	A:A5/A:5A:>#B" "
C,'CCCPATCHc                 j   	 t          j        | j                  }n(# t           j        $ r t	          ddid          cY S w xY w	 t
          j                            |          }n(# t
          j        $ r t          d| d          cY S w xY wd}d	|v r|d	         |_
        d
}d|v r|d         |_        d
}d|v r|d         |_        d
}|rV	 |                                 t	          d
ddd          S # t          $ r }t	          dd| id          cY d}~S d}~ww xY wt	          d
ddd          S )u   
    Actualiza el nombre y/o la descripción de un DiccionarioCampo.
    
    Args:
        request: Objeto HttpRequest (contiene JSON con 'nombre' y/o 'descripcion').
        campo_id: ID (PK) del DiccionarioCampo a actualizar.
    rK   rJ   rL   rM   rs   r|   r}   Fr   Tr   r   z Campo actualizado correctamente.rT      zError al guardar en BD: rV   Nu5   No se proporcionaron campos válidos para actualizar.)rW   rX   rY   rZ   r   r
   r1   r9   ru   ro   r   r   r   savera   )r   r   r.   r   cambios_realizadosrl   s         r   actualizar_campo_apir      s   Ez','' E E EW&67DDDDDDEO (,,,99( O O O#$MH$M$M$MNNNNNO  4H~! /! d{+! 		WJJLLLD=_ ` `ilmmmm 	W 	W 	W*HQ*H*H IRUVVVVVVVVV	W
 9pqqz}~~~~s?    "A A A& &"B
B'C4 4
D>DDD)django.shortcutsr   r   django.httpr   django.confr   django.views.decorators.csrfr   osrW   modelsr	   r
   r   login.modelsr   r   rG   	django.dbrH   rm   rn   ro   django.views.decorators.httprp   ry   r   r    r   r   <module>r      sQ   - - - - - - - - $ $ $ $ $ $             4 4 4 4 4 4 				  K K K K K K K K K K            + + + _d _d _dB 5 4 4 4 4 4 $ $ $ $ $ $ ! ! ! ! ! !  K K K K K K K K K KPM PM PMd I H H H H H H H H H 4 4 4 4 4 4 = = = = = = $ $ $ $ $ $ 
 vh%; %;   %;P xj!!n n "! n8 wi  + + !  + + +r   