
    >:hN                     X   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mZ 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  e            Z G d dej                  Z G d dej                  Z G d dej                  Z G d dej                  Z  G d dej                  Z! G d dej                  Z" G d dej                  Z# G d dej                  Z$ G d dej                  Z% G d d ej                  Z& G d! d"ej                  Z'd#S )$    )models)ValidationError)MinValueValidator)timezone)Decimal)	ProveedorProveedorReferencia)
Referencia)	FormaPagoEmpaqueCompra)get_user_model)PlantaProduccionMaquina)post_delete)receiverc                       e Zd Zg dZ ej        eej        d          Z ej        e	ej        d          Z
 ej        d          Z ej        d          Z ej        eej        d	
          Z ej        ded          Z ej        d          Z ej        dddd          Z G d d          Zd Z fdZed             Zd Zd Zd Z xZS )OrdenCompra))borradorBorrador)	pendienteu   Pendiente de aprobación)aprobadaAprobada)	rechazada	Rechazada)	en_caminoz	En camino)recibidaRecibida)	cancelada	Canceladaordenes_compra	on_deleterelated_nameordenes_compra_creadasT)auto_now_addzFecha requerida de entrega)verbose_namezForma de pagor"   r&      r   )
max_lengthchoicesdefaultblankFu   Número de orden)r)   uniqueeditabler&   c                   (    e Zd ZdZdZdZdgZddgZdS )OrdenCompra.Metacompras_ordencomprazOrden de Comprau   Órdenes de Compraz-fecha_creacion)aprobar_ordencomprau    Puede aprobar órdenes de compra)recibir_ordencomprau$   Puede marcar órdenes como recibidasN)__name__
__module____qualname__db_tabler&   verbose_name_pluralorderingpermissions     ;C:\Users\a_gir\Desktop\Interacto\siip\movimientos\models.pyMetar1   8   s3        ((2%&GK
r=   r?   c                 8    d| j          d| j         d| j         dS )NOC-z | z ())numero_orden	proveedorestadoselfs    r>   __str__zOrdenCompra.__str__B   s*    KT&KK4>KKT[KKKKr=   c                    | j         slt          j                                        d          }t          j                            d|                                           }d| d|dz   d| _         | j        dk    r| j	        j
        du rt          j                            | j        	          }|j        dk    r| j                                        D ]e}|j        }|j        }|j        pd
}	|j        }
|j        }||
z   }|d
k    r||	z  |
|z  z   |z  }n|}||_        ||_        |                                 f t+                      j        |i | d S )Nz%Y%m%drA   )numero_orden__startswith-   04dr   Fpkr   )rC   r   nowstrftimer   objectsfiltercountrE   _stateaddinggetrO   itemsall
referenciastockprecio_costocantidadprecio_unitariosavesuper)rG   argskwargsfechaultima_ordenoriginalitemrefcantidad_existentecosto_existentecantidad_nuevacosto_nuevonuevo_stocknuevo_costo	__class__s                 r>   r_   zOrdenCompra.saveE   s     	ELNN++H55E&.55)6u 6  egg  !Ee D DlQ.> D D DD;*$$);u)D)D"*..$'.::H*,, JNN,,  D/C),&&)&6&;!O%)]N"&"6K"4~"EK"Q//A+k9;''(
 '2 +CI'2C$HHJJJJd%f%%%%%r=   c                 b    t          d | j                                        D                       S )Nc              3   $   K   | ]}|j         V  d S N)subtotal).0rf   s     r>   	<genexpr>z$OrdenCompra.total.<locals>.<genexpr>j   s$      >>T4=>>>>>>r=   )sumrX   rY   rF   s    r>   totalzOrdenCompra.totalh   s+    >>TZ^^-=-=>>>>>>r=   c                     | j         dv r=| j        t          j                                                    k     rt          d          d S d S )N)r   r   z-La fecha requerida no puede ser en el pasado.)rE   fecha_requeridar   rP   dater   rF   s    r>   cleanzOrdenCompra.cleanl   sL    ;3338Lx|~~ObObOdOd8d8d!"QRRR 438d8dr=   c                 p    | j         dk    rt          d          d| _         |                                  d S )Nr   u+   Solo se pueden aprobar órdenes pendientes.r   rE   r   r_   rG   usuarios     r>   aprobarzOrdenCompra.aprobarp   s6    ;+%%!"OPPP 		r=   c                 p    | j         dk    rt          d          d| _         |                                  d S )Nr   u*   Solo se pueden recibir órdenes en camino.r   r|   r}   s     r>   marcar_como_recibidaz OrdenCompra.marcar_como_recibidav   s6    ;+%%!"NOOO 		r=   )r5   r6   r7   ESTADOSr   
