odoo18/addons/l10n_es_edi_verifactu/models/res_company.py

99 lines
3.8 KiB
Python

from odoo import _, fields, models
class ResCompany(models.Model):
_inherit = 'res.company'
l10n_es_edi_verifactu_certificate_ids = fields.One2many(
string="Veri*Factu Certificates",
comodel_name='certificate.certificate',
inverse_name='company_id',
)
l10n_es_edi_verifactu_required = fields.Boolean(
string="Enable Veri*Factu",
copy=False,
)
l10n_es_edi_verifactu_test_environment = fields.Boolean(
string="Veri*Factu Test Environment",
default=True,
copy=False,
)
l10n_es_edi_verifactu_chain_sequence_id = fields.Many2one(
comodel_name='ir.sequence',
string="Veri*Factu Document Chain Sequence",
readonly=True,
copy=False,
)
l10n_es_edi_verifactu_next_batch_time = fields.Datetime(
string="Veri*Factu Next Batch Time",
readonly=True,
copy=False,
help="The Datetime at which the next submission to the AEAT can be made.",
)
l10n_es_edi_verifactu_special_vat_regime = fields.Selection(
string="Veri*Factu VAT Regime",
selection=[
('simplified', "Simplified Regime"),
('reagyp', "REAGYP (Special Regime for Agriculture, Livestock and Fisheries)"),
('recargo', "Recargo de Equivalencia"),
],
help="Leave empty for the normal regimen.",
)
def _l10n_es_edi_verifactu_get_endpoints(self):
"""
For the SOAP endpoints see:
https://prewww2.aeat.es/static_files/common/internet/dep/aplicaciones/es/aeat/tikeV1.0/cont/ws/SistemaFacturacion.wsdl
"""
self.ensure_one()
wsdl_base = {
'url': 'https://prewww2.aeat.es/static_files/common/internet/dep/aplicaciones/es/aeat/tikeV1.0/cont/ws/SistemaFacturacion.wsdl',
'service': 'sfVerifactu',
'registration': 'RegFactuSistemaFacturacion',
'port': None,
}
if self.l10n_es_edi_verifactu_test_environment:
endpoints = {
'wsdl': wsdl_base | {'port': 'SistemaVerifactuPruebas'},
'verifactu': 'https://prewww1.aeat.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP',
'QR': 'https://prewww2.aeat.es/wlpl/TIKE-CONT/ValidarQR',
}
else:
endpoints = {
'wsdl': wsdl_base | {'port': 'SistemaVerifactu'},
'verifactu': 'https://www1.agenciatributaria.gob.es/wlpl/TIKE-CONT/ws/SistemaFacturacion/VerifactuSOAP',
'QR': 'https://www2.agenciatributaria.gob.es/wlpl/TIKE-CONT/ValidarQR'
}
return endpoints
def _l10n_es_edi_verifactu_get_certificate(self):
self.ensure_one()
return self.env['certificate.certificate'].search(
[('company_id', '=', self.id), ('scope', '=', 'verifactu')],
order='date_end desc',
limit=1,
)
def _l10n_es_edi_verifactu_get_chain_sequence(self):
self.ensure_one()
if not self.l10n_es_edi_verifactu_chain_sequence_id:
self_sudo = self.sudo()
self_sudo.l10n_es_edi_verifactu_chain_sequence_id = self_sudo.env['ir.sequence'].create({
'name': _("Veri*Factu Document Sequence for company %(name)s (%(id)s)", name=self.name, id=self.id),
'code': f'l10n_es_edi_verifactu.document.{self.id}',
'implementation': 'no_gap',
'company_id': self.id,
})
return self.l10n_es_edi_verifactu_chain_sequence_id
def _l10n_es_edi_verifactu_get_last_document(self):
self.ensure_one()
return self.env['l10n_es_edi_verifactu.document'].search(
[
('chain_index', '!=', False),
('company_id', '=', self.id),
],
order='chain_index DESC',
limit=1,
)