diff --git a/addons/account/models/account_account.py b/addons/account/models/account_account.py index b9a9e2354a8..e4e45e09fb4 100644 --- a/addons/account/models/account_account.py +++ b/addons/account/models/account_account.py @@ -82,7 +82,8 @@ class AccountAccount(models.Model): ) #has_unreconciled_entries = fields.Boolean(compute='_compute_has_unreconciled_entries', # help="The account has at least one unreconciled debit and credit since last time the invoices & payments matching was performed.") - reconcile = fields.Boolean(string='Allow Reconciliation', default=False, tracking=True, + reconcile = fields.Boolean(string='Allow Reconciliation', tracking=True, + compute='_compute_reconcile', store=True, readonly=False, help="Check this box if this account allows invoices & payments matching of journal items.") tax_ids = fields.Many2many('account.tax', 'account_account_tax_default_rel', 'account_id', 'tax_id', string='Default Taxes', @@ -96,10 +97,9 @@ class AccountAccount(models.Model): help="Account prefixes can determine account groups.") root_id = fields.Many2one('account.root', compute='_compute_account_root', store=True) allowed_journal_ids = fields.Many2many('account.journal', string="Allowed Journals", help="Define in which journals this account can be used. If empty, can be used in all journals.") - opening_debit = fields.Monetary(string="Opening Debit", compute='_compute_opening_debit_credit', inverse='_set_opening_debit') opening_credit = fields.Monetary(string="Opening Credit", compute='_compute_opening_debit_credit', inverse='_set_opening_credit') - opening_balance = fields.Monetary(string="Opening Balance", compute='_compute_opening_debit_credit') + opening_balance = fields.Monetary(string="Opening Balance", compute='_compute_opening_debit_credit', inverse='_set_opening_balance') is_off_balance = fields.Boolean(compute='_compute_is_off_balance', default=False, store=True, readonly=True) @@ -409,6 +409,11 @@ class AccountAccount(models.Model): if account.account_type: account.internal_group = 'off_balance' if account.account_type == 'off_balance' else account.account_type.split('_')[0] + @api.depends('account_type') + def _compute_reconcile(self): + for account in self: + account.reconcile = account.account_type in ('asset_receivable', 'liability_payable') + def _set_opening_debit(self): for record in self: record._set_opening_debit_credit(record.opening_debit, 'debit') @@ -417,6 +422,12 @@ class AccountAccount(models.Model): for record in self: record._set_opening_debit_credit(record.opening_credit, 'credit') + def _set_opening_balance(self): + for account in self: + if account.opening_balance: + side = 'debit' if account.opening_balance > 0 else 'credit' + account._set_opening_debit_credit(abs(account.opening_balance), side) + def _set_opening_debit_credit(self, amount, field): """ Generic function called by both opening_debit and opening_credit's inverse function. 'Amount' parameter is the value to be set, and field @@ -529,11 +540,7 @@ class AccountAccount(models.Model): @api.onchange('account_type') def _onchange_account_type(self): - self.reconcile = self.account_type in ('asset_receivable', 'liability_payable') - if self.account_type in ('asset_cash', 'liability_credit_card'): - self.reconcile = False - elif self.internal_group == 'off_balance': - self.reconcile = False + if self.internal_group == 'off_balance': self.tax_ids = False elif self.internal_group == 'income' and not self.tax_ids: self.tax_ids = self.company_id.account_sale_tax_id @@ -588,6 +595,9 @@ class AccountAccount(models.Model): companies = self.search([('id', 'in', rslt['ids'])]).mapped('company_id') for company in companies: company._auto_balance_opening_move() + # the current_balance of the account only includes posted moves and + # would always amount to 0 after the import if we didn't post the opening move + company.account_opening_move_id.action_post() return rslt def _toggle_reconcile_to_true(self): @@ -719,6 +729,13 @@ class AccountAccount(models.Model): 'domain': [('id', 'in', related_taxes_ids)], } + @api.model + def get_import_templates(self): + return [{ + 'label': _('Import Template for Chart of Accounts'), + 'template': '/account/static/xls/coa_import_template.xlsx' + }] + class AccountGroup(models.Model): _name = "account.group" diff --git a/addons/account/models/account_journal.py b/addons/account/models/account_journal.py index 1171819086c..b23d12fda65 100644 --- a/addons/account/models/account_journal.py +++ b/addons/account/models/account_journal.py @@ -587,6 +587,10 @@ class AccountJournal(models.Model): @api.model def _fill_missing_values(self, vals): journal_type = vals.get('type') + if 'import_file' in self.env.context and not journal_type: + vals['type'] = 'general' + if not vals.get('code'): + vals['code'] = vals.get('name') # 'type' field is required. if not journal_type: diff --git a/addons/account/models/account_move_line.py b/addons/account/models/account_move_line.py index 6b51b9900ac..78cc767deb2 100644 --- a/addons/account/models/account_move_line.py +++ b/addons/account/models/account_move_line.py @@ -2442,6 +2442,13 @@ class AccountMoveLine(models.Model): 'reconciliation': reconciliation_fnames, } + @api.model + def get_import_templates(self): + return [{ + 'label': _('Import Template for Journal Items'), + 'template': '/account/static/xls/aml_import_template.xlsx' + }] + # ------------------------------------------------------------------------- # PUBLIC ACTIONS # ------------------------------------------------------------------------- diff --git a/addons/account/models/res_config_settings.py b/addons/account/models/res_config_settings.py index 686a143783b..c4bb9c35922 100644 --- a/addons/account/models/res_config_settings.py +++ b/addons/account/models/res_config_settings.py @@ -104,8 +104,6 @@ class ResConfigSettings(models.TransientModel): '-This installs the account_batch_payment module.') module_account_sepa = fields.Boolean(string='SEPA Credit Transfer (SCT)') module_account_sepa_direct_debit = fields.Boolean(string='Use SEPA Direct Debit') - module_l10n_fr_fec_import = fields.Boolean("Import FEC files", - help='Allows you to import FEC files.\n' '-This installs the l10n_fr_fec_import module.') module_account_bank_statement_import_qif = fields.Boolean("Import .qif files") module_account_bank_statement_import_ofx = fields.Boolean("Import in .ofx format") module_account_bank_statement_import_csv = fields.Boolean("Import in .csv format") diff --git a/addons/account/static/xls/aml_import_template.xlsx b/addons/account/static/xls/aml_import_template.xlsx new file mode 100644 index 00000000000..ddad540682e Binary files /dev/null and b/addons/account/static/xls/aml_import_template.xlsx differ diff --git a/addons/account/static/xls/coa_import_template.xlsx b/addons/account/static/xls/coa_import_template.xlsx new file mode 100644 index 00000000000..482b81066c0 Binary files /dev/null and b/addons/account/static/xls/coa_import_template.xlsx differ diff --git a/addons/account/views/account_onboarding_templates.xml b/addons/account/views/account_onboarding_templates.xml index 0f8035bfbd8..f1068d3298c 100644 --- a/addons/account/views/account_onboarding_templates.xml +++ b/addons/account/views/account_onboarding_templates.xml @@ -95,9 +95,9 @@ - - + + diff --git a/addons/account/views/res_config_settings_views.xml b/addons/account/views/res_config_settings_views.xml index 356fbb5749f..35f9f978741 100644 --- a/addons/account/views/res_config_settings_views.xml +++ b/addons/account/views/res_config_settings_views.xml @@ -595,25 +595,6 @@ - -

