diff --git a/addons/calendar/security/ir.model.access.csv b/addons/calendar/security/ir.model.access.csv index 7814b10d201..76c5f1a7d19 100644 --- a/addons/calendar/security/ir.model.access.csv +++ b/addons/calendar/security/ir.model.access.csv @@ -6,6 +6,7 @@ access_crm_meeting_manager,crm.meeting.manager,model_crm_meeting,base.group_sale access_crm_meeting,crm.meeting,model_crm_meeting,base.group_sale_salesman,1,1,1,0 access_crm_meeting_all,crm.meeting_all,model_crm_meeting,base.group_user,1,1,1,1 access_crm_meeting_partner_manager,crm.meeting.partner.manager,model_crm_meeting,base.group_partner_manager,1,1,1,1 +access_crm_meeting_type_all,crm.meeting.type.all,model_crm_meeting_type,,1,0,0,0 access_crm_meeting_type_sale_manager,crm.meeting.type.manager,model_crm_meeting_type,base.group_sale_manager,1,1,1,0 access_crm_meeting_type_sale_user,crm.meeting.type.user,model_crm_meeting_type,base.group_user,1,0,0,0 access_crm_meeting_type_sale_user,crm.meeting.type.salesman,model_crm_meeting_type,base.group_sale_salesman,1,0,0,0 diff --git a/addons/calendar/static/src/css/calendar.css b/addons/calendar/static/src/css/calendar.css index a930244d630..f3ee714c946 100644 --- a/addons/calendar/static/src/css/calendar.css +++ b/addons/calendar/static/src/css/calendar.css @@ -3,18 +3,26 @@ height : 13px; margin-bottom : -4px; display : inline-block; + } .openerp .needsAction , .tentative,.text-core .text-tag .custom-edit, .text-core .text-tag .tentative { background : url(/web/static/src/img/icons/gtk-normal.png) no-repeat; background-size : 11px 11px; + } .openerp .accepted , .text-core .text-tag .accepted { background : url(/web/static/src/img/icons/gtk-yes.png) no-repeat; background-size : 11px 11px; + } .openerp .declined , .text-core .text-tag .declined { background : url(/web/static/src/img/icons/gtk-no.png) no-repeat; background-size : 11px 11px; + +} + +.openerp a.oe_invitation { + cursor:default !important; } .cal_meeting { font-size : 24px; diff --git a/addons/email_template/email_template.py b/addons/email_template/email_template.py index 19c360f0c81..bfcec956ed6 100644 --- a/addons/email_template/email_template.py +++ b/addons/email_template/email_template.py @@ -31,7 +31,6 @@ from openerp.osv import osv, fields from openerp import tools from openerp.tools.translate import _ from urllib import urlencode, quote as quote -from openerp.tools.safe_eval import safe_eval _logger = logging.getLogger(__name__) @@ -418,9 +417,7 @@ class email_template(osv.osv): recipient_ids = [] if 'partner_to' in values: if values['partner_to']: - partner_to = safe_eval(values['partner_to']) - # if not hasattr(partner_to, '__iter__'): - # partner_to = [partner_to] + partner_to = values['partner_to'].split(',') for partner_id in partner_to: recipient_ids.append((4,partner_id)) values['recipient_ids'] = recipient_ids diff --git a/addons/email_template/tests/test_ir_actions.py b/addons/email_template/tests/test_ir_actions.py index d323ee36c1f..9b408a45316 100644 --- a/addons/email_template/tests/test_ir_actions.py +++ b/addons/email_template/tests/test_ir_actions.py @@ -33,7 +33,7 @@ class TestServerActionsEmail(TestServerActionsBase): 'name': 'TestTemplate', 'email_from': 'myself@example.com', 'email_to': 'brigitte@example.com', - 'partner_to': '[%s]' % self.test_partner_id, + 'partner_to': '%s' % self.test_partner_id, 'model_id': self.res_partner_model_id, 'subject': 'About ${object.name}', 'body_html': '

Dear ${object.name}, your parent is ${object.parent_id and object.parent_id.name or "False"}

', diff --git a/addons/google_calendar/google_calendar.py b/addons/google_calendar/google_calendar.py index 7670d794523..f1d3c064cdb 100644 --- a/addons/google_calendar/google_calendar.py +++ b/addons/google_calendar/google_calendar.py @@ -117,11 +117,10 @@ class google_calendar(osv.osv): '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'} - url = "/calendar/v3/calendars/%s/events" % 'primary' #?fields=%s&access_token=%s" % ('primary',urllib.quote('items,nextPageToken'), token) + url = "/calendar/v3/calendars/%s/events" % 'primary' if nextPageToken: params['pageToken'] = nextPageToken @@ -166,7 +165,7 @@ class google_calendar(osv.osv): response = gs_pool._do_request(cr, uid, url, data, headers, type='GET', context=context) - #TODO, il http fail, no event, do DELETE ! ? + #TO_CHECK : , if http fail, no event, do DELETE ? return response @@ -212,7 +211,7 @@ class google_calendar(osv.osv): continue attendee_id = res_partner_obj.search(cr, uid,[('email', '=', google_attendee['email'])], context=context) if not attendee_id: - attendee_id = [res_partner_obj.create(cr, uid,{'email': google_attendee['email'], 'name': google_attendee.get("displayName",False) or google_attendee['email'] }, context=context)] + attendee_id = [res_partner_obj.create(cr, uid,{'email': google_attendee['email'],'Customer': False, 'name': google_attendee.get("displayName",False) or google_attendee['email'] }, context=context)] attendee = res_partner_obj.read(cr, uid, attendee_id[0], ['email'], context=context) partner_record.append((4, attendee.get('id'))) attendee['partner_id'] = attendee.pop('id') @@ -251,7 +250,7 @@ class google_calendar(osv.osv): 'description': single_event_dict.get('description',False), 'location':single_event_dict.get('location',False), 'class':single_event_dict.get('visibility','public'), - 'oe_update_date':update_date, #event['GG_event']['update'] + 'oe_update_date':update_date, # 'google_internal_event_id': single_event_dict.get('id',False), }) @@ -308,7 +307,6 @@ class google_calendar(osv.osv): update_date = datetime.strptime(response['updated'],"%Y-%m-%dT%H:%M:%S.%fz") crm_meeting.write(cr, uid, att.event_id.id, {'oe_update_date':update_date}) att_obj.write(cr, uid, [att.id], {'google_internal_event_id': response['id'], 'oe_synchro_date':update_date}) - #Check that response OK and return according to that cr.commit() return True @@ -434,10 +432,8 @@ class google_calendar(osv.osv): event['td_source'] = (event['OE_status'] and "OE") or (event['GG_status'] and "GG") #If event is not deleted ! elif event['OE_status'] and event['GG_status']: - if not event['GG_update']: - print "### Should never be here : L462" - raise("error L 462") - +# if not event['GG_update']: +# print "### Should never be here if event['OE_update'].split('.')[0] != event['GG_update'].split('.')[0]: if event['OE_update'] < event['GG_update']: event['td_source'] = 'GG' @@ -551,7 +547,6 @@ class google_calendar(osv.osv): meeting = crm_meeting.browse(cr,uid,res,context=context) attendee_record_id = att_obj.search(cr, uid, [('partner_id','=', myPartnerID), ('event_id','=',res)], context=context) self.pool.get('calendar.attendee').write(cr,uid,attendee_record_id, {'oe_synchro_date':meeting.oe_update_date,'google_internal_event_id': event['GG_event']['id']},context=context_tmp) - #==> should be = event['GG_event']['updated'] elif actSrc == 'OE': raise "Should be never here, creation for OE is done before update !" #Add to batch @@ -665,7 +660,7 @@ class google_calendar(osv.osv): vals['google_%s_token_validity' % self.STR_SERVICE] = datetime.now() + timedelta(seconds=all_token.get('expires_in')) vals['google_%s_token' % self.STR_SERVICE] = all_token.get('access_token') - self.pool.get('res.users').write(cr,uid,uid,vals,context=context) + self.pool.get('res.users').write(cr,SUPERUSER_ID,uid,vals,context=context) def need_authorize(self,cr,uid,context=None): current_user = self.pool.get('res.users').browse(cr,uid,uid,context=context) diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py index 78de6f76c0e..38fc36e9685 100644 --- a/addons/hr_holidays/hr_holidays.py +++ b/addons/hr_holidays/hr_holidays.py @@ -370,8 +370,12 @@ class hr_holidays(osv.osv): 'date': record.date_from, 'end_date': record.date_to, 'date_deadline': record.date_to, - 'state': 'open', # to block that meeting date in the calendar - } + 'state': 'open', # to block that meeting date in the calendar + } + #Add the partner_id (if exist) as an attendee + if record.user_id and record.user_id.partner_id: + meeting_vals['partner_ids'] = [(4,record.user_id.partner_id.id)] + meeting_id = meeting_obj.create(cr, uid, meeting_vals) self._create_resource_leave(cr, uid, [record], context=context) self.write(cr, uid, ids, {'meeting_id': meeting_id}) diff --git a/addons/hr_holidays/hr_holidays_view.xml b/addons/hr_holidays/hr_holidays_view.xml index a6f64c7f97b..f3758d2618c 100644 --- a/addons/hr_holidays/hr_holidays_view.xml +++ b/addons/hr_holidays/hr_holidays_view.xml @@ -42,7 +42,7 @@ + quick_add="False" avatar_model="hr.employee">