Changeset ee679c6 for asadb/groups
- Timestamp:
- Aug 1, 2011, 5:48:34 AM (14 years ago)
- Branches:
- master, space-access, stable, stage, test-hooks
- Children:
- 7db8f3b
- Parents:
- 1d85006
- git-author:
- Alex Dehnert <adehnert@…> (08/01/11 05:48:34)
- git-committer:
- Alex Dehnert <adehnert@…> (08/01/11 05:48:34)
- Location:
- asadb/groups
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
asadb/groups/models.py
r1d85006 ree679c6 71 71 72 72 class OfficeHolder(models.Model): 73 EXPIRE_OFFSET = datetime.timedelta(seconds=1) 74 73 75 person = models.CharField(max_length=30) 74 76 role = models.ForeignKey('OfficerRole') … … 76 78 start_time = models.DateTimeField(default=datetime.datetime.now) 77 79 end_time = models.DateTimeField(default=datetime.datetime.max) 80 81 def expire(self, ): 82 self.end_time = datetime.datetime.now()-self.EXPIRE_OFFSET 83 self.save() 78 84 79 85 def __str__(self, ): -
asadb/groups/views.py
r5b68039 ree679c6 131 131 context['title'] = "Recent Changes" 132 132 return context 133 134 135 def load_officers(group, ): 136 officers = group.officers() 137 people = list(set([ officer.person for officer in officers ])) 138 roles = groups.models.OfficerRole.objects.all() 139 140 officers_map = {} 141 for officer in officers: 142 officers_map[(officer.person, officer.role)] = officer 143 144 return people, roles, officers_map 145 146 def manage_officers(request, group_id, ): 147 group = get_object_or_404(groups.models.Group, pk=group_id) 148 149 if not request.user.has_perm('groups.change_group', group): 150 raise PermissionDenied 151 152 max_new = 4 153 154 people, roles, officers_map = load_officers(group) 155 156 msgs = [] 157 changes = [] 158 edited = False 159 kept = 0 160 kept_not = 0 161 if request.method == 'POST': # If the form has been submitted 162 edited = True 163 164 new_people = {} 165 for i in range(max_new): 166 key = "extra.%d" % (i, ) 167 if key in request.POST: 168 # TODO: validate as real usernames 169 new_people[i] = request.POST[key] 170 for role in roles: 171 key = "holders.%s" % (role.slug, ) 172 new_holders = set() 173 if key in request.POST: 174 new_holders = set(request.POST.getlist(key, )) 175 if len(new_holders) > role.max_count: 176 msgs.append("You selected %d people for %s; only %d are allowed. No changes to %s have been carried out in this update." % 177 (len(new_holders), role.display_name, role.max_count, role.display_name, ) 178 ) 179 else: 180 for person in people: 181 if person in new_holders: 182 # TODO: validate student status of appropriate officers 183 if (person, role) in officers_map: 184 #changes.append(("Kept", "yellow", person, role)) 185 kept += 1 186 else: 187 holder = groups.models.OfficeHolder(person=person, role=role, group=group,) 188 holder.save() 189 changes.append(("Added", "green", person, role)) 190 else: 191 if (person, role) in officers_map: 192 officers_map[(person, role)].expire() 193 changes.append(("Removed", "red", person, role)) 194 else: 195 kept_not += 1 196 pass 197 for i in range(max_new): 198 if "extra.%d" % (i, ) in new_holders: 199 if i in new_people: 200 person = new_people[i] 201 holder = groups.models.OfficeHolder(person=person, role=role, group=group,) 202 holder.save() 203 changes.append(("Added", "green", person, role)) 204 205 # reload the data 206 people, roles, officers_map = load_officers(group) 207 208 officers_data = [] 209 for person in people: 210 role_list = [] 211 for role in roles: 212 if (person, role) in officers_map: 213 role_list.append((role, True)) 214 else: 215 role_list.append((role, False)) 216 officers_data.append((False, person, role_list)) 217 null_role_list = [(role, False) for role in roles] 218 for i in range(max_new): 219 officers_data.append((True, "extra.%d" % (i, ), null_role_list)) 220 221 context = { 222 'group': group, 223 'roles': roles, 224 'people': people, 225 'officers': officers_data, 226 'edited': edited, 227 'changes': changes, 228 'kept': kept, 229 'kept_not': kept_not, 230 'msgs': msgs, 231 } 232 return render_to_response('groups/group_change_officers.html', context, context_instance=RequestContext(request), )
Note: See TracChangeset
for help on using the changeset viewer.