37 lines
1.4 KiB
Python
37 lines
1.4 KiB
Python
from odoo import models, fields, api
|
|
import caldav
|
|
import logging
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
class ResUsers(models.Model):
|
|
_inherit = 'res.users'
|
|
|
|
caldav_server_url = fields.Char('CalDAV Server URL')
|
|
caldav_username = fields.Char('CalDAV Username')
|
|
caldav_password = fields.Char('CalDAV Password')
|
|
caldav_calendar_id = fields.Many2one('caldav.calendar', string='CalDAV Calendar') # Updated field
|
|
|
|
@api.model
|
|
def _is_caldav_enabled(self):
|
|
self.ensure_one()
|
|
return bool(self.caldav_server_url and self.caldav_username and self.caldav_password and self.caldav_calendar_id)
|
|
|
|
def fetch_caldav_calendars(self):
|
|
self.ensure_one()
|
|
client = caldav.DAVClient(url=self.caldav_server_url, username=self.caldav_username, password=self.caldav_password)
|
|
principal = client.principal()
|
|
calendars = principal.calendars()
|
|
caldav_calendar_model = self.env['caldav.calendar']
|
|
caldav_calendar_model.search([('user_id', '=', self.id)]).unlink() # Clear existing calendars
|
|
for calendar in calendars:
|
|
caldav_calendar_model.create({
|
|
'user_id': self.id,
|
|
'name': calendar.name,
|
|
'url': str(calendar.url),
|
|
})
|
|
return True
|
|
|
|
def _get_caldav_client(self):
|
|
self.ensure_one()
|
|
return caldav.DAVClient(url=self.caldav_server_url, username=self.caldav_username, password=self.caldav_password)
|