Avatar
Mego
Člen
Avatar
Mego:31. července 15:50

Nejde mi vymyslieť konkrétne riešenie.

Zkusil jsem: Skúšal som sa zamyslieť, ako by bolo možné zhotoviť takýto miniprogram.

Chci docílit: Potreboval by som si vyrobiť jednoduchý generátor zmien. Mám na mysli pracovné zmeny, napr. v štvorzmennej prevádzke (ranná, poobedná, nočná zmena a voľno). Funguje to systémom PO-NE 2+2+3, čiže 2 dni ráno, 2dni poobede, 3 dni nočná. Ďalší týždeň 2 dni voľno, 2dni ranná, 3 dni poobedná. Ďalší týždeň 2dni nočná, 2 dni voľno, 3 dni ranná a pod. Naozaj netuším, ako by som zhotovil logiku, ktorú by program pochopil a aby to vedel vypočítať z kalendára takým štýlom, že keď vyberiem dátum 22.7.2026, tak mi napíše, že robím nočnú. Napríklad.

Odpovědět 31. července 15:50
Radšej 15 minút skôr, ako 15 sekúnd neskoro...
Avatar
Odpovídá na Mego
Erik Šťastný:31. července 15:59

Prostě můžeš ty směny a volna, tak jak jsi je řekl za sebou skládat za sebe do kalendáře na dané dny? Nebude to zrovna efektivní když vybereš rok 2026, ale za to je to velmi jednoduché.

 
Nahoru Odpovědět 31. července 15:59
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:31. července 16:15

Co udelat ruzne kalendare? ranni, dopoledni, odpoledni, nocni, dovolena?
Jinak, mi z toho popisu neni jasne, jak to ma fungovat. Co je vstupem. Kdyz tim program nakrmim, tak, co ma vyprodukovat. Kukurice, sacky, olej, sul, elektrina - stroj - sacky s popcornem. Nejaky priklad 3 lidi, treba.

 
Nahoru Odpovědět 31. července 16:15
Avatar
Odpovídá na Peter Mlich
Erik Šťastný:31. července 16:18

Já to pochopil tak, že program jednou na začátku nakrmí sekvencí směn a volna k určitému datumu odkud začíná a pak může jen zadat datum v budoucnosti a dostane odpověď typu noční nebo volno, atp.

 
Nahoru Odpovědět 31. července 16:18
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:31. července 16:22

'PO-NE 2+2+3, čiže 2 dni ráno, 2dni poobede, 3 dni nočná. Ďalší týždeň 2 dni voľno, 2dni ranná, 3 dni poobedná. Ďalší týždeň 2dni nočná, 2 dni voľno, 3 dni ranná a pod. '

Lojza
po | ut | st | ct | pa | so | ne
rano | rano | odpoledne | odpoledne | noc | noc | noc
volno | volno | rano | rano | odpoledne | odpoledne | odpoledne
noc | noc | volno | volno | rano | rano | rano

Ale, nevim, co s tim. Takhle to zadas do kalendare, takhle to zobrazi. Nebo, potrebujes predvyplnit kalendar? A uvazujes i statni svatky a tak? Protoze to neni tak uplne legrace. Nejspis jsou na to specializovane aplikace za drahe penize.

 
Nahoru Odpovědět 31. července 16:22
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na Erik Šťastný
Peter Mlich:31. července 16:29

Jj, uz to taky vidim stejne, asi.
Normalne bych udelal tabulku, kalendar. Vyplnil do ni svatky a pak do ni zacal tohle vyplnovat. U cloveka bych pak sledoval, ktera vzory jsou komplet vyplnene a u ktereho diky svatku prisel o den. Ty usporene dny bude treba nejak resit.
Ale, obecne, tohle je spatne schema. Je to sice ferove takhle smeny rozhodit. Ale clovek potrebuje pravidelny rezim. A navic je to i v zakone. Na tohle stridani ti nikdo se zdravym rozumem nepristoupi. Maximalne to vydrzi 1-3 mesice, protoze bude mit tak naruseny spanek, ze se mu nebude darit usinat v dobe, kdy nema smenu.

 
Nahoru Odpovědět 31. července 16:29
Avatar
Odpovídá na Mego
Matúš Olejník:31. července 16:34

Keby si naplnil do poľa tie smeny ako
R, R, O, O, N, N, V... atď
Potom zadáš dátum o ktorom chceš zistiť info odrátaš aktuálny dátum a zistíš počet dní medzi nimi a tento počet dní pripočítaš k poradiu aktuálneho dňa (PO 0, NE 6) a dáš modulo o veľkosti tých smien tak dostaneš index smeny ktorá by mala byť. Nie som si úplne istý píšem narýchlo z vlaku, sorry ak to bude blbosť :D (samozrejme so sviatkami nerátam)

Nahoru Odpovědět 31. července 16:34
/* I am not sure why this works but it fixes the problem */
Avatar
Odpovídá na Peter Mlich
Erik Šťastný:31. července 16:34

Svátky většinou nikoho nezajímají ve vlivu na směny, projeví se to akorát ve výplatě. Jinak budeš se divit, ale takhle to chodí i v některých obřích firmách, mám kamaráda v mezinárodní firmě s miliardovýma obratama a chudáci tam prostě dělají, 2 dny denní 12 a pak hned 2 dny noční 12, apod. šílenosti, nechápu jak to někdo může dělat, přesně jak mluvíš o tom narušeném spánku a všechno prostě. Nicméně to je offtopic, kterým nemusíme spamovat :D

Editováno 31. července 16:35
 
