def _get_dynamic_catalog_values(self): values = {} dynamic_schema = self.get_dynamic_schema() for key, datatype in get_product_filters().items(): register_key = 'DFT-%s' % key if key in dynamic_schema: value = self.get_dynamic_property(key, dynamic_schema) if value and getattr(datatype, 'is_range', False): value = int(value * 100) if value: values[register_key] = value # Dynamic indexation register_fields = get_register_fields() model = self.get_product_model() if model is None: return {} for key, datatype in self.get_dynamic_schema().items(): # We index dynamic properties that correspond to # an EnumerateTable datatype. # So we are able to know if enumerate value is used or not if issubclass(datatype, EnumerateTable_to_Enumerate) is True: register_key = 'DFT-%s' % datatype.enumerate_name if register_key not in register_fields: register_field(register_key, String(is_indexed=True)) if datatype.multiple is True: values[register_key] = ' '.join(self.get_property(key)) else: values[register_key] = self.get_property(key) return values
def register_dynamic_fields(context): root = context.root if not context.database.catalog: print '===========================' print '= You have to index twice =' print '===========================' return # XXX Should not do a search since catalog can be break for brain in root.search(format='shop').get_documents(): shop = root.get_resource(brain.abspath) website = shop.parent print '===============================' print ' => Initialize catalog' print ' => %s' % website.get_title() print '===============================' # Register field for each dynamic table fields = [] for enumerate_table in website.get_resources('shop/enumerates'): register_key = 'DFT-%s' % enumerate_table.name register_field(register_key, String(is_indexed=True, multiple=True)) fields.append(register_key) dynamic_fields[website.name] = fields print '=> %s dynamic fields' % len(fields) pprint(fields)
def _get_dynamic_catalog_values(self): values = {} register_fields = get_register_fields() for key, datatype in self.get_dynamic_schema().items(): if issubclass(datatype, EnumerateTable_to_Enumerate) is True: register_key = 'DFT-DECL-%s' % datatype.enumerate_name if register_key not in register_fields: register_field(register_key, String(is_indexed=True)) if datatype.multiple is True: values[register_key] = ' '.join(self.get_property(key)) else: values[register_key] = self.get_property(key) return values
def get_quantity(self, resource, context, item): get_value = resource.handler.get_record_value name = get_value(item, "name") # On products quantity = 0 register_key = "DFT-%s" % resource.name if register_key not in get_register_fields(): register_field(register_key, String(is_indexed=True)) query = PhraseQuery(register_key, name) quantity += len(context.root.search(query)) # On declination register_key = "DFT-DECL-%s" % resource.name if register_key not in get_register_fields(): register_field(register_key, String(is_indexed=True)) query = PhraseQuery(register_key, name) quantity += len(context.root.search(query)) return quantity
def get_quantity(self, resource, context, item): get_value = resource.handler.get_record_value name = get_value(item, 'name') # On products quantity = 0 register_key = 'DFT-%s' % resource.name if register_key not in get_register_fields(): register_field(register_key, String(is_indexed=True)) query = PhraseQuery(register_key, name) quantity += len(context.root.search(query)) # On declination register_key = 'DFT-DECL-%s' % resource.name if register_key not in get_register_fields(): register_field(register_key, String(is_indexed=True)) query = PhraseQuery(register_key, name) quantity += len(context.root.search(query)) return quantity
def get_price_impact(self, prefix): if prefix is None: prefix = self.parent.get_price_prefix() return self.get_property('%simpact_on_price' % prefix) def get_weight(self): base_weight = self.parent.get_property('weight') weight_impact = self.get_property('impact-on-weight') weight_value = self.get_property('weight-impact-value') if weight_impact == 'none': return base_weight elif weight_impact == 'increase': return base_weight + weight_value elif weight_impact == 'decrease': return base_weight - weight_value def get_document_types(self): return [] register_resource_class(Declination) register_field('declination_title', Unicode(is_indexed=True, is_stored=True)) register_field('is_default', Boolean(is_indexed=True))
def get_quantity_in_stock(self): return self.get_property('stock-quantity') def get_reference(self): return self.get_property('reference') def get_price_impact(self, prefix): if prefix is None: prefix = self.parent.get_price_prefix() return self.get_property('%simpact_on_price' % prefix) def get_weight(self): base_weight = self.parent.get_property('weight') weight_impact = self.get_property('impact-on-weight') weight_value = self.get_property('weight-impact-value') if weight_impact == 'none': return base_weight elif weight_impact == 'increase': return base_weight + weight_value elif weight_impact == 'decrease': return base_weight - weight_value def get_document_types(self): return [] register_resource_class(Declination) register_field('declination_title', Unicode(is_indexed=True, is_stored=True)) register_field('is_default', Boolean(is_indexed=True))
kw = {'value': value, 'real_value': real_value} for key in ['name', 'title', 'multiple', 'visible']: kw[key] = get_value(record, key) # Add to namespace namespace['specific_dict'][name] = kw namespace['specific_list_complete'].append(kw) if kw['visible'] and kw['value']: namespace['specific_list'].append(kw) return namespace class ProductModels(ShopFolder): class_id = 'product-models' class_title = MSG(u'Product Models') class_views = ['browse_content', 'new_resource?type=product-model'] # Views browse_content = ProductModels_View() def get_document_types(self): return [ProductModel] register_resource_class(ProductModel) register_resource_class(ProductModelSchema) register_resource_class(ProductModels) register_field('declinations_enumerates', String(is_indexed=True, multiple=True))
class_version = '20100229' # Views browse_content = Products_View() stock = Products_Stock() new_product = Product_NewProduct() def can_paste(self, source): return isinstance(source, Product) def get_document_types(self): return [] # Register fields register_field('reference', String(is_indexed=True, is_stored=True)) register_field('stock_quantity', Integer(is_indexed=True, is_stored=True)) register_field('manufacturer', String(is_indexed=True)) register_field('supplier', String(is_indexed=True, multiple=True)) register_field('product_model', String(is_indexed=True, is_stored=True)) register_field('has_images', Boolean(is_indexed=True, is_stored=True)) register_field('has_reduction', Boolean(is_indexed=True)) register_field('not_buyable_by_groups', String(is_indexed=True, multiple=True)) register_field('ctime', DateTime(is_stored=True, is_indexed=True)) register_field('data', Unicode(is_indexed=True)) register_field('ht_price', Decimal(is_indexed=True, is_stored=True)) register_field('ttc_price', Decimal(is_indexed=True, is_stored=True)) # XXX xapian can't sort decimal register_field('stored_price', Integer(is_indexed=False, is_stored=True)) register_field('stored_weight', Integer(is_indexed=False, is_stored=True))
def render_for_user(self, resource, context): # Get review that belong to user query = [ PhraseQuery('shop_module_review_author', resource.name), PhraseQuery('workflow_state', 'public'), PhraseQuery('format', 'shop_module_a_review') ] search = context.root.search(AndQuery(*query)) brains = list(search.get_documents(sort_by='mtime', reverse=True)) nb_reviews = len(brains) # Get viewboxes viewboxes = [] for brain in brains[:5]: review = context.root.get_resource(brain.abspath) viewbox = Review_Viewbox().GET(review, context) viewboxes.append(viewbox) # Return namespace return {'nb_reviews': nb_reviews, 'viewboxes': viewboxes} def get_document_types(self): return [] register_resource_class(ShopModule_Review) register_resource_class(ShopModule_AReview) register_field('shop_module_review_author', String(is_indexed=True)) register_field('shop_module_review_note', Integer(is_indexed=True, is_stored=True)) register_field('shop_module_review_description', Unicode(is_stored=True))
# Views edit = TchackIssue_Edit() def _get_catalog_values(self): values = Issue._get_catalog_values(self) history = self.get_history() # Get the last record record = history.get_record(-1) if record: values['issue_last_author'] = history.get_record_value(record, 'username') # Get last attachment values['issue_last_attachment'] = None for record in self.get_history_records(): if record.file: values['issue_last_attachment'] = record.file return values #def get_context_menus(self): # return self.parent.get_context_menus() + [IssueTrackerMenu()] ########################################################################### # Register ########################################################################### # The class register_resource_class(Tchack_Issue) register_field('issue_last_attachment', String(is_stored=True)) register_field('issue_last_author', String(is_stored=True))
abspath = self.get_canonical_path() query = AndQuery(PhraseQuery('parent_paths', str(abspath)), PhraseQuery('format', 'category')) return len(root.search(query)) @property def nb_products(self): return self.get_nb_products() @property def nb_categories(self): return self.get_nb_categories() ############################# # Export ############################# export = Export(export_resource=Product, access='is_allowed_to_edit', file_columns=[ 'reference', 'state', 'frontoffice_uri', 'cover_uri', 'manufacturer', 'price_with_tax', 'description' ]) register_resource_class(Category) # Add m_title field if it does not already exist if 'm_title' in get_register_fields() is False: register_field('m_title', Unicode(is_stored=True, is_indexed=True)) register_field('m_breadcrumb_title', Unicode(is_stored=True, is_indexed=True))
class_id = 'orders' class_title = MSG(u'Orders') class_views = ['view'] # 'export'] class_version = '20091127' # Views view = OrdersView() def get_document_types(self): return [Order] ############################# # Export ############################# export = Export( export_resource=Order, access='is_allowed_to_edit', file_columns=['name', 'state', 'total_price', 'creation_datetime']) # Register catalog fields register_field('customer_id', String(is_indexed=True)) register_field('is_payed', Boolean(is_stored=True)) register_field('creation_datetime', DateTime(is_stored=True, is_indexed=True)) # Register resources register_resource_class(Order) register_resource_class(Orders) register_resource_class(OrdersProducts)
return len(root.search(query)) @property def nb_products(self): return self.get_nb_products() @property def nb_categories(self): return self.get_nb_categories() ############################# # Export ############################# export = Export(export_resource=Product, access='is_allowed_to_edit', file_columns=['reference', 'state', 'frontoffice_uri', 'cover_uri', 'manufacturer', 'price_with_tax', 'description']) register_resource_class(Category) # Add m_title field if it does not already exist if 'm_title' in get_register_fields() is False: register_field('m_title', Unicode(is_stored=True, is_indexed=True)) register_field('m_breadcrumb_title', Unicode(is_stored=True, is_indexed=True))
# Add to namespace namespace['specific_dict'][name] = kw namespace['specific_list_complete'].append(kw) if kw['visible'] and kw['value']: namespace['specific_list'].append(kw) return namespace class ProductModels(ShopFolder): class_id = 'product-models' class_title = MSG(u'Product Models') class_views = ['browse_content', 'new_resource?type=product-model'] # Views browse_content = ProductModels_View() def get_document_types(self): return [ProductModel] register_resource_class(ProductModel) register_resource_class(ProductModelSchema) register_resource_class(ProductModels) register_field('declinations_enumerates', String(is_indexed=True, multiple=True))
class_views = ['view'] view = Modules_View() def get_document_types(self): return [] class ModuleLoader(dict): context = None here = None def __getitem__(self, key): shop = get_shop(self.context.resource) module = shop.get_resource('modules/%s' % key, soft=True) if module is None: # XXX Log it ac = shop.get_access_control() user = self.context.user if ac.is_admin(user, shop) is False: return None return MSG(u'Module {name} not initialized').gettext(name=key) return module.render(self.here, self.context) register_field('is_shop_module', Boolean(is_indexed=True)) register_field('is_shop_user_module', Boolean(is_indexed=True))
user = cls.make_resource(cls, self, user_id) # Set the email and paswword if email is not None: user.set_property('email', email) if password is not None: user.set_password(password) # Set default group root = context.root query = [PhraseQuery('format', 'user-group'), PhraseQuery('name', 'default')] search = root.search(AndQuery(*query)) documents = search.get_documents() group = documents[0] group = root.get_resource(group.abspath) user.set_property('user_group', str(group.get_abspath())) user_is_enabled = group.get_property('user_is_enabled_when_register') user.set_property('is_enabled', user_is_enabled) # Return the user return user register_resource_class(ShopUser) register_resource_class(ShopUserFolder) register_resource_class(Customers) register_resource_class(AuthentificationLogs) register_field('last_time', DateTime(is_stored=True)) register_field('user_group', String(is_indexed=True)) register_field('is_enabled', Boolean(is_indexed=True))
def render_for_user(self, resource, context): # Get review that belong to user query = [PhraseQuery('shop_module_review_author', resource.name), PhraseQuery('workflow_state', 'public'), PhraseQuery('format', 'shop_module_a_review')] search = context.root.search(AndQuery(*query)) brains = list(search.get_documents(sort_by='mtime', reverse=True)) nb_reviews = len(brains) # Get viewboxes viewboxes = [] for brain in brains[:5]: review = context.root.get_resource(brain.abspath) viewbox = Review_Viewbox().GET(review, context) viewboxes.append(viewbox) # Return namespace return {'nb_reviews': nb_reviews, 'viewboxes': viewboxes} def get_document_types(self): return [] register_resource_class(ShopModule_Review) register_resource_class(ShopModule_AReview) register_field('shop_module_review_author', String(is_indexed=True)) register_field('shop_module_review_note', Integer(is_indexed=True, is_stored=True)) register_field('shop_module_review_description', Unicode(is_stored=True))
self.set_property(key, events, language=lang) elif issubclass(datatype, PathDataType): # Relative path for lang in langs: path = self.get_property(key, language=lang) if path is None: continue # Calcul the old absolute path old_abs_path = source.resolve2(path) # Check if the target path has not been moved new_abs_path = resources_old2new.get(old_abs_path, old_abs_path) # Build the new path # Absolute path allow to call get_pathto with the target new_path = str(target.get_pathto(new_abs_path)) self.set_property(key, new_path, language=lang) elif issubclass(datatype, AbsolutePathDataTypeEnumerate): # Absolute path for lang in langs: path = self.get_property(key, language=lang) if path is None: continue # Calcul the old absolute path path = str(path) old_abs_path = resources_new2old.get(path, path) # Check if the target path has not been moved new_abs_path = resources_old2new.get(old_abs_path, old_abs_path) self.set_property(key, new_abs_path, language=lang) register_field('parent_paths', String(is_indexed=True, multiple=True))
# Set the email and paswword if email is not None: user.set_property('email', email) if password is not None: user.set_password(password) # Set default group root = context.root query = [ PhraseQuery('format', 'user-group'), PhraseQuery('name', 'default') ] search = root.search(AndQuery(*query)) documents = search.get_documents() group = documents[0] group = root.get_resource(group.abspath) user.set_property('user_group', str(group.get_abspath())) user_is_enabled = group.get_property('user_is_enabled_when_register') user.set_property('is_enabled', user_is_enabled) # Return the user return user register_resource_class(ShopUser) register_resource_class(ShopUserFolder) register_resource_class(Customers) register_resource_class(AuthentificationLogs) register_field('last_time', DateTime(is_stored=True)) register_field('user_group', String(is_indexed=True)) register_field('is_enabled', Boolean(is_indexed=True))
class_id = "modules" class_title = MSG(u"Modules") class_views = ["view"] view = Modules_View() def get_document_types(self): return [] class ModuleLoader(dict): context = None here = None def __getitem__(self, key): shop = get_shop(self.context.resource) module = shop.get_resource("modules/%s" % key, soft=True) if module is None: # XXX Log it ac = shop.get_access_control() user = self.context.user if ac.is_admin(user, shop) is False: return None return MSG(u"Module {name} not initialized").gettext(name=key) return module.render(self.here, self.context) register_field("is_shop_module", Boolean(is_indexed=True)) register_field("is_shop_user_module", Boolean(is_indexed=True))
# Views browse_content = Products_View() stock = Products_Stock() new_product = Product_NewProduct() def can_paste(self, source): return isinstance(source, Product) def get_document_types(self): return [] # Register fields register_field('reference', String(is_indexed=True, is_stored=True)) register_field('stock_quantity', Integer(is_indexed=True, is_stored=True)) register_field('manufacturer', String(is_indexed=True)) register_field('supplier', String(is_indexed=True, multiple=True)) register_field('product_model', String(is_indexed=True, is_stored=True)) register_field('has_images', Boolean(is_indexed=True, is_stored=True)) register_field('has_reduction', Boolean(is_indexed=True)) register_field('not_buyable_by_groups', String(is_indexed=True, multiple=True)) register_field('ctime', DateTime(is_stored=True, is_indexed=True)) register_field('data', Unicode(is_indexed=True)) register_field('ht_price', Decimal(is_indexed=True, is_stored=True)) register_field('ttc_price', Decimal(is_indexed=True, is_stored=True)) # XXX xapian can't sort decimal register_field('stored_price', Integer(is_indexed=False, is_stored=True)) register_field('stored_weight', Integer(is_indexed=False, is_stored=True))