← Back to team overview

openerp-dev-web team mailing list archive

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