adjust import

pull/349/head
Pete Matsyburka 1 year ago
parent e87522eeab
commit 002bc315f6

@ -124,6 +124,7 @@ safeRegisterElement('import-list', class extends HTMLElement {
this.app = createApp(ImportList, {
template: JSON.parse(this.dataset.template),
multitenant: this.dataset.multitenant === 'true',
authenticityToken: document.querySelector('meta[name="csrf-token"]')?.content
})

@ -146,14 +146,14 @@
<input
name="submissions_json"
hidden
:value="JSON.stringify(submissionsData.slice(0, 1100))"
:value="multitenant ? JSON.stringify(submissionsData.slice(0, 1100)) : JSON.stringify(submissionsData)"
>
</div>
<div
class="px-3 border-y py-2 border-base-300 text-center w-full text-sm font-semibold"
>
Total entries: {{ submissionsData.length }}
<template v-if="submissionsData.length >= 1000">
<template v-if="multitenant && submissionsData.length >= 1000">
/ 1000
</template>
</div>
@ -239,6 +239,11 @@ export default {
type: Object,
required: true
},
multitenant: {
type: Boolean,
required: false,
default: false
},
authenticityToken: {
type: String,
required: false,
@ -269,7 +274,11 @@ export default {
if (['name', 'email', 'phone', 'external_id'].includes(mapping.field_name.toLowerCase())) {
submittersIndex[mapping.submitter_uuid][mapping.field_name.toLowerCase()] = row[mapping.column_index]
} else {
}
const fieldType = this.fieldTypesIndex[mapping.submitter_uuid][mapping.field_name]
if (fieldType && fieldType !== 'phone') {
submittersIndex[mapping.submitter_uuid].fields.push({
name: mapping.field_name, default_value: row[mapping.column_index], readonly: true
})
@ -306,6 +315,17 @@ export default {
submitters () {
return this.template.submitters
},
fieldTypesIndex () {
return this.template.fields.reduce((acc, field) => {
acc[field.submitter_uuid] ||= {}
if (field.name) {
acc[field.submitter_uuid][field.name] = field.type
}
return acc
}, {})
},
columns () {
return this.table[0]
},

@ -11,6 +11,9 @@ module Submitters
UnknownSubmitterName = Class.new(BaseError)
UnableToDownload = Class.new(BaseError)
TRUE_VALUES = ['1', 'true', true, 'TRUE', 'True', 'yes', 'YES', 'Yes'].freeze
FALSE_VALUES = ['0', 'false', false, 'FALSE', 'False', 'no', 'NO', 'No'].freeze
module_function
def call(template, values, submitter_name: nil, for_submitter: nil, throw_errors: false)
@ -50,21 +53,32 @@ module Submitters
end
def normalize_value(field, value)
if field['type'] == 'text' && value.present?
if field['type'] == 'checkbox'
return true if TRUE_VALUES.include?(value)
return false if FALSE_VALUES.include?(value)
end
return nil if value.blank?
if field['type'] == 'text'
value.to_s
elsif field['type'] == 'number' && value.present?
elsif field['type'] == 'number'
(value.to_f % 1).zero? ? value.to_i : value.to_f
elsif field['type'] == 'date' && value.present? && value != '{{date}}'
if value.is_a?(Integer)
Time.zone.at(value.to_s.first(10).to_i).to_date.to_s
elsif value.gsub(/\w/, '0') == field.dig('preferences', 'format').to_s.gsub(/\w/, '0')
TimeUtils.parse_date_string(value, field.dig('preferences', 'format')).to_s
else
Date.parse(value).to_s
end
elsif field['type'] == 'date' && value != '{{date}}'
normalize_date(field, value)
else
value
end
end
def normalize_date(field, value)
if value.is_a?(Integer)
Time.zone.at(value.to_s.first(10).to_i).to_date.to_s
elsif value.gsub(/\w/, '0') == field.dig('preferences', 'format').to_s.gsub(/\w/, '0')
TimeUtils.parse_date_string(value, field.dig('preferences', 'format')).to_s
else
Date.parse(value).to_s
end
rescue Date::Error => e
Rollbar.warning(e) if defined?(Rollbar)

Loading…
Cancel
Save