o
    'j                    @   s\  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ZAG dWdX dXejZBd
S )Y    )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__ E/var/www/html/collabkart/collabkart.saasvaap.com/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                       sV  e Zd Z fd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/d0 Z%d1d2 Z&d3d4 Z'd5d6 Z(d7d8 Z)  Z*S )9ShopFormc                    s\   t  j|i | |r*|d d ur,|d  }|ddd |dD  || _d S d S d S )Nr   unit_admin_userc                 S   s   g | ]
}|  d kr|qS ) )strip).0vr   r   r   
<listcomp>   s    z%ShopForm.__init__.<locals>.<listcomp>)r   r   copysetlistgetlistdata)r   argskwargsrz   r   r   r   r      s   
zShopForm.__init__c                   @   r   )zShopForm.Meta)	unit_nameunit_location	unit_coderq   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)   r}   r+   r,   r-   Tr.   r~   r   r5   )r"   10r+   sizer1   +Please select at least one shop admin user.querysetr0   error_messagesStreetr   DistrictstatePin Code6r+   
max_lengthr   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   s^   | j d}t|dk st|dkrtdtd|s"tdtd|r-td|S )	Nr}      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   search)r   	shop_namer   r   r   clean_unit_nameC  s   
zShopForm.clean_unit_namec                 C   s@   | j d}t|dkrtdd}t||std|S )Nr      z!GSTIN must be 15 characters long.z9^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z]{1}[1-9A-Z]{1}Z[0-9A-Z]{1}$zInvalid GSTIN format.)rN   rO   rP   r   r
   rQ   rR   )r   r   gst_patternr   r   r   	clean_gstQ  s   

