def matches(self, basket, lines): product_id_to_qty = get_product_ids_and_quantities(basket) product_ids = self.products.filter(id__in=product_id_to_qty.keys()).values_list("id", flat=True) for product_id in product_ids: if self.operator == ComparisonOperator.GTE: return product_id_to_qty[product_id] >= self.quantity elif self.operator == ComparisonOperator.EQUALS: return product_id_to_qty[product_id] == self.quantity return False
def matches(self, basket, lines): product_id_to_qty = get_product_ids_and_quantities(basket) category_product_ids = self.category.shop_products.filter(product_id__in=product_id_to_qty.keys()).values_list( "product_id", flat=True ) product_count = sum(product_id_to_qty[product_id] for product_id in category_product_ids) if self.operator == ComparisonOperator.EQUALS: return bool(product_count == self.quantity) else: return bool(product_count >= self.quantity)
def matches(self, basket, lines): campaign = self.campaign.first() supplier = campaign.supplier if hasattr(campaign, "supplier") and campaign.supplier else None product_id_to_qty = get_product_ids_and_quantities(basket, supplier) product_ids = self.products.filter(id__in=product_id_to_qty.keys()).values_list("id", flat=True) for product_id in product_ids: if self.operator == ComparisonOperator.GTE: return product_id_to_qty[product_id] >= self.quantity elif self.operator == ComparisonOperator.EQUALS: return product_id_to_qty[product_id] == self.quantity return False
def matches(self, basket, lines): product_id_to_qty = get_product_ids_and_quantities(basket) category_product_ids = self.category.shop_products.filter( product_id__in=product_id_to_qty.keys()).values_list("product_id", flat=True) product_count = sum(product_id_to_qty[product_id] for product_id in category_product_ids) if self.operator == ComparisonOperator.EQUALS: return bool(product_count == self.quantity) else: return bool(product_count >= self.quantity)
def matches(self, basket, lines): campaign = self.campaign.first() supplier = campaign.supplier if hasattr( campaign, "supplier") and campaign.supplier else None product_id_to_qty = get_product_ids_and_quantities(basket, supplier) product_ids = self.products.filter( id__in=product_id_to_qty.keys()).values_list("id", flat=True) for product_id in product_ids: if self.operator == ComparisonOperator.GTE: return product_id_to_qty[product_id] >= self.quantity elif self.operator == ComparisonOperator.EQUALS: return product_id_to_qty[product_id] == self.quantity return False
def matches(self, basket, lines): product_id_to_qty = get_product_ids_and_quantities(basket) if ShopProduct.objects.filter( product_id__in=product_id_to_qty.keys(), categories__in=self.excluded_categories.all()).exists(): return False product_ids = ShopProduct.objects.filter( categories__in=self.categories.all(), product_id__in=product_id_to_qty.keys() ).values_list("product_id", flat=True) product_count = sum(product_id_to_qty[product_id] for product_id in product_ids) if self.operator == ComparisonOperator.EQUALS: return bool(product_count == self.quantity) else: return bool(product_count >= self.quantity)
def get_matching(cls, basket, lines): matching = [] exclude_condition_ids = set() product_id_to_qty = get_product_ids_and_quantities(basket) lines_suppliers = get_lines_suppliers(basket) # Get ProductsInBasketCondition's that can't match with the basket products_in_basket_conditions_to_check = set( ProductsInBasketCondition.objects.filter( products__id__in=product_id_to_qty.keys() ).values_list("id", flat=True) ) exclude_condition_ids |= set( ProductsInBasketCondition.objects.exclude( id__in=products_in_basket_conditions_to_check ).values_list("id", flat=True) ) # Get CategoryProductsBasketCondition's that can't match with the basket categories = set(Category.objects.filter( shop_products__product_id__in=product_id_to_qty.keys()).values_list("id", flat=True)) category_products_in_basket_to_check = set( CategoryProductsBasketCondition.objects.filter(categories__in=categories).values_list("id", flat=True) ) exclude_condition_ids |= set( CategoryProductsBasketCondition.objects.exclude( id__in=category_products_in_basket_to_check ).values_list("id", flat=True) ) queryset = cls.objects.filter(active=True, shop=basket.shop) if exclude_condition_ids: queryset = queryset.exclude(conditions__id__in=exclude_condition_ids) # exclude the campaigns that have supplier set and are not included the supplier list if lines_suppliers: queryset = queryset.filter( Q(supplier__isnull=True) | Q(supplier__in=lines_suppliers) ) for campaign in queryset.prefetch_related("conditions").distinct(): if campaign.rules_match(basket, lines): matching.append(campaign) return matching
def get_matching(cls, basket, lines): matching = [] exclude_condition_ids = set() product_id_to_qty = get_product_ids_and_quantities(basket) # Get ProductsInBasketCondition's that can't match with the basket products_in_basket_conditions_to_check = set( ProductsInBasketCondition.objects.filter( products__id__in=product_id_to_qty.keys() ).values_list("id", flat=True) ) exclude_condition_ids |= set( ProductsInBasketCondition.objects.exclude( id__in=products_in_basket_conditions_to_check ).values_list("id", flat=True) ) # Get CategoryProductsBasketCondition's that can't match with the basket categories = set(Category.objects.filter( shop_products__product_id__in=product_id_to_qty.keys()).values_list("id", flat=True)) category_products_in_basket_to_check = set( CategoryProductsBasketCondition.objects.filter(categories__in=categories).values_list("id", flat=True) ) exclude_condition_ids |= set( CategoryProductsBasketCondition.objects.exclude( id__in=category_products_in_basket_to_check ).values_list("id", flat=True) ) queryset = cls.objects.filter(active=True, shop=basket.shop) if exclude_condition_ids: queryset = queryset.exclude(conditions__id__in=exclude_condition_ids) for campaign in queryset.prefetch_related("conditions"): if campaign.rules_match(basket, lines): matching.append(campaign) return matching
def get_matching(cls, basket, lines): matching = [] exclude_condition_ids = set() product_id_to_qty = get_product_ids_and_quantities(basket) # Get ProductsInBasketCondition's that can't match with the basket products_in_basket_conditions_to_check = set( ProductsInBasketCondition.objects.filter( products__id__in=product_id_to_qty.keys() ).values_list("id", flat=True) ) exclude_condition_ids |= set( ProductsInBasketCondition.objects.exclude( id__in=products_in_basket_conditions_to_check ).values_list("id", flat=True) ) # Get CategoryProductsBasketCondition's that can't match with the basket category_products_in_basket_to_check = set( CategoryProductsBasketCondition.objects.filter( category__shop_products__product_id__in=product_id_to_qty.keys() ).values_list("id", flat=True) ) exclude_condition_ids |= set( CategoryProductsBasketCondition.objects.exclude( id__in=category_products_in_basket_to_check ).values_list("id", flat=True) ) queryset = cls.objects.filter(active=True, shop=basket.shop) if exclude_condition_ids: queryset = queryset.exclude(conditions__id__in=exclude_condition_ids) for campaign in queryset.prefetch_related("conditions"): if campaign.rules_match(basket, lines): matching.append(campaign) return matching