diff --git a/README.md b/README.md index e9c019b..d28b816 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,10 @@ # Obeesdoo - +Specific module for the Beescoop # 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/__init__.py b/beesdoo_base/__init__.py index 4001611..c9a8b24 100644 --- a/beesdoo_base/__init__.py +++ b/beesdoo_base/__init__.py @@ -1,3 +1,4 @@ # -*- coding: utf-8 -*- import models +import wizard import tools \ No newline at end of file diff --git a/beesdoo_base/__openerp__.py b/beesdoo_base/__openerp__.py index 9fd373a..ed2e67f 100644 --- a/beesdoo_base/__openerp__.py +++ b/beesdoo_base/__openerp__.py @@ -15,10 +15,12 @@ 'category': 'Project Management', 'version': '0.1', - 'depends': ['point_of_sale'], + 'depends': ['point_of_sale', 'purchase'], 'data': [ + 'security/groups.xml', 'security/ir.model.access.csv', 'views/partner.xml', + 'wizard/views/member_card.xml', ], } diff --git a/beesdoo_base/models/membercard.py b/beesdoo_base/models/membercard.py index 3a6c60d..0bbd5ae 100644 --- a/beesdoo_base/models/membercard.py +++ b/beesdoo_base/models/membercard.py @@ -1,47 +1,24 @@ # -*- coding: utf-8 -*- from openerp import models, fields, api -from random import randint import uuid class MemberCard(models.Model): - + def _get_current_user(self): return self.env.uid - - def _get_current_client(self): - # TODO : this does not work - return self.env['res.partner'].search([('id', '=',self.env.context['active_id'])]) - + def _compute_bar_code(self): rule = self.env['barcode.rule'].search([('name', '=', 'Customer Barcodes')])[0] - nomenclature = self.env['barcode.nomenclature'] - size = 13-len(rule.pattern) - ean = rule.pattern + str(uuid.uuid4().fields[-1])[:size] #str(randint(10**(size-1), 10**size-1)) - code = ean[0:12] + str(nomenclature.ean_checksum(ean)) - nomenclature.check_encoding(code,'ean13') - return code - + size = 13 - len(rule.pattern) + ean = rule.pattern + str(uuid.uuid4().fields[-1])[:size] + return ean[0:12] + str(self.env['barcode.nomenclature'].ean_checksum(ean)) + _name = 'member.card' - _order = 'activation_date desc' - + _order = 'create_date desc' + valid = fields.Boolean(default=True, string="Active") - barcode = fields.Char("Code barre", oldname='ean13', default=_compute_bar_code) + barcode = fields.Char("Barcode", oldname='ean13', default=_compute_bar_code) partner_id = fields.Many2one('res.partner') #, default=_get_current_client) - responsible_id = fields.Many2one('res.users', default=_get_current_user, string="Responsable") - activation_date = fields.Date(default=fields.Date.today, readonly=True, string="Date de création") - end_date = fields.Date(readonly=True, string="Date d'expiration") - comment = fields.Char("Raison", required=True) - -# A transient model for the creation of a new card. The user can only define the raison why -# a new card is needed and the eater/worker that is concerned. -class MemberCardWizard(models.TransientModel): - _name = 'membercard.wizard' - - new_comment = fields.Char('Raison', required=True) - - @api.multi - def create_new_card(self): - client = self.env['res.partner'].search([('id', '=',self.env.context['active_id'])]) - client._deactivate_active_cards() - client._new_card(self.new_comment) - + responsible_id = fields.Many2one('res.users', default=_get_current_user, string="Responsible") + end_date = fields.Date(readonly=True, string="Expiration Date") + comment = fields.Char("Reason", required=True) diff --git a/beesdoo_base/models/partner.py b/beesdoo_base/models/partner.py index 6239939..6b5500e 100644 --- a/beesdoo_base/models/partner.py +++ b/beesdoo_base/models/partner.py @@ -8,20 +8,19 @@ class Partner(models.Model): _inherit = 'res.partner' first_name = fields.Char('First Name') - last_name = fields.Char('Last Name', required=True) - - eater = fields.Selection([('eater', 'Mangeur'), ('worker_eater', 'Mangeur et Travailleur')], string="Mangeur/Travailleur") - + last_name = fields.Char('Last Name') + 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 Travailleur", readonly=True) - - barcode = fields.Char(compute="_get_bar_code", string='Code Barre', store=True) - parent_barcode = fields.Char(compute="_get_bar_code", string='Code Barre du Parent', store=True) + parent_eater_id = fields.Many2one("res.partner", string="Parent Worker", readonly=True) + barcode = fields.Char(compute="_get_bar_code", string='Barcode', store=True) + parent_barcode = fields.Char(compute="_get_bar_code", string='Parent Barcode', store=True) member_card_ids = fields.One2many('member.card', 'partner_id') country_id = fields.Many2one('res.country', string='Country', required=True) + member_card_to_be_printed = fields.Boolean('Print BEES card?') + last_printed = fields.Datetime('Last printed on') + @api.onchange('first_name', 'last_name') def _on_change_name(self): self.name = concat_names(self.first_name, self.last_name) @@ -52,15 +51,28 @@ class Partner(models.Model): if command[0] == 2: command[0] = 3 return super(Partner, self).write(values) - - @api.multi + + @api.one def _deactivate_active_cards(self): - if len(self.member_card_ids) > 0: - for c in self.member_card_ids: - if c.valid: - c.valid = False - c.end_date = fields.Date.today() - @api.multi - def _new_card(self, txt): - self.env['member.card'].create({'partner_id' : self.env.context['active_id'],'comment' : txt}) + for card in self.member_card_ids.filtered('valid'): + card.valid = False + card.end_date = fields.Date.today() + + @api.multi + def _new_card(self, reason, user_id, barcode=False): + card_data = { + 'partner_id' : self.id, + 'responsible_id' : user_id, + 'comment' : reason, + } + if barcode: + card_data['barcode'] = barcode + self.env['member.card'].create(card_data) + + @api.noguess + def _auto_init(self, cr, context=None): + res = super(Partner, self)._auto_init(cr, context=context) + cr.execute("UPDATE res_partner set last_name = name where last_name IS NULL") + return res + diff --git a/beesdoo_base/security/groups.xml b/beesdoo_base/security/groups.xml new file mode 100644 index 0000000..964655e --- /dev/null +++ b/beesdoo_base/security/groups.xml @@ -0,0 +1,6 @@ + + + + Bees Card Force Barcode + + \ No newline at end of file diff --git a/beesdoo_base/views/partner.xml b/beesdoo_base/views/partner.xml index 82d9491..ad59c1c 100644 --- a/beesdoo_base/views/partner.xml +++ b/beesdoo_base/views/partner.xml @@ -1,74 +1,72 @@ + + New Member Card + membercard.new.wizard + form + new + - - New MemberCard Wizard - membercard.wizard - -
- - - -
-
-
-
-
- - + + beesdoo.partner.form.view + res.partner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +