Moikka!
Eli alustavasti kyselen miten seuraavanlainen kannattaisi toteuttaa, mitä ottaa huomioon ja millä näitä asioita kannattaa edes käsitellä.
Sivuilla täytetään seuraavanlainen formi:
Työn laatu:
Työn tekijä:
Työ aloitettu:
Työn kesto:
Tietokantaan siis tallennetaan työn aloitusaika sekä kesto.
Sitten pitäisi saada tehtyä yhteenveto viikon tunneista tähän tyyliin:
----
Arkipäivät: X tuntia
Iltatyötä: X tuntia
Yötyötä: X tuntia
Lauantai: X tuntia
Iltatyötä: X tuntia
Yötyötä: X tuntia
Sunnuntai: X tuntia
Iltatyötä X tuntia
Yötyötä: X tuntia
----
Iltatyötä on 18-22 välinen aika ja yötyötä on 22-06 välinen aika.
Esimerkki:
Mikäli työ aloitetaan esimerkiksi perjantaina kello 17:00 ja se kestää 9 tuntia niin yhteenveto näyttäisi sen työn osalta tältä:
Arkipäivät: 7 tuntia
Iltatyötä: 4 tuntia
Yötyötä: 2 tuntia
Lauantai: 2 tuntia
Iltatyötä: 0 tuntia
Yötyötä: 2 tuntia
Miten kannattaa alkaa näitä tunteja laskemaan kun tarjolla on ainoastaan työn aloitusaika sekä kesto? Itsellä tuntuu olevan niin tunkkaisia ajatuksia että päätin kysyä täältä neuvoa tämmöisen automatiikan perustaan.
-t0ll0
Jos työt osuvat tasatunneille, yksinkertainen ratkaisu on ensin muodostaa tarkka lista työtunneista:
pe 17 pe 18 pe 19 pe 20 pe 21 pe 22 pe 23 la 00 la 01
Tästä listasta on sitten helppo poimia erikseen yötyöt, lauantait ynnä muut.
Tehokkaampaa on tietenkin tunnistaa vuorokauden eri osat suoraan isompina paloina eli katkaista työrupeama vain olennaisilta rajoilta (yötyön alku ja loppu, lauantain alku ja loppu ynnä muut), jolloin tuloksena olisi tällaisia osia:
arki päivä 1 arki ilta 4 arki yö 2 la yö 2
Uskoakseni tähän sopii paremmin tuo toinen ehdotus.
Noh meikä kokeilee erillaisia tapoja ja palaan luultavasti jollain koodin rääpäleellä tänne!
Testailin parilla nopee ja näyttää antavan oikeita tuloksia. Nää voi parsee
suoraan php arrayksi json_decodella servupuolella.
Jos löytyy joku yhdistelmä millä ei toimi niin sano vaan niin debuggaan
//Käyttö calchours("maanantai", 16, 8); /* {"arkipaivat":{"total":8,"evening":4,"night":2},"lauantai":{"total":0,"evening":0,"night":0},"sunnuntai":{"total":0,"evening":0,"night":0}} */ calchours("perjantai", 17, 9) /* {"arkipaivat":{"total":7,"evening":4,"night":2},"lauantai":{"total":2,"evening":0,"night":2},"sunnuntai":{"total":0,"evening":0,"night":0}} */
function sumobj(obj) { var s = 0; for( var key in obj ) { if (typeof obj[key] == "object" ) { s += sumobj( obj[key] ); } else { s += +obj[key]; } } return s; } function calchours( daybegin, hourbegin, hoursdone ) { var days = { maanantai: 0, tiistai: 1, keskiviikko: 2, torstai: 3, perjantai: 4, lauantai: 5, sunnuntai: 6 } var nightmin = 22; var nightmax = 5; var eveningmin = 18; var eveningmax = 21; var shiftcontainer = { weekday: { night: 0, evening: 0, regular: 0 }, saturday: { night: 0, evening: 0, regular: 0 }, sunday: { night: 0, evening: 0, regular: 0 } } var curhour = days[daybegin] * 24 + hourbegin; do{ var curday = ~~(curhour / 24); if( !hoursdone ) { break; } var curhourmodulus = curhour % 24; var whichday = curhour < 120 ? "weekday" : curhour < 144 ? "saturday" : "sunday"; if ( curhourmodulus >= nightmin || curhourmodulus <= nightmax ) { shiftcontainer[whichday].night++; } else if ( curhourmodulus >= eveningmin && curhourmodulus <= eveningmax ) { shiftcontainer[whichday].evening++; } else{ shiftcontainer[whichday].regular++; } curhour++; curhour = curhour > 168 ? 0 : curhour; } while( hoursdone-- ); var r = { "arkipaivat": {"total": sumobj( shiftcontainer.weekday ), "evening": shiftcontainer.weekday.evening, "night": shiftcontainer.weekday.night}, "lauantai": {"total": sumobj( shiftcontainer.saturday ), "evening": shiftcontainer.saturday.evening, "night": shiftcontainer.saturday.night}, "sunnuntai": {"total": sumobj( shiftcontainer.sunday ), "evening": shiftcontainer.sunday.evening, "night": shiftcontainer.sunday.night} } return r; }
Ohop, en ollut huomannut tämmöistä vastausta!
Hyvältä näyttää kiitoksia esajeejee. Ei välttämättä suoraan toimi tekemässäni järjestelmässä mutta erittäin hyvä runko kuiteskin.
Palataan asiaan.
Aihe on jo aika vanha, joten et voi enää vastata siihen.