/********************************************************************/
/* 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()