/********************************************************************/
/*         Datei / Version|.../SpritkostenverwaltngView.cpp    / 1.0    */
/*        Autor / Erstellt|Christian Hayer / 31.05.2003                */
/*                        |Bernd Göhringer                            */
/*         Autor / Update|                                            */
/*----------------------|-------------------------------------------*/
/*             Copyright|FHTE - IT2a (Gruppe: PetrolSoft)            */
/*                Internet|http://it.chayer.de/petrolsoft                */
/*                 Email|petrolsoft@it.chayer.de                    */
/*----------------------|-------------------------------------------*/
/*                 Aufgabe|Anzeige des Hauptfensters (Inhalte)        */
/*----------------------|-------------------------------------------*/
/*                 Eingang|keine                                        */
/*----------------------|-------------------------------------------*/
/*                 Ausgang|keine                                        */
/*----------------------|-------------------------------------------*/
/* Verwendete Funktionen|OnFahrzeuge(); OnTankdaten();                */
/*                        |OnAuswertung(); OnPaint();                    */
/*                        |OnQueryDragIcon();                            */
/*                        |OnItemchangedListCtrl();                    */
/*                        |OnDblclkFrzAuswahl();                        */
/*                        |OnRclickFahrzeugauswahl();                    */
/*----------------------|-------------------------------------------*/
/*     Globale Variablen|db, frzset                                    */
/*----------------------|-------------------------------------------*/
/*        Fehlerbehandlung|keine                                        */
/********************************************************************/

/********************************************************************/
/*                                                                    */
/* 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.            */
/*                                                                    */
/********************************************************************/

/////////////////////////////////////////////////////////////////////////////
// SpritkostenverwaltungView.cpp : implementation of the CSpritkostenverwaltungView class
//

#include "stdafx.h"
#include "Spritkostenverwaltung.h"

#include "SpritkostenverwaltungDoc.h"
#include "SpritkostenverwaltungView.h"

#include "Fahrzeuge.h"
#include "Tankdaten.h"
#include "Auswertung.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

    CDaoDatabase db;
    CDaoRecordset frzset(&db);


/////////////////////////////////////////////////////////////////////////////
// CSpritkostenverwaltungView

IMPLEMENT_DYNCREATE(CSpritkostenverwaltungView, CFormView)

BEGIN_MESSAGE_MAP(CSpritkostenverwaltungView, CFormView)
    //{{AFX_MSG_MAP(CSpritkostenverwaltungView)
    ON_BN_CLICKED(IDC_Fahrzeuge, OnFahrzeuge)
    ON_BN_CLICKED(IDC_Tankdaten, OnTankdaten)
    ON_BN_CLICKED(IDC_Auswertung, OnAuswertung)
    ON_NOTIFY(LVN_ITEMCHANGED, IDC_Fahrzeugauswahl, OnItemchangedListCtrl)
    ON_NOTIFY(NM_DBLCLK, IDC_Fahrzeugauswahl, OnDblclkFrzAuswahl)
    ON_NOTIFY(NM_RCLICK, IDC_Fahrzeugauswahl, OnRclickFahrzeugauswahl)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSpritkostenverwaltungView construction/destruction

CSpritkostenverwaltungView::CSpritkostenverwaltungView()
    : CFormView(CSpritkostenverwaltungView::IDD)
{
    //{{AFX_DATA_INIT(CSpritkostenverwaltungView)
    m_Besitzer = _T("");
    m_FrzBesitzer = _T("");
    m_FrzBezeichnung = _T("");
    m_FrzLastStand = 0;
    m_FrzLastTankdatum = _T("");
    m_FrzID = 0;
    //}}AFX_DATA_INIT
    // TODO: add construction code here

}

CSpritkostenverwaltungView::~CSpritkostenverwaltungView()
{

}

