
    i"?                     n   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 dl
mZ d dlmZmZ d dlZd dlZd dlmZmZmZ d d	lmZmZmZmZ d
 Zd Z edg          ej        d                         Z edg          ej        d                         Z edg          ej        d                         ZdS )    )renderredirect)JsonResponseHttpResponse)settings)Prefetch)require_http_methods)IntegrityErrortransactionN)UsuarioAreaGerencia)PermisoArea
PermisoUrl	SolicitudUrlc                     d| j         vs| j                             d          dk    rt          d          S t          | d          S )Nuser_id	user_tipo   /zusuarios_admin.html)sessiongetr   r   )requests    3/var/www/html/Desarrollo/bi/usuarios_admin/views.pyusuarios_admin_viewr      sF    ''7?+>+>{+K+Kq+P+P}}'0111    c           	      
   d| j         vrt          ddid          S 	 | j         d         }	 t          j                            d                              |          }n(# t          j        $ r t          ddid	          cY S w xY w|j        d
k    }g }|rt          j                                        }nt                      }|j        dk    r&|j
        r|                    |j
        j                   t          j                            |d
                              d                              dd          }|                    |           |                    d           t%          |          }t          j                            |          }t'          dt(          j                            d
                              d          d          }t'          dt          j                            d
                              d          d          }	t'          dt*          j                            dd          d          }
|                    dd                              ||	|
                                                              d          }|rYt0          j                            d                               d!"                                                              d          }nYt0          j                            d                               |d!#                                                              d          }d$ |D             }|rFt4          j                            dd                                                              d          }nGt4          j                            dd                              |                              d          }d% |D             }g }|D ](}d& |j        D             }d' |j        D             }d( |j        D             }|                    i d)|j        d|j        d*|j         d+|j!        d,|j"        d-|j        d.|j#        d/|j$        d0|j%        d|j
        r|j
        j        nd1d2|j
        r|j
        j&        r|j
        j'        ndd |j
        r|j
        j&        r|j
        j&        j        nd3d4|j(        rtR          j*         d5|j(         ntR          j*         d6d|d|d|           *t          |||d7          S # tV          $ r?}tY          d8|            t          g g g t[          |          d9d:          cY d}~S d}~ww xY w);u   
    Retorna una lista de usuarios con sus permisos, MÁS las listas maestras de 
    Áreas (incluyendo Gerencia) y URLs. Optimizada con Prefetch(to_attr) y list comprehensions.
    r   errorUnauthorizedi  statusareaidzUser not found     r   )usuarioestado	url__areaurl__area_idTflatN)area_id__inpermisos_arear)   _permisos_area)querysetto_attrpermisos_urlurl_permisos_urlsolicitudessolicitud_urlsolicitud_area_solicitudesarea__gerencianombregerenciaF)urls__isnull)id__inr>   c                 `    g | ]+}|j         |j        |j        |j        r|j        j        nd d,S )zSin Gerencia)r%   r<   gerencia_idgerencia_nombre)r%   r<   rA   r=   ).0as     r   
<listcomp>z&get_usuarios_admin.<locals>.<listcomp>_   sT     # # #
 	 $h=45JRqz00N	
 
 # # #r   c           
          g | ]v}|j         |j        |j        |j        |j        r|j        j        nd |j        r|j        j        r|j        j        nd|j        r|j        j        r|j        j        j        nddwS )	   Sin áreaNSin gerencia)r%   r<   r5   area_idarea_nombrerA   rB   )r%   r<   r5   rI   r#   r=   rA   )rC   us     r   rE   z&get_usuarios_admin.<locals>.<listcomp>l   s     " " "  $h5y,-FC16==12UAFOU16--QU9:gAFOgqv55Yg
 
 " " "r   c                 L    g | ]!}|j         j        |j         j        |j        d "S ))rJ   rI   r)   )r#   r<   r%   r)   )rC   pas     r   rE   z&get_usuarios_admin.<locals>.<listcomp>{   sD     "* "* "*   "w~7:)# # "* "* "*r   c                 b    g | ],}|j         j        |j         j        |j         j         |j        d -S ))
url_nombreurl_idr5   r)   )r5   r<   r%   r)   )rC   pus     r   rE   z&get_usuarios_admin.<locals>.<listcomp>   sK     !) !) !)
 	 !fm&)vz)	" " !) !) !)r   c           	          g | ]R}|j         |j        r|j        j        nd |j        r|j        j        nd |j        |j        |                                dSS )zN/A)r%   rO   rJ   justificacionestado_codigoestado_display)r%   r8   r<   r9   rS   r)   get_estado_display)rC   ss     r   rE   z&get_usuarios_admin.<locals>.<listcomp>   sz      '  '  '  d89Rao44U:;:JUq/66PU!"!""#"6"6"8"8! !  '  '  'r   r%   correoccr)   tipopaisciudadrI   rG   rA   rH   imgzprofile/zprofile/default.png)usuariosmaestro_areasmaestro_urlszError al obtener usuarios: )r^   r_   r`   r     ).r   r   r   objectsselect_relatedr   DoesNotExistrZ   allsetr#   addr%   r   filtervalues_listupdatediscardlistr   r   r   prefetch_relatedorder_byr   distinctr   r1   r6   r:   appendr<   rX   rY   r)   r[   r\   rI   r=   rA   r]   r   	MEDIA_URL	Exceptionprintstr)r   current_user_idcurrent_useris_superadminadmin_area_idsusuarios_queryadmin_area_ids_seturls_con_permisopermiso_area_prefetchpermiso_url_prefetchsolicitudes_prefetchr^   areas_maestrasmaestro_areas_dataurls_maestrasmaestro_urls_datausuarios_datarK   permisos_area_datapermisos_url_datasolicitudes_dataes                         r   get_usuarios_adminr      s   
 ''Wn5cBBBBVt!/)4	I"?99&AAEEEYYLL# 	I 	I 	I*: ;CHHHHHH	I %)Q. 	P$_0022NN!$ A%%,*;%"&&|'8';<<<  *188VW8XXgghstt   A   A  BP  W[   A   \   \%%&6777&&t,,,!"455N$_333OON
 !) (//q/99HHPP$!
 !
 !
  ('..a.88GGNN# 
  
  
  (&55oGWXX" 
  
  
 "009IJJ[[!  
 
 #%%""	 	  	U!\88DDKKY^K__hhjjsst|}}NN!\88DDKKSapuKvv  B  B  K  K  LT  U  UN# #
 "# # #  	GK66v?OPPTTVV__`hiiMMK66v?OPPWWdrWss||  ~F  G  GM" " !" " "  .	 .	A"* "* (	"* "* "*!) !)
 !) !) !) '  ' ~ '  '  '    "ad"!(" !(" ad	"
 !(" " " !(" 19" @[" QVYYqv11UY" afddAFO22Vd" v(,==ae===xOaLvLvLv"   !3!""  1#"$ /%"    , %/-
 
   	  t t t/A//000bRT_bcd_e_efforssssssssstsA   T9 3A  T9  "BT9 BR3T9 9
V4U=7V=VPOSTc                    	 t          j        | j                  }n(# t           j        $ r t	          ddid          cY S w xY w|                    d          }|st	          ddid          S 	 t          j                            |          }n,# t          j        $ r t	          dd| d	id
          cY S w xY wg }	 d|v r*|d         r"|d         |_	        |
                    d           d|v rL|d         Dt          |d                   }|dvrt          d          ||_        |
                    d           n*# t          t          f$ r t	          ddid          cY S w xY w|rr	 |                    |           nZ# t           $ r t	          ddid          cY S t"          $ r/}t%          d|            t	          ddid          cY d}~S d}~ww xY wt	          d|j        d          S )z8
    Actualiza el nombre y el estado de un usuario.
    r      Formato JSON inválido.  r!   rY   u&   CC (cédula) del usuario es requerido.rY   Usuario con CC  no encontrado.r&   r<   r)   N)r   r'   zEl campo estado debe ser 0 o 1.u#   Error de validación en los campos.)update_fieldsz?Error de integridad en la base de datos (ej: nombre duplicado).z#Error al guardar el usuario en DB: z2Error interno del servidor al guardar los cambios.ra   z!Usuario actualizado exitosamente.)messagerY   )jsonloadsbodyJSONDecodeErrorr   r   r   rb   rd   r<   rp   int
ValueErrorr)   	TypeErrorsaver
   rr   rs   rY   )r   datauser_ccr(   fields_to_update
new_statusr   s          r   update_usuarior      s   Nz','' N N NW&?@MMMMMMN hhtnnG ]W&NOX[\\\\_/%%%11 _ _ _W&P&P&P&PQZ]^^^^^^_ ZtX!(^GN##H---tX :T(^,,J'' !BCCC'GN##H---	" Z Z ZW&KLUXYYYYYYZ  m	mLL'7L8888 	z 	z 	z*k luxyyyyyy 	m 	m 	m;;;<<<*^ _hklllllllll	m
 $GwzZZ[[[sX    "A A/ B &B98B9?A>D> >$E%$E%+F G!	G*$GGGc           
      2   	 t          j        | j                  }n(# t           j        $ r t	          ddid          cY S w xY w|                    d          }|                    d          }|r|t	          ddid          S 	 t          j                            |	          }n,# t          j        $ r t	          dd
| did          cY S w xY wg }g }t          j
                    5  t          j                            |          }d |D             }|D ]}		 t          |	                    d                    }
t          |	                    d                    }|rdnd}n,# t          $ r}t!          d|	 d|            Y d}~sd}~ww xY w	 t"          j                            |
          }n'# t"          j        $ r t!          d|
            Y w xY w|
|v rH||
         }|j        |k    r4||_        |                                 |                    |
