← Back to team overview

savoirfairelinux-openerp team mailing list archive

[Merge] lp:~savoirfairelinux-openerp/openerp-icm/bug1160750 into lp:openerp-icm

 

Sandy Carter (http://www.savoirfairelinux.com) has proposed merging lp:~savoirfairelinux-openerp/openerp-icm/bug1160750 into lp:openerp-icm.

Requested reviews:
  openerp-icm (openerp-icm)

For more details, see:
https://code.launchpad.net/~savoirfairelinux-openerp/openerp-icm/bug1160750/+merge/199201

Revision of code including pep8, optimization of pools, some comment fixes.

It would be good to translate non-English state names, strings, function names, and, especially comments.
There still is some strange code that I was unable to revise due to lack of original intent.

Revision 14 assures that context is used as per Bug #1160750 

Please do test, as there may be some bugs left or some regression.
-- 
https://code.launchpad.net/~savoirfairelinux-openerp/openerp-icm/bug1160750/+merge/199201
Your team Savoir-faire Linux' OpenERP is subscribed to branch lp:~savoirfairelinux-openerp/openerp-icm/bug1160750.
=== modified file 'sale_commission/__init__.py'
--- sale_commission/__init__.py	2012-07-13 10:51:04 +0000
+++ sale_commission/__init__.py	2013-12-16 22:11:05 +0000
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 ##############################################################################
 #
-#    OpenERP, Open Source Management Solution	
+#    OpenERP, Open Source Management Solution
 #   Copyright (C) 2011 Pexego Sistemas Informáticos (<http://www.pexego.es>). All Rights Reserved
 #    $Id$
 #
@@ -20,7 +20,7 @@
 #
 ##############################################################################
 
-import saleagent
+import sale_agent
 import invoice
 import partner_agent
 import partner
@@ -30,4 +30,3 @@
 import wizard
 
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-

=== modified file 'sale_commission/__openerp__.py'
--- sale_commission/__openerp__.py	2012-07-13 10:51:04 +0000
+++ sale_commission/__openerp__.py	2013-12-16 22:11:05 +0000
@@ -20,37 +20,35 @@
 #
 ##############################################################################
 {
-    'name' : 'Sales commissions',
+    'name': 'Sales commissions',
     'version': '1.0',
-    'author' : 'Pexego',
+    'author': 'Pexego',
     "category": "Generic Modules/Sales & Purchases",
-    'depends' : [
-                    'base',
-                    'account',
-                    'product',
-                    'sale', 
-                    'hr',
-                    'stock'
-                ],
+    'depends': [
+        'base',
+        'account',
+        'product',
+        'sale',
+        'hr',
+        'stock'
+    ],
     'description': 'Sales commissions',
-    'init_xml' : [],
-    'update_xml': [
-                    'security/ir.model.access.csv',
-                    'saleagent_view.xml',
-                    'partner_agent_view.xml',
-                    'wizard/wizard_invoice.xml',
-                    'partner_view.xml',
-                    'settled_view.xml',
-                    'invoice_view.xml',
-                    'sale_order_view.xml',
-                    'product_view.xml',
-                    'stock_picking_view.xml',
-                    'cc_commission_report.xml', 
-                ],
-    'demo_xml': [
-                ],
+    'data': [
+        'security/ir.model.access.csv',
+        'sale_agent_view.xml',
+        'partner_agent_view.xml',
+        'wizard/wizard_invoice.xml',
+        'partner_view.xml',
+        'settled_view.xml',
+        'invoice_view.xml',
+        'sale_order_view.xml',
+        'product_view.xml',
+        'stock_picking_view.xml',
+        'cc_commission_report.xml',
+    ],
+    'demo': [
+    ],
     'active': False,
     'installable': True
 }
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-

=== modified file 'sale_commission/invoice.py'
--- sale_commission/invoice.py	2013-05-03 16:11:58 +0000
+++ sale_commission/invoice.py	2013-12-16 22:11:05 +0000
@@ -22,114 +22,120 @@
 
 """invoice agents"""
 
-from osv import fields, osv
+from osv import fields, orm
 from tools.translate import _
 
-class invoice_line_agent(osv.osv):
+
+class invoice_line_agent(orm.Model):
     """invoice agents"""
 
     _name = "invoice.line.agent"
-
     _columns = {
-        'invoice_line_id':fields.many2one('account.invoice.line', 'Invoice Line', required=True, ondelete='cascade', help=''),
-        'invoice_id':fields.related('invoice_line_id', 'invoice_id', type='many2one', relation='account.invoice', string='Invoice'),
-        'invoice_date':fields.related('invoice_id',type='date_invoice', readonly=True),
+        'invoice_line_id': fields.many2one('account.invoice.line', 'Invoice Line', required=True, ondelete='cascade',
+                                           help=''),
+        'invoice_id': fields.related('invoice_line_id', 'invoice_id', type='many2one', relation='account.invoice',
+                                     string='Invoice'),
+        'invoice_date': fields.related('invoice_id', type='date_invoice', readonly=True),
         'agent_id': fields.many2one('sale.agent', 'Agent', required=True, ondelete='cascade', help=''),
-        'commission_id':fields.many2one('commission', 'Applied commission', required=True, ondelete='cascade', help=''),
-        'settled':fields.boolean('Settled', readonly=True),
-        'quantity':fields.float('Settled amount')
+        'commission_id': fields.many2one('commission', 'Applied commission', required=True, ondelete='cascade',
+                                         help=''),
+        'settled': fields.boolean('Settled', readonly=True),
+        'quantity': fields.float('Settled amount')
     }
     _defaults = {
-        'settled': lambda *a: False,
-        'quantity':lambda *a: 0
-     }
-
-
-    def calculate_commission (self, cr, uid, ids):
-        for line_agent in self.browse(cr,uid,ids):
-             if  line_agent.commission_id.type == 'fijo' and line_agent.commission_id.fix_qty:
+        'settled': False,
+        'quantity': 0
+    }
+
+    def calculate_commission(self, cr, uid, ids, context=None):
+        if context is None:
+            context = {}
+        for line_agent in self.browse(cr, uid, ids, context):
+            if line_agent.commission_id.type == 'fijo' and line_agent.commission_id.fix_qty:
                 quantity = line_agent.invoice_line_id.price_subtotal * (line_agent.commission_id.fix_qty / 100.0)
-                self.write(cr,uid,line_agent.id, {'quantity':quantity})
+                self.write(cr, uid, line_agent.id, {'quantity': quantity}, context=context)
 
-    def onchange_agent_id(self, cr, uid, ids, agent_id):
+    def onchange_agent_id(self, cr, uid, ids, agent_id, context=None):
         """al cambiar el agente se le carga la comisión"""
+        if context is None:
+            context = {}
         result = {}
         v = {}
         if agent_id:
-            agent = self.pool.get('sale.agent').browse(cr, uid, agent_id)
+            agent = self.pool.get('sale.agent').browse(cr, uid, agent_id, context=context)
             v['commission_id'] = agent.commission.id
-            agent_line = self.browse(cr, uid, ids)
+            agent_line = self.browse(cr, uid, ids, context=context)
             if agent_line:
                 v['quantity'] = agent_line[0].invoice_line_id.price_subtotal * (agent.commission.fix_qty / 100.0)
             else:
                 v['quantity'] = 0
-
         result['value'] = v
         return result
 
-    def onchange_commission_id(self, cr, uid, ids, agent_id, commission_id):
+    def onchange_commission_id(self, cr, uid, ids, agent_id, commission_id, context=None):
         """alerta al usuario sobre la comisión elegida"""
+        if context is None:
+            context = {}
         result = {}
         v = {}
         if commission_id:
-            partner_commission = self.pool.get('commission').browse(cr, uid, commission_id)
-            agent_line = self.browse(cr, uid, ids)
+            partner_commission = self.pool.get('commission').browse(cr, uid, commission_id, context=context)
+            agent_line = self.browse(cr, uid, ids, context=context)
             v['quantity'] = agent_line[0].invoice_line_id.price_subtotal * (partner_commission.fix_qty / 100.0)
-            result['value']=v
-            if partner_commission.sections:
-                if agent_id:
-                    agent = self.pool.get('sale.agent').browse(cr, uid, agent_id)
-                    
-                    if agent.commission.id !=  partner_commission.id:
-                        result['warning'] = {}
-                        result['warning']['title'] = _('Fee installments!')
-                        #result['warning']['message'] = 'Se ha asignado una comisión por tramos que no coincide con la definida para el agente por defecto, por lo que estos tramos se aplicarán tan solo sobre esta factura.'
-                        result['warning']['message'] = _('A commission has been assigned by sections that does not match that defined for the agent by default, so that these sections shall apply only on this bill.')
+            result['value'] = v
+            if partner_commission.sections and agent_id:
+                agent = self.pool.get('sale.agent').browse(cr, uid, agent_id, context=context)
+                if agent.commission.id != partner_commission.id:
+                    result['warning'] = {
+                        'title': _('Fee installments!'),
+                        'message': _('A commission has been assigned by sections that does not '
+                                     'match that defined for the agent by default, so that these '
+                                     'sections shall apply only on this bill.')
+                    }
         return result
 
 
-invoice_line_agent()
-
-class account_invoice_line(osv.osv):
+class account_invoice_line(orm.Model):
     """Enlazamos las comisiones a la factura"""
 
     _inherit = "account.invoice.line"
