// zahlungssimulierung.cpp: Implementierungsdatei
//

#include "stdafx.h"
#include "Ecopay.h"
#include "EcopayDoc.h"
#include "ChildFrm.h"
#include "zahlungssimulierung.h"
#include "massnahme.h"
#include "modell.h"
#include "ergebnis.h"
#include "datenbank.h"
#include "visualisierung.h"
#include "visdireckt.h"
#include "kartendialog.h"
#include "simulation.h"
#include "savename.h"
#include <sstream> 
#include <list>
#include <time.h>

// zahlungssimulierung-Dialogfeld

IMPLEMENT_DYNAMIC(zahlungssimulierung, CDialog)

zahlungssimulierung::zahlungssimulierung(CWnd* pParent /*=NULL*/)
: CDialog(zahlungssimulierung::IDD, pParent)
,m_brush(RGB(253,255,255))
{

    daten = new datenbank();
}

zahlungssimulierung::~zahlungssimulierung()
{
    daten->delete_zwischenvis();
    delete daten;
}

void zahlungssimulierung::DoDataExchange( CDataExchange* pDX)
{
	CDialog::DoDataExchange( pDX);
	//DDX_Control(pDX, IDC_LISTMassnahmen, m_massnahme);
	DDX_Control( pDX, IDC_LISTgewmassnahmen, m_liste_gmassnahme);
	DDX_Control( pDX, IDC_Gmassnahme, m_gmassnahme);
	DDX_Control( pDX, IDC_zahlungM, m_zahlung);
	DDX_Control( pDX, IDC_anzahlM, m_anzahl);
	DDX_Control( pDX, IDC_LISTzahlungmass, m_listezahlung);
	DDX_Control( pDX, IDC_LISTpixelmass, m_liste_anzahl);
	//DDX_Control(pDX, IDC_LISTArten, m_liste_arten);
	DDX_Control( pDX, IDC_ausgeArt, m_gart);
	DDX_Control( pDX, IDC_minQart, m_qualitaet);
	DDX_Control( pDX, IDC_LISTgewarten, m_listegarten);
	DDX_Control( pDX, IDC_LISTqulitaetarten, m_liste_qualitaet);
	DDX_Control( pDX, IDC_LIST1, m_liste_ergebnis);
	DDX_Control( pDX, IDC_Speichern, m_speichern);
	DDX_Control( pDX, IDC_VIS, m_visualisieren);
	DDX_Control( pDX, IDC_Massnahmenart, m_massnahmenart);
	DDX_Control( pDX, IDC_Massnahmenstart, m_massnahmenstart);
	DDX_Control( pDX, IDC_Massnahmenabstand, m_massnahmenabstand);
	DDX_Control( pDX, IDC_MassnahmenGV, m_massnahmeGV);
	DDX_Control( pDX, IDC_Combo_Art, m_massnahmetierart);
	DDX_Control( pDX, IDC_Duengungja, m_d_ja);
	DDX_Control( pDX, IDC_Duengungnein, m_d_nein);
	DDX_Control( pDX, IDC_COMBOartnamen, m_arten_name);
	DDX_Control( pDX, IDC_COMBOartnamenlatein, m_arten_namenlatein);
	DDX_Control( pDX, IDC_COMBOartsavetime, m_arten_savetime);
	DDX_Control( pDX, IDC_Bundesland, m_bundesland);
	DDX_Control( pDX, IDC_keine, hohe_ges);
	DDX_Control( pDX, IDC_Hoch, hoehe_hoch);
	DDX_Control( pDX, IDC_Tief, hoehe_tief);
	DDX_Control( pDX, IDC_TZahlung2, transaktionskosten);
	DDX_Control(pDX, IDC_Massnahmenabstand4, massnahmenabstand3);
}

BEGIN_MESSAGE_MAP(zahlungssimulierung, CDialog)
ON_BN_CLICKED(IDC_Einlesen2, &zahlungssimulierung::OnBnClickedEinlesen2)
ON_BN_CLICKED(IDC_BUTTONOptimierung, &zahlungssimulierung::OnBnClickedButtonoptimierung)
ON_BN_CLICKED(IDC_Einlesen, &zahlungssimulierung::OnBnClickedEinlesen)
ON_BN_CLICKED(IDC_VIS, &zahlungssimulierung::OnBnClickedVis)
//ON_LBN_DBLCLK(IDC_LISTMassnahmen, &zahlungssimulierung::OnLbnDblclkListmassnahmen)
//ON_LBN_DBLCLK(IDC_LISTArten, &zahlungssimulierung::OnLbnDblclkListarten)
ON_BN_CLICKED(IDC_Speichern, &zahlungssimulierung::OnBnClickedSpeichern)
ON_BN_CLICKED(IDOK, &zahlungssimulierung::OnBnClickedOk)
ON_LBN_DBLCLK(IDC_LISTgewmassnahmen, &zahlungssimulierung::OnLbnDblclkListgewmassnahmen)
ON_LBN_DBLCLK(IDC_LISTgewarten, &zahlungssimulierung::OnLbnDblclkListgewarten)
ON_WM_VSCROLL()
ON_WM_SIZE()
ON_CBN_SELCHANGE(IDC_Massnahmenart, &zahlungssimulierung::OnCbnSelchangeMassnahmenart)
ON_CBN_SELCHANGE(IDC_Massnahmenstart, &zahlungssimulierung::OnCbnSelchangeMassnahmenstart)
ON_CBN_SELCHANGE(IDC_Massnahmenabstand, &zahlungssimulierung::OnCbnSelchangeMassnahmenabstand)
ON_CBN_SELCHANGE(IDC_MassnahmenGV, &zahlungssimulierung::OnCbnSelchangeMassnahmengv)
ON_CBN_SELCHANGE(IDC_Combo_Art, &zahlungssimulierung::OnCbnSelchangeComboArt)
ON_BN_CLICKED(IDC_Duengungja, &zahlungssimulierung::OnBnClickedDuengungja)
ON_BN_CLICKED(IDC_Duengungnein, &zahlungssimulierung::OnBnClickedDuengungnein)
ON_CBN_SELCHANGE(IDC_COMBOartnamen, &zahlungssimulierung::OnCbnSelchangeComboartnamen)
ON_CBN_SELCHANGE(IDC_COMBOartnamenlatein, &zahlungssimulierung::OnCbnSelchangeComboartnamenlatein)
ON_CBN_SELCHANGE(IDC_COMBOartsavetime, &zahlungssimulierung::OnCbnSelchangeComboartsavetime)
ON_CBN_SELCHANGE(IDC_Bundesland, &zahlungssimulierung::OnCbnSelchangeBundesland)
ON_WM_CTLCOLOR()
//ON_BN_CLICKED(IDC_BUTTON1, &zahlungssimulierung::OnBnClickedButton1)
ON_CBN_SELCHANGE(IDC_Massnahmenabstand4, &zahlungssimulierung::OnCbnSelchangeMassnahmenabstand4)
END_MESSAGE_MAP()

