#pragma +
// Name:						Window-Klassen
// Programmtyp:			Hilfsroutine für
//								Fakturierprogramm Ein- und Ausgangsrechnungen
//	Programmiersprache:	C++ (AT&T Standard 3.0)
// Computersystem:		Commodore AMIGA
// Betriebssystem:		AMIGA OS3.0 oder höher
// Autor:					Manfred Tremmel
// © Copyright:			1997-2001 by MT Graphic & Design
// Version:					V1.08
//
//    Copyright (C) 1997-2001 Manfred Tremmel
//
//    This program is free software; you can redistribute it and/or modify
//    it under the terms of the GNU General Public License as published by
//    the Free Software Foundation; either version 2 of the License, or
//    (at your option) any later version.
//
//    This program is distributed in the hope that it will be useful,
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//    GNU General Public License for more details.
//
//    You should have received a copy of the GNU General Public License
//    along with this program; if not, write to the Free Software
//    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA

// Includes:
#include <new.h>
#include <intuition/intuition.h>
#include <intuition/gadgetclass.h>
#include <iostream.h>
#include <stdio.h>

#include "MT-Rechnung.h"
#include "MTLocale.h"
#include "MTScreen.h"
#include "MTWindow.h"
#include "MTEditHook.h"
#include "MTAuswert.h"
#include "MTList.h"
#include "Datenbank.h"
#include "Einstellungen.h"
#include "Adressen.h"
#include "Artikel.h"
#include "Laender.h"
#include "Versand.h"
#include "RechnungArtikel.h"
#include "Rechnung.h"
#include "ARechnung.h"
#include "MTWinKasse.h"
#include "MTWinSuch.h"
#include "MTWinArt.h"
#include "MTWinNavi.h"
#include "LocaleStrings.h"
#include "Allgemein.h"

extern Prefs				*MyPrefsPTR;
extern Laender				*MyLaenderPTR;
extern Artikel				*MyArtikelPTR;
extern OpenLocaleClass	*MyLocalePTR;
extern Mitarbeiter		*MyMitarbeiterPTR;
extern Versand				*MyVersandPTR;
extern RechnungArtikel	*MyARechnungArtikelPTR;
extern ARechnung			*MyARechnungPTR;
extern OpenLocaleClass	*MyLocalePTR;

extern FillAppStrings	*MyAppStringsPTR;
extern Allgemein			MyAllgemein;

// Surface-Pointer
extern APTR	surface;

MTKasse_Gadget::MTKasse_Gadget(MTWindow *Win) : MTAuswert( Win )
{
	R_ArtNrList			= new ListenClass(20);
	R_AnzahlList		= new ListenClass(20);
	R_BezeichnungList	= new ListenClass(40);
	R_EPreisList		= new ListenClass(40);
	R_GPreisList		= new ListenClass(40);
	KasArtGrpList		= new ListenClass(20);
	KasArtList			= new ListenClass(52);

	First_LV				= 0;
	Select_LV			= 0;
	First_LV_GR			= 0;
	Select_LV_GR		= 0;
	First_LV_AR			= 0;
	Select_LV_AR		= 0;

	DB_Pos				= 0;

	PopUpTab[0]			= 10.0;
	PopUpTab[1]			= 9.0;
	PopUpTab[2]			= 8.0;
	PopUpTab[3]			= 7.0;
	PopUpTab[4]			= 6.0;
	PopUpTab[5]			= 5.0;
	PopUpTab[6]			= 4.0;
	PopUpTab[7]			= 3.0;
	PopUpTab[8]			= 2.0;
	PopUpTab[9]			= 1.0;
	PopUpTab[10]		= -1.0;
	PopUpTab[11]		= -2.0;
	PopUpTab[12]		= -3.0;
	PopUpTab[13]		= -4.0;
	PopUpTab[14]		= -5.0;
	PopUpTab[15]		= -6.0;
	PopUpTab[16]		= -7.0;
	PopUpTab[17]		= -8.0;
	PopUpTab[18]		= -9.0;
	PopUpTab[19]		= -10.0;

	ThisWindow->ShortCuts[0]		= 0;

	GetIt					= ThisWindow->ThisScreen->FindWindow( NAVIGATOR_WINDOW );
	FindIt				= ThisWindow->ThisScreen->FindWindow( SUCHEN );
};

MTKasse_Gadget::~MTKasse_Gadget()
{
	delete KasArtList;
	delete KasArtGrpList;
	delete R_GPreisList;
	delete R_EPreisList;
	delete R_BezeichnungList;
	delete R_AnzahlList;
	delete R_ArtNrList;
};