d|d           n;t          j                            |||          }|                    |
d|d           |dk    r}t,          j                            ||
d          }t/          |                    dd                    }|r5|                    d           |D ]}|                    ||
ddd            	 ddd           n# 1 swxY w Y   t	          d!|||||d"d#          S )$u   
    Recibe JSON para actualizar Permisos de Área y utiliza update_or_create 
    dentro de una transacción atómica para garantizar la consistencia.
    r   r   r   r!   rY   areasNu/   Parámetros missing: cc y areas son requeridos.r   r   r   r&   r(   c                     i | ]
}|j         |S  )rI   rC   ps     r   
<dictcomp>z%update_area_perms.<locals>.<dictcomp>  s    AAA!AAAAr   r%   checkedr'   r   u   Error procesando área: 	, error: r$   u   Área no encontrada: updated)rI   actionr)   )r(   r#   r)   created)r(   r+   r)   rP   Tr,   r0   )rP   rI   r   r)   u   Permisos de área actualizados.)areas_recibidascambios_realizadosurls_actualizadas)r   changesurl_changes
debug_info)r   r   r   r   r   r   r   rb   rd   r   atomicr   rh   r   boolrr   rs   r   r)   r   rp   creater   rl   ri   rj   )r   r   r   r   r(   r   r   permisos_actualespermisos_dictrD   rI   r   estado_deseador   area_objpermisopermisos_url_actualizadosurls_afectadasrP   s                      r   update_area_permsr      sD   Nz','' N N NW&?@MMMMMMN hhtnnGHHWE femW&WXadeeee_/%%%11 _ _ _W&P&P&P&PQZ]^^^^^^_ GK				 8 8'/66w6GG BA/@AAA  0	 0	AaeeDkk**quuY//00&-!41   @@@Q@@AAA<++w+77$   7g77888
 -'''0>^33%3GNLLNNNNNw)We#f#fggg &-44#!) 5  
 7iSabbccc "",6,>,E,E#!( -F - -) "&&?&K&KH[_&K&`&`!a!a! -44A4>>>"0  #**&,'.&/&'	, ,    W0	8 8 8 8 8 8 8 8 8 8 8 8 8 8 8x 4"$")!,
 
		 	 	 	 	s    "A A B' '&CC*2K6A
E('K6(
F2FK6FK6 F65K66!GK6GDK66K:=K:c           	      ^   	 t          j        | j                  }n(# t           j        $ r t	          ddid          cY S w xY w|                    d          }|                    d          }|r|t	          ddid          S 	 t          j                            |	          }n,# t          j        $ r t	          dd
| did          cY S w xY wg }t          j
                    5  t          j                            |          }d |D             }|D ]h}	 t          |                    d                    }	t          |                    d                    }
|
rdnd}n,# t          $ r}t!          d| d|            Y d}~sd}~ww xY w	 t"          j                            |	          }n'# t"          j        $ r t!          d|	            Y w xY wt%          |	          |v rV|t%          |	                   }|j        |k    r4||_        |                                 |                    |	d|d           +|
r;t          j                            |||          }|                    |	d|d           j	 ddd           n# 1 swxY w Y   t	          d|||dd          S )u   
    Recibe JSON para actualizar Permisos de URL y utiliza update_or_create
    dentro de una transacción atómica para garantizar la consistencia.
    r   r   r   r!   rY   urlsNu.   Parámetros missing: cc y urls son requeridos.r   r   r   r&   r   c                 8    i | ]}t          |j                  |S r   )rt   rP   r   s     r   r   z$update_url_perms.<locals>.<dictcomp>d  s"    GGGaQXGGGr   r%   r   r'   r   zError procesando URL: r   r$   zURL no encontrada: r   )rP   r   r)   )r(   r5   r)   r   zPermisos de URL actualizados.)urls_recibidasr   )r   r   r   )r   r   r   r   r   r   r   rb   rd   r   r   r   rh   r   r   rr   rs   r   rt   r)   r   rp   r   )r   r   r   r   r(   r   permisos_existentesr   rK   rP   r   r   r   url_objr   s                  r   update_url_permsr   J  s   Nz','' N N NW&?@MMMMMMN hhtnnG88FD edlW&VW`cdddd_/%%%11 _ _ _W&P&P&P&PQZ]^^^^^^_ G				 %f %f(0777HHGG3FGGG  	f 	fAQUU4[[))quuY//00&-!41   >q>>1>>???+//V/44#   4F44555
 6{{m++'F4>^33%3GNLLNNNNNf	Uc#d#deee  f(077 '#- 8  G
 NNf	Uc#d#deee?	f%f %f %f %f %f %f %f %f %f %f %f %f %f %f %fP 2"")
 
    s    "A A B' '&CC(2JA
E&%J&
F0F
J
FJ F43J4!GJGB)JJJ) django.shortcutsr   r   django.httpr   r   django.confr   django.db.modelsr   django.views.decorators.httpr	   	django.dbr
   r   r   oslogin.modelsr   r   r   usuarios.modelsr   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s   - - - - - - - - 2 2 2 2 2 2 2 2             % % % % % % = = = = = = 1 1 1 1 1 1 1 1  				 0 0 0 0 0 0 0 0 0 0 C C C C C C C C C C C C2 2 2^t ^t ^tB vh0\ 0\   0\f vh[ [   [| vhD D   D D Dr   