# Newsletter

Das Newsletter erlaubt den Druck und Versand von Inhalten zum Verein. Zu einem Newsletter können öffentliche Kalendereinträge hinzugefügt werden.

## Newsletter erstellen

Ein Newsletter besteht aus Titel und Zusammenfassung, um einen schnelleren Überblick in der Pagination zu erhalten.

Im Newsletter können Überschrift, Einleitung/Text und Signatur hinzugefügt werden.
Es können Daten ausgewählt werden, welche dann automatisch nach dem Text und vor der Signatur im Standard-Template angezeigt.
Und es können Empfänger über eine Vordefinierte Datenabfrage oder manuelles hinzufügen festgelegt werden. 
Im Tab Druck und Versand wird eine Datei mit allen Hinzugefügten Kalendereinträgen angezeigt, wie auch alle erstellten pdfs wie auch eine pdf, die alle anderen pdfs enthält.

## Versand
In den Einstellungen kann festgelegt werden, welcher Kommunikationstyp wie versandt werden soll. Dies wird zusätzlich nochmals vor dem finalen Versand geprüft.

Es wird beim Druck unterschieden in Ausgaben mit und ohne Adresse. In der Fußzeile wird dann entweder nur der Name oder auch mit Adresse gedruckt.

Die Auswahl des Typs Mail versendet nur den Hauptteil des pdfs mit einer ics-Datei im Anhang.

## Template
Über die Templating-Engine können für den Newsletter abweichende Kopf- und Fußzeilen und ein abweichender Hauptteil festgelegt werden.

Ein Newsletter-Template erhält folgende Daten:
``` ts
// interface:
{
  title: string;
  description: string;
  newsletterTitle: string;
  newsletterText: string;
  newsletterSignatur: string;
  dates: Array<
    {
      title: string; // enthält alternativen Titel bzw. Titel des Kalendereintrags
      content: string; // enthält alternative Beschreibung bzw. Beschreibung des Kalendereintrags
      starttime: string;
      endtime: string;
      location: string;
      formattedStarttime: string;
      formattedFullStarttime: string;
      formattedEndtime: string;
      formattedFullEndtime: string;
    }
  >;
  recipient: { 
    firstname: string;
    lastname: string;
    salutation: Salutation; // (sir | madam | divers | none)
    nameaffix: string;
    street: string; 
    streetNumber: string; 
    streetNumberAdd: string
  };
}

// beispieldaten

{
  title: "Beispiel Newsletter Daten",
  description: "Zusammenfassung der Demodaten.",
  newsletterTitle: "<h1>Sehr geehrtes Feuerwehrmitglied</h1>",
  newsletterText: "<p>zu folgenden Terminen möchten wir recht herzlich zur Teilnahme einladen:</p>",
  newsletterSignatur: "<p>Mit freundlichen Grüßen</p><p>...</p>",
  dates: [
    {
      title: "Termin 1",
      content: "<p>Beschreibung eines Termins</p>",
      starttime: new Date(),
      formattedStarttime: "Montag 20. Januar",
      formattedFullStarttime: "Montag 20. Januar um 19:00",
      endtime: new Date(),
      formattedEndtime: "Montag 20. Januar",
      formattedFullEndtime: "Montag 20. Januar um 21:00",
      location: "Feuerwehrhaus",
    },
  ],
  recipient: {
    firstname: "Julian",
    lastname: "Krauser",
    salutation: "sir",
    nameaffix: "",
    street: "Straße",
    streetNumber: "Hausnummer",
    streetNumberAdd: "Adresszusatz",
  },
}

```

Das Template ist als HTML definiert und beinhaltet Platzhalter, welche durch `handlebarsjs` ausgetauscht werden.
``` html
<!-- Standard-Template -->
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>Newsletter</title>
  </head>
  <body>
    <h1>{{{newsletterTitle}}}</h1>
    <p>{{{newsletterText}}}</p>
    <br />
    {{#each dates}}
    <div>
      <h2><b>{{this.formattedStarttime}}: {{this.title}}</b></h2>
      <span>{{{this.content}}}</span>
    </div>
    <br />
    {{/each}}
    <br />
    <br />
    <p>{{{newsletterSignatur}}}</p>
  </body>
  <style>
    h2,
    h3,
    p,
    span,
    ul,
    li {
      padding: 0;
      margin: 0;
    }

    h1,
    h2 {
      color: #990b00;
    }

    h2 {
      margin-bottom: 5px;
    }
  </style>
</html>

<!--Footer Template-->
<div style="font-size: 10pt; width: 100%; margin: 0 20px; padding-top: 5px; color: #888; border-top: 0.5px solid black">
  {{recipient.lastname}}, {{recipient.firstname}}{{#if recipient.street}},{{/if}} {{recipient.street}}
  {{recipient.streetNumber}} {{recipient.streetNumberAdd}}
</div>

```