[IMP] doc/howtos/backend: use scaffolding and adapt text and code accordingly

This commit is contained in:
Raphael Collet 2014-08-24 13:06:51 +02:00
parent 2ad092b5e5
commit 2b3b1c3230
38 changed files with 687 additions and 535 deletions

View File

@ -92,15 +92,28 @@ might contain::
import mymodule
Fortunately, there is a mechanism to help you set up an module. The command
``odoo.py`` has a subcommand ``scaffold`` to create an empty module:
.. code:: bash
odoo.py scaffold <module name> <where to put it>
The command creates a subdirectory for your module, and automatically creates a
bunch of standard files for a module. Most of them simply contain commented code
or XML. The usage of most of those files will be explained along this tutorial.
.. exercise:: Module creation
Create an empty module Open Academy, install it in Odoo.
Use the command line above to create an empty module Open Academy, and
install it in Odoo.
.. only:: solutions
#. Create a new folder ``openacademy``
#. Create an empty ``openacademy/__init__.py`` file
#. Create an ``openacademy/__openerp__.py`` file
#. Invoke the command ``./odoo.py scaffold openacademy addons`` in the
Odoo directory.
#. Adapt the manifest file to your module.
#. Don't bother about the other files.
.. patch::
@ -200,8 +213,7 @@ overridden by setting :attr:`~openerp.models.Model._rec_name`.
.. only:: solutions
#. Create a new file ``openacademy/course.py``
#. Edit ``openacademy/__init__.py`` to import it
Edit the file ``openacademy/models.py`` to include a *Course* class.
.. patch::
@ -245,8 +257,7 @@ be declared in the ``'data'`` list (always loaded) or in the ``'demo'`` list
.. only:: solutions
#. Create a new file ``openacademy/demo.xml``
#. Add the file to the ``'demo'`` list of your ``__openerp__.py``
Edit the file ``openacademy/demo.xml`` to include some data.
.. patch::
@ -475,7 +486,7 @@ client data; it is also related to its sale order line records.
.. only:: solutions
Create class *Session*:
Create the class *Session* in ``openacademy/models.py``.
.. patch::
@ -675,9 +686,9 @@ instead of a single view its ``arch`` field is composed of any number of
inspect the view, find its external ID and the place to put the
new field.
#. Create a ``openacademy/partner.py`` and import it in
#. Create a file ``openacademy/partner.py`` and import it in
``__init__.py``
#. Create an ``openacademy/views/partner.xml`` and add it to
#. Create a file ``openacademy/views/partner.xml`` and add it to
``__openerp__.py``
.. patch::
@ -1330,9 +1341,9 @@ rights are usually created by a CSV file named after its model:
#. Create a new file ``openacademy/security/security.xml`` to
hold the OpenAcademy Manager group
#. Create a new file ``openacademy/security/ir.model.access.csv`` with
#. Edit the file ``openacademy/security/ir.model.access.csv`` with
the access rights to the models
#. finally update ``openacademy/__openerp__.py`` to add the new data
#. Finally update ``openacademy/__openerp__.py`` to add the new data
files to it
.. patch::
@ -1533,7 +1544,7 @@ Dashboards
.. only:: solutions
#. Create a ``openacademy/views/session_board.xml``. It should contain
#. Create a file ``openacademy/views/session_board.xml``. It should contain
the board view, the actions referenced in that view, an action to
open the dashboard and a re-definition of the main menu item to add
the dashboard action

View File

