Mostrando las listas de materiales padres

3 de setiembre de 2023 por
Gustavo Orrillo
| Sin comentarios aún
 

El módulo de mrp de Odoo es decente, pero tiene una gran falencia que es no muestra el contexto en el que se encuentra una lista de materiales. No muestra las listas de materiales padres por ejemplo, y ademas es dificil de navegar (por ello publicamos el post de facilitando la navegacion en las listas de materiales).

Siguiendo con esa linea desarrollamos otro módulo llamado bom_display_parents, el cual se instala como cualquier módulo. Lo que hace es mostrar en cada lista de materiales un cuadrito que indica cuales son los padres que utilizan la LdM con la que estamos trabajando


En otras palabras, reemplaza el "Donde se usa" del formulario de productos y lo traslada al formulario de la lista de materiales. Tiene una limitante, no te muestra todas las listas de materiales padres (solo muestra las listas de materiales en las que se encuentra el producto de la LdM). Esa recursividad para mostrar todos los padres la podemos agregar a futuro.

Notas técnicas 

A nivel modelo declara un campo computado con el texto que se mostrará en el formulario. En el texto por cada lista de materiales de la que participa la LdM actual, agregamos un item a la lista que se mostrará

def _compute_used_in_bom_text(self):
for rec in self:
res = ''
if rec.used_in_bom_count > 0:
res = '<p>This BoM is used in:</p><ul>'
product_id = self.env['product.product'].search(\
​[('product_tmpl_id','=',rec.product_tmpl_id.id)],limit=1)
bom_lines = self.env['mrp.bom.line'].search(\
​[('product_id','=',product_id.id)])
for bom_line in bom_lines:
res = res + '<li> ' + bom_line.bom_id.display_name + ' </li>'
res = res + '</ul>'
rec.used_in_bom_text = res

Despues debemos mostrar el campo computado en el formulario. Para ello utilizamos otra vez el xpath y antes del sheet que se muestra con el formulario, agregamos un div con la clase alert-danger para darle el estilo apropiado al cuadro con la información

   <record model="ir.ui.view" id="bom_display_parents"> 
<field name="name">bom_display_parents</field>
<field name="model">mrp.bom</field>
<field name="inherit_id" ref="mrp.mrp_bom_form_view"></field>
<field name="arch" type="xml">
<xpath expr="//sheet" position="before" >
<field name="used_in_bom_count" invisible="1" />
<div attrs="{'invisible': [('used_in_bom_count','=',0)]}">
<div class="alert alert-danger" role="alert"
​style="margin-bottom:0px;">
<field name="used_in_bom_text"
​widget="html" />
</div>
</div>
</xpath>
</field>
</record>

Y como el contenido del texto que queremos mostrar es html, mostramos el campo con el widget html

Gustavo Orrillo 3 de setiembre de 2023
Compartir
Archivar
Identificarse dejar un comentario