
    soj                         d dl Z d dlT 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mZ d d	lmZ  G d
 de          Ze                                 dS )    N)*)	BaseModel)
DevilFruit)	GroupChat)User)DevilFruitCategory)DevilFruitSource)DevilFruitTradeStatusc            	          e Zd ZU dZ eedddd          Zeez  ed<    eedddd          Z	eez  ed	<    eedd
dd          Z
eez  ed<    e            Zeez  ed<    ed          Zeez  ed<    ed          Zeez  ed<    edd          Zeez  ed<    ed          Zej        ez  ed<    eej                  Zeez  ed<    eedddd          Zeez  ed<    ed          Z eed<    G d d          Z!e"de#defd            Z$defdZ%defdZ&e"defd             Z'e"defd!            Z(e"deded"efd#            Z)e"dedd fd$            Z*e"	 d(ded&ede+d          fd'            Z,d%S ))DevilFruitTradez!
    Devil Fruit Trade class
    Tdevil_fruit_tradesRESTRICTCASCADE)nullbackref	on_delete	on_updatedevil_fruitdevil_fruit_trade_giversgiverdevil_fruit_trade_receiversreceiversource)r   pricetax_percentaged   )
max_lengthr   reason	date_sold)defaultstatusdevil_fruit_trade_group_chats
group_chat
message_idc                       e Zd ZdZdS )DevilFruitTrade.Metadevil_fruit_tradeN)__name__
__module____qualname__db_table     !/app/src/model/DevilFruitTrade.pyMetar&   9   s        &r-   r/   devil_fruit_categoryreturnc                    t                               t                              t           j                                                t                                        t          j        | k    t           j        	                    d          z  t           j
        t          j        k    z  t           j        dk    z                                            }|t          |          ndS )zk
        Get the average price of the sold fruits in a category
        :return: The average price
        Fr   N)r   selectfnAVGr   joinr   wherecategoryis_nullr!   r
   	COMPLETEDscalarint)r0   avgs     r.   get_average_pricez!DevilFruitTrade.get_average_price<   s     ""266/*?#@#@AAT*U$(<<"(00779")-B-LLN #(1,.  VXX 	 ?s3xxx4r-   c                 *    t          | j                  S )zI
        Get the source of the trade
        :return: The source
        )r	   r   selfs    r.   
get_sourcezDevilFruitTrade.get_sourceQ   s    
  ,,,r-   c                 *    t          | j                  S )zI
        Get the status of the trade
        :return: The status
        )r
   r!   r@   s    r.   
get_statuszDevilFruitTrade.get_statusX   s    
 %T[111r-   c                     t                                                               t           j        | k    t           j        t
          j        k    z                                             dS )zz
        Delete pending trades of a devil fruit
        :param devil_fruit: The devil fruit
        :return: None
        N)r   deleter7   r   r!   r
   PENDINGexecuter   s    r.   delete_pending_tradesz%DevilFruitTrade.delete_pending_trades_   sT     	  &&(K7%)>)FFH	
 	
 ')))))r-   c                 
   t                                                               t           j        | k    t           j        t
          j        k    z  t           j        t          j	        k    z            
                                 dS )z
        Delete pending trades of a devil fruit in the shop
        :param devil_fruit: The devil fruit
        :return: None
        N)r   rF   r7   r   r!   r
   rG   r   r	   SHOPrH   rI   s    r.   delete_pending_trades_in_shopz-DevilFruitTrade.delete_pending_trades_in_shopk   si     	  &&(K7%)>)FFH%)9)>>@	
 	
 ')))))r-   
exclude_idc                    t                                                               t           j        | k    t           j        t
          j        k    z  t           j        |k    z  t           j        |k    z            	                                 dS )z
        Delete pending trades of a devil fruit in a group chat
        :param devil_fruit: The devil fruit
        :param group_chat: The group chat
        :param exclude_id: The id to exclude
        :return: None
        N)
r   rF   r7   r   r!   r
   rG   r#   idrH   )r   r#   rN   s      r.   delete_pending_trades_in_groupz.DevilFruitTrade.delete_pending_trades_in_groupx   sv     	  &&(K7%)>)FFH)Z79 !Z/1	
 	

 ')))))r-   c                     t                               t           j        | k    t           j        t          j        k    t           j        t          j        k              S )zx
        Get a pending trade in the shop
        :param devil_fruit: The devil fruit
        :return: The trade
        )	r   get_or_noner   r!   r
   rG   r   r	   rL   rI   s    r.   get_pending_in_shopz#DevilFruitTrade.get_pending_in_shop   sE     **';6"&;&CC"&6&;;
 
 	
r-   Nuserc                    t                                                               t           j                            d          t           j        t          j        k    z  t           j        t          j
        k    t           j        t          j        k    t           j        | k    z  t           j                                        t           j        |k    z  z  z  z            S )z
        Get all trades in the shop
        :param group_chat: The group chat
        :param user: The user
        :return: The trades
        F)r   r3   r7   r   r9   r!   r
   rG   r   r	   rL   USERr#   r   )r#   rU   s     r.    get_all_selling_in_shop_or_groupz0DevilFruitTrade.get_all_selling_in_shop_or_group   s     %%''--(0077%)>)FFH !'+;+@@ %+/?/DD&1Z?A (088::?W[_?_`b	
 
 	
r-   )NN)-r(   r)   r*   __doc__ForeignKeyFieldr   r   __annotations__r   r   r   SmallIntegerFieldr   r	   BigIntegerFieldr   r<   
FloatFieldr   float	CharFieldr   strDateTimeFieldr   datetimer
   rG   r!   r   r#   IntegerFieldr$   r/   staticmethodr   r>   rB   rD   rJ   rM   rQ   rT   listrX   r,   r-   r.   r   r      s          1@$1 1 1Ko-    %4O*% % %E4/!    (7-( ( (Hd_$    4E3D3F3FF00FFF#2?#=#=#=E3 ===)3)>)>)>NEJ&>>>'i3TBBBFC)OBBB3@=d3K3K3KIx =0KKK8I8I%-9 9 9F!$55    />o// / /J	O+    #l---J---' ' ' ' ' ' ' ' 50B 5s 5 5 5 \5(-, - - - -21 2 2 2 2 	: 	 	 	 \	 
: 
 
 
 \
 -6DG   \" 
 
8I 
 
 
 \
 37
 

,0
		 
 
 
 \
 
 
r-   r   )rc   peeweesrc.model.BaseModelr   src.model.DevilFruitr   src.model.GroupChatr   src.model.Userr   .src.model.enums.devil_fruit.DevilFruitCategoryr   ,src.model.enums.devil_fruit.DevilFruitSourcer	   1src.model.enums.devil_fruit.DevilFruitTradeStatusr
   r   create_tabler,   r-   r.   <module>rp      s         ) ) ) ) ) ) + + + + + + ) ) ) ) ) )       M M M M M M I I I I I I S S S S S Sc
 c
 c
 c
 c
i c
 c
 c
L        r-   