AEAT modelo 349

l10n_es_aeat_mod349
REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/19.0/l10n_es_aeat_mod349
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYLocalisation/Accounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), ForgeFlow
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), ForgeFlow
COMMITTERS
COMMITTERSPedro M. Baeza, Weblate, OCA-git-bot, sergio, oca-ci, Emilio Pascual
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:40:46
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/l10n-spain:
    - l10n_es_aeat
OCA/server-ux:
    - date_range
odoo/odoo:
    - l10n_es
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - html_editor
    - uom
    - analytic
    - portal
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_iban
    - base_vat
    - account_edi_ubl_cii
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Módulo para la presentación del Modelo AEAT 349 (Declaración
Recapitulativa de Operaciones Intracomunitarias)

Basado en la Orden EHA/769/2010 por el que se aprueban los diseños
físicos y lógicos del 349.

De acuerdo con la normativa de la Hacienda Española, están obligados a
presentar el modelo 349:

> - Todos aquellos sujetos pasivos del Impuesto sobre el Valor Añadido
>   que hayan realizado las operaciones previstas en el artículo 79 del
>   Reglamento del Impuesto sobre el Valor Añadido, es decir, quienes
>   adquieran o vendan bienes a empresas situadas en países miembros de
>   la UE, sino también aquellos que presten servicios a miembros de la
>   UE y cumplan con las siguientes condiciones:
>
> > - Que conforme a las reglas de la localización aplicables a las
> >   mismas, no se entiendan prestadas en el territorio de aplicación
> >   del impuesto.
> >
> > - Que estén sometidas efectivamente a gravamen de otro Estado
> >   miembro.
> >
> > - Que su destinatario sea un empresario o profesional actuando como
> >   tal y radique en dicho Estado miembro la sede de su actividad
> >   económica, o tenga en el mismo un establecimiento permanente o, en
> >   su defecto, el lugar de su domicilio o residencia habitual, o que
> >   dicho destinatario sea una persona jurídica que no actúe como
> >   empresario o profesional pero tenga asignado un número de
> >   identificación a efectos del Impuesto suministrado por ese Estado
> >   miembro.
> >
> > - Que el sujeto pasivo sea dicho destinatario.
> >
> >   El período de declaración comprenderá, con carácter general las
> >   operaciones realizadas en cada mes natural, y se presentará
> >   durante los veinte primeros días naturales del mes inmediato
> >   siguiente al correspondiente período mensual. No obstante, la
> >   presentación podrá ser bimestral, trimestral o anual en los
> >   siguientes supuestos:
>
> - Bimestral: Si al final del segundo mes de un trimestre natural el
>   importe total de las entregas de bienes y prestaciones de servicios
>   que deban consignarse en la declaración recapitulativa supera
>   100.000 euros (a partir de 2012, el umbral se fija en 50.000 euros).
> - Trimestral: Cuando ni durante el trimestre de referencia ni en cada
>   uno de los cuatro trimestres naturales anteriores el importe total
>   de las entregas de bienes y prestaciones de servicios que deban
>   consignarse en la declaración recapitulativa sea superior a 100.000
>   euros.
> - Anual: En los treinta primeros días de enero del año siguiente ( la
>   primera sería en enero de 2011) si el importe total de las entregas
>   de bienes o prestaciones de servicios del año ( excluido IVA), no
>   supera los 35.000 € y el importe total de las entregas de bienes a
>   otro Estado Miembro (salvo medios de transporte nuevos) exentas de
>   IVA no sea superior a 15.000 €.

Code Analysis

Views touched (21)
XML IDNameModelTypeStatus
l10n_es_aeat_349_map_lines_view_tree aeat.349.map.lines.view.list aeat.349.map.line list New
l10n_es_aeat_mod349.mod349_partner_record l10n_es_aeat_mod349.mod349_partner_record ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_partner_record_head l10n_es_aeat_mod349.mod349_partner_record_head ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_partner_refund_head l10n_es_aeat_mod349.mod349_partner_refund_head ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_refund_record l10n_es_aeat_mod349.mod349_refund_record ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_summary l10n_es_aeat_mod349.mod349_summary ir.ui.view qweb New
l10n_es_aeat_mod349.report_aeat_mod349_document l10n_es_aeat_mod349.report_aeat_mod349_document ir.ui.view qweb New
report_l10n_es_mod349_pdf report_l10n_es_mod349_pdf ir.ui.view qweb New
view_account_tax_add_mod349_form Tax | add 'aeat_349_operation_key' field (form) account.tax field Inherits account.view_tax_form
view_l10n_ES_aeat_mod349_partner_record_detail_form AEAT 349 Partner record detail (form) l10n.es.aeat.mod349.partner_record_detail form New
view_l10n_ES_aeat_mod349_partner_record_detail_tree AEAT 349 Partner record detail (list) l10n.es.aeat.mod349.partner_record_detail list New
view_l10n_ES_aeat_mod349_partner_record_form AEAT 349 Partner record (form) l10n.es.aeat.mod349.partner_record form New
view_l10n_ES_aeat_mod349_partner_record_tree AEAT 349 Partner record (list) l10n.es.aeat.mod349.partner_record list New
view_l10n_ES_aeat_mod349_partner_refund_detail_form AEAT 349 Partner refund detail (form) l10n.es.aeat.mod349.partner_refund_detail form New
view_l10n_ES_aeat_mod349_partner_refund_detail_tree AEAT 349 Partner refund detail (list) l10n.es.aeat.mod349.partner_refund_detail list New
view_l10n_ES_aeat_mod349_partner_refund_form AEAT 349 Partner refund (form) l10n.es.aeat.mod349.partner_refund form New
view_l10n_ES_aeat_mod349_partner_refund_tree AEAT 349 Partner refund (list) l10n.es.aeat.mod349.partner_refund list New
view_l10n_es_aeat_mod349_report_form l10n_es.aeat.mod349.report.form l10n.es.aeat.mod349.report group Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod349_report_tree l10n_es.aeat.mod349.report.list l10n.es.aeat.mod349.report list Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_move_form account.move field Inherits account.view_move_form
view_move_line_form account.move.line field Inherits account.view_move_line_form
Models touched (9)

New fields (1)
  • eu_triangular_deal Boolean
    help='This invoice constitutes a triangular operation for the purposes of intra-community operations.' readonly=True string='EU Triangular deal'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    compute='_compute_l10n_es_aeat_349_operation_key' compute_sudo=True search='_search_l10n_es_aeat_349_operation_key' selection=[('A', 'A - Intra-Community acquisition'), ('E', 'E - Intra-Community supplies'), ('I', 'I - Intra-Community services acquisitions'), ('S', 'S - Intra-Community services'), ('T', 'T - Triangular operations')] string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    compute='_compute_l10n_es_aeat_349_operation_key' compute_sudo=True search='_search_l10n_es_aeat_349_operation_key' selection=_selection_operation_key string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (3)
  • operation_key Selection
    required=True selection=_selection_operation_key
  • physical_product Boolean
    string='Involves physical product'
  • tax_xmlid_ids Many2many → l10n.es.aeat.map.tax.line.tax
    comodel_name='l10n.es.aeat.map.tax.line.tax' string='Taxes templates'
Public methods (0)

No public methods.

New fields (9)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • error_text Char
    compute='_compute_partner_record_ok' store=True
  • operation_key Selection
    selection=_selection_operation_key
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_record_ok Boolean
    compute='_compute_partner_record_ok' help='Checked if partner record is OK' store=True string='Partner Record OK'
  • partner_vat Char
    index=True size=15 string='VAT'
  • record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='partner_record_id' string='Partner record detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    compute='_compute_total_operation_amount' store=True
Public methods (0)

No public methods.

New fields (8)
  • amount_untaxed Float
  • date Date
    readonly=True related='move_line_id.move_id.invoice_date'
  • move_id Many2one → account.move
    comodel_name='account.move' readonly=True related='move_line_id.move_id' string='Invoice'
  • move_line_id Many2one → account.move.line
    comodel_name='account.move.line' required=True string='Journal Item'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='partner_record_id.partner_id' string='Partner'
  • partner_record_id Many2one → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' default=<expr> index=True ondelete='set null' string='Partner record'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' required=True string='AEAT 349 Report ID'
  • report_type Selection
    readonly=True related='report_id.statement_type' store=True
Public methods (0)

No public methods.

New fields (11)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • operation_key Selection
    selection=_selection_operation_key
  • partner_id Many2one → res.partner
    comodel_name='res.partner' index=True required=True string='Partner'
  • partner_refund_ok Boolean
    compute='_compute_partner_refund_ok' help='Checked if refund record is OK' string='Partner refund OK'
  • partner_vat Char
    size=15 string='VAT'
  • period_type Selection
    selection='get_period_type_selection'
  • refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='refund_id' string='Partner refund detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    compute='_compute_total_operation_amount' store=True string='Total rectified amount'
  • total_origin_amount Float
    help='Refund original amount' string='Original amount'
  • year Integer
Public methods (1)
  • get_period_type_selection(self)

New fields (8)
  • amount_untaxed Float
  • date Date
    readonly=True related='refund_line_id.date' store=True
  • move_id Many2one → account.move
    comodel_name='account.move' readonly=True related='refund_line_id.move_id' string='Invoice'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='refund_id.partner_id' string='Partner'
  • refund_id Many2one → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' ondelete='set null' string='Partner refund ID'
  • refund_line_id Many2one → account.move.line
    comodel_name='account.move.line' required=True string='Journal Item'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' required=True string='AEAT 349 Report ID'
  • report_type Selection
    readonly=True related='report_id.statement_type' store=True
Public methods (0)

No public methods.

New fields (10)
  • frequency_change Boolean
  • number Char
    default='349'
  • partner_record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='report_id' string='Partner record details'
  • partner_record_ids One2many → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' inverse_name='report_id' readonly=True string='Partner records'
  • partner_refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='report_id' string='Partner refund details'
  • partner_refund_ids One2many → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' inverse_name='report_id' readonly=True string='Partner refund IDS'
  • total_partner_records Integer
    compute='_compute_report_regular_totals' store=True string='Partners records'
  • total_partner_records_amount Float
    compute='_compute_report_regular_totals' store=True string='Partners records amount'
  • total_partner_refunds Integer
    compute='_compute_report_refund_totals' store=True string='Partners refunds'
  • total_partner_refunds_amount Float
    compute='_compute_report_refund_totals' store=True string='Partners refunds amount'
Public methods (3)
  • button_confirm(self)
    Checks if all the fields of the report are correctly filled
  • button_recover(self)
    Clean children records in this state for allowing things like cancelling an invoice that is inside this report.
  • calculate(self)
    Computes the records in report.
REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/18.0/l10n_es_aeat_mod349
VERSION
VERSION 1.1.0
CATEGORY
CATEGORYLocalisation/Accounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), ForgeFlow
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), ForgeFlow
COMMITTERS
COMMITTERSPedro M. Baeza, Weblate, OCA-git-bot, oca-ci, jorgeluislrpc
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:05
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/l10n-spain:
    - l10n_es_aeat
OCA/server-ux:
    - date_range
odoo/odoo:
    - l10n_es
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - html_editor
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Módulo para la presentación del Modelo AEAT 349 (Declaración
Recapitulativa de Operaciones Intracomunitarias)

Basado en la Orden EHA/769/2010 por el que se aprueban los diseños
físicos y lógicos del 349.

De acuerdo con la normativa de la Hacienda Española, están obligados a
presentar el modelo 349:

> - Todos aquellos sujetos pasivos del Impuesto sobre el Valor Añadido
>   que hayan realizado las operaciones previstas en el artículo 79 del
>   Reglamento del Impuesto sobre el Valor Añadido, es decir, quienes
>   adquieran o vendan bienes a empresas situadas en países miembros de
>   la UE, sino también aquellos que presten servicios a miembros de la
>   UE y cumplan con las siguientes condiciones:
>
> > - Que conforme a las reglas de la localización aplicables a las
> >   mismas, no se entiendan prestadas en el territorio de aplicación
> >   del impuesto.
> >
> > - Que estén sometidas efectivamente a gravamen de otro Estado
> >   miembro.
> >
> > - Que su destinatario sea un empresario o profesional actuando como
> >   tal y radique en dicho Estado miembro la sede de su actividad
> >   económica, o tenga en el mismo un establecimiento permanente o, en
> >   su defecto, el lugar de su domicilio o residencia habitual, o que
> >   dicho destinatario sea una persona jurídica que no actúe como
> >   empresario o profesional pero tenga asignado un número de
> >   identificación a efectos del Impuesto suministrado por ese Estado
> >   miembro.
> >
> > - Que el sujeto pasivo sea dicho destinatario.
> >
> >   El período de declaración comprenderá, con carácter general las
> >   operaciones realizadas en cada mes natural, y se presentará
> >   durante los veinte primeros días naturales del mes inmediato
> >   siguiente al correspondiente período mensual. No obstante, la
> >   presentación podrá ser bimestral, trimestral o anual en los
> >   siguientes supuestos:
>
> - Bimestral: Si al final del segundo mes de un trimestre natural el
>   importe total de las entregas de bienes y prestaciones de servicios
>   que deban consignarse en la declaración recapitulativa supera
>   100.000 euros (a partir de 2012, el umbral se fija en 50.000 euros).
> - Trimestral: Cuando ni durante el trimestre de referencia ni en cada
>   uno de los cuatro trimestres naturales anteriores el importe total
>   de las entregas de bienes y prestaciones de servicios que deban
>   consignarse en la declaración recapitulativa sea superior a 100.000
>   euros.
> - Anual: En los treinta primeros días de enero del año siguiente ( la
>   primera sería en enero de 2011) si el importe total de las entregas
>   de bienes o prestaciones de servicios del año ( excluido IVA), no
>   supera los 35.000 € y el importe total de las entregas de bienes a
>   otro Estado Miembro (salvo medios de transporte nuevos) exentas de
>   IVA no sea superior a 15.000 €.

Code Analysis

