avanzosc team mailing list archive
-
avanzosc team
-
Mailing list archive
-
Message #00554
[Merge] lp:~dani-ds/avanzosc/dos_sale_commissioncalc into lp:~avanzosc-security-team/avanzosc/72horas
Daniel Campos (Avanzosc) has proposed merging lp:~dani-ds/avanzosc/dos_sale_commissioncalc into lp:~avanzosc-security-team/avanzosc/72horas.
Requested reviews:
Avanzosc_security (avanzosc-security-team)
For more details, see:
https://code.launchpad.net/~dani-ds/avanzosc/dos_sale_commissioncalc/+merge/225512
dos_sale_commissioncalc
--
https://code.launchpad.net/~dani-ds/avanzosc/dos_sale_commissioncalc/+merge/225512
Your team Avanzosc_security is requested to review the proposed merge of lp:~dani-ds/avanzosc/dos_sale_commissioncalc into lp:~avanzosc-security-team/avanzosc/72horas.
=== 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:53:39 +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:53:39 +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:53:39 +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:53:39 +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:53:39 +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:53:39 +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')
+ 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:53:39 +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,
+ 'company_id': lambda s, cr, uid,
+ c: s.pool['res.company']._company_default_get(cr, uid, 'sale.shop',
+ 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:53:39 +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:53:39 +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',
+ 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:53:39 +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:53:39 +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 stock_picking(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, {
+ '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)
=== 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:53:39 +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:53:39 +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�do 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�do 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
+ # 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:53:39 +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:53:39 +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:53:39 +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:53:39 +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:53:39 +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:53:39 +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:53:39 +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:53:39 +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�do 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:53:39 +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">
Follow ups