From c391967769c21e63bbef457e1fbdfd1e9adebcbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jordi=20Puiggen=C3=A9?= Date: Fri, 26 May 2023 13:03:46 +0200 Subject: [PATCH 1/3] Display error for required fields without value in current language --- src/bika/lims/browser/analysisrequest/add2.py | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/bika/lims/browser/analysisrequest/add2.py b/src/bika/lims/browser/analysisrequest/add2.py index b78b568208..c661ebbb78 100644 --- a/src/bika/lims/browser/analysisrequest/add2.py +++ b/src/bika/lims/browser/analysisrequest/add2.py @@ -44,6 +44,7 @@ from plone.memoize.volatile import DontCache from plone.memoize.volatile import cache from plone.protect.interfaces import IDisableCSRFProtection +from Products.Archetypes.interfaces import IField from Products.CMFPlone.utils import safe_unicode from Products.Five.browser import BrowserView from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile @@ -52,6 +53,8 @@ from zope.component import getAdapters from zope.component import queryAdapter from zope.i18n.locales import locales +from zope.i18n import translate +from zope.i18nmessageid import Message from zope.interface import alsoProvides from zope.interface import implements from zope.publisher.interfaces import IPublishTraverse @@ -1557,6 +1560,30 @@ def ajax_recalculate_prices(self): return prices + def get_field(self, field_name): + """Returns the field from the temporary sample with the given name + """ + if IField.providedBy(field_name): + return field_name + + for field in self.get_ar_fields(): + if field.getName() == field_name: + return field + return None + + def get_field_label(self, field): + """Returns the translated label of the given field + """ + field = self.get_field(field) + if not field: + return "" + + instance = self.get_ar() + label = field.widget.Label(instance) + if isinstance(label, Message): + return self.context.translate(label) + return label + def check_confirmation(self): """Returns a dict when user confirmation is required for the creation of samples. Returns None otherwise @@ -1701,8 +1728,9 @@ def ajax_submit(self): # If there are required fields missing, flag an error for field in missing: fieldname = "{}-{}".format(field, num) - msg = _("Field '{}' is required").format(safe_unicode(field)) - fielderrors[fieldname] = msg + label = self.get_field_label(field) + msg = self.context.translate(_("Field '{}' is required")) + fielderrors[fieldname] = msg.format(label) # Process and validate field values valid_record = dict() From 31160a928f28782683d33f0390139181657d1b6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jordi=20Puiggen=C3=A9?= Date: Fri, 26 May 2023 13:10:23 +0200 Subject: [PATCH 2/3] Remove unnecessary import --- src/bika/lims/browser/analysisrequest/add2.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/bika/lims/browser/analysisrequest/add2.py b/src/bika/lims/browser/analysisrequest/add2.py index c661ebbb78..23155020eb 100644 --- a/src/bika/lims/browser/analysisrequest/add2.py +++ b/src/bika/lims/browser/analysisrequest/add2.py @@ -53,7 +53,6 @@ from zope.component import getAdapters from zope.component import queryAdapter from zope.i18n.locales import locales -from zope.i18n import translate from zope.i18nmessageid import Message from zope.interface import alsoProvides from zope.interface import implements From 9ca73ccd09e929921a49a07176045ef9b9a3229d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jordi=20Puiggen=C3=A9?= Date: Fri, 26 May 2023 13:11:19 +0200 Subject: [PATCH 3/3] Changelog --- CHANGES.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.rst b/CHANGES.rst index cea2befd3d..c3a7d2c1f3 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -4,6 +4,7 @@ Changelog 2.5.0 (unreleased) ------------------ +- #2314 Display error for required fields without value in current language - #2313 Log error when calculation fails - #2310 Added `get_relative_delta` and `get_tzinfo` in datetime API - #2311 Properly process and validate field values from sample header on submit