Ir al contenido
Menú
Se marcó esta pregunta
1 Responder
2708 Vistas

Hello everyone, 

I am using Odoo v12 and I am trying to create a function that if an item is not available it can't be selected or is removed from the list right after it is selected.

I want to show the warning message if an unavailable item is selected and also not allow the item to get added to the list.

As of right now, the item will still get added to the list and the message will pop up. I was able to clear the whole list using the commented out code [r.items = ' '], but I wanted to remove just the item that is unavailable.

Any ideas?

items = fields.Many2many('blockbuster.inventory', required=True)

@api.onchange('items') def _verify_movie_availability(self): for r in self: for t in r.items: get_item_id = t.id if get_item_id: get_movie = self.env['blockbuster.inventory'].search([('id', '=', get_item_id)]) if get_movie.available <= 0: # r.items = '' return { 'warning': { 'title': 'Item Unavailable', 'message': f'Sorry, "{get_movie.name}" is not available. Please remove it from the items list.', }, }
Avatar
Descartar
Mejor respuesta

Hi,

You can pass domain in onchange function in odoo 12. If you are upgrading to higher versions like odoo 14 , this method of passing domain is deprecated.

@api.onchange('items')

def _verify_movie_availability(self):

    get_movies_list = []

    get_movie_ids = self.env['blockbuster.inventory'].search([]) 

    for movie_id in get_movie_ids.filtered(lambda l: l.available > 0):

        get_movies_list.append(movie_id.id)

    return {'domain': {'items': [('id', 'in', get_movies_list)]}}  

And then you can select only the items with available greater than zero.


Hope it helps,

Thanks

Avatar
Descartar
Publicaciones relacionadas Respuestas Vistas Actividad
0
feb 19
3111
0
jul 20
2949
0
ene 20
6006
3
mar 19
8333
2
ene 18
3721