From 3f4d9f69c77c0bd9927e33b34182effb56d46568 Mon Sep 17 00:00:00 2001 From: Thibault Francois Date: Sun, 6 Mar 2016 21:40:15 +0100 Subject: [PATCH] [MERGE][TASK 0010] Gestion de foyer de mangeurs --- README.md | 8 ++++ beesdoo_base/__openerp__.py | 3 +- beesdoo_base/models/partner.py | 55 ++++++++++++++++++++++- beesdoo_base/security/ir.model.access.csv | 2 + beesdoo_base/views/partner.xml | 30 ++++++++++++- 5 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 beesdoo_base/security/ir.model.access.csv diff --git a/README.md b/README.md index 13e716b..e9c019b 100644 --- a/README.md +++ b/README.md @@ -1 +1,9 @@ # Obeesdoo + + + +# Migrate barcode +```sql +insert into member_card (active, barcode, partner_id, responsible_id, activation_date) select 't', barcode, id, 1, '2016-01-01' from res_partner where barcode is not null; +update res_partner set eater = 'worker_eater' where barcode is not null; +``` \ No newline at end of file diff --git a/beesdoo_base/__openerp__.py b/beesdoo_base/__openerp__.py index b39b36c..9fd373a 100644 --- a/beesdoo_base/__openerp__.py +++ b/beesdoo_base/__openerp__.py @@ -15,9 +15,10 @@ 'category': 'Project Management', 'version': '0.1', - 'depends': ['base'], + 'depends': ['point_of_sale'], 'data': [ + 'security/ir.model.access.csv', 'views/partner.xml', ], } diff --git a/beesdoo_base/models/partner.py b/beesdoo_base/models/partner.py index 970a34c..79393fd 100644 --- a/beesdoo_base/models/partner.py +++ b/beesdoo_base/models/partner.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- -from openerp import models, fields, api +from openerp import models, fields, api, _ +from openerp.exceptions import ValidationError from openerp.addons.beesdoo_base.tools import concat_names class Partner(models.Model): @@ -9,6 +10,58 @@ class Partner(models.Model): first_name = fields.Char('First Name') last_name = fields.Char('Last Name', required=True) + eater = fields.Selection([('eater', 'Eater'), ('worker_eater', 'Worker and Eater')], string="Eater/Worker") + + child_eater_ids = fields.One2many("res.partner", "parent_eater_id", domain=[('customer', '=', True), + ('eater', '=', 'eater')]) + + parent_eater_id = fields.Many2one("res.partner", string="Parent Worker", readonly=True) + + barcode = fields.Char(compute="_get_bar_code", string='Bar Code', store=True) + parent_barcode = fields.Char(compute="_get_bar_code", string='Parent Bar Code', store=True) + member_card_ids = fields.One2many('member.card', 'partner_id') + @api.onchange('first_name', 'last_name') def _on_change_name(self): self.name = concat_names(self.first_name, self.last_name) + + @api.one + @api.depends('parent_eater_id', 'parent_eater_id.barcode', 'eater', 'member_card_ids') + def _get_bar_code(self): + if self.eater == 'eater': + self.parent_barcode = self.parent_eater_id.barcode + elif self.member_card_ids: + self.barcode = self.member_card_ids[0].barcode + + @api.one + @api.constrains('child_eater_ids', 'parent_eater_id') + def _only_two_eaters(self): + if len(self.child_eater_ids) > 2 or len(self.parent_eater_id.child_eater_ids) > 2: + raise ValidationError(_('You can only set two additional eaters per worker')) + + @api.multi + def write(self, values): + if values.get('parent_eater_id') and self.parent_eater_id: + raise ValidationError(_('You try to assign a eater to a worker but this easer is alread assign to %s please remove it before') % self.parent_eater_id.name) + #replace many2many command when writing on child_eater_ids to just remove the link + if 'child_eater_ids' in values: + for command in values['child_eater_ids']: + if command[0] == 2: + command[0] = 3 + return super(Partner, self).write(values) + +class MemberCard(models.Model): + + def _get_current_user(self): + return self.env.user + + _name = 'member.card' + _order = 'activation_date desc' + + active = fields.Boolean(default=True) + barcode = fields.Char('Barcode', oldname='ean13') + partner_id = fields.Many2one('res.partner') + responsible_id = fields.Many2one('res.users', default=_get_current_user) + activation_date = fields.Date(default=fields.Date.today, readonly=True) + end_date = fields.Date() + comment = fields.Char("Reason") diff --git a/beesdoo_base/security/ir.model.access.csv b/beesdoo_base/security/ir.model.access.csv new file mode 100644 index 0000000..a97f8e8 --- /dev/null +++ b/beesdoo_base/security/ir.model.access.csv @@ -0,0 +1,2 @@ +"id","name","model_id/id","group_id/id","perm_read","perm_write","perm_create","perm_unlink" +"member_card_read_all","member card read all","beesdoo_base.model_member_card","","True","False","False","False" diff --git a/beesdoo_base/views/partner.xml b/beesdoo_base/views/partner.xml index 9d1b3ff..ff211a2 100644 --- a/beesdoo_base/views/partner.xml +++ b/beesdoo_base/views/partner.xml @@ -1,15 +1,43 @@ + beesdoo.partner.form.view res.partner - + + + + + + + + + + + + + + + + + + + + + + + {'invisible' : [('eater', '!=', 'worker_eater')]} + + + + \ No newline at end of file