Skip to content

Commit

Permalink
Merge c17c0d7 into 7c4508c
Browse files Browse the repository at this point in the history
  • Loading branch information
pedrobaeza committed Feb 15, 2019
2 parents 7c4508c + c17c0d7 commit c53b458
Show file tree
Hide file tree
Showing 61 changed files with 5,915 additions and 4,480 deletions.
1 change: 1 addition & 0 deletions l10n_es_aeat/models/l10n_es_aeat_map_tax_line.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ class L10nEsAeatMapTaxLine(models.Model):
selection=[
('base', 'Base'),
('amount', 'Amount'),
('both', 'Both'),
],
string="Field type",
default='amount',
Expand Down
8 changes: 7 additions & 1 deletion l10n_es_aeat/models/l10n_es_aeat_report_tax_mapping.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,14 @@ def _get_move_line_domain(self, codes, date_start, date_end, map_line):
'payable_refund')))
if map_line.field_type == 'base':
move_line_domain.append(('tax_ids', 'in', taxes.ids))
else: # field_type == 'amount'
elif map_line.field_type == 'amount':
move_line_domain.append(('tax_line_id', 'in', taxes.ids))
else: # map_line.field_type == 'both'
move_line_domain += [
'|',
('tax_line_id', 'in', taxes.ids),
('tax_ids', 'in', taxes.ids)
]
if map_line.sum_type == 'debit':
move_line_domain.append(('debit', '>', 0))
elif map_line.sum_type == 'credit':
Expand Down
76 changes: 54 additions & 22 deletions l10n_es_aeat/tests/test_l10n_es_aeat_mod_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,18 @@ class TestL10nEsAeatModBase(common.TransactionCase):
# Set 'debug' attribute to True to easy debug this test
# Do not forget to include '--log-handler aeat:DEBUG' in Odoo command line
debug = False
# These 2 dictionaries below allows to define easily several taxes to apply
# to invoice lines through the methods _invoice_sale/purchase_create.
# The structure is:
# * One dictionary entry per invoice line.
# * The key of the entry will be the code of the tax.
# * You can duplicate invoice lines with the same tax using a suffix '//X',
# being X any string.
# * You can include more than one tax in the same invoice line, splitting
# each tax code by a comma.
# * The value of the entry will be a list, being the first element of the
# the list, the price_unit amount. The rest of the elements can be for
# reference, but not used, like the tax amount in second position.
taxes_sale = {}
taxes_purchase = {}
taxes_result = {}
Expand Down Expand Up @@ -79,7 +91,7 @@ def _print_tax_lines(self, lines):
line.field_number, line.amount)
self._print_move_lines(line.move_line_ids)

def _invoice_sale_create(self, dt):
def _invoice_sale_create(self, dt, extra_vals=None):
data = {
'company_id': self.company.id,
'partner_id': self.customer.id,
Expand All @@ -96,25 +108,33 @@ def _invoice_sale_create(self, dt):
if self.debug:
_logger.debug('%14s %9s' % (desc, values[0]))
# Allow to duplicate taxes skipping the unique key constraint
desc = desc.split('//')[0]
tax = self.env['account.tax'].search([
('company_id', '=', self.company.id),
('description', '=', desc),
])
data['invoice_line_ids'].append((0, 0, {
'name': 'Test for tax %s' % desc,
descs = desc.split('//')[0]
line_data = {
'name': 'Test for tax(es) %s' % descs,
'account_id': self.accounts['700000'].id,
'price_unit': values[0],
'quantity': 1,
'invoice_line_tax_ids': [(6, 0, [tax.id])],
}))
'invoice_line_tax_ids': [],
}
for desc in descs.split(','):
tax = self.env['account.tax'].search([
('company_id', '=', self.company.id),
('description', '=', desc),
])
if tax:
line_data['invoice_line_tax_ids'].append((4, tax.id))
else:
_logger.error("Tax not found: {}".format(desc))
data['invoice_line_ids'].append((0, 0, line_data))
if extra_vals:
data.update(extra_vals)
inv = self.env['account.invoice'].sudo(self.billing_user).create(data)
inv.action_invoice_open()
if self.debug:
self._print_move_lines(inv.move_id.line_ids)
return inv

def _invoice_purchase_create(self, dt):
def _invoice_purchase_create(self, dt, extra_vals=None):
data = {
'company_id': self.company.id,
'partner_id': self.supplier.id,
Expand All @@ -131,20 +151,26 @@ def _invoice_purchase_create(self, dt):
if self.debug:
_logger.debug('%14s %9s' % (desc, values[0]))
# Allow to duplicate taxes skipping the unique key constraint
desc = desc.split('//')[0]
tax = self.env['account.tax'].search([
('company_id', '=', self.company.id),
('description', '=', desc),
])
if not tax:
_logger.error("Tax not found: {}".format(desc))
data['invoice_line_ids'].append((0, 0, {
'name': 'Test for tax %s' % tax,
descs = desc.split('//')[0]
line_data = {
'name': 'Test for tax(es) %s' % descs,
'account_id': self.accounts['600000'].id,
'price_unit': values[0],
'quantity': 1,
'invoice_line_tax_ids': [(6, 0, [tax.id])],
}))
'invoice_line_tax_ids': [],
}
for desc in descs.split(','):
tax = self.env['account.tax'].search([
('company_id', '=', self.company.id),
('description', '=', desc),
])
if tax:
line_data['invoice_line_tax_ids'].append((4, tax.id))
else:
_logger.error("Tax not found: {}".format(desc))
data['invoice_line_ids'].append((0, 0, line_data))
if extra_vals:
data.update(extra_vals)
inv = self.env['account.invoice'].sudo(self.billing_user).create(data)
inv.action_invoice_open()
if self.debug:
Expand Down Expand Up @@ -183,6 +209,12 @@ def _journals_create(self):
'type': 'general',
'code': 'TMISC',
})
self.journal_cash = self.env['account.journal'].create({
'company_id': self.company.id,
'name': 'Test journal for cash',
'type': 'cash',
'code': 'TCSH',
})
return True

