Autor Zpráva
jefitto44
Profil
Známy zamestnáva cca 30 opatrovateliek a popýtal ma, či by som mu nevedel naprogramovať nejaký jednoduchý intranetový systém na zaznamenávanie ich dochádzky. Základné veci viem - databáza, v nej tabuľka s opatrovateľkami a ich informáciami, v systéme možnosť pridať, upraviť, alebo vymazať opatrovateľku. K opatrovateľke patria klienti (teda dedkovia a babky, ktorých opatrujú), čiže opäť tabuľka s klientmi a ich informáciami s možnosťou vložiť, upraviť, alebo vymazať klienta a následne meno klienta priradiť k opatrovateľke (to znamená, že daná opatrovateľka sa stará o tohto klienta).

K dochádzke -
Tu nastáva problém. Malo by to vyzerať tak, že príde na podstránku "Dochádzka" a bude tam mať tabuľku. V riadkoch budú mena opatrovateliek (cez cyklus písať riadky a prvému <td> dať meno opatrovateľky), v stĺpcoch však musia byť vypísané dni aktuálneho mesiaca. To znamená, že napr. tabuľka za október by mala mať 31 riadkov (ak rátam aj <th> riadok) a 32 stĺpcov (31 dni v oktobri + meno opatrovateľky). V každej bunke tabuľky bude možnosť dopísať počet odpracovaných hodín, alebo iné, ako napr OČR (ošetrenie člena rodina), M (maródka), ...
Otázka je:
1. ako takúto tabuľku vygenerovať
2. ako zabezpečiť, aby sa automaticky generovali tabuľky aj pre nasledujúce mesiace? (november by mal teda 31 stlpcov iba), navyše si to musí vedieť medzi tými mesiacmi prepínať. To by som asi riešil cez nejaký switch, by napr v $_GET["mesiac"] prišiel názov mesiaca a podľa toho by mu zobrazilo tú ktorú tabuľku. V case by potom bola premenná case $_GET["mesiac"]: /kod, ktory to všetko zabezpečuje/ break;
3. Ako ukladať do databázy tieto informácie? Na každý mesiac by to muselo založiť ďalšiu tabuľku?

Má niekto nejaké skúsenosti s niečim podobným?

Ďakujem za každú pomoc, veľmi si to vážim
mimochodec
Profil
K prvnímu odstavci: Tabulka ošetřovatelek, tabulka klientů, tabulka přiřazení klientů ošetřovatelkám ID, IDklienta, IDosetrovatelky, od (datelime), do (datelime).

Druhý odstavec:
1. Ako vygenerovať: zjistíš počet dnů daného měsíce (pokud není zadán, tak současný), pak vypíšeš patřičný počet td.
2. Nejen $_GET["mesiac"], ale i $_GET["rok"]
3. Ako ukladať - viz můj první řádek.
juriad
Profil
Takže klienty vůbec nemusíme řešit, ti do docházky nijak nevstupují.
Budeš mít jedinou tabulku, něco jako:
CREATE TABLE docházka (
  opatrovateľka INT NOT NULL REFERENCES opatrovateľky (id),
  datum DATE NOT NULL,
  typ ENUM('OČR', 'M', 'Ostatní'),
  odpracováno DECIMAL(5,2),
  poznámka VARCHAR(255),
  PRIMARY KEY (opatrovateľka, datum)
);

Předpokládám, že budeš celou měsíční tabulku najednou ukládat najednou a kdekoli se cokoli mohlo změnit. Proto provedeš dva dotazy.
1) pro políčka, která budou prázdná:
DELETE FROM docházka WHERE (opatrovateľka, datum) IN ((o1, d1), (o1, d2), ..., (on, dn))
2) pro změnu existujících a vložení nových (tady ukázáno jen pro odpracováno, samozřejmě že ten dotaz bude obsahovat i další pole a část update bude trochu složitější):
INSERT INTO docházka (opatrovateľka, datum, odpracováno) VALUES (o1, d1, h1), (o1, d2, h2), ..., (on, dn, hn)
ON DUPLICATE KEY UPDATE odpracováno = VALUES(odpracováno);

Výpis:
Pro každý měsíc si vytáhneš z datáze seznam všech opatrovateliek (*) a vygeneruješ si dvojrozměrné pole [opatrovateľka][denVMesici].
Pak položíš dotaz do databáze na všechny záznamy v daném měsíci a postupně je doplníš do toho pole.
Na závěr to pole vypíšeš. Jednotlivé inputy budou mít name="odpracováno[opatroviateľka1][den1]" a obdobně pro poznámku a typ.
Takto definovaný formulář se ti pak v PHP automaticky převede na pole a bude se s ním snadno pracovat.

1. Generování by snad už mělo být triviální. Máš 2D pole se všemi informacemi.
2. Žádný switch. Prostě si předáš datum třeba ve formátu: mesic=10&rok=2014. A následně toto použiješ pro filtování v databázi. Poku dotaz z docházky nic nevrátí, tak prostě bude tabulka nevyplněná.
3. Viz výše. NE!

Problémy:
Opatrovateľku nesmíš nikdy smazat. Můžeš jí ale nastavit datum pracovala_do a v tabulkách, pro pozdější měsíce ji už nezobrazovat vůbec.
To samé pro nově přidanou - bude mít atribut pracovala_od a v tabulkách starších ji nebudeš zobrazovat. Toto by měl snadno řešit dotaz (*).

Jasné?
jefitto44
Profil
Nie tak celkom... ja totiž potrebujem, aby tam vpisoval každý deň, keĎ skončí šichta, aby zapísal, ktorá opatrovateľka koľko odpracovala napr. dnes... a toto sa musí ukladať do DB (a následne z toho robiť export do excelu, ale to už zvládnem)
juriad
Profil
jefitto44:
Která část ti není jasná? To co chceš mnou nastíněný návrh umožňuje.
jefitto44
Profil
Ok, musím si to ešte raz v pokoji prečítať, jak prídem z roboty. Keby niečo, tak sa ešte ozvem. Zatiaľ ďakujem

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: