Example #1
0
    def edit(cls, product, type=NoDefault, name=NoDefault, category_id=NoDefault, categories_ids=NoDefault,
             description=NoDefault, valid_from=NoDefault, valid_to=NoDefault, **details):

        if product.active == False:
            raise InactiveProductException('Cannot edit an inactive product')

        if type is not NoDefault:
            product.type = type

        if name is not NoDefault:
            for k, v in i_(name).iteritems():
                setattr(product.name, k, v)

        if category_id is not NoDefault:
            product.category_id = ObjectId(category_id)

        if categories_ids is not NoDefault:
            product.categories_ids = categories_ids

        if description is not NoDefault:
            for k, v in i_(description).iteritems():
                setattr(product.description, k, v)

        if details is not {}:
            for k, v in details.iteritems():
                setattr(product.details, k, v)

        if valid_from is not NoDefault:
            product.valid_from = valid_from

        if valid_to is not NoDefault:
            product.valid_to = valid_to
Example #2
0
    def create(cls, type, sku, name, category_id=None, categories_ids=None, description='', price=1.0, rate=0.0,  #create_product
               vat=None, qty=0, initial_quantity=0, variety=None, active=True, published=False, valid_from=None,
               valid_to=None,
               configuration_details=None, **details):
        if variety is None:
            variety = name

        if configuration_details is None:
            configuration_details = {}

        if categories_ids is None:
            categories_ids = []

        slug = slugify(name, type, models)
        if models.Product.query.find({'slug': slug}).first():
            raise AlreadyExistingSlugException('Already exist a Product with slug: %s' % slug)

        if models.Product.query.find({'configurations.sku': sku}).first():
            raise AlreadyExistingSkuException('Already exist a Configuration with sku: %s' % sku)

        if vat is None:
            vat = apply_vat(price, rate)

        product = models.Product(type=type,
                                 name=i_(name),
                                 category_id=ObjectId(category_id) if category_id else None,
                                 categories_ids=categories_ids,
                                 description=i_(description),
                                 slug=slug,
                                 details=details,
                                 active=active,
                                 published=published,
                                 valid_from=valid_from,
                                 valid_to=valid_to,
                                 configurations=[{'sku': sku,
                                                  'variety': i_(variety),
                                                  'price': price,
                                                  'rate': rate,
                                                  'vat': vat,
                                                  'qty': qty,
                                                  'initial_quantity': initial_quantity,
                                                  'details': configuration_details}])
        models.DBSession.flush()
        return product
Example #3
0
 def create(cls, name, parent=None): #create_category
     slug = slugify_category(name, models)
     ancestors = []
     parent_id = None
     if parent is not None:
         ancestors = [ancestor for ancestor in parent.ancestors]
         ancestors.append(dict(_id=parent._id, name=parent.name, slug=parent.slug))
         parent_id = parent._id
     category = models.Category(name=i_(name), slug=slug, parent=parent_id, ancestors=ancestors)
     models.DBSession.flush()
     return category
Example #4
0
    def create_configuration(cls, product, sku, price=1.0, rate=0.0, vat=None,
                             qty=0, initial_quantity=0, variety=None,
                             **configuration_details):

        if models.Product.query.find({'configurations.sku': sku}).first():
            raise AlreadyExistingSkuException('Already exist a Configuration with sku: %s' % sku)

        if vat is None:
            vat = apply_vat(price, rate)

        product.configurations.append({'sku': sku,
                                       'variety': i_(variety),
                                       'price': price,
                                       'rate': rate,
                                       'vat': vat,
                                       'qty': qty,
                                       'initial_quantity': initial_quantity,
                                       'details': configuration_details})
Example #5
0
 def create(cls, name, parent=None, **details):  # create_category
     if 'slug' not in details or details['slug'] == '':
         slug = slugify_category(name, models)
     else:
         slug = slugify_category(details['slug'], models)
     ancestors = []
     parent_id = None
     if parent is not None:
         ancestors = [ancestor for ancestor in parent.ancestors]
         ancestors.append(dict(_id=parent._id, details=parent.details, name=parent.name, slug=parent.slug))
         parent_id = parent._id
     category = models.Category(
         name=i_(name),
         slug=slug,
         parent=parent_id,
         details=details,
         ancestors=ancestors)
     models.DBSession.flush()
     return category
Example #6
0
    def edit(cls, _id, name, parent):
        slug = slugify_category(name, models)
        ancestors = []
        parent_id = None
        if parent is not None:
            ancestors = [ancestor for ancestor in parent.ancestors]
            ancestors.append(dict(_id=parent._id, name=parent.name, slug=parent.slug))
            parent_id = parent._id
        models.Category.query.update({'_id': ObjectId(_id)},
                                     {'$set': {'name': i_(name),
                                               'slug': slug,
                                               'parent': parent_id,
                                               'ancestors': ancestors}})

        for cat in models.Category.query.find({'ancestors._id': ObjectId(_id)}):
            parent = models.Category.query.find({'_id': cat.parent}).first()
            if parent:
                ancestors = [ancestor for ancestor in parent.ancestors]
                ancestors.append(dict(_id=parent._id, name=parent.name, slug=parent.slug))
                models.Category.query.update({'_id':cat._id}, {'$set': {'ancestors': ancestors}})
Example #7
0
    def edit_configuration(cls, product, configuration_index, sku=NoDefault, variety=NoDefault,
                           price=NoDefault, rate=NoDefault, vat=NoDefault, qty=NoDefault,
                           initial_quantity=NoDefault, configuration_details=NoDefault):

        if sku is not NoDefault:
            product.configurations[configuration_index].sku = sku
        if variety is not NoDefault:
            for k, v in i_(variety).iteritems():
                setattr(product.configurations[configuration_index].variety, k, v)
        if price is not NoDefault:
            product.configurations[configuration_index].price = price
        if rate is not NoDefault:
            product.configurations[configuration_index].rate = rate
        if vat is not NoDefault:
            product.configurations[configuration_index].vat = vat
        if qty is not NoDefault:
            product.configurations[configuration_index].qty = qty
        if initial_quantity is not NoDefault:
            product.configurations[configuration_index].initial_quantity = initial_quantity
        if configuration_details is not NoDefault:
            for k, v in configuration_details.iteritems():
                setattr(product.configurations[configuration_index].details, k, v)