BOOL zahlungssimulierung::OnInitDialog()
{

    CDialog::OnInitDialog();

    getdata();
    blandgew = false;
    hochgew = false;
    m_speichern.EnableWindow(0);

    m_visualisieren.EnableWindow(0);

    daten->delete_zwischenvis();
    daten->delete_ergebnis_zwischenvis();

    GetWindowRect(m_rect);
    m_nScrollPos = 0;

    return TRUE;
}
void zahlungssimulierung::getdata()
{
    vector< CString> namen, namenlatein;
    vector< CString>::iterator i;
    vector< string>::iterator k;
    int massnahmenanzahl, j;
    string result;
    string monatsv;

    char ma[ 100];
    int mv;

    vector < string > mnamenliste;
    vector < CString > bnamen;
    mnamenliste = daten->returnmassnahmenname();
    bnamen = daten->returnbundeslandname();
    for( k = mnamenliste.begin(); k != mnamenliste.end(); k++)
    {
        lstrcpy( ma, (*k).c_str());
        m_massnahmenart.AddString( ma);
    }

    for( i = bnamen.begin(); i != bnamen.end(); i++)
    {
        m_bundesland.AddString( *i);
    }

    namen = daten->returnartname( "name");
    i = namen.begin();
    CString auswahl;
    while( i != namen.end())
    {
        auswahl = *(i);
        m_arten_name.AddString( auswahl);
        i++;
    }
    namenlatein = daten->returnartname( "name_latein");
    i = namenlatein.begin();
    while( i != namenlatein.end())
    {
        auswahl = *(i);
        m_arten_namenlatein.AddString( auswahl);
        i++;
    }

}
// ausgleichszahlung-Meldungshandler

bool mysfunction( modell::masspixelergeb mp1, modell::masspixelergeb mp2)
{
    return (mp1.gewinn > mp2.gewinn);
}

// zahlungssimulierung-Meldungshandler

void zahlungssimulierung::OnBnClickedEinlesen2()
{

    CString f, str, z;
    char ma[ 1000];
    stringstream returnstring;
    string result;
    m_gmassnahme.GetWindowTextA( f);
    if( f.IsEmpty())
    {
        AfxMessageBox( "Sie müssen bitte erst eine Maßnahme auswählen!", MB_OK,
                0);
    } else
    {
        m_zahlung.GetWindowTextA( z);

        LPCTSTR csNumbers = _T( ")(0123456789.-");
        CString csTest = z;
        if( !csTest.Trim( csNumbers).IsEmpty() || z.IsEmpty())
        {
            AfxMessageBox(
                    "Sie müssen bitte eine Zahl  für die Zahlung eingeben!",
                    MB_OK, 0);
            m_zahlung.SetFocus();
        } else
        {

            m_anzahl.GetWindowTextA( f);
            LPCTSTR csNumbers = _T( ")(0123456789.-");
            CString csTest = f;
            if( !csTest.Trim( csNumbers).IsEmpty() || f.IsEmpty())
            {
                AfxMessageBox(
                        "Sie müssen bitte eine Zahl  für die maximale Fläche eingeben!",
                        MB_OK, 0);
                m_anzahl.SetFocus();
            } else
            {
                m_listezahlung.AddString( z);
                double zahl = atof( z);
                m.zahlung = zahl;
                int anzahl = atoi( f);
                anzahl = int( anzahl / 6.25);
                str.Format( _T( "%d"), anzahl);
                returnstring.str( "");
                returnstring.clear();
                returnstring << str << " ( " << f << " ha)";
                result = returnstring.str();
                lstrcpy( ma, result.c_str());
                m_liste_anzahl.AddString( ma);
                mliste.push_back( m);
                pixel_pro_massnahme.push_back( anzahl);
                returnstring.str( "");
                returnstring.clear();
                returnstring << m.name << ", " << m.mv1massnahme << "/"
                        << m.abstand2massnahme<< "/"
                        << m.abstand3massnahme << ",";
                if( (m.grossvieheinheit != 0) && (m.grossvieheinheit != 99))
                    returnstring << m.grossvieheinheit << " (GV), ";

                returnstring << m.duengung << " (D)";
                result = returnstring.str();
                lstrcpy( ma, result.c_str());
                m_liste_gmassnahme.AddString( ma);
                m_zahlung.SetWindowTextA( "");
                m_anzahl.SetWindowTextA( "");
                m_gmassnahme.SetWindowTextA( "");
            }
        }
    }

}

