1: <?php
2: /**
3: * Tento soubor je součástí projektu ErNISTo z předmetu A6N33LI Lékařská informatika
4: * v 1. ročníku magisterského studia oboru Biomedicínského inženýrství
5: */
6:
7: /**
8: * Model je základní službou (services) pro přístup k databázi. Využívá autowritingu pro inicializaci
9: * a většina jeho metod vrací instanci Nette\Database\Table\ActiveRow zapouzdřující jeden řádek z tabulky nebo
10: * Nette\Database\Table\Selection pro více řádků.
11: *
12: * @author Jakub Mottl
13: */
14:
15: class Model extends Nette\Object
16: {
17:
18: /** @var Nette\Database\Connection */
19: public $database;
20:
21: /**
22: */
23: public function __construct(Nette\Database\Connection $database){
24: $this->database = $database;
25: }
26:
27: /**
28: * Vrací pole ($id => $value) z tabulky $table pro SelectBox seřazené abecedně
29: * @param string Název tabulky
30: * @return array
31: */
32: public function getSelectArray($table){
33: return $this->database->table($table)->select('id, nazev')->order('nazev')->fetchPairs('id','nazev');
34: }
35:
36: /**
37: * Vrací návštěvu podle jejího ID
38: * @param int ID návštevy
39: * @return Nette\Database\Table\ActiveRow
40: */
41: public function getNavsteva($id){
42: return $this->database->table('navsteva')->get($id);
43: }
44:
45: /**
46: * Vrací seznam návštěv, které odpovídají zadanému datu.
47: * @param Datetime Datum podle kterého se mají vybrat návštevy
48: * @return Nette\Database\Table\Selection|NULL
49: */
50: public function getNavstevaByDate($date){
51: return $this->database->table('navsteva')
52: ->where('DATEDIFF(datum, ?) = 0',$date->format($date->format('Y-m-d')))
53: ->order('datum DESC');
54: }
55:
56: /**
57: * Vrací seznam všech návštěv pacienta podle jeho ID
58: * @param int ID pacienta
59: * @return Nette\Database\Table\Selection|NULL
60: */
61: public function getNavstevaByPacient($id){
62: return $this->database->table('navsteva')->where('pacient_id',$id)->order('datum');
63: }
64:
65: /**
66: * Vrací všechny návštevy, které vyhovují zadanému řetězci
67: * @param string Hledaný řetězec
68: * @return Nette\Database\Table\Selection
69: */
70: public function getNavstevaByTerm($term){
71: return $this->database->table('navsteva')
72: ->where("datum LIKE ? OR pacient.prijmeni LIKE ? OR pacient_id LIKE ? OR oddeleni.nazev LIKE ? OR pracoviste.nazev LIKE ? OR cislo_mistnosti LIKE ?",
73: '%'.$term.'%','%'.$term.'%','%'.$term.'%','%'.$term.'%','%'.$term.'%','%'.$term.'%')
74: ->order('datum DESC');
75: }
76:
77: /**
78: * Vloží novou návštěvu do tabulky a vrátí nový řádek
79: * @param array Pole hodnot array($column => $value)
80: * @return Nette\Database\Table\ActiveRow
81: */
82: public function addNavsteva($values){
83: return $this->database->table('navsteva')->insert($values);
84: }
85:
86: /**
87: * Vrací diagnozu podle jejího ID
88: * @param int ID diagnozy
89: * @return Nette\Database\Table\ActiveRow
90: */
91: public function getDiagnoza($id){
92: return $this->database->table('diagnoza')->get($id);
93: }
94:
95: /**
96: * Vloží novou diagnozu do tabulky a vrátí nový řádek
97: * @param array Pole hodnot array($column => $value)
98: * @return Nette\Database\Table\ActiveRow
99: */
100: public function addDiagnoza($values){
101: return $this->database->table('diagnoza')->insert($values);
102: }
103:
104: /**
105: * Vrací všechny diagnozy, které vyhovují zadanému řetězci
106: * @param string Hledaný řetězec
107: * @return Nette\Database\Table\Selection
108: */
109: public function getDiagnozaByTerm($term){
110: return $this->database->table('mkn10')->where('nazev LIKE ? OR id LIKE ?',$term.'%',$term.'%')->order('nazev');
111: }
112:
113: /**
114: * Vrací diagnozu podle jejího ID
115: * @param int ID diagnozy
116: * @return Nette\Database\Table\ActiveRow
117: */
118: public function getTerapie($id){
119: return $this->database->table('terapie')->get($id);
120: }
121:
122: /**
123: * Vloží novou terapii do tabulky a vrátí nový řádek
124: * @param array Pole hodnot array($column => $value)
125: * @return Nette\Database\Table\ActiveRow
126: */
127: public function addTerapie($values){
128: return $this->database->table('terapie')->insert($values);
129: }
130:
131: /**
132: * Vrací seznam zdrav. informací podle ID návštěvy
133: * @param int ID pacienta
134: * @return Nette\Database\Table\Selection|NULL
135: */
136: public function getInfoByNavsteva($id){
137: return $this->database->table('zdrav_info')->where('navsteva_id',$id)->fetch();
138: }
139:
140: /**
141: * Vloží nové zdrav. info do tabulky a vrátí nový řádek
142: * @param array Pole hodnot array($column => $value)
143: * @return Nette\Database\Table\ActiveRow
144: */
145: public function addInfo($values){
146: return $this->database->table('zdrav_info')->insert($values);
147: }
148:
149: /**
150: * Vrací pacienta podle jejího ID
151: * @param int ID Pacienta
152: * @return Nette\Database\Table\ActiveRow|NULL
153: */
154: public function getPacient($id){
155: return $this->database->table('pacient')->get($id);
156: }
157:
158: /**
159: * Vrací všechny pacienty, které vyhovují zadanému řetězci
160: * @param string Hledaný řetězec
161: * @return Nette\Database\Table\Selection|NULL
162: */
163: public function getPacientByTerm($term){
164: return $this->database->table('pacient')
165: ->where('prijmeni LIKE ? OR id LIKE ? OR jmeno LIKE ? OR ulice LIKE ? OR mesto LIKE ? OR psc LIKE ? OR cp LIKE ? OR pojistovna_id LIKE ?',
166: $term.'%',$term.'%',$term.'%',$term.'%',$term.'%',$term.'%',$term.'%',$term.'%')
167: ->order('prijmeni');
168: }
169:
170: /**
171: * Vloží nového pacienta do tabulky a vrátí nový řádek
172: * @param array Pole hodnot array($column => $value)
173: * @return Nette\Database\Table\ActiveRow
174: */
175: public function addPacient($values){
176: return $this->database->table('pacient')->insert($values);
177: }
178:
179: /**
180: * Připojí zaměstnance k návštěve
181: * @param int ID Návštěvy
182: * @param int ID Návštěvy
183: * @return Nette\Database\Table\ActiveRow
184: */
185: public function addZamestnanec($zamestnanec_id, $navsteva_id){
186: $values = array('zamestnanec_id' => $zamestnanec_id, 'navsteva_id' => $navsteva_id);
187: return $this->database->table('navsteva_has_zamestnanec')->insert($values);
188: }
189:
190: /**
191: * Odebere zaměstnance od návštěvy
192: * @param int ID Návštěvy
193: * @param int ID Návštěvy
194: * @return Nette\Database\Table\ActiveRow
195: */
196: public function deleteZamestnanec($zamestnanec_id, $navsteva_id){
197: $values = array('zamestnanec_id' => $zamestnanec_id, 'navsteva_id' => $navsteva_id);
198: return $this->database->table('navsteva_has_zamestnanec')->where($values)->delete();
199: }
200:
201: /**
202: * Vrací všechny zaměstnance, kteří vyhovují zadanému řetězci
203: * @param string Hledaný řetězec
204: * @return Nette\Database\Table\Selection|NULL
205: */
206: public function getZamestnanecByTerm($term){
207: return $this->database->table('zamestnanec')
208: ->where('prijmeni LIKE ? OR titul_pred LIKE ? OR titul_za LIKE ? OR jmeno LIKE ? OR oddeleni.nazev LIKE ?',
209: $term.'%',$term.'%',$term.'%',$term.'%',$term.'%')
210: ->order('prijmeni');
211: }
212:
213: // public function createAuthenticatorService(){
214: // return new Authenticator($this->database->table('betausers'));
215: // }
216:
217: }
218: