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.

131 lines
4.5 KiB

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