o
    >:hT;                     @   s  d dl mZ d dl mZmZ d dlmZmZ 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mZmZmZmZmZmZmZmZmZmZ d	dlmZ G dd dej Z!e"eG dd dej#Z$e"eG dd dej#Z%e"eG dd dej#Z&e"eG dd dej#Z'e"eG dd dej#Z(e"eG dd dej#Z)e"eG dd dej#Z*e"eG dd dej#Z+e"eG dd dej#Z,e"eG d d! d!ej#Z-e"eG d"d# d#ej#Z.d$S )%    )admin)r   messages)pathreverse)redirectrenderget_object_or_404)format_html)ValidationError)formset_factory)timezone   )MovimientoPerdidaProcesoOrdenCompraItemOrdenCompraDevolucionCompraDevolucionMuestraComercialDevolucionProduccionAjusteInventarioFisicoMovimientoDevolucionVentaMuestraComercialRecepcionProduccionMovimientoVenta)DevolucionCompraFormc                   @   s2   e Zd ZeZdZdZdZdZdZ	dd Z
de
_d	S )
ItemOrdenCompraInliner   )
referenciacantidadprecio_unitariosubtotal_adminempaqueproveedor_referencia	lead_timecertificado)r   r   r    r    c                 C   ,   |j d ur|jd urd|j |j dS dS N$,.2fz$0.00r   r   )selfinstance r,   )/var/www/html/public/movimientos/admin.pyr         z$ItemOrdenCompraInline.subtotal_adminSubtotalN)__name__
__module____qualname__r   modelextrafieldsreadonly_fieldsautocomplete_fieldsraw_id_fieldsr   short_descriptionr,   r,   r,   r-   r      s    
r   c                       s   e Zd ZdZdZdZdZegZddgZ	dZ
dd	 Zd
e_de_dd Zde_dd Zde_dd Zde_dd Zde_ fddZdd Zdd Zdd Z  ZS ) OrdenCompraAdmin)numero_ordenproveedor_linkfecha_creacionfecha_requeridaestadototal_ordenacciones_personalizadas)r?   	proveedorr=   )r;   proveedor__nombre_empresar=   aprobar_ordenesmarcar_en_camino)r;   r@   c                 C   s    t d|jjgd}td||jS )Nz"admin:proveedores_proveedor_change)argsz<a href="{}">{}</a>)r   rB   idr	   )r*   objurlr,   r,   r-   r<   4   s   zOrdenCompraAdmin.proveedor_link	ProveedorrB   c                 C   s   d|j dS )Nr'   r(   )totalr*   rH   r,   r,   r-   r@   :   s   zOrdenCompraAdmin.total_ordenTotalc                 C   sP   g }|j dkr|d|j d n|j dkr!|d|j d td|S )N	pendientez	<a href="z%/aprobar/" class="button">Aprobar</a>aprobadaz//enviar/" class="button">Enviar a Proveedor</a> )r?   appendrG   r	   join)r*   rH   buttonsr,   r,   r-   rA   >   s   

z(OrdenCompraAdmin.acciones_personalizadasAccionesc                 C   sL   |j ds| j|dtjd d S |jddjdd}| || d d S )Nzcompras.aprobar_ordencomprau'   No tienes permiso para aprobar órdeneslevelrN   r?   rO   u    órdenes aprobadas)userhas_permmessage_userr   ERRORfilterupdater*   requestquerysetcountr,   r,   r-   rD   G   s
   z OrdenCompraAdmin.aprobar_ordenesu   Aprobar órdenes seleccionadasc                 C   s*   |j ddjdd}| || d d S )NrO   rW   	en_caminou     órdenes marcadas como enviadas)r\   r]   rZ   r^   r,   r,   r-   rE   O   s   z!OrdenCompraAdmin.marcar_en_caminoz Marcar como enviadas a proveedorc                    sX   t   }td| j| jddtd| j| jddtd| j| jddg}|| S )Nadd/mov_compras_ordencompra_addnamez<path:object_id>/aprobar/mov_compras_ordencompra_aprobarz<path:object_id>/enviar/mov_compras_ordencompra_enviar)superget_urlsr   
