[IMP] Improve perf of google calendar synchro, add demo data for Calendar

bzr revid: jke@openerp.com-20131217204238-sat6h8jc600d1n69
This commit is contained in:
jke-openerp 2013-12-17 21:42:38 +01:00
parent aa8c3666a8
commit affb77ed71
7 changed files with 97 additions and 54 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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