zShopForm.clean_gstc                 C   s,   | j d}|s
|S td|std|S Nr   r_   r`   ra   rb   r   r   r   clean_contact_noZ  s   zShopForm.clean_contact_noc                 C   s"   | j d}|dk rtd|S )Nr   r   z*Delivery radius must be a positive number.rN   rO   r   r
   )r   r   r   r   r   clean_delivery_radiuse     
zShopForm.clean_delivery_radiusc                 C   s   | j d}|stdtjj|d }| jr$| jjr$|j	| jjd}|
 rPg }|D ]}|j|d
 rB||j d|j  q,d|}td| d	|S )
Nrq   r   )unit_admin_user__in)pk)rq   rL   , zShop Admin(s) z% is already assigned to another shop.)rN   rO   r
   r   objectsfilterdistinctinstancer   excludeexistsappendr   r    join)r   rq   shop_qsusersadmin	name_listr   r   r   clean_unit_admin_userk  s*   

zShopForm.clean_unit_admin_user)+r   r   r   r   r)   r   re   rf   r}   r~   r   ModelMultipleChoiceFieldr&   r   r   allSelectMultiplerq   r   r   r   r   IntegerFieldr   r   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)         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   r{   r|   r   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   rr   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   rs   rP   r   r
   rQ   rR   )r   r   r   r   r   clean_account_name     z"BankDetailsForm.clean_account_namec                 C   r   )Nr   rr   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   rr   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   rr      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   rr   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     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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_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upload2c                 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   rs   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_imageN)r   r   r   r)   r   re   rf   r   r   
ImageField	FileInputr   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
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)     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:   r-  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*  rr   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   rs   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      | 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   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&  ClearableFileInputr   r2  r6  r$  r   r   r   r   r(    s@    	r(  c                       s  e Zd ZG dd dZ fddZejdejdd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ejdd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ejddd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"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d0ddd,Zejd1dd2ejdd3ddd4Zejej ejd5d6dddd7d8id9Z eje!j" ejd5d:dddd7d;id9Z#ejejdd<d=d>d?dd@Z$ej%dAdBgejd5dCdddDZ&dEdF Z'dGdH Z(dUdIdJZ)dKdL Z*dMdN Z+dOdP Z,dQdR Z-dV fdSdT	Z.  Z/S )W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)   c              	      sH  t  j|i | d| jv r8z| jd}tjj|d| jd _W d S  t	t
fy7   tj | jd _Y d S w | jr| jjr| jjrQtjj| jjd| jd _n	tj | jd _z3tjj| jd}|jpgd| jd< |jpod| jd< |jpwd| jd	< |jpd| jd
< |jpd| jd< W d S  tjy   Y d S w tj | jd _d S )NrD  )category_idrE  )categoryproductrr   ingredient_infonutritional_infoallergen_descriptionallergen_infoadditional_info)r   r   rz   rO   r+  r   r   r(   r   
ValueError	TypeErrornoner   r   rD  ProductDescriptionrO  r   rP  rQ  rR  rS  DoesNotExist)r   r{   r|   rK  product_descriptionr   r   r   r     s6   
zProductForm.__init__Ingredientsr,   rO  r   z)List all ingredients used in this product)r+   r:   rowsr-  r-   Fr/   r0   r1   	help_textzNutritional InformationrP  z@Provide nutritional facts (calories, protein, carbs, fats, etc.)zAllergen DescriptionrQ  r   z&Brief description of allergens presentzAllergen InformationrR  zBDetailed allergen information (contains nuts, gluten, dairy, etc.)zAdditional InformationrS  z&Any other relevant product information	Item Namer>  r9   Tr.   	Item Coder?  r2   zMaster Productr=  rk   rm   )r   r0   Product ImagesProduct VideosIGSTr@  r   SGSTrA  CGSTrB  CESSzEnter cess valuerC  )r/   r1   r]  r0   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 descriptionrF  r+   r[  r-  r:   rn   Vegrl  Non Vegrn  rG  r;   c                 C   L   | j d }t|dk st|dkrtdtd|r$td|S )Nr>  rF   r   4Item name must be between 1 and 120 characters long.r   r3  rN   rO   rs   rP   r   r
   rQ   r   r   r>  r   r   r   clean_item_name     
zProductForm.clean_item_namec                 C   ro  )Nr?  rF   r   z4Item code must be between 1 and 120 characters long.r   r3  rq  )r   r?  r   r   r   clean_item_code  rt  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   rT  r   
field_namer/   positivevaluer   r   r   clean_decimal  s   zProductForm.clean_decimalc                 C      | j ddddS )Nr@  rb  Tr|  r~  r   r   r   r   clean_i_gst     zProductForm.clean_i_gstc                 C   r  )NrA  rc  Tr  r  r  r   r   r   clean_s_gst  r  zProductForm.clean_s_gstc                 C   r  )NrB  rd  Tr  r  r  r   r   r   clean_c_gst  r  zProductForm.clean_c_gstc                 C   s   |  ddS )NrC  re  r  r  r   r   r   
clean_cess  s   zProductForm.clean_cessc                    s   t  j|d}|r>tjj|d\}}| jdd|_| jdd|_| jdd|_	| jdd|_
| jdd|_|  |S )	NcommitrM  rO  rr   rP  rQ  rR  rS  )r   saverW  r   get_or_createrN   rO   rO  rP  rQ  rR  rS  )r   r  rN  rY  createdr   r   r   r    s   zProductForm.saveFT)0r   r   r   r)   r   r   re   TextarearO  rP  rQ  rR  rS  rf   r>  r?  r=  r&  r   rH  	FileFieldrI  r   r@  rA  rB  rC  ModelChoiceFieldr   r   r   ri   rD  r+  rV  rE  rF  rh   rG  rs  ru  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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      | j dddS )Nr  zSKU Quantityr/   clean_positive_integerr  r   r   r   clean_sku_quantityf     zSKUForm.clean_sku_quantityc                 C   r  )Nr  zSKU MRPT)r/   r|  r  r  r   r   r   clean_sku_mrpi  r  zSKUForm.clean_sku_mrpc                 C   r  )Nr  zSKU Expiry Durationr  r  r  r   r   r   clean_sku_expiry_durationl  r  z!SKUForm.clean_sku_expiry_durationc                 C   r  )Nr  zSKU Bulk Quantity Limitr  r  r  r   r   r   clean_sku_bulk_qty_limito  r  z SKUForm.clean_sku_bulk_qty_limitc              	   C   rv  )Nr   r   rw  zEnter a valid field for r  rx  rz  r   r   r   r~  r  s   	zSKUForm.clean_decimalc                 C   s4   | j |}|d u st|dkrt| d|S )Nr   rw  rN   rO   intr   r
   )r   r{  r/   r}  r   r   r   r    s   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  r~  r  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   r   r
   )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)     r*   r)   r   r+   r,   r-   Tr.   r    r2   r!   r8   rk   r5   )r+   r:   rk   r}  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\     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    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+   typer-  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  r0  )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	  r9  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   rJ  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_nameq  r  z#DynamicFilterForm.clean_filter_nameN)r   r   r   r)   r   re   rf   r  r   rJ  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   banner_imager  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   Banner Imageupload3r   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    r  zSpecialListForm.clean_iconc           	      C   r7  r8  r"  r#  r   r   r   r$    r%  z$SpecialListForm.clean_standard_imagec           	      C   r7  )Nr  Banner image neededr   r   r   r   r   r   r   r  r  r  r	  r9  r  r  r  r"  	r   r  r  r  r  r  r  r  r  r   r   r   clean_banner_image  s.   
z"SpecialListForm.clean_banner_imageN)r   r   r   r)   r   re   rf   r  r&  r;  r   r   r  r   rJ  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  r}  onfocuszEmail Address   zEnter your email)r-  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.rr   r  z$Enter a valid 10-digit phone number.)rN   rs   
startswithr   r
   replaceisdigitrP   )r   r  r#   r   r   r   rc   G  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)   Z  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  Y  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+   r-  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   rh  Discount Percentagediscount_percentage_fieldz&Maximum Discount Amount for Percentagemax_discount_fieldz7Maximum discount amount when coupon type is percentage.r\  )amountr7  )
percentager8  coupon_typer#  r   r   r  r  )r  r+   r  r  )r0   r  zEnter your comments...)r+   r-  r&  r0   r/   r1   c                 C   s   | j d}|std|S )Nr  zThis field is required.r   r   rz   r   r   r   clean_CouponName  s   
zCouponForm.clean_CouponNamec           
   
   C   r  )Nr   r   r   r   r   r   r   r   r   r  r  r  r	  r9  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_date9  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  rr   r  r  r  r  r  r*  Field required!)item_category__inrM  z/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
   rJ  r   r   r  r:   firstfloatr  )r   	coupon_onminimum_bill_amountapplicable_categoryapplicable_subcategoryapplicable_productapplicable_skur  iskuskusr   r   r   cleanB  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  r+  r  rJ  r  r  r  r  DecimalFieldr   r  r   r   r!  r"  r   r#  r  r  r$  r%  r  r&  r<  r=  rA  rR  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)   x  r*   r)   timestart_time_namestart_time_idr,   )r  r  r:   r+   r-   rU  Tr:  end_time_nameend_time_idrV  rW  Fis_available_checkboxr  r  r  r   r  r  r7   status_selectr9   r   N)r   r   r   r)   r   	TimeField	TimeInputrU  rV  r  r   rW  rh   ri   r$   r   r   r   r   rT  w  s8    
rT  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)     r*   r)   rc  r+   r,   r-   Tr.   rd  re  r)  r7   discount_selectr9   r   r   r   Fr0  r4  rF   	min_valuez.Discount percentage must be a positive number.)r/   r0   r1   rk  r   r   r   rg  r   r:   r  r+   r   r  r  rh  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   rp  )Nr  rq  r;  r   r   r   clean_ApplicableSubCategory  rs  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 )Nrg  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   ru  Nrh  r  r   r   r   r   r   r   r   r  r  r  r	  )ih     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 )Nrd  )rd  zCA discount with this code already exists. Please use a unique code.)rN   rO   ri  r   r   r   r   rd  r   r   r
   )r   discount_coder   r   r   clean_DiscountCodeb  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 )Nrf  rr   r  r  r  r  r*  rB  r+  rD  r-  r.  )rN   rO   r
   rJ  r   r   )r   discount_onrK  rL  rM  rN  r  r   r   r   rR  h  s(   zDiscountForm.cleanN)(r   r   r   r)   r   re   rf   rc  rd  re  rh   ri   rf  r   r   r   r   r   r   r  r+  r  rJ  r  r  r  r   r   r   r&  r;  rg  rh  ro  rr  rt  rv  rz  r}  rR  r   r   r   r   rb    s    "#rb  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))Topr  )Bottomr  )Bannerr  c                   @   r   )zAdForm.Meta)	AdTitleAdDescriptionAdPlacementAdTyperg  rh  ri  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   ))ri  ri  )r  r  r,  )Othersr  r7   Ad_communication_selectr9   ri  zform-control discountdiscount_id)r   r/   r0   r1   r  zform-control coupon	coupon_idr-  zform-control productr  r   r   rg  r   rl  r   r  r  rh  c                    sJ   | dd | _|d}|r|di }| |d< t j|i | d S )Nrequestr   r   r  )popr  rO   
setdefaultget_placement_displayr   r   )r   r{   r|   r   r   r   r   r   r     s   
zAdForm.__init__c           	      C   ru  )Nrg  r!  r   r   r   r   r   r   r   r  r  r  r	  )r:  iN  r  r  r  r"  r#  r   r   r   rv    rw  zAdForm.clean_StandardImagec                 C   s   | j d}|std|S )Nr  z"Please select atleast 1 placement!r>  )r   ad_placementr   r   r   clean_AdPlacement	  s   zAdForm.clean_AdPlacementc           	      C   ru  rx  r"  r  r   r   r   rz  	  r{  zAdForm.clean_BannerImagec                 C   4   | j d}|dkr| j ddkrtdd S d S )Nr  ri  rr   zDiscount Cannot be empty!r>  r   ad_typer   r   r   clean_Discount2	     zAdForm.clean_Discountc                 C   r  )Nr  r  rr   zCoupon Cannot be  empty!r>  r  r   r   r   clean_Coupon7	  s   zAdForm.clean_Couponc                 C   r  )Nr  r-  rr   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 )NFr  ,r  )r   r  r   rN   r  )r   r  r   r   r   r   r  E	  s
   zAdForm.saver  )%r   r   r   placement_choicesr)   r   re   rf   r  r  MultipleChoiceFieldCheckboxSelectMultipler  rh   ri   r  r  ri  r   r   r'  r  rJ  r-  r&  r;  rg  rh  r   rv  r  rz  r  r  r  r  r   r   r   r   r   r    s~    
	"&r  c                   @   sj  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+d, Z d-S ).CustomProductFormc                   @   r   )zCustomProductForm.Meta)
r>  r?  rF  rG  min_sizemax_size	size_unitrH  rI  availabilityN)r   r   r   CustomProductr'   r(   r   r   r   r   r)   Y	  r*   r)   r^  r,   r>  r9   r-   Tr.   r_  r?  zItem DescriptionrF  rh  )r+   r:   r[  rk  rm  rG  r;   zMinimum Sizer  zMaximum Sizer  ))gr  )kgr  )mlr  )ltrr  r  r   r`  Fra  Availabilityr  r/   r<   r0   r1   c                 C   6   | j d }t|dk st|dkrtd|S )Nr>  rF   r   rp  rN   rO   rs   rP   r   r
   rr  r   r   r   rs  	     z!CustomProductForm.clean_item_namec                 C   r  )NrF  rF   i  z7Description must be between 1 and 1300 characters long.r  )r   rF  r   r   r   clean_item_description	  r  z(CustomProductForm.clean_item_descriptionc                 C   rm  )Nr  r   z$Minimum size must be greater than 0.r   )r   r  r   r   r   clean_min_size	  r   z CustomProductForm.clean_min_sizec                 C   rm  )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
