o
    4%iQr                    @   sJ  d dl mZ d dlmZ d dlmZ d dlT d dlmZ d dl	T d dl
T d dlT 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Zd dl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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"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'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+G d+d, d,ejZ,G d-d. d.ejZ-G d/d0 d0ejZ.G d1d2 d2ejZ/G d3d4 d4ejZ0G d5d6 d6ejZ1G d7d8 d8ejZ2G d9d: d:ejZ3G d;d< d<ejZ4G d=d> d>ejZ5G d?d@ d@ejZ6G dAdB dBejZ7G dCdD dDejZ8G dEdF dFejZ9G dGdH dHejZ:G dIdJ dJejZ;G dKdL dLejZ<G dMdN dNejZ=G dOdP dPejZ>G dQdR dRejZ?G dSdT dTejZ@G dUdV dVejZAd
S )W    )Image)forms)apps)*)CheckboxInput)inlineformset_factory)CKEditorWidget)RegexValidator)ValidationErrorN)DecimalInvalidOperation)URLValidatorc                       s   e Zd Zd fdd	Z  ZS )MultiFileInputNc                    s   t  | d| jd< d S )Nmultiple)super__init__attrs)selfr   	__class__ ;/var/www/html/Testing_prj/Navya-Bakers/adminportal/forms.pyr      s   zMultiFileInput.__init__)N)__name__
__module____qualname__r   __classcell__r   r   r   r   r      s    r   c                   @   s   e Zd ZG dd dZejdejddidddZejd	ejddidd
Zej	dejddidd
Z
ejg dejdddddZejdejddidd
ZejddgejdddddZdd Zdd Zdd ZdS )UserFormc                   @      e Zd ZeZdZdS )zUserForm.Meta
first_name	last_nameemail	user_typephone_numberstatusNr   r   r   Usersmodelfieldsr   r   r   r   Meta       r)   r   classform-controlr   Tlabelwidgetrequiredr    r/   r0   r!   ))Super Adminr3   )	NBC Adminr4   )
Shop Adminr5   )PU Adminr6   form-control form-selectuser_type-selectr+   idchoicesr0   r#   activeActiveinactiveInactivestatus-selectc                 C   ^   | j d}t|dk st|dkrtdtd|s"tdtdd|}| }|S 	Nr      2   4First name must be between 1 and 50 characters long.^[a-zA-Z\s\'-]+$HFirst name may only contain alphabets, spaces, hyphens, and apostrophes.\s+ 	cleaned_datagetlenr   r
   rematchsub
capitalizer   r   capitalize_first_namer   r   r   clean_first_nameK      zUserForm.clean_first_namec                 C   rD   	Nr    rF   rG   rH   rI   rJ   rK   rL   rM   r   r    capitalize_last_namer   r   r   clean_last_nameY   rX   zUserForm.clean_last_namec                 C   $   | j d}td|std|S Nr#   ^\+?1?\d{9,15}$RPhone number must be entered in the format: '+999999999'. Up to 15 digits allowed.rN   rO   rQ   rR   r
   r   r#   r   r   r   clean_phone_numberg      zUserForm.clean_phone_numberN)r   r   r   r)   r   	CharField	TextInputr   r    
EmailFieldr!   ChoiceFieldSelectr"   r#   r$   rW   r\   rc   r   r   r   r   r      s>    r   c                   @   s   e Zd ZG dd dZejdejddidddZejd	ejddidd
Zej	dejddddd
Z
ejejddddddZejdejddidd
ZejddgejdddddZdd Zdd Zdd ZdS )UserEditFormc                   @   r   )zUserEditForm.Metar   Nr%   r   r   r   r   r)   q   r*   r)   r   r+   r,   r-   Tr.   r    r2   r!   readonlyr+   rk   r8   r+   r:   rk   r0   r#   r=   r@   r7   rC   r9   r;   c                 C   rD   rE   rM   rU   r   r   r   rW      rX   zUserEditForm.clean_first_namec                 C   rD   rY   rM   rZ   r   r   r   r\      rX   zUserEditForm.clean_last_namec                 C   r]   r^   ra   rb   r   r   r   rc      rd   zUserEditForm.clean_phone_numberNr   r   r   r)   r   re   rf   r   r    rg   r!   r"   r#   rh   ri   r$   rW   r\   rc   r   r   r   r   rj   p   sD    
rj   c                   @   sN  e Zd ZG dd dZejdejddidddZejd	ejddidddZejd
ejddidddZ	ej
ejjdd ejddddddidZejdejddidddZejdejddidddZejdejddidddZejdejddidddZejdejddddddZejdejddddddZejdejddddddZejdejddidddZejdejddidddZejd ejddidddZejd!d"gejd#d$d%ddd&Zej d'ej!ddiddd(d)Z"ejd*d+gejd#d,d%ddd&Z#d-d. Z$d/d0 Z%d1d2 Z&d3d4 Z'd5d6 Z(d7d8 Z)d9S ):ShopFormc                   @   r   )zShopForm.Meta)	unit_nameunit_location	unit_codeunit_admin_userstreetcitydistrictstate_or_provincepin_codelatitude	longitude
contact_nor!   gstdelivery_modedelivery_radiusr$   N)r   r   r   Shopr'   r(   r   r   r   r   r)      r*   r)   rq   r+   r,   r-   Tr.   rr   rs   r5   )r"   10r+   sizer1   z+Please select at least one shop admin user.querysetr0   error_messagesStreetrv   DistrictstatePin Code6r+   
max_lengthrz   rk   rl   r{   Contact NumberFEmail IDGSTIN)Shop ownr   )Third partyr   r7   delivery_mode_selectr9   r<   r0   r1   zDelivery Radius (km)g        )r/   r0   r1   initial)Openr   )Closer   rC   c                 C      | j d}|std|S )Nrt   z+There should be atleast one shop admin userrN   rO   r   r
   )r   itemsr   r   r   clean_items;     
zShopForm.clean_itemsc                 C   s<   | j d}t|dkrtdtd|std|S )Nr}      z!GSTIN must be 14 characters long.z%^\d{2}[A-Z]{5}\d{4}[A-Z]\d{1}[A-Z\d]$zInvalid GSTIN)rN   rO   rP   r   r
   rQ   rR   )r   r}   r   r   r   	clean_gstA  s   