-
     _columns = {
-        'commission_ids': fields.one2many('invoice.line.agent', 'invoice_line_id', 'Commissions', help="Commissions asociated to invoice line."),
+        'commission_ids': fields.one2many('invoice.line.agent', 'invoice_line_id', 'Commissions',
+                                          help="Commissions asociated to invoice line."),
     }
 
-account_invoice_line()
 
-class account_invoice(osv.osv):
+class account_invoice(orm.Model):
     """heredamos las facturas para añadirles el representante de venta"""
 
     _inherit = "account.invoice"
-
     _columns = {
         'agent_id': fields.many2one('sale.agent', 'Agent'),
-        'agent_code':fields.related ('agent_id', 'code', readonly=True, type='char', string='Agent code' ),
-        'country':fields.related ('partner_id', 'country_id', readonly=True, type='many2one', string= 'Country', relation='res.country' ),
+        'agent_code': fields.related('agent_id', 'code', readonly=True, type='char', string='Agent code'),
+        'country': fields.related('partner_id', 'country_id', readonly=True, type='many2one', string='Country',
+                                  relation='res.country'),
     }
 
-    def onchange_partner_id(self, cr, uid, ids, type, part, date_invoice=False, payment_term=False, partner_bank_id=False, company_id=False):
+    def onchange_partner_id(self, cr, uid, ids, type, part, date_invoice=False, payment_term=False,
+                            partner_bank_id=False, company_id=False, context=None):
         """Al cambiar la empresa nos treamos el representante asociado a la empresa"""
-        res = super(account_invoice, self).onchange_partner_id(cr, uid, ids, type, part, date_invoice=date_invoice, payment_term=payment_term, partner_bank_id=partner_bank_id, company_id=company_id)
-
+        if context is None:
+            context = {}
+        res = super(account_invoice, self).onchange_partner_id(
+            cr, uid, ids, type, part, date_invoice=date_invoice, payment_term=payment_term,
+            partner_bank_id=partner_bank_id, company_id=company_id, context=context)
         if part and res.get('value', False):
-            partner = self.pool.get('res.partner').browse(cr, uid, part)
+            partner = self.pool.get('res.partner').browse(cr, uid, part, context=context)
             if partner.commission_ids:
                 res['value']['agent_id'] = partner.commission_ids[0].agent_id.id
-
         return res
 
-    def _refund_cleanup_lines(self, cr, uid, lines):
+    def _refund_cleanup_lines(self, cr, uid, lines, context=None):
         """ugly function to map all fields of account.invoice.line when creates refund invoice"""
-        res = super(account_invoice, self)._refund_cleanup_lines(cr, uid, lines)
+        if context is None:
+            context = {}
+        res = super(account_invoice, self)._refund_cleanup_lines(cr, uid, lines, context=context)
         for line in res:
             if 'commission_ids' in line[2]:
-                line[2]['commission_ids'] = [(6,0, line[2].get('commission_ids', [])) ]
-            
+                line[2]['commission_ids'] = [(6, 0, line[2].get('commission_ids', [])), ]
         return res
-
-account_invoice()

=== modified file 'sale_commission/partner.py'
--- sale_commission/partner.py	2012-07-13 10:51:04 +0000
+++ sale_commission/partner.py	2013-12-16 22:11:05 +0000
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 ##############################################################################
 #
-#    OpenERP, Open Source Management Solution	
+#    OpenERP, Open Source Management Solution
 #    Copyright (C) 2011 Pexego Sistemas Informáticos (<http://www.pexego.es>). All Rights Reserved
 #    $Id$
 #
@@ -22,19 +22,18 @@
 
 """añadimos algún campo relacionado con el intrastat"""
 
-from osv import fields, osv
-
-class res_partner(osv.osv):
+from osv import fields, orm
+
+
+class res_partner(orm.Model):
     """añadimos algún campo relacionado con elas comisiones"""
 
     _name = "res.partner"
     _inherit = "res.partner"
     _columns = {
         'commission_ids': fields.one2many('res.partner.agent', 'partner_id', 'Agents'),
-        'agent': fields.boolean('Creditor/Agent', help="If you check this field will be available as creditor or agent.")
+        'agent': fields.boolean('Creditor/Agent',
+                                help="If you check this field will be available as creditor or agent.")
     }
-    
-res_partner()
 
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-

=== modified file 'sale_commission/partner_agent.py'
--- sale_commission/partner_agent.py	2012-07-13 10:51:04 +0000
+++ sale_commission/partner_agent.py	2013-12-16 22:11:05 +0000
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 ##############################################################################
 #
-#    OpenERP, Open Source Management Solution	
+#    OpenERP, Open Source Management Solution
 #    Copyright (C) 2011 Pexego Sistemas Informáticos (<http://www.pexego.es>). All Rights Reserved
 #    $Id$
 #
@@ -22,68 +22,68 @@
 
 """objeto de comportamiento many2many que relaciona agentes o comerciales con partners"""
 
-from osv import fields, osv
+from osv import fields, orm
 from tools.translate import _
 
-class res_partner_agent(osv.osv):
-    "objeto de comportamiento many2many que relaciona agentes o comerciales con partners"
+
+class res_partner_agent(orm.Model):
+    """objeto de comportamiento many2many que relaciona agentes o comerciales con partners"""
     _name = "res.partner.agent"
 
     def name_get(self, cr, uid, ids, context=None):
         """devuelve como nombre del agente del partner el nombre del agente"""
-        if context is None: context = {}
-        res = []
-        for obj in self.browse(cr, uid, ids):
-            res.append((obj.id, obj.agent_id.name))
-
-        return res
+        if context is None:
+            context = {}
+        return [(obj.id, obj.agent_id.name) for obj in self.browse(cr, uid, ids, context=context)]
 
     def _get_partner_agents_to_update_from_sale_agents(self, cr, uid, ids, context=None):
-        """devuelve los ids de partner agents a actualizar desde el lanzamiento de un evento de actualización en agentes de ventas"""
-        if context is None: context = {}
-        result = []
-        for agent_obj_id in self.browse(cr, uid, ids):
-            partner_agents_ids = self.pool.get('res.partner.agent').search(cr, uid, [('agent_id', '=', agent_obj_id.id)])
-            result.extend(partner_agents_ids)
-        return result
+        """
+        devuelve los ids de partner agents a actualizar desde el lanzamiento de un evento de actualización en agentes
+        de ventas
+        """
+        if context is None:
+            context = {}
+        agent_pool = self.pool.get('res.partner.agent')
+        agent_obj_ids = [agent_obj_id.id for agent_obj_id in self.browse(cr, uid, ids, context=context)]
+        return agent_pool.search(cr, uid, [('agent_id', 'in', agent_obj_ids)], context=context)
 
     _columns = {
-        'partner_id':fields.many2one('res.partner', 'Partner', required=True, ondelete='cascade', help='', select=1),
-        'agent_id':fields.many2one('sale.agent', 'Agent', required=True, ondelete='cascade', help=''),
-        'commission_id':fields.many2one('commission', 'Applied commission', required=True, ondelete='cascade', help=''),
-        'type': fields.related('agent_id', 'type', type="selection", selection=[('asesor', 'Adviser'), ('comercial', 'Commercial')], readonly=True,
-                    store={'sale.agent': (_get_partner_agents_to_update_from_sale_agents, ['type'], 10),
-                            'res.partner.agent': (lambda self, cr, uid, ids, c={}: ids, None, 20)})
+        'partner_id': fields.many2one('res.partner', 'Partner', required=True, ondelete='cascade', help='', select=1),
+        'agent_id': fields.many2one('sale.agent', 'Agent', required=True, ondelete='cascade', help=''),
+        'commission_id': fields.many2one('commission', 'Applied commission', required=True, ondelete='cascade',
+                                         help=''),
+        'type': fields.related('agent_id', 'type', type="selection",
+                               selection=[('asesor', 'Adviser'), ('comercial', 'Commercial')], readonly=True,
+                               store={'sale.agent': (_get_partner_agents_to_update_from_sale_agents, ['type'], 10),
+                                      'res.partner.agent': (lambda self, cr, uid, ids, c={}: ids, None, 20)})
     }
-    
-    def onchange_agent_id(self, cr, uid, ids, agent_id):
+
+    def onchange_agent_id(self, cr, uid, ids, agent_id, context=None):
         """al cambiar el agente cargamos sus comisión"""
         result = {}
         v = {}
         if agent_id:
-            agent = self.pool.get('sale.agent').browse(cr, uid, agent_id)
+            agent = self.pool.get('sale.agent').browse(cr, uid, agent_id, context=context)
             v['commission_id'] = agent.commission.id
-
         result['value'] = v
         return result
 
-    def onchange_commission_id(self, cr, uid, ids, agent_id=False, commission_id=False):
+    def onchange_commission_id(self, cr, uid, ids, agent_id=False, commission_id=False, context=None):
         """al cambiar la comisión comprobamos la selección"""
+        if context is None:
+            context = {}
         result = {}
-
         if commission_id:
-            partner_commission = self.pool.get('commission').browse(cr, uid, commission_id)
-            if partner_commission.sections:
-                if agent_id:
-                    agent = self.pool.get('sale.agent').browse(cr, uid, agent_id)
-                    if agent.commission.id !=  partner_commission.id:
-                        result['warning'] = {}
-                        result['warning']['title'] = _('Fee installments!')
-                        result['warning']['message'] = _('A commission has been assigned by sections that does not match that defined for the agent by default, so that these sections shall apply only on this bill.')
-
+            partner_commission = self.pool.get('commission').browse(cr, uid, commission_id, context=context)
+            if partner_commission.sections and agent_id:
+                agent = self.pool.get('sale.agent').browse(cr, uid, agent_id, context=context)
+                if agent.commission.id != partner_commission.id:
+                    result['warning'] = {
+                        'title': _('Fee installments!'),
+                        'message': _('A commission has been assigned by sections that does not '
+                                     'match that defined for the agent by default, so that these '
+                                     'sections shall apply only on this bill.')
+                    }
         return result
-        
-
-res_partner_agent()
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== modified file 'sale_commission/partner_view.xml'
--- sale_commission/partner_view.xml	2013-02-19 14:49:01 +0000
+++ sale_commission/partner_view.xml	2013-12-16 22:11:05 +0000
@@ -9,7 +9,7 @@
             <field name="priority" eval="18"/>
             <field name="arch" type="xml">
                     <field name="supplier" position="after">
-                        <field name="agent"  string="Consultancy"></field>
+                        <field name="agent" string="Consultancy"/>
                     </field>
             </field>
         </record>

=== renamed file 'sale_commission/saleagent.py' => 'sale_commission/sale_agent.py'
--- sale_commission/saleagent.py	2012-07-13 10:51:04 +0000
+++ sale_commission/sale_agent.py	2013-12-16 22:11:05 +0000
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 ##############################################################################
 #
-#    OpenERP, Open Source Management Solution	
+#    OpenERP, Open Source Management Solution
 #    Copyright (C) 2011 Pexego Sistemas Informáticos (<http://www.pexego.es>). All Rights Reserved
 #    $Id$
 #
@@ -20,10 +20,10 @@
 #
 ##############################################################################
 
-from osv import fields, osv
-
-
-class commission(osv.osv):
+from osv import fields, orm
+
+
+class commission(orm.Model):
     """Objeto comisión"""
 
     _name = "commission"
@@ -35,11 +35,13 @@
         'sections': fields.one2many('commission.section', 'commission_id', 'Sections')
     }
     _defaults = {
-        'type' : lambda *a: 'fijo',
+        'type': 'fijo',
     }
 
-    def calcula_tramos(self, cr, uid, ids, base):
-        commission = self.browse(cr, uid, ids)[0]
+    def calcula_tramos(self, cr, uid, ids, base, context=None):
+        if context is None:
+            context = {}
+        commission = self.browse(cr, uid, ids, context=context)[0]
         #Cálculo de tramos
         for section in commission.sections:
             if base >= section.commission_from and (base < section.commission_until or section.commission_until == 0):
@@ -47,10 +49,8 @@
                 return res
         return 0.0
 
-commission()
-
-
-class commission_section(osv.osv):
+
+class commission_section(orm.Model):
     """periodo de las comisiones"""
 
     _name = "commission.section"
@@ -63,39 +63,40 @@
 
     }
 
-commission_section()
 
-class sale_agent(osv.osv):
+class sale_agent(orm.Model):
     """Agente de ventas"""
 
     _name = "sale.agent"
     _description = "Sale agent"
-
     _columns = {
         'name': fields.char('Saleagent Name', size=125, required=True),
         'type': fields.selection((('asesor', 'Adviser'), ('comercial', 'Commercial')), 'Type', required=True),
-        'partner_id': fields.many2one('res.partner', 'Partner', ondelete='cascade', help='Associated partner, is necessary for income invoices.'),
-        'code':fields.related ('partner_id','ref', string='Code', readonly=True, type='char', help='Se obtiene del código de la empresa relacionada'),
-        'employee_id': fields.many2one('hr.employee', 'Associated Employee', help='Employee associated to agent, is necessary for set an employee to settle commissions in wage.'),
+        'partner_id': fields.many2one('res.partner', 'Partner', ondelete='cascade',
+                                      help='Associated partner, is necessary for income invoices.'),
+        'code': fields.related('partner_id', 'ref', string='Code', readonly=True, type='char',
+                               help='Se obtiene del código de la empresa relacionada'),
+        'employee_id': fields.many2one('hr.employee', 'Associated Employee',
+                                       help='Employee associated to agent, is necessary for set an employee '
+                                            'to settle commissions in wage.'),
         'customer': fields.one2many('res.partner.agent', 'agent_id', 'Customer', readonly=True),
         'commission': fields.many2one('commission', 'Commission by default', required=True),
-        'settlement': fields.selection((('m', 'Monthly'),('t', 'Quarterly'),('s', 'Semiannual'),('a', 'Annual')), 'Period settlement', required=True),
+        'settlement': fields.selection((('m', 'Monthly'), ('t', 'Quarterly'), ('s', 'Semiannual'), ('a', 'Annual')),
+                                       'Period settlement', required=True),
         'active': fields.boolean('Active'),
-        'retention_id': fields.many2one ('account.tax', 'Applied retention'),
-        'settlement_ids': fields.one2many ('settlement.agent', 'agent_id', 'Settlements executed', readonly=True)
+        'retention_id': fields.many2one('account.tax', 'Applied retention'),
+        'settlement_ids': fields.one2many('settlement.agent', 'agent_id', 'Settlements executed', readonly=True)
     }
     _defaults = {
-        'active': lambda *a: True,
-        'type' : lambda *a: 'asesor',
+        'active': True,
+        'type': 'asesor',
     }
 
-    def calcula_tramos (self, cr, uid, ids, base):
+    def calcula_tramos(self, cr, uid, ids, base, context=None):
         """calcula los tramos por factura"""
-        agente = self.browse(cr, uid, ids)[0]
+        if context is None:
+            context = {}
+        agente = self.browse(cr, uid, ids, context=context)[0]
         return agente.commission.calcula_tramos(base)
 
-
-sale_agent()#
-
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
-

=== renamed file 'sale_commission/saleagent_demo.xml' => 'sale_commission/sale_agent_demo.xml'
=== renamed file 'sale_commission/saleagent_view.xml' => 'sale_commission/sale_agent_view.xml'
=== modified file 'sale_commission/sale_order.py'
--- sale_commission/sale_order.py	2013-06-07 21:40:14 +0000
+++ sale_commission/sale_order.py	2013-12-16 22:11:05 +0000
@@ -22,150 +22,152 @@
 
 """Modificamos las ventas para incluir el comportamiento de comisiones"""
 
-from osv import fields, osv
+from osv import fields, orm
 from tools.translate import _
 
-class sale_order_agent(osv.osv):
+
+class sale_order_agent(orm.Model):
     _name = "sale.order.agent"
 
     def name_get(self, cr, uid, ids, context=None):
         """devuelve como nombre del agente del partner el nombre del agente"""
-        if context is None: context = {}
-        res = []
-        for obj in self.browse(cr, uid, ids):
-            res.append((obj.id, obj.agent_id.name))
-        return res
+        if context is None:
+            context = {}
+        return [(obj.id, obj.agent_id.name) for obj in self.browse(cr, uid, ids, context=context)]
 
     _columns = {
-        'sale_id':fields.many2one('sale.order', 'Sale order', required=False, ondelete='cascade', help=''),
-        'agent_id':fields.many2one('sale.agent', 'Agent', required=True, ondelete='cascade', help=''),
-        'commission_id':fields.many2one('commission', 'Applied commission', required=True, ondelete='cascade', help=''),
+        'sale_id': fields.many2one('sale.order', 'Sale order', required=False, ondelete='cascade', help=''),
+        'agent_id': fields.many2one('sale.agent', 'Agent', required=True, ondelete='cascade', help=''),
+        'commission_id': fields.many2one('commission', 'Applied commission', required=True, ondelete='cascade',
+                                         help=''),
     }
 
-    def onchange_agent_id(self, cr, uid, ids, agent_id):
+    def onchange_agent_id(self, cr, uid, ids, agent_id, context=None):
         """al cambiar el agente cargamos sus comisión"""
+        if context is None:
+            context = {}
         result = {}
         v = {}
         if agent_id:
-            agent = self.pool.get('sale.agent').browse(cr, uid, agent_id)
+            agent = self.pool.get('sale.agent').browse(cr, uid, agent_id, context=context)
             v['commission_id'] = agent.commission.id
-
         result['value'] = v
         return result
 
-    def onchange_commission_id(self, cr, uid, ids, agent_id=False, commission_id=False):
+    def onchange_commission_id(self, cr, uid, ids, agent_id=False, commission_id=False, context=None):
         """al cambiar la comisión comprobamos la selección"""
+        if context is None:
+            context = {}
         result = {}
-
         if commission_id:
-            partner_commission = self.pool.get('commission').browse(cr, uid, commission_id)
-            if partner_commission.sections:
-                if agent_id:
-                    agent = self.pool.get('sale.agent').browse(cr, uid, agent_id)
-                    if agent.commission.id !=  partner_commission.id:
-                        result['warning'] = {}
-                        result['warning']['title'] = _('Fee installments!')
-                        result['warning']['message'] = _('A commission has been assigned by sections that does not match that defined for the agent by default, so that these sections shall apply only on this bill.')
+            partner_commission = self.pool.get('commission').browse(cr, uid, commission_id, context=context)
+            if partner_commission.sections and agent_id:
+                agent = self.pool.get('sale.agent').browse(cr, uid, agent_id, context=context)
+                if agent.commission.id != partner_commission.id:
+                    result['warning'] = {
+                        'title': _('Fee installments!'),
+                        'message': _('A commission has been assigned by sections that does not '
+                                     'match that defined for the agent by default, so that these '
+                                     'sections shall apply only on this bill.')
+                    }
         return result
 
