Skip to content

Commit 3eca214

Browse files
committed
[MIG] sale_commission_partial_settlement: Migration to 16.0
1 parent 14d7853 commit 3eca214

20 files changed

Lines changed: 430 additions & 416 deletions

sale_commission_partial_settlement/README.rst

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@ Sales commissions based on paid amount
1717
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
1818
:alt: License: AGPL-3
1919
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fcommission-lightgray.png?logo=github
20-
:target: https://github.com/OCA/commission/tree/14.0/sale_commission_partial_settlement
20+
:target: https://github.com/OCA/commission/tree/16.0/sale_commission_partial_settlement
2121
:alt: OCA/commission
2222
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
23-
:target: https://translation.odoo-community.org/projects/commission-14-0/commission-14-0-sale_commission_partial_settlement
23+
:target: https://translation.odoo-community.org/projects/commission-16-0/commission-16-0-sale_commission_partial_settlement
2424
:alt: Translate me on Weblate
2525
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
26-
:target: https://runboat.odoo-community.org/builds?repo=OCA/commission&target_branch=14.0
26+
:target: https://runboat.odoo-community.org/builds?repo=OCA/commission&target_branch=16.0
2727
:alt: Try me on Runboat
2828

2929
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -50,7 +50,7 @@ Bug Tracker
5050
Bugs are tracked on `GitHub Issues <https://github.com/OCA/commission/issues>`_.
5151
In case of trouble, please check there if your issue has already been reported.
5252
If you spotted it first, help us to smash it by providing a detailed and welcomed
53-
`feedback <https://github.com/OCA/commission/issues/new?body=module:%20sale_commission_partial_settlement%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
53+
`feedback <https://github.com/OCA/commission/issues/new?body=module:%20sale_commission_partial_settlement%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
5454

5555
Do not contact contributors directly about support or help with technical issues.
5656

@@ -105,6 +105,6 @@ Current `maintainers <https://odoo-community.org/page/maintainer-role>`__:
105105

106106
|maintainer-aleuffre| |maintainer-renda-dev| |maintainer-PicchiSeba|
107107

108-
This module is part of the `OCA/commission <https://github.com/OCA/commission/tree/14.0/sale_commission_partial_settlement>`_ project on GitHub.
108+
This module is part of the `OCA/commission <https://github.com/OCA/commission/tree/16.0/sale_commission_partial_settlement>`_ project on GitHub.
109109

110110
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Copyright 2023 Nextev
22
{
33
"name": "Sales commissions based on paid amount",
4-
"version": "14.0.1.0.1",
4+
"version": "16.0.1.0.0",
55
"author": "Nextev Srl," "Ooops," "Odoo Community Association (OCA)",
66
"maintainers": ["aleuffre", "renda-dev", "PicchiSeba"],
77
"category": "Sales Management",
@@ -10,7 +10,7 @@
1010
"website": "https://github.com/OCA/commission",
1111
"data": [
1212
"security/ir.model.access.csv",
13-
"views/sale_commission_view.xml",
13+
"views/commission_view.xml",
1414
],
1515
"installable": True,
1616
}

sale_commission_partial_settlement/i18n/es.po

Lines changed: 27 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -4,45 +4,45 @@
44
#
55
msgid ""
66
msgstr ""
7-
"Project-Id-Version: Odoo Server 14.0\n"
7+
"Project-Id-Version: Odoo Server 16.0\n"
88
"Report-Msgid-Bugs-To: \n"
9-
"PO-Revision-Date: 2023-12-13 15:35+0000\n"
10-
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
11-
"Language-Team: none\n"
12-
"Language: es\n"
9+
"POT-Creation-Date: 2024-09-13 07:50+0000\n"
10+
"PO-Revision-Date: 2024-09-13 07:50+0000\n"
11+
"Last-Translator: \n"
12+
"Language-Team: \n"
1313
"MIME-Version: 1.0\n"
1414
"Content-Type: text/plain; charset=UTF-8\n"
1515
"Content-Transfer-Encoding: \n"
16-
"Plural-Forms: nplurals=2; plural=n != 1;\n"
17-
"X-Generator: Weblate 4.17\n"
16+
"Plural-Forms: \n"
1817

