% Tämä on ihan ihme kikkailu
% No, voipahan käyttää LaTeXin \ref:ä eikä tarvitse käsin kirjoittaa kohtien numeroita
\begin{tikzpicture}
\tikzstyle{pohja}=[shape=rectangle, font=\scriptsize\sf\bfseries,
    draw=mgborder,
    general shadow={shadow xshift=0.5mm, shadow yshift=-0.5mm, fill=black!30},
    left color=mgfill, right color=mgfill!50, shading angle=20]

\tikzstyle{ttvari}=[every node/.style={pohja, 
    draw=black, left color=lightfill, right color=lightfill!30}];
\tikzstyle{aspvari}=[every node/.style={pohja, 
    draw=black, left color=darkfill, right color=darkfill!80}];
\tikzstyle{johtovari}=[every node/.style={pohja, 
    draw=black, left color=midfill, right color=midfill!70}];

\hyphenpenalty=10000
\definecolor{mgborder}{rgb}{0.6,0.5,0.4}
\definecolor{mgfill}{rgb}{1.0,0.8,0.6}
\definecolor{lightfill}{rgb}{0.9, 0.9, 0.9}
\definecolor{midfill}{rgb}{0.82, 0.82, 0.82}
\definecolor{darkfill}{rgb}{0.65, 0.65, 0.65}


\path
[edge from parent path={(\tikzparentnode.south) -- +(0,-2mm) -| (\tikzchildnode.north)},
every node/.style={pohja}]
%  level/.style={sibling distance=6em}]
node {Järjestelmään kirjautuminen (\ref{kirjautuminen})}
[level distance=2em]
child{ node {Yläpalkki (\ref{yläpalkki})}
[level distance=4em, sibling distance=5.8em, text width=4.5em,
level 3/.style={level distance=9em},
level 4/.style={level distance=5em}]
    child{[ttvari]
        node (tyolista) {\mbox{Oma työlista} (\ref{tyolista})}
        [text width=5em, sibling distance=6em]
        child{node [xshift=2em] (pyynnontarkastelu) {Huoltopyynnön tarkastelu (\ref{pyynnontarkastelu})}
            child{node (pyynnonmuokkaus) {Huoltopyynnön muokkaaminen (\ref{pyynnonmuokkaaminen})}}
            child{node (tehtavanmuokkaus) {Huoltotehtävän muokkaaminen (\ref{tehtavanmuokkaus})}}
        }
    }
    child{[ttvari]
        node (pyyntolista) {Huoltopyyntö-\mbox{lista (\ref{huoltopyyntolista})}}
        child{node [below=1.5em, text width=4.5em] at (pyyntolista.south)
            (pyynnonlisays) {Huoltopyynnön lisääminen (\ref{pyynnonlisays})}
        }
    }
    child{[aspvari]
        node (asiakaslista) {Asiakaslista (\ref{asiakaslista})}
        child[missing]{}
        child{node (asiakkaantarkastelu) {Asiakkaan tietojen tarkastelu (\ref{asiakkaan_tietojen_tarkastelu})}
            child{node {Asiakkaan tietojen muokkaaminen (\ref{asiakkaan_tietojen_muokkaaminen})}}
        }
        child{node [below=1.5em, text width=3.5em] at (asiakaslista.south east)
            (asiakkaanlisays) {Asiakkaan lisääminen (\ref{asiakkaan_lisaaminen})}
        }
    }
    child{[aspvari]
        node (laskulista) {Laskulista (\ref{laskulista})}
        child{node (laskuntarkastelu) {Laskun tarkastelu (\ref{laskuntarkastelu})}
            [text width=2em, sibling distance=3em]
            child{node {Laskun muok-kaus (\ref{laskunmuokkaus})}}
            child{node [yshift=0.9ex] {Laskun lähetys (\ref{laskunlähetys})}}
        }
    }
    child{[johtovari]
        node (tyontekijalista) {Työntekijälista (\ref{tyontekijalista})}
        child[missing]{}
        child{node (tyontekijantarkastelu) {Työntekijän tarkastelu (\ref{työntekijän_tarkastelu})}
            child{node{Työntekijän tietojen muokkaaminen (\ref{työntekijän_muokkaus})}}
        }
        child{node [below=1.5em, text width=3.5em] at (tyontekijalista.south east)
            (tyontekijanlisays) {Työntekijän lisääminen (\ref{työntekijän_lisääminen})}}
    }
    child{[johtovari]
        node {Hintalista (\ref{hintalista})}
        child{node {Hintatiedon muokkaaminen (\ref{hintatiedon_muokkaaminen})}}
    }
};

\draw (pyyntolista.south) |- +(0,-2mm) -| ($(pyynnontarkastelu.north)+(1mm,0)$);
\draw [->, dashed] (pyynnontarkastelu.east) -- (asiakkaantarkastelu.west);
\draw [->, dashed] (laskuntarkastelu.west) -- (asiakkaantarkastelu.east);
\draw [->, dashed] (pyynnonlisays) -- (pyynnontarkastelu);
\draw [->, dashed] (asiakkaanlisays) -- (asiakkaantarkastelu);
\draw [->, dashed] (tyontekijanlisays) -- (tyontekijantarkastelu);

\draw [->, dashed] (pyynnontarkastelu.south east) -- +(5mm,-5mm)
    -- ($(laskuntarkastelu.south west)+(-5mm,-5mm)$)
    -- (laskuntarkastelu.south west);

% Johto voi tarkastella työlistoja
\draw [->, dashed] (tyontekijantarkastelu.south east) -- +(1cm,-1cm)
    |- ($(pyynnonmuokkaus.south west)+(-5mm,-5mm)$)
    |- (tyolista);

% \draw [->, dashed] (laskulista.south) |- +(-2.6em,-2mm) |- (laskuntarkastelu.west);

\draw [decorate,decoration={brace,amplitude=2mm}]
    ($(tehtavanmuokkaus.south east)+(+2mm,-6mm)$)
    -- ($(pyynnonmuokkaus.south west)+(-2mm,-6mm)$)
    node [midway,below=1mm,text width=60mm,
        font=\scriptsize\sf\bfseries\centering, text centered]
    {Vastuuhenkilön ja huoltotyöntekijän käyttämät toiminnot};

\draw [decorate,decoration={brace,amplitude=2mm}]
    ($(tehtavanmuokkaus.south east)+(+53mm,-6mm)$)
    -- ($(tehtavanmuokkaus.south east)+(+3mm,-6mm)$)
    node [midway,below=1mm,text width=50mm,
        font=\scriptsize\sf\bfseries\centering, text centered]
    {Asiakaspalvelijan käyttämät toiminnot};

\draw [decorate,decoration={brace,amplitude=2mm}]
    ($(tehtavanmuokkaus.south east)+(+100mm,-6mm)$)
    -- ($(tehtavanmuokkaus.south east)+(+54mm,-6mm)$)
    node [midway,below=1mm,text width=50mm,
        font=\scriptsize\sf\bfseries\centering, text centered]
    {Yrityksen johdon käyttämät toiminnot};

\end{tikzpicture}