Revision a3530159 snf-astakos-app/astakos/im/models.py
b/snf-astakos-app/astakos/im/models.py | ||
---|---|---|
1145 | 1145 |
return self.filter(Q(state=ProjectApplication.PENDING)|\ |
1146 | 1146 |
Q(state=ProjectApplication.APPROVED)) |
1147 | 1147 |
|
1148 |
def user_visible_by_last_of_chain(self, *filters, **kw_filters): |
|
1149 |
by_chain = self.user_visible_projects(*filters, **kw_filters).values('chain') |
|
1150 |
by_chain_min = [x['last_id'] for x in by_chain.annotate(last_id=models.Min('id'))] |
|
1151 |
return self.filter(id__in=by_chain_min) |
|
1148 |
def user_visible_by_chain(self, *filters, **kw_filters): |
|
1149 |
Q_PENDING = Q(state=ProjectApplication.PENDING) |
|
1150 |
Q_APPROVED = Q(state=ProjectApplication.APPROVED) |
|
1151 |
pending = self.filter(Q_PENDING).values_list('chain') |
|
1152 |
approved = self.filter(Q_APPROVED).values_list('chain') |
|
1153 |
by_chain = dict(pending.annotate(models.Max('id'))) |
|
1154 |
by_chain.update(approved.annotate(models.Max('id'))) |
|
1155 |
return self.filter(id__in=by_chain.values()) |
|
1152 | 1156 |
|
1153 | 1157 |
def user_accessible_projects(self, user): |
1154 | 1158 |
""" |
... | ... | |
1157 | 1161 |
participates_filters = Q(owner=user) | Q(applicant=user) | \ |
1158 | 1162 |
Q(project__projectmembership__person=user) |
1159 | 1163 |
|
1160 |
return self.user_visible_by_last_of_chain(participates_filters).order_by('issue_date').distinct()
|
|
1164 |
return self.user_visible_by_chain(participates_filters).order_by('issue_date').distinct() |
|
1161 | 1165 |
|
1162 | 1166 |
def search_by_name(self, *search_strings): |
1163 | 1167 |
q = Q() |
... | ... | |
1243 | 1247 |
DENIED : _('Denied') |
1244 | 1248 |
} |
1245 | 1249 |
|
1250 |
def get_project(self): |
|
1251 |
try: |
|
1252 |
project = Project.objects.get(id=self.chain, state=Project.APPROVED) |
|
1253 |
return Project |
|
1254 |
except Project.DoesNotExist, e: |
|
1255 |
return None |
|
1256 |
|
|
1246 | 1257 |
def state_display(self): |
1247 | 1258 |
return self.PROJECT_STATE_DISPLAY.get(self.state, _('Unknown')) |
1248 | 1259 |
|
... | ... | |
1363 | 1374 |
now = datetime.now() |
1364 | 1375 |
project = self._get_project_for_update() |
1365 | 1376 |
|
1366 |
try:
|
|
1367 |
# needs SERIALIZABLE
|
|
1368 |
conflicting_project = Project.objects.get(name=new_project_name)
|
|
1369 |
if (conflicting_project.is_alive and
|
|
1370 |
conflicting_project != project):
|
|
1377 |
if new_project_name != project.name:
|
|
1378 |
try:
|
|
1379 |
conflicting_project = Project.objects.get(
|
|
1380 |
name=new_project_name,
|
|
1381 |
is_active=True)
|
|
1371 | 1382 |
m = (_("cannot approve: project with name '%s' " |
1372 | 1383 |
"already exists (serial: %s)") % ( |
1373 | 1384 |
new_project_name, conflicting_project.id)) |
1374 | 1385 |
raise PermissionDenied(m) # invalid argument |
1375 |
except Project.DoesNotExist: |
|
1376 |
pass |
|
1386 |
except Project.DoesNotExist:
|
|
1387 |
pass
|
|
1377 | 1388 |
|
1378 | 1389 |
new_project = False |
1379 | 1390 |
if project is None: |
Also available in: Unified diff