zShopForm.clean_gstc                 C   f   | j d}t|dk st|dkrtdtd|s"tdtd|r-td| }|S )	Nrq      x   4Unit name must be between 3 and 120 characters long.^[a-zA-Z0-9\s@.,-]+$pUnit name may only contain alphabets, numerics, spaces, and some special characters like '@', '.', ',', and '-'.\s{2,}Consecutive spaces not allowed	rN   rO   rP   r   r
   rQ   rR   searchrT   )r   	shop_namerV   r   r   r   clean_unit_nameI     
zShopForm.clean_unit_namec                 C   s"   | j d}|dk rtd|S )Nr   r   z&Delivery radius must be a whole numberr   )r   r   r   r   r   clean_delivery_radiusY     
zShopForm.clean_delivery_radiusc                 C   r]   Nr|   r_   r`   ra   rb   r   r   r   clean_contact_no`  rd   zShopForm.clean_contact_noc                 C   s   | j d}tjj|dj| jjd}|r>g }|D ]}|j|gd}|r0||j	 d|j
  qd|}td| d|S )Nrt   )unit_admin_user__in)uuidrL   ,zShop Admin z$ is already assigned to another shop)rN   rO   r   objectsfilterexcludeinstancer   appendr   r    joinr
   )r   rt   shopusersiunit_admin_check	name_listr   r   r   clean_unit_admin_userh  s   
zShopForm.clean_unit_admin_userN)*r   r   r   r)   r   re   rf   rq   rr   rs   ModelMultipleChoiceFieldr&   r   r   allSelectMultiplert   ru   rv   rw   rx   IntegerFieldry   rz   r{   r|   rg   r!   r}   rh   ri   r~   
FloatFieldNumberInputr   r$   r   r   r   r   r   r   r   r   r   r   rp      s    
rp   c                       sR   e Zd ZG dd dZ fddZdd Zdd Zd	d
 Zdd Zdd Z	  Z
S )BankDetailsFormc                   @   s   e Zd ZeZg dZdS )zBankDetailsForm.Meta)account_name	bank_namebranch_name	ifsc_codeaccount_numberN)r   r   r   BankDetailsr'   r(   r   r   r   r   r)   x      r)   c                    s   t  j|i | | jd jjddi | jd jjddi | jd jjddi | jd jjddi | jd jjddi d S )Nr   r+   r,   r   r   r   r   )r   r   r(   r0   r   update)r   argskwargsr   r   r   r     s   zBankDetailsForm.__init__c                 C   N   | j dd }t|dk st|dkrtdtd|s%td|S )Nr    rF   d   z7Account name must be between 1 and 100 characters long.rI   zJAccount name can only contain alphabets, spaces, hyphens, and apostrophes.rN   rO   striprP   r   r
   rQ   rR   )r   r   r   r   r   clean_account_name     z"BankDetailsForm.clean_account_namec                 C   r   )Nr   r   rF   r   z4Bank name must be between 1 and 100 characters long.^[a-zA-Z\s]+$z0Bank name can only contain alphabets and spaces.r   )r   r   r   r   r   clean_bank_name  r   zBankDetailsForm.clean_bank_namec                 C   r   )Nr   r   rF   r   z6Branch name must be between 1 and 100 characters long.r   z2Branch name can only contain alphabets and spaces.r   )r   r   r   r   r   clean_branch_name  r   z!BankDetailsForm.clean_branch_namec                 C   sB   | j dd }t|dkrtdtd|std|S )Nr   r      z-IFSC code must be exactly 11 characters long.z^[A-Z]{4}0[A-Z0-9]{6}$zgIFSC code must be in the format: AAAA0BBBBBB where AAAA is the bank code and BBBBBB is the branch code.r   )r   r   r   r   r   clean_ifsc_code     
zBankDetailsForm.clean_ifsc_codec                 C   sB   | j dd }t|dk rtdtd|std|S )Nr   r   rF   z!Account number must not be empty.z
^[0-9\-]+$z3Account number can only contain digits and hyphens.r   )r   r   r   r   r   clean_account_number  r   z$BankDetailsForm.clean_account_number)r   r   r   r)   r   r   r   r   r   r   r   r   r   r   r   r   w  s    

r   c                   @   s   e Zd ZG dd dZejdejdddddd	Zejd
ejdddddZej	ddej
dddddZej	ddej
dddddZej	ddej
dddddZdd Zdd Zdd Zdd Zdd  Zd!S )"CategoryFormc                   @   r   )zCategoryForm.Meta)category_namecategory_codeiconstandard_imagebanner_imageN)r   r   r   ProductCategoryr'   r(   r   r   r   r   r)     r*   r)   r   r,   category_name_inputr9   r-   Tr.   r   category_code_inputr2   IconFuploadform-control-filer:   r+   r/   r1   r0   Standard Imageupload2Banner Imageupload3c                 C   T   | j d }t|dk st|dkrtdtd|r$td| }|S )Nr   rF   r   z8Category name must be between 1 and 120 characters long.r   r   	rN   rO   r   rP   r   r
   rQ   r   rT   )r   r   captilized_category_namer   r   r   clean_category_name     
z CategoryForm.clean_category_namec                 C   r   )Nr      rG   z7Category code must be between 2 and 50 characters long.r   r   r   )r   r   captilized_category_coder   r   r   clean_category_code  r   z CategoryForm.clean_category_codec           
   
   C   s   zV| j d}|s|W S d}|j|d krtd| dt|}|j}ddd	d
dd}||d}|dkr;tdd\}}|j|ksI|j|krTtd| d| dW |S  t	yn }	 zd|	v rftdt|	d }	~	ww )Nr   Icon image needed      Image file too large ( > KB)
image/jpeg	image/png	image/gif	image/bmp
image/tiffJPEGPNGGIFBMPTIFFunknown4Unsupported file type. Only JPG and PNG are allowed.r   r   ;Image dimensions too large. Maximum allowed dimensions are x.Upload a valid imageUpload a valid image.
rN   rO   r
   r   r   openformatwidthheight	Exception
r   r   max_size_kbimgimage_formatcontent_type_mapcontent_type	max_width
max_heighter   r   r   
clean_icon  >   
zCategoryForm.clean_iconc           	      C   s   | j d}|s
|S d}|j|d krtd| dt|}|j}ddd	d
dd}||d}|dkr9tdd\}}|j|ksG|j|krRtd| d| d|S )Nr   Standard image neededr   r   r   r   r   r   r   r   r  r  r  r	  r
  r  r  r  	rN   rO   r
   r   r   r  r  r  r  	r   r   r  r  r  r  r  r  r  r   r   r   clean_standard_image-  .   
