def get(self, eventId, guardianId): '''The visitor is not an authenticated guardian''' if not SubscriptionLoginHandler.isAuthenticatedGuardian(): self.redirect('/inschrijven/') return '''The guardian is not authorized to see the page with the given eventId/guardianId''' if not self.isAuthorized(eventId, guardianId): SubscriptionLoginHandler.redirectToSubscriptionPage(self) return '''The guardian is an authorized guardian, so show the form''' event = Event.get_by_id(int(eventId)) days = Day.gql("WHERE event = :1", event).fetch(999) guardian = Guardian.get_by_key_name(guardianId) notifications = [] templVal = { 'notifications': notifications } subscriptionDetailsList = SubscriptionDetails.gql("WHERE event = :1 AND guardian = :2", event, guardian).fetch(1, 0) if not subscriptionDetailsList: notifications.append('Pagina niet gevonden.') self.showError(templVal) return subscriptionDetails = subscriptionDetailsList[0] if subscriptionDetails and subscriptionDetails.requested: notifications.append('U kunt geen verzoeken meer indienen.') self.showError(templVal) return students = Student.gql("WHERE guardian = :1", guardian).fetch(999, 0) students_subjects = self.getStudentsSubjects(students) if event and guardian and students and days: templVal = { 'event': event, 'days': days, 'guardian': guardian, 'students': students_subjects } path = os.path.join(os.path.dirname(__file__), '../templates/subscription/subscription.html') self.response.out.write(template.render(path, templVal))
def get(self, arg): #first call for edit modus if arg.isdigit(): #get event info and parse it in template event = Event.get_by_id(int(arg)) day = Day.gql("WHERE event = :1", event)[0] monthText = self.getMonthText(day.date.month) tV = { 'event': event, 'day': day, 'monthText': monthText, 'logoutlink': users.create_logout_url("/") } path = os.path.join(os.path.dirname(__file__), '../templates/administration/event-edit.html') self.response.out.write(template.render(path, tV)) #first call of new event elif arg == 'nieuw': path = os.path.join(os.path.dirname(__file__), '../templates/administration/event-edit.html') self.response.out.write(template.render(path, {'logoutlink': users.create_logout_url("/")}))
def post(self, eventId, guardianId): '''The visitor is not an authenticated guardian''' if not SubscriptionLoginHandler.isAuthenticatedGuardian(): self.redirect('/inschrijven/') return '''The guardian is not authorized to the given''' if not self.isAuthorized(eventId, guardianId): SubscriptionLoginHandler.redirectToSubscriptionPage(self) return event = Event.get_by_id(int(eventId)) days = Day.gql("WHERE event = :1", event).fetch(999) guardian = Guardian.get_by_key_name(guardianId) students = Student.gql("WHERE guardian = :1", guardian).fetch(999, 0) students_subjects = self.getStudentsSubjects(students) notifications = [] templVal = { 'event': event, 'days': days, 'guardian': guardian, 'students': students_subjects, 'notifications': notifications } if not (event and days and guardian and students): notifications.append('U probeert een onmogelijke bewerking uit te voeren.') self.showError(templVal) return subscriptionDetailsList = SubscriptionDetails.gql("WHERE event = :1 AND guardian = :2", event, guardian).fetch(1, 0) if not subscriptionDetailsList: notifications.append('Pagina niet gevonden.') self.showError(templVal) return subscriptionDetails = subscriptionDetailsList[0] if subscriptionDetails and subscriptionDetails.requested: notifications.append('U kunt geen verzoeken meer indienen.') self.showError(templVal) return studentKeys = [str(k.replace('subject_', '')) for k in self.request.arguments() if re.match("subject_.+", k)] requests = [] dayPrefs = [] for s in students[:]: if str(s.key().name()) not in studentKeys: students.remove(s) if not students: notifications.append('U kunt geen verzoek indienen als u geen enkel vak geselecteerd heeft. ') for student in students[:]: subjectCodes = [c for c in self.request.get_all("subject_" + str(student.key().name()))] subjects = Subject.get_by_key_name(subjectCodes) if len(subjectCodes) > 3: notifications.append('U kunt maximaal 3 vakken per leerling bespreken.') if len(subjectCodes) != len(subjects): notifications.append('U probeert een onmogelijke bewerking uit te voeren.') for subject in subjects: combination = Combination.gql("WHERE class_id = :1 AND subject = :2", student.class_id, subject).fetch(1,0)[0] if not combination: notifications.append('U probeert een onmogelijke bewerking uit te voeren.') self.showError(templVal) return request = Request() request.event = event request.guardian = guardian request.student = student request.combination = combination requests.append(request) '''Process timepreference''' timePref = TimePreference() timePref.event = event timePref.guardian = guardian timePref.preference = 0 if not (self.request.get('time_pref') and (int(self.request.get('time_pref')) in [0,1,2])): notifications.append('U moet een voorkeur voor tijd aangeven.') else: timePref.preference = int(self.request.get('time_pref')) '''Check if dates from the form match the dates from the event ''' dayKeys = [long(k.replace('date_', '')) for k in self.request.arguments() if re.match("date_.+", k)] dayKeysFromStore= [day.key().id() for day in days] daysOk = True for dayKey in dayKeys: if dayKey not in dayKeysFromStore: daysOk = False notifications.append('U probeert een onmogelijke bewerking uit te voeren.') self.showError(templVal) return '''Check if the daypreference are correct filled in''' dayPrefsList = [int(self.request.get(k)) for k in self.request.arguments() if re.match("date_.+", k)] dayPrefsList.sort() dayPrefsOk = True if dayPrefsList != [1,2,3]: dayPrefsOk = False notifications.append('U moet een eerste, een tweede en een derde voorkeur aangeven') '''Process daypreferences''' if daysOk and dayPrefsOk: for day in days: dayPref = DayPreference() dayPref.day = day dayPref.guardian = guardian dayPref.rank = int(self.request.get("date_" + str(day.key().id()))) dayPrefs.append(dayPref) if notifications: path = os.path.join(os.path.dirname(__file__), '../templates/subscription/subscription.html') self.response.out.write(template.render(path, templVal)) return '''Store the requests''' for request in requests: request.put() for dayPref in dayPrefs: dayPref.put() timePref.put() subscriptionDetails.requested = True subscriptionDetails.put() SubscriptionLogoutHandler.logoutGuardian() path = os.path.join(os.path.dirname(__file__), '../templates/subscription/subscription-success.html') self.response.out.write(template.render(path, templVal)) return
def post(self, arg): if self.request.POST['i-save-event']: n = self.request.POST['i-name'] d = self.request.POST['i-startdate'] v = Validator() errors = []; #is it an existing event or not? if arg.isdigit(): nE = Event.get_by_id(int(arg)) nDs = Day.gql("WHERE event = :1", nE).fetch(3) elif arg == 'nieuw': nE = Event(tables=40, talk_time=15) nDs = [Day(talks=12), Day(talks=12), Day(talks=12)] #validate data if not v.vString(n): errors.append('onjuiste titel ouderavondreeks') else: nE.event_name = n if not v.vDate(d): errors.append('onjuiste startdatum') else: d = map(int, (d.split('-'))) sD = datetime.datetime(year=d[0], month=d[1], day=d[2], hour=20, minute=00) nDs[0].date = sD #show errors if they exist if errors: path = os.path.join(os.path.dirname(__file__), '../templates/administration/event-edit.html') monthText = '' if nDs[0].date: monthText = self.getMonthText(nDs[0].date.month) tv = { 'errors': errors, 'event': nE, 'day': nDs[0], 'monthText': monthText, 'logoutlink': users.create_logout_url("/") } self.response.out.write(template.render(path, tv)) #update event in datastore if no error exists else: nE.put() #add two other dates and store them delta = datetime.timedelta(days=1) if nDs[0].date.weekday() < 3: nDs[1].date = deepcopy(nDs[0].date) + delta nDs[2].date = deepcopy(nDs[0].date) + delta*2 elif nDs[0].date.weekday() == 3: nDs[1].date = deepcopy(nDs[0].date) + delta nDs[2].date = deepcopy(nDs[0].date) + delta*3 elif nDs[0].date.weekday() == 4: nDs[1].date = deepcopy(nDs[0].date) + delta*3 nDs[2].date = deepcopy(nDs[0].date) + delta*4 for d in nDs: d.event = nE d.updateEndTime() d.put() self.redirect('/administratie')