← Back to team overview

openerp-dev-web team mailing list archive

lp:~openerp-dev/openobject-addons/trunk-automated_rules-crm_lead_tab-uco into lp:~openerp-dev/openobject-addons/trunk-automated_rules

 

Ujjvala Collins (OpenERP) has proposed merging lp:~openerp-dev/openobject-addons/trunk-automated_rules-crm_lead_tab-uco into lp:~openerp-dev/openobject-addons/trunk-automated_rules.

Requested reviews:
  OpenERP R&D Team (openerp-dev)

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-automated_rules-crm_lead_tab-uco/+merge/53948

Backlog 3 : crm_automated_rules
-------------------------------------------------------
[CRM Action tab]
* Tab should appear only when the object selected is crm.lead (for Lead and opportunity)
* Tab shoud appear before generic rules

-- 
https://code.launchpad.net/~openerp-dev/openobject-addons/trunk-automated_rules-crm_lead_tab-uco/+merge/53948
Your team OpenERP R&D Team is requested to review the proposed merge of lp:~openerp-dev/openobject-addons/trunk-automated_rules-crm_lead_tab-uco into lp:~openerp-dev/openobject-addons/trunk-automated_rules.
=== modified file 'crm_action_rule/crm_action_rule.py'
--- crm_action_rule/crm_action_rule.py	2011-03-15 11:48:39 +0000
+++ crm_action_rule/crm_action_rule.py	2011-03-18 05:03:46 +0000
@@ -37,7 +37,11 @@
         return crm.AVAILABLE_STATES
         
     _columns = {
+<<<<<<< TREE
 #        'model': fields.related('model_id','model',type='char', size=60),
+=======
+        'model': fields.char('Model', size=60),
+>>>>>>> MERGE-SOURCE
         'crm_trg_section_id' : fields.many2one('crm.case.section', 'Sale Team'),
         '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'),
@@ -55,6 +59,7 @@
         'crm_to_state' : fields.selection(_crm_state_get, 'Set State To', size=16),
     }
     
+<<<<<<< TREE
     _defaults = {
         'crm_trg_date_range_type' : 'hours',
     }
@@ -161,4 +166,108 @@
             domain.extend(date_domain)
         return domain, context
         
+=======
+    _defaults = {
+        'crm_trg_date_range_type' : 'hours',
+    }
+    
+    def onchange_model_id(self, cr, uid, ids, model_id, context=None):
+        vals = {'value':{}}
+        if model_id:
+            model_pool = self.pool.get('ir.model')
+            model = model_pool.browse(cr, uid, model_id, context=context)
+            vals['value'] = {'model': model.model}
+        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
+        
+>>>>>>> MERGE-SOURCE
 base_action_rule()

=== modified file 'crm_action_rule/crm_action_rule_view.xml'
--- crm_action_rule/crm_action_rule_view.xml	2011-03-15 11:48:39 +0000
+++ crm_action_rule/crm_action_rule_view.xml	2011-03-18 05:03:46 +0000
@@ -7,6 +7,7 @@
             <field name="inherit_id" ref="base_action_rule.view_base_action_rule_form"/>
             <field name="type">form</field>
             <field name="arch" type="xml">
+<<<<<<< TREE
                 <data>
                     <xpath expr="//field[@name='model_id']" position="replace">
                         <field name="model_id" />
@@ -58,6 +59,60 @@
                         </page>
                     </xpath>
                 </data>
+=======
+                <data>
+                    <xpath expr="//field[@name='model_id']" position="replace">
+                        <field name="model_id" on_change="onchange_model_id(model_id)"/>
+                        <field name="model" invisible="1"/>
+                    </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" attrs="{'invisible': [('model','!=','crm.lead')]}">
+                            <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>
+>>>>>>> MERGE-SOURCE
             </field>
        </record>
     </data>