-
Notifications
You must be signed in to change notification settings - Fork 1
/
tm_new.txt
271 lines (189 loc) · 10.2 KB
/
tm_new.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
Taskmanager:
============
tables: - Tasks
- Projects
Tasks: 01 id_prim ! INT AUTO_INC
02 id_sec INT TRIGGER # DEFAULT id_sek=id_prim - iste zadolzitve, ki jih opravljajo razlicni ljudje imajo enak id_sec
03 id_proj INT
04 id_author INT
05 t_name CHAR(50)
06 t_desc CHAR(250)
07 in_date TIMESTAMP
08 deadline DATETIME
09 priority INT
10 state INT DEFAULT=0
11 start_date DATETIME
12 id_worker INT
13 end_date DATETIME
14 end_comment CHAR(250)
Projects: 01 id_proj INT
02 p_name CHAR(50)
03 p_desc CHAR(250)
04 id_coord INT # koordinator
05 start DATE
(06 deadline DATE) # ve se, kdaj se bo zaključil projekt
07 end DATE
(08 end_comment CHAR(250)) # tega ubistvu ne rabimo - debata o projektih bo tekla v več nitkah
Actions: - add_project
- add_task
- acc_task
- end_task
Views: - show_free_tasks
- show_my_tasks
- show_proj
- show_proj_tasks
- show_timeline # Vprasanje kaj bo
######
AKCIJE
######
add_project - OK!
===========
INSERT INTO Projects (p_name, p_desc, id_coord, start, end) VALUES ( "ime", "opis", id_uporobnika, datum_zacetka, rok);
# Ustvari nov projekt! DELA!
add_task - OK!
========
INSERT INTO Tasks (id_proj, id_author*, t_name, t_desc, in_date*, deadline, priority) VALUES ( NULL ali proj, avtor, ime, opis, datum_vnosa, rok, pomembnost);
# avtor je določen z uporabnikom, ki vnaša, in_date pa je timestamp. Stanje je DEFAULT = 0, tako da je ok.
# in_date nisem dal na timestamp, ker menim, da bi imel s tem samo tezave.
# Sigurno ima php funkcijo trenutnega časa in gre to pač notri...
# Ob ustbvaritvi se ne zapolnejo mesta start_date, id_member, end_date, end_comment. start_date in id_member se zapolnita ob
# sprejetju naloge, zadnja dva pa ob zaključku. Izpolni jih oseba, ki nalogo razrešuje.
# Delujoč:
INSERT INTO Tasks (id_proj, id_author, t_name, t_desc, in_date, deadline, priority) VALUES ( 1, 6, 'airsoft', 'oprema, koordiancija', '2014-05-01', '2014-08-04', 1);
SELECT state FROM Tasks WHERE id_prim = X; # To bo potem spremenljivka, ki bo sla v php-jev if!
# if state=0:
UPDATE Tasks SET id_sec = id_prim WHERE id_prim = X;
acc_task - OK!
========
SELECT state FROM Tasks WHERE id_prim = X; # id_prim je določen glede na izbrano (kliknjeni gumb accept) zadolžitev.
1) IF state == 0:
UPDATE Tasks SET start_date = ...
id_member = Y # Y določen z uporabnikom, ki je izbral zadolzitev
state = 1
WHERE id_prim = X; # X določen z zadolžitvijo, ki je izbrana
UPDATE Tasks SET start_date = '2014-08-25', id_worker=9, state=1 WHERE id_prim=5;
2) ELSE IF state == 1:
SELECT id_sec, id_proj, id_author, t_name, t_desc, in_date, deadline, priority, state FROM Tasks WHERE id_prim=X; # Php spremenljivke dobije te vrednosti
INSERT INTO Tasks (id_sec*, id_proj*, id_author*, t_name*, t_desc*, in_date*, deadline*, priority*, state, id_worker, start_date) VALUES
( ... );
# id_sec = id_sec kliknjene zadolžitve, * se skopira, state = 1, id_member - kdor je kliknil, start_date = timestamp
3) ELSE: Zadolžitev je zaključena
# Sprejetje naloge. Če naloge še ne dela nihče, potem ji spremenimo stanje (state), hkrati pa dodamo start_date in id_member - začetek dela in
# ime uporabnika, ki bo nalogo razrešil.
# Če se Iskraš prijavlja k nalogi, ki jo nekdo že opravlja - zahtevnejša naloga, ki potrebuje več ljudi, se ustvari nova naloga, prepišejo se
# se vrednosti iz prve naloge (id_sec, projekt, avtor, ime, opis, datum_vnosa, rok, pomembnost in stanje), doda pa se nov datum začetka
# in uporabnika, ki nalogo izvršuje.
# Torej, koordinator projekta ima možnost, da dodaja uporabnikom določa naloge (da iskraše javlja na naloge:).
end_task
========
UPDATE Tasks SET state = 2, 3, 4...
end_date = timestamp
end_comment = "komentar"
WHERE id_prim == X AND id_member == Y; # X Določen s klikom, Y določen z uporabnikom (ne moreš zaključiti taska koga drugega)
# Zaključek naloge. Izpolni uporabik, ki je zadolžitev delal. Izpolni samo komentar, datum zaključka se izpolni sam.
adm_del_task
============
# funkcija za admina, da bo odstanjeval napake
DELETE FROM Tasks WHERE id_prim = X;
adm_del_proj
============
# funkcija za admina foruma, da bo lahko pobrisal napačne vnose
DELETE FROM Projects WHERE id_proj = X;
adm_edit_task
=============
# funkcija za admina, da lahko popravi karkoli v tabeli
# a se da to že kako drugače v forumu na splošno narest (z dostopom do baze)
adm_edit_proj
=============
# funkcija za admina, da lahko popravi karkoli v projektu
#####
VIEWS
#####
show_all_tasks
==============
SELECT (t_name, p_name, deadline, state, priority, author) FROM Tasks T1
INNER JOIN Projects T2 ON T1.id_proj = T2.id_proj
INNER JOIN Members T3 IN T1.id_author = T3.id_member
ORDER BY deadline ASC
GROUP BY id_sec;
# Prikaže vse zadolžitve (ne glede na stanje). Istih zadolžitev z razlićnimi izvrševalci ne prikaže.
# Zraven je še gumbek za podrobnosti naloge - show_task() funkcija.
# ! GROUP BY id_sec NE DELA ! Ker ni AUTO_INCREMENT, je DEFAULT vrednost 0.
SELECT t_name AS zadolzitev, deadline AS rok, state AS stanje, priority AS pomembnost, name AS avtor, p_name AS projekt FROM Tasks T1 INNER JOIN Members T3 ON T1.id_author=T3.id_member INNER JOIN Projects T2 ON T1.id_proj=T2.id_proj;
show_free_tasks
===============
SELECT (t_name, p_name, deadline, state, priority, name) FROM Tasks T1
INNER JOIN Projects T2 ON T1.id_proj = T2.id_proj
INNER JOIN Members T3 IN T1.id_author = T3.id_member
WHERE state = 0 OR state = 1
GROUP BY id_sec;
# Tukaj še ni potrebe, da veš kdo task izvaja. To izveš v podrobnostih zadolžitve/taska.
# Če klikneš na task, se morajo izpisati podrobnosti za samo ta task.
# Zraven vseh so gumbki za sprejetje nadloge, ki te najprej pripeljejo na show_task,
# torej podrobnosti naloge.
# Delujoč Querry:
SELECT t_name AS zadolzitev, p_name AS projekt, deadline AS rok, state AS stanje, priority AS pomembnost, name AS avtor FROM Tasks T1 INNER JOIN Projects T2 ON T1.id_proj = T2.id_proj INNER JOIN Members T3 ON T1.id_author = T3.id_member WHERE state<2 GROUP BY id_sec ORDER BY deadline;
show_task - OK!
=========
1) IF state < 2:
SELECT (t_name, p_name, t_desc, deadline, state, author) FROM Tasks
WHERE id_prim = X; # X določen glede na to, kateri task klikneš
SELECT COUNT(*) FROM Tasks WHERE id_sec = X; # presteje koliko uporabnikov dela na nekem tasku
# Tole se more izpisat k prejšnjemu querry-ju
SELECT member FROM Tasks WHERE id_sec = X; # Izpiše ljudi, ki izvajajo zadolžitev
# nr_members mora sešteti zadolžitve z enakim id_sec
2) ELSE IF state >= 2:
SELECT (t_name, p_name, t_desc, start_date, deadline, state, author, end_date, end_comment) FROM Tasks
WHERE id_prim = X; # X določen glede na to, kateri task klikneš
# Prikaže posamezen podrobnosti izbrane zadolžitve. Če je stanje 0 ali 1, mora biti zraven gumbek za sprejetje naloge.
# acc_task() funkcija. Argument acc_task(id_prim) je primarni id zadolžitve.
SELECT t_name AS zadolzitev, p_name AS projekt, t_desc AS opis, deadline AS rok, state AS stanje, name AS avtor FROM Tasks T1 INNER JOIN Projects T2 ON T1.id_proj=T2.id_proj INNER JOIN Members T3 ON T1.id_author=T3.id_member WHERE id_prim=X;
show_my_tasks - OK!
=============
SELECT (t_name, p_name, deadline) FROM Tasks T1
INNER JOIN Projects T2 ON T1.id_proj = T2.id_proj
WHERE id_member = X; # X določen z uporabnikom, SORT BY ?
# Prikaže zadolžitve posameznega uporabnika.
# Pri tistih s stanjem 0 ali 1 mora biti zraven še gumb za zaključek naloge.
SELECT t_name AS zadolzitev, p_name AS projekt, deadline AS rok FROM Tasks T1 INNER JOIN Projects T2 ON T1.id_proj=T2.id_proj WHERE id_worker=X;
show_proj - OK!
=========
SELECT (p_name, start_date, koordinator, deadline) FROM Projects T1
INNER JOIN Members T2 ON T1.coord = T2.member;
# V tabeli mora biti Project kot link. Klik nanj odpre okno, ki pokaže njegov description in zadolžitve tega projekta.
# Delujoč Querry:
SELECT p_name AS projekt, start AS zacetek, name AS koordinator, end AS rok FROM Projects T1 INNER JOIN Members T2 ON T1.id_coord = T2.id_member;
# Tukaj bi bilo dobro vstavit še število taskov pri posameznem projektu.
SELECT COUNT(*) FROM Tasks WHERE id_proj=X;
# Delujoč:
SELECT p_name AS projekt, p_desc AS opis, start, end AS rok, name AS koordinator FROM Projects T1 INNER JOIN Members T2 ON T1.id_coord=T2.id_member;
show_proj_tasks - OK!
===============
SELECT (t_name, deadline, priority, state, author) FROM Tasks
INNER JOIN Members T3 IN T1.id_author = T3.id_member
GROUP BY id_sec;
# Prikaže zadolžitve posameznega projekta.
# Spet klik na task pomeni execute show_task();
SELECT t_name AS zadolzitev, p_name AS projekt, deadline AS rok, state AS stanje, priority AS pomembnost, name AS avtor FROM Tasks T1 INNER JOIN Projects T2 ON T1.id_proj = T2.id_proj INNER JOIN Members T3 ON T1.id_author = T3.id_member WHERE T1.id_proj=X GROUP BY id_sec ORDER BY deadline;
____________________________________________________
# Na tabeli Tasks je ustvarjen trigger:
# Ob vnosu v tabelo preveri ali je stanje 0, in če je, poveča sekundarni id za 1.
# Ob sprejetju naloge, ki jo je že prej sprejel nekdo drug state ostane enak :)
# Upam samo, da se bo triger dalo incorporirat v smf forum.
mysql> DELIMITER //
mysql> CREATE TRIGGER ai_id_sec
-> AFTER INSERT ON Tasks
-> FOR EACH ROW BEGIN
-> IF NEW.state=0 THEN
-> UPDATE Tasks SET id_sec=id_sec+1;
-> END IF;
-> END;//
Query OK, 0 rows affected (0.52 sec)
mysql> DELIMITER ;
# AHA - pa najbrž je v trigger bolje dodati, da je enak id_prim kot pa id_sec + 1,
# ker bodo potem id_sec poravnani s prvim id_prim
# Lahko bi dodal tudi ELSE v triger, ki INSERT-a v Tasks
# nov event s prepisanimi vrednostmi id_sec, avtor, projekt...
created_on TIMESTAMP DEFAULT 0,
changed_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP