<field name="type">form</field>
<field name="arch" type="xml">
<form string="Server Action">
- <field name="name" select="1"/>
+ <field name="name" select="1"/>
<field name="state" select="1"/>
<field name="model_id" select="1"/>
<field name="sequence" select="2"/>
- <separator colspan="4" string="Python code"/>
- <field name="code" colspan="4" attrs="{'readonly':[('state','!=','python')]}"/>
-
- <separator colspan="4" string="Trigger Configuration"/>
- <field name="trigger_obj_id" select="2" colspan="4" attrs="{'readonly':[('state','!=','trigger')]}"/>
- <field name="trigger_name" select="2" attrs="{'readonly':[('state','!=','trigger')]}"/>
-<!-- <field name="trigger_object_id" attrs="{'readonly':[('state','!=','trigger')]}"/>-->
- <separator colspan="4" string="Email Configuration"/>
- <field name="address" select="2" attrs="{'readonly':[('state','=','python'),('state','=','dummy'),('state','=','trigger'), ('state','=','object_create'), ('state','=','object_write'), ('state','=','client_action'), ('state','=','other')]}"/>
- <field name="message" select="2" colspan="4" attrs="{'readonly':[('state','=','python'),('state','=','dummy'),('state','=','trigger'), ('state','=','object_create'), ('state','=','object_write'), ('state','=','client_action'), ('state','=','other')]}"/>
-
- <separator colspan="4" string="Other Actions Configuration"/>
- <field name="child_ids" colspan="4" attrs="{'readonly':[('state','!=','other')]}"/>
+ <notebook colspan="4">
+ <page string="Python Code" attrs="{'invisible':[('state','!=','python')]}">
+ <separator colspan="4" string="Python code"/>
+ <field name="code" colspan="4" nolabel="1" />
+ </page>
+
+ <page string="Trigger" attrs="{'invisible':[('state','!=','trigger')]}">
+ <separator colspan="4" string="Trigger Configuration"/>
+ <field name="trigger_obj_id" select="2" colspan="4"/>
+ <field name="trigger_name" select="2"/>
+ </page>
+
+ <page string="Email" attrs="{'invisible':[('state','=','python'),('state','=','dummy'),('state','=','trigger'), ('state','=','object_create'), ('state','=','object_write'), ('state','=','client_action'), ('state','=','other')]}">
+ <separator colspan="4" string="Email Configuration"/>
+ <field name="address" domain="[('model_id','=',model_id)]"/>
+ <field name="message" select="2" colspan="4"/>
+ </page>
+
+ <page string="Other Actions" attrs="{'invisible':[('state','!=','other')]}">
+ <separator colspan="4" string="Other Actions Configuration"/>
+ <field name="child_ids" nolabel="1" colspan="4" />
+ </page>
+
+ </notebook>
<field name="usage"/>
<field name="type"/>
</form>
<field name="res_model">ir.actions.server</field>
<field name="view_type">form</field>
<field name="view_id" ref="view_server_action_tree"/>
+ <field name="context">{'key':'myval'}</field>
</record>
<menuitem action="action_server_action" id="menu_server_action" parent="base.next_id_6"/>
-
+
+ <record id="view_model_fields_tree" model="ir.ui.view">
+ <field name="name">ir.model.fields.tree</field>
+ <field name="model">ir.model.fields</field>
+ <field name="type">tree</field>
+ <field name="arch" type="xml">
+ <tree string="Fields">
+ <field name="complete_name"/>
+ <field name="model_id"/>
+ <field name="name"/>
+ <field name="field_description"/>
+ </tree>
+ </field>
+ </record>
</data>
</terp>
}
act_url()
-def _get_fields(self, cr, uid, context={}):
-
- return [('key','Email Value')]
-
def model_get(self, cr, uid, context={}):
wkf_pool = self.pool.get('workflow')
ids = wkf_pool.search(cr, uid, [])
res.append((model, name))
return res
-
+
+class ir_model_fields(osv.osv):
+ _inherit = 'ir.model.fields'
+ _rec_name = 'complete_name'
+ _columns = {
+ 'complete_name': fields.char('Complete Name', required=True, size=64, select=1),
+ }
+
+ def name_search(self, cr, uid, name, args=None, operator='ilike', context=None, limit=80):
+
+ print name, args, operator, context
+
+ def get_fields(cr, uid, field, rel):
+ result = []
+ mobj = self.pool.get('ir.model')
+ id = mobj.search(cr, uid, [('model','=',rel)])
+
+ obj = self.pool.get('ir.model.fields')
+ ids = obj.search(cr, uid, [('model_id','in',id)])
+ records = obj.read(cr, uid, ids)
+ for record in records:
+ id = record['id']
+ fld = field + '/' + record['name']
+
+ result.append((id, fld))
+ return result
+
+ if not args:
+ args=[]
+ if not context:
+ context={}
+ return super(ir_model_fields, self).name_search(cr, uid, name, args, operator, context, limit)
+
+ result = []
+ obj = self.pool.get('ir.model.fields')
+ ids = obj.search(cr, uid, args)
+ records = obj.read(cr, uid, ids)
+ for record in records:
+ id = record['id']
+ field = record['name']
+
+ if record['ttype'] == 'many2one':
+ rel = record['relation']
+ res = get_fields(cr, uid, field, record['relation'])
+ for rs in res:
+ result.append(rs)
+
+ result.append((id, field))
+
+ for rs in result:
+ obj.write(cr, uid, [rs[0]], {'complete_name':rs[1]})
+
+ #result = super(ir_model_fields, self).name_search(cr, uid, name, [['complete_name','ilike',name]], operator, context, limit)
+ return result
+
+ir_model_fields()
#
# Actions that are run on the server side
#
#'trigger_object': fields.char('Trigger Object', size=128),
#'trigger_object_id': fields.char('Trigger Object ID', size=128),
'message': fields.text('Message', translate=True),
- 'address': fields.selection(_get_fields ,'Email / SMS', size=128),
+ 'address': fields.many2one('ir.model.fields', 'Email From / SMS'),
+ #selection(_get_fields ,'Email / SMS', size=128),
'child_ids': fields.one2many('ir.actions.actions', 'parent_id', 'Others Actions'),
'usage': fields.char('Action Usage', size=32),
'type': fields.char('Report Type', size=32, required=True),
"""
}
+# def on_change_model(self, cr, uid, ids, model_id):
+# print '**************** : method called'
+# res = {'value' : {'address': [('key1','Email Value One')]} }
+# return res
+
#
# Context should contains:
# ids : original ids
exec action.code in localdict
if 'action' in localdict:
return localdict['action']
+
if action.state == 'email':
user = config['email_from']
subject = action.name
+
+ #TODO : Apply Mail merge in to the Content of the Email
+ print '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ',context
+
body = action.message
if tools.email_send_attach(user, action.address, subject, body, debug=False) == True:
logger.notifyChannel('email', netsvc.LOG_INFO, 'Email successfully send to : %s' % (action.address))
wf_service.trg_validate(uid, model, int(id), action.trigger_name, cr)
if action.state == 'sms':
+ #TODO: Apply mearge with the field
if tools.sms_send(user, password, api_id, text, to) == True:
logger.notifyChannel('sms', netsvc.LOG_INFO, 'SMS successfully send to : %s' % (action.address))
else:
logger.notifyChannel('sms', netsvc.LOG_ERROR, 'Failed to send SMS to : %s' % (action.address))
+
if action.state == 'other':
localdict = {
'self': self.pool.get(action.model_id.model),
}
for act in action.child_ids:
- code = """
- action = {
- 'res_model': %s,
- 'type': %s,
- 'name': %s,
- 'usage': %s,
- }
- """ % (action.model_id.model, act.type, act.name, act.usage)
- exec action.code in localdict
+ code = """action = {'model':'%s','type':'%s', %s}""" % (action.model_id.model, act.type, act.usage)
+ exec code in localdict
+ if 'action' in localdict:
+ return localdict['action']
return False
actions_server()