[TYPO] Rename base_calendar into calendar
bzr revid: jke@openerp.com-20131219144739-9ic700ycef8uklbc
This commit is contained in:
parent
3d04737ab1
commit
dd285d23af
|
@ -19,7 +19,7 @@
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
import base_calendar
|
import calendar
|
||||||
import controllers
|
import controllers
|
||||||
#import res_config
|
#import res_config
|
||||||
|
|
|
@ -38,28 +38,28 @@ If you need to manage your meetings, you should install the CRM module.
|
||||||
'author': 'OpenERP SA',
|
'author': 'OpenERP SA',
|
||||||
'category': 'Hidden/Dependency',
|
'category': 'Hidden/Dependency',
|
||||||
'website': 'http://www.openerp.com',
|
'website': 'http://www.openerp.com',
|
||||||
'demo': ['base_calendar_demo.xml'],
|
'demo': ['calendar_demo.xml'],
|
||||||
'data': [
|
'data': [
|
||||||
'security/calendar_security.xml',
|
'security/calendar_security.xml',
|
||||||
'security/ir.model.access.csv',
|
'security/ir.model.access.csv',
|
||||||
'base_calendar_view.xml',
|
'calendar_view.xml',
|
||||||
'base_calendar_data.xml',
|
'calendar_data.xml',
|
||||||
],
|
],
|
||||||
'js': [
|
'js': [
|
||||||
'static/src/js/*.js'
|
'static/src/js/*.js'
|
||||||
],
|
],
|
||||||
'qweb': ['static/src/xml/*.xml'],
|
'qweb': ['static/src/xml/*.xml'],
|
||||||
'css': [
|
'css': [
|
||||||
'static/src/css/base_calender.css'
|
'static/src/css/calendar.css'
|
||||||
],
|
],
|
||||||
'test' : [
|
'test' : [
|
||||||
'test/base_calendar_test.yml',
|
'test/calendar_test.yml',
|
||||||
'test/test_crm_recurrent_meeting_case2.yml'
|
'test/test_crm_recurrent_meeting_case2.yml'
|
||||||
],
|
],
|
||||||
'installable': True,
|
'installable': True,
|
||||||
'application': True,
|
'application': True,
|
||||||
'auto_install': False,
|
'auto_install': False,
|
||||||
'images': ['images/base_calendar1.jpeg','images/base_calendar2.jpeg','images/base_calendar3.jpeg','images/base_calendar4.jpeg'],
|
'images': ['images/calendar1.jpeg','images/calendar2.jpeg','images/calendar3.jpeg','images/calendar4.jpeg'],
|
||||||
}
|
}
|
||||||
|
|
||||||
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
|
|
|
@ -39,16 +39,16 @@ from openerp.tools.translate import _
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def base_calendar_id2real_id(base_calendar_id=None, with_date=False):
|
def calendar_id2real_id(calendar_id=None, with_date=False):
|
||||||
"""
|
"""
|
||||||
Convert a "virtual/recurring event id" (type string) into a real event id (type int).
|
Convert a "virtual/recurring event id" (type string) into a real event id (type int).
|
||||||
E.g. virtual/recurring event id is 4-20091201100000, so it will return 4.
|
E.g. virtual/recurring event id is 4-20091201100000, so it will return 4.
|
||||||
@param base_calendar_id: id of calendar
|
@param calendar_id: id of calendar
|
||||||
@param with_date: if a value is passed to this param it will return dates based on value of withdate + base_calendar_id
|
@param with_date: if a value is passed to this param it will return dates based on value of withdate + calendar_id
|
||||||
@return: real event id
|
@return: real event id
|
||||||
"""
|
"""
|
||||||
if base_calendar_id and isinstance(base_calendar_id, (str, unicode)):
|
if calendar_id and isinstance(calendar_id, (str, unicode)):
|
||||||
res = base_calendar_id.split('-')
|
res = calendar_id.split('-')
|
||||||
if len(res) >= 2:
|
if len(res) >= 2:
|
||||||
real_id = res[0]
|
real_id = res[0]
|
||||||
if with_date:
|
if with_date:
|
||||||
|
@ -58,16 +58,16 @@ def base_calendar_id2real_id(base_calendar_id=None, with_date=False):
|
||||||
return (int(real_id), real_date, end.strftime("%Y-%m-%d %H:%M:%S"))
|
return (int(real_id), real_date, end.strftime("%Y-%m-%d %H:%M:%S"))
|
||||||
return int(real_id)
|
return int(real_id)
|
||||||
|
|
||||||
return base_calendar_id and int(base_calendar_id) or base_calendar_id
|
return calendar_id and int(calendar_id) or calendar_id
|
||||||
|
|
||||||
def get_real_ids(ids):
|
def get_real_ids(ids):
|
||||||
if isinstance(ids, (str, int, long)):
|
if isinstance(ids, (str, int, long)):
|
||||||
return base_calendar_id2real_id(ids)
|
return calendar_id2real_id(ids)
|
||||||
|
|
||||||
if isinstance(ids, (list, tuple)):
|
if isinstance(ids, (list, tuple)):
|
||||||
res = []
|
res = []
|
||||||
for id in ids:
|
for id in ids:
|
||||||
res.append(base_calendar_id2real_id(id))
|
res.append(calendar_id2real_id(id))
|
||||||
return res
|
return res
|
||||||
|
|
||||||
class calendar_attendee(osv.osv):
|
class calendar_attendee(osv.osv):
|
||||||
|
@ -221,8 +221,8 @@ class calendar_attendee(osv.osv):
|
||||||
ids = [ids]
|
ids = [ids]
|
||||||
|
|
||||||
for attendee in self.browse(cr, uid, ids, context=context):
|
for attendee in self.browse(cr, uid, ids, context=context):
|
||||||
dummy,template_id = data_pool.get_object_reference(cr, uid, 'base_calendar',template_xmlid)
|
dummy,template_id = data_pool.get_object_reference(cr, uid, 'calendar',template_xmlid)
|
||||||
dummy,act_id = data_pool.get_object_reference(cr, uid, 'base_calendar', "view_crm_meeting_calendar")
|
dummy,act_id = data_pool.get_object_reference(cr, uid, 'calendar', "view_crm_meeting_calendar")
|
||||||
|
|
||||||
if attendee.email and email_from:
|
if attendee.email and email_from:
|
||||||
ics_file = self.get_ics_file(cr, uid, attendee.event_id, context=context)
|
ics_file = self.get_ics_file(cr, uid, attendee.event_id, context=context)
|
||||||
|
@ -280,8 +280,8 @@ class calendar_attendee(osv.osv):
|
||||||
ids = [ids]
|
ids = [ids]
|
||||||
|
|
||||||
for attendee in self.browse(cr, uid, ids, context=context):
|
for attendee in self.browse(cr, uid, ids, context=context):
|
||||||
dummy,template_id = data_pool.get_object_reference(cr, uid, 'base_calendar', template_xmlid)
|
dummy,template_id = data_pool.get_object_reference(cr, uid, 'calendar', template_xmlid)
|
||||||
dummy,act_id = data_pool.get_object_reference(cr, uid, 'base_calendar', "view_crm_meeting_calendar")
|
dummy,act_id = data_pool.get_object_reference(cr, uid, 'calendar', "view_crm_meeting_calendar")
|
||||||
body = template_pool.browse(cr, uid, template_id, context=context).body_html
|
body = template_pool.browse(cr, uid, template_id, context=context).body_html
|
||||||
if attendee.email and email_from:
|
if attendee.email and email_from:
|
||||||
ics_file = self.get_ics_file(cr, uid, attendee.event_id, context=context)
|
ics_file = self.get_ics_file(cr, uid, attendee.event_id, context=context)
|
||||||
|
@ -347,7 +347,7 @@ class calendar_attendee(osv.osv):
|
||||||
meeting_obj = self.pool.get('crm.meeting')
|
meeting_obj = self.pool.get('crm.meeting')
|
||||||
res = self.write(cr, uid, ids, {'state': 'accepted'}, context)
|
res = self.write(cr, uid, ids, {'state': 'accepted'}, context)
|
||||||
for attendee in self.browse(cr, uid, ids, context=context):
|
for attendee in self.browse(cr, uid, ids, context=context):
|
||||||
meeting_obj.message_post(cr, uid, attendee.event_id.id, body=_(("%s has accepted invitation") % (attendee.cn)),subtype="base_calendar.subtype_invitation", context=context)
|
meeting_obj.message_post(cr, uid, attendee.event_id.id, body=_(("%s has accepted invitation") % (attendee.cn)),subtype="calendar.subtype_invitation", context=context)
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
@ -361,7 +361,7 @@ class calendar_attendee(osv.osv):
|
||||||
meeting_obj = self.pool.get('crm.meeting')
|
meeting_obj = self.pool.get('crm.meeting')
|
||||||
res = self.write(cr, uid, ids, {'state': 'declined'}, context)
|
res = self.write(cr, uid, ids, {'state': 'declined'}, context)
|
||||||
for attendee in self.browse(cr, uid, ids, context=context):
|
for attendee in self.browse(cr, uid, ids, context=context):
|
||||||
meeting_obj.message_post(cr, uid, attendee.event_id.id, body=_(("%s has declined invitation") % (attendee.cn)),subtype="base_calendar.subtype_invitation", context=context)
|
meeting_obj.message_post(cr, uid, attendee.event_id.id, body=_(("%s has declined invitation") % (attendee.cn)),subtype="calendar.subtype_invitation", context=context)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def create(self, cr, uid, vals, context=None):
|
def create(self, cr, uid, vals, context=None):
|
||||||
|
@ -628,8 +628,8 @@ class calendar_alarm_manager(osv.osv):
|
||||||
}
|
}
|
||||||
|
|
||||||
for attendee in event.attendee_ids:
|
for attendee in event.attendee_ids:
|
||||||
dummy,template_id = data_pool.get_object_reference(cr, uid, 'base_calendar', 'crm_email_template_meeting_reminder')
|
dummy,template_id = data_pool.get_object_reference(cr, uid, 'calendar', 'crm_email_template_meeting_reminder')
|
||||||
dummy,act_id = data_pool.get_object_reference(cr, uid, 'base_calendar', "view_crm_meeting_calendar")
|
dummy,act_id = data_pool.get_object_reference(cr, uid, 'calendar', "view_crm_meeting_calendar")
|
||||||
body = template_pool.browse(cr, uid, template_id, context=context).body_html
|
body = template_pool.browse(cr, uid, template_id, context=context).body_html
|
||||||
|
|
||||||
#mail_from = tools.config.get('email_from',event.user_id.email)
|
#mail_from = tools.config.get('email_from',event.user_id.email)
|
||||||
|
@ -726,7 +726,7 @@ class ir_values(osv.osv):
|
||||||
new_model = []
|
new_model = []
|
||||||
for data in models:
|
for data in models:
|
||||||
if type(data) in (list, tuple):
|
if type(data) in (list, tuple):
|
||||||
new_model.append((data[0], base_calendar_id2real_id(data[1])))
|
new_model.append((data[0], calendar_id2real_id(data[1])))
|
||||||
else:
|
else:
|
||||||
new_model.append(data)
|
new_model.append(data)
|
||||||
return super(ir_values, self).set(cr, uid, key, key2, name, new_model, \
|
return super(ir_values, self).set(cr, uid, key, key2, name, new_model, \
|
||||||
|
@ -738,7 +738,7 @@ class ir_values(osv.osv):
|
||||||
new_model = []
|
new_model = []
|
||||||
for data in models:
|
for data in models:
|
||||||
if type(data) in (list, tuple):
|
if type(data) in (list, tuple):
|
||||||
new_model.append((data[0], base_calendar_id2real_id(data[1])))
|
new_model.append((data[0], calendar_id2real_id(data[1])))
|
||||||
else:
|
else:
|
||||||
new_model.append(data)
|
new_model.append(data)
|
||||||
return super(ir_values, self).get(cr, uid, key, key2, new_model, \
|
return super(ir_values, self).get(cr, uid, key, key2, new_model, \
|
||||||
|
@ -758,7 +758,7 @@ class ir_model(osv.osv):
|
||||||
context=context, load=load)
|
context=context, load=load)
|
||||||
if data:
|
if data:
|
||||||
for val in data:
|
for val in data:
|
||||||
val['id'] = base_calendar_id2real_id(val['id'])
|
val['id'] = calendar_id2real_id(val['id'])
|
||||||
return isinstance(ids, (str, int, long)) and data[0] or data
|
return isinstance(ids, (str, int, long)) and data[0] or data
|
||||||
|
|
||||||
|
|
||||||
|
@ -772,9 +772,9 @@ def exp_report(db, uid, object, ids, data=None, context=None):
|
||||||
original_exp_report(db, uid, object, ids, data, context)
|
original_exp_report(db, uid, object, ids, data, context)
|
||||||
new_ids = []
|
new_ids = []
|
||||||
for id in ids:
|
for id in ids:
|
||||||
new_ids.append(base_calendar_id2real_id(id))
|
new_ids.append(calendar_id2real_id(id))
|
||||||
if data.get('id', False):
|
if data.get('id', False):
|
||||||
data['id'] = base_calendar_id2real_id(data['id'])
|
data['id'] = calendar_id2real_id(data['id'])
|
||||||
return original_exp_report(db, uid, object, new_ids, data, context)
|
return original_exp_report(db, uid, object, new_ids, data, context)
|
||||||
|
|
||||||
openerp.service.report.exp_report = exp_report
|
openerp.service.report.exp_report = exp_report
|
||||||
|
@ -946,10 +946,10 @@ class crm_meeting(osv.Model):
|
||||||
|
|
||||||
_track = {
|
_track = {
|
||||||
'location': {
|
'location': {
|
||||||
'base_calendar.subtype_invitation': lambda self, cr, uid, obj, ctx=None: True,
|
'calendar.subtype_invitation': lambda self, cr, uid, obj, ctx=None: True,
|
||||||
},
|
},
|
||||||
'date': {
|
'date': {
|
||||||
'base_calendar.subtype_invitation': lambda self, cr, uid, obj, ctx=None: True,
|
'calendar.subtype_invitation': lambda self, cr, uid, obj, ctx=None: True,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
_columns = {
|
_columns = {
|
||||||
|
@ -1133,7 +1133,7 @@ class crm_meeting(osv.Model):
|
||||||
mail_from = current_user.email or tools.config.get('email_from', False)
|
mail_from = current_user.email or tools.config.get('email_from', False)
|
||||||
print "Send mail... from ",mail_from, " to ",att_id
|
print "Send mail... from ",mail_from, " to ",att_id
|
||||||
if self.pool.get('calendar.attendee')._send_mail_to_attendees(cr, uid, att_id, email_from = mail_from, context=context):
|
if self.pool.get('calendar.attendee')._send_mail_to_attendees(cr, uid, att_id, email_from = mail_from, context=context):
|
||||||
self.message_post(cr, uid, event.id, body=_("An invitation email has been sent to attendee %s") % (partner.name,),subtype="base_calendar.subtype_invitation", context=context)
|
self.message_post(cr, uid, event.id, body=_("An invitation email has been sent to attendee %s") % (partner.name,),subtype="calendar.subtype_invitation", context=context)
|
||||||
|
|
||||||
if new_attendees:
|
if new_attendees:
|
||||||
self.write(cr, uid, [event.id], {'attendee_ids': [(4, att) for att in new_attendees]},context=context)
|
self.write(cr, uid, [event.id], {'attendee_ids': [(4, att) for att in new_attendees]},context=context)
|
||||||
|
@ -1226,7 +1226,7 @@ class crm_meeting(osv.Model):
|
||||||
|
|
||||||
if [True for item in new_pile if not item]:
|
if [True for item in new_pile if not item]:
|
||||||
continue
|
continue
|
||||||
# idval = real_id2base_calendar_id(data['id'], r_date.strftime("%Y-%m-%d %H:%M:%S"))
|
# idval = real_id2calendar_id(data['id'], r_date.strftime("%Y-%m-%d %H:%M:%S"))
|
||||||
idval = '%d-%s' % (ev.id, r_date.strftime("%Y%m%d%H%M%S"))
|
idval = '%d-%s' % (ev.id, r_date.strftime("%Y%m%d%H%M%S"))
|
||||||
result.append(idval)
|
result.append(idval)
|
||||||
|
|
||||||
|
@ -1365,7 +1365,7 @@ class crm_meeting(osv.Model):
|
||||||
def message_get_subscription_data(self, cr, uid, ids, user_pid=None, context=None):
|
def message_get_subscription_data(self, cr, uid, ids, user_pid=None, context=None):
|
||||||
res = {}
|
res = {}
|
||||||
for virtual_id in ids:
|
for virtual_id in ids:
|
||||||
real_id = base_calendar_id2real_id(virtual_id)
|
real_id = calendar_id2real_id(virtual_id)
|
||||||
result = super(crm_meeting, self).message_get_subscription_data(cr, uid, [real_id], user_pid=None, context=context)
|
result = super(crm_meeting, self).message_get_subscription_data(cr, uid, [real_id], user_pid=None, context=context)
|
||||||
res[virtual_id] = result[real_id]
|
res[virtual_id] = result[real_id]
|
||||||
return res
|
return res
|
||||||
|
@ -1423,7 +1423,7 @@ class crm_meeting(osv.Model):
|
||||||
|
|
||||||
if current_user.email:
|
if current_user.email:
|
||||||
if self.pool.get('calendar.attendee')._send_mail_to_attendees(cr, uid, [att.id for att in event.attendee_ids], email_from = current_user.email, context=context):
|
if self.pool.get('calendar.attendee')._send_mail_to_attendees(cr, uid, [att.id for att in event.attendee_ids], email_from = current_user.email, context=context):
|
||||||
self.message_post(cr, uid, event.id, body=_("An invitation email has been sent to attendee(s)"), subtype="base_calendar.subtype_invitation", context=context)
|
self.message_post(cr, uid, event.id, body=_("An invitation email has been sent to attendee(s)"), subtype="calendar.subtype_invitation", context=context)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
def get_attendee(self, cr, uid, meeting_id, context=None):
|
def get_attendee(self, cr, uid, meeting_id, context=None):
|
||||||
|
@ -1501,7 +1501,7 @@ class crm_meeting(osv.Model):
|
||||||
default['attendee_ids'] = False
|
default['attendee_ids'] = False
|
||||||
|
|
||||||
|
|
||||||
res = super(crm_meeting, self).copy(cr, uid, base_calendar_id2real_id(id), default, context)
|
res = super(crm_meeting, self).copy(cr, uid, calendar_id2real_id(id), default, context)
|
||||||
return res
|
return res
|
||||||
|
|
||||||
def write(self, cr, uid, ids, values, context=None):
|
def write(self, cr, uid, ids, values, context=None):
|
||||||
|
@ -1524,7 +1524,7 @@ class crm_meeting(osv.Model):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
ids.remove(event_id)
|
ids.remove(event_id)
|
||||||
real_event_id = base_calendar_id2real_id(event_id)
|
real_event_id = calendar_id2real_id(event_id)
|
||||||
|
|
||||||
# if we are setting the recurrency flag to False or if we are only changing fields that
|
# if we are setting the recurrency flag to False or if we are only changing fields that
|
||||||
# should be only updated on the real ID and not on the virtual (like message_follower_ids):
|
# should be only updated on the real ID and not on the virtual (like message_follower_ids):
|
||||||
|
@ -1586,7 +1586,7 @@ class crm_meeting(osv.Model):
|
||||||
if mail_to_ids:
|
if mail_to_ids:
|
||||||
current_user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
|
current_user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
|
||||||
if self.pool.get('calendar.attendee')._send_mail_to_attendees(cr, uid, mail_to_ids, template_xmlid='crm_email_template_meeting_changedate',email_from=current_user.email, context=context):
|
if self.pool.get('calendar.attendee')._send_mail_to_attendees(cr, uid, mail_to_ids, template_xmlid='crm_email_template_meeting_changedate',email_from=current_user.email, context=context):
|
||||||
self.message_post(cr, uid, the_id, body=_("A email has been send to specify that the date has been changed !"),subtype="base_calendar.subtype_invitation", context=context)
|
self.message_post(cr, uid, the_id, body=_("A email has been send to specify that the date has been changed !"),subtype="calendar.subtype_invitation", context=context)
|
||||||
else:
|
else:
|
||||||
print 'Send mail return false'
|
print 'Send mail return false'
|
||||||
return res or True and False
|
return res or True and False
|
||||||
|
@ -1643,25 +1643,25 @@ class crm_meeting(osv.Model):
|
||||||
else:
|
else:
|
||||||
select = ids
|
select = ids
|
||||||
|
|
||||||
select = map(lambda x: (x, base_calendar_id2real_id(x)), select)
|
select = map(lambda x: (x, calendar_id2real_id(x)), select)
|
||||||
result = []
|
result = []
|
||||||
|
|
||||||
real_data = super(crm_meeting, self).read(cr, uid, [real_id for base_calendar_id, real_id in select], fields=fields2, context=context, load=load)
|
real_data = super(crm_meeting, self).read(cr, uid, [real_id for calendar_id, real_id in select], fields=fields2, context=context, load=load)
|
||||||
real_data = dict(zip([x['id'] for x in real_data], real_data))
|
real_data = dict(zip([x['id'] for x in real_data], real_data))
|
||||||
|
|
||||||
|
|
||||||
for base_calendar_id, real_id in select:
|
for calendar_id, real_id in select:
|
||||||
res = real_data[real_id].copy()
|
res = real_data[real_id].copy()
|
||||||
|
|
||||||
res = real_data[real_id].copy()
|
res = real_data[real_id].copy()
|
||||||
ls = base_calendar_id2real_id(base_calendar_id, with_date=res and res.get('duration', 0) or 0)
|
ls = calendar_id2real_id(calendar_id, with_date=res and res.get('duration', 0) or 0)
|
||||||
if not isinstance(ls, (str, int, long)) and len(ls) >= 2:
|
if not isinstance(ls, (str, int, long)) and len(ls) >= 2:
|
||||||
#recurrent_dates = [d.strftime("%Y-%m-%d %H:%M:%S") for d in get_recurrent_dates(res['rrule'], res['date'], res['exdate'],res['vtimezone'], context=context)]
|
#recurrent_dates = [d.strftime("%Y-%m-%d %H:%M:%S") for d in get_recurrent_dates(res['rrule'], res['date'], res['exdate'],res['vtimezone'], context=context)]
|
||||||
#if not (ls[1] in recurrent_dates or ls[1] in res['exdate']): #when update a recurrent event
|
#if not (ls[1] in recurrent_dates or ls[1] in res['exdate']): #when update a recurrent event
|
||||||
|
|
||||||
res['date'] = ls[1]
|
res['date'] = ls[1]
|
||||||
res['date_deadline'] = ls[2]
|
res['date_deadline'] = ls[2]
|
||||||
res['id'] = base_calendar_id
|
res['id'] = calendar_id
|
||||||
result.append(res)
|
result.append(res)
|
||||||
|
|
||||||
for r in result:
|
for r in result:
|
|
@ -3,7 +3,7 @@
|
||||||
<data noupdate="1">
|
<data noupdate="1">
|
||||||
|
|
||||||
<!-- Expense-related subtypes for messaging / Chatter -->
|
<!-- Expense-related subtypes for messaging / Chatter -->
|
||||||
<record id="base_calendar.subtype_invitation" model="mail.message.subtype">
|
<record id="calendar.subtype_invitation" model="mail.message.subtype">
|
||||||
<field name="name">Invitation</field>
|
<field name="name">Invitation</field>
|
||||||
<field name="res_model">crm.meeting</field>
|
<field name="res_model">crm.meeting</field>
|
||||||
<field name="description">Warning, a mandatory field has been modified since the creation of this event</field>
|
<field name="description">Warning, a mandatory field has been modified since the creation of this event</field>
|
||||||
|
@ -122,7 +122,7 @@
|
||||||
<field name="name">Meeting Invitation</field>
|
<field name="name">Meeting Invitation</field>
|
||||||
<field name="email_from">${object.event_id.user_id.email or ''}</field>
|
<field name="email_from">${object.event_id.user_id.email or ''}</field>
|
||||||
<field name="subject">${object.event_id.name}</field>
|
<field name="subject">${object.event_id.name}</field>
|
||||||
<field name="model_id" ref="base_calendar.model_calendar_attendee"/>
|
<field name="model_id" ref="calendar.model_calendar_attendee"/>
|
||||||
|
|
||||||
<field name="email_to" >${('' if object.partner_id and object.partner_id.email and object.partner_id.email==object.email else object.email|safe)}</field>
|
<field name="email_to" >${('' if object.partner_id and object.partner_id.email and object.partner_id.email==object.email else object.email|safe)}</field>
|
||||||
<field name="partner_to">${object.partner_id and object.partner_id.email and object.partner_id.email==object.email and object.partner_id.id or False }</field>
|
<field name="partner_to">${object.partner_id and object.partner_id.email and object.partner_id.email==object.email and object.partner_id.id or False }</field>
|
||||||
|
@ -230,9 +230,9 @@
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div style="height: auto;width:450px; margin:0 auto;padding-top:20px;padding-bottom:40px;">
|
<div style="height: auto;width:450px; margin:0 auto;padding-top:20px;padding-bottom:40px;">
|
||||||
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#8A89BA;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="${ctx['base_url']}/meeting_invitation/accept?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">Accept</a>
|
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#8A89BA;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="${ctx['base_url']}/calendar/meeting/accept?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">Accept</a>
|
||||||
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#808080;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="${ctx['base_url']}/meeting_invitation/decline?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">Decline</a>
|
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#808080;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="${ctx['base_url']}/calendar/meeting/decline?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">Decline</a>
|
||||||
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#D8D8D8;text-decoration: none;color:#FFFFFF;" href="${ctx['base_url']}/meeting_invitation/view?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">View</a>
|
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#D8D8D8;text-decoration: none;color:#FFFFFF;" href="${ctx['base_url']}/calendar/meeting/view?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">View</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
@ -245,7 +245,7 @@
|
||||||
<field name="name">Meeting Invitation</field>
|
<field name="name">Meeting Invitation</field>
|
||||||
<field name="email_from">${object.event_id.user_id.email or ''}</field>
|
<field name="email_from">${object.event_id.user_id.email or ''}</field>
|
||||||
<field name="subject">${object.event_id.name} - Date has been updated</field>
|
<field name="subject">${object.event_id.name} - Date has been updated</field>
|
||||||
<field name="model_id" ref="base_calendar.model_calendar_attendee"/>
|
<field name="model_id" ref="calendar.model_calendar_attendee"/>
|
||||||
|
|
||||||
<field name="email_to" >${('' if object.partner_id and object.partner_id.email and object.partner_id.email==object.email else object.email|safe)}</field>
|
<field name="email_to" >${('' if object.partner_id and object.partner_id.email and object.partner_id.email==object.email else object.email|safe)}</field>
|
||||||
<field name="partner_to">${object.partner_id and object.partner_id.email and object.partner_id.email==object.email and object.partner_id.id or False }</field>
|
<field name="partner_to">${object.partner_id and object.partner_id.email and object.partner_id.email==object.email and object.partner_id.id or False }</field>
|
||||||
|
@ -355,9 +355,9 @@
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div style="height: auto;width:450px; margin:0 auto;padding-top:20px;padding-bottom:40px;">
|
<div style="height: auto;width:450px; margin:0 auto;padding-top:20px;padding-bottom:40px;">
|
||||||
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#8A89BA;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="${ctx['base_url']}/meeting_invitation/accept?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">Accept</a>
|
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#8A89BA;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="${ctx['base_url']}/calendar/meeting/accept?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">Accept</a>
|
||||||
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#808080;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="${ctx['base_url']}/meeting_invitation/decline?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">Decline</a>
|
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#808080;margin : 0 15px 0 0;text-decoration: none;color:#FFFFFF;" href="${ctx['base_url']}/calendar/meeting/decline?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">Decline</a>
|
||||||
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#D8D8D8;text-decoration: none;color:#FFFFFF;" href="${ctx['base_url']}/meeting_invitation/view?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">View</a>
|
<a style="padding: 8px 30px 8px 30px;border-radius: 6px;border: 1px solid #CCCCCC;background:#D8D8D8;text-decoration: none;color:#FFFFFF;" href="${ctx['base_url']}/calendar/meeting/view?db=${ctx['dbname']}&token=${object.access_token}&action=${ctx['action_id']}&id=${object.event_id.id}">View</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
@ -370,7 +370,7 @@
|
||||||
<field name="name">Meeting Invitation</field>
|
<field name="name">Meeting Invitation</field>
|
||||||
<field name="email_from">${object.event_id.user_id.email or ''}</field>
|
<field name="email_from">${object.event_id.user_id.email or ''}</field>
|
||||||
<field name="subject">${object.event_id.name} - Reminder</field>
|
<field name="subject">${object.event_id.name} - Reminder</field>
|
||||||
<field name="model_id" ref="base_calendar.model_calendar_attendee"/>
|
<field name="model_id" ref="calendar.model_calendar_attendee"/>
|
||||||
|
|
||||||
<field name="email_to" >${('' if object.partner_id and object.partner_id.email and object.partner_id.email==object.email else object.email|safe)}</field>
|
<field name="email_to" >${('' if object.partner_id and object.partner_id.email and object.partner_id.email==object.email else object.email|safe)}</field>
|
||||||
<field name="partner_to">${object.partner_id and object.partner_id.email and object.partner_id.email==object.email and object.partner_id.id or False }</field>
|
<field name="partner_to">${object.partner_id and object.partner_id.email and object.partner_id.email==object.email and object.partner_id.id or False }</field>
|
|
@ -216,7 +216,7 @@
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<calendar string="Meetings" date_start="date" date_stop="date_deadline" date_delay="duration" all_day="allday"
|
<calendar string="Meetings" date_start="date" date_stop="date_deadline" date_delay="duration" all_day="allday"
|
||||||
display="[name]" color="color_partner_id" attendee="partner_ids" avatar_model="res.partner"
|
display="[name]" color="color_partner_id" attendee="partner_ids" avatar_model="res.partner"
|
||||||
use_contacts="True" quick_add="True" event_open_popup="%(base_calendar.view_crm_meeting_form_popup)s">
|
use_contacts="True" quick_add="True" event_open_popup="%(calendar.view_crm_meeting_form_popup)s">
|
||||||
|
|
||||||
<field name="name"/>
|
<field name="name"/>
|
||||||
<field name="user_id"/>
|
<field name="user_id"/>
|
|
@ -8,7 +8,7 @@ import json
|
||||||
from openerp.addons.web.http import SessionExpiredException
|
from openerp.addons.web.http import SessionExpiredException
|
||||||
from werkzeug.exceptions import BadRequest
|
from werkzeug.exceptions import BadRequest
|
||||||
|
|
||||||
class meetting_invitation(http.Controller):
|
class meeting_invitation(http.Controller):
|
||||||
|
|
||||||
def check_security(self, db, token):
|
def check_security(self, db, token):
|
||||||
registry = openerp.modules.registry.RegistryManager.get(db)
|
registry = openerp.modules.registry.RegistryManager.get(db)
|
||||||
|
@ -31,9 +31,8 @@ class meetting_invitation(http.Controller):
|
||||||
raise BadRequest(error_message)
|
raise BadRequest(error_message)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@http.route('/meeting_invitation/accept', type='http', auth="none")
|
@http.route('/calendar/meeting/accept', type='http', auth="none")
|
||||||
def accept(self, db, token, action, id):
|
def accept(self, db, token, action, id):
|
||||||
# http://hostname:8069/meeting_invitation/accept?db=#token=&action=&id=
|
|
||||||
self.check_security(db, token)
|
self.check_security(db, token)
|
||||||
registry = openerp.modules.registry.RegistryManager.get(db)
|
registry = openerp.modules.registry.RegistryManager.get(db)
|
||||||
attendee_pool = registry.get('calendar.attendee')
|
attendee_pool = registry.get('calendar.attendee')
|
||||||
|
@ -43,9 +42,8 @@ class meetting_invitation(http.Controller):
|
||||||
attendee_pool.do_accept(cr, openerp.SUPERUSER_ID, attendee_id)
|
attendee_pool.do_accept(cr, openerp.SUPERUSER_ID, attendee_id)
|
||||||
return self.view(db, token, action, id, view='form')
|
return self.view(db, token, action, id, view='form')
|
||||||
|
|
||||||
@http.route('/meeting_invitation/decline', type='http', auth="none")
|
@http.route('/calendar/meeting/decline', type='http', auth="none")
|
||||||
def declined(self, db, token, action, id):
|
def declined(self, db, token, action, id):
|
||||||
# http://hostname:8069/meeting_invitation/decline?db=#token=&action=&id=
|
|
||||||
self.check_security(db, token)
|
self.check_security(db, token)
|
||||||
registry = openerp.modules.registry.RegistryManager.get(db)
|
registry = openerp.modules.registry.RegistryManager.get(db)
|
||||||
attendee_pool = registry.get('calendar.attendee')
|
attendee_pool = registry.get('calendar.attendee')
|
||||||
|
@ -55,9 +53,8 @@ class meetting_invitation(http.Controller):
|
||||||
attendee_pool.do_decline(cr, openerp.SUPERUSER_ID, attendee_id)
|
attendee_pool.do_decline(cr, openerp.SUPERUSER_ID, attendee_id)
|
||||||
return self.view(db, token, action, id, view='form')
|
return self.view(db, token, action, id, view='form')
|
||||||
|
|
||||||
@http.route('/meeting_invitation/view', type='http', auth="none")
|
@http.route('/calendar/meeting/view', type='http', auth="none")
|
||||||
def view(self, db, token, action, id, view='calendar'):
|
def view(self, db, token, action, id, view='calendar'):
|
||||||
# http://hostname:8069/meeting_invitation/view?db=#token=&action=&id=
|
|
||||||
self.check_security(db, token)
|
self.check_security(db, token)
|
||||||
registry = openerp.modules.registry.RegistryManager.get(db)
|
registry = openerp.modules.registry.RegistryManager.get(db)
|
||||||
meeting_pool = registry.get('crm.meeting')
|
meeting_pool = registry.get('crm.meeting')
|
||||||
|
@ -75,7 +72,7 @@ class meetting_invitation(http.Controller):
|
||||||
'js': js,
|
'js': js,
|
||||||
'css': css,
|
'css': css,
|
||||||
'modules': simplejson.dumps(webmain.module_boot(db)),
|
'modules': simplejson.dumps(webmain.module_boot(db)),
|
||||||
'init': "s.base_calendar.event('%s', '%s', '%s', '%s' , '%s');" % (db, action, id, 'form', json.dumps(attendee_data)),
|
'init': "s.calendar.event('%s', '%s', '%s', '%s' , '%s');" % (db, action, id, 'form', json.dumps(attendee_data)),
|
||||||
}
|
}
|
||||||
|
|
||||||
@http.route('/calendar/NextNotify', type='json', auth="none")
|
@http.route('/calendar/NextNotify', type='json', auth="none")
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
@ -1,7 +1,7 @@
|
||||||
openerp.base_calendar = function(instance) {
|
openerp.calendar = function(instance) {
|
||||||
var _t = instance.web._t;
|
var _t = instance.web._t;
|
||||||
var QWeb = instance.web.qweb;
|
var QWeb = instance.web.qweb;
|
||||||
instance.base_calendar = {}
|
instance.calendar = {}
|
||||||
|
|
||||||
|
|
||||||
instance.web.WebClient = instance.web.WebClient.extend({
|
instance.web.WebClient = instance.web.WebClient.extend({
|
||||||
|
@ -28,7 +28,7 @@ openerp.base_calendar = function(instance) {
|
||||||
|
|
||||||
$(".link2event").on('click', function() {
|
$(".link2event").on('click', function() {
|
||||||
self.rpc("/web/action/load", {
|
self.rpc("/web/action/load", {
|
||||||
action_id: "base_calendar.action_crm_meeting_notify",
|
action_id: "calendar.action_crm_meeting_notify",
|
||||||
}).then( function(r) {
|
}).then( function(r) {
|
||||||
r.res_id = res.event_id;
|
r.res_id = res.event_id;
|
||||||
return self.action_manager.do_action(r);
|
return self.action_manager.do_action(r);
|
||||||
|
@ -71,7 +71,7 @@ openerp.base_calendar = function(instance) {
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
instance.base_calendar.invitation = instance.web.Widget.extend({
|
instance.calendar.invitation = instance.web.Widget.extend({
|
||||||
|
|
||||||
init: function(parent, db, action, id, view, attendee_data) {
|
init: function(parent, db, action, id, view, attendee_data) {
|
||||||
this._super();
|
this._super();
|
||||||
|
@ -139,9 +139,9 @@ openerp.base_calendar = function(instance) {
|
||||||
'many2manyattendee' : 'instance.web.form.Many2ManyAttendee',
|
'many2manyattendee' : 'instance.web.form.Many2ManyAttendee',
|
||||||
});
|
});
|
||||||
|
|
||||||
instance.base_calendar.event = function (db, action, id, view, attendee_data) {
|
instance.calendar.event = function (db, action, id, view, attendee_data) {
|
||||||
instance.session.session_bind(instance.session.origin).done(function () {
|
instance.session.session_bind(instance.session.origin).done(function () {
|
||||||
new instance.base_calendar.invitation(null,db,action,id,view,attendee_data).appendTo($("body").addClass('openerp'));
|
new instance.calendar.invitation(null,db,action,id,view,attendee_data).appendTo($("body").addClass('openerp'));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
-
|
-
|
||||||
In Order to test base_calendar, I will first create One Simple Event with real data
|
In Order to test calendar, I will first create One Simple Event with real data
|
||||||
-
|
-
|
||||||
!record {model: crm.meeting, id: crm_meeting_technicalpresentation0}:
|
!record {model: crm.meeting, id: crm_meeting_technicalpresentation0}:
|
||||||
class: private
|
class: private
|
|
@ -54,7 +54,7 @@ Dashboard for CRM will include:
|
||||||
'process',
|
'process',
|
||||||
'mail',
|
'mail',
|
||||||
'email_template',
|
'email_template',
|
||||||
'base_calendar',
|
'calendar',
|
||||||
'resource',
|
'resource',
|
||||||
'board',
|
'board',
|
||||||
'fetchmail',
|
'fetchmail',
|
||||||
|
|
|
@ -223,7 +223,7 @@ class MergePartnerAutomatic(osv.TransientModel):
|
||||||
update_records = functools.partial(update_records, context=context)
|
update_records = functools.partial(update_records, context=context)
|
||||||
|
|
||||||
for partner in src_partners:
|
for partner in src_partners:
|
||||||
update_records('base.calendar', src=partner, field_model='model_id.model')
|
update_records('calendar', src=partner, field_model='model_id.model')
|
||||||
update_records('ir.attachment', src=partner, field_model='res_model')
|
update_records('ir.attachment', src=partner, field_model='res_model')
|
||||||
update_records('mail.followers', src=partner, field_model='res_model')
|
update_records('mail.followers', src=partner, field_model='res_model')
|
||||||
update_records('mail.message', src=partner)
|
update_records('mail.message', src=partner)
|
||||||
|
|
|
@ -914,7 +914,7 @@ class crm_lead(format_address, osv.osv):
|
||||||
:return dict: dictionary value for created Meeting view
|
:return dict: dictionary value for created Meeting view
|
||||||
"""
|
"""
|
||||||
opportunity = self.browse(cr, uid, ids[0], context)
|
opportunity = self.browse(cr, uid, ids[0], context)
|
||||||
res = self.pool.get('ir.actions.act_window').for_xml_id(cr, uid, 'base_calendar', 'action_crm_meeting', context)
|
res = self.pool.get('ir.actions.act_window').for_xml_id(cr, uid, 'calendar', 'action_crm_meeting', context)
|
||||||
res['context'] = {
|
res['context'] = {
|
||||||
'default_opportunity_id': opportunity.id,
|
'default_opportunity_id': opportunity.id,
|
||||||
'default_partner_id': opportunity.partner_id and opportunity.partner_id.id or False,
|
'default_partner_id': opportunity.partner_id and opportunity.partner_id.id or False,
|
||||||
|
|
|
@ -24,7 +24,7 @@ import logging
|
||||||
_logger = logging.getLogger(__name__)
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
#
|
#
|
||||||
# crm.meeting is defined in module base_calendar
|
# crm.meeting is defined in module calendar
|
||||||
#
|
#
|
||||||
class crm_meeting(osv.Model):
|
class crm_meeting(osv.Model):
|
||||||
""" Model for CRM meetings """
|
""" Model for CRM meetings """
|
||||||
|
|
|
@ -265,7 +265,7 @@ class crm_phonecall(osv.osv):
|
||||||
:return dict: dictionary value for created meeting view
|
:return dict: dictionary value for created meeting view
|
||||||
"""
|
"""
|
||||||
phonecall = self.browse(cr, uid, ids[0], context)
|
phonecall = self.browse(cr, uid, ids[0], context)
|
||||||
res = self.pool.get('ir.actions.act_window').for_xml_id(cr, uid, 'base_calendar', 'action_crm_meeting', context)
|
res = self.pool.get('ir.actions.act_window').for_xml_id(cr, uid, 'calendar', 'action_crm_meeting', context)
|
||||||
res['context'] = {
|
res['context'] = {
|
||||||
'default_phonecall_id': phonecall.id,
|
'default_phonecall_id': phonecall.id,
|
||||||
'default_partner_id': phonecall.partner_id and phonecall.partner_id.id or False,
|
'default_partner_id': phonecall.partner_id and phonecall.partner_id.id or False,
|
||||||
|
|
|
@ -96,7 +96,7 @@
|
||||||
context="{'search_default_partner_id': active_id}"/>
|
context="{'search_default_partner_id': active_id}"/>
|
||||||
<button class="oe_inline" type="action"
|
<button class="oe_inline" type="action"
|
||||||
string="Meetings"
|
string="Meetings"
|
||||||
name="%(base_calendar.action_crm_meeting)d"
|
name="%(calendar.action_crm_meeting)d"
|
||||||
context="{'search_default_partner_ids': active_id, 'default_partner_ids' : [active_id]}"/>
|
context="{'search_default_partner_ids': active_id, 'default_partner_ids' : [active_id]}"/>
|
||||||
<button class="oe_inline" type="action" string="Calls"
|
<button class="oe_inline" type="action" string="Calls"
|
||||||
name="%(crm.crm_case_categ_phone_incoming0)d"
|
name="%(crm.crm_case_categ_phone_incoming0)d"
|
||||||
|
|
|
@ -109,7 +109,7 @@
|
||||||
-
|
-
|
||||||
!python {model: crm.meeting}: |
|
!python {model: crm.meeting}: |
|
||||||
context.update({'active_model': 'crm.meeting'})
|
context.update({'active_model': 'crm.meeting'})
|
||||||
self.write(cr, uid, [ref('base_calendar.crm_meeting_4')], {'state': 'open'})
|
self.write(cr, uid, [ref('calendar.crm_meeting_4')], {'state': 'open'})
|
||||||
-
|
-
|
||||||
I invite a user for meeting.
|
I invite a user for meeting.
|
||||||
-
|
-
|
||||||
|
|
|
@ -48,7 +48,7 @@ class crm_phonecall2meeting(osv.osv_memory):
|
||||||
phonecall_id = context and context.get('active_id', False) or False
|
phonecall_id = context and context.get('active_id', False) or False
|
||||||
if phonecall_id:
|
if phonecall_id:
|
||||||
phonecall = self.pool.get('crm.phonecall').browse(cr, uid, phonecall_id, context)
|
phonecall = self.pool.get('crm.phonecall').browse(cr, uid, phonecall_id, context)
|
||||||
res = self.pool.get('ir.actions.act_window').for_xml_id(cr, uid, 'base_calendar', 'action_crm_meeting', context)
|
res = self.pool.get('ir.actions.act_window').for_xml_id(cr, uid, 'calendar', 'action_crm_meeting', context)
|
||||||
res['context'] = {
|
res['context'] = {
|
||||||
'default_phonecall_id': phonecall.id,
|
'default_phonecall_id': phonecall.id,
|
||||||
'default_partner_id': phonecall.partner_id and phonecall.partner_id.id or False,
|
'default_partner_id': phonecall.partner_id and phonecall.partner_id.id or False,
|
||||||
|
|
|
@ -30,7 +30,7 @@ The module adds the possibility to synchronize Google Calendar with OpenERP
|
||||||
""",
|
""",
|
||||||
'author': 'OpenERP SA',
|
'author': 'OpenERP SA',
|
||||||
'website': 'http://www.openerp.com',
|
'website': 'http://www.openerp.com',
|
||||||
'depends': ['google_account','base_calendar'],
|
'depends': ['google_account','calendar'],
|
||||||
'css': ['static/src/css/*.css'],
|
'css': ['static/src/css/*.css'],
|
||||||
'js': ['static/src/js/*.js'],
|
'js': ['static/src/js/*.js'],
|
||||||
'qweb': ['static/src/xml/*.xml'],
|
'qweb': ['static/src/xml/*.xml'],
|
||||||
|
|
|
@ -87,7 +87,7 @@
|
||||||
<menuitem id="menu_calendar_google_main" parent="base.menu_administration" name="Google Calendar"/>
|
<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_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="API Credentials" parent="base_calendar.menu_calendar_configuration" groups="base.group_no_one" action="action_config_settings_google_calendar"/>
|
<menuitem id="menu_calendar_google_tech_config" name="API Credentials" parent="calendar.menu_calendar_configuration" groups="base.group_no_one" action="action_config_settings_google_calendar"/>
|
||||||
|
|
||||||
</data>
|
</data>
|
||||||
</openerp>
|
</openerp>
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
'website': 'http://www.openerp.com',
|
'website': 'http://www.openerp.com',
|
||||||
'summary': 'Periodical Evaluations, Appraisals, Surveys',
|
'summary': 'Periodical Evaluations, Appraisals, Surveys',
|
||||||
'images': ['images/hr_evaluation_analysis.jpeg','images/hr_evaluation.jpeg','images/hr_interview_requests.jpeg'],
|
'images': ['images/hr_evaluation_analysis.jpeg','images/hr_evaluation.jpeg','images/hr_interview_requests.jpeg'],
|
||||||
'depends': ['hr','base_calendar','survey'],
|
'depends': ['hr','calendar','survey'],
|
||||||
'description': """
|
'description': """
|
||||||
Periodical Employees evaluation and appraisals
|
Periodical Employees evaluation and appraisals
|
||||||
==============================================
|
==============================================
|
||||||
|
|
|
@ -45,7 +45,7 @@ You can keep track of leaves in different ways by following reports:
|
||||||
A synchronization with an internal agenda (Meetings of the CRM module) is also possible in order to automatically create a meeting when a holiday request is accepted by setting up a type of meeting in Leave Type.
|
A synchronization with an internal agenda (Meetings of the CRM module) is also possible in order to automatically create a meeting when a holiday request is accepted by setting up a type of meeting in Leave Type.
|
||||||
""",
|
""",
|
||||||
'images': ['images/hr_allocation_requests.jpeg', 'images/hr_leave_requests.jpeg', 'images/leaves_analysis.jpeg'],
|
'images': ['images/hr_allocation_requests.jpeg', 'images/hr_leave_requests.jpeg', 'images/leaves_analysis.jpeg'],
|
||||||
'depends': ['hr', 'base_calendar', 'process', 'resource'],
|
'depends': ['hr', 'calendar', 'process', 'resource'],
|
||||||
'data': [
|
'data': [
|
||||||
'security/ir.model.access.csv',
|
'security/ir.model.access.csv',
|
||||||
'security/ir_rule.xml',
|
'security/ir_rule.xml',
|
||||||
|
|
|
@ -42,7 +42,7 @@ You can define the different phases of interviews and easily rate the applicant
|
||||||
'decimal_precision',
|
'decimal_precision',
|
||||||
'hr',
|
'hr',
|
||||||
'survey',
|
'survey',
|
||||||
'base_calendar',
|
'calendar',
|
||||||
'fetchmail',
|
'fetchmail',
|
||||||
],
|
],
|
||||||
'data': [
|
'data': [
|
||||||
|
|
|
@ -291,7 +291,7 @@ class hr_applicant(osv.Model):
|
||||||
"""
|
"""
|
||||||
applicant = self.browse(cr, uid, ids[0], context)
|
applicant = self.browse(cr, uid, ids[0], context)
|
||||||
category = self.pool.get('ir.model.data').get_object(cr, uid, 'hr_recruitment', 'categ_meet_interview', context)
|
category = self.pool.get('ir.model.data').get_object(cr, uid, 'hr_recruitment', 'categ_meet_interview', context)
|
||||||
res = self.pool.get('ir.actions.act_window').for_xml_id(cr, uid, 'base_calendar', 'action_crm_meeting', context)
|
res = self.pool.get('ir.actions.act_window').for_xml_id(cr, uid, 'calendar', 'action_crm_meeting', context)
|
||||||
res['context'] = {
|
res['context'] = {
|
||||||
'default_partner_ids': applicant.partner_id and [applicant.partner_id.id] or False,
|
'default_partner_ids': applicant.partner_id and [applicant.partner_id.id] or False,
|
||||||
'default_user_id': uid,
|
'default_user_id': uid,
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
<field name="name">Customer report #349872</field>
|
<field name="name">Customer report #349872</field>
|
||||||
<field name="memo"><![CDATA[<b>Customer report #349872</b>
|
<field name="memo"><![CDATA[<b>Customer report #349872</b>
|
||||||
<br/><br/>* Calendar app in Home
|
<br/><br/>* Calendar app in Home
|
||||||
<br/>* The base_calendar module should create a menu in Home, like described above.
|
<br/>* The calendar module should create a menu in Home, like described above.
|
||||||
<br/>* This module should become a main application (in the first screen at installation)
|
<br/>* This module should become a main application (in the first screen at installation)
|
||||||
<br/>* We should use the term Calendar, not Meeting.
|
<br/>* We should use the term Calendar, not Meeting.
|
||||||
]]>
|
]]>
|
||||||
|
|
Loading…
Reference in New Issue