Skip to content

Commit

Permalink
Merge pull request #412 from OCA/15.0
Browse files Browse the repository at this point in the history
Syncing from upstream OCA/commission (15.0)
  • Loading branch information
bt-admin authored Feb 27, 2024
2 parents 2321bbe + 8be2d7d commit 895499f
Show file tree
Hide file tree
Showing 11 changed files with 163 additions and 12 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Available addons
----------------
addon | version | maintainers | summary
--- | --- | --- | ---
[account_commission](account_commission/) | 15.0.3.2.0 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | Account commissions
[account_commission](account_commission/) | 15.0.3.2.1 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | Account commissions
[commission](commission/) | 15.0.3.1.0 | [![pedrobaeza](https://github.com/pedrobaeza.png?size=30px)](https://github.com/pedrobaeza) | Commissions
[commission_formula](commission_formula/) | 15.0.1.0.0 | | Commissions computed by formulas
[hr_commission](hr_commission/) | 15.0.1.0.1 | | HR commissions
Expand Down
6 changes: 4 additions & 2 deletions account_commission/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Account commissions
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:68f1a6945b770a30a14a0891c944d8d205676022c1fe5ff33968ab47fa9a2b22
!! source digest: sha256:2d1fc36a01e43ea64154a3aa40ad9f4284ad401f2e3ee88114020157480a49e7
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
Expand Down Expand Up @@ -47,7 +47,9 @@ For selecting invoice status in commissions:
#. Edit or create a new record to select the invoice status for settling the commissions.

* **Invoice Based**: Commissions are settled when the invoice is issued.
* **Payment Based**: Commissions are settled when the invoice is paid.
* **Payment Based**: Commissions are settled when the invoice is paid or refunded.
Note that when refunding an invoice, the corresponding reversed commission will
be settled as well, resulting in a 0 net commission between both operations.

Usage
=====
Expand Down
2 changes: 1 addition & 1 deletion account_commission/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# Copyright 2014-2022 Tecnativa - Pedro M. Baeza
{
"name": "Account commissions",
"version": "15.0.3.2.0",
"version": "15.0.3.2.1",
"author": "Tecnativa, Odoo Community Association (OCA)",
"category": "Sales Management",
"license": "AGPL-3",
Expand Down
2 changes: 1 addition & 1 deletion account_commission/i18n/account_commission.pot
Original file line number Diff line number Diff line change
Expand Up @@ -424,7 +424,7 @@ msgstr ""
msgid ""
"Select the invoice status for settling the commissions:\n"
"* 'Invoice Based': Commissions are settled when the invoice is issued.\n"
"* 'Payment Based': Commissions are settled when the invoice is paid."
"* 'Payment Based': Commissions are settled when the invoice is paid (or refunded)."
msgstr ""

#. module: account_commission
Expand Down
3 changes: 2 additions & 1 deletion account_commission/i18n/es.po
Original file line number Diff line number Diff line change
Expand Up @@ -428,7 +428,8 @@ msgstr "Facturas de Venta"
msgid ""
"Select the invoice status for settling the commissions:\n"
"* 'Invoice Based': Commissions are settled when the invoice is issued.\n"
"* 'Payment Based': Commissions are settled when the invoice is paid."
"* 'Payment Based': Commissions are settled when the invoice is paid (or "
"refunded)."
msgstr ""

#. module: account_commission
Expand Down
3 changes: 2 additions & 1 deletion account_commission/i18n/ja.po
Original file line number Diff line number Diff line change
Expand Up @@ -427,7 +427,8 @@ msgstr "販売請求書"
msgid ""
"Select the invoice status for settling the commissions:\n"
"* 'Invoice Based': Commissions are settled when the invoice is issued.\n"
"* 'Payment Based': Commissions are settled when the invoice is paid."
"* 'Payment Based': Commissions are settled when the invoice is paid (or "
"refunded)."
msgstr ""

#. module: account_commission
Expand Down
2 changes: 1 addition & 1 deletion account_commission/models/account_move.py
Original file line number Diff line number Diff line change
Expand Up @@ -255,5 +255,5 @@ def _skip_settlement(self):
self.ensure_one()
return (
self.commission_id.invoice_state == "paid"
and self.invoice_id.payment_state not in ["in_payment", "paid"]
and self.invoice_id.payment_state not in ["in_payment", "paid", "reversed"]
) or self.invoice_id.state != "posted"
2 changes: 1 addition & 1 deletion account_commission/models/commission.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ class Commission(models.Model):
default="open",
help="Select the invoice status for settling the commissions:\n"
"* 'Invoice Based': Commissions are settled when the invoice is issued.\n"
"* 'Payment Based': Commissions are settled when the invoice is paid.",
"* 'Payment Based': Commissions are settled when the invoice is paid (or refunded).",
)
4 changes: 3 additions & 1 deletion account_commission/readme/CONFIGURE.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,6 @@ For selecting invoice status in commissions:
#. Edit or create a new record to select the invoice status for settling the commissions.

* **Invoice Based**: Commissions are settled when the invoice is issued.
* **Payment Based**: Commissions are settled when the invoice is paid.
* **Payment Based**: Commissions are settled when the invoice is paid or refunded.
Note that when refunding an invoice, the corresponding reversed commission will
be settled as well, resulting in a 0 net commission between both operations.
6 changes: 4 additions & 2 deletions account_commission/static/description/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -366,7 +366,7 @@ <h1 class="title">Account commissions</h1>
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:68f1a6945b770a30a14a0891c944d8d205676022c1fe5ff33968ab47fa9a2b22
!! source digest: sha256:2d1fc36a01e43ea64154a3aa40ad9f4284ad401f2e3ee88114020157480a49e7
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/commission/tree/15.0/account_commission"><img alt="OCA/commission" src="https://img.shields.io/badge/github-OCA%2Fcommission-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/commission-15-0/commission-15-0-account_commission"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/commission&amp;target_branch=15.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module adds the function to calculate commissions in invoices (account moves).</p>
Expand All @@ -392,7 +392,9 @@ <h1><a class="toc-backref" href="#toc-entry-1">Configuration</a></h1>
<ol class="arabic simple">
<li>Edit or create a new record to select the invoice status for settling the commissions.<ul>
<li><strong>Invoice Based</strong>: Commissions are settled when the invoice is issued.</li>
<li><strong>Payment Based</strong>: Commissions are settled when the invoice is paid.</li>
<li><strong>Payment Based</strong>: Commissions are settled when the invoice is paid or refunded.
Note that when refunding an invoice, the corresponding reversed commission will
be settled as well, resulting in a 0 net commission between both operations.</li>
</ul>
</li>
</ol>
Expand Down
143 changes: 143 additions & 0 deletions account_commission/tests/test_account_commission.py
Original file line number Diff line number Diff line change
Expand Up @@ -497,3 +497,146 @@ def test_multi_currency(self):
]
)
self.assertEqual(2, len(settlements))

