def edit_section(request, id): db = Firestore.get_instance() section_ref = db.collection('sections').document(id) section = section_ref.get() sec = section.to_dict() classNames = [] for i in sec.get("classes"): classNames.append(i.get("className")) classes_string = ",".join(classNames) s = Section(firebase_id=id, sectionName=sec.get('sectionName'), sectionFullName=sec.get('sectionFullName'), classes=classes_string) sec_form = SectionForm(request.POST, instance=s) if request.method == 'POST': if sec_form.is_valid(): sec_form.save() return redirect('/sections') else: sec_form = SectionForm(instance=s) return render(request, 'create_section.html', { 'form': sec_form, 'edit_section': True })
def sections(request): db = Firestore.get_instance() section_ref = db.collection('sections') section_docs = section_ref.stream() sections = [] for doc in section_docs: doc_fields = doc.to_dict() classNames = [] classes = doc_fields.get('classes', []) for this_class in classes: classNames.append(this_class.get("className")) classes_string = ",".join(classNames) section = Section(firebase_id=doc.id, sectionName=doc_fields.get('sectionName'), sectionFullName=doc_fields.get('sectionFullName'), classes=classes_string) sections.append(section) sections.sort(key=lambda item: item.sectionName) return render(request, "sections.html", {"sections": sections})
def save(self): data = self.cleaned_data db = Firestore.get_instance() id = data.get('firebase_id') if id: doc_ref = db.collection(u'event').document(id) else: doc_ref = db.collection(u'event').document() doc_ref.set({ u'name': data.get('name'), u'disappear': data.get('disappear'), u'form': data.get('form'), u'release': data.get('release'), u'who': data.get('who') }) return data
def get_all_classes(): db = Firestore.get_instance() section_ref = db.collection('sections') docs = section_ref.get() classes = [] for section in docs: section_fields = section.to_dict() section_classes = section_fields.get('classes') if section_classes is not None: for section_class in section_classes: class_name = section_class.get('className') classes.append(class_name) classes.sort(key=str.casefold) return classes
def ticket_system(request): db = Firestore.get_instance() events_ref = db.collection(u'event') docs = events_ref.stream() events = [] for doc in docs: doc_fields = doc.to_dict() event = Event(firebase_id=doc.id, name=doc_fields.get('name'), disappear=doc_fields.get('disappear'), form=doc_fields.get('form'), release=doc_fields.get('release'), who=doc_fields.get('who')) events.append(event) events.sort(key=lambda item: item.name) return render(request, "ticket-system.html", {"events": events})
def save(self): data = self.cleaned_data db = Firestore.get_instance() id = data.get('firebase_id') class_list = [] classes_split = data.get('classes').split(',') for class_name in classes_split: class_list.append({'className': class_name}) if id: doc_ref = db.collection(u'sections').document(id) else: doc_ref = db.collection(u'sections').document() doc_ref.set({ u'sectionName': data.get('sectionName'), u'sectionFullName': data.get('sectionFullName'), u'classes': class_list }) return data
def edit_event(request, id): db = Firestore.get_instance() event_ref = db.collection(u'event').document(id) event = event_ref.get() doc_fields = event.to_dict() event_object = Event(firebase_id=id, name=doc_fields.get('name'), disappear=doc_fields.get('disappear'), form=doc_fields.get('form'), release=doc_fields.get('release'), who=doc_fields.get('who')) form = EventForm(request.POST, instance=event_object) if request.method == 'POST': if form.is_valid(): form.save() return redirect('ticket-system/') else: form = EventForm(instance=event_object) return render(request, 'create_event.html', { 'form': form, 'edit_event': True })
def delete_event(request, id): db = Firestore.get_instance() event_ref = db.collection(u'event').document(id) event_ref.delete() return redirect('/ticket-system/')
def delete_section(request, id): db = Firestore.get_instance() section_ref = db.collection('sections').document(id) section_ref.delete() return redirect('/sections')
def send_automatic_notification(): """ Finds all events that occur tomorrow if the current time is between 12:00-13:00 or within 20-40 minutes if the time is 7:30 and sends a notification to all users that can attend the event. """ current_time = datetime.now() current_date = datetime.today() current_hour = current_time.hour events = None start_limit = current_time end_limit = current_time if current_hour == 12: tomorrow_date = current_date + timedelta(days=1) start_limit = datetime.combine(tomorrow_date, time.min) end_limit = datetime.combine(tomorrow_date, time.max) elif current_hour == 7: eight_am = datetime.combine(current_date, time(hour=8)) # Add a margin of 10 minutes around 8 just for safety start_limit = eight_am - timedelta(minutes=10) end_limit = eight_am + timedelta(minutes=10) else: return start_limit = localize_timestamp(start_limit) end_limit = localize_timestamp(end_limit) db = Firestore.get_instance() events = db.collection('event')\ .where('release', '>=', start_limit)\ .where('release', '<=', end_limit)\ .stream() for event in events: event_dict = event.to_dict() attending_classes = event_dict.get("who") registration_tokens = Firestore\ .get_user_registration_tokens_by_classes(attending_classes) content = "" title = "" sender = "Rekå" if current_hour == 12: release = event_dict.get("release") release_stockholm_time = release.astimezone( timezone("Europe/Stockholm")) release_time = release_stockholm_time.strftime("%-H:%M") content = ("Imorgon klockan {0} släpps biljetterna till {1}. " "Glöm inte att reservera " "din biljett här i appen!").format( release_time, event_dict.get("name")) title = ("Biljettsläpp för {0} öppnar imorgon").format( event_dict.get("name")) elif current_hour == 7: content = ( "Om 30 minuter släpps biljetterna till {0}. " "Glöm inte att reservera din biljett här i appen!").format( event_dict.get("name")) title = ("Biljettsläpp för {0} öppnar om 30 min").format( event_dict.get("name")) else: raise ValueError(("Could not set a title and content " "for automatic reminder notification")) statistics = CloudMessaging.send_notification(registration_tokens, title, content, sender) print(statistics)