- Click to setup a new alarm type. + Click to setup a new alarm type.
You can define a customized type of calendar alarm that may be
assigned to calendar events or meetings.
@@ -195,25 +195,25 @@
+ This dashboard is empty. +
+ To add the first report into this dashboard, go to any + menu, switch to list or graph view, and click 'Add to + Dashboard' in the extended search options. +
+ You can filter and group data before inserting into the + dashboard using the search options. +
+|
+
+ |
+
+ Choose dashboard layout +
+- This dashboard is empty. -
- To add the first report into this dashboard, go to any - menu, switch to list or graph view, and click 'Add to - Dashboard' in the extended search options. -
- You can filter and group data before inserting into the - dashboard using the search options. -
-- Click to define a new sales tag. + Click to define a new sales tag.
Create specific tags that fit your company's activities
to better classify and analyse your leads and opportunities.
@@ -105,7 +105,7 @@
+ -->
-
-
+
+
-
-
-
-
+
+
+
+ " + "".join(index) + "
"
+ return r
+
+ def _get_display_content(self, cr, uid, ids, name, args, context=None):
+ res = {}
+ for page in self.browse(cr, uid, ids, context=context):
+ if page.type == "category":
+ content = self._get_page_index(cr, uid, page)
+ else:
+ content = page.content
+ res[page.id] = content
+ return res
+
+ _columns = {
+ 'name': fields.char('Title', required=True),
+ 'type':fields.selection([('content','Content'), ('category','Category')], 'Type', help="Page type"),
+
+ 'parent_id': fields.many2one('document.page', 'Category', domain=[('type','=','category')]),
+ 'child_ids': fields.one2many('document.page', 'parent_id', 'Children'),
+
+ 'content': fields.text("Content"),
+ 'display_content': fields.function(_get_display_content, string='Displayed Content', type='text'),
+
+ 'history_ids': fields.one2many('document.page.history', 'page_id', 'History'),
+ 'menu_id': fields.many2one('ir.ui.menu', "Menu", readonly=True),
+
+ 'create_date': fields.datetime("Created on", select=True, readonly=True),
+ 'create_uid': fields.many2one('res.users', 'Author', select=True, readonly=True),
+ 'write_date': fields.datetime("Modification Date", select=True, readonly=True),
+ 'write_uid': fields.many2one('res.users', "Last Contributor", select=True),
+ }
+ _defaults = {
+ 'type':'content',
+ }
+
+ def onchange_parent_id(self, cr, uid, ids, parent_id, content, context=None):
+ res = {}
+ if parent_id and not content:
+ parent = self.browse(cr, uid, parent_id, context=context)
+ if parent.type == "category":
+ res['value'] = {
+ 'content': parent.content,
+ }
+ return res
+
+ def create_history(self, cr, uid, ids, vals, context=None):
+ for i in ids:
+ history = self.pool.get('document.page.history')
+ if vals.get('content'):
+ res = {
+ 'content': vals.get('content', ''),
+ 'page_id': i,
+ }
+ history.create(cr, uid, res)
+
+ def create(self, cr, uid, vals, context=None):
+ page_id = super(document_page, self).create(cr, uid, vals, context)
+ self.create_history(cr, uid, [page_id], vals, context)
+ return page_id
+
+ def write(self, cr, uid, ids, vals, context=None):
+ result = super(document_page, self).write(cr, uid, ids, vals, context)
+ self.create_history(cr, uid, ids, vals, context)
+ return result
+
+class document_page_history(osv.osv):
+ _name = "document.page.history"
+ _description = "Document Page History"
+ _order = 'id DESC'
+ _rec_name = "create_date"
+
+ _columns = {
+ 'page_id': fields.many2one('document.page', 'Page'),
+ 'summary': fields.char('Summary', size=256, select=True),
+ 'content': fields.text("Content"),
+ 'create_date': fields.datetime("Date"),
+ 'create_uid': fields.many2one('res.users', "Modified By"),
+ }
+
+ def getDiff(self, cr, uid, v1, v2, context=None):
+ history_pool = self.pool.get('document.page.history')
+ text1 = history_pool.read(cr, uid, [v1], ['content'])[0]['content']
+ text2 = history_pool.read(cr, uid, [v2], ['content'])[0]['content']
+ line1 = line2 = ''
+ if text1:
+ line1 = tools.ustr(text1.splitlines(1))
+ if text2:
+ line2=tools.ustr(text2.splitlines(1))
+ if (not line1 and not line2) or (line1 == line2):
+ raise osv.except_osv(_('Warning!'), _('There are no changes in revisions.'))
+ diff = difflib.HtmlDiff()
+ return diff.make_file(line1, line2, "Revision-%s" % (v1), "Revision-%s" % (v2), context=False)
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/document_page/document_page_data.xml b/addons/document_page/document_page_data.xml
new file mode 100644
index 00000000000..1cef65694d8
--- /dev/null
+++ b/addons/document_page/document_page_data.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+ Click to create a new order. +
+ Use this menu to browse your preceeding orders. To record new + orders, you should better use the menu Your Session for + the touchscreen interface. +
++ Click to define a new category. +
+ Categories are used to browse your products through the + touchscreen interface. +
+ If you put a photo on the category, the layout of the + touchscreen interface will automatically. We suggest not to put + a photo on categories for small (1024x768) screens. +
+Payment methods are defined by accounting journals having the - field Payment Method checked. + field PoS Payment Method checked. In order to be useable + from the touchscreen interface, you must set the payment method + on the Point of Sale configuration.
@@ -764,18 +786,6 @@ - -
+ You can define another list of available currencies on the
+ Cash Registers tab of the
+ Click to start a new session. +
+ A session is a period of time, usually one day, during which + you sell through the point of sale. The user has to check the + currencies in your cash registers at the beginning and the end + of each session. +
+ Note that you should better to use the menu Your Session + to quickly open a new session. +
++ Click to start a session. +
+ You will first have to control your cash amount in your cash register. + Then you will be able to open the session and start selling with the touchscreen + interface. +
++ To use the LinkedIn module with this database, an API Key is required. Please follow this procedure: +
+