o
    iY&                     @   s   d dl T ddlmZ ddlT ddlmZmZ ddlmZmZ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dS )   )*    )serializers)isValidDatavalidateParentId)datetimetimezonedate)JsonResponsec                   @   *   e Zd ZG dd dZdd Zdd ZdS )SubscriptionOrderSerializerc                   @      e Zd ZeZg dZdS )z SubscriptionOrderSerializer.Meta)idpricecurrency	startDateendDate	isExpiredcreatedDateupdatedDatesubscriptionPlanIddeviceOSTypeIdfinancialProfileIdN)__name__
__module____qualname__SubscriptionOrdermodelfields r   r   e/var/www/snowflake_co_dev_github/snow_flake_back_end_deploy/mama_care_api/subscription/serializers.pyMeta       r!   c                 C   s   t | |jjjr
dS d S NT)r   r   parentIdr   selfinstancer   r   r    get_isAuthorized   s   z,SubscriptionOrderSerializer.get_isAuthorizedc                 C   s   d}d}d|v rt | |d jj}nd}tjj|d jd}| dkr)d}d}n|d }|jdkr6d}d	}|d
d }|d urH|dkrHd}d}|dkrN|S t	|dkr\t
d|gid S )N Fr   Parent Id does not exitr   r   r   zSubscription Plan does not exitz<Free Subscription Plan is not allowed for Subscription Orderr   Price must be greater than zeroTerror)r   r$   r   SubscriptionPlanobjectsfilter__len__isUnLimitedgetlenr   ValidationError)r&   dataerrorMessageisCheckselectedPlanListselectedPlanr   r   r   r    validate!   s6   
z$SubscriptionOrderSerializer.validateNr   r   r   r!   r(   r;   r   r   r   r    r      s    r   c                   @   r   )!SubscriptionTransactionSerializerc                   @   r   )z&SubscriptionTransactionSerializer.Meta
subscriptionOrderIdr   r   	productIdtransactionIdpurchaseDateexpirationDaterevocationDater   r   N)r   r   r   SubscriptionTransactionr   r   r   r   r   r    r!   J   r"   r!   c                 C   s   t | |jjjjrdS d S r#   )r   r?   r   r$   r   r%   r   r   r    r(   Y   s
   z2SubscriptionTransactionSerializer.get_isAuthorizedc                 C   sV   d}d}d|v rt | |d jjj}nd}|dkr|S t|dkr)td|gid S )Nr)   Fr?   r*   Tr   r-   )r   r   r$   r   r4   r   r5   )r&   r6   r7   r8   r   r   r    r;   _   s   z*SubscriptionTransactionSerializer.validateNr<   r   r   r   r    r=   I   s    r=   c                   @   sz   e Zd Ze Ze Ze Ze Z	e
 Ze
 Ze
 Ze
 Zej
dddZe Ze Zdd Zdd ZdS )	&SubscriptionOrderTransactionSerializerTF)
allow_nullrequiredc                 C   s   d}d|v rt jj|d d}nd}d}| dkrd}n	t| |d jj}|dkr,d}d	|v r9|d	 dkr8d
}nd}d|vrAd}d|vrGd}d|vrMd}d|vrSd}d|v ritjj|d d}| dkrhd}nd}t|dkryt	
d|gi|S )Nr)   r   r$   z"Financial Profile Id does not exitFr   Financial Profile does not exitzParent Id invalidr   r,   zPrice is requiredr   zCurrency is requiredrA   zTransaction Id is requiredr@   zProduct Id is requiredcurrentDatezCurrent Date is requiredr   r+   zDevice OS Type is invalidzDevice OS Type is requiredr-   )FinancialProfiler/   r0   r1   r   r$   r   DeviceOSTyper4   r   r5   )r&   r6   r7   dataListr8   r   r   r    r;      sD   z/SubscriptionOrderTransactionSerializer.validatec                 C   s  d}d }d|v rt jj|d d}|d u rd}td|gitjj|d d}d }| dkr4|d }tjj|d	 d
}d }| dkrI|d }|d }t	|t
rct	|tsctt|tj }tjj|j|jj|j|ddd}	|	 dkrtjj|djdd t|jd|d |d dt t |||d
}
|
  t|
|d |d |d |d |d |d |d|d t t d
}|  tdd|d |d |d |d |d |d |d |d d
S tdd |d |d |d |d |d |d |d |d d
S )!Nr)   r   rI   rJ   r-   r@   )keyNamer   r   r+   rK   F)r   r   r   endDate__gtr   r   )r   T)r   GBPr   rC   )
r   r   r   r   r   r   r   r   r   r   r   r   rA   rB   rD   r>   okz Transaction created successfully)
statusmessager   r   r@   rA   rB   r   rC   r   existszTransaction already exists)rL   r/   r3   r   r5   r.   r0   r1   rM   
isinstancer	   r   r   
make_awarecombinemintimer   r   r$   order_byupdater   nowsaverE   r
   )r&   validated_datar7   financialProfileplanListr:   deviceOSTypeListselectedDeviceOSTypecurrent_date	orderListsubscriptionOrdersubscriptionTransactionr   r   r    create   s   z-SubscriptionOrderTransactionSerializer.createN)r   r   r   r   
FloatFieldr   	CharFieldr   r@   rA   DateTimeFieldr   rK   rC   rB   rD   IntegerFieldr   r   r;   rh   r   r   r   r    rF   s   s    1rF   N)modelsrest_frameworkr   django.db.modelscommon.commonr   r   r   r   r	   django.httpr
   ModelSerializerr   r=   
SerializerrF   r   r   r   r    <module>   s    =*