savoirfairelinux-openerp team mailing list archive
-
savoirfairelinux-openerp team
-
Mailing list archive
-
Message #00705
[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