@ -1,38 +1,40 @@
# HG changeset patch
# Parent 303a5f4f011822dcb42b5833d579eabd3f03f4bf
diff --git a/openacademy/__openerp__.py b/openacademy/__openerp__.py
--- a/openacademy/__openerp__.py
+++ b/openacademy/__openerp__.py
@@ -11,6 +11,8 @@
- training sessions
- attendees registration""",
'data' : [
Index: doc-backend/openacademy/__openerp__.py
===================================================================
--- doc-backend.orig/openacademy/__openerp__.py 2014-08-24 12:26:40.449399183 +0200
+++ doc-backend/openacademy/__openerp__.py 2014-08-24 12:26:40.445399183 +0200
@@ -25,7 +25,8 @@
# always loaded
'data': [
- # 'security/ir.model.access.csv',
+ 'security/security.xml',
+ 'security/ir.model.access.csv',
'templates.xml',
'views/openacademy.xml',
'views/partner.xml',
'views/session_workflow.xml',
diff --git a/openacademy/security/ir.model.access.csv b/openacademy/security/ir.model.access.csv
new file mode 100644
--- /dev/null
+++ b/openacademy/security/ir.model.access.csv
@@ -0,0 +1,6 @@
+id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
Index: doc-backend/openacademy/security/ir.model.access.csv
===================================================================
--- doc-backend.orig/openacademy/security/ir.model.access.csv 2014-08-24 12:26:40.449399183 +0200
+++ doc-backend/openacademy/security/ir.model.access.csv 2014-08-24 12:26:55.985399543 +0200
@@ -1,2 +1,5 @@
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
-access_openacademy_openacademy,openacademy.openacademy,model_openacademy_openacademy,,1,0,0,0
+course_manager,course manager,model_openacademy_course,group_manager,1,1,1,1
+session_manager,session manager,model_openacademy_session,group_manager,1,1,1,1
+course_read_all,course all,model_openacademy_course,,1,0,0,0
+session_read_all,session all,model_openacademy_session,,1,0,0,0
+
diff --git a/openacademy/security/security.xml b/openacademy/security/security.xml
new file mode 100644
--- /dev/null
+++ b/openacademy/security/security.xml
Index: doc-backend/openacademy/security/security.xml
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ doc-backend/openacademy/security/security.xml 2014-08-24 12:26:40.445399183 +0200
@@ -0,0 +1,7 @@
+<openerp>
+ <data>
+ <record id="group_manager" model="res.groups">
+ <field name="name">OpenAcademy / Manager</field>
+ </record>
+ </data>
+ <data>
+ <record id="group_manager" model="res.groups">
+ <field name="name">OpenAcademy / Manager</field>
+ </record>
+ </data>
+</openerp>

View File

@ -1,26 +1,27 @@
# HG changeset patch
# Parent 0602022dc2a428f9995c886df33b699b6d3bcb69
diff --git a/openacademy/security/security.xml b/openacademy/security/security.xml
--- a/openacademy/security/security.xml
+++ b/openacademy/security/security.xml
Index: doc-backend/openacademy/security/security.xml
===================================================================
--- doc-backend.orig/openacademy/security/security.xml 2014-08-24 12:27:27.569400274 +0200
+++ doc-backend/openacademy/security/security.xml 2014-08-24 12:28:29.185401700 +0200
@@ -3,5 +3,19 @@
<record id="group_manager" model="res.groups">
<field name="name">OpenAcademy / Manager</field>
</record>
+
+ <record id="only_responsible_can_modify" model="ir.rule">
+ <field name="name">Only Responsible can modify Course</field>
+ <field name="model_id" ref="model_openacademy_course"/>
+ <field name="groups" eval="[(4, ref('openacademy.group_manager'))]"/>
+ <field name="perm_read" eval="0"/>
+ <field name="perm_write" eval="1"/>
+ <field name="perm_create" eval="0"/>
+ <field name="perm_unlink" eval="1"/>
+ <field name="domain_force">
+ ['|', ('responsible_id','=',False),
+ ('responsible_id','=',user.id)]
+ </field>
+ </record>
</data>
<record id="group_manager" model="res.groups">
<field name="name">OpenAcademy / Manager</field>
</record>
+
+ <record id="only_responsible_can_modify" model="ir.rule">
+ <field name="name">Only Responsible can modify Course</field>
+ <field name="model_id" ref="model_openacademy_course"/>
+ <field name="groups" eval="[(4, ref('openacademy.group_manager'))]"/>
+ <field name="perm_read" eval="0"/>
+ <field name="perm_write" eval="1"/>
+ <field name="perm_create" eval="0"/>
+ <field name="perm_unlink" eval="1"/>
+ <field name="domain_force">
+ ['|', ('responsible_id','=',False),
+ ('responsible_id','=',user.id)]
+ </field>
+ </record>
</data>
</openerp>

View File

@ -3,8 +3,8 @@
Index: doc-backend/openacademy/views/openacademy.xml
===================================================================
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-22 17:03:26.743106339 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-22 17:03:26.739106339 +0200
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-24 12:13:41.149381146 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-24 12:13:41.141381146 +0200
@@ -111,9 +111,10 @@
<field name="name">session.tree</field>
<field name="model">openacademy.session</field>

View File

@ -1,19 +1,21 @@
# HG changeset patch
# Parent 16e4cb131d9f7f3a72a8a1b0bc46c2ce9ac76435
diff -r 16e4cb131d9f -r bbfa610bfabd openacademy/__openerp__.py
--- a/openacademy/__openerp__.py Thu Aug 07 12:10:05 2014 +0200
+++ b/openacademy/__openerp__.py Thu Aug 07 12:11:28 2014 +0200
@@ -11,6 +11,7 @@
- training sessions
- attendees registration""",
'data' : [
Index: doc-backend/openacademy/__openerp__.py
===================================================================
--- doc-backend.orig/openacademy/__openerp__.py 2014-08-24 12:02:32.169365663 +0200
+++ doc-backend/openacademy/__openerp__.py 2014-08-24 12:02:32.165365663 +0200
@@ -27,6 +27,7 @@
'data': [
# 'security/ir.model.access.csv',
'templates.xml',
+ 'views/openacademy.xml',
],
# only loaded in demonstration mode
'demo': [
'demo.xml',
diff -r 16e4cb131d9f -r bbfa610bfabd openacademy/views/openacademy.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/openacademy/views/openacademy.xml Thu Aug 07 12:11:28 2014 +0200
Index: doc-backend/openacademy/views/openacademy.xml
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-24 12:02:32.165365663 +0200
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<openerp>

View File

@ -1,19 +1,18 @@
# HG changeset patch
# Parent 85a8d7317b9e13480f39ad739955442d15144451
Index: doc-backend/openacademy/course.py
Index: doc-backend/openacademy/models.py
===================================================================
--- doc-backend.orig/openacademy/course.py 2014-08-22 17:03:34.383106620 +0200
+++ doc-backend/openacademy/course.py 2014-08-22 17:03:34.375106619 +0200
@@ -1,4 +1,7 @@
--- doc-backend.orig/openacademy/models.py 2014-08-24 12:17:49.873386903 +0200
+++ doc-backend/openacademy/models.py 2014-08-24 12:18:24.601387707 +0200
@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
+from datetime import datetime, timedelta
+
+import openerp.tools
from openerp import api, fields, models, exceptions
+from datetime import timedelta
from openerp import models, fields, api, exceptions
class Course(models.Model):
@@ -54,6 +57,8 @@
@@ -55,6 +56,8 @@
attendee_ids = fields.Many2many('res.partner', string="Attendees")
taken_seats = fields.Float(string="Taken seats", compute='_taken_seats')
@ -22,7 +21,7 @@ Index: doc-backend/openacademy/course.py
@api.one
@api.depends('seats', 'attendee_ids')
@@ -81,6 +86,26 @@
@@ -82,6 +85,26 @@
}
@api.one
@ -51,8 +50,8 @@ Index: doc-backend/openacademy/course.py
if self.instructor_id and self.instructor_id in self.attendee_ids:
Index: doc-backend/openacademy/views/openacademy.xml
===================================================================
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-22 17:03:34.383106620 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-22 17:03:34.379106620 +0200
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-24 12:17:49.873386903 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-24 12:17:49.869386903 +0200
@@ -120,11 +120,24 @@
</field>
</record>

View File

@ -1,21 +1,15 @@
# HG changeset patch
# Parent a358be0a577b0569831958a8ec1302825c645dee
Index: doc-backend/openacademy/course.py
Index: doc-backend/openacademy/models.py
===================================================================
--- doc-backend.orig/openacademy/course.py 2014-08-22 14:30:38.650769778 +0200
+++ doc-backend/openacademy/course.py 2014-08-22 14:31:17.090771190 +0200
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-from openerp import fields, models
+from openerp import api, fields, models
class Course(models.Model):
_name = 'openacademy.course'
--- doc-backend.orig/openacademy/models.py 2014-08-24 12:09:36.289375479 +0200
+++ doc-backend/openacademy/models.py 2014-08-24 12:09:59.961376027 +0200
@@ -28,3 +28,13 @@
course_id = fields.Many2one('openacademy.course',
ondelete='cascade', string="Course", required=True)
attendee_ids = fields.Many2many('res.partner', string="Attendees")
+
+ taken_seats = fields.Float(string="Taken seats", compute='_taken_seats')
+
+ @api.one
@ -25,11 +19,10 @@ Index: doc-backend/openacademy/course.py
+ self.taken_seats = 0.0
+ else:
+ self.taken_seats = 100.0 * len(self.attendee_ids) / self.seats
+
Index: doc-backend/openacademy/views/openacademy.xml
===================================================================
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-22 14:30:38.650769778 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-22 14:31:42.542772124 +0200
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-24 12:09:36.289375479 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-24 12:09:36.285375479 +0200
@@ -98,6 +98,7 @@
<field name="start_date"/>
<field name="duration"/>

View File

@ -1,24 +1,25 @@
# HG changeset patch
# Parent 7a7d003fe38426a405ce0657a627a139133ec4dd
Index: doc-backend/openacademy/course.py
Index: doc-backend/openacademy/models.py
===================================================================
--- doc-backend.orig/openacademy/course.py 2014-08-22 17:02:00.987103191 +0200
+++ doc-backend/openacademy/course.py 2014-08-22 17:02:00.983103191 +0200
@@ -1,5 +1,5 @@
--- doc-backend.orig/openacademy/models.py 2014-08-24 12:16:56.413385666 +0200
+++ doc-backend/openacademy/models.py 2014-08-24 12:17:11.137386006 +0200
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
-from openerp import api, fields, models
+from openerp import api, fields, models, exceptions
-from openerp import models, fields, api
+from openerp import models, fields, api, exceptions
class Course(models.Model):
_name = 'openacademy.course'
@@ -56,3 +56,9 @@
'message': "Increase seats or remove excess attendees",
},
}
+
+ @api.one
+ @api.constrains('instructor_id', 'attendee_ids')
+ def _check_instructor_not_in_attendees(self):
+ if self.instructor_id and self.instructor_id in self.attendee_ids:
+ raise exceptions.ValidationError("A session's instructor can't be an attendee")
+

View File

@ -1,11 +1,11 @@
# HG changeset patch
# Parent 121bbfe120be3007f5e04611dbc27038abafcce8
Index: doc-backend/openacademy/course.py
Index: doc-backend/openacademy/models.py
===================================================================
--- doc-backend.orig/openacademy/course.py 2014-08-22 17:02:07.363103425 +0200
+++ doc-backend/openacademy/course.py 2014-08-22 17:02:07.359103425 +0200
@@ -13,6 +13,16 @@
--- doc-backend.orig/openacademy/models.py 2014-08-24 12:17:23.789386299 +0200
+++ doc-backend/openacademy/models.py 2014-08-24 12:17:23.785386299 +0200
@@ -14,6 +14,16 @@
'openacademy.session', 'course_id', string="Session")

View File

@ -1,11 +1,11 @@
# HG changeset patch
# Parent 7d14b75cdfd4c7a272a13572947de5d47f3e851f
Index: doc-backend/openacademy/course.py
Index: doc-backend/openacademy/models.py
===================================================================
--- doc-backend.orig/openacademy/course.py 2014-08-21 14:54:08.768549861 +0200
+++ doc-backend/openacademy/course.py 2014-08-21 14:54:08.764549861 +0200
@@ -13,6 +13,20 @@
--- doc-backend.orig/openacademy/models.py 2014-08-24 12:17:34.389386545 +0200
+++ doc-backend/openacademy/models.py 2014-08-24 12:17:34.381386544 +0200
@@ -14,6 +14,20 @@
'openacademy.session', 'course_id', string="Session")

View File