admin_site
admin_view_redirect_to_manualaprobar_ordenenviar_proveedorr*   urlscustom	__class__r,   r-   rj   T   s$   
zOrdenCompraAdmin.get_urlsc                 C      t dS )Nzmovimientos:ordencompra_manualr   r*   r_   r,   r,   r-   rm   k      z$OrdenCompraAdmin._redirect_to_manualc              
   O   sp   |  ||}z||j | |d W tdS  ty7 } z| j|t|tjd W Y d }~tdS d }~ww )NzOrden aprobada exitosamenterU   ..)	
get_objectaprobarrX   rZ   r
   strr   r[   r   )r*   r_   	object_idrF   kwargsordener,   r,   r-   rn   o   s    zOrdenCompraAdmin.aprobar_ordenc                 O   s.   |  ||}d|_|  | |d tdS )Nrb   z'Orden marcada como enviada al proveedorry   )rz   r?   saverZ   r   )r*   r_   r}   rF   r~   r   r,   r,   r-   ro   x   s
   z!OrdenCompraAdmin.enviar_proveedor)r0   r1   r2   list_displaylist_filtersearch_fieldsdate_hierarchyr   inlinesactionsr6   r<   r9   admin_order_fieldr@   rA   rD   rE   rj   rm   rn   ro   __classcell__r,   r,   rs   r-   r:   "   s.    		r:   c                   @   s.   e Zd ZdZdZdZdZdZdd Zde_	d	S )
ItemOrdenCompraAdmin)r   r   r   r   r   )r   r   )orden__numero_ordenreferencia__skur#   r$   c                 C   r%   r&   r)   rL   r,   r,   r-   r      r.   z#ItemOrdenCompraAdmin.subtotal_adminr/   N)
r0   r1   r2   r   list_select_relatedr   r7   r8   r   r9   r,   r,   r,   r-   r      s    
r   c                       0   e Zd ZdZdZdZ fddZdd Z  ZS )DevolucionCompraAdminz&admin/devolucion_compras/add_form.htmlN)r   fechacantidad_devueltavalor_totalc                    s6   t   }ddlm} td| j|ddg}|| S )Nr   )devolver_orden_unificadorc    movimientos_devolucioncompra_addre   )ri   rj   viewsr   r   rk   rl   )r*   rq   r   rr   rs   r,   r-   rj      s   

zDevolucionCompraAdmin.get_urlsc              	   C   s  t jjddd}ttdd}|jd}d}|jdkrK||j	}|
 rJd}|D ]}|jd	r:|  |d
7 }q*t|| d ttdS n1|r|tt |d}|jd }	g }
|	D ]}|
|j|jjt  |jj|jd q_||
d}|||d}t|| j|S )z9Vista custom para el add de DevolucionCompra en el Admin.recibidarW   z-fecha_creacionr   )r4   orden_selectNPOSTr   r   z$ devoluciones creadas correctamente.z-admin:movimientos_devolucioncompra_changelist)pkr   )itemr   r   cantidad_antesprecio_unitario_devuelto)initial)ordenesorden_selectedformset)r   objectsr\   order_byr   r   GETgetmethodr   is_validcleaned_datar   r   successr   r   r   itemsselect_relatedallrQ   r   r   r   nowdatestockr   r   add_form_template)r*   r_   r   DevolucionFormSetr   r   creadasformr   r   r   r   contextr,   r,   r-   devolver_add   sD   





z"DevolucionCompraAdmin.devolver_add)	r0   r1   r2   r   change_list_templater   rj   r   r   r,   r,   rs   r-   r      s    r   c                   @   "   e Zd ZdZdZdZdddZdS )	DevolucionMuestraComercialAdmin)r   r   r   usuario)r   usuario__usernamer    Nc                 C   ru   )Nz(movimientos:dev_muestra_comercial_manualrv   r*   r_   form_urlextra_contextr,   r,   r-   add_view      z(DevolucionMuestraComercialAdmin.add_viewr   Nr0   r1   r2   r   r   r   r   r,   r,   r,   r-   r      s
    r   c                       4   e Zd ZdZdZdZdZ fddZdd Z  Z	S )	DevolucionProduccionAdmin)r   r   costo_unitariostock_antesstock_despuesnuevo_precio_costovalor_inventarior   )r   r   precio_costo_antesr   r   r   r   c                    ,   t   }td| j| jddg}|| S )Nrc   2mov_devolucion_produccion_devolucionproduccion_addre   ri   rj   r   rk   rl   _redirect_addrp   rs   r,   r-   rj         
