3

\i                 @   st   d dl Z d dlmZ d dlmZ d dlmZ d dlm	Z	 e	ddZ
e	dd	ZG d
d dejZG dd dejZdS )    N)forms)Q)gettext_lazy)	get_model	catalogueProductofferRangec               @   s   e Zd ZG dd dZdS )	RangeFormc               @   s   e Zd ZeZdddddgZdS )zRangeForm.Metanamedescription	is_publicincludes_all_productsincluded_categoriesN)__name__
__module____qualname__r	   modelfields r   r   </var/www/html/oscar2019/oscar/apps/dashboard/ranges/forms.pyMeta   s   r   N)r   r   r   r   r   r   r   r   r
      s   r
   c                   s   e Zd ZejdedejdeddZejedddedd	Z	 fd
dZ
 fddZdd Zdd Zdd Zdd Z  ZS )RangeProductFormi   zProduct SKUs or UPCsFz,You can paste in a selection of SKUs or UPCs)
max_lengthlabelwidgetrequired	help_textzFile of SKUs or UPCs   z2Either comma-separated, or one identifier per line)r   r   r   r   c                s   || _ t j|| d S )N)rangesuper__init__)selfr   argskwargs)	__class__r   r   r!       s    zRangeProductForm.__init__c                s4   t  j }|jd r0|jd r0tjtd|S )Nqueryfile_uploadz3You must submit either a list of SKU/UPCs or a file)r    cleangetr   ValidationError_)r"   
clean_data)r%   r   r   r(   $   s
    

zRangeProductForm.cleanc             C   s  | j d }|s|S ttjdj|}| jj }t|jddd}t|jddd}|j|}|| }t	|dkrt
jtdd	j| tjjt|d
t|dB | _t	| jdkrt
jtdd	j| t| jjddd}t| jjddd}	|j|	}
||
 | _|j|| _|S )Nr&   z[\w-]+stockrecords__partner_skuT)flatupcr   zDThe products with SKUs or UPCs matching %s are already in this rangez, )stockrecords__partner_sku__in)upc__inz/No products exist with a SKU or UPC matching %s)cleaned_datasetrecompilefindallr   all_productsvalues_listunionlenr   r*   r+   joinr   _default_managerfilterr   productsmissing_skusintersectionduplicate_skus)r"   rawidsr>   existing_skusexisting_upcsexisting_idsnew_ids
found_skus
found_upcs	found_idsr   r   r   clean_query+   s8    




zRangeProductForm.clean_queryc             C   s   t | dr| jS g S )Nr>   )hasattrr>   )r"   r   r   r   get_productsO   s    zRangeProductForm.get_productsc             C   s   | j S )N)r?   )r"   r   r   r   get_missing_skusR   s    z!RangeProductForm.get_missing_skusc             C   s   | j S )N)rA   )r"   r   r   r   get_duplicate_skusU   s    z#RangeProductForm.get_duplicate_skus)r   r   r   r   	CharFieldr+   Textarear&   	FileFieldr'   r!   r(   rK   rM   rN   rO   __classcell__r   r   )r%   r   r      s   
$r   )r4   djangor   django.db.modelsr   django.utils.translationr   r+   oscar.core.loadingr   r   r	   	ModelFormr
   Formr   r   r   r   r   <module>   s   