@ -1,24 +1,152 @@
# HG changeset patch
# Parent 0000000000000000000000000000000000000000
diff --git a/openacademy/__init__.py b/openacademy/__init__.py
new file mode 100644
diff --git a/openacademy/__openerp__.py b/openacademy/__openerp__.py
new file mode 100644
--- /dev/null
+++ b/openacademy/__openerp__.py
@@ -0,0 +1,15 @@
Index: doc-backend/openacademy/__openerp__.py
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ doc-backend/openacademy/__openerp__.py 2014-08-24 12:25:18.133397278 +0200
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+{
+ 'name': "Open Academy",
+ 'category': "Test",
+ 'version': '1.0',
+
+ 'summary': """Manage trainings""",
+
+ 'description': """
+ Open Academy module for managing trainings:
+ - training courses
+ - training sessions
+ - attendees registration
+ """,
+
+ 'author': "Your Company",
+ 'website': "http://www.yourcompany.com",
+
+ # Categories can be used to filter modules in modules listing
+ # Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml
+ # for the full list
+ 'category': 'Test',
+ 'version': '0.1',
+
+ # any module necessary for this one to work correctly
+ 'depends': ['base'],
+ 'author': '<insert name here>',
+ 'description' : """
+ Open Academy module for managing trainings:
+ - training courses
+ - training sessions
+ - attendees registration""",
+ 'data' : [
+
+ # always loaded
+ 'data': [
+ # 'security/ir.model.access.csv',
+ 'templates.xml',
+ ],
+ # only loaded in demonstration mode
+ 'demo': [
+ 'demo.xml',
+ ],
+}
Index: doc-backend/openacademy/__init__.py
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ doc-backend/openacademy/__init__.py 2014-08-24 12:25:18.133397278 +0200
@@ -0,0 +1,3 @@
+# -*- coding: utf-8 -*-
+import controllers
+import models
Index: doc-backend/openacademy/controllers.py
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ doc-backend/openacademy/controllers.py 2014-08-24 12:25:18.133397278 +0200
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+from openerp import http
+
+# class Openacademy(http.Controller):
+# @http.route('/openacademy/openacademy/', auth='public')
+# def index(self, **kw):
+# return "Hello, world"
+
+# @http.route('/openacademy/openacademy/objects/', auth='public')
+# def list(self, **kw):
+# return http.request.render('openacademy.listing', {
+# 'root': '/openacademy/openacademy',
+# 'objects': http.request.env['openacademy.openacademy'].search([]),
+# })
+
+# @http.route('/openacademy/openacademy/objects/<model("openacademy.openacademy"):obj>/', auth='public')
+# def object(self, obj, **kw):
+# return http.request.render('openacademy.object', {
+# 'object': obj
+# })
Index: doc-backend/openacademy/demo.xml
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ doc-backend/openacademy/demo.xml 2014-08-24 12:25:18.133397278 +0200
@@ -0,0 +1,25 @@
+<openerp>
+ <data>
+ <!-- -->
+ <!-- <record id="object0" model="openacademy.openacademy"> -->
+ <!-- <field name="name">Object 0</field> -->
+ <!-- </record> -->
+ <!-- -->
+ <!-- <record id="object1" model="openacademy.openacademy"> -->
+ <!-- <field name="name">Object 1</field> -->
+ <!-- </record> -->
+ <!-- -->
+ <!-- <record id="object2" model="openacademy.openacademy"> -->
+ <!-- <field name="name">Object 2</field> -->
+ <!-- </record> -->
+ <!-- -->
+ <!-- <record id="object3" model="openacademy.openacademy"> -->
+ <!-- <field name="name">Object 3</field> -->
+ <!-- </record> -->
+ <!-- -->
+ <!-- <record id="object4" model="openacademy.openacademy"> -->
+ <!-- <field name="name">Object 4</field> -->
+ <!-- </record> -->
+ <!-- -->
+ </data>
+</openerp>
Index: doc-backend/openacademy/models.py
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ doc-backend/openacademy/models.py 2014-08-24 12:25:18.133397278 +0200
@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+
+from openerp import models, fields, api
+
+# class openacademy(models.Model):
+# _name = 'openacademy.openacademy'
+
+# name = fields.Char()
Index: doc-backend/openacademy/security/ir.model.access.csv
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ doc-backend/openacademy/security/ir.model.access.csv 2014-08-24 12:25:30.941397574 +0200
@@ -0,0 +1,2 @@
+id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
+access_openacademy_openacademy,openacademy.openacademy,model_openacademy_openacademy,,1,0,0,0
Index: doc-backend/openacademy/templates.xml
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ doc-backend/openacademy/templates.xml 2014-08-24 12:25:18.137397278 +0200
@@ -0,0 +1,22 @@
+<openerp>
+ <data>
+ <!-- <template id="listing"> -->
+ <!-- <ul> -->
+ <!-- <li t-foreach="objects" t-as="object"> -->
+ <!-- <a t-attf-href="#{ root }/objects/#{ object.id }"> -->
+ <!-- <t t-esc="object.display_name"/> -->
+ <!-- </a> -->
+ <!-- </li> -->
+ <!-- </ul> -->
+ <!-- </template> -->
+ <!-- <template id="object"> -->
+ <!-- <h1><t t-esc="object.display_name"/></h1> -->
+ <!-- <dl> -->
+ <!-- <t t-foreach="object._fields" t-as="field"> -->
+ <!-- <dt><t t-esc="field"/></dt> -->
+ <!-- <dd><t t-esc="object[field]"/></dd> -->
+ <!-- </t> -->
+ <!-- </dl> -->
+ <!-- </template> -->
+ </data>
+</openerp>

View File

@ -1,93 +1,94 @@
# HG changeset patch
# Parent 643813940cbea07bec792f9e1c60022a9292fa90
diff --git a/openacademy/__openerp__.py b/openacademy/__openerp__.py
--- a/openacademy/__openerp__.py
+++ b/openacademy/__openerp__.py
@@ -3,7 +3,7 @@
'name': "Open Academy",
'category': "Test",
'version': '1.0',
Index: doc-backend/openacademy/__openerp__.py
===================================================================
--- doc-backend.orig/openacademy/__openerp__.py 2014-08-24 12:31:00.385405199 +0200
+++ doc-backend/openacademy/__openerp__.py 2014-08-24 12:31:45.373406240 +0200
@@ -21,7 +21,7 @@
'version': '0.1',
# any module necessary for this one to work correctly
- 'depends': ['base'],
+ 'depends': ['base', 'board'],
'author': '<insert name here>',
'description' : """
Open Academy module for managing trainings:
@@ -17,6 +17,7 @@
# always loaded
'data': [
@@ -31,6 +31,7 @@
'views/openacademy.xml',
'views/partner.xml',
'views/session_workflow.xml',
'reports.xml',
+ 'views/session_board.xml',
'reports.xml',
],
'demo': [
'demo.xml',
diff --git a/openacademy/views/session_board.xml b/openacademy/views/session_board.xml
new file mode 100644
--- /dev/null
+++ b/openacademy/views/session_board.xml
# only loaded in demonstration mode
Index: doc-backend/openacademy/views/session_board.xml
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ doc-backend/openacademy/views/session_board.xml 2014-08-24 12:33:16.077408340 +0200
@@ -0,0 +1,65 @@
+<?xml version="1.0"?>
+<openerp>
+ <data>
+ <record model="ir.actions.act_window" id="act_session_graph">
+ <field name="res_model">openacademy.session</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">graph</field>
+ <field name="view_id"
+ ref="openacademy.openacademy_session_graph_view"/>
+ </record>
+ <record model="ir.actions.act_window" id="act_session_calendar">
+ <field name="res_model">openacademy.session</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">calendar</field>
+ <field name="view_id" ref="openacademy.session_calendar_view"/>
+ </record>
+ <record model="ir.actions.act_window" id="act_course_list">
+ <field name="res_model">openacademy.course</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">tree,form</field>
+ </record>
+ <record model="ir.ui.view" id="board_session_form">
+ <field name="name">Session Dashboard Form</field>
+ <field name="model">board.board</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <form string="Session Dashboard">
+ <board style="2-1">
+ <column>
+ <action
+ string="Attendees by course"
+ name="%(act_session_graph)d"
+ colspan="4"
+ height="150"
+ width="510"/>
+ <action
+ string="Sessions"
+ name="%(act_session_calendar)d"
+ colspan="4"/>
+ </column>
+ <column>
+ <action
+ string="Courses"
+ name="%(act_course_list)d" colspan="4"/>
+ </column>
+ </board>
+ </form>
+ </field>
+ </record>
+ <record model="ir.actions.act_window" id="open_board_session">
+ <field name="name">Session Dashboard</field>
+ <field name="res_model">board.board</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">form</field>
+ <field name="usage">menu</field>
+ <field name="view_id" ref="board_session_form"/>
+ </record>
+ <data>
+ <record model="ir.actions.act_window" id="act_session_graph">
+ <field name="res_model">openacademy.session</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">graph</field>
+ <field name="view_id"
+ ref="openacademy.openacademy_session_graph_view"/>
+ </record>
+ <record model="ir.actions.act_window" id="act_session_calendar">
+ <field name="res_model">openacademy.session</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">calendar</field>
+ <field name="view_id" ref="openacademy.session_calendar_view"/>
+ </record>
+ <record model="ir.actions.act_window" id="act_course_list">
+ <field name="res_model">openacademy.course</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">tree,form</field>
+ </record>
+ <record model="ir.ui.view" id="board_session_form">
+ <field name="name">Session Dashboard Form</field>
+ <field name="model">board.board</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <form string="Session Dashboard">
+ <board style="2-1">
+ <column>
+ <action
+ string="Attendees by course"
+ name="%(act_session_graph)d"
+ colspan="4"
+ height="150"
+ width="510"/>
+ <action
+ string="Sessions"
+ name="%(act_session_calendar)d"
+ colspan="4"/>
+ </column>
+ <column>
+ <action
+ string="Courses"
+ name="%(act_course_list)d" colspan="4"/>
+ </column>
+ </board>
+ </form>
+ </field>
+ </record>
+ <record model="ir.actions.act_window" id="open_board_session">
+ <field name="name">Session Dashboard</field>
+ <field name="res_model">board.board</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">form</field>
+ <field name="usage">menu</field>
+ <field name="view_id" ref="board_session_form"/>
+ </record>
+
+ <menuitem
+ name="Session Dashboard" parent="base.menu_reporting_dashboard"
+ action="open_board_session"
+ sequence="1"
+ id="menu_board_session" icon="terp-graph"/>
+ </data>
+ <menuitem
+ name="Session Dashboard" parent="base.menu_reporting_dashboard"
+ action="open_board_session"
+ sequence="1"
+ id="menu_board_session" icon="terp-graph"/>
+ </data>
+</openerp>

View File

@ -1,8 +1,8 @@
Index: doc-backend/openacademy/course.py
Index: doc-backend/openacademy/models.py
===================================================================
--- doc-backend.orig/openacademy/course.py 2014-08-22 16:57:00.727092169 +0200
+++ doc-backend/openacademy/course.py 2014-08-22 17:01:08.975101282 +0200
@@ -17,9 +17,10 @@
--- doc-backend.orig/openacademy/models.py 2014-08-24 12:10:34.701376831 +0200
+++ doc-backend/openacademy/models.py 2014-08-24 12:10:34.693376831 +0200
@@ -18,9 +18,10 @@
_name = 'openacademy.session'
name = fields.Char(required=True)
@ -16,8 +16,8 @@ Index: doc-backend/openacademy/course.py
domain=['|', ('instructor', '=', True),
Index: doc-backend/openacademy/views/openacademy.xml
===================================================================
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-22 16:57:00.731092169 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-22 17:01:15.307101514 +0200
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-24 12:10:34.701376831 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-24 12:10:34.693376831 +0200
@@ -92,6 +92,7 @@
<field name="course_id"/>
<field name="name"/>

View File

@ -1,25 +1,34 @@
# HG changeset patch
# Parent 84e2b0b43fc61fd0bcbb44c1929755d44ee58ae5
Index: doc-backend/openacademy/__openerp__.py
===================================================================
--- doc-backend.orig/openacademy/__openerp__.py 2014-08-21 15:18:40.892603902 +0200
+++ doc-backend/openacademy/__openerp__.py 2014-08-21 15:18:40.884603902 +0200
@@ -12,4 +12,7 @@
- attendees registration""",
'data' : [
],
+ 'demo': [
+ 'demo.xml',
+ ],
}
Index: doc-backend/openacademy/demo.xml
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ doc-backend/openacademy/demo.xml 2014-08-21 15:19:26.200605566 +0200
@@ -0,0 +1,19 @@
+<openerp>
+ <data>
--- doc-backend.orig/openacademy/demo.xml 2014-08-24 11:58:31.673360097 +0200
+++ doc-backend/openacademy/demo.xml 2014-08-24 11:58:49.353360506 +0200
@@ -1,25 +1,19 @@
<openerp>
<data>
- <!-- -->
- <!-- <record id="object0" model="openacademy.openacademy"> -->
- <!-- <field name="name">Object 0</field> -->
- <!-- </record> -->
- <!-- -->
- <!-- <record id="object1" model="openacademy.openacademy"> -->
- <!-- <field name="name">Object 1</field> -->
- <!-- </record> -->
- <!-- -->
- <!-- <record id="object2" model="openacademy.openacademy"> -->
- <!-- <field name="name">Object 2</field> -->
- <!-- </record> -->
- <!-- -->
- <!-- <record id="object3" model="openacademy.openacademy"> -->
- <!-- <field name="name">Object 3</field> -->
- <!-- </record> -->
- <!-- -->
- <!-- <record id="object4" model="openacademy.openacademy"> -->
- <!-- <field name="name">Object 4</field> -->
- <!-- </record> -->
- <!-- -->
+ <record model="openacademy.course" id="course0">
+ <field name="name">Course 0</field>
+ <field name="description">Course 0's description
@ -35,5 +44,5 @@ Index: doc-backend/openacademy/demo.xml
+ <field name="name">Course 2</field>
+ <field name="description">Course 2's description</field>
+ </record>
+ </data>
+</openerp>
</data>
</openerp>

