Browse Source

add event to google calendar

dev-rcn
root 3 years ago
parent
commit
5755f3d918
6 changed files with 136 additions and 2 deletions
  1. +3
    -2
      __manifest__.py
  2. +1
    -0
      models/__init__.py
  3. +12
    -0
      models/creds.json
  4. +88
    -0
      models/event.py
  5. +0
    -0
      models/token.txt
  6. +32
    -0
      views/event.xml

+ 3
- 2
__manifest__.py View File

@ -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


+ 1
- 0
models/__init__.py View File

@ -3,4 +3,5 @@
from . import models
from . import partnerimport
from . import donation
from . import event
#from . import partner

+ 12
- 0
models/creds.json View File

@ -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"
}

+ 88
- 0
models/event.py View File

@ -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
models/token.txt View File


+ 32
- 0
views/event.xml View File

@ -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>

Loading…
Cancel
Save