
    ޸(i+                         d dl mZ d dlmZm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lmZ d dlmZ d d	lZd d
lmZ ddlmZmZmZmZ ddlmZ d Zd Zd Zd Zd Zd Zd Z d Z!d	S )    )JsonResponse)renderredirect)Prefetch)datedatetime)Decimal)IntegrityError)ValidationError)MaxN)JSONDecodeError   )
TipoActivoMarcaModeloEquipo)servicesc                 R    d| j         vrt          d          S t          | d          S )Nuser_id/zinventario.html)sessionr   r   )requests    0/var/www/html/Desarrollo/tic/inventario/views.pyinventario_viewr      s,    go%%C==	*	+	++    c                     t           j                                        }g }|D ]*}|                    |j        |j        |j        d           +t          |d          S )uJ   Obtiene la lista de TipoActivo usando el patrón de serialización manual.idnombredescripcionFsafe)r   objectsallappendr   r   r    r   )r   tiposdatatipos       r   get_tipos_activor)      sv     

 
 
"
"%	$  dKKG%      
d	'	'	''r   c                     t           j                                        }g }|D ]*}|                    |j        |j        |j        d           +t          |d          S )uF   Obtiene la lista de Marcas usando el patrón de serialización manual.r   Fr!   )r   r#   r$   r%   r   r   r    r   )r   marcasr'   marcas       r   
get_marcasr-   0   su     =&	$  eKKH&      
d	'	'	''r   c                     t           j                                        }g }|D ]*}|                    |j        |j        |j        d           +t          |d          S )uG   Obtiene la lista de Modelos usando el patrón de serialización manual.r   Fr!   )r   r#   r$   r%   r   r   r    r   )r   modelosr'   modelos       r   get_modelosr1   D   su     N  '	$  fKKI'      
d	'	'	''r   c           	      8   t           j                            ddd                                          }g }|D ]Q}|                    i d|j        d|j        r|j        j        ndd|j        r|j        j        ndd|j        r|j        j        ndd|j        r|j        j        ndd|j	        r|j	        j        ndd|j	        r|j	        j        ndd	|j
        d
|j        t          |j                  ndd|j        d|j        t          |j                  ndd|j        d|j        d|j        d|j        d|j        d|j        i d|j        d|j        d|j        d|j        d|j        r|                                ndd|j        d|j        d|                                d|j        rt          |j                  ndd|j        d|j        r|                                ndd|j         r|j         !                                ndd|j"        d |j#        r|j#        !                                ndd!|j$        d"|j%        d#|j&        i d$|j'        d%|j(        d&|j)        d'|j*        d(|j+        d)|j,        d*|j-        d+|j.        d,|j/        d-|j0        d.|j1        r|j1        ndd/|j2        r|j2        !                                ndd0|j3        r|j3        !                                ndd1|j4        r|j4        j5        ndd2|j6        d3|j7        d4|j8        |j9        r|j9        !                                nd|j:        r|j:        !                                nd|j;        d5           Sty          |d67          S )8u   
  Obtiene la lista de Equipos (Inventario) con toda la información incluyendo campos financieros y de auditoría.
  Maneja ForeignKeys nulas, IntegerFields, DateFields y DateTimeFields.
  id_marca	id_modeloid_tipo_activor   Nnombre_modelonombre_marcanombre_tipo_activo
