
    i^2                     ,   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
mZ d dlmZ d dlZd dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlZe	d             Ze	 edg          d                         Ze	 edg          d                         Z e	 edg          d                         Z!e	 edg          d                         Z"e	 edg          d                         Z#e	 edg          d                         Z$dS )    )renderredirectget_object_or_404)JsonResponse)require_http_methods)csrf_exempt)ValidationError)model_to_dictN)Url)Area)Image)BytesIO)ContentFile)FileSystemStorage)settingsc                     d| j         vs<| j                             d          dk    s| j                             d          dk    rt          d          S 	 t          | d          S )Nuser_id	user_tipo      /zgestion_bi.html)sessiongetr   r   )requests    //var/www/html/Desarrollo/bi/gestion_bi/views.pygestion_bi_viewr      sg    go%%)<)<[)I)IQ)N)NRYRaReRefqRrRrvwRwRwC==&	*	+	++    GETc                     t           j                            d                                                              d          }d |D             }t          |t          |          d          S )ug   
  Retorna todas las URLs con su área asociada.
  Reconstruye la URL de la imagen para el frontend.
  areaz-fecha_creacionc                    g | ]}|j         |j        |j        t          |j        d d          t          |j        dd          |j        |j        rt          j         d|j         nd|j	        |j
                            d          d	S )idNnombre	informes/z%Y-%m-%d %H:%M:%S)	r"   r#   urlarea_idarea_nombredescripimg_descrip_urltipofecha_creacion)r"   r#   r%   getattrr    r(   img_descripr   	MEDIA_URLr*   r+   strftime).0us     r   
<listcomp>zget_urls.<locals>.<listcomp>-   s     
 
 
 	
 DUt,,QVXt44 MNMcH.HHHHH_cf(112EFF 
 
 
r   resultcount)r   objectsselect_relatedallorder_byr   len)r   urlsdatas      r   get_urlsr=   $   sr     
	#	#F	+	+	/	/	1	1	:	:;L	M	M$
 
 
 
 
$" 
D		::	;	;;r   c                    t           j                            d                                                              dd                              d          }t          t          |          |                                d          S )u0   Lista de áreas disponibles para asociar a URLs.F)urls__isnullr"   r#   r3   )	r   r6   filterdistinctvaluesr9   r   listr5   )r   areass     r   
areas_listrE   @   sk     ,

5

1
1
:
:
<
<
C
CD(
S
S
\
\]e
f
f%	eu{{}}EE	F	FFr   POSTc           	         	 | j         }| j        }|                    d          }|                    d          }|                    d          }|                    d          }|                    d          }t          |||g          st	          dddd	
          S 	 t
          j                            |          }n)# t
          j        $ r t	          dddd
          cY S w xY wt          j        	                    ||||pdd|pd          }	d}
d|v r|d         }	 t          j        |          }|                                 t          j        |          }|j        dv r|                    d          }|                    d           t!                      }|                    |dd           t%          |                                          }t)                      }d|	j         }d| d}|                    |          r|                    |           |                    ||          }t0          j                            |          }
|
|	_        |	                    dg           n.# t8          $ r!}t	          dd| dd	
          cY d}~S d}~ww xY wt	          dd|	j        |	j        |	j        |	j        j        d d!d"
          S # t@          $ r+}t	          dtC          |          dd	
          cY d}~S d}~wt8          $ r.}t	          dd#tC          |           dd$
          cY d}~S d}~ww xY w)%z:
  Crea una nueva URL y maneja la subida de una imagen.
  r#   r%   r&   r(   r*   errorz1Faltan campos obligatorios (nombre, url, area_id)statusmessage  rJ   r"      Área no encontrada   Informe)r#   r%   r    r(   r-   r*   r-   RGBAPRGB  rX   JPEGU   formatqualityInforme-r$   .jpg)update_fieldszError al procesar la imagen: NsuccesszURL creada correctamente)r"   r#   r%   r'   rJ   rK   r%      Error en el servidor:   )"rF   FILESr   r8   r   r   r6   DoesNotExistr   creater   openverifymodeconvert	thumbnailr   saver   getvaluer   r"   existsdeleteospathbasenamer-   	Exceptionr#   r%   r    r	   str)r   r<   filesr#   url_strr&   r(   r*   r    url_objimg_db_name
image_fileimgthumb_io
thumb_filefsfilename_base	save_pathfilenamees                       r   add_urlr   K   s   Xg<DMEXXhFhhuooGhhy!!Ghhy!!G88FD)** {W9lmmvyzzzz]\))dd ] ] ]W9NOOX[\\\\\\] k  
m9 !  G K'j%mj$$

j$$8}$$E""#l###99&"555 !2!2!4!455
   07://3333	 99Y 	
))I


779j11 g&&x00 *M?3333 m m mw;^[\;^;^__hklllllllllm
 +j.{|*	 	 	 	 	 	 	 
 L L L7s1vv>>sKKKKKKKKK	 g g g77XPSTUPVPV7X7XYYbefffffffffgs   BK   C  K #C'$K &C'';K #EI5 4K 5
J ?JJ K J  5K 
M  L MM#L<6M<Mc                    	 t          t          |          }| j        }| j        }|                    d|j                  |_        |                    d|j                  |_        |                    d|j                  |_        |                    d|j                  |_        |                    d          }|rR	 t          j
                            |          }||_        n)# t          j        $ r t          ddd	d
          cY S w xY wd|v r|d         }|j        rm	 t                      }d|j         }	|                    |	          r|                    |	           n)# t$          $ r}
t'          d|
            Y d}
