Hello,
I am trying to install my custom module that extends the stock.quant model. However, when I attempt to install it, I get the following error:
ValueError: The _name attribute Applicant is not valid.
This error appears during module installation and prevents the module from installing properly.
Other modules that extend stock.quant using _inherit work fine.
This is my code:
from odoo import models, fields, api
class StockQuant(models.Model):# Importante: mismo nombre para extender
_name = 'stock.quant' # REQUERIDO para herencia múltiple
_inherit = ['stock.quant', 'mail.thread', 'mail.activity.mixin'] # Herencia múltiple para chatter y actividades
_mail_post_access = 'read'
has_comments = fields.Boolean(
string='Comentarios',
compute='_compute_has_comments',
store=True,
help='Indica si el ajuste tiene comentarios',
)
inventory_quantity = fields.Float(
string='Cantidades contadas',
digits='Product Unit of Measure',
help='Cantidad contada durante el inventario físico',
default=0.0,
)
@api.depends('message_ids')
def _compute_has_comments(self):
"""Computar si tiene comentarios"""
for record in self:
# Filtrar solo mensajes de usuarios (no notificaciones del sistema)
user_messages = record.message_ids.filtered(
lambda m: m.message_type in ('comment', 'email')
)
record.has_comments = bool(user_messages)
def message_post(self, **kwargs):
"""Override para forzar recálculo después de añadir mensaje"""
result = super().message_post(**kwargs)
# Forzar recálculo inmediato
self.sudo()._compute_has_comments()
return result
def action_open_quant_form_modal(self):
self.ensure_one()
action = self.env.ref('stock_quant_comments.action_stock_quant_with_chatter').sudo().read()[0]
action.update({
'res_id': self.id,
'name': 'Comentarios - ' + self.product_id.name,
})
return action
class MailMessage(models.Model):
_inherit = 'mail.message'
def unlink(self):
"""Override para recalcular has_comments cuando se eliminan mensajes"""
# Recopilar todos los stock.quant afectados ANTES de eliminar
affected_quants = self.env['stock.quant']
for message in self:
if message.model == 'stock.quant' and message.res_id:
try:
quant = self.env['stock.quant'].browse(message.res_id)
if quant.exists():
affected_quants |= quant
except Exception:
pass # Ignorar errores de acceso
# Ejecutar eliminación normal
result = super().unlink()
# Recalcular después de eliminar
if affected_quants:
try:
affected_quants.sudo()._compute_has_comments()
# Forzar commit para asegurar que se guarde
self.env.cr.commit()
except Exception:
pass # Ignorar errores y continuar
return result