ForeignKeyr   PROTECTrD   User
creada_porDateTimeFieldfecha_creacion	DateFieldrx   r   
forma_pago	CharFieldrE   	TextFieldobservacionesrC   r?   rH   r_   propertyrv   rz   r   r   __classcell__rn   s   @r>   r   r      s         G "!.%  I
 #".-  J
 *V)t<<<N&f&4PQQQO"".$  J
 V  F
 %F$4000M#6#'	  L
 
 
 
 
 
 
 
L L L!& !& !& !& !&F ? ? X?S S S        r=   r   c                       e Zd Z ej        eej        d          Z ej        eej	        d          Z
 ej        dd ed          g          Z ej        dd ed          g          Z ej        eej	        d	
          Z ej        eej	        ddd          Z ej        ddd          Z ej        dd          Z G d d          Zed             Z fdZd Zd Z xZS )ItemOrdenComprarX   r!   items_orden_compra      g-C6?
max_digitsdecimal_places
validatorsr   zEmpaque de comprar'   Tu   Relación Proveedor-Referencia)r"   nullr-   r&   u"   Tiempo estimado de entrega (días))r&   r   r-   FzCertificado por proveedor)r+   r&   c                   D    e Zd ZdZdZdZ ej        ddgd          gZdS )	ItemOrdenCompra.Metacompras_itemordencomprau   Ítem de Orden de Comprau   Ítems de Órdenes de CompraordenrZ   unique_item_orden_referencia)fieldsnameN)	r5   r6   r7   r8   r&   r9   r   UniqueConstraintconstraintsr<   r=   r>   r?   r      sG        ,1<#F#.3  
r=   r?   c                 @    | j         | j        dS | j         | j        z  S Nr   )r]   r^   rF   s    r>   rr   zItemOrdenCompra.subtotal   s'    = D$8$@1}t333r=   c                     | j         $| j        r| j        j         r| j        j         | _          t                      j        |i | d S rq   )	lead_timeproveedor_referenciar`   r_   rG   ra   rb   rn   s      r>   r_   zItemOrdenCompra.save   sL    >!d&?!DD]Dg!!6@DNd%f%%%%%r=   c                 Z    | j         | j         nd}| j        pd d| j        j         d| dS )NzNo definidor   z x z ($z/u))r^   r]   rZ   sku)rG   precios     r>   rH   zItemOrdenCompra.__str__   sB    )-)=)I%%}-$1LL)<LLLLLLr=   c                     t           j                            | j        j        | j                                                  st          d          d S )N)rD   rZ   z8Este proveedor no suministra la referencia seleccionada.)r	   rR   rS   r   rD   rZ   existsr   rF   s    r>   rz   zItemOrdenCompra.clean   sX    "*11j* 2 
 
 &((	^ ""\]]]		^ 	^r=   )r5   r6   r7   r   r   r   CASCADEr   r
   r   rZ   DecimalFieldr   r]   r^   r   empaquer	   r   PositiveIntegerFieldr   BooleanFieldcertificador?   r   rr   r_   rH   rz   r   r   s   @r>   r   r   |   s       F.  E
 #".)  J
 #v"%%f--.  H
 *f)%%a(()  O
  f.(  G
 -6,.5   ,+9  I
 &&%0  K
	
 	
 	
 	
 	
 	
 	
 	
 4 4 X4
& & & & &
M M M^ ^ ^ ^ ^ ^ ^r=   r   c                   8    e Zd Z ej        eej                  Z ej        e	j
                  Z ej        dd          Z ej        dd          Z ej        ddd          Z ej        ddd          Z ej        dd	d          Z fd
Zd Z xZS )AjusteInventarioFisicor"   r+   r   r   r   r   r   )r   r   r+         c                 x   | j         s| j        j        | _        t	          | j        | j        z
  d          | _        t	          | j        | j        z
  d          | _        | j        | j        j        z  | _	        | j        | j        _        | j        
                                  t                      j
        |i | d S r   )rO   rZ   r[   cantidad_antesmaxcantidad_despuesunidades_entradaunidades_salidar\   valor_totalr_   r`   r   s      r>   r_   zAjusteInventarioFisico.save   s    w 	8"&/"7D #D$9D<O$OQR S S"4#69N#NPQRR04?3OO $ 5d%f%%%%%r=   c                 0    d| j         j         d| j         S )NzAjuste inventario  - rZ   r   rc   rF   s    r>   rH   zAjusteInventarioFisico.__str__   s    HDO$7HHDJHHHr=   )r5   r6   r7   r   r   r
   r   rZ   r   r   rP   rc   r   r   r   r   r   r   r_   rH   r   r   s   @r>   r   r      s        "":HHHJFX\222E(V(BqIIIN*v*bKKK*v*bTUVVV)f)RSTUUUO%&%AqQQQK& & & & &I I I I I I Ir=   r   c                       e Zd Z ej        eej                  Z ej        e	j
                  Z ej        dd          Z ej        d          Z ej        eej                  Z ej        ddd	          Z ej        ddd	          Z ej        ddd	          Z ej        d
dd	          Z G d d          Z fdZd Z xZS )MuestraComercialr   r   r   r   r   Tr,   Fr   r   r/   r   r   c                       e Zd ZdZdZdgZdS )MuestraComercial.MetazMuestra ComercialzMuestras Comerciales-fechaNr5   r6   r7   r&   r9   r:   r<   r=   r>   r?   r      s         *4:r=   r?   c                 6   | j         sw| j        j        | _        | j        j        | _        | j        | j        z  | _        | j        | j        z
  | _        | j        | j        _        | j        	                    dg            t                      j	        |i | d S Nr[   update_fields)rO   rZ   r[   stock_antesr\   costo_unitariocantidad_entregadavalor_total_salidastock_despuesr_   r`   r   s      r>   r_   zMuestraComercial.save   s    w 	:#4D"&/">D&*&9D<S&SD#!%!1D4K!KD$($6DO!O  y 999d%f%%%%%r=   c                 0    d| j         j         d| j         S )NzMuestra de r   r   rF   s    r>   rH   zMuestraComercial.__str__   s    AT_0AATZAAAr=   )r5   r6   r7   r   r   r
   r   rZ   r   r   rP   rc   r   r   r   r   r   entregado_porr   r   r   r   r?   r_   rH   r   r   s   @r>   r   r      sU       "":HHHJFX\222E,,1MMM$F$4000M%F%dfnEEEM%&%APUVVVK'F'2aRWXXXM(V(BqSXYYYN,,1W\]]]       