void zahlungssimulierung::OnBnClickedButtonoptimierung()
{

    vector< vector< modell::masspixelergeb>>::iterator me; // Iterator für die Liste der Kostenlisten aller Massnahmen
    vector< modell::masspixelergeb>::iterator mp; //Iterator für die Kostenliste einer Massnahme
    int mn = mliste.size();
    vector< massnahme>::iterator miterator;
    CString transaktionszahlung;
    transaktionskosten.GetWindowTextA( transaktionszahlung);
    LPCTSTR csNumbers = _T( ")(0123456789.-");
    CString csTest = transaktionszahlung;
    if( !csTest.Trim( csNumbers).IsEmpty() || transaktionszahlung.IsEmpty())
    {
        AfxMessageBox( "Sie müssen bitte die Transaktionskosten eingeben!",
                MB_OK, 0);
        transaktionskosten.SetFocus();
    } else
    {
        tzahlung = atoi( transaktionszahlung);
        for( miterator = mliste.begin(); miterator != mliste.end(); miterator++)
        {
            miterator->zahlung = miterator->zahlung - tzahlung;
        }

        if( mn == 0)
            AfxMessageBox( "Sie müssen bitte erst Maßnahmen auswählen!", MB_OK,
                    0);
        else
        {
            if( artliste.size() == 0)
                AfxMessageBox( "Sie müssen bitte erst Arten auswählen!", MB_OK,
                        0);
            else
            {
                vector < vector
                        < modell::masspixelergeb >> massnahmenergebvector( mn);
                for( int i = 0; i < mn; i++)
                {
                    vector < modell::masspixelergeb > *vec1 = new vector<
                            modell::masspixelergeb>;
                    massnahmenergebvector[ i] = *vec1;
                }
                vector< art*>::iterator artit;
                modell mod;
                simulation sim;
                //die Modelierung erfolgt nun
                int min = minqualitaet.size();
                //massnahmenergebvector.clear();
                daten->delete_zwischenvis();
                UINT check;
                check = IsDlgButtonChecked( IDC_keine);
                if( check == 1)
                {
                    egal = true;
                    hochgew = true;
                } else
                {
                    check = IsDlgButtonChecked( IDC_Tief);
                    if( check == 1)
                    {
                        egal = false;
                        hoch = false;
                        hochgew = true;
                    } else
                    {
                        check = IsDlgButtonChecked( IDC_Hoch);
                        if( check == 1)
                        {
                            egal = false;
                            hoch = true;
                            hochgew = true;
                        }
                    }
                }
                if( hochgew)
                {
                    if( blandgew == true)
                    {
                        CWaitCursor wait;
                        mod.calculate_oekologiemodell( artliste, mliste,
                                minqualitaet, massnahmenergebvector,
                                bundeslandID, hoch, egal);
                        int anzahl = massnahmenergebvector.size();
                        int i = 0;
                        for( me = massnahmenergebvector.begin();
                                me != massnahmenergebvector.end(); me++)
                        {

                            if( (*me).size() > 0)
                            {
                                sort( (*me).begin(), (*me).end(), mysfunction);
                            }
                        }
                        //AfxMessageBox("Nach Sortierung",MB_YESNO,0);
                        vector < simulation::mapixelliste_mit_pos
                                > pixellisten_mit_position;
                        pixellisten_mit_position.clear();

                        vector< modell::masspixelergeb>::iterator listenit;
                        vector< int> pixelpromassnahme;
                        for( i = 0; i < anzahl; i++)
                        {

                            simulation::mapixelliste_mit_pos mmp;
                            mmp.massnahmenergebnis = massnahmenergebvector[ i];
                            mmp.position = 0;
                            pixellisten_mit_position.push_back( mmp);
                            pixelpromassnahme.push_back( 0);

                        }
                        int anzahl_arten = artliste.size();
                        vector< double> artflaeche;
                        vector < modell::artenqualitaet > qualitaeten;
                        for( artit = artliste.begin(); artit != artliste.end();
                                artit++)
                        {
                            artflaeche.push_back( 0);
                            modell::artenqualitaet aq;
                            aq.art = (*artit);
                            aq.qualitaet = 0;
                            qualitaeten.push_back( aq);

                        }
                        //die initiale Lösung wird berechnet
                        //AfxMessageBox("Vor Gesammtkosten",MB_YESNO,0);
                        int zeilen, spalten;
                        daten->get_matrix_referenz( zeilen, spalten, 1);
                        vector < modell::masspixelergeb > ergebnisl;

                        double ges_ausgabe = sim.gesammtkosten(
                                pixellisten_mit_position, ergebnisl, artflaeche,
                                pixel_pro_massnahme, pixelpromassnahme, zeilen,
                                spalten, anzahl_arten);
                        wait.Restore();
                        vector< modell::masspixelergeb>::iterator e;
                        vector< modell::artenqualitaet>::iterator am;
                        string result;
                        char ma[ 1000];
                        double pixelqualitaet;
                        CString str, str1, str2, str3, str4, str5, str6,str7;
                        ergebnisliste = ergebnisl;
                        datenbank daten2;

                        int zaehler = 0;
                        for( e = ergebnisliste.begin();
                                e != ergebnisliste.end(); e++)
                        {
                            stringstream returnstring, resultstring;
                           /* int gew = int( (*e).gewinn);
                            str.Format( _T( "%d"), gew);
                            str1.Format( _T( "%d"), (*e).m.mv1massnahme);
                            str3.Format( _T( "%d"), (*e).m.abstand2massnahme);
							str5.Format( _T( "%d"), (*e).m.abstand3massnahme);
                            str4.Format( _T( "%d"), (*e).m.duengung);*/
                            int k = 0;
                            pixelqualitaet = 0;
                            for( am = (*e).artenq.begin();
                                    am != (*e).artenq.end(); am++)
                            {
                                if( qualitaeten[ k].art->get_m_name()
                                        == (*am).art->get_m_name())
                                {
                                    qualitaeten[ k].qualitaet = qualitaeten[ k]
                                            .qualitaet + (*am).qualitaet;
                                    resultstring << "("
                                            << (*am).art->get_artID() << ", "
                                            << (*am).qualitaet << ")";

                                }
                                pixelqualitaet = pixelqualitaet
                                        + (*am).qualitaet;
                                k++;
                            }
                            result = resultstring.str();
                            daten2.save_ergebnis_zwischenvis( (*e).pixelID,
                                    (*e).m.massnahmeID,
                                    (*e).m.zahlung + tzahlung, (*e).gewinn,
                                    pixelqualitaet, result);

                            str2.Format( _T( "%.2f"), pixelqualitaet);
                            /*returnstring << str << " (Zahlung-Kosten), " << str2
                                    << " (Qualitaet), " << (*e).m.name << str1
                                    << "/" << str3 << "/" << str5<< ", " << str4;
                            result = returnstring.str();
                            lstrcpy( ma, result.c_str());
                            m_liste_ergebnis.AddString( ma);*/
                            zaehler++;

                        }
                        vector< modell::artenqualitaet>::iterator a;

                        stringstream returnstring;
                        //returnstring<<ergebnisliste.size();
                        str2.Format( _T( "%.f"),
                                (ges_ausgabe + (tzahlung * zaehler * 6.25)));
                        returnstring << "Gesamtbudget: " << str2;
                        string r = returnstring.str();
                        lstrcpy( ma, r.c_str());
                        m_liste_ergebnis.AddString( ma);
                        returnstring.str( "");
						returnstring.clear();
						returnstring << "Gesamte geförderte Fläche: "
							<< ergebnisliste.size()
							<<" Pixel, "
                            << (ergebnisliste.size() * 6.25)
                            << " ha";
						 r = returnstring.str();
						lstrcpy( ma, r.c_str());
						m_liste_ergebnis.AddString( ma);

						vector< massnahme>::iterator mit;
						int p = 0;
						returnstring.str( "");
                        returnstring.clear();
                        returnstring << "Teilnehmende Pixel/ha pro Maßnahme: ";
						r = returnstring.str();
                        lstrcpy( ma, r.c_str());
                        m_liste_ergebnis.AddString( ma);
	
						for( mit = mliste.begin(); mit != mliste.end(); mit++)
						{
							returnstring.str( "");
							returnstring.clear();
							str1.Format( _T( "%d"), mit->mv1massnahme);
                            str3.Format( _T( "%d"), mit->abstand2massnahme);
							str5.Format( _T( "%d"), mit->abstand3massnahme);
                            str4.Format( _T( "%d"), mit->duengung);
							returnstring<<mit->name<<str1<<"/"<<str3<<"/"<<str5<<", "<<str4<<" (D)";
							if((mit->grossvieheinheit > 0.3)&& (mit->grossvieheinheit < 66)) 
							{
								str2.Format( _T( "%.2f"), mit->grossvieheinheit);
								returnstring<<", GV "<<str2<<" ,";
								if(mit->tierart == 1)
									returnstring<< "lebhaft";
								else
									returnstring<<"ruhig";
									

							}

							str6.Format( _T( "%d"), pixelpromassnahme[p]);
							str7.Format( _T( "%.2f"), pixelpromassnahme[p] * 6.25);
							returnstring<<": "<<str6<< " Pixel, "<< str7<<" ha";
							r = returnstring.str();
							lstrcpy( ma, r.c_str());
							m_liste_ergebnis.AddString( ma);
							p++;
						}


                        returnstring.str( "");
                        returnstring.clear();
                        returnstring << "Effektive Flächen: ";
                        r = returnstring.str();
                        lstrcpy( ma, r.c_str());
                        m_liste_ergebnis.AddString( ma);

                        for( a = qualitaeten.begin(); a != qualitaeten.end();
                                a++)
                        {
                            str2.Format( _T( "%.2f"), ((*a).qualitaet * 6.25));
                            returnstring.str( "");
                            returnstring.clear();
                            returnstring << (*a).art->get_m_name() << ": "
                                    << str2;
                            r = returnstring.str();
                            lstrcpy( ma, r.c_str());
                            m_liste_ergebnis.AddString( ma);
                        }

                        m_speichern.EnableWindow( 1);
                        m_visualisieren.EnableWindow( 1);
                    } else
                        AfxMessageBox(
                                "Sie müssen bitte ein Bundesland auswählen!",
                                MB_OK, 0);
                } else
                    AfxMessageBox( "Sie müssen bitte die Höhenlage auswählen!",
                            MB_OK, 0);
            }
        }
    }
}

void zahlungssimulierung::OnBnClickedEinlesen()
{


    CString f, a;
    m_gart.GetWindowTextA( a);
    if( a.IsEmpty())
        AfxMessageBox( "Sie müssen bitte erst eine Art auswählen!", MB_OK, 0);
    else
    {
        m_qualitaet.GetWindowTextA( f);
        LPCTSTR csNumbers = _T( ")(0123456789.-");
        CString csTest = f;
        if( !csTest.Trim( csNumbers).IsEmpty() || f.IsEmpty())
        {
            AfxMessageBox(
                    "Sie müssen bitte eine Zahl für die minimale Qualitaet eingeben!",
                    MB_OK, 0);
            m_qualitaet.SetFocus();
        } else
        {

            double qual = atof( f);

            if( qual > 1 || qual < 0)
            {
                AfxMessageBox( "Die Qualitaet muß zwischen 0 und 1 liegen!"
                        "\n\n Bitte überarbeiten Sie Ihre Eingabe!", MB_OK, 0);
                m_qualitaet.SetFocus();

            } else
            {
                m_liste_qualitaet.AddString( f);
                art* nart;
                nart = new art;
                nart = nart->get_art_from_database( name, savetime);
                artliste.push_back( nart);
                m_listegarten.AddString( (*nart).get_m_name_latein());

                minqualitaet.push_back( qual);
                m_qualitaet.SetWindowTextA( "");
                m_gart.SetWindowTextA( "");
            }
        }

    }

}

void zahlungssimulierung::OnBnClickedVis()
{

    //erst mal die Daten in die Datenbank zwischenspeichern, damit mann sie besser sortieren und ausgeben kann!!!

    vector< modell::masspixelergeb>::iterator e;
    vector< modell::artenqualitaet>::iterator am;
    //AfxMessageBox("Nur noch ERgebnis speichern",MB_YESNO,0);
    bool saved;

    for( e = ergebnisliste.begin(); e != ergebnisliste.end(); e++)
    {

        for( am = (*e).artenq.begin(); am != (*e).artenq.end(); am++)
        {

            saved = daten->save_zwischenvis( (*e).m.massnahmeID, (*e).m.name,
                    (*am).art->get_artID(), (*am).art->get_m_name(),
                    (*am).qualitaet, (*e).pixelID, (*e).matrix_i, (*e).matrix_j,
                    (*e).gewinn, (*e).m.zahlung + tzahlung,
                    (*e).gq.front().gruenlandID, bundeslandID);

        }
    }

    //sonst wieder einfügen!!!!
    //
    //(CEcopayApp::GetApp())->VisualisierungKarte();
    //
    //AfxGetMainWnd()->SendMessage(WM_VisualisierungKarte) ;
    //(visdireckt::GetView())->OnInitialUpdate( gesergeb, true );
    //(visdireckt::GetView())->OnInitialUpdate();
    /*
     RECT rctB = {20,30,80,100};

     (visdireckt::GetView())->Create(("Visclass"),("Karte"), WS_CHILD|WS_VISIBLE|WS_VSCROLL|CBS_DROPDOWNLIST,rctB,this, 1); 

     */
    CCreateContext pContext;
    CMultiDocTemplate* pDocTemplate = NULL;
    pDocTemplate = new CMultiDocTemplate( IDR_EcopayYPE,
            RUNTIME_CLASS( CEcopayDoc), RUNTIME_CLASS( CChildFrame), // Benutzerspezifischer MDI-Child-Rahmen
            RUNTIME_CLASS( visdireckt));

    AfxGetApp()->AddDocTemplate( pDocTemplate);
    m_pTemplateI = new CMultiDocTemplate( IDR_EcopayYPE,
            RUNTIME_CLASS( CEcopayDoc), RUNTIME_CLASS( CChildFrame), // Benutzerspezifischer MDI-Child-Rahmen
            RUNTIME_CLASS( visdireckt));

    CMDIChildWnd * pChild = ((CMDIFrameWnd*) (AfxGetApp()->m_pMainWnd))
            ->MDIGetActive();
    CDocument * pDoc = pChild->GetActiveDocument();
    CDocTemplate* pTemplate = m_pTemplateI;
    //pDocument = pTemplate->CreateNewDocument();
    CFrameWnd* pFrame = pTemplate->CreateNewFrame( pDoc, pChild);
    pTemplate->InitialUpdateFrame( pFrame, pDoc);

    //(visdireckt::GetView())->OnInitialUpdate( gesergeb, true );
    //CDC *pDC = (visdireckt::GetView())->GetDC();

    // pContext.m_pCurrentDoc = new CMyDocument;
    /*
     pContext.m_pCurrentDoc = pChild->GetActiveDocument();
     pContext.m_pNewViewClass = RUNTIME_CLASS(visdireckt);
     visdireckt *pView =
     (visdireckt *) ((CFrameWnd*)pFrame)->CreateView(&pContext);
     ASSERT(pView);
     pView->ShowWindow(SW_NORMAL);*/
    /*
     
     kartendialog* kDlg;
     kDlg = new kartendialog;
     BOOL ret = kDlg->Create(IDD_DIALOG1);
     kDlg->ShowWindow(SW_SHOW);
     */

}
/*
 void zahlungssimulierung::OnLbnDblclkListmassnahmen()
 {
 // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein.
 CString mvwahl; 
 int nIndex = m_massnahme.GetCurSel();
 if (nIndex != CB_ERR)

 {
 m_massnahme.GetText(nIndex,mvwahl);
 // aus dem string artauswahl muss der Name und die savetime ausgelesen werden.

 }

 string::size_type posA, posB;

 string line(mvwahl);



 // Find first non-whitespace character.
 posA = line.find_first_not_of( " \t", 0);

 // Find first whitespace after that (i.e. end of token).
 posB = line.find_first_of( ",", posA);
 

 // Extract the token.
 string num = line.substr( posA, posB - posA);
 int j = atoi(num.c_str());
 //mliste.push_back(*(massnahmenliste[j]));
 m = (*(massnahmenliste[j]));
 char  ma[1000];
 stringstream returnstring;
 returnstring<<m.name<<", "<<m.mv1massnahme<<"/"<<m.abstand2massnahme<<",";
 if((m.grossvieheinheit != 0) && (m.grossvieheinheit != 99))
 returnstring<<m.grossvieheinheit<<" (GV), ";

 returnstring<<m.duengung<< " (D)";
 string result = returnstring.str();
 lstrcpy(ma, result.c_str());
 m_gmassnahme.SetWindowTextA(ma);

 }*/