void MTKasse_Gadget::FillWindow()
{
	Gesperrt = FALSE;

	if( ThisWindow->BezWin )
	{
		ThisWindow->BezWin->BezWin = ThisWindow;
		if( GetIt )
		{
			if( DB_Pos > 1 )
			{
				((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[0] = ThisWindow->Fehler;
				((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[1] = ThisWindow->Fehler;
				((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[2] = ThisWindow->Fehler;
			}
			else
			{
				((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[0] = TRUE;
				((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[1] = TRUE;
				((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[2] = TRUE;
			}

			if( MyARechnungPTR->ElementeVorhanden() > 1 &&
				 MyARechnungPTR->ElementeVorhanden() > DB_Pos )
			{
				((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[3] = ThisWindow->Fehler;
				((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[4] = ThisWindow->Fehler;
				((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[5] = ThisWindow->Fehler;
			}
			else
			{
				((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[3] = TRUE;
				((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[4] = TRUE;
				((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[5] = TRUE;
			}

			if( (MyARechnungPTR->ElementeVorhanden() < 2) ||
				 (MyMitarbeiterPTR->UserDaten.Ber_ARechnung == 0) )
				((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[6] = TRUE;
			else
				((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[6] = ThisWindow->Fehler;

			if( MyMitarbeiterPTR->UserDaten.Ber_ARechnung == 2 )
			{
				((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[7] = ThisWindow->Fehler;
				if( MyARechnungPTR->ElementeVorhanden() > 0 )
					((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[8] = ThisWindow->Fehler;
				else
					((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[8] = TRUE;
			}
			else
			{
				((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[7]	= TRUE;
				((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[8]	= TRUE;
			}

			((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[9]		= TRUE;
			((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[10]		= TRUE;

			if( (MyARechnungPTR->ElementeVorhanden()				== 0) ||
				 (MyMitarbeiterPTR->UserDaten.Ber_ARechnung		== 0) ||
				 (MyPrefsPTR->Daten->Kassenbon[0]					== '\0') )
				((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[11]	= TRUE;
			else
				((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[11]	= ThisWindow->Fehler;

			((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperren();

			SetGadgetAttrs( GetIt->gads[NAV_NUMMER], GetIt->Win, NULL, GA_DISABLED, ThisWindow->Fehler, TAG_DONE );
		}

	}

	if( ThisWindow->Fehler )
		return;

	if( MyARechnungPTR->ElementeVorhanden() == 0 )
	{
		SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, AppStrings[MSG_FEHL_KeineDaten], TAG_DONE );
		DB_Pos = 0;
		Gesperrt = TRUE;
		SetGadgetAttrs( GetIt->gads[NAV_NUMMER], GetIt->Win, NULL, WINTEGERA_Long, (LONG)DB_Pos, GA_DISABLED, TRUE, TAG_DONE );
	}
	else
	{
		if( MyARechnungPTR->AktElementNr == 0 || DB_Pos == 0 )
			MyARechnungPTR->GetFirstElement();
		else
			MyARechnungPTR->GetElementNr( DB_Pos );
		MyARechnungPTR->LesenGesamtRech();

		if( MyARechnungPTR->Daten->Status == 0 ||
			 MyARechnungPTR->Daten->Status == MyARechnungPTR->GetUser() )
		{
			switch( MyMitarbeiterPTR->UserDaten.Ber_ARechnung )
			{
				case 0:
					Gesperrt = TRUE;
					SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, AppStrings[MSG_FEHL_Sperre2], TAG_DONE );
					break;
				case 1:
					Gesperrt = TRUE;
					SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, AppStrings[MSG_FEHL_Sperre1], TAG_DONE );
					break;
				default:
					Gesperrt = FALSE || MyARechnungPTR->Daten->Gebucht;
					SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, "", TAG_DONE );
					break;
			}
		}
		else
		{
			Gesperrt = TRUE;
			if( MyARechnungPTR->Daten->Status == 0xffff )
				SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, AppStrings[MSG_FEHL_Geloescht], TAG_DONE );
			else
				SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, AppStrings[MSG_FEHL_Parallelverarb], WARGSA_Arg0, (ULONG)MyARechnungPTR->Daten->Status, TAG_DONE );
		}
		DB_Pos = MyARechnungPTR->AktElementNr;
		SetGadgetAttrs( GetIt->gads[NAV_NUMMER], GetIt->Win, NULL, WINTEGERA_Long, (LONG)DB_Pos, GA_DISABLED, FALSE, TAG_DONE );
	}

	SetGadgetAttrs( GetIt->gads[NAV_MAX], GetIt->Win, NULL, WARGSA_Format, "%lu", WARGSA_Arg0, (ULONG)MyARechnungPTR->ElementeVorhanden(), TAG_DONE );

	SetGadgetAttrs( ThisWindow->gads[KAS_LV_ARTGRP], ThisWindow->Win, NULL,	WLISTVIEWA_List, NULL, TAG_DONE);

	KasArtGrpList->EntferneAlle();

	if( MyARechnungPTR->ElementeVorhanden()			== 0 ||
		 MyMitarbeiterPTR->UserDaten.Ber_ARechnung	== 0 )
	{
		SetGadgetAttrs( ThisWindow->gads[KAS_ART_ZEIGEN], ThisWindow->Win, NULL, GA_DISABLED, TRUE, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[KAS_ART_BON], ThisWindow->Win, NULL, GA_DISABLED, TRUE, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[KAS_ZUSATZ], ThisWindow->Win, NULL, WSTRINGFIELDA_Text, "", GA_DISABLED, TRUE, TAG_DONE );
	}
	else
	{
		KasArtGrpList->StringToList(MyPrefsPTR->CycleArtGrp);

		SetGadgetAttrs( ThisWindow->gads[KAS_ART_ZEIGEN], ThisWindow->Win, NULL, GA_DISABLED, Gesperrt, TAG_DONE );

		if( KasArtList->Anzahl > 0 )
			SetGadgetAttrs( ThisWindow->gads[KAS_ART_BON], ThisWindow->Win, NULL, GA_DISABLED, Gesperrt, TAG_DONE );
		else
			SetGadgetAttrs( ThisWindow->gads[KAS_ART_BON], ThisWindow->Win, NULL, GA_DISABLED, TRUE, TAG_DONE );

		SetGadgetAttrs( ThisWindow->gads[KAS_ZUSATZ], ThisWindow->Win, NULL, WSTRINGFIELDA_Text, MyARechnungPTR->Daten->Bemerkung, GA_DISABLED, Gesperrt, TAG_DONE );

		switch( MyPrefsPTR->Daten->ARechArt )
		{
			case 0:
				SetGadgetAttrs( ThisWindow->gads[KAS_ART_NUMMER], ThisWindow->Win, NULL, WSTRINGA_Hook, &PosZahl_edh, TAG_DONE );
				break;
			case 1:
				SetGadgetAttrs( ThisWindow->gads[KAS_ART_NUMMER], ThisWindow->Win, NULL, WSTRINGA_Hook, &EAN_edh, TAG_DONE );
				break;
			default:
				SetGadgetAttrs( ThisWindow->gads[KAS_ART_NUMMER], ThisWindow->Win, NULL, WSTRINGA_Hook, &Dummy_edh, TAG_DONE );
				break;
		}
	}

	FillPositionen();

	SetGadgetAttrs( ThisWindow->gads[KAS_LV_ARTGRP], ThisWindow->Win, NULL,	WLISTVIEWA_List, &KasArtGrpList->MyList,
																									WLISTVIEWA_Top, First_LV_GR,
																									WLISTVIEWA_Selected, Select_LV_GR,
																									GA_DISABLED, Gesperrt,
																									TAG_DONE);
	SetGadgetAttrs( ThisWindow->gads[KAS_LV_ARTUEB], ThisWindow->Win, NULL,	WLISTVIEWA_List, &KasArtList->MyList,
																									WLISTVIEWA_Top, First_LV_AR,
																									WLISTVIEWA_Selected, Select_LV_AR,
																									GA_DISABLED, Gesperrt,
																									TAG_DONE);
};

void MTKasse_Gadget::FillPositionen()
{
	SetGadgetAttrs( ThisWindow->gads[KAS_LV_NUMMER], ThisWindow->Win, NULL,	WLISTVIEWA_List, NULL, TAG_DONE);
	SetGadgetAttrs( ThisWindow->gads[KAS_LV_ANZAHL], ThisWindow->Win, NULL,	WLISTVIEWA_List, NULL, TAG_DONE);
	SetGadgetAttrs( ThisWindow->gads[KAS_LV_BEZEICH], ThisWindow->Win, NULL,	WLISTVIEWA_List, NULL, TAG_DONE);
	SetGadgetAttrs( ThisWindow->gads[KAS_LV_EPREIS], ThisWindow->Win, NULL,	WLISTVIEWA_List, NULL, TAG_DONE);
	SetGadgetAttrs( ThisWindow->gads[KAS_LV_GPREIS], ThisWindow->Win, NULL,	WLISTVIEWA_List, NULL, TAG_DONE);

	R_ArtNrList->EntferneAlle();
	R_AnzahlList->EntferneAlle();
	R_BezeichnungList->EntferneAlle();
	R_EPreisList->EntferneAlle();
	R_GPreisList->EntferneAlle();

	if( MyARechnungPTR->ElementeVorhanden()			== 0 ||
		 MyMitarbeiterPTR->UserDaten.Ber_ARechnung	== 0 )
	{
		SetGadgetAttrs( ThisWindow->gads[KAS_NEU_ART], ThisWindow->Win, NULL, GA_DISABLED, TRUE, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[KAS_LOE_ART], ThisWindow->Win, NULL, GA_DISABLED, TRUE, TAG_DONE );
	}
	else
	{
		MyARechnungArtikelPTR->AktArtikel = MyARechnungArtikelPTR->FirstArtikel;

		i = 0;
		while( MyARechnungArtikelPTR->AktArtikel )
		{
			MyArtikelPTR->ArtikelNrErmitteln(	Buffer, MyPrefsPTR->Daten->ARechArt,
															MyARechnungArtikelPTR->AktArtikel->ZuOrdnungTab.Artikelnummer,
															&MyARechnungArtikelPTR->AktArtikel->ArtikelDaten );
			R_ArtNrList->NeuerNode( Buffer );
			if( Select_LV == i )
			{
				SetGadgetAttrs( ThisWindow->gads[KAS_ART_NUMMER],	ThisWindow->Win, NULL, WSTRINGA_String, Buffer, GA_DISABLED, Gesperrt, TAG_DONE );
				SetGadgetAttrs( ThisWindow->gads[KAS_ART_SUCHEN],	ThisWindow->Win, NULL, GA_DISABLED, Gesperrt, TAG_DONE );
			}

			MyLocalePTR->FormatNumber( (STRPTR)Buffer, MyARechnungArtikelPTR->AktArtikel->ZuOrdnungTab.Artikelanzahl, MyPrefsPTR->Daten->Nachkomma);
			R_AnzahlList->NeuerNode( Buffer );
			R_BezeichnungList->NeuerNode( MyARechnungArtikelPTR->AktArtikel->ArtikelDaten.Artikelbez );
			if( Select_LV == i )
			{
				SetGadgetAttrs( ThisWindow->gads[KAS_ART_ANZ],		ThisWindow->Win, NULL, WSTRINGA_String, Buffer, GA_DISABLED, Gesperrt, TAG_DONE );
				SetGadgetAttrs( ThisWindow->gads[KAS_ART_ANZ_POP],	ThisWindow->Win, NULL, GA_DISABLED, Gesperrt, TAG_DONE );
				SetGadgetAttrs( ThisWindow->gads[KAS_ART_BEZEICH],	ThisWindow->Win, NULL, WARGSA_Format, MyARechnungArtikelPTR->AktArtikel->ArtikelDaten.Artikelbez, TAG_DONE );
			}

			MyLocalePTR->FormatMoney( (STRPTR)Buffer,	MyARechnungArtikelPTR->AktArtikel->Einzelpreis[(MyARechnungPTR->Daten->Waehrung_KZ)],
																	MyPrefsPTR->WaehrungPTR[(MyARechnungPTR->Daten->Waehrung_KZ)] );
			R_EPreisList->NeuerNode( Buffer );
			if( Select_LV == i )
				SetGadgetAttrs( ThisWindow->gads[KAS_ART_EPREIS],	ThisWindow->Win, NULL, WSTRINGA_String, Buffer, GA_DISABLED, Gesperrt, TAG_DONE );

			MyLocalePTR->FormatMoney( (STRPTR)Buffer,	MyARechnungArtikelPTR->AktArtikel->Pos_Summe_minus_ZuAb[(MyARechnungPTR->Daten->Waehrung_KZ)],
																	MyPrefsPTR->WaehrungPTR[(MyARechnungPTR->Daten->Waehrung_KZ)] );
			R_GPreisList->NeuerNode( Buffer );
			if( Select_LV == i )
				SetGadgetAttrs( ThisWindow->gads[KAS_ART_GPREIS],	ThisWindow->Win, NULL, WARGSA_Format, Buffer, TAG_DONE );

			MyARechnungArtikelPTR->AktArtikel = MyARechnungArtikelPTR->AktArtikel->NextArtikel;

			i++;
		}

		MyARechnungArtikelPTR->FindArtikel( (ULONG)Select_LV );

		if( R_ArtNrList->Anzahl	== 0 )
			SetGadgetAttrs( ThisWindow->gads[KAS_LOE_ART], ThisWindow->Win, NULL, GA_DISABLED, TRUE, TAG_DONE );
		else
			SetGadgetAttrs( ThisWindow->gads[KAS_LOE_ART], ThisWindow->Win, NULL, GA_DISABLED, Gesperrt, TAG_DONE );
	}

	if( MyARechnungPTR->ElementeVorhanden()			== 0 ||
		 MyMitarbeiterPTR->UserDaten.Ber_ARechnung	== 0 ||
		 R_ArtNrList->Anzahl									== 0 )
	{
		SetGadgetAttrs( ThisWindow->gads[KAS_ART_NUMMER],	ThisWindow->Win, NULL, WSTRINGA_String, "", GA_DISABLED, TRUE, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[KAS_ART_SUCHEN],	ThisWindow->Win, NULL, GA_DISABLED, TRUE, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[KAS_ART_ANZ],		ThisWindow->Win, NULL, WSTRINGA_String, "", GA_DISABLED, TRUE, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[KAS_ART_ANZ_POP],	ThisWindow->Win, NULL, GA_DISABLED, TRUE, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[KAS_ART_BEZEICH],	ThisWindow->Win, NULL, WARGSA_Format, "", TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[KAS_ART_EPREIS],	ThisWindow->Win, NULL, WSTRINGA_String, "", GA_DISABLED, TRUE, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[KAS_ART_GPREIS],	ThisWindow->Win, NULL, WARGSA_Format, "", TAG_DONE );
	}

	SetGadgetAttrs( ThisWindow->gads[KAS_LV_NUMMER], ThisWindow->Win, NULL,	WLISTVIEWA_List, &R_ArtNrList->MyList,
																									WLISTVIEWA_Top, First_LV,
																									WLISTVIEWA_Selected, Select_LV,
																									GA_DISABLED, Gesperrt,
																									TAG_DONE);
	SetGadgetAttrs( ThisWindow->gads[KAS_LV_ANZAHL], ThisWindow->Win, NULL,	WLISTVIEWA_List, &R_AnzahlList->MyList,
																									WLISTVIEWA_Top, First_LV,
																									WLISTVIEWA_Selected, Select_LV,
																									GA_DISABLED, Gesperrt,
																									TAG_DONE);
	SetGadgetAttrs( ThisWindow->gads[KAS_LV_BEZEICH], ThisWindow->Win, NULL,	WLISTVIEWA_List, &R_BezeichnungList->MyList,
																									WLISTVIEWA_Top, First_LV,
																									WLISTVIEWA_Selected, Select_LV,
																									GA_DISABLED, Gesperrt,
																									TAG_DONE);
	SetGadgetAttrs( ThisWindow->gads[KAS_LV_EPREIS], ThisWindow->Win, NULL,	WLISTVIEWA_List, &R_EPreisList->MyList,
																									WLISTVIEWA_Top, First_LV,
																									WLISTVIEWA_Selected, Select_LV,
																									GA_DISABLED, Gesperrt,
																									TAG_DONE);
	SetGadgetAttrs( ThisWindow->gads[KAS_LV_GPREIS], ThisWindow->Win, NULL,	WLISTVIEWA_List, &R_GPreisList->MyList,
																									WLISTVIEWA_Top, First_LV,
																									WLISTVIEWA_Selected, Select_LV,
																									GA_DISABLED, Gesperrt,
																									TAG_DONE);
	FillSummen();
};

void MTKasse_Gadget::FillSummen()
{
	if( MyARechnungPTR->ElementeVorhanden()			== 0 ||
		 MyMitarbeiterPTR->UserDaten.Ber_ARechnung	== 0 )
	{
		SumMWStWertTXT[0]			= '\0';
		SumNettoWertTXT[0]		= '\0';
		SumBruttoWertTXT[0]		= '\0';
		SumRueckgabeTXT[0] 		= '\0';
		SetGadgetAttrs( ThisWindow->gads[KAS_WAEHRUNG], ThisWindow->Win, NULL, WCYCLEA_Labels, "", WCYCLEA_Active, 0, GA_DISABLED, TRUE, TAG_DONE );
		SetGadgetAttrs( ThisWindow->gads[KAS_BEZAHLT], ThisWindow->Win, NULL, WSTRINGA_String, "", GA_DISABLED, TRUE, TAG_DONE );
	}
	else
	{
		if( MyARechnungPTR->Daten->Waehrung_KZ > 1 )
			i = 1;
		else
			i = 0;
		MyLocalePTR->FormatMoney( (STRPTR)SumMWStWertTXT,	MyARechnungPTR->MWSt_Wert[i][0] + MyARechnungPTR->MWSt_Wert[i][1] + MyARechnungPTR->MWSt_Wert[i][2] + MyARechnungPTR->MWSt_Wert[i][3] +
																			MyARechnungPTR->MWSt_Wert[i][4] + MyARechnungPTR->MWSt_Wert[i][5] + MyARechnungPTR->MWSt_Wert[i][6] + MyARechnungPTR->MWSt_Wert[i][7] +
																			MyARechnungPTR->MWSt_Wert[i][8] + MyARechnungPTR->MWSt_Wert[i][9],
																			MyPrefsPTR->WaehrungPTR[MyARechnungPTR->Daten->Waehrung_KZ] );

		if( MyARechnungPTR->Daten->Waehrung_KZ > 1 )
			i = 2;
		else
			i = 0;
		MyLocalePTR->FormatMoney( (STRPTR)SumNettoWertTXT,	MyARechnungPTR->Gesamtsumme[i],
																			MyPrefsPTR->WaehrungPTR[MyARechnungPTR->Daten->Waehrung_KZ] );

		i++;
		MyLocalePTR->FormatMoney( (STRPTR)SumBruttoWertTXT,MyARechnungPTR->Gesamtsumme[i],
																			MyPrefsPTR->WaehrungPTR[MyARechnungPTR->Daten->Waehrung_KZ] );

		MyLocalePTR->FormatMoney( (STRPTR)SumRueckgabeTXT, MyARechnungPTR->RueckgabeSumme[MyARechnungPTR->Daten->Waehrung_KZ], MyPrefsPTR->WaehrungPTR[MyARechnungPTR->Daten->Waehrung_KZ] );
		SetGadgetAttrs( ThisWindow->gads[KAS_WAEHRUNG], ThisWindow->Win, NULL, WCYCLEA_Labels, (ULONG)MyPrefsPTR->CycleWaehrung, WCYCLEA_Active, MyARechnungPTR->Daten->Waehrung_KZ, GA_DISABLED, Gesperrt, TAG_DONE );
		MyLocalePTR->FormatMoney( (STRPTR)Buffer, MyARechnungPTR->BezahltSumme[MyARechnungPTR->Daten->Waehrung_KZ], MyPrefsPTR->WaehrungPTR[MyARechnungPTR->Daten->Waehrung_KZ] );
		SetGadgetAttrs( ThisWindow->gads[KAS_BEZAHLT], ThisWindow->Win, NULL, WSTRINGA_String, Buffer, GA_DISABLED, Gesperrt, TAG_DONE );
	}

	SetGadgetAttrs( ThisWindow->gads[KAS_MWST_WERT],	ThisWindow->Win, NULL, WARGSA_Format, SumMWStWertTXT, TAG_DONE );
	SetGadgetAttrs( ThisWindow->gads[KAS_NETTO],	ThisWindow->Win, NULL, WARGSA_Format, SumNettoWertTXT, TAG_DONE );
	SetGadgetAttrs( ThisWindow->gads[KAS_BRUTTO],	ThisWindow->Win, NULL, WARGSA_Format, SumBruttoWertTXT, TAG_DONE );

	SetGadgetAttrs( ThisWindow->gads[KAS_RUECKGABE], ThisWindow->Win, NULL, WARGSA_Format, SumRueckgabeTXT, TAG_DONE );
};

// Position aktivieren und anzeigen
void MTKasse_Gadget::AktivierePos()
{
	SetGadgetAttrs( ThisWindow->gads[KAS_LV_NUMMER], ThisWindow->Win, NULL,
																	WLISTVIEWA_Visible, Select_LV, WLISTVIEWA_Selected, Select_LV, TAG_DONE);
	SetGadgetAttrs( ThisWindow->gads[KAS_LV_ANZAHL], ThisWindow->Win, NULL,
																	WLISTVIEWA_Visible, Select_LV, WLISTVIEWA_Selected, Select_LV, TAG_DONE);
	SetGadgetAttrs( ThisWindow->gads[KAS_LV_BEZEICH], ThisWindow->Win, NULL,
																	WLISTVIEWA_Visible, Select_LV, WLISTVIEWA_Selected, Select_LV, TAG_DONE);
	SetGadgetAttrs( ThisWindow->gads[KAS_LV_EPREIS], ThisWindow->Win, NULL,
																	WLISTVIEWA_Visible, Select_LV, WLISTVIEWA_Selected, Select_LV, TAG_DONE);
	SetGadgetAttrs( ThisWindow->gads[KAS_LV_GPREIS], ThisWindow->Win, NULL,
																	WLISTVIEWA_Visible, Select_LV, WLISTVIEWA_Selected, Select_LV, TAG_DONE);
	GetAttr(WLISTVIEWA_Top, ThisWindow->gads[KAS_LV_NUMMER], (ULONG *)&First_LV );
	MyARechnungArtikelPTR->FindArtikel( (ULONG)Select_LV );

	SetGadgetAttrs( ThisWindow->gads[KAS_ART_NUMMER], ThisWindow->Win, NULL, WSTRINGA_String, R_ArtNrList->SucheNode( Select_LV ), TAG_DONE );
	SetGadgetAttrs( ThisWindow->gads[KAS_ART_ANZ], ThisWindow->Win, NULL, WSTRINGA_String, R_AnzahlList->SucheNode( Select_LV ), TAG_DONE );
	SetGadgetAttrs( ThisWindow->gads[KAS_ART_BEZEICH], ThisWindow->Win, NULL, WARGSA_Format, R_BezeichnungList->SucheNode( Select_LV ), TAG_DONE );
	SetGadgetAttrs( ThisWindow->gads[KAS_ART_EPREIS], ThisWindow->Win, NULL, WSTRINGA_String, R_EPreisList->SucheNode( Select_LV ), TAG_DONE );
	SetGadgetAttrs( ThisWindow->gads[KAS_ART_GPREIS], ThisWindow->Win, NULL, WARGSA_Format, R_GPreisList->SucheNode( Select_LV ), TAG_DONE );
};

// Artikelliste nach Artikelgruppenselektion fuellen
void MTKasse_Gadget::ArtSuchList()
{
	First_LV_AR				= 0;
	Select_LV_AR			= 0;

	SetGadgetAttrs( ThisWindow->gads[KAS_LV_ARTUEB], ThisWindow->Win, NULL,	WLISTVIEWA_List, NULL, TAG_DONE);

	KasArtList->EntferneAlle();

	for( i = 1; i <= MyArtikelPTR->ElementeVorhanden(); i++ )
	{
		MyArtikelPTR->GetElementNr(i);

		if( MyArtikelPTR->Daten->Status			<  0xffff &&
			 MyArtikelPTR->Daten->ArtikelGruppe == Select_LV_GR )
		{
			switch( MyPrefsPTR->Daten->ARechArt )
			{
				case 1:	// EANDaten->EAN
					sprintf( (char *)Buffer, "%s; %s", MyArtikelPTR->Daten->EAN, MyArtikelPTR->Daten->Artikelbez );
					break;
				case 2:	// Artikelnummer 2
					sprintf( (char *)Buffer, "%s; %s", MyArtikelPTR->Daten->Artikelnr, MyArtikelPTR->Daten->Artikelbez );
					break;
				default:	// laufende Artikelnummer
					sprintf( (char *)Buffer, "%lu; %s", i, MyArtikelPTR->Daten->Artikelbez );
					break;
			}

			KasArtList->NeuerNode( Buffer );
		}
	}	

	SetGadgetAttrs( ThisWindow->gads[KAS_ART_BON], ThisWindow->Win, NULL, GA_DISABLED, (KasArtList->Anzahl == 0), TAG_DONE );

	SetGadgetAttrs( ThisWindow->gads[KAS_LV_ARTUEB], ThisWindow->Win, NULL,	WLISTVIEWA_List, &KasArtList->MyList,
																									WLISTVIEWA_Top, First_LV_AR,
																									WLISTVIEWA_Selected, Select_LV_AR,
																									GA_DISABLED, Gesperrt,
																									TAG_DONE);
};

// Artikel aus der Artikelliste übernehmen
void MTKasse_Gadget::ArtUebernehmen()
{
	if( KasArtList->Anzahl > 0 )
	{
		MyAppStringsPTR->GetCSVWert( KasArtList->SucheNode(Select_LV_AR), Buffer, 0 );
		LongWert = R_ArtNrList->SucheNode( Buffer );
		if( LongWert < 0 )
		{
			SetGadgetAttrs( ThisWindow->gads[KAS_LV_NUMMER], ThisWindow->Win, NULL,	WLISTVIEWA_List, NULL, TAG_DONE);
			SetGadgetAttrs( ThisWindow->gads[KAS_LV_ANZAHL], ThisWindow->Win, NULL,	WLISTVIEWA_List, NULL, TAG_DONE);
			SetGadgetAttrs( ThisWindow->gads[KAS_LV_BEZEICH], ThisWindow->Win, NULL,	WLISTVIEWA_List, NULL, TAG_DONE);
			SetGadgetAttrs( ThisWindow->gads[KAS_LV_EPREIS], ThisWindow->Win, NULL,	WLISTVIEWA_List, NULL, TAG_DONE);
			SetGadgetAttrs( ThisWindow->gads[KAS_LV_GPREIS], ThisWindow->Win, NULL,	WLISTVIEWA_List, NULL, TAG_DONE);

			MyArtikelPTR->ArtikelLesen( Buffer, MyPrefsPTR->Daten->ARechArt, 0L );
			MyARechnungArtikelPTR->NeuerArtikel();
			MyARechnungArtikelPTR->GetElementNr( MyARechnungArtikelPTR->AktArtikel->DB_Position );
			MyARechnungArtikelPTR->Daten->Artikelnummer	= MyArtikelPTR->AktElementNr;
			MyARechnungArtikelPTR->Daten->Artikelanzahl	= 1.0;
			MyARechnungArtikelPTR->UpDateElement();

			Select_LV		= R_ArtNrList->Anzahl;
			MyARechnungArtikelPTR->FindArtikel( (ULONG)Select_LV );

			R_ArtNrList->NeuerNode( Buffer );

			MyLocalePTR->FormatNumber( (STRPTR)Buffer, MyARechnungArtikelPTR->AktArtikel->ZuOrdnungTab.Artikelanzahl, MyPrefsPTR->Daten->Nachkomma);
			R_AnzahlList->NeuerNode( Buffer );
			R_BezeichnungList->NeuerNode( MyARechnungArtikelPTR->AktArtikel->ArtikelDaten.Artikelbez );

			MyLocalePTR->FormatMoney( (STRPTR)Buffer,	MyARechnungArtikelPTR->AktArtikel->Einzelpreis[(MyARechnungPTR->Daten->Waehrung_KZ)],
																	MyPrefsPTR->WaehrungPTR[(MyARechnungPTR->Daten->Waehrung_KZ)] );
			R_EPreisList->NeuerNode( Buffer );

			MyLocalePTR->FormatMoney( (STRPTR)Buffer,	MyARechnungArtikelPTR->AktArtikel->Pos_Summe_minus_ZuAb[(MyARechnungPTR->Daten->Waehrung_KZ)],
																	MyPrefsPTR->WaehrungPTR[(MyARechnungPTR->Daten->Waehrung_KZ)] );
			R_GPreisList->NeuerNode( Buffer );

			AktivierePos();
		}
		else
		{
			Select_LV = LongWert;
			AktivierePos();

			MyARechnungArtikelPTR->GetElementNr( MyARechnungArtikelPTR->AktArtikel->DB_Position );
			MyARechnungArtikelPTR->AktArtikel->ZuOrdnungTab.Artikelanzahl++;
			MyARechnungArtikelPTR->Daten->Artikelanzahl	= MyARechnungArtikelPTR->AktArtikel->ZuOrdnungTab.Artikelanzahl;
			MyARechnungArtikelPTR->UpDateElement();
		}

		UpDate			= MyARechnungPTR->VersandErmittelt;
		FillPos			= TRUE;
		SperrePruefen	= TRUE;
	}
}

// Änderung einer Artikelnummer
BOOL MTKasse_Gadget::LadeArtikel(STRPTR ArtikelNr)
{
	BOOL ReturnWert = FALSE;

	if( strcmp( ArtikelNr, R_ArtNrList->SucheNode( Select_LV ) ) != 0 )
	{
		if( MyArtikelPTR->ArtikelLesen( ArtikelNr, MyPrefsPTR->Daten->ARechArt, 0L ) )
		{
			MyARechnungArtikelPTR->GetElementNr( MyARechnungArtikelPTR->AktArtikel->DB_Position );
			MyARechnungArtikelPTR->Daten->Artikelnummer	= MyArtikelPTR->AktElementNr;
			MyARechnungArtikelPTR->UpDateElement();

			ReturnWert	= MyARechnungPTR->VersandErmittelt;
		}
		else
		{
			MyARechnungArtikelPTR->AktArtikel->ZuOrdnungTab.Artikelnummer	= 0;
			MyARechnungArtikelPTR->AktArtikel->Artikelfehler					= 8;
		}
		SperrePruefen	= TRUE;
		FillPos			= TRUE;
	}

	return ReturnWert;
};

// Gadget-Auswertung:
WORD MTKasse_Gadget::MTAuswertung( struct IntuiMessage* imsg, WORD DONE )
{
	UpDate					= FALSE;
	SperrePruefen			= FALSE;
	FillPos					= FALSE;
	AktPos					= FALSE;

	class MTAuswert *AktAuswert = NULL;

	if( ThisWindow->BezWin )
		AktAuswert = ThisWindow->BezWin->FirstAuswert;

	switch( imsg->Class )
	{
		// ein Button wurde betätigt (genaugenommen losgelassen)
		case IDCMP_IDCMPUPDATE:
			if( imsg->Code	== 0xffff )
				IconNummer = imsg->Qualifier;
			else
				IconNummer = GetTagData(GA_ID,0,(struct TagItem *)imsg->IAddress);

			switch( IconNummer )
			{
				// Artikelgruppenliste
				case KAS_LV_ARTGRP:
					Select_LV_GR = GetTagData(WLISTVIEWA_Selected,0,(struct TagItem *)imsg->IAddress);
					GetAttr(WLISTVIEWA_Top, ThisWindow->gads[IconNummer], (ULONG *)&First_LV_GR );
					if( GetTagData(WLISTVIEWA_DoubleClick, FALSE, (struct TagItem *)imsg->IAddress) )
						ArtSuchList();
					break;
				// Artikelgruppenselektion
				case KAS_ART_ZEIGEN:
					ArtSuchList();
					break;
				// Artikelauswahlliste
				case KAS_LV_ARTUEB:
					Select_LV_AR = GetTagData(WLISTVIEWA_Selected,0,(struct TagItem *)imsg->IAddress);
					GetAttr(WLISTVIEWA_Top, ThisWindow->gads[IconNummer], (ULONG *)&First_LV_AR );
					if( GetTagData(WLISTVIEWA_DoubleClick, FALSE, (struct TagItem *)imsg->IAddress) )
						ArtUebernehmen();
					break;
				// Artikelauswahl übernehmen
				case KAS_ART_BON:
					ArtUebernehmen();
					break;
				// eine der Listen: Artikelnummer, Anzahl, Bezeichnung, Einzel- oder Gesamtpreis
				case KAS_LV_NUMMER:
				case KAS_LV_ANZAHL:
				case KAS_LV_BEZEICH:
				case KAS_LV_EPREIS:
				case KAS_LV_GPREIS:
					Select_LV	= GetTagData(WLISTVIEWA_Selected,0,(struct TagItem *)imsg->IAddress);
					AktPos		= TRUE;
					break;
				// Artikel hinzufügen
				case KAS_NEU_ART:
					SetGadgetAttrs( ThisWindow->gads[KAS_LV_NUMMER], ThisWindow->Win, NULL,	WLISTVIEWA_List, NULL, TAG_DONE);
					SetGadgetAttrs( ThisWindow->gads[KAS_LV_ANZAHL], ThisWindow->Win, NULL,	WLISTVIEWA_List, NULL, TAG_DONE);
					SetGadgetAttrs( ThisWindow->gads[KAS_LV_BEZEICH], ThisWindow->Win, NULL,	WLISTVIEWA_List, NULL, TAG_DONE);
					SetGadgetAttrs( ThisWindow->gads[KAS_LV_EPREIS], ThisWindow->Win, NULL,	WLISTVIEWA_List, NULL, TAG_DONE);
					SetGadgetAttrs( ThisWindow->gads[KAS_LV_GPREIS], ThisWindow->Win, NULL,	WLISTVIEWA_List, NULL, TAG_DONE);

					MyARechnungArtikelPTR->NeuerArtikel();

					R_ArtNrList->NeuerNode( "" );
					R_AnzahlList->NeuerNode( "" );
					R_BezeichnungList->NeuerNode( "" );
					R_EPreisList->NeuerNode( "" );
					R_GPreisList->NeuerNode( "" );

					Select_LV = R_ArtNrList->Anzahl - 1;
					MyARechnungArtikelPTR->AktArtikel->Artikelfehler = 8;
					AktPos			= TRUE;
					SperrePruefen	= TRUE;
					break;
				// Artikel löschen
				case KAS_LOE_ART:
					SperrePruefen = MyARechnungArtikelPTR->LoescheArtikel( Select_LV );

					if( Select_LV > 0 )
					{
						Select_LV--;
						if( Select_LV < First_LV )
							First_LV--;
					}

					UpDate		= MyARechnungPTR->VersandErmittelt;
					FillPos		= TRUE;
					break;
				// Artikelnummer suchen
				case KAS_ART_SUCHEN:
					((MTSuch_Gadget *)FindIt->FirstAuswert)->AktDB			= MyArtikelPTR;

					ThisWindow->ThisScreen->ExclusiveAuswertung( FindIt );
					if( ((MTSuch_Gadget *)FindIt->FirstAuswert)->DB_Pos )
					{
						MyAppStringsPTR->GetCSVWert( ((MTSuch_Gadget *)FindIt->FirstAuswert)->SelectPosText, Buffer, MyPrefsPTR->Daten->ARechArt );
						UpDate = LadeArtikel( Buffer );
					}
					break;
				// Artikelnummer eingegeben
				case KAS_ART_NUMMER:
					GetAttr(WSTRINGA_String, ThisWindow->gads[IconNummer], (ULONG *)&TextPTR );
					UpDate = LadeArtikel( TextPTR );
					break;
				// Artikelanzahl
				case KAS_ART_ANZ:
					UpDate = DoubleAuswert( &MyARechnungArtikelPTR->AktArtikel->ZuOrdnungTab.Artikelanzahl,
													MyPrefsPTR->Daten->Nachkomma );
					if( UpDate )
					{
						MyARechnungArtikelPTR->GetElementNr( MyARechnungArtikelPTR->AktArtikel->DB_Position );
						MyARechnungArtikelPTR->Daten->Artikelanzahl	= MyARechnungArtikelPTR->AktArtikel->ZuOrdnungTab.Artikelanzahl;
						MyARechnungArtikelPTR->UpDateElement();

						UpDate			= MyARechnungPTR->VersandErmittelt;
						FillPos			= TRUE;
						SperrePruefen	= TRUE;
					}
					break;
				// Artikelanzahl-Popup
				case KAS_ART_ANZ_POP:
					LongWert = GetTagData(WVECTORPOPUPA_Selected, 0, (struct TagItem *)imsg->IAddress);
					MyARechnungArtikelPTR->AktArtikel->ZuOrdnungTab.Artikelanzahl += PopUpTab[LongWert];
					if( MyARechnungArtikelPTR->AktArtikel->ZuOrdnungTab.Artikelanzahl < 0.0 )
						MyARechnungArtikelPTR->AktArtikel->ZuOrdnungTab.Artikelanzahl = 0.0;

					MyARechnungArtikelPTR->GetElementNr( MyARechnungArtikelPTR->AktArtikel->DB_Position );
					MyARechnungArtikelPTR->Daten->Artikelanzahl	= MyARechnungArtikelPTR->AktArtikel->ZuOrdnungTab.Artikelanzahl;
					MyARechnungArtikelPTR->UpDateElement();

					UpDate			= MyARechnungPTR->VersandErmittelt;
					FillPos			= TRUE;
					SperrePruefen	= TRUE;
					break;
				// Einzelpreis
				case KAS_ART_EPREIS:
					UpDate = MoneyAuswert(	&MyARechnungArtikelPTR->AktArtikel->ZuOrdnungTab.Artikelpreis,
													MyPrefsPTR->WaehrungPTR[MyARechnungPTR->Daten->Waehrung_KZ] );
					if( UpDate )
					{
						MyARechnungArtikelPTR->GetElementNr( MyARechnungArtikelPTR->AktArtikel->DB_Position );
						MyARechnungArtikelPTR->Daten->Artikelpreis	=
																MyARechnungArtikelPTR->AktArtikel->ZuOrdnungTab.Artikelpreis;
						MyARechnungArtikelPTR->Daten->Preisaender	= TRUE;
						MyARechnungArtikelPTR->UpDateElement();
						UpDate			= FALSE;
						SperrePruefen	= TRUE;
						FillPos			= TRUE;
					}
					break;
				// Währung
				case KAS_WAEHRUNG:
					UpDate	= CycleAuswert( &MyARechnungPTR->Daten->Waehrung_KZ );
					FillPos	= UpDate;
					break;
				// Zusatztext, Rechnungsebene
				case KAS_ZUSATZ:
					UpDate = TextFeldAuswert( MyARechnungPTR->Daten->Bemerkung );
					break;
				// Bezahlte Rechnungssumme
				case KAS_BEZAHLT:
					UpDate	= MoneyAuswert( &MyARechnungPTR->Daten->Bezahlt, MyPrefsPTR->WaehrungPTR[MyARechnungPTR->Daten->Waehrung_KZ] );
					FillPos	= UpDate;
					break;
			}


			if( UpDate )
			{
				MyARechnungPTR->UpDateElement();
				UpDate			= FALSE;
				SperrePruefen	= TRUE;
			}
			if( FillPos )
				FillPositionen();

			break;
		case IDCMP_RAWKEY:
			switch( imsg->Code )
			{
				case 0:
					if( GetAttr(WINTEGERA_Long, GetIt->gads[NAV_NUMMER], (ULONG *)&LongWert ) )
					{
						if( LongWert > MyARechnungPTR->ElementeVorhanden() )
							LongWert = MyARechnungPTR->ElementeVorhanden();
						if( LongWert < 1 )
							LongWert = 1;
						MyARechnungPTR->GetElementNr( (ULONG)LongWert );
						UpDate = TRUE;
					}
					break;
				case 1:
					MyAllgemein.Drucken( 0, NULL, NULL, NULL, NULL, NULL,
												MyPrefsPTR->Daten->Kassenbon, DB_Pos, DB_Pos,
												MyARechnungPTR, DRU_DRUCK, MyPrefsPTR->Daten->SchnellDruckFragen );
					break;
				case 76:
				case 77:
					if( ( imsg->Qualifier & IEQUALIFIER_LSHIFT ) ||
						 ( imsg->Qualifier & IEQUALIFIER_RSHIFT ) )
					{
						if( imsg->Code							== 76	&&
							 Select_LV_GR						> 0	&&
							 KasArtGrpList->Anzahl			> 0 )
							Select_LV_GR--;
						else if(	imsg->Code					== 77	&&
									Select_LV_GR				< (KasArtGrpList->Anzahl - 1) &&
									KasArtGrpList->Anzahl	> 0 )
							Select_LV_GR++;
						SetGadgetAttrs( ThisWindow->gads[KAS_LV_ARTGRP], ThisWindow->Win, NULL,
																	WLISTVIEWA_Visible, Select_LV_GR, WLISTVIEWA_Selected, Select_LV_GR, TAG_DONE);
						GetAttr(WLISTVIEWA_Top, ThisWindow->gads[KAS_LV_ARTGRP], (ULONG *)&First_LV_GR );
					}
					else if( ( imsg->Qualifier & IEQUALIFIER_LALT ) ||
								( imsg->Qualifier & IEQUALIFIER_RALT ))
					{
						if( imsg->Code							== 76	&&
							 Select_LV_AR						> 0	&&
							 KasArtList->Anzahl				> 0 )
							Select_LV_AR--;
						else if(	imsg->Code					== 77	&&
									Select_LV_AR				< (KasArtList->Anzahl - 1) &&
									KasArtList->Anzahl		> 0 )
							Select_LV_AR++;
						SetGadgetAttrs( ThisWindow->gads[KAS_LV_ARTUEB], ThisWindow->Win, NULL,
																	WLISTVIEWA_Visible, Select_LV_AR, WLISTVIEWA_Selected, Select_LV_AR, TAG_DONE);
						GetAttr(WLISTVIEWA_Top, ThisWindow->gads[KAS_LV_ARTUEB], (ULONG *)&First_LV_AR );
					}
					else
					{
						LongWert = Select_LV;

						if( imsg->Code						== 76	&&
							 Select_LV						> 0	&&
							 R_ArtNrList->Anzahl			> 0 )
							Select_LV--;
						else if(	imsg->Code				== 77	&&
									Select_LV				< (R_ArtNrList->Anzahl - 1) &&
									R_ArtNrList->Anzahl	> 0 )
							Select_LV++;

						AktPos |= (LongWert != Select_LV);
					}
					break;
			}
			if( ( imsg->Qualifier & IEQUALIFIER_LSHIFT ) ||
				 ( imsg->Qualifier & IEQUALIFIER_RSHIFT ) ||
				 ( imsg->Qualifier & IEQUALIFIER_LALT ) ||
				 ( imsg->Qualifier & IEQUALIFIER_RALT ))
			{
				if( imsg->Code > 79 &&
					 imsg->Code < 90 )
				{
					while( AktAuswert )
					{
						DONE = AktAuswert->MTAuswertung( imsg, DONE );
						AktAuswert = AktAuswert->NextAusw;
					}
				}
			}
			else
			{
				switch( imsg->Code )
				{
					case 80:
						if( !((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[0] )
						{
							MyARechnungPTR->GetFirstElement();
							UpDate = TRUE;
						}
						break;
					case 81:
						if( !((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[1] )
						{
							MyARechnungPTR->Get10PrevElement();
							UpDate = TRUE;
						}
						break;
					case 82:
						if( !((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[2] )
						{
							MyARechnungPTR->GetPrevElement();
							UpDate = TRUE;
						}
						break;
					case 83:
						if( !((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[3] )
						{
							MyARechnungPTR->GetNextElement();
							UpDate = TRUE;
						}
						break;
					case 84:
						if( !((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[4] )
						{
							MyARechnungPTR->Get10NextElement();
							UpDate = TRUE;
						}
						break;
					case 85:
						if( !((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[5] )
						{
							MyARechnungPTR->GetLastElement();
							UpDate = TRUE;
						}
						break;
					case 86:
						if( !((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[6] )
						{
							((MTSuch_Gadget *)FindIt->FirstAuswert)->AktDB			= MyARechnungPTR;
						
							ThisWindow->ThisScreen->ExclusiveAuswertung( FindIt );
							if( ((MTSuch_Gadget *)FindIt->FirstAuswert)->DB_Pos )
							{
								MyARechnungPTR->GetElementNr( ((MTSuch_Gadget *)FindIt->FirstAuswert)->DB_Pos );
								UpDate = TRUE;
							}
						}
						break;
					case 87:
						if( !((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[7] )
						{
							MyARechnungPTR->NeuerDatensatz();
							MyARechnungPTR->Daten->Versandart		= MyPrefsPTR->Daten->KassenVersandart;
							strcpy( MyARechnungPTR->Daten->Bemerkung, MyPrefsPTR->Daten->Kassentext );
							MyARechnungPTR->UpDateElement();
							MyARechnungPTR->Daten->RStatus			= ARS_Bezahlt;
							MyARechnungPTR->Daten->Versandkosten	= 0.0;
							MyARechnungPTR->Daten->Zusatzkosten		= 0.0;
							MyARechnungPTR->Daten->Preisaender		= TRUE;
							MyLocalePTR->AktDateTime( &MyARechnungPTR->Daten->BestDatum );
							MyLocalePTR->AktDateTime( &MyARechnungPTR->Daten->LDatum );
							MyLocalePTR->AktDateTime( &MyARechnungPTR->Daten->RDatum );
							MyLocalePTR->AktDateTime( &MyARechnungPTR->Daten->BDatum );
							MyARechnungPTR->Daten->Barbeleg			= TRUE;
							MyARechnungPTR->UpDateElement();
							
							SetGadgetAttrs( GetIt->gads[NAV_NUMMER], GetIt->Win, NULL, WINTEGERA_Long, (LONG)MyARechnungPTR->AktElementNr, TAG_DONE );
							UpDate = TRUE;
						}
						break;
					case 89:
						if( !((MTNav_Gadget *)(GetIt->FirstAuswert))->Sperrkennzeichen[8] )
						{
							MyARechnungPTR->LoeschenAkt();
							UpDate = TRUE;
						}
						break;
				}
			}
			break;
		case IDCMP_VANILLAKEY:
			if( !ThisWindow->Fehler )
			{
				switch( imsg->Code )
				{
					case (ULONG)'#':
						ActivateWindow( GetIt->Win );
						ActivateGadget( GetIt->gads[NAV_NUMMER], GetIt->Win, NULL);
						break;
//					case (ULONG)'u':
//						MyARechnungPTR->UnDo();
//						UpDate = TRUE;
//						break;
//					case (ULONG)'U':
//						MyARechnungPTR->ReDo();
//						UpDate = TRUE;
//						break;
					case 27:
						DONE	= 1;
						if( GetIt && ThisWindow->BezWin )
						{
							ThisWindow->BezWin->BezWin = NULL;
							((MTNav_Gadget *)(GetIt->FirstAuswert))->AlleSperren();
							SetGadgetAttrs( GetIt->gads[NAV_NUMMER], GetIt->Win, NULL, WINTEGERA_Long, 0, GA_DISABLED, TRUE, TAG_DONE );
							SetGadgetAttrs( GetIt->gads[NAV_MAX], GetIt->Win, NULL, WARGSA_Format, "", TAG_DONE );
						}
						break;
				}
			}
			break;
		// Window Aktiviert
		case IDCMP_ACTIVEWINDOW:
			if( ThisWindow->ShortCuts[0] == 0 )
			{
				SetGadgetAttrs( ThisWindow->gads[KAS_ART_ANZ], ThisWindow->Win, NULL, WSTRINGA_Hook, &PosZahlNK_edh, TAG_DONE );
				SetGadgetAttrs( ThisWindow->gads[KAS_ART_EPREIS], ThisWindow->Win, NULL, WSTRINGA_Hook, &PosNegWaehr_edh, TAG_DONE );
				SetGadgetAttrs( ThisWindow->gads[KAS_BEZAHLT], ThisWindow->Win, NULL, WSTRINGA_Hook, &PosWaehr_edh, TAG_DONE );

				GetAttr(WLABELA_Label, ThisWindow->gads[KAS_LABEL_ART], (ULONG *)&TextPTR );
				ThisWindow->ShortCuts[0]		= GetHotKey(TextPTR,0);
				ThisWindow->ShortCutIcon[0]	= KAS_ART_SUCHEN;
				ThisWindow->ShortCutKarte[0]	= -1;
				ThisWindow->ShortCuts[1]		= 0;
			}
			FillWindow();
			break;
		// Window schliessen
		case IDCMP_CLOSEWINDOW:
			if( ThisWindow->BezWin && !ThisWindow->Fehler )
			{
				ThisWindow->BezWin->BezWin = NULL;
				if( GetIt )
				{
					((MTNav_Gadget *)(GetIt->FirstAuswert))->AlleSperren();
					SetGadgetAttrs( GetIt->gads[NAV_NUMMER], GetIt->Win, NULL, WINTEGERA_Long, 0, GA_DISABLED, TRUE, TAG_DONE );
					SetGadgetAttrs( GetIt->gads[NAV_MAX], GetIt->Win, NULL, WARGSA_Format, "", TAG_DONE );
				}
			}
			break;
	}

	if(MyARechnungPTR->Rechnungsfehler > 0	||
		SperrePruefen								||
		ThisWindow->Fehler )
	{
		if ( MyARechnungPTR->Rechnungsfehler == 0 )
		{
			MTRech_Art* SuchArtikel = MyARechnungArtikelPTR->FirstArtikel;

			LongWert = 0;
			while( SuchArtikel && (SuchArtikel->Artikelfehler == 0) )
			{
				LongWert++;
				SuchArtikel = SuchArtikel->NextArtikel;
			}

			if( SuchArtikel )
			{
				MyARechnungArtikelPTR->AktArtikel = SuchArtikel;
				ThisWindow->Fehler = TRUE;

				Select_LV	= LongWert;
				AktPos		= TRUE;

				if( SuchArtikel->Artikelfehler & 1)
				{
					IconNummer = KAS_ART_NUMMER;
					SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, AppStrings[MSG_FEHL_Geloescht], TAG_DONE );
					DisplayBeep(ThisWindow->ThisScreen->ThisScreen);
				}
				else if( SuchArtikel->Artikelfehler & 2)
				{
					IconNummer = KAS_ART_ANZ;
					MyLocalePTR->FormatNumber( (STRPTR)Buffer, SuchArtikel->ArtikelDaten.Verpackung, MyPrefsPTR->Daten->Nachkomma);
					SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, AppStrings[MSG_FEHL_Teil], WARGSA_Arg0, Buffer, TAG_DONE );
					DisplayBeep(ThisWindow->ThisScreen->ThisScreen);
				}
				else if( SuchArtikel->Artikelfehler & 4)
				{
					TEXT Buffer2[80];
					IconNummer = KAS_ART_ANZ;
					MyLocalePTR->FormatNumber( (STRPTR)Buffer, SuchArtikel->MengeMerker, MyPrefsPTR->Daten->Nachkomma);
					MyArtikelPTR->ArtikelNrErmitteln(	Buffer2, MyPrefsPTR->Daten->ARechArt,
																	SuchArtikel->ZuOrdnungTab.Artikelnummer,
																	&SuchArtikel->ArtikelDaten );
					SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, AppStrings[MSG_FEHL_Menge],
																									WARGSA_Arg0, Buffer,
																									WARGSA_Arg1, Buffer2 );
					DisplayBeep(ThisWindow->ThisScreen->ThisScreen);
				}
				else if( SuchArtikel->Artikelfehler & 8)
				{
					IconNummer = KAS_ART_NUMMER;
					SetGadgetAttrs( GetIt->gads[NAV_HINWEIS], GetIt->Win, NULL, WARGSA_Format, AppStrings[MSG_FEHL_Artikel], TAG_DONE );
					if( SuchArtikel->ZuOrdnungTab.Artikelnummer > 0 )
						DisplayBeep(ThisWindow->ThisScreen->ThisScreen);
				}

				if( !ActivateGadget( ThisWindow->gads[IconNummer], ThisWindow->Win, NULL) )
				{
					GetIt->MTOpenWindow();
					ThisWindow->MTOpenWindow();
					SetGadgetAttrs( ThisWindow->gads[KAS_LV_GPREIS], ThisWindow->Win, NULL, WGROUPA_ActivePage, ThisWindow->Karte, TAG_DONE );
					ActivateGadget( ThisWindow->gads[IconNummer], ThisWindow->Win, NULL);
				}
				else
					FillWindow();
			}
			else
			{
				ThisWindow->Fehler = FALSE;
				FillWindow();
			}
		}
	}


	if( UpDate )
	{
		DB_Pos				= MyARechnungPTR->AktElementNr;
		First_LV				= 0;
		Select_LV			= 0;
		First_LV_GR			= 0;
		Select_LV_GR		= 0;
		First_LV_AR			= 0;
		Select_LV_AR		= 0;
		ThisWindow->Karte	= 0;
		FillWindow();
	}
	else if( AktPos )
		AktivierePos();

	return DONE;
};
