diff options
| author | Raphael Collet <rco@openerp.com> | 2014-07-06 16:44:26 +0200 |
|---|---|---|
| committer | Antony Lesuisse <al@openerp.com> | 2014-07-06 17:05:41 +0200 |
| commit | cbe2dbb672a6c55d86f2e515f9d1cdfee426ef80 (patch) | |
| tree | d6ff62b719fce32392397783c961b734b1e4c50e /addons/calendar | |
| parent | d78192c489d3be66cd6487b39f5ce7ba4733a187 (diff) | |
[MERGE] new v8 api by rco
A squashed merge is required as the conversion of the apiculture branch from
bzr to git was not correctly done. The git history contains irrelevant blobs
and commits. This branch brings a lot of changes and fixes, too many to list
exhaustively.
- New orm api, objects are now used instead of ids
- Environements to encapsulates cr uid context while maintaining backward compatibility
- Field compute attribute is a new object oriented way to define function fields
- Shared browse record cache
- New onchange protocol
- Optional copy flag on fields
- Documentation update
- Dead code cleanup
- Lots of fixes
Diffstat (limited to 'addons/calendar')
| -rw-r--r-- | addons/calendar/base_calendar_view.xml | 291 | ||||
| -rw-r--r-- | addons/calendar/calendar.py | 24 | ||||
| -rw-r--r-- | addons/calendar/controllers/main.py | 6 | ||||
| -rw-r--r-- | addons/calendar/crm_meeting.py | 176 | ||||
| -rw-r--r-- | addons/calendar/crm_meeting_data.xml | 32 |
5 files changed, 11 insertions, 518 deletions
diff --git a/addons/calendar/base_calendar_view.xml b/addons/calendar/base_calendar_view.xml deleted file mode 100644 index 7fa20a848fd..00000000000 --- a/addons/calendar/base_calendar_view.xml +++ /dev/null @@ -1,291 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<openerp> - <data> - - <!-- Calendar's menu --> - <menuitem id="base.menu_calendar_configuration" name="Calendar" - parent="base.menu_base_config" sequence="50" groups="base.group_no_one"/> - - <!-- Alarm form view --> - <record id="res_alarm_form_view" model="ir.ui.view"> - <field name="name">res.alarm.form</field> - <field name="model">res.alarm</field> - <field name="arch" type="xml"> - <form string="Reminder details"> - <group col="4"> - <field name="name"/> - <field name="active"/> - <separator string="Reminder Details" colspan="4"/> - <field name="trigger_duration"/> - <field name="trigger_interval"/> - <field name="trigger_occurs"/> - <field name="trigger_related"/> - </group> - </form> - </field> - </record> - - <!-- Alarm list view --> - <record id="res_alarm_tree_view" model="ir.ui.view"> - <field name="name">res.alarm.tree</field> - <field name="model">res.alarm</field> - <field name="arch" type="xml"> - <tree string="Reminder details"> - <field name="name"/> - <field name="trigger_interval"/> - <field name="trigger_duration"/> - <field name="trigger_occurs"/> - <field name="trigger_related"/> - </tree> - </field> - </record> - <record id="action_res_alarm_view" model="ir.actions.act_window"> - <field name="name">Alarms</field> - <field name="type">ir.actions.act_window</field> - <field name="res_model">res.alarm</field> - <field name="view_type">form</field> - <field name="view_mode">tree,form</field> - <field name="help" type="html"> - <p class="oe_view_nocontent_create"> - Click to setup a new alarm type. - </p><p> - You can define a customized type of calendar alarm that may be - assigned to calendar events or meetings. - </p> - </field> - </record> - - <!-- Alarms menu --> - <menuitem id="menu_crm_meeting_avail_alarm" - groups="base.group_no_one" - action="base_calendar.action_res_alarm_view" - parent="base.menu_calendar_configuration" sequence="5"/> - - <!-- Event form view --> - <record model="ir.ui.view" id="event_form_view"> - <field name="name">Event Form</field> - <field name="model">calendar.event</field> - <field name="arch" type="xml"> - <form string="Events"> - <header> - <button name="do_confirm" string="Confirm" states="tentative,cancelled" type="object" class="oe_highlight"/> - <button name="do_tentative" states="confirmed,cancelled" string="Uncertain" type="object" class="oe_highlight"/> - <button name="do_cancel" string="Cancel Event" states="tentative,confirmed" type="object"/> - <field name="state" widget="statusbar" - statusbar_visible="tentative,confirmed" statusbar_colors='{"proforma":"blue"}'/> - </header> - <sheet> - <group col="6"> - <field name="name" string="Summary" - colspan="4" required="1"/> - <field name="allday" colspan="2" on_change="onchange_dates(date,False,False,allday)"/> - <newline/> - <field name="date" string="Start Date" required="1" - on_change="onchange_dates(date,duration,False,allday)"/> - <field name="duration" widget="float_time" - on_change="onchange_dates(date,duration,False,allday)" attrs="{'invisible': [('allday', '=', True)]}"/> - <field name="date_deadline" string="End Date" required="1" - on_change="onchange_dates(date,False,date_deadline)"/> - <field name="location"/> - <field name="alarm_id" string="Reminder" - widget="selection"/> - <group colspan="2" col="4" attrs="{'readonly': [('state','=','done')]}"> - <field name="recurrency"/> - </group> - </group> - <notebook> - <page string="Event"> - <group col="6" colspan="4"> - <separator colspan="6" string="Visibility"/> - <field name="user_id" string="Responsible User"/> - <field name="show_as" string="Show Time as"/> - <field name="class" string="Privacy"/> - <field name="recurrent_id_date" invisible="1"/> - <field name="recurrent_id" invisible="1"/> - </group> - <separator string="Description"/> - <field name="description"/> - </page> - <page string="Invitation Detail"> - <field name="attendee_ids" colspan="4" - nolabel="1" widget="one2many" mode="tree"> - <tree string="Invitation details" editable="top"> - <field name="sent_by_uid" string="From"/> - <field name="user_id" string="To"/> - <field name="email"/> - <field name="role" width="200"/> - <field name="state"/> - <button name="do_tentative" - states="needs-action,declined,accepted" - string="Uncertain" type="object" - icon="terp-crm"/> - <button name="do_accept" string="Accept" - states="needs-action,tentative,declined" - type="object" icon="gtk-apply"/> - <button name="do_decline" string="Decline" - states="needs-action,tentative,accepted" - type="object" icon="gtk-cancel"/> - </tree> - <form string="Invitation details"> - <notebook colspan="4"> - <page string="Details"> - <group col="4"> - <field name="email"/> - <field name="rsvp"/> - <field name="cutype"/> - <field name="role"/> - </group> - <group col="4"> - <field name="state"/> - <button name="do_tentative" - states="needs-action,declined,accepted" - string="Uncertain" - type="object" - icon="terp-crm"/> - <button name="do_accept" - string="Accept" - states="needs-action,tentative,declined" - type="object" - icon="gtk-apply"/> - <button name="do_decline" - string="Decline" - states="needs-action,tentative,accepted" - type="object" - icon="gtk-cancel"/> - </group> - </page> - </notebook> - </form> - </field> - </page> - <page string="Recurrency Option" attrs="{'invisible': [('recurrency','=',False)]}"> - <group col="4" colspan="4" name="rrule"> - <group col="4" colspan="4"> - <field name="rrule_type" string="Recurrency period" - attrs="{'readonly':[('recurrent_id','!=',False)]}"/> - <field name="interval"/> - <separator string="End of Recurrence" colspan="4"/> - <field name="end_type"/> - <label string=" " colspan="2"/> - <newline/> - <field name="count" attrs="{'invisible' : [('end_type', '!=', 'count')] }"/> - <label string=" " colspan="2"/> - <newline/> - <field name="end_date" attrs="{'invisible' : [('end_type', '!=', 'end_date')] }"/> - <newline/> - - - </group> - <group col="8" colspan="4" name="Select weekdays" attrs="{'invisible' :[('rrule_type','not in', ['weekly'])]}"> - <separator string="Choose day where repeat the meeting" colspan="8"/> - <field name="mo" colspan="1"/> - <field name="tu" colspan="1"/> - <field name="we" colspan="1"/> - <field name="th" colspan="1"/> - <newline/> - <field name="fr" colspan="1"/> - <field name="sa" colspan="1" /> - <field name="su" colspan="1" /> - <newline/> - </group> - <group col="10" colspan="4" - attrs="{'invisible' : [('rrule_type','!=','monthly')]}"> - <separator string="Choose day in the month where repeat the meeting" colspan="12"/> - <group col="2" colspan="1"> - <field name="select1"/> - </group> - <group col="2" colspan="1"> - <field name="day" - attrs="{'required' : [('select1','=','date'), ('rrule_type','=','monthly')], - 'invisible' : ['|', ('select1','=','day'), ('rrule_type','!=','monthly')]}"/> - </group> - <group col="3" colspan="1" - attrs="{'invisible' : ['|', ('select1','=','date'), ('rrule_type','!=','monthly')]}"> - <field name="byday" string="The" - attrs="{'required' : [('select1','=','day'), ('rrule_type','=','monthly')]}"/> - <field name="week_list" nolabel="1" - attrs="{'required' : [('select1','=','day'), ('rrule_type','=','monthly')]}"/> - </group> - </group> - </group> - - </page> - </notebook> - </sheet> - </form> - </field> - </record> - - <!-- Event list view --> - <record model="ir.ui.view" id="event_tree_view"> - <field name="name">Event Tree</field> - <field name="model">calendar.event</field> - <field name="arch" type="xml"> - <tree string="Events"> - <field name="name" string="Subject"/> - <field name="date" string="Event Date"/> - <field name="location"/> - <field name="show_as"/> - <field name="class" string="Privacy"/> - <field name="user_id" invisible="1"/> - <field name="state" invisible="1"/> - </tree> - </field> - </record> - - <!-- Event calendar view --> - <record model="ir.ui.view" id="event_calendar_view"> - <field name="name">Events Calendar</field> - <field name="model">calendar.event</field> - <field name="priority" eval="2"/> - <field name="arch" type="xml"> - <calendar string="Events" date_start="date" color="show_as" date_delay="duration"> - <field name="name"/> - <field name="class"/> - <field name="show_as"/> - </calendar> - </field> - </record> - - <!-- Event search view --> - <record id="view_calendar_event_filter" model="ir.ui.view"> - <field name="name">Calendar Events Search</field> - <field name="model">calendar.event</field> - <field name="arch" type="xml"> - <search string="Search Events"> - <field name="name" filter_domain="['|',('name','ilike',self),('location','ilike',self)]" string="Event"/> - <field name="show_as"/> - <field name="class" string="Privacy"/> - <filter icon="terp-go-today" string="My Events" domain="[('user_id','=',uid)]" help="My Events"/> - <separator/> - <filter icon="terp-check" string="Confirmed" domain="[('state','=','confirmed')]" help="Confirmed Events"/> - <field name="user_id"/> - <group expand="0" string="Group By"> - <filter string="Responsible" icon="terp-personal" domain="[]" context="{'group_by':'user_id'}"/> - <filter string="Availability" icon="terp-camera_test" domain="[]" context="{'group_by':'show_as'}"/> - <filter string="Privacy" icon="terp-locked" domain="[]" context="{'group_by':'class'}"/> - <filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/> - <filter string="Event Month" icon="terp-go-month" domain="[]" context="{'group_by':'date'}" help="Start Date of Event by Month"/> - </group> - </search> - </field> - </record> - - - <!-- Event action --> - <record id="action_view_event" model="ir.actions.act_window"> - <field name="name">Events</field> - <field name="type">ir.actions.act_window</field> - <field name="res_model">calendar.event</field> - <field name="view_type">form</field> - <field name="view_mode">calendar,tree,form</field> - <field name="search_view_id" ref="view_calendar_event_filter"/> - </record> - - <!-- Event menu --> - <menuitem id="menu_events" - name="Events" parent="base.menu_calendar_configuration" - sequence="15" action="action_view_event"/> - - </data> - </openerp> diff --git a/addons/calendar/calendar.py b/addons/calendar/calendar.py index 7108a2d1d73..a77eb5ea6f6 100644 --- a/addons/calendar/calendar.py +++ b/addons/calendar/calendar.py @@ -297,7 +297,7 @@ class res_partner(osv.Model): Used by web_calendar.js : Many2ManyAttendee """ datas = [] - meeting = False + meeting = None if meeting_id: meeting = self.pool['calendar.event'].browse(cr, uid, get_real_ids(meeting_id), context=context) for partner in self.browse(cr, uid, ids, context=context): @@ -309,7 +309,7 @@ class res_partner(osv.Model): datas.append(data) return datas - def calendar_last_notif_ack(self, cr, uid, context=None): + def _set_calendar_last_notif_ack(self, cr, uid, context=None): partner = self.pool['res.users'].browse(cr, uid, uid, context=context).partner_id self.write(cr, uid, partner.id, {'calendar_last_notif_ack': datetime.now()}, context=context) return @@ -708,6 +708,7 @@ class calendar_event(osv.Model): return (format_date, format_time) def get_display_time_tz(self, cr, uid, ids, tz=False, context=None): + context = dict(context or {}) if tz: context["tz"] = tz ev = self.browse(cr, uid, ids, context=context)[0] @@ -720,8 +721,7 @@ class calendar_event(osv.Model): 1) if user add duration for 2 hours, return : August-23-2013 at (04-30 To 06-30) (Europe/Brussels) 2) if event all day ,return : AllDay, July-31-2013 """ - if context is None: - context = {} + context = dict(context or {}) tz = context.get('tz', False) if not tz: # tz can have a value False, so dont do it in the default value of get ! @@ -782,7 +782,7 @@ class calendar_event(osv.Model): if data.count and data.count <= 0: raise osv.except_osv(_('Warning!'), _('Count cannot be negative or 0.')) - data = self.read(cr, uid, id, ['id', 'byday', 'recurrency', 'month_list', 'final_date', 'rrule_type', 'month_by', 'interval', 'count', 'end_type', 'mo', 'tu', 'we', 'th', 'fr', 'sa', 'su', 'day', 'week_list'], context=context) + data = self.read(cr, uid, id, ['id', 'byday', 'recurrency', 'final_date', 'rrule_type', 'month_by', 'interval', 'count', 'end_type', 'mo', 'tu', 'we', 'th', 'fr', 'sa', 'su', 'day', 'week_list'], context=context) event = data['id'] if data['recurrency']: result[event] = self.compute_rule_string(data) @@ -900,7 +900,7 @@ class calendar_event(osv.Model): 'categ_ids': fields.many2many('calendar.event.type', 'meeting_category_rel', 'event_id', 'type_id', 'Tags'), 'attendee_ids': fields.one2many('calendar.attendee', 'event_id', 'Attendees', ondelete='cascade'), 'partner_ids': fields.many2many('res.partner', 'calendar_event_res_partner_rel', string='Attendees', states={'done': [('readonly', True)]}), - 'alarm_ids': fields.many2many('calendar.alarm', 'calendar_alarm_calendar_event_rel', string='Reminders', ondelete="restrict"), + 'alarm_ids': fields.many2many('calendar.alarm', 'calendar_alarm_calendar_event_rel', string='Reminders', ondelete="restrict", copy=False), } _defaults = { 'end_type': 'count', @@ -1404,16 +1404,9 @@ class calendar_event(osv.Model): return res def copy(self, cr, uid, id, default=None, context=None): - if context is None: - context = {} - default = default or {} - self._set_date(cr, uid, default, id=default.get('id'), context=context) - default['attendee_ids'] = False - - res = super(calendar_event, self).copy(cr, uid, calendar_id2real_id(id), default, context) - return res + return super(calendar_event, self).copy(cr, uid, calendar_id2real_id(id), default, context) def _detach_one_event(self, cr, uid, id, values=dict(), context=None): real_event_id = calendar_id2real_id(id) @@ -1547,8 +1540,7 @@ class calendar_event(osv.Model): return res def read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False, lazy=True): - if not context: - context = {} + context = dict(context or {}) if 'date' in groupby: raise osv.except_osv(_('Warning!'), _('Group by date is not supported, use the calendar view instead.')) diff --git a/addons/calendar/controllers/main.py b/addons/calendar/controllers/main.py index 7480c85d629..d0fdb47ab0b 100644 --- a/addons/calendar/controllers/main.py +++ b/addons/calendar/controllers/main.py @@ -1,7 +1,7 @@ import simplejson import openerp -import openerp.addons.web.http as http -from openerp.addons.web.http import request +import openerp.http as http +from openerp.http import request import openerp.addons.web.controllers.main as webmain import json @@ -67,5 +67,5 @@ class meeting_invitation(http.Controller): uid = request.session.uid context = request.session.context with registry.cursor() as cr: - res = registry.get("res.partner").calendar_last_notif_ack(cr, uid, context=context) + res = registry.get("res.partner")._set_calendar_last_notif_ack(cr, uid, context=context) return res diff --git a/addons/calendar/crm_meeting.py b/addons/calendar/crm_meeting.py deleted file mode 100644 index 66823e0b8f4..00000000000 --- a/addons/calendar/crm_meeting.py +++ /dev/null @@ -1,176 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-today OpenERP SA (<http://www.openerp.com>) -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. -# -############################################################################## - -import time - -from openerp.osv import fields, osv -from openerp.tools import DEFAULT_SERVER_DATE_FORMAT -from openerp.tools.translate import _ -from base_calendar import get_real_ids, base_calendar_id2real_id -# -# crm.meeting is defined here so that it may be used by modules other than crm, -# without forcing the installation of crm. -# - -class crm_meeting_type(osv.Model): - _name = 'crm.meeting.type' - _description = 'Meeting Type' - _columns = { - 'name': fields.char('Name', size=64, required=True, translate=True), - } - -class crm_meeting(osv.Model): - """ Model for CRM meetings """ - _name = 'crm.meeting' - _description = "Meeting" - _order = "id desc" - _inherit = ["calendar.event", "mail.thread", "ir.needaction_mixin"] - _columns = { - 'create_date': fields.datetime('Creation Date', readonly=True), - 'write_date': fields.datetime('Write Date', readonly=True), - 'date_open': fields.datetime('Confirmed', readonly=True), - 'date_closed': fields.datetime('Closed', readonly=True), - 'partner_ids': fields.many2many('res.partner', 'crm_meeting_partner_rel', 'meeting_id', 'partner_id', - string='Attendees', states={'done': [('readonly', True)]}), - 'state': fields.selection( - [('draft', 'Unconfirmed'), ('open', 'Confirmed')], - string='Status', size=16, readonly=True, track_visibility='onchange'), - # Meeting fields - 'name': fields.char('Meeting Subject', size=128, required=True, states={'done': [('readonly', True)]}), - 'categ_ids': fields.many2many('crm.meeting.type', 'meeting_category_rel', - 'event_id', 'type_id', 'Tags'), - 'attendee_ids': fields.many2many('calendar.attendee', 'meeting_attendee_rel',\ - 'event_id', 'attendee_id', 'Invited People', states={'done': [('readonly', True)]}), - } - _defaults = { - 'state': 'open', - } - - def message_get_subscription_data(self, cr, uid, ids, context=None): - res = {} - for virtual_id in ids: - real_id = base_calendar_id2real_id(virtual_id) - result = super(crm_meeting, self).message_get_subscription_data(cr, uid, [real_id], context=context) - res[virtual_id] = result[real_id] - return res - - def copy(self, cr, uid, id, default=None, context=None): - default = default or {} - default['attendee_ids'] = False - return super(crm_meeting, self).copy(cr, uid, id, default, context) - - def write(self, cr, uid, ids, values, context=None): - """ Override to add case management: open/close dates """ - if values.get('state')and values.get('state') == 'open': - values['date_open'] = fields.datetime.now() - return super(crm_meeting, self).write(cr, uid, ids, values, context=context) - - def onchange_partner_ids(self, cr, uid, ids, value, context=None): - """ The basic purpose of this method is to check that destination partners - effectively have email addresses. Otherwise a warning is thrown. - :param value: value format: [[6, 0, [3, 4]]] - """ - res = {'value': {}} - if not value or not value[0] or not value[0][0] == 6: - return - res.update(self.check_partners_email(cr, uid, value[0][2], context=context)) - return res - - def check_partners_email(self, cr, uid, partner_ids, context=None): - """ Verify that selected partner_ids have an email_address defined. - Otherwise throw a warning. """ - partner_wo_email_lst = [] - for partner in self.pool.get('res.partner').browse(cr, uid, partner_ids, context=context): - if not partner.email: - partner_wo_email_lst.append(partner) - if not partner_wo_email_lst: - return {} - warning_msg = _('The following contacts have no email address :') - for partner in partner_wo_email_lst: - warning_msg += '\n- %s' % (partner.name) - return {'warning': { - 'title': _('Email addresses not found'), - 'message': warning_msg, - } - } - # ---------------------------------------- - # OpenChatter - # ---------------------------------------- - - # shows events of the day for this user - def _needaction_domain_get(self, cr, uid, context=None): - return [('date', '<=', time.strftime(DEFAULT_SERVER_DATE_FORMAT + ' 23:59:59')), ('date_deadline', '>=', time.strftime(DEFAULT_SERVER_DATE_FORMAT + ' 23:59:59')), ('user_id', '=', uid)] - - def message_post(self, cr, uid, thread_id, body='', subject=None, type='notification', - subtype=None, parent_id=False, attachments=None, context=None, **kwargs): - if isinstance(thread_id, str): - thread_id = get_real_ids(thread_id) - return super(crm_meeting, self).message_post(cr, uid, thread_id, body=body, subject=subject, type=type, subtype=subtype, parent_id=parent_id, attachments=attachments, context=context, **kwargs) - -class mail_message(osv.osv): - _inherit = "mail.message" - - def search(self, cr, uid, args, offset=0, limit=0, order=None, context=None, count=False): - ''' - convert the search on real ids in the case it was asked on virtual ids, then call super() - ''' - for index in range(len(args)): - if args[index][0] == "res_id" and isinstance(args[index][2], str): - args[index][2] = get_real_ids(args[index][2]) - return super(mail_message, self).search(cr, uid, args, offset=offset, limit=limit, order=order, context=context, count=count) - - def _find_allowed_model_wise(self, cr, uid, doc_model, doc_dict, context=None): - if doc_model == 'crm.meeting': - for virtual_id in self.pool[doc_model].get_recurrent_ids(cr, uid, doc_dict.keys(), [], context=context): - doc_dict.setdefault(virtual_id, doc_dict[get_real_ids(virtual_id)]) - return super(mail_message, self)._find_allowed_model_wise(cr, uid, doc_model, doc_dict, context=context) - -class ir_attachment(osv.osv): - _inherit = "ir.attachment" - - def search(self, cr, uid, args, offset=0, limit=0, order=None, context=None, count=False): - ''' - convert the search on real ids in the case it was asked on virtual ids, then call super() - ''' - for index in range(len(args)): - if args[index][0] == "res_id" and isinstance(args[index][2], str): - args[index][2] = get_real_ids(args[index][2]) - return super(ir_attachment, self).search(cr, uid, args, offset=offset, limit=limit, order=order, context=context, count=count) - - def write(self, cr, uid, ids, vals, context=None): - ''' - when posting an attachment (new or not), convert the virtual ids in real ids. - ''' - if isinstance(vals.get('res_id'), str): - vals['res_id'] = get_real_ids(vals.get('res_id')) - return super(ir_attachment, self).write(cr, uid, ids, vals, context=context) - -class invite_wizard(osv.osv_memory): - _inherit = 'mail.wizard.invite' - - def default_get(self, cr, uid, fields, context=None): - ''' - in case someone clicked on 'invite others' wizard in the followers widget, transform virtual ids in real ids - ''' - result = super(invite_wizard, self).default_get(cr, uid, fields, context=context) - if 'res_id' in result: - result['res_id'] = get_real_ids(result['res_id']) - return result diff --git a/addons/calendar/crm_meeting_data.xml b/addons/calendar/crm_meeting_data.xml deleted file mode 100644 index d1cffddc403..00000000000 --- a/addons/calendar/crm_meeting_data.xml +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0"?> -<openerp> - <data noupdate="1"> - - <!-- CASE CATEGORY(categ_id) --> - - <record model="crm.meeting.type" id="categ_meet1"> - <field name="name">Customer Meeting</field> - </record> - - <record model="crm.meeting.type" id="categ_meet2"> - <field name="name">Internal Meeting</field> - </record> - - <record model="crm.meeting.type" id="categ_meet3"> - <field name="name">Off-site Meeting</field> - </record> - - <record model="crm.meeting.type" id="categ_meet4"> - <field name="name">Open Discussion</field> - </record> - - <record model="crm.meeting.type" id="categ_meet5"> - <field name="name">Feedback Meeting</field> - </record> - - <record model="res.request.link" id="request_link_meeting"> - <field name="name">Meeting</field> - <field name="object">crm.meeting</field> - </record> - </data> -</openerp> |
