===== KG's code =====
==== Javascript ====
=== kg.definitions.fields ===
kg.fields.hotel = [
{ name: 'stad*', size: 'md', validation: {'not-empty___message': 'Je moet een stad waar het hotel ligt ingeven'} },
{ name: 'naam', size: 'lg', label: 'hotelnaam', labelOffcanvas: 'hotel', classOffcanvas: 'font-size-120' },
{ name: '[checkin*', size: 'sm', type: 'dateStart', validation: {'not-empty___message':'Geef de checkin datum in', 'kg-date-max':'checkout', 'kg-date-max-message': 'De checkin datum moet vóór de checkout liggen'}, colOffcanvas: 'col-6' },
{ name:'checkout*', size: 'sm', type:'date', validation:{'not-empty___message':'Geef de checkout datum in'}, colOffcanvas: 'col-6' },
{ name: 'gratisannuleren', size: 'sm', type:'date', label: 'annuleerbaar tot', info: 'datum tot wanneer er gratis geannuleerd kan worden', options: ['nocopy'] },
{ name: 'adres', size: 'lg', labelOffcanvas: '' },
{ name: 'telefoon', size: 'md', labelOffcanvas: '' },
{ name: 'email', size: 'md', type: 'email', labelOffcanvas: '' },
{ name: 'website', size: 'lg', type: 'url', labelOffcanvas: '' },
{ name: 'geboekt', size: 'xs', type: 'check' },
{ name: 'reservatiecode', size: 'md', classOffcanvas: 'lead bg-success-subtle px-2 border lh-lg' },
{ name: 'prijs', size: 'sm', type: 'decimal' },
{ name: 'ontbijt', size: 'xs', type: 'decimal', info: 'totaalprijs voor ontbijt, gebruik -1 indien ontbijt inbegrepen is in de prijs', options: ['nocopy'], values: kg.values.inbegrepen },
{ name: 'diner', size: 'xs', type: 'decimal', info: 'totaalprijs voor diner, gebruik -1 indien diner inbegrepen is in de prijs', options: ['nocopy'], values: kg.values.inbegrepen },
{ name: 'betaald', size: 'sm', type: 'decimal', info: 'bedrag dat al betaald werd bij reservatie', values: kg.values.saldo, valuesArguments: [['prijs', 'ontbijt','diner'], 'betaald'] },
{ name: '[checkin_tijd', size: 'sm', type: 'time', colOffcanvas: 'col-6' },
{ name: 'checkout_tijd', size: 'sm', type: 'time', colOffcanvas: 'col-6' },
{ name: 'latlon', size: 'lg', type: 'latlon', labelExtra: 'GPS coordinaten: lat,lon' },
{ name: 'opmerkingen', col: 'col-12', type: 'textarea'},
{ name: 'reis_id', type: 'hidden'}
];
if ( kg.data.reis['reis_label_lokale_taal'] ) {
kg.fields.hotel.splice(2, 0, { name: 'naam_lokale_taal', size: 'lg', label: 'hotelnaam in lokale taal', labelOffcanvas: 'in lokale taal' });
kg.fields.hotel.splice(7, 0, { name: 'adres_lokale_taal', size: 'lg', labelOffcanvas: '' });
}
kg.values.inbegrepen = (val) => {
if ( val == -1 ) {
return 'inbegrepen';
} else {
return (val || '');
}
}
kg.values.saldo = (args, data) => {
let tebetalen = 0;
if ( Array.isArray(args[0]) ) {
for ( const field of args[0] ) {
if ( data[field] && (data[field] != -1 ) ) {
tebetalen += Number(data[field]);
}
}
} else {
tebetalen = data[args[0]] || null;
}
let betaald = 0;
if ( Array.isArray(args[1]) ) {
for ( const field of args[1] ) {
if ( data[field] && (data[field] != -1 ) ) {
betaald += Number(data[field]);
}
}
} else {
betaald = data[args[1]] || null;
}
const saldo = Number.parseFloat(tebetalen - betaald).toFixed(2);
if ( isNaN(saldo) ) {
return betaald;
}
if ( saldo == 0 ) {
return `${betaald} (volledig voldaan)`
} else {
return `${betaald} (nog ${saldo} te betalen)`;
}
}