1918
#. module: sale_commission_partial_settlement
2019
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_account_invoice_line_agent_partial__agent_line
2120
msgid "Agent Line"
2221
msgstr "Línea de Agente"
2322

2423
#. module: sale_commission_partial_settlement
25-
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_sale_commission_settlement_line__agent_line_partial_ids
24+
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_commission_settlement_line__agent_line_partial_ids
2625
msgid "Agent Line Partial"
27-
msgstr "Agente Línea Parcial"
26+
msgstr "Línea de Agente Parcial"
2827

2928
#. module: sale_commission_partial_settlement
3029
#: model:ir.model,name:sale_commission_partial_settlement.model_account_invoice_line_agent
3130
msgid "Agent detail of commission line in invoice lines"
3231
msgstr "Detalle de agente de línea de comisión en líneas de pedido"
3332

33+
#. module: sale_commission_partial_settlement
34+
#: model:ir.model,name:sale_commission_partial_settlement.model_commission
35+
msgid "Commission"
36+
msgstr "Comisión"
37+
3438
#. module: sale_commission_partial_settlement
3539
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_account_invoice_line_agent_partial__amount
3640
msgid "Commission Amount"
3741
msgstr "Importe de la Comisión"
3842

3943
#. module: sale_commission_partial_settlement
40-
#: model:ir.model,name:sale_commission_partial_settlement.model_sale_commission
41-
msgid "Commission in sales"
42-
msgstr "Comisión en ventas"
43-
44-
#. module: sale_commission_partial_settlement
45-
#: code:addons/sale_commission_partial_settlement/wizard/wizard_settle.py:0
44+
#. odoo-python
45+
#: code:addons/sale_commission_partial_settlement/wizard/commission_make_settle.py:0
4646
#, python-format
4747
msgid "Created Settlements"
4848
msgstr "Liquidaciones Creadas"
@@ -63,42 +63,27 @@ msgid "Currency"
6363
msgstr "Divisa"
6464

6565
#. module: sale_commission_partial_settlement
66-
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_account_invoice_line_agent__display_name
6766
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_account_invoice_line_agent_partial__display_name
68-
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_account_partial_reconcile__display_name
69-
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_sale_commission__display_name
70-
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_sale_commission_make_settle__display_name
71-
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_sale_commission_settlement_line__display_name
7267
msgid "Display Name"
7368
msgstr "Nombre a Mostrar"
7469

7570
#. module: sale_commission_partial_settlement
76-
#: model:ir.model.fields.selection,name:sale_commission_partial_settlement.selection__sale_commission__payment_amount_type__full
71+
#: model:ir.model.fields.selection,name:sale_commission_partial_settlement.selection__commission__payment_amount_type__full
7772
msgid "Full amount"
7873
msgstr "Importe total"
7974

8075
#. module: sale_commission_partial_settlement
81-
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_account_invoice_line_agent__id
8276
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_account_invoice_line_agent_partial__id
83-
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_account_partial_reconcile__id
84-
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_sale_commission__id
85-
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_sale_commission_make_settle__id
86-
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_sale_commission_settlement_line__id
8777
msgid "ID"
88-
msgstr "ID"
78+
msgstr ""
8979

9080
#. module: sale_commission_partial_settlement
9181
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_account_invoice_line_agent_partial__invoice_line_agent_id
9282
msgid "Invoice Line Agent"
9383
msgstr "Agente de Línea de Facturación"
9484

9585
#. module: sale_commission_partial_settlement
96-
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_account_invoice_line_agent____last_update
9786
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_account_invoice_line_agent_partial____last_update
98-
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_account_partial_reconcile____last_update
99-
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_sale_commission____last_update
100-
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_sale_commission_make_settle____last_update
101-
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_sale_commission_settlement_line____last_update
10287
msgid "Last Modified on"
10388
msgstr "Última Modificación el"
10489

@@ -113,12 +98,12 @@ msgid "Last Updated on"
11398
msgstr "Última Actualización el"
11499