Views touched (21)
XML IDNameModelTypeStatus
l10n_es_aeat_349_map_lines_view_tree aeat.349.map.lines.view.list aeat.349.map.line list New
l10n_es_aeat_mod349.mod349_partner_record l10n_es_aeat_mod349.mod349_partner_record ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_partner_record_head l10n_es_aeat_mod349.mod349_partner_record_head ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_partner_refund_head l10n_es_aeat_mod349.mod349_partner_refund_head ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_refund_record l10n_es_aeat_mod349.mod349_refund_record ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_summary l10n_es_aeat_mod349.mod349_summary ir.ui.view qweb New
l10n_es_aeat_mod349.report_aeat_mod349_document l10n_es_aeat_mod349.report_aeat_mod349_document ir.ui.view qweb New
report_l10n_es_mod349_pdf report_l10n_es_mod349_pdf ir.ui.view qweb New
view_account_tax_add_mod349_form Tax | add 'aeat_349_operation_key' field (form) account.tax field Inherits account.view_tax_form
view_l10n_ES_aeat_mod349_partner_record_detail_form AEAT 349 Partner record detail (form) l10n.es.aeat.mod349.partner_record_detail form New
view_l10n_ES_aeat_mod349_partner_record_detail_tree AEAT 349 Partner record detail (list) l10n.es.aeat.mod349.partner_record_detail list New
view_l10n_ES_aeat_mod349_partner_record_form AEAT 349 Partner record (form) l10n.es.aeat.mod349.partner_record form New
view_l10n_ES_aeat_mod349_partner_record_tree AEAT 349 Partner record (list) l10n.es.aeat.mod349.partner_record list New
view_l10n_ES_aeat_mod349_partner_refund_detail_form AEAT 349 Partner refund detail (form) l10n.es.aeat.mod349.partner_refund_detail form New
view_l10n_ES_aeat_mod349_partner_refund_detail_tree AEAT 349 Partner refund detail (list) l10n.es.aeat.mod349.partner_refund_detail list New
view_l10n_ES_aeat_mod349_partner_refund_form AEAT 349 Partner refund (form) l10n.es.aeat.mod349.partner_refund form New
view_l10n_ES_aeat_mod349_partner_refund_tree AEAT 349 Partner refund (list) l10n.es.aeat.mod349.partner_refund list New
view_l10n_es_aeat_mod349_report_form l10n_es.aeat.mod349.report.form l10n.es.aeat.mod349.report group Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod349_report_tree l10n_es.aeat.mod349.report.list l10n.es.aeat.mod349.report list Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_move_form account.move field Inherits account.view_move_form
view_move_line_form account.move.line field Inherits account.view_move_line_form
Models touched (9)

New fields (1)
  • eu_triangular_deal Boolean
    help='This invoice constitutes a triangular operation for the purposes of intra-community operations.' readonly=True string='EU Triangular deal'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    compute='_compute_l10n_es_aeat_349_operation_key' compute_sudo=True search='_search_l10n_es_aeat_349_operation_key' selection=[('A', 'A - Intra-Community acquisition'), ('E', 'E - Intra-Community supplies'), ('I', 'I - Intra-Community services acquisitions'), ('S', 'S - Intra-Community services'), ('T', 'T - Triangular operations')] string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    compute='_compute_l10n_es_aeat_349_operation_key' compute_sudo=True search='_search_l10n_es_aeat_349_operation_key' selection=_selection_operation_key string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (3)
  • operation_key Selection
    required=True selection=_selection_operation_key
  • physical_product Boolean
    string='Involves physical product'
  • tax_xmlid_ids Many2many → l10n.es.aeat.map.tax.line.tax
    comodel_name='l10n.es.aeat.map.tax.line.tax' string='Taxes templates'
Public methods (0)

No public methods.

New fields (9)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • error_text Char
    compute='_compute_partner_record_ok' store=True
  • operation_key Selection
    selection=_selection_operation_key
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_record_ok Boolean
    compute='_compute_partner_record_ok' help='Checked if partner record is OK' store=True string='Partner Record OK'
  • partner_vat Char
    index=True size=15 string='VAT'
  • record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='partner_record_id' string='Partner record detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    compute='_compute_total_operation_amount' store=True
Public methods (0)

No public methods.

New fields (8)
  • amount_untaxed Float
  • date Date
    readonly=True related='move_line_id.move_id.invoice_date'
  • move_id Many2one → account.move
    comodel_name='account.move' readonly=True related='move_line_id.move_id' string='Invoice'
  • move_line_id Many2one → account.move.line
    comodel_name='account.move.line' required=True string='Journal Item'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='partner_record_id.partner_id' string='Partner'
  • partner_record_id Many2one → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' default=<expr> index=True ondelete='set null' string='Partner record'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' required=True string='AEAT 349 Report ID'
  • report_type Selection
    readonly=True related='report_id.statement_type' store=True
Public methods (0)

No public methods.

New fields (11)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • operation_key Selection
    selection=_selection_operation_key
  • partner_id Many2one → res.partner
    comodel_name='res.partner' index=True required=True string='Partner'
  • partner_refund_ok Boolean
    compute='_compute_partner_refund_ok' help='Checked if refund record is OK' string='Partner refund OK'
  • partner_vat Char
    size=15 string='VAT'
  • period_type Selection
    selection='get_period_type_selection'
  • refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='refund_id' string='Partner refund detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    compute='_compute_total_operation_amount' store=True string='Total rectified amount'
  • total_origin_amount Float
    help='Refund original amount' string='Original amount'
  • year Integer
Public methods (1)
  • get_period_type_selection(self)

New fields (8)
  • amount_untaxed Float
  • date Date
    readonly=True related='refund_line_id.date' store=True
  • move_id Many2one → account.move
    comodel_name='account.move' readonly=True related='refund_line_id.move_id' string='Invoice'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='refund_id.partner_id' string='Partner'
  • refund_id Many2one → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' ondelete='set null' string='Partner refund ID'
  • refund_line_id Many2one → account.move.line
    comodel_name='account.move.line' required=True string='Journal Item'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' required=True string='AEAT 349 Report ID'
  • report_type Selection
    readonly=True related='report_id.statement_type' store=True
Public methods (0)

No public methods.

New fields (10)
  • frequency_change Boolean
  • number Char
    default='349'
  • partner_record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='report_id' string='Partner record details'
  • partner_record_ids One2many → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' inverse_name='report_id' readonly=True string='Partner records'
  • partner_refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='report_id' string='Partner refund details'
  • partner_refund_ids One2many → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' inverse_name='report_id' readonly=True string='Partner refund IDS'
  • total_partner_records Integer
    compute='_compute_report_regular_totals' store=True string='Partners records'
  • total_partner_records_amount Float
    compute='_compute_report_regular_totals' store=True string='Partners records amount'
  • total_partner_refunds Integer
    compute='_compute_report_refund_totals' store=True string='Partners refunds'
  • total_partner_refunds_amount Float
    compute='_compute_report_refund_totals' store=True string='Partners refunds amount'
Public methods (3)
  • button_confirm(self)
    Checks if all the fields of the report are correctly filled
  • button_recover(self)
    Clean children records in this state for allowing things like cancelling an invoice that is inside this report.
  • calculate(self)
    Computes the records in report.
REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/17.0/l10n_es_aeat_mod349
VERSION
VERSION 1.2.1
CATEGORY
CATEGORYLocalisation/Accounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), ForgeFlow
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), ForgeFlow
COMMITTERS
COMMITTERSPedro M. Baeza, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, Ignacio, jorgeluislrpc
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:19:59
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/l10n-spain:
    - l10n_es_aeat
OCA/server-ux:
    - date_range
odoo/odoo:
    - l10n_es
    - account
    - base_setup
    - base
    - web
    - onboarding
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Módulo para la presentación del Modelo AEAT 349 (Declaración
Recapitulativa de Operaciones Intracomunitarias)

Basado en la Orden EHA/769/2010 por el que se aprueban los diseños
físicos y lógicos del 349.

De acuerdo con la normativa de la Hacienda Española, están obligados a
presentar el modelo 349:

> - Todos aquellos sujetos pasivos del Impuesto sobre el Valor Añadido
>   que hayan realizado las operaciones previstas en el artículo 79 del
>   Reglamento del Impuesto sobre el Valor Añadido, es decir, quienes
>   adquieran o vendan bienes a empresas situadas en países miembros de
>   la UE, sino también aquellos que presten servicios a miembros de la
>   UE y cumplan con las siguientes condiciones:
>
> > - Que conforme a las reglas de la localización aplicables a las
> >   mismas, no se entiendan prestadas en el territorio de aplicación
> >   del impuesto.
> >
> > - Que estén sometidas efectivamente a gravamen de otro Estado
> >   miembro.
> >
> > - Que su destinatario sea un empresario o profesional actuando como
> >   tal y radique en dicho Estado miembro la sede de su actividad
> >   económica, o tenga en el mismo un establecimiento permanente o, en
> >   su defecto, el lugar de su domicilio o residencia habitual, o que
> >   dicho destinatario sea una persona jurídica que no actúe como
> >   empresario o profesional pero tenga asignado un número de
> >   identificación a efectos del Impuesto suministrado por ese Estado
> >   miembro.
> >
> > - Que el sujeto pasivo sea dicho destinatario.
> >
> >   El período de declaración comprenderá, con carácter general las
> >   operaciones realizadas en cada mes natural, y se presentará
> >   durante los veinte primeros días naturales del mes inmediato
> >   siguiente al correspondiente período mensual. No obstante, la
> >   presentación podrá ser bimestral, trimestral o anual en los
> >   siguientes supuestos:
>
> - Bimestral: Si al final del segundo mes de un trimestre natural el
>   importe total de las entregas de bienes y prestaciones de servicios
>   que deban consignarse en la declaración recapitulativa supera
>   100.000 euros (a partir de 2012, el umbral se fija en 50.000 euros).
> - Trimestral: Cuando ni durante el trimestre de referencia ni en cada
>   uno de los cuatro trimestres naturales anteriores el importe total
>   de las entregas de bienes y prestaciones de servicios que deban
>   consignarse en la declaración recapitulativa sea superior a 100.000
>   euros.
> - Anual: En los treinta primeros días de enero del año siguiente ( la
>   primera sería en enero de 2011) si el importe total de las entregas
>   de bienes o prestaciones de servicios del año ( excluido IVA), no
>   supera los 35.000 € y el importe total de las entregas de bienes a
>   otro Estado Miembro (salvo medios de transporte nuevos) exentas de
>   IVA no sea superior a 15.000 €.

Code Analysis

Views touched (21)
XML IDNameModelTypeStatus
l10n_es_aeat_349_map_lines_view_tree aeat.349.map.lines.view.tree aeat.349.map.line tree New
l10n_es_aeat_mod349.mod349_partner_record l10n_es_aeat_mod349.mod349_partner_record ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_partner_record_head l10n_es_aeat_mod349.mod349_partner_record_head ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_partner_refund_head l10n_es_aeat_mod349.mod349_partner_refund_head ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_refund_record l10n_es_aeat_mod349.mod349_refund_record ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_summary l10n_es_aeat_mod349.mod349_summary ir.ui.view qweb New
l10n_es_aeat_mod349.report_aeat_mod349_document l10n_es_aeat_mod349.report_aeat_mod349_document ir.ui.view qweb New
report_l10n_es_mod349_pdf report_l10n_es_mod349_pdf ir.ui.view qweb New
view_account_tax_add_mod349_form Tax | add 'aeat_349_operation_key' field (form) account.tax field Inherits account.view_tax_form
view_l10n_ES_aeat_mod349_partner_record_detail_form AEAT 349 Partner record detail (form) l10n.es.aeat.mod349.partner_record_detail form New
view_l10n_ES_aeat_mod349_partner_record_detail_tree AEAT 349 Partner record detail (tree) l10n.es.aeat.mod349.partner_record_detail tree New
view_l10n_ES_aeat_mod349_partner_record_form AEAT 349 Partner record (form) l10n.es.aeat.mod349.partner_record form New
view_l10n_ES_aeat_mod349_partner_record_tree AEAT 349 Partner record (tree) l10n.es.aeat.mod349.partner_record tree New
view_l10n_ES_aeat_mod349_partner_refund_detail_form AEAT 349 Partner refund detail (form) l10n.es.aeat.mod349.partner_refund_detail form New
view_l10n_ES_aeat_mod349_partner_refund_detail_tree AEAT 349 Partner refund detail (tree) l10n.es.aeat.mod349.partner_refund_detail tree New
view_l10n_ES_aeat_mod349_partner_refund_form AEAT 349 Partner refund (form) l10n.es.aeat.mod349.partner_refund form New
view_l10n_ES_aeat_mod349_partner_refund_tree AEAT 349 Partner refund (tree) l10n.es.aeat.mod349.partner_refund tree New
view_l10n_es_aeat_mod349_report_form l10n_es.aeat.mod349.report.form l10n.es.aeat.mod349.report group Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod349_report_tree l10n_es.aeat.mod349.report.tree l10n.es.aeat.mod349.report tree Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_move_form account.move field Inherits account.view_move_form
view_move_line_form account.move.line field Inherits account.view_move_line_form
Models touched (9)

New fields (1)
  • eu_triangular_deal Boolean
    help='This invoice constitutes a triangular operation for the purposes of intra-community operations.' readonly=True string='EU Triangular deal'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    compute='_compute_l10n_es_aeat_349_operation_key' compute_sudo=True search='_search_l10n_es_aeat_349_operation_key' selection=[('A', 'A - Intra-Community acquisition'), ('E', 'E - Intra-Community supplies'), ('I', 'I - Intra-Community services acquisitions'), ('S', 'S - Intra-Community services'), ('T', 'T - Triangular operations')] string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    compute='_compute_l10n_es_aeat_349_operation_key' compute_sudo=True search='_search_l10n_es_aeat_349_operation_key' selection=_selection_operation_key string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (3)
  • operation_key Selection
    required=True selection=_selection_operation_key
  • physical_product Boolean
    string='Involves physical product'
  • tax_xmlid_ids Many2many → l10n.es.aeat.map.tax.line.tax
    comodel_name='l10n.es.aeat.map.tax.line.tax' string='Taxes templates'
Public methods (0)

No public methods.

New fields (9)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • error_text Char
    compute='_compute_partner_record_ok' store=True
  • operation_key Selection
    selection=_selection_operation_key
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_record_ok Boolean
    compute='_compute_partner_record_ok' help='Checked if partner record is OK' store=True string='Partner Record OK'
  • partner_vat Char
    index=True size=15 string='VAT'
  • record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='partner_record_id' string='Partner record detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    compute='_compute_total_operation_amount' store=True
Public methods (0)

No public methods.

New fields (8)
  • amount_untaxed Float
  • date Date
    readonly=True related='move_line_id.move_id.invoice_date'
  • move_id Many2one → account.move
    comodel_name='account.move' readonly=True related='move_line_id.move_id' string='Invoice'
  • move_line_id Many2one → account.move.line
    comodel_name='account.move.line' required=True string='Journal Item'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='partner_record_id.partner_id' string='Partner'
  • partner_record_id Many2one → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' default=<expr> index=True ondelete='set null' string='Partner record'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' required=True string='AEAT 349 Report ID'
  • report_type Selection
    readonly=True related='report_id.statement_type' store=True
Public methods (0)

No public methods.

New fields (11)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • operation_key Selection
    selection=_selection_operation_key
  • partner_id Many2one → res.partner
    comodel_name='res.partner' index=True required=True string='Partner'
  • partner_refund_ok Boolean
    compute='_compute_partner_refund_ok' help='Checked if refund record is OK' string='Partner refund OK'
  • partner_vat Char
    size=15 string='VAT'
  • period_type Selection
    selection='get_period_type_selection'
  • refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='refund_id' string='Partner refund detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    compute='_compute_total_operation_amount' store=True string='Total rectified amount'
  • total_origin_amount Float
    help='Refund original amount' string='Original amount'
  • year Integer
Public methods (1)
  • get_period_type_selection(self)

New fields (8)
  • amount_untaxed Float
  • date Date
    readonly=True related='refund_line_id.date' store=True
  • move_id Many2one → account.move
    comodel_name='account.move' readonly=True related='refund_line_id.move_id' string='Invoice'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='refund_id.partner_id' string='Partner'
  • refund_id Many2one → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' ondelete='set null' string='Partner refund ID'
  • refund_line_id Many2one → account.move.line
    comodel_name='account.move.line' required=True string='Journal Item'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' required=True string='AEAT 349 Report ID'
  • report_type Selection
    readonly=True related='report_id.statement_type' store=True
Public methods (0)

No public methods.

New fields (10)
  • frequency_change Boolean
  • number Char
    default='349'
  • partner_record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='report_id' string='Partner record details'
  • partner_record_ids One2many → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' inverse_name='report_id' readonly=True string='Partner records'
  • partner_refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='report_id' string='Partner refund details'
  • partner_refund_ids One2many → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' inverse_name='report_id' readonly=True string='Partner refund IDS'
  • total_partner_records Integer
    compute='_compute_report_regular_totals' store=True string='Partners records'
  • total_partner_records_amount Float
    compute='_compute_report_regular_totals' store=True string='Partners records amount'
  • total_partner_refunds Integer
    compute='_compute_report_refund_totals' store=True string='Partners refunds'
  • total_partner_refunds_amount Float
    compute='_compute_report_refund_totals' store=True string='Partners refunds amount'
Public methods (3)
  • button_confirm(self)
    Checks if all the fields of the report are correctly filled
  • button_recover(self)
    Clean children records in this state for allowing things like cancelling an invoice that is inside this report.
  • calculate(self)
    Computes the records in report.
REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/16.0/l10n_es_aeat_mod349
VERSION
VERSION 1.4.3
CATEGORY
CATEGORYLocalisation/Accounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), ForgeFlow
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), ForgeFlow
COMMITTERS
COMMITTERSPedro M. Baeza, Jairo Llopis, cubells, Weblate, OCA-git-bot, Luis J. Salvatierra, oca-ci, Alejandro Ji Cheung, FernandoRomera, Segui-S73
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:40
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/l10n-spain:
    - l10n_es_aeat
OCA/server-ux:
    - date_range
odoo/odoo:
    - l10n_es
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (21)
XML IDNameModelTypeStatus
l10n_es_aeat_349_map_lines_view_tree aeat.349.map.lines.view.tree aeat.349.map.line tree New
l10n_es_aeat_mod349.mod349_partner_record l10n_es_aeat_mod349.mod349_partner_record ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_partner_record_head l10n_es_aeat_mod349.mod349_partner_record_head ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_partner_refund_head l10n_es_aeat_mod349.mod349_partner_refund_head ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_refund_record l10n_es_aeat_mod349.mod349_refund_record ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_summary l10n_es_aeat_mod349.mod349_summary ir.ui.view qweb New
l10n_es_aeat_mod349.report_aeat_mod349_document l10n_es_aeat_mod349.report_aeat_mod349_document ir.ui.view qweb New
report_l10n_es_mod349_pdf report_l10n_es_mod349_pdf ir.ui.view qweb New
view_account_tax_add_mod349_form Tax | add 'aeat_349_operation_key' field (form) account.tax field Inherits account.view_tax_form
view_l10n_ES_aeat_mod349_partner_record_detail_form AEAT 349 Partner record detail (form) l10n.es.aeat.mod349.partner_record_detail form New
view_l10n_ES_aeat_mod349_partner_record_detail_tree AEAT 349 Partner record detail (tree) l10n.es.aeat.mod349.partner_record_detail tree New
view_l10n_ES_aeat_mod349_partner_record_form AEAT 349 Partner record (form) l10n.es.aeat.mod349.partner_record form New
view_l10n_ES_aeat_mod349_partner_record_tree AEAT 349 Partner record (tree) l10n.es.aeat.mod349.partner_record tree New
view_l10n_ES_aeat_mod349_partner_refund_detail_form AEAT 349 Partner refund detail (form) l10n.es.aeat.mod349.partner_refund_detail form New
view_l10n_ES_aeat_mod349_partner_refund_detail_tree AEAT 349 Partner refund detail (tree) l10n.es.aeat.mod349.partner_refund_detail tree New
view_l10n_ES_aeat_mod349_partner_refund_form AEAT 349 Partner refund (form) l10n.es.aeat.mod349.partner_refund form New
view_l10n_ES_aeat_mod349_partner_refund_tree AEAT 349 Partner refund (tree) l10n.es.aeat.mod349.partner_refund tree New
view_l10n_es_aeat_mod349_report_form l10n_es.aeat.mod349.report.form l10n.es.aeat.mod349.report group Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod349_report_tree l10n_es.aeat.mod349.report.tree l10n.es.aeat.mod349.report tree Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_move_form account.move field Inherits account.view_move_form
view_move_line_form account.move.line field Inherits account.view_move_line_form
Models touched (10)

New fields (1)
  • eu_triangular_deal Boolean
    help='This invoice constitutes a triangular operation for the purposes of intra-community operations.' readonly=True states={'draft': [('readonly', False)]} string='EU Triangular deal'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    compute='_compute_l10n_es_aeat_349_operation_key' selection=[('A', 'A - Intra-Community acquisition'), ('E', 'E - Intra-Community supplies'), ('I', 'I - Intra-Community services acquisitions'), ('S', 'S - Intra-Community services'), ('T', 'T - Triangular operations')] string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    compute='_compute_l10n_es_aeat_349_operation_key' selection=_selection_operation_key string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (1)
  • aeat_349_map_line Many2one → aeat.349.map.line
    comodel_name='aeat.349.map.line' string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (3)
  • operation_key Selection
    required=True selection=_selection_operation_key
  • physical_product Boolean
    string='Involves physical product'
  • tax_tmpl_ids One2many → account.tax.template
    comodel_name='account.tax.template' inverse_name='aeat_349_map_line' string='Taxes'
Public methods (0)

No public methods.

New fields (9)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • error_text Char
    compute='_compute_partner_record_ok' store=True
  • operation_key Selection
    selection=_selection_operation_key
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_record_ok Boolean
    compute='_compute_partner_record_ok' help='Checked if partner record is OK' store=True string='Partner Record OK'
  • partner_vat Char
    index=True size=15 string='VAT'
  • record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='partner_record_id' string='Partner record detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    compute='_compute_total_operation_amount' store=True
Public methods (0)

No public methods.

New fields (8)
  • amount_untaxed Float
  • date Date
    readonly=True related='move_line_id.move_id.invoice_date'
  • move_id Many2one → account.move
    comodel_name='account.move' readonly=True related='move_line_id.move_id' string='Invoice'
  • move_line_id Many2one → account.move.line
    comodel_name='account.move.line' required=True string='Journal Item'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='partner_record_id.partner_id' string='Partner'
  • partner_record_id Many2one → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' default=<expr> index=True ondelete='set null' string='Partner record'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' required=True string='AEAT 349 Report ID'
  • report_type Selection
    readonly=True related='report_id.statement_type' store=True
Public methods (0)

No public methods.

New fields (11)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • operation_key Selection
    selection=_selection_operation_key
  • partner_id Many2one → res.partner
    comodel_name='res.partner' index=True required=True string='Partner'
  • partner_refund_ok Boolean
    compute='_compute_partner_refund_ok' help='Checked if refund record is OK' string='Partner refund OK'
  • partner_vat Char
    size=15 string='VAT'
  • period_type Selection
    selection='get_period_type_selection'
  • refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='refund_id' string='Partner refund detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    compute='_compute_total_operation_amount' store=True string='Total rectified amount'
  • total_origin_amount Float
    help='Refund original amount' string='Original amount'
  • year Integer
Public methods (1)
  • get_period_type_selection(self)

New fields (8)
  • amount_untaxed Float
  • date Date
    readonly=True related='refund_line_id.date' store=True
  • move_id Many2one → account.move
    comodel_name='account.move' readonly=True related='refund_line_id.move_id' string='Invoice'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='refund_id.partner_id' string='Partner'
  • refund_id Many2one → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' ondelete='set null' string='Partner refund ID'
  • refund_line_id Many2one → account.move.line
    comodel_name='account.move.line' required=True string='Journal Item'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' required=True string='AEAT 349 Report ID'
  • report_type Selection
    readonly=True related='report_id.statement_type' store=True
Public methods (0)

No public methods.

New fields (10)
  • frequency_change Boolean
    states={'confirmed': [('readonly', True)]}
  • number Char
    default='349'
  • partner_record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='report_id' states={'confirmed': [('readonly', True)]} string='Partner record details'
  • partner_record_ids One2many → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' inverse_name='report_id' readonly=True string='Partner records'
  • partner_refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='report_id' states={'confirmed': [('readonly', True)]} string='Partner refund details'
  • partner_refund_ids One2many → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' inverse_name='report_id' readonly=True string='Partner refund IDS'
  • total_partner_records Integer
    compute='_compute_report_regular_totals' store=True string='Partners records'
  • total_partner_records_amount Float
    compute='_compute_report_regular_totals' store=True string='Partners records amount'
  • total_partner_refunds Integer
    compute='_compute_report_refund_totals' store=True string='Partners refunds'
  • total_partner_refunds_amount Float
    compute='_compute_report_refund_totals' store=True string='Partners refunds amount'
Public methods (3)
  • button_confirm(self)
    Checks if all the fields of the report are correctly filled
  • button_recover(self)
    Clean children records in this state for allowing things like cancelling an invoice that is inside this report.
  • calculate(self)
    Computes the records in report.
REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/15.0/l10n_es_aeat_mod349
VERSION
VERSION 1.5.3
CATEGORY
CATEGORYLocalisation/Accounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), ForgeFlow
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), ForgeFlow
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, Jairo Llopis, manu, OCA Transbot, Miquel Raïch, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, Valentin Vinagre Urteaga, LauraCForgeFlow
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:29
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/l10n-spain:
    - l10n_es_aeat
OCA/server-ux:
    - date_range
odoo/odoo:
    - l10n_es
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES cryptography
unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (21)
XML IDNameModelTypeStatus
l10n_es_aeat_349_map_lines_view_tree aeat.349.map.lines.view.tree aeat.349.map.line tree New
l10n_es_aeat_mod349.mod349_partner_record l10n_es_aeat_mod349.mod349_partner_record ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_partner_record_head l10n_es_aeat_mod349.mod349_partner_record_head ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_partner_refund_head l10n_es_aeat_mod349.mod349_partner_refund_head ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_refund_record l10n_es_aeat_mod349.mod349_refund_record ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_summary l10n_es_aeat_mod349.mod349_summary ir.ui.view qweb New
l10n_es_aeat_mod349.report_aeat_mod349_document l10n_es_aeat_mod349.report_aeat_mod349_document ir.ui.view qweb New
report_l10n_es_mod349_pdf report_l10n_es_mod349_pdf ir.ui.view qweb New
view_account_tax_add_mod349_form Tax | add 'aeat_349_operation_key' field (form) account.tax field Inherits account.view_tax_form
view_l10n_ES_aeat_mod349_partner_record_detail_form AEAT 349 Partner record detail (form) l10n.es.aeat.mod349.partner_record_detail form New
view_l10n_ES_aeat_mod349_partner_record_detail_tree AEAT 349 Partner record detail (tree) l10n.es.aeat.mod349.partner_record_detail tree New
view_l10n_ES_aeat_mod349_partner_record_form AEAT 349 Partner record (form) l10n.es.aeat.mod349.partner_record form New
view_l10n_ES_aeat_mod349_partner_record_tree AEAT 349 Partner record (tree) l10n.es.aeat.mod349.partner_record tree New
view_l10n_ES_aeat_mod349_partner_refund_detail_form AEAT 349 Partner refund detail (form) l10n.es.aeat.mod349.partner_refund_detail form New
view_l10n_ES_aeat_mod349_partner_refund_detail_tree AEAT 349 Partner refund detail (tree) l10n.es.aeat.mod349.partner_refund_detail tree New
view_l10n_ES_aeat_mod349_partner_refund_form AEAT 349 Partner refund (form) l10n.es.aeat.mod349.partner_refund form New
view_l10n_ES_aeat_mod349_partner_refund_tree AEAT 349 Partner refund (tree) l10n.es.aeat.mod349.partner_refund tree New
view_l10n_es_aeat_mod349_report_form l10n_es.aeat.mod349.report.form l10n.es.aeat.mod349.report group Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod349_report_tree l10n_es.aeat.mod349.report.tree l10n.es.aeat.mod349.report tree Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_move_form account.move field Inherits account.view_move_form
view_move_line_form account.move.line field Inherits account.view_move_line_form
Models touched (10)

New fields (1)
  • eu_triangular_deal Boolean
    help='This invoice constitutes a triangular operation for the purposes of intra-community operations.' readonly=True states={'draft': [('readonly', False)]} string='EU Triangular deal'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    compute='_compute_l10n_es_aeat_349_operation_key' selection=[('A', 'A - Intra-Community acquisition'), ('E', 'E - Intra-Community supplies'), ('I', 'I - Intra-Community services acquisitions'), ('S', 'S - Intra-Community services'), ('T', 'T - Triangular operations')] string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    compute='_compute_l10n_es_aeat_349_operation_key' selection=_selection_operation_key string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (1)
  • aeat_349_map_line Many2one → aeat.349.map.line
    comodel_name='aeat.349.map.line' string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (3)
  • operation_key Selection
    required=True selection=_selection_operation_key
  • physical_product Boolean
    string='Involves physical product'
  • tax_tmpl_ids One2many → account.tax.template
    comodel_name='account.tax.template' inverse_name='aeat_349_map_line' string='Taxes'
Public methods (0)

No public methods.

New fields (9)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • error_text Char
    compute='_compute_partner_record_ok' store=True
  • operation_key Selection
    selection=_selection_operation_key
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_record_ok Boolean
    compute='_compute_partner_record_ok' help='Checked if partner record is OK' store=True string='Partner Record OK'
  • partner_vat Char
    index=True size=15 string='VAT'
  • record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='partner_record_id' string='Partner record detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    compute='_compute_total_operation_amount' store=True
Public methods (0)

No public methods.

New fields (8)
  • amount_untaxed Float
  • date Date
    readonly=True related='move_line_id.move_id.invoice_date'
  • move_id Many2one → account.move
    comodel_name='account.move' readonly=True related='move_line_id.move_id' string='Invoice'
  • move_line_id Many2one → account.move.line
    comodel_name='account.move.line' required=True string='Journal Item'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='partner_record_id.partner_id' string='Partner'
  • partner_record_id Many2one → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' default=<expr> index=True ondelete='set null' string='Partner record'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' required=True string='AEAT 349 Report ID'
  • report_type Selection
    readonly=True related='report_id.statement_type' store=True
Public methods (0)

No public methods.

