From 0f9fcf3fdc561082906d01523505dc42e64e1f06 Mon Sep 17 00:00:00 2001 From: Pete Matsyburka Date: Thu, 24 Sep 2026 19:56:27 +0300 Subject: [PATCH] one field per party validation --- app/javascript/template_builder/builder.vue | 22 +++++++++++++++++++++ app/javascript/template_builder/i18n.js | 7 +++++++ 2 files changed, 29 insertions(+) diff --git a/app/javascript/template_builder/builder.vue b/app/javascript/template_builder/builder.vue index 7f6e2f648..a45882397 100644 --- a/app/javascript/template_builder/builder.vue +++ b/app/javascript/template_builder/builder.vue @@ -2300,6 +2300,10 @@ export default { this.save() }, addField (type, area = null) { + if (this.isVerificationFieldAdded(type)) { + return + } + const field = { name: '', uuid: v4(), @@ -2343,12 +2347,26 @@ export default { this.save() }, + isVerificationFieldAdded (type) { + const addedField = ['kba', 'verification'].includes(type) && + this.template.fields.find((f) => ['kba', 'verification'].includes(f.type) && f.submitter_uuid === this.selectedSubmitter.uuid) + + if (addedField) { + alert(this.t('field_has_already_been_added_for_party').replace('{field}', this.fieldNames[addedField.type]).replace('{party}', this.selectedSubmitter.name)) + } + + return !!addedField + }, startFieldDraw ({ name, type }) { const existingField = this.template.fields?.find((f) => f.submitter_uuid === this.selectedSubmitter.uuid && name && name === f.name) if (existingField) { this.drawField = existingField } else { + if (this.isVerificationFieldAdded(type)) { + return + } + const field = { name: name || '', uuid: v4(), @@ -3089,6 +3107,10 @@ export default { return this.dropCustomField(area) } + if (!this.fieldsDragFieldRef.value && this.isVerificationFieldAdded(this.dragField.type)) { + return + } + const field = this.fieldsDragFieldRef.value || { name: '', uuid: v4(), diff --git a/app/javascript/template_builder/i18n.js b/app/javascript/template_builder/i18n.js index a91158fdb..956d8d578 100644 --- a/app/javascript/template_builder/i18n.js +++ b/app/javascript/template_builder/i18n.js @@ -4,6 +4,7 @@ const en = { default: 'Default', save_as_custom_field: 'Save as custom field', kba: 'KBA', + field_has_already_been_added_for_party: '{field} field has already been added for {party}', analyzing_: 'Analyzing...', download: 'Download', downloading_: 'Downloading...', @@ -256,6 +257,7 @@ const es = { default: 'Predeterminado', save_as_custom_field: 'Guardar como personalizado', kba: 'KBA', + field_has_already_been_added_for_party: 'El campo {field} ya se ha agregado para {party}', autodetect_fields: 'Autodetectar campos', fields_detected: '{count} campos detectados', analyzing_: 'Analizando...', @@ -508,6 +510,7 @@ const it = { default: 'Predefinito', save_as_custom_field: 'Salva come personalizzato', kba: 'KBA', + field_has_already_been_added_for_party: 'Il campo {field} è già stato aggiunto per {party}', autodetect_fields: 'Rileva campi', fields_detected: '{count} campi rilevati', analyzing_: 'Analisi...', @@ -760,6 +763,7 @@ const pt = { default: 'Padrão', save_as_custom_field: 'Salvar como personalizado', kba: 'KBA', + field_has_already_been_added_for_party: 'O campo {field} já foi adicionado para {party}', autodetect_fields: 'Detectar campos', fields_detected: '{count} campos detectados', analyzing_: 'Analisando...', @@ -1012,6 +1016,7 @@ const fr = { default: 'Par défaut', save_as_custom_field: 'Enregistrer comme personnalisé', kba: 'KBA', + field_has_already_been_added_for_party: 'Le champ {field} a déjà été ajouté pour {party}', autodetect_fields: 'Détecter les champs', fields_detected: '{count} champs détectés', analyzing_: 'Analyse...', @@ -1264,6 +1269,7 @@ const de = { default: 'Standard', save_as_custom_field: 'Als benutzerdefiniert speichern', kba: 'KBA', + field_has_already_been_added_for_party: '{field}-Feld wurde bereits für {party} hinzugefügt', autodetect_fields: 'Felder erkennen', fields_detected: '{count} Felder erkannt', analyzing_: 'Analysiere...', @@ -1516,6 +1522,7 @@ const nl = { default: 'Standaard', save_as_custom_field: 'Opslaan als aangepast', kba: 'KBA', + field_has_already_been_added_for_party: '{field}-veld is al toegevoegd voor {party}', autodetect_fields: 'Velden detecteren', fields_detected: '{count} velden gedetecteerd', analyzing_: 'Analyseren...',