[TASK] multiple Formats

This commit is contained in:
Christian Seyfferth 2020-06-09 09:21:20 +02:00
parent c9197fc92c
commit 2a1c514e4f

136
app.js
View File

@ -82,6 +82,38 @@ var ruleStorage = {
} }
}; };
Vue.component('ask-format-modal',{
template: `
<div id="ask-format-modal" class="modal">
<div class="modal-content">
<h4>Dienstplanformat</h4>
<p>Welches Format soll eingelesen werden?</p>
<label v-for="option in options" >
<input name="dpFormat" type="radio" :value="option" v-model="picked"/>
<span>{{ option }}</span>
</label>
<p>Ausgewählt: {{ picked }}</p>
</div>
<div class="modal-footer">
<a href="#!" class="modal-close waves-effect waves-green btn-flat" @click.stop="submitPick">Bastätigen</a>
</div>
</div>
`,
data() {
return {
picked: null
}
},
props: ["options"],
methods: {
submitPick() {
this.$emit('picked-format', this.picked);
$('#ask-format-modal').modal('close');
}
}
});
Vue.component('chip-input', { Vue.component('chip-input', {
template: ` template: `
<div class="chips no-autoinit" :id="name"></div> <div class="chips no-autoinit" :id="name"></div>
@ -152,6 +184,7 @@ var app = new Vue({
selectedRuleIndex: -1, selectedRuleIndex: -1,
saveto: 'dienstplan.ics', saveto: 'dienstplan.ics',
uploadFileName: "", uploadFileName: "",
availableFormats: ["Erfurt","Stuttgart","X"],
config: { config: {
moment: { moment: {
parse_formats: [ parse_formats: [
@ -165,6 +198,7 @@ var app = new Vue({
displayLength: 3000 displayLength: 3000
} }
}, },
workbook: null,
}, },
watch: { watch: {
shifts: { shifts: {
@ -228,13 +262,18 @@ var app = new Vue({
if(isErfurterDienstplan){ if(isErfurterDienstplan){
vm.parseForErfurt(workbook.Sheets["Dienstplan"]); vm.parseForErfurt(workbook.Sheets["Dienstplan"]);
} else { } else {
var sheetName = workbook.SheetNames[0]; this.workbook = workbook;
vm.parseForStuttgart(workbook.Sheets[sheetName]); this.askForDienstplanFormat();
} }
}; };
reader.readAsBinaryString(file); reader.readAsBinaryString(file);
}, },
askForDienstplanFormat: function() {
this.makeToast("Dienstplanformat nicht erkannt.");
$('#ask-format-modal').modal("open");
},
parseForErfurt: function (dp) { parseForErfurt: function (dp) {
var arr = XLSX.utils.sheet_to_row_object_array(dp, { var arr = XLSX.utils.sheet_to_row_object_array(dp, {
range: 1 range: 1
@ -300,6 +339,99 @@ var app = new Vue({
}); });
}, },
parseForX: function (dp, sheetName) {
moment.locale(this.config.moment.parse_language);
var arr = XLSX.utils.sheet_to_json(dp, {
header: "A",
blankrows: false,
});
var vm = this;
var month = moment(sheetName.substr(sheetName.indexOf(" ")+1), "MMMM YYYY", "de");
var day;
arr.forEach(element => {
var art, name, beschreibung = null;
var time = moment().hour(0).minute(0);
try {
if (element.hasOwnProperty('A')) {
day = moment(element.A, "D.","de");
day = Number(element.A);
}
if ((!element.F && !element.H && !element.J) || element.I == "Spielort/ Extras" || element.J == "Spielort/Extras"){
} else {
if (element.hasOwnProperty("D") && element.hasOwnProperty("E")) {
// Probe
time = moment(element.D);
art = element.E.trim();
name = element.F ? element.F.trim() : "";
beschreibung = typeof(element.I) != 'undefined' ? element.I.trim()
: typeof(element.J) != 'undefined' ? element.J.trim()
: "";
}
else if (element.hasOwnProperty("G") && element.hasOwnProperty("H"))
{
// Vorstellung
time = moment(element.G);
art = "VS";
name = element.H.trim();
beschreibung = typeof(element.I) != 'undefined' ? element.I.trim()
: typeof(element.J) != 'undefined' ? element.J.trim()
: "";
}
else if (element.hasOwnProperty("I"))
{
// Spielort/Extras
beschreibung = element.I.trim();
name = name ? name : "Spielort/Extras";
}
else if (element.hasOwnProperty("J"))
{
// Spielort/Extras Fallback
beschreibung = element.J.trim();
name = name ? name : "Spielort/Extras";
}
var datumStr = day + '.' + month.clone().format("MM.YY") + time.format(" HH:mm");
var termin = {
ort: "",
art: art,
beschreibung: beschreibung,
name: name,
datum: moment(datumStr, "D.MM.YY HH:mm")
}
vm.addShift(new Shift(termin));
}
} catch (error) {
console.error("Fehler beim Parsen", element, error);
}
});
},
parsePickedFormat: function (format) {
this.makeToast(`Versuche ${format} zu lesen.`);
switch (format) {
case "Erfurt":
this.parseForErfurt(this.workbook.Sheets["Dienstplan"]);
break;
case "Stuttgart":
var sheetName = this.workbook.SheetNames[0];
this.parseForStuttgart(this.workbook.Sheets[sheetName]);
break;
case "X":
var sheetName = this.workbook.SheetNames[0];
this.parseForX(this.workbook.Sheets[sheetName], sheetName);
break;
default:
break;
}
this.workbook = null;
},
addShift: function (shift) { addShift: function (shift) {
this.shifts.push(shift); this.shifts.push(shift);
}, },