New fields (11)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • operation_key Selection
    selection=_selection_operation_key
  • partner_id Many2one → res.partner
    comodel_name='res.partner' index=True required=True string='Partner'
  • partner_refund_ok Boolean
    compute='_compute_partner_refund_ok' help='Checked if refund record is OK' string='Partner refund OK'
  • partner_vat Char
    size=15 string='VAT'
  • period_type Selection
    selection='get_period_type_selection'
  • refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='refund_id' string='Partner refund detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    compute='_compute_total_operation_amount' store=True string='Total rectified amount'
  • total_origin_amount Float
    help='Refund original amount' string='Original amount'
  • year Integer
Public methods (1)
  • get_period_type_selection(self)

New fields (8)
  • amount_untaxed Float
  • date Date
    readonly=True related='refund_line_id.date' store=True
  • move_id Many2one → account.move
    comodel_name='account.move' readonly=True related='refund_line_id.move_id' string='Invoice'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='refund_id.partner_id' string='Partner'
  • refund_id Many2one → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' ondelete='set null' string='Partner refund ID'
  • refund_line_id Many2one → account.move.line
    comodel_name='account.move.line' required=True string='Journal Item'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' required=True string='AEAT 349 Report ID'
  • report_type Selection
    readonly=True related='report_id.statement_type' store=True
Public methods (0)

No public methods.

New fields (10)
  • frequency_change Boolean
    states={'confirmed': [('readonly', True)]}
  • number Char
    default='349'
  • partner_record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='report_id' states={'confirmed': [('readonly', True)]} string='Partner record details'
  • partner_record_ids One2many → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' inverse_name='report_id' readonly=True string='Partner records'
  • partner_refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='report_id' states={'confirmed': [('readonly', True)]} string='Partner refund details'
  • partner_refund_ids One2many → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' inverse_name='report_id' readonly=True string='Partner refund IDS'
  • total_partner_records Integer
    compute='_compute_report_regular_totals' store=True string='Partners records'
  • total_partner_records_amount Float
    compute='_compute_report_regular_totals' store=True string='Partners records amount'
  • total_partner_refunds Integer
    compute='_compute_report_refund_totals' store=True string='Partners refunds'
  • total_partner_refunds_amount Float
    compute='_compute_report_refund_totals' store=True string='Partners refunds amount'
Public methods (3)
  • button_confirm(self)
    Checks if all the fields of the report are correctly filled
  • button_recover(self)
    Clean children records in this state for allowing things like cancelling an invoice that is inside this report.
  • calculate(self)
    Computes the records in report.
REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/14.0/l10n_es_aeat_mod349
VERSION
VERSION 1.4.3
CATEGORY
CATEGORYLocalisation/Accounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), ForgeFlow
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), ForgeFlow
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, manu, OCA Transbot, Miquel Raïch, Víctor Martínez, oca-travis, Weblate, OCA-git-bot, Eric Antones, oca-ci, miguels73
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:49
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/l10n-spain:
    - l10n_es_aeat
OCA/server-ux:
    - date_range
odoo/odoo:
    - l10n_es
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES cryptography<39
unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (21)
XML IDNameModelTypeStatus
l10n_es_aeat_349_map_lines_view_tree aeat.349.map.lines.view.tree aeat.349.map.line tree New
l10n_es_aeat_mod349.mod349_partner_record l10n_es_aeat_mod349.mod349_partner_record ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_partner_record_head l10n_es_aeat_mod349.mod349_partner_record_head ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_partner_refund_head l10n_es_aeat_mod349.mod349_partner_refund_head ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_refund_record l10n_es_aeat_mod349.mod349_refund_record ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_summary l10n_es_aeat_mod349.mod349_summary ir.ui.view qweb New
l10n_es_aeat_mod349.report_aeat_mod349_document l10n_es_aeat_mod349.report_aeat_mod349_document ir.ui.view qweb New
report_l10n_es_mod349_pdf report_l10n_es_mod349_pdf ir.ui.view qweb New
view_account_tax_add_mod349_form Tax | add 'aeat_349_operation_key' field (form) account.tax field Inherits account.view_tax_form
view_l10n_ES_aeat_mod349_partner_record_detail_form AEAT 349 Partner record detail (form) l10n.es.aeat.mod349.partner_record_detail form New
view_l10n_ES_aeat_mod349_partner_record_detail_tree AEAT 349 Partner record detail (tree) l10n.es.aeat.mod349.partner_record_detail tree New
view_l10n_ES_aeat_mod349_partner_record_form AEAT 349 Partner record (form) l10n.es.aeat.mod349.partner_record form New
view_l10n_ES_aeat_mod349_partner_record_tree AEAT 349 Partner record (tree) l10n.es.aeat.mod349.partner_record tree New
view_l10n_ES_aeat_mod349_partner_refund_detail_form AEAT 349 Partner refund detail (form) l10n.es.aeat.mod349.partner_refund_detail form New
view_l10n_ES_aeat_mod349_partner_refund_detail_tree AEAT 349 Partner refund detail (tree) l10n.es.aeat.mod349.partner_refund_detail tree New
view_l10n_ES_aeat_mod349_partner_refund_form AEAT 349 Partner refund (form) l10n.es.aeat.mod349.partner_refund form New
view_l10n_ES_aeat_mod349_partner_refund_tree AEAT 349 Partner refund (tree) l10n.es.aeat.mod349.partner_refund tree New
view_l10n_es_aeat_mod349_report_form l10n_es.aeat.mod349.report.form l10n.es.aeat.mod349.report group Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod349_report_tree l10n_es.aeat.mod349.report.tree l10n.es.aeat.mod349.report tree Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_move_form account.move field Inherits account.view_move_form
view_move_line_form account.move.line field Inherits account.view_move_line_form
Models touched (10)

New fields (1)
  • eu_triangular_deal Boolean
    help='This invoice constitutes a triangular operation for the purposes of intra-community operations.' readonly=True states={'draft': [('readonly', False)]} string='EU Triangular deal'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    compute='_compute_l10n_es_aeat_349_operation_key' selection=[('A', 'A - Intra-Community acquisition'), ('E', 'E - Intra-Community supplies'), ('I', 'I - Intra-Community services acquisitions'), ('S', 'S - Intra-Community services'), ('T', 'T - Triangular operations')] string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    compute='_compute_l10n_es_aeat_349_operation_key' selection=_selection_operation_key string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (1)
  • aeat_349_map_line Many2one → aeat.349.map.line
    comodel_name='aeat.349.map.line' string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (3)
  • operation_key Selection
    required=True selection=_selection_operation_key
  • physical_product Boolean
    string='Involves physical product'
  • tax_tmpl_ids One2many → account.tax.template
    comodel_name='account.tax.template' inverse_name='aeat_349_map_line' string='Taxes'
Public methods (0)

No public methods.

New fields (9)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • error_text Char
    compute='_compute_partner_record_ok' store=True string='Error text'
  • operation_key Selection
    selection=_selection_operation_key string='Operation key'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_record_ok Boolean
    compute='_compute_partner_record_ok' help='Checked if partner record is OK' store=True string='Partner Record OK'
  • partner_vat Char
    index=True size=15 string='VAT'
  • record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='partner_record_id' string='Partner record detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    compute='_compute_total_operation_amount' store=True string='Total operation amount'
Public methods (0)

No public methods.

New fields (8)
  • amount_untaxed Float
    string='Amount untaxed'
  • date Date
    readonly=True related='move_line_id.move_id.invoice_date' string='Date'
  • move_id Many2one → account.move
    comodel_name='account.move' readonly=True related='move_line_id.move_id' string='Invoice'
  • move_line_id Many2one → account.move.line
    comodel_name='account.move.line' required=True string='Journal Item'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='partner_record_id.partner_id' string='Partner'
  • partner_record_id Many2one → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' default=<expr> index=True ondelete='set null' string='Partner record'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' required=True string='AEAT 349 Report ID'
  • report_type Selection
    readonly=True related='report_id.statement_type' store=True
Public methods (0)

No public methods.

New fields (11)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • operation_key Selection
    selection=_selection_operation_key string='Operation key'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' index=True required=True string='Partner'
  • partner_refund_ok Boolean
    compute='_compute_partner_refund_ok' help='Checked if refund record is OK' string='Partner refund OK'
  • partner_vat Char
    size=15 string='VAT'
  • period_type Selection
    selection='get_period_type_selection' string='Period type'
  • refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='refund_id' string='Partner refund detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    compute='_compute_total_operation_amount' store=True string='Total rectified amount'
  • total_origin_amount Float
    help='Refund original amount' string='Original amount'
  • year Integer
Public methods (1)
  • get_period_type_selection(self)

New fields (8)
  • amount_untaxed Float
    string='Amount untaxed'
  • date Date
    readonly=True related='refund_line_id.date' store=True string='Date'
  • move_id Many2one → account.move
    comodel_name='account.move' readonly=True related='refund_line_id.move_id' string='Invoice'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='refund_id.partner_id' string='Partner'
  • refund_id Many2one → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' ondelete='set null' string='Partner refund ID'
  • refund_line_id Many2one → account.move.line
    comodel_name='account.move.line' required=True string='Journal Item'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' required=True string='AEAT 349 Report ID'
  • report_type Selection
    readonly=True related='report_id.statement_type' store=True
Public methods (0)

No public methods.

New fields (10)
  • frequency_change Boolean
    states={'confirmed': [('readonly', True)]} string='Frequency change'
  • number Char
    default='349'
  • partner_record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='report_id' states={'confirmed': [('readonly', True)]} string='Partner record details'
  • partner_record_ids One2many → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' inverse_name='report_id' readonly=True string='Partner records'
  • partner_refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='report_id' states={'confirmed': [('readonly', True)]} string='Partner refund details'
  • partner_refund_ids One2many → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' inverse_name='report_id' readonly=True string='Partner refund IDS'
  • total_partner_records Integer
    compute='_compute_report_regular_totals' store=True string='Partners records'
  • total_partner_records_amount Float
    compute='_compute_report_regular_totals' store=True string='Partners records amount'
  • total_partner_refunds Integer
    compute='_compute_report_refund_totals' store=True string='Partners refunds'
  • total_partner_refunds_amount Float
    compute='_compute_report_refund_totals' store=True string='Partners refunds amount'
Public methods (3)
  • button_confirm(self)
    Checks if all the fields of the report are correctly filled
  • button_recover(self)
    Clean children records in this state for allowing things like cancelling an invoice that is inside this report.
  • calculate(self)
    Computes the records in report.
REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/13.0/l10n_es_aeat_mod349
VERSION
VERSION 1.3.0
CATEGORY
CATEGORYLocalisation/Accounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Eficent
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Eficent
COMMITTERS
COMMITTERSPedro M. Baeza, manu, OCA Transbot, oca-travis, Weblate, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:09
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/l10n-spain:
    - l10n_es_aeat
OCA/server-ux:
    - date_range
odoo/odoo:
    - l10n_es
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
    - base_iban
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES pyOpenSSL
unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (21)
XML IDNameModelTypeStatus
l10n_es_aeat_349_map_lines_view_tree aeat.349.map.lines.view.tree aeat.349.map.line tree New
l10n_es_aeat_mod349.mod349_partner_record l10n_es_aeat_mod349.mod349_partner_record ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_partner_record_head l10n_es_aeat_mod349.mod349_partner_record_head ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_partner_refund_head l10n_es_aeat_mod349.mod349_partner_refund_head ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_refund_record l10n_es_aeat_mod349.mod349_refund_record ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_summary l10n_es_aeat_mod349.mod349_summary ir.ui.view qweb New
l10n_es_aeat_mod349.report_aeat_mod349_document l10n_es_aeat_mod349.report_aeat_mod349_document ir.ui.view qweb New
report_l10n_es_mod349_pdf report_l10n_es_mod349_pdf ir.ui.view qweb New
view_account_tax_add_mod349_form Tax | add 'aeat_349_operation_key' field (form) account.tax field Inherits account.view_tax_form
view_l10n_ES_aeat_mod349_partner_record_detail_form AEAT 349 Partner record detail (form) l10n.es.aeat.mod349.partner_record_detail form New
view_l10n_ES_aeat_mod349_partner_record_detail_tree AEAT 349 Partner record detail (tree) l10n.es.aeat.mod349.partner_record_detail tree New
view_l10n_ES_aeat_mod349_partner_record_form AEAT 349 Partner record (form) l10n.es.aeat.mod349.partner_record form New
view_l10n_ES_aeat_mod349_partner_record_tree AEAT 349 Partner record (tree) l10n.es.aeat.mod349.partner_record tree New
view_l10n_ES_aeat_mod349_partner_refund_detail_form AEAT 349 Partner refund detail (form) l10n.es.aeat.mod349.partner_refund_detail form New
view_l10n_ES_aeat_mod349_partner_refund_detail_tree AEAT 349 Partner refund detail (tree) l10n.es.aeat.mod349.partner_refund_detail tree New
view_l10n_ES_aeat_mod349_partner_refund_form AEAT 349 Partner refund (form) l10n.es.aeat.mod349.partner_refund form New
view_l10n_ES_aeat_mod349_partner_refund_tree AEAT 349 Partner refund (tree) l10n.es.aeat.mod349.partner_refund tree New
view_l10n_es_aeat_mod349_report_form l10n_es.aeat.mod349.report.form l10n.es.aeat.mod349.report group Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod349_report_tree l10n_es.aeat.mod349.report.tree l10n.es.aeat.mod349.report tree Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_move_form account.move field Inherits account.view_move_form
view_move_line_form account.move.line field Inherits account.view_move_line_form
Models touched (10)

New fields (1)
  • eu_triangular_deal Boolean
    help='This invoice constitutes a triangular operation for the purposes of intra-community operations.' readonly=True states={'draft': [('readonly', False)]} string='EU Triangular deal'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    compute='_compute_l10n_es_aeat_349_operation_key' selection=[('A', 'A - Intra-Community acquisition'), ('E', 'E - Intra-Community supplies'), ('I', 'I - Intra-Community services acquisitions'), ('S', 'S - Intra-Community services'), ('T', 'T - Triangular operations')] string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    compute='_compute_l10n_es_aeat_349_operation_key' selection=_selection_operation_key string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (1)
  • aeat_349_map_line Many2one → aeat.349.map.line
    comodel_name='aeat.349.map.line' string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (3)
  • operation_key Selection
    required=True selection=_selection_operation_key
  • physical_product Boolean
    string='Involves physical product'
  • tax_tmpl_ids One2many → account.tax.template
    comodel_name='account.tax.template' inverse_name='aeat_349_map_line' string='Taxes'
Public methods (0)

No public methods.

New fields (9)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • error_text Char
    compute='_compute_partner_record_ok' store=True string='Error text'
  • operation_key Selection
    selection=_selection_operation_key string='Operation key'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_record_ok Boolean
    compute='_compute_partner_record_ok' help='Checked if partner record is OK' store=True string='Partner Record OK'
  • partner_vat Char
    index=True size=15 string='VAT'
  • record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='partner_record_id' string='Partner record detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    compute='_compute_total_operation_amount' store=True string='Total operation amount'
Public methods (0)

No public methods.