-sale_order_agent()
 
-class sale_order(osv.osv):
+class sale_order(orm.Model):
     """Modificamos las ventas para incluir el comportamiento de comisiones"""
 
     _inherit = "sale.order"
-
     _columns = {
-        'sale_agent_ids':fields.one2many('sale.order.agent', 'sale_id', 'Agents', states={'draft': [('readonly', False)]})
+        'sale_agent_ids': fields.one2many('sale.order.agent', 'sale_id', 'Agents',
+                                          states={'draft': [('readonly', False)]})
     }
 
     def create(self, cr, uid, values, context=None):
-        """
-        """
+        if context is None:
+            context = {}
+        agent_pool = self.pool.get('sale.order.agent')
         res = super(sale_order, self).create(cr, uid, values, context=context)
         if 'sale_agent_ids' in values:
             for sale_order_agent in values['sale_agent_ids']:
-                self.pool.get('sale.order.agent').write(cr, uid, sale_order_agent[1], {'sale_id':res})
+                agent_pool.write(cr, uid, sale_order_agent[1], {'sale_id': res})
         return res
 
     def write(self, cr, uid, ids, values, context=None):
-        """
-        """
-
+        if context is None:
+            context = {}
+        agent_pool = self.pool.get('sale.order.agent')
         if 'sale_agent_ids' in values:
             for sale_order_agent in values['sale_agent_ids']:
                 for id in ids:
                     if sale_order_agent[2]:
-                        sale_order_agent[2]['sale_id']=id
+                        sale_order_agent[2]['sale_id'] = id
                     else:
-                        self.pool.get('sale.order.agent').unlink(cr, uid, sale_order_agent[1])
+                        agent_pool.unlink(cr, uid, sale_order_agent[1], context=context)
         return super(sale_order, self).write(cr, uid, ids, values, context=context)
 
     def onchange_partner_id(self, cr, uid, ids, part, context=None):
         """heredamos el evento de cambio del campo partner_id para actualizar el campo agent_id"""
-        sale_agent_ids=[]
+        if context is None:
+            context = {}
+        sale_agent_ids = []
         res = super(sale_order, self).onchange_partner_id(cr, uid, ids, part, context=context)
         if res.get('value', False) and part:
             sale_order_agent = self.pool.get('sale.order.agent')
             if ids:
-                sale_order_agent.unlink(cr, uid, sale_order_agent.search(cr, uid ,[('sale_id','=',ids)]))
-            partner = self.pool.get('res.partner').browse(cr, uid, part)
+                sale_order_agent.unlink(cr, uid, sale_order_agent.search(cr, uid, [('sale_id', '=', ids)],
+                                                                         context=context))
+            partner = self.pool.get('res.partner').browse(cr, uid, part, context=context)
             for partner_agent in partner.commission_ids:
-                vals={
-                    'agent_id':partner_agent.agent_id.id,
-                    'commission_id':partner_agent.commission_id.id,
+                vals = {
+                    'agent_id': partner_agent.agent_id.id,
+                    'commission_id': partner_agent.commission_id.id,
                     #'sale_id':ids
                 }
+                # FIXME: What is going on in this block?
                 if ids:
                     for id in ids:
-                        vals['sale_id']=id
-                sale_agent_id=sale_order_agent.create(cr, uid, vals)
+                        vals['sale_id'] = id
+                sale_agent_id = sale_order_agent.create(cr, uid, vals, context=context)
                 sale_agent_ids.append(int(sale_agent_id))
-            res['value']['sale_agent_ids'] =  sale_agent_ids
+            res['value']['sale_agent_ids'] = sale_agent_ids
         return res
 
-
     def action_ship_create(self, cr, uid, ids, context=None):
         """extend this method to add agent_id to picking"""
+        if context is None:
+            context = {}
+        picking_pool = self.pool.get('stock.picking')
         res = super(sale_order, self).action_ship_create(cr, uid, ids, context=context)
-
-        for order in self.browse(cr, uid, ids):
+        for order in self.browse(cr, uid, ids, context=context):
             pickings = [x.id for x in order.picking_ids]
             agents = [x.agent_id.id for x in order.sale_agent_ids]
             if pickings and agents:
-                self.pool.get('stock.picking').write(cr, uid, pickings, {'agent_ids': [[6, 0, agents]] })
+                picking_pool.write(cr, uid, pickings, {'agent_ids': [[6, 0, agents]], }, context=context)
         return res
 
-sale_order()
-
-
-class sale_order_line(osv.osv):
+
+class sale_order_line(orm.Model):
     """Modificamos las lineas ventas para incluir las comisiones en las facturas creadas desde ventas"""
 
     _inherit = "sale.order.line"
 
-
     def invoice_line_create(self, cr, uid, ids, context=None):
         if context is None:
             context = {}
-
+        invoice_line_pool = self.pool.get('account.invoice.line')
+        invoice_line_agent_pool = self.pool.get('invoice.line.agent')
         res = super(sale_order_line, self).invoice_line_create(cr, uid, ids, context)
-        so_ref = self.browse(cr,uid,ids)[0].order_id
+        so_ref = self.browse(cr, uid, ids)[0].order_id
         for so_agent_id in so_ref.sale_agent_ids:
-            inv_lines = self.pool.get('account.invoice.line').browse(cr, uid, res)
+            inv_lines = invoice_line_pool.browse(cr, uid, res, context=context)
             for inv_line in inv_lines:
-                if inv_line.product_id and inv_line.product_id.commission_exent != True:
+                if inv_line.product_id and inv_line.product_id.commission_exent is not True:
                     vals = {
                         'invoice_line_id': inv_line.id,
                         'agent_id': so_agent_id.agent_id.id,
                         'commission_id': so_agent_id.commission_id.id,
                         'settled': False
                     }
-                    line_agent_id=self.pool.get('invoice.line.agent').create(cr, uid, vals)
-                    self.pool.get('invoice.line.agent').calculate_commission(cr, uid, [line_agent_id])
+                    line_agent_id = invoice_line_agent_pool.create(cr, uid, vals, context=context)
+                    invoice_line_agent_pool.calculate_commission(cr, uid, [line_agent_id], context=context)
         return res
-
-sale_order_line()
-
-
-

=== modified file 'sale_commission/settled.py'
--- sale_commission/settled.py	2012-07-13 10:51:04 +0000
+++ sale_commission/settled.py	2013-12-16 22:11:05 +0000
@@ -22,63 +22,55 @@
 
 """Objetos sobre las liquidación"""
 
-from osv import fields, osv
+from osv import fields, orm, osv
 from tools.translate import _
 import time
 import tools
 
-class settled_wizard (osv.osv_memory):
+
+class settled_wizard (orm.TransientModel):
     """settled.wizard"""
-    
+
     _name = 'settled.wizard'
     _columns = {
-        #'settlement':fields.selection((('m', 'Monthly'),('t', 'Quarterly'),('s', 'Semiannual'),('a', 'Annual')), 'Settlement period', required=True),
-        'date_from':fields.date ('From',required=True),
-        'date_to':fields.date ('To',required=True),
-
+        'date_from': fields.date('From', required=True),
+        'date_to': fields.date('To', required=True),
     }
     _defaults = {
     }
 
     def settlement_exec(self, cr, uid, ids, context=None):
         """se ejecuta correctamente desde dos."""
+        if context is None:
+            context = {}
+        pool_liq = self.pool.get('settlement')
         for o in self.browse(cr, uid, ids, context=context):
-
-            pool_liq = self.pool.get('settlement')
-            liq_id = pool_liq.search(cr, uid, [('date_to', '>=', o.date_from)])
-            
-            vals={
-                'name': o.date_from+ " // " + o.date_to,
-                'date_from':o.date_from,
-                'date_to':o.date_to
+            vals = {
+                'name': o.date_from + " // " + o.date_to,
+                'date_from': o.date_from,
+                'date_to': o.date_to
             }
-            liq_id = pool_liq.create(cr, uid, vals)
-            pool_liq.calcula(cr, uid, liq_id, context['active_ids'], o.date_from, o.date_to)
-
-
-        return {
-            'type': 'ir.actions.act_window_close',
-        }
-
-      
-    def action_cancel(self, cr, uid, ids, conect=None):
-        """CANCEL LIQUIDACIÓN"""
-        return {
-            'type': 'ir.actions.act_window_close',
-        }
-
-        
-
-settled_wizard()
-
-
-class recalculate_commision_wizard (osv.osv_memory):
+            liq_id = pool_liq.create(cr, uid, vals, context=context)
+            pool_liq.calcula(cr, uid, liq_id, context['active_ids'], o.date_from, o.date_to, context=context)
+
+        return {
+            'type': 'ir.actions.act_window_close',
+        }
+
+    def action_cancel(self, cr, uid, ids, connect=None, context=None):
+        """Cancel Liquidation"""
+        return {
+            'type': 'ir.actions.act_window_close',
+        }
+
+
+class recalculate_commision_wizard (orm.TransientModel):
     """settled.wizard"""
 
     _name = 'recalculate.commission.wizard'
     _columns = {
-        'date_from':fields.date ('From',required=True),
-        'date_to':fields.date ('To',required=True),
+        'date_from': fields.date('From', required=True),
+        'date_to': fields.date('To', required=True),
 
     }
     _defaults = {
@@ -86,115 +78,108 @@
 
     def recalculate_exec(self, cr, uid, ids, context=None):
         """se ejecuta correctamente desde dos."""
-        user = self.pool.get('res.users').browse(cr, uid, uid)
-
+        if context is None:
+            context = {}
+        user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
+        agent_pool = self.pool.get('invoice.line.agent')
         for o in self.browse(cr, uid, ids, context=context):
-
             sql = 'SELECT  invoice_line_agent.id FROM account_invoice_line ' \
-              'INNER JOIN invoice_line_agent ON invoice_line_agent.invoice_line_id=account_invoice_line.id ' \
-              'INNER JOIN account_invoice ON account_invoice_line.invoice_id = account_invoice.id ' \
-              'WHERE invoice_line_agent.agent_id in (' + ",".join(map(str, context['active_ids'])) + ') AND invoice_line_agent.settled=False ' \
-              'AND account_invoice.state<>\'draft\' AND account_invoice.type=\'out_invoice\''\
-              'AND account_invoice.date_invoice >= \'' + o.date_from + '\' AND account_invoice.date_invoice <= \'' + o.date_to +'\''\
-              ' AND account_invoice.company_id = ' + str(user.company_id.id)
-
+                  'INNER JOIN invoice_line_agent ON invoice_line_agent.invoice_line_id=account_invoice_line.id ' \
+                  'INNER JOIN account_invoice ON account_invoice_line.invoice_id = account_invoice.id ' \
+                  'WHERE invoice_line_agent.agent_id in (' + ",".join(map(str, context['active_ids'])) + ') ' \
+                  'AND invoice_line_agent.settled=False ' \
+                  'AND account_invoice.state<>\'draft\' AND account_invoice.type=\'out_invoice\'' \
+                  'AND account_invoice.date_invoice >= \'' + o.date_from + '\' ' \
+                  'AND account_invoice.date_invoice <= \'' + o.date_to + '\' ' \
+                  'AND account_invoice.company_id = ' + str(user.company_id.id)
             cr.execute(sql)
             res = cr.fetchall()
             inv_line_agent_ids = [x[0] for x in res]
-
-            self.pool.get ('invoice.line.agent').calculate_commission( cr, uid, inv_line_agent_ids)
-
-
-        return {
-            'type': 'ir.actions.act_window_close',
-        }
-
-
-    def action_cancel(self, cr, uid, ids, conect=None):
-        """CANCEL CALCULATE"""
-        return {
-            'type': 'ir.actions.act_window_close',
-        }
-
-
-
-recalculate_commision_wizard()
-
-
-
-
-class settlement (osv.osv):
-    """Objeto Liquidación"""
+            agent_pool.calculate_commission(cr, uid, inv_line_agent_ids, context=context)
+        return {
+            'type': 'ir.actions.act_window_close',
+        }
+
+    def action_cancel(self, cr, uid, ids, connect=None, context=None):
+        """Cancel Calculation"""
+        return {
+            'type': 'ir.actions.act_window_close',
+        }
+
+
+class settlement (orm.Model):
+    """Object Liquidation"""
 
     _name = 'settlement'
     _columns = {
         'name': fields.char('Settlement period', size=64, required=True, readonly=True),
         'total': fields.float('Total', readonly=True),
-        'date_from':fields.date('From'),
-        'date_to':fields.date('To'),
+        'date_from': fields.date('From'),
+        'date_to': fields.date('To'),
         'settlement_agent_id': fields.one2many('settlement.agent', 'settlement_id', 'Settlement agents', readonly=True),
         'date': fields.datetime('Created Date', required=True),
-        'state': fields.selection([('invoiced', 'Invoiced'),('settled', 'Settled'), ('cancel', 'Cancel')], 'State', required=True, readonly=True)
+        'state': fields.selection([('invoiced', 'Invoiced'), ('settled', 'Settled'), ('cancel', 'Cancel')], 'State',
+                                  required=True, readonly=True)
     }
     _defaults = {
         'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
-        'state': lambda *a: 'settled'
+        'state': 'settled'
     }
 
     def action_invoice_create(self, cursor, user, ids, journal_id, product_id, context=None):
-
-        agents_pool=self.pool.get('settlement.agent')
-        res={}
+        if context is None:
+            context = {}
+        agents_pool = self.pool.get('settlement.agent')
+        res = {}
         for settlement in self.browse(cursor, user, ids, context=context):
             settlement_agent_ids = map(lambda x: x.id, settlement.settlement_agent_id)
-            invoices_agent = agents_pool.action_invoice_create(cursor, user, settlement_agent_ids, journal_id, product_id)
-
+            invoices_agent = agents_pool.action_invoice_create(cursor, user, settlement_agent_ids, journal_id,
+                                                               product_id, context=context)
             res[settlement.id] = invoices_agent.values()
         return res
 
-            
-
-
-    def calcula(self, cr, uid, ids, agent_ids, date_from, date_to):
+    def calcula(self, cr, uid, ids, agent_ids, date_from, date_to, context=None):
         """genera una entrada de liquidación por agente"""
-
          # Busca todas las líneas de liquidación facturadas en un período
-        pool_agent = self.pool.get('sale.agent')
-        agents = pool_agent.browse(cr, uid, agent_ids)
+        if context is None:
+            context = {}
+        sale_agent_pool = self.pool.get('sale.agent')
+        settlement_agent_pool = self.pool.get('settlement.agent')
+        agents = sale_agent_pool.browse(cr, uid, agent_ids, context=context)
         total = 0
         for agent in agents:
             # genera una entrada de liquidación por agente
-            liq_agent_id = self.pool.get('settlement.agent').create(cr, uid, {'agent_id': agent.id, 'settlement_id': ids})
-            self.pool.get('settlement.agent').calcula(cr, uid, liq_agent_id, date_from, date_to)
-            liq_agent = self.pool.get('settlement.agent').browse(cr, uid, liq_agent_id)
+            liq_agent_id = settlement_agent_pool.create(cr, uid, {'agent_id': agent.id, 'settlement_id': ids},
+                                                        context=context)
+            settlement_agent_pool.calcula(cr, uid, liq_agent_id, date_from, date_to, context=context)
+            liq_agent = settlement_agent_pool.browse(cr, uid, liq_agent_id, context=context)
             total = total + liq_agent.total
-            
-        return self.write (cr, uid, ids, {'total': total})
+        return self.write(cr, uid, ids, {'total': total}, context=context)
 
     def action_cancel(self, cr, uid, ids, context=None):
-        """Cancela la liquidación"""
-        if context is None: context={}
-        for settle in self.browse(cr, uid, ids):
+        """Cancel the liquidation"""
+        if context is None:
+            context = {}
+        agent_pool = self.pool.get('invoice.line.agent')
+        for settle in self.browse(cr, uid, ids, context=context):
             for settle_line in settle.settlement_agent_id:
                 for line in settle_line.lines:
                     commission_ids = line.invoice_line_id and [x.id for x in line.invoice_line_id.commission_ids] or []
                     if commission_ids:
-                        self.pool.get('invoice.line.agent').write(cr, uid, commission_ids, {'settled': False, 'quantity': 0.0})
-
-        return self.write(cr, uid, ids, {'state': 'cancel'})
+                        agent_pool.write(cr, uid, commission_ids, {'settled': False, 'quantity': 0.0}, context=context)
+        return self.write(cr, uid, ids, {'state': 'cancel'}, context=context)
 
     def unlink(self, cr, uid, ids, context=None):
         """permite borrar liquidaciones canceladas"""
-        for settle in self.browse(cr, uid, ids):
+        if context is None:
+            context = {}
+        for settle in self.browse(cr, uid, ids, context=context):
             if settle.state != 'cancel':
                 raise osv.except_osv(_('Error!'), _("You can\'t delete it, if it isn't in cancel state."))
-
         return super(settlement, self).unlink(cr, uid, ids, context=context)
 
-settlement()
-
-
-class settlement_agent (osv.osv):
+
+class settlement_agent (orm.Model):
     """Liquidaciones de Agentes"""
 
     _name = 'settlement.agent'
@@ -203,19 +188,18 @@
         '''Call after the creation of the invoice line'''
         return
 
-    def _get_address_invoice(self, cursor, user, settlement):
+    def _get_address_invoice(self, cr, uid, settlement, context=None):
         '''Return {'contact': address, 'invoice': address} for invoice'''
+        if context is None:
+            context = {}
         partner_obj = self.pool.get('res.partner')
         partner = settlement.agent_id.partner_id
-
-        return partner_obj.address_get(cursor, user, [partner.id],
-                ['contact', 'invoice'])
-
-    def _invoice_hook(self, cursor, user, picking, invoice_id):
+        return partner_obj.address_get(cr, uid, [partner.id], ['contact', 'invoice'], context=context)
+
+    def _invoice_hook(self, cr, uid, picking, invoice_id, context=None):
         '''Call after the creation of the invoice'''
         return
 
-    
     _columns = {
         'agent_id': fields.many2one('sale.agent', 'Agent', required=True, select=1),
         'total_per': fields.float('Total percentages', readonly=True),
@@ -226,74 +210,61 @@
         'settlement_id': fields.many2one('settlement', 'Settlement', required=True, ondelete="cascade")
     }
 
-
-
-    def get_currency_id(self, cursor, user, picking):
+    def get_currency_id(self, cr, uid, picking, context=None):
         return False
 
-
-    def action_invoice_create(self, cursor, user, ids, journal_id, product_id, context=None):
+    def action_invoice_create(self, cr, uid, ids, journal_id, product_id, context=None):
         '''Return ids of created invoices for the settlements'''
-
+        if context is None:
+            context = {}
         invoice_obj = self.pool.get('account.invoice')
         invoice_line_obj = self.pool.get('account.invoice.line')
-        invoices_group = {}
+        product_pool = self.pool.get('product.product')
+        account_fiscal_position_pool = self.pool.get('account.fiscal.position')
         res = {}
-
-        for settlement in self.browse(cursor, user, ids, context=context):
-
+        for settlement in self.browse(cr, uid, ids, context=context):
             payment_term_id = False
             partner = settlement.agent_id and settlement.agent_id.partner_id
             if not partner:
                 raise osv.except_osv(_('Error, partner fail !'),
-                    _('Agent to settle hasn\'t assigned partner.'))
-
+                                     _('Agent to settle hasn\'t assigned partner.'))
            #El tipo es de facura de proveedor
             account_id = partner.property_account_payable.id
-
             address_contact_id, address_invoice_id = \
-                    self._get_address_invoice(cursor, user, settlement).values()
-
+                self._get_address_invoice(cr, uid, settlement, context=context).values()
             # No se agrupa
-
             invoice_vals = {
                 'name': settlement.settlement_id.name,
-                'origin': (settlement.settlement_id.name or '') ,
+                'origin': (settlement.settlement_id.name or ''),
                 'type': 'in_invoice',
                 'account_id': account_id,
                 'partner_id': partner.id,
                 'address_invoice_id': address_invoice_id,
                 'address_contact_id': address_contact_id,
-                #'comment': comment,
                 'payment_term': payment_term_id,
                 'fiscal_position': partner.property_account_position.id
-                }
-            cur_id = self.get_currency_id(cursor, user, settlement)
+            }
+            cur_id = self.get_currency_id(cr, uid, settlement, context=context)
             if cur_id:
                 invoice_vals['currency_id'] = cur_id
             if journal_id:
                 invoice_vals['journal_id'] = journal_id
-            invoice_id = invoice_obj.create(cursor, user, invoice_vals,
-                    context=context)
-
-
+            invoice_id = invoice_obj.create(cr, uid, invoice_vals, context=context)
             res[settlement.id] = invoice_id
             # El producto se selecciona en el wizard correspondiente
-            product = self.pool.get('product.product').browse(cursor,user,product_id)
+            product = product_pool.browse(cr, uid, product_id, context=context)
             account_id = product.product_tmpl_id.property_account_expense.id
             if not account_id:
                 account_id = product.categ_id.property_account_expense_categ.id
             # Cálculo de los impuestos a aplicar
-
             taxes = product.supplier_taxes_id
-
             # se añade la retención seleccionada de la ficha del agente
             if settlement.agent_id and settlement.agent_id.retention_id:
                 taxes.append(settlement.agent_id.retention_id)
-            if  settlement.agent_id and settlement.agent_id.partner_id:
-                 tax_ids = self.pool.get('account.fiscal.position').map_tax(
-                    cursor,
-                    user,
+            if settlement.agent_id and settlement.agent_id.partner_id:
+                tax_ids = self.pool.get('account.fiscal.position').map_tax(
+                    cr,
+                    uid,
                     settlement.agent_id.partner_id.property_account_position,
                     taxes
                 )
@@ -304,12 +275,12 @@
                 name = invoice.invoice_number
                 price_unit = invoice.settled_amount
                 discount = 0
-
                 #set UoS if it's a sale and the picking doesn't have one
-                uos_id =  False
-
-                account_id = self.pool.get('account.fiscal.position').map_account(cursor, user, partner.property_account_position, account_id)
-                invoice_line_id = invoice_line_obj.create(cursor, user, {
+                uos_id = False
+                account_id = account_fiscal_position_pool.map_account(cr, uid,
+                                                                      partner.property_account_position, account_id,
+                                                                      context=context)
+                invoice_line_id = invoice_line_obj.create(cr, uid, {
                     'name': name,
                     'origin': origin,
                     'invoice_id': invoice_id,
@@ -320,102 +291,108 @@
                     'discount': discount,
                     'quantity': 1,
                     'invoice_line_tax_id': [(6, 0, tax_ids)],
-                    #'account_analytic_id': account_analytic_id,
-                    }, context=context)
-                self._invoice_line_hook(cursor, user, invoice, invoice_line_id)
-
-            invoice_obj.button_compute(cursor, user, [invoice_id], context=context,
-                    set_total=(type in ('in_invoice', 'in_refund')))
-            self._invoice_hook(cursor, user, settlement, invoice_id)
+                }, context=context)
+                self._invoice_line_hook(cr, uid, invoice, invoice_line_id, context=context)
+            invoice_obj.button_compute(cr, uid, [invoice_id], context=context,
+                                       set_total=(type in ('in_invoice', 'in_refund')))
+            self._invoice_hook(cr, uid, settlement, invoice_id, context=context)
         return res
 
-    def calcula(self, cr, uid, ids, date_from, date_to):
-        set_agent = self.browse(cr, uid, ids)
-        user = self.pool.get('res.users').browse(cr, uid, uid)
+    def calcula(self, cr, uid, ids, date_from, date_to, context=None):
+        if context is None:
+            context = {}
+        settlement_line_pool = self.pool.get('settlement.line')
+        invoice_line_agent_pool = self.pool.get('invoice.line.agent')
+        set_agent = self.browse(cr, uid, ids, context=context)
+        user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
         # Recalculamos todas las lineas sujetas a comision
-
         sql = 'SELECT  invoice_line_agent.id FROM account_invoice_line ' \
               'INNER JOIN invoice_line_agent ON invoice_line_agent.invoice_line_id=account_invoice_line.id ' \
               'INNER JOIN account_invoice ON account_invoice_line.invoice_id = account_invoice.id ' \
-              'WHERE invoice_line_agent.agent_id=' + str(set_agent.agent_id.id) + ' AND invoice_line_agent.settled=True ' \
+              'WHERE invoice_line_agent.agent_id=' + str(set_agent.agent_id.id) + ' ' \
+              'AND invoice_line_agent.settled=True ' \
               'AND account_invoice.state<>\'draft\' AND account_invoice.type=\'out_invoice\''\
-              'AND account_invoice.date_invoice >= \'' + date_from + '\' AND account_invoice.date_invoice <= \'' + date_to +'\''\
-              ' AND account_invoice.company_id = ' + str(user.company_id.id)
-
+              'AND account_invoice.date_invoice >= \'' + date_from + '\' ' \
+              'AND account_invoice.date_invoice <= \'' + date_to + '\' ' \
+              'AND account_invoice.company_id = ' + str(user.company_id.id)
         cr.execute(sql)
         res = cr.fetchall()
         inv_line_agent_ids = [x[0] for x in res]
-
-        self.pool.get ('invoice.line.agent').calculate_commission( cr, uid, inv_line_agent_ids)
-
+        invoice_line_agent_pool .calculate_commission(cr, uid, inv_line_agent_ids, context=context)
         sql = 'SELECT  account_invoice_line.id FROM account_invoice_line ' \
               'INNER JOIN invoice_line_agent ON invoice_line_agent.invoice_line_id=account_invoice_line.id ' \
               'INNER JOIN account_invoice ON account_invoice_line.invoice_id = account_invoice.id ' \
-              'WHERE invoice_line_agent.agent_id=' + str(set_agent.agent_id.id) + ' AND invoice_line_agent.settled=False ' \
-              'AND account_invoice.state<>\'draft\' AND account_invoice.type=\'out_invoice\''\
-              'AND account_invoice.date_invoice >= \'' + date_from + '\' AND account_invoice.date_invoice <= \'' + date_to +'\''\
-              ' AND account_invoice.company_id = ' + str(user.company_id.id)
-       
+              'WHERE invoice_line_agent.agent_id=' + str(set_agent.agent_id.id) + ' ' \
+              'AND invoice_line_agent.settled=False ' \
+              'AND account_invoice.state<>\'draft\' AND account_invoice.type=\'out_invoice\'' \
+              'AND account_invoice.date_invoice >= \'' + date_from + '\' ' \
+              'AND account_invoice.date_invoice <= \'' + date_to + '\' ' \
+              'AND account_invoice.company_id = ' + str(user.company_id.id)
         cr.execute(sql)
         res = cr.fetchall()
         inv_line_ids = [x[0] for x in res]
         total_per = 0
         total_sections = 0
-        total = 0
         sections = {}
         for inv_line_id in inv_line_ids:
-            linea_id = self.pool.get('settlement.line').create(cr, uid, {'invoice_line_id': inv_line_id, 'settlement_agent_id': ids})
-            self.pool.get('settlement.line').calcula(cr, uid, linea_id)
-
-            line = self.pool.get('settlement.line').browse(cr, uid, linea_id)
-
+            linea_id = settlement_line_pool.create(cr, uid,
+                                                   {'invoice_line_id': inv_line_id, 'settlement_agent_id': ids},
+                                                   context=context)
+            settlement_line_pool.calcula(cr, uid, linea_id, context=context)
+            line = settlement_line_pool.browse(cr, uid, linea_id, context=context)
             # Marca la comision en la factura como liquidada y establece la cantidad
             # Si es por tramos la cantidad será cero, pero se reflejará sobre el tramo del Agente
-            
-
             if line.commission_id.type == "fijo":
                 total_per = total_per + line.commission
-                inv_ag_ids = self.pool.get('invoice.line.agent').search(cr, uid, [('invoice_line_id', '=', inv_line_id), ('agent_id', '=', set_agent.agent_id.id)])
-                self.pool.get('invoice.line.agent').write(cr, uid, inv_ag_ids, {'settled': True, 'quantity': line.commission})
-            if line.commission_id.type == "tramos":
-                if line.invoice_line_id.product_id.commission_exent != True:
-                    # Hacemos un agregado de la base de cálculo agrupándolo por las distintas comisiones en tramos que tenga el agente asignadas
-                    if  line.commission_id.id in sections:
-                        sections[line.commission_id.id]['base'] = sections[line.commission_id.id]['base'] + line.invoice_line_id.price_subtotal
-                        sections[line.commission_id.id]['lines'].append(line)                   # Añade la línea de la que se añade esta base para el cálculo por tramos
-                    else:
-                        sections[line.commission_id.id] = {'type': line.commission_id, 'base':line.invoice_line_id.price_subtotal, 'lines':[line]}
-
-        #Tramos para cada tipo de comisión creados 
-
+                inv_ag_ids = invoice_line_agent_pool.search(cr, uid, [('invoice_line_id', '=', inv_line_id),
+                                                                      ('agent_id', '=', set_agent.agent_id.id)],
+                                                            context=context)
+                invoice_line_agent_pool.write(cr, uid, inv_ag_ids, {'settled': True, 'quantity': line.commission},
+                                              context=context)
+            if line.commission_id.type == "tramos" and not line.invoice_line_id.product_id.commission_exent:
+                # Hacemos un agregado de la base de cálculo agrupándolo por las distintas comisiones en tramos que
+                # tenga el agente asignadas
+                if line.commission_id.id in sections:
+                    sections[line.commission_id.id]['base'] = (sections[line.commission_id.id]['base'] +
+                                                               line.invoice_line_id.price_subtotal)
+                    # Añade la línea de la que se añade esta base para el cálculo por tramos
+                    sections[line.commission_id.id]['lines'].append(line)
+                else:
+                    sections[line.commission_id.id] = {'type': line.commission_id,
+                                                       'base': line.invoice_line_id.price_subtotal,
+                                                       'lines': [line]}
+        #Tramos para cada tipo de comisión creados
         for tramo in sections:
             #Cálculo de la comisión  para cada tramo
             sections[tramo].update({'commission': sections[tramo]['type'].calcula_tramos(sections[tramo]['base'])})
-            total_sections = total_sections+sections[tramo]['commission']
+            total_sections = total_sections + sections[tramo]['commission']
             # reparto de la comisión para cada linea
-            
-            for linea_tramo in  sections[tramo]['lines']:
-                com_por_linea = sections[tramo]['commission']* (linea_tramo.invoice_line_id.price_subtotal/sections[tramo]['base'])
-                linea_tramo.write({'commission':com_por_linea})
-                inv_ag_ids = self.pool.get('invoice.line.agent').search(cr, uid, [('invoice_line_id', '=', linea_tramo.invoice_line_id.id), ('agent_id', '=', set_agent.agent_id.id)])
-                self.pool.get('invoice.line.agent').write(cr, uid, inv_ag_ids, {'settled': True, 'quantity': com_por_linea})
-            
-
+            for linea_tramo in sections[tramo]['lines']:
+                com_por_linea = (sections[tramo]['commission'] *
+                                 (linea_tramo.invoice_line_id.price_subtotal / sections[tramo]['base']))
+                linea_tramo.write({'commission': com_por_linea})
+                inv_ag_ids = invoice_line_agent_pool.search(cr, uid, [
+                    ('invoice_line_id', '=', linea_tramo.invoice_line_id.id),
+                    ('agent_id', '=', set_agent.agent_id.id)
+                ], context=context)
+                invoice_line_agent_pool.write(cr, uid, inv_ag_ids, {'settled': True, 'quantity': com_por_linea},
+                                              context=context)
         total = total_per + total_sections
-        self.write (cr, uid, ids, {'total_per': total_per, 'total_sections': total_sections, 'total': total})
-
-settlement_agent()
-
-class settlement_line (osv.osv):
+        self.write(cr, uid, ids, {'total_per': total_per, 'total_sections': total_sections, 'total': total},
+                   context=context)
+
+
+class settlement_line (orm.Model):
     """Línea de las liquidaciones de los agentes
-     Una línea por línea de factura 
+     Una línea por línea de factura
     """
-
     _name = 'settlement.line'
     _columns = {
-        'invoice_id':fields.related('invoice_line_id', 'invoice_id', type='many2one', relation='account.invoice', string='Invoice'),
-        'invoice_date':fields.related('invoice_id','date_invoice', type='date', readonly=True, string='Invoice Date'),
-        'settlement_agent_id': fields.many2one('settlement.agent', 'Settlement agent', required=True, select=1, ondelete="cascade"),
+        'invoice_id': fields.related('invoice_line_id', 'invoice_id', type='many2one', relation='account.invoice',
+                                     string='Invoice'),
+        'invoice_date': fields.related('invoice_id', 'date_invoice', type='date', readonly=True, string='Invoice Date'),
+        'settlement_agent_id': fields.many2one('settlement.agent', 'Settlement agent', required=True, select=1,
+                                               ondelete="cascade"),
         'invoice_line_id': fields.many2one('account.invoice.line', 'Settled invoice line', required=True),
         'amount': fields.float('Invoice line amount', readonly=True),
         'currency_id': fields.many2one('res.currency', 'Currency', readonly=True),
@@ -424,65 +401,74 @@
     }
 
     _defaults = {
-        'currency_id': lambda self,cr,uid,context: self.pool.get('res.users').browse(cr, uid, uid).company_id.currency_id.id
+        'currency_id': (lambda self, cr, uid, context:
+                        self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id.currency_id.id)
     }
 
-    def calcula(self, cr, uid, ids):
-        line = self.browse(cr, uid, ids)
-        amount=0
-        user = self.pool.get('res.users').browse(cr, uid, uid)
-
-        for commission in line.invoice_line_id.commission_ids:  # Recorre los agentes y condiciones asignados a la factura
-            if commission.agent_id.id == line.settlement_agent_id.agent_id.id: # selecciona el asignado al agente para el que está liquidando
+    def calcula(self, cr, uid, ids, context=None):
+        if context is None:
+            context = {}
+        currency_pool = self.pool.get('res.currency')
+        line = self.browse(cr, uid, ids, context=context)
+        amount = 0
+        user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
+        # Recorre los agentes y condiciones asignados a la factura
+        for commission in line.invoice_line_id.commission_ids:
+            # selecciona el asignado al agente para el que está liquidando
+            if commission.agent_id.id == line.settlement_agent_id.agent_id.id:
                 commission_app = commission.commission_id                                     # Obtiene el objeto
                 invoice_line_amount = line.invoice_line_id.price_subtotal
-                if commission_app.type=="fijo":
+                if commission_app.type == "fijo":
                     commission_per = commission_app.fix_qty
                     amount = amount + line.invoice_line_id.price_subtotal * float(commission_per) / 100
-
-                elif commission_app.type=="tramos":
+                elif commission_app.type == "tramos":
                     invoice_line_amount = 0
                     amount = 0
-
-                cc_amount_subtotal = line.invoice_id.currency_id.id != user.company_id.currency_id.id and self.pool.get('res.currency').compute(cr, uid, line.invoice_id.currency_id.id, user.company_id.currency_id.id, invoice_line_amount, round = False) or invoice_line_amount
-                cc_commission_amount = line.invoice_id.currency_id.id != user.company_id.currency_id.id and self.pool.get('res.currency').compute(cr, uid, line.invoice_id.currency_id.id, user.company_id.currency_id.id, amount, round = False) or amount
-
-                self.write(cr, uid, ids, {'amount': cc_amount_subtotal, 'commission_id': commission_app.id, 'commission': cc_commission_amount, 'currency_id': user.company_id.currency_id.id})
-
-settlement_line()
-
-
-
-class settled_invoice_agent(osv.osv):
+                cc_amount_subtotal = (line.invoice_id.currency_id.id != user.company_id.currency_id.id and
+                                      currency_pool.compute(cr, uid, line.invoice_id.currency_id.id,
+                                                            user.company_id.currency_id.id, invoice_line_amount,
+                                                            round=False, context=context) or
+                                      invoice_line_amount)
+                cc_commission_amount = (line.invoice_id.currency_id.id != user.company_id.currency_id.id and
+                                        currency_pool.compute(cr, uid, line.invoice_id.currency_id.id,
+                                                              user.company_id.currency_id.id, amount, round=False,
+                                                              context=context) or
+                                        amount)
+                self.write(cr, uid, ids, {'amount': cc_amount_subtotal,
+                                          'commission_id': commission_app.id,
+                                          'commission': cc_commission_amount,
+                                          'currency_id': user.company_id.currency_id.id})
+
+
+class settled_invoice_agent(orm.Model):
     _name = "settled.invoice.agent"
     _description = "Resumen de facturas liquidadas"
     _auto = False
     _columns = {
-        'agent_id':fields.many2one('sale.agent', 'Agent', readonly=True, select=1),
+        'agent_id': fields.many2one('sale.agent', 'Agent', readonly=True, select=1),
         'invoice_id': fields.many2one('account.invoice', 'Invoice', readonly=True, select=1),
-        'settlement_agent_id': fields.many2one('settlement.agent', 'Agent settl.', readonly=True, select=1, ondelete="cascade"),
-        'invoice_number':fields.related('invoice_id', 'number', type='char', string='Invoice no', readonly=True ),
-        'invoice_date':fields.related('invoice_id', 'date_invoice', string ='Invoice date', type='date', readonly=True, select=1 ),
-        'invoice_amount':fields.float( 'Amount assigned in invoice', readonly=True),
-        'settled_amount':fields.float('Settled amount', readonly=True),
-        #'currency_id': fields.many2one('res.currency', 'Currency', readonly=True, select="1")
+        'settlement_agent_id': fields.many2one('settlement.agent', 'Agent settl.', readonly=True, select=1,
+                                               ondelete="cascade"),
+        'invoice_number': fields.related('invoice_id', 'number', type='char', string='Invoice no', readonly=True),
+        'invoice_date': fields.related('invoice_id', 'date_invoice', string='Invoice date', type='date', readonly=True,
+                                       select=1),
+        'invoice_amount': fields.float('Amount assigned in invoice', readonly=True),
+        'settled_amount': fields.float('Settled amount', readonly=True),
     }
 
-
     def init(self, cr):
-        tools.sql.drop_view_if_exists(cr,  "settled_invoice_agent")
-        
+        tools.sql.drop_view_if_exists(cr, "settled_invoice_agent", )
         cr.execute("""
             create or replace view settled_invoice_agent as (
-            SELECT  (account_invoice_line.invoice_id*10000+settlement_agent.agent_id) as id, settlement_agent.id as settlement_agent_id,
-            account_invoice_line.invoice_id as invoice_id, settlement_agent.agent_id as agent_id,
-            sum(settlement_line.amount) as invoice_amount,
-            sum(settlement_line.commission) as settled_amount
+            SELECT (account_invoice_line.invoice_id*10000+settlement_agent.agent_id) as id,
+                    settlement_agent.id as settlement_agent_id,
+                    account_invoice_line.invoice_id as invoice_id,
+                    settlement_agent.agent_id as agent_id,
+                    sum(settlement_line.amount) as invoice_amount,
+                    sum(settlement_line.commission) as settled_amount
             FROM settlement_agent
               INNER JOIN settlement_line ON settlement_agent.id = settlement_line.settlement_agent_id
               INNER JOIN account_invoice_line ON account_invoice_line.id = settlement_line.invoice_line_id
               GROUP BY account_invoice_line.invoice_id, settlement_agent.agent_id, settlement_agent.id
 
            )""")
-
-settled_invoice_agent()

=== modified file 'sale_commission/stock_picking.py'
--- sale_commission/stock_picking.py	2012-07-13 10:51:04 +0000
+++ sale_commission/stock_picking.py	2013-12-16 22:11:05 +0000
@@ -22,44 +22,41 @@
 
 """Modificamos la creación de factura desde albarán para incluir el comportamiento de comisiones"""
 
-from osv import osv, fields
-
-class product_product(osv.osv):
+from osv import orm, fields
+
+
+class product_product(orm.Model):
     _inherit = 'product.product'
-
     _columns = {
-        'commission_exent':fields.boolean('Commission exent')
+        'commission_exent': fields.boolean('Commission exent')
     }
     _defaults = {
-        'commission_exent': lambda *a: False,
+        'commission_exent': False,
     }
-product_product()
-
-class stock_picking(osv.osv):
+
+
+class stock_picking(orm.Model):
     """Modificamos la creación de factura desde albarán para incluir el comportamiento de comisiones"""
 
     _inherit = 'stock.picking'
-
     _columns = {
-        'agent_ids':fields.many2many('sale.agent','sale_agent_clinic_rel', 'agent_id', 'clinic_id', 'Agentes' )
+        'agent_ids': fields.many2many('sale.agent', 'sale_agent_clinic_rel', 'agent_id', 'clinic_id', 'Agentes')
     }
 
-    def _invoice_line_hook(self, cursor, user, move_line, invoice_line_id):
+    def _invoice_line_hook(self, cr, uid, move_line, invoice_line_id, context=None):
         '''Call after the creation of the invoice line'''
-        super(stock_picking, self)._invoice_line_hook(cursor, user, move_line, invoice_line_id)
-
-        if move_line and move_line.sale_line_id and move_line.sale_line_id.product_id.commission_exent != True :
+        if context is None:
+            context = {}
+        agent_pool = self.pool.get('invoice.line.agent')
+        super(stock_picking, self)._invoice_line_hook(cr, uid, move_line, invoice_line_id, context=context)
+        if move_line and move_line.sale_line_id and not move_line.sale_line_id.product_id.commission_exent:
             so_ref = move_line.sale_line_id.order_id
             for so_agent_id in so_ref.sale_agent_ids:
                 vals = {
-                        'invoice_line_id': invoice_line_id,
-                        'agent_id': so_agent_id.agent_id.id,
-                        'commission_id': so_agent_id.commission_id.id,
-                        'settled': False
-                    }
-
-                line_agent_id=self.pool.get('invoice.line.agent').create(cursor, user, vals)
-                self.pool.get('invoice.line.agent').calculate_commission(cursor, user, [line_agent_id])
-        return
-
-stock_picking()
\ No newline at end of file
+                    'invoice_line_id': invoice_line_id,
+                    'agent_id': so_agent_id.agent_id.id,
+                    'commission_id': so_agent_id.commission_id.id,
+                    'settled': False
+                }
+                line_agent_id = agent_pool.create(cr, uid, vals, context=context)
+                agent_pool.calculate_commission(cr, uid, [line_agent_id], context=context)

=== modified file 'sale_commission/wizard/__init__.py'
--- sale_commission/wizard/__init__.py	2012-07-13 10:51:04 +0000
+++ sale_commission/wizard/__init__.py	2013-12-16 22:11:05 +0000
@@ -20,4 +20,4 @@
 #
 ##############################################################################
 
-import wizard_invoice
\ No newline at end of file
+import wizard_invoice

=== modified file 'sale_commission/wizard/wizard_invoice.py'
--- sale_commission/wizard/wizard_invoice.py	2012-07-13 10:51:04 +0000
+++ sale_commission/wizard/wizard_invoice.py	2013-12-16 22:11:05 +0000
@@ -20,49 +20,38 @@
 #
 ##############################################################################
 
-from osv import fields, osv
+from osv import fields, orm, osv
 from tools.translate import _
 
-class settled_invoice_wizard (osv.osv_memory):
+
+class settled_invoice_wizard (orm.TransientModel):
     """settled.invoice.wizard"""
 
     _name = 'settled.invoice.wizard'
     _columns = {
-        'journal_id':fields.many2one('account.journal', 'Target journal', required=True, select=1),
-        'product_id':fields.many2one('product.product', 'Product for account', required=True, select=1),
+        'journal_id': fields.many2one('account.journal', 'Target journal', required=True, select=1),
+        'product_id': fields.many2one('product.product', 'Product for account', required=True, select=1),
     }
     _defaults = {
     }
 
-
-
     def create_invoice(self, cr, uid, ids, context=None):
         if context is None:
             context = {}
-
         data_pool = self.pool.get('ir.model.data')
         settlement_obj = self.pool.get('settlement')
-
         for o in self.browse(cr, uid, ids, context=context):
-            res = settlement_obj.action_invoice_create(cr, uid, context['active_ids'],
-                journal_id=o.journal_id.id, product_id=o.product_id.id, context=context)
-
+            res = settlement_obj.action_invoice_create(
+                cr, uid, context['active_ids'], journal_id=o.journal_id.id, product_id=o.product_id.id, context=context)
         invoice_ids = res.values()
-
-        action_model = False
         action = {}
         if not invoice_ids[0]:
             raise osv.except_osv(_('Error'), _('No Invoices were created'))
-
         #change state settlement
-        settlement_obj.write(cr, uid, context['active_ids'], {'state':'invoiced'})
-
-        action_model,action_id = data_pool.get_object_reference(cr, uid, 'account', "action_invoice_tree2")
-
+        settlement_obj.write(cr, uid, context['active_ids'], {'state': 'invoiced'}, context=context)
+        action_model, action_id = data_pool.get_object_reference(cr, uid, 'account', "action_invoice_tree2")
         if action_model:
             action_pool = self.pool.get(action_model)
             action = action_pool.read(cr, uid, action_id, context=context)
-            action['domain'] = "[('id','in', ["+','.join(map(str,invoice_ids[0]))+"])]"
+            action['domain'] = "[('id','in', [" + ','.join(map(str, invoice_ids[0])) + "])]"
         return action
-
-settled_invoice_wizard ()


Follow ups