res_users.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. # -*- coding: utf-8 -*-
  2. # Part of Odoo. See LICENSE file for full copyright and licensing details.
  3. from odoo import api, fields, models, _
  4. class ResUsers(models.Model):
  5. _inherit = "res.users"
  6. # Computed fields for Google integration
  7. google_connected = fields.Boolean(
  8. string='Google Connected',
  9. compute='_compute_google_status',
  10. store=False,
  11. help='Indicates if the user has connected their Google account'
  12. )
  13. google_email = fields.Char(
  14. string='Google Email',
  15. compute='_compute_google_status',
  16. store=False,
  17. help='Email address associated with the connected Google account'
  18. )
  19. # CRM Meets Files Configuration - Related field
  20. google_crm_meets_folder_id = fields.Char(
  21. string='Archivos Meets CRM',
  22. related='res_users_settings_id.google_crm_meets_folder_id',
  23. readonly=False,
  24. help='ID de la carpeta en Google Drive donde se almacenan archivos de meets para sincronización con CRM'
  25. )
  26. @api.depends('res_users_settings_id.google_rtoken', 'res_users_settings_id.google_email')
  27. def _compute_google_status(self):
  28. """Compute Google connection status and email"""
  29. for user in self:
  30. settings = user.res_users_settings_id
  31. if settings and settings._google_authenticated():
  32. user.google_connected = True
  33. user.google_email = settings.google_email or 'Connected'
  34. else:
  35. user.google_connected = False
  36. user.google_email = False
  37. def action_connect_google(self):
  38. """Connect user's Google account"""
  39. self.ensure_one()
  40. # Ensure user has settings record
  41. if not self.res_users_settings_id:
  42. self.env['res.users.settings'].create({'user_id': self.id})
  43. return self.res_users_settings_id.action_connect_google()
  44. def action_disconnect_google(self):
  45. """Disconnect user's Google account"""
  46. self.ensure_one()
  47. if self.res_users_settings_id:
  48. return self.res_users_settings_id.action_disconnect_google()
  49. return {
  50. 'type': 'ir.actions.client',
  51. 'tag': 'display_notification',
  52. 'params': {
  53. 'title': _('Info'),
  54. 'message': _('No Google account connected.'),
  55. 'type': 'info',
  56. 'sticky': False,
  57. }
  58. }
  59. def action_test_google_connection(self):
  60. """Test user's Google connection"""
  61. self.ensure_one()
  62. if self.res_users_settings_id:
  63. return self.res_users_settings_id.action_test_google_connection()
  64. return {
  65. 'type': 'ir.actions.client',
  66. 'tag': 'display_notification',
  67. 'params': {
  68. 'title': _('Info'),
  69. 'message': _('No Google account connected.'),
  70. 'type': 'info',
  71. 'sticky': False,
  72. }
  73. }