Skip to content

Commit

Permalink
"Arbeitszeit pro Woche" almost works
Browse files Browse the repository at this point in the history
i've been staring at this for too long. it's prob an off-by-one
err somewhere, this stuff is seriously getting on my nerves

see #9, #6
  • Loading branch information
kiliankoe committed Feb 18, 2016
1 parent d157abd commit 937e5e8
Show file tree
Hide file tree
Showing 2 changed files with 100 additions and 5 deletions.
8 changes: 4 additions & 4 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -36,25 +36,25 @@ <h2>Einstellungen</h2>
<label for="samstag">Samstag</label><br />
</fieldset>
<fieldset>
<legend class="hastooltip">Zeitberechnung (?)<span class="tooltip">Standardmäßig wird hier von 4,33 Wochen pro Monat (52 Wochen pro Jahr geteilt durch 12 Monate pro Jahr) ausgegangen. Je nach Stelle der Beschäftigung kann das jedoch anders gewollt sein. <b>Vorsicht</b>: Dies beeinflusst die automatisch generierte Arbeitszeit pro Monat!<br><br>"Arbeitszeit pro Woche" bedeutet, dass die Wochenarbeitszeit pro Woche stimmt und nicht hochgerechnet pro Monat. Beachtet werden allerdings nur Wochen mit mehr als zwei Wochentagen.</span></legend>
<legend class="hastooltip">Zeitberechnung (?)<span class="tooltip">Standardmäßig wird hier von 4,33 Wochen pro Monat (52 Wochen pro Jahr geteilt durch 12 Monate pro Jahr) ausgegangen. Je nach Stelle der Beschäftigung kann das jedoch anders gewollt sein. <b>Vorsicht</b>: Dies beeinflusst die automatisch generierte Arbeitszeit pro Monat!<br><br>"Arbeitszeit pro Woche" bedeutet, dass die Wochenarbeitszeit pro Woche stimmt und nicht hochgerechnet pro Monat. Beachtet werden allerdings nur Wochen, deren Montage im aktuellen Monat liegen. Sprich die erste Teilwoche fällt womöglich weg.</span></legend>
<input type="radio" class="timeoptions" name="timeoptions" id="timeoption1" value="timeoption1" checked> <label for="timeoption1">4,33 W/M</label><br>
<input type="radio" class="timeoptions" name="timeoptions" id="timeoption2" value="timeoption2"> <label for="timeoption2">4 W/M</label><br>
<input type="radio" class="timeoptions" name="timeoptions" id="timeoption3" value="timeoption3"> <label for="timeoption3">Arbeitszeit pro Woche</label><br>
</fieldset>
<fieldset name="cometimes">
<legend class="hastooltip">Kommen (?)<span class="tooltip">Werte werden zufällig in der "Kommen" Spalte der Tabelle bei Tagen mit Arbeitszeit eingetragen. Sind keine vorhanden bleibt die Spalte leer.</span></legend>
<legend class="hastooltip">Kommen (?)<span class="tooltip">Werte werden zufällig in der Spalte "Kommen" der Tabelle bei Tagen mit Arbeitszeit eingetragen. Sind keine vorhanden bleibt die Spalte leer.</span></legend>
<input type="text" class="cometimestext" id="cometimestext1" placeholder="9:00" />
<input type="text" class="cometimestext" id="cometimestext2" placeholder="10:00" />
<input type="text" class="cometimestext" id="cometimestext3" placeholder="16:00" />
</fieldset>
<fieldset name="leavetimes">
<legend class="hastooltip">Gehen (?)<span class="tooltip">Werte werden zufällig in der "Gehen" Spalte der Tabelle bei Tagen mit Arbeitszeit eingetragen. Sind keine vorhanden bleibt die Spalte leer.</span></legend>
<legend class="hastooltip">Gehen (?)<span class="tooltip">Werte werden zufällig in der Spalte "Gehen" der Tabelle bei Tagen mit Arbeitszeit eingetragen. Sind keine vorhanden bleibt die Spalte leer.</span></legend>
<input type="text" class="leavetimestext" id="leavetimestext1" placeholder="17:00" />
<input type="text" class="leavetimestext" id="leavetimestext2" placeholder="18:00" />
<input type="text" class="leavetimestext" id="leavetimestext3" placeholder="23:00" />
</fieldset>
<fieldset name="bemerkungen">
<legend class="hastooltip">Bemerkungen (?)<span class="tooltip">Werte werden zufällig in der "Bemerkungen" Spalte der Tabelle bei Tagen mit Arbeitszeit eingetragen. Sind keine vorhanden bleibt die Spalte leer.</span></legend>
<legend class="hastooltip">Bemerkungen (?)<span class="tooltip">Werte werden zufällig in der Spalte "Bemerkungen" der Tabelle bei Tagen mit Arbeitszeit eingetragen. Sind keine vorhanden bleibt die Spalte leer.</span></legend>
<input type="text" class="bemerkungstext" id="commenttext1" placeholder="Burger braten" />
<input type="text" class="bemerkungstext" id="commenttext2" placeholder="Däumchen drehen" />
<input type="text" class="bemerkungstext" id="commenttext3" placeholder="Freizeit finden" />
Expand Down
97 changes: 96 additions & 1 deletion stuff.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,12 @@ function generateStuff() {
var stundenzahl = document.getElementById("arbeitszeit").value;
var monat = document.getElementById("monat").value;

// don't even try to do stuff when entered month is undefined
// this fucks with getWeeklyDist if not present
if (!(monat in months)) {
return;
}

var bemerkungsfelder = document.querySelectorAll("input.bemerkungstext");
var cometimesfelder = document.querySelectorAll("input.cometimestext");
var leavetimesfelder = document.querySelectorAll("input.leavetimestext");
Expand All @@ -123,6 +129,7 @@ function generateStuff() {
var verteilung = getDist(months[monat]);

for (var i = 0; i < zellen.length; i+=1) {
// console.log(verteilung.length);
if (stundenzahl != "" && i < verteilung.length) {
if (verteilung[i] == 0) {
zellen[i].value = "";
Expand Down Expand Up @@ -170,7 +177,6 @@ function getDist(days) {
case "timeoption2":
return getRandomDist(days, 4.0);
case "timeoption3":
alert("Diese Zeitoption geht leider noch nicht, sry 😕");
return getWeeklyDist(days);
default:
console.log("Ya got something freaky going on there with the time options, mate...");
Expand Down Expand Up @@ -206,3 +212,92 @@ function getRandomDist(days, stundenzahl_value) {

return dist;
}

function getWeeklyDist(days) {
var dist = [];
for (var i = days - 1; i >= 0; i--) {
dist[i] = 0;
}

var stundenzahl = document.getElementById("arbeitszeit").value;

var year = document.getElementById("jahr").value;
var month = document.getElementById("monat").value-1;
var checked_days = tagesform.wochentag;

var mondays = getMondays(month, year);
mondays.forEach(function(monday){
var stundenpaket = stundenzahl;
while (stundenpaket > 0) {
var rand = getRandomInt(monday, monday+6);
var validate /* such pun */ = new Date(year, month, rand);
// console.log("y:"+year+" m:"+month+" d:"+rand+" -> "+validate);
if (checked_days[validate.getDay()].checked) {
// console.log("bling!");
dist[rand-1] += 1;
stundenpaket -= 1;
// console.log("validate:" + getDayStr(validate.getDay()) + " shouldbe:" + rand % 7);
// console.log("day: " + getDayStr(validate.getDay()) + " - index: " + rand + "=" + dist[rand] + " - stundenpaket: " + stundenpaket);
}
}
// console.log("--------------");
});
console.log(dist.length);
return dist;
}

// Return zero-indexed dates of mondays in a month, possibly omitting the last one
// if the month ends in the middle of that week.
function getMondays(month, year) {
var date = new Date(year, month, 0);
var month = date.getMonth();
var mondays = [];

date.setDate(1);

// Get the first monday of month
while (date.getDay() !== 1) {
date.setDate(date.getDate() + 1);
}

// save this and all other mondays
while (date.getMonth() === month && date.getDate() < 27) { // skipping mondays after the 28th, as partial weeks are stupid
mondays.push(date.getDate() - 1); // -1 because final date list is zero-indexed
date.setDate(date.getDate() + 7);
}

return mondays;
}

function getRandomInt(min, max) {
min = parseInt(min);
max = parseInt(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}

// for debugging only, can be deleted later
function getDayStr(day) {
switch (day) {
case 0:
return "sunday";
break;
case 1:
return "monday";
break;
case 2:
return "tuesday";
break;
case 3:
return "wednesday";
break;
case 4:
return "thursday";
break;
case 5:
return "friday";
break;
case 6:
return "saturday";
break;
}
}

0 comments on commit 937e5e8

Please sign in to comment.