-
-
Notifications
You must be signed in to change notification settings - Fork 386
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[ADD] account_reconcile_payment_order
- Loading branch information
Showing
21 changed files
with
1,125 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
=============================== | ||
Account Reconcile Payment Order | ||
=============================== | ||
|
||
.. | ||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
!! This file is generated by oca-gen-addon-readme !! | ||
!! changes will be overwritten. !! | ||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
!! source digest: sha256:62593d3c4026a4022d861045e7c9cd3fa56484718450a6e7d52325acb833b6e4 | ||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png | ||
:target: https://odoo-community.org/page/development-status | ||
:alt: Beta | ||
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png | ||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html | ||
:alt: License: AGPL-3 | ||
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--reconcile-lightgray.png?logo=github | ||
:target: https://github.com/OCA/account-reconcile/tree/16.0/account_reconcile_payment_order | ||
:alt: OCA/account-reconcile | ||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png | ||
:target: https://translation.odoo-community.org/projects/account-reconcile-16-0/account-reconcile-16-0-account_reconcile_payment_order | ||
:alt: Translate me on Weblate | ||
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png | ||
:target: https://runboat.odoo-community.org/builds?repo=OCA/account-reconcile&target_branch=16.0 | ||
:alt: Try me on Runboat | ||
|
||
|badge1| |badge2| |badge3| |badge4| |badge5| | ||
|
||
This module allows to show the payment orders directly on the recocncile | ||
widget. This way, we can select or unselect automatically all the lines | ||
of the payment order. | ||
|
||
**Table of contents** | ||
|
||
.. contents:: | ||
:local: | ||
|
||
Bug Tracker | ||
=========== | ||
|
||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/account-reconcile/issues>`_. | ||
In case of trouble, please check there if your issue has already been reported. | ||
If you spotted it first, help us to smash it by providing a detailed and welcomed | ||
`feedback <https://github.com/OCA/account-reconcile/issues/new?body=module:%20account_reconcile_payment_order%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. | ||
|
||
Do not contact contributors directly about support or help with technical issues. | ||
|
||
Credits | ||
======= | ||
|
||
Authors | ||
------- | ||
|
||
* Dixmit | ||
|
||
Contributors | ||
------------ | ||
|
||
- Enric Tobella (`www.dixmit.com <http://www.dixmit.com>`__) | ||
|
||
Maintainers | ||
----------- | ||
|
||
This module is maintained by the OCA. | ||
|
||
.. image:: https://odoo-community.org/logo.png | ||
:alt: Odoo Community Association | ||
:target: https://odoo-community.org | ||
|
||
OCA, or the Odoo Community Association, is a nonprofit organization whose | ||
mission is to support the collaborative development of Odoo features and | ||
promote its widespread use. | ||
|
||
This module is part of the `OCA/account-reconcile <https://github.com/OCA/account-reconcile/tree/16.0/account_reconcile_payment_order>`_ project on GitHub. | ||
|
||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
from . import models |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
# Copyright 2024 Dixmit | ||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). | ||
|
||
{ | ||
"name": "Account Reconcile Payment Order", | ||
"summary": """ | ||
Allow to reconcile payment order on reconcile widget""", | ||
"version": "16.0.1.0.0", | ||
"license": "AGPL-3", | ||
"author": "Dixmit,Odoo Community Association (OCA)", | ||
"website": "https://github.com/OCA/account-reconcile", | ||
"depends": ["account_reconcile_oca", "account_payment_order"], | ||
"data": [ | ||
"security/security.xml", | ||
"security/ir.model.access.csv", | ||
"views/account_payment_order_maturity.xml", | ||
"views/account_bank_statement_line.xml", | ||
], | ||
"assets": { | ||
"web.assets_backend": [ | ||
"account_reconcile_payment_order/static/src/**/*.esm.js", | ||
"account_reconcile_payment_order/static/src/**/*.xml", | ||
] | ||
}, | ||
"demo": [], | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
from . import account_bank_statement_line | ||
from . import account_payment_order | ||
from . import account_payment_order_maturity | ||
from . import account_payment |
110 changes: 110 additions & 0 deletions
110
account_reconcile_payment_order/models/account_bank_statement_line.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,110 @@ | ||
# Copyright 2024 Dixmit | ||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). | ||
|
||
from odoo import api, fields, models | ||
|
||
|
||
class AccountBankStatementLine(models.Model): | ||
|
||
_inherit = "account.bank.statement.line" | ||
|
||
add_payment_order_id = fields.Many2one( | ||
"account.payment.order.maturity", | ||
check_company=True, | ||
store=False, | ||
default=False, | ||
prefetch=False, | ||
) | ||
|
||
def clean_reconcile(self): | ||
""" | ||
Remove the counterparts when cleaning | ||
""" | ||
res = super().clean_reconcile() | ||
data = self.reconcile_data_info | ||
data["order_counterparts"] = [] | ||
self.reconcile_data_info = data | ||
return res | ||
|
||
@api.onchange("add_payment_order_id") | ||
def _onchange_add_payment_order_id(self): | ||
""" | ||
We need to check if the payment order is in already on the counterpart. | ||
In this case we need to add all the liquidity lines. Otherwise, we remove them | ||
""" | ||
if self.add_payment_order_id: | ||
data = self.reconcile_data_info["data"] | ||
if self.add_payment_order_id.id not in self.reconcile_data_info.get( | ||
"order_counterparts", [] | ||
): | ||
new_data = [] | ||
counterparts = [] | ||
for line in data: | ||
counterparts += line.get("counterpart_line_ids", []) | ||
new_data.append(line) | ||
for payment in self.add_payment_order_id.payment_ids.filtered( | ||
lambda r: not r.is_matched | ||
): | ||
( | ||
liquidity_lines, | ||
counterpart_lines, | ||
writeoff_lines, | ||
) = payment._seek_for_lines() | ||
for line in liquidity_lines.filtered( | ||
lambda r: r.id not in counterparts | ||
): | ||
reconcile_auxiliary_id, lines = self._get_reconcile_line( | ||
line, "other", True, 0.0 | ||
) | ||
new_data += lines | ||
data_info = self._recompute_suspense_line( | ||
new_data, | ||
self.reconcile_data_info["reconcile_auxiliary_id"], | ||
self.manual_reference, | ||
) | ||
data_info["order_counterparts"].append(self.add_payment_order_id.id) | ||
self.reconcile_data_info = data_info | ||
elif self.add_payment_order_id: | ||
data = self.reconcile_data_info["data"] | ||
lines = [] | ||
for payment in self.add_payment_order_id.payment_ids.filtered( | ||
lambda r: not r.is_matched | ||
): | ||
( | ||
liquidity_lines, | ||
counterpart_lines, | ||
writeoff_lines, | ||
) = payment._seek_for_lines() | ||
lines += liquidity_lines.ids | ||
new_data = [] | ||
for line in data: | ||
if set(line.get("counterpart_line_ids", [])).intersection( | ||
set(lines) | ||
): | ||
continue | ||
new_data.append(line) | ||
data_info = self._recompute_suspense_line( | ||
new_data, | ||
self.reconcile_data_info["reconcile_auxiliary_id"], | ||
self.manual_reference, | ||
) | ||
["order_counterparts"].append(self.add_payment_order_id.id) | ||
counterparts = set(data_info["order_counterparts"]) | ||
counterparts.remove(self.add_payment_order_id.id) | ||
data_info["order_counterparts"] = list(counterparts) | ||
self.reconcile_data_info = data_info | ||
self.add_payment_order_id = False | ||
|
||
def _recompute_suspense_line(self, data, reconcile_auxiliary_id, manual_reference): | ||
""" | ||
We want to keep the counterpart when we recompute | ||
""" | ||
order_counterparts = ( | ||
self.reconcile_data_info | ||
and self.reconcile_data_info.get("order_counterparts", []) | ||
) or [] | ||
result = super()._recompute_suspense_line( | ||
data, reconcile_auxiliary_id, manual_reference | ||
) | ||
result["order_counterparts"] = order_counterparts | ||
return result |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
# Copyright 2024 Dixmit | ||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). | ||
|
||
from odoo import fields, models | ||
|
||
|
||
class AccountPayment(models.Model): | ||
|
||
_inherit = "account.payment" | ||
|
||
maturity_order_id = fields.Many2one(comodel_name="account.payment.order.maturity") |
48 changes: 48 additions & 0 deletions
48
account_reconcile_payment_order/models/account_payment_order.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
# Copyright 2024 Dixmit | ||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). | ||
|
||
from itertools import groupby | ||
|
||
from odoo import fields, models | ||
|
||
|
||
class AccountPaymentOrder(models.Model): | ||
|
||
_inherit = "account.payment.order" | ||
|
||
maturity_order_ids = fields.One2many( | ||
comodel_name="account.payment.order.maturity", inverse_name="payment_order_id" | ||
) | ||
|
||
def generated2uploaded(self): | ||
result = super().generated2uploaded() | ||
for record in self: | ||
vals = sorted( | ||
self.payment_ids.read(["id", "payment_line_date", "currency_id"]), | ||
key=lambda r: (r["payment_line_date"], r["currency_id"][0]), | ||
) | ||
for key, _group in groupby( | ||
vals, lambda x: (x["payment_line_date"], x["currency_id"][0]) | ||
): | ||
self.env["account.payment.order.maturity"].create( | ||
{ | ||
"payment_order_id": record.id, | ||
"currency_id": key[1], | ||
"date": key[0], | ||
"payment_ids": [ | ||
( | ||
6, | ||
0, | ||
record.payment_ids.filtered( | ||
lambda r: r.payment_line_date == key[0] | ||
and r.currency_id.id == key[1] | ||
).ids, | ||
) | ||
], | ||
} | ||
) | ||
return result | ||
|
||
def action_uploaded_cancel(self): | ||
self.maturity_order_ids.unlink() | ||
return super().action_cancel() | ||
52 changes: 52 additions & 0 deletions
52
account_reconcile_payment_order/models/account_payment_order_maturity.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
# Copyright 2024 Dixmit | ||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). | ||
|
||
from odoo import api, fields, models | ||
|
||
|
||
class AccountPaymentOrderMaturity(models.Model): | ||
|
||
_name = "account.payment.order.maturity" | ||
_description = "Account Payment Order Maturity" # TODO | ||
|
||
payment_order_id = fields.Many2one( | ||
"account.payment.order", required=True, ondelete="cascade" | ||
) | ||
currency_id = fields.Many2one("res.currency", required=True) | ||
date = fields.Date(required=True) | ||
company_id = fields.Many2one( | ||
"res.company", related="payment_order_id.company_id", store=True | ||
) | ||
payment_ids = fields.One2many("account.payment", inverse_name="maturity_order_id") | ||
payment_type = fields.Selection(related="payment_order_id.payment_type", store=True) | ||
is_matched = fields.Boolean(compute="_compute_matched_info", store=True) | ||
amount_residual = fields.Monetary( | ||
compute="_compute_matched_info", store=True, currency_field="currency_id" | ||
) | ||
|
||
@api.depends( | ||
"payment_ids", | ||
"payment_ids.is_matched", | ||
"payment_ids.move_id.line_ids.amount_residual", | ||
) | ||
def _compute_matched_info(self): | ||
for record in self: | ||
record.is_matched = all(record.mapped("payment_ids.is_matched")) | ||
residual_field = ( | ||
"amount_residual" | ||
if record.currency_id == record.company_id.currency_id | ||
else "amount_residual_currency" | ||
) | ||
amount_residual = 0.0 | ||
for pay in record.mapped("payment_ids"): | ||
( | ||
liquidity_lines, | ||
counterpart_lines, | ||
writeoff_lines, | ||
) = pay._seek_for_lines() | ||
amount_residual += sum(liquidity_lines.mapped(residual_field)) | ||
record.amount_residual = amount_residual | ||
|
||
def action_view_order(self): | ||
self.ensure_one() | ||
return self.payment_order_id.get_formview_action() | ||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
- Enric Tobella (www.dixmit.com) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
This module allows to show the payment orders directly on the recocncile widget. | ||
This way, we can select or unselect automatically all the lines of the payment order. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink | ||
access_account_payment_order_maturity,account.account_paymenbt_order_maturity,model_account_payment_order_maturity,account.group_account_user,1,1,1,1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
<?xml version="1.0" encoding="UTF-8" ?> | ||
<odoo> | ||
<record id="security_payment_order_company_maturity_rule" model="ir.rule"> | ||
<field name="name">payment_order_maturity_company_rule</field> | ||
<field name="model_id" ref="model_account_payment_order_maturity" /> | ||
<field name="domain_force">[('company_id', 'in', company_ids)]</field> | ||
<field name="perm_read" eval="True" /> | ||
<field name="perm_write" eval="True" /> | ||
<field name="perm_create" eval="True" /> | ||
<field name="perm_unlink" eval="True" /> | ||
</record> | ||
</odoo> |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.