def stats_view(request): """ This view lets accountants view statistics: how many tickets of which category, payment status, etc. """ #print("who is it? %s" % request.user.login) _number_of_datasets = PartyTicket.get_number() _number_of_tickets = PartyTicket.get_num_tickets() _num_passengers = PartyTicket.num_passengers() _num_open_tickets = int(_number_of_tickets) - int(_num_passengers) _num_tickets_unpaid = PartyTicket.get_num_unpaid() # _num_hobos = PartyTicket.get_num_hobos() _num_class_2 = PartyTicket.get_num_class_2() _num_class_2_food = PartyTicket.get_num_class_2_food() _num_class_1 = PartyTicket.get_num_class_1() _num_class_green = PartyTicket.get_num_class_green() # _sum_tickets_total = PartyTicket.get_sum_tickets_total() _sum_tickets_paid = PartyTicket.get_sum_tickets_paid() _sum_tickets_unpaid = PartyTicket.get_sum_tickets_unpaid() return { '_number_of_datasets': _number_of_datasets, '_number_of_tickets': _number_of_tickets, '_num_passengers': _num_passengers, '_num_open_tickets': _num_open_tickets, '_num_tickets_unpaid': _num_tickets_unpaid, # ticket categories 'num_hobos': _num_hobos, 'num_class_2': _num_class_2, 'num_class_2_food': _num_class_2_food, 'num_class_1': _num_class_1, 'num_class_green': _num_class_green, # focus on cash 'sum_tickets_total': _sum_tickets_total, 'sum_tickets_paid': _sum_tickets_paid, 'sum_tickets_unpaid': _sum_tickets_unpaid, }
def accountants_desk(request): """ This view lets accountants view applications and set their status: has their payment arrived? """ #print("who is it? %s" % request.user.login) _number_of_datasets = PartyTicket.get_number() #print("request.matchdict['number']: %s" % request.matchdict['number']) try: # check if # a page number was supplied with the URL _page_to_show = int(request.matchdict['number']) #print("page to show: %s" % _page_to_show) except: _page_to_show = 0 # is it a number? yes, cast above #if not isinstance(_page_to_show, type(1)): # _page_to_show = 0 #print("_page_to_show: %s" % _page_to_show) # check for input from "find dataset by confirm code" form if 'code_to_show' in request.POST: print("found code_to_show in POST: %s" % request.POST['code_to_show']) try: _code = request.POST['code_to_show'] #print(_code) _entry = PartyTicket.get_by_code(_code) print(_entry) print(_entry.id) return HTTPFound( location=request.route_url( 'detail', ticket_id=_entry.id) ) except: # choose default print("barf!") pass # how many to display on one page? """ num_display determines how many items are to be shown on one page """ #print request.POST if 'num_to_show' in request.POST: #print("found it in POST") try: _num = int(request.POST['num_to_show']) if isinstance(_num, type(1)): num_display = _num except: # choose default num_display = 20 elif 'num_display' in request.cookies: #print("found it in cookie") num_display = int(request.cookies['num_display']) else: #print("setting default") num_display = request.registry.settings[ 'c3spartyticketing.dashboard_number'] #print("num_display: %s " % num_display) """ base_offset helps us to minimize impact on the database when querying for results. we can choose just those results we need for the page to show """ #try: base_offset = int(_page_to_show) * int(num_display) #print("base offset: %s" % base_offset) #except: # base_offset = 0 # if 'base_offset' in request.session: # base_offset = request.session['base_offset'] # else: # base_offset = request.registry.settings['speedfunding.offset'] # get data sets from DB _tickets = PartyTicket.ticket_listing( PartyTicket.id.desc(), how_many=num_display, offset=base_offset) # calculate next-previous-navi next_page = (int(_page_to_show) + 1) if (int(_page_to_show) > 0): previous_page = int(_page_to_show) - 1 else: previous_page = int(_page_to_show) # store info about current page in cookie request.response.set_cookie('on_page', value=str(_page_to_show)) #print("num_display: %s" % num_display) request.response.set_cookie('num_display', value=str(num_display)) # # prepare the autocomplete form for codes # # get codes from another view via subrequest, see # http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/subrequest.html subreq = Request.blank('/all_codes') # see http://0.0.0.0:6543/all_codes response = request.invoke_subrequest(subreq) #print("the subrequests response: %s" % response.body) #import requests #r = requests.get('http://0.0.0.0:6543/all_codes') #the_codes = json.loads(r.text) # gotcha: json needed! the_codes = json.loads(response.body) # gotcha: json needed! my_autoc_wid = deform.widget.AutocompleteInputWidget( min_length=1, title="widget title", values=the_codes, ) # prepare a form for autocomplete search for codes. class CodeAutocompleteForm(colander.MappingSchema): """ colander schema to make deform autocomplete form """ code_to_show = colander.SchemaNode( colander.String(), title="Search entry (autocomplete)", validator=colander.Length(min=1, max=8), widget=my_autoc_wid, description='start typing. use arrows. press enter. twice.' ) schema = CodeAutocompleteForm() form = deform.Form( schema, buttons=('go!',), #use_ajax=True, # <-- whoa! renderer=zpt_renderer, ) autoformhtml = form.render() return {'_number_of_datasets': _number_of_datasets, 'tickets': _tickets, 'num_display': num_display, 'next': next_page, 'previous': previous_page, 'autoform': autoformhtml, }