1
0
forked from Mapan/odoo17e
odoo17e-kedaikipas58/addons/l10n_be_reports/models/res_partner.py
2024-12-10 09:04:09 +07:00

91 lines
3.9 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from stdnum.be import vat
from odoo import _, Command, fields, models
from odoo.exceptions import AccessError, RedirectWarning
class ResPartner(models.Model):
_inherit = 'res.partner'
citizen_identification = fields.Char(
string="Citizen Identification",
help="This code corresponds to the personal identification number for the tax authorities.")
form_file = fields.Binary(readonly=True, help="Technical field to store all forms file.")
forms_281_50 = fields.One2many(
comodel_name='l10n_be.form.281.50',
string='281.50 forms',
check_company=True,
inverse_name='partner_id',
copy=False,
help="List of 281.50 forms for this partner"
)
def write(self, vals):
tag_281_50 = self.env.ref('l10n_be_reports.res_partner_tag_281_50', raise_if_not_found=False)
if (
tag_281_50
and any(cmd[0] == Command.UNLINK and cmd[1] == tag_281_50.id for cmd in vals.get('category_id', []))
and tag_281_50 in self.category_id # only raise when removing the tag, adding is allowed for everyone
and not self.user_has_groups('account.group_account_user')
):
group_name = self.env.ref('account.group_account_user').name
raise AccessError(_("Only users with the access group '%s' can unset the 281.50 category on partners.", group_name))
return super().write(vals)
def _formated_address(self):
self.ensure_one()
return f"{self.street}{(', ' + self.street2) if self.street2 else ''}"
def _check_partner_281_50_required_values(self, check_phone_number=False):
""" This function verifies that some fields on partners are set.
Partner's fields:
- Street
- Zip
- Citizen id or VAT number
- Country
"""
partner_missing_data = self._get_partner_missing_data(check_phone_number=check_phone_number)
if partner_missing_data:
additional_context = {'required_fields': (['phone'] if check_phone_number else [])}
redirect_warning_message = _(
"Some partners are not correctly configured. "
"Please be sure that the following pieces of information are set: "
"street, zip code, country%s and vat or citizen identification.",
(', phone' if check_phone_number else '')
)
raise RedirectWarning(redirect_warning_message, partner_missing_data._open_partner_with_missing_data(), _("Open list"), additional_context)
def _get_partner_missing_data(self, check_phone_number=False):
partner_missing_data = self.env['res.partner']
for partner in self:
partner = partner.commercial_partner_id
if not all([partner.street, partner.zip, partner.country_id, (partner.citizen_identification or partner.vat)]):
partner_missing_data |= partner
if check_phone_number and not partner.phone:
partner_missing_data |= partner
return partner_missing_data
def _open_partner_with_missing_data(self):
required_field_view_list = self.env.ref('l10n_be_reports.view_partner_281_50_required_fields')
required_field_view_form = self.env.ref('l10n_be_reports.res_partner_view_form_281_50_required_field')
return {
'type': 'ir.actions.act_window',
'name': _("Missing partner data"),
'res_model': 'res.partner',
'views': [(required_field_view_list.id, 'list'), (required_field_view_form.id, 'form')],
'domain': [('id', 'in', self.ids)],
}
def _get_lang_code(self):
return {
'nl': '1',
'fr': '2',
'de': '3',
}.get((self.lang or "")[:2], '2')
def _get_bce_number(self):
self.ensure_one()
return vat.compact(self.vat or '')