z!CategoryForm.clean_standard_imagec           	      C      | j d}|s
|S d}|j|d krtd| dt|}|j}dddd	d
d}||d}|dkr9tdd\}}|j|ksG|j|krRtd| d| d|S )Nr   Banner image neededr   r   r   r   r   r   r   r  r  r  r	  r
  r  r  r  r"  	r   r   r  r  r  r  r  r  r  r   r   r   clean_banner_imageP  .   
zCategoryForm.clean_banner_imageN)r   r   r   r)   r   re   rf   r   r   
ImageFieldClearableFileInputr   r   r   r   r   r  r$  r)  r   r   r   r   r     sF    
)#r   c                	   @   s   e Zd ZG dd dZejdejdddddd	d
Zejdejdddddddd	d
Zej	ddej
dddddZdd Zdd Zdd ZdS )ProductSubCategoryFormc                   @   r   )zProductSubCategoryForm.Meta)sub_category_namesub_category_coder   N)r   r   r   ProductSubCategoryr'   r(   r   r   r   r   r)   v  r*   r)   r.  r,   sub_category_input_namezSub Category Name)r+   r:   placeholderr-   Tr.   r/  sub_category_input_codezSub Category Codezsub category codesub_category_submit)r+   r:   r2  zarial-labelzaria-describedbyr   Fr   r   r   r   c                 C   sP   | j d}t|dk st|dkrtdtd|r"td| }|S )Nr.  rF   rG   z;Sub category name must be between 1 and 50 characters long.r   r   )rN   rO   rP   r   r
   rQ   r   title)r   r.  capitalized_sub_category_namer   r   r   clean_sub_category_name  s   
z.ProductSubCategoryForm.clean_sub_category_namec                 C   s   | j dd }t|dk st|dkrtdtd|r%tdtd|s0td	|	 r6|S |d
 
 |dd   S )Nr/  r   rF   rG   z;Sub category code must be between 1 and 50 characters long.r   Consecutive spaces not allowed.z^[a-zA-Z0-9_-]+$z<Only letters, numbers, underscores, and hyphens are allowed.r   )rN   rO   r   rP   r   r
   rQ   r   rR   isupperupper)r   r/  r   r   r   clean_sub_category_code  s   

z.ProductSubCategoryForm.clean_sub_category_codec           	      C   r&  Nr   r!  r   r   r   r   r   r   r   r  r  r  r	  i  8  r  r  r  r"  r#  r   r   r   r$    r%  z+ProductSubCategoryForm.clean_standard_imageN)r   r   r   r)   r   re   rf   r.  r/  r+  r,  r   r7  r;  r$  r   r   r   r   r-  u  s@    	r-  c                   @   s  e Zd ZG dd dZejdejdddddd	Zejd
ejdddddZejdejddddddZ	ej
de dd	Zejde dd	ZejddejdddddZejddejdddddZejddejdddddZejdddejdddddZejej ejd d!dddd"d#id$Zejej ejd d%dddd"d&id$Zejejdd'd(d)d*dd+Zejd,d-gejd d.ddd/Zd0d1 Z d2d3 Z!dAd4d5Z"d6d7 Z#d8d9 Z$d:d; Z%d<d= Z&d>d? Z'd@S )BProductFormc                   @   r   )zProductForm.Meta)product_type	item_name	item_codei_gsts_gstc_gstcessitem_categoryitem_sub_categoryitem_descriptionveg_or_non_veg_statusimagesvideosN)r   r   r   Productsr'   r(   r   r   r   r   r)     r*   r)   	Item Namer,   rA  r9   r-   Tr.   	Item CoderB  r2   zMaster Productr@  rk   rm   )r   r0   Product ImagesFProduct VideosIGSTrC  r   SGSTrD  CGSTrE  CESSzEnter cess valuerF  )r/   r1   	help_textr0   r7   id_item_categoryr1   zPlease select an item category.)r   r0   r1   r   id_item_sub_categoryz#Please select an item sub-category.   Enter descriptionrI  r+   rowsr2  r:   rn   Vegr^  Non Vegr`  rJ  r;   c                 C   L   | j d }t|dk st|dkrtdtd|r$td|S )NrA  rF   r   4Item name must be between 1 and 120 characters long.r   r8  rN   rO   r   rP   r   r
   rQ   r   r   rA  r   r   r   clean_item_nameP     
zProductForm.clean_item_namec                 C   ra  )NrB  rF   r   z4Item code must be between 1 and 120 characters long.r   r8  rc  )r   rB  r   r   r   clean_item_codeZ  rf  zProductForm.clean_item_codec              	   C   v   | j |}z"|d ur tt|d}|r#|dkr&t| dW |S W |S W |S  ttfy:   td| dw )Nr   r    must be a positive number.z!Enter a valid decimal number for r  rN   rO   roundr   r   r
   r   
ValueErrorr   
field_namer/   positivevaluer   r   r   clean_decimalc     	zProductForm.clean_decimalc                 C   4   | j |}|d u st|dkrt| d|S Nr   ri  rN   rO   intr   r
   r   rn  r/   rp  r   r   r   clean_positive_integerq     z"ProductForm.clean_positive_integerc                 C      | j ddddS )NrC  TrR  ro  r/   rq  r   r   r   r   clean_i_gstv     zProductForm.clean_i_gstc                 C   rz  )NrD  TrS  r{  r|  r}  r   r   r   clean_s_gsty  r  zProductForm.clean_s_gstc                 C   rz  )NrE  TrT  r{  r|  r}  r   r   r   clean_c_gst|  r  zProductForm.clean_c_gstc                 C      | j dddS )NrF  rU  r/   r|  r}  r   r   r   
clean_cess     zProductForm.clean_cessNF)(r   r   r   r)   r   re   rf   rA  rB  r@  r+  r   rK  	FileFieldrL  r   rC  rD  rE  rF  ModelChoiceFieldr   r   r   ri   rG  r0  rH  TextarearI  rh   rJ  re  rg  rq  rx  r~  r  r  r  r   r   r   r   r?    s    

	r?  c                	   @   s  e Zd ZG dd dZejdejddidddZejd	ejddidddZej	d