& 
& 
& 
& 
&B B B B B B Br=   r   c                       e Zd Z ej        eej                  Z ej        eej                  Z	 ej        e
ej                  Z ej        ej                  Z ej        dd          Z ej        dd          Z ej        dddd          Z ej        dd          Z ej        dddd          Z ej        dd	dd          Z G d
 d          Z fdZ xZS )RecepcionProduccionr   r   r   r   r   Tr   r   r-   r   r   r   c                        e Zd ZdZdZdZdgZdS )RecepcionProduccion.Meta,mov_recepcion_produccion_recepcionproduccionu   Recepción de Producciónu   Recepciones de Producciónr   N)r5   r6   r7   r8   r&   r9   r:   r<   r=   r>   r?   r     s%        A2::r=   r?   c                    | j         | j        z   | _        | j        j        pt          d          }| j         |z  }| j        | j        z  }||z   | _        | j        r| j        | j        z  nt          d          | _        | j        | j        _	        | j        | j        _        | j        
                    ddg            t                      j
        |i | d S )N0r[   r\   r   )r   cantidad_producidar   rZ   r\   r   costo_unitario_produccionr   nuevo_costo_ponderador[   r_   r`   )rG   ra   rb   ri   total_existentetotal_nuevorn   s         r>   r_   zRecepcionProduccion.save  s     $ 3d6M M /6F'#,,-?1D4RR +[8
 $Dt444 	" !% 5'+'A$G^+DEEEd%f%%%%%r=   )r5   r6   r7   r   r   r
   r   rZ   r   plantar   maquinar   r   rP   rc   r   r   r   r   r   r   r   r?   r_   r   r   s   @r>   r   r      sw       "":HHHJV/6>JJJFf6>BBBGFX\222E(V(BqIIIN,,1MMM*v*at$   !4 3rRS T T T/F/at$   &&%at$  K       & & & & & & & & &r=   r   c            	       6    e Zd Z ej        eej                  Z ej        dd e	 e
d                    g          Z ej        dd          Z ej        ej                  Z ej        eej                  Z G d	 d
          Z fdZd Z xZS )MovimientoVentar   r   r   z0.0001r   r   r   r   c                       e Zd ZdZdZdgZdS )MovimientoVenta.MetaVentaVentasr   Nr   r<   r=   r>   r?   r   ;  s         &:r=   r?   c                     | j         xj        | j        z  c_        | j                             dg            t	                      j        |i | d S r   rZ   r[   r]   r_   r`   r   s      r>   r_   zMovimientoVenta.save@  sW    .G9555d%f%%%%%r=   c                 @    d| j          d| j        j         d| j         S )Nz	Venta de  de z a $)r]   rZ   r   precio_unitario_ventarF   s    r>   rH   zMovimientoVenta.__str__F  s*    c4=ccdo.AcctGacccr=   )r5   r6   r7   r   r   r
   r   rZ   r   r   r   r]   r   r   r   rP   rc   r   