cod_activonumero_activoserialasset_iduuidramdisco
procesador	cpu_coresr    SO
version_sor(   
estado_usoestado_uso_displayprestamoimpactimpact_displaycostotipo_propiedadtipo_propiedad_displayfecha_adquisicionmeses_garantiafecha_vencimiento_garantiagarantia_activadias_hasta_vencimientoalerta_vencimientodepartamentociudadsedebodegapisodetalle_ubicacionIPMAChostNamedominioultimo_login	fecha_invfecha_ultima_auditoriaruta_qrdias_sin_auditarrequiere_auditoriaactivo)fecha_creacionfecha_actualizacionnotasFr!   )=r   r#   select_relatedr$   r%   r   r4   r   r3   r5   r9   r:   strr;   r<   r=   r>   r?   r@   rA   r    rB   rC   r(   rD   get_estado_uso_displayrF   rG   get_impact_displayrI   rJ   get_tipo_propiedad_displayrL   	isoformatrM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   urlr`   ra   rb   rc   rd   re   r   )r   equiposr'   equipos       r   get_equiposro   X   s    N))*kCSTTXXZZ'	$ T TfKK S
FIS &*:D6#&&	S
 &2BLv'..S A&/$$TS Ifo,,TS F4IS-00tS F<Q[F188W[S F%S F4H4Ts6/000Z^S  !S" &/*E#fo&&&4#S$ fk%S* VZ+S, v|-S. F%/S0 6#1S2 V'3S S8 FI9S: F%;S@ fkASB F%CSD v?PZF99;;;VZESF &/GSH ISJ 1133KSP FL:s6<   dQSR -SST vG\ f A A C C CbfUSV 6C[e63==???aeWSX -YSZ #U[Uv  %AF$E$O$O$Q$Q$Q  }A[S` /aSb  =cSd F5eS S Sj f)kSl mSn fkoSp qSr fksSt 63uSz FI{S| VZ}S~ &/S@ ASB V-@Jf))dCSH 63CM6#--///ISJ VMj t = G G I I IptKSP v~?##4QSV &1WSX F5YS^ _S S` >D=R\-77999X\GMGakV7AACCCgk|eS S S S S S Sj 
d	'	'	''r   c                    | j         dk    rt          ddid          S 	 t          j        | j                  }n## t
          $ r t          ddid          cY S w xY w	 t          j        |          }t          d|j        |j	        |j
        |j        |j        r|                                nd	|j        |j        |j        r|j        j        nd	d
	d          S # t"          t$          t&          f$ r+}t          dt)          |          dd          cY d	}~S d	}~wt*          $ r-}t          ddt)          |           id          cY d	}~S d	}~ww xY w)u   
    Crea un nuevo registro de Equipo a partir de una solicitud POST con datos JSON,
    delegando la lógica de negocio al módulo services (incluyendo generación QR).
    POSTerror   Solo se acepta el método POST  statusu"   Cuerpo de solicitud JSON inválidoi  zEquipo creado exitosamenteN)	messager   r9   r;   rJ   rK   rO   rP   r_      z!Error en los datos proporcionados)rr   detallez"Error interno al crear el equipo:   )methodr   jsonloadsbodyr   r   crear_nuevo_equipor   r9   r;   rJ   rj   rO   rP   r_   rl   r
   
ValueErrorr   rg   	Exception)r   r'   nuevo_equipoes       r   create_equipor      s   
 ~W&FGPSTTTTYz','' Y Y YW&JKTWXXXXXXY2488 3/&1")*9S_Sn&xl&M&M&O&O&Otx+;&2&I3?3GQ|+//T
 
    	 J8   81vv
 
    	 	 	 	 	 	
    B#a&&BB
   	 	 	 	 	 	s@   : AAA:C E0 DEE#"EEEc                    | j         dk    rt          ddid          S 	 t          j                    }t          |d          S # t          $ r0}t          d|            t          dd	d
d          cY d}~S d}~ww xY w)uk   
    Obtiene el próximo cod_activo y asset_id sugerido, delegando la lógica
    al módulo services.
    GETrr   u   Solo se acepta el método GETrt   ru      zError en sugerir_ids_equipo: zATJ-00011)cod_activo_sugeridoasset_id_sugeridoN)r{   r   r   generar_sugerencia_idsr   print)r   sugerenciasr   s      r   sugerir_ids_equipor      s    
 ~W&EFsSSSS577K4444   1a11222#-!$
 
    	 	 	 	 	 	s   #A 
A>%A93A>9A>c                    | j         dk    rt          ddid          S 	 t          j        |          }t          d|j        |j        r|j        j        nddd	          S # t          $ r*}t          dt          |          id
          cY d}~S d}~wt          $ r-}t          ddt          |           id          cY d}~S d}~ww xY w)u   
    Endpoint para forzar la generación del QR de un equipo específico.
    Se accede vía POST: /inventario/api/equipo/<id>/generar_qr/
    rq   rr   rs   rt   ru   zQR generado exitosamenteN)rw   r   r_   r   i  zError interno: rz   )
r{   r   r    generar_qr_para_equipo_existenter   r_   rl   r   rg   r   )r   r   equipo_actualizador   s       r   generate_qr_existingr   	  s'   
 ~W&FGPSTTTTO%FrJJ1$'9K9S])155Y]
 
 	   	  ; ; ;Wc!ff-c::::::::: O O OW&@A&@&@A#NNNNNNNNNOs0   A A! !
C
+B
C
C
"C?C
C
)"django.httpr   django.shortcutsr   r   django.db.modelsr   r   r   decimalr	   	django.dbr
   django.core.exceptionsr   r   r|   json.decoderr   modelsr   r   r   r    r   r   r)   r-   r1   ro   r   r   r    r   r   <module>r      s   % $ $ $ $ $ - - - - - - - - % % % % % % # # # # # # # #       $ $ $ $ $ $ 2 2 2 2 2 2              ( ( ( ( ( ( 5 5 5 5 5 5 5 5 5 5 5 5      , , ,( ( ((( ( ((( ( ((_( _( _(L* * *b  4O O O O Or   