Example #1
0
    def setUp(self):
        """
        """
        self.client.login(username="******", password="******")

        for i in range(0, 10):
            product = Product(name="Product %s" % i,
                              slug="product-%s" % i,
                              description="This is the description %s" % i,
                              price=i)
            product.save()

        c1 = Category(name="Category 1", slug="category-1")
        c1.save()

        c11 = Category(name="Category 1-1", slug="category-1-1", parent=c1)
        c11.save()

        c111 = Category(name="Category 1-1-1",
                        slug="category-1-1-1",
                        parent=c11)
        c111.save()

        # Assign products
        product = Product.objects.get(slug="product-1")
        c111.products = (product, )
Example #2
0
    def setUp(self):
        """
        """
        self.client.login(username="******", password="******")

        for i in range(0, 10):
            product = Product(
                name="Product %s" % i, slug="product-%s" % i, description="This is the description %s" % i, price=i
            )
            product.save()

        c1 = Category(name="Category 1", slug="category-1")
        c1.save()

        c11 = Category(name="Category 1-1", slug="category-1-1", parent=c1)
        c11.save()

        c111 = Category(name="Category 1-1-1", slug="category-1-1-1", parent=c11)
        c111.save()

        # Assign products
        product = Product.objects.get(slug="product-1")
        c111.products = (product,)
Example #3
0
def products(amount=20):
    """
    """
    import muecke.core.utils
    from muecke.catalog.models import Category
    from muecke.catalog.models import Image
    from muecke.catalog.models import Product
    from muecke.core.models import Shop

    from muecke.catalog.models import Property
    from muecke.catalog.models import PropertyOption

    from muecke.shipping.models import ShippingMethod
    from muecke.criteria.models import CartPriceCriterion

    Image.objects.all().delete()
    Product.objects.all().delete()
    Category.objects.all().delete()
    PropertyOption.objects.all().delete()
    Property.objects.all().delete()

    # Images
    path = os.path.join(os.getcwd(), "parts/muecke/muecke/utils/data")
    fh = open(os.path.join(path, "image1.jpg"))
    cf_1 = ContentFile(fh.read())
    fh = open(os.path.join(path, "image2.jpg"))
    cf_2 = ContentFile(fh.read())
    fh = open(os.path.join(path, "image3.jpg"))
    cf_3 = ContentFile(fh.read())

    image_1 = Image(title="Image 1")
    image_1.image.save("Laminat01.jpg", cf_1)
    image_1.save()

    image_2 = Image(title="Image 2")
    image_2.image.save("Laminat02.jpg", cf_2)
    image_2.save()

    image_3 = Image(title="Image 3")
    image_3.image.save("Laminat03.jpg", cf_3)
    image_3.save()

    # Properties
    property = Property(name="Color")
    property.save()

    property_option = PropertyOption(name="Yellow",
                                     property=property,
                                     price=1.0)
    property_option.save()

    property_option = PropertyOption(name="Red", property=property, price=2.0)
    property_option.save()

    property = Property(name="Size")
    property.save()

    property_option = PropertyOption(name="L", property=property, price=11.0)
    property_option.save()

    property_option = PropertyOption(name="M", property=property, price=12.0)
    property_option.save()

    shop = muecke.core.utils.get_default_shop()

    # Create categories
    category_1 = Category(name="Clothes", slug="clothes")
    category_1.save()

    category_2 = Category(name="Women", slug="women", parent=category_1)
    category_2.save()

    category_3 = Category(name="Pants", slug="pants-woman", parent=category_2)
    category_3.save()

    category_4 = Category(name="Dresses", slug="dresses", parent=category_2)
    category_4.save()

    category_5 = Category(name="Men", slug="men", parent=category_1)
    category_5.save()

    category_6 = Category(name="Pants", slug="pants-men", parent=category_5)
    category_6.save()

    category_7 = Category(name="Pullover", slug="pullover", parent=category_5)
    category_7.save()

    shop.categories = [
        category_1, category_2, category_3, category_4, category_5, category_6,
        category_7
    ]
    shop.save()

    # Create products
    for i in range(1, amount):
        p = Product(name="Rock-%s" % i,
                    slug="rock-%s" % i,
                    sku="rock-000%s" % i,
                    price=i * 10)
        p.save()

        if i == 1:
            p.images.add(image_1)
            p.images.add(image_2)
            p.images.add(image_3)
            p.save()
        else:
            img = Image(title="Image 1", image="images/Laminat01.jpg")
            img.save()
            p.images.add(img)
            p.save()

        category_3.products.add(p)
        category_3.save()

        print "Rock-%s created" % i

    for i in range(1, amount):
        p = Product(name="Hemd-%s" % i,
                    slug="hemd-%s" % i,
                    sku="hemd-000%s" % i,
                    price=i * 10,
                    active=True)
        p.save()

        img = Image(title="Image 1", image="images/Laminat02.jpg")
        img.save()
        p.images.add(img)
        p.save()

        category_4.products.add(p)
        category_4.save()

        print "Hemd-%s created" % i

    for i in range(1, amount):
        p = Product(name="Pullover-%s" % i,
                    slug="pullover-%s" % i,
                    sku="pullover-000%s" % i,
                    price=i * 10,
                    active=True)
        p.save()

        img = Image(title="Image 1", image="images/Laminat03.jpg")
        img.save()
        p.images.add(img)
        p.save()

        category_6.products.add(p)
        category_6.save()

        print "Pullover-%s created" % i

    for i in range(1, amount):
        p = Product(name="Hose-%s" % i,
                    slug="hose-%s" % i,
                    sku="hose-000%s" % i,
                    price=i * 10,
                    active=True)
        p.save()

        img = Image(title="Image 1", image="images/Laminat03.jpg")
        img.save()
        p.images.add(img)
        p.save()

        category_7.products.add(p)
        category_7.save()

        print "Hose-%s created" % i
