Changeset - 760996588372
[Not reviewed]
0 7 0
Christopher Neugebauer - 8 years ago 2016-04-03 03:21:57
chrisjrn@gmail.com
flake8 compliance
7 files changed with 9 insertions and 19 deletions:
0 comments (0 inline, 0 general)
registrasion/controllers/cart.py
Show inline comments
...
 
@@ -3,13 +3,13 @@ import datetime
 
import discount
 
import itertools
 

	
 
from django.core.exceptions import ObjectDoesNotExist
 
from django.core.exceptions import ValidationError
 
from django.db import transaction
 
from django.db.models import Max, Sum
 
from django.db.models import Max
 
from django.utils import timezone
 

	
 
from registrasion import models as rego
 

	
 
from category import CategoryController
 
from conditions import ConditionController
...
 
@@ -68,13 +68,12 @@ class CartController(object):
 
        self.recalculate_discounts()
 

	
 
        self.extend_reservation()
 
        self.cart.revision += 1
 
        self.cart.save()
 

	
 

	
 
    @transaction.atomic
 
    def set_quantities(self, product_quantities):
 
        ''' Sets the quantities on each of the products on each of the
 
        products specified. Raises an exception (ValidationError) if a limit
 
        is violated. `product_quantities` is an iterable of (product, quantity)
 
        pairs. '''
...
 
@@ -191,14 +190,12 @@ class CartController(object):
 
        self.end_batch()
 

	
 
    def validate_cart(self):
 
        ''' Determines whether the status of the current cart is valid;
 
        this is normally called before generating or paying an invoice '''
 

	
 
        is_reserved = self.cart in rego.Cart.reserved_carts()
 

	
 
        # TODO: validate vouchers
 

	
 
        items = rego.ProductItem.objects.filter(cart=self.cart)
 

	
 
        product_quantities = list((i.product, i.quantity) for i in items)
 
        self._test_limits(product_quantities)
registrasion/controllers/category.py
Show inline comments
...
 
@@ -50,13 +50,7 @@ class CategoryController(object):
 
        items = rego.ProductItem.objects.filter(
 
            cart__in=carts,
 
            product__category=self.category,
 
        )
 

	
 
        cat_count = items.aggregate(Sum("quantity"))["quantity__sum"] or 0
 
        
 
        cat_limit = self.category.limit_per_user
 

	
 
        if cat_limit is None:
 
            return 999999  # We should probably work on this.
 
        else:
 
            return cat_limit - cat_count
 
        cat_limit - cat_count
registrasion/controllers/conditions.py
Show inline comments
 
import itertools
 

	
 
from collections import defaultdict
 
from collections import namedtuple
 

	
 
from django.db.models import Q
 
from django.db.models import Sum
 
from django.utils import timezone
 

	
 
from registrasion import models as rego
 

	
 

	
...
 
@@ -61,14 +60,14 @@ class ConditionController(object):
 

	
 
        if products is not None and product_quantities is not None:
 
            raise ValueError("Please specify only products or "
 
                             "product_quantities")
 
        elif products is None:
 
            products = set(i[0] for i in product_quantities)
 
            quantities = dict( (product, quantity)
 
                for product, quantity in product_quantities )
 
            quantities = dict((product, quantity)
 
                              for product, quantity in product_quantities)
 
        elif product_quantities is None:
 
            products = set(products)
 
            quantities = {}
 

	
 
        # Get the conditions covered by the products themselves
 
        all_conditions = [
...
 
@@ -81,13 +80,12 @@ class ConditionController(object):
 
        # All mandatory conditions on a product need to be met
 
        mandatory = defaultdict(lambda: True)
 
        # At least one non-mandatory condition on a product must be met
 
        # if there are no mandatory conditions
 
        non_mandatory = defaultdict(lambda: False)
 

	
 
        remainders = []
 
        for condition in all_conditions:
 
            cond = cls.for_condition(condition)
 
            remainder = cond.user_quantity_remaining(user)
 

	
 
            # Get all products covered by this condition, and the products
 
            # from the categories covered by this condition
...
 
@@ -230,12 +228,13 @@ class TimeOrStockLimitConditionController(ConditionController):
 
        items = self._items()
 
        items = items.filter(cart__in=reserved_carts)
 
        count = items.aggregate(Sum("quantity"))["quantity__sum"] or 0
 

	
 
        return self.ceiling.limit - count
 

	
 

	
 
class TimeOrStockLimitEnablingConditionController(
 
        TimeOrStockLimitConditionController):
 

	
 
    def _items(self):
 
        category_products = rego.Product.objects.filter(
 
            category__in=self.ceiling.categories.all(),
registrasion/controllers/product.py
Show inline comments
 
import itertools
 

	
 
from django.db.models import Q
 
from django.db.models import Sum
 
from registrasion import models as rego
 

	
 
from category import CategoryController
 
from conditions import ConditionController
 

	
...
 
@@ -30,13 +29,15 @@ class ProductController(object):
 
        if products is not None:
 
            all_products = itertools.chain(all_products, products)
 

	
 
        passed_limits = set(
 
            product
 
            for product in all_products
 
            if CategoryController(product.category).user_quantity_remaining(user) > 0
 
            if CategoryController(product.category).user_quantity_remaining(
 
                user
 
            ) > 0
 
            if cls(product).user_quantity_remaining(user) > 0
 
        )
 

	
 
        failed_conditions = set(ConditionController.test_enabling_conditions(
 
            user, products=passed_limits
 
        ))
registrasion/tests/cart_controller_helper.py
Show inline comments
 
from registrasion.controllers.cart import CartController
 
from registrasion import models as rego
 

	
 
from django.core.exceptions import ObjectDoesNotExist
 

	
 

	
 
class TestingCartController(CartController):
 

	
 
    def set_quantity(self, product, quantity, batched=False):
 
        ''' Sets the _quantity_ of the given _product_ in the cart to the given
 
        _quantity_. '''
 

	
registrasion/tests/test_cart.py
Show inline comments
...
 
@@ -123,13 +123,12 @@ class RegistrationCartTestCase(SetTimeMixin, TestCase):
 
            discount=limit_ceiling,
 
            product=cls.PROD_1,
 
            percentage=percentage,
 
            quantity=10,
 
        ).save()
 

	
 

	
 
    @classmethod
 
    def new_voucher(self, code="VOUCHER", limit=1):
 
        voucher = rego.Voucher.objects.create(
 
            recipient="Voucher recipient",
 
            code=code,
 
            limit=limit,
registrasion/views.py
Show inline comments
...
 
@@ -11,13 +11,12 @@ from collections import namedtuple
 

	
 
from django.conf import settings
 
from django.contrib.auth.decorators import login_required
 
from django.contrib import messages
 
from django.core.exceptions import ObjectDoesNotExist
 
from django.core.exceptions import ValidationError
 
from django.db import transaction
 
from django.http import Http404
 
from django.shortcuts import redirect
 
from django.shortcuts import render
 

	
 

	
 
GuidedRegistrationSection = namedtuple(
0 comments (0 inline, 0 general)