Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions ina_mp_ensayos_lat/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3

==================
Ina mp ensayos lat
==================

* Nuevo objetos "mrp.ensayos", y "mrp.ensayos.produto".
* En productos y variantes de producto nueva accion "action_ver_ensayos"


Bug Tracker
===========

Bugs are tracked on `GitHub Issues
<https://github.com/avanzosc/custom-addons/issues>`_. In case of trouble,
please check there if your issue has already been reported. If you spotted
it first, help us smash it by providing detailed and welcomed feedback.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Contributors
------------
* Inael

2 changes: 2 additions & 0 deletions ina_mp_ensayos_lat/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import models
from . import wizard
25 changes: 25 additions & 0 deletions ina_mp_ensayos_lat/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Copyright 2026 Inael
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
{
"name": "Ina Mp Ensayos Lat",
"version": "18.0.1.0.0",
"category": "Inael mp",
"license": "AGPL-3",
"author": "INAEL,jag",
"website": "https://github.com/avanzosc/custom-addons",
"depends": [
"product",
"mrp",
"ina_mc_permisos",
"ina_mp_lat_res_ensayos",
],
"data": [
"security/ir.model.access.csv",
"views/mrp_ensayos_view.xml",
"views/mrp_ensayos_producto_view.xml",
"views/product_template_view.xml",
"views/product_product_view.xml",
"wizard/wiz_ensayos_duplica.xml",
],
"installable": True,
}
4 changes: 4 additions & 0 deletions ina_mp_ensayos_lat/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from . import mrp_ensayos
from . import mrp_ensayos_producto
from . import product_template
from . import product_product
11 changes: 11 additions & 0 deletions ina_mp_ensayos_lat/models/mrp_ensayos.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Copyright 2026 Inael
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import fields, models


class MrpEnsayos(models.Model):
_name = "mrp.ensayos"
_description = "Ensayos LAT"

name = fields.Char(string="Nombre")
code = fields.Char(string="Codigo")
65 changes: 65 additions & 0 deletions ina_mp_ensayos_lat/models/mrp_ensayos_producto.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# Copyright 2026 Inael
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import _, exceptions, fields, models

import odoo.addons.decimal_precision as dp


class MrpEnsayosProducto(models.Model):
_name = "mrp.ensayos.producto"
_description = "Ensayos LAT por producto"

# name = fields.Char("Nombre")
product_id = fields.Many2one(
string="Producto", comodel_name="product.product", required=True, store=True
)
ensayo_id = fields.Many2one(
string="Ensayo", comodel_name="mrp.ensayos", required=True, store=True
)
nominal = fields.Float(
string="Valor Nominal",
digits=dp.get_precision("Product Unit of Measure"),
default=1,
required=True,
)
minimo = fields.Float(
string="Valor Minimo",
digits=dp.get_precision("Product Unit of Measure"),
default=1,
required=True,
)
maximo = fields.Float(
string="Valor Maximo",
digits=dp.get_precision("Product Unit of Measure"),
default=1,
required=True,
)
etiqueta = fields.Char()
nota = fields.Text()

def duplica_ensayo(self, nuevo_producto):
active_ids = self.env.context.get("active_ids", [])
if len(active_ids) > 1:
raise exceptions.ValidationError(
_("Debes marcar solamente 1 producto/ensayo")
)
dup_obj = self.env["mrp.ensayos.producto"]
cond = [("product_id", "=", nuevo_producto.id)]
d_ids = dup_obj.search(cond)
if d_ids:
raise exceptions.ValidationError(_("Este nuevo producto ya tiene ensayos"))
for e in dup_obj.browse(self.env.context.get("active_ids")):
cond = [("product_id", "=", e.product_id.id)]
d_ids = dup_obj.search(cond)
for r in d_ids:
val = {
"product_id": nuevo_producto.id,
"ensayo_id": r.ensayo_id.id,
"nominal": r.nominal,
"minimo": r.minimo,
"maximo": r.maximo,
"etiqueta": r.etiqueta,
"nota": r.nota,
}
dup_obj.create(val)
return True
23 changes: 23 additions & 0 deletions ina_mp_ensayos_lat/models/product_product.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Copyright 2026 Inael
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import models


class ProductProduct(models.Model):
_inherit = "product.product"

def action_ver_ensayos(self):
self.ensure_one()
action = self.env.ref("ina_mp_ensayos_lat.action_ina_mrp_ensayos_prod")

