o
    g                     @   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/kangema/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                   @   sZ   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	Zd
d ZdS )	OrderItemitems)related_namer   supplier_order_itemsr   r7   r   r   
      
max_digitsdecimal_placesc                 C   s   | j j d| j dS )N ())productnamequantity_orderedr&   r$   r$   r%   r'   !      zOrderItem.__str__N)r(   r)   r*   r   r,   r   r-   orderr   rA   PositiveIntegerFieldrC   quantity_deliveredDecimalFieldbuying_pricer'   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   nullblankr   rM   rL   c                 C   s.   d| j  d| jr| jjnd d| j  dS )Nz	Receipt #z - zUnknown Supplierr?   r@   )r   r.   rB   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%   rJ   %   s
    rJ   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   rL   rM   r   stock_receptionsr9   rK   r:   r;   r<   )r=   r>   rM   rL   rN      )r
   rM   rL   r   c                    s   t jj| j| jpdt jdd   | j| j	| j
| j| j| j| jdd\}}|sK| j| j7  _| j	|_	| j
|_
| j|_| j|_| j|_|  | j j| j7  _| j  |j| _t j|i | dS )zB
        Save logic to handle batch creation or updating.
        zBATCH-N   )quantityrI   selling_priceexpiry_dater.   received_daterR   )rA   
batch_codedefaults)r   r   get_or_createrA   r\   r   hexupperquantity_receivedrI   rY   rZ   r.   r[   rR   rX   r   stock_quantityr   )r   r   r    batchcreatedr"   r$   r%   r   :   s0   

zStockReception.savec                 C   s   d| j  d| jj S )NzStockReception: z of )ra   rA   rB   r&   r$   r$   r%   r'   `   rD   zStockReception.__str__)r(   r)   r*   r   r,   rJ   r-   receiptr   rA   r   rP   r.   rF   ra   rH   rI   rY   	DateFieldrZ   r+   r\   r   r[   rQ   rR   r   r'   r4   r$   r$   r"   r%   rS   .   s    &rS   N)	django.dbr   suppliers.modelsr   inventory.modelsr   r   django.utils.timezoner   uuidr   Modelr   r5   rJ   rS   r$   r$   r$   r%   <module>   s    	