/////////////////////////////////////////////////////////////////////////////
// CSpritkostenverwaltungView Datenaustausch
void CSpritkostenverwaltungView::DoDataExchange(CDataExchange* pDX)
{
    CFormView::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CSpritkostenverwaltungView)
    DDX_Control(pDX, IDC_Tankdaten, m_Tankdaten);
    DDX_Control(pDX, IDC_Auswertung, m_Auswertung);
    DDX_Control(pDX, IDC_Fahrzeugauswahl, m_FrzAuswahlC);
    DDX_Text(pDX, IDC_FrzBesitzer, m_FrzBesitzer);
    DDX_Text(pDX, IDC_FrzBezeichnung, m_FrzBezeichnung);
    DDX_Text(pDX, IDC_FrzLastStand, m_FrzLastStand);
    DDX_Text(pDX, IDC_FrzLastTankdatum, m_FrzLastTankdatum);
    DDX_Text(pDX, IDC_FrzID, m_FrzID);
    //}}AFX_DATA_MAP
}

/////////////////////////////////////////////////////////////////////////////
// CSpritkostenverwaltungView message handlers
BOOL CSpritkostenverwaltungView::PreCreateWindow(CREATESTRUCT& cs)
{
    // TODO: Modify the Window class or styles here by modifying
    // the CREATESTRUCT cs

    return CFormView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// Bei erstem Update des Dialogs
void CSpritkostenverwaltungView::OnInitialUpdate()
{

    CFormView::OnInitialUpdate();
    GetParentFrame()->RecalcLayout();    // Größe des Parent Frame bestimmen

    OnInitDialog();    // Dialog initialisieren
    RefreshList();    // Liste aktualisieren

    CFormView::OnInitialUpdate();
    ResizeParentToFit(FALSE);    // Größe des Parent Frame anpassen
}    // OnInitialUpdate()

/////////////////////////////////////////////////////////////////////////////
// Bei Button Fahrzeugverwaltung
void CSpritkostenverwaltungView::OnFahrzeuge()
{
    CFahrzeugeView FahrzeugDlg;
    FahrzeugDlg.searchID = m_FrzID;    // Übergabeparameter Fahrzeug_ID setzen
    FahrzeugDlg.DoModal();    // Dialog Fahrzeugverwaltung öffnen
    RefreshList();            // Liste aktualisieren
}    // OnFahrzeuge()

/////////////////////////////////////////////////////////////////////////////
// Bei Button Tankdaten bearbeiten
void CSpritkostenverwaltungView::OnTankdaten()
{
    CTankdatenView TankdatenDlg;
    if (!m_FrzID)    // Wenn kein Fahrzeug ausgewählt ist => Meldung ausgeben
    {
        AfxMessageBox("Es wurde kein Fahrzeug ausgewählt!");    
        return;
    }
    TankdatenDlg.searchID = m_FrzID;    // Übergabeparameter Fahrzeug_ID setzen
    TankdatenDlg.DoModal();        // Dialog Tankdaten bearbeiten öffnen
}    // OnTankdaten()

/////////////////////////////////////////////////////////////////////////////
// Bei Button Auswertung
void CSpritkostenverwaltungView::OnAuswertung()
{
    CAuswertungView AuswertungDlg;
    if (!m_FrzID)    // Wenn kein Fahrzeug ausgewählt ist => Meldung ausgeben
    {
        AfxMessageBox("Es wurde kein Fahrzeug ausgewählt!");    
        return;
    }
    AuswertungDlg.searchID = m_FrzID;    // Übergabeparameter Fahrzeug_ID setzen
    AuswertungDlg.DoModal();    // Dialog Auswertung öffnen
}    // OnAuswertung

/////////////////////////////////////////////////////////////////////////////
// Dialog initialisieren
BOOL CSpritkostenverwaltungView::OnInitDialog()
{

    m_FrzAuswahlC.InsertColumn(0,"ID",LVCFMT_RIGHT,32,0); // Spalte für ID anlagen
    m_FrzAuswahlC.InsertColumn(1,"Fahrzeugbezeichnung",0,150,0); // Spalte für Fahrzeugbezeichnung anlagen
    m_FrzAuswahlC.InsertColumn(2,"Fahrzeugdaten",0,150,0); // Spalte für Fahrzeugdaten anlagen
    m_FrzAuswahlC.InsertColumn(3,"Fahrzeugbesitzer",0,150,0); // Spalte für Fahrzeugbesitzer anlagen
    m_FrzAuswahlC.InsertColumn(4,"Anmerkung",0,160,0); // Spalte für Anmerkung anlagen

    ListView_SetExtendedListViewStyle(m_FrzAuswahlC,LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); // Gitternetz und Ganze Zeile wählen

    return TRUE; // return TRUE unless you set the focus to a control
}    // OnInitDialog()

/////////////////////////////////////////////////////////////////////////////
// Listbox ganze Zeile auswählen
void CSpritkostenverwaltungView::AddStyleItem(LPCTSTR lpszItem, BOOL bState, DWORD dwData)
{
    int nPos = max(m_FrzAuswahlC.GetItemCount(),0);
    nPos = m_FrzAuswahlC.InsertItem(nPos, lpszItem);
    m_FrzAuswahlC.SetItemData(nPos, dwData);
    // Use macro to set check state
    ListView_SetItemState (m_FrzAuswahlC.m_hWnd, nPos, UINT((int(bState) + 1) << 12), LVIS_STATEIMAGEMASK);
}    // AddStyleItem()

/////////////////////////////////////////////////////////////////////////////
// Listbox aktualisieren
void CSpritkostenverwaltungView::RefreshList()
{
    COleVariant var,i_var; // Variablen für den Datenaustausch mit der DB
    var.ChangeType(VT_BSTR, NULL);
    i_var.ChangeType(VT_I4, NULL);
    CString strItem,sql;    // locale CString-Variable
    CString Fahrzeug,Fahrzeugdaten,Besitzer,Fahrzeug_ID,Anmerkung,ID; // CString-Variablen für Liete und Felder

    m_FrzAuswahlC.DeleteAllItems(); // Listbox zurücksetzen

    db.Open("PetrolSoft_DB.mdb"); // Datenbank öffnen
    frzset.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM Fahrzeugdaten ORDER BY Fahrzeug_ID DESC",NULL);

    while(!frzset.IsEOF()) // bis zum Ende des RecordSet
    {
        // Daten aus RecordSet auslesen
        frzset.GetFieldValue("Fahrzeug_ID",i_var);
        strItem.Format(_T("%6d"), (int)i_var.pbstrVal);
        m_FrzAuswahlC.InsertItem(0,strItem,0);
        frzset.GetFieldValue("Fahrzeugbezeichnung",var);
        Fahrzeug = (LPCSTR)var.pbstrVal;
        m_FrzAuswahlC.SetItemText(0,1,Fahrzeug);
        frzset.GetFieldValue("Fahrzeugdaten",var);
        Fahrzeugdaten = (LPCSTR)var.pbstrVal;
        m_FrzAuswahlC.SetItemText(0,2,Fahrzeugdaten);
        frzset.GetFieldValue("Besitzer",var);
        Besitzer = (LPCSTR)var.pbstrVal;
        m_FrzAuswahlC.SetItemText(0,3,Besitzer);
        frzset.GetFieldValue("Anmerkung",var);
        Anmerkung = (LPCSTR)var.pbstrVal;
        if (var.vt != 1) m_FrzAuswahlC.SetItemText(0,4,Anmerkung);
        frzset.MoveNext();    // gehe zum nächsten Datensatz
    }

    frzset.Close();    // RecordSte schließen
    db.Close();    // Datenbank schließen

    // Felder aktualisieren
    UpdateData(TRUE);
    m_FrzBezeichnung = "kein Fahrzeug ausgewählt";
    m_FrzBesitzer = "";
    m_FrzLastTankdatum = "keine Daten";
    m_FrzLastStand = 0;
    m_FrzID = 0;
    m_Fahrzeug_ID = 0;
    m_Tankdaten.EnableWindow(FALSE);
    m_Auswertung.EnableWindow(FALSE);
    UpdateData(FALSE);
}    // RefreshList()

/////////////////////////////////////////////////////////////////////////////
// Bei Änderungen innerhalb der Liste (z.B. Klick mit der Maus)
void CSpritkostenverwaltungView::OnItemchangedListCtrl(NMHDR* pNMHDR, LRESULT* pResult)
{
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    COleVariant var; // Start Variables
    COleVariant i_var;
    COleVariant d_var;
    var.ChangeType(VT_BSTR, NULL);
    i_var.ChangeType(VT_I4, NULL);
    CString sql,FrzID;
int nSelected;

    nSelected = pNMListView->iItem;    // Nummer des selektierten Listenelements
    if (nSelected >= 0)    // wenn ein Element ausgewählt ist
    {
        db.Open("PetrolSoft_DB.mdb"); // Datenbank öffnen
        
        FrzID = m_FrzAuswahlC.GetItemText(nSelected, 0);    // ID des selektiereten Fahrzeuges aus Liste auslesen

        sql.Format(_T("SELECT * FROM Tankdaten WHERE Fahrzeug_ID = %d ORDER BY kmStand"),strtol(FrzID,0,10));
        frzset.Open(AFX_DAO_USE_DEFAULT_TYPE,sql,NULL);    // Recordset Tankdaten öffnen

        if(!frzset.IsEOF()) // wenn Tankdaten vorhanden
        {
            frzset.MoveLast();
            frzset.GetFieldValue("Datum",d_var);
            frzset.GetFieldValue("kmStand",i_var);
        }
        frzset.Close();    // RecordSet Tankdaten schließen

        // Felder aktualisieren
        UpdateData(TRUE);
        m_FrzBezeichnung = m_FrzAuswahlC.GetItemText(nSelected, 1);
        m_FrzBesitzer = m_FrzAuswahlC.GetItemText(nSelected, 3);
        if (COleDateTime(d_var) != 0)    // wenn Datum, d.h. Tankdaten vorhanden
        {
            m_FrzLastTankdatum = COleDateTime(d_var).Format();
            m_FrzLastStand = (UINT)i_var.pbstrVal;
        }
        else    // wenn keine Tankdaten vorhanden
        {
            sql.Format(_T("SELECT * FROM Fahrzeugdaten WHERE Fahrzeug_ID = %d"),strtol(FrzID,0,10));
            frzset.Open(AFX_DAO_USE_DEFAULT_TYPE,sql,NULL);    // RecordSet Fahrzeuge öffnen

            m_FrzLastTankdatum = "keine Daten";
            frzset.GetFieldValue("kmStand",i_var);    // erster km-Stand aus Fahrzeugdaten auslesen
            m_FrzLastStand = (UINT)i_var.pbstrVal;

            frzset.Close();    // RecordSet Fahrzeuge schließen
        }
        m_FrzID = strtol(FrzID,0,10);
        m_Fahrzeug_ID = strtol(FrzID,0,10);
        m_Tankdaten.EnableWindow(TRUE);
        m_Auswertung.EnableWindow(TRUE);
        UpdateData(FALSE);

        db.Close();    // Datenbank schließen

        *pResult = 0;
    }
}    // OnItemchangedListCtrl)

/////////////////////////////////////////////////////////////////////////////
// Bei Doppelklick mit der linken Maustaste innerhalb der Liste
void CSpritkostenverwaltungView::OnDblclkFrzAuswahl(NMHDR* pNMHDR, LRESULT* pResult)
{
    OnAuswertung();    // Auswertung starten
    
    *pResult = 0;
}    // OnDblclkFrzAuswahl()

/////////////////////////////////////////////////////////////////////////////
// Bei Klick mit der rechten Maustaste innerhalb der Liste
void CSpritkostenverwaltungView::OnRclickFahrzeugauswahl(NMHDR* pNMHDR, LRESULT* pResult)
{
    OnTankdaten();    // Tankdaten starten
    
    *pResult = 0;
}    // OnRclickFahrzeugauswahl()