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::
.. 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::
.. 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::
.. only:: solutions
- Create class *Session*:
+ Create the class *Session* in ``openacademy/models.py``.
.. patch::
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::
#. 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::
.. 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
# 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>
# 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>
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>
# 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>
# 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')
@api.one
@api.depends('seats', 'attendee_ids')
-@@ -81,6 +86,26 @@
+@@ -82,6 +85,26 @@
}
@api.one
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>
# 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
+ 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"/>
# 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")
-+
# 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")
# 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")
# 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>
# 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>
-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)
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"/>
# 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
+ <field name="name">Course 2</field>
+ <field name="description">Course 2's description</field>
+ </record>
-+ </data>
-+</openerp>
+ </data>
+ </openerp>
# 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",
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"
# 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")
# 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>
# 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>
# 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')
@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
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>
# 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')
@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
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>
# 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)
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>
-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")
-
# 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()
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"
# 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()
-+
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
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>
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>
# 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:
+ 'message': "Increase seats or remove excess attendees",
+ },
+ }
-+
# 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)
# 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>
# 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>
# 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'
+ start_date = fields.Date()
+ duration = fields.Float(digits=(6, 2), help="Duration in days")
+ seats = fields.Integer(string="Number of seats")
-+
# 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)
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">
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"),
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">
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>
# 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
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">
# 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 > 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 > 50</field>
++ </record>
+ </data>
</openerp>
{%- 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>
# -*- 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 }}'
<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>