Files
enterprise-addons/l10n_uk_reports_cis/models/account_move.py
T

47 lines
2.5 KiB
Python

from odoo import api, fields, models
from odoo.tools.float_utils import float_compare
class AccountMove(models.Model):
_inherit = "account.move"
l10n_uk_cis_wrong_taxes = fields.Boolean(compute='_compute_l10n_uk_cis_wrong_taxes')
l10n_uk_cis_inactive_partner = fields.Boolean(compute='_compute_l10n_uk_cis_inactive_partner', store=True)
@api.depends('partner_id', 'invoice_line_ids.tax_ids', 'partner_id.l10n_uk_reports_cis_deduction_rate', 'l10n_uk_cis_inactive_partner')
def _compute_l10n_uk_cis_wrong_taxes(self):
purchase_tax_tags = self.env.ref('l10n_uk_reports_cis.account_uk_cis_report_line_purchase_expr_deduction')._get_matching_tags()
for move in self:
if move.move_type in ('out_invoice', 'out_refund', 'out_receipt') or move.company_id.country_code != 'GB' or move.l10n_uk_cis_inactive_partner or not move.partner_id:
move.l10n_uk_cis_wrong_taxes = False
else:
move_percentage_taxes = move.invoice_line_ids.tax_ids.filtered(
lambda tax: tax.amount_type == 'percent'
and float_compare(tax.amount, move.partner_id.commercial_partner_id._get_deduction_amount_from_rate(), precision_digits=0) != 0
)
move.l10n_uk_cis_wrong_taxes = set(move_percentage_taxes.repartition_line_ids.tag_ids.ids) & set(purchase_tax_tags.ids)
@api.depends('partner_id', 'invoice_line_ids.tax_ids', 'partner_id.commercial_partner_id.l10n_uk_cis_enabled')
def _compute_l10n_uk_cis_inactive_partner(self):
purchase_tax_tags = self.env['account.account.tag']
if expr := self.env.ref('l10n_uk_reports_cis.account_uk_cis_report_line_purchase_expr_deduction', raise_if_not_found=False):
purchase_tax_tags = expr._get_matching_tags()
for move in self:
if not move.is_purchase_document() or move.company_id.country_code != 'GB' or move.partner_id.commercial_partner_id.l10n_uk_cis_enabled:
move.l10n_uk_cis_inactive_partner = False
else:
move.l10n_uk_cis_inactive_partner = set(purchase_tax_tags.ids) & set(move.invoice_line_ids.tax_ids.invoice_repartition_line_ids.tag_ids.ids)
def l10n_uk_reports_cis_action_open_commercial_partner(self):
self.ensure_one()
return {
'view_mode': 'form',
'res_model': 'res.partner',
'type': 'ir.actions.act_window',
'res_id': self.partner_id.commercial_partner_id.id,
'views': [(False, 'form')],
}