d S d}d\}}g d}g }|D ]}td|j d|j d|jd d	d
 |j|d kr?|d| d qzBt|}|  |	d t|}|j
r[|j
 nd }	|	|vrh|d W q|j|ksr|j|kr|d| d| d W qW q ty }
 ztd|
  |d W Y d }
~
qd }
~
ww |rttt|d |S )NrH  r   )   r  )r  r  JPGzImage: z, Size: z bytes, r   z.2fz KBz"Image file size should not exceed zKB.r   z+Only JPG and PNG image formats are allowed.z#Image dimensions should not exceed r  z pixels.zImage validation error: z:Invalid image file. Please check the format and try again.)filesry   printr  r   r   r   r  verifyseekr  r5  r  r  r  r
   listset)r   rH  r  r  r  allowed_formatsr   imager  r  r  r   r   r   clean_images	  s\   






zCustomProductForm.clean_imagesc                 C   s   | j d}|s
d S d}g d}|D ]2}|j|d d kr)td|j d| d|jdd	  }||vrDtd
| dd| q|S )NrI  r  )mp4avimovmkvr   zVideo z is too large (>zMB).r  zUnsupported video format: z. Allowed formats: r   )r  ry   r   r
   r  splitlowerr   )r   rI  max_size_mballowed_video_formatsvideofile_extensionr   r   r   clean_videos	  s   zCustomProductForm.clean_videosN)!r   r   r   r)   r   re   rf   r>  r?  r  rF  rh   ri   rG  r   r   r  r  r  r&  r   rH  r  rI  r  AVAILABILITY_CHOICESr  rs  r  r  r  r  r  r   r   r   r   r  X	  st    >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_coder   r   r   r   r   r   r   r   r!   r   r$   N)r   r   r   ProductionUnitr'   r(   r   r   r   r   r)   
  r*   r)   r}   r+   r,   r-   Tr.   r~   r   r   r   r   r   r   r   r   r   rk   rl   r   r   Fr   r   )r  r  )closer  r7   rC   r9   r   c                 C   sf   | j d}t|dk st|dkrtdtd|s"tdtd|r-td| }|S )	Nr  r   r   r   r   r   r   r   )	rN   rO   rP   r   r
   rQ   rR   r   rT   )r   r  rV   r   r   r   clean_pu_name
  s   
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  r   r   r   r   r   r   r   r   r   rg   r!   r   rh   ri   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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)rL  questionanswerN)r   r   r   FAQr'   r(   r   r   r   r   r)   
  r*   r)   r*  rL  rK  r,   )r  r:   r+   r-   Tr  Questionr  question_idr  r  r.   Answerr  	answer_idrh  (   )r  r:   r+   r[  colsN)r   r   r   r)   r   rh   r  CATEGORY_CHOICESri   rL  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)   
  r  r)   Nr  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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 0r  )r   r  r   r   r   clean_grand_total  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  
  sB    
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
ejdddd	d
dZejdejddddd	ddZ fddZ  ZS )MessageFormc                   @   r   )zMessageForm.Meta)message_typesubjectr  N)r   r   r   Messager'   r(   r   r   r   r   r)      r*   r)   r  r,   5zEnter your message here...message_inputrj  r-   Tr.   zMessage Typer7   message_type_selectr9   r  SubjectzEnter email subject...subject_input)r+   r-  r:   Fc                    s:   t   }|d}|d}|dkr|s| dd |S )Nr  r  r!   z'Subject is required for email messages.)r   rR  rO   	add_error)r   rN   r  r  r   r   r   rR  C  s   


