diff --git a/zkpylons/templates/product_category/list.mako b/zkpylons/templates/product_category/list.mako
index e395a21fc..743b1da50 100644
--- a/zkpylons/templates/product_category/list.mako
+++ b/zkpylons/templates/product_category/list.mako
@@ -3,7 +3,7 @@
List of categories
% if len(c.product_category_collection) > 0:
-
+
Name
Description
diff --git a/zkpylons/templates/proposal/approve.mako b/zkpylons/templates/proposal/approve.mako
index 706ac76d1..22a7f4baa 100644
--- a/zkpylons/templates/proposal/approve.mako
+++ b/zkpylons/templates/proposal/approve.mako
@@ -3,7 +3,7 @@
Approve/disapprove talks
${ h.form(h.url_for()) }
-
+
#
Title
diff --git a/zkpylons/templates/proposal_type/list.mako b/zkpylons/templates/proposal_type/list.mako
index c90dd735d..330be78e2 100644
--- a/zkpylons/templates/proposal_type/list.mako
+++ b/zkpylons/templates/proposal_type/list.mako
@@ -2,7 +2,7 @@
List proposal types
-
+
% if len(c.proposal_type_collection) > 0:
diff --git a/zkpylons/templates/registration/list.mako b/zkpylons/templates/registration/list.mako
index d737edb02..01956fea9 100644
--- a/zkpylons/templates/registration/list.mako
+++ b/zkpylons/templates/registration/list.mako
@@ -150,7 +150,7 @@ if "not_australian" in c.registration_request and c.registration_request['not_au
${ h.link_to('Export as CSV', url=attribs + "&export=true") }
-
+
Rego
Name / Email
diff --git a/zkpylons/templates/rego_note/list.mako b/zkpylons/templates/rego_note/list.mako
index a2bc414d2..0dc1c74fe 100644
--- a/zkpylons/templates/rego_note/list.mako
+++ b/zkpylons/templates/rego_note/list.mako
@@ -2,7 +2,7 @@
List of Registration Notes
-
+
ID/Edit
For person
diff --git a/zkpylons/templates/role/list.mako b/zkpylons/templates/role/list.mako
index c37cd4f8b..c7945ba10 100644
--- a/zkpylons/templates/role/list.mako
+++ b/zkpylons/templates/role/list.mako
@@ -2,7 +2,7 @@
List roles
-
+
% if len(c.role_collection) > 0:
diff --git a/zkpylons/templates/social_network/list.mako b/zkpylons/templates/social_network/list.mako
index 37170713b..82eaec1a4 100644
--- a/zkpylons/templates/social_network/list.mako
+++ b/zkpylons/templates/social_network/list.mako
@@ -3,7 +3,7 @@
List of Social Networks
% if len(c.social_networks) > 0:
-
+
Name
Image
diff --git a/zkpylons/templates/volunteer/list.mako b/zkpylons/templates/volunteer/list.mako
index 1316ee5b7..935fc7a7f 100644
--- a/zkpylons/templates/volunteer/list.mako
+++ b/zkpylons/templates/volunteer/list.mako
@@ -3,7 +3,7 @@
List of Volunteers
% if len(c.volunteer_collection) > 0:
-
+
Volunteer
diff --git a/zkpylons/templates/voucher/list.mako b/zkpylons/templates/voucher/list.mako
index a84aad132..86ddfcfd7 100644
--- a/zkpylons/templates/voucher/list.mako
+++ b/zkpylons/templates/voucher/list.mako
@@ -11,7 +11,7 @@
% endif
% endif
-
+
Code
Products
diff --git a/zk/public/js/sorttable.js b/zkpylons/themes/lca2016/public/js/sorttable.js
similarity index 100%
rename from zk/public/js/sorttable.js
rename to zkpylons/themes/lca2016/public/js/sorttable.js
diff --git a/zkpylons/themes/lca2016/templates/admin/lookup.mako b/zkpylons/themes/lca2016/templates/admin/lookup.mako
new file mode 100644
index 000000000..2c3a54f0a
--- /dev/null
+++ b/zkpylons/themes/lca2016/templates/admin/lookup.mako
@@ -0,0 +1,172 @@
+<%inherit file="/base.mako" />
+
+${ h.form(h.url_for(), method='get') }
+ID or name: ${ h.text('q', size=10, tabindex=1) }
+${ h.end_form() }
+
+% if c.error:
+% if c.query:
+Erroy looking up ${ c.query |h }:
+% endif
+
+${ c.error }
+
+% elif c.many:
+Looked up: ${ c.query } and found ${ len(c.many) }
+
+% for person in c.many:
+
+ ${ h.link_to(person.fullname, h.url_for(p=person.id)) }
+
+% if person.registration:
+% if person.paid():
+ ${ person.registration.ticket_description() }
+% else:
+ not paid
+% endif
+% else:
+ no registration
+% endif
+
+
+% endfor
+
+
+% else:
+Looked up: ${ c.query }
+
+${ c.person.firstname } ${ c.person.lastname }
+<${ h.link_to(c.person.email_address) }> (${ h.link_to(c.person.id, h.url_for(controller='person', action='view', id=c.person.id)) })
+ ${ c.person.company }
+
+
+% if c.person.is_speaker():
+speaker
+% endif
+% if c.person.roles:
+${ ', '.join([role.name for role in c.person.roles]) }
+% endif
+
+% if c.person.registration:
+
+ ${ h.form(h.url_for(controller='rego_note', action='new', id=None), method='post') }
+ ${ h.hidden('rego_note.rego', value=c.person.registration.id) }
+
+
+ when
+ note
+ by
+
+% for n in c.person.registration.notes:
+
+ ${ n.creation_timestamp.strftime('%Y-%m-%d %a %H:%M:%S') }
+ ${ n.note }
+ ${ n.by.firstname } ${ n.by.lastname }
+
+% endfor
+
+ ${ h.submit('submit', 'Add Note') }
+ ${ h.text('rego_note.note', size=30, tabindex=2, value='Here!') }
+ ${ h.text('rego_note.by', size=6, value=c.signed_in_person.id) }
+
+
+ ${ h.end_form() }
+
+
+% if c.person.paid():
+${ c.person.registration.ticket_description() } registration ${ h.link_to(c.person.registration.id, h.url_for(controller='registration', action='view', id=c.person.registration.id)) }
+% else:
+Tentative registration ${ h.link_to(c.person.registration.id, h.url_for(controller='registration', action='view', id=c.person.registration.id)) }; not paid
+% endif
+% else:
+not registered
+% endif
+
+
+% if c.person.phone:
+Phone: ${ c.person.phone }
+% endif
+
+Invoices
+${ h.link_to('New Manual Invoice', h.url_for(controller='invoice', action='new', id=None, person_id=c.person.id))}
+% if c.person.invoices:
+
+
+ Invoice #
+ Total
+ Status
+
+% for i in c.person.invoices:
+
+ ${ h.link_to(i.id, h.url_for(controller='invoice', action='view', id=i.id)) }
+ ${ h.integer_to_currency(i.total) }
+ ${ i.status }
+
+% endfor
+
+
+
+
+ Invoice
+ Description
+ Qty
+ Cost
+ Total
+
+% for i in c.person.invoices:
+% if not i.is_void:
+% for ii in i.items:
+
+% if ii == i.items[0]:
+
+ ${ h.link_to(i.id, h.url_for(controller='invoice', action='view', id=i.id)) }
+ ${ i.status }
+
+% endif
+ ${ ii.description }
+ ${ ii.qty }
+ ${ h.integer_to_currency(ii.cost) }
+ ${ h.integer_to_currency(ii.total) }
+
+% endfor
+% endif
+% endfor
+
+% if c.person.fulfilments:
+Fulfilments
+
+
+ Fulfilment
+ Product
+ Qty
+
+% for f in c.person.fulfilments:
+% if not f.is_void:
+% for item in f.items:
+
+% if item == f.items[0]:
+
+ ${ h.link_to(f.id, h.url_for(controller='fulfilment', action='view', id=f.id)) } -
+ ${ h.link_to('(edit)', h.url_for(controller='fulfilment', action='edit', id=f.id)) }
+ ${ f.type.name } - ${ f.status.name }
+
+% endif
+ ${ item.product.category.name } - ${ item.product.description }
+ ${ item.qty }
+
+% endfor
+% endif
+% endfor
+
+% endif
+
+% endif
+
+% if c.person.registration:
+Registration
+<% c.registration = c.person.registration %>
+<%include file="../registration/view_body.mako"/>
+% endif
+% endif
+
+
diff --git a/zkpylons/themes/lca2016/templates/admin/rego_list.mako b/zkpylons/themes/lca2016/templates/admin/rego_list.mako
new file mode 100644
index 000000000..bf972f242
--- /dev/null
+++ b/zkpylons/themes/lca2016/templates/admin/rego_list.mako
@@ -0,0 +1,71 @@
+<%inherit file="/base.mako" />
+
+
+
+ Name
+
+ ID
+ Ticket
+ Bag
+ Products
+
+% for r in c.data:
+
+ ${ r.person.lastname }, ${ r.person.firstname }
+
+% if not r.person.paid():
+NOT PAID
+% else:
+
+% endif
+
+ ${ r.person.id }
+
+<% bag = "Professional" %>
+% if r.person.is_speaker():
+Speaker
+% elif r.person.is_miniconf_org():
+Miniconf Org
+% elif r.person.is_professional():
+Professional
+% elif r.person.has_role('press'):
+Media
+% else:
+Hobby / Student
+<% bag = "Hobby" %>
+% endif
+% if r.person.is_volunteer():
+Volunteer
+% endif
+
+ ${ bag }
+
+<%
+ first = True
+ products = dict()
+ products['T-Shirt'] = []
+ products['Partners Programme'] = []
+ products['Partners Programme'] = []
+
+ for invoice in r.person.invoices:
+ if not invoice.is_void:
+ for ii in invoice.items:
+ if ii.product is not None and ii.product.category is not None:
+ if ii.product.category.name in products:
+ text = "%s x %s" % (ii.qty, ii.product.description)
+ if not invoice.is_paid:
+ text += " (Not paid)"
+ products[ii.product.category.name].append(text)
+%>
+
+${ ", ".join(products['T-Shirt']) }
+% if len(products['Partners Programme']) > 0:
+
+PP: ${ ", ".join(products['Partners Programme']) }
+% endif
+
+
+
+
+% endfor
+
diff --git a/zkpylons/themes/lca2016/templates/admin/sqltable.mako b/zkpylons/themes/lca2016/templates/admin/sqltable.mako
new file mode 100644
index 000000000..b566d3ac5
--- /dev/null
+++ b/zkpylons/themes/lca2016/templates/admin/sqltable.mako
@@ -0,0 +1,41 @@
+<%inherit file="/base.mako" />
+<%
+def oddeven():
+ while 1:
+ yield "odd"
+ yield "even"
+oddeven = oddeven()
+%>
+
+${ h.url_for().split('/')[-1].replace('_', ' ').title() }
+Export as CSV
+
+
+
+% for header in c.columns:
+ ${ header }
+% endfor
+
+
+<% rows = 0 %>
+%for row in c.data:
+
+<% rows += 1 %>
+% for item in row:
+
+ ${ item | h }
+
+% endfor
+
+%endfor
+
+(${ rows |h} rows)
+
+
+${ h.link_to("Back to admin list", h.url_for(controller='admin')) }
+
+% if h.debug():
+
+ ${ c.sql }
+
+% endif
diff --git a/zkpylons/themes/lca2016/templates/admin/table.mako b/zkpylons/themes/lca2016/templates/admin/table.mako
new file mode 100644
index 000000000..1855d887f
--- /dev/null
+++ b/zkpylons/themes/lca2016/templates/admin/table.mako
@@ -0,0 +1,38 @@
+<%inherit file="/base.mako" />
+<%
+ rows = 0
+%>
+
+ ${ c.text | n }
+
+
+Export as CSV
+Export as LaTeX table
+
+
+
+
+% for header in c.columns:
+ ${ header }
+% endfor
+
+
+% for row in c.data:
+<% rows = rows + 1 %>
+
+% for item in row:
+% if c.noescape:
+ ${ item | n}
+% else:
+ ${ item | h}
+% endif
+% endfor
+
+% endfor
+
+
+(${ rows |h } rows)
+${ h.link_to("Back to admin list", h.url_for(controller='admin')) }
+
+
+
diff --git a/zkpylons/themes/lca2016/templates/admin/table_fragment.mako b/zkpylons/themes/lca2016/templates/admin/table_fragment.mako
new file mode 100644
index 000000000..f921b7500
--- /dev/null
+++ b/zkpylons/themes/lca2016/templates/admin/table_fragment.mako
@@ -0,0 +1,28 @@
+<%
+ rows = 0
+%>
+
+ ${ c.text | n }
+
+
+% for header in c.columns:
+ ${ header }
+% endfor
+
+
+% for row in c.data:
+
+ <% rows += 1 %>
+% for item in row:
+% if c.noescape:
+ ${ item | n}
+% else:
+ ${ item | h}
+% endif
+% endfor
+
+% endfor
+
+
+
+
diff --git a/zkpylons/themes/lca2016/templates/ceiling/list.mako b/zkpylons/themes/lca2016/templates/ceiling/list.mako
new file mode 100644
index 000000000..ec027d0f4
--- /dev/null
+++ b/zkpylons/themes/lca2016/templates/ceiling/list.mako
@@ -0,0 +1,58 @@
+<%inherit file="/base.mako" />
+
+List ceilings
+
+% if len(c.ceiling_collection) > 0:
+
+
+ Name
+ Parent
+ Limit
+ Available From
+ Available Until
+ Available
+ Invoiced (Overdue)
+ Invoiced (Current)
+ Sold
+ Free
+
+
+
+% for ceiling in c.ceiling_collection:
+
+ ${ h.link_to(ceiling.name, url=h.url_for(action='view', id=ceiling.id)) }
+ \
+% if ceiling.parent:
+${ h.link_to(ceiling.parent.name, h.url_for(action='view', id=ceiling.parent.id)) }\
+% endif
+
+ ${ ceiling.max_sold }
+ \
+% if ceiling.available_from:
+${ ceiling.available_from.strftime('%d/%m/%y') }\
+% endif
+
+ \
+% if ceiling.available_until:
+${ ceiling.available_until.strftime('%d/%m/%y') }\
+% endif
+
+ ${ h.yesno(ceiling.available()) | n }
+ ${ ceiling.qty_invoiced(date=False) }
+ ${ ceiling.qty_invoiced() }
+ ${ ceiling.qty_sold() }
+ ${ ceiling.qty_free() }
+% if c.can_edit:
+% for action in ['edit', 'delete']:
+ ${ h.link_to(action, url=h.url_for(action=action, id=ceiling.id)) }
+% endfor
+% endif
+
+% endfor
+
+% endif
+
+% if c.can_edit:
+ ${ h.link_to('New Ceiling', url=h.url_for(action='new')) }
+% endif
+
diff --git a/zkpylons/themes/lca2016/templates/db_content/list.mako b/zkpylons/themes/lca2016/templates/db_content/list.mako
new file mode 100644
index 000000000..88fa8df20
--- /dev/null
+++ b/zkpylons/themes/lca2016/templates/db_content/list.mako
@@ -0,0 +1,44 @@
+<%inherit file="/base.mako" />
+List of DB pages
+
+
+
+ ID/Edit
+ Title
+ Type
+ URL
+ Created On
+ Published
+ Last updated
+ Delete
+
+
+% for d in c.db_content_collection:
+
+ ${ h.link_to(str(d.id) + ' (edit)', url=h.url_for(controller='db_content', action='edit', id=d.id)) }
+% if d.is_news() or d.is_page():
+ ${ h.link_to(str(d.title) + ' (view)', url=h.url_for(controller='db_content', action='view', id=d.id)) }
+% else:
+ ${ d.title }
+% endif
+ ${ d.type.name }
+% if '://' in d.url:
+ ${ h.link_to(d.url, url=d.url) }
+% elif d.url != '':
+ ${ h.link_to(d.url, url=('/' + d.url)) }
+% else:
+ N/A
+% endif
+ ${ d.creation_timestamp.strftime("%Y-%m-%d %H:%M") }
+ ${ h.yesno(d.publish_timestamp <= h.datetime.now()) |n } ${ d.publish_timestamp.strftime("%Y-%m-%d %H:%M") }
+ ${ d.last_modification_timestamp.strftime("%Y-%m-%d %H:%M") }
+ ${ h.link_to('X (delete)', url=h.url_for(controller='db_content', action='delete', id=d.id)) }
+
+% endfor
+
+${ h.link_to('Add another', url=h.url_for(controller='db_content', action='new')) }
+
+<%def name="title()">
+List of DB pages -
+ ${ parent.title() }
+%def>
diff --git a/zkpylons/themes/lca2016/templates/db_content/list_files.mako b/zkpylons/themes/lca2016/templates/db_content/list_files.mako
new file mode 100644
index 000000000..04b2f90e3
--- /dev/null
+++ b/zkpylons/themes/lca2016/templates/db_content/list_files.mako
@@ -0,0 +1,54 @@
+<%inherit file="/base.mako" />
+<%
+no_theme = 'true' if c.no_theme else 'false'
+%>
+File manager
+
+Below is a list of files available from the root directory /. If you upload a file, you can access it with /current_folder/file_name.png
+
+Current folder: ${ c.current_path }
+
+
+
+ Icon/type
+ Path
+ Actions
+
+% if c.current_path is not '/' and c.current_path is not None and c.current_path is not '': #this doesn't work for who knows why!
+
+
+ .. (Up)
+
+
+% endif
+% for folder in c.folder_list:
+
+
+ ${ folder }
+
+
+% endfor
+% for file in c.file_list:
+
+
+ ${ file }
+
+
+% endfor
+
+
+
+ There are no checks on files except for authentication. Please do not upload anything too large or malicious.
+
+ Please keep file names safe and not duplicated.
+
+<%def name="title()">
+List of files -
+ ${ parent.title() }
+%def>
diff --git a/zkpylons/themes/lca2016/templates/funding/approve.mako b/zkpylons/themes/lca2016/templates/funding/approve.mako
new file mode 100644
index 000000000..8e741f84d
--- /dev/null
+++ b/zkpylons/themes/lca2016/templates/funding/approve.mako
@@ -0,0 +1,46 @@
+<%inherit file="/base.mako" />
+
+Approve/disapprove funding
+
+${ h.form(h.url_for()) }
+
+
+ #
+ Name
+ Proposal Type
+ Current Status
+ Change Status
+
+% for s in c.requests:
+
+ ${ h.link_to("%d" % s.id, url=h.url_for(action='view', id=s.id)) }
+ ${ h.link_to(s.person.fullname, url=h.url_for(controller='person', action='view', id=s.person.id)) }
+ ${ s.type.name }
+
+% if s.id in c.highlight:
+ ${ s.status.name }
+% else:
+ ${ s.status.name }
+% endif
+
+
+
+ -
+% for status in c.statuses:
+% if status != s.status:
+ ${ status.name }
+% endif
+% endfor
+
+ ${ h.hidden(name="funding-%d"%s.id, value=s.id) }
+
+
+
+% endfor
+
+${ h.submit('submit', 'Submit!') }
+${ h.end_form() }
+
+<%def name="title()" >
+Approve funding requests - ${ parent.title() }
+%def>
diff --git a/zkpylons/themes/lca2016/templates/funding_type/list.mako b/zkpylons/themes/lca2016/templates/funding_type/list.mako
new file mode 100644
index 000000000..f91da84e7
--- /dev/null
+++ b/zkpylons/themes/lca2016/templates/funding_type/list.mako
@@ -0,0 +1,31 @@
+<%inherit file="/base.mako" />
+
+List funding types
+
+
+
+% if len(c.funding_type_collection) > 0:
+
+ Name
+ Active
+ Notify Email
+
+
+% endif
+
+% for st in c.funding_type_collection:
+
+ ${ h.link_to(st.name, url=h.url_for(action='view', id=st.id)) }
+ ${ h.yesno(st.active) | n }
+ ${ st.notify_email | h }
+
+% for action in ['edit', 'delete']:
+ ${ h.link_to(action, url=h.url_for(action=action, id=st.id)) }
+% endfor
+
+
+% endfor
+
+
+${ h.link_to('New funding type', url=h.url_for(action='new')) }
+
diff --git a/zkpylons/themes/lca2016/templates/invoice/list.mako b/zkpylons/themes/lca2016/templates/invoice/list.mako
new file mode 100644
index 000000000..1f4f77ec5
--- /dev/null
+++ b/zkpylons/themes/lca2016/templates/invoice/list.mako
@@ -0,0 +1,58 @@
+<%inherit file="/base.mako" />
+
+% if c.can_edit:
+ ${ h.link_to('Create new (manual) Invoice', h.url_for(action='new')) }
+% endif
+ Unvoiding invoices marks them as manual.
+
+
+ rego
+ invoice
+ created
+ person
+ amount
+ status
+ manual
+ payment(s)
+
+% for i in c.invoice_collection:
+
+% if i.person.registration:
+<% r = i.person.registration %>
+ ${ h.link_to('id: ' + str(r.id), h.url_for(controller='registration', action='view', id=r.id)) }
+% else:
+ -
+% endif
+ ${ h.link_to('id: ' + str(i.id), h.url_for(action='view', id=i.id)) }
+ ${ i.creation_timestamp |h }
+
+ ${ h.link_to(i.person.firstname + ' ' + i.person.lastname, h.url_for(controller='person', action='view', id=i.person.id)) }
+ ${ h.integer_to_currency(i.total) }
+ ${ i.status }
+% if i.status == 'Unpaid' or i.total == 0:
+ (${ h.link_to('Void', h.url_for(action="void", id=i.id)) })
+% endif
+% if i.status == 'Invalid':
+ (${ h.link_to('Unvoid', h.url_for(action="unvoid", id=i.id)) })
+% endif
+
+ ${ h.yesno(i.manual) |n }
+
+% if len(i.good_payments) > 0:
+% for p in i.good_payments:
+% if p.amount_paid != i.total:
+ mismatch!
+% endif
+ ${ h.integer_to_currency(p.amount_paid) }
+ ${ p.gateway_ref |h}
+% endfor
+% elif len(i.bad_payments) > 0:
+ Bad payment(s)!
+% else:
+ -
+% endif
+
+
+
+% endfor
+
diff --git a/zkpylons/themes/lca2016/templates/invoice/remind.mako b/zkpylons/themes/lca2016/templates/invoice/remind.mako
new file mode 100644
index 000000000..12d61760a
--- /dev/null
+++ b/zkpylons/themes/lca2016/templates/invoice/remind.mako
@@ -0,0 +1,40 @@
+<%inherit file="/base.mako" />
+
+${ h.form(h.url_for()) }
+
+The message below will be sent to the owners of all checked invoices below
+
+
+<%include file="remind_email.mako" />
+
+
+
+
+ Remind
+ Name
+ Invoice Date
+ Invoice
+ Email Address
+ Status
+
+% for i in c.invoice_collection:
+
+ ${ h.checkbox('invoices', value=i.id, checked=True) }
+ ${ h.link_to(i.person.firstname + ' ' + i.person.lastname, url=h.url_for(controller='person', action='view', id=i.person.id)) }
+ ${ h.link_to(h.integer_to_currency(i.total), url=h.url_for(action='view', id=i.id)) }
+ ${ i.creation_timestamp.date() }
+ ${ i.person.email_address }
+
+% if not i.payments:
+ Not Paid
+% elif len(i.bad_payments) > 0:
+ Incomplete Payments
+% else:
+ Unknown
+% endif
+
+% endfor
+
+
+${ h.submit('submit', 'Send Reminder') }
+
diff --git a/zkpylons/themes/lca2016/templates/person/list.mako b/zkpylons/themes/lca2016/templates/person/list.mako
new file mode 100644
index 000000000..6a06862e3
--- /dev/null
+++ b/zkpylons/themes/lca2016/templates/person/list.mako
@@ -0,0 +1,44 @@
+<%inherit file="/base.mako" />
+
+People
+
+
+% if len(c.person_collection) > 0:
+
+ id
+ Email
+ First Name
+ Last Name
+ Phone
+ Mobile
+ Created
+
+
+
+
+% endif
+
+% for p in c.person_collection:
+
+ ${ h.link_to(p.id, url=h.url_for(action='view', id=p.id)) }
+ ${ p.email_address |h }
+ ${ p.firstname |h }
+ ${ p.lastname |h }
+ ${ p.phone |h }
+ ${ p.mobile |h }
+ ${ p.creation_timestamp |h }
+
+% for action in ['roles', 'view', 'edit']:
+ ${ h.link_to(action, url=h.url_for(action=action, id=p.id)) }
+% endfor
+
+% endfor
+
+
+Create a new account
+
+<%def name="title()">
+People -
+ ${ parent.title() }
+%def>
+
diff --git a/zkpylons/themes/lca2016/templates/person/roles.mako b/zkpylons/themes/lca2016/templates/person/roles.mako
new file mode 100644
index 000000000..da271ab6b
--- /dev/null
+++ b/zkpylons/themes/lca2016/templates/person/roles.mako
@@ -0,0 +1,50 @@
+<%namespace name="toolbox" file="/leftcol/toolbox.mako"/>
+<%inherit file="/base.mako" />
+<%def name="toolbox_extra_admin()">
+ ${ toolbox.make_link('Roles', url=h.url_for(controller='role')) }
+ ${ toolbox.make_link('Edit Person', url=h.url_for(controller='person', action='edit',id=c.person.id)) }
+%def>
+
+Modify Roles
+
+ ${ c.person.firstname } ${ c.person.lastname }
+
+
+
+ Is/Is not
+ Role
+ Grant/Revoke
+ Description
+
+% for role in c.roles:
+
+
+ <% has = role in c.person.roles %>
+ ${ ('is not', 'is')[has] }
+
+
+ ${ role.name }
+
+
+ ${ h.form(h.url_for()) }
+ ${ h.hidden('role', role.name) }
+ ${ h.hidden('action', ('Grant', 'Revoke')[has]) }
+ ${ h.submit('submit', ('Grant', 'Revoke')[has]) }
+ ${ h.end_form() }
+
+
+ ${ role.comment }
+
+
+% endfor
+
+
+
+
+<%def name="title()">
+Roles -
+${ c.person.firstname |h } ${ c.person.lastname |h } -
+Roles
+${ parent.title() }
+%def>
+
diff --git a/zkpylons/themes/lca2016/templates/product_category/list.mako b/zkpylons/themes/lca2016/templates/product_category/list.mako
new file mode 100644
index 000000000..e395a21fc
--- /dev/null
+++ b/zkpylons/themes/lca2016/templates/product_category/list.mako
@@ -0,0 +1,44 @@
+<%inherit file="/base.mako" />
+
+List of categories
+
+% if len(c.product_category_collection) > 0:
+
+
+ Name
+ Description
+ Note
+ Display
+ Display Mode
+ Display Order
+ Invoice Free Products
+ Min. Quantity
+ Max. Quantity
+
+
+
+% for category in c.product_category_collection:
+
+ ${ h.link_to(category.name, url=h.url_for(action='view', id=category.id)) } (${h.link_to('Statistics', url=h.url_for(action='stats', id=category.id))})
+ ${ category.description |n}
+ ${ category.note or "" |n}
+ ${ category.display }
+ ${ category.display_mode or ""}
+ ${ category.display_order }
+ ${ h.yesno(category.invoice_free_products) |n}
+ ${ category.min_qty }
+ ${ category.max_qty }
+% if c.can_edit:
+% for action in ['edit', 'delete']:
+ ${ h.link_to(action, url=h.url_for(action=action, id=category.id)) }
+% endfor
+% endif
+
+% endfor
+
+% endif
+
+% if c.can_edit:
+ ${ h.link_to('New Product Category', url=h.url_for(action='new')) }
+% endif
+
diff --git a/zkpylons/themes/lca2016/templates/proposal/approve.mako b/zkpylons/themes/lca2016/templates/proposal/approve.mako
new file mode 100644
index 000000000..706ac76d1
--- /dev/null
+++ b/zkpylons/themes/lca2016/templates/proposal/approve.mako
@@ -0,0 +1,53 @@
+<%inherit file="/base.mako" />
+
+Approve/disapprove talks
+
+${ h.form(h.url_for()) }
+
+
+ #
+ Title
+ Proposal Type
+ Submitter(s)
+ Current Status
+ Change Status
+
+% for s in c.proposals:
+
+ ${ h.link_to("%d" % s.id, url=h.url_for(action='view', id=s.id)) }
+ ${ h.link_to("%s" % (h.util.html_escape(s.title)), url=h.url_for(action='view', id=s.id)) }
+ ${ s.type.name }
+
+% for p in s.people:
+ ${ h.link_to( "%s %s" % (p.firstname, p.lastname) or p.email_address
+ or p.id, url=h.url_for(controller='person', action='view', id=p.id)) }
+% endfor
+
+
+% if s.id in c.highlight:
+ ${ s.status.name }
+% else:
+ ${ s.status.name }
+% endif
+
+
+
+ -
+% for status in c.statuses:
+% if status != s.status:
+ ${ status.name }
+% endif
+% endfor
+
+ ${ h.hidden(name="talk-%d"%s.id, value=s.id) }
+
+
+
+% endfor
+
+${ h.submit('submit', 'Submit!') }
+${ h.end_form() }
+
+<%def name="title()" >
+Approve proposals - ${ parent.title() }
+%def>
diff --git a/zkpylons/themes/lca2016/templates/proposal_type/list.mako b/zkpylons/themes/lca2016/templates/proposal_type/list.mako
new file mode 100644
index 000000000..c90dd735d
--- /dev/null
+++ b/zkpylons/themes/lca2016/templates/proposal_type/list.mako
@@ -0,0 +1,27 @@
+<%inherit file="/base.mako" />
+
+List proposal types
+
+
+
+% if len(c.proposal_type_collection) > 0:
+
+ Name
+ Notify Email
+
+
+% endif
+
+% for st in c.proposal_type_collection:
+
+ ${ h.link_to(st.name, url=h.url_for(action='view', id=st.id)) }
+ ${ st.notify_email }
+% for action in ['edit', 'delete']:
+ ${ h.link_to(action, url=h.url_for(action=action, id=st.id)) }
+% endfor
+
+% endfor
+
+
+${ h.link_to('New proposal type', url=h.url_for(action='new')) }
+
diff --git a/zkpylons/themes/lca2016/templates/registration/list.mako b/zkpylons/themes/lca2016/templates/registration/list.mako
new file mode 100644
index 000000000..d737edb02
--- /dev/null
+++ b/zkpylons/themes/lca2016/templates/registration/list.mako
@@ -0,0 +1,244 @@
+<%inherit file="/base.mako" />
+
+<%
+attribs = "?page=" + str(c.registration_pages.next_page)
+for item, value in c.registration_request.iteritems():
+ if type(value) == list:
+ for option in value:
+ attribs += "&" + item + "=" + option
+ elif item != 'page':
+ attribs += "&" + item + "=" + value
+%>
+
+
+
+ Registration List
+
+
+ ${ h.link_to('Export as CSV', url=attribs + "&export=true") }
+
+
+
+ Rego
+ Name / Email
+## Email
+ Role(s)
+ Invoices
+ Notes
+
+<% count = 0 %>
+% for registration in c.registration_collection:
+ <% count += 1 %>
+
+ ${ h.link_to('id: ' + str(registration.id), url=h.url_for(action='view', id=registration.id)) }
+ ${ h.link_to(h.util.html_escape(registration.person.firstname + ' ' + registration.person.lastname), h.url_for(controller='person', action='view', id=registration.person.id)) }
+ ${ registration.person.email_address | h }
+
+<%
+ role = []
+ if registration.person.is_speaker():
+ role.append('Speaker')
+ if registration.person.is_miniconf_org():
+ role.append('miniconf Organiser')
+ if registration.person.is_volunteer() == None:
+ role.append('Volunteer pending')
+ elif registration.person.is_volunteer() == True:
+ role.append('Volunteer')
+ for auth_role in registration.person.roles:
+ role.append(auth_role.name)
+%>
+ ${ '' + ' , '.join(role) + ' ' |n}
+
+
+<% firstinvoice = True %>
+% for rinvoice in registration.person.invoices:
+% if firstinvoice:
+<% firstinvoice = False %>
+% else:
+
+% endif
+ ${ h.link_to(rinvoice.id, h.url_for(controller='invoice', action='view', id=rinvoice.id)) } - ${ rinvoice.status }
+% if rinvoice.manual is True:
+ (manual)
+% endif
+ +
+<%
+ display = "display: none;"
+ #if rinvoice. is not True: display=""
+%>
+
+% for rproduct in rinvoice.items:
+ ${ rproduct.qty } x ${ rproduct.description }
+% endfor
+
+% endfor
+% if registration.voucher:
+ Voucher Used:
+% for vproduct in registration.voucher.products:
+ ${ vproduct.qty } x ${ vproduct.product.description } @ ${ h.number_to_percentage(vproduct.percentage) } Discount
+% endfor
+% endif
+
+
+% if not registration.over18:
+ Under 18 ${ h.yesno(not registration.over18) | n }
+% endif
+% if registration.notes:
+ ${ ' '.join(["Note by " + n.by.firstname + " " + n.by.lastname + " at " + n.last_modification_timestamp.strftime("%Y-%m-%d %H:%M") + " : " + h.line_break(n.note) for n in registration.notes]) + ' ' | n}
+% endif
+% if registration.diet:
+ ${ 'Diet: %s ' % (registration.diet) | n}
+% endif
+% if registration.special:
+ ${ 'Special Needs: %s ' % (registration.special) | n}
+% endif
+ ${ h.link_to("Add New Note", h.url_for(controller='rego_note', action='new', rego_id=registration.id)) }
+
+
+% endfor
+
+
+
+%if c.registration_pages.next_page:
+${h.link_to('Next page', url=attribs)}
+%endif
+%if c.registration_pages.previous_page:
+${h.link_to('Previous page', url=h.url_for(page=c.registration_pages.previous_page))}
+%endif
+
+Displaying ${ c.registration_pages.first_item
+}–${ c.registration_pages.last_item} of ${
+c.registration_pages.item_count }.
diff --git a/zkpylons/themes/lca2016/templates/rego_note/list.mako b/zkpylons/themes/lca2016/templates/rego_note/list.mako
new file mode 100644
index 000000000..a2bc414d2
--- /dev/null
+++ b/zkpylons/themes/lca2016/templates/rego_note/list.mako
@@ -0,0 +1,35 @@
+<%inherit file="/base.mako" />
+
+List of Registration Notes
+
+
+
+ ID/Edit
+ For person
+ Note
+ Block
+ Written By
+ Created
+ Last updated
+ Delete
+
+
+% for d in c.rego_note_collection:
+<% print d %>
+
+ ${ h.link_to(str(d.id) + ' (edit)', url=h.url_for(controller='rego_note', action='edit', id=d.id)) }
+ ${ h.link_to(d.rego.person.firstname + ' ' + d.rego.person.lastname, h.url_for(controller='person', action='view', id=d.rego.person.id)) }, ${ h.link_to('View Registration', h.url_for(controller='registration', action='view', id=d.rego.id)) }
+ ${ h.line_break(d.note) }
+ ${ h.yesno(d.block) |n }
+ ${ h.link_to(d.by.firstname + ' ' + d.by.lastname, h.url_for(controller='person', action='view', id=d.by.id)) }
+ ${ d.creation_timestamp.strftime("%Y-%m-%d %H:%M") | n}
+ ${ d.last_modification_timestamp.strftime("%Y-%m-%d %H:%M") | n}
+ ${ h.link_to('X (delete)', url=h.url_for(controller='rego_note', action='delete', id=d.id)) }
+
+% endfor
+
+${ h.link_to('Add another', url=h.url_for(controller='rego_note', action='new')) }
+
+<%def name="title()">
+List of DB pages - ${ parent.title() }
+%def>
diff --git a/zkpylons/themes/lca2016/templates/role/list.mako b/zkpylons/themes/lca2016/templates/role/list.mako
new file mode 100644
index 000000000..c37cd4f8b
--- /dev/null
+++ b/zkpylons/themes/lca2016/templates/role/list.mako
@@ -0,0 +1,38 @@
+<%inherit file="/base.mako" />
+
+List roles
+
+
+
+% if len(c.role_collection) > 0:
+
+Name
+Pretty Name
+Comment
+
+
+
+% endif
+
+% for st in c.role_collection:
+
+
+ ${ h.link_to(st.name, url=h.url_for(action='view', id=st.id)) }
+
+% if st.pretty_name is not None:
+ ${ h.link_to(st.pretty_name, url=h.url_for(action='view', id=st.id)) }
+% else:
+
+% endif
+
+ ${ st.comment }
+% for action in ['edit', 'delete']:
+ ${ h.link_to(action, url=h.url_for(action=action, id=st.id)) }
+% endfor
+
+% endfor
+
+
+
+ ${h.link_to('New role', url=h.url_for(action='new'))}
+
diff --git a/zkpylons/themes/lca2016/templates/social_network/list.mako b/zkpylons/themes/lca2016/templates/social_network/list.mako
new file mode 100644
index 000000000..37170713b
--- /dev/null
+++ b/zkpylons/themes/lca2016/templates/social_network/list.mako
@@ -0,0 +1,36 @@
+<%inherit file="/base.mako" />
+
+List of Social Networks
+
+% if len(c.social_networks) > 0:
+
+
+ Name
+ Image
+ URL
+
+
+% for sn in c.social_networks:
+
+ ${ h.link_to(sn.name, url=h.url_for(action='view', id=sn.id)) }
+
+ ${ sn.url }
+% if c.can_edit:
+% for action in ['edit', 'delete']:
+ ${ h.link_to(action, url=h.url_for(action=action, id=sn.id)) }
+% endfor
+% endif
+
+% endfor
+
+% endif
+
+% if c.can_edit:
+ ${ h.link_to('New Social Network', url=h.url_for(action='new')) }
+% endif
+
+<%def name="title()">
+Social Network -
+List All -
+ ${ parent.title() }
+%def>
diff --git a/zkpylons/themes/lca2016/templates/volunteer/list.mako b/zkpylons/themes/lca2016/templates/volunteer/list.mako
new file mode 100644
index 000000000..1316ee5b7
--- /dev/null
+++ b/zkpylons/themes/lca2016/templates/volunteer/list.mako
@@ -0,0 +1,63 @@
+<%inherit file="/base.mako" />
+
+List of Volunteers
+% if len(c.volunteer_collection) > 0:
+
+
+
+
+ Volunteer
+ Person
+ Name
+ E-Mail
+ Phone Number
+ Other
+ Status
+ Ticket Price
+
+% if c.can_edit:
+
+% endif
+
+
+% for volunteer in c.volunteer_collection:
+
+ ${ h.link_to('id: ' + str(volunteer.id), url=h.url_for(action='view', id=volunteer.id)) }
+ ${ h.link_to('id: ' + str(volunteer.person.id), url=h.url_for(controller='person', action='view', id=volunteer.person.id)) }
+ ${ h.link_to(volunteer.person.firstname + ' ' + volunteer.person.lastname, h.url_for(controller='person', action='view', id=volunteer.person.id)) }
+ ${ volunteer.person.email_address }
+ ${ volunteer.person.mobile or volunteer.person.phone | h }
+ ${ h.line_break(volunteer.other) }
+% if volunteer.accepted is None:
+ Pending
+% elif volunteer.accepted == True:
+ Accepted
+% else:
+ Rejected
+% endif
+% if volunteer.ticket_type:
+ ${ h.integer_to_currency(volunteer.ticket_type.cost) }
+% else:
+ No Ticket
+% endif
+
+% if volunteer.accepted != True:
+ ${ h.link_to('accept', url=h.url_for(action='accept', id=volunteer.id)) }
+% else:
+ ${ h.link_to('change ticket', url=h.url_for(action='accept', id=volunteer.id)) }
+% endif
+% if volunteer.accepted is not None:
+ ${ h.link_to('pending', url=h.url_for(action='pending', id=volunteer.id)) }
+% endif
+% if volunteer.accepted != False:
+ ${ h.link_to('reject', url=h.url_for(action='reject', id=volunteer.id)) }
+% endif
+
+% if c.can_edit:
+ ${ h.link_to('edit', url=h.url_for(action='edit', id=volunteer.id)) }
+% endif
+
+% endfor
+
+% endif
+
diff --git a/zkpylons/themes/lca2016/templates/voucher/list.mako b/zkpylons/themes/lca2016/templates/voucher/list.mako
new file mode 100644
index 000000000..a84aad132
--- /dev/null
+++ b/zkpylons/themes/lca2016/templates/voucher/list.mako
@@ -0,0 +1,87 @@
+<%inherit file="/base.mako" />
+
+ Voucher Codes
+
+% if c.admin:
+ This table lists all the voucher codes.
+% else:
+ This table lists the voucher codes for your group.
+% if not c.vouchers:
+ (Note: you do not appear to be a group leader, so the table is blank.)
+% endif
+% endif
+
+
+
+ Code
+ Products
+% if c.admin:
+ Leader
+% endif
+ Comment
+ Used By
+% if c.admin:
+
+% endif
+
+
+% for voucher in c.vouchers:
+
+ ${ voucher.code }
+
+% if voucher.products:
+% for vproduct in voucher.products:
+ ${ vproduct.percentage }% discount off ${ vproduct.qty } x ${ vproduct.product.description }
+% endfor
+% endif
+
+% if c.admin:
+
+% if voucher.leader:
+ ${ voucher.leader.firstname |h} ${ voucher.leader.lastname |h}
+ <${ voucher.leader.email_address |h}>
+% else:
+ (no leader)
+% endif
+
+% endif
+ ${ voucher.comment |h}
+% if voucher.registration:
+
+% if c.admin:
+ ${ h.link_to(voucher.registration.person.fullname, url=h.url_for(controller="person", action="view", id=voucher.registration.person.id)) }
+% else:
+ ${ voucher.registration.person.fullname }
+% endif
+
+% if voucher.registration.person.company:
+ ${ "(" + voucher.registration.person.company + ")"}
+% endif
+ <${ voucher.registration.person.email_address }>
+
+% else:
+ Hasn't been used
+
+% if c.admin:
+ ${ h.link_to('delete', url=h.url_for(action='delete', id=voucher.id)) }
+% else:
+
+% endif
+
+% endif
+
+
+% endfor
+
+
+
+% if c.admin:
+
+ ${ h.link_to('Add another', url=h.url_for(controller='voucher', action='new')) }
+% endif
+
+<%def name="title()">
+Voucher - List
+ ${ parent.title() }
+%def>
+