[IMP] event: usability, code review of form views

bzr revid: qdp-launchpad@openerp.com-20120709145832-idr4x5f8v4dtq3ol
This commit is contained in:
Quentin (OpenERP) 2012-07-09 16:58:32 +02:00
parent a327691674
commit fa3301735e
6 changed files with 74 additions and 71 deletions

View File

@ -23,7 +23,6 @@ import time
from osv import fields, osv
from tools.translate import _
import decimal_precision as dp
from datetime import datetime, timedelta
class event_type(osv.osv):
""" Event Type """
@ -51,6 +50,19 @@ class event_event(osv.osv):
_order = 'date_begin'
_inherit = ['ir.needaction_mixin','mail.thread']
def name_get(self, cr, uid, ids, context=None):
if not ids:
return []
res = []
for record in self.browse(cr, uid, ids, context=context):
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 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)
@ -172,8 +184,8 @@ class event_event(osv.osv):
'name': fields.char('Name', size=64, required=True, translate=True, readonly=False, states={'done': [('readonly', True)]}),
'user_id': fields.many2one('res.users', 'Responsible User', readonly=False, states={'done': [('readonly', True)]}),
'type': fields.many2one('event.type', 'Type of Event', readonly=False, states={'done': [('readonly', True)]}),
'register_max': fields.integer('Maximum Registration', help="You can for each event define a maximum registration level. If you have too much registrations you are not able to confirm your event. (put 0 to ignore this rule )", readonly=True, states={'draft': [('readonly', False)]}),
'register_min': fields.integer('Minimum Registration', help="You can for each event define a minimum registration level. If you do not enough registrations you are not able to confirm your event. (put 0 to ignore this rule )", readonly=True, states={'draft': [('readonly', False)]}),
'register_max': fields.integer('Maximum Registrations', help="You can for each event define a maximum registration level. If you have too much registrations you are not able to confirm your event. (put 0 to ignore this rule )", readonly=True, states={'draft': [('readonly', False)]}),
'register_min': fields.integer('Minimum Registrations', help="You can for each event define a minimum registration level. If you do not enough registrations you are not able to confirm your event. (put 0 to ignore this rule )", readonly=True, states={'draft': [('readonly', False)]}),
'register_current': fields.function(_get_register, string='Confirmed Registrations', multi='register_numbers'),
'register_avail': fields.function(_get_register, string='Available Registrations', multi='register_numbers',type='integer'),
'register_prospect': fields.function(_get_register, string='Unconfirmed Registrations', multi='register_numbers'),
@ -305,17 +317,14 @@ class event_registration(osv.osv):
('open', 'Confirmed'),
('done', 'Attended')], 'Status',
size=16, readonly=True),
# Fields for address, due to separation from event.registration and res.partner
'email': fields.char('Email', size=240),
'email': fields.char('Email', size=64),
'phone': fields.char('Phone', size=64),
'name': fields.char('Name', size=128, select=True),
'active': fields.boolean('Active'),
}
_defaults = {
'nb_register': 1,
'state': 'draft',
'active': True,
}
_order = 'name, create_date desc'
@ -387,33 +396,31 @@ 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,
'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.
"""
value= {}
if context is None:
context = {}
if not event_id:
return {}
event_obj = self.pool.get('event.event')
data_event = event_obj.browse(cr, uid, event_id, context=context)
value ['value']= {'event_begin_date': data_event.date_begin,
return {'value':
{'event_begin_date': data_event.date_begin,
'event_end_date': data_event.date_end,
'company_id': data_event.company_id and data_event.company_id.id or False,
}
}
return value
def onchange_partner_id(self, cr, uid, ids, part, context=None):
res_obj = self.pool.get('res.partner')

View File

@ -26,15 +26,15 @@
!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=2)).strftime('%Y-%m-%d 21: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=2)).strftime('%Y-%m-%d 14:00:00')
date_end: !eval (datetime.today()+ timedelta(days=2)).strftime('%Y-%m-%d 16:30:00')
date_begin: !eval (datetime.today()+ timedelta(months=2)).strftime('%Y-%m-%d 14:00:00')
date_end: !eval (datetime.today()+ timedelta(months=2)).strftime('%Y-%m-%d 16:30:00')
register_min: 50
register_max: 350
type: event_type_2

View File

@ -108,13 +108,9 @@
<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" style="width: 650px" >
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
<group colspan="6" col="6">
<group colspan="2"><h1><field name="name"/></h1></group>
<group colspan="4"><h1><label string="(" attrs="{'invisible': [('type', '=', '')]}" /><field name="type" nolabel="1" on_change="onchange_event_type(type,context)" class="oe_inline"/><label string=")" attrs="{'invisible': [('type', '=', '')]}" /></h1></group>
</group>
<h1><field name="name"/></h1>
</div>
<div>
<h2>From <field name="date_begin" class="oe_inline" /> to <field name="date_end" class="oe_inline"/>
@ -124,7 +120,7 @@
<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..."/>
<field name="street" placeholder="Street..."/>
<div>
<field name="zip" class="oe_inline" placeholder="Zip"/>
<field name="city" class="oe_inline" placeholder="City"/>
@ -132,8 +128,13 @@
</div>
</group>
<group>
<field name="register_min"/>
<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>
@ -143,18 +144,16 @@
<field name="note" colspan="4" nolabel="1"/>
</page>
<page string="Internal Data">
<group>
<group class="oe_group_label_border">
<field name="main_speaker_id" domain="[('speaker','=',True)]" context="{'default_speaker':1}"/>
<field name="speaker_confirmed"/>
</group>
<group class="oe_group_label_border">
<field name="register_current"/>
<field name="register_prospect"/>
<field name="register_attended"/>
</group>
</group>
<field name="registration_ids" colspan="4" nolabel="1" groups="event.group_event_manager,event.group_event_user">
<group>
<group>
<field name="main_speaker_id" domain="[('speaker','=',True)]" context="{'default_speaker':1}"/>
<field name="speaker_confirmed"/>
</group>
<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" />
@ -186,8 +185,7 @@
<button name="button_reg_cancel" string="Cancel Registration" states="draft,open" type="object" icon="gtk-cancel"/>
</group>
</form>
</field>
<separator string="" class="oe_clear"/>
</field>
</page>
</notebook>
</sheet>
@ -461,33 +459,29 @@
<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'))]" nolabel="1" class="oe_inline"/>
<label string="(" attrs="{'invisible': [('event_id', '=', '')]}" class="oe_inline"/>
<field name="event_begin_date" class="oe_inline" attrs="{'invisible': [('event_id', '=', '')]}"/>
<label string="-" attrs="{'invisible': [('event_id', '=', '')]}" class="oe_inline"/>
<field name="event_end_date" class="oe_inline" attrs="{'invisible': [('event_id', '=', '')]}"/>
<label string=")" attrs="{'invisible': [('event_id', '=', '')]}" class="oe_inline"/>
</h1>
<group colspan="4" col="4">
<group colspan="2">
<field name="name" invisible="1"/>
<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)"/>
<label for="email" string="E-Mail"/>
<group col="2">
<field name="email" nolabel="1" class="oe_inline"/>
</group>
<field name="name"/>
<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">
<group>
<field name="user_id" attrs="{'readonly':[('state','!=', 'draft')]}"/>
<field name="nb_register"/>
</group>
</group>
<group colspan="2" col="2">
<field name="phone"/>
</group>
<group colspan="2" col="2" groups="base.group_no_one">
<field name="create_date"/>
<field name="date_closed"/>
<group groups="base.group_no_one">
<field name="create_date"/>
<field name="date_closed"/>
</group>
</group>
</sheet>
<footer>

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,7 +7,12 @@
<field name="type">form</field>
<field name="inherit_id" ref="event.view_event_registration_form" />
<field name="arch" type="xml">
<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">
<!-- set the email as required -->
<field name="email" nolabel="1" required="1" />
</field>
<field name="name" position="replace">
@ -23,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>

View File

@ -90,4 +90,3 @@ class sale_order_line(osv.osv):
message = _("The registration %s has been created from the Sale Order %s.") % (registration_id, order_line.order_id.name)
registration_obj.message_append_note(cr, uid, [registration_id], body=message, context=context)
return super(sale_order_line, self).button_confirm(cr, uid, ids, context=context)