General

¡Bienvenido a los foros Aeodoo!

Somos la comunidad de Odoo internacional hispanohablante.
Estos foros son para compartir y debatir dudas técnicas, funcionales y mejores prácticas para Odoo. Recuerda que no están permitidos los insultos, descalificaciones o spam, cualquier conducta reprobable supondrá el baneo del usuario.

0

Error módulo utiliza misma tabla y columnas

Avatar
SGDev

Buenas noches,


Tengo el siguiente error al instalar un módulo en Odoo 16:


TypeError: Many2many fields account.journal.inbound_payment_method_ids and account.journal.outbound_payment_method_ids use the same table and columns


Según entiendo, el módulo quiere utilizar la misma tabla y columnas que otro ya instalado (no se si es normal o no) ¿Alguien sabría decirme como podría solucionarlo? El problema me ocurre a la hora de instalar una de las últimas dependencias que me pide el módulo facturae. Si necesito aportar cualquier otro tipo de información para que me ayuden ruego me lo digan.


Saludos.


1 Comment
Avatar
Discard
Avatar
SGDev
-

Buenos días,

Muchas gracias por la respuesta, en GitHub me cerraron el hilo, no pude resolver el problema con la respuesta.

La instalación de odoo, es directamente la 16.0 y todos los módulos son de la versión 16.0. No he tenido ningún problema en la instalación del resto de módulos, solamente con este último (la única alternativa gratuita que he encontrado para facturación electrónica), facturae versión 16.0 del respositorio GitHub de OCA/l10n-spain, concretamente en la instalación de la dependencia Account Payment Mode, me da el siguiente error a la hora de activarlo, no se si es que esa versión del módulo no es compatible con otros ya instalados.

