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.

123 lines
4.3 KiB

  1. # -*- coding: utf-8 -*-
  2. from odoo import models, fields, api
  3. SCALES = [
  4. ("nat", "National"),
  5. ("reg", "Regional"),
  6. ("dep", "Departmental"),
  7. ("loc", "Local"),
  8. ("lic", "Licensee"),
  9. ]
  10. class ResPartner(models.Model):
  11. _inherit = "res.partner"
  12. @api.model
  13. def _get_ffck_partner(self):
  14. ffck = self.env.ref("ffck_commons.res_partner_ffck", raise_if_not_found=False)
  15. main = self.env.ref("base.main_partner")
  16. if main.ref == "FFCK":
  17. if ffck.active:
  18. ffck.write({"active": False})
  19. return main
  20. else:
  21. return ffck
  22. # Partner fields
  23. ffck_network = fields.Boolean(string="FFCK network")
  24. first_membership_date = fields.Date("Structure 1st membership")
  25. # Structure typing
  26. partner_scale = fields.Selection(
  27. selection=SCALES,
  28. string="Scale",
  29. )
  30. ffck_structure_type_id = fields.Many2one(
  31. comodel_name="ffck.structure.type", string="Structure type"
  32. )
  33. partner_code = fields.Char(string="FFCK code", size=6, index=True)
  34. # partner_code_editable = fields.Boolean(string="FFCK code editable", compute="_can_edit_partner_code")
  35. # FFCK
  36. ffck_partner_id = fields.Many2one(
  37. "res.partner",
  38. string="FFCK partner",
  39. default=_get_ffck_partner,
  40. ondelete="restrict",
  41. )
  42. ffck_partner_code = fields.Char(string="FFCK", default="0", readonly=True)
  43. # CRCK
  44. crck_partner_id = fields.Many2one(
  45. "res.partner",
  46. string="CRCK partner",
  47. index=True,
  48. ondelete="restrict",
  49. )
  50. crck_partner_code = fields.Char(related="crck_partner_id.partner_code", store=True)
  51. # CDCK
  52. cdck_partner_id = fields.Many2one(
  53. "res.partner",
  54. string="CDCK partner",
  55. index=True,
  56. ondelete="restrict",
  57. )
  58. cdck_partner_code = fields.Char(related="cdck_partner_id.partner_code", store=True)
  59. @api.model
  60. def name_search(self, name="", args=None, operator="ilike", limit=100):
  61. """Allow searching by sequence code by default."""
  62. # Do not add any domain when user just clicked on search widget
  63. if not (name == "" and operator == "ilike"):
  64. # The dangling | is needed to combine with the domain added by super()
  65. args = OR(
  66. [
  67. [
  68. "&",
  69. ("ffck_network", "=", True),
  70. ("partner_code", "=like", name + "%"),
  71. ],
  72. args or [],
  73. ]
  74. )
  75. return super().name_search(name, args, operator, limit)
  76. def name_get(self):
  77. result = []
  78. # ffck_partners = self.filtered('ffck_network')
  79. # others = self - ffck_partners
  80. for record in self:
  81. if record.ffck_network:
  82. code = record.partner_code
  83. ref = record.ref
  84. result.append(
  85. (
  86. record.id,
  87. "{}{}{}".format(
  88. code and code + " - " or "",
  89. ref and record.is_company and ref + " - " or "",
  90. super(ResPartner, record).name_get()[0][1],
  91. ),
  92. )
  93. )
  94. else:
  95. result += super(ResPartner, record).name_get()
  96. return result
  97. # ONCHANGES
  98. @api.onchange("partner_code", "company_type", "ffck_network")
  99. def onchange_partner_code(self):
  100. if self.ffck_network and self.company_type == "individual":
  101. code = self.partner_code
  102. if len(code) < 6:
  103. self.update({"partner_code": code.zfill(6)})
  104. elif len(code) > 6:
  105. self.update({"partner_code": code[:-6]})
  106. @api.onchange("company_type", "partner_scale", "ffck_structure_type_id")
  107. def onchange_comp_type(self):
  108. if self.company_type == "individual":
  109. self.update({"partner_scale": "lic"})
  110. elif self.partner_scale == "lic":
  111. self.update({"partner_scale": False})
  112. elif self.ffck_structure_type_id:
  113. self.update({"partner_scale": self.ffck_structure_type_id.scale})