openerp-dev-web team mailing list archive
-
openerp-dev-web team
-
Mailing list archive
-
Message #04193
lp:~openerp-dev/openobject-addons/trunk-automated_rules-crm_automated_rules-jam into lp:~openerp-dev/openobject-addons/trunk-automated_rules
Jigar Amin - OpenERP has proposed merging lp:~openerp-dev/openobject-addons/trunk-automated_rules-crm_automated_rules-jam into lp:~openerp-dev/openobject-addons/trunk-automated_rules.
Requested reviews:
Bhumika (OpenERP) (sbh-openerp)
For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-automated_rules-crm_automated_rules-jam/+merge/53413
Hello,
Improvements of the back log 3:
Firing Make working the crn_trg field ;
Kindly review this,
Thank You
--
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-automated_rules-crm_automated_rules-jam/+merge/53413
Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-addons/trunk-automated_rules.
=== modified file 'base_action_rule/base_action_rule.py'
--- base_action_rule/base_action_rule.py 2011-03-08 05:29:31 +0000
+++ base_action_rule/base_action_rule.py 2011-03-15 12:09:22 +0000
@@ -145,6 +145,7 @@
flag = self._do_run(cr, uid, rule, rule.model_id.model, domain, context=context)
if not flag:
raise osv.except_osv(_("Error !"),_("Fail to trigger server action.\nPlease check server action."))
+ return True
base_action_rule()
class ir_filters(osv.osv):
=== modified file 'base_action_rule/base_action_rule_view.xml'
--- base_action_rule/base_action_rule_view.xml 2011-03-03 12:43:47 +0000
+++ base_action_rule/base_action_rule_view.xml 2011-03-15 12:09:22 +0000
@@ -63,6 +63,7 @@
<field name="active"/>
<field name="last_run"/>
</group>
+<!-- <button name="check" string="Simulate the Rule" type="object" icon="gtk-ok"/>-->
</page>
</notebook>
</form>
=== modified file 'crm_action_rule/crm_action_rule.py'
--- crm_action_rule/crm_action_rule.py 2011-03-09 10:33:59 +0000
+++ crm_action_rule/crm_action_rule.py 2011-03-15 12:09:22 +0000
@@ -22,6 +22,9 @@
from osv import fields
from osv import osv
from crm import crm
+import re
+from datetime import datetime
+from datetime import timedelta
TIME_RANGE_SELECTION = [('minutes', 'Minutes'), ('hours', 'Hours'),('days', 'Days'), ('weeks', 'Weeks')]
@@ -32,23 +35,130 @@
def _crm_state_get(self, cr, uid, context=None):
"""Gets available states for crm"""
return crm.AVAILABLE_STATES
-
+
_columns = {
+# 'model': fields.related('model_id','model',type='char', size=60),
'crm_trg_section_id' : fields.many2one('crm.case.section', 'Sale Team'),
- 'crm_trg_categ_id' : fields.many2one('crm.case.categ', 'Category'),
+ 'crm_trg_categ_id' : fields.many2one('crm.case.categ', 'Category',domain=[('object_id.model','=','crm.lead')]),
'crm_trg_partner_id' : fields.many2one('res.partner', 'Partner'),
'crm_trg_partner_catg_id' : fields.many2one('res.partner.category', 'Partner Category'),
'crm_trg_state' : fields.selection(_crm_state_get, 'State', size=16),
'crm_trg_btn_pressed': fields.selection(_crm_state_get, 'Button Pressed', size=16),
- 'crm_trg_regex' : fields.char('Regular Expression on Case History', size=256),
+ 'crm_trg_regex' : fields.char('Regular Expression on Case History', size=120),
'crm_trg_responsible_id' : fields.many2one('res.users', 'Responsible'),
'crm_trg_field_id' : fields.many2one('ir.model.fields', 'Trigger Date'),
'crm_trg_date_range' : fields.integer('Delay after trigger date'),
'crm_trg_date_range_type' : fields.selection(TIME_RANGE_SELECTION, 'Delay type'),
'crm_to_responsible_id' : fields.many2one('res.users', 'Set Responsible To'),
- 'crm_to_categ_id' : fields.many2one('crm.case.categ', 'Set Category To'),
+ 'crm_to_categ_id' : fields.many2one('crm.case.categ', 'Set Category To', domain=[('object_id.model','=','crm.lead')]),
'crm_to_section_id' : fields.many2one('crm.case.section', 'Set Team To'),
'crm_to_state' : fields.selection(_crm_state_get, 'Set State To', size=16),
}
+ _defaults = {
+ 'crm_trg_date_range_type' : 'hours',
+ }
+
+# def onchange_model(self, cr, uid, ids, model_id, context={}):
+#
+# vals = {'value':{}}
+# if model_id:
+# model_pool = self.pool.get('ir.model')
+# model = model_pool.browse(cr, uid, model_id)
+# if model.model == 'crm.lead':
+# context.update({'crm_lead':True})
+# else:
+# context.update({'crm_lead':False})
+# return vals
+
+ def _do_run(self, cr, uid, rule=None, model=None, domain=[], context=None):
+ """
+ Method to run the server action on given model with specified domian
+ @param rule :pointer to current rule to be evalated
+ @param model : model on which srevr action to be triggered
+ @param domain : pointer to domain usinf which model will be filtered
+ """
+ flag = super(base_action_rule, self)._do_run( cr, uid, rule, model, domain, context)
+ if flag:
+ model_pool = self.pool.get(model)
+ try:
+ for object_rec in model_pool.search(cr, uid, domain, context=context):
+ vals = {}
+ if rule.crm_to_responsible_id:
+ vals.update({'user_id' : rule.crm_to_responsible_id.id})
+ if rule.crm_to_categ_id:
+ vals.update({'categ_id' : rule.crm_to_categ_id.id})
+ if rule.crm_to_section_id:
+ vals.update({'section_id' : rule.crm_to_section_id.id})
+ if rule.crm_to_state:
+ btn_press = {
+ 'draft' : lambda cr, uid, ids: model_pool.case_reset(cr, uid, ids) ,
+ 'open' : lambda cr, uid, ids : model_pool.case_open(cr, uid, ids) ,
+ 'cancel' : lambda cr, uid, ids : model_pool.case_cancel(cr, uid, ids) ,
+ 'done' : lambda cr, uid, ids : model_pool.case_mark_lost(cr, uid, ids) ,
+ 'pending' : lambda cr, uid, ids : model_pool.case_pending(cr, uid, ids) ,
+ }
+
+ btn_press[rule.crm_to_state](cr, uid, [object_rec])
+ model_pool.write(cr, uid, object_rec, vals, context)
+ except Exception, e:
+ return False
+ return True
+
+
+ def _get_filters(self, cr, uid, rule=None, domain=[], context=None):
+ """Preparing the filter using crm filter option"""
+ domain, context = super(base_action_rule, self)._get_filters(cr, uid, rule, domain, context)
+ message_pool = self.pool.get('mailgate.message')
+ #Domain on crm case section
+ if rule.crm_trg_section_id:
+ section_domain = ('section_id','=',rule.crm_trg_section_id.id)
+ if section_domain not in domain:
+ domain.extend([section_domain])
+ #Doamin on crm category
+ if rule.crm_trg_categ_id:
+ categ_domain = ('categ_id','=',rule.crm_trg_categ_id.id)
+ if categ_domain not in domain:
+ domain.extend([categ_domain])
+ if rule.crm_trg_partner_id:
+ domain.extend([('partner_id','=',rule.crm_trg_partner_id.id)])
+ if rule.crm_trg_partner_catg_id:
+ domain.extend([('partner_id.category_id','in',[rule.crm_trg_partner_catg_id.id])])
+ if rule.crm_trg_state or rule.crm_trg_btn_pressed:
+ stat = []
+ if rule.crm_trg_state:
+ stat.extend([(rule.crm_trg_state)])
+ if rule.crm_trg_btn_pressed:
+ stat.extend([(rule.crm_trg_btn_pressed)])
+ domain.extend([('state','in',stat)])
+ if rule.crm_trg_responsible_id:
+ domain.extend([('user_id','=',rule.crm_trg_responsible_id.id)])
+
+ if rule.crm_trg_regex:
+ messages = message_pool.search(cr, uid, [('model', '=' , 'crm.lead')])
+ history = []
+ regex = re.compile(str(rule.crm_trg_regex))
+ for msg in message_pool.browse(cr, uid, messages, context):
+ result = regex.search(str(msg.name))
+ if result:
+ history.extend([msg.id])
+ if history:
+ domain.extend([('message_ids','in',history)])
+ if rule.crm_trg_field_id:
+ deltaFunc = {
+ 'minutes' : lambda interval : timedelta(minutes=interval),
+ 'hours' : lambda interval : timedelta(hours=interval),
+ 'days' : lambda interval : timedelta(days=interval),
+ 'weeks' : lambda interval : timedelta(weeks=interval),
+ }
+ delay_delta = deltaFunc[rule.crm_trg_date_range_type](rule.crm_trg_date_range)
+ delay = datetime.now() + delay_delta
+ date_domain = []
+ if rule.crm_trg_date_range < 0:
+ date_domain = [(rule.crm_trg_field_id.name,'>',delay.strftime("%Y-%m-%d %H:%M:%S"))]
+ else:
+ date_domain = [(rule.crm_trg_field_id.name,'<',delay.strftime("%Y-%m-%d %H:%M:%S"))]
+ domain.extend(date_domain)
+ return domain, context
+
base_action_rule()
=== modified file 'crm_action_rule/crm_action_rule_view.xml'
--- crm_action_rule/crm_action_rule_view.xml 2011-03-09 10:33:59 +0000
+++ crm_action_rule/crm_action_rule_view.xml 2011-03-15 12:09:22 +0000
@@ -7,52 +7,57 @@
<field name="inherit_id" ref="base_action_rule.view_base_action_rule_form"/>
<field name="type">form</field>
<field name="arch" type="xml">
- <xpath expr="/form/notebook/page[@string='Generic Rule']" position="after">
- <page string="CRM Condition">
- <group colspan="2" col="2">
- <separator string="Condition Case Fields" colspan="2" />
- <field name="crm_trg_section_id" widget="selection" />
- <field name="crm_trg_categ_id" widget="selection" />
- </group>
- <group colspan="2" col="2">
- <separator string="Condition On Partner" colspan="2" />
- <field name="crm_trg_partner_id" />
- <field name="crm_trg_partner_catg_id" widget="selection" />
- </group>
- <group colspan="2" col="2">
- <separator string="Condition on State" colspan="2" />
- <field name="crm_trg_state"/>
- <field name="crm_trg_btn_pressed"/>
- </group>
- <group colspan="2" col="2">
- <separator colspan="4" string="Condition on Communication History"/>
- <field name="crm_trg_regex"/>
- </group>
- <group col="2" colspan="2">
- <separator colspan="2" string="Conditions on Timing"/>
- <field name="crm_trg_field_id" domain="[('model_id','=',model_id),('ttype','=','datetime')]"/>
- <group col="3" colspan="2" attrs="{'invisible': [('crm_trg_field_id', '=', False)]}">
- <field name="crm_trg_date_range" string="Delay After Trigger Date"/>
- <field name="crm_trg_date_range_type" nolabel="1"/>
- </group>
- </group>
- <group colspan="2" col="2">
- <separator colspan="4" string="Condition Responsible"/>
- <field name="crm_trg_responsible_id"/>
- </group>
- </page>
- <page string="CRM Action">
- <separator string="Fields to Change" colspan="4" />
- <group colspan="2" col="2">
- <field name="crm_to_responsible_id" widget="selection" />
- <field name="crm_to_categ_id" widget="selection" />
- </group>
- <group colspan="2" col="2">
- <field name="crm_to_section_id"/>
- <field name="crm_to_state"/>
- </group>
- </page>
- </xpath>
+ <data>
+ <xpath expr="//field[@name='model_id']" position="replace">
+ <field name="model_id" />
+ </xpath>
+ <xpath expr="/form/notebook/page[@string='Generic Rule']" position="before" >
+ <page string="CRM Condition" >
+ <group colspan="2" col="2">
+ <separator string="Condition Case Fields" colspan="2" />
+ <field name="crm_trg_section_id" widget="selection" />
+ <field name="crm_trg_categ_id" widget="selection" />
+ </group>
+ <group colspan="2" col="2">
+ <separator string="Condition On Partner" colspan="2" />
+ <field name="crm_trg_partner_id" />
+ <field name="crm_trg_partner_catg_id" widget="selection" />
+ </group>
+ <group colspan="2" col="2">
+ <separator string="Condition on State" colspan="2" />
+ <field name="crm_trg_state"/>
+ <field name="crm_trg_btn_pressed"/>
+ </group>
+ <group colspan="2" col="2">
+ <separator colspan="4" string="Condition on Communication History"/>
+ <field name="crm_trg_regex"/>
+ </group>
+ <group col="2" colspan="2">
+ <separator colspan="2" string="Conditions on Timing"/>
+ <field name="crm_trg_field_id" domain="[('model_id','=',model_id),('ttype','=','datetime')]"/>
+ <group col="3" colspan="2" attrs="{'invisible': [('crm_trg_field_id', '=', False)]}">
+ <field name="crm_trg_date_range" string="Delay After Trigger Date"/>
+ <field name="crm_trg_date_range_type" nolabel="1"/>
+ </group>
+ </group>
+ <group colspan="2" col="2">
+ <separator colspan="4" string="Condition Responsible"/>
+ <field name="crm_trg_responsible_id"/>
+ </group>
+ </page>
+ <page string="CRM Action">
+ <separator string="Fields to Change" colspan="4" />
+ <group colspan="2" col="2">
+ <field name="crm_to_responsible_id" widget="selection" />
+ <field name="crm_to_categ_id" widget="selection" />
+ </group>
+ <group colspan="2" col="2">
+ <field name="crm_to_section_id"/>
+ <field name="crm_to_state"/>
+ </group>
+ </page>
+ </xpath>
+ </data>
</field>
</record>
</data>
Follow ups