
    ޸(i#                         d dl m Z mZ d dl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Zd dlZd	d
lmZmZmZmZ d Zd Zd Zd Zd Zd Zd Zej        defd            Zd Z dS )    )datetimedate)Decimal)Max)transactionIntegrityError)ValidationError)ContentFile)BytesION   )
TipoActivoMarcaModeloEquipoc                     |                     |          }|J|dk    rD	 | j                             |          S # | j        $ r t          d| j         d|           w xY wdS )u=   Función auxiliar para obtener la instancia del modelo o NoneN pkzID de u    no válido: )getobjectsDoesNotExist
ValueError__name__)modelid_keydataid_vals       3/var/www/html/Desarrollo/tic/inventario/services.pyget_instance_or_noner      s    XXfFfll	M=$$$///! 	M 	M 	MKenKK6KKLLL	M4s	   : %Ac                     | rS	 t          j        |                     dd                                                    S # t          t
          f$ r Y dS w xY wdS )z"Convierte string ISO a objeto dateZ+00:00N)r   fromisoformatreplacer   r   AttributeError)date_strings    r   
parse_dater'      sh     	)+*=*=c8*L*LMMRRTTTN+ 	 	 	44	4s   9> AAc                     | rA	 t          j        |                     dd                    S # t          t          f$ r Y dS w xY wdS )z&Convierte string ISO a objeto datetimer!   r"   N)r   r#   r$   r   r%   )datetime_strings    r   parse_datetimer*   &   s\     	)/*A*A#x*P*PQQQN+ 	 	 	44	4s   ', A Ac                     | ;| dk    r5	 t          t          |                     S # t          t          f$ r Y dS w xY wdS )zConvierte string a DecimalNr   )r   strr   	TypeError)decimal_strings    r   parse_decimalr/   /   sY    !n&:&:	3~..///I& 	 	 	44	4s   & ;;c                 f    | | dk    rdS 	 t          |           S # t          t          f$ r Y dS w xY w)uH   Convierte a int si es posible, devuelve None si está vacío o inválidoNr   )intr   r-   )	int_values    r   	parse_intr3   8   sM    IOOt9~~	"   tts    00c                     t           j                            t          d          t          d                    } | d         }d}|rLt	          |t
                    r7d|v r3	 t          |                    d          d                   pd}n#  Y nxY w|dz   }|d	}d
| }| d         }t          |          pd}t          |dz             }||dS )u?   
    Calcula y devuelve el próximo cod_activo y asset_id.
    
cod_activoasset_id)max_cod_activomax_asset_idr7   r   -r   04dzATJ-r8   )cod_activo_sugeridoasset_id_sugerido)r   r   	aggregater   
isinstancer,   r3   split)	
max_valueslast_cod_activolast_number
new_numbernew_cod_activo_suffixnew_cod_activolast_asset_idlast_asset_numbernew_asset_ids	            r   generar_sugerencia_idsrJ   F   s    ))<((__ *  J !!12OK :os;; @V@V	#O$9$9#$>$>r$BCCHqKK	DqJ)//3133N ~.M!-005A(1,--L  .)  s   "*B Bc                 `   t          j        dt           j        j        dd          }|                    |            |                    d           |                    dd	          }t                      }|                    |d
           t          |
                                          S )z%Genera un objeto imagen QR en memoriar   
      )versionerror_correctionbox_sizeborderT)fitblackwhite)
fill_color
back_colorPNG)format)qrcodeQRCode	constantsERROR_CORRECT_Ladd_datamake
make_imager   saver
   getvalue)data_contentqrimgbuffers       r   generar_imagen_qrrf   g   s    	)9	
 
 