Nahoru Odpovědět 31. července 16:34
Avatar
David Hynek
Redaktor
Avatar
David Hynek:31. července 17:37

Ale tak to přeci nefunguje. U směnných provozů se střídá i doba volna. Nikde nemůžeš mít 7 pracovních dní za sebou, pak mít dva dny volna a pak zas 7 dní práce. Jestli se nepletu, tak se tam musí střídat dlouhý a krátký týden. Viz odkaz na obrázek:

Nahoru Odpovědět 31. července 17:37
Čím víc vím, tím víc věcí nevím.
Avatar
Mego
Člen
Avatar
Mego:31. července 19:09

Je to tak ako som napisal. Pondelok utorok jedna zmena, streda stvrtok druha zmena, piatok, sobota, nedela tretia zmena. Cize to, co vyjde na piatok, plati cely vikend. Ked nocna, tak nocna. Ked volno, tak volno. Na tomto systeme funguju vsetky zmeny v chemosvite, cize asi 1500 ludi. Tento ukol je vsak len cisto pre mna, aby som si vedel vypocitat zmeny. Aby som to nemusel den po dni zadavat jak blb do kalendara, ked budem chciet vediet, co mi vyjde na stedry den.
Celkom sa mi paci ten napad s tym polom. Proste by som dajako v cykle daval datumy a priradzoval im zmeny podla toho, aky je to den v tyzdni.

Nahoru Odpovědět 31. července 19:09
Radšej 15 minút skôr, ako 15 sekúnd neskoro...
Avatar
Mego
Člen
Avatar
Mego:31. července 20:43

Sviatky samozrejme v tomto systéme nás nezaujímajú, robí sa non-stop. Môže nastať nejaká celozávodná dovolenka, väčšinou cez vianoce, ale s tým nerátam, proste ako keby nebola.

Nahoru Odpovědět 31. července 20:43
Radšej 15 minút skôr, ako 15 sekúnd neskoro...
Avatar
David Hynek
Redaktor
Avatar
Odpovídá na Mego
David Hynek:31. července 21:22

Nedalo mi to. Je to základ. Dalo by se to upravit do funkce, která by vracela konkrétní den. A musí se to doplnit o startovací směnu

<?php
$klic = array(0,0,1,1,2,2,2);
$smeny = array("ranni","odpoledni","nocni","volno");
$pozice = 0;
$tyden = 1;
$posu = 0;
echo "<table>\n<tr><th>Tyden</th><th>Pondeli</th><th>Utery</th><th>Streda</th><th>Ctvrtek</th><th>Patek</th><th>Sobota</th><th>Nedele</th></tr>\n
<tr><td> $tyden: </td>";
for($a=0;$a<356;$a++)
{
$p = ($klic[$pozice]+(($tyden-1)*3))%4; // lépe jsem to nevymyslel, tohle je klic
echo "<td> ".$smeny[$p]." </td>";
if(($a+1)%7==0 and $a!= 0) echo "</tr>\n<tr><td> ".++$tyden.": </td>";
if($pozice == 6) $pozice = 0;
else $pozice++;
}
echo "</table>";
?>
Editováno 31. července 21:24
Nahoru Odpovědět 31. července 21:22
Čím víc vím, tím víc věcí nevím.
Avatar
Jan Štol
Člen
Avatar
Jan Štol:1. srpna 0:44

Pokud jsem to správně pochopil, tak jsou vlastně jen 4 možnosti, jak může týden vypadat:

  • R,R,O,O,N,N,N
  • V,V,R,R,O,O,O
  • N,N,V,V,R,R,R
  • O,O,N,N,V,V,V

a takhle se to opakuje dokola.

Takže pokud jde o zjištění směny v daný den, tak mě napadlo něco jako:

<?php

$startDate = new DateTime('2018-08-01');
$targetDate = new DateTime('2018-08-17');
$startDateWeekIndex = 0; //0,1,2 nebo 3

$weeks = [
    ['R','R','O','O','N','N','N'], //0
    ['V','V','R','R','O','O','O'], //1
    ['N','N','V','V','R','R','R'], //2
    ['O','O','N','N','V','V','V'] //3
];

$date1 = clone $targetDate;
$date2 = clone $startDate;

$date1 = new DateTime($date1->modify('Monday this week')->format('Y-m-d'));
$date2 = new DateTime($date2->modify('Monday this week')->format('Y-m-d'));

$weeksCount = $date2->diff($date1)->d / 7;
$weekIndex = ($weeksCount+$startDateWeekIndex) % 4;
$dayIndex = $targetDate->format('N') - 1;

echo "Směna dne " . $targetDate->format('d.m.Y') . ": " . $weeks[$weekIndex][$dayIndex];

Datumy oba nastavuju na pondělí toho daného týdne, aby se lépe počítal rozdíl.

 
Nahoru Odpovědět  +1 1. srpna 0:44
Avatar
Mego
Člen
Avatar
Odpovídá na Jan Štol
Mego:1. srpna 5:46

Fu. No vecer to vyskusam a ak to funguje, tak sa ti klaniam vrucne :-)

Nahoru Odpovědět 1. srpna 5:46
Radšej 15 minút skôr, ako 15 sekúnd neskoro...
Avatar
Mego
Člen
Avatar
Mego:5. srpna 5:07

Kamarati, ono to uz existuje, aom zistil... https://play.google.com/…apps/details?…

Nahoru Odpovědět 5. srpna 5:07
Radšej 15 minút skôr, ako 15 sekúnd neskoro...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 15 zpráv z 15.