#pragma +
// Name:						Window-Klassen
// Programmtyp:			Hilfsroutine für
//								Fakturierprogramm
//	Programmiersprache:	C++ (AT&T Standard 3.0)
// Computersystem:		Commodore AMIGA
// Betriebssystem:		AMIGA OS3.0 oder höher
// Autor:					Manfred Tremmel
// © Copyright:			1997-2000 by MT Graphic & Design
// Version:					V1.08
//
//    Copyright (C) 1997-2000 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 <iostream.h>
#include <stdlib.h>

#include "MT-Rechnung.h"
#include "MTLocale.h"
#include "MTList.h"
#include "Datenbank.h"
#include "Einstellungen.h"
#include "Artikel.h"
#include "Versand.h"
#include "Laender.h"
#include "Adressen.h"
#include "RechnungArtikel.h"
#include "Rechnung.h"
#include "ARechnung.h"
#include "ERechnung.h"
#include "Inventur.h"
#include "Konten.h"
#include "KontenPos.h"
#include "Buchen.h"
#include "BuchenPos.h"
#include "MTScreen.h"
#include "MTWindow.h"
#include "MTAuswert.h"
#include "MTWinLogin.h"
#include "MTEditHook.h"
#include "MTToolType.h"

extern Prefs					*MyPrefsPTR;
extern Artikel					*MyArtikelPTR;
extern Versand					*MyVersandPTR;
extern Laender					*MyLaenderPTR;
extern Adress					*MyAdressPTR;
extern Kunden					*MyKundenPTR;
extern Mitarbeiter			*MyMitarbeiterPTR;
extern Niederlassung			*MyNiederlassungPTR;
extern Lieferanten			*MyLieferantPTR;
extern RechnungArtikel		*MyARechnungArtikelPTR;
extern ARechnung				*MyARechnungPTR;
extern RechnungArtikel		*MyERechnungArtikelPTR;
extern ERechnung				*MyERechnungPTR;
extern Inventur				*MyInventurPTR;
extern KontenPos				*MyKontenPosPTR;
extern Konten					*MyKontenPTR;
extern BuchenPos				*MyBuchenPosPTR;
extern Buchen					*MyBuchenPTR;
extern MTToolType				*MyToolTypesPTR;

extern TEXT EHBuffer[20];

MTLogin_Gadget::MTLogin_Gadget(MTWindow *Win) : MTAuswert( Win )
{
	strcpy(USER, MyToolTypesPTR->MTTTVorgaben[16].Wert);
	strcpy(Passwort, MyToolTypesPTR->MTTTVorgaben[17].Wert);

	if( *Passwort && *USER )
		CheckUser();
	else
		Gefunden = FALSE;

	Versuche		= 0;
};

void MTLogin_Gadget::FillWindow()
{
	strcpy( EHBuffer, Passwort );

	j = strlen( Passwort );
	for( i = 0; i < j; i++ )
	{
		Passwort_Anzeige[i]  = '*';
	}
	Passwort_Anzeige[i] = 0;

	SetGadgetAttrs( ThisWindow->gads[LOG_USER], ThisWindow->Win, NULL, WSTRINGA_String, USER, TAG_DONE );
	SetGadgetAttrs( ThisWindow->gads[LOG_PASSWORT], ThisWindow->Win, NULL, WSTRINGA_String, Passwort_Anzeige, TAG_DONE );
};

BOOL MTLogin_Gadget::CheckUser()
{
	Gefunden = FALSE;

	i = 0;

	MyMitarbeiterPTR->GetFirstElement();

	while( (i < MyMitarbeiterPTR->AktElementNr) && (Gefunden == FALSE) )
	{
		if(MyMitarbeiterPTR->Daten->Status < 0xffff &&
			strcmp( MyMitarbeiterPTR->Daten->User, USER ) == 0 &&
			strcmp( MyMitarbeiterPTR->Daten->Passwort, Passwort ) == 0 )
			Gefunden = TRUE;
		else
		{
			i = MyMitarbeiterPTR->AktElementNr;
			MyMitarbeiterPTR->GetNextElement();
		}
	}

	if( Gefunden )
	{
		*USER								= 0;
		*Passwort						= 0;
		Versuche							= 0;
		MyPrefsPTR->UserWechsel( MyMitarbeiterPTR->AktElementNr );
		MyArtikelPTR->UserWechsel( MyMitarbeiterPTR->AktElementNr );
		MyVersandPTR->UserWechsel( MyMitarbeiterPTR->AktElementNr );
		MyLaenderPTR->UserWechsel( MyMitarbeiterPTR->AktElementNr );
		MyAdressPTR->UserWechsel( MyMitarbeiterPTR->AktElementNr );
		MyKundenPTR->UserWechsel( MyMitarbeiterPTR->AktElementNr );
		MyMitarbeiterPTR->UserWechsel( MyMitarbeiterPTR->AktElementNr );
		MyNiederlassungPTR->UserWechsel( MyMitarbeiterPTR->AktElementNr );
		MyLieferantPTR->UserWechsel( MyMitarbeiterPTR->AktElementNr );
		MyARechnungArtikelPTR->UserWechsel( MyMitarbeiterPTR->AktElementNr );
		MyARechnungPTR->UserWechsel( MyMitarbeiterPTR->AktElementNr );
		MyERechnungArtikelPTR->UserWechsel( MyMitarbeiterPTR->AktElementNr );
		MyERechnungPTR->UserWechsel( MyMitarbeiterPTR->AktElementNr );
		MyInventurPTR->UserWechsel( MyMitarbeiterPTR->AktElementNr );
		MyKontenPosPTR->UserWechsel( MyMitarbeiterPTR->AktElementNr );
		MyKontenPTR->UserWechsel( MyMitarbeiterPTR->AktElementNr );
		MyBuchenPosPTR->UserWechsel( MyMitarbeiterPTR->AktElementNr );
		MyBuchenPTR->UserWechsel( MyMitarbeiterPTR->AktElementNr );

		memcpy((void *)&MyMitarbeiterPTR->UserDaten, (const void *)MyMitarbeiterPTR->Daten, sizeof(MitarbeiterDaten));
		MyNiederlassungPTR->UserN_Pos = MyMitarbeiterPTR->UserDaten.Niederlassung;
		if( MyNiederlassungPTR->ElementeVorhanden() > 0 )
		{
			MyNiederlassungPTR->GetElementNr( MyMitarbeiterPTR->UserDaten.Niederlassung );
			memcpy((void *)&MyNiederlassungPTR->UserNiederlassung, (const void *)MyNiederlassungPTR->Daten, sizeof(NiederlassungDaten));

			MyAdressPTR->GetElementNr( MyNiederlassungPTR->UserNiederlassung.Adresse );
			MyLaenderPTR->AktDatenPos = MyAdressPTR->Daten->Land + 1;
			MyLaenderPTR->GetElementNr( MyLaenderPTR->AktDatenPos );
			memcpy( (void *)&MyLaenderPTR->AktDaten, (const void *)MyLaenderPTR->Daten, sizeof(LaenderDaten) );
		}
	}
	else
		Versuche++;

	return Gefunden;
};

// Gadget-Auswertung:
WORD MTLogin_Gadget::MTAuswertung( struct IntuiMessage* imsg, WORD DONE )
{
	STRPTR TextPTR;
	ULONG IconNummer;
	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 )
			{
				case LOG_USER:
					if( GetAttr(WSTRINGA_String, ThisWindow->gads[IconNummer], (ULONG *)&TextPTR ) )
						strcpy( USER, TextPTR );
					break;
				case LOG_PASSWORT:
					strcpy( Passwort, EHBuffer );
					break;
				case LOG_OK:
					if ( CheckUser() )
						DONE			= 2;
					else
					{
						if( Versuche > 2 )
						{
							Versuche	= 0;
							DONE		= 2;
						}
						else
						{
							DisplayBeep(ThisWindow->ThisScreen->ThisScreen);
							ActivateGadget( ThisWindow->gads[LOG_USER], ThisWindow->Win, NULL);
						}
					}
					break;
			}
			break;
		case IDCMP_ACTIVEWINDOW:
			SetGadgetAttrs( ThisWindow->gads[LOG_PASSWORT], ThisWindow->Win, NULL, WSTRINGA_Hook, &Stern_edh, TAG_DONE );
			FillWindow();
			ActivateGadget( ThisWindow->gads[LOG_USER], ThisWindow->Win, NULL);
			break;
	}
	return DONE;
};