B KKGGG
--7w-
?
?CYYFHHVEH"""v(()))    r   c           
      F
   |                      d          r|                      d          sNt                      }|                      d          s|d         | d<   |                      d          s|d         | d<   | d                             d          d         }t          |          | d<   |                      d          st	          d          |                      d	          sd
| d	<   t          t          d|           }t          t          d|           }t          t          d|           }t          j
        j        d3i d|d|d|d|                      d          d|                      d          d|                      d          d|                      d          d|                      d          d|                      d          d|                      d          d|                      d          dt          |                      d                    d|                      d          d|                      d          d|                      d          d|                      d          d	|                      d	          d|                      dd          d|                      dd          dt          |                      d                    d|                      d          dt          |                      d                    dt          |                      d                    d t          |                      d                     d!|                      d!          d"|                      d"          d#|                      d#          d$|                      d$          d%|                      d%          d&|                      d&          d'|                      d'          d(|                      d(          d)|                      d)          d*|                      d*          d+t          |                      d+                    d,t          |                      d,                    pt          j                    d-t          |                      d-                    d.|                      d.d/          d0|                      d0          }|j        r;t%          |j                  }|j         d1}|j                            ||d/2           |S )4u   
    Procesa el diccionario de datos, realiza la autogeneración de IDs y crea 
    el registro del equipo. Genera y guarda el QR automáticamente.
    r5   r6   r<   r=   r9   r:   numero_activoz>El campo cod_activo es obligatorio y no pudo ser autogenerado.
estado_uso
Disponibleid_marca	id_modeloid_tipo_activoserialuuidramdisco
procesador	cpu_coresdescripcionSO
version_sotipoprestamoFimpactlowcostotipo_propiedadfecha_adquisicionmeses_garantiafecha_vencimiento_garantiadepartamentociudadsedebodegapisodetalle_ubicacionIPMAChostNamedominioultimo_login	fecha_invfecha_ultima_auditoriaactivoTnotas.pngr`    )r   rJ   r@   r3   r   r   r   r   r   r   r   creater/   r'   r*   r   todayr5   rf   ruta_qrr`   )	r   sugerenciascod_activo_num_strmarca_instancemodelo_instancetipo_activo_instancenuevo_equipo
qr_contentfilenames	            r   crear_nuevo_equipor   w   s    88L!! @*)=)= @,..xx%% 	D!,-B!CDxx
## 	@*+>?D l+11#66r:%&899D88L!! \Z[[	[ 88L!! *)\)%TBBN*6;EEO/
<LdSS >( < < << "/< ,+	< 88L)))< hh///< xx!!!< *%%%< XXf< HHUOOO< hhw<  88L)))!<" DHH[11222#<$ HH]+++%<* 88D>>>+<, 88L)))-<2 XXf3<4 88L)))5<6 *e,,,7<8 xx%(((9<> DHHW--...?<@ xx 0111A<B %TXX.A%B%BCCCC<D !*:!;!;<<<E<F $.dhh7S.T.T#U#U#UG<L XXn---M<N xx!!!O<P XXfQ<R xx!!!S<T XXfU<V ((#6777W<\ 88D>>>]<^ HHUOOO_<` *%%%a<b ###c<d $DHH^$<$<===e<j TXXk2233Ctz||k<l  .dhh7O.P.PQQQm<t xx$'''u<v hhww<L@  C&|'>??
"-333 	!!(JT!BBBrg   c                 6   	 t           j                            |           }n%# t           j        $ r t	          d|            w xY w|j        st	          d          t          |j                  }|j         d}|j                            ||d           |S )z
    Busca un equipo por ID. Si existe, genera su QR basado en el cod_activo
    y lo guarda en el campo ruta_qr. Retorna la instancia actualizada.
    r   zNo existe el equipo con ID uS   El equipo no tiene un Código Activo (cod_activo) asignado, no se puede generar QR.r   Tr   )	r   r   r   r   r   r5   rf   r   r`   )	equipo_idequipor   r   s       r    generar_qr_para_equipo_existenter      s    
D##y#11 D D DByBBCCCD  pnooo #6#455J#)))H N*4888Ms	    # "A)!r   r   decimalr   django.db.modelsr   	django.dbr   r   django.core.exceptionsr	   django.core.files.baser
   ior   rY   jsonmodelsr   r   r   r   r   r'   r*   r/   r3   rJ   rf   atomicdictr   r   r   rg   r   <module>r      s{   $ # # # # # # #                   1 1 1 1 1 1 1 1 2 2 2 2 2 2 . . . . . .         5 5 5 5 5 5 5 5 5 5 5 5            B* * *  fT f f f fP    rg   