RPC_ERROR
Odoo Server Error
Traceback (most recent call last):
File "/opt/odoo/odoo-server/odoo/http.py", line 1584, in _serve_db
return service_model.retrying(self._serve_ir_http, self.env)
File "/opt/odoo/odoo-server/odoo/service/model.py", line 133, in retrying
result = func()
File "/opt/odoo/odoo-server/odoo/http.py", line 1611, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "/opt/odoo/odoo-server/odoo/http.py", line 1815, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "/opt/odoo/odoo-server/odoo/addons/base/models/ir_http.py", line 154, in _dispatch
result = endpoint(**request.params)
File "/opt/odoo/odoo-server/odoo/http.py", line 697, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "/opt/odoo/odoo-server/addons/web/controllers/dataset.py", line 46, in call_button
action = self._call_kw(model, method, args, kwargs)
File "/opt/odoo/odoo-server/addons/web/controllers/dataset.py", line 33, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/opt/odoo/odoo-server/odoo/api.py", line 461, in call_kw
result = _call_kw_multi(method, model, args, kwargs)
File "/opt/odoo/odoo-server/odoo/api.py", line 448, in _call_kw_multi
result = method(recs, *args, **kwargs)
File "", line 2, in button_immediate_install
File "/opt/odoo/odoo-server/odoo/addons/base/models/ir_module.py", line 76, in check_and_log
return method(self, *args, **kwargs)
File "/opt/odoo/odoo-server/odoo/addons/base/models/ir_module.py", line 491, in button_immediate_install
return self._button_immediate_function(type(self).button_install)
File "/opt/odoo/odoo-server/odoo/addons/base/models/ir_module.py", line 615, in _button_immediate_function
registry = modules.registry.Registry.new(self._cr.dbname, update_module=True)
File "", line 2, in new
File "/opt/odoo/odoo-server/odoo/tools/func.py", line 87, in locked
return func(inst, *args, **kwargs)
File "/opt/odoo/odoo-server/odoo/modules/registry.py", line 90, in new
odoo.modules.load_modules(registry, force_demo, status, update_module)
File "/opt/odoo/odoo-server/odoo/modules/loading.py", line 488, in load_modules
processed_modules += load_marked_modules(cr, graph,
File "/opt/odoo/odoo-server/odoo/modules/loading.py", line 372, in load_marked_modules
loaded, processed = load_module_graph(
File "/opt/odoo/odoo-server/odoo/modules/loading.py", line 207, in load_module_graph
registry.setup_models(cr)
File "/opt/odoo/odoo-server/odoo/modules/registry.py", line 297, in setup_models
model._setup_fields()
File "/opt/odoo/odoo-server/odoo/models.py", line 2803, in _setup_fields
field.setup(self)
File "/opt/odoo/odoo-server/odoo/fields.py", line 538, in setup
self.setup_nonrelated(model)
File "/opt/odoo/odoo-server/odoo/fields.py", line 4688, in setup_nonrelated
raise TypeError(msg % (self, field))
TypeError: Many2many fields account.journal.inbound_payment_method_ids and account.journal.outbound_payment_method_ids use the same table and columns

Saludos.


2 Answers
1
Avatar
Valentín Vinagre
Best Answer

Hola SGDev,

los campos 'inbound_payment_method_ids' y 'outbound_payment_method_ids' si no me equivoco en versión 16.0 ya no existen, por lo que esto puede estar pasando seguramente por otros motivos. ¿Has realizado una migración de esa base de datos de versión X a versión 16.0? ¿Estas utilizando todos los módulos de la versión 16.0 o de otras versiones?

Si no me equivoco esta pregunta se comento por github: github.com/oca/l10n-spain/issues/3204

Un saludo,

4 Comments
Avatar
Discard
Avatar
SGDev
-

Me he dado cuenta que no he respondido en comentario

Avatar
Valentín Vinagre
-

Hola SGDev,
¿Me podrías indicar cual es el contenido del archivo siguiente?
account_payment_mode/models/account_journal.py

Un saludo

Un saludo,

Avatar
SGDev
-

Buenas,

El contenido de ese archivo es:

# Copyright 2016-2020 Akretion France (http://www.akretion.com/)
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).

from odoo import _, api, fields, models
from odoo.exceptions import ValidationError

class AccountJournal(models.Model):
_inherit = "account.journal"

def _default_outbound_payment_methods(self):
all_out = self.env["account.payment.method"].search(
[("payment_type", "=", "outbound")]
)
return all_out

def _default_inbound_payment_methods(self):
all_in = self.env["account.payment.method"].search(
[("payment_type", "=", "inbound")]
)
return all_in

outbound_payment_method_ids = fields.Many2many(
default=_default_outbound_payment_methods
)
inbound_payment_method_ids = fields.Many2many(
default=_default_inbound_payment_methods
)

@api.constrains("company_id")
def company_id_account_payment_mode_constrains(self):
for journal in self:
mode = self.env["account.payment.mode"].search(
[
("fixed_journal_id", "=", journal.id),
("company_id", "!=", journal.company_id.id),
],
limit=1,
)
if mode:
raise ValidationError(
_(
"The company of the journal '%s' does not match "
"with the company of the payment mode '%s' where it is "
"being used as Fixed Bank Journal."
)
% (journal.name, mode.name)
)
mode = self.env["account.payment.mode"].search(
[
("variable_journal_ids", "in", [journal.id]),
("company_id", "!=", journal.company_id.id),
],
limit=1,
)
if mode:
raise ValidationError(
_(
"The company of the journal '%s' does not match "
"with the company of the payment mode '%s' where it is "
"being used in the Allowed Bank Journals."
)
% (journal.name, mode.name)
)

Avatar
Valentín Vinagre
-

Hola SGDev,
te indico la url del archivo en versión 16 para que veas que no tienes la versión correcta:
https://github.com/OCA/bank-payment/blob/16.0/account_payment_mode/models/account_journal.py

Seguramente tengas el de versión 14.0 porque es la última que cambia ese campos que son de odoo base, te dejo el link:
https://github.com/OCA/bank-payment/blob/14.0/account_payment_mode/models/account_journal.py

Es posible que te pase esto debido a que no has cambiado de rama al realizar el git clone del repositorio ya que la rama por defecto es la 14.0.

Un saludo,

0
Avatar
SGDev
Best Answer

Buenas,

¿Alguna idea de como podría solucionarlo? he desinstalado el módulo facturae y sus dependencias (con estas el módulo de facturación incluido ya que comparte algunas), por otra parte he clonado el repositorio según el enlace que me has facilitado, tambien el contenido de account_journal.py lo he copiado según la versión 16. Pero me sigue dando error: 


RPC_ERROR
Odoo Server Error
Traceback (most recent call last):
File "/opt/odoo/odoo-server/odoo/http.py", line 1584, in _serve_db
return service_model.retrying(self._serve_ir_http, self.env)
File "/opt/odoo/odoo-server/odoo/service/model.py", line 133, in retrying
result = func()
File "/opt/odoo/odoo-server/odoo/http.py", line 1611, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "/opt/odoo/odoo-server/odoo/http.py", line 1815, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "/opt/odoo/odoo-server/odoo/addons/base/models/ir_http.py", line 154, in _dispatch
result = endpoint(**request.params)
File "/opt/odoo/odoo-server/odoo/http.py", line 697, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "/opt/odoo/odoo-server/addons/web/controllers/dataset.py", line 46, in call_button
action = self._call_kw(model, method, args, kwargs)
File "/opt/odoo/odoo-server/addons/web/controllers/dataset.py", line 33, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/opt/odoo/odoo-server/odoo/api.py", line 461, in call_kw
result = _call_kw_multi(method, model, args, kwargs)
File "/opt/odoo/odoo-server/odoo/api.py", line 448, in _call_kw_multi
result = method(recs, *args, **kwargs)
File "", line 2, in button_immediate_install
File "/opt/odoo/odoo-server/odoo/addons/base/models/ir_module.py", line 76, in check_and_log
return method(self, *args, **kwargs)
File "/opt/odoo/odoo-server/odoo/addons/base/models/ir_module.py", line 491, in button_immediate_install
return self._button_immediate_function(type(self).button_install)
File "/opt/odoo/odoo-server/odoo/addons/base/models/ir_module.py", line 615, in _button_immediate_function
registry = modules.registry.Registry.new(self._cr.dbname, update_module=True)
File "", line 2, in new
File "/opt/odoo/odoo-server/odoo/tools/func.py", line 87, in locked
return func(inst, *args, **kwargs)
File "/opt/odoo/odoo-server/odoo/modules/registry.py", line 90, in new
odoo.modules.load_modules(registry, force_demo, status, update_module)
File "/opt/odoo/odoo-server/odoo/modules/loading.py", line 488, in load_modules
processed_modules += load_marked_modules(cr, graph,
File "/opt/odoo/odoo-server/odoo/modules/loading.py", line 372, in load_marked_modules
loaded, processed = load_module_graph(
File "/opt/odoo/odoo-server/odoo/modules/loading.py", line 207, in load_module_graph
registry.setup_models(cr)
File "/opt/odoo/odoo-server/odoo/modules/registry.py", line 297, in setup_models
model._setup_fields()
File "/opt/odoo/odoo-server/odoo/models.py", line 2803, in _setup_fields
field.setup(self)
File "/opt/odoo/odoo-server/odoo/fields.py", line 538, in setup
self.setup_nonrelated(model)
File "/opt/odoo/odoo-server/odoo/fields.py", line 4688, in setup_nonrelated
raise TypeError(msg % (self, field))
TypeError: Many2many fields account.journal.inbound_payment_method_ids and account.journal.outbound_payment_method_ids use the same table and columns

El archivo ha quedado así:


GNU nano 6.2 /home/prana/bank-payment/account_payment_mode/models/account_journal.py 
# Copyright 2016-2020 Akretion France (http://www.akretion.com/)
# @author: Alexis de Lattre
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).

from odoo import _, api, models
from odoo.exceptions import ValidationError


class AccountJournal(models.Model):
_inherit = "account.journal"

def _default_outbound_payment_methods(self):
all_out = self.env["account.payment.method"].search(
[("payment_type", "=", "outbound")]
)
return all_out

def _default_inbound_payment_methods(self):
method_info = self.env[
"account.payment.method"
]._get_payment_method_information()
unique_codes = tuple(
code for code, info in method_info.items() if info.get("mode") == "unique"
)
all_in = self.env["account.payment.method"].search(
[
("payment_type", "=", "inbound"),
("code", "not in", unique_codes), # filter out unique codes
]
)
return all_in

@api.constrains("company_id")
def company_id_account_payment_mode_constrains(self):
for journal in self:
mode = self.env["account.payment.mode"].search(
[
("fixed_journal_id", "=", journal.id),
("company_id", "!=", journal.company_id.id),
],
limit=1,
)
if mode:
raise ValidationError(


2 Comments
Avatar
Discard
Avatar
SGDev
-

Si la rama que me descargue es incorrecta, me he perdido en cuanto a las dependencias incorrectas que he podido instalar, la cosa es que según he estado mirando en los módulos y dependencias en la información aparece como versión 16. Me funciona todo sin problema menos esto. Descargué nuevamente la rama correcta y sobreescribí, no sé si debería haberlo hecho así, estoy por instalar odoo nuevamente e instalar primero este módulo (facturae), a ver si así no falla.
Valentín si ves algo que yo no vea ruego si me lo puedes decir.
Muchas gracias por todo, saludos.

Avatar
Valentín Vinagre
-

Hola SGDev,
siempre hay que descargar y utilizar los módulos de la versión correspondiente e ir actualizando todas las partes del sistema por igual ya que hay muchas interacciones entre módulos, etc (el trabajo de mantenimiento).
Desconozco todo lo que ha podido producir este cambio ni como estaba la instalación que utilizas, por lo que no puedo decirte algo en específico para arreglarlo todo. Se tendría que revisar el caso para ir viendo.
La opción mas sencilla es la que indicas, reinstalar Odoo y listo, pero algunas veces esto no es posible y hay que ir revisando los errores del sistema y haciendo los arreglos pertinentes.

Es posible que un módulo en una versión anterior funcione en una versión más alta ya que su "migración" no tenga excesivos cambios, pero pocas veces pasa esto. Así que es normal que pueda funcionar todo o alguna parte o nada en una versión superior (que no funcione una pequeña parte no significa que el resto esté bien).

Un saludo,

Your Answer

Please try to give a substantial answer. If you wanted to comment on the question or answer, just use the commenting tool. Please remember that you can always revise your answers - no need to answer the same question twice. Also, please don't forget to vote - it really helps to select the best questions and answers!