This repository has been archived on 2020-07-12. You can view files and clone it, but cannot push or open issues/pull-requests.
mitgliedsantrag/src/js/script.js

196 lines
4.4 KiB
JavaScript

'use strict'
const numSteps = 2
const dobOptions = {
day: 'numeric',
month: 'long',
year: 'numeric'
}
const individualFields = '.individual-only'
const companyFields = '.company-only'
_.forEach(_.range(numSteps), value => {
$('#step-' + (value + 1) + ' form').submit(event => {
$('#step-' + (value + 2)).collapse('show')
$('#step-' + (value + 1) + '-heading .step-number').addClass('done')
if (isDone) {
$('.download-wrapper button').prop('disabled', false)
$('.download-wrapper button').remove('btn-danger')
$('.download-wrapper button').addClass('btn-success')
} else {
$('.download-wrapper button').prop('disabled', true)
$('.download-wrapper button').remove('btn-success')
$('.download-wrapper button').addClass('btn-danger')
}
event.preventDefault()
})
})
$('[name="membership"]').on('change', event => {
$('#contribution').text($(event.target).data('contribution'))
})
// TODO: validation
// this should be done in css, but css does not support such formatting
$('[name="iban"]').on('input', event => {
let iban = Array.from($(event.target).val().replace(/\s/g, ''))
if (IBAN.isValid(iban.join(''))) {
event.target.setCustomValidity('')
} else {
event.target.setCustomValidity('IBAN ungültig')
}
let prettyIban = ''
for (let i = 0; i < iban.length; i++) {
if (i % 4 === 0) {
prettyIban += iban.slice(i, i + 4).join('')
if (i + 4 < iban.length) {
prettyIban += ' '
}
}
}
$(event.target).val(prettyIban)
})
function isDone () {
var done = true
_.forEach(_.range(numSteps), value => {
console.log(value)
if (!$('#step-' + (value + 1) + '-heading .step-number').hasClass('done')) {
done = false
}
})
return done
}
function setEntityType (type) {
if (type === 'individual') {
$(companyFields).addClass('d-none')
$(individualFields).removeClass('d-none')
$(companyFields + ' input').removeAttr('required')
$(individualFields + ' input').attr('required', 'required')
} else {
$(companyFields).removeClass('d-none')
$(individualFields).addClass('d-none')
$(individualFields + ' input').removeAttr('required')
$(companyFields + ' input').attr('required', 'required')
}
}
$('form input[name="entity-type"]').on('change', () => {
setEntityType($('input[name="entity-type"]:checked').val())
})
$('#generate').click(() => {
var model = {}
_.forEach(_.range(numSteps), value => {
_.each($('#step-' + (value + 1) + ' form').serializeArray(), value => {
model[value.name] = value.value
})
})
console.log(model) // DEBUG!
var docDefinition = {
content: [
{
text: 'Mitgliedsantrag FabLab Neustadt Aisch/Bad Windsheim',
fontSize: 20,
margin: [0, 0, 0, 20]
}
],
pageSize: 'A4',
pageMargins: [ 62.3622, 60, 62.3622, 60 ]
}
docDefinition.content.push({
text: [
'Name: ',
{
text: model['entity-type'] === 'individual' ? `${model.givenname} ${model.surname}` : model.companyname,
bold: true
}
]
})
docDefinition.content.push({
text: [
'Adresse: ',
{
text: model.address,
bold: true
}
]
})
docDefinition.content.push({
text: [
'PLZ + Ort: ',
{
text: `${model.zip} ${model.place}`,
bold: true
}
]
})
docDefinition.content.push({
text: [
'E-Mail-Adresse: ',
{
text: model.email,
bold: true
}
]
})
if (model['entity-type'] === 'individual') {
let dob = new Date(model.dob).toLocaleDateString('de-DE', dobOptions)
docDefinition.content.push({
text: [
'Geburtstag: ',
{
text: dob,
bold: true
}
]
})
}
docDefinition.content.push({
text: [
'IBAN: ',
{
text: model.iban,
bold: true
}
]
})
if (model.bic) {
docDefinition.content.push({
text: [
'BIC: ',
{
text: model.bic,
bold: true
}
]
})
}
docDefinition.content.push({
text: [
'Mitgliedschaft: ',
{
text: `${$(`[for="membership-${model.membership}"]`).text()} (${$(`#membership-${model.membership}`).data('contribution')} €)`,
bold: true
}
]
})
pdfMake.createPdf(docDefinition).download('Mitgliedsantrag FabLab NEA.pdf')
})