You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
3.3 KiB

  1. # -*- coding: utf-8 -*-
  2. from openerp import models, fields, api, _
  3. from openerp.exceptions import ValidationError
  4. from openerp.addons.beesdoo_base.tools import concat_names
  5. import datetime
  6. class Partner(models.Model):
  7. _inherit = 'res.partner'
  8. first_name = fields.Char('First Name')
  9. last_name = fields.Char('Last Name')
  10. eater = fields.Selection([('eater', 'Eater'), ('worker_eater', 'Worker and Eater')], string="Eater/Worker")
  11. child_eater_ids = fields.One2many("res.partner", "parent_eater_id", domain=[('customer', '=', True),
  12. ('eater', '=', 'eater')])
  13. parent_eater_id = fields.Many2one("res.partner", string="Parent Worker", readonly=True)
  14. barcode = fields.Char(compute="_get_bar_code", string='Bar Code', store=True)
  15. parent_barcode = fields.Char(compute="_get_bar_code", string='Parent Bar Code', store=True)
  16. member_card_ids = fields.One2many('member.card', 'partner_id')
  17. member_card_to_be_printed = fields.Boolean('Print BEES card?')
  18. last_printed = fields.Datetime('Last printed on')
  19. @api.onchange('first_name', 'last_name')
  20. def _on_change_name(self):
  21. self.name = concat_names(self.first_name, self.last_name)
  22. @api.one
  23. @api.depends('parent_eater_id', 'parent_eater_id.barcode', 'eater', 'member_card_ids')
  24. def _get_bar_code(self):
  25. if self.eater == 'eater':
  26. self.parent_barcode = self.parent_eater_id.barcode
  27. elif self.member_card_ids:
  28. for c in self.member_card_ids:
  29. if c.valid:
  30. self.barcode = c.barcode
  31. @api.one
  32. @api.constrains('child_eater_ids', 'parent_eater_id')
  33. def _only_two_eaters(self):
  34. if len(self.child_eater_ids) > 2 or len(self.parent_eater_id.child_eater_ids) > 2:
  35. raise ValidationError(_('You can only set two additional eaters per worker'))
  36. @api.multi
  37. def write(self, values):
  38. if values.get('parent_eater_id') and self.parent_eater_id:
  39. 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)
  40. #replace many2many command when writing on child_eater_ids to just remove the link
  41. if 'child_eater_ids' in values:
  42. for command in values['child_eater_ids']:
  43. if command[0] == 2:
  44. command[0] = 3
  45. return super(Partner, self).write(values)
  46. @api.one
  47. def _deactivate_active_cards(self):
  48. for card in self.member_card_ids.filtered('valid'):
  49. card.valid = False
  50. card.end_date = fields.Date.today()
  51. @api.multi
  52. def _new_card(self, reason, user_id):
  53. self.env['member.card'].create({'partner_id' : self.id,'responsible_id' : user_id, 'comment' : reason})
  54. @api.noguess
  55. def _auto_init(self, cr, context=None):
  56. res = super(Partner, self)._auto_init(cr, context=context)
  57. cr.execute("UPDATE res_partner set last_name = name where last_name IS NULL")
  58. return res
  59. @api.one
  60. def _request_membercard_printing(self):
  61. self.member_card_to_be_printed = True
  62. @api.one
  63. def _set_membercard_as_printed(self):
  64. self.member_card_to_be_printed = False
  65. self.last_printed = datetime.datetime.now()