Hola, Primero indicar que la version de odoo es la 13, estoy tratando de que se muestren ciertos botones en determinados momentos segun su fabricación, si es registro parcial o completo, para ello uso el modulo mrp.workorder de odoo, para ello se generó un formulario canvas para que se usaran en tablets.
Con este contexto copiare el codigo de todo ese formulario para si alguien me indica donde esta el fallo, ya que la ultima condicion que le pongo no la considera. la condicion es '|', ('qty_remaining', '=', 'qty_producing'), que se encuentra casi al final, mi intencion era que la condicion fuese doble, '|', (('qty_remaining', '=', 'qty_producing'), ('qty_producing'. '!=', 0)), pero no he conseguido que funcione, da error.
Gracias de antemano al que me pueda ayudar.
<?xml version="1.0"?>
<!--
mrp.workorder.view.form.inherit.quality.tablet.new_cmp_mod
version: 0.10
se añade boton de reabrir y volver a cerrar, para los casos en las que la OT esta terminada pero en el centro de trabajo necesita acceder para modificar
algun dato o se cierra por error y necesitan acceder a plano.
Hay que crear accion de servidor de reabrir y de Cerrar de nuevo.
reabrir:
env.cr.execute("""
UPDATE mrp_workorder SET state = 'progress' WHERE id = %s
""", (record.id,))
Cerrar de nuevo:
if record:
env.cr.execute("""
UPDATE mrp_workorder SET state = 'done' WHERE id = %s
""", (record.id,))
Despues con su name (leer metadatos de Accion de servidor) crear los botones y definir parametros para ocultación.
version: 0.9
0.9
x_operator
0.8
Se añade x_studio_operation_flow_control
0.7
Se añade work_instructions
0.6
GESTION DE MODIFICACIONES
BOTON COLLAPSE MOSTRAR HTML
MODIFICACIONES
NOTA OF
NOTA OT
CALIDAD FABRICA
OCULTAR BARRAS SI EL TICK NO ESTÁ HECHO
Se comenta "x_studio_cant_unitaria"
0.5
lost in translation
0.4
Se guarda en el collapse
el boton "Producto en Desarrollo Técnico: Generar Alerta de Calidad"
el cuadro "raw_workorder_line_ids"
Se saca la nota de la operacion: <field class="o_workorder_note" name="note"/>
Estas notas son un paso de las operaciones
0.3
Para el modelo (mrp.workorder.line):
Se crean los campos
x_studio_cant_unitaria
x_studio_imagen_principal
que se muestran es esta vista
-->
<data>
<xpath expr="//div[@name='odoo_data']" position="after">
<div name="raw_workorder_line_ids" class="o_workorder_data">
<field name="raw_workorder_line_ids" readonly="1" attrs="{'invisible': [('raw_workorder_line_ids', '=', [])]}">
<tree>
<field name="product_id"/>
<!-- <field name="x_studio_cant_unitaria"/> -->
<field name="qty_to_consume"/>
<field name="product_uom_id"/>
</tree>
<form string="Linea de Material">
<field name="product_id"/>
<field name="x_studio_imagen_principal" string="Imagen Principal" widget="pdf_viewer"/>
</form>
</field>
</div>
<div name="quality_alert_ids" class="o_workorder_data">
<field name="quality_alert_ids" readonly="1" attrs="{'invisible': [('quality_alert_ids', '=', [])]}">
<tree>
<field name="name"/>
<field name="title"/>
<field name="check_id"/>
</tree>
</field>
</div>
</xpath>
<!--oculta el boton iniciar cuando la workorder no esta preparada; y habilita un nuevo botón solo para el administrador de fabricacion-->
<xpath expr="//button[@name='button_start']" position="attributes">
<attribute name="attrs">{'invisible': ['|', '|', '|', ('is_user_working', '=', True), ('working_state', '=', 'blocked'), ('state', '=', 'pending')]}</attribute>
</xpath>
<xpath expr="//button[@name='button_start']" position="after">
<button name="button_start" type="object" class="btn-warning" attrs="{'invisible': ['|', '|', '|', ('is_user_working', '=', True), ('working_state', '=', 'blocked'), ('state', '!=', 'pending')]}" barcode_trigger="pause" string="Continue" groups="mrp.group_mrp_manager"/>
</xpath>
<!--oculta el boton iniciar cuando la workorder no esta preparada; y habilita un nuevo botón solo para el administrador de fabricacion-->
<!--cuando es la última OT; Muestra solo el botón "marcar como hecho y cerrar OF; (oculta el boton marcar como hecho "simple"), se añade necesidad del operador-->
<!-- se añade comprobacion de cantidad restante en la v0.10 para que no aparezca en casos de que se use reabrir-->
<xpath expr="//button[@name='do_finish']" position="attributes">
<attribute name="attrs">
{'invisible':
['|', ('is_user_working', '=', False),
'|', ('is_last_step', '!=', True),
'|', ('skipped_check_ids', '!=', []),
'|', ('is_last_lot', '=', False),
'|', ('is_last_unfinished_wo', '=', True),
'|', ('qty_remaining', '=', 0),
]}
</attribute>
<attribute name="string">
REGISTRAR PRODUCCION
</attribute>
</xpath>
<!--
<xpath expr="//button[@name='do_finish']" position="attributes">
<attribute name="invisible"> 1
</attribute>
</xpath>
-->
<xpath expr="//button[@name='action_open_manufacturing_order']" position="attributes">
<attribute name="invisible"> 1
</attribute>
</xpath>
<!--Se saca la nota de la operacion: <field class="o_workorder_note" name="note"/>-->
<xpath expr="//field[@name='note']" position="replace">
</xpath>
<xpath expr="//div[@name='collapse_menu']" position="after">
<div class="o_workorder_data" name="odoo_data">
<field class="o_workorder_note btn btn-warning btn-sm text-center" name="note"/>
</div>
<div name="x_studio_desarrollo_tecnico_wo" class="o_workorder_data">
<button name="button_quality_alert" type="object" class="btn btn-danger btn-block" string="Producto en Desarrollo Técnico: Generar Alerta de Calidad" attrs="{'invisible': [('x_studio_desarrollo_tecnico_wo', '!=', True)]}"/>
</div>
</xpath>
<!--Se saca la nota de la operacion: <field class="o_workorder_note" name="note"/>-->
<!--0.6 gestion mod. motrar nota OT y OF-->
<xpath expr="//field[@name='company_id']" position="before">
<field name="x_studio_mo_flow_control" invisible="1"/>
<field name="x_studio_wo_flow_control" invisible="1"/>
<field name="x_studio_operation_flow_control" invisible="1"/>
<field name="x_mrp_workorder_note" invisible="1"/>
<field name="x_mrp_operation_note" invisible="1"/>
<field name="x_mrp_production_note" invisible="1"/>
<field name="x_ot_nota_inspeccion" invisible="1"/>
<field name="x_ot_nota_modificacion" invisible="1"/>
</xpath>
<xpath expr="//div[@name='collapse_menu']" position="after">
<!--Boton Collapse-->
<div attrs="{'invisible':
['|','|',
('x_mrp_operation_note','=',False),
('x_mrp_workorder_note','=',False),
('x_mrp_production_note','=',False),
]}">
<a class="btn btn-danger btn-sm" data-toggle="collapse" href="#collapseNote" role="button" aria-expanded="true" aria-controls="collapseExample">
Mostrar/Ocultar Nota
</a>
<!--Boton Collapse-->
<!--Contenido-->
<div class="collapse show container border border-danger" id="collapseNote" name="collapse_note">
<div class="row">
<div class="column">
<field name="x_mrp_workorder_note" attrs="{'readonly':True}"/>
</div>
<div class="column">
<field name="x_mrp_production_note" attrs="{'readonly':True}"/>
</div>
<div class="column">
<field name="x_mrp_operation_note" attrs="{'readonly':True}"/>
</div>
</div>
</div>
<!--Contenido-->
</div>
</xpath>
<!--0.6 gestion mod. motrar nota OT y OF-->
<!-- 0.7 instrucciones de Trabajo -->
<xpath expr="//div[@name='collapse_menu']" position="after">
<!--Boton Collapse-->
<div attrs="{'invisible':[('x_studio_work_instructions','=',[])]}">
<a class="btn btn-info btn-sm" data-toggle="collapse" href="#collapse_work_instruction" role="button" aria-expanded="true" aria-controls="collapseExample">
Mostrar/Ocultar Instrucciones de trabajo
</a>
<!--Boton Collapse-->
<!--Contenido-->
<div class="collapse show container" id="collapse_work_instruction" name="collapse_note">
<div class="row">
<div class="column">
<field name="x_studio_work_instructions" widget="many2many_tags" options="{'no_create_edit': True}"/>
<field name="x_studio_work_instructions_descr" attrs="{'readonly':True}" />
</div>
</div>
</div>
<!--Contenido-->
</div>
</xpath>
<!-- 0.7 instrucciones de Trabajo -->
<!--0.8 Control de flujo-->
<xpath expr="//div[@class='o_actions']" position="attributes" name="pausa">
<attribute name="attrs">
{'invisible':
[
'|','|','|','|','|','|','|','|','|',
('working_state', '=', 'blocked'),
('state', '=', 'pending'),
#pausa
('x_studio_mo_flow_control','in',[1]),
('x_studio_wo_flow_control','in',[1]),
('x_studio_operation_flow_control','in',[1]),
#operador
'&',
('x_operator','=',False),
('x_studio_operator_required','=',True),
#nota operador
'&',
('x_studio_operator_note','=',False),
('x_studio_operator_note_required','=',True),
#fai
'&','|','|',
('x_studio_mo_flow_control','in',[3]),
('x_studio_wo_flow_control','in',[3]),
('x_studio_operation_flow_control','in',[3]),
'|',
('x_studio_wo_flow_control','not in',[5]),
('x_ot_nota_inspeccion','=',False),
#prev NC
'&','|','|',
('x_studio_mo_flow_control','in',[4]),
('x_studio_wo_flow_control','in',[4]),
('x_studio_operation_flow_control','in',[4]),
'|',
('x_studio_wo_flow_control','not in',[5]),
('x_ot_nota_inspeccion','=',False),
#mod
'&','|','|',
('x_studio_mo_flow_control','in',[6]),
('x_studio_wo_flow_control','in',[6]),
('x_studio_operation_flow_control','in',[6]),
'|',
('x_studio_wo_flow_control','not in',[7]),
('x_ot_nota_modificacion','=',False),
]
}
</attribute>
</xpath>
<!--0.8 Control de flujo-->
<!-- Operador -->
<xpath expr="//div[@class='workorder_actions']" position="before">
<div class="workorder_bar">
<field name="x_studio_operator_department" invisible="1"/>
<field name="x_studio_operator_required" invisible="1"/>
<field name="x_studio_operator_note_required" invisible="1"/>
<span class="o_workorder_field" attrs="{'invisible': [('x_studio_operator_required','=',False)]}">
<span class="o_form_label">Operador</span>
<field name="x_operator" class="mr-5" domain="[('department_id.id', '=', x_studio_operator_department)]" options="{"no_create":true,"no_open":true}"/>
</span>
<span class="o_workorder_field">
<span class="o_form_label">Nota Operador</span>
<field name="x_studio_operator_note" class="mr-5"/>
<button string="Guardar" type="object" name="button_start" class="btn btn-success"/>
</span>
</div>
</xpath>
<!-- Operador -->
<!-- v0.10 VOLVERE -->
<xpath expr="//div[@class='o_workorder_bar_content o_workorder_bar_content_right']" position="inside">
<button name="995" type="action" string="Reabrir OT" icon="fa-check" attrs="{'invisible': ['|','|',('working_state', '=', 'blocked'),('state', '!=', 'done'),('qty_remaining', '!=', 0)]}" class="btn-warning"/>
<button name="996" type="action" string="Cerrar de nuevo" icon="fa-check" attrs="{'invisible': ['|','|',('working_state', '=', 'blocked'),('state', '!=', 'progress'),('qty_remaining', '!=', 0)]}" class="btn-warning"/>
</xpath>
<xpath expr="//button[@name='record_production']" position="attributes">
<attribute name="context">{'qty_remaining': 'qty_remaining', 'qty_producing': 'qty_producing'}</attribute>
<attribute name="attrs">
{'invisible': [
'|', ('is_user_working', '=', False),
'|', ('is_last_step', '!=', True),
'|', ('qty_remaining', '=', 0),
'|', ('state', '!=', 'progress'),
'|', ('skipped_check_ids', '!=', []),
'|', ('qty_remaining', '=', 'qty_producing')
]}
</attribute>
<attribute name="string">
REGISTRO PARCIAL o TOTAL
</attribute>
</xpath>
<!-- -->
</data>