
    $h                     R   d dl mZmZ d dlmZ d dlmZ d dlmZ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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 d dlZ eddg      ZejA                  d       ee       ee      fde
dedefd       Z!ejE                  d       ee       ee      fde#dedefd       Z$ejE                  d       ee       ee      fde#dedefd       Z$ejE                  d       ee      fdefd       Z$ejE                  d       ee       ee      fde#de#d e#dedef
d!       Z%ejE                  d"       ee       ee      fde#d e#dedefd#       Z&ejE                  d$       ee       ee      fde#dedefd%       Z%ejA                  d&       ee	jN                         ed       ee      fd'e	d(edefd)       Z(ejE                  d*       ee      fd+e#d,e#defd-       Z)ejA                  d.       ee      fd/edefd0       Z*y)1    )	APIRouterDepends)get_db)Session)	UserLogin	StoreSaleSaleListSalesReportFilter)	SaleClass)get_current_active_user)	FileClass)File
UploadFileHTTPException)DteClass)InventoryClass)WhatsappClass)	SaleModel)datetimeNz/salesSales)prefixtags/sale_inputssession_userdbc                 ~    t        |      j                  | j                  | j                  | j                        }d|iS Nmessage)r   get_allrol_idrutpage)r   r   r   datas       \C:\Users\jesus\OneDrive\Escritorio\backend-lacasadelvitrificado\app\backend\routers\sales.pyindexr&      s5    R=  !3!3[__kFVFVWDt    z
/show/{id}idc                 >    t        |      j                  |       }d|iS r   )r   getr(   r   r   r$   s       r%   editr,      s!    R=R Dtr'   z/details/{id}c                 >    t        |      j                  |       }d|iS r   )r   detailsr+   s       r%   r,   r,   !   s!    R=  $Dtr'   z/wsc                 <    t        |       j                         }d|iS r   )r   send)r   r$   s     r%   r,   r,   '   s     !!#Dtr'   z3/accept_sale_payment/{id}/{dte_type_id}/{status_id}dte_type_id	status_idc                    |dk(  rt        |      j                  | |       t        |      j                  |       }|r|dkD  r|j	                  t
              j                  t
        j                  | k(        j                         }|r7||_	        t        j                         |_        |j                          dd| iS ddiS ddiS y )N   r   r   z%Dte created successfully with folio: zSale not foundzDte creation failed)r   change_statusr   generate_dtequeryr   filterr(   firstfolior   nowupdated_datecommit)r(   r1   r2   r   r   dte_responsesales          r%   accept_sale_paymentr@   -   s    A~"##B	2|004L1,88I&--illb.@AGGID)
$,LLN!		!%J<.#YZZ!#344455! r'   z%/reject_sale_payment/{id}/{status_id}c                 t    t        |      j                  | |       t        |      j                  |       }d|iS r   )r   r5   reverse)r(   r2   r   r   reverse_responses        r%   reject_sale_paymentrD   A   s7    bMI. },,R0'((r'   z/delivered_sale/{id}c                 @    t        |      j                  | d       ddiS )N   r   zSale marked as delivered)r   r5   )r(   r   r   s      r%   r@   r@   I   s"    bMA&122r'   z/store	form_datapayment_supportc                    | j                   dk7  r|t        j                         j                  d      }t	        j
                         j                  d d }|j                  j                  d      d   }d| d| d| }t        |      j                  ||       t        |      j                  | |      }d|iS d }t        |      j                  |       }d|iS )	Nr4   z%Y_%m_%d_%H_%M_%S   .payment__r   )r!   r   r;   strftimeuuiduuid4hexfilenamesplitr   uploadr   store)rG   rH   r   	timestamp	unique_id	extensionrS   responses           r%   rV   rV   O   s     1!<LLN++,?@	JJL$$Ra(	#,,2237;	i[)Ai[A"_h7R=&&y(;
 x   R=&&y1x  r'   z(/check_inventory/{product_id}/{quantity}
product_idquantityc                 <    t        |      j                  | |      }|S )N)r   check_product_inventory)r[   r\   r   rZ   s       r%   check_inventoryr_   c   s    }44ZJHOr'   z/reportfilter_datac                 j    t        |      j                  | j                  | j                        }d|iS )u  
    Endpoint para generar reporte de ventas por producto.
    
    Muestra por cada producto:
    - Cantidad vendida
    - Ingresos (actual, potencial público/privado)
    - Costos (basado en unit_cost de inventory_movements)
    - Ganancias (actual vs potencial)
    - Márgenes de ganancia
    
    Filtros opcionales:
    - date_from: Fecha inicio (YYYY-MM-DD)
    - date_to: Fecha fin (YYYY-MM-DD).
    )
start_dateend_dater   )r   get_sales_report	date_fromdate_to)r`   r   r$   s      r%   sales_reportrg   i   s<    & R=))(($$ * D
 tr'   )+fastapir   r   app.backend.db.databaser   sqlalchemy.ormr   app.backend.schemasr   r   r	   r
   app.backend.classes.sale_classr   app.backend.auth.auth_userr   app.backend.classes.file_classr   r   r   r   app.backend.classes.dte_classr   #app.backend.classes.inventory_classr   "app.backend.classes.whatsapp_classr   app.backend.db.modelsr   r   rP   salespostr&   r*   intr,   r@   rD   as_formrV   r_   rg    r'   r%   <module>rx      s   & * " Q Q 4 > 4 3 3 2 > < +  
	
 C;BCZ;[krsykz x y ah  
 <,34K,L\cdj\k S 	 RY  
 ?,34K,L\cdj\k S 	 RY  
 5v W  
 @A\cd{\|  MT  U[  M\ 6C 6c 6S 6PY 6  CJ 6 B6& 23JQRiJj  {B  CI  {J )C )3 )i )pw ) 4) !";BCZ;[krsykz 3C 3y 3ah 3 #3
 H"9#4#45"&t*&/!!! 	! !& 56BI&/  s   7
 I &/" r'   