o
    >:h$                     @   s   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 dd	lmZmZ G d
d dejZG dd dejZG dd dejZeeG dd dejZdS )    )forms)admin)format_html)TemplateResponse)pathreverse)JsonResponse)csrf_exempt   )
ReferenciaReferenciaImagenc                   @      e Zd ZG dd dZdS )ReferenciaImagenFormc                   @   s*   e Zd ZeZdZdejddddiZdS )zReferenciaImagenForm.Metaimagenr   zimagen-inputzimage/*)classacceptattrsN)	__name__
__module____qualname__r   modelfieldsr   	FileInputwidgets r   r   )/var/www/html/public/referencias/admin.pyMeta   s
    r   Nr   r   r   r   r   r   r   r   r   
       r   c                   @   s4   e Zd ZeZdZeZdZdddZ	G dd dZ
dS )	ReferenciaImagenInliner   z%admin/referencias/galeria_inline.htmlNc                 C   s   dS )NFr   )selfrequestobjr   r   r   has_add_permission   s   z)ReferenciaImagenInline.has_add_permissionc                   @      e Zd ZddiZdZdS )zReferenciaImagenInline.Mediaall)zcss/galeria_inline.css)zjs/galeria_inline.jsNr   r   r   cssjsr   r   r   r   Media       r+   N)r   r   r   r   r   extrar   formtemplater%   r+   r   r   r   r   r!      s    
r!   c                   @   r   )ReferenciaAdminFormc                   @   sT   e Zd ZeZdZejddidejddddejddidejdd	idd
Z	dS )zReferenciaAdminForm.Meta__all__rows   r   z0.00010)stepminr6   z0.01)descripcionstockprecio_costoprecio_venta_unitarioN)
r   r   r   r   r   r   r   TextareaNumberInputr   r   r   r   r   r   "   s    
r   Nr   r   r   r   r   r1   !   r    r1   c                       s  e Zd ZeZegZdZdZdZ	dZ
dZdZddd	ifd
ddifdddifdddiffZdZdZddd	ifd
ddifdddifdddiffZdd Z fddZdd Zedd Zedd Zdd Zde_dd  Zd!e_ fd"d#Z fd$d%ZG d&d' d'Z  ZS )(ReferenciaAdmin)skudescripcion_cortatipoclasificaciongruposubgrupor9   r:   r;   sku_abcactivoimagen_miniatura)rA   rE   tipo_abastecimientorF   rB   rC   rD   )r?   r8   )rG   galeria_imagenes)r9   r;   Tu   Información básicar   )r?   r8   unidadrA   rF   u   Clasificación)rB   rC   rD   rE   u   Información logística)rH   r9   r:   r;   u   Galería de imágenes)rI   )r9   )rH   r9   r;   c              	   C   s   |j sdS d}|d7 }|j r(|j D ]}|d|j d|jj d|j d7 }q|d7 }|d	7 }|d
|j r8|jnd d7 }|d	7 }t|S )uO   Renderiza la galería de imágenes horizontal con botones para agregar/eliminaru5   Guarde primero la referencia para gestionar imágenesz<div class="galeria-container">z<div class="galeria-imagenes">z4
                <div class="galeria-item" data-id="zW">
                    <div class="galeria-preview">
                        <img src="z" alt="Imagen de referencia">
                    </div>
                    <div class="galeria-actions">
                        <button type="button" class="eliminar-imagen" data-id="u   ">
                            <span class="icon">×</span>
                        </button>
                    </div>
                </div>
                u  
        <div class="galeria-item galeria-agregar">
            <div class="galeria-drop-area" id="galeria-drop-area">
                <span class="icon">+</span>
                <p>Arrastre imágenes aquí<br>o haga clic para seleccionar</p>
                <input type="file" id="galeria-file-input" accept="image/*" multiple style="display:none">
            </div>
        </div>
        z</div>z/<input type="hidden" id="referencia-id" value=" z">)pkimagenesr'   idr   urlr   )r"   r$   htmlr   r   r   r   rI   b   s$   
z ReferenciaAdmin.galeria_imagenesc                    sX   t   }td| j| jddtd| j| jddtd| j| jddg}|| S )Nz<int:referencia_id>/galeria/zreferencia-galeria)namezimagen/upload/zreferencia-imagen-uploadzimagen/delete/<int:imagen_id>/z$referencias_referencia-imagen-delete)superget_urlsr   
admin_site
admin_viewgaleria_viewupload_imagendelete_imagen)r"   urlscustom_urls	__class__r   r   rS      s   
zReferenciaAdmin.get_urlsc                 C   s:   t jj|d}d|j ||j | jjd}t|d|S )u@   Vista de galería para ver todas las imágenes de una referenciarL   u   Galería de imágenes para )title
referenciarM   optszadmin/referencias/galeria.html)	r   objectsgetr?   rM   r'   r   _metar   )r"   r#   referencia_idr_   contextr   r   r   rV      s   
zReferenciaAdmin.galeria_viewc              
   C   s   |j dkrX|jdrXz1|jd}|r%tjj|d}t||jd d}nt|jd d}|  td|j	|j
jdW S  tyW } ztd	t|d
W  Y d}~S d}~ww td	dd
S )u2   Endpoint para subir imágenes temporales vía AJAXPOSTr   rd   r]   )r_   r   r   T)success	imagen_id
imagen_urlFrg   errorN   Método no permitido)methodFILESrb   rf   r   ra   r   saver   rN   r   rO   	Exceptionstr)r"   r#   rd   r_   r   er   r   r   rW      s$   
zReferenciaAdmin.upload_imagenc                 C   s`   |j dkr)ztjj|d}|  tddiW S  tjy(   tddd Y S w tdddS )	u*   Endpoint para eliminar imágenes vía AJAXrf   r]   rg   TFzImagen no encontradarj   rl   )rm   r   ra   rb   deleter   DoesNotExist)r"   r#   rh   r   r   r   r   rX      s   
zReferenciaAdmin.delete_imagenc                 C   s(   t |jdkr|jdd  dS |jS )u-   Muestra una versión corta de la descripción2   Nz...)lenr8   r"   r$   r   r   r   r@      s   z!ReferenciaAdmin.descripcion_cortau   Descripciónc                 C   s   |j rtd|j jjS tdS )z(Muestra la imagen principal en miniaturaz&<img src="{}" style="height: 50px;" />z,<span style="color: #999;">Sin imagen</span>)imagen_principalr   r   rO   rw   r   r   r   rG      s   z ReferenciaAdmin.imagen_miniaturaImagenc                    s,   t  |||| tjjddj|d d S )NT)referencia__isnull)r_   )rR   
save_modelr   ra   filterupdate)r"   r#   r$   r/   changer[   r   r   r{      s   
zReferenciaAdmin.save_modelc                    s.   |j js	|j   t j||g|R i |S r-   )sessionsession_keycreaterR   render_change_form)r"   r#   re   argskwargsr[   r   r   r      s   
z"ReferenciaAdmin.render_change_formc                   @   r&   )zReferenciaAdmin.Mediar'   )zcss/referencias_admin.csszcss/galeria.css)zadmin/js/jquery.init.jszjs/referencias_admin.jszjs/galeria.jsNr(   r   r   r   r   r+      r,   r+   )r   r   r   r1   r/   r!   inlineslist_displaylist_filtersearch_fieldsreadonly_fieldslist_editablesave_on_top	fieldsetsrI   rS   rV   r	   rW   rX   r@   short_descriptionrG   r{   r   r+   __classcell__r   r   r[   r   r>   ,   sf    (

	r>   N)djangor   django.contribr   django.utils.htmlr   django.template.responser   django.urlsr   r   django.httpr   django.views.decorators.csrfr	   modelsr   r   	ModelFormr   TabularInliner!   r1   register
ModelAdminr>   r   r   r   r   <module>   s    