forked from Mapan/odoo17e
91 lines
3.9 KiB
Python
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 '')
|