Merge pull request #10708 from mfo/US/format-rna
ETQ tech je souhaite que les champs RNA ne puissent pas contenir d'espace sans quoi nos appels d'API remontent un URI::InvalidURIError
This commit is contained in:
commit
8a42c6a7ad
5 changed files with 54 additions and 2 deletions
|
@ -1,4 +1,4 @@
|
||||||
= @form.text_field(:value, input_opts( id: @champ.input_id, aria: { describedby: @champ.describedby_id }, data: { controller: 'turbo-input', turbo_input_load_on_connect_value: @champ.prefilled? && @champ.value.present? && @champ.data.blank?, turbo_input_url_value: update_path }, required: @champ.required?, pattern: "W[0-9]{9}", class: "width-33-desktop", maxlength: 10))
|
= @form.text_field(:value, input_opts( id: @champ.input_id, aria: { describedby: @champ.describedby_id }, data: { controller: 'turbo-input format', format: 'deleteSpace', turbo_input_load_on_connect_value: @champ.prefilled? && @champ.value.present? && @champ.data.blank?, turbo_input_url_value: update_path }, required: @champ.required?, pattern: "W[0-9A-Z]{9}", class: "width-33-desktop", maxlength: 10))
|
||||||
|
|
||||||
.rna-info{ id: dom_id(@champ, :rna_info) }
|
.rna-info{ id: dom_id(@champ, :rna_info) }
|
||||||
= render 'shared/champs/rna/association', champ: @champ, error: nil
|
= render 'shared/champs/rna/association', champ: @champ, error: nil
|
||||||
|
|
|
@ -4,6 +4,13 @@ export class FormatController extends ApplicationController {
|
||||||
connect() {
|
connect() {
|
||||||
const format = this.element.getAttribute('data-format');
|
const format = this.element.getAttribute('data-format');
|
||||||
switch (format) {
|
switch (format) {
|
||||||
|
case 'deleteSpace':
|
||||||
|
this.on('change', (event) => {
|
||||||
|
const target = event.target as HTMLInputElement;
|
||||||
|
const value = this.deleteSpace(target.value);
|
||||||
|
replaceValue(target, value);
|
||||||
|
});
|
||||||
|
break;
|
||||||
case 'list':
|
case 'list':
|
||||||
this.on('change', (event) => {
|
this.on('change', (event) => {
|
||||||
const target = event.target as HTMLInputElement;
|
const target = event.target as HTMLInputElement;
|
||||||
|
@ -41,16 +48,21 @@ export class FormatController extends ApplicationController {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private deleteSpace(value: string) {
|
||||||
|
return value.replace(/\s*/g, '');
|
||||||
|
}
|
||||||
|
|
||||||
private formatList(value: string) {
|
private formatList(value: string) {
|
||||||
return value.replace(/;/g, ',');
|
return value.replace(/;/g, ',');
|
||||||
}
|
}
|
||||||
|
|
||||||
private formatSIRET(value: string) {
|
private formatSIRET(value: string) {
|
||||||
return value
|
return value
|
||||||
.replace(/[^\d]/gi, '')
|
.replace(/[^\d]/gi, '')
|
||||||
.replace(/^\s*(\d{3})\s*(\d{3})\s*(\d{3})\s*(\d{5})\s*$/gi, '$1 $2 $3 $4')
|
.replace(/^\s*(\d{3})\s*(\d{3})\s*(\d{3})\s*(\d{5})\s*$/gi, '$1 $2 $3 $4')
|
||||||
.trim();
|
.trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
private formatIBAN(value: string) {
|
private formatIBAN(value: string) {
|
||||||
return value
|
return value
|
||||||
.replace(/[^\dA-Z]/gi, '')
|
.replace(/[^\dA-Z]/gi, '')
|
||||||
|
|
19
app/tasks/maintenance/normalize_rna_values_task.rb
Normal file
19
app/tasks/maintenance/normalize_rna_values_task.rb
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module Maintenance
|
||||||
|
class NormalizeRNAValuesTask < MaintenanceTasks::Task
|
||||||
|
def collection
|
||||||
|
Champs::RNAChamp.where.not(value: nil)
|
||||||
|
end
|
||||||
|
|
||||||
|
def process(element)
|
||||||
|
if /\s/.match?(element.value)
|
||||||
|
element.update_column(:value, element.value.gsub(/\s+/, ''))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def count
|
||||||
|
# to costly
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -16,7 +16,9 @@ module Maintenance
|
||||||
return if data.blank?
|
return if data.blank?
|
||||||
champ.update(value_json: APIGeoService.parse_rna_address(data['adresse']))
|
champ.update(value_json: APIGeoService.parse_rna_address(data['adresse']))
|
||||||
rescue URI::InvalidURIError
|
rescue URI::InvalidURIError
|
||||||
# some data raise this error
|
# some Champs::RNAChamp contain spaces which raise this error
|
||||||
|
rescue ActiveRecord::RecordNotFound
|
||||||
|
# some Champs::RNAChamp procedure had been soft deleted
|
||||||
end
|
end
|
||||||
|
|
||||||
def count
|
def count
|
||||||
|
|
19
spec/tasks/maintenance/normalize_rna_values_task_spec.rb
Normal file
19
spec/tasks/maintenance/normalize_rna_values_task_spec.rb
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "rails_helper"
|
||||||
|
|
||||||
|
module Maintenance
|
||||||
|
RSpec.describe NormalizeRNAValuesTask do
|
||||||
|
describe "#process" do
|
||||||
|
let(:procedure) { create(:procedure, types_de_champ_public: [{ type: :rna }]) }
|
||||||
|
let(:dossier) { create(:dossier, :with_populated_champs, procedure:) }
|
||||||
|
let(:element) { dossier.champs.first }
|
||||||
|
subject(:process) { described_class.process(element) }
|
||||||
|
let(:error_value) { "999 0 999" }
|
||||||
|
it "removes extra spaces" do
|
||||||
|
element.update_column(:value, error_value)
|
||||||
|
expect { subject }.to change { element.reload.value }.from(error_value).to("9990999")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Add table
Reference in a new issue