creado_porr?   r_   rH   r   r   s   @r>   r   r   1  s       "":HHHJ"v"a%%ggh&7&7889  H 0F/2aPPPFX\222E""46>BBBJ       
& & & & &d d d d d d dr=   r   c                       e Zd Z ej        eej        dd          Z ej        eej                  Z	 ej
        ej                  Z ej        dd          Z ej        dd          Z ej        dd          Z ej        dd          Z ej        ddd	d	
          Z ej        ddd	d	
          Z fdZd Z xZS )DevolucionCompradevoluciones_comprau   Ítem de orden origenr"   r#   r&   r   r   r   r   r   Tr   r   r   c                 v   | j         | j        z
  | _        | j         | j        j        z  }| j        | j        z  }||z
  }| j        dk    r
|| j        z  nd| _        || _        | j        | j        _        | j        | j        _        | j        	                    ddg            t                      j	        |i | d S Nr   r[   r\   r   )r   cantidad_devueltar   rZ   r\   precio_unitario_devueltonuevo_precio_ponderador   r[   r_   r`   )rG   ra   rb   valor_inventariovalor_devolucionnuevo_valorrn   s         r>   r_   zDevolucionCompra.saveY  s     $ 3d6L L.1MM1D4QQ&)99MQMbefMfMfkD4I&I&Ilm#& $ 5'+'B$G^+DEEEd%f%%%%%r=   c                 0    d| j         j         d| j         S )N   Devolución r   r   rF   s    r>   rH   zDevolucionCompra.__str__e  s    Bdo1BBdjBBBr=   )r5   r6   r7   r   r   r   r   rf   r
   rZ   r   r   rP   rc   r   r   r   r   r   r   r   r_   rH   r   r   s   @r>   r   r   I  sA       6.*,	  D #":HHHJFX\222E(V(BqIIIN++r!LLL*v*bKKK2v2bQRSSS0V0BqX\cghhh%&%ATX\]]]K
& 
& 
& 
& 
&C C C C C C Cr=   r   c                   &    e Zd Z ej        eej        dd          Z ej        eej                  Z	 ej
        dd          Z ej        ej                  Z ej        eej                  Z ej        d	d	
          Z fdZd Z xZS )DevolucionMuestraComercialdevoluciones_muestrazMuestra origenr   r   r   r   r   r   T)r-   r   c                     | j         xj        | j        z  c_        | j                             dg            t	                      j        |i | d S r   r   r   s      r>   r_   zDevolucionMuestraComercial.savev  sW    .G9555d%f%%%%%r=   c                 @    d| j          d| j        j         d| j         S Nu   Devolución de r   z el r]   rZ   r   rc   rF   s    r>   rH   z"DevolucionMuestraComercial.__str__{  )    YYYDO4GYYTZYYYr=   )r5   r6   r7   r   r   r   r   muestrar
   rZ   r   r]   r   r   rP   rc   r   r~   r   
comentarior_   rH   r   r   s   @r>   r  r  i  s        f.+%	  G #":HHHJ"v"bCCCHFX\222Ef???G!!4888J& & & & &
Z Z Z Z Z Z Zr=   r  c                       e Zd Z ej        eej        dd          Z ej        eej                  Z	 ej
        dd          Z ej
        dd          Z ej        ej                  Z ej        d	
          Z ej
        ddd          Z ej
        ddd          Z ej
        ddd          Z ej
        ddd          Z ej
        ddd          Z fdZd Z xZS )DevolucionProducciondevoluciones_produccionu   Recepción origenr   r   r   r   r   r   Tr,   Fr   r   r   c                    | j         j        | _        | j         j        pd| _        | j        | j        z
  }|dk    r8| j        | j        z  }| j        | j        z  }||z
  | _        | j        |z  | _        nd| _        | j        | _        || _	        || j         _        | j        | j         _        | j         
                    ddg            t                      j
        |i | d S r   )rZ   r[   r   r\   precio_costo_antesr   r   r   nuevo_precio_costor   r_   r`   )rG   ra   rb   restanter   total_salidarn   s         r>   r_   zDevolucionProduccion.save  s    ?0"&/">"C!#d&<<a<<".1HHO1D4GGL$3l$BD!&*&;h&FD##$%D!&*&=D#% ('+'>$G^+DEEEd%f%%%%%r=   c                 0    d| j          d| j        j         S )Nr   z unidades de )r   rZ   r   rF   s    r>   rH   zDevolucionProduccion.__str__  s     Xd4XX4?CVXXXr=   )r5   r6   r7   r   r   r   r   	recepcionr
   rZ   r   r   r   r   r   rP   rc   r   r   r   r   r  r  r   r_   rH   r   r   s   @r>   r  r    sp       !!..(	  I #":HHHJ++r!LLL(V(BqIIINFX\222E$F$4000M%&%APUVVVK'F'2aRWXXXM,,1W\]]],,1W\]]]*v*bUZ[[[& & & & &$Y Y Y Y Y Y Yr=   r  c                   4    e Zd Z ej        eej        dd          Z ej        eej                  Z	 ej
        dd          Z ej
        dd          Z ej        ej        	          Z ej        d
          Z G d d          Z fdZd Z xZS )MovimientoDevolucionVentadevoluciones_ventazVenta origenr   r   r   r   r   r   r   Tr,   c                       e Zd ZdZdZdgZdS )MovimientoDevolucionVenta.Metau   Devolución de VentazDevoluciones de Ventar   Nr   r<   r=   r>   r?   r    s         -5:r=   r?   c                 ^   | j         s| j        xj        | j        z  c_        | j                            dg           ddlm} | j                            d          } || j        || j                  }t          d| d| j         d	|             t                      j        |i | d S )
