[IMP] crm_claim : Synchronization between states and stages.
authorDivyesh Makwana (Open ERP) <mdi@tinyerp.com>
Fri, 11 May 2012 06:26:34 +0000 (11:56 +0530)
committerDivyesh Makwana (Open ERP) <mdi@tinyerp.com>
Fri, 11 May 2012 06:26:34 +0000 (11:56 +0530)
bzr revid: mdi@tinyerp.com-20120511062634-2qmr04hqayn4hj37

addons/crm/crm_lead_view.xml
addons/crm_claim/crm_claim.py
addons/crm_claim/crm_claim_data.xml

index ba9b862..317cb0b 100644 (file)
@@ -24,7 +24,7 @@
     </record>
 
      <menuitem action="crm_lead_stage_act" id="menu_crm_lead_stage_act" name="Stages"
-        groups="base.group_no_one" sequence="0"
+        sequence="0"
         parent="base.menu_crm_config_lead" />
 
 
index 9673ba5..2fbc5a3 100644 (file)
@@ -39,6 +39,32 @@ class crm_claim(crm.crm_case, osv.osv):
     """
     Crm claim
     """
+    
+    def _get_state(self, cr, uid, ids, name, arg, context=None):
+        res = {}
+        for claim in self.browse(cr, uid, ids, context=context):
+            if claim.stage_id:
+                res[claim.id] = claim.stage_id.state
+        return res
+
+    def _get_stage(self, cr, uid, ids, context=None):
+        claim_obj = self.pool.get('crm.claim')
+        result = {}
+        for stage in self.browse(cr, uid, ids, context=context):
+            if stage.state:
+                claim_ids = claim_obj.search(cr, uid, [('state', '=', stage.state)], context=context)
+        for claim in claim_obj.browse(cr, uid, claim_ids, context=context):
+            result[claim.id] = True
+        return result.keys()
+
+    def _save_state(self, cr, uid, claim_id, field_name, field_value, arg, context=None):
+        stage_ids = self.pool.get('crm.case.stage').search(cr, uid, [('state', '=', field_value)], context=context)
+        if stage_ids:
+            self.write(cr, uid, claim_id, {'stage_id': stage_ids[0]}, context=context)
+        else:
+            cr.execute("""UPDATE crm_claim SET state=%s WHERE id=%s""", (field_value, claim_id, ))
+        return True
+
     _name = "crm.claim"
     _description = "Claim"
     _order = "priority,date desc"
@@ -75,7 +101,11 @@ class crm_claim(crm.crm_case, osv.osv):
         'partner_phone': fields.char('Phone', size=32),
         'stage_id': fields.many2one ('crm.case.stage', 'Stage', domain="[('section_ids','=',section_id)]"), 
         'cause': fields.text('Root Cause'),
-        'state': fields.selection(crm.AVAILABLE_STATES, 'State', size=16, readonly=True,
+        'state': fields.function(_get_state, fnct_inv=_save_state, type='selection', selection=crm.AVAILABLE_STATES, string="State", readonly=True,
+            store = {
+                'crm.claim': (lambda self, cr, uid, ids, c={}: ids, ['stage_id'], 10),
+                'crm.claim.stage': (_get_stage, ['state'], 10)
+                },
                                   help='The state is set to \'Draft\', when a case is created.\
                                   \nIf the case is in progress the state is set to \'Open\'.\
                                   \nWhen the case is over, the state is set to \'Done\'.\
index 5b3a2b0..ded08af 100644 (file)
         
         <record model="crm.case.stage" id="stage_claim1">
             <field name="name">Accepted as Claim</field>
+            <field name="state">draft</field>
             <field name="sequence">26</field>
         </record>
         <record model="crm.case.stage" id="stage_claim5">
             <field name="name">Actions Defined</field>
+            <field name="state">open</field>
             <field name="sequence">27</field>
         </record>
         <record model="crm.case.stage" id="stage_claim2">
             <field name="name">Actions Done</field>
+            <field name="state">done</field>
             <field name="sequence">28</field>
         </record>
         <record model="crm.case.stage" id="stage_claim3">
             <field name="name">Won't fix</field>
+            <field name="state">done</field>
             <field name="sequence">29</field>
         </record>