Example #4
0
def add_variants(request, product_id):
    """Adds variants to product with passed product_id based on property/option-
    combinations passed within request body.
    """
    cache.delete("%s-variants%s" % (settings.CACHE_MIDDLEWARE_KEY_PREFIX, product_id))

    product = Product.objects.get(pk=product_id)

    # Add variant(s)
    #variant_simple_form = ProductVariantSimpleForm(data=request.POST)

    # We don't have to check whether the form is valid. If the fields
    # are empty we create default ones.

    variants_count = product.variants.count()

    # First we need to prepare the requested properties for the use
    # with cartesian product. That means if the keyword "all" is
    # found we collect all options of this properties.
    properties = []
    for key, value in request.POST.items():
        if key.startswith("property"):
            property_id = key.split("_")[1]
            if value == "all":
                temp = []
                for option in PropertyOption.objects.filter(property=property_id):
                    temp.append("%s|%s" % (property_id, option.id))
                properties.append(temp)
            else:
                properties.append(["%s|%s" % (property_id, value)])

    # Create a variant for every requested option combination
    for i, options in enumerate(manage_utils.cartesian_product(*properties)):

        if product.has_variant(options):
            continue

        name = request.POST.get("name")
        price = request.POST.get("price")
        slug = request.POST.get("slug")

        for option in options:
            property_id, option_id = option.split("|")
            o = PropertyOption.objects.get(pk=option_id)
            if slug:
                slug += "-"
            slug += slugify(o.name)

        slug = "%s-%s" % (product.slug, slug)
        sku = "%s-%s" % (product.sku, i + 1)

        variant = None
        # need to validate the amalgamated slug to make sure it is not already in use
        try:
            variant = Product.objects.get(slug=slug)
            message = _(u"That slug is already in use. Please use another.")
        except Product.MultipleObjectsReturned:
            message = _(u"That slug is already in use. Please use another.")
        except Product.DoesNotExist:
            variant = Product(name=name, slug=slug, sku=sku, parent=product, price=price,
                              variant_position=(variants_count + i + 1) * 10, sub_type=VARIANT)
            try:
                variant.save()
            except IntegrityError:
                continue
            else:
                # By default we copy the property groups of the product to
                # the variants
                for property_group in product.property_groups.all():
                    variant.property_groups.add(property_group)

            # Save the value for this product and property.
            for option in options:
                property_id, option_id = option.split("|")
                ProductPropertyValue.objects.create(product=variant, property_id=property_id, value=option_id, type=PROPERTY_VALUE_TYPE_VARIANT)
                # By default we create also the filter values as this most of
                # the users would excepct.
                if Property.objects.get(pk=property_id).filterable:
                    ProductPropertyValue.objects.create(product=variant, property_id=property_id, value=option_id, type=PROPERTY_VALUE_TYPE_FILTER)

            message = _(u"Variants have been added.")

    html = (
        ("#selectable-products-inline", _selectable_products_inline(request, product)),
        ("#variants", manage_variants(request, product_id, as_string=True)),
    )

    result = simplejson.dumps({
        "html": html,
        "message": message,
    }, cls=LazyEncoder)

    return HttpResponse(result)