zMessageForm.clean)r   r   r   r)   r   re   r  r  rh   r  MESSAGE_TYPE_CHOICESri   r  rf   r  rR  r   r   r   r   r   r    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)rN  liked_productsN)r   r   r   YouMayAlsoLiker'   r(   r   r   r   r   r)   P  r*   r)   rN  product_selectzform-control select2zSelect Product)r  r:   r+   r-  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  rJ  r   r   ri   rN  r   r   r  r   r   r   r   r  O  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)   o  s    
r)   Nr  r   r   r   r   r  n  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-   rh  ri  r  rj  )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  c                       s*   e Zd ZG dd dZ fddZ  ZS )ShopSlobIdFormc                   @   r  )zShopSlobIdForm.Metashopslob_idN)r   r   r   
ShopSlobIdr'   r(   r   r   r   r   r)     r   r)   c                    sb   t   }|d}|d}|rtjj|d rtd|r/tjj|d r/td|S )Nr  r  )r  z)This shop already has a Slob ID assigned.)r  z1This Slob ID is already assigned to another shop.)	r   rR  rO   r  r   r   r   r   r
   )r   rN   r  r  r   r   r   rR    s   


zShopSlobIdForm.clean)r   r   r   r)   rR  r   r   r   r   r   r    s    r  )C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  rT  rb  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   <module>   s    US EL 3l   
OZ% ,-# |B W J G (40