/*
 void zahlungssimulierung::OnLbnDblclkListarten()
 {
 // TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein.
 CString artauswahl; 
 int nIndex = m_liste_arten.GetCurSel();
 if (nIndex != CB_ERR)

 {
 m_liste_arten.GetText(nIndex,artauswahl);
 // aus dem string artauswahl muss der Name und die savetime ausgelesen werden.

 }

 string::size_type posA, posB,posC;

 string line(artauswahl);
 



 // Find first non-whitespace character.
 posA = line.find_first_not_of( " \t", 0);
 posC = line.find_first_of( "/", 0);
 //posC = line.find_first_not_of( " \t", posD);
 


 // Find first whitespace after that (i.e. end of token).
 posB = line.find_first_of( ",", posC+1);
 
 // Iterate this until the end of the line.
 // while( string::npos != posA || string::npos != posB)
 // {
 // Extract the token.
 name = line.substr( posC+1, posB - (posC+1));

 string gname = line.substr( posA, posB - posA);
 

 CString bname(gname.c_str());

 
 //... do something with the token ...
 
 // Find next token same way as before.
 posA = line.find_first_not_of( " \t", posB+1);
 
 posB = line.find_first_of( ",", posA);
 savetime = line.substr( posA, posB - posA);
 m_gart.SetWindowTextA(bname);


 

 }
 */

void zahlungssimulierung::OnBnClickedSpeichern()
{

    time_t seconds;

    seconds = time( NULL);
    int konfiguration = int( seconds);
    savename Dlg;
    Dlg.DoModal();
    vector< massnahme>::iterator mit;
    int i = 0;
    for( mit = mliste.begin(); mit != mliste.end(); mit++)
    {
        bool saved = daten->save_konfiguration( konfiguration,
                (*mit).massnahmeID, (*mit).zahlung + tzahlung,
                pixel_pro_massnahme[ i], ergebnissavename, bundeslandID);
        i++;
    }

    vector< modell::masspixelergeb>::iterator e;
    //AfxMessageBox("Nur noch ERgebnis speichern",MB_YESNO,0);
    bool saved;

    for( e = ergebnisliste.begin(); e != ergebnisliste.end(); e++)
    {
        bool saved = daten->save_ergebnis( (*e).pixelID, (*e).m.massnahmeID,
                konfiguration, (*e).gewinn, (*e).artenq);

    }

}

void zahlungssimulierung::OnBnClickedOk()
{


    OnOK();
}

void zahlungssimulierung::OnLbnDblclkListgewmassnahmen()
{

    CString mvwahl;
    int nIndex = m_liste_gmassnahme.GetCurSel();
    if( nIndex != CB_ERR)
    {

        m_liste_gmassnahme.GetText( nIndex, mvwahl);
        m_gmassnahme.SetWindowTextA( mvwahl);
        m_liste_gmassnahme.DeleteString( nIndex);
        m_listezahlung.GetText( nIndex, mvwahl);
        m_zahlung.SetWindowTextA( mvwahl);
        m_listezahlung.DeleteString( nIndex);
        m_liste_anzahl.GetText( nIndex, mvwahl);

        string::size_type posA, posB;

        string line( mvwahl);
        char eintrag[ 1000];

        // Find first non-whitespace character.
        posA = line.find_first_of( "(", 0);

        // Find first whitespace after that (i.e. end of token).
        posB = line.find_first_of( "h", posA + 2);

        // Extract the token.
        string num = line.substr( posA + 2, posB - (posA + 2));
        lstrcpy( eintrag, num.c_str());

        m_anzahl.SetWindowTextA( eintrag);
        m_liste_anzahl.DeleteString( nIndex);

        m = mliste[ nIndex];

        vector< massnahme>::iterator it;
        it = mliste.begin();
        for( int i = 0; i < mliste.size(); i++)
        {
            if( i == nIndex)
            {
                mliste.erase( it);
                break;
            } else
                it++;
        }
        vector< int>::iterator pt;
        pt = pixel_pro_massnahme.begin();
        for( int i = 0; i < pixel_pro_massnahme.size(); i++)
        {
            if( i == nIndex)
            {
                pixel_pro_massnahme.erase( pt);
                ;
                break;
            } else
                pt++;
        }

    }

}

void zahlungssimulierung::OnLbnDblclkListgewarten()
{


    CString mvwahl;
    int nIndex = m_listegarten.GetCurSel();
    if( nIndex != CB_ERR)
    {

        m_listegarten.GetText( nIndex, mvwahl);
        m_gart.SetWindowTextA( mvwahl);
        m_listegarten.DeleteString( nIndex);
        m_liste_qualitaet.GetText( nIndex, mvwahl);
        m_qualitaet.SetWindowTextA( mvwahl);
        m_liste_qualitaet.DeleteString( nIndex);
        vector< art*>::iterator it;
        it = artliste.begin();
        name = artliste[ nIndex]->get_m_name();
        savetime = artliste[ nIndex]->savet;
        for( int i = 0; i < artliste.size(); i++)
        {
            if( i == nIndex)
            {
                artliste.erase( it);
                break;
            } else
                it++;
        }
        vector< double>::iterator pt;
        pt = minqualitaet.begin();
        for( int i = 0; i < minqualitaet.size(); i++)
        {
            if( i == nIndex)
            {
                minqualitaet.erase( pt);
                ;
                break;
            } else
                pt++;
        }

    }

}

void zahlungssimulierung::OnVScroll(
        UINT nSBCode,
        UINT nPos,
        CScrollBar* pScrollBar)
{
    // TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard.
    int nDelta;
    int nMaxPos = m_rect.Height() - m_nCurHeight;

    switch( nSBCode)
    {
        case SB_LINEDOWN:
            if( m_nScrollPos >= nMaxPos)
                return;
            nDelta = min( nMaxPos / 100, nMaxPos - m_nScrollPos);
            break;

        case SB_LINEUP:
            if( m_nScrollPos <= 0)
                return;
            nDelta = -min( nMaxPos / 100, m_nScrollPos);
            break;

        case SB_PAGEDOWN:
            if( m_nScrollPos >= nMaxPos)
                return;
            nDelta = min( nMaxPos / 10, nMaxPos - m_nScrollPos);
            break;

        case SB_THUMBPOSITION:
            nDelta = (int) nPos - m_nScrollPos;
            break;

        case SB_PAGEUP:
            if( m_nScrollPos <= 0)
                return;
            nDelta = -min( nMaxPos / 10, m_nScrollPos);
            break;

        default:
            return;
    }
    m_nScrollPos += nDelta;
    SetScrollPos( SB_VERT, m_nScrollPos, TRUE);
    ScrollWindow( 0, -nDelta);

    CDialog::OnVScroll( nSBCode, nPos, pScrollBar);
}

void zahlungssimulierung::OnSize( UINT nType, int cx, int cy)
{
    CDialog::OnSize( nType, cx, cy);

    // TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein.
    m_nCurHeight = cy;
    int nScrollMax;
    if( cy < m_rect.Height())
    {
        nScrollMax = m_rect.Height() - cy;
    } else
        nScrollMax = 0;

    SCROLLINFO si;
    si.cbSize = sizeof(SCROLLINFO);
    si.fMask = SIF_ALL; // SIF_ALL = SIF_PAGE | SIF_RANGE | SIF_POS;
    si.nMin = 0;
    si.nMax = nScrollMax;
    si.nPage = si.nMax / 10;
    si.nPos = 0;
    SetScrollInfo( SB_VERT, &si, TRUE);
}

void zahlungssimulierung::OnCbnSelchangeMassnahmenart()
{

    m_massnahmenstart.SetEditSel( 0, -1);
    m_massnahmenstart.Clear();
    m_massnahmenstart.ResetContent();
    m_massnahmenabstand.SetEditSel( 0, -1);
    m_massnahmenabstand.Clear();
    m_massnahmenabstand.ResetContent();
    massnahmenabstand3.SetEditSel( 0, -1);
    massnahmenabstand3.Clear();
    massnahmenabstand3.ResetContent();
    m_massnahmeGV.SetEditSel( 0, -1);
    m_massnahmeGV.Clear();
    m_massnahmeGV.ResetContent();
    m_massnahmetierart.SetEditSel( 0, -1);
    m_massnahmetierart.Clear();
    m_massnahmetierart.ResetContent();
    CheckDlgButton( IDC_Duengungja, 0);
    CheckDlgButton( IDC_Duengungnein, 0);
    duengung_gewaehlt = false;
    tierartgewaehlt = false;
    gvgewaehlt = false;
    CString mvwahl;
    int nIndex = m_massnahmenart.GetCurSel();
    if( nIndex != CB_ERR)
    {
        m_massnahmenart.GetLBText( nIndex, mvwahl);
        namemassnahme = mvwahl;
        vector< int> mstart;
        vector< int>::iterator k;
        mstart = daten->returnmassnahmenstart( namemassnahme);

        CString monatsv;
        for( k = mstart.begin(); k != mstart.end(); k++)
        {
            int mv = (*k);
            switch( mv)
            {
                case 1:
                    monatsv = "1. MV Januar, 1.";
                    break;

                case 13:
                    monatsv = "1. MV April, 13.";
                    break;
                case 14:
                    monatsv = "2. MV April, 14.";
                    break;
                case 15:
                    monatsv = "3. MV April, 15.";
                    break;
                case 16:
                    monatsv = "4. MV April, 16.";
                    break;
                case 17:
                    monatsv = "1. MV Mai, 17.";
                    break;
                case 18:
                    monatsv = "2. MV Mai, 18.";
                    break;
                case 19:
                    monatsv = "3. MV Mai, 19.";
                    break;
                case 20:
                    monatsv = "4. MV Mai, 20.";
                    break;
                case 21:
                    monatsv = "1. MV Juni, 21.";
                    break;
                case 22:
                    monatsv = "2. MV Juni, 22.";
                    break;
                case 23:
                    monatsv = "3. MV Juni, 23.";
                    break;
                case 24:
                    monatsv = "4. MV Juni, 24.";
                    break;
                case 25:
                    monatsv = "1. MV Juli, 25.";
                    break;
                case 26:
                    monatsv = "2. MV Juli, 26.";
                    break;
                case 27:
                    monatsv = "3. MV Juli, 27.";
                    break;
                case 28:
                    monatsv = "4. MV Juli, 28.";
                    break;
                case 29:
                    monatsv = "1. MV August, 29.";
                    break;
                case 30:
                    monatsv = "2. MV August, 30.";
                    break;
                case 31:
                    monatsv = "3. MV August, 31.";
                    break;
                case 32:
                    monatsv = "4. MV August, 32.";
                    break;
                case 33:
                    monatsv = "1. MV September, 33.";
                    break;
                case 34:
                    monatsv = "2. MV September, 34.";
                    break;
                case 35:
                    monatsv = "3. MV September, 35.";
                    break;
                case 36:
                    monatsv = "4. MV September, 36.";
                    break;
                case 37:
                    monatsv = "1. MV Oktober, 37.";
                    break;
                case 38:
                    monatsv = "2. MV Oktober, 38.";
                    break;
                case 39:
                    monatsv = "3. MV Oktober, 39.";
                    break;
                case 40:
                    monatsv = "4. MV Oktober, 40.";
                    break;
                default:
                    break;
            }

            m_massnahmenstart.AddString( monatsv);
        }
    }
}

void zahlungssimulierung::OnCbnSelchangeMassnahmenstart()
{

    m_massnahmenabstand.SetEditSel( 0, -1);
    m_massnahmenabstand.Clear();
    m_massnahmenabstand.ResetContent();
    massnahmenabstand3.SetEditSel( 0, -1);
    massnahmenabstand3.Clear();
    massnahmenabstand3.ResetContent();
    m_massnahmeGV.SetEditSel( 0, -1);
    m_massnahmeGV.Clear();
    m_massnahmeGV.ResetContent();
    m_massnahmetierart.SetEditSel( 0, -1);
    m_massnahmetierart.Clear();
    m_massnahmetierart.ResetContent();
    CheckDlgButton( IDC_Duengungja, 0);
    CheckDlgButton( IDC_Duengungnein, 0);

    duengung_gewaehlt = false;
    tierartgewaehlt = false;
    gvgewaehlt = false;
    CString mvwahl;
    int nIndex = m_massnahmenstart.GetCurSel();
    if( nIndex != CB_ERR)
    {
        m_massnahmenstart.GetLBText( nIndex, mvwahl);
        // aus dem string artauswahl muss der Name und die savetime ausgelesen werden.

        string::size_type posA, posB, posC;

        string line( mvwahl);

        // Find first , character.
        posA = line.find_first_of( ",", 0);

        // Find first whitespace after that (i.e. end of token).
        //posB = line.find_first_not_of( " /t", posA);
        posC = line.find_first_of( ".", posA + 1);

        // Extract the token.
        string num = line.substr( posA + 1, posC - (posA + 1));
        CString str;

        int j = atoi( num.c_str());
        mv1massnahme = j;
        str.Format( _T( "%d"), mv1massnahme);

        vector< int> abstand;
        vector< int>::iterator k;
        abstand = daten->returnmassnahmenabstand( namemassnahme, mv1massnahme);

        for( k = abstand.begin(); k != abstand.end(); k++)
        {
            str.Format( _T( "%d"), (*k));
            //AfxMessageBox(str);

            m_massnahmenabstand.AddString( str);
        }
    }

}

void zahlungssimulierung::OnCbnSelchangeMassnahmenabstand()
{

    CString mvwahl;
    CheckDlgButton( IDC_Duengungja, 0);
    CheckDlgButton( IDC_Duengungnein, 0);

    duengung_gewaehlt = false;
    tierartgewaehlt = false;
    gvgewaehlt = false;

    int nIndex = m_massnahmenabstand.GetCurSel();
    CString str;
    char eintrag[ 1000];
    if( nIndex != CB_ERR)
    {
        m_massnahmenabstand.GetLBText( nIndex, mvwahl);
        massnahmenabstand3.SetEditSel( 0, -1);
        massnahmenabstand3.Clear();
        massnahmenabstand3.ResetContent();
		m_massnahmeGV.SetEditSel( 0, -1);
        m_massnahmeGV.Clear();
        m_massnahmeGV.ResetContent();
        m_massnahmetierart.SetEditSel( 0, -1);
        m_massnahmetierart.Clear();
        m_massnahmetierart.ResetContent();

        abstand2massnahme = atoi( mvwahl);
        vector< int> abstand;
        vector< int>::iterator k;
        abstand = daten->returnmassnahmenabstand2( namemassnahme, mv1massnahme,abstand2massnahme);

        for( k = abstand.begin(); k != abstand.end(); k++)
        {
            str.Format( _T( "%d"), (*k));
            //AfxMessageBox(str);

            massnahmenabstand3.AddString( str);
        }
    }
}

