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.

82 lines
3.2 KiB

  1. ###################################################################################
  2. #
  3. # Copyright (c) 2017-2019 MuK IT GmbH.
  4. #
  5. # This file is part of MuK Utils
  6. # (see https://mukit.at).
  7. #
  8. # This program is free software: you can redistribute it and/or modify
  9. # it under the terms of the GNU Lesser General Public License as published by
  10. # the Free Software Foundation, either version 3 of the License, or
  11. # (at your option) any later version.
  12. #
  13. # This program is distributed in the hope that it will be useful,
  14. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. # GNU Lesser General Public License for more details.
  17. #
  18. # You should have received a copy of the GNU Lesser General Public License
  19. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  20. #
  21. ###################################################################################
  22. from odoo import api, fields, models
  23. class ResConfigSettings(models.TransientModel):
  24. _inherit = 'res.config.settings'
  25. #----------------------------------------------------------
  26. # Selections
  27. #----------------------------------------------------------
  28. def _attachment_location_selection(self):
  29. locations = self.env['ir.attachment'].storage_locations()
  30. return list(map(lambda location: (location, location.upper()), locations))
  31. #----------------------------------------------------------
  32. # Database
  33. #----------------------------------------------------------
  34. attachment_location = fields.Selection(
  35. selection=lambda self: self._attachment_location_selection(),
  36. string='Storage Location',
  37. required=True,
  38. default='file',
  39. help="Attachment storage location.")
  40. attachment_location_changed = fields.Boolean(
  41. compute='_compute_attachment_location_changed',
  42. string='Storage Location Changed')
  43. #----------------------------------------------------------
  44. # Functions
  45. #----------------------------------------------------------
  46. @api.multi
  47. def set_values(self):
  48. res = super(ResConfigSettings, self).set_values()
  49. param = self.env['ir.config_parameter'].sudo()
  50. param.set_param('ir_attachment.location', self.attachment_location)
  51. return res
  52. @api.model
  53. def get_values(self):
  54. res = super(ResConfigSettings, self).get_values()
  55. params = self.env['ir.config_parameter'].sudo()
  56. res.update(attachment_location=params.get_param('ir_attachment.location', 'file'))
  57. return res
  58. def attachment_force_storage(self):
  59. self.env['ir.attachment'].force_storage()
  60. #----------------------------------------------------------
  61. # Read
  62. #----------------------------------------------------------
  63. @api.depends('attachment_location')
  64. def _compute_attachment_location_changed(self):
  65. params = self.env['ir.config_parameter'].sudo()
  66. location = params.get_param('ir_attachment.location', 'file')
  67. for record in self:
  68. record.attachment_location_changed = location != self.attachment_location