mirror of
https://github.com/OCA/intrastat-extrastat.git
synced 2025-02-16 17:13:41 +02:00
73 lines
2.6 KiB
Python
73 lines
2.6 KiB
Python
# Copyright 2013-2020 Akretion France (http://www.akretion.com/)
|
|
# @author: <alexis.delattre@akretion.com>
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
|
|
import logging
|
|
from io import BytesIO
|
|
from sys import exc_info
|
|
from traceback import format_exception
|
|
|
|
from lxml import etree
|
|
|
|
from odoo import _, api, fields, models, tools
|
|
from odoo.exceptions import UserError, ValidationError
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class ResCompany(models.Model):
|
|
_inherit = "res.company"
|
|
|
|
intrastat_remind_user_ids = fields.Many2many(
|
|
comodel_name="res.users",
|
|
relation="company_intrastat_reminder_user_rel",
|
|
column1="company_id",
|
|
column2="user_id",
|
|
string="Users Receiving the Intrastat Reminder",
|
|
help="List of Odoo users who will receive a notification to "
|
|
"remind them about the Intrastat declaration.",
|
|
)
|
|
intrastat_email_list = fields.Char(
|
|
compute="_compute_intrastat_email_list",
|
|
string="List of emails of Users Receiving the Intrastat Reminder",
|
|
)
|
|
|
|
@api.depends("intrastat_remind_user_ids", "intrastat_remind_user_ids.email")
|
|
def _compute_intrastat_email_list(self):
|
|
for this in self:
|
|
emails = []
|
|
for user in this.intrastat_remind_user_ids:
|
|
if user.email:
|
|
emails.append(user.email)
|
|
this.intrastat_email_list = ",".join(emails)
|
|
|
|
@api.constrains("intrastat_remind_user_ids")
|
|
def _check_intrastat_remind_users(self):
|
|
for this in self:
|
|
for user in this.intrastat_remind_user_ids:
|
|
if not user.email:
|
|
raise ValidationError(
|
|
_("Missing e-mail address on user '%s'.") % (user.name)
|
|
)
|
|
|
|
@api.model
|
|
def _intrastat_check_xml_schema(self, xml_bytes, xsd_file):
|
|
"""Validate the XML file against the XSD"""
|
|
xsd_etree_obj = etree.parse(tools.file_open(xsd_file, mode="rb"))
|
|
official_schema = etree.XMLSchema(xsd_etree_obj)
|
|
try:
|
|
t = etree.parse(BytesIO(xml_bytes))
|
|
official_schema.assertValid(t)
|
|
except (etree.XMLSchemaParseError, etree.DocumentInvalid) as e:
|
|
logger.warning("The XML file is invalid against the XML Schema Definition")
|
|
logger.warning(xml_bytes)
|
|
logger.warning(e)
|
|
usererror = "{}\n\n{}".format(e.__class__.__name__, str(e))
|
|
raise UserError(usererror)
|
|
except Exception:
|
|
error = _("Unknown Error")
|
|
tb = "".join(format_exception(*exc_info()))
|
|
error += "\n%s" % tb
|
|
logger.warning(error)
|
|
raise UserError(error)
|