void zahlungssimulierung::OnCbnSelchangeMassnahmenabstand4()
{
    CString mvwahl;
    CheckDlgButton( IDC_Duengungja, 0);
    CheckDlgButton( IDC_Duengungnein, 0);

    duengung_gewaehlt = false;
    tierartgewaehlt = false;
    gvgewaehlt = false;

    int nIndex = massnahmenabstand3.GetCurSel();
    CString str;
    char eintrag[ 1000];
    if( nIndex != CB_ERR)
    {
        massnahmenabstand3.GetLBText( nIndex, mvwahl);
        m_massnahmeGV.SetEditSel( 0, -1);
        m_massnahmeGV.Clear();
        m_massnahmeGV.ResetContent();
        m_massnahmetierart.SetEditSel( 0, -1);
        m_massnahmetierart.Clear();
        m_massnahmetierart.ResetContent();

        abstand3massnahme = atoi( mvwahl);
        vector < string > tierliste;
        vector< string>::iterator l;
        bool tiere;
        vector< bool> dung;

        dung = daten->returnmassnahmenduengung( namemassnahme, mv1massnahme,
                abstand2massnahme,abstand3massnahme);
        if( dung.size() == 1)
        {
            duengung = dung.front();
            duengung_gewaehlt = true;
            //Es gibt nur einen Wert für Duenger: einstellen und wahl verhindern
            if( duengung)
            {
                CheckDlgButton( IDC_Duengungja, 1);
                m_d_ja.EnableWindow( 0);

                CheckDlgButton( IDC_Duengungnein, 0);
                m_d_nein.EnableWindow( 0);
            } else
            {
                CheckDlgButton( IDC_Duengungja, 0);
                m_d_ja.EnableWindow( 0);

                CheckDlgButton( IDC_Duengungnein, 1);
                m_d_nein.EnableWindow( 0);
            }

        } else
        {
            duengung_gewaehlt = false;
            //Beide Wahlmöglichkeiten ermöglichen
            m_d_ja.EnableWindow( 1);
            m_d_nein.EnableWindow( 1);
        }

        tierliste = daten->returnmassnahmentierart( namemassnahme, mv1massnahme,
                abstand2massnahme,abstand3massnahme);

        l = tierliste.begin();
        if( (*l) != "Maßnahme ohne Vieh")
        {

            m_massnahmetierart.EnableWindow( 1);
            m_massnahmeGV.EnableWindow( 1);
            tiere = true;

            for( l = tierliste.begin(); l != tierliste.end(); l++)
            {
                lstrcpy( eintrag, (*l).c_str());

                m_massnahmetierart.AddString( eintrag);
            }

            vector< double> mGV;
            vector< double>::iterator k;
            mGV = daten->returnmassnahmenGV( namemassnahme, mv1massnahme,
                    abstand2massnahme,abstand3massnahme);

            CString monatsv;
            for( k = mGV.begin(); k != mGV.end(); k++)
            {
                if( (*k) != 99)
                {
                    str.Format( _T( "%.1f"), (*k));
                    m_massnahmeGV.AddString( str);
                } else
                {
                    m_massnahmeGV.AddString( "dem Standort angepasst");
                    grossvieheinheit = 99;
                    gvgewaehlt = true;
                }

            }
        } else
        {
            m_massnahmetierart.EnableWindow( 0);
            m_massnahmeGV.EnableWindow( 0);
            grossvieheinheit = 0;
            gvgewaehlt = true;
            tierartgewaehlt = true;
            tierart = 0;
            if( duengung_gewaehlt)
            {
                m = daten->returnmassnahme( namemassnahme, mv1massnahme,
                        abstand2massnahme,abstand3massnahme, duengung, 0, 0);
                char ma[ 1000];
                stringstream returnstring;
                returnstring << m.name << ", " << m.mv1massnahme << "/"
                        << m.abstand2massnahme <<"/"<<m.abstand3massnahme<< ",";
                //if((m.grossvieheinheit != 0) && (m.grossvieheinheit != 99))
                //returnstring<<m.grossvieheinheit<<" (GV), ";

                returnstring << m.duengung << " (D)";
                string result = returnstring.str();
                lstrcpy( ma, result.c_str());
                m_gmassnahme.SetWindowTextA( ma);
            }

        }

    }
}


void zahlungssimulierung::OnCbnSelchangeMassnahmengv()
{

    CString mvwahl;
    int nIndex = m_massnahmeGV.GetCurSel();
    CString str;
    char eintrag[ 1000];
    if( nIndex != CB_ERR)
    {
        m_massnahmeGV.GetLBText( nIndex, mvwahl);
        if( mvwahl != ("dem Standort angepasst"))
            grossvieheinheit = atof( mvwahl);
        else
            grossvieheinheit = 99;

        gvgewaehlt = true;
        if( duengung_gewaehlt && tierartgewaehlt)
        {
            m = daten->returnmassnahme( namemassnahme,mv1massnahme,abstand2massnahme,abstand3massnahme, duengung,grossvieheinheit,tierart);
            char ma[1000];
            stringstream returnstring;
            returnstring<<m.name<<", "<<m.mv1massnahme<<"/"<<m.abstand2massnahme<<"/"<<m.abstand3massnahme<<",";
            if((m.grossvieheinheit != 0) && (m.grossvieheinheit != 99))
            returnstring<<m.grossvieheinheit<<" (GV), ";

            returnstring<<m.duengung<< " (D)";
            string result = returnstring.str();
            lstrcpy(ma, result.c_str());
            m_gmassnahme.SetWindowTextA(ma);
        }
    }
}

void zahlungssimulierung::OnCbnSelchangeComboArt()
{

    CString mvwahl;
    int nIndex = m_massnahmetierart.GetCurSel();
    CString str;
    char eintrag[ 1000];
    if( nIndex != CB_ERR)
    {
        m_massnahmetierart.GetLBText( nIndex, mvwahl);
        // aus dem string artauswahl muss der Name und die savetime ausgelesen werden.

        string::size_type posA, posB;

        string line( mvwahl);

        // Find first , character.
        posA = line.find_first_not_of( " /t", 0);

        // Find first whitespace after that (i.e. end of token).
        //posB = line.find_first_not_of( " /t", posA);
        posB = line.find_first_of( ",", posA);

        // Extract the token.
        string num = line.substr( posA, posB - posA);
        CString str;

        tierart = atoi( num.c_str());
        tierartgewaehlt = true;
        if( duengung_gewaehlt && gvgewaehlt)
        {
            m = daten->returnmassnahme( namemassnahme,mv1massnahme,abstand2massnahme,abstand3massnahme, duengung,grossvieheinheit,tierart);
            char ma[1000];
            stringstream returnstring;
            returnstring<<m.name<<", "<<m.mv1massnahme<<"/"<<m.abstand2massnahme<<"/"<<m.abstand3massnahme<<",";
            if((m.grossvieheinheit != 0) && (m.grossvieheinheit != 99))
            returnstring<<m.grossvieheinheit<<" (GV), ";

            returnstring<<m.duengung<< " (D)";
            string result = returnstring.str();
            lstrcpy(ma, result.c_str());
            m_gmassnahme.SetWindowTextA(ma);
        }
    }
}

