47 lines
2.5 KiB
Python
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')],
|
|
}
|