def test_invoice_parcial_refund(self):
commission = self.commission_net_paid
agent = self.agent_monthly
today = fields.Date.today()
# Create an invoice
invoice = self._create_invoice(agent, commission, today, currency=None)
invoice.action_post()
# Register payment for invoice
payment_journal = self.env["account.journal"].search(
[("type", "=", "cash"), ("company_id", "=", invoice.company_id.id)],
limit=1,
)
register_payments = (
self.env["account.payment.register"]
.with_context(active_ids=invoice.id, active_model="account.move")
.create({"journal_id": payment_journal.id})
)
register_payments.action_create_payments()
# Make a parcial refund for the invoice
move_reversal = (
self.env["account.move.reversal"]
.with_context(active_model="account.move", active_ids=invoice.id)
.create(
{
"reason": "no reason",
"refund_method": "refund",
"journal_id": invoice.journal_id.id,
}
)
)
refund = self.env["account.move"].browse(
move_reversal.reverse_moves()["res_id"]
)
refund.write(
{
"invoice_line_ids": [
(
1,
refund.invoice_line_ids[:1].id,
{"price_unit": refund.invoice_line_ids[:1].price_unit - 2},
)
]
}
)
refund.action_post()
# Register payment for the refund
register_payments = (
self.env["account.payment.register"]
.with_context(active_ids=refund.id, active_model="account.move")
.create({"journal_id": payment_journal.id})
)
register_payments.action_create_payments()
# check settlement creation. The commission must be (5 - 3) * 0.1 = 0.4
self._settle_agent_invoice(agent, 1)
settlements = self.settle_model.search([("agent_id", "=", agent.id)])
self.assertEqual(2, len(settlements.line_ids))
self.assertEqual(0.4, sum(settlements.mapped("total")))

def test_invoice_full_refund(self):
commission = self.commission_net_paid
agent = self.agent_monthly
today = fields.Date.today()
# Create an invoice and refund it
invoice = self._create_invoice(agent, commission, today, currency=None)
invoice.action_post()
move_reversal = (
self.env["account.move.reversal"]
.with_context(active_model="account.move", active_ids=invoice.id)
.create(
{
"reason": "no reason",
"refund_method": "cancel",
"journal_id": invoice.journal_id.id,
}
)
)
move_reversal.reverse_moves()
# check settlement creation. The commission must be: (5 - 5) * 0.1 = 0
self._settle_agent_invoice(agent, 1)
settlements = self.settle_model.search(
[
("agent_id", "=", agent.id),
]
)
self.assertEqual(2, len(settlements.line_ids))
self.assertEqual(0, sum(settlements.mapped("total")))

def test_invoice_modify_refund(self):
commission = self.commission_net_paid
agent = self.agent_monthly
today = fields.Date.today()
# Create an invoice
invoice = self._create_invoice(agent, commission, today, currency=None)
invoice.action_post()
# Create a full refund and a new invoice
move_reversal = (
self.env["account.move.reversal"]
.with_context(active_model="account.move", active_ids=invoice.id)
.create(
{
"reason": "no reason",
"refund_method": "modify",
"journal_id": invoice.journal_id.id,
}
)
)
invoice2 = self.env["account.move"].browse(
move_reversal.reverse_moves()["res_id"]
)
invoice2.write(
{
"invoice_line_ids": [
(
1,
invoice2.invoice_line_ids[:1].id,
{"price_unit": invoice2.invoice_line_ids[:1].price_unit - 2},
)
]
}
)
invoice2.action_post()
# Register payment for the new invoice
payment_journal = self.env["account.journal"].search(
[("type", "=", "cash"), ("company_id", "=", invoice.company_id.id)],
limit=1,
)
register_payments = (
self.env["account.payment.register"]
.with_context(active_ids=invoice2.id, active_model="account.move")
.create({"journal_id": payment_journal.id})
)
register_payments.action_create_payments()

# check settlement creation. The commission must be (5 - 5 + 3) * 0.1 = 0.6
self._settle_agent_invoice(agent, 1)
settlements = self.settle_model.search(
[
("agent_id", "=", agent.id),
]
)
self.assertEqual(3, len(settlements.line_ids))
self.assertEqual(0.6, sum(settlements.mapped("total")))

0 comments on commit 895499f

Please sign in to comment.