private static PdfPTable createQuittingTimes() throws DocumentException {
    PdfPTable timesTable = new PdfPTable(3);
    timesTable.setWidthPercentage(85.0f);

    timesTable.setHeaderRows(1);
    PdfPCell employmentTimeHeading = new PdfPCell();
    employmentTimeHeading.addElement(
        PdfHelper.lastLineParagraphBold("Efter uafbrudt beskæftigelse:"));
    timesTable.addCell(employmentTimeHeading);

    PdfPCell employerHeading = new PdfPCell();
    employerHeading.addElement(PdfHelper.lastLineParagraphBold("Bruger"));
    timesTable.addCell(employerHeading);

    PdfPCell employeeHeading = new PdfPCell();
    employeeHeading.addElement(PdfHelper.lastLineParagraphBold("Hjælper"));
    timesTable.addCell(employeeHeading);

    addQuittingTimes(timesTable, "0-7 mdr.", "Ingen", "Ingen");
    addQuittingTimes(timesTable, "7-12 mdr.", "7 dage", "3 dage");
    addQuittingTimes(timesTable, "1-3 år", "21 dage", "7 dage");
    addQuittingTimes(timesTable, "3-6 år", "49 dage", "28 dage");
    addQuittingTimes(timesTable, "6-9 år", "70 dage", "28 dage");

    return timesTable;
  }
  private static void addQuittingTimes(
      PdfPTable table, String employmentTime, String employerWarning, String employeeWarning) {
    PdfPCell timeCell = new PdfPCell();
    timeCell.addElement(PdfHelper.lastLineParagraph(employmentTime));
    table.addCell(timeCell);

    PdfPCell employerCell = new PdfPCell();
    employerCell.addElement(PdfHelper.lastLineParagraph(employerWarning));
    table.addCell(employerCell);

    PdfPCell employeeCell = new PdfPCell();
    employeeCell.addElement(PdfHelper.lastLineParagraph(employeeWarning));
    table.addCell(employeeCell);
  }
  @Override
  protected void handleModelPart(
      Document document, User user, Helper helper, Employment employment) {
    try {
      document.add(PdfHelper.createHeading2("Kontraktforhold"));
      document.add(createEmploymentDetails(employment));
      document.add(PdfHelper.createPhrase(""));

      String paymentFirst = "Aflønning:";
      String paymentContent =
          "Sker efter aftale i BPA-ordningen "
              + "i Aarhus Kommune. Lønnen udbetales via lønmodtagers cpr-nr. "
              + "til NemKonto. Lønudbetaling optjenes for en kalendermåned "
              + "og udbetales den 16. i måneden efter. Der optjenes 12.5% "
              + "i feriegodtgørelse af den optjente løn, som udbetales via "
              + "et feriekort.";

      document.add(PdfHelper.createRuleParagraph(paymentFirst, paymentContent));

      String agreementFirst = "Ansættelsesaftale:";
      String agreementContent =
          "Træder i kraft ved "
              + "ansættelse. Derefter er den gældende indtil den "
              + "opsiges af en af parterne til ophør ved "
              + "varslingsperiodens udløb.";
      document.add(PdfHelper.createRuleParagraph(agreementFirst, agreementContent));

      // TABLE

      PdfPTable middleSection = new PdfPTable(2);
      middleSection.setWidthPercentage(100.0f);
      middleSection.setSpacingBefore(10.0f);

      PdfPCell quittingTimes = new PdfPCell();
      quittingTimes.setBorder(0);

      quittingTimes.addElement(PdfHelper.lastLineParagraphBold("Opsigelsesvarsler"));

      quittingTimes.addElement(createQuittingTimes());

      middleSection.addCell(quittingTimes);

      PdfPTable deathTable = new PdfPTable(1);
      deathTable.setWidthPercentage(85.0f);

      PdfPCell deathClause = new PdfPCell();
      deathClause.addElement(
          new Paragraph(
              "I tilfælde af arbejdsgiverens død eller "
                  + "akut indlæggelse på hospital eller institution "
                  + "afgives de nævnte opsigelsesvarsler på klientens "
                  + "vegne af Aarhus Kommunes Socialforvaltning, der "
                  + "over klientkontoen også udreder løn i perioden, "
                  + "mod at arbejdstageren stiller sig til rådighed "
                  + "efter forvaltningens anvisning.",
              PdfHelper.NORMALTEXT));
      deathTable.addCell(deathClause);

      PdfPCell deathCell = new PdfPCell();
      deathCell.setBorder(0);
      deathCell.addElement(deathTable);
      middleSection.addCell(deathCell);

      document.add(middleSection);

      document.add(
          PdfHelper.createRuleParagraph(
              "",
              "Undertegnede medarbejder erklærer"
                  + " herved, at være gjort bekendt med, og at være "
                  + "indforstået med ovenstående ansættelsesbetingelser, samt "
                  + "ovenstående regler om sygefravær."));

      document.newPage();

      document.add(PdfHelper.createHeading2("Kontraktforhold (fortsat)"));

      String wowOfSilenceFirst = "Tavshedspligt:";
      String wowOfSilenceContent =
          "Som medarbejder ansat under "
              + "hjælpe-/kontaktpersonordningen har du tavshedspligt med "
              + "hensyn til din arbejdsgivers rent private forhold som "
              + "religion, om politiske, foreningsmæssige, seksuelle og "
              + "strafbare forhold, samt oplysninger om helbredsforhold, "
              + "sociale problemer og misbrug af nydelsesmidler og "
              + "lignende. Brud på denne tavshedspligt betragtes som "
              + "strafbart og kan medføre øjeblikkelig afskedigelse. "
              + "Denne tavshedspligt ophører ikke vej tjenestens ophør.";

      document.add(PdfHelper.createRuleParagraph(wowOfSilenceFirst, wowOfSilenceContent));

      document.add(
          PdfHelper.createRuleParagraph(
              "",
              "Inden underskrift bedes "
                  + "bemærket: Løn- og ansættelsesvilkår er under "
                  + "forbeholdt af godkendelse i Personaleafdelingen i "
                  + "Magistratsafdelingen."));

      document.add(
          PdfHelper.createRuleParagraph(
              "Anmeldelse af sygdom:",
              "Fravær, der skyldes sygdom, graviditetsgener, "
                  + "tilskadekomst i tjenesten eller eget barns sygdom, "
                  + "skal anmeldes til tjenestestedet straks ved arbejdstids "
                  + "begyndelse den første fraværsdag. Anmeldelse, der "
                  + "modtages senere end 2 timer efter arbejdstids "
                  + "begyndelse, betragtes som for sen "
                  + "anmeldelse/misligholdelse af ansættelsesforholdet. I de "
                  + "tilfælde, hvor der ikke er ret til sygedagpenge fra "
                  + "arbejdsgiveren, skal medarbejderen endvidere anmelde "
                  + "sygefraværet til dagpengekontoret i bopælskommunen "
                  + "(i Aarhus til dit socialcenter). Ved ansættelsen skal "
                  + "medarbejderen have oplyst, hvortil fraværet skal "
                  + "anmeldes (tjenestested, afdeling, telefonnummer, "
                  + "lokalnummer m.v.)."));

      document.add(
          PdfHelper.createRuleParagraph(
              "Arbejdsskade:",
              "Kommer en medarbejder til skade i "
                  + "arbejdstiden, skal dette anmeldes til tjenestedets "
                  + "leder, også selv om arbejdsskaden ikke medfører "
                  + "sygefravær."));

      document.add(
          PdfHelper.createRuleParagraph("Kronisk sygdom skal oplyses ved " + "ansættelsen.", ""));

      document.add(
          PdfHelper.createRuleParagraph(
              "Underretning i henhold " + "til Persondataloven:",
              "Som et nødvendigt led i din ansættelse foretager "
                  + "Aarhus Kommune elektronisk behandling af dine "
                  + "personoplysninger, som beskrevet i Persondataloven, "
                  + "Lov nr. 429 af 31. maj 2000. Behandlingerne sker som led "
                  + "i kommunens løn- og personaleadministration. "
                  + "De personoplysninger, der er tale om, omfatter ud over "
                  + "almindelige oplysninger til brug for lønudbetaling og sædvanlig "
                  + "personaleadministration, også oplysninger om dine "
                  + "helbredsmæssige forhold. Oplysningerne registreres i din"
                  + " personalesag og kommunens løn- og personalesystem"
                  + " (evt. Esdh-system). Du kan få indsigt i, gøre"
                  + " indsigelser mod eller opdatere de registrerede"
                  + " oplysninger ved at kontakte Personaleafdelingen"
                  + " i Magistratsafdelingen."));

      document.add(
          PdfHelper.createRuleParagraph(
              "Inden indsendelse til Lønhuset:",
              "Blanketten skal underskrives og kopi udleveres til "
                  + "medarbejder. Kopi af blanketten opbevares i "
                  + "institutionen."));

    } catch (DocumentException e) {
      String message = "Generation of the employment details part of the pdf failed.";
      logger.fatal(message, e);
      throw new RuntimeException(message, e);
    }
  }
  private static PdfPTable createEmploymentDetails(Employment employment) {
    PdfPTable employeeTable = new PdfPTable(4);
    employeeTable.setWidthPercentage(100.0f);

    PdfPCell startDateHeadingCell = new PdfPCell();
    startDateHeadingCell.addElement(PdfHelper.lastLineParagraphBold("Startdato"));
    employeeTable.addCell(startDateHeadingCell);

    PdfPCell startDateCell = new PdfPCell();
    startDateCell.addElement(PdfHelper.lastLineParagraph(employment.getStartDate().toString()));
    employeeTable.addCell(startDateCell);

    PdfPCell positionHeadingCell = new PdfPCell();
    positionHeadingCell.addElement(PdfHelper.lastLineParagraphBold("Stilling"));
    employeeTable.addCell(positionHeadingCell);

    PdfPCell positionCell = new PdfPCell();
    positionCell.addElement(PdfHelper.lastLineParagraph(employment.getEmploymentType().name()));
    employeeTable.addCell(positionCell);

    PdfPCell endDateHeadingCell = new PdfPCell();
    endDateHeadingCell.addElement(PdfHelper.lastLineParagraphBold("Slutdato"));
    employeeTable.addCell(endDateHeadingCell);

    PdfPCell endDateCell = new PdfPCell();
    if (employment.getStopDate() == null) endDateCell.addElement(PdfHelper.paragraph(""));
    else {
      endDateCell.addElement(PdfHelper.paragraph(employment.getStopDate().toString()));
    }
    employeeTable.addCell(endDateCell);

    PdfPCell workTimeHeadingCell = new PdfPCell();
    workTimeHeadingCell.addElement(PdfHelper.paragraphBold("Ca. arbejdstid per uge"));
    employeeTable.addCell(workTimeHeadingCell);

    PdfPCell workTimeCell = new PdfPCell();
    Element workTime = null;

    if (employment.getHours() == 0) workTime = PdfHelper.lastLineParagraph("");
    else workTime = PdfHelper.lastLineParagraph(employment.getHours() + "");

    workTimeCell.addElement(workTime);
    employeeTable.addCell(workTimeCell);

    PdfPCell trialHeadingCell = new PdfPCell();
    trialHeadingCell.addElement(PdfHelper.lastLineParagraphBold("3 mdrs. prøvetid"));
    employeeTable.addCell(trialHeadingCell);

    PdfPCell trialCell = new PdfPCell();
    if (employment.getTrial()) trialCell.addElement(PdfHelper.lastLineParagraph("Ja"));
    else trialCell.addElement(PdfHelper.lastLineParagraph("Nej"));
    employeeTable.addCell(trialCell);

    PdfPCell taxInformationHeadingCell = new PdfPCell();
    taxInformationHeadingCell.addElement(PdfHelper.paragraphBold("Rekvirer skattekort"));
    employeeTable.addCell(taxInformationHeadingCell);

    PdfPCell taxInformationCell = new PdfPCell();
    taxInformationCell.addElement(PdfHelper.lastLineParagraph(employment.getTaxationForm().name()));
    employeeTable.addCell(taxInformationCell);

    return employeeTable;
  }