115100
#. module: sale_commission_partial_settlement
116-
#: model:ir.model,name:sale_commission_partial_settlement.model_sale_commission_settlement_line
101+
#: model:ir.model,name:sale_commission_partial_settlement.model_commission_settlement_line
117102
msgid "Line of a commission settlement"
118-
msgstr "Línea de liquidación de comisión"
103+
msgstr "Línea de liquidación de una comisión"
119104

120105
#. module: sale_commission_partial_settlement
121-
#: model:ir.model.fields.selection,name:sale_commission_partial_settlement.selection__sale_commission__payment_amount_type__paid
106+
#: model:ir.model.fields.selection,name:sale_commission_partial_settlement.selection__commission__payment_amount_type__paid
122107
msgid "Paid amount"
123108
msgstr "Importe pagado"
124109

@@ -135,15 +120,15 @@ msgstr "Comisión Parcial Liquidada"
135120
#. module: sale_commission_partial_settlement
136121
#: model:ir.model,name:sale_commission_partial_settlement.model_account_partial_reconcile
137122
msgid "Partial Reconcile"
138-
msgstr "Conciliación Parcial"
123+
msgstr "Conciliación parcial"
139124

140125
#. module: sale_commission_partial_settlement
141126
#: model:ir.model,name:sale_commission_partial_settlement.model_account_invoice_line_agent_partial
142127
msgid "Partial agent commissions"
143128
msgstr "Comisiones parciales de agente"
144129

145130
#. module: sale_commission_partial_settlement
146-
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_sale_commission__payment_amount_type
131+
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_commission__payment_amount_type
147132
msgid "Payment amount type"
148133
msgstr "Tipo de importe del pago"
149134

@@ -153,11 +138,11 @@ msgid "Settled"
153138
msgstr "Liquidado"
154139

155140
#. module: sale_commission_partial_settlement
156-
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_sale_commission_settlement_line__settled_amount
141+
#: model:ir.model.fields,field_description:sale_commission_partial_settlement.field_commission_settlement_line__settled_amount
157142
msgid "Settled Amount"
158-
msgstr "Importe Liquidado"
143+
msgstr "Cantidad Liquidada"
159144

160145
#. module: sale_commission_partial_settlement
161-
#: model:ir.model,name:sale_commission_partial_settlement.model_sale_commission_make_settle
162-
msgid "Wizard for settling commissions in invoices"
163-
msgstr "Asistente para liquidar comisiones en facturas"
146+
#: model:ir.model,name:sale_commission_partial_settlement.model_commission_make_settle
147+
msgid "Wizard for settling commissions"
148+
msgstr "Asistente para liquidación de comisiones"

sale_commission_partial_settlement/migrations/14.0.1.0.1/post-migrate.py

