From 5755f3d9183bb450eefaf3f8738fc048101e0f59 Mon Sep 17 00:00:00 2001 From: root Date: Sun, 29 May 2022 17:51:29 +0200 Subject: [PATCH] add event to google calendar --- __manifest__.py | 5 +-- models/__init__.py | 1 + models/creds.json | 12 +++++++ models/event.py | 88 ++++++++++++++++++++++++++++++++++++++++++++++ models/token.txt | 0 views/event.xml | 32 +++++++++++++++++ 6 files changed, 136 insertions(+), 2 deletions(-) create mode 100644 models/creds.json create mode 100644 models/event.py create mode 100644 models/token.txt create mode 100644 views/event.xml diff --git a/__manifest__.py b/__manifest__.py index 8d08163..8d50f1f 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -20,7 +20,7 @@ 'version': '0.1', # any module necessary for this one to work correctly - 'depends': ['base','mail','donation'], + 'depends': ['base','mail','donation','event'], # always loaded 'data': [ @@ -33,9 +33,10 @@ # 'views/partnerimport.xml', 'report/report_donationtax.xml', 'report/report.xml', - 'views/website_participation.xml' + 'views/website_participation.xml', #'report/report_donationtax.xml', #'report/report.xml' + 'views/event.xml' ], # only loaded in demonstration mode diff --git a/models/__init__.py b/models/__init__.py index 1a1dd6e..f9a8345 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -3,4 +3,5 @@ from . import models from . import partnerimport from . import donation +from . import event #from . import partner \ No newline at end of file diff --git a/models/creds.json b/models/creds.json new file mode 100644 index 0000000..81e5711 --- /dev/null +++ b/models/creds.json @@ -0,0 +1,12 @@ +{ + "type": "service_account", + "project_id": "kalachakra-351613", + "private_key_id": "eb90d78fb9f871dc161296f2a115de14565f7379", + "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCvqyF41buR5hDo\nvgJiipT5WM3HO75dG7ZefQobcfYO6JbX3Agsgmt8EN/y+L5xgmA4/+LLmc/UJFJs\nb2+GCK+nSZ6Akmu8eo2BM08lofgVT4IO2uJW4DW/2Hkp1WHelcIdvgH6Ak0fg2kV\ngv6H7mi6GGqVFa/ZL/qECEQFl/3Cby3jzX7Jku7oF/juobafyMmigVGm3F8t7ug6\n5RcYYhNwS+oSGZ+saEyDu8GQ5B5JqBMStwI+LvDZoSWWg0y0iRqWmqsOl/ElcQCm\nnvZgzoNLmT/1NbPq9aNG96vZuKsS67MiiW4hahXJBjOygOqV4L+kOBQ6l1oimFmH\n8GYWQqR/AgMBAAECggEAF5lBsd3kiMEDXIDKCTrcsHKBklYwSInEggUCKpWwnGga\ne30PjAspLU2HCDjqPI1rJ70YVomfJbyLZg3CSZs5HZwCMvt4haVhBQ5Df6a2kQZR\nTnWRGmKcVd1ayYfk0eYEYcJ4uYE9oxIgN8eVMeWRJA7LoqN7MA4F9V625Jl6eXgE\nc7oAx7FLDq5pql8O12QQsAKtaJaYZ15cpM5HFFjUm1B5xBZ0EyiHgbUWZn1o3ZfV\nMZNv9SwzgLtWEFDFhweT7cF/wIwcpoB7Hi5MXqSwHY9V2cy4zSHB1w+COvVpwbKT\nfWOaG+G+Qj5A9XQyr5nVj2k2lNxc/X4+qiGK/kPjAQKBgQD17urHjcS2l6DN1FzP\nGVVclixyh6eCxUZ9McivdXjrXMfWCjwMcGCq3nUluWUTPvmFq4XddM+jirrllKd8\nr1aLmJDkQIKDad/Cl9JPUnVq/cID8ldRKLV/CFB1CiRccRggq8nHmzSb5tFkJsvZ\n39QOizE8HtpqSSWlCHDIJyw+oQKBgQC22+x4m+8sGjjQ0pnGp4PS0WFkUa9sdfQF\nDiTIVKLginhqbukVzft1Jl0NuOl8eUXobvdoscGuZotUfPMFaahpYpsBP/S14rsu\n+fBJKnboFgcOJtmoYAKG2jzeV8ojY/B/vSSfcb4UOnikorQDsK8k6DY9tCLFdVOl\nQBpk1LevHwKBgBvG0kmbn34n/geBVsIlUFjWtUpyO98vPNjjCJGYqQGcRw3LtiCJ\niMGDwqNyHxJfaHtKdiIfEVydTKKleY1BmHrHzoWZK6SADr/BugUvgQeGhaVAd9A4\n0tb4L24oqRavx1PZUz7yLqz1Eu1G3HtNJnxGCFeL/ItIm7HaFDLnCb5BAoGAaga6\n5nQECh5qMyrp3zXiSar+PZzfipQaGZRJ356zkl63037bx7jXxOWprvs45uOqlUtC\nSYJIO0daInMQtmK9M93o4qCi05PT1Tk3CjWFHK0pChucuPRygp6oDIP6wOqB2I9j\nXNAm1rPQoCV3G2ynIU9DpCN+xd9x0K+Knkx49SECgYBnekMxReycVU3mowP+PAWR\nR3/+Z8egxqynDKIF4HQ7amOKPuGvH0xle+EacUNPK3griylV+jBd6rKAdGGZ5bKZ\nDXbB81DQ9OvfI8nugL/n+kQ42NwB2gMa23xFG9whjfDPice5qndPAC9vZXVr+iX8\nQ+LVZ9iLobW+AhqtXjokig==\n-----END PRIVATE KEY-----\n", + "client_email": "kalachakra-srv@kalachakra-351613.iam.gserviceaccount.com", + "client_id": "117984242661766518148", + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/kalachakra-srv%40kalachakra-351613.iam.gserviceaccount.com" + } \ No newline at end of file diff --git a/models/event.py b/models/event.py new file mode 100644 index 0000000..65b74d6 --- /dev/null +++ b/models/event.py @@ -0,0 +1,88 @@ + + + +from odoo import models, fields, api +from odoo.exceptions import UserError, ValidationError,Warning +from psycopg2 import sql, DatabaseError + +from werkzeug import utils + + +import os.path +from google.oauth2 import service_account +from googleapiclient.discovery import build +from datetime import datetime, timedelta + + +# IF YOU MODIFY THE SCOPE DELETE THE TOKEN.TXT FILE +SCOPES = ['https://www.googleapis.com/auth/calendar'] +SERVICE_ACCOUNT_FILE = '/usr/lib/python3/dist-packages/odoo/kalachakra_module/kalachakra/models/creds.json' # You should make it an environment variable +SUBJECT = 'kalachakra-srv@kalachakra-351613.iam.gserviceaccount.com' + + +class EventTagCategory(models.Model): + _inherit = "event.tag.category" + _description = 'Event tag category' + + calendar_id=fields.Char('google calendar id') + +class EventEvent(models.Model): + _inherit = "event.event" + _description = 'Event' + + calendar_id=fields.Char('calendar id') + event_id=fields.Char('event id') + + def add_event_to_google_agenda(self): + credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES) + delegated_credentials = credentials.with_subject(SUBJECT) + service = build('calendar', 'v3', credentials=delegated_credentials) + + d = datetime.utcnow().date() + tomorrow = datetime(d.year, d.month, d.day, 10)+timedelta(days=1) + start = tomorrow.isoformat() + end = (tomorrow + timedelta(hours=1)).isoformat() + + start=self.date_begin.isoformat() + end=self.date_end.isoformat() + diff_date=self.date_end-self.date_begin + if diff_date.days>0: + date_param=self.date_begin.strftime('%Y-%m-%d')+'-'+self.date_end.strftime('%Y-%m-%d') + else: + date_param=self.date_begin.strftime('%Y-%m-%d')+'-'+str(self.id) + + name_param=self.name.replace(' ','-') + name_param=name_param.replace('\'','-') + description='Click here to register' + #str(self.date_begin.year())+'-'+str(self.date_begin.month())+'-'+self.date_begin.day() + + body={"summary": self.name, + "description": description, + "start": {"dateTime": start, "timeZone": 'Asia/Karachi'}, + "end": {"dateTime": end, "timeZone": 'Asia/Karachi'}, + } + + #recherche de l'id calendar lié à l'étiquette de l'événément + calendar_id=self.tag_ids.category_id.calendar_id + if calendar_id: + event = service.events().insert(calendarId=calendar_id, body=body).execute() + + self.event_id=event['id'] + else: + raise Warning('no calendar id, please check configuration tags') + + def remove_event_to_google_agenda(self): + credentials = service_account.Credentials.from_service_account_file(SERVICE_ACCOUNT_FILE, scopes=SCOPES) + delegated_credentials = credentials.with_subject(SUBJECT) + service = build('calendar', 'v3', credentials=delegated_credentials) + + + #recherche de l'id calendar lié à l'étiquette de l'événément + calendar_id=self.tag_ids.category_id.calendar_id + if calendar_id: + service.events().delete(calendarId=calendar_id, eventId=self.event_id).execute() + + self.event_id=False + else: + raise Warning('no calendar id, please check configuration tags') + \ No newline at end of file diff --git a/models/token.txt b/models/token.txt new file mode 100644 index 0000000..e69de29 diff --git a/views/event.xml b/views/event.xml new file mode 100644 index 0000000..e9b7ff5 --- /dev/null +++ b/views/event.xml @@ -0,0 +1,32 @@ + + + + + event_tag_category_view_form_inherit_kalachakra + event.tag.category + + + + + + + + + + + + + event.view.form.inherit.kalachakra + event.event + + + +