[IMP] event: improvements related to kanban view
* removed foolish 'subscribe boolean field on event.registration * if the register max field on the event is left to 0, it means the number of available ticket is unlimited * few usabiltiy improvements and refactoring bzr revid: qdp-launchpad@openerp.com-20120328143853-0m8uum4so8q4q3hv
This commit is contained in:
parent
2e6c168418
commit
e5346f76ce
|
@ -149,26 +149,25 @@ class event_event(osv.osv):
|
|||
elif field == 'register_prospect':
|
||||
number = reg_draft
|
||||
elif field == 'register_avail':
|
||||
number = event.register_max-reg_open
|
||||
#the number of ticket is unlimited if the event.register_max field is not set.
|
||||
#In that cas we arbitrary set it to 9999, it is used in the kanban view to special case the display of the 'subscribe' button
|
||||
number = event.register_max - reg_open if event.register_max != 0 else 9999
|
||||
res[event.id][field] = number
|
||||
return res
|
||||
|
||||
|
||||
def _subscribe_fnc(self, cr, uid, ids, fields, args, context=None):
|
||||
"""Get Subscribe or Unsubscribe registration value.
|
||||
@param ids: List of Event registration type's id
|
||||
@param fields: List of function fields(subscribe).
|
||||
@param context: A standard dictionary for contextual values
|
||||
@return: Dictionary of function fields value.
|
||||
"""This functional fields compute if the current user (uid) is already subscribed or not to the event passed in parameter (ids)
|
||||
"""
|
||||
register_pool = self.pool.get('event.registration')
|
||||
res = {}
|
||||
for event in self.browse(cr, uid, ids, context=context):
|
||||
curr_reg_id = register_pool.search(cr,uid,[('user_id','=',uid),('event_id','=',event.id)])
|
||||
if not curr_reg_id:res[event.id] = False
|
||||
res[event.id] = False
|
||||
curr_reg_id = register_pool.search(cr, uid, [('user_id', '=', uid), ('event_id', '=' ,event.id)])
|
||||
if curr_reg_id:
|
||||
for reg in register_pool.browse(cr,uid,curr_reg_id,context=context):
|
||||
res[event.id] = False
|
||||
if reg.subscribe:res[event.id]= True
|
||||
for reg in register_pool.browse(cr, uid, curr_reg_id, context=context):
|
||||
if reg.state in ('open','done'):
|
||||
res[event.id]= True
|
||||
continue
|
||||
return res
|
||||
|
||||
_columns = {
|
||||
|
@ -185,7 +184,7 @@ class event_event(osv.osv):
|
|||
'date_begin': fields.datetime('Start Date', required=True, readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'date_end': fields.datetime('End Date', required=True, readonly=True, states={'draft': [('readonly', False)]}),
|
||||
'state': fields.selection([
|
||||
('draft', 'Draft'),
|
||||
('draft', 'Unconfirmed'),
|
||||
('confirm', 'Confirmed'),
|
||||
('done', 'Done'),
|
||||
('cancel', 'Cancelled')],
|
||||
|
@ -203,7 +202,7 @@ class event_event(osv.osv):
|
|||
type='many2one', relation='res.country', string='Country', readonly=False, states={'done': [('readonly', True)]}),
|
||||
'note': fields.text('Description', readonly=False, states={'done': [('readonly', True)]}),
|
||||
'company_id': fields.many2one('res.company', 'Company', required=False, change_default=True, readonly=False, states={'done': [('readonly', True)]}),
|
||||
'subscribe' : fields.function(_subscribe_fnc, type="boolean", string='Subscribe'),
|
||||
'is_subscribed' : fields.function(_subscribe_fnc, type="boolean", string='Subscribed'),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
|
@ -211,25 +210,21 @@ class event_event(osv.osv):
|
|||
'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'event.event', context=c),
|
||||
'user_id': lambda obj, cr, uid, context: uid,
|
||||
}
|
||||
|
||||
def subscribe_to_event(self,cr,uid,ids,context=None):
|
||||
|
||||
def subscribe_to_event(self, cr, uid, ids, context=None):
|
||||
register_pool = self.pool.get('event.registration')
|
||||
user_pool = self.pool.get('res.users')
|
||||
user = user_pool.browse(cr,uid,uid,context)
|
||||
curr_reg_id = register_pool.search(cr,uid,[('user_id','=',user.id),('event_id','=',ids[0])])
|
||||
if not curr_reg_id:
|
||||
curr_reg_id = register_pool.create(cr, uid, {'event_id':ids[0],'email':user.user_email,
|
||||
'name':user.name,'user_id':user.id,
|
||||
'subscribe':True
|
||||
})
|
||||
if isinstance(curr_reg_id, (int, long)):curr_reg_id = [curr_reg_id]
|
||||
return register_pool.confirm_registration(cr,uid,curr_reg_id,context)
|
||||
|
||||
user = user_pool.browse(cr, uid, uid, context=context)
|
||||
curr_reg_ids = register_pool.search(cr, uid, [('user_id', '=', user.id), ('event_id', '=' , ids[0])])
|
||||
if not curr_reg_ids:
|
||||
curr_reg_ids = [register_pool.create(cr, uid, {'event_id': ids[0] ,'email': user.user_email,
|
||||
'name':user.name, 'user_id': user.id,})]
|
||||
return register_pool.confirm_registration(cr, uid, curr_reg_ids, context=context)
|
||||
|
||||
def unsubscribe_to_event(self,cr,uid,ids,context=None):
|
||||
register_pool = self.pool.get('event.registration')
|
||||
curr_reg_id = register_pool.search(cr,uid,[('user_id','=',uid),('event_id','=',ids[0])])
|
||||
if isinstance(curr_reg_id, (int, long)):curr_reg_id = [curr_reg_id]
|
||||
return register_pool.button_reg_cancel(cr,uid,curr_reg_id,context)
|
||||
curr_reg_ids = register_pool.search(cr, uid, [('user_id', '=', uid), ('event_id', '=', ids[0])])
|
||||
return register_pool.button_reg_cancel(cr, uid, curr_reg_ids, context=context)
|
||||
|
||||
def _check_closing_date(self, cr, uid, ids, context=None):
|
||||
for event in self.browse(cr, uid, ids, context=context):
|
||||
|
@ -281,7 +276,6 @@ class event_registration(osv.osv):
|
|||
('cancel', 'Cancelled'),
|
||||
('done', 'Attended')], 'State',
|
||||
size=16, readonly=True),
|
||||
'subscribe': fields.boolean('Subscribe'),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
|
@ -296,7 +290,7 @@ class event_registration(osv.osv):
|
|||
|
||||
def confirm_registration(self, cr, uid, ids, context=None):
|
||||
self.message_append(cr, uid, ids,_('State set to open'),body_text= _('Open'))
|
||||
return self.write(cr, uid, ids, {'state': 'open','subscribe':True}, context=context)
|
||||
return self.write(cr, uid, ids, {'state': 'open'}, context=context)
|
||||
|
||||
|
||||
def registration_open(self, cr, uid, ids, context=None):
|
||||
|
@ -323,7 +317,7 @@ class event_registration(osv.osv):
|
|||
|
||||
def button_reg_cancel(self, cr, uid, ids, context=None, *args):
|
||||
self.message_append(cr, uid, ids,_('State set to Cancel'),body_text= _('Cancel'))
|
||||
return self.write(cr, uid, ids, {'state': 'cancel','subscribe':False})
|
||||
return self.write(cr, uid, ids, {'state': 'cancel'})
|
||||
|
||||
def mail_user(self, cr, uid, ids, context=None):
|
||||
"""
|
||||
|
|
|
@ -169,55 +169,55 @@
|
|||
<field name="type"/>
|
||||
<field name="user_id"/>
|
||||
<field name="register_current"/>
|
||||
<field name="subscribe"/>
|
||||
<field name="is_subscribed"/>
|
||||
<field name="country_id"/>
|
||||
<field name="date_begin"/>
|
||||
<field name="state"/>
|
||||
<field name="register_avail"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div class="oe_module_vignette">
|
||||
<a type="edit" class="oe_module_icon">
|
||||
<div class="oe_event_date "><t t-esc="record.date_begin.raw_value.getDate()"/></div>
|
||||
<div class="oe_event_month_year">
|
||||
<t t-esc="record.date_begin.raw_value.toString('MMM')"/>
|
||||
<t t-esc="record.date_begin.raw_value.getFullYear()"/>
|
||||
</div>
|
||||
<div class="oe_event_time"><t t-esc="record.date_begin.raw_value.toString('hh:mm tt')"/></div>
|
||||
</a>
|
||||
<div class="oe_module_desc">
|
||||
<h4><a type="edit"><field name="name"/></a></h4>
|
||||
<p>
|
||||
<t t-if="record.country_id.raw_value">@<field name="country_id"/><br/></t>
|
||||
<t t-if="record.user_id.raw_value">Organized by <field name="user_id"/><br/></t>
|
||||
<t t-if="record.register_avail.raw_value lte 10 and record.register_avail.raw_value gt 0"><i>Only</i></t>
|
||||
<t t-if="record.register_avail.raw_value == 0"><i>No ticket available.</i></t>
|
||||
<t t-if="record.register_avail.raw_value != 0">
|
||||
<i><b><field name="register_avail"/></b></i>
|
||||
<i>
|
||||
<t t-if="record.register_avail.raw_value > 1">tickets </t>
|
||||
<t t-if="record.register_avail.raw_value == 1 || !record.register_avail.raw_value > 1">ticket </t>available.
|
||||
</i>
|
||||
</t>
|
||||
|
||||
</p>
|
||||
<t t-if="record.register_avail.raw_value != 0">
|
||||
<t t-if="!record.subscribe.raw_value">
|
||||
<button type="object" name="subscribe_to_event" class="subscribe_button oe_event_button_subscribe">
|
||||
<span >Subscribe</span>
|
||||
</button>
|
||||
</t>
|
||||
</t>
|
||||
<t t-if="record.subscribe.raw_value">
|
||||
<button type="object" name="unsubscribe_to_event" class="unsubscribe_button oe_event_button_unsubscribe">
|
||||
<span>Subscribed</span>
|
||||
<span class="unsubscribe">Unsubscribe</span>
|
||||
</button>
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
<field name="date_begin"/>
|
||||
<field name="state"/>
|
||||
<field name="register_avail"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div class="oe_module_vignette">
|
||||
<a type="edit" class="oe_module_icon">
|
||||
<div class="oe_event_date "><t t-esc="record.date_begin.raw_value.getDate()"/></div>
|
||||
<div class="oe_event_month_year">
|
||||
<t t-esc="record.date_begin.raw_value.toString('MMM')"/>
|
||||
<t t-esc="record.date_begin.raw_value.getFullYear()"/>
|
||||
</div>
|
||||
<div class="oe_event_time"><t t-esc="record.date_begin.raw_value.toString('hh:mm tt')"/></div>
|
||||
</a>
|
||||
<div class="oe_module_desc">
|
||||
<h4><a type="edit"><field name="name"/></a></h4>
|
||||
<p>
|
||||
<t t-if="record.country_id.raw_value">@<field name="country_id"/><br/></t>
|
||||
<t t-if="record.user_id.raw_value">Organized by <field name="user_id"/><br/></t>
|
||||
<t t-if="record.register_avail.raw_value lte 10 and record.register_avail.raw_value gt 0"><i>Only</i></t>
|
||||
<t t-if="record.register_avail.raw_value == 0"><i>No ticket available.</i></t>
|
||||
<t t-if="record.register_avail.raw_value != 0">
|
||||
<i><b><t t-if="record.register_avail.raw_value != 9999"><field name="register_avail"/></t></b></i>
|
||||
<i>
|
||||
<t t-if="record.register_avail.raw_value > 1">tickets </t>
|
||||
<t t-if="record.register_avail.raw_value == 1 || !record.register_avail.raw_value > 1">ticket </t>
|
||||
available.
|
||||
</i>
|
||||
</t>
|
||||
</p>
|
||||
<t t-if="record.register_avail.raw_value != 0">
|
||||
<t t-if="!record.is_subscribed.raw_value">
|
||||
<button type="object" name="subscribe_to_event" class="subscribe_button oe_event_button_subscribe">
|
||||
<span >Subscribe</span>
|
||||
</button>
|
||||
</t>
|
||||
</t>
|
||||
<t t-if="record.is_subscribed.raw_value">
|
||||
<button type="object" name="unsubscribe_to_event" class="unsubscribe_button oe_event_button_unsubscribe">
|
||||
<span>Subscribed</span>
|
||||
<span class="unsubscribe">Unsubscribe</span>
|
||||
</button>
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
@ -299,7 +299,7 @@
|
|||
<field name="res_model">event.event</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">kanban,calendar,tree,form,graph</field>
|
||||
<field name="context">{"search_default_upcoming":1}</field>
|
||||
<field name="context">{"search_default_upcoming":1}</field>
|
||||
<field name="search_view_id" ref="view_event_search"/>
|
||||
<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>
|
||||
|
|
Loading…
Reference in New Issue