[IMP] event: usability, code review of form views
bzr revid: qdp-launchpad@openerp.com-20120709145832-idr4x5f8v4dtq3ol
This commit is contained in:
parent
a327691674
commit
fa3301735e
|
@ -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')
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in New Issue