add report sale_agent_commission

This commit is contained in:
wilson gomez 2021-05-14 15:23:05 -05:00
parent f06f3dae9d
commit 989e0485eb
7 changed files with 362 additions and 36 deletions

View File

@ -5,6 +5,7 @@ from trytond.pool import Pool
import commission
import invoice
import sale
import agent
def register():
@ -14,8 +15,15 @@ def register():
sale.Sale,
invoice.Invoice,
commission.CreateInvoiceAsk,
agent.AgentCommissionSalesStart,
module='commission_global', type_='model')
Pool.register(
commission.CreateInvoice,
commission.CreateInvoiceDirect,
agent.AgentCommissionSales,
module='commission_global', type_='wizard')
Pool.register(
commission.CreateInvoice,
commission.CreateInvoiceDirect,
agent.AgentCommissionSalesReport,
module='commission_global', type_='report')

126
agent.py Normal file
View File

@ -0,0 +1,126 @@
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from __future__ import unicode_literals
from decimal import Decimal
from trytond.pool import PoolMeta, Pool
from trytond.model import fields, ModelSQL, ModelView
from trytond.transaction import Transaction
from trytond.wizard import Wizard, StateView, StateReport, Button, StateTransition
from trytond.report import Report
__all__ = ['AgentCommissionSalesStart',
'AgentCommissionSales', 'AgentCommissionSalesReport']
class AgentCommissionSalesStart(ModelView):
'Agent Commission Sales Start'
__name__ = 'commission_global.agent_commission_sales.start'
start_date = fields.Date('Start Date', required=True)
end_date = fields.Date('End Date', required=True)
company = fields.Many2One('company.company', 'Company',
required=True)
agent = fields.Many2One('commission.agent', 'Agent')
@staticmethod
def default_company():
return Transaction().context.get('company')
class AgentCommissionSales(Wizard):
'Agent Commission Sales'
__name__ = 'commission_global.agent_commission_sales'
start = StateView('commission_global.agent_commission_sales.start',
'commission_global.agent_commission_sales_start_view_form', [
Button('Cancel', 'end', 'tryton-cancel'),
Button('Print', 'print_', 'tryton-ok', default=True),
])
print_ = StateReport('commission_global.agent_commission_sales_report')
def do_print_(self, action):
agent_id = None
if self.start.agent:
agent_id = self.start.agent.id
data = {
'company': self.start.company.id,
'start_date': self.start.start_date,
'end_date': self.start.end_date,
'agent': agent_id,
}
return action, data
def transition_print_(self):
return 'end'
class AgentCommissionSalesReport(Report):
__name__ = 'commission_global.agent_commission_sales_report'
@classmethod
def get_context(cls, records, data):
report_context = super(AgentCommissionSalesReport, cls).get_context(records, data)
pool = Pool()
Company = pool.get('company.company')
Agent = pool.get('commission.agent')
PriceList = pool.get('product.price_list')
Invoice = pool.get('account.invoice')
InvoiceLine = pool.get('account.invoice.line')
dom = [
('company', '=', data['company']),
('state', 'in', ['posted', 'paid']),
('invoice_date', '>=', data['start_date']),
('invoice_date', '<=', data['end_date']),
]
if data['agent']:
dom.append(
('agent', '=', data['agent']),
)
invoices = Invoice.search([dom])
agents = {}
total_commission = []
for invoice in invoices:
if not invoice.agent or invoice.amount_to_pay != Decimal('0.0'):
continue
agent_id = invoice.agent.id
commission_ = 0
for l in invoice.lines:
if l.commission_amount:
commission_ += (l.commission_amount)
else:
if l.unit_price and l.product and l.quantity and l.origin \
and l.origin.sale.price_list:
percent_commission = l.origin.sale.price_list.percent_commission
if percent_commission:
commission_ += round((((l.unit_price) * int(l.quantity)) * percent_commission), 0)
if commission_ == 0:
continue
if invoice.total_amount < 0 and commission_ > 0:
commission_ = commission_ * (-1)
commission_ = round(commission_, 0)
total_commission.append(commission_)
if agent_id not in agents.keys():
agents[agent_id] = {
'agent': invoice.agent.party.name,
'invoices':[],
}
agents[agent_id]['invoices'].append({
'number': invoice.number + ' [ ' + invoice.lines[0].origin.sale.number + ' ]',
'date': invoice.invoice_date,
'commission': commission_,
'party': invoice.party.name,
})
report_context['records'] = agents.values()
report_context['total_commission'] = sum(total_commission)
report_context['start_date'] = data['start_date']
agent_ = ''
if data['agent']:
agent_ = Agent(data['agent']).party.name
report_context['agent'] = agent_
report_context['end_date'] = data['end_date']
report_context['company'] = Company(data['company']).rec_name
return report_context

26
agent.xml Normal file
View File

@ -0,0 +1,26 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<tryton>
<data>
<record model="ir.ui.view" id="agent_commission_sales_start_view_form">
<field name="model">commission_global.agent_commission_sales.start</field>
<field name="type">form</field>
<field name="name">agent_commission_sales_start_view_form</field>
</record>
<record model="ir.action.wizard" id="wizard_print_agent_commission_sale">
<field name="name">Sale Agent Commission</field>
<field name="wiz_name">commission_global.agent_commission_sales</field>
</record>
<record model="ir.action.report" id="report_sale_commission_sale">
<field name="name">Report Sale Agent Commission</field>
<field name="model"></field>
<field name="report_name">commission_global.agent_commission_sales_report</field>
<field name="report">commission_global/sale_agent_commission.ods</field>
</record>
<menuitem parent="sale.menu_reporting" sequence="110"
action="wizard_print_agent_commission_sale" id="menu_sale_agent_commission_report"/>
</data>
</tryton>