ej
ddiddddddZejdejddidddZejdej
ddiddddddZejddedddddddZejddedddddddZej	dej
ddiddddddZej	dej
ddiddddddZejg dejddidddZdd Zd d! Zd"d# Zd$d% Zd+d&d'Zd(d) Zd*S ),SKUFormc                   @   r   )zSKUForm.Meta)
sku_namesku_codesku_quantitysku_unitsku_mrpsame_day_deliverycustomization_availablesku_expiry_durationsku_bulk_qty_limit
sku_statusN)r   r   r   SKUr'   r(   r   r   r   r   r)     r*   r)   zSKU Namer+   r,   r-   Tr.   zSKU CodeQuantityzEnter a valid field)r1   invalid)r/   r0   r1   r   UnitMRPr  Fsame_day_delivery_idform-check-inputmargin-left: -25px;namer:   r+   styler   r  customization_available_idzExpiry Duration (days)zBulk Quantity Limit))Visibler  )Disabledr  )Out of Stockr  r7   r   c                 C   r  )Nr  zSKU Quantityr  rx  r}  r   r   r   clean_sku_quantity  r  zSKUForm.clean_sku_quantityc                 C   rz  )Nr  zSKU MRPT)r/   ro  r|  r}  r   r   r   clean_sku_mrp  r  zSKUForm.clean_sku_mrpc                 C   r  )Nr  zSKU Expiry Durationr  r  r}  r   r   r   clean_sku_expiry_duration  r  z!SKUForm.clean_sku_expiry_durationc                 C   r  )Nr  zSKU Bulk Quantity Limitr  r  r}  r   r   r   clean_sku_bulk_qty_limit  r  z SKUForm.clean_sku_bulk_qty_limitc              	   C   rh  )Nr   r   ri  zEnter a valid field for r  rj  rm  r   r   r   rq    rr  zSKUForm.clean_decimalc                 C   rs  rt  ru  rw  r   r   r   rx     ry  zSKUForm.clean_positive_integerNr  )r   r   r   r)   r   re   rf   r  r  r   r   r  r  r   r  BooleanFieldr   r  r  r  r  rh   ri   r  r  r  r  r  rq  rx  r   r   r   r   r    s    



r  c                   @   s   e Zd Zdd ZdS )!ShopAdminSelectorModelChoiceFieldc                 C   s   |  ddi d|j S )Nr  zwidth:200px;z%s)widget_attrsmodule_name)r   objr   r   r   label_from_instance  s   
z5ShopAdminSelectorModelChoiceField.label_from_instanceN)r   r   r   r  r   r   r   r   r  
  s    r  c                   @   sh   e Zd ZG dd dZedddZejdegejddid	d
 Z	Z	ej
ejddid	dZdd ZdS )StoreUserFormc                   @   r   )zStoreUserForm.Meta)phoner!   Nr%   r   r   r   r   r)     r*   r)   r_   zRPhone number must be entered in the format: '9999999999'. Up to 10 digits allowed.)regexmessage
   r+   r,   r-   )r   
validatorsr0   rn   c                 C   s*   | j d}tjj|d rtd|S )Nr  )r  zPhone number already exists.)rN   rO   r&   r   r   existsr
   )r   r  r   r   r   clean_phone"  s   zStoreUserForm.clean_phoneN)r   r   r   r)   r	   phone_regexr   re   rf   r  rg   
