43 lines
1.5 KiB
Python
43 lines
1.5 KiB
Python
from odoo import api, models
|
|
from odoo.osv import expression
|
|
|
|
|
|
class KpiProvider(models.AbstractModel):
|
|
_inherit = 'kpi.provider'
|
|
|
|
@api.model
|
|
def get_account_kpi_summary(self):
|
|
grouped_moves_to_report = self.env['account.move']._read_group(
|
|
expression.OR([
|
|
[('state', '=', 'draft')],
|
|
[('state', '=', 'posted'), ('checked', '=', False)],
|
|
[('state', '=', 'posted'), ('journal_id.type', '=', 'bank'), ('statement_line_id.is_reconciled', '=', False)],
|
|
]),
|
|
['journal_id'],
|
|
['journal_id:count'],
|
|
)
|
|
|
|
FieldsSelection = self.env['ir.model.fields.selection'].with_context(lang=self.env.user.lang)
|
|
journal_type_names = {x.value: x.name for x in FieldsSelection.search([
|
|
('field_id.model', '=', 'account.journal'),
|
|
('field_id.name', '=', 'type'),
|
|
])}
|
|
|
|
count_by_type = {}
|
|
for journal_id, count in grouped_moves_to_report:
|
|
journal_type = journal_id.type
|
|
count_by_type[journal_type] = count_by_type.get(journal_type, 0) + count
|
|
|
|
return [{
|
|
'id': f'account_journal_type.{journal_type}',
|
|
'name': journal_type_names[journal_type],
|
|
'type': 'integer',
|
|
'value': count,
|
|
} for journal_type, count in count_by_type.items()]
|
|
|
|
@api.model
|
|
def get_kpi_summary(self):
|
|
result = super().get_kpi_summary()
|
|
result.extend(self.get_account_kpi_summary())
|
|
return result
|