diff --git a/__init__.py b/__init__.py index 9024016..966c9ce 100644 --- a/__init__.py +++ b/__init__.py @@ -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') diff --git a/agent.py b/agent.py new file mode 100644 index 0000000..008c6e8 --- /dev/null +++ b/agent.py @@ -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 diff --git a/agent.xml b/agent.xml new file mode 100644 index 0000000..5d512a3 --- /dev/null +++ b/agent.xml @@ -0,0 +1,26 @@ + + + + + + + commission_global.agent_commission_sales.start + form + agent_commission_sales_start_view_form + + + Sale Agent Commission + commission_global.agent_commission_sales + + + Report Sale Agent Commission + + commission_global.agent_commission_sales_report + commission_global/sale_agent_commission.ods + + + + + diff --git a/locale/es.po b/locale/es.po index aded136..8833c65 100644 --- a/locale/es.po +++ b/locale/es.po @@ -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" diff --git a/sale_agent_commission.ods b/sale_agent_commission.ods new file mode 100644 index 0000000..bd752cb Binary files /dev/null and b/sale_agent_commission.ods differ diff --git a/tryton.cfg b/tryton.cfg index f955e0b..59eaf55 100644 --- a/tryton.cfg +++ b/tryton.cfg @@ -7,8 +7,7 @@ depends: invoice_report commission sale_shop - sale_pos - sale_pos_frontend xml: commission.xml sale.xml + agent.xml diff --git a/view/agent_commission_sales_start_view_form.xml b/view/agent_commission_sales_start_view_form.xml new file mode 100644 index 0000000..544190f --- /dev/null +++ b/view/agent_commission_sales_start_view_form.xml @@ -0,0 +1,13 @@ + + +
+