Accounting Import

-
-
-
- -
-
-
-
-
-
-

Fiscal Periods

diff --git a/addons/base_import/static/src/legacy/js/import_action.js b/addons/base_import/static/src/legacy/js/import_action.js index b095a257ed4..843f95e0c86 100644 --- a/addons/base_import/static/src/legacy/js/import_action.js +++ b/addons/base_import/static/src/legacy/js/import_action.js @@ -135,7 +135,7 @@ var DataImport = AbstractAction.extend({ // import object id this.id = null; this.session = session; - this._title = _t('Import a File'); // Displayed in the breadcrumbs + this._title = action.name || _t('Import a File'); // Displayed in the breadcrumbs this.do_not_change_match = false; this.sheets = []; this.selectionFields = {}; // Used to compute fallback values in backend. diff --git a/addons/base_import/static/src/legacy/xml/base_import.xml b/addons/base_import/static/src/legacy/xml/base_import.xml index cee5fa67b4c..8e7f7c59b59 100644 --- a/addons/base_import/static/src/legacy/xml/base_import.xml +++ b/addons/base_import/static/src/legacy/xml/base_import.xml @@ -20,7 +20,7 @@

Need Help?
diff --git a/odoo/addons/base/models/res_partner.py b/odoo/addons/base/models/res_partner.py index b6c557be360..5c626c86c2a 100644 --- a/odoo/addons/base/models/res_partner.py +++ b/odoo/addons/base/models/res_partner.py @@ -1006,7 +1006,7 @@ class Partner(models.Model): def get_import_templates(self): return [{ 'label': _('Import Template for Customers'), - 'template': '/base/static/xls/res_partner.xls' + 'template': '/base/static/xls/res_partner.xlsx' }] @api.model diff --git a/odoo/addons/base/static/xls/res_partner.xls b/odoo/addons/base/static/xls/res_partner.xls deleted file mode 100644 index c9b71f3374a..00000000000 Binary files a/odoo/addons/base/static/xls/res_partner.xls and /dev/null differ diff --git a/odoo/addons/base/static/xls/res_partner.xlsx b/odoo/addons/base/static/xls/res_partner.xlsx new file mode 100644 index 00000000000..fd27b454247 Binary files /dev/null and b/odoo/addons/base/static/xls/res_partner.xlsx differ