← Back to team overview

avanzosc team mailing list archive

Re: [Merge] lp:~dani-ds/avanzosc/dos_sale_commissioncalc into lp:~avanzosc-security-team/avanzosc/72horas

 

Review: Approve code review

Algunos cambios pequeños, pero que no son bloqueantes.

Un saludo.

Diff comments:

> === modified file 'dos_sale_commissioncalc/__init__.py'
> --- dos_sale_commissioncalc/__init__.py	2014-06-11 10:23:47 +0000
> +++ dos_sale_commissioncalc/__init__.py	2014-07-03 15:58:52 +0000
> @@ -20,15 +20,7 @@
>  #
>  ##############################################################################
>  
> -
> -import salecommissiontable
> -import salecommissionlines
> -import salezone
> -import saleagent
> -import partner
> -import invoice
> -import sale_order
> -import stock_picking
> -import report
> -import wizard
> +from . import models
> +from . import report
> +from . import wizard
>  
> 
> === modified file 'dos_sale_commissioncalc/__openerp__.py'
> --- dos_sale_commissioncalc/__openerp__.py	2014-06-11 10:23:47 +0000
> +++ dos_sale_commissioncalc/__openerp__.py	2014-07-03 15:58:52 +0000
> @@ -2,25 +2,24 @@
>  {
>      "name": "DOS Commission Calc",
>      "version": "1.0",
> -    "depends": ["base","product","account","sale","decimal_precision"],
> +    "depends": ["base", "product", "account", "sale"],
>      "author": "Diseño Operativo de Software S.L.",
>      "category": "Sale",
>      "description": """
>      Commission Calc
>      """,
> -    "init_xml": [],
> -    'update_xml': [
> -		'salecommissiontableview.xml',
> -		'salezone_view.xml',
> -		'saleagent_view.xml',
> -		'partner_view.xml', 
> -		'invoice_view.xml',
> -		'sale_commissions_view.xml',
> -		'sale_order_view.xml',
> -		'sale_commissions_report.xml',
> -		'wizard/dos_sale_commission_report_wizard.xml',
> -		'security/ir.model.access.csv',
> -	],
> +    'data': [
> +        'views/salecommissiontableview.xml',
> +        'views/salezone_view.xml',
> +        'views/saleagent_view.xml',
> +        'views/partner_view.xml',
> +        'views/invoice_view.xml',
> +        'views/sale_commissions_view.xml',
> +        'views/sale_order_view.xml',
> +        'reports/sale_commissions_report.xml',
> +        'wizard/dos_sale_commission_report_wizard.xml',
> +        'security/ir.model.access.csv',
> +    ],
>      'demo_xml': [],
>      'installable': True,
>      'active': False,
> 
> === added directory 'dos_sale_commissioncalc/models'
> === added file 'dos_sale_commissioncalc/models/__init__.py'
> --- dos_sale_commissioncalc/models/__init__.py	1970-01-01 00:00:00 +0000
> +++ dos_sale_commissioncalc/models/__init__.py	2014-07-03 15:58:52 +0000
> @@ -0,0 +1,30 @@
> +# -*- encoding: utf-8 -*-
> +##############################################################################
> +#
> +#    OpenERP, Open Source Management Solution
> +#    Copyright (C) 2004-2010 Tiny SPRL (http://tiny.be). All Rights Reserved
> +#
> +#
> +#    This program is free software: you can redistribute it and/or modify
> +#    it under the terms of the GNU General Public License as published by
> +#    the Free Software Foundation, either version 3 of the License, or
> +#    (at your option) any later version.
> +#
> +#    This program is distributed in the hope that it will be useful,
> +#    but WITHOUT ANY WARRANTY; without even the implied warranty of
> +#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +#    GNU General Public License for more details.
> +#
> +#    You should have received a copy of the GNU General Public License
> +#    along with this program.  If not, see http://www.gnu.org/licenses/.
> +#
> +##############################################################################
> +
> +from . import salecommissiontable
> +from . import salecommissionlines
> +from . import salezone
> +from . import saleagent
> +from . import partner
> +from . import invoice
> +from . import sale_order
> +from . import stock_picking
> 
> === renamed file 'dos_sale_commissioncalc/invoice.py' => 'dos_sale_commissioncalc/models/invoice.py'
> --- dos_sale_commissioncalc/invoice.py	2014-06-11 10:23:47 +0000
> +++ dos_sale_commissioncalc/models/invoice.py	2014-07-03 15:58:52 +0000
> @@ -19,78 +19,89 @@
>  #
>  ##############################################################################
>  
> -"""Inherit account_invoice to add commission settled and commission settled date"""
> -
> -from osv import osv, fields
> -from tools.translate import _
> -import decimal_precision as dp
> -
> -class account_invoice(osv.osv):
> -	"""Inherit account_invoice to add commission settled and commission settled date"""
> -
> -	_inherit = "account.invoice"
> -	
> -	def _get_agent_percentage_distribution_commission1(self, cr, uid, ids, prop, unknow_none, context=None):
> -		result = {}
> -		for inv in self.browse(cr, uid, ids, context=context):
> -			if inv.agent2_percentage_distribution_commission:
> -				result[inv.id] = 100.0 - inv.agent2_percentage_distribution_commission
> -			else:
> -				result[inv.id] = 100.0
> -		return result
> -	
> -	def _invoice_paid_date(self, cr, uid, ids, prop, unknow_none, context=None):
> -		""" Finds invoice paid date.
> -		@param prop: Name of field.
> -		@param unknow_none:
> -		@return: Dictionary of values.
> -		"""
> -		result = {}
> -		for inv in self.browse(cr, uid, ids, context=context):
> -			if inv.state == 'paid':
> -				result[inv.id] = inv.date_due
> -				for payment in inv.payment_ids:
> -					if payment.date > result[inv.id]:
> -						result[inv.id] = payment.date
> -			else:
> -				result[inv.id] = False
> -		return result
> -		
> -	_columns = {
> -		'decorator_discount': fields.float('Dto decorador'),
> -		'commission_total': fields.float('Total Commission'),
> -		'commission_settled_date': fields.datetime('Commission settled date'),
> -		'commission_settled': fields.boolean('Settled'),
> -		'agent_id': fields.many2one('sale.agent','Sales Agent'),
> -		'paid_date': fields.function(_invoice_paid_date, method=True, type='date', string='Paid Date'),
> -		'agent2_percentage_distribution_commission': fields.float('% Dist. Com. 2'),
> -		'agent1_percentage_distribution_commission': fields.function(_get_agent_percentage_distribution_commission1, method=True, type='float', string='% Dist. Com. 1'),
> -		'agent2_id': fields.many2one('sale.agent','Sales Agent 2'),
> -	}
> -	
> -	def onchange_agent_percentage_distribution_commission2(self, cr, uid, ids, agent2_percentage_distribution_commission):
> -		v = {}
> -		perc = 100
> -		if agent2_percentage_distribution_commission:
> -			perc = 100.0 - agent2_percentage_distribution_commission
> -			if perc < 0:
> -				perc = 0
> -			if perc > 100:
> -				perc = 100
> -		v['agent1_percentage_distribution_commission'] = perc
> -		return {'value': v}
> -	
> -	def onchange_partner_id(self, cr, uid, ids, type, partner_id, date_invoice=False, payment_term=False, partner_bank_id=False, company_id=False):
> -		res = super(account_invoice, self).onchange_partner_id(cr, uid, ids, type, partner_id, date_invoice=date_invoice, payment_term=payment_term, partner_bank_id=partner_bank_id, company_id=company_id)
> -		if not partner_id:
> -			res['value']['agent_id'] = False
> -			res['value']['agent2_id'] = False
> -			return res
> -		else:
> -			partner = self.pool.get('res.partner').browse(cr, uid, partner_id, context=None)
> -			res['value']['agent_id'] = partner.agent_id.id
> -			res['value']['agent2_id'] = False
> -			
> -		return res
> -		
> -account_invoice()
> \ No newline at end of file
> +
> +from openerp.orm import fields, orm
> +
> +
> +class AccountInvoice(orm.Model):
> +    """Inherit account_invoice to add commission settled
> +     and commission settled date"""
> +    _inherit = "account.invoice"
> +
> +    def _get_ag_pctage_dist_comm1(self, cr, uid,
> +                                  ids, prop, unknow_none, context=None):
> +        result = {}
> +        for inv in self.browse(cr, uid, ids, context=context):
> +            if inv.agent2_percentage_distribution_commission:
> +                inv_commision = inv.agent2_percentage_distribution_commission
> +                result[inv.id] = 100.0 - inv_commision
> +            else:
> +                result[inv.id] = 100.0
> +        return result
> +
> +    def _invoice_paid_date(self, cr, uid, ids, prop, unknow_none,
> +                           context=None):
> +        """ Finds invoice paid date.
> +        @param prop: Name of field.
> +        @param unknow_none:
> +        @return: Dictionary of values.
> +        """
> +        result = {}
> +        for inv in self.browse(cr, uid, ids, context=context):
> +            if inv.state == 'paid':
> +                result[inv.id] = inv.date_due
> +                for payment in inv.payment_ids:
> +                    if payment.date > result[inv.id]:
> +                        result[inv.id] = payment.date
> +            else:
> +                result[inv.id] = False
> +        return result
> +
> +    _columns = {
> +        'decorator_discount': fields.float('Dto decorador'),
> +        'commission_total': fields.float('Total Commission'),
> +        'commission_settled_date': fields.datetime('Commission settled date'),
> +        'commission_settled': fields.boolean('Settled'),
> +        'agent_id': fields.many2one('sale.agent', 'Sales Agent'),
> +        'paid_date': fields.function(_invoice_paid_date, method=True,
> +                                     type='date', string='Paid Date'),
> +        'agent2_percentage_distribution_commission': (
> +            fields.float('% Dist. Com. 2')),
> +        'agent1_percentage_distribution_commission': (
> +            fields.function(_get_ag_pctage_dist_comm1, method=True,
> +                            type='float', string='% Dist. Com. 1')),
> +        'agent2_id': fields.many2one('sale.agent', 'Sales Agent 2'),
> +    }
> +
> +    def onchange_ag_pctage_dist_comm2(
> +            self, cr, uid, ids, agent2_percentage_distribution_commission):
> +        v = {}
> +        perc = 100
> +        if agent2_percentage_distribution_commission:
> +            perc = 100.0 - agent2_percentage_distribution_commission
> +            if perc < 0:
> +                perc = 0
> +            if perc > 100:
> +                perc = 100
> +        v['agent1_percentage_distribution_commission'] = perc
> +        return {'value': v}
> +
> +    def onchange_partner_id(self, cr, uid, ids, type, partner_id,
> +                            date_invoice=False, payment_term=False,
> +                            partner_bank_id=False, company_id=False):
> +        res = super(AccountInvoice,
> +                    self).onchange_partner_id(cr, uid, ids, type, partner_id,
> +                                              date_invoice=date_invoice,
> +                                              payment_term=payment_term,
> +                                              partner_bank_id=partner_bank_id,
> +                                              company_id=company_id)
> +        if not partner_id:
> +            res['value']['agent_id'] = False
> +            res['value']['agent2_id'] = False
> +            return res
> +        else:
> +            partner = self.pool['res.partner'].browse(cr, uid, partner_id,
> +                                                      context=None)
> +            res['value']['agent_id'] = partner.agent_id.id
> +            res['value']['agent2_id'] = False
> +        return res
> 
> === renamed file 'dos_sale_commissioncalc/partner.py' => 'dos_sale_commissioncalc/models/partner.py'
> --- dos_sale_commissioncalc/partner.py	2014-06-11 10:23:47 +0000
> +++ dos_sale_commissioncalc/models/partner.py	2014-07-03 15:58:52 +0000
> @@ -19,46 +19,38 @@
>  #
>  ##############################################################################
>  
> -from osv import fields,osv
> -
> -class res_partner(osv.osv):
> -	_name = "res.partner"
> -	_description = "Sale agent sale info"
> -	_inherit = "res.partner"
> -	
> -	def _check_permissions(self, cr, uid, ids, field_name, arg, context):
> -		res = {}
> -
> -		for i in ids:
> -			if not i:
> -				continue
> -
> -			# Get the HR Officer/Manager id's
> -			group_obj = self.pool.get('res.groups')
> -			manager_ids = group_obj.search(cr, uid, [('name','=', 'Sales / Manager')])
> -			# Get the user and see what groups he/she is in
> -			user_obj = self.pool.get('res.users')
> -			user = user_obj.browse(cr, uid, uid, context=context)
> -
> -			group_ids = []
> -			for grp in user.groups_id:
> -				group_ids.append(grp.id)
> -
> -			if (manager_ids[0] in group_ids):
> -				res[i] ='Manager'
> -			else:
> -				res[i] = 'User'
> -			
> -		return res
> -   
> -	_columns = {
> -			'agent_id': fields.many2one('sale.agent','Sales Agent'),
> -			'unique_commission': fields.float('Unique Comm %'),
> -			'unique_commission_2': fields.float('Unique Comm 2 %'),
> -			'is_agent': fields.boolean('Agent'),
> -			'permissions': fields.function(_check_permissions, type='char', method=True, string="Permissions"),
> -		}
> -
> -res_partner()
> -
> -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
> +from openerp.orm import fields, orm
> +
> +
> +class ResPartner(orm.Model):
> +    _inherit = "res.partner"
> +
> +    def _check_permissions(self, cr, uid, ids, field_name, arg, context):
> +        res = {}
> +        for i in ids:
> +            if not i:
> +                continue
> +            # Get the HR Officer/Manager id's
> +            group_obj = self.pool['res.groups']
> +            manager_ids = group_obj.search(cr, uid,
> +                                           [('name', '=', 'Sales / Manager')])
> +            # Get the user and see what groups he/she is in
> +            user_obj = self.pool['res.users']
> +            user = user_obj.browse(cr, uid, uid, context=context)
> +            group_ids = []
> +            for grp in user.groups_id:
> +                group_ids.append(grp.id)
> +            if (manager_ids[0] in group_ids):
> +                res[i] = 'Manager'
> +            else:
> +                res[i] = 'User'
> +        return res
> +
> +    _columns = {
> +        'agent_id': fields.many2one('sale.agent', 'Sales Agent'),
> +        'unique_commission': fields.float('Unique Comm %'),
> +        'unique_commission_2': fields.float('Unique Comm 2 %'),
> +        'is_agent': fields.boolean('Agent'),
> +        'permissions': fields.function(_check_permissions, type='char',
> +                                       method=True, string="Permissions"),
> +    }
> 
> === renamed file 'dos_sale_commissioncalc/sale_order.py' => 'dos_sale_commissioncalc/models/sale_order.py'
> --- dos_sale_commissioncalc/sale_order.py	2014-06-11 10:23:47 +0000
> +++ dos_sale_commissioncalc/models/sale_order.py	2014-07-03 15:58:52 +0000
> @@ -19,89 +19,99 @@
>  #
>  ##############################################################################
>  
> -"""Modificamos el pedido para que al generar la factura herede el representante del cliente"""
> -
> -from osv import fields, osv
> -from tools.translate import _
> -
> -class sale_order(osv.osv):
> -	"""Modificamos las ventas para incluir el comportamiento de comisiones"""
> -
> -	_inherit = "sale.order"
> -	
> -	def _get_percentage_commission_agent(self, cr, uid, ids, prop, unknow_none, context=None):
> -		result = {}
> -		for order in self.browse(cr, uid, ids, context=context):
> -			if order.agent2_percentage_distribution_commission:
> -				result[order.id] = 100.0 - order.agent2_percentage_distribution_commission
> -			else:
> -				result[order.id] = 100.0
> -		return result
> -		
> -	_columns = {
> -		'agent2_percentage_distribution_commission': fields.float('% Dist. Com. 2'),
> -		'agent1_percentage_distribution_commission': fields.function(_get_percentage_commission_agent, method=True, type='float', string='% Dist. Com. 1'),
> -		'agent_id': fields.many2one('sale.agent','Sales Agent'),
> -		'agent2_id': fields.many2one('sale.agent','Sales Agent 2'),
> -	}
> -	
> -	def onchange_partner_id(self, cr, uid, ids, part):
> -		"""extend this event for add agents partner"""
> -		#res = self.onchange_partner_id(cr, uid, ids, part)
> -		res = super(sale_order, self).onchange_partner_id(cr, uid, ids, part)
> -		if not part:
> -			res['value']['agent_id'] = False
> -			res['value']['agent2_id'] = False
> -			return res
> -		else:
> -			partner = self.pool.get('res.partner').browse(cr, uid, part, context=None)
> -			res['value']['agent_id'] = partner.agent_id.id
> -			res['value']['agent2_id'] = False
> -			
> -		return res
> -		
> -	# def onchange_partner_id_commission(self, cr, uid, ids, part):
> -		# """extend this event for add agents partner"""
> -		# res = self.onchange_partner_id(cr, uid, ids, part)
> -		# if not part:
> -			# res['value']['agent_id'] = False
> -			# res['value']['agent2_id'] = False
> -			# return res
> -		# else:
> -			# partner = self.pool.get('res.partner').browse(cr, uid, part, context=None)
> -			# res['value']['agent_id'] = partner.agent_id.id
> -			# res['value']['agent2_id'] = False
> -			
> -		# return res
> -		
> -	def onchange_agent_percentage_distribution_commission2(self, cr, uid, ids, agent2_percentage_distribution_commission):
> -		v = {}
> -		perc = 100
> -		if agent2_percentage_distribution_commission:
> -			perc = 100.0 - agent2_percentage_distribution_commission
> -			if perc < 0:
> -				perc = 0
> -			if perc > 100:
> -				perc = 100
> -		v['agent1_percentage_distribution_commission'] = perc
> -		return {'value': v}
> -		
> -	def action_invoice_create(self, cr, uid, ids, grouped=False, states=['confirmed', 'done', 'exception'], date_inv = False, context=None):
> -		"""
> -		Inherited method for writing agent_id partner value in created invoice
> -		"""
> -		invoice_id = super(sale_order, self).action_invoice_create(cr, uid, ids, grouped=grouped, states=states, date_inv = date_inv, context=context)
> -		inv_obj = self.pool.get('account.invoice')
> -		for saleorder in self.browse(cr, uid, ids, context=context):
> -			if saleorder.partner_id and saleorder.agent_id:
> -				for invoice in saleorder.invoice_ids:
> -					inv_obj.write(cr, uid, [invoice.id], {
> -						'agent_id': saleorder.agent_id and saleorder.agent_id.id or False, 
> -						'agent2_id': saleorder.agent2_id and saleorder.agent2_id.id or False , 
> -						'agent2_percentage_distribution_commission': saleorder.agent2_percentage_distribution_commission
> -						})
> -				
> -		return invoice_id
> -	
> -
> -sale_order()
> \ No newline at end of file
> +"""Modificamos el pedido para que al generar la factura herede el
> + representante del cliente"""
> +
> +from openerp.orm import fields, orm
> +
> +
> +class SaleOrder(orm.Model):
> +    """Modificamos las ventas para incluir el comportamiento de comisiones"""
> +    _inherit = "sale.order"
> +
> +    def _get_percentage_commission_agent(self, cr, uid, ids, prop,
> +                                         unknow_none, context=None):
> +        result = {}
> +        for order in self.browse(cr, uid, ids, context=context):
> +            if order.agent2_percentage_distribution_commission:
> +                result[order.id] = (
> +                    100.0 - order.agent2_percentage_distribution_commission)
> +            else:
> +                result[order.id] = 100.0
> +        return result
> +
> +    _columns = {
> +        'agent2_percentage_distribution_commission': (
> +            fields.float('% Dist. Com. 2')),
> +        'agent1_percentage_distribution_commission': (
> +            fields.function(_get_percentage_commission_agent,
> +                            method=True, type='float',
> +                            string='% Dist. Com. 1')),
> +        'agent_id': fields.many2one('sale.agent', 'Sales Agent'),
> +        'agent2_id': fields.many2one('sale.agent', 'Sales Agent 2'),
> +    }
> +
> +    def onchange_partner_id(self, cr, uid, ids, part):
> +        """extend this event for add agents partner"""
> +        # res = self.onchange_partner_id(cr, uid, ids, part)
> +        res = super(SaleOrder, self).onchange_partner_id(cr, uid, ids, part)
> +        partner_obj = self.pool['res.partner']
> +        if not part:
> +            res['value']['agent_id'] = False
> +            res['value']['agent2_id'] = False
> +            return res
> +        else:
> +            partner = partner_obj.browse(cr, uid, part, context=None)
> +            res['value']['agent_id'] = partner.agent_id.id
> +            res['value']['agent2_id'] = False
> +        return res
> +
> +    # def onchange_partner_id_commission(self, cr, uid, ids, part):
> +        # """extend this event for add agents partner"""
> +        # res = self.onchange_partner_id(cr, uid, ids, part)
> +        # partner_obj = self.pool['res.partner']
> +        # if not part:
> +        #    res['value']['agent_id'] = False
> +        #     res['value']['agent2_id'] = False
> +        #     return res
> +        # else:
> +        #     partner = partner_obj.browse(cr, uid, part,context=None)
> +        #     res['value']['agent_id'] = partner.agent_id.id
> +        #     res['value']['agent2_id'] = False
> +        # return res
> +
> +    def onchange_ag_pctage_dist_comm2(
> +            self, cr, uid, ids, agent2_percentage_distribution_commission):
> +        v = {}
> +        perc = 100
> +        if agent2_percentage_distribution_commission:
> +            perc = 100.0 - agent2_percentage_distribution_commission
> +            if perc < 0:
> +                perc = 0
> +            if perc > 100:
> +                perc = 100
> +        v['agent1_percentage_distribution_commission'] = perc
> +        return {'value': v}
> +
> +    def action_invoice_create(self, cr, uid, ids, grouped=False,
> +                              states=['confirmed', 'done', 'exception'],
> +                              date_inv=False, context=None):
> +        """
> +        Inherited method for writing agent_id partner value in created invoice
> +        """
> +        invoice_id = super(SaleOrder, self).action_invoice_create(
> +            cr, uid, ids, grouped=grouped, states=states, date_inv=date_inv,
> +            context=context)
> +        inv_obj = self.pool.get('account.invoice')

self.pool[]

> +        for saleorder in self.browse(cr, uid, ids, context=context):
> +            if saleorder.partner_id and saleorder.agent_id:
> +                for invoice in saleorder.invoice_ids:
> +                    inv_obj.write(cr, uid, [invoice.id], {
> +                        'agent_id': (saleorder.agent_id and
> +                                     saleorder.agent_id.id or False),
> +                        'agent2_id': (saleorder.agent2_id and
> +                                      saleorder.agent2_id.id or False),
> +                        'agent2_percentage_distribution_commission': (
> +                            saleorder.agent2_percentage_distribution_commission)
> +                        })
> +        return invoice_id
> 
> === renamed file 'dos_sale_commissioncalc/saleagent.py' => 'dos_sale_commissioncalc/models/saleagent.py'
> --- dos_sale_commissioncalc/saleagent.py	2014-06-11 10:23:47 +0000
> +++ dos_sale_commissioncalc/models/saleagent.py	2014-07-03 15:58:52 +0000
> @@ -19,28 +19,33 @@
>  #
>  ##############################################################################
>  
> -from osv import fields,osv
> -
> -class sale_agent(osv.osv):
> -	_name = "sale.agent"
> -	_description = "Sale agent sale info"
> -	_columns = {
> -	    'name': fields.char('Saleagent Name', size=25, required=True),
> -	    'active': fields.boolean('Active'),
> -	    'partner_id': fields.many2one('res.partner','Partner',required=True,ondelete='cascade'),
> -        'commission_rate': fields.float('Commission Rate',required=False),
> -	    'commissiontozeroforce': fields.boolean('Commission To Zero Force'),
> -        'retention': fields.float('Retention',required=False),		
> -	    'commissionwithouttable': fields.boolean('Commission Without Table'),			
> -	    'commissiontable_id': fields.many2one('sale.commissiontable','Commission Table',required=False),
> -	    'zone_id': fields.many2one('sale.zone','Zone',required=False),		
> -	    'customer': fields.one2many('res.partner','agent_id','Customer'),
> -		'company_id': fields.many2one('res.company', 'Company', required=False),
> -        }
> -	_defaults = {
> -		'active': lambda *a: True,
> -		'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'sale.shop', context=c),
> -		}
> -
> -sale_agent()
> -
> +from openerp.orm import fields, orm
> +
> +
> +class SaleAgent(orm.Model):
> +    _name = "sale.agent"
> +    _description = "Sale agent sale info"
> +    _columns = {
> +        'name': fields.char('Saleagent Name', size=25, required=True),
> +        'active': fields.boolean('Active'),
> +        'partner_id': fields.many2one('res.partner', 'Partner', required=True,
> +                                      ondelete='cascade'),
> +        'commission_rate': fields.float('Commission Rate', required=False),
> +        'commissiontozeroforce': fields.boolean('Commission To Zero Force'),
> +        'retention': fields.float('Retention', required=False),
> +        'commissionwithouttable': fields.boolean('Commission Without Table'),
> +        'commissiontable_id': fields.many2one('sale.commissiontable',
> +                                              'Commission Table',
> +                                              required=False),
> +        'zone_id': fields.many2one('sale.zone', 'Zone', required=False),
> +        'customer': fields.one2many('res.partner', 'agent_id', 'Customer'),
> +        'company_id': fields.many2one('res.company', 'Company',
> +                                      required=False),
> +    }
> +
> +    _defaults = {
> +        'active': lambda *a: True,

No hace falta el lambda, ya que es un valor estático.

> +        'company_id': lambda s, cr, uid,
> +        c: s.pool['res.company']._company_default_get(cr, uid, 'sale.shop',

Indenta esta parte y al context llámalo context, no c, porque en caso de herencia con cambio de argumentos keyword, daría error.

> +                                                      context=c),
> +    }
> 
> === renamed file 'dos_sale_commissioncalc/salecommissionlines.py' => 'dos_sale_commissioncalc/models/salecommissionlines.py'
> --- dos_sale_commissioncalc/salecommissionlines.py	2014-06-11 10:23:47 +0000
> +++ dos_sale_commissioncalc/models/salecommissionlines.py	2014-07-03 15:58:52 +0000
> @@ -1,9 +1,9 @@
>  # -*- encoding: utf-8 -*-
>  ##############################################################################
>  #
> -#    OpenERP, Open Source Management Solution    
> +#    OpenERP, Open Source Management Solution
>  #    Copyright (C) 2004-2010 Tiny SPRL (http://tiny.be). All Rights Reserved
> -#    
> +#
>  #
>  #    This program is free software: you can redistribute it and/or modify
>  #    it under the terms of the GNU General Public License as published by
> @@ -20,18 +20,18 @@
>  #
>  ##############################################################################
>  
> -from osv import osv
> -from osv import fields
> -
> -class sale_commissionlines(osv.osv):
> -    
> +from openerp import orm, fields
> +
> +
> +class SaleCommissionlines(orm.Model):
> +
>      _name = 'sale.commissionlines'
>      _description = 'Sale Commission Lines'
> - 
> +
>      _columns = {
> -        'discount':fields.float('Discount',required=True),
> -		'commission':fields.float('Commission',required=True),
> -        'sale_commissiontable_id': fields.many2one('sale.commissiontable','Commission Table',required=True,ondelete='cascade'),
> +        'discount': fields.float('Discount', required=True),
> +        'commission': fields.float('Commission', required=True),
> +        'sale_commissiontable_id': fields.many2one(
> +            'sale.commissiontable', 'Commission Table', required=True,
> +            ondelete='cascade'),
>      }
> -	
> -sale_commissionlines()
> 
> === renamed file 'dos_sale_commissioncalc/salecommissiontable.py' => 'dos_sale_commissioncalc/models/salecommissiontable.py'
> --- dos_sale_commissioncalc/salecommissiontable.py	2014-06-11 10:23:47 +0000
> +++ dos_sale_commissioncalc/models/salecommissiontable.py	2014-07-03 15:58:52 +0000
> @@ -1,9 +1,9 @@
>  # -*- encoding: utf-8 -*-
>  ##############################################################################
>  #
> -#    OpenERP, Open Source Management Solution    
> +#    OpenERP, Open Source Management Solution
>  #    Copyright (C) 2004-2010 Tiny SPRL (http://tiny.be). All Rights Reserved
> -#    
> +#
>  #
>  #    This program is free software: you can redistribute it and/or modify
>  #    it under the terms of the GNU General Public License as published by
> @@ -20,25 +20,28 @@
>  #
>  ##############################################################################
>  
> -from osv import osv
> -from osv import fields
> -
> -class sale_commissiontable(osv.osv): 
> - 
> -	_name = 'sale.commissiontable'
> -	_description = 'Commission Table Info'
> - 
> -	_columns = {
> -		'name':fields.char('Name', size=64),
> -		'maxdctpercent': fields.float('Max Discount %'),
> -		'maxdctcommission': fields.float('Max Discount Commission'),
> -		'commissiondctzero': fields.float('Commission for 0% discount'),
> -		'dctbypaymentdelay': fields.float('% Discount every 30 days'),
> -		'sale_commissionlines': fields.one2many('sale.commissionlines','sale_commissiontable_id','Líneas'),
> -		'company_id': fields.many2one('res.company', 'Company', required=False),
> -		}
> -	_defaults = {
> -		'company_id': lambda s, cr, uid, c: s.pool.get('res.company')._company_default_get(cr, uid, 'sale.shop', context=c),
> -		}
> -	
> -sale_commissiontable()
> +from openerp.orm import orm, fields
> +
> +
> +class SaleCommissiontable(orm.Model):
> +    _name = 'sale.commissiontable'
> +    _description = 'Commission Table Info'
> +
> +    _columns = {
> +        'name': fields.char('Name', size=64),
> +        'maxdctpercent': fields.float('Max Discount %'),
> +        'maxdctcommission': fields.float('Max Discount Commission'),
> +        'commissiondctzero': fields.float('Commission for 0% discount'),
> +        'dctbypaymentdelay': fields.float('% Discount every 30 days'),
> +        'sale_commissionlines': fields.one2many('sale.commissionlines',
> +                                                'sale_commissiontable_id',
> +                                                'Líneas'),
> +        'company_id': fields.many2one('res.company', 'Company',
> +                                      required=False),
> +        }
> +
> +    _defaults = {
> +        'company_id': lambda s, cr, uid,
> +        c: s.pool['res.company']._company_default_get(cr, uid, 'sale.shop',

Ídem que para el otro.

> +                                                      context=c),
> +    }
> 
> === renamed file 'dos_sale_commissioncalc/salezone.py' => 'dos_sale_commissioncalc/models/salezone.py'
> --- dos_sale_commissioncalc/salezone.py	2014-06-11 10:23:47 +0000
> +++ dos_sale_commissioncalc/models/salezone.py	2014-07-03 15:58:52 +0000
> @@ -19,17 +19,14 @@
>  #
>  ##############################################################################
>  
> -from osv import fields,osv
> -
> -class sale_zone(osv.osv):
> -	_name = "sale.zone"
> -	_description = "Sale Zone Info"
> -	_columns = {
> -	    'name': fields.char('Name', size=40, required=True),		
> -	    'description': fields.char('Description', size=40, required=True),
> +from openerp.orm import fields, orm
> +
> +
> +class sale_zone(orm.Model):
> +    _name = "sale.zone"
> +    _description = "Sale Zone Info"
> +
> +    _columns = {
> +        'name': fields.char('Name', size=40, required=True),
> +        'description': fields.char('Description', size=40, required=True),
>          }
> -sale_zone()
> -
> -#
> -# En sale_zone class
> -#
> 
> === renamed file 'dos_sale_commissioncalc/stock_picking.py' => 'dos_sale_commissioncalc/models/stock_picking.py'
> --- dos_sale_commissioncalc/stock_picking.py	2014-06-11 10:23:47 +0000
> +++ dos_sale_commissioncalc/models/stock_picking.py	2014-07-03 15:58:52 +0000
> @@ -20,23 +20,30 @@
>  #
>  ##############################################################################
>  
> -"""Modificamos el albaran para que al generar la factura herede el representante del cliente"""
> -
> -from osv import osv
> -
> -class stock_picking(osv.osv):
> -	"""Inherit stock_picking to add agent from partner"""
> -
> -	_inherit = "stock.picking"
> -
> -	def _invoice_hook(self, cursor, user, picking, invoice_id):
> -		if picking and picking.partner_id and picking.partner_id.agent_id and invoice_id:
> -			self.pool.get('account.invoice').write(cursor, user, invoice_id, {
> -					'agent_id': (picking.sale_id and picking.sale_id.agent_id and picking.sale_id.agent_id.id) or (picking.partner_id and picking.partner_id.agent_id and picking.partner_id.agent_id.id) or False,
> -					'agent2_id': (picking.sale_id and picking.sale_id.agent2_id and picking.sale_id.agent2_id.id) or False,
> -					'agent2_percentage_distribution_commission': picking.sale_id and picking.sale_id.agent2_percentage_distribution_commission or 0.0
> -				})
> -			
> -		return super(stock_picking, self)._invoice_hook(cursor, user, picking, invoice_id)
> -
> -stock_picking()
> \ No newline at end of file
> +"""Modificamos el albaran para que al generar la factura herede el
> + representante del cliente"""
> +
> +from openerp.orm import orm
> +
> +
> +class StockPicking(orm.Model):
> +    """Inherit stock_picking to add agent from partner"""
> +    _inherit = "stock.picking"
> +
> +    def _invoice_hook(self, cursor, user, picking, invoice_id):
> +        if (picking and picking.partner_id and picking.partner_id.agent_id and
> +                invoice_id):
> +            self.pool.get('account.invoice').write(cursor, user, invoice_id, {

self.pool[]

> +                'agent_id': (picking.sale_id and picking.sale_id.agent_id and
> +                             picking.sale_id.agent_id.id) or
> +                            (picking.partner_id and picking.partner_id.agent_id
> +                             and picking.partner_id.agent_id.id) or False,
> +                'agent2_id': (picking.sale_id and picking.sale_id.agent2_id and
> +                              picking.sale_id.agent2_id.id) or False,
> +                'agent2_percentage_distribution_commission': (
> +                    picking.sale_id and
> +                    picking.sale_id.agent2_percentage_distribution_commission
> +                    or 0.0)
> +                })
> +        return super(StockPicking, self)._invoice_hook(cursor, user, picking,
> +                                                        invoice_id)
> 
> === renamed directory 'dos_sale_commissioncalc/report' => 'dos_sale_commissioncalc/reports'
> === modified file 'dos_sale_commissioncalc/reports/__init__.py'
> --- dos_sale_commissioncalc/report/__init__.py	2014-06-11 10:23:47 +0000
> +++ dos_sale_commissioncalc/reports/__init__.py	2014-07-03 15:58:52 +0000
> @@ -1,6 +1,6 @@
>  # -*- coding: utf-8 -*-
>  ##############################################################################
> -#    
> +#
>  #    OpenERP, Open Source Management Solution
>  #    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
>  #
> @@ -15,11 +15,8 @@
>  #    GNU Affero General Public License for more details.
>  #
>  #    You should have received a copy of the GNU Affero General Public License
> -#    along with this program.  If not, see <http://www.gnu.org/licenses/>.     
> +#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
>  #
>  ##############################################################################
>  
>  import report_sale_commissions
> -
> -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
> -
> 
> === modified file 'dos_sale_commissioncalc/reports/report_sale_commissions.py'
> --- dos_sale_commissioncalc/report/report_sale_commissions.py	2014-06-11 10:23:47 +0000
> +++ dos_sale_commissioncalc/reports/report_sale_commissions.py	2014-07-03 15:58:52 +0000
> @@ -22,230 +22,232 @@
>  import time
>  from datetime import datetime
>  from report import report_sxw
> -import pooler
> -import decimal_precision as dp
> -from dateutil.relativedelta import relativedelta
> -
> -class report_sale_commissions(report_sxw.rml_parse):
> -	def __init__(self, cr, uid, name, context):
> -		super(report_sale_commissions, self).__init__(cr, uid, name, context=context)
> -		self.localcontext.update({
> -			'time': time,
> -			'get_date_start': self.get_date_start,
> -			'get_date_end': self.get_date_end,
> -			'get_agent_invoices': self.get_agent_invoices,
> -			'get_total_agent_amount_untaxed': self.get_total_agent_amount_untaxed,
> -			'get_agent_receipts_pendings': self.get_agent_receipts_pendings,
> -			'get_total_agent_receipts_pendings': self.get_total_agent_receipts_pendings,
> -			'get_total_agent_sales_in_period': self.get_total_agent_sales_in_period,
> -			'get_commission_average': self.get_commission_average,
> -			'get_commission_total': self.get_commission_total,
> -			'get_invoice_commission_total': self.get_invoice_commission_total,
> -			'get_invoice_commission_percentage': self.get_invoice_commission_percentage,
> -			'get_total_agent_receipts_pendings_before_period': self.get_total_agent_receipts_pendings_before_period,
> -			'get_inv_amount_untaxed': self.get_inv_amount_untaxed,
> -		})
> -		self.context = context
> -		self.data_report = context['data_report']
> -		
> -	def get_date_start(self, form):
> -		date_start = form['date_start']
> -		return date_start
> -	
> -	def get_date_end(self, form):
> -		date_end = form['date_end']
> -		return date_end
> -	
> -	def get_agent_invoices(self, form, agent):
> -		pool = pooler.get_pool(self.cr.dbname)
> -		inv_obj = pool.get('account.invoice')
> -		inv_ids = self.data_report['agent_invoices'][agent.id]
> -		
> -		# if form['settled'] == 'all':
> -			# inv_ids = inv_obj.search(self.cr, self.uid, [ ('state','=', 'paid'), ('date_invoice','>=',form['date_start']), ('date_invoice','<=',form['date_end']), ('paid_date','>=',form['payment_date_start']), ('paid_date','<=',form['payment_date_end']), ('agent_id', '=', agent.id) ])
> -		# else:
> -			# settled = False
> -			# if form['settled'] == 'settled':
> -				# settled = True
> -			# inv_ids = inv_obj.search(self.cr, self.uid, [ ('state','=', 'paid'), ('commission_settled','=', settled), ('date_invoice','>=',form['date_start']), ('date_invoice','<=',form['date_end']), ('paid_date','>=',form['payment_date_start']), ('paid_date','<=',form['payment_date_end']), ('agent_id', '=', agent.id)])
> -		invoice_ids = inv_obj.browse(self.cr, self.uid, inv_ids)
> -		return invoice_ids
> -		
> -	def get_total_agent_amount_untaxed(self, form, agent):
> -		invoice_ids = self.get_agent_invoices(form, agent)
> -		total = 0.0
> -		for inv in invoice_ids:
> -			total += inv.amount_untaxed
> -			#si se ha a�adido el articulo de entrega a cuenta, hay que sumar lo a la base imponible
> -			for line in inv.invoice_line:
> -				if line.product_id and line.product_id.name == 'ENTREGA A CUENTA':
> -					total -= line.price_subtotal #resto porque es negativo, con lo que debo de estar sumando
> -					
> -		return total
> -	def get_inv_amount_untaxed(self, invoice):
> -		total = invoice.amount_untaxed
> -		for line in invoice.invoice_line:
> -			if line.product_id and line.product_id.name == 'ENTREGA A CUENTA':
> -				total -= line.price_subtotal
> -		return total
> -	
> -	def get_agent_receipts_pendings(self, form, agent):
> -		pool = pooler.get_pool(self.cr.dbname)
> -		inv_obj = pool.get('account.invoice')
> -		#inv_ids = inv_obj.search(self.cr, self.uid, [ ('state','=', 'open'), ('commission_settled','=', False), ('agent_id', '=', agent.id)])
> -		inv_ids = self.data_report['agent_invoice_pending'][agent.id]
> -		invoice_ids = inv_obj.browse(self.cr, self.uid, inv_ids)
> -		receipts = []
> -		for inv in invoice_ids:
> -			data_lines = [x for x in inv.move_id.line_id if x.account_id.id == inv.account_id.id]
> -			for move_line in data_lines:
> -				if not move_line.reconcile_id:
> -					receipts.append(move_line)
> -		
> -		return receipts
> -	
> -	def get_total_agent_receipts_pendings(self, form, agent):
> -		move_ids = self.get_agent_receipts_pendings(form, agent)
> -		total = 0.0
> -		for move in move_ids:
> -			total += move.amount_residual
> -		return total
> -	
> -	def get_total_agent_receipts_pendings_before_period(self, form, agent):
> -		total = 0.0
> -		pool = pooler.get_pool(self.cr.dbname)
> -		inv_obj = pool.get('account.invoice')
> -		inv_ids = inv_obj.search(self.cr, self.uid, [ ('state','=', 'open'), ('commission_settled','=', False), ('agent_id', '=', agent.id)])
> -		invoice_ids = inv_obj.browse(self.cr, self.uid, inv_ids)
> -		receipts = []
> -		for inv in invoice_ids:
> -			if inv.date_invoice < form['date_start']:
> -				data_lines = [x for x in inv.move_id.line_id if x.account_id.id == inv.account_id.id]
> -				for move_line in data_lines:
> -					if not move_line.reconcile_id:
> -						total += move_line.amount_residual
> -		
> -		return total
> -	def get_total_agent_sales_in_period(self, form, agent):
> -		pool = pooler.get_pool(self.cr.dbname)
> -		inv_obj = pool.get('account.invoice')
> -		
> -		if form['settled'] == 'all':
> -			inv_ids = inv_obj.search(self.cr, self.uid, [ ('state','=', 'paid'), ('date_invoice','>=',form['date_start']), ('date_invoice','<=',form['date_end']), ('paid_date','>=',form['payment_date_start']), ('paid_date','<=',form['payment_date_end']), ('agent_id', '=', agent.id) ])
> -		else:
> -			settled = False
> -			if form['settled'] == 'settled':
> -				settled = True
> -				
> -		inv_ids = inv_obj.search(self.cr, self.uid, [ ('state','in', ['open', 'paid']), ('date_invoice','>=',form['date_start']), ('date_invoice','<=',form['date_end']), ('agent_id', '=', agent.id)])
> -		invoice_ids = inv_obj.browse(self.cr, self.uid, inv_ids)
> -		
> -		total = 0.0
> -		for inv in invoice_ids:
> -			total += inv.amount_untaxed
> -		return total
> -	
> -	def get_invoice_commission_percentage(self, invoice, agent_obj):
> -		if not invoice.agent_id:
> -			return 0.0
> -		dto = invoice.header_discount + invoice.early_payment_discount
> -		if invoice.decorator_discount:
> -			dto = invoice.decorator_discount
> -			
> -		final_date = invoice.date_invoice
> -		if invoice.paid_date and invoice.paid_date > final_date:
> -			final_date = invoice.paid_date
> -		if invoice.date_due and invoice.date_due > final_date:
> -			final_date = invoice.date_due
> -		diasMes = 30
> -		
> -		dtt1 = datetime.strptime(final_date, '%Y-%m-%d')
> -		dtt2 = datetime.strptime(invoice.date_invoice, '%Y-%m-%d')
> -		dif = dtt1 - dtt2
> -		
> -		numPeriodos30dias = round(dif.days / 30,0)
> -		agent = invoice.agent_id
> -		por_commission = 0.0
> -		if agent.commissionwithouttable:
> -			if dto == 10.0:
> -				por_commission = 4.0
> -			elif dto == 15.0:
> -				por_commission = 2.0
> -			elif dto == 20.0:
> -				por_commission = 1.0
> -			else:
> -				por_commission = agent.commission_rate
> -		else:
> -			if invoice.partner_id.unique_commission:
> -				por_commission = invoice.partner_id.unique_commission
> -			elif invoice.partner_id.unique_commission_2:
> -				por_commission = invoice.partner_id.unique_commission_2
> -			elif agent.commission_rate:
> -				por_commission = agent.commission_rate
> -			elif agent.commissiontozeroforce:
> -				por_commission = 0.0
> -			else:
> -				if agent.commissiontable_id:
> -					if dto == 0.0:
> -						por_commission = agent.commissiontable_id.commissiondctzero
> -					else:
> -						dto_assign = 0
> -						line_assign = False
> -						for commission_line in agent.commissiontable_id.sale_commissionlines:
> -							if commission_line.discount >= dto and (not line_assign or dto_assign > commission_line.discount):
> -								dto_assign = commission_line.discount
> -								por_commission = commission_line.commission
> -								line_assign = True
> -						if not line_assign:
> -							if dto <= agent.commissiontable_id.maxdctpercent:
> -								por_commission = agent.commissiontable_id.maxdctcommission
> -							else:
> -								por_commission = 0.0
> -					
> -					por_commission = por_commission - (numPeriodos30dias * agent.commissiontable_id.dctbypaymentdelay)
> -					if por_commission < agent.commissiontable_id.maxdctcommission:
> -						por_commission = agent.commissiontable_id.maxdctcommission
> -		
> -		if invoice.agent2_id and invoice.agent2_percentage_distribution_commission > 0:
> -			por_commission2 = por_commission * invoice.agent2_percentage_distribution_commission / 100.0
> -			por_commission2 = round(por_commission2,2)
> -			por_commission = por_commission - por_commission2
> -			if invoice.agent2_id.id == agent_obj.id:
> -				por_commission = por_commission2
> -		
> -		return por_commission
> -	
> -	def get_invoice_commission_total(self, invoice, agent):
> -		por_commission = self.get_invoice_commission_percentage(invoice, agent)
> -		base_amount = invoice.amount_untaxed
> -		#si se ha a�adido el articulo de entrega a cuenta, hay que sumar lo a la base imponible
> -		for line in invoice.invoice_line:
> -			if line.product_id and line.product_id.name == 'ENTREGA A CUENTA':
> -				base_amount -= line.price_subtotal #resto porque es negativo, con lo que debo de estar sumando
> -		# if invoice.decorator_discount:
> -			# base_amount = invoice.amount_untaxed * (1.0 - (decorator_discount / 100.0))
> -			# base_amount = round(base_amount,2)
> -		total = base_amount * por_commission / 100.0
> -		total = round(total,2)
> -		return total
> -	
> -	def get_commission_total(self, form, agent):
> -		invoice_ids = self.get_agent_invoices(form, agent)
> -		total = 0.0
> -		for inv in invoice_ids:
> -			total += self.get_invoice_commission_total(inv, agent)
> -		
> -		return total
> -	
> -	def get_commission_average(self, form, agent):
> -		base = self.get_total_agent_amount_untaxed(form, agent)
> -		commission = self.get_commission_total(form, agent)
> -		
> -		if base == 0.0:
> -			return 0.0
> -		else:
> -			return (commission / base) * 100.0
> -	
> -report_sxw.report_sxw('report.sale_commissions_report', 'sale.agent', 'addons/dos_sale_commissioncalc/report/report_sale_commissions.rml', parser=report_sale_commissions)
> -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
> -
> +
> +
> +class ReportSaleCommissions(report_sxw.rml_parse):
> +
> +    def __init__(self, cr, uid, name, context):
> +        super(ReportSaleCommissions, self).__init__(cr, uid, name,
> +                                                    context=context)
> +        self.localcontext.update({
> +            'time': time,
> +            'get_date_start': self.get_date_start,
> +            'get_date_end': self.get_date_end,
> +            'get_agent_invoices': self.get_agent_invoices,
> +            'get_total_agent_amount_untaxed': (
> +                self.get_total_agent_amount_untaxed),
> +            'get_agent_receipts_pendings': self.get_agent_receipts_pendings,
> +            'get_total_agent_receipts_pendings': (
> +                self.get_total_agent_receipts_pendings),
> +            'get_total_agent_sales_in_period': (
> +                self.get_total_agent_sales_in_period),
> +            'get_commission_average': self.get_commission_average,
> +            'get_commission_total': self.get_commission_total,
> +            'get_invoice_commission_total': self.get_invoice_commission_total,
> +            'get_invoice_commission_percentage': (
> +                self.get_invoice_commission_percentage),
> +            'get_total_agent_receipts_pendings_before_period': (
> +                self.get_total_agent_receipts_pendings_before_period),
> +            'get_inv_amount_untaxed': self.get_inv_amount_untaxed,
> +        })
> +        self.context = context
> +        self.data_report = context['data_report']
> +
> +    def get_date_start(self, form):
> +        date_start = form['date_start']
> +        return date_start
> +
> +    def get_date_end(self, form):
> +        date_end = form['date_end']
> +        return date_end
> +
> +    def get_agent_invoices(self, form, agent):
> +        inv_obj = self.pool['account.invoice']
> +        inv_ids = self.data_report['agent_invoices'][agent.id]
> +        invoice_ids = inv_obj.browse(self.cr, self.uid, inv_ids)
> +        return invoice_ids
> +
> +    def get_total_agent_amount_untaxed(self, form, agent):
> +        invoice_ids = self.get_agent_invoices(form, agent)
> +        total = 0.0
> +        for inv in invoice_ids:
> +            total += inv.amount_untaxed
> +            # si se ha a�adido el articulo de entrega a cuenta,
> +            # hay que sumar lo a la base imponible
> +            for line in inv.invoice_line:
> +                if (line.product_id and
> +                        line.product_id.name == 'ENTREGA A CUENTA'):
> +                    total -= line.price_subtotal
> +                    # resto porque es negativo, con lo que debo de sumar
> +
> +        return total
> +
> +    def get_inv_amount_untaxed(self, invoice):
> +        total = invoice.amount_untaxed
> +        for line in invoice.invoice_line:
> +            if line.product_id and line.product_id.name == 'ENTREGA A CUENTA':
> +                total -= line.price_subtotal
> +        return total
> +
> +    def get_agent_receipts_pendings(self, form, agent):
> +        inv_obj = self.pool['account.invoice']
> +        inv_ids = self.data_report['agent_invoice_pending'][agent.id]
> +        invoice_ids = inv_obj.browse(self.cr, self.uid, inv_ids)
> +        receipts = []
> +        for inv in invoice_ids:
> +            data_lines = [
> +                x for x in inv.move_id.line_id
> +                if x.account_id.id == inv.account_id.id]
> +            for move_line in data_lines:
> +                if not move_line.reconcile_id:
> +                    receipts.append(move_line)
> +        return receipts
> +
> +    def get_total_agent_receipts_pendings(self, form, agent):
> +        move_ids = self.get_agent_receipts_pendings(form, agent)
> +        total = 0.0
> +        for move in move_ids:
> +            total += move.amount_residual
> +        return total
> +
> +    def get_total_agent_receipts_pendings_before_period(self, form,
> +                                                        agent):
> +        total = 0.0
> +        inv_obj = self.pool['account.invoice']
> +        inv_ids = inv_obj.search(self.cr, self.uid, [
> +            ('state', '=', 'open'), ('commission_settled', '=', False),
> +            ('agent_id', '=', agent.id)])
> +        invoice_ids = inv_obj.browse(self.cr, self.uid, inv_ids)
> +        for inv in invoice_ids:
> +            if inv.date_invoice < form['date_start']:
> +                data_lines = [x for x in inv.move_id.line_id
> +                              if x.account_id.id == inv.account_id.id]
> +                for move_line in data_lines:
> +                    if not move_line.reconcile_id:
> +                        total += move_line.amount_residual
> +        return total
> +
> +    def get_total_agent_sales_in_period(self, form, agent):
> +        inv_obj = self.pool['account.invoice']
> +        inv_ids = inv_obj.search(self.cr, self.uid, [
> +            ('state', 'in', ['open', 'paid']),
> +            ('date_invoice', '>=', form['date_start']),
> +            ('date_invoice', '<=', form['date_end']),
> +            ('agent_id', '=', agent.id)])
> +        invoice_ids = inv_obj.browse(self.cr, self.uid, inv_ids)
> +        total = 0.0
> +        for inv in invoice_ids:
> +            total += inv.amount_untaxed
> +        return total
> +
> +    def get_invoice_commission_percentage(self, invoice, agent_obj):
> +        if not invoice.agent_id:
> +            return 0.0
> +        dto = invoice.header_discount + invoice.early_payment_discount
> +        if invoice.decorator_discount:
> +            dto = invoice.decorator_discount
> +        final_date = invoice.date_invoice
> +        if invoice.paid_date and invoice.paid_date > final_date:
> +            final_date = invoice.paid_date
> +        if invoice.date_due and invoice.date_due > final_date:
> +            final_date = invoice.date_due
> +        dtt1 = datetime.strptime(final_date, '%Y-%m-%d')
> +        dtt2 = datetime.strptime(invoice.date_invoice, '%Y-%m-%d')
> +        dif = dtt1 - dtt2
> +        numPeriodos30dias = round(dif.days / 30, 0)
> +        agent = invoice.agent_id
> +        por_commission = 0.0
> +        if agent.commissionwithouttable:
> +            if dto == 10.0:
> +                por_commission = 4.0
> +            elif dto == 15.0:
> +                por_commission = 2.0
> +            elif dto == 20.0:
> +                por_commission = 1.0
> +            else:
> +                por_commission = agent.commission_rate
> +        else:
> +            if invoice.partner_id.unique_commission:
> +                por_commission = invoice.partner_id.unique_commission
> +            elif invoice.partner_id.unique_commission_2:
> +                por_commission = invoice.partner_id.unique_commission_2
> +            elif agent.commission_rate:
> +                por_commission = agent.commission_rate
> +            elif agent.commissiontozeroforce:
> +                por_commission = 0.0
> +            else:
> +                if agent.commissiontable_id:
> +                    if dto == 0.0:
> +                        por_commission = (
> +                            agent.commissiontable_id.commissiondctzero)
> +                    else:
> +                        dto_assign = 0
> +                        line_assign = False
> +                        for commission_line in (
> +                                agent.commissiontable_id.sale_commissionlines):
> +                            if commission_line.discount >= dto and (
> +                                    not line_assign or
> +                                    dto_assign > commission_line.discount):
> +                                dto_assign = commission_line.discount
> +                                por_commission = commission_line.commission
> +                                line_assign = True
> +                        if not line_assign:
> +                            if dto <= agent.commissiontable_id.maxdctpercent:
> +                                por_commission = (
> +                                    agent.commissiontable_id.maxdctcommission)
> +                            else:
> +                                por_commission = 0.0
> +                    por_commission = por_commission - (
> +                        numPeriodos30dias *
> +                        agent.commissiontable_id.dctbypaymentdelay)
> +                    if (por_commission <
> +                            agent.commissiontable_id.maxdctcommission):
> +                        por_commission = (
> +                            agent.commissiontable_id.maxdctcommission)
> +        if (invoice.agent2_id and
> +                invoice.agent2_percentage_distribution_commission > 0):
> +            por_commission2 = (
> +                por_commission *
> +                invoice.agent2_percentage_distribution_commission / 100.0)
> +            por_commission2 = round(por_commission2, 2)
> +            por_commission = por_commission - por_commission2
> +            if invoice.agent2_id.id == agent_obj.id:
> +                por_commission = por_commission2
> +        return por_commission
> +
> +    def get_invoice_commission_total(self, invoice, agent):
> +        por_commission = self.get_invoice_commission_percentage(invoice, agent)
> +        base_amount = invoice.amount_untaxed
> +        # si se ha a�adido el articulo de entrega a cuenta, hay que sumar

Poner bien la ñ, para que no dé error de codificación de caracteres.

> +        # lo a la base imponible
> +        for line in invoice.invoice_line:
> +            if line.product_id and line.product_id.name == 'ENTREGA A CUENTA':
> +                base_amount -= line.price_subtotal  # resto porque es negativo,
> +                # con lo que debo de estar sumando
> +        # if invoice.decorator_discount:
> +        #     base_amount = invoice.amount_untaxed * (
> +        #    1.0 - (decorator_discount / 100.0))
> +        #     base_amount = round(base_amount,2)
> +        total = base_amount * por_commission / 100.0
> +        total = round(total, 2)
> +        return total
> +
> +    def get_commission_total(self, form, agent):
> +        invoice_ids = self.get_agent_invoices(form, agent)
> +        total = 0.0
> +        for inv in invoice_ids:
> +            total += self.get_invoice_commission_total(inv, agent)
> +        return total
> +
> +    def get_commission_average(self, form, agent):
> +        base = self.get_total_agent_amount_untaxed(form, agent)
> +        commission = self.get_commission_total(form, agent)
> +        if base == 0.0:
> +            return 0.0
> +        else:
> +            return (commission / base) * 100.0
> +
> +report_sxw.report_sxw(
> +    'report.sale_commissions_report', 'sale.agent',
> +    'addons/dos_sale_commissioncalc/report/report_sale_commissions.rml',
> +    parser=ReportSaleCommissions)
> 
> === renamed file 'dos_sale_commissioncalc/sale_commissions_report.xml' => 'dos_sale_commissioncalc/reports/sale_commissions_report.xml'
> === added directory 'dos_sale_commissioncalc/views'
> === renamed file 'dos_sale_commissioncalc/invoice_view.xml' => 'dos_sale_commissioncalc/views/invoice_view.xml'
> --- dos_sale_commissioncalc/invoice_view.xml	2014-06-11 10:23:47 +0000
> +++ dos_sale_commissioncalc/views/invoice_view.xml	2014-07-03 15:58:52 +0000
> @@ -4,7 +4,6 @@
>  		<record id="invoice_form_add_agent_settled_field" model="ir.ui.view">
>              <field name="name">account.invoice.form.add_agent_field</field>
>              <field name="model">account.invoice</field>
> -            <field name="type">form</field>
>              <field name="inherit_id" ref="account.invoice_form"/>
>              <field name="arch" type="xml">
>                  <field name="address_contact_id" position="after">
> @@ -12,7 +11,7 @@
>  					<field name="agent_id"/>
>  					<field name="agent2_id"/>
>  					<field name="agent1_percentage_distribution_commission" readonly="1" />
> -					<field name="agent2_percentage_distribution_commission" on_change="onchange_agent_percentage_distribution_commission2(agent2_percentage_distribution_commission)" />
> +					<field name="agent2_percentage_distribution_commission" on_change="onchange_ag_pctage_dist_comm2(agent2_percentage_distribution_commission)" />
>  					<field name="commission_settled" readonly="1"/>
>  					<field name="commission_settled_date" readonly="1"/>
>  					<field name="commission_total" readonly="1"/>
> 
> === renamed file 'dos_sale_commissioncalc/partner_view.xml' => 'dos_sale_commissioncalc/views/partner_view.xml'
> --- dos_sale_commissioncalc/partner_view.xml	2014-06-11 10:23:47 +0000
> +++ dos_sale_commissioncalc/views/partner_view.xml	2014-07-03 15:58:52 +0000
> @@ -5,7 +5,6 @@
>  	<record model="ir.ui.view" id="view_partner_form_agent_id">
>  		<field name="name">res.partner.form.inherit.agent_id</field>
>  		<field name="model">res.partner</field>
> -		<field name="type">form</field>
>  		<field name="inherit_id" ref="base.view_partner_form"/>
>  		<field name="arch" type="xml">
>  		<field name="company_id" position="after">
> @@ -22,7 +21,6 @@
>  	<record model="ir.ui.view" id="view_partner_form_is_agent">
>  		<field name="name">res.partner.form.inherit.is_agent</field>
>  		<field name="model">res.partner</field>
> -		<field name="type">form</field>
>  		<field name="inherit_id" ref="base.view_partner_form"/>
>  		<field name="arch" type="xml">
>  			<field name="supplier" position="after">
> 
> === renamed file 'dos_sale_commissioncalc/sale_commissions_view.xml' => 'dos_sale_commissioncalc/views/sale_commissions_view.xml'
> --- dos_sale_commissioncalc/sale_commissions_view.xml	2014-06-11 10:23:47 +0000
> +++ dos_sale_commissioncalc/views/sale_commissions_view.xml	2014-07-03 15:58:52 +0000
> @@ -6,7 +6,9 @@
>  		<menuitem name="Commissions Tables" id="menu_TableCommissions" parent="menu_sale_commissions" action="action_sale_commissiontable_tree"/>
>  		<menuitem name="Zones" id="menu_sale_zones" parent="menu_sale_commissions" action="action_sale_zone_tree"/>
>  		
> -	    <!--<menuitem name="New Sales Agent" id="menu_new_sale_commisions_agent" parent="menu_sale_commisions_agent" action="action_sale_agent_form"/>-->
> -		<!--<menuitem action="action_order_form" id="menu_sale_order" parent="base.menu_sales" sequence="3" groups="base.group_sale_salesman,base.group_sale_manager"/>-->
> +	    <!--<menuitem name="New Sales Agent" id="menu_new_sale_commisions_agent" 
> +	    parent="menu_sale_commisions_agent" action="action_sale_agent_form"/>-->
> +		<!--<menuitem action="action_order_form" id="menu_sale_order" 
> +		parent="base.menu_sales" sequence="3" groups="base.group_sale_salesman,base.group_sale_manager"/>-->
>  	</data>
>  </openerp>
> \ No newline at end of file
> 
> === renamed file 'dos_sale_commissioncalc/sale_order_view.xml' => 'dos_sale_commissioncalc/views/sale_order_view.xml'
> --- dos_sale_commissioncalc/sale_order_view.xml	2014-06-11 10:23:47 +0000
> +++ dos_sale_commissioncalc/views/sale_order_view.xml	2014-07-03 15:58:52 +0000
> @@ -4,7 +4,6 @@
>  		<record id="view_order_form_add_commissions" model="ir.ui.view">
>              <field name="name">sale.order.form.add_commissions</field>
>              <field name="model">sale.order</field>
> -            <field name="type">form</field>
>              <field name="inherit_id" ref="sale.view_order_form"/>
>              <field name="arch" type="xml">
>                  <notebook position="inside">
> @@ -12,7 +11,7 @@
>  						<field name="agent_id"/>
>  						<field name="agent2_id"/>
>  						<field name="agent1_percentage_distribution_commission" readonly="1" />
> -						<field name="agent2_percentage_distribution_commission" on_change="onchange_agent_percentage_distribution_commission2(agent2_percentage_distribution_commission)" />
> +						<field name="agent2_percentage_distribution_commission" on_change="onchange_ag_pctage_dist_comm2(agent2_percentage_distribution_commission)" />
>  					</page>
>  				</notebook>
>  			</field>
> @@ -21,7 +20,6 @@
>  		 <!--<record id="view_order_form_change_partner_onchange_commissions" model="ir.ui.view">
>              <field name="name">sale.order.form.change_partner_onchange_commissions</field>
>              <field name="model">sale.order</field>
> -            <field name="type">form</field>
>              <field name="inherit_id" ref="sale.view_order_form"/>
>              <field name="arch" type="xml">
>                  <field name="partner_id" position="replace">
> 
> === renamed file 'dos_sale_commissioncalc/saleagent_view.xml' => 'dos_sale_commissioncalc/views/saleagent_view.xml'
> --- dos_sale_commissioncalc/saleagent_view.xml	2014-06-11 10:23:47 +0000
> +++ dos_sale_commissioncalc/views/saleagent_view.xml	2014-07-03 15:58:52 +0000
> @@ -10,7 +10,6 @@
>      <record model="ir.ui.view" id="view_sale_agent_tree">
>          <field name="name">sale.agent.info.tree</field>
>          <field name="model">sale.agent</field>
> -        <field name="type">tree</field>
>          <field name="arch" type="xml">
>              <tree string="Saleagent">
>                           <field name="name"  select="1"/>
> @@ -23,7 +22,6 @@
>      <record model="ir.ui.view" id="view_sale_agent_form">
>          <field name="name">sale.agent.info.form</field>
>          <field name="model">sale.agent</field>
> -        <field name="type">form</field>
>          <field name="arch" type="xml">
>              <form string="SaleAgent">
>              <notebook>
> 
> === renamed file 'dos_sale_commissioncalc/salecommissiontableview.xml' => 'dos_sale_commissioncalc/views/salecommissiontableview.xml'
> --- dos_sale_commissioncalc/salecommissiontableview.xml	2014-06-11 10:23:47 +0000
> +++ dos_sale_commissioncalc/views/salecommissiontableview.xml	2014-07-03 15:58:52 +0000
> @@ -11,7 +11,6 @@
>      <record model="ir.ui.view" id="view_sale_commissionlines_tree">
>          <field name="name">sale.commissionlines.tree</field>
>          <field name="model">sale.commissionlines</field>
> -        <field name="type">tree</field>
>          <field name="arch" type="xml">
>              <tree string="Commission Lines">
>              	<field name="discount"/>
> @@ -22,7 +21,6 @@
>      <record model="ir.ui.view" id="view_sale_commissionlines_form">
>          <field name="name">sale.commissionlines.form</field>
>          <field name="model">sale.commissionlines</field>
> -        <field name="type">form</field>
>          <field name="arch" type="xml">
>              <form string="Commission Lines">
>              	<separator string="Detail" colspan="4"/>
> @@ -41,7 +39,6 @@
>      <record model="ir.ui.view" id="view_sale_commissiontable_tree">
>          <field name="name">sale.commissiontable.tree</field>
>          <field name="model">sale.commissiontable</field>
> -        <field name="type">tree</field>
>          <field name="arch" type="xml">
>              <tree string="Commission Table">
>                           <field name="name"  select="1"/>
> @@ -51,7 +48,6 @@
>      <record model="ir.ui.view" id="view_sale_commissiontable_form">
>          <field name="name">sale.commissiontable.form</field>
>          <field name="model">sale.commissiontable</field>
> -        <field name="type">form</field>
>          <field name="arch" type="xml">
>              <form string="Commission Table">
>              	<separator string="General Information" colspan="4"/>
> @@ -69,7 +65,6 @@
>  
>      <record model="ir.actions.act_window" id="action_sale_commissiontable_tree">
>          <field name="name">Commission Table</field>
> -        <field name="type">ir.actions.act_window</field>
>          <field name="res_model">sale.commissiontable</field>
>          <field name="view_type">form</field>
>          <field name="view_mode">tree,form</field>
> @@ -77,7 +72,6 @@
>      </record>
>      <!--<record model="ir.actions.act_window" id="action_sale_commissiontable_form">
>          <field name="name">Commission Table</field>
> -        <field name="type">ir.actions.act_window</field>
>          <field name="res_model">sale.commissiontable</field>
>          <field name="view_type">form</field>
>          <field name="view_mode">tree,form</field>
> 
> === renamed file 'dos_sale_commissioncalc/salezone_view.xml' => 'dos_sale_commissioncalc/views/salezone_view.xml'
> --- dos_sale_commissioncalc/salezone_view.xml	2014-06-11 10:23:47 +0000
> +++ dos_sale_commissioncalc/views/salezone_view.xml	2014-07-03 15:58:52 +0000
> @@ -9,7 +9,6 @@
>      <record model="ir.ui.view" id="view_sale_zone_tree">
>          <field name="name">sale.zone.info.tree</field>
>          <field name="model">sale.zone</field>
> -        <field name="type">tree</field>
>          <field name="arch" type="xml">
>              <tree string="SaleZone">
>              	<field name="description" select="1"/>
> @@ -19,7 +18,6 @@
>      <record model="ir.ui.view" id="view_sale_zone_form">
>          <field name="name">sale.zone.info.form</field>
>          <field name="model">sale.zone</field>
> -        <field name="type">form</field>
>          <field name="arch" type="xml">
>              <form string="SaleZone">
>  		<separator string="General Information" colspan="4"/>
> @@ -45,7 +43,5 @@
>          <field name="view_id" ref="view_sale_zone_form"/>
>      </record>
>  
> -	
> -
>  </data>
>  </openerp>
> 
> === modified file 'dos_sale_commissioncalc/wizard/dos_sale_commission_report_wizard.py'
> --- dos_sale_commissioncalc/wizard/dos_sale_commission_report_wizard.py	2014-06-11 10:23:47 +0000
> +++ dos_sale_commissioncalc/wizard/dos_sale_commission_report_wizard.py	2014-07-03 15:58:52 +0000
> @@ -20,237 +20,278 @@
>  ##############################################################################
>  
>  import time
> -from osv import osv, fields
> +from openerp.orm import orm, fields
>  from datetime import datetime
>  from dateutil.relativedelta import relativedelta
> -from tools.translate import _
> -
> -class dos_sale_commission_report_wizard(osv.osv_memory):
> -	_name = 'dos.sale.commission.report.wizard'
> -	_description = 'Sale Commissions Report'
> -	
> -	def _get_first_day_present_year(self, cr, uid, context=None):
> -		if context is None:
> -			context = {}
> -		date_ref = datetime.now().strftime('%Y-%m-%d')
> -		first_date = (datetime.strptime(date_ref, '%Y-%m-%d') + relativedelta(day=1, month=1))
> -		return first_date.strftime('%Y-%m-%d')
> -		# return datetime.now()
> -	
> -	_columns = {
> -		'date_start': fields.date('From invoice Date' ),
> -		'date_end': fields.date('To invoice Date' ),
> -		'payment_date_start': fields.date('From payment date'),
> -		'payment_date_end': fields.date('To payment date'),
> -		'settled': fields.selection([
> -			('all','All'),
> -			('not_settled','Not Settled'),
> -			('settled','Settled'),
> -			],'Settled' ),
> -		'final_report': fields.boolean('Definitivo'),
> -		'agent_id': fields.many2one('sale.agent','Sales Agent'),
> -	}
> -	
> -	_defaults = {
> -		'date_start': _get_first_day_present_year,
> -		'date_end': time.strftime('%Y-%m-%d'),
> -		'payment_date_start': _get_first_day_present_year,
> -		'payment_date_end': time.strftime('%Y-%m-%d'),
> -		'settled': 'not_settled',
> -		'final_report': False,
> -	}
> -	
> -	def get_invoice_commission_percentage(self, invoice, agent_obj):
> -		if not invoice.agent_id:
> -			return 0.0
> -			
> -		dto = invoice.header_discount + invoice.early_payment_discount
> -		if invoice.decorator_discount:
> -			dto = invoice.decorator_discount
> -		final_date = invoice.date_invoice
> -		if invoice.paid_date and invoice.paid_date > final_date:
> -			final_date = invoice.paid_date
> -		if invoice.date_due and invoice.date_due > final_date:
> -			final_date = invoice.date_due
> -		diasMes = 30
> -		
> -		dtt1 = datetime.strptime(final_date, '%Y-%m-%d')
> -		dtt2 = datetime.strptime(invoice.date_invoice, '%Y-%m-%d')
> -		dif = dtt1 - dtt2
> -		
> -		numPeriodos30dias = round(dif.days / 30,0)
> -		
> -		agent = invoice.agent_id
> -		
> -		por_commission = 0.0
> -		if agent.commissionwithouttable:
> -			if dto == 10.0:
> -				por_commission = 4.0
> -			elif dto == 15.0:
> -				por_commission = 2.0
> -			elif dto == 20.0:
> -				por_commission = 1.0
> -			else:
> -				por_commission = agent.commission_rate
> -		else:
> -			if invoice.partner_id.unique_commission:
> -				por_commission = invoice.partner_id.unique_commission
> -			elif invoice.partner_id.unique_commission_2:
> -				por_commission = invoice.partner_id.unique_commission_2
> -			elif agent.commission_rate:
> -				por_commission = agent.commission_rate
> -			elif agent.commissiontozeroforce:
> -				por_commission = 0.0
> -			else:
> -				if agent.commissiontable_id:
> -					if dto == 0.0:
> -						por_commission = agent.commissiontable_id.commissiondctzero
> -					else:
> -						dto_assign = 0
> -						line_assign = False
> -						for commission_line in agent.commissiontable_id.sale_commissionlines:
> -							if commission_line.discount >= dto and (not line_assign or dto_assign > commission_line.discount):
> -								dto_assign = commission_line.discount
> -								por_commission = commission_line.commission
> -								line_assign = True
> -						if not line_assign:
> -							if dto <= agent.commissiontable_id.maxdctpercent:
> -								por_commission = agent.commissiontable_id.maxdctcommission
> -							else:
> -								por_commission = 0.0
> -
> -					por_commission = por_commission - (numPeriodos30dias * agent.commissiontable_id.dctbypaymentdelay)
> -					if por_commission < agent.commissiontable_id.maxdctcommission:
> -						por_commission = agent.commissiontable_id.maxdctcommission
> -		
> -		#En la factura pondremos la comision total
> -		# if invoice.agent2_id and invoice.agent2_percentage_distribution_commission > 0:
> -			# por_commission2 = por_commission * invoice.agent2_percentage_distribution_commission / 100.0
> -			# por_commission2 = round(por_commission2,2)
> -			# por_commission = por_commission - por_commission2
> -			# if invoice.agent2_id.id == agent_obj.id:
> -				# por_commission = por_commission2
> -		
> -		return por_commission
> -		
> -	def _get_agent_ids(self, cr, uid, data, context=None):
> -		
> -		inv_obj = self.pool.get('account.invoice')
> -		cur_obj = self.pool.get('res.currency')
> -		inv_ids = []
> -			
> -		if data['agent_id']:
> -			if data['settled'] == 'all':
> -				inv_ids = inv_obj.search(cr, uid, [ ('state','=', 'paid'), ('date_invoice','>=',data['date_start']), ('date_invoice','<=',data['date_end']), ('paid_date','>=',data['payment_date_start']), ('paid_date','<=',data['payment_date_end']), ('agent_id', '=', data['agent_id']) ])
> -			else:
> -				settled = False
> -				if data['settled'] == 'settled':
> -					settled = True
> -				inv_ids = inv_obj.search(cr, uid, [ ('state','=', 'paid'), ('commission_settled','=', settled), ('date_invoice','>=',data['date_start']), ('date_invoice','<=',data['date_end']), ('paid_date','>=',data['payment_date_start']), ('paid_date','<=',data['payment_date_end']), ('agent_id', '=', data['agent_id'])])
> -		else:
> -			if data['settled'] == 'all':
> -				inv_ids = inv_obj.search(cr, uid, [ ('state','=', 'paid'), ('date_invoice','>=',data['date_start']), ('date_invoice','<=',data['date_end']), ('paid_date','>=',data['payment_date_start']), ('paid_date','<=',data['payment_date_end'])])
> -			else:
> -				settled = False
> -				if data['settled'] == 'settled':
> -					settled = True
> -				inv_ids = inv_obj.search(cr, uid, [ ('state','=', 'paid'), ('commission_settled','=', settled), ('date_invoice','>=',data['date_start']), ('date_invoice','<=',data['date_end']), ('paid_date','>=',data['payment_date_start']), ('paid_date','<=',data['payment_date_end'])])
> -				
> -		inv_ids2 = []
> -		#para las facturas donde este como segundo representante
> -		if data['agent_id']:
> -			if data['settled'] == 'all':
> -				inv_ids2 = inv_obj.search(cr, uid, [ ('state','=', 'paid'), ('date_invoice','>=',data['date_start']), ('date_invoice','<=',data['date_end']), ('paid_date','>=',data['payment_date_start']), ('paid_date','<=',data['payment_date_end']), ('agent2_id', '=', data['agent_id']) ])
> -			else:
> -				settled = False
> -				if data['settled'] == 'settled':
> -					settled = True
> -				inv_ids2 = inv_obj.search(cr, uid, [ ('state','=', 'paid'), ('commission_settled','=', settled), ('date_invoice','>=',data['date_start']), ('date_invoice','<=',data['date_end']), ('paid_date','>=',data['payment_date_start']), ('paid_date','<=',data['payment_date_end']), ('agent2_id', '=', data['agent_id'])])
> -			inv_ids = inv_ids + inv_ids2
> -				
> -		res = {}
> -		
> -		invoice_ids = inv_obj.browse(cr,uid,inv_ids)
> -		
> -		agent_invoices = {}
> -		for invoice in invoice_ids:
> -			if data['agent_id']:
> -				res[data['agent_id']] = data['agent_id']
> -				if not data['agent_id'] in agent_invoices:
> -					agent_invoices[data['agent_id']] = [invoice.id]
> -				else:
> -					agent_invoices[data['agent_id']].append(invoice.id)
> -			else:
> -				if invoice.agent_id and not invoice.agent_id.id in res:
> -					res[invoice.agent_id.id] = invoice.agent_id.id
> -				if invoice.agent2_id and not invoice.agent2_id.id in res:
> -					res[invoice.agent2_id.id] = invoice.agent2_id.id
> -				
> -				if invoice.agent_id:
> -					if not invoice.agent_id.id in agent_invoices:
> -						agent_invoices[invoice.agent_id.id] = [invoice.id]
> -					else:
> -						agent_invoices[invoice.agent_id.id].append(invoice.id)
> -				
> -				if invoice.agent2_id:
> -					if not invoice.agent2_id.id in agent_invoices:
> -						agent_invoices[invoice.agent2_id.id] = [invoice.id]
> -					else:
> -						agent_invoices[invoice.agent2_id.id].append(invoice.id)
> -				
> -				if data['final_report'] and not invoice.commission_settled:
> -					commission = self.get_invoice_commission_percentage(invoice, invoice.agent_id)
> -					invoice.commission_settled = True
> -					invoice.commission_settled_date = time.strftime('%Y-%m-%d')
> -					base_amount = invoice.amount_untaxed
> -					#si se ha a�adido el articulo de entrega a cuenta, hay que sumar lo a la base imponible
> -					for line in invoice.invoice_line:
> -						if line.product_id and line.product_id.name == 'ENTREGA A CUENTA':
> -							base_amount -= line.price_subtotal #resto porque es negativo, con lo que debo de estar sumando
> -						
> -					invoice.commission_total = cur_obj.round(cr, uid, invoice.currency_id, commission * base_amount / 100.0)
> -					inv_obj.write(cr, uid, [invoice.id], {'commission_settled':invoice.commission_settled, 'commission_settled_date': invoice.commission_settled_date, 'commission_total':invoice.commission_total})
> -				
> -		data['agent_invoices'] = agent_invoices
> -		
> -		agent_invoice_pending = {}
> -		for agent_id in res.values():
> -			inv_pending_ids = inv_obj.search(cr, uid, [ ('state','=', 'open'), ('commission_settled','=', False), ('agent_id', '=', agent_id)])
> -			inv_pending2_ids = inv_obj.search(cr, uid, [ ('state','=', 'open'), ('commission_settled','=', False), ('agent2_id', '=', agent_id)])
> -			inv_pending_ids = inv_pending_ids + inv_pending2_ids
> -			agent_invoice_pending[agent_id] = inv_pending_ids
> -		
> -		data['agent_invoice_pending'] = agent_invoice_pending
> -		
> -		return res.values()
> -	
> -	def check_report(self, cr, uid, ids, context=None):
> -		datas = {}
> -		if context is None:
> -			context = {}
> -		
> -		data = self.read(cr, uid, ids, [], context=context)[0]
> -		agent_ids = self._get_agent_ids(cr, uid, data, context=context)
> -		
> -		context['data_report'] = data
> -		datas = {
> -			 'ids': agent_ids, #context.get('active_ids',[]),
> -			 'model': 'sale.agent',
> -			 'form': data,
> -			 'context': context
> -		}
> -		if agent_ids and len(agent_ids) > 0:
> -			return {
> -				'type': 'ir.actions.report.xml',
> -				'report_name': 'sale_commissions_report',
> -				'context': context,
> -				'datas': datas,
> -			}
> -		else:
> -			raise osv.except_osv(_('Warning !'),'No hay facturas en los limites indicados.')
> -			#msgalert = {'title':'Warning','message':'No hay facturas en los limites indicados'}
> -			#return {'warning':msgalert}
> -			
> -dos_sale_commission_report_wizard()
> -
> -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
> \ No newline at end of file
> +from openerp.tools.translate import _
> +
> +
> +class DosSaleCommissionReportWizard(orm.TransientModel):
> +    _name = 'dos.sale.commission.report.wizard'
> +    _description = 'Sale Commissions Report'
> +
> +    def _get_first_day_present_year(self, cr, uid, context=None):
> +        if context is None:
> +            context = {}
> +        date_ref = datetime.now().strftime('%Y-%m-%d')
> +        first_date = (datetime.strptime(date_ref, '%Y-%m-%d') +
> +                      relativedelta(day=1, month=1))
> +        return first_date.strftime('%Y-%m-%d')
> +        # return datetime.now()
> +
> +    _columns = {
> +        'date_start': fields.date('From invoice Date'),
> +        'date_end': fields.date('To invoice Date'),
> +        'payment_date_start': fields.date('From payment date'),
> +        'payment_date_end': fields.date('To payment date'),
> +        'settled': fields.selection([
> +            ('all', 'All'),
> +            ('not_settled', 'Not Settled'),
> +            ('settled', 'Settled'),
> +            ], 'Settled'),
> +        'final_report': fields.boolean('Definitivo'),
> +        'agent_id': fields.many2one('sale.agent', 'Sales Agent'),
> +    }
> +
> +    _defaults = {
> +        'date_start': _get_first_day_present_year,
> +        'date_end': time.strftime('%Y-%m-%d'),
> +        'payment_date_start': _get_first_day_present_year,
> +        'payment_date_end': time.strftime('%Y-%m-%d'),
> +        'settled': 'not_settled',
> +        'final_report': False,
> +    }
> +
> +    def get_invoice_commission_percentage(self, invoice, agent_obj):
> +        if not invoice.agent_id:
> +            return 0.0
> +        dto = invoice.header_discount + invoice.early_payment_discount
> +        if invoice.decorator_discount:
> +            dto = invoice.decorator_discount
> +        final_date = invoice.date_invoice
> +        if invoice.paid_date and invoice.paid_date > final_date:
> +            final_date = invoice.paid_date
> +        if invoice.date_due and invoice.date_due > final_date:
> +            final_date = invoice.date_due
> +        dtt1 = datetime.strptime(final_date, '%Y-%m-%d')
> +        dtt2 = datetime.strptime(invoice.date_invoice, '%Y-%m-%d')
> +        dif = dtt1 - dtt2
> +        numPeriodos30dias = round(dif.days / 30, 0)
> +        agent = invoice.agent_id
> +        por_commission = 0.0
> +        if agent.commissionwithouttable:
> +            if dto == 10.0:
> +                por_commission = 4.0
> +            elif dto == 15.0:
> +                por_commission = 2.0
> +            elif dto == 20.0:
> +                por_commission = 1.0
> +            else:
> +                por_commission = agent.commission_rate
> +        else:
> +            if invoice.partner_id.unique_commission:
> +                por_commission = invoice.partner_id.unique_commission
> +            elif invoice.partner_id.unique_commission_2:
> +                por_commission = invoice.partner_id.unique_commission_2
> +            elif agent.commission_rate:
> +                por_commission = agent.commission_rate
> +            elif agent.commissiontozeroforce:
> +                por_commission = 0.0
> +            else:
> +                if agent.commissiontable_id:
> +                    if dto == 0.0:
> +                        por_commission = (
> +                            agent.commissiontable_id.commissiondctzero)
> +                    else:
> +                        dto_assign = 0
> +                        line_assign = False
> +                        for commission_line in (
> +                                agent.commissiontable_id.sale_commissionlines):
> +                            if (commission_line.discount >= dto and
> +                                (not line_assign or dto_assign >
> +                                 commission_line.discount)):
> +                                dto_assign = commission_line.discount
> +                                por_commission = commission_line.commission
> +                                line_assign = True
> +                        if not line_assign:
> +                            if dto <= agent.commissiontable_id.maxdctpercent:
> +                                por_commission = (
> +                                    agent.commissiontable_id.maxdctcommission)
> +                            else:
> +                                por_commission = 0.0
> +                    por_commission = por_commission - (
> +                        numPeriodos30dias *
> +                        agent.commissiontable_id.dctbypaymentdelay)
> +                    if (por_commission <
> +                            agent.commissiontable_id.maxdctcommission):
> +                        por_commission = (
> +                            agent.commissiontable_id.maxdctcommission)
> +        # En la factura pondremos la comision total
> +        # if (invoice.agent2_id and
> +        #        invoice.agent2_percentage_distribution_commission > 0):
> +        #    por_commission2 = (
> +        #        por_commission *
> +        #        invoice.agent2_percentage_distribution_commission / 100.0)
> +            # por_commission2 = round(por_commission2,2)
> +            # por_commission = por_commission - por_commission2
> +            # if invoice.agent2_id.id == agent_obj.id:
> +                # por_commission = por_commission2
> +        return por_commission
> +
> +    def _get_agent_ids(self, cr, uid, data, context=None):
> +        inv_obj = self.pool['account.invoice']
> +        cur_obj = self.pool['res.currency']
> +        inv_ids = []
> +        if data['agent_id']:
> +            if data['settled'] == 'all':
> +                inv_ids = inv_obj.search(cr, uid, [
> +                    ('state', '=', 'paid'),
> +                    ('date_invoice', '>=', data['date_start']),
> +                    ('date_invoice', '<=', data['date_end']),
> +                    ('paid_date', '>=', data['payment_date_start']),
> +                    ('paid_date', '<=', data['payment_date_end']),
> +                    ('agent_id', '=', data['agent_id'])])
> +            else:
> +                settled = False
> +                if data['settled'] == 'settled':
> +                    settled = True
> +                inv_ids = inv_obj.search(cr, uid, [
> +                    ('state', '=', 'paid'),
> +                    ('commission_settled', '=', settled),
> +                    ('date_invoice', '>=', data['date_start']),
> +                    ('date_invoice', '<=', data['date_end']),
> +                    ('paid_date', '>=', data['payment_date_start']),
> +                    ('paid_date', '<=', data['payment_date_end']),
> +                    ('agent_id', '=', data['agent_id'])])
> +        else:
> +            if data['settled'] == 'all':
> +                inv_ids = inv_obj.search(cr, uid, [
> +                    ('state', '=', 'paid'),
> +                    ('date_invoice', '>=', data['date_start']),
> +                    ('date_invoice', '<=', data['date_end']),
> +                    ('paid_date', '>=', data['payment_date_start']),
> +                    ('paid_date', '<=', data['payment_date_end'])])
> +            else:
> +                settled = False
> +                if data['settled'] == 'settled':
> +                    settled = True
> +                inv_ids = inv_obj.search(cr, uid, [
> +                    ('state', '=', 'paid'),
> +                    ('commission_settled', '=', settled),
> +                    ('date_invoice', '>=', data['date_start']),
> +                    ('date_invoice', '<=', data['date_end']),
> +                    ('paid_date', '>=', data['payment_date_start']),
> +                    ('paid_date', '<=', data['payment_date_end'])])
> +        inv_ids2 = []
> +        # para las facturas donde este como segundo representante
> +        if data['agent_id']:
> +            if data['settled'] == 'all':
> +                inv_ids2 = inv_obj.search(cr, uid, [
> +                    ('state', '=', 'paid'),
> +                    ('date_invoice', '>=', data['date_start']),
> +                    ('date_invoice', '<=', data['date_end']),
> +                    ('paid_date', '>=', data['payment_date_start']),
> +                    ('paid_date', '<=', data['payment_date_end']),
> +                    ('agent2_id', '=', data['agent_id'])])
> +            else:
> +                settled = False
> +                if data['settled'] == 'settled':
> +                    settled = True
> +                inv_ids2 = inv_obj.search(cr, uid, [
> +                    ('state', '=', 'paid'),
> +                    ('commission_settled', '=', settled),
> +                    ('date_invoice', '>=', data['date_start']),
> +                    ('date_invoice', '<=', data['date_end']),
> +                    ('paid_date', '>=', data['payment_date_start']),
> +                    ('paid_date', '<=', data['payment_date_end']),
> +                    ('agent2_id', '=', data['agent_id'])])
> +            inv_ids = inv_ids + inv_ids2
> +        res = {}
> +        invoice_ids = inv_obj.browse(cr, uid, inv_ids)
> +        agent_invoices = {}
> +        for invoice in invoice_ids:
> +            if data['agent_id']:
> +                res[data['agent_id']] = data['agent_id']
> +                if not data['agent_id'] in agent_invoices:
> +                    agent_invoices[data['agent_id']] = [invoice.id]
> +                else:
> +                    agent_invoices[data['agent_id']].append(invoice.id)
> +            else:
> +                if invoice.agent_id and invoice.agent_id.id not in res:
> +                    res[invoice.agent_id.id] = invoice.agent_id.id
> +                if invoice.agent2_id and invoice.agent2_id.id not in res:
> +                    res[invoice.agent2_id.id] = invoice.agent2_id.id
> +                if invoice.agent_id:
> +                    if invoice.agent_id.id not in agent_invoices:
> +                        agent_invoices[invoice.agent_id.id] = [invoice.id]
> +                    else:
> +                        agent_invoices[invoice.agent_id.id].append(invoice.id)
> +                if invoice.agent2_id:
> +                    if invoice.agent2_id.id not in agent_invoices:
> +                        agent_invoices[invoice.agent2_id.id] = [invoice.id]
> +                    else:
> +                        agent_invoices[invoice.agent2_id.id].append(invoice.id)
> +                if data['final_report'] and not invoice.commission_settled:
> +                    commission = (
> +                        self.get_invoice_commission_percentage(
> +                            invoice, invoice.agent_id))
> +                    invoice.commission_settled = True
> +                    invoice.commission_settled_date = time.strftime('%Y-%m-%d')
> +                    base_amount = invoice.amount_untaxed
> +                    # si se ha a�adido el articulo de entrega a cuenta,
> +                    # hay que sumar lo a la base imponible
> +                    for line in invoice.invoice_line:
> +                        if (line.product_id and
> +                                line.product_id.name == 'ENTREGA A CUENTA'):
> +                            base_amount -= line.price_subtotal
> +                            # resto porque es negativo, con lo que debo sumar
> +                    invoice.commission_total = (
> +                        cur_obj.round(cr, uid, invoice.currency_id,
> +                                      commission * base_amount / 100.0))
> +                    inv_obj.write(cr, uid, [invoice.id], {
> +                        'commission_settled': invoice.commission_settled,
> +                        'commission_settled_date': (
> +                            invoice.commission_settled_date),
> +                        'commission_total': invoice.commission_total})
> +        data['agent_invoices'] = agent_invoices
> +        agent_invoice_pending = {}
> +        for agent_id in res.values():
> +            inv_pending_ids = inv_obj.search(cr, uid, [
> +                ('state', '=', 'open'),
> +                ('commission_settled', '=', False),
> +                ('agent_id', '=', agent_id)])
> +            inv_pending2_ids = inv_obj.search(cr, uid, [
> +                ('state', '=', 'open'),
> +                ('commission_settled', '=', False),
> +                ('agent2_id', '=', agent_id)])
> +            inv_pending_ids = inv_pending_ids + inv_pending2_ids
> +            agent_invoice_pending[agent_id] = inv_pending_ids
> +        data['agent_invoice_pending'] = agent_invoice_pending
> +        return res.values()
> +
> +    def check_report(self, cr, uid, ids, context=None):
> +        datas = {}
> +        if context is None:
> +            context = {}
> +        data = self.read(cr, uid, ids, [], context=context)[0]
> +        agent_ids = self._get_agent_ids(cr, uid, data, context=context)
> +        context['data_report'] = data
> +        datas = {
> +            'ids': agent_ids,  # context.get('active_ids',[]),
> +            'model': 'sale.agent',
> +            'form': data,
> +            'context': context
> +        }
> +        if agent_ids and len(agent_ids) > 0:
> +            return {
> +                'type': 'ir.actions.report.xml',
> +                'report_name': 'sale_commissions_report',
> +                'context': context,
> +                'datas': datas,
> +            }
> +        else:
> +            raise orm.except_orm(_('Warning !'),
> +                                 'No hay facturas en los limites indicados.')
> +            # msgalert = {'title':'Warning',
> +            #            'message':'No hay facturas en los limites indicados'}
> +            # return {'warning':msgalert}
> 
> === modified file 'dos_sale_commissioncalc/wizard/dos_sale_commission_report_wizard.xml'
> --- dos_sale_commissioncalc/wizard/dos_sale_commission_report_wizard.xml	2014-06-11 10:23:47 +0000
> +++ dos_sale_commissioncalc/wizard/dos_sale_commission_report_wizard.xml	2014-07-03 15:58:52 +0000
> @@ -5,7 +5,6 @@
>  		<record id="dos_sale_commission_report_wizard_view" model="ir.ui.view">
>  			<field name="name">Sale Commissions Report View</field>
>  			<field name="model">dos.sale.commission.report.wizard</field>
> -			<field name="type">form</field>
>  			<field name="arch" type="xml">
>  				<form string="Limites">
>  					<group colspan="4" col="4">
> 


-- 
https://code.launchpad.net/~dani-ds/avanzosc/dos_sale_commissioncalc/+merge/225512
Your team Avanzosc_security is subscribed to branch lp:~avanzosc-security-team/avanzosc/72horas.


References