diff --git a/l10n_fr_tax_return/__init__.py b/l10n_fr_tax_return/__init__.py
new file mode 100644
index 0000000..6f037ac
--- /dev/null
+++ b/l10n_fr_tax_return/__init__.py
@@ -0,0 +1,6 @@
+# -*- coding: utf-8 -*-
+# from . import controllers
+from . import models
+from . import wizards
+
+# from .hooks import pre_init_hook, post_init_hook, uninstall_hook
diff --git a/l10n_fr_tax_return/__manifest__.py b/l10n_fr_tax_return/__manifest__.py
new file mode 100644
index 0000000..63ee719
--- /dev/null
+++ b/l10n_fr_tax_return/__manifest__.py
@@ -0,0 +1,55 @@
+# -*- coding: utf-8 -*-
+# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
+{
+ "name": "French tax return (2035)",
+ "version": "1.0.0",
+ "summary": "Computes lines for 2035 BNC declaration",
+ "description": """
+ Module description
+ """,
+ "author": "RemiFr82",
+ "contributors": "",
+ "maintainer": "RemiFr82",
+ "website": "https://remifr82.me",
+ "license": "LGPL-3",
+ "category": "",
+ # "price": 0,
+ # "currency": "EUR",
+ "application": False,
+ "installable": True,
+ "auto_install": False,
+ # "pre_init_hook": "",
+ # "post_init_hook": "",
+ # "uninstall_hook": "",
+ # "excludes": [],
+ # "external_dependencies": [],
+ "depends": [
+ "account",
+ "l10n_fr",
+ ],
+ "data": [
+ # Base data
+ "data/account_tax_return.xml",
+ # Security
+ # 'security/res_groups.xml',
+ "security/ir.model.access.csv",
+ # 'security/ir_rule.xml',
+ # Views
+ "views/account_account.xml",
+ "views/account_tax_return.xml",
+ "views/account_tax_return_year.xml",
+ # Wizards
+ "wizards/tax_return_wizard.xml",
+ # Reports
+ # 'reports/report_templates.xml',
+ # 'reports/sql_view.xml',
+ ],
+ "assets": {
+ # "reports/report_assets.xml"
+ },
+ "css": [],
+ "images": [],
+ "js": [],
+ "test": [],
+ "demo": [],
+}
diff --git a/l10n_fr_tax_return/data/account_tax_return.xml b/l10n_fr_tax_return/data/account_tax_return.xml
new file mode 100644
index 0000000..a3096a4
--- /dev/null
+++ b/l10n_fr_tax_return/data/account_tax_return.xml
@@ -0,0 +1,342 @@
+
+
+
+
+
+
+
+
+ Ligne AG
+
+ credit
+
+
+
+ Ligne AF
+
+
+ credit
+
+
+
+ Ligne AD
+
+
+ credit
+
+
+
+ Ligne AE
+
+
+ credit
+
+
+
+ Ligne AC
+
+
+ credit
+
+
+
+ Ligne AB
+
+
+ credit
+
+
+
+ Ligne AA
+
+
+ credit
+
+
+
+
+
+ Ligne BR
+
+
+
+
+ Ligne BP
+
+
+
+
+
+ Ligne BN
+
+
+
+
+
+ Ligne BM
+
+
+
+
+
+ Ligne BK
+
+
+
+
+
+ Ligne BT
+
+
+
+
+
+ Ligne BU
+
+
+
+
+
+ Ligne BZ
+
+
+
+
+
+ Ligne BJ
+
+
+
+
+
+ Ligne BH
+
+
+
+
+
+ Ligne BG
+
+
+
+
+
+ Ligne BF
+
+
+
+
+
+ Ligne BV
+
+
+
+
+
+ Ligne BS
+
+
+
+
+
+ Ligne JY
+
+
+
+
+
+ Ligne BD
+
+
+
+
+
+ Ligne BC
+
+
+
+
+
+ Ligne BB
+
+
+
+
+
+ Ligne BA
+
+
+
+
+
+
+
+ Ligne 1
+
+ credit
+
+
+
+ Ligne 2
+
+ credit
+
+
+
+ Ligne 3
+
+ credit
+
+
+
+
+
+ Ligne 5
+
+ credit
+
+
+
+ Ligne 6
+
+ credit
+
+
+
+
+
+ Ligne 8
+
+
+
+
+ Ligne 9
+
+
+
+
+ Ligne 10
+
+
+
+
+ Ligne 11
+
+
+
+
+ Ligne 12
+
+
+
+
+ Ligne 13
+
+
+
+
+ Ligne 14
+
+
+
+
+ Ligne 15
+
+
+
+
+ Ligne 16
+
+
+
+
+ Ligne 17
+
+
+
+
+ Ligne 18
+
+
+
+
+ Ligne 19
+
+
+
+
+ Ligne 20
+
+
+
+
+ Ligne 21
+
+
+
+
+ Ligne 22
+
+
+
+
+ Ligne 23
+
+
+
+
+ Ligne 24
+
+
+
+
+
+
+ Ligne 26
+
+
+
+
+ Ligne 27
+
+
+
+
+ Ligne 28
+
+
+
+
+ Ligne 29
+
+
+
+
+ Ligne 30
+
+
+
+
+ Ligne 31
+
+
+
+
+ Ligne 32
+
+
+
+
+
+
+
diff --git a/l10n_fr_tax_return/i18n/fr.po b/l10n_fr_tax_return/i18n/fr.po
new file mode 100644
index 0000000..db1ae08
--- /dev/null
+++ b/l10n_fr_tax_return/i18n/fr.po
@@ -0,0 +1,212 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * l10n_fr_tax_return
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0+e-20230613\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-09-21 11:13+0000\n"
+"PO-Revision-Date: 2024-09-21 11:13+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: l10n_fr_tax_return
+#: model:ir.model,name:l10n_fr_tax_return.model_account_account
+msgid "Account"
+msgstr "Compte"
+
+#. module: l10n_fr_tax_return
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return__account_ids
+msgid "Accounts to sum"
+msgstr "Comptes à sommer"
+
+#. module: l10n_fr_tax_return
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return__add_line_id
+msgid "Added to line"
+msgstr "Ajoutée à la ligne"
+
+#. module: l10n_fr_tax_return
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return_year__amount
+msgid "Amount"
+msgstr ""
+
+#. module: l10n_fr_tax_return
+#: model_terms:ir.ui.view,arch_db:l10n_fr_tax_return.tax_return_wizard_view_form
+msgid "Cancel"
+msgstr "Annuler"
+
+#. module: l10n_fr_tax_return
+#: model_terms:ir.ui.view,arch_db:l10n_fr_tax_return.tax_return_wizard_view_form
+msgid "Compute year tax return lines"
+msgstr "Calculer les lignes pour l'année"
+
+#. module: l10n_fr_tax_return
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return__create_uid
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return_year__create_uid
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_tax_return_wizard__create_uid
+msgid "Created by"
+msgstr "Créé par"
+
+#. module: l10n_fr_tax_return
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return__create_date
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return_year__create_date
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_tax_return_wizard__create_date
+msgid "Created on"
+msgstr "Créé le"
+
+#. module: l10n_fr_tax_return
+#. odoo-python
+#: code:addons/l10n_fr_tax_return/models/account_tax_return.py:0
+#: model:ir.model.fields.selection,name:l10n_fr_tax_return.selection__account_tax_return__line_type__credit
+#: model:ir.model.fields.selection,name:l10n_fr_tax_return.selection__account_tax_return_year__line_type__credit
+#, python-format
+msgid "Credit"
+msgstr "Crédit"
+
+#. module: l10n_fr_tax_return
+#. odoo-python
+#: code:addons/l10n_fr_tax_return/models/account_tax_return.py:0
+#: model:ir.model.fields.selection,name:l10n_fr_tax_return.selection__account_tax_return__line_type__debit
+#: model:ir.model.fields.selection,name:l10n_fr_tax_return.selection__account_tax_return_year__line_type__debit
+#, python-format
+msgid "Debit"
+msgstr "Débit"
+
+#. module: l10n_fr_tax_return
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return__display_name
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return_year__display_name
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_tax_return_wizard__display_name
+msgid "Display Name"
+msgstr "Nom à afficher"
+
+#. module: l10n_fr_tax_return
+#: model_terms:ir.ui.view,arch_db:l10n_fr_tax_return.account_tax_return_year_view_search
+msgid "Group By"
+msgstr "Regrouper par"
+
+#. module: l10n_fr_tax_return
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return__id
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return_year__id
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_tax_return_wizard__id
+msgid "ID"
+msgstr ""
+
+#. module: l10n_fr_tax_return
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return____last_update
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return_year____last_update
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_tax_return_wizard____last_update
+msgid "Last Modified on"
+msgstr "Dernière modification le"
+
+#. module: l10n_fr_tax_return
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return__write_uid
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return_year__write_uid
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_tax_return_wizard__write_uid
+msgid "Last Updated by"
+msgstr "Dernière mise à jour par"
+
+#. module: l10n_fr_tax_return
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return__write_date
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return_year__write_date
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_tax_return_wizard__write_date
+msgid "Last Updated on"
+msgstr "Dernière mise à jour le"
+
+#. module: l10n_fr_tax_return
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return_year__line_id
+msgid "Line"
+msgstr "Ligne"
+
+#. module: l10n_fr_tax_return
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return__line_type
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return_year__line_type
+msgid "Line Type"
+msgstr "Type de ligne"
+
+#. module: l10n_fr_tax_return
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return__sum_line_ids
+msgid "Lines to add"
+msgstr "Lignes à ajouter"
+
+#. module: l10n_fr_tax_return
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return__ded_line_ids
+msgid "Lines to substract"
+msgstr "Lignes à soustraire"
+
+#. module: l10n_fr_tax_return
+#. odoo-python
+#: code:addons/l10n_fr_tax_return/wizards/tax_return_wizard.py:0
+#, python-format
+msgid ""
+"Please set a year in the past and after you started your odoo accounting."
+msgstr ""
+"Merci de renseigner une année postérieure au début de la comptabilité Odoo."
+
+#. module: l10n_fr_tax_return
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return__name
+msgid "Reference"
+msgstr "Référence"
+
+#. module: l10n_fr_tax_return
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return__sub_line_id
+msgid "Substracted from line"
+msgstr "Déduite de la ligne"
+
+#. module: l10n_fr_tax_return
+#: model:ir.ui.menu,name:l10n_fr_tax_return.tax_return_wizard_menu
+msgid "Tax return compute"
+msgstr "Calcul des lignes"
+
+#. module: l10n_fr_tax_return
+#: model:ir.model,name:l10n_fr_tax_return.model_account_tax_return
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_account__tax_return_id
+msgid "Tax return line"
+msgstr "Lignes de déclaration"
+
+#. module: l10n_fr_tax_return
+#: model:ir.model,name:l10n_fr_tax_return.model_account_tax_return_year
+msgid "Tax return line year"
+msgstr "Valeurs des lignes"
+
+#. module: l10n_fr_tax_return
+#: model:ir.ui.menu,name:l10n_fr_tax_return.account_tax_return_menu
+msgid "Tax return lines"
+msgstr "Lignes de déclaration"
+
+#. module: l10n_fr_tax_return
+#: model:ir.model,name:l10n_fr_tax_return.model_tax_return_wizard
+msgid "Tax return wizard"
+msgstr "Calcul des lignes de déclaration"
+
+#. module: l10n_fr_tax_return
+#: model:ir.actions.act_window,name:l10n_fr_tax_return.account_tax_return_action
+#: model:ir.actions.act_window,name:l10n_fr_tax_return.account_tax_return_year_action
+msgid "Tax returns"
+msgstr "Lignes de déclaration"
+
+#. module: l10n_fr_tax_return
+#: model:ir.actions.act_window,name:l10n_fr_tax_return.tax_return_wizard_action
+msgid "Tax returns compute"
+msgstr ""
+
+#. module: l10n_fr_tax_return
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return__is_sum_line
+msgid "This line is a sum of other lines"
+msgstr "Cette ligne est une somme d'autres lignes"
+
+#. module: l10n_fr_tax_return
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_account_tax_return_year__name
+#: model:ir.model.fields,field_description:l10n_fr_tax_return.field_tax_return_wizard__name
+#: model_terms:ir.ui.view,arch_db:l10n_fr_tax_return.account_tax_return_year_view_search
+msgid "Year"
+msgstr "Année"
+
+#. module: l10n_fr_tax_return
+#: model:ir.ui.menu,name:l10n_fr_tax_return.account_tax_return_year_menu
+msgid "Year tax return lines"
+msgstr "Lignes par année"
diff --git a/l10n_fr_tax_return/models/__init__.py b/l10n_fr_tax_return/models/__init__.py
new file mode 100644
index 0000000..b424cc2
--- /dev/null
+++ b/l10n_fr_tax_return/models/__init__.py
@@ -0,0 +1,3 @@
+from . import account_account
+from . import account_tax_return
+from . import account_tax_return_year
diff --git a/l10n_fr_tax_return/models/account_account.py b/l10n_fr_tax_return/models/account_account.py
new file mode 100644
index 0000000..ddeb616
--- /dev/null
+++ b/l10n_fr_tax_return/models/account_account.py
@@ -0,0 +1,10 @@
+from odoo import models, fields
+
+
+class AccountAccount(models.Model):
+ _inherit = "account.account"
+
+ tax_return_id = fields.Many2one(
+ comodel_name="account.tax.return",
+ string="Tax return line",
+ )
diff --git a/l10n_fr_tax_return/models/account_tax_return.py b/l10n_fr_tax_return/models/account_tax_return.py
new file mode 100644
index 0000000..55bc127
--- /dev/null
+++ b/l10n_fr_tax_return/models/account_tax_return.py
@@ -0,0 +1,52 @@
+from odoo import models, fields, _
+
+
+class AccountTaxReturn(models.Model):
+ _name = "account.tax.return"
+ _description = "Tax return line"
+ _order = "line_type, name, id"
+
+ name = fields.Char(string="Reference")
+ account_ids = fields.One2many(
+ comodel_name="account.account",
+ inverse_name="tax_return_id",
+ string="Accounts to sum",
+ )
+ line_type = fields.Selection(
+ selection=[
+ ("credit", _("Credit")),
+ ("debit", _("Debit")),
+ ],
+ required=True,
+ default="debit",
+ )
+ # Sum between lines
+ add_line_id = fields.Many2one(
+ comodel_name="account.tax.return",
+ string="Added to line",
+ )
+ sub_line_id = fields.Many2one(
+ comodel_name="account.tax.return",
+ string="Substracted from line",
+ )
+ is_sum_line = fields.Boolean(string="This line is a sum of other lines")
+ sum_line_ids = fields.One2many(
+ comodel_name="account.tax.return",
+ inverse_name="add_line_id",
+ string="Lines to add",
+ )
+ ded_line_ids = fields.One2many(
+ comodel_name="account.tax.return",
+ inverse_name="sub_line_id",
+ string="Lines to substract",
+ )
+
+ def compute_value(self, move_lines=[]):
+ self.ensure_one()
+ if not self.is_sum_line:
+ if self.line_type == "credit":
+ return sum(move_lines.mapped(lambda aml: aml.credit - aml.debit))
+ else:
+ return sum(move_lines.mapped(lambda aml: aml.debit - aml.credit))
+ else:
+ return 0.0
diff --git a/l10n_fr_tax_return/models/account_tax_return_year.py b/l10n_fr_tax_return/models/account_tax_return_year.py
new file mode 100644
index 0000000..1f0b726
--- /dev/null
+++ b/l10n_fr_tax_return/models/account_tax_return_year.py
@@ -0,0 +1,22 @@
+from odoo import models, fields
+
+
+class AccountTaxReturnYear(models.Model):
+ _name = "account.tax.return.year"
+ _description = "Tax return line year"
+ _order = "name desc, line_id, id"
+
+ name = fields.Char(string="Year", size=4)
+ line_id = fields.Many2one(
+ comodel_name="account.tax.return",
+ string="Line",
+ required=True,
+ ondelete="cascade",
+ )
+ line_type = fields.Selection(
+ related="line_id.line_type",
+ )
+ amount = fields.Float(
+ string="Amount",
+ digits="Product Price",
+ )
diff --git a/l10n_fr_tax_return/security/ir.model.access.csv b/l10n_fr_tax_return/security/ir.model.access.csv
new file mode 100644
index 0000000..877fd1f
--- /dev/null
+++ b/l10n_fr_tax_return/security/ir.model.access.csv
@@ -0,0 +1,4 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_account_tax_return_group_account_readonly,Account readonly account.tax.return,model_account_tax_return,account.group_account_readonly,1,1,1,1
+access_account_tax_return_year_group_account_readonly,Account readonly account.tax.return.year,model_account_tax_return_year,account.group_account_readonly,1,1,1,1
+access_tax_return_wizard_group_account_readonly,Account readonly tax.return.wizard,model_tax_return_wizard,base.group_user,1,1,1,1
diff --git a/l10n_fr_tax_return/static/description/icon.png b/l10n_fr_tax_return/static/description/icon.png
new file mode 100644
index 0000000..663109e
Binary files /dev/null and b/l10n_fr_tax_return/static/description/icon.png differ
diff --git a/l10n_fr_tax_return/static/description/icon.svg b/l10n_fr_tax_return/static/description/icon.svg
new file mode 100644
index 0000000..fedafcd
--- /dev/null
+++ b/l10n_fr_tax_return/static/description/icon.svg
@@ -0,0 +1,93 @@
+
+
+
diff --git a/l10n_fr_tax_return/views/account_account.xml b/l10n_fr_tax_return/views/account_account.xml
new file mode 100644
index 0000000..47fd9c1
--- /dev/null
+++ b/l10n_fr_tax_return/views/account_account.xml
@@ -0,0 +1,22 @@
+
+
+
+
+ account.account.view.list.inherit
+ account.account
+
+
+
+
+
+
+
+
+
+
+
diff --git a/l10n_fr_tax_return/views/account_tax_return.xml b/l10n_fr_tax_return/views/account_tax_return.xml
new file mode 100644
index 0000000..2c55010
--- /dev/null
+++ b/l10n_fr_tax_return/views/account_tax_return.xml
@@ -0,0 +1,67 @@
+
+
+
+
+ account.tax.return.view.form
+ account.tax.return
+
+
+
+
+
+
+ account.tax.return.view.tree
+ account.tax.return
+
+
+
+
+
+
+
+
+
+
+
+ account.tax.return.view.search
+ account.tax.return
+
+
+
+
+
+
+
+
+ Tax returns
+ account.tax.return
+ tree,form
+ []
+ {}
+
+
+
+
+
diff --git a/l10n_fr_tax_return/views/account_tax_return_year.xml b/l10n_fr_tax_return/views/account_tax_return_year.xml
new file mode 100644
index 0000000..264cbd7
--- /dev/null
+++ b/l10n_fr_tax_return/views/account_tax_return_year.xml
@@ -0,0 +1,65 @@
+
+
+
+
+ account.tax.return.year.view.form
+ account.tax.return.year
+
+
+
+
+
+
+ account.tax.return.year.view.tree
+ account.tax.return.year
+
+
+
+
+
+
+
+
+
+
+
+ account.tax.return.year.view.search
+ account.tax.return.year
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Tax returns
+ account.tax.return.year
+ tree,form
+ []
+ {'search_deafault_by_year': 1}
+
+
+
+
+
diff --git a/l10n_fr_tax_return/wizards/__init__.py b/l10n_fr_tax_return/wizards/__init__.py
new file mode 100644
index 0000000..42d3853
--- /dev/null
+++ b/l10n_fr_tax_return/wizards/__init__.py
@@ -0,0 +1 @@
+from . import tax_return_wizard
diff --git a/l10n_fr_tax_return/wizards/tax_return_wizard.py b/l10n_fr_tax_return/wizards/tax_return_wizard.py
new file mode 100644
index 0000000..49e6956
--- /dev/null
+++ b/l10n_fr_tax_return/wizards/tax_return_wizard.py
@@ -0,0 +1,106 @@
+import logging
+from odoo import models, fields, api, _
+from odoo.exceptions import ValidationError
+
+_logger = logging.getLogger(__name__)
+
+
+class TaxReturnWizard(models.TransientModel):
+ _name = "tax.return.wizard"
+ _description = "Tax return wizard"
+
+ name = fields.Char(string="Year", size=4)
+ # is_date_ok = fields.Boolean(string="Year ok", compute="_check_year")
+
+ def _check_year(self):
+ self.ensure_one()
+ if not self.name.isdigit() or int(self.name) >= fields.Date.today().year:
+ raise ValidationError(
+ _(
+ "Please set a year in the past and after you started your odoo accounting."
+ )
+ )
+ # return {
+ # "value": {
+ # "name": "",
+ # },
+ # "warning": {
+ # "title": _("Wrong year !"),
+ # "massage": _(
+ # "Please set a year in the past and after you started your odoo accounting."
+ # ),
+ # },
+ # }
+
+ def execute(self):
+ self._check_year()
+ start = fields.Date.to_date("{}-01-01".format(self.name))
+ stop = fields.Date.to_date("{}-12-31".format(self.name))
+ AML = self.env["account.move.line"]
+ ATR = self.env["account.tax.return"]
+ ATRY = self.env["account.tax.return.year"]
+ # Reset year lines if already created
+ ATRY.search([("name", "=", self.name)]).unlink()
+ atr_lines = ATR.search([])
+ atr_sum_lines = atr_lines.filtered("is_sum_line")
+ accounts = atr_lines.mapped("account_ids")
+ year_amls = AML.search(
+ [
+ ("date", ">=", start),
+ ("date", "<=", stop),
+ ("account_id", "in", accounts.ids),
+ ("parent_state", "=", "posted"),
+ ]
+ )
+ base_vals_list = []
+ for line in atr_lines - atr_sum_lines:
+ base_vals_list.append(
+ {
+ "name": self.name,
+ "line_id": line.id,
+ "amount": line.compute_value(
+ year_amls.filtered(
+ lambda aml: aml.account_id.id in line.account_ids.ids
+ )
+ ),
+ }
+ )
+ year_atry = ATRY.create(base_vals_list)
+ while atr_sum_lines:
+ summed_lines = ATR
+ for line in atr_sum_lines.filtered(
+ lambda atr: atr.id
+ not in (atr.mapped("add_line_id") | atr.mapped("sub_line_id")).ids
+ ):
+ new_vals = {
+ "name": self.name,
+ "line_id": line.id,
+ "amount": (
+ sum(
+ year_atry.filtered(
+ lambda atry: atry.line_id.id in line.sum_line_ids.ids
+ ).mapped("amount")
+ )
+ or 0.0
+ )
+ - (
+ sum(
+ year_atry.filtered(
+ lambda atry: atry.line_id.id in line.ded_line_ids.ids
+ ).mapped("amount")
+ )
+ or 0.0
+ ),
+ }
+ year_atry |= ATRY.create([new_vals])
+ summed_lines |= line
+ atr_sum_lines -= summed_lines
+ action = self.env.ref(
+ "l10n_fr_tax_return.account_tax_return_year_action"
+ ).read()[0]
+ action.update(
+ {
+ "context": {"search_default_name": self.name},
+ }
+ )
+ return action
diff --git a/l10n_fr_tax_return/wizards/tax_return_wizard.xml b/l10n_fr_tax_return/wizards/tax_return_wizard.xml
new file mode 100644
index 0000000..88b5601
--- /dev/null
+++ b/l10n_fr_tax_return/wizards/tax_return_wizard.xml
@@ -0,0 +1,38 @@
+
+
+
+
+ tax.return.wizard.view.form
+ tax.return.wizard
+
+
+
+
+
+
+ Tax returns compute
+ tax.return.wizard
+ form
+ new
+ []
+ {}
+
+
+
+
+