New fields (8)
  • amount_untaxed Float
    string='Amount untaxed'
  • date Date
    readonly=True related='move_line_id.move_id.invoice_date' string='Date'
  • move_id Many2one → account.move
    comodel_name='account.move' readonly=True related='move_line_id.move_id' string='Invoice'
  • move_line_id Many2one → account.move.line
    comodel_name='account.move.line' required=True string='Journal Item'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='partner_record_id.partner_id' string='Partner'
  • partner_record_id Many2one → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' default=<expr> index=True ondelete='set null' string='Partner record'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' required=True string='AEAT 349 Report ID'
  • report_type Selection
    readonly=True related='report_id.statement_type' store=True
Public methods (0)

No public methods.

New fields (11)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • operation_key Selection
    selection=_selection_operation_key string='Operation key'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' index=True required=True string='Partner'
  • partner_refund_ok Boolean
    compute='_compute_partner_refund_ok' help='Checked if refund record is OK' string='Partner refund OK'
  • partner_vat Char
    size=15 string='VAT'
  • period_type Selection
    selection='get_period_type_selection' string='Period type'
  • refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='refund_id' string='Partner refund detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    compute='_compute_total_operation_amount' store=True string='Total rectified amount'
  • total_origin_amount Float
    help='Refund original amount' string='Original amount'
  • year Integer
Public methods (1)
  • get_period_type_selection(self)

New fields (8)
  • amount_untaxed Float
    string='Amount untaxed'
  • date Date
    readonly=True related='refund_line_id.date' string='Date'
  • move_id Many2one → account.move
    comodel_name='account.move' readonly=True related='refund_line_id.move_id' string='Invoice'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='refund_id.partner_id' string='Partner'
  • refund_id Many2one → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' ondelete='set null' string='Partner refund ID'
  • refund_line_id Many2one → account.move.line
    comodel_name='account.move.line' required=True string='Journal Item'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' required=True string='AEAT 349 Report ID'
  • report_type Selection
    readonly=True related='report_id.statement_type' store=True
Public methods (0)

No public methods.

New fields (10)
  • frequency_change Boolean
    states={'confirmed': [('readonly', True)]} string='Frequency change'
  • number Char
    default='349'
  • partner_record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='report_id' ondelete='cascade' states={'confirmed': [('readonly', True)]} string='Partner record details'
  • partner_record_ids One2many → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' inverse_name='report_id' ondelete='cascade' readonly=True string='Partner records'
  • partner_refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='report_id' ondelete='cascade' states={'confirmed': [('readonly', True)]} string='Partner refund details'
  • partner_refund_ids One2many → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' inverse_name='report_id' ondelete='cascade' readonly=True string='Partner refund IDS'
  • total_partner_records Integer
    compute='_compute_report_regular_totals' store=True string='Partners records'
  • total_partner_records_amount Float
    compute='_compute_report_regular_totals' store=True string='Partners records amount'
  • total_partner_refunds Integer
    compute='_compute_report_refund_totals' store=True string='Partners refunds'
  • total_partner_refunds_amount Float
    compute='_compute_report_refund_totals' store=True string='Partners refunds amount'
Public methods (3)
  • button_confirm(self)
    Checks if all the fields of the report are correctly filled
  • button_recover(self)
    Clean children records in this state for allowing things like cancelling an invoice that is inside this report.
  • calculate(self)
    Computes the records in report.
REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/12.0/l10n_es_aeat_mod349
VERSION
VERSION 1.3.4
CATEGORY
CATEGORYLocalisation/Accounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Eficent
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Eficent
COMMITTERS
COMMITTERSPedro M. Baeza, sbejaoui, cubells, OCA Transbot, oca-travis, OCA-git-bot, Oihane Crucelaegui, Rubén Cerdà
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:13
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/l10n-spain:
    - l10n_es_aeat
OCA/server-ux:
    - date_range
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - http_routing
    - digest
    - base_iban
    - l10n_es
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES OpenSSL
requests
unidecode
zeep
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (23)
XML IDNameModelTypeStatus
invoice_form account.invoice field Inherits account.invoice_form
invoice_supplier_form account.invoice.supplier.form account.invoice field Inherits account.invoice_supplier_form
l10n_es_aeat_349_map_lines_view_tree aeat.349.map.lines.view.tree aeat.349.map.line tree New
l10n_es_aeat_mod349.mod349_partner_record l10n_es_aeat_mod349.mod349_partner_record ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_partner_record_head l10n_es_aeat_mod349.mod349_partner_record_head ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_partner_refund_head l10n_es_aeat_mod349.mod349_partner_refund_head ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_refund_record l10n_es_aeat_mod349.mod349_refund_record ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_summary l10n_es_aeat_mod349.mod349_summary ir.ui.view qweb New
l10n_es_aeat_mod349.report_aeat_mod349_document l10n_es_aeat_mod349.report_aeat_mod349_document ir.ui.view qweb New
report_l10n_es_mod349_pdf report_l10n_es_mod349_pdf ir.ui.view qweb New
view_account_tax_add_mod349_form Tax | add 'aeat_349_operation_key' field (form) account.tax field Inherits account.view_tax_form
view_invoice_line_form account.invoice.line field Inherits account.view_invoice_line_form
view_l10n_ES_aeat_mod349_partner_record_detail_form AEAT 349 Partner record detail (form) l10n.es.aeat.mod349.partner_record_detail form New
view_l10n_ES_aeat_mod349_partner_record_detail_tree AEAT 349 Partner record detail (tree) l10n.es.aeat.mod349.partner_record_detail tree New
view_l10n_ES_aeat_mod349_partner_record_form AEAT 349 Partner record (form) l10n.es.aeat.mod349.partner_record form New
view_l10n_ES_aeat_mod349_partner_record_tree AEAT 349 Partner record (tree) l10n.es.aeat.mod349.partner_record tree New
view_l10n_ES_aeat_mod349_partner_refund_detail_form AEAT 349 Partner refund detail (form) l10n.es.aeat.mod349.partner_refund_detail form New
view_l10n_ES_aeat_mod349_partner_refund_detail_tree AEAT 349 Partner refund detail (tree) l10n.es.aeat.mod349.partner_refund_detail tree New
view_l10n_ES_aeat_mod349_partner_refund_form AEAT 349 Partner refund (form) l10n.es.aeat.mod349.partner_refund form New
view_l10n_ES_aeat_mod349_partner_refund_tree AEAT 349 Partner refund (tree) l10n.es.aeat.mod349.partner_refund tree New
view_l10n_es_aeat_mod349_report_form l10n_es.aeat.mod349.report.form l10n.es.aeat.mod349.report group Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod349_report_tree l10n_es.aeat.mod349.report.tree l10n.es.aeat.mod349.report tree Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_move_line_form account.move.line field Inherits account.view_move_line_form
Models touched (11)

New fields (1)
  • eu_triangular_deal Boolean
    help='This invoice constitutes a triangular operation for the purposes of intra-community operations.' readonly=True states={'draft': [('readonly', False)]} string='EU Triangular deal'
Public methods (2)
  • invoice_line_move_line_get(self)
    @api.model
    We pass on the operation key from invoice line to the move line
  • line_get_convert(self, line, part)
    @api.model
    Copy from invoice to move lines

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    compute='_compute_l10n_es_aeat_349_operation_key' selection=_selection_operation_key string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    selection=[('A', 'A - Intra-Community acquisition'), ('E', 'E - Intra-Community supplies'), ('I', 'I - Intra-Community services acquisitions'), ('S', 'S - Intra-Community services'), ('T', 'T - Triangular operations')] string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    compute='_compute_l10n_es_aeat_349_operation_key' selection=_selection_operation_key string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (1)
  • aeat_349_map_line Many2one → aeat.349.map.line
    comodel_name='aeat.349.map.line' oldname='aeat_349_operation_key' string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (3)
  • operation_key Selection
    required=True selection=_selection_operation_key
  • physical_product Boolean
    string='Involves physical product'
  • tax_tmpl_ids One2many → account.tax.template
    comodel_name='account.tax.template' inverse_name='aeat_349_map_line' string='Taxes'
Public methods (0)

No public methods.

New fields (8)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • operation_key Selection
    selection=_selection_operation_key string='Operation key'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_record_ok Boolean
    compute='_compute_partner_record_ok' help='Checked if partner record is OK' string='Partner Record OK'
  • partner_vat Char
    index=True size=15 string='VAT'
  • record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='partner_record_id' string='Partner record detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    compute='_compute_total_operation_amount' store=True string='Total operation amount'
Public methods (0)

No public methods.

New fields (8)
  • amount_untaxed Float
    string='Amount untaxed'
  • date Date
    readonly=True related='move_line_id.invoice_id.date_invoice' string='Date'
  • invoice_id Many2one → account.invoice
    comodel_name='account.invoice' readonly=True related='move_line_id.invoice_id' string='Invoice'
  • move_line_id Many2one → account.move.line
    comodel_name='account.move.line' required=True string='Journal Item'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='partner_record_id.partner_id' string='Partner'
  • partner_record_id Many2one → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' default=<expr> index=True ondelete='set null' string='Partner record'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' required=True string='AEAT 349 Report ID'
  • report_type Selection
    readonly=True related='report_id.type' store=True
Public methods (0)

No public methods.

New fields (11)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • operation_key Selection
    selection=_selection_operation_key string='Operation key'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' index=True required=True string='Partner'
  • partner_refund_ok Boolean
    compute='_compute_partner_refund_ok' help='Checked if refund record is OK' string='Partner refund OK'
  • partner_vat Char
    size=15 string='VAT'
  • period_type Selection
    selection='get_period_type_selection' string='Period type'
  • refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='refund_id' string='Partner refund detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    compute='_compute_total_operation_amount' store=True string='Total rectified amount'
  • total_origin_amount Float
    help='Refund original amount' string='Original amount'
  • year Integer
Public methods (1)
  • get_period_type_selection(self)

New fields (8)
  • amount_untaxed Float
    string='Amount untaxed'
  • date Date
    readonly=True related='refund_line_id.date' string='Date'
  • invoice_id Many2one → account.invoice
    comodel_name='account.invoice' readonly=True related='refund_line_id.invoice_id' string='Invoice'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='refund_id.partner_id' string='Partner'
  • refund_id Many2one → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' ondelete='set null' string='Partner refund ID'
  • refund_line_id Many2one → account.move.line
    comodel_name='account.move.line' required=True string='Journal Item'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' required=True string='AEAT 349 Report ID'
  • report_type Selection
    readonly=True related='report_id.type' store=True
Public methods (0)

No public methods.

New fields (10)
  • frequency_change Boolean
    states={'confirmed': [('readonly', True)]} string='Frequency change'
  • number Char
    default='349'
  • partner_record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='report_id' ondelete='cascade' states={'confirmed': [('readonly', True)]} string='Partner record details'
  • partner_record_ids One2many → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' inverse_name='report_id' ondelete='cascade' readonly=True string='Partner records'
  • partner_refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='report_id' ondelete='cascade' states={'confirmed': [('readonly', True)]} string='Partner refund details'
  • partner_refund_ids One2many → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' inverse_name='report_id' ondelete='cascade' readonly=True string='Partner refund IDS'
  • total_partner_records Integer
    compute='_compute_report_regular_totals' store=True string='Partners records'
  • total_partner_records_amount Float
    compute='_compute_report_regular_totals' store=True string='Partners records amount'
  • total_partner_refunds Integer
    compute='_compute_report_refund_totals' store=True string='Partners refunds'
  • total_partner_refunds_amount Float
    compute='_compute_report_refund_totals' store=True string='Partners refunds amount'
Public methods (3)
  • button_confirm(self)
    @api.multi
    Checks if all the fields of the report are correctly filled
  • button_recover(self)
    Clean children records in this state for allowing things like cancelling an invoice that is inside this report.
  • calculate(self)
    @api.multi
    Computes the records in report.
REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/11.0/l10n_es_aeat_mod349
VERSION
VERSION 1.2.0
CATEGORY
CATEGORYLocalisation/Accounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Eficent
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Eficent
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, Stéphane Bidoul (ACSONE), Jordi Ballester Alomar, cubells, OCA Transbot, oca-travis, OCA-git-bot, Eric Antones, maurocebria, Aitor Bouzas, David Gómez Quilón
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:23:55
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/l10n-spain:
    - l10n_es_aeat
OCA/server-ux:
    - date_range
odoo/odoo:
    - account_invoicing
    - account
    - base_setup
    - base
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - analytic
    - web_planner
    - portal
    - http_routing
    - base_iban
    - l10n_es
    - base_vat
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (23)
XML IDNameModelTypeStatus
invoice_form account.invoice field Inherits account.invoice_form
invoice_supplier_form account.invoice.supplier.form account.invoice field Inherits account.invoice_supplier_form
l10n_es_aeat_349_map_lines_view_tree aeat.349.map.lines.view.tree aeat.349.map.line tree New
l10n_es_aeat_mod349.mod349_partner_record l10n_es_aeat_mod349.mod349_partner_record ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_partner_record_head l10n_es_aeat_mod349.mod349_partner_record_head ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_partner_refund_head l10n_es_aeat_mod349.mod349_partner_refund_head ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_refund_record l10n_es_aeat_mod349.mod349_refund_record ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_summary l10n_es_aeat_mod349.mod349_summary ir.ui.view qweb New
l10n_es_aeat_mod349.report_aeat_mod349_document l10n_es_aeat_mod349.report_aeat_mod349_document ir.ui.view qweb New
report_l10n_es_mod349_pdf report_l10n_es_mod349_pdf ir.ui.view qweb New
view_account_tax_add_mod349_form Tax | add 'aeat_349_operation_key' field (form) account.tax field Inherits account.view_tax_form
view_invoice_line_form account.invoice.line field Inherits account.view_invoice_line_form
view_l10n_ES_aeat_mod349_partner_record_detail_form AEAT 349 Partner record detail (form) l10n.es.aeat.mod349.partner_record_detail form New
view_l10n_ES_aeat_mod349_partner_record_detail_tree AEAT 349 Partner record detail (tree) l10n.es.aeat.mod349.partner_record_detail tree New
view_l10n_ES_aeat_mod349_partner_record_form AEAT 349 Partner record (form) l10n.es.aeat.mod349.partner_record form New
view_l10n_ES_aeat_mod349_partner_record_tree AEAT 349 Partner record (tree) l10n.es.aeat.mod349.partner_record tree New
view_l10n_ES_aeat_mod349_partner_refund_detail_form AEAT 349 Partner refund detail (form) l10n.es.aeat.mod349.partner_refund_detail form New
view_l10n_ES_aeat_mod349_partner_refund_detail_tree AEAT 349 Partner refund detail (tree) l10n.es.aeat.mod349.partner_refund_detail tree New
view_l10n_ES_aeat_mod349_partner_refund_form AEAT 349 Partner refund (form) l10n.es.aeat.mod349.partner_refund form New
view_l10n_ES_aeat_mod349_partner_refund_tree AEAT 349 Partner refund (tree) l10n.es.aeat.mod349.partner_refund tree New
view_l10n_es_aeat_mod349_report_form l10n_es.aeat.mod349.report.form l10n.es.aeat.mod349.report group Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod349_report_tree l10n_es.aeat.mod349.report.tree l10n.es.aeat.mod349.report tree Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_move_line_form account.move.line field Inherits account.view_move_line_form
Models touched (11)

