And so, after three years...

My approach is to draw TikZ
rectangles on the background layer once the Gantt chart has been drawn.
In the example below, I've highlighted the units used in the calendar, so that you can easily redefine the rectangles as you need. (For example, this approach could also be used to define horizontal stripes that would correspond to task groups.)
Note that the coloring of weekdays (Saturday in light red, and Sundays in bold red) is implemented here in a much lighter way that in your original code (i.e. directly in the definition of \pgfcalendarweekdayletter
-- cf. line 27)
What remains to do:
- automatically compute the number of title lines (to be implemented on line 75)
- automatically compute the number of chart lines (to be implemented on line 83)

Edit: Now automatically computes the number of weeks, when does the first week-end starts, and handles correctly if the first day of the calendar is a Sunday.

\documentclass[margin=10pt]{standalone}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{backgrounds,calc,calendar}
\usepackage{pgfgantt}
\usepackage{pgfcalendar}
\usepackage{calc}
\usepackage{ifthen}
%\newcommand{\datenumber}[1]{% to compute the number of days between \mystartdate and a given date. Unused here
% \pgfcalendardatetojulian{#1}{\dtnmbr}%
% \advance\dtnmbr by -\mystrtdt%
% \the\dtnmbr%
%}
%TO BE UPDATED ACCORDING TO YOUR NEEDS
\def\mystartdate{2016-08-29}%starting date of the calendar
\def\myenddate{2016-10-31}%ending date of the calendar
\def\myxunit{.5cm}%width of 1 day
\def\myyunittitle{.5cm}%height of 1 title line
\def\myyunitchart{1cm}%height of 1 chart line
\def\pgfcalendarweekdayletter#1{% define the name of weekdays + formatting
\ifcase#1M\or T\or W\or T\or F\or \textcolor{red!50!white}{S}\or \textcolor{red}{\textbf{S}}\fi
}
%Some calculation for plotting week-ends area
\newcount\myenddatecount
\pgfcalendardatetojulian{\myenddate}{\myenddatecount}
\newcount\mystartdatecount
\pgfcalendardatetojulian{\mystartdate}{\mystartdatecount}
\newcount\mynumberofdays
\mynumberofdays \myenddatecount\relax
\advance \mynumberofdays by -\mystartdatecount\relax% so \mynumberofdays is now the number of days in the calendar
\newcount\mynumberofweeks
\mynumberofweeks\mynumberofdays\relax
\advance \mynumberofweeks by -1\relax
\divide \mynumberofweeks by 7\relax% so we have the number of full weeks
\newcount\myfirstweekday
\pgfcalendarjuliantoweekday{\mystartdatecount}{\myfirstweekday}
\newcount\myfirstweekendshift
\myfirstweekendshift 5\relax
\advance\myfirstweekendshift by -\myfirstweekday\relax
\ifnum \myfirstweekendshift=-1%if first day = sunday
\advance \myfirstweekendshift by 7\relax% the first full weekend will thus begin one week after
\fi
\begin{document}
\begin{ganttchart}[%
hgrid,
vgrid,
x unit = \myxunit,
y unit title = \myyunittitle,
title height = .75,
y unit chart = \myyunitchart,
time slot format=isodate,
canvas/.append style={fill opacity=.1},
]%
{\mystartdate}%
{\myenddate}
\gantttitlecalendar{year}\\
\gantttitlecalendar{month=name}\\
\gantttitlecalendar{day}\\
\gantttitlecalendar{weekday=letter}\\
%So we have 4 title lines
\def\numbttitlelines{4}
\ganttgroup{Group 1}{\mystartdate}{2016-10-14} \\
\ganttbar{Bar 1}{\mystartdate}{2016-09-05}\\
\ganttbar{Bar 2}{2016-09-06}{2016-09-15}\\
\ganttbar{Bar 3}{2016-09-15}{2016-10-12}\\
\ganttmilestone{Milestone}{2016-10-14}%Note that whe didn't add \\ here! (so that last line is not blanck)
%So we have 5 chart lines
\def\numbtchartlines{5}
\begin{scope}[|<->| ,thick] %Display units
\fill [red] (0,0) circle [radius = 2.5pt] node [above left] {origin \texttt{(0,0)}};
\draw [blue] (-1ex,0) --(-1ex,-\myyunittitle) node [midway, right] {\verb| 1*\myyunittitle|};
\draw [blue!33!white] (-1em,0) --(-1em,-\numbttitlelines*\myyunittitle) node [midway, left] {\verb| <# of title lines>*\myyunittitle|};
\draw [green!75!black] (-1ex,-\numbttitlelines*\myyunittitle) --(-1ex,-\numbttitlelines*\myyunittitle-1*\myyunitchart) node [midway, right, anchor=south west] {\verb| 1*\myyunitchart|};
\draw [green] (-1em,-\numbttitlelines*\myyunittitle)--(-1em,-\numbttitlelines*\myyunittitle -\numbtchartlines*\myyunitchart) node [midway, left, anchor=south east] {\verb| <# of chart lines>*\myyunitchart|};
\draw [yellow!50!orange] (0, 4pt-2*\myyunittitle) -- (\myxunit,4pt-2*\myyunittitle) node [right, anchor=base west] {\verb| 1*\myxunit|};
\end{scope}
\begin{scope}[on background layer]%display week-ends
\foreach \i in {0,...,\the\mynumberofweeks}
\fill [red!10]
(\myfirstweekendshift*\myxunit+\i*7*\myxunit,-\numbttitlelines*\myyunittitle)% on the x-absis: shift the number of days before the first Saturday + 7days*\i; on the y-absis: shift down the number of title lines * their height
rectangle
(\myfirstweekendshift*\myxunit+\i*7*\myxunit+2*\myxunit,-\numbttitlelines*\myyunittitle -\numbtchartlines*\myyunitchart);% on the x-absis: add two days (the week-end); on the y-absis: add the number of chartlines*their height
\ifthenelse{\myfirstweekendshift=6}{% if the first day is a sunday, it is not grayed. So draw a rectangle for the first day of the chart.
\fill [red!10]
(0,-\numbttitlelines*\myyunittitle)
rectangle
(1*\myxunit,-\numbttitlelines*\myyunittitle -\numbtchartlines*\myyunitchart);
}{}
\end{scope}
\end{ganttchart}
\end{document}
- The template works if you replace old
day code
. Your errors are due to placing it outside of the calender environment.
- I started in the 2nd half of 2015 and the 1st half of 2015. To shift the cycle, initialize the
\cleanerID
to some value from 0 to 29. For the given requirement, it's 18.
- To pause and start, you can use the
at most
and at least
keywords of \ifdate
- To change two names, it just looked up the dates and changed them manually (via
equals=<reference>
) and colored them differently to show the effect.
Code
% DIN-A4 doublesided year calendar
% Author: Robert Krause
% License : Creative Commons attribution license
% Submitted to TeXample.net on 13 July 2012
\documentclass[landscape,a4paper, ngerman, 10pt]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage[T1]{fontenc}
\usepackage{tikz} % Use the calendar.sty style
\usepackage{translator} % German Month and Day names
\usepackage{fancyhdr} % header and footer
\usepackage{fix-cm} % Large year in header
\usepackage[landscape, headheight = 2cm, margin=.5cm,
top = 3.2cm, nofoot]{geometry}
\usetikzlibrary{calc}
\usetikzlibrary{calendar}
\renewcommand*\familydefault{\sfdefault}
% User defined
\def\year{2015}
\def\nextyear{2016}
% Names of Holidays are inserted by employing this macro
\def\termin#1#2{
\node [anchor=north west, text width= 3.4cm] at
($(cal-#1.north west)+(3em, 0em)$) {\tiny{#2}};
}
%Header
\renewcommand{\headrulewidth}{0.0pt}
\setlength{\headheight}{10ex}
\chead{
%\fontsize{60}{70}\selectfont\textbf{\year}
\Large\textbf{Cleaning Plan}\hfill
}
%Footer
%\cfoot{\footnotesize\texttt{http://www.texample.net/}}
\pagenumbering{gobble}
% === Macro that returns a name if given a number from 0 to 29, "Error!" otherwise
\newcommand{\Person}[1]{%
\ifcase#1
Bryant Romans \or
Latricia Stoneman \or
Wilmer Lytton \or
Tommie Lenahan \or
Antonio Hoggard \or
Edward Lanctot \or
Chassidy Hyndman \or
Marianela Wojciechowski \or
Edna Kreitzer \or
Harrison Cruze \or
Marna Meloy \or
Georgene Joly \or
Ken Denley \or
William Loeffler \or
Young Spinelli \or
Glendora Bruss \or
Kraig Calloway \or
Chantal Callejas \or
Eleni Graziani \or
Ilene Crumpler \or
Ali Valliere \or
Sonya Barlett \or
Frederick Delacruz \or
Kayce Foti \or
Orval Kirchner \or
Corrinne Cahoon \or
Modesto Mulloy \or
Alessandra Rodenberger \or
Bernita Redman \or
Iola Eudy \else
Error! \fi
}
\xdef\cleanerID{18}
\begin{document}
\pagestyle{fancy}
\begin{center}
\begin{tikzpicture}[every day/.style={anchor = north}]
\calendar[
dates=\year-07-01 to \year-12-31,
name=cal,
day yshift = 3em,
day code=
{ %=== Define macro that holds cleaners name on cleaning days, empty otherwise
\ifdate{Monday,Wednesday,Saturday}%
{ \ifdate{at most=\year-12-09}
{ \xdef\InsertName{\Person{\cleanerID}}
\pgfmathtruncatemacro{\newCleanerID}{mod(\cleanerID+1,30)}
\xdef\cleanerID{\newCleanerID}
}
{ \xdef\InsertName{}
}
}
{ \xdef\InsertName{}
}
\ifdate{equals=\year-07-04}
{ \xdef\InsertName{Iola Eudy}
\tikzset{every day/.style={fill=cyan!50!blue}}
}{}
\ifdate{equals=\year-07-27}
{ \xdef\InsertName{Ilene Crumpler}
\tikzset{every day/.style={fill=cyan!50!blue}}
}{}
\node[name=\pgfcalendarsuggestedname,every day,shape=rectangle,
minimum height= .53cm, text width = 4.4cm, draw = gray]{\tikzdaytext};
%=== Insert the cleaners name here
\draw (-1.8cm, -.1ex) node[anchor = west]{\footnotesize%
\pgfcalendarweekdayshortname{\pgfcalendarcurrentweekday} \InsertName
};
},
execute before day scope=
{
\ifdate{day of month=1}
{
% Shift right
\pgftransformxshift{4.8cm}
% Print month name
\draw (0,0)node [shape=rectangle, minimum height= .53cm,
text width = 4.4cm, fill = black, text= white, draw = black, text centered]
{\textbf{\pgfcalendarmonthname{\pgfcalendarcurrentmonth}}
};
}{}
\ifdate{workday}
{
% normal days are white
\tikzset{every day/.style={fill=white}}
}{}
% Saturdays and half holidays (Christma's and New year's eve)
\ifdate{Saturday}{\tikzset{every day/.style={fill=red!10}}}{}
% Sundays and full holidays
\ifdate{Sunday}{\tikzset{every day/.style={fill=red!20}}}{}
},
execute at begin day scope=
{
% each day is shifted down according to the day of month
\pgftransformyshift{-.53*\pgfcalendarcurrentday cm}
}
];
\end{tikzpicture}
% Repeat the whole thing for the second page
%\pagebreak
\begin{tikzpicture}[every day/.style={anchor = north}]
\calendar[dates=\nextyear-01-01 to \nextyear-06-30,
name=cal,
day yshift = 3em,
day code=
{ %=== Define macro that holds cleaners name on cleaning days, empty otherwise
\ifdate{Monday,Wednesday,Saturday}%
{ \ifdate{at least=\nextyear-01-03}
{ \xdef\InsertName{\Person{\cleanerID}}
\pgfmathtruncatemacro{\newCleanerID}{mod(\cleanerID+1,30)}
\xdef\cleanerID{\newCleanerID}
}
{ \xdef\InsertName{}
}
}
{ \xdef\InsertName{}
}
\node[name=\pgfcalendarsuggestedname,every day,shape=rectangle,
minimum height= .53cm, text width = 4.4cm, draw = gray]{\tikzdaytext};
%=== Insert the cleaners name here
\draw (-1.8cm, -.1ex) node[anchor = west]{\footnotesize%
\pgfcalendarweekdayshortname{\pgfcalendarcurrentweekday} \InsertName
};
},
execute before day scope=
{
\ifdate{day of month=1} {
% Shift right
\pgftransformxshift{4.8cm}
% Print month name
\draw (0,0)node [shape=rectangle, minimum height= .53cm,
text width = 4.4cm, fill = black, text= white, draw = black, text centered]
{
\textbf{\pgfcalendarmonthname{\pgfcalendarcurrentmonth}}
};
}{}
\ifdate{workday}
{
\tikzset{every day/.style={fill=white}}
}{}
% Saturdays and half holidays (Christma's and New year's eve)
\ifdate{Saturday}{\tikzset{every day/.style={fill=red!10}}}{}
% Sundays and full holidays
\ifdate{Sunday}{\tikzset{every day/.style={fill=red!20}}}{}
},
execute at begin day scope=
{
% Each day is shifted down according to the day of month
\pgftransformyshift{-.53*\pgfcalendarcurrentday cm}
}
];
\end{tikzpicture}
\end{center}
\end{document}
Output

Edit 1: Probably you wanted it a little more like this:
- it starts on 18. November 2015 and runs until October 2016.
- The chrismas break is excluded
- lene Crumpler and Iola Eudy have been swapped, but that was done manually
Code
% DIN-A4 doublesided year calendar
% Author: Robert Krause
% License : Creative Commons attribution license
% Submitted to TeXample.net on 13 July 2012
\documentclass[landscape,a4paper, ngerman, 10pt]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage[T1]{fontenc}
\usepackage{tikz} % Use the calendar.sty style
\usepackage{translator} % German Month and Day names
\usepackage{fancyhdr} % header and footer
\usepackage{fix-cm} % Large year in header
\usepackage[landscape, headheight = 2cm, margin=.5cm,
top = 3.2cm, nofoot]{geometry}
\usetikzlibrary{calc}
\usetikzlibrary{calendar}
\renewcommand*\familydefault{\sfdefault}
% User defined
\def\year{2015}
\def\nextyear{2016}
% Names of Holidays are inserted by employing this macro
\def\termin#1#2{
\node [anchor=north west, text width= 3.4cm] at
($(cal-#1.north west)+(3em, 0em)$) {\tiny{#2}};
}
%Header
\renewcommand{\headrulewidth}{0.0pt}
\setlength{\headheight}{3ex}
\chead{
%\fontsize{60}{70}\selectfont\textbf{\year}
\Large\textbf{Cleaning Plan}\hfill
}
%Footer
%\cfoot{\footnotesize\texttt{http://www.texample.net/}}
\pagenumbering{gobble}
% === Macro that returns a name if given a number from 0 to 29, "Error!" otherwise
\newcommand{\Person}[1]{%
\ifcase#1
Bryant Romans \or
Latricia Stoneman \or
Wilmer Lytton \or
Tommie Lenahan \or
Antonio Hoggard \or
Edward Lanctot \or
Chassidy Hyndman \or
Marianela Wojciechowski \or
Edna Kreitzer \or
Harrison Cruze \or
Marna Meloy \or
Georgene Joly \or
Ken Denley \or
William Loeffler \or
Young Spinelli \or
Glendora Bruss \or
Kraig Calloway \or
Chantal Callejas \or
Eleni Graziani \or
Ilene Crumpler \or
Ali Valliere \or
Sonya Barlett \or
Frederick Delacruz \or
Kayce Foti \or
Orval Kirchner \or
Corrinne Cahoon \or
Modesto Mulloy \or
Alessandra Rodenberger \or
Bernita Redman \or
Iola Eudy \else
Error! \fi
}
\xdef\cleanerID{18}
\begin{document}
\pagestyle{fancy}
\begin{center}
\begin{tikzpicture}[every day/.style={anchor = north}]
\calendar[
dates=\year-11-01 to \nextyear-04-30,
name=cal,
day yshift = 3em,
day code=
{ %=== Define macro that holds cleaners name on cleaning days, empty otherwise
\ifdate{Monday,Wednesday,Saturday}%
{ \ifdate{between=\year-11-18 and \year-12-09, at least=\nextyear-01-03}
{ \xdef\InsertName{\Person{\cleanerID}}
\pgfmathtruncatemacro{\newCleanerID}{mod(\cleanerID+1,30)}
\xdef\cleanerID{\newCleanerID}
}
{ \xdef\InsertName{}
}
}
{ \xdef\InsertName{}
}
\ifdate{equals=\year-11-21}
{ \xdef\InsertName{Iola Eudy}
\tikzset{every day/.style={fill=cyan!50!blue!50}}
}{}
\ifdate{equals=\nextyear-01-06}
{ \xdef\InsertName{Ilene Crumpler}
\tikzset{every day/.style={fill=cyan!50!blue!50}}
}{}
\node[name=\pgfcalendarsuggestedname,every day,shape=rectangle,
minimum height= .53cm, text width = 4.4cm, draw = gray]{\tikzdaytext};
%=== Insert the cleaners name here
\draw (-1.8cm, -.1ex) node[anchor = west]{\footnotesize%
\pgfcalendarweekdayshortname{\pgfcalendarcurrentweekday} \InsertName
};
},
execute before day scope=
{
\ifdate{day of month=1}
{
% Shift right
\pgftransformxshift{4.8cm}
% Print month name
\draw (0,0)node [shape=rectangle, minimum height= .53cm,
text width = 4.4cm, fill = black, text= white, draw = black, text centered]
{\textbf{\pgfcalendarmonthname{\pgfcalendarcurrentmonth} \pgfcalendarcurrentyear}
};
}{}
\ifdate{workday}
{
% normal days are white
\tikzset{every day/.style={fill=white}}
}{}
% Saturdays and half holidays (Christma's and New year's eve)
\ifdate{Saturday}{\tikzset{every day/.style={fill=red!10}}}{}
% Sundays and full holidays
\ifdate{Sunday}{\tikzset{every day/.style={fill=red!20}}}{}
},
execute at begin day scope=
{
% each day is shifted down according to the day of month
\pgftransformyshift{-.53*\pgfcalendarcurrentday cm}
}
];
\end{tikzpicture}
% Repeat the whole thing for the second page
%\pagebreak
\begin{tikzpicture}[every day/.style={anchor = north}]
\calendar[dates=\nextyear-05-01 to \nextyear-10-31,
name=cal,
day yshift = 3em,
day code=
{ %=== Define macro that holds cleaners name on cleaning days, empty otherwise
\ifdate{Monday,Wednesday,Saturday}%
{ \ifdate{at least=\nextyear-01-03}
{ \xdef\InsertName{\Person{\cleanerID}}
\pgfmathtruncatemacro{\newCleanerID}{mod(\cleanerID+1,30)}
\xdef\cleanerID{\newCleanerID}
}
{ \xdef\InsertName{}
}
}
{ \xdef\InsertName{}
}
\node[name=\pgfcalendarsuggestedname,every day,shape=rectangle,
minimum height= .53cm, text width = 4.4cm, draw = gray]{\tikzdaytext};
%=== Insert the cleaners name here
\draw (-1.8cm, -.1ex) node[anchor = west]{\footnotesize%
\pgfcalendarweekdayshortname{\pgfcalendarcurrentweekday} \InsertName
};
},
execute before day scope=
{
\ifdate{day of month=1} {
% Shift right
\pgftransformxshift{4.8cm}
% Print month name
\draw (0,0)node [shape=rectangle, minimum height= .53cm,
text width = 4.4cm, fill = black, text= white, draw = black, text centered]
{
\textbf{\pgfcalendarmonthname{\pgfcalendarcurrentmonth} \pgfcalendarcurrentyear}
};
}{}
\ifdate{workday}
{
\tikzset{every day/.style={fill=white}}
}{}
% Saturdays and half holidays (Christma's and New year's eve)
\ifdate{Saturday}{\tikzset{every day/.style={fill=red!10}}}{}
% Sundays and full holidays
\ifdate{Sunday}{\tikzset{every day/.style={fill=red!20}}}{}
},
execute at begin day scope=
{
% Each day is shifted down according to the day of month
\pgftransformyshift{-.53*\pgfcalendarcurrentday cm}
}
];
\end{tikzpicture}
\end{center}
\end{document}
Output

Best Answer
This might not be the simplest way of doing things and the positioning of the days on the second row probably needs tidying up, but hopefully shows how to proceed to get the required output.