From 8fbc762df70e336a04945c6b93e5e5f073ba462e Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Wed, 29 Mar 2023 14:16:31 +0200 Subject: [PATCH] Bug 32722: Don't block record save if subfield is mandatory but field is optional It should only be considered mandatory if at least one of the other subfield is not empty. --- .../prog/en/modules/cataloguing/addbiblio.tt | 156 ++++++++++-------- 1 file changed, 89 insertions(+), 67 deletions(-) diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt index 0207a5e9e19..b42fabd12d4 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tt @@ -541,6 +541,58 @@ function PopupMARCFieldDoc(field) { } } + function get_missing_fields(fields) { + let missingFields = []; + for(var i=0,len=fields.length; i= 10){ + elem = document.getElementById(divid); + eleminputs = elem.getElementsByTagName('input'); + + for(var j=0,len2=eleminputs.length; j"; @@ -587,7 +641,6 @@ function PopupMARCFieldDoc(field) { StrAlert += "

" + _("The following important subfields aren’t filled:") + "

"; notFilledClass = "important_subfield_not_filled"; } - StrAlert += "
    "; for(var i=0,len=subfields.length; i ' + _("Go to field") + ''; - flag = true; - } - } - StrAlert += "
"; /* Check for mandatories/importants field(not subfields) */ /* Loop over array of fields identified as mandatory or important to see if at least one subfield is filled */ - mandatoryFields = new Object(); - - for(var i=0,len=fields.length; i= 10){ - elem = document.getElementById(divid); - eleminputs = elem.getElementsByTagName('input'); - - for(var j=0,len2=eleminputs.length; j 0 ) { + flag = true; + missingFields.forEach(f => { if (mandatory) { - mandatoryFields[ arr[0] ] = { + missingMandatoryFields[ f[0] ] = { importance: "mandatory", elemid: "div_indicator_" + divid, - tab: arr[3] + tab: f[3] } } else { - mandatoryFields[ arr[0] ] = { + missingMandatoryFields[ f[0] ] = { importance: "important", elemid: "div_indicator_" + divid, - tab: arr[3] + tab: f[3] } } - } + }); + } + StrAlert += "
    "; + for (var tagsubfieldid in tabflag){ + if (tabflag[tagsubfieldid][0]==0){ + var tag=tagsubfieldid.substr(0,3); + var subfield=tagsubfieldid.substr(3,1); + let alert = "
  • "+_("Tag %s subfield %s %s in tab %s").format(tag, subfield, formatFieldName( tabflag[tagsubfieldid][1] ), tabflag[tagsubfieldid][2]) + ' ' + _("Go to field") + '
  • '; + if ( fields.map(f => f[0]).includes(tag) ) { + StrAlert += alert; + flag = true; + } else { + let allSubfieldsMissing = get_missing_fields([allFields[tag]]).length > 0 ? false : true; + if ( allSubfieldsMissing ) { + StrAlert += alert; + flag = true; + } + } + } } + StrAlert += "
"; - if( Object.entries(mandatoryFields).length > 0 ){ + if( Object.entries(missingMandatoryFields).length > 0 ){ StrAlert += "

" + _("The following fields aren't filled:") + "

"; StrAlert += "
    "; - for( var prop in mandatoryFields ){ - if( mandatoryFields[prop]["importance"] == "mandatory" ){ - StrAlert += "
  • " + _("Field %s is mandatory, at least one of its subfields must be filled.").format( prop ) + ' ' + _("Go to field") + '
  • '; + for( var prop in missingMandatoryFields ){ + if( missingMandatoryFields[prop]["importance"] == "mandatory" ){ + StrAlert += "
  • " + _("Field %s is mandatory, at least one of its subfields must be filled.").format( prop ) + ' ' + _("Go to field") + '
  • '; } else { - StrAlert += "
  • " + _("Field %s is important, at least one of its subfields must be filled.").format(prop) + ' ' + _("Go to field") + '
  • '; + StrAlert += "
  • " + _("Field %s is important, at least one of its subfields must be filled.").format(prop) + ' ' + _("Go to field") + '
  • '; } } StrAlert += "
"; -- 2.25.1