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.

69 lines
2.9 KiB

  1. from odoo import models, fields, api, _
  2. from odoo.exceptions import ValidationError
  3. class Partner(models.Model):
  4. _inherit = 'res.partner'
  5. eater = fields.Selection([('eater', 'Eater'), ('worker_eater', 'Worker and Eater')], string="Eater/Worker")
  6. child_eater_ids = fields.One2many("res.partner", "parent_eater_id", domain=[('customer', '=', True),
  7. ('eater', '=', 'eater')])
  8. parent_eater_id = fields.Many2one("res.partner", string="Parent Worker", readonly=True)
  9. barcode = fields.Char(compute="_get_bar_code", string='Barcode', store=True)
  10. parent_barcode = fields.Char(compute="_get_bar_code", string='Parent Barcode', store=True)
  11. member_card_ids = fields.One2many('member.card', 'partner_id')
  12. member_card_to_be_printed = fields.Boolean('Print BEES card?')
  13. last_printed = fields.Datetime('Last printed on')
  14. @api.depends('parent_eater_id', 'parent_eater_id.barcode', 'eater', 'member_card_ids')
  15. def _get_bar_code(self):
  16. for rec in self:
  17. if rec.eater == 'eater':
  18. rec.parent_barcode = rec.parent_eater_id.barcode
  19. elif rec.member_card_ids:
  20. for c in rec.member_card_ids:
  21. if c.valid:
  22. rec.barcode = c.barcode
  23. @api.multi
  24. def write(self, values):
  25. if values.get('parent_eater_id') and self.parent_eater_id:
  26. 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)
  27. # replace many2many command when writing on child_eater_ids to just remove the link
  28. if 'child_eater_ids' in values:
  29. for command in values['child_eater_ids']:
  30. if command[0] == 2:
  31. command[0] = 3
  32. return super(Partner, self).write(values)
  33. def _deactivate_active_cards(self):
  34. self.ensure_one()
  35. for card in self.member_card_ids.filtered('valid'):
  36. card.valid = False
  37. card.end_date = fields.Date.today()
  38. @api.multi
  39. def _new_card(self, reason, user_id, barcode=False):
  40. card_data = {
  41. 'partner_id' : self.id,
  42. 'responsible_id' : user_id,
  43. 'comment' : reason,
  44. }
  45. if barcode:
  46. card_data['barcode'] = barcode
  47. self.env['member.card'].create(card_data)
  48. @api.multi
  49. def _new_eater(self, surname, name, email):
  50. partner_data = {
  51. 'lastname' : name,
  52. 'firstname' : surname,
  53. 'is_customer' : True,
  54. 'eater' : 'eater',
  55. 'parent_eater_id' : self.id,
  56. 'email' : email,
  57. 'country_id' : self.country_id.id
  58. }
  59. return self.env['res.partner'].create(partner_data)