[IMP] Improve perf of google calendar synchro, add demo data for Calendar
bzr revid: jke@openerp.com-20131217204238-sat6h8jc600d1n69
This commit is contained in:
parent
aa8c3666a8
commit
affb77ed71
|
@ -968,7 +968,7 @@ class crm_meeting(osv.Model):
|
|||
'attendee_ids': fields.one2many('calendar.attendee', 'event_id', 'Attendees', ondelete='cascade'),
|
||||
#'attendee_ids': fields.many2many('calendar.attendee', 'crmmeeting_attendee_rel', 'crmmeeting_id', 'attendee_id', 'Attendees', ondelete='cascade'),
|
||||
'partner_ids': fields.many2many('res.partner', string='Attendees', states={'done': [('readonly', True)]}),
|
||||
'alarm_ids': fields.many2many('calendar.alarm', string='Reminders'),
|
||||
'alarm_ids': fields.many2many('calendar.alarm', string='Reminders',ondelete="restrict"),
|
||||
}
|
||||
_defaults = {
|
||||
'end_type': 'count',
|
||||
|
|
|
@ -1,15 +1,32 @@
|
|||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data noupdate="1">
|
||||
<data >
|
||||
<!--
|
||||
((((((((((( Demo Cases )))))))))))
|
||||
-->
|
||||
|
||||
<!--For Meetings-->
|
||||
<record id="res_user_another" model="res.users">
|
||||
<field name="name" >Another User</field>
|
||||
<field name="login" >Another Login</field>
|
||||
<field name="partner_id" ref="base.res_partner_1"/>
|
||||
</record>
|
||||
|
||||
<record id="cal_contact_1" model="web_calendar.contacts">
|
||||
<field eval="1" name="active"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="partner_id" ref="base.res_partner_1"/>
|
||||
</record>
|
||||
<record id="cal_contact_2" model="web_calendar.contacts">
|
||||
<field eval="1" name="active"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="partner_id" ref="base.partner_demo"/>
|
||||
</record>
|
||||
|
||||
<record id="crm_meeting_1" model="crm.meeting">
|
||||
<field eval="1" name="active"/>
|
||||
<field name="user_id" ref="base.user_root"/>
|
||||
<field name="partner_ids" eval="[(6,0,[ref('base.partner_root')])]"/>
|
||||
<field name="partner_ids" eval="[(6,0,[ref('base.partner_root'),ref('base.res_partner_1'),ref('base.res_partner_2')])]"/>
|
||||
<field name="name">Follow-up for Project proposal</field>
|
||||
<field name="description">Meeting to discuss project plan and hash out the details of implementation.</field>
|
||||
<field eval="time.strftime('%Y-%m-03 10:20:00')" name="date"/>
|
||||
|
@ -21,7 +38,8 @@
|
|||
|
||||
<record id="crm_meeting_2" model="crm.meeting">
|
||||
<field eval="1" name="active"/>
|
||||
<field name="partner_ids" eval="[(6,0,[ref('base.partner_root')])]"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="partner_ids" eval="[(6,0,[ref('base.partner_root'),ref('base.res_partner_1'),ref('base.res_partner_3')])]"/>
|
||||
<field name="name">Initial discussion</field>
|
||||
<field name="description">Discussion with partner for product.</field>
|
||||
<field name="categ_ids" eval="[(6,0,[ref('categ_meet3')])]"/>
|
||||
|
@ -45,7 +63,8 @@
|
|||
|
||||
<record id="crm_meeting_4" model="crm.meeting">
|
||||
<field eval="1" name="active"/>
|
||||
<field name="partner_ids" eval="[(6,0,[ref('base.partner_root')])]"/>
|
||||
<field name="user_id" ref="base.user_demo"/>
|
||||
<field name="partner_ids" eval="[(6,0,[ref('base.partner_demo'),ref('base.res_partner_2')])]"/>
|
||||
<field name="name">Requirements review</field>
|
||||
<field name="categ_ids" eval="[(6,0,[ref('categ_meet3')])]"/>
|
||||
<field eval="time.strftime('%Y-%m-20 8:00:00')" name="date"/>
|
||||
|
@ -56,7 +75,7 @@
|
|||
|
||||
<record id="crm_meeting_5" model="crm.meeting">
|
||||
<field eval="1" name="active"/>
|
||||
<field name="partner_ids" eval="[(6,0,[ref('base.partner_root')])]"/>
|
||||
<field name="partner_ids" eval="[(6,0,[ref('base.partner_root'),ref('base.res_partner_3')])]"/>
|
||||
<field name="name">Changes in Designing</field>
|
||||
<field name="categ_ids" eval="[(6,0,[ref('categ_meet1')])]"/>
|
||||
<field eval="time.strftime('%Y-%m-22 11:05:00')" name="date"/>
|
||||
|
@ -67,7 +86,8 @@
|
|||
|
||||
<record id="crm_meeting_6" model="crm.meeting">
|
||||
<field eval="1" name="active"/>
|
||||
<field name="partner_ids" eval="[(6,0,[ref('base.partner_root')])]"/>
|
||||
<field name="user_id" ref="res_user_another"/>
|
||||
<field name="partner_ids" eval="[(6,0,[ref('base.partner_root'),ref('base.res_partner_1'),ref('base.res_partner_4'),ref('base.res_partner_5'),ref('base.res_partner_6'),ref('base.res_partner_7')])]"/>
|
||||
<field name="name">Presentation for new Services</field>
|
||||
<field name="categ_ids" eval="[(6,0,[ref('categ_meet1'), ref('categ_meet2')])]"/>
|
||||
<field eval="time.strftime('%Y-%m-18 2:00:00')" name="date"/>
|
||||
|
@ -75,5 +95,18 @@
|
|||
<field eval="8.5" name="duration"/>
|
||||
<field name="state">draft</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="crm_meeting_7" model="crm.meeting">
|
||||
<field eval="1" name="active"/>
|
||||
<field name="user_id" ref="res_user_another"/>
|
||||
<field name="partner_ids" eval="[(6,0,[ref('base.res_partner_1'),ref('base.res_partner_4')])]"/>
|
||||
<field name="name">Meeting between 2 others users than me</field>
|
||||
<field name="categ_ids" eval="[(6,0,[ref('categ_meet1'), ref('categ_meet2')])]"/>
|
||||
<field eval="time.strftime('%Y-%m-18 2:00:00')" name="date"/>
|
||||
<field eval="time.strftime('%Y-%m-18 10:30:00')" name="date_deadline"/>
|
||||
<field eval="8.5" name="duration"/>
|
||||
<field name="state">draft</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -96,9 +96,11 @@
|
|||
<div name="module_google_calendar">
|
||||
<field name="module_google_calendar" class="oe_inline"/>
|
||||
<label for="module_google_calendar"/>
|
||||
<p attrs="{'invisible': [('module_google_calendar','=',False)]}">
|
||||
Once installed, you can configure your API credentials in "Google calendar -> API credentials"
|
||||
</p>
|
||||
<div name="google_calendar_config_description" attrs="{'invisible': [('module_google_calendar','=',False)]}">
|
||||
<p>
|
||||
Once installed, you can configure your API credentials for "Google calendar"
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</group>
|
||||
|
|
|
@ -115,6 +115,7 @@ class google_calendar(osv.osv):
|
|||
params = {
|
||||
'fields': 'items,nextPageToken',
|
||||
'access_token' : token,
|
||||
'maxResults':1000
|
||||
# 'orderBy' : 'id', #Allow to create the main recurrence event, before instance of it ! DOESNT WORK ACTUALLY ON API GMAIL
|
||||
}
|
||||
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
|
||||
|
@ -148,6 +149,10 @@ class google_calendar(osv.osv):
|
|||
|
||||
update_date = datetime.strptime(content['updated'],"%Y-%m-%dT%H:%M:%S.%fz")
|
||||
crm_meeting.write(cr, uid, [oe_event.id], {'oe_update_date':update_date})
|
||||
|
||||
if context['curr_attendee']:
|
||||
self.pool.get('calendar.attendee').write(cr,uid,[context['curr_attendee']], {'oe_synchro_date':update_date},context)
|
||||
|
||||
|
||||
def update_an_event(self, cr, uid,event, context=None):
|
||||
gs_pool = self.pool.get('google.service')
|
||||
|
@ -431,7 +436,7 @@ class google_calendar(osv.osv):
|
|||
print "### Should never be here : L462"
|
||||
raise("error L 462")
|
||||
|
||||
if event['OE_update'] != event['GG_update']:
|
||||
if event['OE_update'].split('.')[0] != event['GG_update'].split('.')[0]:
|
||||
if event['OE_update'] < event['GG_update']:
|
||||
event['td_source'] = 'GG'
|
||||
elif event['OE_update'] > event['GG_update']:
|
||||
|
@ -455,7 +460,7 @@ class google_calendar(osv.osv):
|
|||
event['td_comment'] = 'Simply Update... I\'m a single event'
|
||||
|
||||
else:
|
||||
if event['OE_synchro'] < event['OE_update']:
|
||||
if not event['OE_synchro'] or event['OE_synchro'].split('.')[0] < event['OE_update'].split('.')[0]:
|
||||
event['td_source'] = 'OE'
|
||||
event['td_action'] = "UPDATE"
|
||||
event['td_comment'] = 'Event already updated by another user, but not synchro with my google calendar'
|
||||
|
@ -507,18 +512,20 @@ class google_calendar(osv.osv):
|
|||
|
||||
#############
|
||||
### DEBUG ###
|
||||
#############
|
||||
# print " Real Event %s (%s)" % (current_event[0],event['OE_event_id'])
|
||||
# print " Found OE:%5s vs GG: %5s" % (event['OE_found'],event['GG_found'])
|
||||
# print " Recurrence OE:%5s vs GG: %5s" % (event['OE_isRecurrence'],event['GG_isRecurrence'])
|
||||
# print " Instance OE:%5s vs GG: %5s" % (event['OE_isInstance'],event['GG_isInstance'])
|
||||
# print " Update OE: %10s " % (event['OE_update'])
|
||||
# print " Update GG: %10s " % (event['GG_update'])
|
||||
# print " Status OE:%5s vs GG: %5s" % (event['OE_status'],event['GG_status'])
|
||||
# print " Action %s" % (event['td_action'])
|
||||
# print " Source %s" % (event['td_source'])
|
||||
# print " comment %s" % (event['td_comment'])
|
||||
|
||||
#############
|
||||
if event['td_action'] and event['td_action'] != 'None':
|
||||
print " Real Event %s (%s)" % (current_event[0],event['OE_event_id'])
|
||||
print " Found OE:%5s vs GG: %5s" % (event['OE_found'],event['GG_found'])
|
||||
print " Recurrence OE:%5s vs GG: %5s" % (event['OE_isRecurrence'],event['GG_isRecurrence'])
|
||||
print " Instance OE:%5s vs GG: %5s" % (event['OE_isInstance'],event['GG_isInstance'])
|
||||
print " Synchro OE: %10s " % (event['OE_synchro'])
|
||||
print " Update OE: %10s " % (event['OE_update'])
|
||||
print " Update GG: %10s " % (event['GG_update'])
|
||||
print " Status OE:%5s vs GG: %5s" % (event['OE_status'],event['GG_status'])
|
||||
print " Action %s" % (event['td_action'])
|
||||
print " Source %s" % (event['td_source'])
|
||||
print " comment %s" % (event['td_comment'])
|
||||
|
||||
|
||||
context['curr_attendee'] = event.get('OE_attendee_id',False)
|
||||
|
||||
|
|
Binary file not shown.
|
@ -1,13 +1,14 @@
|
|||
from openerp.osv import fields, osv
|
||||
|
||||
class calendar_config_settings(osv.osv_memory):
|
||||
_name = 'calendar.config.settings'
|
||||
_inherit = 'res.config.settings'
|
||||
|
||||
#_name = 'calendar.config.settings'
|
||||
_inherit = 'base.config.settings'
|
||||
|
||||
_columns = {
|
||||
'google_cal_sync': fields.boolean("Show tutorial to know how to get my 'Client ID' and my 'Client Secret'"),
|
||||
'cal_client_id': fields.char("Client_id"),
|
||||
'cal_client_secret': fields.char("Client_key"),
|
||||
'server_uri': fields.char('URI for tuto')
|
||||
}
|
||||
|
||||
|
||||
|
@ -44,8 +45,8 @@ class calendar_config_settings(osv.osv_memory):
|
|||
|
||||
cal_client_id = params.get_param(cr, uid, 'google_calendar_client_id',default='',context=context)
|
||||
cal_client_secret = params.get_param(cr, uid, 'google_calendar_client_secret',default='',context=context)
|
||||
|
||||
return dict(cal_client_id=cal_client_id,cal_client_secret=cal_client_secret)
|
||||
server_uri= "%s/googleauth/oauth2callback" % params.get_param(cr, uid, 'web.base.url',default="http://yourcompany.my.openerp.com",context=context)
|
||||
return dict(cal_client_id=cal_client_id,cal_client_secret=cal_client_secret,server_uri=server_uri)
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -2,18 +2,13 @@
|
|||
<openerp>
|
||||
<data>
|
||||
|
||||
<record id="calendar_config_settings" model="ir.ui.view">
|
||||
<field name="name">Calendar settings</field>
|
||||
<field name="model">calendar.config.settings</field>
|
||||
<record id="view_calendar_config_settings" model="ir.ui.view">
|
||||
<field name="name">Calendar_settings_grgrgrgt</field>
|
||||
<field name="model">base.config.settings</field>
|
||||
<field name="inherit_id" ref="base_setup.view_general_configuration"/>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Configure your Gmail" version="7.0" class="oe_form_configuration">
|
||||
<header>
|
||||
<button string="Apply" type="object" name="execute" class="oe_highlight"/>
|
||||
or
|
||||
<button string="Cancel" type="object" name="cancel" class="oe_link"/>
|
||||
</header>
|
||||
<separator string="Google synchronization Settings"/>
|
||||
<div>
|
||||
<div name="google_calendar" position="replace">
|
||||
<div>
|
||||
<div>
|
||||
<label for="google_cal_sync"/>
|
||||
<field name="google_cal_sync" class="oe_inline"/>
|
||||
|
@ -24,37 +19,39 @@
|
|||
<li> Connect on your google account and go to <a href='https://cloud.google.com/console' target='_blank'>https://cloud.google.com/console</a> </li>
|
||||
<li>
|
||||
Click on <b>"Create Project"</b> and enter a project name and change your id if you want. Don't forget to accept the Terms of Services
|
||||
<br/><img src='/google_calendar/static/src/img/setup_01.png' class='calendar_img_tuto'/>
|
||||
<br/><br/><img src='/google_calendar/static/src/img/setup_01.png' class='calendar_img_tuto'/>
|
||||
<br/><img src='/google_calendar/static/src/img/setup_02.png' class='calendar_img_tuto'/>
|
||||
</li>
|
||||
<li> In the menu on left side, select the sub menu APIs (from menu APIs and auth) and activate <b>"Calendar API"</b> by clicking on button "OFF".
|
||||
<br/> You will need to accept again the "Google APIs Terms of services" and "Calendar API Terms of service"
|
||||
<br/> When it's done, check that the button of <b>"Calendar API"</b> is well in green and with text "ON"
|
||||
<br/> <img src='/google_calendar/static/src/img/setup_03.png' class='calendar_img_tuto'/>
|
||||
<br/><br/> <img src='/google_calendar/static/src/img/setup_03.png' class='calendar_img_tuto'/>
|
||||
<br/> <img src='/google_calendar/static/src/img/setup_04.png' class='calendar_img_tuto'/>
|
||||
<br/> <img src='/google_calendar/static/src/img/setup_05.png' class='calendar_img_tuto'/>
|
||||
</li>
|
||||
<li>
|
||||
In the menu on left side, select the sub menu <b>'Registered apps'</b> (from menu APIs and auth) and click on button "Register APP".
|
||||
<br/> Fill in the Name of application and check that the platform is well on <b>'Web Application'</b> before to click on <b>'Register"</b>
|
||||
<br/> <img src='/google_calendar/static/src/img/setup_06.png' class='calendar_img_tuto'/>
|
||||
<br/><br/> <img src='/google_calendar/static/src/img/setup_06.png' class='calendar_img_tuto'/>
|
||||
<br/> <img src='/google_calendar/static/src/img/setup_07.png' class='calendar_img_tuto'/>
|
||||
</li>
|
||||
<li>
|
||||
Now, you can click on <b>"OAuth 2.0 Client ID"</b> and see your <u><i>Client ID</i></u> and your <u><i>Client Secret</i></u>.
|
||||
<br/> You should now configure the allowed pages on which you will be redirected. To do it, you need to complete de field <b>"Redirect RI"</b>
|
||||
and set as value your own domain followed by <i>"/googleauth/oauth2callback"</i>. (Eg: http://127.0.0.1:8069/googleauth/oauth2callback)
|
||||
<br/>
|
||||
<br/><img src='/google_calendar/static/src/img/setup_09.png' class='calendar_img_tuto'/>
|
||||
<br/> You should now configure the allowed pages on which you will be redirected. To do it, you need to complete the field <b>"Redirect RI"</b>
|
||||
and set as value (your own domain followed by <i>"/googleauth/oauth2callback"</i>) :
|
||||
<br/>==> <b><field name="server_uri" readonly="1" style='display:inline'/></b>
|
||||
<br/><br/><img src='/google_calendar/static/src/img/setup_09.png' class='calendar_img_tuto'/>
|
||||
</li>
|
||||
<li>One the uri allowed, you need to regenerate your private token by clicking on "Generate".
|
||||
<br/>Once done, you will have the both informations that you need to insert in the 2 fields below !
|
||||
<br/> <img src='/google_calendar/static/src/img/setup_08.png' class='calendar_img_tuto'/>
|
||||
<br/><br/> <img src='/google_calendar/static/src/img/setup_08.png' class='calendar_img_tuto'/>
|
||||
</li>
|
||||
<li>
|
||||
Remark : You can, if you want, personalize the consent screen that your users will see by clicking on "update" below <b>"Consent Screen"</b>.
|
||||
<br/> <img src='/google_calendar/static/src/img/setup_10.png' class='calendar_img_tuto'/>
|
||||
<br/><br/> <img src='/google_calendar/static/src/img/setup_10.png' class='calendar_img_tuto'/>
|
||||
</li>
|
||||
<a href="#" class="oe_link">Return at Top</a>
|
||||
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -72,22 +69,25 @@
|
|||
<field name="cal_client_secret" class="oe_inline" password="True"/>
|
||||
</div>
|
||||
</group>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<record id="action_config_settings_google_calendar" model="ir.actions.act_window">
|
||||
<field name="name">API Configuration</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">calendar.config.settings</field>
|
||||
<field name="res_model">base.config.settings</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">inline</field>
|
||||
</record>
|
||||
|
||||
<!--
|
||||
<menuitem id="menu_calendar_google_main" parent="base.menu_administration" name="Google Calendar"/>
|
||||
<menuitem id="menu_calendar_google_config" name="API credentials" parent="google_calendar.menu_calendar_google_main" action="action_config_settings_google_calendar"/>
|
||||
<menuitem id="menu_calendar_google_tech_config" name="Calendar" parent="base.menu_custom" groups="base.group_no_one"/>
|
||||
-->
|
||||
<menuitem id="menu_calendar_google_tech_config" name="Calendar" parent="base.menu_custom" groups="base.group_no_one" action="action_config_settings_google_calendar"/>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
Loading…
Reference in New Issue