New fields (1)
  • eu_triangular_deal Boolean
    help='This invoice constitutes a triangular operation for the purposes of intra-community operations.' readonly=True states={'draft': [('readonly', False)]} string='EU Triangular deal'
Public methods (2)
  • invoice_line_move_line_get(self)
    @api.model
    We pass on the operation key from invoice line to the move line
  • line_get_convert(self, line, part)
    @api.model
    Copy from invoice to move lines

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    compute='_compute_l10n_es_aeat_349_operation_key' selection=_selection_operation_key string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    selection=[('A', 'A - Intra-Community acquisition'), ('E', 'E - Intra-Community supplies'), ('I', 'I - Intra-Community services acquisitions'), ('S', 'S - Intra-Community services'), ('T', 'T - Triangular operations')] string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    compute='_compute_l10n_es_aeat_349_operation_key' selection=_selection_operation_key string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (1)
  • aeat_349_map_line Many2one → aeat.349.map.line
    comodel_name='aeat.349.map.line' oldname='aeat_349_operation_key' string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (3)
  • operation_key Selection
    required=True selection=_selection_operation_key
  • physical_product Boolean
    string='Involves physical product'
  • tax_tmpl_ids One2many → account.tax.template
    comodel_name='account.tax.template' inverse_name='aeat_349_map_line' string='Taxes'
Public methods (0)

No public methods.

New fields (8)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • operation_key Selection
    selection=_selection_operation_key string='Operation key'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_record_ok Boolean
    compute='_compute_partner_record_ok' help='Checked if partner record is OK' string='Partner Record OK'
  • partner_vat Char
    index=True size=15 string='VAT'
  • record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='partner_record_id' string='Partner record detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    compute='_compute_total_operation_amount' store=True string='Total operation amount'
Public methods (1)
  • onchange_format_partner_vat(self, partner_vat, country_id)
    @api.multi
    Formats VAT to match XXVATNUMBER (where XX is country code)

New fields (8)
  • amount_untaxed Float
    string='Amount untaxed'
  • date Date
    readonly=True related='move_line_id.invoice_id.date_invoice' string='Date'
  • invoice_id Many2one → account.invoice
    comodel_name='account.invoice' readonly=True related='move_line_id.invoice_id' string='Invoice'
  • move_line_id Many2one → account.move.line
    comodel_name='account.move.line' required=True string='Journal Item'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='partner_record_id.partner_id' string='Partner'
  • partner_record_id Many2one → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' default=<expr> index=True ondelete='set null' string='Partner record'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' required=True string='AEAT 349 Report ID'
  • report_type Selection
    readonly=True related='report_id.type' store=True
Public methods (0)

No public methods.

New fields (11)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • operation_key Selection
    selection=_selection_operation_key string='Operation key'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' index=True required=True string='Partner'
  • partner_refund_ok Boolean
    compute='_compute_partner_refund_ok' help='Checked if refund record is OK' string='Partner refund OK'
  • partner_vat Char
    size=15 string='VAT'
  • period_type Selection
    selection='get_period_type_selection' string='Period type'
  • refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='refund_id' string='Partner refund detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    compute='_compute_total_operation_amount' store=True string='Total rectified amount'
  • total_origin_amount Float
    help='Refund original amount' string='Original amount'
  • year Integer
Public methods (2)
  • get_period_type_selection(self)
  • onchange_format_partner_vat(self, partner_vat, country_id)
    @api.multi
    Formats VAT to match XXVATNUMBER (where XX is country code)

New fields (8)
  • amount_untaxed Float
    string='Amount untaxed'
  • date Date
    readonly=True related='refund_line_id.date' string='Date'
  • invoice_id Many2one → account.invoice
    comodel_name='account.invoice' readonly=True related='refund_line_id.invoice_id' string='Invoice'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='refund_id.partner_id' string='Partner'
  • refund_id Many2one → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' ondelete='set null' string='Partner refund ID'
  • refund_line_id Many2one → account.move.line
    comodel_name='account.move.line' required=True string='Journal Item'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' required=True string='AEAT 349 Report ID'
  • report_type Selection
    readonly=True related='report_id.type' store=True
Public methods (0)

No public methods.

New fields (10)
  • frequency_change Boolean
    states={'confirmed': [('readonly', True)]} string='Frequency change'
  • number Char
    default='349'
  • partner_record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='report_id' ondelete='cascade' states={'confirmed': [('readonly', True)]} string='Partner record details'
  • partner_record_ids One2many → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' inverse_name='report_id' ondelete='cascade' readonly=True string='Partner records'
  • partner_refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='report_id' ondelete='cascade' states={'confirmed': [('readonly', True)]} string='Partner refund details'
  • partner_refund_ids One2many → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' inverse_name='report_id' ondelete='cascade' readonly=True string='Partner refund IDS'
  • total_partner_records Integer
    compute='_compute_report_regular_totals' store=True string='Partners records'
  • total_partner_records_amount Float
    compute='_compute_report_regular_totals' store=True string='Partners records amount'
  • total_partner_refunds Integer
    compute='_compute_report_refund_totals' store=True string='Partners refunds'
  • total_partner_refunds_amount Float
    compute='_compute_report_refund_totals' store=True string='Partners refunds amount'
Public methods (2)
  • button_confirm(self)
    @api.multi
    Checks if all the fields of the report are correctly filled
  • calculate(self)
    @api.multi
    Computes the records in report.
REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/10.0/l10n_es_aeat_mod349
VERSION
VERSION 2.2.6
CATEGORY
CATEGORYLocalisation/Accounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Pexego, Eficent, Top Consultant
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Pexego, Eficent, Top Consultant
COMMITTERS
COMMITTERSPedro M. Baeza, Cédric Pigeon, Carlos Dauden, OCA Transbot, oca-travis, Weblate
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:19:53
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/l10n-spain:
    - l10n_es_aeat
    - l10n_es
OCA/server-tools:
    - date_range
odoo/odoo:
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - web_tour
    - report
    - analytic
    - web_planner
    - base_iban
    - base_vat
    - l10n_es
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (23)
XML IDNameModelTypeStatus
invoice_form account.invoice field Inherits account.invoice_form
invoice_supplier_form account.invoice.supplier.form account.invoice field Inherits account.invoice_supplier_form
l10n_es_aeat_349_map_lines_view_tree aeat.349.map.lines.view.tree aeat.349.map.line tree New
l10n_es_aeat_mod349.mod349_partner_record l10n_es_aeat_mod349.mod349_partner_record ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_partner_record_head l10n_es_aeat_mod349.mod349_partner_record_head ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_partner_refund_head l10n_es_aeat_mod349.mod349_partner_refund_head ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_refund_record l10n_es_aeat_mod349.mod349_refund_record ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_summary l10n_es_aeat_mod349.mod349_summary ir.ui.view qweb New
l10n_es_aeat_mod349.report_aeat_mod349_document l10n_es_aeat_mod349.report_aeat_mod349_document ir.ui.view qweb New
report_l10n_es_mod349_pdf report_l10n_es_mod349_pdf ir.ui.view qweb New
view_account_tax_add_mod349_form Tax | add 'aeat_349_operation_key' field (form) account.tax field Inherits account.view_tax_form
view_invoice_line_form account.invoice.line field Inherits account.view_invoice_line_form
view_l10n_ES_aeat_mod349_partner_record_detail_form AEAT 349 Partner record detail (form) l10n.es.aeat.mod349.partner_record_detail form New
view_l10n_ES_aeat_mod349_partner_record_detail_tree AEAT 349 Partner record detail (tree) l10n.es.aeat.mod349.partner_record_detail tree New
view_l10n_ES_aeat_mod349_partner_record_form AEAT 349 Partner record (form) l10n.es.aeat.mod349.partner_record form New
view_l10n_ES_aeat_mod349_partner_record_tree AEAT 349 Partner record (tree) l10n.es.aeat.mod349.partner_record tree New
view_l10n_ES_aeat_mod349_partner_refund_detail_form AEAT 349 Partner refund detail (form) l10n.es.aeat.mod349.partner_refund_detail form New
view_l10n_ES_aeat_mod349_partner_refund_detail_tree AEAT 349 Partner refund detail (tree) l10n.es.aeat.mod349.partner_refund_detail tree New
view_l10n_ES_aeat_mod349_partner_refund_form AEAT 349 Partner refund (form) l10n.es.aeat.mod349.partner_refund form New
view_l10n_ES_aeat_mod349_partner_refund_tree AEAT 349 Partner refund (tree) l10n.es.aeat.mod349.partner_refund tree New
view_l10n_es_aeat_mod349_report_form l10n_es.aeat.mod349.report.form l10n.es.aeat.mod349.report group Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod349_report_tree l10n_es.aeat.mod349.report.tree l10n.es.aeat.mod349.report tree Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_move_line_form account.move.line field Inherits account.view_move_line_form
Models touched (11)

New fields (1)
  • eu_triangular_deal Boolean
    help='This invoice constitutes a triangular operation for the purposes of intra-community operations.' readonly=True states={'draft': [('readonly', False)]} string='EU Triangular deal'
Public methods (2)
  • invoice_line_move_line_get(self)
    @api.model
    We pass on the operation key from invoice line to the move line
  • line_get_convert(self, line, part)
    @api.model
    Copy from invoice to move lines

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    compute='_compute_l10n_es_aeat_349_operation_key' selection=_selection_operation_key string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    selection=[('A', 'A - Intra-Community acquisition'), ('E', 'E - Intra-Community supplies'), ('I', 'I - Intra-Community services acquisitions'), ('S', 'S - Intra-Community services'), ('T', 'T - Triangular operations')] string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    compute='_compute_l10n_es_aeat_349_operation_key' selection=_selection_operation_key string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (1)
  • aeat_349_map_line Many2one → aeat.349.map.line
    comodel_name='aeat.349.map.line' oldname='aeat_349_operation_key' string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (3)
  • operation_key Selection
    required=True selection=_selection_operation_key
  • physical_product Boolean
    string='Involves physical product'
  • tax_tmpl_ids One2many → account.tax.template
    comodel_name='account.tax.template' inverse_name='aeat_349_map_line' string='Taxes'
Public methods (0)

No public methods.

New fields (8)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • operation_key Selection
    selection=_selection_operation_key string='Operation key'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_record_ok Boolean
    compute='_compute_partner_record_ok' help='Checked if partner record is OK' string='Partner Record OK'
  • partner_vat Char
    index=True size=15 string='VAT'
  • record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='partner_record_id' string='Partner record detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    compute='_compute_total_operation_amount' store=True string='Total operation amount'
Public methods (1)
  • onchange_format_partner_vat(self, partner_vat, country_id)
    @api.multi
    Formats VAT to match XXVATNUMBER (where XX is country code)

New fields (8)
  • amount_untaxed Float
    string='Amount untaxed'
  • date Date
    readonly=True related='move_line_id.invoice_id.date_invoice' string='Date'
  • invoice_id Many2one → account.invoice
    comodel_name='account.invoice' readonly=True related='move_line_id.invoice_id' string='Invoice'
  • move_line_id Many2one → account.move.line
    comodel_name='account.move.line' required=True string='Journal Item'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='partner_record_id.partner_id' string='Partner'
  • partner_record_id Many2one → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' default=<expr> index=True ondelete='set null' string='Partner record'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' required=True string='AEAT 349 Report ID'
  • report_type Selection
    readonly=True related='report_id.type' store=True
Public methods (0)

No public methods.

New fields (11)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • operation_key Selection
    selection=_selection_operation_key string='Operation key'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' index=True required=True string='Partner'
  • partner_refund_ok Boolean
    compute='_compute_partner_refund_ok' help='Checked if refund record is OK' string='Partner refund OK'
  • partner_vat Char
    size=15 string='VAT'
  • period_type Selection
    selection='get_period_type_selection' string='Period type'
  • refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='refund_id' string='Partner refund detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    compute='_compute_total_operation_amount' store=True string='Total rectified amount'
  • total_origin_amount Float
    help='Refund original amount' string='Original amount'
  • year Integer
Public methods (2)
  • get_period_type_selection(self)
  • onchange_format_partner_vat(self, partner_vat, country_id)
    @api.multi
    Formats VAT to match XXVATNUMBER (where XX is country code)

New fields (8)
  • amount_untaxed Float
    string='Amount untaxed'
  • date Date
    readonly=True related='refund_line_id.date' string='Date'
  • invoice_id Many2one → account.invoice
    comodel_name='account.invoice' readonly=True related='refund_line_id.invoice_id' string='Invoice'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='refund_id.partner_id' string='Partner'
  • refund_id Many2one → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' ondelete='set null' string='Partner refund ID'
  • refund_line_id Many2one → account.move.line
    comodel_name='account.move.line' required=True string='Journal Item'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' required=True string='AEAT 349 Report ID'
  • report_type Selection
    readonly=True related='report_id.type' store=True
Public methods (0)

No public methods.

New fields (10)
  • frequency_change Boolean
    states={'confirmed': [('readonly', True)]} string='Frequency change'
  • number Char
    default='349'
  • partner_record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='report_id' ondelete='cascade' states={'confirmed': [('readonly', True)]} string='Partner record details'
  • partner_record_ids One2many → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' inverse_name='report_id' ondelete='cascade' readonly=True string='Partner records'
  • partner_refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='report_id' ondelete='cascade' states={'confirmed': [('readonly', True)]} string='Partner refund details'
  • partner_refund_ids One2many → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' inverse_name='report_id' ondelete='cascade' readonly=True string='Partner refund IDS'
  • total_partner_records Integer
    compute='_compute_report_regular_totals' store=True string='Partners records'
  • total_partner_records_amount Float
    compute='_compute_report_regular_totals' store=True string='Partners records amount'
  • total_partner_refunds Integer
    compute='_compute_report_refund_totals' store=True string='Partners refunds'
  • total_partner_refunds_amount Float
    compute='_compute_report_refund_totals' store=True string='Partners refunds amount'
Public methods (2)
  • button_confirm(self)
    @api.multi
    Checks if all the fields of the report are correctly filled
  • calculate(self)
    @api.multi
    Computes the records in report.
REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/9.0/l10n_es_aeat_mod349
VERSION
VERSION 2.1.6
CATEGORY
CATEGORYLocalisation/Accounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA), Pexego, Eficent, Top Consultant
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA), Pexego, Eficent, Top Consultant
COMMITTERS
COMMITTERSPedro M. Baeza, OCA Transbot, oca-travis, Weblate, JesusVMayor
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:15:18
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-reporting:
    - account_tax_balance
OCA/account-invoicing:
    - account_invoice_refund_link
OCA/l10n-spain:
    - l10n_es_aeat
    - l10n_es
OCA/server-tools:
    - date_range
