diff --git a/ssi_financial_accounting/__manifest__.py b/ssi_financial_accounting/__manifest__.py index 3e6911d..8f8bdad 100644 --- a/ssi_financial_accounting/__manifest__.py +++ b/ssi_financial_accounting/__manifest__.py @@ -25,6 +25,10 @@ "security/ir.model.access.csv", "data/account_journal_data.xml", "menu.xml", + "wizards/general_ledger_wizard_views.xml", + "wizards/trial_balance_wizard_views.xml", + "wizards/aged_partner_balance_wizard_views.xml", + "wizards/account_move_line_selector_views.xml", "views/res_config_settings_views.xml", "views/mis_report_instance_views.xml", "views/mis_report_style_views.xml", @@ -34,9 +38,6 @@ "views/account_move_line_views.xml", "views/account_move_views.xml", "views/cash_flow_type_views.xml", - "wizards/general_ledger_wizard_views.xml", - "wizards/trial_balance_wizard_views.xml", - "wizards/aged_partner_balance_wizard_views.xml", "report/templates/aged_partner_balance.xml", ], "demo": [], diff --git a/ssi_financial_accounting/data/account_journal_data.xml b/ssi_financial_accounting/data/account_journal_data.xml index 4a44911..718837e 100644 --- a/ssi_financial_accounting/data/account_journal_data.xml +++ b/ssi_financial_accounting/data/account_journal_data.xml @@ -10,6 +10,12 @@ general + + Opening + OPEN + general + + Adjustment ADJ diff --git a/ssi_financial_accounting/models/account_move_line.py b/ssi_financial_accounting/models/account_move_line.py index 794029b..56f6937 100644 --- a/ssi_financial_accounting/models/account_move_line.py +++ b/ssi_financial_accounting/models/account_move_line.py @@ -3,6 +3,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo import api, fields, models +from odoo.tools.safe_eval import safe_eval class AccountMoveLine(models.Model): @@ -57,3 +58,23 @@ def create(self, values_list): ) return results + + def _transform_to_other_data(self, aml_selector): + self.ensure_one() + dict_mappings = safe_eval(aml_selector.field_mapping) + record = self.read()[0] + + for dict_mapping in dict_mappings.items(): + if dict_mapping[1] == "active_id": + dict_mappings.update({dict_mapping[0]: aml_selector.active_id}) + else: + if type(record[dict_mapping[0]]) is tuple: + data = record[dict_mapping[1]][0] + else: + data = record[dict_mapping[1]] + dict_mappings.update( + { + dict_mapping[0]: data, + } + ) + self.env[aml_selector.active_model].create(dict_mappings) diff --git a/ssi_financial_accounting/security/ir.model.access.csv b/ssi_financial_accounting/security/ir.model.access.csv index e313f7f..777de5f 100644 --- a/ssi_financial_accounting/security/ir.model.access.csv +++ b/ssi_financial_accounting/security/ir.model.access.csv @@ -1,3 +1,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_cash_flow_type_configurator,cash_flow_type - configurator,model_cash_flow_type,cash_flow_type_group,1,1,1,1 access_cash_flow_type_all,cash_flow_type - all user,model_cash_flow_type,,1,0,0,0 +access_account_move_line_selector_all,account_move_line_selector - all user,model_account_move_line_selector,,1,1,1,1 diff --git a/ssi_financial_accounting/wizards/__init__.py b/ssi_financial_accounting/wizards/__init__.py index 8fc67ba..c316bc2 100644 --- a/ssi_financial_accounting/wizards/__init__.py +++ b/ssi_financial_accounting/wizards/__init__.py @@ -4,4 +4,5 @@ from . import ( aged_partner_balance_report_wizard, + account_move_line_selector, ) diff --git a/ssi_financial_accounting/wizards/account_move_line_selector.py b/ssi_financial_accounting/wizards/account_move_line_selector.py new file mode 100644 index 0000000..08ca7a9 --- /dev/null +++ b/ssi_financial_accounting/wizards/account_move_line_selector.py @@ -0,0 +1,106 @@ +from odoo import api, fields, models + + +class AccountMoveLineSelector(models.TransientModel): + _name = "account_move_line_selector" + _description = "Journal Item Selector" + + active_model = fields.Char( + string="Active Model", + ) + active_id = fields.Integer( + string="Active ID", + ) + filter_account_ok = fields.Boolean( + string="Filter by Account", + default=False, + ) + account_ids = fields.Many2many( + string="Allowed Accounts", + comodel_name="account.account", + ) + filter_partner_ok = fields.Boolean( + string="Filter by Partner", + default=False, + ) + partner_ids = fields.Many2many( + string="Allowed Partners", + comodel_name="res.partner", + ) + filter_journal_ok = fields.Boolean( + string="Filter by Journal", + default=False, + ) + journal_ids = fields.Many2many( + string="Allowed Journals", + comodel_name="account.journal", + ) + direction = fields.Selection( + string="Direction", + selection=[ + ("dr", "Debit"), + ("cr", "Credit"), + ("both", "Both"), + ], + default="dr", + ) + reconcile = fields.Boolean( + string="Reconcile", + default=True, + ) + allowed_move_line_ids = fields.Many2many( + string="Allowed Move Lines", + comodel_name="account.move.line", + compute="_compute_allowed_move_line_ids", + store=False, + ) + move_line_ids = fields.Many2many( + string="Selected Move Lines", + comodel_name="account.move.line", + ) + field_mapping = fields.Text( + string="Field Mapping", + ) + + @api.depends( + "filter_account_ok", + "account_ids", + "filter_journal_ok", + "journal_ids", + "filter_partner_ok", + "partner_ids", + "direction", + "reconcile", + ) + def _compute_allowed_move_line_ids(self): + for record in self: + criteria = [ + ("reconciled", "=", record.reconcile), + ] + + if record.direction == "dr": + criteria.append(("debit", ">", 0.0)) + elif record.direction == "cr": + criteria.append(("credit", ">", 0.0)) + + if record.filter_account_ok: + criteria.append(("account_id", "in", record.account_ids.ids)) + + if record.filter_journal_ok: + criteria.append(("journal_id", "in", record.journal_ids.ids)) + + if record.filter_partner_ok: + criteria.append(("partner_id", "in", record.partner_ids.ids)) + + record.allowed_move_line_ids = self.env["account.move.line"].search( + criteria + ) + + def action_confirm(self): + for record in self.sudo(): + record._confirm() + + def _confirm(self): + self.ensure_one() + for aml in self.move_line_ids: + aml._transform_to_other_data(self) diff --git a/ssi_financial_accounting/wizards/account_move_line_selector_views.xml b/ssi_financial_accounting/wizards/account_move_line_selector_views.xml new file mode 100644 index 0000000..0ff9aac --- /dev/null +++ b/ssi_financial_accounting/wizards/account_move_line_selector_views.xml @@ -0,0 +1,57 @@ + + + + + account_move_line_selector form + account_move_line_selector + +
+ + + + + + + + + + + + + + + +
+
+ +
+
+ + + Journal Items Selector + ir.actions.act_window + account_move_line_selector + form + + new + + + +