~
nd}
~
ww xY w	 t)          j        |          }|                                 t)          j        |          }|j        dv r|                    d          }|                    d           t5                      }|                    |dd           t9          |                                          }t                      }d|j         }d| d}|                    |          r|                    |           |                    ||          }t>          j         !                    |          }||_        n# t$          $ r!}
t          dd|
 d	d          cY d}
~
S d}
~
ww xY wd|vr|                    d          dk    r{|j        rt	 t                      }d|j         }	|                    |	          r|                    |	           d|_        n)# t$          $ r}
t'          d|
            Y d}
~
nd}
~
ww xY w|                                 t          dd|j        |j        |j        |j        |j        r|j        j        nd|j        r|j        j        nd |j        rtD          j#         d|j         ndd!d"d#          S # t$          $ r.}
t          dd$tI          |
           d	d%          cY d}
~
S d}
~
ww xY w)&u   
  Actualiza una URL existente. Acepta FormData (POST) para
  poder manejar tanto campos de texto como la actualización de la imagen.
  rN   r#   r%   r(   r*   r&   rH   rO   rI   rP   rM   r-   r$   z Error al borrar imagen antigua: NrS   rV   rW   rY   rZ   r[   r^   r_   z#Error al procesar la nueva imagen: rL   remove_img_descriptruerQ   zError al borrar imagen: ra   zURL actualizada correctamenteN/A)r"   r#   r%   r(   r&   r'   r)   rb      rd   re   )%r   r   rF   rf   r   r#   r%   r(   r*   r   r6   r    rg   r   r-   r   rp   rq   ru   printr   ri   rj   rk   rl   rm   r   rn   r   ro   r"   rr   rs   rt   r   r.   rv   )r   url_idry   r<   rw   r&   r    r{   r   old_pathr   r|   r}   r~   r   r   r   rz   s                     r   
update_urlr      s	   og///G<DME XXh77GN((5'+..GKhhy'/::GO88FGL11GL hhy!!G __|7++ _ _ _w;PQQZ]^^^^^^_ 'j 
	 8	8 """6!466(YYx    IIh 	8 	8 	8
6166
7
7
7
7
7
7
7
7	8sj$$

j$$8}$$E""#l###99&"555 !2!2!4!455
   07://3333	 99Y 	
))I


779j11g&&x00) s s sw;dab;d;deenqrrrrrrrrrs 
e	#	#1E(F(F&(P(P " ::*,,B@7+>@@Hyy** ,		(+++*,G''  : : :8Q8899999999: LLNNN
 0j.{?&-l<7<??.5lEw|**T[Tgqh0PP7;NPPPmq	 	      
 g g g77XPSTUPVPV7X7XYYbefffffffffgs   B;P >'C& %P &#D	P DP $AE' &P '
F1FP FP D:K P 
K7K2,K7-P 2K77'P A	M) (P )
N3N
P 
NB
P 
Q$#QQQDELETEc                    	 t          t          |          }|j        rm	 t                      }d|j         }|                    |          r|                    |           n)# t          $ r}t          d|            Y d}~nd}~ww xY w|                                 t          dddd	          S # t          $ r+}t          d
t          |          dd	          cY d}~S d}~ww xY w)z@
  Elimina una URL por su ID y su archivo de imagen asociado.
  rN   r$   z%Error al eliminar archivo de imagen: Nra   zURL eliminada correctamenterI   r   rM   rH   re   )
r   r   r-   r   rp   rq   ru   r   r   rv   )r   r   ry   r   relative_pathr   s         r   
delete_urlr   '  s7   L///G  
;	;   :G$79999]## 	#
))M
"
"
" ; ; ;9a99::::::::; NN99VWW`cdddd	 L L L7s1vv>>sKKKKKKKKKLsG   B4 AA# "B4 #
B	-B?B4 B		*B4 4
C)> C$C)$C)c           	          	 t           j                            d                              |          }|j        |j        |j        |j        |j        |j	        rt          j         d|j	         nd |j        r|j        j        nd |j        r|j        j        ndd}t          dd|dd	
          S # t           j        $ r t          dddd
          cY S t          $ r.}t          ddt!          |           dd
          cY d }~S d }~ww xY w)Nr    rN   r$   r   )r"   r#   r%   r(   r*   r)   r&   r'   ra   u%   Detalles de URL obtenidos con éxito.)rJ   rK   r4   r   rM   rH   zURL no encontrada.rI   rP   zError interno: re   )r   r6   r7   r   r"   r#   r%   r(   r*   r-   r   r.   r    r   rg   ru   rv   )r   r   ry   response_datar   s        r   get_url_detailsr   C  s   !+,,V4488F8CC*n;L Y`Xku("4TTw?RTTTqu*1,@w|D29,I7<..E
 
 >#
 
 	   	    +
 
    	 	 	    1Q11
 
    	 	 	 	 	 	s$   B.B1 1#D	D#DDD)%django.shortcutsr   r   r   django.httpr   django.views.decorators.httpr   django.views.decorators.csrfr   django.core.exceptionsr	   django.forms.modelsr
   jsonusuarios.modelsr   login.modelsr   PILr   ior   django.core.files.baser   django.core.files.storager   django.confr   rr   r   r=   rE   r   r   r   r    r   r   <module>r      s|   @ @ @ @ @ @ @ @ @ @ $ $ $ $ $ $ = = = = = = 4 4 4 4 4 4 2 2 2 2 2 2 - - - - - -                           . . . . . . 7 7 7 7 7 7             				 , , , ug< <  <4 ugG G  G vh\g \g   \gB vhtg tg   tgn xj!!L L "! L4 ug" "  " " "r   