avanzosc team mailing list archive
-
avanzosc team
-
Mailing list archive
-
Message #00559
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