def _partners_create(self):
Expand Down
196 changes: 141 additions & 55 deletions l10n_es_aeat_mod347/README.rst
Original file line number Diff line number Diff line change
@@ -1,10 +1,29 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3

================================
Presentación del Modelo AEAT 347
================================
===============
AEAT modelo 347
===============

.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fl10n--spain-lightgray.png?logo=github
:target: https://github.com/OCA/l10n-spain/tree/10.0/l10n_es_aeat_mod347
:alt: OCA/l10n-spain
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/l10n-spain-10-0/l10n-spain-10-0-l10n_es_aeat_mod347
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/189/10.0
:alt: Try me on Runbot

|badge1| |badge2| |badge3| |badge4| |badge5|

(Declaración Anual de Operaciones con Terceros)
Basado en la Orden EHA/3012/2008, de 20 de Octubre, por el que se aprueban los
Expand Down Expand Up @@ -49,77 +68,144 @@ De acuerdo con la normativa, no están obligados a presentar el modelo 347:

(http://www.boe.es/boe/dias/2008/10/23/pdfs/A42154-42190.pdf)

Instalación
===========

Para instalar este módulo, es necesario el módulo *account_invoice_currency*,
disponible en:

https://github.com/OCA/account-financial-tools

Configuración
=============
**Table of contents**

Para aquellas empresas (clientes/proveedores) que no se quieran incluir en el
cálculo del 347, hay que marcar la casilla "No incluida en el modelo 347" desde
su formulario.
.. contents::
:local:

Uso
===
Installation
============

En Contabilidad > Informe > Informes legales > Declaraciones AEAT > Modelo 347,
se podrá acceder a crear nuevas declaraciones.

.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Pruebe en Runbot
:target: https://runbot.odoo-community.org/runbot/189/8.0
Para instalar este módulo, es necesario el módulo *account_tax_balance*,
disponible en:

Errores conocidos / Hoja de ruta
================================
https://github.com/OCA/account-financial-reporting

Usage
=====

Para realizar una declaración del modelo 347:

#. Vaya a *Facturación > Declaraciones AEAT > Modelo 347*.
#. Pulse en el botón "Crear".
#. Seleccione el año para la declaración.
#. Pulse en "Calcular".
#. Al cabo de un rato (dependerá de la cantidad de registros que tenga),
aparecerá una nueva pestaña "Registros de empresas", en la que se podrán
revisar cada uno de los registros detectados.
#. Si la línea del registro aparece en rojo, significa que falta algún dato
que debe ser rellenado para poder realizar la declaración en la AEAT.
#. Puede enviar masivamente los datos de todos los registros al primer contacto
de facturación que esté establecido en la empresa pulsando el botón
"Enviar correos electrónicos". Esto realizará el envío masivo, dejando el
mensaje enviado en el hilo de comunicación (chatter) de cada registro.
En ese momento, todos los registros pasarán a estado "Enviado"
#. Puede acceder a los detalles del registro y ver el hilo de comunicación
pulsando sobre el smart-button "Registros" que aparece en la parte superior
derecha de la pestaña "Registros de empresa".
#. También se pueden realizar envíos aislados de cada registro si todavía no
está en estado "Enviado" (o pulsando previamente en el botón "Establecer a
pendiente" de la vista de detalle), pulsando sobre el botón "Enviar" de la
vista de detalle, o en el icono del sobre en la vista de listado.
#. Puede registrar a mano la conformidad o disconformidad del registro pulsando
sobre los botones del check de verificación o de la X en la vista de
listado, o bien sobre los botones "Confirmar como válido" o
"Establecer a no válido" de la vista de detalle del registro.
#. Cuando establezca como válido el registro, la línea aparecerá en un gris
atenuado, y si por el contrario lo establece como no válido, aparecerá en
un marrón claro.
#. En la plantilla del correo enviado a las empresas, se incluyen 2 botones
que permiten la aceptación/rechazo automático del registro. **NOTA:** Para
poder realizarlo, su Odoo debe ser accesible al exterior y tener bien
configurados URL, redirecciones, proxy, etc. Cuando la empresa externa pulse
en uno de esos botones, se realizará la validación/rechazo en el registro.
#. La empresa externa también puede responder al correo recibido, y entonces
la respuesta se colocará en el hilo de ese registro y notificará a los
seguidores que estén del mismo. Por defecto, el único seguidor que se
añade es el usuario que ha realizado la declaración. **NOTA:** Para que
esto funcione, debe tener bien configurado todos los parámetros relativos
a catchall, correo entrante, etc.
#. También puede introducir manualmente los registros de inmuebles para
aquellos que no estén reflejados en el modelo 115.
#. Una vez cotejados todos los registros, se puede pulsar en el botón
"Confirmar" para confirmar la declaración y dejar los datos ya fijos.
#. Pulsando en el botón "Exportar a BOE", podrá obtener un archivo para su
subida en la web de la AEAT.

Known issues / Roadmap
======================

* Permitir que un asiento (y por tanto, una factura) puede tener una fecha
específica a efectos del modelo 347, para así cuadrar la fecha del proveedor
con nuestro modelo aunque a efectos de IVA se declare en el siguiente
periodo.
* Permitir indicar que una factura es de transmisión de inmuebles para tenerlo
en cuenta en la suma de totales.
* No se incluye el cálculo automático de las claves de declaración
C, D, E, F y G.
* Permitir agrupar varios partners en un solo registro por su NIF.
* Realizar declaración solo de proveedores.
* No se permite marcar las operaciones como de seguro (para entidades
aseguradoras).
* No se permite marcar las operaciones como de arrendamiento.
* No se incluye la gestión del criterio de caja.
* No se incluye la gestión de inversión de sujeto pasivo.
* No se incluye la gestión de depósito aduanero.
* No se rellena el año origen en caso de no coincidir con el actual para las
operaciones de efectivo.
* Las operaciones con retención o arrendamientos aparecen en el 347 por
defecto al tener también IVA asociado. Si no se quiere que aparezcan,
hay que marcar la empresa o la factura con la casilla de no incluir en el
347.

Bug Tracker
===========

* Las operaciones intracomunitarias no se descartan automáticamente. Es
necesario marcar la empresa como no incluida en el modelo 347.
Bugs are tracked on `GitHub Issues <https://github.com/OCA/l10n-spain/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us smashing it by providing a detailed and welcomed
`feedback <https://github.com/OCA/l10n-spain/issues/new?body=module:%20l10n_es_aeat_mod347%0Aversion:%2010.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Gestión de errores
==================
Credits
=======

Los errores/fallos se gestionan en `las incidencias de GitHub <https://github.com/OCA/
l10n-spain/issues>`_.
En caso de problemas, compruebe por favor si su incidencia ha sido ya
reportada. Si fue el primero en descubrirla, ayúdenos a solucionarla proveyendo
una detallada y bienvenida retroalimentación
`aquí <https://github.com/OCA/
l10n-spain/issues/new?body=m%f3dulo:%20
l10n_es_aeat_mod347%0Aversi%f3n:%20
8.0%0A%0A**Pasos%20para%20reproducirlo**%0A-%20...%0A%0A**Comportamiento%20actual**%0A%0A**Comportamiento%20esperado**>`_.
Authors
~~~~~~~

Créditos
========
* Tecnativa
* PESOL

Contribuidores
--------------
Contributors
~~~~~~~~~~~~

* Pexego (http://www.pexego.es)
* ASR-OSS (http://www.asr-oss.com)
* NaN·tic (http://www.nan-tic.com)
* Acysos (http://www.acysos.com)
* Pedro M. Baeza <pedro.baeza@serviciosbaeza.com>
* Joaquín Gutierrez (http://gutierrezweb.es)
* Comunitea (http://www.comunitea.com)
* Antonio Espinosa <antonioea@antiun.com>
* Angel Moya <angel.moya@pesol.es>
* Albert Cabedo <albert@gafic.com>
* `Tecnativa <https://www.tecnativa.com>`_:

* Antonio Espinosa
* Pedro M. Baeza
* Cristina Martín

Maintainer
----------
Maintainers
~~~~~~~~~~~

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

This module is maintained by the OCA.

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

To contribute to this module, please visit https://odoo-community.org.
This module is part of the `OCA/l10n-spain <https://github.com/OCA/l10n-spain/tree/10.0/l10n_es_aeat_mod347>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
4 changes: 2 additions & 2 deletions l10n_es_aeat_mod347/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from . import controllers
from . import models
from . import wizard
from .hooks import post_init_hook
Loading

0 comments on commit c53b458

Please sign in to comment.