[IMP]: crm(meeting): Changes related crm meeting improvements bug #505206

* Changes related to out _inherit instead of _inherits 
* Meeting view improvement
* Improvement in Attendee's Invitation and Recurrence's maintenance

bzr revid: rpa@openerp.co.in-20100112094008-6qk7i4eqlgzb4ljg
This commit is contained in:
rpa (Open ERP) 2010-01-12 15:10:08 +05:30
parent 6c547a3189
commit 7314cc0c9b
6 changed files with 188 additions and 245 deletions

View File

@ -29,134 +29,164 @@ import tools
from tools.translate import _
from dateutil import parser
class crm_meeting_categ(osv.osv):
_name = "crm.meeting.categ"
_description = "Category of Meetings"
_columns = {
'name': fields.char('Meeting Category Name', size=64, required=True, translate=True),
'probability': fields.float('Probability (%)', required=True),
'section_id': fields.many2one('crm.case.section', 'Case Section'),
}
_defaults = {
'probability': lambda *args: 0.0
}
crm_meeting_categ()
class rrule_wizard(osv.osv):
_inherit = "calendar.custom.rrule"
_columns = {
'case_id':fields.many2one('crm.case','Case'),
}
rrule_wizard()
class crm_meeting(osv.osv):
_name = 'crm.meeting'
_description = "Meeting Cases"
_order = "id desc"
_inherits = {'crm.case': "inherit_case_id"}
__attribute__ = {
'class': {'field': 'class', 'type': 'selection'},
'created': {'field': 'create_date', 'type': 'datetime'}, # keep none for now
'description': {'field': 'description', 'type': 'text'},
'dtstart': {'field': 'date', 'type': 'datetime'},
'location': {'field': 'location', 'type': 'text'},
#'organizer': {'field': 'partner_id', 'sub-field': 'name', 'type': 'many2one'},
'priority': {'field': 'priority', 'type': 'int'},
'dtstamp' : {'field': 'date', 'type': 'datetime'},
'seq': None,
'status': {'field': 'state', 'type': 'selection', 'mapping': {'tentative': 'draft', \
'confirmed': 'open' , 'cancelled': 'cancel'}},
'summary': {'field': 'name', 'type': 'text'},
'transp': {'field': 'transparent', 'type': 'text'},
'uid': {'field': 'id', 'type': 'text'},
'url': {'field': 'caldav_url', 'type': 'text'},
'recurid': None,
# 'attach': {'field': 'attachment_ids', 'sub-field': 'datas', 'type': 'list'},
'attendee': {'field': 'attendees', 'type': 'text'},
# 'categories': {'field': 'categ_id', 'sub-field': 'name'},
'categories': {'field': 'categ_id', 'type': 'many2one', 'object': 'crm.case.categ'},
'comment': None,
'contact': None,
'exdate' : {'field': 'exdate', 'type': 'datetime'},
'exrule' : {'field': 'exrule', 'type': 'text'},
'rstatus': None,
'related': None,
'resources': None,
'rdate': None,
'rrule': {'field': 'rrule', 'type': 'text'},
'x-openobject-model': {'value': _name, 'type': 'text'},
# 'duration': {'field': 'duration'},
'dtend': {'field': 'date_deadline', 'type': 'datetime'},
'valarm': {'field': 'alarms', 'type': 'text'},
_inherit = "crm.case"
__attribute__ = {
'class': {'field': 'class', 'type': 'selection'},
'created': {'field': 'create_date', 'type': 'datetime'},
'description': {'field': 'description', 'type': 'text'},
'dtstart': {'field': 'date', 'type': 'datetime'},
'location': {'field': 'location', 'type': 'text'},
#'organizer': {'field': 'partner_id', 'sub-field': 'name', 'type': 'many2one'},
'priority': {'field': 'priority', 'type': 'int'},
'dtstamp' : {'field': 'date', 'type': 'datetime'},
'seq': None,
'status': {'field': 'state', 'type': 'selection', 'mapping': {'tentative': 'draft', \
'confirmed': 'open' , 'cancelled': 'cancel'}},
'summary': {'field': 'name', 'type': 'text'},
'transp': {'field': 'transparent', 'type': 'text'},
'uid': {'field': 'id', 'type': 'text'},
'url': {'field': 'caldav_url', 'type': 'text'},
'recurid': None,
# 'attach': {'field': 'attachment_ids', 'sub-field': 'datas', 'type': 'list'},
'attendee': {'field': 'attendee_ids', 'type': 'many2many', 'object': 'crm.caldav.attendee'},
# 'categories': {'field': 'categ_id', 'sub-field': 'name'},
'categories': {'field': 'categ_id', 'type': 'many2one', 'object': 'crm.meeting.categ'},
'comment': None,
'contact': None,
'exdate' : {'field': 'exdate', 'type': 'datetime'},
'exrule' : {'field': 'exrule', 'type': 'text'},
'rstatus': None,
'related': None,
'resources': None,
'rdate': None,
'rrule': {'field': 'rrule', 'type': 'text'},
'x-openobject-model': {'value': _name, 'type': 'text'},
# 'duration': {'field': 'duration'},
'dtend': {'field': 'date_deadline', 'type': 'datetime'},
'valarm': {'field': 'caldav_alarm_id', 'type': 'many2one', 'object': 'calendar.alarm'},
}
def _get_data(self, cr, uid, ids, name, arg, context):
result = {}
attendee_obj = self.pool.get('calendar.attendee')
alarm_obj = self.pool.get('calendar.alarm')
model_obj = self.pool.get('ir.model')
model_id = model_obj.search(cr, uid, [('model','=',self._name)])[0]
for meeting_id in ids:
result[meeting_id] = {}
if "attendees" in name:
attendee_ids = attendee_obj.search(cr, uid, [('ref','=','%s,%d'%(self._name, meeting_id))])
result[meeting_id]["attendees"] = attendee_obj.export_cal(cr, uid, attendee_ids)
if "alarms" in name:
alarm_ids = alarm_obj.search(cr, uid, [('model_id','=',model_id), ('res_id','=',meeting_id)])
result[meeting_id]["alarms"] = alarm_obj.export_cal(cr, uid, alarm_ids)
return result
def _set_data(self, cr, uid, meeting_id, name, value, arg, context):
if not value:
return
attendee_obj = self.pool.get('calendar.attendee')
model_obj = self.pool.get('ir.model')
alarm_obj = self.pool.get('calendar.alarm')
eventdata = self.read(cr, uid, meeting_id, [name], context=context)
if name == "attendees":
attendee_ids = attendee_obj.import_cal(cr, uid, eventdata['attendees'])
vals = {
'ref':'%s,%d'%('crm.meeting', meeting_id)
}
attendee_obj.write(cr, uid, attendee_ids, vals)
if name == "alarms":
model_id = model_obj.search(cr, uid, [('model','=',self._name)])[0]
alarm_ids = alarm_obj.import_cal(cr, uid, eventdata['alarms'])
vals = {
'res_id' : meeting.id,
'model_id' : model_id,
}
alarm_obj.write(cr, uid, alarm_ids, vals)
alarm = alarm_obj.browse(cr, uid, alarm_ids)[0]
self.write(cr, uid, [meeting_id], {'alarm_id':alarm.alarm_id})
def _get_duration(self, cr, uid, ids, name, arg, context):
res = {}
for id in ids:
meeting = self.browse(cr, uid, id, context=context)
start = datetime.datetime.strptime(meeting.date, "%Y-%m-%d %H:%M:%S")
end = datetime.datetime.strptime(meeting.date_deadline[:19], "%Y-%m-%d %H:%M:%S")
diff = end - start
duration = float(diff.days)* 24 + (float(diff.seconds) / 3600)
res[id] = round(duration, 2)
return res
def _set_duration(self, cr, uid, id, name, value, arg, context):
meeting = self.browse(cr, uid, id, context=context)
start = datetime.datetime.strptime(meeting.date, "%Y-%m-%d %H:%M:%S")
end = start + datetime.timedelta(hours=value)
cr.execute("UPDATE crm_meeting set date_deadline='%s' \
where id=%s"% (end.strftime("%Y-%m-%d %H:%M:%S"), id))
return True
def _get_rrule(self, cr, uid, ids, name, arg, context):
res = {}
rrule_obj = self.pool.get('calendar.custom.rrule')
for id in ids:
meeting = self.browse(cr, uid, id, context=context)
type = meeting.rrule_type
if type == 'none' or not type:
res[id] = ''
cr.execute('DELETE from calendar_custom_rrule where case_id=%s' % (id))
elif type != 'custom':
rrule = self.pool.get('calendar.custom.rrule')
rrulestr = rrule.compute_rule_string(cr, uid, {'freq': type.upper(),\
'interval': 1})
res[id] = rrulestr
cr.execute('DELETE from calendar_custom_rrule where case_id=%s' % (id))
elif type == 'custom':
for rrule in meeting.rule_ids:
rule_datas = rrule_obj.read(cr, uid, rrule.id)
rulestr = rrule_obj.compute_rule_string(cr, uid, rule_datas)
res[id] = rulestr
cr.commit()
return res
_columns = {
'inherit_case_id': fields.many2one('crm.case', 'Case', ondelete='cascade'),
'name': fields.char('Description',size=64,required=True),
'section_id': fields.many2one('crm.case.section', 'Section', select=True, help='Section to which Case belongs to. Define Responsible user and Email account for mail gateway.'),
'date': fields.datetime('Date'),
'date_deadline': fields.datetime('Deadline'),
'duration': fields.function(_get_duration, method=True, \
fnct_inv=_set_duration, string='Duration'),
'categ_id': fields.many2one('crm.meeting.categ', 'Category', \
domain="[('section_id','=',section_id)]", \
help='Category related to the section.Subdivide the CRM cases \
independently or section-wise.'),
'description': fields.text('Your action'),
'class': fields.selection([('public', 'Public'), ('private', 'Private'), \
('confidential', 'Confidential')], 'Privacy'),
'location': fields.char('Location', size=264, help="Gives Location of Meeting"),
'freebusy': fields.text('FreeBusy'),
('confidential', 'Confidential')], 'Mark as'),
'location': fields.char('Location', size=264, help="Gives Location of Meeting"),
'show_as': fields.selection([('free', 'Free'), \
('busy', 'Busy')],
'show_as'),
'caldav_url': fields.char('Caldav URL', size=264),
('busy', 'Busy')],
'Show as'),
'caldav_url': fields.char('Caldav URL', size=264),
'exdate': fields.text('Exception Date/Times', help="This property defines the list\
of date/time exceptions for arecurring calendar component."),
of date/time exceptions for arecurring calendar component."),
'exrule': fields.char('Exception Rule', size=352, help="defines a rule or repeating pattern\
for anexception to a recurrence set"),
'rrule': fields.char('Recurrent Rule', size=352, invisible="True"),
for anexception to a recurrence set"),
'rrule': fields.function(_get_rrule, string='Recurrent Rule', method=True,\
store=True, type='char', size=124),
'rrule_type' : fields.selection([('none', 'None'), ('daily', 'Daily'), \
('weekly', 'Weekly'), ('monthly', 'Monthly'), ('yearly', 'Yearly'), ('custom','Custom')], 'Recurrency'),
'attendees': fields.function(_get_data, method=True,\
fnct_inv=_set_data, string='Attendees', type="text", multi='attendees'),
'alarms': fields.function(_get_data, method=True,\
fnct_inv=_set_data, string='Attendees', type="text", multi='alarms'),
'alarm_id': fields.many2one('res.alarm', 'Alarm'),
('weekly', 'Weekly'), ('monthly', 'Monthly'), ('yearly', 'Yearly'), ('custom', 'Custom')], 'Recurrency'),
'attendee_ids': fields.many2many('calendar.attendee', 'crm_attendee_rel', 'case_id', \
'attendee_id', 'Attendees'),
'alarm_id': fields.many2one('res.alarm', 'Alarm'),
'caldav_alarm_id': fields.many2one('calendar.alarm', 'Alarm'),
'rule_ids': fields.one2many('calendar.custom.rrule', 'case_id', 'Rules'),
}
_defaults = {
'class': lambda *a: 'public',
'show_as' : lambda *a : 'busy',
'class': lambda *a: 'public',
'show_as' : lambda *a : 'busy',
}
def do_alarm_create(self, cr, uid, ids, context={}):
alarm_obj = self.pool.get('calendar.alarm')
model_obj = self.pool.get('ir.model')
attendee_obj = self.pool.get('calendar.attendee')
model_id = model_obj.search(cr, uid, [('model','=',self._name)])[0]
for meeting in self.browse(cr, uid, ids):
self.do_alarm_unlink(cr, uid, [meeting.id])
attendee_ids = attendee_obj.search(cr, uid, [('ref','=','%s,%d'%(self._name, meeting.id))])
basic_alarm = meeting.alarm_id
if basic_alarm:
vals = {
'action': 'display',
'description': meeting.description,
'name': meeting.name,
'attendee_ids': [(6,0, attendee_ids)],
'attendee_ids': [(6,0, map(lambda x:x.id, meeting.attendee_ids))],
'trigger_related': basic_alarm.trigger_related,
'trigger_duration': basic_alarm.trigger_duration,
'trigger_occurs': basic_alarm.trigger_occurs,
@ -165,12 +195,13 @@ class crm_meeting(osv.osv):
'repeat': basic_alarm.repeat,
'state' : 'run',
'event_date' : meeting.date,
'event_end_date' : meeting.date_deadline,
'res_id' : meeting.id,
'model_id' : model_id,
'user_id' : uid
}
alarm_id = alarm_obj.create(cr, uid, vals)
cr.execute('Update crm_meeting set caldav_alarm_id=%s \
where id=%s' % (alarm_id, meeting.id))
cr.commit()
return True
@ -182,6 +213,8 @@ class crm_meeting(osv.osv):
alarm_ids = alarm_obj.search(cr, uid, [('model_id','=',model_id), ('res_id','=',meeting.id)])
if alarm_ids and len(alarm_ids):
alarm_obj.unlink(cr, uid, alarm_ids)
cr.execute('Update crm_meeting set caldav_alarm_id=NULL, \
alarm_id=NULL where id=%s' % (meeting.id))
cr.commit()
return True
@ -236,8 +269,7 @@ class crm_meeting(osv.osv):
ids = select
result = []
if ids and (base_start_date or base_until_date):
cr.execute("select m.id, m.rrule, c.date, m.exdate from crm_meeting m\
join crm_case c on (c.id=m.inherit_case_id) \
cr.execute("select m.id, m.rrule, m.date, m.exdate from crm_meeting m\
where m.id in ("+ ','.join(map(lambda x: str(x), ids))+")")
count = 0
@ -402,32 +434,6 @@ class crm_meeting(osv.osv):
return res
def _map_ids(self, method, cr, uid, ids, *args, **argv):
if isinstance(ids, (str, int, long)):
select = [ids]
else:
select = ids
case_data = self.browse(cr, uid, select)
new_ids = []
for case in case_data:
if case.inherit_case_id:
new_ids.append(case.inherit_case_id.id)
res = getattr(self.pool.get('crm.case'), method)(cr, uid, new_ids, *args, **argv)
if isinstance(ids, (str, int, long)) and isinstance(res, list):
return res and res[0] or False
return res
def onchange_rrule_type(self, cr, uid, ids, type, *args, **argv):
if type == 'none':
return {'value': {'rrule': ''}}
if type == 'custom':
return {}
rrule = self.pool.get('caldav.set.rrule')
rrulestr = rrule.compute_rule_string(cr, uid, {'freq': type.upper(),\
'interval': 1})
return {'value': {'rrule': rrulestr}}
def onchange_case_id(self, cr, uid, ids, *args, **argv):
return self._map_ids('onchange_case_id', cr, uid, ids, *args, **argv)
def onchange_partner_id(self, cr, uid, ids, *args, **argv):
@ -529,10 +535,10 @@ class res_users(osv.osv):
def _get_user_avail(self, cr, uid, ids, context=None):
current_datetime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
res = super(res_users, self)._get_user_avail(cr, uid, ids, context)
cr.execute("SELECT crm_case.user_id, 'busy' as status \
FROM crm_meeting meeting, crm_case \
WHERE meeting.inherit_case_id = crm_case.id \
and crm_case.date <= %s and crm_case.date_deadline >= %s and crm_case.user_id = ANY(%s) and meeting.show_as = %s",
cr.execute("SELECT m.user_id, 'busy' as status \
FROM crm_meeting m\
where m.date <= %s and m.date_deadline >= %s \
and m.user_id = ANY(%s) and m.show_as = %s",
(current_datetime, current_datetime , ids, 'busy'))
result = cr.dictfetchall()
for user_data in result:
@ -541,4 +547,5 @@ class res_users(osv.osv):
res.update({user_id:status})
return res
res_users()
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -8,57 +8,19 @@
</record>
<!-- CASE CATEGORY(categ_id) -->
<record model="crm.case.categ" id="categ_meet1">
<record model="crm.meeting.categ" id="categ_meet1">
<field name="name">Customer Meeting</field>
<field name="section_id" ref="section_support1"/>
</record>
<record model="crm.case.categ" id="categ_meet2">
<record model="crm.meeting.categ" id="categ_meet2">
<field name="name">Internal Meeting</field>
<field name="section_id" ref="section_support1"/>
</record>
<record model="crm.case.categ" id="categ_meet3">
<record model="crm.meeting.categ" id="categ_meet3">
<field name="name">Phone Call</field>
<field name="section_id" ref="section_support1"/>
</record>
<!-- CASE CATEGORY2(category2_id) -->
<record model="crm.case.category2" id="category_meet1">
<field name="name">Office</field>
<field name="section_id" ref="section_support1"/>
</record>
<record model="crm.case.category2" id="category_meet2">
<field name="name">Home</field>
<field name="section_id" ref="section_support1"/>
</record>
<record model="crm.case.category2" id="category_meet3">
<field name="name">Customer Office</field>
<field name="section_id" ref="section_support1"/>
</record>
<!-- CASE STAGE(stage_id) -->
<record model="crm.case.stage" id="stage_meet1">
<field name="name">Fixed</field>
<field name="section_id" ref="section_support1"/>
</record>
<record model="crm.case.stage" id="stage_meet2">
<field name="name">Not fixed</field>
<field name="section_id" ref="section_support1"/>
</record>
<record model="crm.case.stage" id="stage_meet3">
<field name="name">Invalid</field>
<field name="section_id" ref="section_support1"/>
</record>
<record model="crm.case.stage" id="stage_meet4">
<field name="name">Awaiting Response</field>
<field name="section_id" ref="section_support1"/>
</record>
<record model="crm.case.stage" id="stage_meet5">
<field name="name">Future</field>
<field name="section_id" ref="section_support1"/>
</record>
<record model="res.request.link" id="request_link_meeting">
<field name="name">Case Meeting</field>
<field name="object">crm.meeting</field>

View File

@ -17,7 +17,6 @@
<field name="section_id" ref="crm.section_support1"/>
<field eval="time.strftime('%Y-%m-03 10:20:03')" name="date"/>
<field name="categ_id" ref="crm.categ_meet2"/>
<field name="stage_id" ref="crm.stage_meet2"/>
<field eval="&quot;Follow-up on proposal&quot;" name="name"/>
<field eval="time.strftime('%Y-%m-10')" name="date_deadline"/>
<field eval="6.3" name="duration"/>
@ -26,7 +25,6 @@
<record id="crm_case_initialdiscussion0" model="crm.meeting">
<field name="partner_address_id" ref="base.res_partner_address_2"/>
<field eval="1" name="active"/>
<field name="category2_id" ref="crm.category_meet1"/>
<field eval="7.0" name="duration"/>
<field name="partner_id" ref="base.res_partner_10"/>
<field eval="&quot;3&quot;" name="priority"/>
@ -35,7 +33,6 @@
<field name="section_id" ref="crm.section_support1"/>
<field eval="time.strftime('%Y-%m-05 12:01:01')" name="date"/>
<field name="categ_id" ref="crm.categ_meet3"/>
<field name="stage_id" ref="crm.stage_meet4"/>
<field eval="&quot;Initial discussion&quot;" name="name"/>
<field eval="time.strftime('%Y-%m-12')" name="date_deadline"/>
<field eval="&quot;contact@tecsas.fr&quot;" name="email_from"/>
@ -44,7 +41,6 @@
<record id="crm_case_discusspricing0" model="crm.meeting">
<field name="partner_address_id" ref="base.res_partner_address_zen"/>
<field eval="1" name="active"/>
<field name="category2_id" ref="crm.category_meet3"/>
<field eval="3.0" name="duration"/>
<field name="partner_id" ref="base.res_partner_3"/>
<field eval="&quot;1&quot;" name="priority"/>
@ -54,7 +50,6 @@
<field name="section_id" ref="crm.section_support1"/>
<field eval="time.strftime('%Y-%m-12 15:55:05')" name="date"/>
<field name="categ_id" ref="crm.categ_meet1"/>
<field name="stage_id" ref="crm.stage_meet1"/>
<field eval="&quot;Discuss pricing&quot;" name="name"/>
<field eval="time.strftime('%Y-%m-20')" name="date_deadline"/>
</record>
@ -62,7 +57,6 @@
<record id="crm_case_reviewneeds0" model="crm.meeting">
<field name="partner_address_id" ref="base.res_partner_address_15"/>
<field eval="1" name="active"/>
<field name="category2_id" ref="crm.category_meet2"/>
<field eval="6.0" name="duration"/>
<field name="partner_id" ref="base.res_partner_11"/>
<field eval="&quot;3&quot;" name="priority"/>
@ -71,7 +65,6 @@
<field name="section_id" ref="crm.section_support1"/>
<field eval="time.strftime('%Y-%m-20 10:02:02')" name="date"/>
<field name="categ_id" ref="crm.categ_meet3"/>
<field name="stage_id" ref="crm.stage_meet5"/>
<field eval="&quot;Review needs&quot;" name="name"/>
<field eval="time.strftime('%Y-%m-25')" name="date_deadline"/>
</record>
@ -79,7 +72,6 @@
<record id="crm_case_changesindesigning0" model="crm.meeting">
<field name="partner_address_id" ref="base.res_partner_address_1"/>
<field eval="1" name="active"/>
<field name="category2_id" ref="crm.category_meet1"/>
<field eval="05" name="duration"/>
<field name="partner_id" ref="base.res_partner_9"/>
<field eval="&quot;3&quot;" name="priority"/>
@ -88,7 +80,6 @@
<field name="section_id" ref="crm.section_support1"/>
<field eval="time.strftime('%Y-%m-22 11:05:05')" name="date"/>
<field name="categ_id" ref="crm.categ_meet2"/>
<field name="stage_id" ref="crm.stage_meet2"/>
<field eval="&quot;Changes in Designing&quot;" name="name"/>
<field eval="time.strftime('%Y-%m-28')" name="date_deadline"/>
<field eval="&quot;info@opensides.be&quot;" name="email_from"/>
@ -97,7 +88,6 @@
<record id="crm_case_updatethedata0" model="crm.meeting">
<field name="partner_address_id" ref="base.res_partner_address_7"/>
<field eval="1" name="active"/>
<field name="category2_id" ref="crm.category_meet2"/>
<field name="partner_id" ref="base.res_partner_4"/>
<field eval="&quot;3&quot;" name="priority"/>
<field name="user_id" ref="base.user_root"/>
@ -105,7 +95,6 @@
<field name="section_id" ref="crm.section_support1"/>
<field eval="time.strftime('%Y-%m-18 13:12:49')" name="date"/>
<field name="categ_id" ref="crm.categ_meet2"/>
<field name="stage_id" ref="crm.stage_meet1"/>
<field eval="&quot;Update the data&quot;" name="name"/>
<field eval="13.3" name="duration"/>
<field eval="time.strftime('%Y-%m-28')" name="date_deadline"/>

View File

@ -42,7 +42,13 @@
<field name="act_window_id" ref="crm_case_categ_meet_create_partner"/>
</record>
<act_window
<!-- Available alarms-->
<menuitem name="Available alarms" id="menu_crm_meeting_avail_alarm"
action="caldav.action_res_alarm_view"
parent="menu_crm_configuration" />
<act_window
id="crm_case_categ_meet_case"
name="Schedule a Meeting"
res_model="crm.meeting"

View File

@ -15,7 +15,7 @@
<field name="section_id" select="1" widget="selection"/>
<field name="user_id"/>
</group>
<newline/>
<newline/>
<separator colspan="4"/>
<group col="2" colspan="2">
<button icon="gtk-cancel" special="cancel" string="Cancel"/>
@ -39,68 +39,50 @@
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Meetings Form">
<field name="name" select="1" string="Title"/>
<group col="3" colspan="2">
<field name="section_id" widget="selection"
string="Calendar"/>
<button string="Invite Attendees"
name="%(caldav.action_view_calendar_invite_attendee_wizard)d"
icon="terp-partner" type="action"
context="{'model' : 'crm.meeting'}" />
</group>
<field name="location" />
<field name="categ_id" select="2" on_change="onchange_categ_id(categ_id)"/>
<field name="date" string="Start Date" required="1"/>
<field name="date_deadline" string="End Date" required="1"/>
<notebook colspan="4">
<page string="Meeting">
<field name="alarm_id" colspan="1" string="Alarm"/>
<group colspan="2" col="3">
<field name="rrule_type" string="Recurrency"
on_change="onchange_rrule_type(rrule_type)"
colspan="1" />
<button string="Custom"
name="%(caldav.action_view_caldav_set_rrule_wizard)d"
icon="gtk-save-as" type="action" context="{'model' : 'crm.meeting'}"
attrs="{'readonly':[('rrule_type','!=','custom')]}"
/>
</group>
<separator string="Description" colspan="4"/>
<field name="description" nolabel="1" colspan="4"/>
<field name="show_as" string="Show as"/>
<field name="class" string="Mark as"/>
<separator string="" colspan="4"/>
<group col="8" colspan="4">
<field name="state" select="2"/>
<button name="case_open" string="Confirm Meeting" states="draft,cancel,pending" type="object" icon="terp-crm"/>
<button name="case_cancel" string="Cancel Meeting" states="draft,open,pending" type="object" icon="gtk-cancel"/>
<button name="case_reset" string="Reset to Unconfirmed" states="done,open,cancel" type="object" icon="gtk-convert"/>
</group>
</page>
<page string="Partner Info">
<field name="partner_id" on_change="onchange_partner_id(partner_id, email_from)" />
<field name="partner_address_id" on_change="onchange_partner_address_id(partner_address_id, email_from)"/>
<field name="email_from"/>
</page>
<page string="Other Info">
<field name="user_id" select="2" string="Responsible" required="1"/>
<group colspan="2">
<field name="case_id" on_change="onchange_case_id(case_id, name, partner_id)"/>
<button string="Assign" name="%(crm_meeting_generic_wizard_act)d" type="action" />
</group>
<separator string="Attendees" colspan="4"/>
<field name="attendees" nolabel="1" colspan="4"/>
<field name="rrule" string="Recurrent Rules" colspan="4"/>
<field name="exrule" string="Exception Rules" colspan="4"/>
<separator string="Exception Dates" colspan="4"/>
<field name="exdate" nolabel="1" colspan="4" />
<group col="4" colspan="6">
<field name="name" select="1" string="Summary"
colspan="3" />
<field name="section_id" widget="selection"
colspan="1" />
</group>
<group col="6" colspan="6">
<field name="date" string="Start Date" required="1" />
<field name="duration" widget="float_time" />
<field name="date_deadline" string="End Date" required="1" />
<field name="location" />
<field name="categ_id" widget="selection" />
<field name="rrule_type" string="Repeat"/>
</group>
<group col="1" colspan="4" attrs="{'invisible': [('rrule_type', '!=', 'custom')]}">
<field name="rule_ids" nolabel="1" colspan="4"
mode="form,tree"/>
</group>
<notebook colspan="4">
<page string="Description">
<separator string="Description" colspan="4" />
<field name="description" nolabel="1" colspan="4" />
</page>
</notebook>
<page string="Attendee Detail">
<button string="Invite People"
name="%(caldav.action_view_calendar_invite_attendee_wizard)d"
icon="terp-partner" type="action"
context="{'model' : 'crm.meeting'}" colspan="2"/>
<field name="attendee_ids" colspan="4"
nolabel="1" widget="one2many" />
</page>
<page string="Other Information">
<field name="alarm_id" string="Reminder" widget="selection" />
<field name="case_id" string="Related Opportunity" />
<field name="show_as"/>
<field name="class"/>
<field name="user_id"/>
<field name="rrule"/>
</page>
</notebook>
</form>
</field>
</record>
<record model="ir.ui.view" id="crm_case_tree_view_meet">
<field name="name">CRM - Meetings Tree</field>
<field name="model">crm.meeting</field>

View File

@ -12,9 +12,6 @@
<wizard string="Export ICS File" model="crm.meeting" name="caldav.crm.export"
id="wizard_crm_cal_export" multi="True"
/>
<wizard string="Set RRULE" model="crm.meeting"
name="caldav.set.rrule" id="wizard_crm_set_rrule" menu="False"
/>
</data>
</openerp>