
    wg                         d dl mZ d dlmZ d dlmZmZmZ d dlm	Z	m
Z
mZmZ d dlmZ d dlmZmZ d dlmZmZmZ  G d d	e          Zd
efdZdS )    )Iterable)Any)CountQQuerySet)OfferInterfaceProductCategoryInterfaceProductInterfaceProductTypeInterface)ProductRepositoryInterface)ProductCategoryProductType)OfferOrganizationProductc                      e Zd Zdee         fdZdee         fdZdedee         fdZ	de
de
dee         fdZde
deeef         fd	Zd
e
fdZdee         fdZde
fdZde
fdZdde
dz  de
dz  dedz  fdZde
dee         fdZd dededz  dee         fdZdee         fdZdede
defdZdedefdZde
dee         fdZde
defdZ dS )!ProductRepositoryreturnc                     t           j                            ddd                              d                              t          d                    S )N   Опубликовано)statusproduct__statustypes__type__statuslinksidcount)r   objectsfilterprefetch_relatedannotater   selfs    O/var/www/html/cms/infrastructure/persistence/repositories/product_repository.py__get_offers_queryz$ProductRepository.__get_offers_query   sS    M  1C]  tN !   g&&XE$KKX((	
    c           	          t           j                            t          dt	          dd                                                  dd          S )Nproductsr   ) products__offer__product__statusproducts__offer__statusr   r      )r   
count__gte)r   r   r!   r   r   r   r"   s    r$   __get_published_types_queryz-ProductRepository.__get_published_types_query"   sk    "++:T  oI  J  J  J   , 
 

 &2q&
A
A	Br&   product_type_slugc                     |                                                      d                              dd                              |                              d          S )Ncatalog_productproduct__categoryproduct__organization)types__type__slugcatalog_product__my_order)$_ProductRepository__get_offers_queryr    select_relatedr   order_by)r#   r/   s     r$   __get_catalog_offers_queryz,ProductRepository.__get_catalog_offers_query*   sT    ##%%/00^/1HIIV&7V88X122	
r&   user_idorganization_idc                 ,   t           j                            dd                              dd                              t          |          t          d          z                                dd	          }|r|                    |
          }|S )Ncategoryorganizationuser_productsoffers)user_products__user_idF)user_products__deletedr   )r   offers__status)r;   )r   r   r7   r    excluder   r   )r#   r:   r;   r(   s       r$   get_enabled_products_to_createz0ProductRepository.get_enabled_products_to_create3   s    O**:~FFox88WQg666RW9X9X9XXYYV5F`Vaa	 	  	HGGHr&   c           
      R   t           j                            t          dt	          d                    t          dt	          |          t	          d          z                                          d	d
                              dd                              d	          S )Nr(   r   )products__statusr+    products__user_products__user_idF) products__user_products__deleted)r   user_products_countnamer   r,   r   )r-   user_products_count__lte)r   r   r!   r   r   valuesr   r8   r#   r:   s     r$   get_enabled_organizationsz+ProductRepository.get_enabled_organizations@   s     ))JqB\/]/]/]^^^$)gFFFlqIrIrIrr% % % *   VFD!!Vq1V==Xf	
r&   type_idc                     |                                                      d                              |                              d          S )Nproduct)types__type_idproduct__organization__name)r6   r7   r   r8   )r#   rQ   s     r$   get_published_offersz&ProductRepository.get_published_offersN   s@    ##%%^I&&V7V++X344		
r&   c                 *    |                                  S N)-_ProductRepository__get_published_types_queryr"   s    r$   get_published_typesz%ProductRepository.get_published_typesV   s    //111r&   block_idc                 x    |                                                      |                              d          S )N)catalog_product_types__blockcatalog_product_types__my_orderrY   r   r8   r#   r[   s     r$   get_product_types_for_catalogz/ProductRepository.get_product_types_for_catalogY   s3    ,,..VV::X788	
r&   c                 x    |                                                      |                              d          S )N)*additional_catalog_product_types__block_id*additional_catalog_product_types__my_orderr_   r`   s     r$   (get_proudct_types_for_additional_catalogz:ProductRepository.get_proudct_types_for_additional_catalog`   s3    ,,..VxVHHXBCC	
r&   Nr   user_product_idc                     t                      }|r|t          |          z  }n|r|t          |          z  }	 t          j                            |          S # t          j        $ r Y d S w xY w)Nr   )user_products__id)r   r   r   getDoesNotExist)r#   r   rf   querys       r$   rj   zProductRepository.getg   s     	:Q"XXXEE 	:Q9999E	?&&u---# 	 	 	44	s   A A-,A-
product_idc                 B    t           j                            |          S )N)rm   )r   r   r   r#   rm   s     r$   get_product_offersz$ProductRepository.get_product_offerss   s    }##z#:::r&   privatec                 `    |                      |          }||                    |          }|S )N)product__private),_ProductRepository__get_catalog_offers_queryr   )r#   r/   rq   rl   s       r$   get_catalog_offersz$ProductRepository.get_catalog_offersv   s4    //0ABBLL'L::Er&   c                 *    |                                  S rX   )r6   r"   s    r$   
get_offerszProductRepository.get_offers}   s    &&(((r&   product_indexc                 L    |                      |          |         j        j        S rX   )rt   rS   rL   )r#   r/   rx   s      r$   get_product_name_from_catalogz/ProductRepository.get_product_name_from_catalog   s"    ../@AA-PX]]r&   slugc                 t    t           j                            d                              |          d         S )NrL   )r{   )r   r   rN   rj   )r#   r{   s     r$   get_product_type_namez'ProductRepository.get_product_type_name   s/    "))&115545@@HHr&   c                     t           j                            t          dt	          |                                                  d          S )Nr(   rH   r+   r   r,   )r-   )r   r   r!   r   r   r   rO   s     r$   get_product_categoriesz(ProductRepository.get_product_categories   sL    &//
1g+V+V+VWWW 0 
 

&A&

	r&   c                     t           j                            d                              dd                              |          S )Nr>   partner_descriptionorganization__partner_programrh   )r   r   r7   rN   rj   ro   s     r$   get_product_for_popupz'ProductRepository.get_product_for_popup   s:    O**>::V)+JKKSJS	
r&   )NNrX   )!__name__
__module____qualname__r   r   r6   r   rY   strrt   intr   r
   rE   dictr   rP   rV   r   rZ   ra   re   rj   r   rp   boolru   rw   rz   r}   r	   r   r    r&   r$   r   r      s       
HUO 
 
 
 
BXk-B B B B B
C 
HUO 
 
 
 
c C T\]mTn    
 
c3h 
 
 
 

C 
 
 
 
2X.B%C 2 2 2 2
c 
 
 
 

 
 
 
 

 
cDj 
#* 
P`cgPg 
 
 
 
;S ;Xn5M ; ; ; ; C $+ YabpYq    )H^4 ) ) ) )^s ^SV ^[^ ^ ^ ^ ^I# I# I I I Ic h?W6X    

 
8H 
 
 
 
 
 
r&   r   r   c                      t                      S rX   )r   r   r&   r$   get_product_repositoryr      s    r&   N)collections.abcr   typingr   django.db.modelsr   r   r   domain.products.productr   r	   r
   r   domain.products.repositoryr   6infrastructure.persistence.models.catalog.product_typer   r   2infrastructure.persistence.models.catalog.productsr   r   r   r   r   r   r&   r$   <module>r      sL   $ $ $ $ $ $       / / / / / / / / / /            B A A A A A                x
 x
 x
 x
 x
2 x
 x
 x
v :      r&   