EmailInputr!   r  r   r   r   r   r    s    
r  c                   @      e Zd ZG dd dZdS )StoreUserFormStatusEditc                   @   s4   e Zd ZeZdZejddgejdddddZ	d	S )
zStoreUserFormStatusEdit.Meta)r$   r>   r>   rA   rA   r7   rC   r9   r-   r;   N)
r   r   r   r&   r'   r(   r   rh   ri   r$   r   r   r   r   r)   *  s    
r)   Nr   r   r   r)   r   r   r   r   r  )      r  c                   @   s   e Zd ZG dd dZejdejddidddZejd	ejddidd
Zej	dejddidd
Z
ejejdddddddZejdejddidd
ZejddgejdddddZdd Zdd Zdd ZdS )UserModalFormc                   @   r   )zUserModalForm.Metar   Nr%   r   r   r   r   r)   4  r*   r)   r   r+   r,   r-   Tr.   r    r2   r!   r8   rk   r5   )r+   r:   rk   rp  rn   r#   r  r  r7   rC   r9   r;   c                 C   l   | j d}t|dk rtdtd|rtd| r%tdtd|r0td| }|S )	Nr   r   z,Username must be at least 3 characters long.[!@#$%^&*(),.?":{}|<>]3Special characters are not allowed in the username.Username could not be numbers.r   r   	rN   rO   rP   r   r
   rQ   r   	isnumericrT   rU   r   r   r   rW   `     



zUserModalForm.clean_first_namec                 C   sV   | j d}td|rtd| rtdtd|r%td| }|S )Nr    r  r  r  r   r   )rN   rO   rQ   r   r   r
   r  rT   rZ   r   r   r   r\   n  s   


zUserModalForm.clean_last_namec                 C   r]   r^   ra   rb   r   r   r   rc   {  s   z UserModalForm.clean_phone_numberNro   r   r   r   r   r  3  s@    r  c                	   @   s   e Zd ZG dd dZejdejddddddd	d
dZejddej	dddd	dZ
ejej ejddddd	ddidZdd Zdd ZdS )TagFormc                   @   r   )zTagForm.Meta)tag_namer   productsN)r   r   r   Tagsr'   r(   r   r   r   r   r)     r*   r)   r  tag_name_idr,   textz	Enter tagr  r:   r+   typer2  r-   Tr.   r   Fr   r   r   r   r   
product_idr+   r   r:   r1   #Please select at least one product.r   c                 C   r  )	Nr  r   z,Tag name must be at least 3 characters long.r  3Special characters are not allowed in the tag name.Tag name could not be numbers.r   r   	rN   rO   rP   r   r
   rQ   r   r  r5  )r   r  capitalize_tag_namer   r   r   clean_tag_name  r  zTagForm.clean_tag_namec           
   
   C      zV| j d}|s|W S d}|j|d krtd| dt|}|j}dddd	d
d}||d}|dkr;tdd\}}|j|ksI|j|krTtd| d| dW |S  t	yn }	 zd|	v rftdt|	d }	~	ww Nr   r   r   r   r   r   r   r   r   r  r  r  r	  r=  r  r  r  r  r  r  r  r   r   r   r    >   
zTagForm.clean_iconN)r   r   r   r)   r   re   rf   r  r+  r,  r   r   rM  r   r   r   r  r  r  r   r   r   r   r    s&    r  c                	   @   sp   e Zd ZG dd dZejdejddddddd	d
dZeje	j
 ejddddd	ddidZdd ZdS )DynamicFilterFormc                   @   r   )zDynamicFilterForm.Meta)filter_namer  N)r   r   r   DynamicFilteringr'   r(   r   r   r   r   r)     r*   r)   r  filter_name_idr,   r  zEnter dynamic filterr  r-   Tr.   r   r  r  r1   r  r   c                 C   r  )	Nr  r   z7Dynamic filter name must be at least 3 characters long.r  r  r  r   r   r  )r   r  capitalize_filter_namer   r   r   clean_filter_name  r  z#DynamicFilterForm.clean_filter_nameN)r   r   r   r)   r   re   rf   r  r   rM  r   r   r   r  r  r   r   r   r   r    s    r  c                	   @   s   e Zd ZG dd dZejdejddddddd	d
dZejddej	dddd	dZ
ejddej	dddd	dZejddej	dddd	dZejej ejddddd	ddidZdd Zdd Zd d! Zd"d# Zd$S )%SpecialListFormc                   @   r   )zSpecialListForm.Meta)special_namer   r   r   r  N)r   r   r   SpecialListr'   r(   r   r   r   r   r)     r*   r)   r  special_name_idr,   r  zEnter special namer  r-   Tr.   r   Fr   r   r   r   r   r   r   r   r   r  r  r1   r  r   c                 C   r  )	Nr  r   z0Special name must be at least 3 characters long.r  z7Special characters are not allowed in the special name.z"Special name could not be numbers.r   r   r  )r   r  capitalize_special_namer   r   r   clean_special_name+  r  z"SpecialListForm.clean_special_namec           
   
   C   r  r  r  r  r   r   r   r  9  r  zSpecialListForm.clean_iconc           	      C   r&  r<  r"  r#  r   r   r   r$  c  r%  z$SpecialListForm.clean_standard_imagec           	      C   r&  )Nr   r'  r   r   r   r   r   r   r   r  r  r  r	  r=  r  r  r  r"  r(  r   r   r   r)    r*  z"SpecialListForm.clean_banner_imageN)r   r   r   r)   r   re   rf   r  r+  r,  r   r   r   r   rM  r   r   r   r  r  r  r$  r)  r   r   r   r   r    s>    
*#r  c                
   @   s   e Zd ZG dd dZejdejddddddd	d
Zejdejddddddddd	d
Zej	d	ddej
dddddZdd ZdS )DeliveryBoyFormc                   @   r   )zDeliveryBoyForm.Meta)team_member_namer#   r!   N)r   r   r   DeliveryBoysr'   r(   r   r   r   r   r)     r*   r)   r  team_member_name_idr,   r  r  r:   r+   r  r-   Tr.   r#   phone_number_id+91zaddCountryCode())r  r:   r+   r  rp  onfocuszEmail Address   zEnter your email)r2  r+   )r1   r/   r   r0   c                 C   sX   | j d  }|dstd|dd }| r#t|dkr(tdd| S )Nr#   r  z!Phone number must start with +91.r   r  z$Enter a valid 10-digit phone number.)rN   r   
startswithr   r
   replaceisdigitrP   )r   r  r#   r   r   r   rc     s   


z"DeliveryBoyForm.clean_phone_numberN)r   r   r   r)   r   re   rf   r  r#   rg   r  r!   rc   r   r   r   r   r    s&    r  c                   @   s   e Zd ZG dd dZejdejddddddd	d
Zejdejddddddd	d
Zej	ej
dddidddgd	dZejdejddddddd	d
ZdS )CourierDetailsFormc                   @   r   )zCourierDetailsForm.Meta)courier_service_namepackage_numberexpected_date_of_deliverytracking_linkN)r   r   r   OrderDeliveryr'   r(   r   r   r   r   r)     r*   r)   r  courier_service_name_idr,   r  r  r-   Tr.   r  package_number_id%Y-%m-%dr  dater  r   %d/%m/%Y)r0   input_formatsr1   r  tracking_link_idN)r   r   r   r)   r   re   rf   r  r  	DateField	DateInputr  r  r   r   r   r   r    s,    	
r  c                	   @   s  e Zd ZG dd dZejdejdddddd	d
Zejdejddidd	d
Zejdejddidd	d
Z	ej
ddejdddddZejg dejddddd	dZejej  ejddddddZejej ejddddddZejej ejddddddZejej ejddddddZejdejddidd	d
Zejddddejdd ddd!Z ejddd"d#ejdd$ddd!Z!ej"d%ejdd&dddd'd(Z#ejd)d*gejdd+ddd	dZ$ej%d,ejdd-d.dd	d
Z&ej'ej(d/d0dd1d2d3d/gd4Z)ej'ej(d/d0dd1d2d3d/gd4Z*ejej+dd5d6dd7d	d8Z,d9d: Z-d;d< Z.d=d> Z/d?d@ Z0dAS )B
CouponFormc                   @   r   )zCouponForm.Meta)
CouponName
CouponCodeCouponDescriptionr   CouponOnApplicableCategoryApplicableSubCategoryApplicableProductApplicableSkuTotalBillAmountDiscountAmountDiscountPercentageMaxDiscountAmountForPercentage
CouponTypeMaxNumberofUsersValidity_start_datevalidity_end_dateTermsAndConditionsN)r   r   r   Couponsr'   r(   r   r   r   r   r)     r*   r)   Coupon Namer,   zPlease fill out this fieldr1   )r+   r2  r1   r-   Tr.   r  r+   r  r   Fr   r   r   r   )Categoryr  )SubCategoryr  Productr  )Skur  r7   coupon_selectr9   r   r   r   r   r0   r1   r   r   r  zDiscount Amountdiscount_amount_field)r1   decimal_places
max_digitsr/   r0   rY  Discount Percentagediscount_percentage_fieldz&Maximum Discount Amount for Percentagemax_discount_fieldz7Maximum discount amount when coupon type is percentage.)r/   r0   r1   rV  )amountr$  )
percentager%  coupon_typer  r   r   r  r  )r  r+   r  r  )r0   r  zEnter your comments...)r+   r2  r  r0   r/   r1   c                 C   r   )Nr  zThis field is required.r   r   datar   r   r   clean_CouponName  r   zCouponForm.clean_CouponNamec           
   
   C   r  )Nr   r   r   r   r   r   r   r   r   r  r  r  r	  r=  r  r  r  r  r  r  )
r   r   r  r  r  r  r  r  r  r  r   r   r   
clean_Icon  r   zCouponForm.clean_Iconc                 C   s4   | j d}| j d}|r|r||k rtd|S )Nr  r  z/End date cannot be earlier than the start date.rN   rO   r
   )r   
start_dateend_dater   r   r   clean_validity_end_date  s
   z"CouponForm.clean_validity_end_datec                 C   s  | j dd}| j dd}| j dd }| j dd }| j dd }| j dd }|dkr[|s6tdd	itjj|d
}|D ]}tjj|jd }	t	|t	|	j
krZtddiq?|dkr|sgtdd	itjj|d}|D ]}tjj|jd }	t	|t	|	j
krtddiqp|dkr|stdd	itjj|d}|D ]}tjj|jd }	t	|t	|	j
krtddiq|dkr|stdd	itjj|d}
|
D ]}	t	|t	|	j
krtddiqd S d S )Nr  r   r  r  r  r	  r
  r  Field required!)item_category__in)productz/Coupon not valid for some products on category!r  item_sub_category__inz3Coupon not valid for some products on sub category!r  )id__inz"Coupon not valid for some product!r  zCoupon not valid for SKU!)rN   rO   r
   rM  r   r   r  r:   firstfloatr  )r   	coupon_onminimum_bill_amountapplicable_categoryapplicable_subcategoryapplicable_productapplicable_skur  r   skuskusr   r   r   clean  sV   zCouponForm.cleanN)1r   r   r   r)   r   re   rf   r  r  r  r+  r,  r   rh   ri   r  r   r   r   r   r   r   r  r0  r  rM  r	  r  r
  r  DecimalFieldr   r  r  r   r  r  r   r  r   r  r  r  r  r  r*  r+  r/  r@  r   r   r   r   r    s    
)	r  c                	   @   s   e Zd ZG dd dZejejddddddd	d
dZejejdddddddd
dZej	dde
dddddddZejddgejddddd
dZdS )DeliverySlotFormc                   @   r   )zDeliverySlotForm.Meta)
start_timeend_timeis_availabler$   N)r   r   r   DeliverySlotr'   r(   r   r   r   r   r)     r*   r)   timestart_time_namestart_time_idr,   )r  r  r:   r+   r-   rC  Tr'  end_time_nameend_time_idrD  rE  Fis_available_checkboxr  r  r  r   r  r  r7   status_selectr9   r   N)r   r   r   r)   r   	TimeField	TimeInputrC  rD  r  r   rE  rh   ri   r$   r   r   r   r   rB    s8    
rB  c                   @   s  e Zd ZG dd dZejdejddidddZejd	ejddidddZejd
ejddidddZ	ej
g dejddddddZejej  ejddddddZejej ejddddddZejej ejddddddZejej ejddddddZejdejddidddddidZejddejddddddZejddejd d!ddddZ d"d# Z!d$d% Z"d&d' Z#d(d) Z$d*d+ Z%d,d- Z&d.d/ Z'd0S )1DiscountFormc                   @   r   )zDiscountForm.Meta)DiscountNameDiscountCodeDiscountDescription
DiscountOnr  r  r	  r
  r  StandardImageBannerImageN)r   r   r   Discountr'   r(   r   r   r   r   r)   9  r*   r)   rQ  r+   r,   r-   Tr.   rR  rS  r  r7   discount_selectr9   r   r   r   Fr  r!  rF   	min_valuez.Discount percentage must be a positive number.)r/   r0   r1   rY  r   r   r   rU  r   r:   r  r+   r   r   r   rV  c                 C   "   | j d}|dkrtd|S )Nr  r   z4Discount percentage must be a positive whole number.r   )r   discount_percentager   r   r   clean_DiscountPercentage  r   z%DiscountForm.clean_DiscountPercentagec                 C      | j d}|S )Nr  rN   rO   r(  r   r   r   clean_ApplicableCategory     z%DiscountForm.clean_ApplicableCategoryc                 C   r^  )Nr  r_  r(  r   r   r   clean_ApplicableSubCategory  ra  z(DiscountForm.clean_ApplicableSubCategoryc           	      C      | j d}|stdd}|j|d krtd| dt|}|j}dddd	d
d}||d}|dkr;tdd\}}|j|ksI|j|krTtd| d| d|S )NrU  r!  r   r   r   r   r   r   r   r  r  r  r	  r>  i  r  r  r  r"  r#  r   r   r   clean_StandardImage  .   
z DiscountForm.clean_StandardImagec           	      C   rc  )NrV  r'  r   r   r   r   r   r   r   r  r  r  r	  r=  r  r  r  r"  r(  r   r   r   clean_BannerImage  .   
zDiscountForm.clean_BannerImagec                 C   s8   | j d}tjj|dj| jjd rt	
d|S )NrR  )rR  zCA discount with this code already exists. Please use a unique code.)rN   rO   rW  r   r   r   r   rR  r  r   r
   )r   discount_coder   r   r   clean_DiscountCode  s   
zDiscountForm.clean_DiscountCodec                 C   s   | j dd}| j dd }| j dd }| j dd }| j dd }|dkr/|s/tddi|d	krB|s;tdditjj|d
}|dkrN|sNtddi|dkrZ|s\tddid S d S )NrT  r   r  r  r	  r
  r  r0  r  r3  r  r  )rN   rO   r
   rM  r   r   )r   discount_onr:  r;  r<  r=  r  r   r   r   r@    s(   zDiscountForm.cleanN)(r   r   r   r)   r   re   rf   rQ  rR  rS  rh   ri   rT  r   r   r   r   r   r   r  r0  r  rM  r	  r  r
  r   r   r  r+  r,  rU  rV  r]  r`  rb  re  rg  rj  r@  r   r   r   r   rP  8  s    "#rP  c                       s  e Zd Zg dZG dd dZejdejddiddd	Zejd
