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.

86 lines
2.8 KiB

6 years ago
6 years ago
  1. # Copyright 2015 Antiun Ingenieria S.L. - Antonio Espinosa
  2. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  3. import logging
  4. from odoo import api, fields, models
  5. _logger = logging.getLogger(__name__)
  6. class ResConfigSettings(models.TransientModel):
  7. _inherit = "res.config.settings"
  8. partner_names_order = fields.Selection(
  9. string="Partner names order",
  10. selection="_partner_names_order_selection",
  11. help="Order to compose partner fullname",
  12. required=True,
  13. )
  14. partner_names_order_changed = fields.Boolean(compute="_compute_names_order_changed")
  15. def _partner_names_order_selection(self):
  16. return [
  17. ("last_first", "Lastname Firstname"),
  18. ("last_first_comma", "Lastname, Firstname"),
  19. ("first_last", "Firstname Lastname"),
  20. ]
  21. def _partner_names_order_default(self):
  22. return self.env["res.partner"]._names_order_default()
  23. @api.model
  24. def get_values(self):
  25. res = super(ResConfigSettings, self).get_values()
  26. partner_names_order = (
  27. self.env["ir.config_parameter"]
  28. .sudo()
  29. .get_param(
  30. "partner_names_order", default=self._partner_names_order_default()
  31. )
  32. )
  33. res.update(partner_names_order=partner_names_order)
  34. return res
  35. @api.depends("partner_names_order")
  36. def _compute_names_order_changed(self):
  37. current = (
  38. self.env["ir.config_parameter"]
  39. .sudo()
  40. .get_param(
  41. "partner_names_order", default=self._partner_names_order_default()
  42. )
  43. )
  44. for record in self:
  45. record.partner_names_order_changed = bool(
  46. record.partner_names_order != current
  47. )
  48. @api.onchange("partner_names_order")
  49. def _onchange_partner_names_order(self):
  50. self._compute_names_order_changed()
  51. def set_values(self):
  52. super(ResConfigSettings, self).set_values()
  53. self.env["ir.config_parameter"].sudo().set_param(
  54. "partner_names_order", self.partner_names_order
  55. )
  56. def _partners_for_recalculating(self):
  57. return self.env["res.partner"].search(
  58. [
  59. ("is_company", "=", False),
  60. ("firstname", "!=", False),
  61. ("lastname", "!=", False),
  62. ]
  63. )
  64. def action_recalculate_partners_name(self):
  65. self.env["ir.config_parameter"].sudo().set_param(
  66. "partner_names_order", self.partner_names_order
  67. )
  68. partners = self._partners_for_recalculating()
  69. _logger.info("Recalculating names for %d partners.", len(partners))
  70. partners._compute_name()
  71. _logger.info("%d partners updated.", len(partners))
  72. return True