models.py
14.3 KB
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
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
#-*- coding:utf-8 -*-
from django.db.models import *
from django.contrib.auth.models import User, Group
from django.core.validators import MinValueValidator, MaxValueValidator
from dictionary.models import Entry, Frame, Message, Lemma, Lemma_Status, Vocabulary
from semantics.models import SemanticFrame
MANAGER_GROUPS = (u'Gość', u'Leksykograf', u'Superleksykograf', u'Administrator', u'Gość+', u'Frazeolog')
def manager_groups():
return Group.objects.filter(name__in=MANAGER_GROUPS)
class UserStats(Model):
user = OneToOneField(User, related_name='user_stats')
# oplaty za prace leksykograficzne
lemma_real_history = ManyToManyField('RealizedLemma', db_table='zrealizowane_hasla',
blank=True, null=True, related_name='user_stats')
# oplaty za prace leksykograficzne
phraseology_real_history = ManyToManyField('RealizedPhraseology', db_table='prace_frazeologiczne',
blank=True, null=True, related_name='user_stats')
# oplaty za prace leksykograficzne
bind_phraseology_frames_history = ManyToManyField('RealizedPhraseologyBinding', db_table='powiazania_frazeologiczne',
blank=True, null=True, related_name='user_stats')
# oplaty za prace semantyczne
semantics_real_history = ManyToManyField('RealizedSemantics', db_table='prace_semantyczne',
blank=True, null=True, related_name='user_stats')
# kwota uiszczona
paid_cash = FloatField(db_column='kwota_uiszczona', default = 0.0)
def __unicode__(self):
return '%s' % (self.user)
def made_phraseologic_empty_entries_count(self):
return self.phraseology_real_history.filter(status__type__sym_name='ready_f',
paid=False,
new_frames=0,
reused_frames=0).count()
def checked_phraseologic_empty_entries_count(self):
return self.phraseology_real_history.filter(status__type__sym_name='checked_f',
paid=False,
corr_frames=0,
ncorr_frames=0,
bonus=False).count()
def can_modify_phraseology_only(user, phraseologic):
return phraseologic and user.has_perm('dictionary.add_phraseologic_frames')
class RealizedLemma(Model):
"""Model representing realized and confirmed frames by user."""
# wykonane haslo
lemma = ForeignKey(Lemma, db_column='wykonane_haslo', related_name='realized_lemmas')
# wynagrodzenie za haslo
cash = FloatField(db_column='wynagrodzenie', default = 0.0)
# czy wykonanie hasla zostalo juz wynagrodzone
paid = BooleanField(db_column='oplacono', default=False)
# ta oplata zostala juz podliczona na pewnym etapie i nie nalezy zmieniac jej wartosci
counted = BooleanField(db_column='przeliczono', default=False)
# czy oplata jest bonusem dla leksykografa
bonus = BooleanField(db_column='bonus', default=False)
#wlasciwie wykonane schematy (wypelniane dla leksykografa)
prop_frames = PositiveIntegerField(db_column='poprawne_ramki',
default = 0)
# niewlasciwie wykonane schematy (wypelniane dla leksykografa)
wrong_frames = PositiveIntegerField(db_column='niepoprawne_ramki',
default = 0)
# poprawione schematy (wypelniane dla superleksykografa)
corr_frames = PositiveIntegerField(db_column='poprawione_ramki',
default = 0)
# poprawione schematy (wypelniane dla superleksykografa)
made_frames = PositiveIntegerField(db_column='wykonane_ramki',
default = 0)
# schematy niepoprawiane (wypelniane dla supeleksykografa)
ncorr_frames = PositiveIntegerField(db_column='niepoprawione_ramki',
default = 0)
date = DateTimeField(auto_now_add=True, db_column='data_zmiany')
# statusu hasla za przejscie do ktorego otrzymano oplate
status = ForeignKey(Lemma_Status, related_name='realized_lemmas',
blank=True, null=True)
def __unicode__(self):
return '%s: %f' % (self.lemma.entry, self.cash)
class RealizedPhraseology(Model):
"""Model representing realized phraseology work."""
# wykonane haslo
lemma = ForeignKey(Lemma, db_column='haslo', related_name='realized_phraseology')
# wynagrodzenie za haslo
cash = FloatField(db_column='wynagrodzenie', default = 0.0)
# czy praca zostala juz oplacona
paid = BooleanField(db_column='oplacono', default=False)
# ta oplata zostala juz podliczona na pewnym etapie i nie nalezy zmieniac jej wartosci
counted = BooleanField(db_column='przeliczono', default=False)
# czy oplata jest bonusem
bonus = BooleanField(db_column='bonus', default=False)
# stworzone nowe schematy frazeologiczne
new_frames = PositiveIntegerField(db_column='nowe_ramki',
default = 0)
# schematy pochodzace z podpowiedzi lub juz wczesniej istniejace dla danego lematu
reused_frames = PositiveIntegerField(db_column='ponownie_uzyte_ramki',
default = 0)
#wlasciwie wykonane schematy (wypelniane dla frazeologa)
prop_frames = PositiveIntegerField(db_column='poprawne_ramki',
default = 0)
# niewlasciwie wykonane schematy (wypelniane dla frazeologa)
wrong_frames = PositiveIntegerField(db_column='niepoprawne_ramki',
default = 0)
# poprawione schematy (wypelniane dla superfrazeologa)
corr_frames = PositiveIntegerField(db_column='poprawione_ramki',
default = 0)
# schematy niepoprawiane (wypelniane dla superfrazeologa)
ncorr_frames = PositiveIntegerField(db_column='niepoprawione_ramki',
default = 0)
# data podliczenia pracy
date = DateTimeField(auto_now_add=True, db_column='data_zmiany')
# statusu hasla za przejscie do ktorego otrzymano oplate
status = ForeignKey(Lemma_Status, related_name='realized_phraseology',
blank=True, null=True)
def __unicode__(self):
return '%s: %f' % (self.lemma.entry, self.cash)
class RealizedPhraseologyBinding(Model):
"""Model representing realized phraseology work."""
# wykonane haslo
main_entry = ForeignKey(Entry, db_column='glowne_haslo',
related_name='realized_phraseology_bindings__main')
phraseologic_frame = ForeignKey(Frame, db_column='ramka_frazeologiczna',
related_name='realized_phraseology_bindings__binded')
binded_entry = ForeignKey(Entry, db_column='przypisane_haslo',
related_name='realized_phraseology_bindings')
cash = FloatField(db_column='wynagrodzenie', default = 0.0)
# czy praca zostala juz oplacona
paid = BooleanField(db_column='oplacono', default=False)
# ta oplata zostala juz podliczona na pewnym etapie i nie nalezy zmieniac jej wartosci
counted = BooleanField(db_column='przeliczono', default=False)
# data podliczenia pracy
date = DateTimeField(auto_now_add=True, db_column='data_zmiany')
def __unicode__(self):
return u'%s: %f' % (self.phraseologic_frame, self.cash)
class UserSettings(Model):
user = OneToOneField(User, related_name='user_settings')
incremental_search = BooleanField(
default=False,
verbose_name=u'wyszukiwanie przyrostowe',
help_text=u'Wyszukiwanie odbywa się automatycznie w miarę wpisywania '
u'szukanego hasła. Sugerujemy wyłączenie w wypadku wolnego '
u'połączenia internetowego.')
filter_search = BooleanField(
default=True,
verbose_name=u'wyszukiwanie przez filtrowanie',
help_text=u'Wyszukiwanie powoduje zawężenie listy haseł do pasujących '
u'do zapytania.')
notes_per_page = PositiveSmallIntegerField(default=40,
db_column='wiadomosci_na_strone',
verbose_name=u'Notatki na stronę',
help_text=u'Liczba notatek na stronę w skrzynce odbiorczej użytkownika.',
validators=[
MaxValueValidator(100),
MinValueValidator(10)]
)
def has_new_messages(self):
lemmas_new_msg = self.user.lemmas.filter(messages__new=True).filter(messages__private=False)
if len(lemmas_new_msg) > 0:
return True;
return False;
def new_notes_number(self):
new_notes = Message.objects.filter(recipient=self.user, private=False, new=True)
return len(new_notes)
def change_all_lemmas(self):
return self.user.has_perm('dictionary.change_all_lemmas')
def view_lemma(self):
return self.user.has_perm('dictionary.view_lemma')
def view_realizations(self):
return self.user.has_perm('dictionary.view_realizations')
def view_notes(self):
return self.user.has_perm('dictionary.view_notes')
def add_notes(self):
return self.user.has_perm('dictionary.add_notes')
def change_lemmas(self):
return self.user.has_perm('dictionary.change_lemmas')
def change_lemma_status(self):
return self.user.has_perm('dictionary.change_lemma_status')
def manages_vocabulary(self):
return self.user.has_perm('dictionary.manage_vocabulary')
def download_vocabulary(self):
return self.user.has_perm('dictionary.download_vocabulary')
def view_vocab_stats(self):
return self.user.has_perm('dictionary.view_vocab_stats')
def edit_semantic_frames(self):
return self.user.has_perm('semantics.edit_frames')
class Meta:
permissions = (
('create_admin', u'Może nadawać dowolne role'),
)
class GroupSettings(Model):
"""Group settings model."""
group = OneToOneField(Group, related_name='group_settings')
abort_statuses = ManyToManyField(Lemma_Status, blank=True,
related_name='group_settings_abort')
next_statuses = ManyToManyField(Lemma_Status, blank=True,
related_name='group_settings_next')
active_statuses = ManyToManyField(Lemma_Status, blank=True,
related_name='group_settings_active')
priority = PositiveIntegerField(db_column='priorytet')
def __unicode__(self):
return '%s' % self.group.name
class AnonymousUserProfile(Model):
"""Anonymous user settings."""
user_template = ForeignKey(User, db_column='szablon_uzytkownika',
related_name='anonymous_user_settings')
selected = BooleanField(db_column='wybrana', default=False)
visible_statuses = ManyToManyField(Lemma_Status, blank=True,
related_name='anonymous_user_profiles')
def visible_vocabularies(self):
if self.user_template.has_perm('dictionary.view_all_lemmas'):
return Vocabulary.objects.all()
else:
return self.user_template.visible_vocabularies.all()
def __unicode__(self):
return unicode(self.user_template)
def get_anon_user():
return AnonymousUserProfile.objects.get(selected=True).user_template
def get_anon_profile():
return AnonymousUserProfile.objects.get(selected=True)
def filtering_mode(user):
return user.usersettings.filter_search
class RealizedSemantics(Model):
"""Model representing realized semantic work."""
# wykonane haslo
entry = ForeignKey(Entry, db_column='haslo',
related_name='realized_semantics')
# ramy semantyczne w momencie zapisu pracy
frames = ManyToManyField(SemanticFrame, db_table='ramy_semantyczne',
blank=True, null=True, related_name='realized_semantics')
# wynagrodzenie za haslo
cash = FloatField(db_column='wynagrodzenie', default=0.0)
# czy oplata jest bonusem dla semantyka
bonus = BooleanField(db_column='bonus', default=False)
# wlasciwie wykonane ramki (wypelniane dla semantyka)
prop_frames = PositiveIntegerField(db_column='poprawne_ramki',
default=0)
# czesciowo wlasciwie wykonane ramki (wypelniane dla semantyka) !NOWE
part_prop_frames = PositiveIntegerField(db_column='czesciowo_poprawne_ramki',
default=0)
# niewlasciwie wykonane ramki (wypelniane dla semantyka)
wrong_frames = PositiveIntegerField(db_column='niepoprawne_ramki',
default=0)
# dodane powiazania miedzy ramami i schematami !NOWE
added_connections = PositiveIntegerField(db_column='dodane_powiazania',
default=0)
# wykonane ramki (wypelniane dla semantyka)
made_frames = PositiveIntegerField(db_column='wykonane_ramki',
default=0)
# wspoldzielone ramki (wypelniane dla semantyka)
related_frames = PositiveIntegerField(db_column='wspoldzielone_ramki',
default=0)
# poprawione ramki (wypelniane dla supersemantyka)
corr_frames = PositiveIntegerField(db_column='poprawione_ramki',
default=0)
# czesciowo poprawione ramki (wypelniane dla supersemantyka) !NOWE
part_corr_frames = PositiveIntegerField(db_column='czesciowo_poprawione_ramki',
default=0)
# ramki niepoprawiane (wypelniane dla supersemantyka)
ncorr_frames = PositiveIntegerField(db_column='niepoprawione_ramki',
default=0)
date = DateTimeField(auto_now_add=True, db_column='data_zmiany')
# statusu hasla za przejscie do ktorego otrzymano oplate
status = ForeignKey(Lemma_Status, related_name='realized_semantics',
blank=True, null=True)
def __unicode__(self):
return '%s: %f' % (self.entry.name, self.cash)