odoo/odoo:
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - bus
    - report
    - analytic
    - web_tip
    - web_planner
    - base_iban
    - base_vat
    - l10n_es
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (23)
XML IDNameModelTypeStatus
invoice_form account.invoice field Inherits account.invoice_form
invoice_supplier_form account.invoice.supplier.form account.invoice field Inherits account.invoice_supplier_form
l10n_es_aeat_349_map_lines_view_tree aeat.349.map.lines.view.tree aeat.349.map.line tree New
l10n_es_aeat_mod349.mod349_partner_record l10n_es_aeat_mod349.mod349_partner_record ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_partner_record_head l10n_es_aeat_mod349.mod349_partner_record_head ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_partner_refund_head l10n_es_aeat_mod349.mod349_partner_refund_head ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_refund_record l10n_es_aeat_mod349.mod349_refund_record ir.ui.view qweb New
l10n_es_aeat_mod349.mod349_summary l10n_es_aeat_mod349.mod349_summary ir.ui.view qweb New
l10n_es_aeat_mod349.report_aeat_mod349_document l10n_es_aeat_mod349.report_aeat_mod349_document ir.ui.view qweb New
report_l10n_es_mod349_pdf report_l10n_es_mod349_pdf ir.ui.view qweb New
view_account_tax_add_mod349_form Tax | add 'aeat_349_operation_key' field (form) account.tax field Inherits account.view_tax_form
view_invoice_line_form account.invoice.line field Inherits account.view_invoice_line_form
view_l10n_ES_aeat_mod349_partner_record_detail_form AEAT 349 Partner record detail (form) l10n.es.aeat.mod349.partner_record_detail form New
view_l10n_ES_aeat_mod349_partner_record_detail_tree AEAT 349 Partner record detail (tree) l10n.es.aeat.mod349.partner_record_detail tree New
view_l10n_ES_aeat_mod349_partner_record_form AEAT 349 Partner record (form) l10n.es.aeat.mod349.partner_record form New
view_l10n_ES_aeat_mod349_partner_record_tree AEAT 349 Partner record (tree) l10n.es.aeat.mod349.partner_record tree New
view_l10n_ES_aeat_mod349_partner_refund_detail_form AEAT 349 Partner refund detail (form) l10n.es.aeat.mod349.partner_refund_detail form New
view_l10n_ES_aeat_mod349_partner_refund_detail_tree AEAT 349 Partner refund detail (tree) l10n.es.aeat.mod349.partner_refund_detail tree New
view_l10n_ES_aeat_mod349_partner_refund_form AEAT 349 Partner refund (form) l10n.es.aeat.mod349.partner_refund form New
view_l10n_ES_aeat_mod349_partner_refund_tree AEAT 349 Partner refund (tree) l10n.es.aeat.mod349.partner_refund tree New
view_l10n_es_aeat_mod349_report_form l10n_es.aeat.mod349.report.form l10n.es.aeat.mod349.report group Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod349_report_tree l10n_es.aeat.mod349.report.tree l10n.es.aeat.mod349.report tree Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_move_line_form account.move.line field Inherits account.view_move_line_form
Models touched (11)

New fields (1)
  • eu_triangular_deal Boolean
    help='This invoice constitutes a triangular operation for the purposes of intra-community operations.' readonly=True states={'draft': [('readonly', False)]} string='EU Triangular deal'
Public methods (2)
  • invoice_line_move_line_get(self)
    @api.model
    We pass on the operation key from invoice line to the move line
  • line_get_convert(self, line, part)
    @api.model
    Copy from invoice to move lines

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    compute='_compute_l10n_es_aeat_349_operation_key' selection=_selection_operation_key string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    selection=[('A', 'A - Intra-Community acquisition'), ('E', 'E - Intra-Community supplies'), ('I', 'I - Intra-Community services acquisitions'), ('S', 'S - Intra-Community services'), ('T', 'T - Triangular operations')] string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (1)
  • l10n_es_aeat_349_operation_key Selection
    compute='_compute_l10n_es_aeat_349_operation_key' selection=_selection_operation_key string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (1)
  • aeat_349_map_line Many2one → aeat.349.map.line
    comodel_name='aeat.349.map.line' oldname='aeat_349_operation_key' string='AEAT 349 Operation key'
Public methods (0)

No public methods.

New fields (3)
  • operation_key Selection
    required=True selection=_selection_operation_key
  • physical_product Boolean
    string='Involves physical product'
  • tax_tmpl_ids One2many → account.tax.template
    comodel_name='account.tax.template' inverse_name='aeat_349_map_line' string='Taxes'
Public methods (0)

No public methods.

New fields (8)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • operation_key Selection
    selection=_selection_operation_key string='Operation key'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_record_ok Boolean
    compute='_compute_partner_record_ok' help='Checked if partner record is OK' string='Partner Record OK'
  • partner_vat Char
    index=True size=15 string='VAT'
  • record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='partner_record_id' string='Partner record detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    compute='_compute_total_operation_amount' store=True string='Total operation amount'
Public methods (1)
  • onchange_format_partner_vat(self, partner_vat, country_id)
    @api.multi
    Formats VAT to match XXVATNUMBER (where XX is country code)

New fields (8)
  • amount_untaxed Float
    string='Amount untaxed'
  • date Date
    readonly=True related='move_line_id.invoice_id.date_invoice' string='Date'
  • invoice_id Many2one → account.invoice
    comodel_name='account.invoice' readonly=True related='move_line_id.invoice_id' string='Invoice'
  • move_line_id Many2one → account.move.line
    comodel_name='account.move.line' required=True string='Journal Item'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='partner_record_id.partner_id' string='Partner'
  • partner_record_id Many2one → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' default=<expr> index=True ondelete='set null' string='Partner record'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' required=True string='AEAT 349 Report ID'
  • report_type Selection
    readonly=True related='report_id.type' store=True
Public methods (0)

No public methods.

New fields (11)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • operation_key Selection
    selection=_selection_operation_key string='Operation key'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' index=True required=True string='Partner'
  • partner_refund_ok Boolean
    compute='_compute_partner_refund_ok' help='Checked if refund record is OK' string='Partner refund OK'
  • partner_vat Char
    size=15 string='VAT'
  • period_type Selection
    selection='get_period_type_selection' string='Period type'
  • refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='refund_id' string='Partner refund detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    compute='_compute_total_operation_amount' store=True string='Total rectified amount'
  • total_origin_amount Float
    help='Refund original amount' string='Original amount'
  • year Integer
Public methods (2)
  • get_period_type_selection(self)
  • onchange_format_partner_vat(self, partner_vat, country_id)
    @api.multi
    Formats VAT to match XXVATNUMBER (where XX is country code)

New fields (8)
  • amount_untaxed Float
    string='Amount untaxed'
  • date Date
    readonly=True related='refund_line_id.date' string='Date'
  • invoice_id Many2one → account.invoice
    comodel_name='account.invoice' readonly=True related='refund_line_id.invoice_id' string='Invoice'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True related='refund_id.partner_id' string='Partner'
  • refund_id Many2one → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' ondelete='set null' string='Partner refund ID'
  • refund_line_id Many2one → account.move.line
    comodel_name='account.move.line' required=True string='Journal Item'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' required=True string='AEAT 349 Report ID'
  • report_type Selection
    readonly=True related='report_id.type' store=True
Public methods (0)

No public methods.

New fields (10)
  • frequency_change Boolean
    states={'confirmed': [('readonly', True)]} string='Frequency change'
  • number Char
    default='349'
  • partner_record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='report_id' ondelete='cascade' states={'confirmed': [('readonly', True)]} string='Partner record details'
  • partner_record_ids One2many → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' inverse_name='report_id' ondelete='cascade' readonly=True string='Partner records'
  • partner_refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='report_id' ondelete='cascade' states={'confirmed': [('readonly', True)]} string='Partner refund details'
  • partner_refund_ids One2many → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' inverse_name='report_id' ondelete='cascade' readonly=True string='Partner refund IDS'
  • total_partner_records Integer
    compute='_compute_report_regular_totals' store=True string='Partners records'
  • total_partner_records_amount Float
    compute='_compute_report_regular_totals' store=True string='Partners records amount'
  • total_partner_refunds Integer
    compute='_compute_report_refund_totals' store=True string='Partners refunds'
  • total_partner_refunds_amount Float
    compute='_compute_report_refund_totals' store=True string='Partners refunds amount'
Public methods (2)
  • button_confirm(self)
    @api.multi
    Checks if all the fields of the report are correctly filled
  • calculate(self)
    @api.multi
    Computes the records in report.
REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/8.0/l10n_es_aeat_mod349
VERSION
VERSION 2.2.0
CATEGORY
CATEGORYLocalisation/Accounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Pexego, Antiun Ingeniería S.L., Serv. Tecnol. Avanzados - Pedro M. Baeza, Top Consultant
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Pexego, Antiun Ingeniería S.L., Serv. Tecnol. Avanzados - Pedro M. Baeza, Top Consultant
COMMITTERS
COMMITTERSStéphane Bidoul, Pedro M. Baeza, Stéphane Bidoul (ACSONE), Omar (Pexego), OCA Transbot, PabloCM, Santi Argüeso, oca-travis, agaldona, Weblate, Antonio Espinosa
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-spain
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:11:20
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-tools:
    - account_invoice_currency
OCA/l10n-spain:
    - account_refund_original
    - l10n_es
    - l10n_es_aeat
odoo/odoo:
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - decimal_precision
    - mail
    - report
    - analytic
    - board
    - edi
    - email_template
    - base_vat
    - base_iban
    - l10n_es
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (14)
XML IDNameModelTypeStatus
view_account_fiscal_position_add_mod349_form Fiscal position | add 'include in AEAT 349' field (form) account.fiscal.position field Inherits account.view_account_position_form
view_account_fiscal_position_add_mod349_tree Fiscal position | add 'include in AEAT 349' field (tree) account.fiscal.position field Inherits account.view_account_position_tree
view_customer_account_invoice_form__add_operation_key Account invoice (customer) | add 'operation_key' field (form) account.invoice field Inherits account.invoice_form
view_l10n_ES_aeat_mod349_partner_record_detail_form AEAT 349 Partner record detail (form) l10n.es.aeat.mod349.partner_record_detail form New
view_l10n_ES_aeat_mod349_partner_record_detail_tree AEAT 349 Partner record detail (tree) l10n.es.aeat.mod349.partner_record_detail tree New
view_l10n_ES_aeat_mod349_partner_record_form AEAT 349 Partner record (form) l10n.es.aeat.mod349.partner_record form New
view_l10n_ES_aeat_mod349_partner_record_tree AEAT 349 Partner record (tree) l10n.es.aeat.mod349.partner_record tree New
view_l10n_ES_aeat_mod349_partner_refund_detail_form AEAT 349 Partner refund detail (form) l10n.es.aeat.mod349.partner_refund_detail form New
view_l10n_ES_aeat_mod349_partner_refund_detail_tree AEAT 349 Partner refund detail (tree) l10n.es.aeat.mod349.partner_refund_detail tree New
view_l10n_ES_aeat_mod349_partner_refund_form AEAT 349 Partner refund (form) l10n.es.aeat.mod349.partner_refund form New
view_l10n_ES_aeat_mod349_partner_refund_tree AEAT 349 Partner refund (tree) l10n.es.aeat.mod349.partner_refund tree New
view_l10n_es_aeat_mod349_report_form l10n_es.aeat.mod349.report.form l10n.es.aeat.mod349.report button Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod349_report_tree l10n_es.aeat.mod349.report.tree l10n.es.aeat.mod349.report tree Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_supplier_account_invoice_form__add_operation_key Account invoice (supplier) | add 'operation_key' field (form) account.invoice field Inherits account.invoice_supplier_form
Models touched (8)

New fields (1)
  • intracommunity_operations Boolean
    args: 'Intra-Community operations'
Public methods (0)

No public methods.

New fields (1)
  • operation_key Selection
    selection=OPERATION_KEYS string='Operation key'
Public methods (2)
  • create(self, vals)
    @api.model
    Writes operation key value, if invoice is created in backgroud with intracommunity fiscal position defined
  • onchange_fiscal_position_l10n_es_aeat_mod349(self)
    @api.multi@api.onchange('fiscal_position')
    Suggest an operation key when fiscal position changes.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (8)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • operation_key Selection
    required=True selection=OPERATION_KEYS string='Operation key'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=True string='Partner'
  • partner_record_ok Boolean
    compute='_check_partner_record_line' help='Checked if partner record is OK' string='Partner Record OK'
  • partner_vat Char
    select=1 size=15 string='VAT'
  • record_detail_ids One2many → l10n.es.aeat.mod349.partner_record_detail
    comodel_name='l10n.es.aeat.mod349.partner_record_detail' inverse_name='partner_record_id' string='Partner record detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    string='Total operation amount'
Public methods (1)
  • onchange_format_partner_vat(self, partner_vat, country_id)
    @api.multi
    Formats VAT to match XXVATNUMBER (where XX is country code)

New fields (4)
  • amount_untaxed Float
    string='Amount untaxed'
  • date Date
    readonly=True related='invoice_id.date_invoice' string='Date'
  • invoice_id Many2one → account.invoice
    comodel_name='account.invoice' required=True string='Invoice'
  • partner_record_id Many2one → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' default=<expr> ondelete='cascade' required=True select=1 string='Partner record'
Public methods (0)

No public methods.

New fields (11)
  • country_id Many2one → res.country
    comodel_name='res.country' string='Country'
  • fiscalyear_id Many2one → account.fiscalyear
    comodel_name='account.fiscalyear' string='Fiscal year'
  • operation_key Selection
    required=True selection=OPERATION_KEYS string='Operation key'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' required=1 select=1 string='Partner'
  • partner_refund_ok Boolean
    compute='_check_partner_refund_line' help='Checked if refund record is OK' string='Partner refund OK'
  • partner_vat Char
    size=15 string='VAT'
  • period_type Selection
    required=True selection='get_period_type_selection' string='Period type'
  • refund_detail_ids One2many → l10n.es.aeat.mod349.partner_refund_detail
    comodel_name='l10n.es.aeat.mod349.partner_refund_detail' inverse_name='refund_id' string='Partner refund detail IDS'
  • report_id Many2one → l10n.es.aeat.mod349.report
    comodel_name='l10n.es.aeat.mod349.report' ondelete='cascade' string='AEAT 349 Report ID'
  • total_operation_amount Float
    string='Total operation amount'
  • total_origin_amount Float
    help='Refund original amount' string='Original amount'
Public methods (2)
  • get_period_type_selection(self)
  • onchange_format_partner_vat(self, partner_vat, country_id)
    @api.multi
    Formats VAT to match XXVATNUMBER (where XX is country code)

New fields (4)
  • amount_untaxed Float
    string='Amount untaxed'
  • date Date
    readonly=True related='invoice_id.date_invoice' string='Date'
  • invoice_id Many2one → account.invoice
    comodel_name='account.invoice' required=True string='Invoice ID'
  • refund_id Many2one → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' ondelete='cascade' string='Partner refund ID'
Public methods (0)

No public methods.