return {
"name": action.name,
"help": action.help,
"type": action.type,
"view_type": action.view_type,
"view_mode": action.view_mode,
"target": action.target,
"res_model": action.res_model,
"context": "{}",
"domain": [("product_id", "=", self.id)],
}
22 changes: 22 additions & 0 deletions ina_mp_ensayos_lat/models/product_template.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Copyright 2026 Inael
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import models


class ProductTemplate(models.Model):
_inherit = "product.template"

def action_ver_ensayos(self):
self.ensure_one()
action = self.env.ref("ina_mp_ensayos_lat.action_ina_mrp_ensayos_prod")
return {
"name": action.name,
"help": action.help,
"type": action.type,
"view_type": action.view_type,
"view_mode": action.view_mode,
"target": action.target,
"res_model": action.res_model,
"context": "{}",
"domain": [("product_id", "=", self.product_variant_id.id)],
}
3 changes: 3 additions & 0 deletions ina_mp_ensayos_lat/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"
10 changes: 10 additions & 0 deletions ina_mp_ensayos_lat/security/ir.model.access.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_mrp_ensayos_calidad_respon,access mrp ensayos calidad respon,model_mrp_ensayos,ina_mc_permisos.group_inael_calidad_respon,1,1,1,1
access_mrp_ensayos_fabrica_respon,access mrp ensayos fabrica respon,model_mrp_ensayos,ina_mc_permisos.group_inael_fabrica_respon,1,1,1,1
access_mrp_ensayos_user,access mrp ensayos user,model_mrp_ensayos,ina_mc_permisos.group_inael_lat_user,1,1,1,1
access_mrp_ensayos_producto_calidad_respon,access mrp ensayos producto calidad respon,model_mrp_ensayos_producto,ina_mc_permisos.group_inael_calidad_respon,1,1,1,1
access_mrp_ensayos_producto_fabrica_respon,access mrp ensayos produto fabrica respon,model_mrp_ensayos_producto,ina_mc_permisos.group_inael_fabrica_respon,1,1,1,1
access_mrp_ensayos_producto_user,access mrp ensayos producto user,model_mrp_ensayos_producto,ina_mc_permisos.group_inael_lat_user,1,1,1,1
access_wiz_ensayos_duplica_calidad_respon,access wiz ensayos duplica calidad respon,model_wiz_ensayos_duplica,ina_mc_permisos.group_inael_calidad_respon,1,1,1,1
access_wiz_ensayos_duplica_fabrica_respon,access wiz ensayos duplica fabrica respon,model_wiz_ensayos_duplica,ina_mc_permisos.group_inael_fabrica_respon,1,1,1,1
access_wiz_ensayos_duplica_user,access wiz ensayos duplica user,model_wiz_ensayos_duplica,ina_mc_permisos.group_inael_lat_user,1,1,1,1
71 changes: 71 additions & 0 deletions ina_mp_ensayos_lat/views/mrp_ensayos_producto_view.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="ina_mrp_ensayos_prod_tree" model="ir.ui.view">
<field name="name">ina.mrp.ensayos.producto.tree</field>
<field name="model">mrp.ensayos.producto</field>
<field name="arch" type="xml">
<list string="Ensayos Producto" editable="top">
<field name="product_id" optional="show" />
<field name="ensayo_id" optional="show" />
<field name="nominal" optional="show" />
<field name="minimo" optional="show" />
<field name="maximo" optional="show" />
<field name="etiqueta" optional="show" />
<field name="nota" optional="show" />
</list>
</field>
</record>

<record model="ir.ui.view" id="ina_mrp_ensayos_prod_search_view">
<field name="name">ina.mrp.ensayos.prod.search.view</field>
<field name="model">mrp.ensayos.producto</field>
<field name="arch" type="xml">
<search string="Filtros Ensayos">
<field name="product_id" />
<field name="ensayo_id" />
<separator />
<group expand="0" string="Group By">
<filter
string="Producto"
name="group-producto"
context="{'group_by':'product_id'}"
/>
<filter
string="Ensayo"
name="group-ensayo"
context="{'group_by':'ensayo_id'}"
/>
</group>
</search>
</field>
</record>

