diff --git a/addons/account/models/account_account.py b/addons/account/models/account_account.py
index d4d630bbc82..68a903b2760 100644
--- a/addons/account/models/account_account.py
+++ b/addons/account/models/account_account.py
@@ -54,7 +54,7 @@ class AccountAccount(models.Model):
('user_type_id', '=', data_unaffected_earnings.id)])
raise ValidationError(_('You cannot have more than one account with "Current Year Earnings" as type. (accounts: %s)') % [a.code for a in account_unaffected_earnings])
- name = fields.Char(required=True, index=True)
+ name = fields.Char(string="Account Name", required=True, index=True)
currency_id = fields.Many2one('res.currency', string='Account Currency',
help="Forces all moves for this account to have this account currency.")
code = fields.Char(size=64, required=True, index=True)
@@ -80,8 +80,9 @@ class AccountAccount(models.Model):
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', help="Opening debit value for this account.")
- opening_credit = fields.Monetary(string="Opening credit", compute='_compute_opening_debit_credit', inverse='_set_opening_credit', help="Opening credit value for this account.")
+ opening_debit = fields.Monetary(string="Opening Debit", compute='_compute_opening_debit_credit', inverse='_set_opening_debit', help="Opening debit value for this account.")
+ opening_credit = fields.Monetary(string="Opening Credit", compute='_compute_opening_debit_credit', inverse='_set_opening_credit', help="Opening credit value for this account.")
+ opening_balance = fields.Monetary(string="Opening Balance", compute='_compute_opening_debit_credit', help="Opening balance value for this account.")
_sql_constraints = [
('code_company_uniq', 'unique (code,company_id)', 'The code of the account must be unique per company !')
@@ -220,17 +221,25 @@ class AccountAccount(models.Model):
raise UserError(_('Cannot generate an unused account code.'))
def _compute_opening_debit_credit(self):
+ if not self:
+ return
+ self.env.cr.execute("""
+ SELECT line.account_id,
+ SUM(line.balance) AS balance,
+ SUM(line.debit) AS debit,
+ SUM(line.credit) AS credit
+ FROM account_move_line line
+ JOIN res_company comp ON comp.id = line.company_id
+ WHERE line.move_id = comp.account_opening_move_id
+ AND line.account_id IN %s
+ GROUP BY line.account_id
+ """, [tuple(self.ids)])
+ result = {r['account_id']: r for r in self.env.cr.dictfetchall()}
for record in self:
- opening_debit = opening_credit = 0.0
- if record.company_id.account_opening_move_id:
- for line in self.env['account.move.line'].search([('account_id', '=', record.id),
- ('move_id','=', record.company_id.account_opening_move_id.id)]):
- if line.debit:
- opening_debit += line.debit
- elif line.credit:
- opening_credit += line.credit
- record.opening_debit = opening_debit
- record.opening_credit = opening_credit
+ res = result.get(record.id) or {'debit': 0, 'credit': 0, 'balance': 0}
+ record.opening_debit = res['debit']
+ record.opening_credit = res['credit']
+ record.opening_balance = res['balance']
def _set_opening_debit(self):
self._set_opening_debit_credit(self.opening_debit, 'debit')
diff --git a/addons/account/models/account_journal_dashboard.py b/addons/account/models/account_journal_dashboard.py
index ff33c8db5de..8be1af1dcd6 100644
--- a/addons/account/models/account_journal_dashboard.py
+++ b/addons/account/models/account_journal_dashboard.py
@@ -435,22 +435,25 @@ class account_journal(models.Model):
statement_line_ids = self.env['account.move.line'].search(domain).mapped('statement_line_id')
return statement_line_ids
+ def _select_action_to_open(self):
+ self.ensure_one()
+ if self._context.get('action_name'):
+ return self._context.get('action_name')
+ elif self.type == 'bank':
+ return 'action_bank_statement_tree'
+ elif self.type == 'cash':
+ return 'action_view_bank_statement_tree'
+ elif self.type == 'sale':
+ return 'action_move_out_invoice_type'
+ elif self.type == 'purchase':
+ return 'action_move_in_invoice_type'
+ else:
+ return 'action_move_journal_line'
+
def open_action(self):
"""return action based on type for related journals"""
- action_name = self._context.get('action_name')
-
- # Find action based on journal.
- if not action_name:
- if self.type == 'bank':
- action_name = 'action_bank_statement_tree'
- elif self.type == 'cash':
- action_name = 'action_view_bank_statement_tree'
- elif self.type == 'sale':
- action_name = 'action_move_out_invoice_type'
- elif self.type == 'purchase':
- action_name = 'action_move_in_invoice_type'
- else:
- action_name = 'action_move_journal_line'
+ self.ensure_one()
+ action_name = self._select_action_to_open()
# Set 'account.' prefix if missing.
if '.' not in action_name:
diff --git a/addons/account/models/account_move.py b/addons/account/models/account_move.py
index fec803d28a9..e3f56107407 100644
--- a/addons/account/models/account_move.py
+++ b/addons/account/models/account_move.py
@@ -207,7 +207,7 @@ class AccountMove(models.Model):
('partial', 'Partially Paid'),
('reversed', 'Reversed'),
('invoicing_legacy', 'Invoicing App Legacy')],
- string="Payment State", store=True, readonly=True, copy=False, tracking=True,
+ string="Payment Status", store=True, readonly=True, copy=False, tracking=True,
compute='_compute_amount')
# ==== Cash basis feature fields ====
diff --git a/addons/account/models/sequence_mixin.py b/addons/account/models/sequence_mixin.py
index ad3fa371bfb..f6f4520661d 100644
--- a/addons/account/models/sequence_mixin.py
+++ b/addons/account/models/sequence_mixin.py
@@ -122,9 +122,9 @@ class SequenceMixin(models.AbstractModel):
sequence = re.match(self._sequence_fixed_regex, last_sequence)
value = ("{prefix}{seq:0%sd}{suffix}" % len(sequence.group('seq'))).format(
- prefix=sequence.group('prefix1'),
+ prefix=sequence.group('prefix1') if sequence.group('seq') else sequence.group('suffix'),
seq=int(sequence.group('seq') or 0) + 1,
- suffix=sequence.group('suffix'),
+ suffix=sequence.group('suffix') if sequence.group('seq') else "",
)
self[self._sequence_field] = value
self.flush([self._sequence_field])
diff --git a/addons/account/static/src/scss/account_journal_dashboard.scss b/addons/account/static/src/scss/account_journal_dashboard.scss
index 36d8dbfd171..6c36e61a0a3 100644
--- a/addons/account/static/src/scss/account_journal_dashboard.scss
+++ b/addons/account/static/src/scss/account_journal_dashboard.scss
@@ -40,10 +40,6 @@
}
}
- .o_sample_data_label {
- @include o-position-absolute($bottom: 25%, $right: 0);
- z-index: 1;
- }
.o_kanban_group {
&:not(.o_column_folded) {
width: 450px + 2*$o-kanban-group-padding;
diff --git a/addons/account/tests/test_account_move_entry.py b/addons/account/tests/test_account_move_entry.py
index b2f1c443a2d..cecb95f1c74 100644
--- a/addons/account/tests/test_account_move_entry.py
+++ b/addons/account/tests/test_account_move_entry.py
@@ -381,7 +381,7 @@ class TestAccountMove(AccountTestInvoicingCommon):
copy6 = copy5.copy()
copy6.post()
- self.assertEqual(copy6.name, '1N\'importe quoi?')
+ self.assertEqual(copy6.name, 'N\'importe quoi?1')
def test_journal_sequence_format(self):
"""Test different format of sequences and what it becomes on another period"""
diff --git a/addons/account/views/account_account_views.xml b/addons/account/views/account_account_views.xml
index aa6f9b2f77b..7dfed0fc2aa 100644
--- a/addons/account/views/account_account_views.xml
+++ b/addons/account/views/account_account_views.xml
@@ -63,7 +63,7 @@