Lines changed: 0 additions & 11 deletions
This file was deleted.
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
from . import sale_commission
2-
from . import account_move
1+
from . import commission
2+
from . import account_invoice_line_agent
3+
from . import account_invoice_line_agent_partial
34
from . import account_partial_reconcile
4-
from . import settlement
5+
from . import commission_settlement
6+
from . import commission_settlement_line
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
# Copyright 2023 Nextev
2+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
3+
4+
from odoo import api, fields, models
5+
from odoo.tools.float_utils import float_compare
6+
7+
8+
class AccountInvoiceLineAgent(models.Model):
9+
_inherit = "account.invoice.line.agent"
10+
11+
partial_settled = fields.Monetary(
12+
string="Partial Commission Amount Settled",
13+
compute="_compute_partial_settled",
14+
store=True,
15+
)
16+
is_fully_settled = fields.Boolean(compute="_compute_is_fully_settled", store=True)
17+
invoice_line_agent_partial_ids = fields.One2many(
18+
"account.invoice.line.agent.partial", "invoice_line_agent_id"
19+
)
20+
21+
@api.depends(
22+
"invoice_line_agent_partial_ids.amount",
23+
"invoice_line_agent_partial_ids.agent_line.settlement_id.state",
24+
)
25+
def _compute_partial_settled(self):
26+
for rec in self:
27+
rec.partial_settled = sum(
28+
ailap.amount
29+
for ailap in rec.invoice_line_agent_partial_ids
30+
if ailap.mapped("agent_line.settlement_id")[:1].state != "cancel"
31+
)
32+
33+
@api.depends(
34+
"commission_id.payment_amount_type", "amount", "settled", "partial_settled"
35+
)
36+
def _compute_is_fully_settled(self):
37+
for rec in self:
38+
if rec.commission_id.payment_amount_type != "paid":
39+
rec.is_fully_settled = rec.settled
40+
else:
41+
rec.is_fully_settled = rec.settled and (
42+
float_compare(
43+
rec.partial_settled,
44+
rec.amount,
45+
precision_rounding=rec.currency_id.rounding,
46+
)
47+
== 0
48+
)
49+
50+
def _partial_commissions(self, date_payment_to):
51+
"""
52+
This method iterates through agent invoice lines and calculates
53+
partial commissions based on the payment amount.
54+
If the partial payment amount is greater than the invoice line
55+
amount, it fully settles the corresponding agent line.
56+
Otherwise, it calculates the partial commission proportionally to
57+
the amount paid, invoice amount and total commissions.
58+
"""
59+
partial_lines_to_settle = []
60+
partial_payment_remaining = {}
61+
for line in self:
62+
line_total_amount = line.amount
63+
reconciled_partials, _ = line.invoice_id._get_reconciled_invoices_partials()
64+
for (
65+
partial,
66+
amount,
67+
counterpart_line,
68+
) in reconciled_partials:
69+
if partial.partial_commission_settled:
70+
continue
71+
elif date_payment_to and date_payment_to < counterpart_line.date:
72+
break
73+
if partial.id in partial_payment_remaining:
74+
payment_amount = partial_payment_remaining[partial.id][
75+
"remaining_amount"
76+
]
77+
else:
78+
payment_amount = amount
79+
partial_payment_remaining[partial.id] = {"remaining_amount": amount}
80+
if line.object_id.price_total <= payment_amount:
81+
partial_lines_to_settle.append(
82+
self._partial_agent_line_values(
83+
line, line_total_amount, partial
84+
)
85+
)
86+
partial_payment_remaining[partial.id] = {
87+
"remaining_amount": amount - line.object_id.price_total
88+
}
89+
break
90+
91+
paid_in_proportion = payment_amount / line.invoice_id.amount_total
92+
partial_commission = (
93+
line.invoice_id.commission_total * paid_in_proportion
94+
)
95+
partial_lines_to_settle.append(
96+
self._partial_agent_line_values(line, partial_commission, partial)
97+
)
98+
partial_agent_lines = self.env["account.invoice.line.agent.partial"].create(
99+
partial_lines_to_settle
100+
)
101+
return partial_agent_lines
102+
103+
def _partial_agent_line_values(self, line, amount, partial):
104+
return {
105+
"invoice_line_agent_id": line.id,
106+
"currency_id": line.currency_id.id,
107+
"amount": amount,
108+
"account_partial_reconcile_id": partial.id,
109+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
from odoo import fields, models
2+
3+
4+
class AccountInvoiceLineAgentPartial(models.Model):
5+
_name = "account.invoice.line.agent.partial"
6+
_description = "Partial agent commissions"
7+
8+
invoice_line_agent_id = fields.Many2one("account.invoice.line.agent", required=True)
9+
agent_line = fields.Many2many(
10+
comodel_name="commission.settlement.line",
11+
relation="settlement_agent_line_partial_rel",
12+
column1="agent_line_partial_id",
13+
column2="settlement_id",
14+
copy=False,
15+
)
16+
account_partial_reconcile_id = fields.Many2one("account.partial.reconcile")
17+
amount = fields.Monetary(
18+
string="Commission Amount",
19+
)
20+
currency_id = fields.Many2one(
21+
related="invoice_line_agent_id.currency_id",
22+
)
23+
settled = fields.Boolean()

0 commit comments

Comments
 (0)