\documentclass[a4paper,12pt,twoside]{book}

\usepackage{bierbook-style}
% All required packages should be included in bierbook-style

\newcommand{\expotitle}{
	% makes the title page
	\thispagestyle{empty}
        \begin{center}
	{\Large Cambridge University Caving Club}
	\vskip80pt
	{\Huge \bf Expo \the\year}
	\vskip40pt
	{\fontsize{100}{120}\selectfont\sc Bier}
        \vskip24pt
	{\fontsize{100}{120}\selectfont\sc Book}
	\vskip190pt
	{[}Stick obligatory G{\"o}sser label here{]}
        \end{center}
	\vfill
	\clearpage
}

\newcommand{\expoheading}[1]{
% provides the formatting for a title of a section
\vspace{10pt}
{\LARGE\bf #1}
\vspace{20pt}
}

\newcommand{\tallyeveryone}[3]{
% argument is the title, second is the subtitle, third is starting number for the tally
% longtable, generated from the list of names
% uses tallyline for each line
\addcontentsline{toc}{section}{#1}
\openin\namesread=names.txt
\setcounter{linecount}{0}
\begin{longtable}{rc}
\multicolumn{2}{l}{\expoheading{#1}} \\
\multicolumn{2}{p{\textwidth}}{#2} \\
&
\tallynumbers{#3}
\\
\endfirsthead
\multicolumn{2}{p{\textwidth}}{#2} \\
&
\tallynumbers{#3}
\\
\endhead
& 
\tallynumbers{#3}
\\
\endfoot

\whiledo{\value{linecount}<\value{maxlines}}{
	\stepcounter{linecount}
	\read\namesread to \currentname
	\tallyline{\currentname}
}

\end{longtable}
\clearpage
}

\newcounter{maxspares}

\newcommand{\tallyspares}[4]{
	% argument is the title, second is the subtitle, third is starting number for the tally, fourth is the number of lines
	% longtable, generated from the list of names
	% uses tallyline for each line
	\addcontentsline{toc}{section}{#1}
	\openin\namesread=names.txt
	\setcounter{linecount}{0}
	\setcounter{maxspares}{#4}
	\begin{longtable}{rc}
		\multicolumn{2}{l}{\expoheading{#1}} \\
		\multicolumn{2}{p{\textwidth}}{#2} \\
		&
		\tallynumbers{#3}
		\\
		\endfirsthead
		\multicolumn{2}{p{\textwidth}}{#2} \\
		&
		\tallynumbers{#3}
		\\
		\endhead
		& 
		\tallynumbers{#3}
		\\
		\endfoot
		
		\whiledo{\value{linecount}<\value{maxspares}}{
			\tallyline{\ldots\ldots\ldots}
			\stepcounter{linecount}
		}
		
	\end{longtable}
	\clearpage
}

\newcommand{\tallyline}[1]{
% argument is the name on the line
% boxes are a tikz grid
\begin{tikzpicture}
\pgfmathsetmacro{\wvar}{0.4}
\node at (0,0.6*\wvar) [anchor=east] {\textbf{#1}};
\node at (0,0) {};
\node at (0,2*\wvar) {};
\end{tikzpicture}
\and
\begin{tikzpicture}
\pgfmathsetmacro{\wvar}{0.4}
\foreach \xvar in {0,1,2,3,4} 
{
	\foreach \yvar in {0,1} 
	{
		\foreach \zvar in {0,5.5,11,16.5,22} 
		{	
			\draw (\xvar*\wvar+\zvar*\wvar,\yvar*\wvar) -- ++ (0,\wvar) -- ++ (\wvar,0) -- ++ (0,-\wvar) -- cycle;
		}
	}	
}
\end{tikzpicture}
\\
}

\newcounter{tallynumber}

\newcommand{\tallynumbers}[1]{
% argument is the starting number
\setcounter{tallynumber}{#1}
\begin{tikzpicture}
\pgfmathsetmacro{\wvar}{0.4}
\foreach \xvar in {0,5.5,11,16.5,22,27.5}
{
	\node at (\xvar*\wvar,0) [anchor=center] {\arabic{tallynumber}};
	\node at (\xvar*\wvar,0.4) {};
	\addtocounter{tallynumber}{10}
}
\end{tikzpicture}
}

\newcommand{\drinksssubtitle}{
	/ = G{\"o}sser, X = Limo, R = Radler, W = Weissbier, D = Dunkelbier, L = Loserbier
}

\newcommand{\nightstallyoneweek}[2]{
\addcontentsline{toc}{section}{#1}
\openin\namesread=names.txt
\setcounter{linecount}{0}
\begin{minipage}[l]{\textwidth}
{\LARGE\bf #1}\\
\vskip12pt
\textbf{This is for people arriving prior to Monday 3rd July.}
\vskip12pt
\textbf{Where you spent the night:}
/ = basecamp, - = away from Expo.
\vskip12pt
\end{minipage}
\begin{longtable}{rc}
	\tikz{\node at (0,0.5) {}; \node at (0,0) {};} & #2 \\
	\tikz{\node at (0,0.5) {}; \node at (0,0) {};} & \weekdays \\
	\endfirsthead
	\tikz{\node at (0,0.5) {}; \node at (0,0) {};} & #2 \\
	\tikz{\node at (0,0.5) {}; \node at (0,0) {};} & \weekdays \\
	\endhead
	\tikz{\node at (0,0.5) {}; \node at (0,0) {};} & \weekdays \\
	\endfoot
	
	\whiledo{\value{linecount}<\value{maxlines}}{
		\stepcounter{linecount}
		\read\namesread to \currentname
		\nightstallyoneweekline{\currentname}
	}
	
\end{longtable}
\clearpage
}

\newcommand{\nightstally}[4]{
% arguments are the title, subheading information, and dates for the three weeks
% longtable, generated from the list of names
% uses nightstallyline for each line
% footer of day of the week, possibly also as a second header under the dates
\addcontentsline{toc}{section}{#1}
\openin\namesread=names.txt
\setcounter{linecount}{0}
{\LARGE\bf #1}\\
\vskip12pt
\textbf{Top line} for where you spent the night:
/ = basecamp, S = stonebridge bivvy, B = bivvying elsewhere, - = away from Expo.
\vskip12pt
\textbf{Bottom line} for time spent underground.\\\vspace*{12pt}

\begin{longtable}{rccc}
	\tikz{\node at (0,0.5) {}; \node at (0,0) {};} & #2 & #3 & #4 \\
	\tikz{\node at (0,0.5) {}; \node at (0,0) {};} & \weekdays & \weekdays & \weekdays \\
	\endfirsthead
	\tikz{\node at (0,0.5) {}; \node at (0,0) {};} & #2 & #3 & #4 \\
	\tikz{\node at (0,0.5) {}; \node at (0,0) {};} & \weekdays & \weekdays & \weekdays \\
	\endhead
	\tikz{\node at (0,0.5) {}; \node at (0,0) {};} & \weekdays & \weekdays & \weekdays \\
	\endfoot
	
	\whiledo{\value{linecount}<\value{maxlines}}{
		\stepcounter{linecount}
		\read\namesread to \currentname
		\nightstallyline{\currentname}
	}
	
\end{longtable}
\clearpage
}

\newcommand{\nightstallyoneweekline}[1]{
% argument is the name on the line 
% boxes are a tikz grid
\begin{tikzpicture}
\pgfmathsetmacro{\wvar}{0.4}
\node at (0,0.6*\wvar) [anchor=east] {\textbf{#1}};
\node at (0,0) {};
\node at (0,\wvar) {};
\end{tikzpicture}
\and
\begin{tikzpicture}
\pgfmathsetmacro{\wvar}{0.4}
\foreach \xvar in {0,1}
{
	\foreach \yvar in {0,1,2,3,4,5,6}
	{
		\draw (\yvar*\wvar,\xvar*\wvar) -- ++ (0,\wvar) -- ++ (\wvar,0) -- ++ (0,-\wvar) -- cycle;
	}
}
\end{tikzpicture}
\\
}

\newcommand{\nightstallyline}[1]{
% argument is the name on the line 
% boxes are a tikz grid
\begin{tikzpicture}
\pgfmathsetmacro{\wvar}{0.4}
\node at (0,0.6*\wvar) [anchor=east] {\textbf{#1}};
\node at (0,0) {};
\node at (0,\wvar) {};
\end{tikzpicture}
\and
\begin{tikzpicture}
\pgfmathsetmacro{\wvar}{0.4}
\foreach \xvar in {0,1}
{
	\foreach \yvar in {0,1,2,3,4,5,6}
	{
		\draw (\yvar*\wvar,\xvar*\wvar) -- ++ (0,\wvar) -- ++ (\wvar,0) -- ++ (0,-\wvar) -- cycle;
	}
}
\end{tikzpicture}
\and
\begin{tikzpicture}
\pgfmathsetmacro{\wvar}{0.4}
\foreach \xvar in {0,1}
{
	\foreach \yvar in {0,1,2,3,4,5,6}
	{
		\draw (\yvar*\wvar,\xvar*\wvar) -- ++ (0,\wvar) -- ++ (\wvar,0) -- ++ (0,-\wvar) -- cycle;
	}
}
\end{tikzpicture}
\and
\begin{tikzpicture}
\pgfmathsetmacro{\wvar}{0.4}
\foreach \xvar in {0,1}
{
	\foreach \yvar in {0,1,2,3,4,5,6}
	{
		\draw (\yvar*\wvar,\xvar*\wvar) -- ++ (0,\wvar) -- ++ (\wvar,0) -- ++ (0,-\wvar) -- cycle;
	}
}
\end{tikzpicture}
\\
}

\newcommand{\weekdays}{
	\begin{tikzpicture}
	\pgfmathsetmacro{\wvar}{0.4}
	\foreach \yvar/\zvar in {0/M,1/T,2/W,3/T,4/F,5/S,6/S{\tiny u}}
	{
		\node at (\yvar*\wvar,0) [anchor=center] {\zvar};
	}
	\end{tikzpicture}
}

\newcommand{\expotransport}{
% longtable to spread over multiple pages 
% method / departed / arrived / notes
\addcontentsline{toc}{chapter}{Expo Transport}
\begin{longtable}{p{2cm}|p{2cm}|p{2cm}|p{8cm}}
	\multicolumn{4}{l}{\expoheading{Expo Transport}} \\
	Method & Departed & Arrived & Notes \\
	\midrule
	\endfirsthead
	Method & Departed & Arrived & Notes \\
	\midrule
	\endhead
	\vspace{20.3cm} & & & \\
	\vspace{22cm} & & & \\
\end{longtable}
}

\newcommand{\moneyowed}{
% creates a series of pages for the money owed to individuals
% each person gets a page as made by moneyowedperson
% generated from the names list
\addcontentsline{toc}{chapter}{Money owed to ...}

\openin\namesread=names.txt
\setcounter{linecount}{0}

\whiledo{\value{linecount}<\value{maxlines}}{
	\stepcounter{linecount}
	\read\namesread to \currentname
	\moneyowedperson{\currentname}
}
}

\newcommand{\moneyowedperson}[1]{
% argument is who the money is owed to
% longtable to spread over multiple pages
% date / owed by / description
\addcontentsline{toc}{section}{#1}
{\LARGE\bf Money owed to #1}\vspace*{12pt}
\begin{longtable}{p{2cm}|p{4cm}|p{3cm}|p{6cm}}
	\multicolumn{4}{p{\textwidth}}{Write a \textbf{positive} sign if #1~\hspace*{-3pt}\textbf{spent money}} \\
	\multicolumn{4}{p{\textwidth}}{Write a \textbf{negative} sign if #1~\hspace*{-3pt}\textbf{owes money}} \\
	\multicolumn{4}{p{\textwidth}}{Only write on \textbf{one person's page} for a transaction.  \textbf{Give currency if not Euros.}} \\
	\multicolumn{4}{p{\textwidth}}{}\\
	\textbf{Date} & \textbf{Who} & \textbf{Amount} & \textbf{Item} \\
	\midrule
	\endfirsthead
	\textbf{Date} & \textbf{Who} & \textbf{Amount} & \textbf{Item} \\
	\midrule
	\endhead
	\vspace{18.8cm} & & & \\
	\vspace{22cm} & & & \\
\end{longtable}
\clearpage
}

\newcommand{\moneyowedgasthof}{
% longtable to spread over multiple pages
% date / owed by / description
\addcontentsline{toc}{chapter}{Money owed to Gasthof Staud'nwirt}
\begin{longtable}{p{2cm}|p{4cm}|p{3cm}|p{6cm}}
	\multicolumn{4}{l}{\expoheading{Money owed to Gasthof Staud'nwirt}} \\
	\textbf{Date} & \textbf{Who} & \textbf{Amount} & \textbf{Item} \\
	\midrule
	\endfirsthead
	\textbf{Date} & \textbf{Who} & \textbf{Amount} & \textbf{Item} \\
	\midrule
	\endhead
	\vspace{20.3cm} & & & \\
	\vspace{22cm} & & & \\
\end{longtable}
\clearpage
}

\newcommand{\blankpage}[1]{
% for creating a double page with nothing but a title
% longtable to consistent formatting
\addcontentsline{toc}{chapter}{#1}
\begin{longtable}{p{\textwidth}}
\expoheading{#1} \\
\vspace{\textheight} \\
\end{longtable}
}

\begin{document}

\newread\namesread
\newcounter{maxlines}
\newcounter{linecount}
\def\and{&}

\openin\namesread=names.txt
\loop\unless\ifeof\namesread
	\read\namesread to \currentname
	\stepcounter{maxlines}
\repeat
\addtocounter{maxlines}{-1}

\newread\datesread
\openin\datesread=dates.txt
\read\datesread to \zeroweek
\read\datesread to \firstweek
\read\datesread to \secondweek
\read\datesread to \thirdweek
\read\datesread to \fourthweek
\read\datesread to \fifthweek
\read\datesread to \sixthweek

\expotitle
\printtoc

\addcontentsline{toc}{chapter}{Drinks}
\tallyeveryone{Drinks 1--50}{\drinksssubtitle}{0}
\tallyspares{More drinks 51--100}{\drinksssubtitle}{50}{15}

\addcontentsline{toc}{chapter}{Nights}
\nightstallyoneweek{Nights, week zero}{\zeroweek}
\nightstally{Nights and time underground, weeks 1-3}{\firstweek}{\secondweek}{\thirdweek}
\nightstally{Nights and time underground, weeks 4-6}{\fourthweek}{\fifthweek}{\sixthweek}

\moneyowed
\moneyowedgasthof

\expotransport

\blankpage{Toll road info}
\blankpage{Gear left up the hill}
\blankpage{Gear taken back to Cambridge}
\blankpage{Top camp food bought}
\blankpage{First Aid}
\blankpage{In-Austria jollies}
\blankpage{Suggestions for next year}
\blankpage{Quotes}


\end{document}