Example #5
0
def add_variants(request, product_id):
    """Adds variants to product with passed product_id based on property/option-
    combinations passed within request body.
    """
    cache.delete("%s-variants%s" %
                 (settings.CACHE_MIDDLEWARE_KEY_PREFIX, product_id))

    product = Product.objects.get(pk=product_id)

    # Add variant(s)
    #variant_simple_form = ProductVariantSimpleForm(data=request.POST)

    # We don't have to check whether the form is valid. If the fields
    # are empty we create default ones.

    variants_count = product.variants.count()

    # First we need to prepare the requested properties for the use
    # with cartesian product. That means if the keyword "all" is
    # found we collect all options of this properties.
    properties = []
    for key, value in request.POST.items():
        if key.startswith("property"):
            property_id = key.split("_")[1]
            if value == "all":
                temp = []
                for option in PropertyOption.objects.filter(
                        property=property_id):
                    temp.append("%s|%s" % (property_id, option.id))
                properties.append(temp)
            else:
                properties.append(["%s|%s" % (property_id, value)])

    # Create a variant for every requested option combination
    for i, options in enumerate(manage_utils.cartesian_product(*properties)):

        if product.has_variant(options):
            continue

        name = request.POST.get("name")
        price = request.POST.get("price")
        slug = request.POST.get("slug")

        for option in options:
            property_id, option_id = option.split("|")
            o = PropertyOption.objects.get(pk=option_id)
            if slug:
                slug += "-"
            slug += slugify(o.name)

        slug = "%s-%s" % (product.slug, slug)
        sku = "%s-%s" % (product.sku, i + 1)

        variant = None
        # need to validate the amalgamated slug to make sure it is not already in use
        try:
            variant = Product.objects.get(slug=slug)
            message = _(u"That slug is already in use. Please use another.")
        except Product.MultipleObjectsReturned:
            message = _(u"That slug is already in use. Please use another.")
        except Product.DoesNotExist:
            variant = Product(name=name,
                              slug=slug,
                              sku=sku,
                              parent=product,
                              price=price,
                              variant_position=(variants_count + i + 1) * 10,
                              sub_type=VARIANT)
            try:
                variant.save()
            except IntegrityError:
                continue
            else:
                # By default we copy the property groups of the product to
                # the variants
                for property_group in product.property_groups.all():
                    variant.property_groups.add(property_group)

            # Save the value for this product and property.
            for option in options:
                property_id, option_id = option.split("|")
                ProductPropertyValue.objects.create(
                    product=variant,
                    property_id=property_id,
                    value=option_id,
                    type=PROPERTY_VALUE_TYPE_VARIANT)
                # By default we create also the filter values as this most of
                # the users would excepct.
                if Property.objects.get(pk=property_id).filterable:
                    ProductPropertyValue.objects.create(
                        product=variant,
                        property_id=property_id,
                        value=option_id,
                        type=PROPERTY_VALUE_TYPE_FILTER)

            message = _(u"Variants have been added.")

    html = (
        ("#selectable-products-inline",
         _selectable_products_inline(request, product)),
        ("#variants", manage_variants(request, product_id, as_string=True)),
    )

    result = simplejson.dumps({
        "html": html,
        "message": message,
    },
                              cls=LazyEncoder)

    return HttpResponse(result)