/*
** Verwaltung der Briefe
**
** Copyright (C) 1996 by Stefan Scherer.
**
** Permission to use, copy, modify, and distribute this software and its
** documentation for non-commerical use and without fee is hereby granted,
** provided that the above copyright notice appear in all copies and that
** both that copyright notice and this permission notice appear in
** supporting documentation.  This software is provided "as is" without
** express or implied warranty.
*/

#ifndef BRIEFE_H
#define BRIEFE_H

#include "LocaleSupport.h"
#include "Kunden.h"
#include "Artikel.h"

#define MAX_LET_LEN 100


/* allgemeine Daten, wie sie auch für die Liste benötigt werden, können
** auf einen Schlag geholt und gesetzt werden
*/

struct MinLetter
  {
    UWORD letterNumber;		/* Briefnummer (intern) */
    UWORD letterYear;
    char letterDate[12];	/* Datum des Briefes */
    char Kunde[100];		/* erste Zeile der Kundenanschrift = Name */
    char orderDate[12];		/* Auftragsdatum ("ihr Schreiben vom") */
    char printDate[12];		/* Datum des (letzten) Ausdrucks */
    char Betreff[100];		/* kurzer Kommentar für den Brief */
  };


/*
** Für die Funktion LE_MoveLetterItem gibt es zwei Bewegungsrichtungen
*/

enum
  {
    LETMOVE_UP,			/* aktuelles Element nach oben verschieben */
    LETMOVE_DOWN,		/* aktuelles Element nach unten verschieben */
  };

/*
** Es gibt drei Elemente für Text: Fließtext, Textzeile und Artikel
**
** Folgende Struktur: gilt für Fließtext und Textzeile
*/

enum
  {
    LETMODE_TEXT,		/* es handelt sich um Fließtext */
    LETMODE_LINE,		/* es handelt sich um eine Textzeile */
    LETMODE_ARTICLE,		/* es handelt sich um eine Artikelbeschreibung */
  };


/* im Zeilenmodus gibt es ein paar Schrift- und Satzarten */

enum
  {
    LMODE_LEFT,			/* linksbündige Zeile */
    LMODE_RIGHT,		/* rechtsbündige Zeile */
    LMODE_CENTER,		/* zentrierte Zeile */
  };

enum
  {
    FMODE_NORMAL,		/* normale Schrift */
    FMODE_BOLD,			/* Fettschrift */
    FMODE_SLANTED,		/* kursive Schrift */
  };


/*** o-functions ***/

int ConstructLetter (void);
void DestructLetter (void);
int LE_NewLetter (void);

/* Funktionen zum setzen allgemeiner Daten der Rechnung */

int LE_SetLetterContents (STRPTR text, ULONG size);
void LE_SetLetterAddress (struct MinCustomer *cust);
void LE_SetLetterNumber (STRPTR buffer);
void LE_SetLetterDate (STRPTR date);
void LE_SetPrintDate (STRPTR date);
void LE_SetBetreff (STRPTR betreff);
void LE_SetOrderNumber (STRPTR buffer);
void LE_SetOrderDate (STRPTR date);
void LE_SetMwSt (double mwst1, double mwst2);

/* Dateizugriffe mit dieser Rechnung */

int LE_LoadLetter (STRPTR filename);
int LE_SaveLetter (STRPTR filename);


/*** v-functions ***/

/* Funktionen, die allgemeine Daten der Rechnung auslesen */

void LE_GetLetterAddress (struct MinCustomer *cust);
void LE_GetLetterNumber (STRPTR buffer);
void LE_GetLetterDate (STRPTR date);
void LE_GetPrintDate (STRPTR date);
void LE_GetBetreff (STRPTR betreff);
void LE_GetOrderNumber (STRPTR buffer);
void LE_GetOrderDate (STRPTR date);
double LE_GetMwSt (UWORD preistab);
BOOL LE_GetStatus (void);
int LE_GetLetterContents (STRPTR * str);
int LE_GetDummyLetterContents (STRPTR * str);
void LE_GetMinLetter (struct MinLetter *minletter);
STRPTR LE_GetErrorMsg (void);


/* Fehlercodes der Funktionen */

enum
  {
    ERR_LET_OK,			/* kein Fehler */
    ERR_LET_NOPOOL,		/* kein Memory-Pool vorhanden */
    ERR_LET_NOMEM,		/* nicht genügend Speicher vorhanden */
    ERR_LET_LISTEMPTY,		/* Liste ist leer */
    ERR_LET_NOITEM,		/* Eintrag ist nicht in der Liste vorhanden */
    ERR_LET_FILENOTFOUND,	/* File nicht gefunden */
    ERR_LET_CANTCREATEFILE,	/* File konnte nicht erzeugt werden */
    ERR_LET_LOAD,		/* Fehler beim laden */
    ERR_LET_SAVE,		/* Fehler beim speichern */
  };


#endif /* BRIEFE_H */
