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.

41 lines
1.3 KiB

  1. from datetime import datetime
  2. from openerp import api, fields, models
  3. from openerp.tools import DEFAULT_SERVER_DATE_FORMAT as OE_DFORMAT
  4. class ResPartner(models.Model):
  5. _inherit = "res.partner"
  6. def _search_age(self, operator, value):
  7. if operator not in ("=", "!=", "<", "<=", ">", ">=", "in", "not in"):
  8. return []
  9. query = """SELECT id
  10. FROM "%s"
  11. WHERE extract(year from age(CURRENT_DATE,
  12. birthdate_date)) %s %%s""" % (
  13. self._table,
  14. operator,
  15. )
  16. self.env.cr.execute(query, (value,))
  17. ids = [t[0] for t in self.env.cr.fetchall()]
  18. return [("id", "in", ids)]
  19. @api.multi
  20. @api.depends("birthdate_date")
  21. def _compute_age(self):
  22. self.ensure_one()
  23. if self.birthdate_date:
  24. dBday = datetime.strptime(
  25. str(self.birthdate_date), OE_DFORMAT
  26. ).date()
  27. dToday = datetime.now().date()
  28. self.age = (
  29. dToday.year
  30. - dBday.year
  31. - ((dToday.month, dToday.day) < (dBday.month, dBday.day))
  32. )
  33. age = fields.Integer(
  34. string="Age", compute="_compute_age", search="_search_age"
  35. )