[MERGE] event: usability, review of form views

bzr revid: qdp-launchpad@openerp.com-20120710084626-oldsa3pdv3ku2ylb
This commit is contained in:
Quentin (OpenERP) 2012-07-10 10:46:26 +02:00
commit 45dfeb95ee
7 changed files with 231 additions and 257 deletions

View File

@ -51,7 +51,7 @@ Note that:
'res_partner_view.xml',
'email_template.xml',
],
'demo_xml': ['event_demo.xml'],
'demo_xml': ['event_demo.yml'],
'test': ['test/process/event_draft2done.yml'],
'css': ['static/src/css/event.css'],
'installable': True,

View File

@ -55,22 +55,14 @@ class event_event(osv.osv):
return []
res = []
for record in self.browse(cr, uid, ids, context=context):
date = record.date_begin.split(" ")
date = date[0]
registers=''
if record.register_max !=0:
register_max = str(record.register_max)
register_tot = record.register_current+record.register_prospect
register_tot = str(register_tot)
registers = register_tot+'/'+register_max
name = record.name+' ('+date+') '+registers
res.append((record['id'], name))
date = record.date_begin.split(" ")[0]
date_end = record.date_end.split(" ")[0]
if date != date_end:
date += ' - ' + date_end
display_name = record.name + ' (' + date + ')'
res.append((record['id'], display_name))
return res
def _name_get_fnc(self, cr, uid, ids,prop,unknow, context=None):
res = self.name_get(cr, uid, ids, context=context)
return dict(res)
def create(self, cr, uid, vals, context=None):
obj_id = super(event_event, self).create(cr, uid, vals, context)
self.create_send_note(cr, uid, [obj_id], context=context)
@ -210,10 +202,12 @@ class event_event(osv.osv):
help='If event is created, the state is \'Draft\'.If event is confirmed for the particular dates the state is set to \'Confirmed\'. If the event is over, the state is set to \'Done\'.If event is cancelled the state is set to \'Cancelled\'.'),
'email_registration_id' : fields.many2one('email.template','Registration Confirmation Email', help='This field contains the template of the mail that will be automatically sent each time a registration for this event is confirmed.'),
'email_confirmation_id' : fields.many2one('email.template','Event Confirmation Email', help="If you set an email template, each participant will receive this email announcing the confirmation of the event."),
'full_name' : fields.function(_name_get_fnc, type="char", string='Name'),
'reply_to': fields.char('Reply-To Email', size=64, readonly=False, states={'done': [('readonly', True)]}, help="The email address of the organizer is likely to be put here, with the effect to be in the 'Reply-To' of the mails sent automatically at event or registrations confirmation. You can also put the email address of your mail gateway if you use one."),
'main_speaker_id': fields.many2one('res.partner','Main Speaker', readonly=False, states={'done': [('readonly', True)]}, help="Speaker who will be giving speech at the event."),
'address_id': fields.many2one('res.partner','Location Address', readonly=False, states={'done': [('readonly', True)]}),
'street': fields.related('address_id','street',type='char',string='Street'),
'zip': fields.related('address_id','zip',type='char',string='zip'),
'city': fields.related('address_id','city',type='char',string='city'),
'speaker_confirmed': fields.boolean('Speaker Confirmed', readonly=False, states={'done': [('readonly', True)]}),
'country_id': fields.related('address_id', 'country_id',
type='many2one', relation='res.country', string='Country', readonly=False, states={'done': [('readonly', True)]}),
@ -302,7 +296,7 @@ class event_registration(osv.osv):
"""Event Registration"""
_name= 'event.registration'
_description = __doc__
_inherit = ['ir.needaction_mixin','mail.thread','res.partner']
_inherit = ['ir.needaction_mixin','mail.thread']
_columns = {
'id': fields.integer('ID'),
'origin': fields.char('Source', size=124,readonly=True,help="Name of the sale order which create the registration"),
@ -316,13 +310,16 @@ class event_registration(osv.osv):
'log_ids': fields.one2many('mail.message', 'res_id', 'Logs', domain=[('email_from', '=', False),('model','=',_name)]),
'event_end_date': fields.related('event_id','date_end', type='datetime', string="Event End Date", readonly=True),
'event_begin_date': fields.related('event_id', 'date_begin', type='datetime', string="Event Start Date", readonly=True),
'user_id': fields.many2one('res.users', 'Attendee', states={'done': [('readonly', True)]}),
'user_id': fields.many2one('res.users', 'User', states={'done': [('readonly', True)]}),
'company_id': fields.related('event_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True, states={'draft':[('readonly',False)]}),
'state': fields.selection([('draft', 'Unconfirmed'),
('cancel', 'Cancelled'),
('open', 'Confirmed'),
('done', 'Attended')], 'Status',
size=16, readonly=True),
'email': fields.char('Email', size=64),
'phone': fields.char('Phone', size=64),
'name': fields.char('Name', size=128, select=True),
}
_defaults = {
@ -331,7 +328,6 @@ class event_registration(osv.osv):
}
_order = 'name, create_date desc'
def do_draft(self, cr, uid, ids, context=None):
self.do_draft_send_note(cr, uid, ids, context=context)
return self.write(cr, uid, ids, {'state': 'draft'}, context=context)
@ -400,18 +396,15 @@ class event_registration(osv.osv):
return True
def onchange_contact_id(self, cr, uid, ids, contact, partner, context=None):
data ={}
if not contact:
return data
return {}
addr_obj = self.pool.get('res.partner')
contact_id = addr_obj.browse(cr, uid, contact, context=context)
data = {
return {'value': {
'email':contact_id.email,
'contact_id':contact_id.id,
'name':contact_id.name,
'phone':contact_id.phone,
}
return {'value': data}
}}
def onchange_event(self, cr, uid, ids, event_id, context=None):
"""This function returns value of Product Name, Unit Price based on Event.

View File

@ -1,98 +0,0 @@
<?xml version="1.0"?>
<openerp>
<data>
<record id="base.user_demo" model="res.users">
<field name="groups_id" eval="[(4, ref('event.group_event_user'))]"/>
</record>
<!-- Demo Data for Event Type -->
<record id="event_type_0" model="event.type">
<field name="name">Seminar</field>
</record>
<record id="event_type_1" model="event.type">
<field name="name">Exhibition</field>
</record>
<record id="event_type_2" model="event.type">
<field name="name">Conference</field>
</record>
<record id="event_type_3" model="event.type">
<field name="name">Show</field>
</record>
<record id="event_type_4" model="event.type">
<field name="name">Training</field>
</record>
<!-- Demo data for Event -->
<record id="event_0" model="event.event">
<field name="name">Concert of Bon Jovi</field>
<field eval="time.strftime('%Y-%m-01 19:05:15')" name="date_begin"/>
<field eval="time.strftime('%Y-%m-01 23:05:15')" name="date_end"/>
<field name="register_max">500</field>
<field name="type" ref="event_type_1"/>
</record>
<record id="event_1" model="event.event">
<field name="name">Opera of Verdi</field>
<field eval="(DateTime.today()+ timedelta(days=1)).strftime('%Y-%m-%d 18:00:00')" name="date_begin"/>
<field eval="(DateTime.today()+ timedelta(days=2)).strftime('%Y-%m-%d 21:00:00')" name="date_end"/>
<field name="type" ref="event_type_1"/>
<field name="register_min">50</field>
<field name="register_max">350</field>
</record>
<record id="event_2" model="event.event">
<field name="name">Conference on ERP Business</field>
<field eval="(DateTime.today()+ timedelta(days=2)).strftime('%Y-%m-%d 14:00:00')" name="date_begin"/>
<field eval="(DateTime.today()+ timedelta(days=2)).strftime('%Y-%m-%d 16:30:00')" name="date_end"/>
<field name="type" ref="event_type_2"/>
<field name="register_max">200</field>
</record>
<function model="event.event" name="button_confirm" eval="[ref('event_2')]"/>
<function model="event.event" name="button_confirm" eval="[ref('event_2')]"/>
<!-- Demo data for Event Registration-->
<record id="reg_1_1" model="event.registration">
<field name="name">Agrolait</field>
<field name="email">s.l@agrolait.be</field>
<field name="phone">003281588558</field>
<field name="event_id" ref="event_1"/>
<field name="partner_id" ref="base.res_partner_agrolait"/>
<field name="nb_register">5</field>
</record>
<record id="reg_1_2" model="event.registration">
<field name="name">ASUStek</field>
<field name="email">info@asustek.com</field>
<field name="phone">+ 1 64 61 04 01</field>
<field name="partner_id" ref="base.res_partner_asus"/>
<field name="event_id" ref="event_1"/>
<field name="nb_register">10</field>
</record>
<record id="reg_0_1" model="event.registration">
<field name="name">Syleam</field>
<field name="email">contact@syleam.fr</field>
<field name="phone">+33 (0) 2 33 31 22 10</field>
<field name="partner_id" ref="base.res_partner_sednacom"/>
<field name="event_id" ref="event_0"/>
<field name="nb_register">6</field>
</record>
<record id="reg_0_2" model="event.registration">
<field name="name">Camptocamp</field>
<field name="email">openerp@camptocamp.com</field>
<field name="phone">+41 21 619 10 04 </field>
<field name="event_id" ref="event_2"/>
<field name="partner_id" ref="base.res_partner_c2c"/>
<field name="nb_register">5</field>
</record>
</data>
</openerp>

View File

@ -0,0 +1,73 @@
-
from datetime import datetime, timedelta
-
!record {model: event.type, id: event_type_0}:
name: 'Seminar'
-
!record {model: event.type, id: event_type_1}:
name: 'Exhibition'
-
!record {model: event.type, id: event_type_2}:
name: 'Conference'
-
!record {model: event.type, id: event_type_3}:
name: 'Show'
-
!record {model: event.type, id: event_type_4}:
name: 'Training'
-
!record {model: event.event, id: event_0}:
name: 'Concert of Bon Jovi'
date_begin: !eval time.strftime('%Y-%m-01 19:05:15')
date_end: !eval time.strftime('%Y-%m-01 23:05:15')
register_max: 500
type: event_type_1
-
!record {model: event.event, id: event_1}:
name: 'Opera of Verdi'
date_begin: !eval (datetime.today()+ timedelta(days=1)).strftime('%Y-%m-%d 18:00:00')
date_end: !eval (datetime.today()+ timedelta(days=1)).strftime('%Y-%m-%d 21:00:00')
register_min: 50
register_max: 350
type: event_type_1
-
!record {model: event.event, id: event_2}:
name: 'Conference on ERP Business'
date_begin: !eval (datetime.today()+ timedelta(days=20)).strftime('%Y-%m-%d 14:00:00')
date_end: !eval (datetime.today()+ timedelta(days=20)).strftime('%Y-%m-%d 16:30:00')
register_min: 50
register_max: 350
type: event_type_2
-
!record {model: event.registration, id: reg_1_1}:
name: 'Agrolait'
email: 's.l@agrolait.be'
phone: '003281588558'
event_id: event_1
partner_id: base.res_partner_asus
nb_register: 5
-
!record {model: event.registration, id: reg_1_2}:
name: 'ASUStek'
email: 'info@asustek.com'
phone: '+ 1 64 61 04 01'
event_id: event_1
partner_id: base.res_partner_asus
nb_register: 10
-
!record {model: event.registration, id: reg_0_1}:
name: 'Syleam'
email: 'contact@syleam.fr'
phone: '+33 (0) 2 33 31 22 10'
event_id: event_0
partner_id: base.res_partner_sednacom
nb_register: 6
-
!record {model: event.registration, id: reg_0_2}:
name: 'Camptocamp'
email: 'openerp@camptocamp.com'
phone: '+41 21 619 10 04'
event_id: event_2
partner_id: base.res_partner_c2c
nb_register: 5

View File

@ -1,7 +1,14 @@
<?xml version="1.0"?>
<openerp>
<data>
<act_window
id="act_event_list_register_event"
name="Registration"
res_model="event.registration"
src_model="event.event"
view_mode="calendar,tree,form,graph"
context="{'search_default_event_id': active_id, 'default_event_id': active_id}"
view_type="form"/>
<menuitem name="Events" id="event_main_menu"/>
<menuitem name="Events Organisation" id="base.menu_event_main" parent="event_main_menu" />
@ -17,10 +24,10 @@
<group col="4">
<field name="name"/>
<field name="default_reply_to"/>
<field name="default_email_event" domain="[('model_id.model','=','event.registration')]"/>
<field name="default_email_registration" domain="[('model_id.model','=','event.registration')]"/>
<field name="default_registration_min"/>
<field name="default_email_event" domain="[('model_id.model','=','event.registration')]"/>
<field name="default_registration_max"/>
<field name="default_email_registration" domain="[('model_id.model','=','event.registration')]"/>
</group>
</form>
</field>
@ -89,88 +96,103 @@
<field name="model">event.event</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Events" version="7.0">
<header>
<button string="Confirm Event" name="button_confirm" states="draft" type="object" class="oe_highlight"/>
<button string="Event Ended" name="button_done" states="confirm" type="object" class="oe_highlight"/>
<button string="Set To Draft" name="button_draft" states="cancel,done" type="object" />
<button string="Cancel Event" name="button_cancel" states="draft,confirm" type="object"/>
<field name="state" widget="statusbar" statusbar_visible="draft,confirm,done"/>
</header>
<sheet>
<div class="oe_right" style="height: 200px"></div>
<div class="oe_title">
<h1><field name="name"/></h1>
<group>
<group>
<field name="type" on_change="onchange_event_type(type,context)"/>
<field name="user_id"/>
<field name="address_id" widget="many2one_address_google_map" widget_option="{'placeholder':'.oe_google_map'}"/>
</group>
<group>
<field name="date_begin"/>
<field name="date_end"/>
<field name="register_min"/>
<field name="register_max"/>
</group>
</group>
</div>
<notebook>
<page string="Event Description">
<field name="note" colspan="4" nolabel="1"/>
</page>
<page string="Internal Data">
<group class="oe_group_label_border" colspan="2" col="2">
<field name="register_current"/>
<field name="register_prospect"/>
<field name="register_attended"/>
</group>
<group class="oe_group_label_border" colspan="2" col="2">
<field name="main_speaker_id" domain="[('speaker','=',True)]" context="{'default_speaker':1}"/>
<field name="speaker_confirmed"/>
</group>
<field name="registration_ids" colspan="4" nolabel="1" groups="event.group_event_manager,event.group_event_user">
<tree string="Registration" editable="top">
<field name="name" />
<field name="email" />
<field name="phone"/>
<field name="nb_register" />
<field name="state"/>
<button name="registration_open" string="Confirm Registration" states="draft" type="object" icon="gtk-apply"/>
<button name="button_reg_close" string="Attented the Event" states="open" type="object" icon="gtk-jump-to"/>
<button name="button_reg_cancel" string="Cancel Registration" states="draft,open" type="object" icon="gtk-cancel"/>
</tree>
<form string="Registration">
<field name="partner_id" attrs="{'readonly':[('state','!=', 'draft')]}" on_change="onchange_partner_id(partner_id, context)" />
<field name="name"/>
<group colspan="4" col="4">
<field name="email"/>
<field name="phone"/>
<form string="Events" version="7.0">
<header>
<button string="Confirm Event" name="button_confirm" states="draft" type="object" class="oe_highlight"/>
<button string="Event Ended" name="button_done" states="confirm" type="object" class="oe_highlight"/>
<button string="Set To Draft" name="button_draft" states="cancel,done" type="object" />
<button string="Cancel Event" name="button_cancel" states="draft,confirm" type="object"/>
<field name="state" widget="statusbar" statusbar_visible="draft,confirm,done"/>
</header>
<sheet>
<div class="oe_right oe_button_box">
<button name="%(event.act_event_list_register_event)d" type="action" string="Registration" icon="gtk-index" help="Register with this event"/>
</div>
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
<h1><field name="name"/></h1>
</div>
<div>
<h2>From <field name="date_begin" class="oe_inline" /> to <field name="date_end" class="oe_inline"/>
</h2>
<group>
<group>
<label for="address_id" string="Location Address"/>
<div>
<field name="address_id" widget="many2one_address_google_map" widget_option="{'placeholder':'.oe_google_map'}"/>
<field name="street" placeholder="Street..."/>
<div>
<field name="zip" class="oe_inline" placeholder="Zip"/>
<field name="city" class="oe_inline" placeholder="City"/>
</div>
</div>
</group>
<group colspan="4" col="4">
<field name="nb_register"/>
</group>
<group colspan="4" col="4">
</group>
<group col="8" colspan="4">
<separator string="" colspan="4"/>
<newline/>
<field name="state" colspan="2"/>
<button name="registration_open" string="Confirm Registration" states="draft" type="object" icon="gtk-apply"/>
<button name="button_reg_close" string="Attended the Event" states="open" type="object" icon="gtk-jump-to"/>
<button name="button_reg_cancel" string="Cancel Registration" states="draft,open" type="object" icon="gtk-cancel"/>
<group>
<field name="type" on_change="onchange_event_type(type,context)"/>
<field name="register_min"/>
<field name="register_max"/>
<label for="register_current" string="Current Registrations"/>
<div>
Confirmed: <field name="register_current" class="oe_inline"/>, Unconfirmed: <field name="register_prospect" class="oe_inline"/>
</div>
</group>
</group>
</div>
<!-- <div class="oe_right" style="height: 200px"></div> -->
<notebook>
<page string="Event Description">
<field name="note" colspan="4" nolabel="1"/>
</page>
<page string="Internal Data">
<group>
<group>
<field name="main_speaker_id" domain="[('speaker','=',True)]" context="{'default_speaker':1}"/>
<field name="speaker_confirmed"/>
</group>
</form>
</field>
</page>
</notebook>
<group>
<field name="register_attended"/>
</group>
</group>
<field name="registration_ids" colspan="4" nolabel="1" groups="event.group_event_manager,event.group_event_user">
<tree string="Registration" editable="top">
<field name="name" />
<field name="email" />
<field name="phone"/>
<field name="nb_register" />
<field name="state"/>
<button name="registration_open" string="Confirm Registration" states="draft" type="object" icon="gtk-apply"/>
<button name="button_reg_close" string="Attented the Event" states="open" type="object" icon="gtk-jump-to"/>
<button name="button_reg_cancel" string="Cancel Registration" states="draft,open" type="object" icon="gtk-cancel"/>
</tree>
<form string="Registration">
<field name="partner_id" attrs="{'readonly':[('state','!=', 'draft')]}" on_change="onchange_partner_id(partner_id, context)" />
<field name="name"/>
<group colspan="4" col="4">
<field name="email"/>
<field name="phone"/>
</group>
<group colspan="4" col="4">
<field name="nb_register"/>
</group>
<group colspan="4" col="4">
</group>
<group col="8" colspan="4">
<separator string="" colspan="4"/>
<newline/>
<field name="state" colspan="2"/>
<button name="registration_open" string="Confirm Registration" states="draft" type="object" icon="gtk-apply"/>
<button name="button_reg_close" string="Attended the Event" states="open" type="object" icon="gtk-jump-to"/>
<button name="button_reg_cancel" string="Cancel Registration" states="draft,open" type="object" icon="gtk-cancel"/>
</group>
</form>
</field>
</page>
</notebook>
</sheet>
<footer>
<field name="message_ids" colspan="4" widget="mail_thread" nolabel="1"/>
</footer>
</form>
</form>
</field>
</record>
@ -351,15 +373,6 @@
<field name="help">Event is the low level object used by meeting and others documents that should be synchronized with mobile devices or calendar applications through caldav. Most of the users should work in the Calendar menu, and not in the list of events.</field>
</record>
<act_window
id="act_event_list_register_event"
name="Registration"
res_model="event.registration"
src_model="event.event"
view_mode="calendar,tree,form,graph"
context="{'search_default_event_id': [active_id], 'default_event_id': active_id}"
view_type="form"/>
<act_window
id="act_register_event_partner"
name="Subscribe"
@ -436,44 +449,40 @@
<field name="type">form</field>
<field name="arch" type="xml">
<form version="7.0">
<header>
<button name="registration_open" string="Confirm" states="draft" type="object" class="oe_highlight"/>
<button name="button_reg_close" string="Attended" states="open" type="object" class="oe_highlight"/>
<button string="Set To Unconfirmed" name="do_draft" states="cancel,done" type="object" />
<button name="button_reg_cancel" string="Cancel Registration" states="draft,open" type="object"/>
<field name="state" nolabel="1" colspan="2" widget="statusbar" statusbar_visible="draft,open,done"/>
</header>
<sheet string="Registration">
<group col="6" colspan="4">
<field name="event_id" on_change="onchange_event(event_id, context)" domain="[('state','in',('draft','confirm'))]"/>
<field name="partner_id" attrs="{'readonly':[('state','!=', 'draft')]}" on_change="onchange_partner_id(partner_id, context)"/>
<field name="nb_register"/>
<field name="user_id" attrs="{'readonly':[('state','!=', 'draft')]}"/>
<field name="origin"/>
</group>
<notebook colspan="4">
<page string="Additional Information">
<group colspan="2" col="2">
<separator string="Contact Information" colspan="2"/>
<header>
<button name="registration_open" string="Confirm" states="draft" type="object" class="oe_highlight"/>
<button name="button_reg_close" string="Attended" states="open" type="object" class="oe_highlight"/>
<button string="Set To Unconfirmed" name="do_draft" states="cancel,done" type="object" />
<button name="button_reg_cancel" string="Cancel Registration" states="draft,open" type="object"/>
<field name="state" nolabel="1" colspan="2" widget="statusbar" statusbar_visible="draft,open,done"/>
</header>
<sheet string="Registration">
<label for="event_id" class="oe_edit_only"/>
<h1>
<field name="event_id" on_change="onchange_event(event_id, context)" domain="[('state','in',('draft','confirm'))]"/>
</h1>
<group>
<group>
<field name="partner_id" attrs="{'readonly':[('state','!=', 'draft')]}" on_change="onchange_partner_id(partner_id, context)"/>
<field name="name"/>
<field name="email"/>
<field name="phone"/>
<label for="email"/>
<div>
<field name="email" class="oe_inline"/>
<button class="oe_inline oe_right" string="Send Email"
name="%(mail.action_email_compose_message_wizard)d"
icon="terp-mail-message-new" context= '{"default_email_to":email}' type="action"/>
</div>
</group>
<group colspan="2" col="2" groups="base.group_no_one">
<separator string="Dates" colspan="2"/>
<group>
<field name="nb_register"/>
<field name="user_id" attrs="{'readonly':[('state','!=', 'draft')]}"/>
</group>
<group groups="base.group_no_one">
<field name="create_date"/>
<field name="date_closed"/>
<field name="event_begin_date" />
<field name="event_end_date" />
</group>
</page>
<page string="Emails">
<button string="Send New Email"
name="%(mail.action_email_compose_message_wizard)d"
icon="terp-mail-message-new" context= '{"default_email_to":email}' type="action"/>
</page>
</notebook>
</group>
</sheet>
<footer>
<field name="message_ids" colspan="4" widget="mail_thread" nolabel="1"/>

View File

@ -77,12 +77,10 @@ class report_event_registration(osv.osv):
r.state AS registration_state
FROM
event_event e
LEFT JOIN
event_registration r ON (e.id=r.event_id)
WHERE r.active = 'true'
GROUP BY
event_id,
user_id_registration,

View File

@ -7,14 +7,13 @@
<field name="type">form</field>
<field name="inherit_id" ref="event.view_event_registration_form" />
<field name="arch" type="xml">
<xpath expr="//page[@string='Emails']" position="after">
<page string="Moodle">
<field name="moodle_user_password" readonly='1' colspan="2"/>
<field name="moodle_uid" readonly="1"/>
</page>
<xpath expr="//field[@name='user_id']" position="after">
<field name="moodle_user_password" readonly='1'/>
<field name="moodle_uid" readonly="1"/>
</xpath>
<field name="email" position="replace">
<field name="email" required="1" />
<!-- set the email as required -->
<field name="email" nolabel="1" required="1" />
</field>
<field name="name" position="replace">
<field name="moodle_username" colspan="2" on_change="onchange_moodle_name(moodle_user_password)"/>
@ -29,12 +28,12 @@
<field name="inherit_id" ref="event.view_event_form" />
<field name="arch" type="xml">
<xpath expr="//field[@name='registration_ids']/tree/field[@name='name']" position="replace">
<field name="moodle_username" on_change="onchange_moodle_name(moodle_user_password)"/>
<field name="name" required="1" />
<field name="moodle_username" on_change="onchange_moodle_name(moodle_user_password)"/>
<field name="name" required="1" />
</xpath>
<field name="email" position="replace">
<field name="email" required="1" />
</field>
<field name="email" position="replace">
<field name="email" required="1" />
</field>
</field>
</record>
</data>