o
    h                     @   s   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
 G dd dejZG dd	 d	ejZG d
d dejZG dd dejZdS )    )models)Supplier)ProductBatch)now)uuid4c                       sh   e Zd ZejddddZejeejdZ	ej
ddZej
ddZejddZ fd	d
Zdd Z  ZS )Order   TF)
max_lengthuniqueeditable)	on_deleteauto_now_add)auto_nowdefaultc                    sR   | j stjjtddd }|r|d nd}d|d| _ t j|i | d S )Nid)max_idr      ORD06d)order_numberr   objects	aggregater   Maxsupersave)selfargskwargsr   new_id	__class__ "/var/www/html/pos/orders/models.pyr      s
   z
Order.savec                 C   s   | j S )N)r   r   r$   r$   r%   __str__   s   zOrder.__str__)__name__
__module____qualname__r   	CharFieldr   
ForeignKeyr   CASCADEsupplierDateTimeField
created_at
updated_atBooleanFieldis_receivedr   r'   __classcell__r$   r$   r"   r%   r      s    r   c                   @   sf   e Zd ZejedejdZejeejddZ	e
 Zej
ddZejddd	d	d
Zdd Zdd ZdS )	OrderItemitems)related_namer   supplier_order_itemsr   r7   r   r   
      T)
max_digitsdecimal_placesnullblankc                 C   s   | j j d| j dS )N ())productnamequantity_orderedr&   r$   r$   r%   r'   !      zOrderItem.__str__c                 C   s   | j r| j S dS )z>Return buying_price if set, otherwise return 'TBD' for displayTBD)buying_pricer&   r$   r$   r%   get_display_price$   s   zOrderItem.get_display_priceN)r(   r)   r*   r   r,   r   r-   orderr   rB   PositiveIntegerFieldrD   quantity_deliveredDecimalFieldrG   r'   rH   r$   r$   r$   r%   r5      s    r5   c                   @   sB   e Zd ZejeejdddZejddZ	ej
dddZdd ZdS )ReceiptTr   r>   r?   r   r?   r>   c                 C   s.   d| j  d| jr| jjnd d| j  dS )Nz	Receipt #z - zUnknown Supplierr@   rA   )r   r.   rC   r0   dater&   r$   r$   r%   r'   .   s   .zReceipt.__str__N)r(   r)   r*   r   r,   r   SET_NULLr.   r/   r0   	TextFieldnotesr'   r$   r$   r$   r%   rM   )   s
    rM   c                       s   e Zd ZejedddejdZejeejddZ	eje
ejdddZe Zejddd	Zejddddd
ZejdddZejddddZejedZejdddZ fddZdd Z  ZS )StockReceptionstock_itemsT)r7   r>   r?   r   stock_receptionsr9   rN   r:   r;   )r<   r=   )r<   r=   r?   r>   rO      )r
   r?   r>   r   c                    s   | j | j| j\}}tjj| j | jpdt j	dd 
  | j| j| j| j| j| j| jdd\}}|sV| j| j7  _| j|_| j|_| j|_| j|_| j|_|  | j  j| j7  _| j   |j| _t j|i | dS )zW
        Save logic to handle batch creation or updating with dynamic pricing.
        zBATCH-N   )quantityrG   selling_priceexpiry_dater.   received_daterS   )rB   
batch_codedefaults)rB   update_pricing_from_batchrG   rZ   r   r   get_or_creater]   r   hexupperquantity_receivedr[   r.   r\   rS   rY   r   stock_quantityr   )r   r   r    price_updatedmessagebatchcreatedr"   r$   r%   r   >   s8   

zStockReception.savec                 C   s   d| j  d| jj S )NzStockReception: z of )rc   rB   rC   r&   r$   r$   r%   r'   j   rE   zStockReception.__str__)r(   r)   r*   r   r,   rM   r-   receiptr   rB   r   rQ   r.   rJ   rc   rL   rG   rZ   	DateFieldr[   r+   r]   r   r\   rR   rS   r   r'   r4   r$   r$   r"   r%   rT   2   s    ,rT   N)	django.dbr   suppliers.modelsr   inventory.modelsr   r   django.utils.timezoner   uuidr   Modelr   r5   rM   rT   r$   r$   r$   r%   <module>   s    	