View File

@ -10,14 +10,6 @@ msgctxt "field:commission,origin_state:"
msgid "Origin State"
msgstr "Estado de Origen"
msgctxt "field:commission.agent,active:"
msgid "Active"
msgstr "Activo"
msgctxt "field:commission.agent,zones:"
msgid "Zones"
msgstr "Zonas"
msgctxt "field:commission.create_invoice.ask,agent:"
msgid "Agent"
msgstr "Agente"
@ -30,42 +22,35 @@ msgctxt "field:commission.plan,percentage:"
msgid "Percentage"
msgstr "Porcentaje"
msgctxt "field:sale.commission_global.agent_zone,agent:"
msgctxt "field:commission_global.agent_commission_sales.start,agent:"
msgid "Agent"
msgstr "Agente"
msgctxt "field:sale.commission_global.agent_zone,create_date:"
msgid "Create Date"
msgstr "Fecha de Creación"
msgctxt "field:commission_global.agent_commission_sales.start,company:"
msgid "Company"
msgstr "Empresa"
msgctxt "field:sale.commission_global.agent_zone,create_uid:"
msgid "Create User"
msgstr "Usuario de creción"
msgctxt "field:commission_global.agent_commission_sales.start,end_date:"
msgid "End Date"
msgstr "Fin"
msgctxt "field:sale.commission_global.agent_zone,id:"
#, fuzzy
msgctxt "field:commission_global.agent_commission_sales.start,id:"
msgid "ID"
msgstr "UP"
msgctxt "field:sale.commission_global.agent_zone,rec_name:"
msgid "Record Name"
msgstr "Nombre del registro"
msgctxt "field:sale.commission_global.agent_zone,write_date:"
msgid "Write Date"
msgstr "Modificado por Usuario"
msgctxt "field:sale.commission_global.agent_zone,write_uid:"
msgid "Write User"
msgstr "Usuario modificación"
msgctxt "field:sale.commission_global.agent_zone,zone:"
msgid "Zone"
msgstr "Zona"
msgctxt "field:commission_global.agent_commission_sales.start,start_date:"
msgid "Start Date"
msgstr "Inicio"
msgctxt "field:sale.sale,commission:"
msgid "Commission"
msgstr "Comisión"
msgctxt "model:commission_global.agent_commission_sales.start,name:"
msgid "Agent Commission Sales Start"
msgstr "Reporte de Comisiones Por Agente"
msgctxt "model:ir.action,name:"
msgid "Party Commission Dunning"
msgstr "Cartera por Comisiones"
@ -74,9 +59,170 @@ msgctxt "model:ir.action,name:act_create_invoice_direct"
msgid "Create Invoice"
msgstr "Crear Factura"
msgctxt "model:sale.commission_global.agent_zone,name:"
msgid "Agent - Zones"
msgstr "Agente - Zonas"
msgctxt "model:ir.action,name:report_sale_commission_sale"
msgid "Report Sale Agent Commission"
msgstr ""
#, fuzzy
msgctxt "model:ir.action,name:wizard_print_agent_commission_sale"
msgid "Sale Agent Commission"
msgstr "Reporte de Comisiones Por Agente"
msgctxt "model:ir.ui.menu,name:menu_sale_agent_commission_report"
msgid "Sale Agent Commission"
msgstr "Reporte de Comisiones Por Agente"
#, fuzzy
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "$"
msgstr "$"
#, fuzzy
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "("
msgstr "("
#, fuzzy
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid ")"
msgstr ")"
#, fuzzy
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid ","
msgstr ","
#, fuzzy
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "-"
msgstr "-"
#, fuzzy
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "/"
msgstr "/"
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "/for"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "00/00/0000"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "00:00:00"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "???"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "A PAGAR:"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "COMISIÓN"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "COMISIÓNES"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "Comisiones por Agente"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "FECHA"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "FECHA FINAL"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "FECHA INICIAL"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "No DOC"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "Página"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "Reporte de"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "TERCERO"
msgstr ""
#, fuzzy
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "TOTAL"
msgstr "TOTAL"
#, fuzzy
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "company"
msgstr "empresa"
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "de"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "end_date"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "for each='invoice in value['invoices']"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "for each='value in records'"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "invoice['commission']"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "invoice['date']"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "invoice['number']"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "invoice['party']"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "start_date"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "sum([invoice['commission'] for invoice in value['invoices']])"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "total_commission"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "value['agent']"
msgstr ""
msgctxt "report:commission_global.agent_commission_sales_report:"
msgid "€"
msgstr ""
msgctxt "selection:commission,origin_state:"
msgid ""
@ -93,3 +239,11 @@ msgstr "Pagada"
msgctxt "selection:commission,origin_state:"
msgid "Posted"
msgstr "Contabilizada"
msgctxt "wizard_button:commission_global.agent_commission_sales,start,end:"
msgid "Cancel"
msgstr "Cancelar"
msgctxt "wizard_button:commission_global.agent_commission_sales,start,print_:"
msgid "Print"
msgstr "Imprimir"

BIN
sale_agent_commission.ods Normal file

Binary file not shown.

View File

@ -7,8 +7,7 @@ depends:
invoice_report
commission
sale_shop
sale_pos
sale_pos_frontend
xml:
commission.xml
sale.xml
agent.xml

View File

@ -0,0 +1,13 @@
<?xml version="1.0"?>
<!-- This file is part of Tryton. The COPYRIGHT file at the top level of
this repository contains the full copyright notices and license terms. -->
<form>
<label name="agent"/>
<field name="agent"/>
<label name="company"/>
<field name="company"/>
<label name="start_date"/>
<field name="start_date"/>
<label name="end_date"/>
<field name="end_date"/>
</form>