Odoo modules extending contacts / partners
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.

95 lines
2.9 KiB

  1. # -*- coding: utf-8 -*-
  2. # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
  3. from dateutil.relativedelta import relativedelta
  4. from odoo import fields, models, api
  5. STATUS = [
  6. ("minor", "Minor"),
  7. ("major", "Major"),
  8. ]
  9. class ResPartner(models.Model):
  10. _inherit = "res.partner"
  11. age = fields.Integer(store=True)
  12. majority_date = fields.Date(
  13. string="Majority date",
  14. compute="_get_majority",
  15. compute_sudo=True,
  16. store=True,
  17. )
  18. majority_years = fields.Integer(
  19. string="Majority years",
  20. compute="_get_majority",
  21. compute_sudo=True,
  22. store=True,
  23. )
  24. is_major = fields.Boolean(
  25. string="Is major",
  26. compute="_get_majority",
  27. compute_sudo=True,
  28. )
  29. legal_status = fields.Selection(
  30. selection=STATUS,
  31. string="Legal status",
  32. compute="_get_legal_status",
  33. )
  34. emancipation_date = fields.Date(
  35. string="Emancipation",
  36. readonly=True,
  37. )
  38. is_emancipated = fields.Boolean(
  39. string="Is emancipated",
  40. compute="_get_majority",
  41. compute_sudo=True,
  42. store=True,
  43. )
  44. @api.depends(
  45. "nationality_id",
  46. "nationality_id.majority_age",
  47. "birthdate_date",
  48. "emancipation_date",
  49. )
  50. def _get_majority(self):
  51. for partner in self:
  52. country_age = (
  53. partner.nationality_id.majority_age if partner.nationality_id else False
  54. )
  55. birth = partner.birthdate_date
  56. emancipation = partner.emancipation_date
  57. major = False
  58. today = fields.Date.today()
  59. if emancipation:
  60. major = emancipation <= today
  61. partner.is_emancipated = True
  62. partner.majority_date = emancipation
  63. partner.is_major = major
  64. partner.majority_years = (
  65. relativedelta(today, emancipation).years
  66. if major
  67. else relativedelta(emancipation, today).years
  68. )
  69. elif country_age and birth:
  70. majority = birth + relativedelta(years=country_age)
  71. major = majority <= today
  72. partner.is_emancipated = False
  73. partner.majority_date = majority
  74. partner.is_major = major
  75. partner.majority_years = (
  76. relativedelta(today, majority).years
  77. if major
  78. else relativedelta(majority, today).years
  79. )
  80. else:
  81. partner.is_emancipated = False
  82. partner.majority_date = False
  83. partner.is_major = False
  84. partner.majority_years = 0
  85. @api.depends("is_major")
  86. def _get_legal_status(self):
  87. for partner in self:
  88. partner.legal_status = "major" if partner.is_major else "minor"