View File

@ -1,11 +1,11 @@
# HG changeset patch
# Parent 69d1f2d359eb8ef304a9d99f17790c78b35eda1a
Index: doc-backend/openacademy/course.py
Index: doc-backend/openacademy/models.py
===================================================================
--- doc-backend.orig/openacademy/course.py 2014-08-21 15:15:20.040596529 +0200
+++ doc-backend/openacademy/course.py 2014-08-21 15:15:20.032596529 +0200
@@ -22,7 +22,8 @@
--- doc-backend.orig/openacademy/models.py 2014-08-24 12:08:53.465374488 +0200
+++ doc-backend/openacademy/models.py 2014-08-24 12:08:53.461374488 +0200
@@ -23,7 +23,8 @@
seats = fields.Integer(string="Number of seats")
instructor_id = fields.Many2one('res.partner', string="Instructor",
@ -17,8 +17,8 @@ Index: doc-backend/openacademy/course.py
attendee_ids = fields.Many2many('res.partner', string="Attendees")
Index: doc-backend/openacademy/views/partner.xml
===================================================================
--- doc-backend.orig/openacademy/views/partner.xml 2014-08-21 15:15:20.040596529 +0200
+++ doc-backend/openacademy/views/partner.xml 2014-08-21 15:16:18.112598661 +0200
--- doc-backend.orig/openacademy/views/partner.xml 2014-08-24 12:08:53.465374488 +0200
+++ doc-backend/openacademy/views/partner.xml 2014-08-24 12:08:53.461374488 +0200
@@ -24,5 +24,21 @@
<menuitem id="contact_menu" name="Contacts"
parent="configuration_menu"

View File

@ -1,11 +1,11 @@
# HG changeset patch
# Parent 142c5065ff1b7266d944d4ef5239e814ae22f0df
Index: doc-backend/openacademy/course.py
Index: doc-backend/openacademy/models.py
===================================================================
--- doc-backend.orig/openacademy/course.py 2014-08-21 14:47:27.140535117 +0200
+++ doc-backend/openacademy/course.py 2014-08-21 14:47:55.420536155 +0200
@@ -21,7 +21,8 @@
--- doc-backend.orig/openacademy/models.py 2014-08-24 12:08:29.373373930 +0200
+++ doc-backend/openacademy/models.py 2014-08-24 12:08:29.369373930 +0200
@@ -22,7 +22,8 @@
duration = fields.Float(digits=(6, 2), help="Duration in days")
seats = fields.Integer(string="Number of seats")

View File

@ -1,9 +1,10 @@
# HG changeset patch
# Parent 4a0db1d29257764f4df5cb1ee0be7e59e8c8d0d8
diff --git a/openacademy/views/openacademy.xml b/openacademy/views/openacademy.xml
--- a/openacademy/views/openacademy.xml
+++ b/openacademy/views/openacademy.xml
Index: doc-backend/openacademy/views/openacademy.xml
===================================================================
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-24 12:02:49.677366068 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-24 12:02:49.669366068 +0200
@@ -1,6 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>

View File

@ -1,9 +1,10 @@
# HG changeset patch
# Parent 5508a5440faa7b607d057c4e4ae70af6b6f7cac9
diff --git a/openacademy/views/openacademy.xml b/openacademy/views/openacademy.xml
--- a/openacademy/views/openacademy.xml
+++ b/openacademy/views/openacademy.xml
Index: doc-backend/openacademy/views/openacademy.xml
===================================================================
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-24 12:03:02.649366368 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-24 12:03:02.645366368 +0200
@@ -9,7 +9,14 @@
<sheet>
<group>

View File

@ -1,11 +1,11 @@
# HG changeset patch
# Parent dba00a105dd2a82490394b8dec5fea5f1d8847e1
Index: doc-backend/openacademy/course.py
Index: doc-backend/openacademy/models.py
===================================================================
--- doc-backend.orig/openacademy/course.py 2014-08-22 17:03:44.939107007 +0200
+++ doc-backend/openacademy/course.py 2014-08-22 17:03:44.931107007 +0200
@@ -60,6 +60,9 @@
--- doc-backend.orig/openacademy/models.py 2014-08-24 12:18:54.645388402 +0200
+++ doc-backend/openacademy/models.py 2014-08-24 12:18:54.641388402 +0200
@@ -59,6 +59,9 @@
end_date = fields.Date(string="End Date", store=True,
compute='_get_end_date', inverse='_set_end_date')
@ -15,7 +15,7 @@ Index: doc-backend/openacademy/course.py
@api.one
@api.depends('seats', 'attendee_ids')
def _taken_seats(self):
@@ -106,6 +109,15 @@
@@ -105,6 +108,15 @@
self.duration = (end_date - start_date).days
@api.one
@ -33,8 +33,8 @@ Index: doc-backend/openacademy/course.py
if self.instructor_id and self.instructor_id in self.attendee_ids:
Index: doc-backend/openacademy/views/openacademy.xml
===================================================================
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-22 17:03:44.939107007 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-22 17:03:44.931107007 +0200
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-24 12:18:54.645388402 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-24 12:18:54.641388402 +0200
@@ -137,11 +137,24 @@
</field>
</record>

View File

@ -1,11 +1,11 @@
# HG changeset patch
# Parent a6fe4d3923db1f8f5dff2c39a711a814b0a0f549
Index: doc-backend/openacademy/course.py
Index: doc-backend/openacademy/models.py
===================================================================
--- doc-backend.orig/openacademy/course.py 2014-08-22 17:03:48.511107138 +0200
+++ doc-backend/openacademy/course.py 2014-08-22 17:03:48.507107138 +0200
@@ -63,6 +63,9 @@
--- doc-backend.orig/openacademy/models.py 2014-08-24 12:19:27.701389167 +0200
+++ doc-backend/openacademy/models.py 2014-08-24 12:19:27.697389167 +0200
@@ -62,6 +62,9 @@
hours = fields.Float(string="Duration in hours",
compute='_get_hours', inverse='_set_hours')
@ -15,7 +15,7 @@ Index: doc-backend/openacademy/course.py
@api.one
@api.depends('seats', 'attendee_ids')
def _taken_seats(self):
@@ -118,6 +121,11 @@
@@ -117,6 +120,11 @@
self.duration = self.hours / 24
@api.one
@ -29,8 +29,8 @@ Index: doc-backend/openacademy/course.py
if self.instructor_id and self.instructor_id in self.attendee_ids:
Index: doc-backend/openacademy/views/openacademy.xml
===================================================================
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-22 17:03:48.511107138 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-22 17:03:48.507107138 +0200
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-24 12:19:27.701389167 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-24 12:19:27.697389167 +0200
@@ -150,11 +150,22 @@
</field>
</record>

View File

@ -1,11 +1,11 @@
# HG changeset patch
# Parent 8d66f7620781558d4520f97e4cebc14ed180683e
Index: doc-backend/openacademy/course.py
Index: doc-backend/openacademy/models.py
===================================================================
--- doc-backend.orig/openacademy/course.py 2014-08-22 17:03:55.463107394 +0200
+++ doc-backend/openacademy/course.py 2014-08-22 17:03:55.459107393 +0200
@@ -48,6 +48,7 @@
--- doc-backend.orig/openacademy/models.py 2014-08-24 12:20:07.801390095 +0200
+++ doc-backend/openacademy/models.py 2014-08-24 12:20:07.793390095 +0200
@@ -47,6 +47,7 @@
duration = fields.Float(digits=(6, 2), help="Duration in days")
seats = fields.Integer(string="Number of seats")
active = fields.Boolean(default=True)
@ -15,8 +15,8 @@ Index: doc-backend/openacademy/course.py
domain=['|', ('instructor', '=', True),
Index: doc-backend/openacademy/views/openacademy.xml
===================================================================
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-22 17:03:55.463107394 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-22 17:03:55.459107393 +0200
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-24 12:20:07.801390095 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-24 12:20:07.793390095 +0200
@@ -161,11 +161,57 @@
</field>
</record>

View File

@ -1,10 +1,9 @@
Index: doc-backend/openacademy/course.py
Index: doc-backend/openacademy/models.py
===================================================================
--- doc-backend.orig/openacademy/course.py 2014-08-21 14:42:26.508524081 +0200
+++ doc-backend/openacademy/course.py 2014-08-21 14:42:54.712525116 +0200
@@ -24,4 +24,5 @@
--- doc-backend.orig/openacademy/models.py 2014-08-24 12:06:18.941370912 +0200
+++ doc-backend/openacademy/models.py 2014-08-24 12:06:28.885371142 +0200
@@ -25,3 +25,4 @@
instructor_id = fields.Many2one('res.partner', string="Instructor")
course_id = fields.Many2one('openacademy.course',
ondelete='cascade', string="Course", required=True)
+ attendee_ids = fields.Many2many('res.partner', string="Attendees")

View File

@ -1,11 +1,11 @@
# HG changeset patch
# Parent a6e217b1fbbc64111581c269629b1c25c23abb99
Index: doc-backend/openacademy/course.py
Index: doc-backend/openacademy/models.py
===================================================================
--- doc-backend.orig/openacademy/course.py 2014-08-21 14:24:24.376484356 +0200
+++ doc-backend/openacademy/course.py 2014-08-21 14:26:35.040489152 +0200
@@ -7,6 +7,9 @@
--- doc-backend.orig/openacademy/models.py 2014-08-24 12:04:40.829368641 +0200
+++ doc-backend/openacademy/models.py 2014-08-24 12:04:57.509369027 +0200
@@ -8,6 +8,9 @@
name = fields.Char(string="Title", required=True)
description = fields.Text()
@ -16,17 +16,17 @@ Index: doc-backend/openacademy/course.py
class Session(models.Model):
_name = 'openacademy.session'
@@ -16,3 +19,7 @@
start_date = fields.Date()
duration = fields.Float(digits=(6, 2), help="Duration in days")
seats = fields.Integer(string="Number of seats")
+
+ instructor_id = fields.Many2one('res.partner', string="Instructor")
+ course_id = fields.Many2one('openacademy.course',
+ ondelete='cascade', string="Course", required=True)
+
Index: doc-backend/openacademy/views/openacademy.xml
===================================================================
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-21 14:24:24.376484356 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-21 14:25:48.000000000 +0200
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-24 12:04:40.829368641 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-24 12:04:40.825368641 +0200
@@ -63,5 +63,16 @@
<!-- Full id location:
action="openacademy.course_list_action"

View File

@ -1,20 +1,18 @@
# HG changeset patch
# Parent e3bb12713a6d38c28f50d46e8c1bab74ac40c1be
diff -r e3bb12713a6d -r 7929aa014c78 openacademy/__init__.py
--- a/openacademy/__init__.py Thu Aug 07 11:50:29 2014 +0200
+++ b/openacademy/__init__.py Thu Aug 07 12:06:41 2014 +0200
@@ -0,0 +1,1 @@
+import course
diff -r e3bb12713a6d -r 7929aa014c78 openacademy/course.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/openacademy/course.py Thu Aug 07 12:06:41 2014 +0200
@@ -0,0 +1,9 @@
+# -*- coding: utf-8 -*-
+from openerp import fields, models
+
Index: doc-backend/openacademy/models.py
===================================================================
--- doc-backend.orig/openacademy/models.py 2014-08-24 11:54:02.949353877 +0200
+++ doc-backend/openacademy/models.py 2014-08-24 11:54:26.153354414 +0200
@@ -2,7 +2,8 @@
from openerp import models, fields, api
-# class openacademy(models.Model):
-# _name = 'openacademy.openacademy'
+class Course(models.Model):
+ _name = 'openacademy.course'
+
-# name = fields.Char()
+ name = fields.Char(string="Title", required=True)
+ description = fields.Text()
+

View File

@ -3,27 +3,29 @@
Index: doc-backend/openacademy/__init__.py
===================================================================
--- doc-backend.orig/openacademy/__init__.py 2014-08-21 15:13:13.756591893 +0200
+++ doc-backend/openacademy/__init__.py 2014-08-21 15:13:13.748591893 +0200
@@ -1 +1,2 @@
--- doc-backend.orig/openacademy/__init__.py 2014-08-24 12:07:13.669372178 +0200
+++ doc-backend/openacademy/__init__.py 2014-08-24 12:07:30.697372572 +0200
@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
import controllers
import models
+import partner
import course
Index: doc-backend/openacademy/__openerp__.py
===================================================================
--- doc-backend.orig/openacademy/__openerp__.py 2014-08-21 15:13:13.756591893 +0200
+++ doc-backend/openacademy/__openerp__.py 2014-08-21 15:13:13.748591893 +0200
@@ -12,6 +12,7 @@
- attendees registration""",
'data' : [
--- doc-backend.orig/openacademy/__openerp__.py 2014-08-24 12:07:13.669372178 +0200
+++ doc-backend/openacademy/__openerp__.py 2014-08-24 12:07:13.661372178 +0200
@@ -28,6 +28,7 @@
# 'security/ir.model.access.csv',
'templates.xml',
'views/openacademy.xml',
+ 'views/partner.xml',
],
# only loaded in demonstration mode
'demo': [
'demo.xml',
Index: doc-backend/openacademy/partner.py
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ doc-backend/openacademy/partner.py 2014-08-21 15:13:13.748591893 +0200
+++ doc-backend/openacademy/partner.py 2014-08-24 12:07:13.661372178 +0200
@@ -0,0 +1,11 @@
+# -*- coding: utf-8 -*-
+from openerp import fields, models
@ -39,7 +41,7 @@ Index: doc-backend/openacademy/partner.py
Index: doc-backend/openacademy/views/partner.xml
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ doc-backend/openacademy/views/partner.xml 2014-08-21 15:13:26.748592370 +0200
+++ doc-backend/openacademy/views/partner.xml 2014-08-24 12:07:13.661372178 +0200
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <openerp>

View File

@ -3,8 +3,8 @@
Index: doc-backend/openacademy/views/openacademy.xml
===================================================================
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-21 14:43:18.968526007 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-21 14:45:10.264530092 +0200
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-24 12:07:04.877371975 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-24 12:07:04.869371975 +0200
@@ -19,12 +19,18 @@
<sheet>
<group>

View File

@ -1,14 +1,15 @@
# HG changeset patch
# Parent 8d5573b704b2867788dd6895503f1871c2976a29
Index: doc-backend/openacademy/course.py
Index: doc-backend/openacademy/models.py
===================================================================
--- doc-backend.orig/openacademy/course.py 2014-08-22 17:01:50.147102793 +0200
+++ doc-backend/openacademy/course.py 2014-08-22 17:01:50.139102793 +0200
--- doc-backend.orig/openacademy/models.py 2014-08-24 12:12:01.933378850 +0200
+++ doc-backend/openacademy/models.py 2014-08-24 12:12:15.065379154 +0200
@@ -39,3 +39,20 @@
self.taken_seats = 0.0
else:
self.taken_seats = 100.0 * len(self.attendee_ids) / self.seats
+
+ @api.onchange('seats', 'attendee_ids')
+ def _verify_valid_seats(self):
+ if self.seats < 0:
@ -25,4 +26,3 @@ Index: doc-backend/openacademy/course.py
+ 'message': "Increase seats or remove excess attendees",
+ },
+ }
+

View File

@ -1,11 +1,11 @@
# HG changeset patch
# Parent cb05882d4fe73e97b9d34a69190ced14d1a50c24
Index: doc-backend/openacademy/course.py
Index: doc-backend/openacademy/models.py
===================================================================
--- doc-backend.orig/openacademy/course.py 2014-08-21 14:27:15.108490623 +0200
+++ doc-backend/openacademy/course.py 2014-08-21 14:27:37.860491458 +0200
@@ -9,6 +9,8 @@
--- doc-backend.orig/openacademy/models.py 2014-08-24 12:05:31.001369802 +0200
+++ doc-backend/openacademy/models.py 2014-08-24 12:05:30.997369802 +0200
@@ -10,6 +10,8 @@
responsible_id = fields.Many2one('res.users',
ondelete='set null', string="Responsible", index=True)

View File

@ -1,47 +1,50 @@
# HG changeset patch
# Parent c140f0a861a08881d8737bca0ffb83904a2059a3
diff --git a/openacademy/__openerp__.py b/openacademy/__openerp__.py
--- a/openacademy/__openerp__.py
+++ b/openacademy/__openerp__.py
@@ -16,6 +16,7 @@
Index: doc-backend/openacademy/__openerp__.py
===================================================================
--- doc-backend.orig/openacademy/__openerp__.py 2014-08-24 12:28:46.485402100 +0200
+++ doc-backend/openacademy/__openerp__.py 2014-08-24 12:28:46.477402100 +0200
@@ -31,6 +31,7 @@
'views/openacademy.xml',
'views/partner.xml',
'views/session_workflow.xml',
+ 'reports.xml',
],
# only loaded in demonstration mode
'demo': [
'demo.xml',
diff --git a/openacademy/reports.xml b/openacademy/reports.xml
new file mode 100644
--- /dev/null
+++ b/openacademy/reports.xml
@@ -0,0 +1,28 @@
+<openerp><data>
+ <report
+ id="report_session"
+ model="openacademy.session"
+ string="Session Report"
+ name="openacademy.report_session_view"
+ file="openacademy.report_session"
+ report_type="qweb-pdf" />
Index: doc-backend/openacademy/reports.xml
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ doc-backend/openacademy/reports.xml 2014-08-24 12:30:37.161404662 +0200
@@ -0,0 +1,30 @@
+<openerp>
+<data>
+ <report
+ id="report_session"
+ model="openacademy.session"
+ string="Session Report"
+ name="openacademy.report_session_view"
+ file="openacademy.report_session"
+ report_type="qweb-pdf" />
+
+ <template id="report_session_view">
+ <t t-call="report.html_container">
+ <t t-foreach="docs" t-as="doc">
+ <t t-call="report.external_layout">
+ <div class="page">
+ <h2 t-field="doc.name"/>
+ <p>From <span t-field="doc.start_date"/> to <span t-field="doc.end_date"/></p>
+ <h3>Attendees:</h3>
+ <ul>
+ <t t-foreach="doc.attendee_ids" t-as="attendee">
+ <li t-field="attendee.name"/>
+ </t>
+ </ul>
+ </div>
+ <template id="report_session_view">
+ <t t-call="report.html_container">
+ <t t-foreach="docs" t-as="doc">
+ <t t-call="report.external_layout">
+ <div class="page">
+ <h2 t-field="doc.name"/>
+ <p>From <span t-field="doc.start_date"/> to <span t-field="doc.end_date"/></p>
+ <h3>Attendees:</h3>
+ <ul>
+ <t t-foreach="doc.attendee_ids" t-as="attendee">
+ <li t-field="attendee.name"/>
+ </t>
+ </ul>
+ </div>
+ </t>
+ </t>
+ </t>
+ </t>
+ </t>
+ </template>
+</data></openerp>
+ </template>
+</data>
+</openerp>

View File

@ -1,8 +1,9 @@
# HG changeset patch
# Parent b9bfc8929e0ffc3eb153641e14952fe5d99eb908
diff -r b9bfc8929e0f -r cf2bf8f8490a openacademy/views/openacademy.xml
--- a/openacademy/views/openacademy.xml Thu Aug 07 16:51:23 2014 +0200
+++ b/openacademy/views/openacademy.xml Mon Aug 11 13:05:29 2014 +0200
Index: doc-backend/openacademy/views/openacademy.xml
===================================================================
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-24 12:03:05.745366440 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-24 12:03:05.741366440 +0200
@@ -1,6 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>

View File

@ -1,13 +1,14 @@
# HG changeset patch
# Parent 22f8d180a7f9ad209d7e98cf7d1bd0fee1f05350
Index: doc-backend/openacademy/course.py
Index: doc-backend/openacademy/models.py
===================================================================
--- doc-backend.orig/openacademy/course.py 2014-08-21 14:23:28.056482288 +0200
+++ doc-backend/openacademy/course.py 2014-08-21 14:23:35.540482563 +0200
--- doc-backend.orig/openacademy/models.py 2014-08-24 12:03:20.161366774 +0200
+++ doc-backend/openacademy/models.py 2014-08-24 12:03:35.149367121 +0200
@@ -7,3 +7,12 @@
name = fields.Char(string="Title", required=True)
description = fields.Text()
+
+
+class Session(models.Model):
+ _name = 'openacademy.session'
@ -16,4 +17,3 @@ Index: doc-backend/openacademy/course.py
+ start_date = fields.Date()
+ duration = fields.Float(digits=(6, 2), help="Duration in days")
+ seats = fields.Integer(string="Number of seats")
+

View File

@ -1,11 +1,11 @@
# HG changeset patch
# Parent 8c721171aa16a41e94059f53d6780c67b5ef2dfc
Index: doc-backend/openacademy/course.py
Index: doc-backend/openacademy/models.py
===================================================================
--- doc-backend.orig/openacademy/course.py 2014-08-22 17:04:08.103107858 +0200
+++ doc-backend/openacademy/course.py 2014-08-22 17:04:08.099107857 +0200
@@ -67,6 +67,24 @@
--- doc-backend.orig/openacademy/models.py 2014-08-24 12:20:31.953390654 +0200
+++ doc-backend/openacademy/models.py 2014-08-24 12:20:31.949390654 +0200
@@ -66,6 +66,24 @@
attendees_count = fields.Integer(
string="Attendees count", compute='_get_attendees_count', store=True)
@ -32,8 +32,8 @@ Index: doc-backend/openacademy/course.py
def _taken_seats(self):
Index: doc-backend/openacademy/views/openacademy.xml
===================================================================
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-22 17:04:08.103107858 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-22 17:04:30.939108696 +0200
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-24 12:20:31.953390654 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-24 12:20:31.949390654 +0200
@@ -91,22 +91,37 @@
<field name="model">openacademy.session</field>
<field name="arch" type="xml">

View File

@ -3,21 +3,21 @@
Index: doc-backend/openacademy/__openerp__.py
===================================================================
--- doc-backend.orig/openacademy/__openerp__.py 2014-08-21 15:03:56.760571446 +0200
+++ doc-backend/openacademy/__openerp__.py 2014-08-21 15:03:56.756571446 +0200
@@ -13,6 +13,7 @@
'data' : [
--- doc-backend.orig/openacademy/__openerp__.py 2014-08-24 12:34:54.425410616 +0200
+++ doc-backend/openacademy/__openerp__.py 2014-08-24 12:34:54.417410616 +0200
@@ -29,6 +29,7 @@
'templates.xml',
'views/openacademy.xml',
'views/partner.xml',
+ 'views/session_workflow.xml',
],
# only loaded in demonstration mode
'demo': [
'demo.xml',
Index: doc-backend/openacademy/course.py
Index: doc-backend/openacademy/models.py
===================================================================
--- doc-backend.orig/openacademy/course.py 2014-08-21 15:03:56.760571446 +0200
+++ doc-backend/openacademy/course.py 2014-08-21 15:03:56.756571446 +0200
@@ -71,7 +71,7 @@
--- doc-backend.orig/openacademy/models.py 2014-08-24 12:34:54.425410616 +0200
+++ doc-backend/openacademy/models.py 2014-08-24 12:34:54.417410616 +0200
@@ -70,7 +70,7 @@
('draft', "Draft"),
('confirmed', "Confirmed"),
('done', "Done"),
@ -28,8 +28,8 @@ Index: doc-backend/openacademy/course.py
def action_draft(self):
Index: doc-backend/openacademy/views/openacademy.xml
===================================================================
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-21 15:03:56.760571446 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-21 15:03:56.756571446 +0200
--- doc-backend.orig/openacademy/views/openacademy.xml 2014-08-24 12:34:54.425410616 +0200
+++ doc-backend/openacademy/views/openacademy.xml 2014-08-24 12:34:54.417410616 +0200
@@ -92,13 +92,13 @@
<field name="arch" type="xml">
<form string="Session Form">
@ -50,56 +50,56 @@ Index: doc-backend/openacademy/views/openacademy.xml
Index: doc-backend/openacademy/views/session_workflow.xml
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ doc-backend/openacademy/views/session_workflow.xml 2014-08-21 15:03:56.756571446 +0200
+++ doc-backend/openacademy/views/session_workflow.xml 2014-08-24 12:35:14.105411072 +0200
@@ -0,0 +1,51 @@
+<openerp>
+ <data>
+ <record model="workflow" id="wkf_session">
+ <field name="name">OpenAcademy sessions workflow</field>
+ <field name="osv">openacademy.session</field>
+ <field name="on_create">True</field>
+ </record>
+ <data>
+ <record model="workflow" id="wkf_session">
+ <field name="name">OpenAcademy sessions workflow</field>
+ <field name="osv">openacademy.session</field>
+ <field name="on_create">True</field>
+ </record>
+
+ <record model="workflow.activity" id="draft">
+ <field name="name">Draft</field>
+ <field name="wkf_id" ref="wkf_session"/>
+ <field name="flow_start" eval="True"/>
+ <field name="kind">function</field>
+ <field name="action">action_draft()</field>
+ </record>
+ <record model="workflow.activity" id="confirmed">
+ <field name="name">Confirmed</field>
+ <field name="wkf_id" ref="wkf_session"/>
+ <field name="kind">function</field>
+ <field name="action">action_confirm()</field>
+ </record>
+ <record model="workflow.activity" id="done">
+ <field name="name">Done</field>
+ <field name="wkf_id" ref="wkf_session"/>
+ <field name="flow_stop" eval="True"/>
+ <field name="kind">function</field>
+ <field name="action">action_done()</field>
+ </record>
+ <record model="workflow.activity" id="draft">
+ <field name="name">Draft</field>
+ <field name="wkf_id" ref="wkf_session"/>
+ <field name="flow_start" eval="True"/>
+ <field name="kind">function</field>
+ <field name="action">action_draft()</field>
+ </record>
+ <record model="workflow.activity" id="confirmed">
+ <field name="name">Confirmed</field>
+ <field name="wkf_id" ref="wkf_session"/>
+ <field name="kind">function</field>
+ <field name="action">action_confirm()</field>
+ </record>
+ <record model="workflow.activity" id="done">
+ <field name="name">Done</field>
+ <field name="wkf_id" ref="wkf_session"/>
+ <field name="flow_stop" eval="True"/>
+ <field name="kind">function</field>
+ <field name="action">action_done()</field>
+ </record>
+
+ <record model="workflow.transition" id="session_draft_to_confirmed">
+ <field name="act_from" ref="draft"/>
+ <field name="act_to" ref="confirmed"/>
+ <field name="signal">confirm</field>
+ </record>
+ <record model="workflow.transition" id="session_confirmed_to_draft">
+ <field name="act_from" ref="confirmed"/>
+ <field name="act_to" ref="draft"/>
+ <field name="signal">draft</field>
+ </record>
+ <record model="workflow.transition" id="session_done_to_draft">
+ <field name="act_from" ref="done"/>
+ <field name="act_to" ref="draft"/>
+ <field name="signal">draft</field>
+ </record>
+ <record model="workflow.transition" id="session_confirmed_to_done">
+ <field name="act_from" ref="confirmed"/>
+ <field name="act_to" ref="done"/>
+ <field name="signal">done</field>
+ </record>
+ </data>
+ <record model="workflow.transition" id="session_draft_to_confirmed">
+ <field name="act_from" ref="draft"/>
+ <field name="act_to" ref="confirmed"/>
+ <field name="signal">confirm</field>
+ </record>
+ <record model="workflow.transition" id="session_confirmed_to_draft">
+ <field name="act_from" ref="confirmed"/>
+ <field name="act_to" ref="draft"/>
+ <field name="signal">draft</field>
+ </record>
+ <record model="workflow.transition" id="session_done_to_draft">
+ <field name="act_from" ref="done"/>
+ <field name="act_to" ref="draft"/>
+ <field name="signal">draft</field>
+ </record>
+ <record model="workflow.transition" id="session_confirmed_to_done">
+ <field name="act_from" ref="confirmed"/>
+ <field name="act_to" ref="done"/>
+ <field name="signal">done</field>
+ </record>
+ </data>
+</openerp>

View File

@ -1,11 +1,11 @@
# HG changeset patch
# Parent 0764cf061d021a0a5b2811f5ec5d835f799630fc
Index: doc-backend/openacademy/course.py
Index: doc-backend/openacademy/models.py
===================================================================
--- doc-backend.orig/openacademy/course.py 2014-08-21 15:04:39.972573032 +0200
+++ doc-backend/openacademy/course.py 2014-08-21 15:04:39.968573032 +0200
@@ -74,18 +74,6 @@
--- doc-backend.orig/openacademy/models.py 2014-08-24 12:37:16.637413907 +0200
+++ doc-backend/openacademy/models.py 2014-08-24 12:37:16.625413907 +0200
@@ -73,18 +73,6 @@
])
@api.one
@ -26,69 +26,69 @@ Index: doc-backend/openacademy/course.py
if not self.seats:
Index: doc-backend/openacademy/views/session_workflow.xml
===================================================================
--- doc-backend.orig/openacademy/views/session_workflow.xml 2014-08-21 15:04:39.972573032 +0200
+++ doc-backend/openacademy/views/session_workflow.xml 2014-08-21 15:04:39.968573032 +0200
--- doc-backend.orig/openacademy/views/session_workflow.xml 2014-08-24 12:37:16.637413907 +0200
+++ doc-backend/openacademy/views/session_workflow.xml 2014-08-24 12:41:01.153419104 +0200
@@ -6,25 +6,57 @@
<field name="on_create">True</field>
</record>
<field name="on_create">True</field>
</record>
+ <record model="ir.actions.server" id="set_session_to_draft">
+ <field name="name">Set session to Draft</field>
+ <field name="model_id" ref="model_openacademy_session"/>
+ <field name="code">
+ self.write(cr, uid, context['active_ids'], {
+ 'state': 'draft'
+ }, context=context)
+ </field>
+ </record>
<record model="workflow.activity" id="draft">
<field name="name">Draft</field>
<field name="wkf_id" ref="wkf_session"/>
<field name="flow_start" eval="True"/>
- <field name="kind">function</field>
- <field name="action">action_draft()</field>
+ <field name="kind">dummy</field>
+ <field name="action"></field>
+ <field name="action_id" ref="set_session_to_draft"/>
+ </record>
+ <record model="ir.actions.server" id="set_session_to_draft">
+ <field name="name">Set session to Draft</field>
+ <field name="model_id" ref="model_openacademy_session"/>
+ <field name="code">
+ self.write(cr, uid, context['active_ids'], {
+ 'state': 'draft'
+ }, context=context)
+ </field>
+ </record>
<record model="workflow.activity" id="draft">
<field name="name">Draft</field>
<field name="wkf_id" ref="wkf_session"/>
<field name="flow_start" eval="True"/>
- <field name="kind">function</field>
- <field name="action">action_draft()</field>
+ <field name="kind">dummy</field>
+ <field name="action"></field>
+ <field name="action_id" ref="set_session_to_draft"/>
+ </record>
+
+ <record model="ir.actions.server" id="set_session_to_confirmed">
+ <field name="name">Set session to Confirmed</field>
+ <field name="model_id" ref="model_openacademy_session"/>
+ <field name="code">
+ self.write(cr, uid, context['active_ids'], {
+ 'state': 'confirmed'
+ }, context=context)
+ </field>
</record>
<record model="workflow.activity" id="confirmed">
<field name="name">Confirmed</field>
<field name="wkf_id" ref="wkf_session"/>
- <field name="kind">function</field>
- <field name="action">action_confirm()</field>
+ <field name="kind">dummy</field>
+ <field name="action"></field>
+ <field name="action_id" ref="set_session_to_confirmed"/>
+ </record>
+ <record model="ir.actions.server" id="set_session_to_confirmed">
+ <field name="name">Set session to Confirmed</field>
+ <field name="model_id" ref="model_openacademy_session"/>
+ <field name="code">
+ self.write(cr, uid, context['active_ids'], {
+ 'state': 'confirmed'
+ }, context=context)
+ </field>
</record>
<record model="workflow.activity" id="confirmed">
<field name="name">Confirmed</field>
<field name="wkf_id" ref="wkf_session"/>
- <field name="kind">function</field>
- <field name="action">action_confirm()</field>
+ <field name="kind">dummy</field>
+ <field name="action"></field>
+ <field name="action_id" ref="set_session_to_confirmed"/>
+ </record>
+
+ <record model="ir.actions.server" id="set_session_to_done">
+ <field name="name">Set session to Done</field>
+ <field name="model_id" ref="model_openacademy_session"/>
+ <field name="code">
+ self.write(cr, uid, context['active_ids'], {
+ 'state': 'done'
+ }, context=context)
+ </field>
</record>
<record model="workflow.activity" id="done">
<field name="name">Done</field>
<field name="wkf_id" ref="wkf_session"/>
<field name="flow_stop" eval="True"/>
- <field name="kind">function</field>
- <field name="action">action_done()</field>
+ <field name="kind">dummy</field>
+ <field name="action"></field>
+ <field name="action_id" ref="set_session_to_done"/>
</record>
+ <record model="ir.actions.server" id="set_session_to_done">
+ <field name="name">Set session to Done</field>
+ <field name="model_id" ref="model_openacademy_session"/>
+ <field name="code">
+ self.write(cr, uid, context['active_ids'], {
+ 'state': 'done'
+ }, context=context)
+ </field>
</record>
<record model="workflow.activity" id="done">
<field name="name">Done</field>
<field name="wkf_id" ref="wkf_session"/>
<field name="flow_stop" eval="True"/>
- <field name="kind">function</field>
- <field name="action">action_done()</field>
+ <field name="kind">dummy</field>
+ <field name="action"></field>
+ <field name="action_id" ref="set_session_to_done"/>
</record>
<record model="workflow.transition" id="session_draft_to_confirmed">
<record model="workflow.transition" id="session_draft_to_confirmed">

View File

@ -1,18 +1,19 @@
# HG changeset patch
# Parent 3b19489a47d41e72f88490eb389a05977761c8d2
diff --git a/openacademy/views/session_workflow.xml b/openacademy/views/session_workflow.xml
--- a/openacademy/views/session_workflow.xml
+++ b/openacademy/views/session_workflow.xml
Index: doc-backend/openacademy/views/session_workflow.xml
===================================================================
--- doc-backend.orig/openacademy/views/session_workflow.xml 2014-08-24 12:35:50.669411918 +0200
+++ doc-backend/openacademy/views/session_workflow.xml 2014-08-24 12:36:31.173412855 +0200
@@ -47,5 +47,11 @@
<field name="act_to" ref="done"/>
<field name="signal">done</field>
</record>
<field name="act_to" ref="done"/>
<field name="signal">done</field>
</record>
+
+ <record model="workflow.transition" id="session_auto_confirm_half_filled">
+ <field name="act_from" ref="draft"/>
+ <field name="act_to" ref="confirmed"/>
+ <field name="condition">seats_taken &gt; 50</field>
+ </record>
</data>
+ <record model="workflow.transition" id="session_auto_confirm_half_filled">
+ <field name="act_from" ref="draft"/>
+ <field name="act_to" ref="confirmed"/>
+ <field name="condition">seats_taken &gt; 50</field>
+ </record>
</data>
</openerp>

View File

@ -1,11 +1,11 @@
{%- set mod= name|snake -%}
{%- set model = "%s.%s"|format(mod, mod) -%}
<openerp>
<data>
<!-- {% for item in range(5) %} -->
<!-- <record id="object{{ item }}" model="{{ model }}"> -->
<!-- <field name="name">Object {{ item }}</field> -->
<!-- </record> -->
<!-- {% endfor %} -->
</data>
<data>
<!-- {% for item in range(5) %} -->
<!-- <record id="object{{ item }}" model="{{ model }}"> -->
<!-- <field name="name">Object {{ item }}</field> -->
<!-- </record> -->
<!-- {% endfor %} -->
</data>
</openerp>

View File

@ -1,7 +1,6 @@
# -*- coding: utf-8 -*-
from openerp import fields
from openerp import models
from openerp import models, fields, api
# class {{ name|snake }}(models.Model):
# _name = '{{ name|snake }}.{{ name|snake }}'

View File

@ -1,22 +1,22 @@
<openerp>
<data>
<!-- <template id="listing"> -->
<!-- <ul> -->
<!-- <li t-foreach="objects" t-as="object"> -->
<!-- <a t-attf-href="#{ root }/objects/#{ object.id }"> -->
<!-- <t t-esc="object.display_name"/> -->
<!-- </a> -->
<!-- </li> -->
<!-- </ul> -->
<!-- </template> -->
<!-- <template id="object"> -->
<!-- <h1><t t-esc="object.display_name"/></h1> -->
<!-- <dl> -->
<!-- <t t-foreach="object._fields" t-as="field"> -->
<!-- <dt><t t-esc="field"/></dt> -->
<!-- <dd><t t-esc="object[field]"/></dd> -->
<!-- </t> -->
<!-- </dl> -->
<!-- </template> -->
</data>
<data>
<!-- <template id="listing"> -->
<!-- <ul> -->
<!-- <li t-foreach="objects" t-as="object"> -->
<!-- <a t-attf-href="#{ root }/objects/#{ object.id }"> -->
<!-- <t t-esc="object.display_name"/> -->
<!-- </a> -->
<!-- </li> -->
<!-- </ul> -->
<!-- </template> -->
<!-- <template id="object"> -->
<!-- <h1><t t-esc="object.display_name"/></h1> -->
<!-- <dl> -->
<!-- <t t-foreach="object._fields" t-as="field"> -->
<!-- <dt><t t-esc="field"/></dt> -->
<!-- <dd><t t-esc="object[field]"/></dd> -->
<!-- </t> -->
<!-- </dl> -->
<!-- </template> -->
</data>
</openerp>