ejddiddd	Z	ej
eejddidddZejg dejddddddZejej dejddddddZejej dejddddddZejej dejddddddZejddejddd d!dd"Zejd#dejd$d%d d!dd"Z fd&d'Zd(d) Zd*d+ Zd,d- Zd.d/ Z d0d1 Z!d2d3 Z"d6 fd4d5	Z#  Z$S )7AdForm))Toprm  )Bottomrn  )Bannerro  c                   @   r   )zAdForm.Meta)	AdTitleAdDescriptionAdPlacementAdTyperU  rV  rW  Couponr  N)r   r   r   Adsr'   r(   r   r   r   r   r)     r*   r)   zAd Titler+   r,   r-   Tr.   zAd Descriptionr:   zmulti-selectFr   ))rW  rW  )rt  rt  r  r7   Ad_communication_selectr9   rW  zform-control discountdiscount_id)r   r/   r0   r1   rt  zform-control coupon	coupon_idr  zform-control productr  r   r   rU  r   rZ  r   r   r   rV  c                    sJ   | dd | _|d}|r|di }| |d< t j|i | d S )Nrequestr   r   rr  )popry  rO   
setdefaultget_placement_displayr   r   )r   r   r   r   r   r   r   r   r   Z  s   
zAdForm.__init__c           	      C   rc  )NrU  r!  r   r   r   r   r   r   r   r  r  r  r	  r=  r  r  r  r"  r#  r   r   r   re  c  rf  zAdForm.clean_StandardImagec                 C   s   | j d}|std|S )Nrr  z"Please select atleast 1 placement!r,  )r   ad_placementr   r   r   clean_AdPlacement  s   zAdForm.clean_AdPlacementc           	      C   rc  )NrV  r'  r   r   r   r   r   r   r   r  r  r  r	  rd  r  r  r  r"  r(  r   r   r   rg    rh  zAdForm.clean_BannerImagec                 C   4   | j d}|dkr| j ddkrtdd S d S )Nrs  rW  r   zDiscount Cannot be empty!r,  r   ad_typer   r   r   clean_Discount     zAdForm.clean_Discountc                 C   r  )Nrs  rt  r   zCoupon Cannot be  empty!r,  r  r   r   r   clean_Coupon  s   zAdForm.clean_Couponc                 C   r  )Nrs  r  r   zProduct Cannot be empty!r,  r  r   r   r   clean_Product  r  zAdForm.clean_Productc                    s0   t  jdd}d| jd |_|r|  |S )NF)commitr   rr  )r   saver   rN   rr  )r   r  r   r   r   r   r    s
   zAdForm.save)T)%r   r   r   placement_choicesr)   r   re   rf   rp  rq  MultipleChoiceFieldCheckboxSelectMultiplerr  rh   ri   rs  r  rW  r   r   r  rt  rM  r  r+  r,  rU  rV  r   re  r~  rg  r  r  r  r  r   r   r   r   r   rl    s~    
	"&rl  c                   @   sb  e Zd ZG dd dZejdejdddddd	Zejd
ejdddddd	Zejdej	ddddddd	Z
ejddgejdddddZejdejdddddd	Zejdejdddddd	Zejg dejddddddZejde dd	Zejde dd	Zejdejejdddddd Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+S ),CustomProductFormc                   @   r   )zCustomProductForm.Meta)
rA  rB  rI  rJ  min_sizemax_size	size_unitrK  rL  availabilityN)r   r   r   CustomProductr'   r(   r   r   r   r   r)     r*   r)   rN  r,   rA  r9   r-   Tr.   rO  rB  zItem DescriptionrI  rY  )r+   r:   r\  r]  r_  rJ  r;   zMinimum Sizer  zMaximum Sizer  ))gr  )kgr  )mlr  )ltrr  r  r   rP  FrQ  Availabilityr  r/   r<   r0   r1   c                 C   6   | j d }t|dk st|dkrtd|S )NrA  rF   r   rb  rN   rO   r   rP   r   r
   rd  r   r   r   re  %	     z!CustomProductForm.clean_item_namec                 C   r  )NrI  rF   i  z7Description must be between 1 and 1300 characters long.r  )r   rI  r   r   r   clean_item_description-	  r  z(CustomProductForm.clean_item_descriptionc                 C   r[  )Nr  r   z$Minimum size must be greater than 0.r   )r   r  r   r   r   clean_min_size5	  r   z CustomProductForm.clean_min_sizec                 C   r[  )Nr  r   z$Maximum size must be greater than 0.r   )r   r  r   r   r   clean_max_size;	  r   z CustomProductForm.clean_max_sizec           
      C   s   | j d}|stdd}d\}}ddg}|D ][}|j|d kr-td|j d	| d
z/t|}|j}||vrBtd| d|j|ksL|j	|kr[td|j d| d| dW q t
ys }	 ztd|j d|	 d }	~	ww d S )NrK  zAt least one image is required.r   )   r  r  r  r   zImage z is too large (>zKB).zUnsupported file type: z. Only JPG and PNG are allowed.z' is too large. Max allowed dimensions: r  z pixels.zInvalid image file z: )filesgetlistr
   r   r  r   r  r  r  r  r  )
r   rK  r  r  r  allowed_formatsimager  r  r  r   r   r   clean_imagesA	  s0   
zCustomProductForm.clean_imagesN) r   r   r   r)   r   re   rf   rA  rB  r  rI  rh   ri   rJ  r   r   r  r  r  r+  r   rK  r  rL  r  AVAILABILITY_CHOICESr  re  r  r  r  r  r   r   r   r   r    sr    r  c                   @   s  e Zd ZG dd dZejdejddidddZejd	ejddidddZejd
ejddidddZ	ejdejddidddZ
ejdejddidddZejdejddidddZejdejddidddZejdejddddddZejdejddddddZejdejddddddZejdejddidddZejdejddidddZejdejddidddZejddgejddddddZd d! Zd"d# Zd$S )%ProductionUnitFormc                   @   r   )zProductionUnitForm.Meta)pu_namepu_locationpu_coderu   rv   rw   rx   ry   rz   r{   r|   r!   r}   r$   N)r   r   r   ProductionUnitr'   r(   r   r   r   r   r)   m	  r*   r)   rq   r+   r,   r-   Tr.   rr   rs   r   rv   r   r   r   r   r   rz   rk   rl   r{   r   Fr   r}   )r  r  )closer  r7   rC   r9   r   c                 C   r   )	Nr  r   r   r   r   r   r   r   r   )r   r  rV   r   r   r   clean_pu_name	  r   z ProductionUnitForm.clean_pu_namec                 C   r]   r   ra   rb   r   r   r   r   	  rd   z#ProductionUnitForm.clean_contact_noN)r   r   r   r)   r   re   rf   r  r  r  ru   rv   rw   rx   r   ry   rz   r{   r|   rg   r!   r}   rh   ri   r$   r  r   r   r   r   r   r  l	  s    r  c                	   @   s   e Zd ZG dd dZejdejejdddddd	d
Z	ej
dejddddddd	dZej
dejdddddddd	dZdS )FAQFormc                   @   r   )zFAQForm.Meta)categoryquestionanswerN)r   r   r   FAQr'   r(   r   r   r   r   r)   	  r*   r)   r  r  category_idr,   )r  r:   r+   r-   Tr  Questionr  question_idr  r  r.   Answerr  	answer_idrY  (   )r  r:   r+   r\  colsN)r   r   r   r)   r   rh   r  CATEGORY_CHOICESri   r  re   rf   r  r  r  r   r   r   r   r  	  sB    
r  c                   @   (   e Zd Zeje dZG dd dZdS )AboutUsFormrn   c                   @      e Zd ZeZddgZdS )zAboutUsForm.Metacontentr  N)r   r   r   AboutUsr'   r(   r   r   r   r   r)   
  r   r)   Nr   r   r   r   re   r   r  r)   r   r   r   r   r  
      r  c                   @   r  )PrivacyPolicyFormrn   c                   @      e Zd ZeZdgZdS )zPrivacyPolicyForm.Metar  N)r   r   r   PrivacyPolicyr'   r(   r   r   r   r   r)   
      