Nr[   r   r   )calcular_precio_venta_ponderadorL   )dayu#   💡 Nuevo precio venta ponderado (u   →z): )rO   rZ   r[   r]   r_   
siip.utilsr  rc   replaceprintr`   )rG   ra   rb   r  iniciopondrn   s         r>   r_   zMovimientoDevolucionVenta.save  s    w 	ZO!!T]2!!O  y 999BBBBBBZ''A'..F224?FDJWWDXXX4:XXRVXXYYYd%f%%%%%r=   c                 @    d| j          d| j        j         d| j         S r  r  rF   s    r>   rH   z!MovimientoDevolucionVenta.__str__  r  r=   )r5   r6   r7   r   r   r   r   ventar
   rZ   r   r]   precio_venta_unitarior   r   rP   rc   r   r   r?   r_   rH   r   r   s   @r>   r  r    s       F.)#	  E #":HHHJ"v"bCCCH/F/2aPPPFX\222E$F$4000M       
& & & & &Z Z Z Z Z Z Zr=   r  c                        e Zd Z ej        eej        d          Z ej        ddd          Z	 ej
        ej        d          Z ej        d	d
d          Z ej        d
d          Z fdZ fdZ xZS )MovimientoPerdidaProcesoperdidas_en_procesor!   
   r   u   Cantidad de unidades dañadas)r   r   	help_textu   Fecha y hora de la pérdida)r+   r)     Tu,   Descripción breve del motivo de la pérdida)r)   r-   r)  zComentarios adicionales)r-   r)  c                 "   | j         r5t          j                            | j                   }| j        |j        z
  }n| j        } t                      j        |i | | j        xj        |z  c_        | j                            dg           d S )NrN   r[   r   )	rO   r&  rR   rW   r]   r`   r_   rZ   r[   )rG   ra   rb   prevdeltarn   s        r>   r_   zMovimientoPerdidaProceso.save  s    7 	"+377477CCDMDM1EEMEd%f%%%&G955555r=   c                     | j         xj        | j        z  c_        | j                             dg            t	                      j        |i | d S r   )rZ   r[   r]   r_   r`   deleter   s      r>   r/  zMovimientoPerdidaProceso.delete  sW    .G9555''''''r=   )r5   r6   r7   r   r   r
   r   rZ   r   r]   r   r   rP   rc   r   motivor   r   r_   r/  r   r   s   @r>   r&  r&    s        "".*  J
 #v"a1  H !F /  E V@  F
 %F$+  M
	6 	6 	6 	6 	6( ( ( ( ( ( ( ( (r=   r&  N)(	django.dbr   django.core.exceptionsr   django.core.validatorsr   django.utilsr   decimalr   proveedores.modelsr   r	   referencias.modelsr
   listas_configuracion.modelsr   r   django.contrib.authr   fabricacion.modelsr   r   django.db.models.signalsr   django.dispatchr   r   Modelr   r   r   r   r   r   r   r  r  r  r&  r<   r=   r>   <module>r>     s@         2 2 2 2 2 2 4 4 4 4 4 4 ! ! ! ! ! !       = = = = = = = = ) ) ) ) ) ) @ @ @ @ @ @ @ @ . . . . . . 9 9 9 9 9 9 9 9 0 0 0 0 0 0 $ $ $ $ $ $~k k k k k&, k k kZJ^ J^ J^ J^ J^fl J^ J^ J^\I I I I IV\ I I I,B B B B Bv| B B B@0& 0& 0& 0& 0&&, 0& 0& 0&bd d d d dfl d d d0C C C C Cv| C C C@Z Z Z Z Z Z Z Z,&Y &Y &Y &Y &Y6< &Y &Y &YRZ Z Z Z Z Z Z Z<'( '( '( '( '(v| '( '( '( '( '(r=   