Tower: upload at_accounting 18.0.1.7 (via marketplace)
This commit is contained in:
77
addons/at_accounting/models/account_move_line.py
Normal file
77
addons/at_accounting/models/account_move_line.py
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from odoo import api, models, fields, _
|
||||||
|
|
||||||
|
from odoo.exceptions import UserError
|
||||||
|
from odoo.tools import SQL
|
||||||
|
|
||||||
|
class AccountMoveLine(models.Model):
|
||||||
|
_name = "account.move.line"
|
||||||
|
_inherit = "account.move.line"
|
||||||
|
|
||||||
|
exclude_bank_lines = fields.Boolean(compute='_compute_exclude_bank_lines', store=True)
|
||||||
|
|
||||||
|
@api.depends('journal_id')
|
||||||
|
def _compute_exclude_bank_lines(self):
|
||||||
|
for move_line in self:
|
||||||
|
move_line.exclude_bank_lines = move_line.account_id != move_line.journal_id.default_account_id
|
||||||
|
|
||||||
|
@api.constrains('tax_ids', 'tax_tag_ids')
|
||||||
|
def _check_taxes_on_closing_entries(self):
|
||||||
|
for aml in self:
|
||||||
|
if aml.move_id.tax_closing_report_id and (aml.tax_ids or aml.tax_tag_ids):
|
||||||
|
raise UserError(_("You cannot add taxes on a tax closing move line."))
|
||||||
|
|
||||||
|
@api.depends('product_id', 'product_uom_id', 'move_id.tax_closing_report_id')
|
||||||
|
def _compute_tax_ids(self):
|
||||||
|
""" Some special cases may see accounts used in tax closing having default taxes.
|
||||||
|
They would trigger the constrains above, which we don't want. Instead, we don't trigger
|
||||||
|
the tax computation in this case.
|
||||||
|
"""
|
||||||
|
# EXTEND account
|
||||||
|
lines_to_compute = self.filtered(lambda line: not line.move_id.tax_closing_report_id)
|
||||||
|
(self - lines_to_compute).tax_ids = False
|
||||||
|
super(AccountMoveLine, lines_to_compute)._compute_tax_ids()
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def _prepare_aml_shadowing_for_report(self, change_equivalence_dict):
|
||||||
|
""" Prepares the fields lists for creating a temporary table shadowing the account_move_line one.
|
||||||
|
This is used to switch the computation mode of the reports, with analytics or financial budgets, for example.
|
||||||
|
|
||||||
|
:param change_equivalence_dict: A dict, in the form {aml_field: sql_equivalence}, where:
|
||||||
|
- aml_field: is a string containing the name of field of account.move.line
|
||||||
|
- sql_equivalence: is the value to use to shadow aml_field. It can be an SQL object; if
|
||||||
|
it's not, it'll be escaped in the query.
|
||||||
|
|
||||||
|
:return: A tuple of 2 SQL objects, so that:
|
||||||
|
- The first one is the fields list to pass into the INSERT TO part of the query filling up the temporary table
|
||||||
|
- The second one contains the field values to insert into the SELECT clause of the same query, in the same order
|
||||||
|
as in the first element of the returned tuple.
|
||||||
|
"""
|
||||||
|
line_fields = self.env['account.move.line'].fields_get()
|
||||||
|
self.env.cr.execute("SELECT column_name FROM information_schema.columns WHERE table_name='account_move_line'")
|
||||||
|
stored_fields = {f[0] for f in self.env.cr.fetchall() if f[0] in line_fields}
|
||||||
|
|
||||||
|
fields_to_insert = []
|
||||||
|
for fname in stored_fields:
|
||||||
|
if fname in change_equivalence_dict:
|
||||||
|
fields_to_insert.append(SQL(
|
||||||
|
"%(original)s AS %(asname)s",
|
||||||
|
original=change_equivalence_dict[fname],
|
||||||
|
asname=SQL('"account_move_line.%s"', SQL(fname)),
|
||||||
|
))
|
||||||
|
else:
|
||||||
|
line_field = line_fields[fname]
|
||||||
|
if line_field.get("translate"):
|
||||||
|
typecast = SQL('jsonb')
|
||||||
|
else:
|
||||||
|
typecast = SQL(self.env['account.move.line']._fields[fname].column_type[0])
|
||||||
|
|
||||||
|
fields_to_insert.append(SQL(
|
||||||
|
"CAST(NULL AS %(typecast)s) AS %(fname)s",
|
||||||
|
typecast=typecast,
|
||||||
|
fname=SQL('"account_move_line.%s"', SQL(fname)),
|
||||||
|
))
|
||||||
|
|
||||||
|
return SQL(', ').join(SQL.identifier(fname) for fname in stored_fields), SQL(', ').join(fields_to_insert)
|
||||||
Reference in New Issue
Block a user