diff --git a/.claude/settings.local.json b/.claude/settings.local.json index f15c95c..645c6df 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -23,7 +23,8 @@ "Bash(find:*)", "Bash(true)", "Bash(bash:*)", - "Bash(grep:*)" + "Bash(grep:*)", + "Bash(gh pr merge:*)" ], "deny": [] } diff --git a/documents/logs/Etiquetas de Muestras (4).pdf b/documents/logs/Etiquetas de Muestras (4).pdf new file mode 100644 index 0000000..483a575 Binary files /dev/null and b/documents/logs/Etiquetas de Muestras (4).pdf differ diff --git a/documents/logs/Screenshot_1.png b/documents/logs/Screenshot_1.png new file mode 100644 index 0000000..67faf23 Binary files /dev/null and b/documents/logs/Screenshot_1.png differ diff --git a/documents/logs/Screenshot_2.png b/documents/logs/Screenshot_2.png new file mode 100644 index 0000000..8cd6d3f Binary files /dev/null and b/documents/logs/Screenshot_2.png differ diff --git a/lims_management/__manifest__.py b/lims_management/__manifest__.py index 95e14e7..3895a7a 100644 --- a/lims_management/__manifest__.py +++ b/lims_management/__manifest__.py @@ -43,6 +43,7 @@ 'views/product_template_parameter_config_views.xml', 'views/parameter_dashboard_views.xml', 'views/menus.xml', + 'report/sample_label_report.xml', ], 'demo': [ 'demo/demo_users.xml', diff --git a/lims_management/models/__pycache__/sale_order.cpython-312.pyc b/lims_management/models/__pycache__/sale_order.cpython-312.pyc index 9f92bfa..4a05057 100644 Binary files a/lims_management/models/__pycache__/sale_order.cpython-312.pyc and b/lims_management/models/__pycache__/sale_order.cpython-312.pyc differ diff --git a/lims_management/models/__pycache__/stock_lot.cpython-312.pyc b/lims_management/models/__pycache__/stock_lot.cpython-312.pyc index 7c49021..e690aed 100644 Binary files a/lims_management/models/__pycache__/stock_lot.cpython-312.pyc and b/lims_management/models/__pycache__/stock_lot.cpython-312.pyc differ diff --git a/lims_management/models/sale_order.py b/lims_management/models/sale_order.py index 697e824..61c6558 100644 --- a/lims_management/models/sale_order.py +++ b/lims_management/models/sale_order.py @@ -293,3 +293,19 @@ class SaleOrder(models.Model): _logger.info(f"Cancelled {len(samples_to_cancel)} samples and {len(tests_to_cancel)} tests for order {self.name}") return res + + def action_print_sample_labels(self): + """Imprimir etiquetas de todas las muestras generadas para esta orden""" + self.ensure_one() + + if not self.generated_sample_ids: + raise UserError(_('No hay muestras generadas para esta orden. Por favor, confirme la orden primero.')) + + # Asegurar que todas las muestras tengan código de barras + self.generated_sample_ids._ensure_barcode() + + # Obtener el reporte + report = self.env.ref('lims_management.action_report_sample_label') + + # Retornar la acción de imprimir el reporte para todas las muestras + return report.report_action(self.generated_sample_ids) diff --git a/lims_management/models/stock_lot.py b/lims_management/models/stock_lot.py index de0e31b..6d8e313 100644 --- a/lims_management/models/stock_lot.py +++ b/lims_management/models/stock_lot.py @@ -272,3 +272,10 @@ class StockLot(models.Model): even_sum = sum([sum(divmod(2 * d, 10)) for d in digits[-2::-2]]) total = odd_sum + even_sum return (10 - (total % 10)) % 10 + + def _ensure_barcode(self): + """Ensure all lab samples have a barcode""" + for record in self: + if record.is_lab_sample and not record.barcode: + record.barcode = record._generate_unique_barcode() + return True diff --git a/lims_management/report/__init__.py b/lims_management/report/__init__.py new file mode 100644 index 0000000..7c68785 --- /dev/null +++ b/lims_management/report/__init__.py @@ -0,0 +1 @@ +# -*- coding: utf-8 -*- \ No newline at end of file diff --git a/lims_management/report/sample_label_report.xml b/lims_management/report/sample_label_report.xml new file mode 100644 index 0000000..23755d5 --- /dev/null +++ b/lims_management/report/sample_label_report.xml @@ -0,0 +1,89 @@ + + + + + + Formato Etiqueta Muestra + + custom + 50 + 100 + Landscape + 2 + 2 + 2 + 2 + + 0 + 200 + + + + + Etiquetas de Muestras + stock.lot + qweb-pdf + lims_management.report_sample_label + lims_management.report_sample_label + 'Etiquetas - ' + object.name + report + + + + + + + + \ No newline at end of file diff --git a/lims_management/views/sale_order_views.xml b/lims_management/views/sale_order_views.xml index 9c0945f..b2b5020 100644 --- a/lims_management/views/sale_order_views.xml +++ b/lims_management/views/sale_order_views.xml @@ -8,6 +8,15 @@ sale.order + + +