z"DevolucionProduccionAdmin.get_urlsc                 C   ru   )Nz(movimientos:devolucion_produccion_manualrv   rw   r,   r,   r-   r      r   z'DevolucionProduccionAdmin._redirect_add
r0   r1   r2   r   r6   r   r   rj   r   r   r,   r,   rs   r-   r          r   c                       r   )MovimientoDevolucionVentaAdmin)r   r   precio_venta_unitarior   r   r   r   c                    r   )Nrc   2mov_devolucion_venta_movimientodevolucionventa_addre   r   rp   rs   r,   r-   rj      r   z'MovimientoDevolucionVentaAdmin.get_urlsc                 C   ru   )Nz#movimientos:devolucion_venta_manualrv   rw   r,   r,   r-   r     r   z,MovimientoDevolucionVentaAdmin._redirect_add)	r0   r1   r2   r   r   r   rj   r   r   r,   r,   rs   r-   r      s    r   c                       r   )	AjusteInventarioFisicoAdmin)r   r   r   cantidad_despuesunidades_entradaunidades_salidar   )r   r   r   r   r   c                    r   )Nrc   0mov_inventario_fisico_ajusteinventariofisico_addre   )ri   rj   r   rk   rl   rm   r*   rq   custom_urlsrs   r,   r-   rj     s   
z$AjusteInventarioFisicoAdmin.get_urlsc                 C   ru   )Nzmovimientos:ajuste_manualrv   rw   r,   r,   r-   rm   )  rx   z/AjusteInventarioFisicoAdmin._redirect_to_manual)
r0   r1   r2   r   r6   r   r   rj   rm   r   r,   r,   rs   r-   r     s    r   c                       r   )	MuestraComercialAdmin)r   r   cantidad_entregadar   valor_total_salidaentregado_por)r   r   r   r   )r   entregado_por__usernamer   c                    r   )Nrc   *mov_muestra_comercial_muestracomercial_addre   r   rp   rs   r,   r-   rj   :  r   zMuestraComercialAdmin.get_urlsc                 C   ru   )Nz$movimientos:muestra_comercial_manualrv   rw   r,   r,   r-   r   E  rx   z#MuestraComercialAdmin._redirect_addr   r,   r,   rs   r-   r   -  r   r   c                       r   )	RecepcionProduccionAdmin)r   plantamaquinar   cantidad_producidacosto_unitario_produccionnuevo_costo_ponderador   )r   r   r   )r   r   r   )r   maquina__nombrec                    r   )Nrc   &mov_produccion_recepcionproduccion_addre   r   r   rs   r,   r-   rj   T  r   z!RecepcionProduccionAdmin.get_urlsc                 C   ru   )Nz'movimientos:recepcion_produccion_manualrv   rw   r,   r,   r-   r   _  r   z&RecepcionProduccionAdmin._redirect_add)
r0   r1   r2   r   r6   r   r   rj   r   r   r,   r,   rs   r-   r   I  s    r   c                   @   r   )	MovimientoVentaAdmin)r   r   precio_unitario_ventar   
creado_porr   r   r   Nc                 C   ru   )Nzmovimientos:venta_manualrv   r   r,   r,   r-   r   i  r   zMovimientoVentaAdmin.add_viewr   r   r,   r,   r,   r-   r   b  s
    r   c                       r   )	MovimientoPerdidaProcesoAdmin)r   r   r   motivor   )r   r   r   c                    r   )Nrc   (movimientos_movimientoperdidaproceso_addre   )ri   rj   r   rk   rl   redirect_to_custom_addr   rs   r,   r-   rj   s  s   
z&MovimientoPerdidaProcesoAdmin.get_urlsc                 C   ru   )Nzmovimientos:perdida_addrv   rw   r,   r,   r-   r   z  r   z4MovimientoPerdidaProcesoAdmin.redirect_to_custom_add)
r0   r1   r2   r   r   r   r   rj   r   r   r,   r,   rs   r-   r   l  s    r   N)/django.contribr   r   django.urlsr   r   django.shortcutsr   r   r   django.utils.htmlr	   django.core.exceptionsr
   django.formsr   django.utilsr   modelsr   r   r   r   r   r   r   r   r   r   r   formsr   TabularInliner   register
ModelAdminr:   r   r   r   r   r   r   r   r   r   r   r,   r,   r,   r-   <module>   sB    4]D		