[FIX]: fix aproblem for the filling one2many field on change partner in voucher
authorMantavya Gajjar <mga@tinyerp.com>
Thu, 19 Aug 2010 09:25:59 +0000 (14:55 +0530)
committerMantavya Gajjar <mga@tinyerp.com>
Thu, 19 Aug 2010 09:25:59 +0000 (14:55 +0530)
bzr revid: mga@tinyerp.com-20100819092559-vqa8unnd0aj02fgc

addons/account_voucher/voucher.py

index 1182981..af498aa 100644 (file)
@@ -220,6 +220,53 @@ class account_voucher(osv.osv):
         'audit': lambda *a: False,
         'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'account.voucher',context=c),
     }
+
+    def create(self, cr, uid, vals, context={}):
+        """
+        Create a new record for a model account_voucher
+        @param cr: A database cursor
+        @param user: ID of the user currently logged in
+        @param vals: provides data for new record
+        @param context: context arguments, like lang, time zone
+        
+        @return: Returns an id of the new record
+        """
+
+        old_line = []
+        new_lines = []
+        
+        payment_ids = vals.get('payment_ids')
+        vals.update({
+            'payment_ids':False
+        })
+        for line in payment_ids:
+            id1 = line[0]
+            id2 = line[1]
+            res = line[2]
+            if id1 == 0 and id2 == 0:
+                new_lines += [(id1, id2, res)]
+            else:
+                old_line += [(id1, id2, res)]
+
+        if new_lines:
+            vals.update({
+                'payment_ids':new_lines
+            })
+        res_id = super(account_voucher, self).create(cr, uid, vals, context)
+        
+        if old_line:
+            new_payment_ids = []
+            for line in old_line:
+                id1 = line[0]
+                id2 = line[1]
+                res = line[2]
+                res.update({
+                    'voucher_id':res_id
+                })
+                new_payment_ids += [(id1, id2, res)]
+                
+            self.write(cr, uid, [res_id], {'payment_ids':new_payment_ids})
+        return res_id
     
     def onchange_partner_id(self, cr, uid, ids, partner_id, ttype, context={}):
         """
@@ -257,14 +304,7 @@ class account_voucher(osv.osv):
         if ttype not in ('payment', 'receipt'):
             return default
         
-        if not ids:
-            raise osv.except_osv(_('Invalid !'), _('Please save voucher before selection partner !'))
-        
-        line_ids = line_pool.search(cr, uid, [('voucher_id','=',ids[0])])
-        if line_ids:
-            line_pool.unlink(cr, uid, line_ids)
-        
-        voucher_id = ids[0]
+        voucher_id = ids and ids[0] or False
         ids = move_pool.search(cr, uid, [('reconcile_id','=', False), ('state','=','posted'), ('partner_id','=',partner_id)], context=context)
         for move in move_pool.browse(cr, uid, ids):
             rs = {