*bugfixed the copy of an event (set state to draft)
*modified and improved the use of emails *modified and improved the links between the event and the cases of the registration of it, in order to be able to use the power of the crm to make rules. Filled desription, date_deadline *improved help tooltips *improved views (form views) *small improvements *new design of registration: there is now a link to a res.partner.contact in place that the previous one that were linked to an address *new design of event.event: the product_id field is now mandatory *better control and error management *bugfixed the onchanges bzr revid: qdp@tinyerp.com-20081007092612-ulp1nu77hkdz370h
This commit is contained in:
parent
fc21bd9880
commit
0950bacc7d
|
@ -78,15 +78,24 @@ class event(osv.osv):
|
||||||
_order = 'date_begin'
|
_order = 'date_begin'
|
||||||
|
|
||||||
def copy(self, cr, uid, id, default=None, context=None):
|
def copy(self, cr, uid, id, default=None, context=None):
|
||||||
return super(event, self).copy(cr, uid,id, default={'code': self.pool.get('ir.sequence').get(cr, uid, 'event.event'),})
|
return super(event, self).copy(cr, uid,id, default={'code': self.pool.get('ir.sequence').get(cr, uid, 'event.event'),'state':'draft'})
|
||||||
|
|
||||||
def button_draft(self, cr, uid, ids, context={}):
|
def button_draft(self, cr, uid, ids, context={}):
|
||||||
return self.write(cr, uid, ids, {'state':'draft'})
|
return self.write(cr, uid, ids, {'state':'draft'})
|
||||||
|
|
||||||
def button_cancel(self, cr, uid, ids, context={}):
|
def button_cancel(self, cr, uid, ids, context={}):
|
||||||
return self.write(cr, uid, ids, {'state':'cancel'})
|
return self.write(cr, uid, ids, {'state':'cancel'})
|
||||||
|
|
||||||
def button_done(self, cr, uid, ids, context={}):
|
def button_done(self, cr, uid, ids, context={}):
|
||||||
return self.write(cr, uid, ids, {'state':'done'})
|
return self.write(cr, uid, ids, {'state':'done'})
|
||||||
|
|
||||||
def button_confirm(self, cr, uid, ids, context={}):
|
def button_confirm(self, cr, uid, ids, context={}):
|
||||||
|
for eve in self.browse(cr, uid, ids):
|
||||||
|
if eve.mail_auto_confirm:
|
||||||
|
#send reminder that will confirm the event for all the people that were already confirmed
|
||||||
|
reg_ids = self.pool.get('event.registration').search(cr, uid, [('event_id','=',eve.id),('state','not in',['draft','cancel'])])
|
||||||
|
if reg_ids:
|
||||||
|
self.pool.get('event.registration').mail_user_confirm(cr, uid, reg_ids)
|
||||||
return self.write(cr, uid, ids, {'state':'confirm'})
|
return self.write(cr, uid, ids, {'state':'confirm'})
|
||||||
|
|
||||||
def _get_register(self, cr, uid, ids, name, args, context=None):
|
def _get_register(self, cr, uid, ids, name, args, context=None):
|
||||||
|
@ -116,10 +125,28 @@ class event(osv.osv):
|
||||||
def write(self, cr, uid, ids,vals, *args, **kwargs):
|
def write(self, cr, uid, ids,vals, *args, **kwargs):
|
||||||
res = super(event,self).write(cr, uid, ids,vals, *args, **kwargs)
|
res = super(event,self).write(cr, uid, ids,vals, *args, **kwargs)
|
||||||
if 'date_begin' in vals and vals['date_begin']:
|
if 'date_begin' in vals and vals['date_begin']:
|
||||||
data_event = self.browse(cr, uid, ids)
|
for eve in self.browse(cr, uid, ids):
|
||||||
for eve in data_event:
|
#change the deadlines of the registration linked to this event
|
||||||
|
reg_ids = self.pool.get('event.registration').search(cr, uid, [('event_id','=',eve.id)])
|
||||||
|
if reg_ids:
|
||||||
|
self.pool.get('event.registration').write(cr, uid, reg_ids, {'date_deadline':vals['date_begin']})
|
||||||
|
#change the date of the project
|
||||||
if eve.project_id:
|
if eve.project_id:
|
||||||
self.pool.get('project.project').write(cr, uid, [eve.project_id.id], {'date_end':eve.date_begin})
|
self.pool.get('project.project').write(cr, uid, [eve.project_id.id], {'date_end':eve.date_begin})
|
||||||
|
|
||||||
|
#change the description of the registration linked to this event
|
||||||
|
if 'mail_auto_confirm' in vals:
|
||||||
|
if vals['mail_auto_confirm']:
|
||||||
|
if 'mail_confirm' not in vals:
|
||||||
|
for eve in self.browse(cr, uid, ids):
|
||||||
|
vals['mail_confirm'] = eve.mail_confirm
|
||||||
|
else:
|
||||||
|
vals['mail_confirm']=False
|
||||||
|
if 'mail_confirm' in vals:
|
||||||
|
for eve in self.browse(cr, uid, ids):
|
||||||
|
reg_ids = self.pool.get('event.registration').search(cr, uid, [('event_id','=',eve.id)])
|
||||||
|
if reg_ids:
|
||||||
|
self.pool.get('event.registration').write(cr, uid, reg_ids, {'description':vals['mail_confirm']})
|
||||||
return res
|
return res
|
||||||
|
|
||||||
_columns = {
|
_columns = {
|
||||||
|
@ -134,12 +161,12 @@ class event(osv.osv):
|
||||||
'date_begin': fields.datetime('Beginning date', required=True),
|
'date_begin': fields.datetime('Beginning date', required=True),
|
||||||
'date_end': fields.datetime('Ending date', required=True),
|
'date_end': fields.datetime('Ending date', required=True),
|
||||||
'state': fields.selection([('draft','Draft'),('confirm','Confirmed'),('done','Done'),('cancel','Canceled')], 'Status', readonly=True, required=True),
|
'state': fields.selection([('draft','Draft'),('confirm','Confirmed'),('done','Done'),('cancel','Canceled')], 'Status', readonly=True, required=True),
|
||||||
'mail_auto_registr':fields.boolean('Mail Auto Register',help='A mail is sent when the registration is confirmed'),
|
'mail_auto_registr':fields.boolean('Mail Auto Register',help='Check this box if you want to use the automatic mailing for new registration'),
|
||||||
'mail_auto_confirm':fields.boolean('Mail Auto Confirm',help='A mail is sent when the event is confimed'),
|
'mail_auto_confirm':fields.boolean('Mail Auto Confirm',help='Check this box if you want ot use the automatic confirmation emailing or the reminder'),
|
||||||
'mail_registr':fields.text('Mail Register',help='Template for the mail'),
|
'mail_registr':fields.text('Registration Email',help='This email will be sent when someone subscribes to the event.'),
|
||||||
'mail_confirm':fields.text('Mail Confirm',help='Template for the mail'),
|
'mail_confirm': fields.text('Confirmation Email', help="This email will be sent when the event gets confimed or when someone subscribes to a confirmed event. This is also the email sent to remind someone about the event."),
|
||||||
'budget_id':fields.many2one('account.budget.post','Budget'),
|
'budget_id':fields.many2one('account.budget.post','Budget'),
|
||||||
'product_id':fields.many2one('product.product','Product'),
|
'product_id':fields.many2one('product.product','Product', required=True),
|
||||||
}
|
}
|
||||||
_defaults = {
|
_defaults = {
|
||||||
'state': lambda *args: 'draft',
|
'state': lambda *args: 'draft',
|
||||||
|
@ -177,6 +204,8 @@ class event_registration(osv.osv):
|
||||||
|
|
||||||
def create(self, cr, uid, *args, **argv):
|
def create(self, cr, uid, *args, **argv):
|
||||||
args[0]['section_id']= self.pool.get('event.event').browse(cr, uid, args[0]['event_id'], None).section_id.id
|
args[0]['section_id']= self.pool.get('event.event').browse(cr, uid, args[0]['event_id'], None).section_id.id
|
||||||
|
args[0]['date_deadline']= self.pool.get('event.event').browse(cr, uid, args[0]['event_id'], None).date_begin
|
||||||
|
args[0]['description']= self.pool.get('event.event').browse(cr, uid, args[0]['event_id'], None).mail_confirm
|
||||||
res = super(event_registration, self).create(cr, uid, *args, **argv)
|
res = super(event_registration, self).create(cr, uid, *args, **argv)
|
||||||
self._history(cr, uid,self.browse(cr, uid, [res]), 'Created', history=True)
|
self._history(cr, uid,self.browse(cr, uid, [res]), 'Created', history=True)
|
||||||
return res
|
return res
|
||||||
|
@ -184,22 +213,38 @@ class event_registration(osv.osv):
|
||||||
def write(self, cr, uid, *args, **argv):
|
def write(self, cr, uid, *args, **argv):
|
||||||
if 'event_id' in args[1]:
|
if 'event_id' in args[1]:
|
||||||
args[1]['section_id']= self.pool.get('event.event').browse(cr, uid, args[1]['event_id'], None).section_id.id
|
args[1]['section_id']= self.pool.get('event.event').browse(cr, uid, args[1]['event_id'], None).section_id.id
|
||||||
|
args[1]['date_deadline']= self.pool.get('event.event').browse(cr, uid, args[1]['event_id'], None).date_begin
|
||||||
|
args[1]['description']= self.pool.get('event.event').browse(cr, uid, args[1]['event_id'], None).mail_confirm
|
||||||
return super(event_registration, self).write(cr, uid, *args, **argv)
|
return super(event_registration, self).write(cr, uid, *args, **argv)
|
||||||
|
|
||||||
def mail_user(self,cr,uid,ids):
|
def mail_user_confirm(self,cr,uid,ids):
|
||||||
src=tools.config.options['smtp_user']
|
|
||||||
reg_ids=self.browse(cr,uid,ids)
|
reg_ids=self.browse(cr,uid,ids)
|
||||||
for reg_id in reg_ids:
|
for reg_id in reg_ids:
|
||||||
dest=reg_id.email_from
|
src = reg_id.event_id.reply_to or False
|
||||||
if (reg_id.event_id.state in ['confirm','running']) and reg_id.event_id.mail_auto_confirm:
|
dest = [reg_id.email_from]
|
||||||
if dest:
|
if reg_id.email_cc:
|
||||||
tools.email_send(src,[dest],'Auto Confirmation: '+'['+str(reg_id.id)+']'+' '+reg_id.name,reg_id.event_id.mail_confirm)
|
dest += [reg_id.email_cc]
|
||||||
return True
|
if dest and src:
|
||||||
# Sending another mail
|
tools.email_send(src, dest,'Auto Confirmation: '+'['+str(reg_id.id)+']'+' '+reg_id.name, reg_id.event_id.mail_confirm, tinycrm = str(reg_id.case_id.id))
|
||||||
if reg_id.event_id.state in ['draft', 'fixed', 'open','confirm','running'] and reg_id.event_id.mail_auto_registr:
|
if not src:
|
||||||
if dest:
|
raise osv.except_osv(_('Error!'), _('You must define a reply-to address in order to mail the participant. You can do this in the Mailing tab of your event. Note that this is also the place where you can configure your event to not send emails automaticly while registering'))
|
||||||
tools.email_send(src,[dest],'Auto Registration: '+'['+str(reg_id.id)+']'+' '+reg_id.name,reg_id.event_id.mail_registr)
|
return False
|
||||||
return True
|
|
||||||
|
def mail_user(self,cr,uid,ids):
|
||||||
|
reg_ids=self.browse(cr,uid,ids)
|
||||||
|
for reg_id in reg_ids:
|
||||||
|
src = reg_id.event_id.reply_to or False
|
||||||
|
dest = [reg_id.email_from]
|
||||||
|
if reg_id.email_cc:
|
||||||
|
dest += [reg_id.email_cc]
|
||||||
|
if reg_id.event_id.mail_auto_confirm or reg_id.event_id.mail_auto_registr:
|
||||||
|
if dest and src:
|
||||||
|
if reg_id.event_id.state in ['draft', 'fixed', 'open','confirm','running'] and reg_id.event_id.mail_auto_registr:
|
||||||
|
tools.email_send(src, dest,'Auto Registration: '+'['+str(reg_id.id)+']'+' '+reg_id.name, reg_id.event_id.mail_registr, tinycrm = str(reg_id.case_id.id))
|
||||||
|
if (reg_id.event_id.state in ['confirm','running']) and reg_id.event_id.mail_auto_confirm:
|
||||||
|
tools.email_send(src, dest,'Auto Confirmation: '+'['+str(reg_id.id)+']'+' '+reg_id.name, reg_id.event_id.description, tinycrm = str(reg_id.case_id.id))
|
||||||
|
if not src:
|
||||||
|
raise osv.except_osv(_('Error!'), _('You must define a reply-to address in order to mail the participant. You can do this in the Mailing tab of your event. Note that this is also the place where you can configure your event to not send emails automaticly while registering'))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
_name= 'event.registration'
|
_name= 'event.registration'
|
||||||
|
@ -208,9 +253,9 @@ class event_registration(osv.osv):
|
||||||
_columns = {
|
_columns = {
|
||||||
'case_id':fields.many2one('crm.case','Case'),
|
'case_id':fields.many2one('crm.case','Case'),
|
||||||
'nb_register': fields.integer('Number of Registration', readonly=True, states={'draft':[('readonly',False)]}),
|
'nb_register': fields.integer('Number of Registration', readonly=True, states={'draft':[('readonly',False)]}),
|
||||||
"partner_order_id":fields.many2one('res.partner','Partner Order'),
|
|
||||||
'event_id':fields.many2one('event.event', 'Event Related', required=True),
|
'event_id':fields.many2one('event.event', 'Event Related', required=True),
|
||||||
"partner_invoice_id":fields.many2one('res.partner', 'Partner Invoice'),
|
"partner_invoice_id":fields.many2one('res.partner', 'Partner Invoiced'),
|
||||||
|
"contact_id":fields.many2one('res.partner.contact', 'Partner Contact'), #TODO: filter only the contacts that have a function into the selected partner_id
|
||||||
"unit_price": fields.float('Unit Price'),
|
"unit_price": fields.float('Unit Price'),
|
||||||
"badge_title":fields.char('Badge Title',size=128),
|
"badge_title":fields.char('Badge Title',size=128),
|
||||||
"badge_name":fields.char('Badge Name',size=128),
|
"badge_name":fields.char('Badge Name',size=128),
|
||||||
|
@ -232,18 +277,21 @@ class event_registration(osv.osv):
|
||||||
data['name'] = 'Registration: ' + badge_name
|
data['name'] = 'Registration: ' + badge_name
|
||||||
return {'value':data}
|
return {'value':data}
|
||||||
|
|
||||||
def onchange_contact_id(self, cr, uid, ids, contact_id):
|
def onchange_contact_id(self, cr, uid, ids, contact, partner):
|
||||||
data ={}
|
data ={}
|
||||||
if not contact_id:
|
if not contact:
|
||||||
return data
|
return data
|
||||||
obj_addr=self.pool.get('res.partner.address').browse(cr, uid, contact_id)
|
print "contact:", contact
|
||||||
data['email_from'] = obj_addr.email
|
contact_id = self.pool.get('res.partner.contact').browse(cr, uid, contact)
|
||||||
|
print contact_id
|
||||||
if obj_addr.contact_id:
|
data['badge_name'] = contact_id.name
|
||||||
data['badge_name']=obj_addr.contact_id.name
|
data['badge_title'] = contact_id.title
|
||||||
data['badge_title']=obj_addr.contact_id.title
|
if partner:
|
||||||
d=self.onchange_badge_name(cr, uid, ids,data['badge_name'])
|
partner_addresses = self.pool.get('res.partner.address').search(cr, uid, [('partner_id','=',partner)])
|
||||||
data.update(d['value'])
|
job_id = self.pool.get('res.partner.job').search(cr, uid, [('contact_id','=',contact),('address_id','in',partner_addresses)])[0]
|
||||||
|
data['email_from'] = self.pool.get('res.partner.job').browse(cr, uid, job_id).email
|
||||||
|
d = self.onchange_badge_name(cr, uid, ids,data['badge_name'])
|
||||||
|
data.update(d['value'])
|
||||||
|
|
||||||
return {'value':data}
|
return {'value':data}
|
||||||
|
|
||||||
|
@ -263,24 +311,28 @@ class event_registration(osv.osv):
|
||||||
return {'value':{'unit_price' : False,'invoice_label' : False}}
|
return {'value':{'unit_price' : False,'invoice_label' : False}}
|
||||||
|
|
||||||
|
|
||||||
def onchange_partner_id(self, cr, uid, ids, part, event_id, email=False):#override function for partner name.
|
def onchange_partner_id(self, cr, uid, ids, part, event_id):
|
||||||
data={}
|
data={}
|
||||||
data['badge_partner']=data['partner_address_id']=data['partner_invoice_id']=data['email_from']=data['badge_title']=data['badge_name']=False
|
data['badge_partner'] = data['contact_id'] = data['partner_invoice_id'] = data['email_from'] = data['badge_title'] = data['badge_name'] = False
|
||||||
if not part:
|
if not part:
|
||||||
return {'value':data}
|
return {'value':data}
|
||||||
|
|
||||||
data['partner_invoice_id']=part
|
data['partner_invoice_id']=part
|
||||||
# this calls onchange_partner_invoice_id
|
# this calls onchange_partner_invoice_id
|
||||||
d=self.onchange_partner_invoice_id(cr, uid, ids, event_id,part)
|
d = self.onchange_partner_invoice_id(cr, uid, ids, event_id,part)
|
||||||
# this updates the dictionary
|
# this updates the dictionary
|
||||||
data.update(d['value'])
|
data.update(d['value'])
|
||||||
addr = self.pool.get('res.partner').address_get(cr, uid, [part], ['contact'])
|
addr = self.pool.get('res.partner').address_get(cr, uid, [part])
|
||||||
data['partner_address_id']=addr['contact']
|
if addr:
|
||||||
if addr['contact']:
|
if addr.has_key('default'):
|
||||||
d=self.onchange_contact_id(cr, uid, ids,addr['contact'])
|
job_ids = self.pool.get('res.partner.job').search(cr, uid, [('address_id','=',addr['default'])])
|
||||||
data.update(d['value'])
|
print self.pool.get('res.partner.address').browse(cr, uid, addr['default']).email
|
||||||
partner_data=self.pool.get('res.partner').browse(cr, uid, part)
|
print job_ids
|
||||||
data['badge_partner']=partner_data.name
|
if job_ids:
|
||||||
|
data['contact_id'] = self.pool.get('res.partner.job').browse(cr, uid, job_ids[0]).contact_id.id
|
||||||
|
d = self.onchange_contact_id(cr, uid, ids, data['contact_id'],part)
|
||||||
|
data.update(d['value'])
|
||||||
|
partner_data = self.pool.get('res.partner').browse(cr, uid, part)
|
||||||
|
data['badge_partner'] = partner_data.name
|
||||||
return {'value':data}
|
return {'value':data}
|
||||||
|
|
||||||
def onchange_partner_invoice_id(self, cr, uid, ids, event_id, partner_invoice_id):
|
def onchange_partner_invoice_id(self, cr, uid, ids, event_id, partner_invoice_id):
|
||||||
|
|
|
@ -55,20 +55,22 @@
|
||||||
<field name="type">form</field>
|
<field name="type">form</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form string="Events">
|
<form string="Events">
|
||||||
<notebook>
|
<group col="6" colspan="4">
|
||||||
<page string="Information">
|
<field name="name" string="Event" select="1"/>
|
||||||
<separator string="Event description" colspan="4"/>
|
<field name="type" select="2"/>
|
||||||
<field name="name" string="Event" select="1" colspan="4"/>
|
|
||||||
<field name="parent_id" domain="[('parent_id','child_of','Event')]" string="Category"/>
|
|
||||||
<field name="type"/>
|
|
||||||
<field name="user_id" select="1"/>
|
<field name="user_id" select="1"/>
|
||||||
<field name="active"/>
|
|
||||||
<field name="date_begin" select="1"/>
|
<field name="date_begin" select="1"/>
|
||||||
<field name="date_end" select="2"/>
|
<field name="date_end" select="2"/>
|
||||||
|
<field name="product_id"/>
|
||||||
|
</group>
|
||||||
|
<notebook colspan="4">
|
||||||
|
<page string="General">
|
||||||
|
<separator string="Event description" colspan="4"/>
|
||||||
|
<field name="parent_id" domain="[('parent_id','child_of','Event')]" string="Parent Category"/>
|
||||||
|
<field name="active"/>
|
||||||
<field name="register_min" select="2"/>
|
<field name="register_min" select="2"/>
|
||||||
<field name="register_max" select="2"/>
|
<field name="register_max" select="2"/>
|
||||||
<field name="budget_id"/>
|
<field name="budget_id"/>
|
||||||
<field name="product_id" required="1"/>
|
|
||||||
<separator string="Tasks management" colspan="4"/>
|
<separator string="Tasks management" colspan="4"/>
|
||||||
<field name="project_id"/>
|
<field name="project_id"/>
|
||||||
<button string="Create Retro-Planning" name="%(event.event_wiz)d" type="action"/>
|
<button string="Create Retro-Planning" name="%(event.event_wiz)d" type="action"/>
|
||||||
|
@ -82,13 +84,15 @@
|
||||||
</group>
|
</group>
|
||||||
</page>
|
</page>
|
||||||
<page string="Mailing">
|
<page string="Mailing">
|
||||||
|
<field name="reply_to"/>
|
||||||
|
<separator string="Auto Registration Email" colspan="4"/>
|
||||||
<field name="mail_auto_registr"/>
|
<field name="mail_auto_registr"/>
|
||||||
<newline/><newline/>
|
|
||||||
<field name="mail_registr"/>
|
|
||||||
<newline/>
|
<newline/>
|
||||||
|
<field name="mail_registr" colspan="4"/>
|
||||||
|
<separator string="Auto Confirmation Email" colspan="4"/>
|
||||||
<field name="mail_auto_confirm"/>
|
<field name="mail_auto_confirm"/>
|
||||||
<newline/><newline/>
|
<newline/>
|
||||||
<field name="mail_confirm"/>
|
<field name="mail_confirm" colspan="4"/>
|
||||||
<newline/>
|
<newline/>
|
||||||
</page>
|
</page>
|
||||||
<page string="Statistics">
|
<page string="Statistics">
|
||||||
|
@ -138,7 +142,7 @@
|
||||||
<field name="view_type">form</field>
|
<field name="view_type">form</field>
|
||||||
<field name="view_mode">form,tree</field>
|
<field name="view_mode">form,tree</field>
|
||||||
</record>
|
</record>
|
||||||
<menuitem parent="menu_event_config" id="menu_event_new_event" action="action_new_event_form" />
|
<menuitem parent="menu_event_main" id="menu_event_new_event" action="action_new_event_form" />
|
||||||
|
|
||||||
|
|
||||||
<record model="ir.actions.act_window" id="action_event_view">
|
<record model="ir.actions.act_window" id="action_event_view">
|
||||||
|
@ -196,27 +200,27 @@
|
||||||
<field name="type">form</field>
|
<field name="type">form</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form string="Registration">
|
<form string="Registration">
|
||||||
<notebook>
|
<group col="6" colspan="4">
|
||||||
<page string="General">
|
<field name="event_id" select="1" on_change="onchange_event(event_id, partner_invoice_id)" domain="[('state','in',('draft','confirm'))]"/>
|
||||||
<field name="event_id" select="1" on_change="onchange_event(event_id, partner_invoice_id)" colspan="1" domain="[('state','in',('draft','confirm'))]"/>
|
|
||||||
<field name="nb_register"/>
|
<field name="nb_register"/>
|
||||||
<newline/>
|
<field name="user_id" select="1"/>
|
||||||
<field name="partner_id" required="1" select="1" on_change="onchange_partner_id(partner_id,event_id, email_from)" />
|
<field name="partner_id" required="1" select="1" on_change="onchange_partner_id(partner_id,event_id)" />
|
||||||
<field name="partner_invoice_id" on_change="onchange_partner_invoice_id(event_id, partner_invoice_id)"/>
|
<field name="partner_invoice_id" on_change="onchange_partner_invoice_id(event_id, partner_invoice_id)"/>
|
||||||
<field name="partner_address_id" select="2" on_change="onchange_contact_id(partner_address_id)" colspan="3"/>
|
<field name="unit_price" select="2"/>
|
||||||
|
</group>
|
||||||
|
<notebook colspan="4">
|
||||||
|
<page string="General">
|
||||||
|
<field name="contact_id" select="2" on_change="onchange_contact_id(contact_id, partner_id)" /><newline/>
|
||||||
<field name="email_from" select="2"/>
|
<field name="email_from" select="2"/>
|
||||||
<button name="remind_partner" string="Send Reminder" states="open,pending" type="object" colspan="2"/>
|
<button name="remind_partner" string="Send Reminder" states="open,pending" type="object" colspan="2"/>
|
||||||
<field name="user_id" select="1"/>
|
|
||||||
<button name="remind_user" string="Send Reminder" states="open,pending" type="object" colspan="2"/>
|
<button name="remind_user" string="Send Reminder" states="open,pending" type="object" colspan="2"/>
|
||||||
<newline/>
|
<newline/>
|
||||||
<separator colspan="4"/>
|
|
||||||
<field name="unit_price" select="2"/>
|
|
||||||
<separator string="Badge" colspan="4"/>
|
<separator string="Badge" colspan="4"/>
|
||||||
<field name="badge_title" select="2"/>
|
<field name="badge_title" select="2"/>
|
||||||
<field name="badge_name" select="2" on_change="onchange_badge_name(badge_name)"/>
|
<field name="badge_name" select="2" on_change="onchange_badge_name(badge_name)"/>
|
||||||
<field name="badge_partner" select="2"/>
|
<field name="badge_partner" select="2"/>
|
||||||
<newline/>
|
<newline/>
|
||||||
<separator colspan="4"/>
|
<separator string="Status" colspan="4"/>
|
||||||
<group col="8" colspan="4">
|
<group col="8" colspan="4">
|
||||||
<field name="state" select="1" colspan="2"/>
|
<field name="state" select="1" colspan="2"/>
|
||||||
<button name="button_reg_close" string="Registration Invoiced" states="open" type="object"/>
|
<button name="button_reg_close" string="Registration Invoiced" states="open" type="object"/>
|
||||||
|
|
Loading…
Reference in New Issue