@ -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" | |||
} |
@ -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='<a href="'+self.env['ir.config_parameter'].get_param('web.base.url')+'/event/'+name_param+'-'+date_param+'/register">Click here to register</a>' | |||
#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') | |||
@ -0,0 +1,32 @@ | |||
<?xml version="1.0" encoding="utf-8" ?> | |||
<odoo> | |||
<record id="event_tag_category_view_form" model="ir.ui.view"> | |||
<field name="name">event_tag_category_view_form_inherit_kalachakra</field> | |||
<field name="model">event.tag.category</field> | |||
<field name="inherit_id" ref="event.event_tag_category_view_form" /> | |||
<field name="arch" type="xml"> | |||
<xpath expr="//div[@class='oe_title']" position="after"> | |||
<group> | |||
<field name="calendar_id"/> | |||
</group> | |||
</xpath> | |||
</field> | |||
</record> | |||
<record id="kalachakra.event_view_form" model="ir.ui.view"> | |||
<field name="name">event.view.form.inherit.kalachakra</field> | |||
<field name="model">event.event</field> | |||
<field name="inherit_id" ref="event.view_event_form" /> | |||
<field name="arch" type="xml"> | |||
<xpath expr="//field[@name='stage_id']" position="before"> | |||
<button name="add_event_to_google_agenda" type="object" string="Add event to google agenda" class="btn btn-warning"/> | |||
<button name="remove_event_to_google_agenda" type="object" string="Remove event from google agenda" class="btn btn-danger"/> | |||
</xpath> | |||
</field> | |||
</record> | |||
</odoo> |