def public_sell(request): error = '' success = False liu_id_form = LiuIDForm(request.POST or None) ticket_type_form = PublicTicketTypeForm(request.POST or None) if liu_id_form.is_valid() and ticket_type_form.is_valid(): try: term = liu_id_form.cleaned_data['liu_id'] try: person = Person.objects.search(term=term) if person.invoice_set.exists(): raise InvoiceExists() except Person.DoesNotExist: client = KOBRAClient(settings.KOBRA_USER, settings.KOBRA_KEY) student = client.get_student(term) visitor = Visitor.objects.create(**get_kwargs(student)) person = visitor.person_ptr invoice = Invoice(person=person, is_verified=False) invoice.generate_data() invoice.save() ticket_type_ids = ticket_type_form.cleaned_data.get('ticket_type') for ticket_type_id in ticket_type_ids: ticket_type = TicketType.objects.select_for_update().get(pk=ticket_type_id) if ticket_type.ticket_set.count() >= ticket_type.max_amount: raise TicketSoldOut() Ticket.objects.create(invoice=invoice, ticket_type=ticket_type, person=person) invoice.send_verify_email() success = True liu_id_form = LiuIDForm() ticket_type_form = PublicTicketTypeForm() except TicketSoldOut: error = _('This ticket type is sold out') except InvoiceExists: error = _('An invoice already exist for this person') except StudentNotFound: error = _('Student was not found') return render(request, 'tickets/public_sell.html', {'ticket_type_form': ticket_type_form, 'liu_id_form': liu_id_form, 'error': error, 'success': success})
def public_non_liu_sell(request): error = '' success = False visitor_form = PublicVisitorForm(request.POST or None) ticket_type_form = PublicTicketTypeForm(request.POST or None) if visitor_form.is_valid() and ticket_type_form.is_valid(): try: visitor = visitor_form.save() person = visitor.person_ptr invoice = Invoice(person=person, is_verified=False) invoice.generate_data() invoice.save() ticket_type_ids = ticket_type_form.cleaned_data.get('ticket_type') for ticket_type_id in ticket_type_ids: ticket_type = TicketType.objects.select_for_update().get(pk=ticket_type_id) if ticket_type.ticket_set.count() >= ticket_type.max_amount: # 4 o'clock in the morning hack... invoice.delete() person.delete() raise TicketSoldOut() Ticket.objects.create(invoice=invoice, ticket_type=ticket_type, person=person) invoice.send_verify_email() success = True visitor_form = PublicVisitorForm() ticket_type_form = PublicTicketTypeForm() except TicketSoldOut: error = _('This ticket type is sold out') except InvoiceExists: error = _('An invoice already exist for this person') except StudentNotFound: error = _('Student was not found') except InvalidForm: error = _('The form was not filled in properly') return render(request, 'tickets/public_non_liu_sell.html', {'ticket_type_form': ticket_type_form, 'visitor_form': visitor_form, 'error': error, 'success': success})
def preemption(request): error = '' success = False liu_id_form = LiuIDForm(request.POST or None) ticket_type_form = PreemptionTicketTypeForm(request.POST or None) if liu_id_form.is_valid() and ticket_type_form.is_valid(): try: try: worker = Worker.objects.select_for_update().get(liu_id=liu_id_form.cleaned_data.get('liu_id')) except Worker.DoesNotExist: pid = format_pid(liu_id_form.cleaned_data.get('liu_id')) if pid: worker = Worker.objects.select_for_update().get(pid=pid) else: raise Worker.DoesNotExist if worker.invoice_set.exists(): raise InvoiceExists() person = worker.person_ptr invoice = Invoice(person=person, is_verified=False) invoice.generate_data() invoice.send_verify_email() invoice.save() ticket_type_ids = ticket_type_form.cleaned_data.get('ticket_type') for ticket_type_id in ticket_type_ids: Ticket.objects.create(invoice=invoice, ticket_type_id=ticket_type_id, person=person) success = True liu_id_form = LiuIDForm() ticket_type_form = PreemptionTicketTypeForm() except Worker.DoesNotExist: error = _('The functionary was not found') except InvoiceExists: error = _('An invoice already exist for this person') return render(request, 'tickets/preemption.html', {'ticket_type_form': ticket_type_form, 'liu_id_form': liu_id_form, 'error': error, 'success': success})