From 0901b0f01db00af7f61d90771a75cb40fdc96c92 Mon Sep 17 00:00:00 2001 From: Gervais Naoussi Date: Thu, 22 Oct 2015 02:37:37 -0400 Subject: [PATCH] [ADD] Document_page --- document_page/README.rst | 90 +++++++++++++++++++ document_page/__init__.py | 3 +- document_page/__openerp__.py | 23 ++--- .../document_page.xml} | 8 +- .../document_page.xml} | 4 +- document_page/models/__init__.py | 23 +++++ document_page/{ => models}/document_page.py | 61 +++---------- document_page/models/document_page_history.py | 72 +++++++++++++++ .../security/document_page_security.xml | 4 +- .../document_page.xml} | 7 +- document_page/wizard/__init__.py | 3 +- .../wizard/document_page_create_menu.py | 13 +-- ...view.xml => document_page_create_menu.xml} | 4 +- .../wizard/document_page_show_diff.py | 8 +- ...f_view.xml => document_page_show_diff.xml} | 4 +- 15 files changed, 235 insertions(+), 92 deletions(-) create mode 100644 document_page/README.rst rename document_page/{document_page_data.xml => data/document_page.xml} (96%) rename document_page/{document_page_demo.xml => demo/document_page.xml} (99%) create mode 100644 document_page/models/__init__.py rename document_page/{ => models}/document_page.py (71%) create mode 100644 document_page/models/document_page_history.py rename document_page/{document_page_view.xml => views/document_page.xml} (99%) rename document_page/wizard/{document_page_create_menu_view.xml => document_page_create_menu.xml} (98%) rename document_page/wizard/{document_page_show_diff_view.xml => document_page_show_diff.xml} (98%) diff --git a/document_page/README.rst b/document_page/README.rst new file mode 100644 index 00000000..a62b1ce3 --- /dev/null +++ b/document_page/README.rst @@ -0,0 +1,90 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +============= +Document Page +============= + +This module allows you to write web pages for internal documentation. + +Installation +============ + +This module depends on module knowledge. So make sure to have available it in your addons list + +Configuration +============= + +No configuration required + +Usage +===== + +To use this module, you need to: +* Go to Knowledge menu +* Click on Categories to create the document's category you need with the template +* Click on Pages to create pages and select the previous category to use the template + + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/118/9.0 + +Known issues / Roadmap +====================== + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed feedback `here `_. + +Credits +======= + +Contributors +------------ + +* Odoo SA +* Savoir-faire Linux +* Gervais Naoussi + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit http://odoo-community.org. + +Changelog +--------- + +v 9.0.1.0.0 + +Creation of folders models, views, data and demo +document_page_view.xml moved to views and renamed to document_page +document_page_data.xml moved to data and renamed to document_page +document_page_demo.xml moved to demo and renamed to document_page +document_page.py moved to models and renamed to document_page + +Module models initialise by the creation of the file __init__.py + +wizard file reorganized +folder wizard created +document_page_create_menu.py and document_page_create_show_diff.py moved to wizard +document_page_create_menu_view.xml moved to document_page_create_menu.xml +document_page_create_show_diff_view.xml en document_page_create_show_diff.xml + + +__openerp_.py et __init__.py file edited in order to reflect the module organization diff --git a/document_page/__init__.py b/document_page/__init__.py index d11fab84..d8204cfc 100644 --- a/document_page/__init__.py +++ b/document_page/__init__.py @@ -1,3 +1,4 @@ +"""Import of other document page submodule.""" # -*- coding: utf-8 -*- ############################################################################## # @@ -18,5 +19,5 @@ # along with this program. If not, see . # ############################################################################## -from . import document_page +from . import models from . import wizard diff --git a/document_page/__openerp__.py b/document_page/__openerp__.py index 602cee55..8f7f0313 100644 --- a/document_page/__openerp__.py +++ b/document_page/__openerp__.py @@ -1,3 +1,4 @@ +"""Document Page configuration's file.""" # -*- coding: utf-8 -*- ############################################################################## # @@ -21,35 +22,29 @@ { 'name': 'Document Page', - 'version': '8.0.1.0.1', + 'version': '9.0.1.0.0', 'category': 'Knowledge Management', - 'description': """ -Pages -===== -Web pages - """, - 'author': ['OpenERP SA'], + 'author': 'OpenERP SA, Odoo Community Association (OCA)', 'website': 'http://www.openerp.com/', 'license': 'AGPL-3', 'depends': [ - 'knowledge', 'mail', + 'knowledge', ], 'data': [ - 'wizard/document_page_create_menu_view.xml', - 'wizard/document_page_show_diff_view.xml', - 'document_page_view.xml', + 'wizard/document_page_create_menu.xml', + 'wizard/document_page_show_diff.xml', + 'views/document_page.xml', 'security/document_page_security.xml', 'security/ir.model.access.csv', ], 'demo': [ - 'document_page_demo.xml' + 'demo/document_page.xml' ], 'test': [ 'test/document_page_test00.yml' ], - 'installable': False, + 'installable': True, 'auto_install': False, - 'images': [], 'css': ['static/src/css/document_page.css'], } diff --git a/document_page/document_page_data.xml b/document_page/data/document_page.xml similarity index 96% rename from document_page/document_page_data.xml rename to document_page/data/document_page.xml index 1cef6569..866e61ff 100644 --- a/document_page/document_page_data.xml +++ b/document_page/data/document_page.xml @@ -1,5 +1,5 @@ - + The OpenERP wiki @@ -8,8 +8,8 @@ 1 Initial Page ==The OpenERP wiki== - -[[File:http://www.openerp.com/sites/all/themes/openerp/logo.png OpenERP]] + +[[File:http://www.openerp.com/sites/all/themes/openerp/logo.png OpenERP]] The OpenERP wiki allows you to manage your enterprise's contents using wiki restructured texts. This module provides a collaborative way to manage internal @@ -38,4 +38,4 @@ FAQs, quality manuals, technical references, etc. - + diff --git a/document_page/document_page_demo.xml b/document_page/demo/document_page.xml similarity index 99% rename from document_page/document_page_demo.xml rename to document_page/demo/document_page.xml index c94054e7..8e6d2eca 100644 --- a/document_page/document_page_demo.xml +++ b/document_page/demo/document_page.xml @@ -1,5 +1,5 @@ - + - + diff --git a/document_page/models/__init__.py b/document_page/models/__init__.py new file mode 100644 index 00000000..cba5781f --- /dev/null +++ b/document_page/models/__init__.py @@ -0,0 +1,23 @@ +"""Data's models registration.""" +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +from . import document_page +from . import document_page_history diff --git a/document_page/document_page.py b/document_page/models/document_page.py similarity index 71% rename from document_page/document_page.py rename to document_page/models/document_page.py index 21da2770..b20ca6a3 100644 --- a/document_page/document_page.py +++ b/document_page/models/document_page.py @@ -1,3 +1,4 @@ +"""Document model.""" # -*- coding: utf-8 -*- ############################################################################## # @@ -19,13 +20,14 @@ # ############################################################################## import logging -import difflib -from openerp import models, fields, api, _ +from openerp import models, fields, api _logger = logging.getLogger(__name__) -class document_page(models.Model): +class DocumentPage(models.Model): + """This class is use to manage Document.""" + _name = "document.page" _inherit = ['mail.thread'] _description = "Document Page" @@ -99,6 +101,7 @@ class document_page(models.Model): ) def _get_page_index(self, page, link=True): + """Return the index of a document.""" index = [] for subpage in page.child_ids: index += ["
  • " + self._get_page_index(subpage) + @@ -112,6 +115,7 @@ class document_page(models.Model): return r def _get_display_content(self): + """Return the content of a document.""" for page in self: if page.type == "category": display_content = self._get_page_index(page, link=False) @@ -121,11 +125,13 @@ class document_page(models.Model): @api.onchange("parent_id") def do_set_content(self): + """We Set it the right content to the new parent.""" if self.parent_id and not self.content: if self.parent_id.type == "category": self.content = self.parent_id.content def create_history(self, page_id, content): + """Create the first history of a newly created document.""" history = self.env['document.page.history'] return history.create({ "content": content, @@ -134,7 +140,8 @@ class document_page(models.Model): @api.multi def write(self, vals): - result = super(document_page, self).write(vals) + """Write the content and set the history.""" + result = super(DocumentPage, self).write(vals) content = vals.get('content') if content: for page in self: @@ -144,51 +151,9 @@ class document_page(models.Model): @api.model @api.returns('self', lambda value: value.id) def create(self, vals): - page_id = super(document_page, self).create(vals) + """Create the first history of a document.""" + page_id = super(DocumentPage, self).create(vals) content = vals.get('content') if content: self.create_history(page_id.id, content) return page_id - - -class document_page_history(models.Model): - _name = "document.page.history" - _description = "Document Page History" - _order = 'id DESC' - _rec_name = "create_date" - - 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, v1, v2): - text1 = self.browse(v1).content - text2 = self.browse(v2).content - line1 = line2 = '' - if text1: - line1 = text1.splitlines(1) - if text2: - line2 = text2.splitlines(1) - if (not line1 and not line2) or (line1 == line2): - return _('There are no changes in revisions.') - else: - diff = difflib.HtmlDiff() - return diff.make_table( - line1, line2, - "Revision-{}".format(v1), - "Revision-{}".format(v2), - context=True - ) - - def __getattr__(self, attr): - """Return a dummy callabale""" - if attr in ['_sql', 'init', '_ids']: - raise AttributeError - - _logger.warning( - "Trying to access attribute %s on document_page_history", - attr - ) - return (lambda *a, **b: None) diff --git a/document_page/models/document_page_history.py b/document_page/models/document_page_history.py new file mode 100644 index 00000000..1161ee44 --- /dev/null +++ b/document_page/models/document_page_history.py @@ -0,0 +1,72 @@ +"""DocumentPageHistory model.""" +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## +import logging +import difflib +from openerp import models, fields, _ + +_logger = logging.getLogger(__name__) + + +class DocumentPageHistory(models.Model): + """This model is necessary to manage a document history.""" + + _name = "document.page.history" + _description = "Document Page History" + _order = 'id DESC' + _rec_name = "create_date" + + page_id = fields.Many2one('document.page', 'Page') + summary = fields.Char('Summary', select=True) + content = fields.Text("Content") + create_date = fields.Datetime("Date") + create_uid = fields.Many2one('res.users', "Modified By") + + def getDiff(self, v1, v2): + """Return the difference between two version of document version.""" + text1 = self.browse(v1).content + text2 = self.browse(v2).content + line1 = line2 = '' + if text1: + line1 = text1.splitlines(1) + if text2: + line2 = text2.splitlines(1) + if (not line1 and not line2) or (line1 == line2): + return _('There are no changes in revisions.') + else: + diff = difflib.HtmlDiff() + return diff.make_table( + line1, line2, + "Revision-{}".format(v1), + "Revision-{}".format(v2), + context=True + ) + + def __getattr__(self, attr): + """Return a dummy callabale.""" + if attr in ['_sql', 'init', '_ids']: + raise AttributeError + + _logger.warning( + "Trying to access attribute %s on document_page_history", + attr + ) + return (lambda *a, **b: None) diff --git a/document_page/security/document_page_security.xml b/document_page/security/document_page_security.xml index 6d85d054..6834b69b 100644 --- a/document_page/security/document_page_security.xml +++ b/document_page/security/document_page_security.xml @@ -1,8 +1,8 @@ - + - + diff --git a/document_page/document_page_view.xml b/document_page/views/document_page.xml similarity index 99% rename from document_page/document_page_view.xml rename to document_page/views/document_page.xml index 7f7ab50d..06e4f19a 100644 --- a/document_page/document_page_view.xml +++ b/document_page/views/document_page.xml @@ -1,9 +1,6 @@ - + - - - + diff --git a/document_page/wizard/__init__.py b/document_page/wizard/__init__.py index 3348328b..0b1cc0de 100644 --- a/document_page/wizard/__init__.py +++ b/document_page/wizard/__init__.py @@ -1,3 +1,4 @@ +"""wizard's models registration.""" # -*- coding: utf-8 -*- ############################################################################## # @@ -20,5 +21,3 @@ ############################################################################## from . import document_page_create_menu from . import document_page_show_diff - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/wizard/document_page_create_menu.py b/document_page/wizard/document_page_create_menu.py index 91821718..b3f67695 100644 --- a/document_page/wizard/document_page_create_menu.py +++ b/document_page/wizard/document_page_create_menu.py @@ -1,3 +1,4 @@ +"""DocumentPageCreateMenu model.""" # -*- coding: utf-8 -*- ############################################################################## # @@ -21,8 +22,9 @@ from openerp import models, fields, api -class document_page_create_menu(models.TransientModel): - """ Create Menu """ +class DocumentPageCreateMenu(models.TransientModel): + """Create Menu.""" + _name = "document.page.create.menu" _description = "Wizard Create Menu" @@ -39,7 +41,8 @@ class document_page_create_menu(models.TransientModel): @api.model def default_get(self, fields_list): - res = super(document_page_create_menu, self).default_get(fields_list) + """Add page to the menu.""" + res = super(DocumentPageCreateMenu, self).default_get(fields_list) page_id = self.env.context.get('active_id') obj_page = self.env['document.page'] page = obj_page.browse(page_id) @@ -48,6 +51,7 @@ class document_page_create_menu(models.TransientModel): @api.multi def document_page_menu_create(self): + """Menu creation.""" obj_page = self.env['document.page'] obj_menu = self.env['ir.ui.menu'] obj_action = self.env['ir.actions.act_window'] @@ -86,6 +90,3 @@ class document_page_create_menu(models.TransientModel): 'type': 'ir.actions.client', 'tag': 'reload', } - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/wizard/document_page_create_menu_view.xml b/document_page/wizard/document_page_create_menu.xml similarity index 98% rename from document_page/wizard/document_page_create_menu_view.xml rename to document_page/wizard/document_page_create_menu.xml index 858aa0ed..c18c4729 100644 --- a/document_page/wizard/document_page_create_menu_view.xml +++ b/document_page/wizard/document_page_create_menu.xml @@ -1,5 +1,5 @@ - + @@ -38,4 +38,4 @@ - + diff --git a/document_page/wizard/document_page_show_diff.py b/document_page/wizard/document_page_show_diff.py index 25a93de2..8de13b01 100644 --- a/document_page/wizard/document_page_show_diff.py +++ b/document_page/wizard/document_page_show_diff.py @@ -1,3 +1,4 @@ +"""DocumentPageShowDiff model.""" # -*- coding: utf-8 -*- ############################################################################## # @@ -22,12 +23,13 @@ from openerp import models, fields, _ from openerp import exceptions -class showdiff(models.TransientModel): - """ Display Difference for History """ +class DocumentPageShowDiff(models.TransientModel): + """Display Difference for History.""" _name = 'wizard.document.page.history.show_diff' def get_diff(self): + """Return the Difference between two document.""" history = self.env["document.page.history"] ids = self.env.context.get('active_ids', []) @@ -57,5 +59,3 @@ class showdiff(models.TransientModel): readonly=True, default=get_diff ) - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/wizard/document_page_show_diff_view.xml b/document_page/wizard/document_page_show_diff.xml similarity index 98% rename from document_page/wizard/document_page_show_diff_view.xml rename to document_page/wizard/document_page_show_diff.xml index dbe973b3..4499769f 100644 --- a/document_page/wizard/document_page_show_diff_view.xml +++ b/document_page/wizard/document_page_show_diff.xml @@ -1,5 +1,5 @@ - + @@ -44,4 +44,4 @@ view_type="form"/> - +