void zahlungssimulierung::OnBnClickedDuengungja()
{

    UINT check;
    duengung_gewaehlt = true;
    check = IsDlgButtonChecked( IDC_Duengungja);
    if( check == 1)
    {
        duengung = true;
        CheckDlgButton( IDC_Duengungnein, 0);
    } else
    {
        duengung = false;
        CheckDlgButton( IDC_Duengungnein, 1);
    }

    if( tierartgewaehlt && gvgewaehlt)
    {
        m = daten->returnmassnahme( namemassnahme,mv1massnahme,abstand2massnahme,abstand3massnahme, duengung,grossvieheinheit,tierart);
        char ma[1000];
        stringstream returnstring;
        returnstring<<m.name<<", "<<m.mv1massnahme<<"/"<<m.abstand2massnahme<<"/"<<m.abstand3massnahme<<",";
        if((m.grossvieheinheit != 0) && (m.grossvieheinheit != 99))
        returnstring<<m.grossvieheinheit<<" (GV), ";

        returnstring<<m.duengung<< " (D)";
        string result = returnstring.str();
        lstrcpy(ma, result.c_str());
        m_gmassnahme.SetWindowTextA(ma);
    }

}

void zahlungssimulierung::OnBnClickedDuengungnein()
{

    UINT check;
    duengung_gewaehlt = true;
    check = IsDlgButtonChecked( IDC_Duengungnein);
    if( check == 1)
    {
        duengung = false;
        CheckDlgButton( IDC_Duengungja, 0);
    } else
    {
        duengung = true;
        CheckDlgButton( IDC_Duengungja, 1);
    }

    if( tierartgewaehlt && gvgewaehlt)
    {
        m = daten->returnmassnahme( namemassnahme,mv1massnahme,abstand2massnahme,abstand3massnahme, duengung,grossvieheinheit,tierart);
        char ma[1000];
        stringstream returnstring;
        returnstring<<m.name<<", "<<m.mv1massnahme<<"/"<<m.abstand2massnahme<<"/"<<m.abstand3massnahme<<",";
        if((m.grossvieheinheit != 0) && (m.grossvieheinheit != 99))
        returnstring<<m.grossvieheinheit<<" (GV), ";

        returnstring<<m.duengung<< " (D)";
        string result = returnstring.str();
        lstrcpy(ma, result.c_str());
        m_gmassnahme.SetWindowTextA(ma);
    }

}

void zahlungssimulierung::OnCbnSelchangeComboartnamen()
{

    int nIndex = m_arten_name.GetCurSel();
    CString str;
    vector < CString > savetimes;
    vector< CString>::iterator i;
    char eintrag[ 1000];
    if( nIndex != CB_ERR)
    {
        //m_arten_namenlatein.EnableWindow(0);
        m_arten_savetime.SetEditSel( 0, -1);
        m_arten_savetime.Clear();
        m_arten_savetime.ResetContent();

        artg = true;
        m_arten_name.GetLBText( nIndex, str);
        savetimes = daten->returnartspeicherdatum( str, "name");
        namenartlatein = daten->returnname( "name_latein", "name", str);
        int Index = m_arten_namenlatein.FindStringExact( -1, namenartlatein);
        m_arten_namenlatein.SetCurSel( Index);
        nameart = str;
        name = LPCTSTR( str);

        i = savetimes.begin();
        while( i != savetimes.end())
        {

            m_arten_savetime.AddString( *i);
            i++;
        }

        // aus dem string artauswahl muss der Name und
    }

}

void zahlungssimulierung::OnCbnSelchangeComboartnamenlatein()
{

    int nIndex = m_arten_namenlatein.GetCurSel();
    CString str;
    vector < CString > savetimes;
    vector< CString>::iterator i;
    char eintrag[ 1000];
    if( nIndex != CB_ERR)
    {
        //m_arten_namenlatein.EnableWindow(0);
        m_arten_savetime.SetEditSel( 0, -1);
        m_arten_savetime.Clear();
        m_arten_savetime.ResetContent();
        artg = true;
        m_arten_namenlatein.GetLBText( nIndex, str);
        savetimes = daten->returnartspeicherdatum( str, "name_latein");
        CString artn = daten->returnname( "name", "name_latein", str);
        //AfxMessageBox(nameart);

        int Index = m_arten_name.FindStringExact( -1, artn);
        m_arten_name.SetCurSel( Index);
        nameart = artn;
        name = LPCTSTR( artn);

        i = savetimes.begin();
        while( i != savetimes.end())
        {

            m_arten_savetime.AddString( *i);
            i++;
        }

        // aus dem string artauswahl muss der Name und
    }

}

void zahlungssimulierung::OnCbnSelchangeComboartsavetime()
{

    int nIndex = m_arten_savetime.GetCurSel();
    CString str;
    char eintrag[ 1000];
    if( nIndex != CB_ERR)
    {
        //m_arten_namenlatein.EnableWindow(0);

        m_arten_savetime.GetLBText( nIndex, str);

        savetime = LPCTSTR( str);

        if( artg)
        {
            m_gart.SetWindowTextA( nameart);
        }

        // aus dem string artauswahl muss der Name und
    }

}

void zahlungssimulierung::OnCbnSelchangeBundesland()
{
    // TODO: Add your control notification handler code here
    CString bland;
    int nIndex = m_bundesland.GetCurSel();
    if( nIndex != CB_ERR)
    {
        m_bundesland.GetLBText( nIndex, bland);
        bundeslandID = daten->returnbundeslandID( bland);
        blandgew = true;
    } else
        blandgew = false;
}

HBRUSH zahlungssimulierung::OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{

    HBRUSH hbr = CDialog::OnCtlColor( pDC, pWnd, nCtlColor);
    int ID = pWnd->GetDlgCtrlID();

    if( ID == IDD_Zahlung)
    {
        HBRUSH hBrush = CreateSolidBrush( RGB( 253, 255, 255));
        return hBrush;
    }

    if( (ID == IDC_STATIC_1) || (ID == IDC_STATIC_2))
    {
        pDC->SetTextColor( RGB( 153, 0, 153)); // Setzt die Textfarbe 
        pDC->SetBkMode( TRANSPARENT);

        // Return handle to our CBrush object
        //hbr = m_brush;
    }

    // TODO:  Ändern Sie hier alle Attribute für den DC.

    if( ID == IDC_STATIC || ID == IDC_Duengungja || ID == IDC_Duengungnein
            || ID == IDC_Hoch || ID == IDC_Tief || ID == IDC_keine
            || ID == IDC_ausgeArt || ID == IDC_Gmassnahme)
    {
        pDC->SetTextColor( RGB( 72, 61, 139)); // Setzt die Textfarbe auf 
        pDC->SetBkMode( TRANSPARENT);
        //HBRUSH hBrush = CreateSolidBrush(RGB(255,0,0)); //Setzt die Hintergrundfarbe auf rot
        // return (HBRUSH) hBrush;
    }

    // TODO:  Gib einen anderen Pinsel zurück, wenn der Standard nicht erwünscht ist.
    hbr = m_brush;
    return hbr;

}
/*
 void zahlungssimulierung::OnBnClickedButton1()
 {
 // TODO: Add your control notification handler code here
 m = daten->returnreferenz(1);
 char  ma[1000];
 stringstream returnstring;
 returnstring<<"Referenz, 19/6/6, 1 (D)";
 
 string result = returnstring.str();
 lstrcpy(ma, result.c_str());
 m_gmassnahme.SetWindowTextA(ma);



 }*/