New fields (9)
  • calculate_date Boolean
    help='Warning!: With this checkbox selected, the declaration will be computed selecting invoices based in periods and dates in selected Period Type not only by period' states={'confirmed': [('readonly', True)]} string='Calculate by days'
  • frequency_change Boolean
    states={'confirmed': [('readonly', True)]} string='Frequency change'
  • number Char
    default='349'
  • partner_record_ids One2many → l10n.es.aeat.mod349.partner_record
    comodel_name='l10n.es.aeat.mod349.partner_record' inverse_name='report_id' ondelete='cascade' states={'confirmed': [('readonly', True)]} string='Partner records'
  • partner_refund_ids One2many → l10n.es.aeat.mod349.partner_refund
    comodel_name='l10n.es.aeat.mod349.partner_refund' inverse_name='report_id' ondelete='cascade' states={'confirmed': [('readonly', True)]} string='Partner refund IDS'
  • total_partner_records Integer
    compute='_get_report_totals' string='Partners records'
  • total_partner_records_amount Float
    compute='_get_report_totals' string='Partners records amount'
  • total_partner_refunds Integer
    compute='_get_report_totals' string='Partners refunds'
  • total_partner_refunds_amount Float
    compute='_get_report_totals' string='Partners refunds amount'
Public methods (2)
  • button_confirm(self)
    @api.multi
    Checks if all the fields of the report are correctly filled
  • calculate(self)
    @api.multi
    Computes the records in report.
REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/7.0/l10n_es_aeat_mod349
VERSION
VERSION 2.0
CATEGORY
CATEGORYLocalisation/Accounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Pexego
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Pexego
COMMITTERS
COMMITTERSAlexandre Fayolle, Pedro M. Baeza, Stéphane Bidoul (ACSONE), Alejandro Santana, Ignacio Ibeas - Acysos S.L., Omar (Pexego), unknown, OCA Transbot, Launchpad Translations on behalf of openerp-spain-team
WEBSITE
WEBSITEhttp://www.pexego.es
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:07:13
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/account-financial-tools:
    - account_invoice_currency
OCA/l10n-spain:
    - account_refund_original
    - l10n_es
    - l10n_es_aeat
odoo/odoo:
    - account
    - base_setup
    - base
    - web_kanban
    - web
    - product
    - process
    - decimal_precision
    - mail
    - analytic
    - board
    - edi
    - email_template
    - base_vat
    - base_iban
    - l10n_es
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES unidecode
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Módulo para la presentación del Modelo AEAT 349 (Declaración Recapitulativa de
Operaciones Intracomunitarias)

Basado en la Orden EHA/769/2010 por el que se aprueban los diseños físicos y
lógicos del 349.

De acuerdo con la normativa de la Hacienda Española, están obligados a
presentar el modelo 349:

 * Todos aquellos sujetos pasivos del Impuesto sobre el Valor Añadido que hayan
   realizado las operaciones previstas en el artículo 79 del Reglamento del
   Impuesto sobre el Valor Añadido, es decir, quienes adquieran o vendan bienes
   a empresas situadas en países miembros de la UE, sino también aquellos que
   presten servicios a miembros de la UE y cumplan con las siguientes
   condiciones:

  - Que conforme a las reglas de la localización aplicables a las
    mismas, no se entiendan prestadas en el territorio de aplicación del
    impuesto.

  - Que estén sometidas efectivamente a gravamen de otro Estado miembro.

  - Que su destinatario sea un empresario o profesional actuando como
    tal y radique en dicho Estado miembro la sede de su actividad
    económica, o tenga en el mismo un establecimiento permanente o, en su
    defecto, el lugar de su domicilio o residencia habitual, o que dicho
    destinatario sea una persona jurídica que no actúe como empresario o
    profesional pero tenga asignado un número de identificación a efectos
    del Impuesto suministrado por ese Estado miembro.

  - Que el sujeto pasivo sea dicho destinatario.

    El período de declaración comprenderá, con carácter general las
    operaciones realizadas en cada mes natural, y se presentará durante los
    veinte primeros días naturales del mes inmediato siguiente al
    correspondiente período mensual. No obstante, la presentación podrá ser
    bimestral, trimestral o anual en los siguientes supuestos:

 * Bimestral: Si al final del segundo mes de un trimestre natural el
   importe total de las entregas de bienes y prestaciones de servicios que
   deban consignarse en la declaración recapitulativa supera 100.000 euros
   (a partir de 2012, el umbral se fija en 50.000 euros).

 * Trimestral: Cuando ni durante el trimestre de referencia ni en cada uno
   de los cuatro trimestres naturales anteriores el importe total de las
   entregas de bienes y prestaciones de servicios que deban consignarse en la
   declaración recapitulativa sea superior a 100.000 euros.

 * Anual: En los treinta primeros días de enero del año siguiente ( la
   primera sería en enero de 2011) si el importe total de las entregas de
   bienes o prestaciones de servicios  del año ( excluido IVA), no supera los
   35.000 € y el importe total de las entregas de bienes a otro Estado
   Miembro (salvo medios de transporte nuevos) exentas de IVA no sea superior
   a 15.000 €.
    

Code Analysis

Views touched (16)
XML IDNameModelTypeStatus
view_account_fiscal_position_add_mod349_form Fiscal position | add 'include in AEAT 349' field (form) account.fiscal.position field Inherits account.view_account_position_form
view_account_fiscal_position_add_mod349_tree Fiscal position | add 'include in AEAT 349' field (tree) account.fiscal.position field Inherits account.view_account_position_tree
view_customer_account_invoice_form__add_operation_key Account invoice (customer) | add 'operation_key' field (form) account.invoice field Inherits view_customer_account_invoice_form__replace_fiscal_position
view_customer_account_invoice_form__replace_fiscal_position Account invoice (customer) | replace 'fiscal position' field (form) account.invoice field Inherits account.invoice_form
view_l10n_ES_aeat_mod349_partner_record_detail_form AEAT 349 Partner record detail (form) l10n.es.aeat.mod349.partner_record_detail form New
view_l10n_ES_aeat_mod349_partner_record_detail_tree AEAT 349 Partner record detail (tree) l10n.es.aeat.mod349.partner_record_detail tree New
view_l10n_ES_aeat_mod349_partner_record_form AEAT 349 Partner record (form) l10n.es.aeat.mod349.partner_record form New
view_l10n_ES_aeat_mod349_partner_record_tree AEAT 349 Partner record (tree) l10n.es.aeat.mod349.partner_record tree New
view_l10n_ES_aeat_mod349_partner_refund_detail_form AEAT 349 Partner refund detail (form) l10n.es.aeat.mod349.partner_refund_detail form New
view_l10n_ES_aeat_mod349_partner_refund_detail_tree AEAT 349 Partner refund detail (tree) l10n.es.aeat.mod349.partner_refund_detail tree New
view_l10n_ES_aeat_mod349_partner_refund_form AEAT 349 Partner refund (form) l10n.es.aeat.mod349.partner_refund form New
view_l10n_ES_aeat_mod349_partner_refund_tree AEAT 349 Partner refund (tree) l10n.es.aeat.mod349.partner_refund tree New
view_l10n_es_aeat_mod349_report_form l10n_es.aeat.mod349.report.form l10n.es.aeat.mod349.report button Inherits l10n_es_aeat.view_l10n_es_aeat_report_form
view_l10n_es_aeat_mod349_report_tree l10n_es.aeat.mod349.report.tree l10n.es.aeat.mod349.report tree Inherits l10n_es_aeat.view_l10n_es_aeat_report_tree
view_supplier_account_invoice_form__add_operation_key Account invoice (supplier) | add 'operation_key' field (form) account.invoice field Inherits view_supplier_account_invoice_form__replace_fiscal_position
view_supplier_account_invoice_form__replace_fiscal_position Account invoice (supplier) | replace 'fiscal position' field (form) account.invoice field Inherits account.invoice_supplier_form
Models touched (8)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • clean_refund_invoices(self, cr, uid, ids, partner_id, fiscalyear_id=None, period_id=None, month=None, period_selection=None, context=None)
    Separate refund invoices
  • create(self, cr, uid, vals, context=None)
    Writes operation key value, if invoice is created in backgroud with intracommunity fiscal position defined
  • on_change_fiscal_position(self, cr, uid, ids, fiscal_position, invoice_type, context=None)
    Suggest an operation key when fiscal position changes.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • get_record_name(self, cr, uid, ids, field_name, args, context=None)
    Returns the record name.
  • onchange_format_partner_vat(self, cr, uid, ids, partner_vat, country_id, context=None)
    Formats VAT to match XXVATNUMBER (where XX is country code)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • onchange_format_partner_vat(self, cr, uid, ids, partner_vat, country_id, context=None)
    Formats VAT to match XXVATNUMBER (where XX is country code)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • button_confirm(self, cr, uid, ids, context=None)
    Checks if all the fields of the report are correctly filled
  • calculate(self, cr, uid, ids, context=None)
    Computes the records in report.
  • onchange_period_selection(self, cr, uid, ids, period_selection, fiscalyear_id, context=None)
REPOSITORY
REPOSITORYOCA/l10n-spain
GIT
GIThttps://github.com/OCA/l10n-spain.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-spain/tree/6.1/l10n_es_aeat_mod349
VERSION
VERSION 1.0
CATEGORY
CATEGORYLocalisation/Accounting
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Pexego
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Pexego
COMMITTERS
COMMITTERSAlexandre Fayolle, Pedro M. Baeza, Omar (pexego), Mikel, Ignacio Ibeas - Acysos S.L., Jordi Ballester
WEBSITE
WEBSITEhttp://www.pexego.es
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:04:05
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/l10n-spain:
    - l10n_es_aeat
odoo/odoo:
    - account
    - base_setup
    - base
    - product
    - process
    - decimal_precision
    - analytic
    - board
    - edi
    - email_template
    - mail
    - base_tools
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Módulo para la presentación del Modelo AEAT 349 (Declaración Recapitulativa de Operaciones Intracomunitarias)

Basado en la Orden EHA/769/2010 por el que se aprueban los diseños físicos y lógicos del 349.

De acuerdo con la normativa de la Hacienda Española, están obligados a presentar el modelo 349:

    * Todos aquellos sujetos pasivos del Impuesto sobre el Valor Añadido que hayan realizado las operaciones previstas en el artículo 79 del Reglamento del Impuesto sobre el Valor Añadido, es decir, quienes adquieran o vendan bienes a empresas situadas en países miembros de la UE, sino también aquellos que presten servicios a miembros de la UE y cumplan con las siguientes condiciones:

        - Que conforme a las reglas de la localización aplicables a las mismas, no se entiendan prestadas en el territorio de aplicación del Impuesto.

        - Que estén sometidas efectivamente a gravamen de otro Estado miembro.

        - Que su destinatario sea un empresario o profesional actuando como tal y radique en dicho Estado miembro la sede de su actividad económica, o tenga en el mismo un establecimiento permanente o, en su defecto, el lugar de su domicilio o residencia habitual, o que dicho destinatario sea una persona jurídica que no actúe como empresario o profesional pero tenga asignado un número de identificación a efectos del Impuesto suministrado por ese Estado miembro.

        - Que el sujeto pasivo sea dicho destinatario.


    El período de declaración comprenderá, con carácter general las operaciones realizadas en cada mes natural, y se presentará durante los veinte primeros días naturales del mes inmediato siguiente al correspondiente período mensual. No obstante, la presentación podrá ser bimestral, trimestral o anual en los siguientes supuestos:

    * Bimestral: Si al final del segundo mes de un trimestre natural el importe total de las entregas de bienes y prestaciones de servicios que deban consignarse en la declaración recapitulativa supera 100.000 euros (a partir de 2012, el umbral se fija en 50.000 euros).

    * Trimestral: Cuando ni durante el trimestre de referencia ni en cada uno de los cuatro trimestres naturales anteriores el importe total de las entregas de bienes y prestaciones de servicios que deban consignarse en la declaración recapitulativa sea superior a 100.000 euros.

    * Anual: En los treinta primeros días de enero del año siguiente ( la primera sería en enero de 2011) si el importe total de las entregas de bienes o prestaciones de servicios  del año ( excluido IVA), no supera los 35.000 € y el importe total de las entregas de bienes a otro Estado Miembro (salvo medios de transporte nuevos) exentas de IVA no sea superior a 15.000 €.

Desarrollado por Pexego (www.pexego.es) en colaboración con Borja López Soilán y Jordi Esteve (Zikzakmedia, www.zikzakmedia.com)

Code Analysis

Views touched (17)
XML IDNameModelTypeStatus
view_account_fiscal_position_add_mod349_form Fiscal position | add 'include in AEAT 349' field (form) account.fiscal.position field Inherits account.view_account_position_form
view_account_fiscal_position_add_mod349_tree Fiscal position | add 'include in AEAT 349' field (tree) account.fiscal.position field Inherits account.view_account_position_tree
view_customer_account_invoice_form__add_operation_key Account invoice (customer) | add 'operation_key' field (form) account.invoice field Inherits view_customer_account_invoice_form__replace_fiscal_position
view_customer_account_invoice_form__replace_fiscal_position Account invoice (customer) | replace 'fiscal position' field (form) account.invoice field Inherits account.invoice_form
view_l10n_ES_aeat_mod349_partner_record_detail_form AEAT 349 Partner record detail (form) l10n.es.aeat.mod349.partner_record_detail form New
view_l10n_ES_aeat_mod349_partner_record_detail_tree AEAT 349 Partner record detail (tree) l10n.es.aeat.mod349.partner_record_detail tree New
view_l10n_ES_aeat_mod349_partner_record_form AEAT 349 Partner record (form) l10n.es.aeat.mod349.partner_record form New
view_l10n_ES_aeat_mod349_partner_record_tree AEAT 349 Partner record (tree) l10n.es.aeat.mod349.partner_record tree New
view_l10n_ES_aeat_mod349_partner_refund_detail_form AEAT 349 Partner refund detail (form) l10n.es.aeat.mod349.partner_refund_detail form New
view_l10n_ES_aeat_mod349_partner_refund_detail_tree AEAT 349 Partner refund detail (tree) l10n.es.aeat.mod349.partner_refund_detail tree New
view_l10n_ES_aeat_mod349_partner_refund_form AEAT 349 Partner refund (form) l10n.es.aeat.mod349.partner_refund form New
view_l10n_ES_aeat_mod349_partner_refund_tree AEAT 349 Partner refund (tree) l10n.es.aeat.mod349.partner_refund tree New
view_l10n_es_aeat_mod349_report_form AEAT Model 349 (form) l10n.es.aeat.mod349.report form New
view_l10n_es_aeat_mod349_report_search AEAT Model 349 (search) l10n.es.aeat.mod349.report search New
view_l10n_es_aeat_mod349_report_tree AEAT Model 349 (tree) l10n.es.aeat.mod349.report tree New
view_supplier_account_invoice_form__add_operation_key Account invoice (supplier) | add 'operation_key' field (form) account.invoice field Inherits view_supplier_account_invoice_form__replace_fiscal_position
view_supplier_account_invoice_form__replace_fiscal_position Account invoice (supplier) | replace 'fiscal position' field (form) account.invoice field Inherits account.invoice_supplier_form
Models touched (0)

No models found for this module.