<record id="action_ina_mrp_ensayos_prod" model="ir.actions.act_window">
<field name="name">Ensayos por Producto</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">mrp.ensayos.producto</field>
<field name="view_mode">list</field>
<field name="view_id" ref="ina_mp_ensayos_lat.ina_mrp_ensayos_prod_tree" />
<field
name="search_view_id"
ref="ina_mp_ensayos_lat.ina_mrp_ensayos_prod_search_view"
/>
</record>

<menuitem
name="Ensayos por Producto"
action="action_ina_mrp_ensayos_prod"
id="ina_menu_mrp_ensayos_prod"
parent="menu_mrp_ensayos"
sequence="12"
/>

<!-- PONGO AQUI TAMBIEN LOS ENSAYOS QUE ESTAN EN FABRICA -->
<menuitem
name="Ensayos por Producto"
action="ina_mp_ensayos_lat.action_ina_mrp_ensayos_prod"
id="ina_menu_mrp_ensayos_prod"
parent="ina_mp_lat_res_ensayos.menu_lat_ensayos"
sequence="30"
/>
</odoo>
45 changes: 45 additions & 0 deletions ina_mp_ensayos_lat/views/mrp_ensayos_view.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="ina_mrp_ensayos_tree" model="ir.ui.view">
<field name="name">ina.mrp.ensayos.tree</field>
<field name="model">mrp.ensayos</field>
<field name="arch" type="xml">
<list string="Ensayos" editable="top">
<field name="name" optional="show" />
<field name="code" optional="show" />
</list>
</field>
</record>

<!-- EL GENERICO, PRINCIPAL -->
<menuitem
id="menu_mrp_ensayos"
name="Ensayos"
parent="mrp.menu_mrp_root"
sequence="23"
/>

<record id="action_ina_mrp_ensayos" model="ir.actions.act_window">
<field name="name">Ensayos</field>
<field name="res_model">mrp.ensayos</field>
<field name="type">ir.actions.act_window</field>
<field name="view_mode">list,form</field>
</record>

<menuitem
name="Ensayos"
action="action_ina_mrp_ensayos"
id="ina_menu_mrp_ensayos"
parent="menu_mrp_ensayos"
sequence="10"
/>

<!-- PONGO AQUI TAMBIEN LOS ENSAYOS QUE ESTAN EN FABRICA -->
<menuitem
name="Ensayos"
action="ina_mp_ensayos_lat.action_ina_mrp_ensayos"
id="ina_menu_mrp_ensayos"
parent="ina_mp_lat_res_ensayos.menu_lat_ensayos"
sequence="10"
/>
</odoo>
19 changes: 19 additions & 0 deletions ina_mp_ensayos_lat/views/product_product_view.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?xml version="1.0" ?>
<odoo>
<record id="product_product_ensayos_button_from" model="ir.ui.view">
<field name="name">product.product.ensayos.button</field>
<field name="model">product.product</field>
<field name="inherit_id" ref="product.product_normal_form_view" />
<field name="arch" type="xml">
<div name="button_box" position="inside">
<button
class="oe_stat_button"
name="action_ver_ensayos"
string="Ensayos"
type="object"
icon="fa-flask"
/>
</div>
</field>
</record>
</odoo>
19 changes: 19 additions & 0 deletions ina_mp_ensayos_lat/views/product_template_view.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?xml version="1.0" ?>
<odoo>
<record id="product_template_ensayos_button_from" model="ir.ui.view">
<field name="name">product.template.ensayos.button</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="product.product_template_only_form_view" />
<field name="arch" type="xml">
<div name="button_box" position="inside">
<button
class="oe_stat_button"
name="action_ver_ensayos"
string="Ensayos"
type="object"
icon="fa-flask"
/>
</div>
</field>
</record>
</odoo>
1 change: 1 addition & 0 deletions ina_mp_ensayos_lat/wizard/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import wiz_ensayos_duplica
18 changes: 18 additions & 0 deletions ina_mp_ensayos_lat/wizard/wiz_ensayos_duplica.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# (c) 2017 Alfredo de la Fuente - AvanzOSC
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
from odoo import fields, models


class WizEnsayosDuplica(models.TransientModel):
_name = "wiz.ensayos.duplica"

product_id = fields.Many2one(
string="Nuevo Producto",
comodel_name="product.product",
required=True,
help="Crear todos los ensayos para este producto",
)

def wiz_duplica_ensayo(self):
explo = self.env["mrp.ensayos.producto"]
explo.duplica_ensayo(self.product_id)
Loading
Loading