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
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
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
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})
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
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}})
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)