r)   Nr  r   r   r   r   r  
  r  r  c                   @   r  )TermsAndConditionsFormrn   c                   @   r  )zTermsAndConditionsForm.Metar  N)r   r   r   r  r'   r(   r   r   r   r   r)   $
  r  r)   Nr  r   r   r   r   r  "
  r  r  c                   @   r  )ContactUsFormc                   @   r  )zContactUsForm.Metar#   r!   N)r   r   r   	ContactUsr'   r(   r   r   r   r   r)   )
  r   r)   Nr  r   r   r   r   r  (
  r  r  c                   @   r  )
AppUrlFormc                   @   r  )zAppUrlForm.Metaplaystore_linkappstore_linkN)r   r   r   AppUrlr'   r(   r   r   r   r   r)   .
  r   r)   Nr  r   r   r   r   r  -
  r  r  c                   @   r  )RefundPolicyFormrn   c                   @   r  )zRefundPolicyForm.Metar  N)r   r   r   ReturnPolicyr'   r(   r   r   r   r   r)   4
  r  r)   Nr  r   r   r   r   r  2
  r  r  c                   @   s   e Zd ZG dd dZejdejdddddd	Zejd
ej	dd
ddddZ
ejdej	ddddddZejdej	ddddddZejdej	dddddddZejdej	ddddddZdd ZdS )CustomOrderFormc                   @   r   )zCustomOrderForm.Meta)order_ID	sub_totaltaxes_and_chargesdelivery_chargesdiscountgrand_totalN)r   r   r   Ordersr'   r(   r   r   r   r   r)   :
  r*   r)   r  r,   order_Idrk   rm   r-   r2   r  r9   Tr.   r  r  r  r  c                 C   s&   | j d}t|dk rtd|S )Nr  r   z$Grand Total should be greater than 0ru  )r   r  r   r   r   clean_grand_totald
  s   z!CustomOrderForm.clean_grand_totalN)r   r   r   r)   r   re   rf   r  r   r   r  r  r  r  r  r  r   r   r   r   r  9
  sB    
r  c                   @   s|   e Zd ZG dd dZejdejddidddZejd	g d
ej	ddidddZ
ejej ddej	ddiddZdS )MessageFormc                   @   r   )zMessageForm.Meta)message_typer  adsN)r   r   r   Messager'   r(   r   r   r   r   r)   o
  r*   r)   r  r+   r,   r-   Tr.   r  ))r!   Email)smsSMS)whatsappWhatsAppr7   r  r   zMessage Subject)r   to_field_namer/   r0   N)r   r   r   r)   r   re   rf   r  rh   ri   r  r  ru  r   r   r  r   r   r   r   r  n
  s    
r  c                   @   sr   e Zd ZG dd dZejej ej	ddddddd	d
iddZ
ejej ejdddddd	didZdS )YouMayAlsoLikeFormc                   @   r   )zYouMayAlsoLikeForm.Meta)r2  liked_productsN)r   r   r   YouMayAlsoLiker'   r(   r   r   r   r   r)   }
  r*   r)   r2  product_selectzform-control select2zSelect Product)r  r:   r+   r2  r-   r1   zPlease select a product.T)r   r0   r   r1   r,   r   r  r  r  r   N)r   r   r   r)   r   r  rM  r   r   ri   r2  r   r   r  r   r   r   r   r  |
  s    .
r  c                   @   r  )DeliverySettingsFormc                   @   sd   e Zd ZeZg dZejddidejddidejddidejddidejddiddZdS )zDeliverySettingsForm.Meta)base_feebase_km
per_km_feefree_delivery_min_order_valuefree_delivery_max_distancer+   r,   r-   N)	r   r   r   DeliverySettingsr'   r(   r   r   widgetsr   r   r   r   r)   
  s    
r)   Nr  r   r   r   r   r  
  r  r  c                   @   r  )DeliveryDiscountFormc                   @   sD   e Zd ZeZddgZejddidejddiddZdddZ	d	S )
zDeliveryDiscountForm.Metamin_order_valuediscount_percentr+   r,   r-   )r  r  u   Starts From Order Value (₹)z
Discount %N)
r   r   r   DeliveryDiscountr'   r(   r   r   r  labelsr   r   r   r   r)   
  s    
r)   Nr  r   r   r   r   r  
  r  r  c                   @   r  )CustomCouponSettingsFormc                   @   sx   e Zd ZeZg dZejddidejddddddej	ddidej	ddidej	ddidd	Z
d
ddddZdS )zCustomCouponSettingsForm.Meta)coupon_namecoupon_descriptionlower_limit_pricehigher_limit_pricediscount_amountr+   r,   r-   rY  rZ  r  r[  )r  r  r  r  r  r  zCoupon DescriptionzLower Order PricezUpper Order Price)r  r  r  r  N)r   r   r   CustomCouponSettingsr'   r(   r   rf   r  r   r  r  r   r   r   r   r)   
  s&    
r)   Nr  r   r   r   r   r  
  r  r  )BPILr   djangor   django.appsr   
cms.modelsdjango.formsr   shops.modelsaccounts.modelsproducts.modelsorders.modelsdjango.forms.modelsr   ckeditor.widgetsr   django.core.validatorsr	   django.core.exceptionsr
   rQ   decimalr   r   r   r,  r   	ModelFormr   rj   rp   r   r   r-  r?  r  r  r  r  r  r  r  r  r  r  r  r  rB  rP  rl  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   <module>   s~    US 5L 3l $ 
OZ% ,-# |A W K  (5