/*
** Verwaltung von Aufträgen
**
** 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 AUFTRAG_H
#define AUFTRAG_H

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

#define MAX_ORD_LEN 100


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

struct MinOrder
  {
    UWORD orderNumber;		/* Auftragsnummer */
    UWORD orderYear;
    char orderDate[12];		/* Auftragsdatum */
    char Kunde[100];		/* erste Zeile der */
				/* Kundenanschrift = Kundenname */
    UWORD invoiceNumber;	/* Rechnungsnummer */
    UWORD invoiceYear;
    char invoiceDate[12];	/* Rechnungsdatum */
  };


/*** o-functions ***/

int ConstructOrder (void);
void DestructOrder (void);
int O_NewOrder (void);

/* Einträge in der Liste ändern */

int O_AddOrderItem (struct Article *item);
int O_DelOrderItem (void);
int O_ChangeOrderItem (struct Article *item);
int O_SetCurrentItemNumber (UWORD number);

/* allgemeine Daten ändern */

void O_SetOrderAddress (struct MinCustomer *cust);
void O_SetOrderNumber (STRPTR num);
void O_SetOrderDate (STRPTR date);
void O_SetInvoiceNumber (STRPTR num);
void O_SetInvoiceDate (STRPTR date);
void O_SetMwSt (double mwst1, double mwst2);

int O_LoadOrder (STRPTR filename);
int O_SaveOrder (STRPTR filename);


/* v-functions */

/* Daten aus den Einträgen der Liste lesen */

int O_GetOrderItem (UWORD num, struct Article *item);
int O_GetDummyOrderItem (UWORD num, struct Article *item);
int O_GetCurrentItem (struct Article *item);
int O_GetCurrentItemNumber (void);
int O_GetOrderItemCount (void);

/* allgemeine Daten lesen */

void O_GetOrderAddress (struct MinCustomer *cust);
void O_GetOrderNumber (STRPTR buffer);
void O_GetOrderDate (STRPTR date);
void O_GetInvoiceNumber (STRPTR buffer);
void O_GetInvoiceDate (STRPTR date);
BOOL O_GetStatus (void);
double O_GetMwSt (UWORD preistab);
void O_GetOrderSum (double *netto1, double *netto2, double *summwst1,
		    double *summwst2, double *brutto);
void O_GetMinOrder (struct MinOrder *minorder);
STRPTR O_GetErrorMsg (void);



/* mögliche Fehler für den Auftrag */

enum
  {
    ERR_ORD_OK,			/* kein Fehler */
    ERR_ORD_NOPOOL,		/* kein Memory-Pool vorhanden */
    ERR_ORD_NOMEM,		/* nicht genügend Speicher vorhanden */
    ERR_ORD_LISTEMPTY,		/* Liste ist leer */
    ERR_ORD_NOITEM,		/* Eintrag ist nicht in der Liste vorhanden */
    ERR_ORD_FILENOTFOUND,	/* File nicht gefunden */
    ERR_ORD_CANTCREATEFILE,	/* File konnte nicht erzeugt werden */
    ERR_ORD_SAVE,		/* Fehler beim speichern */
  };

#endif /* AUFTRAG_H */
