--- ResultDetailsDialog.cpp 2006/09/01 02:24:38 21 +++ ResultDetailsDialog.cpp 2006/09/04 08:54:27 37 @@ -1,11 +1,18 @@ -// ResultDetailsDialog.cpp : implementation file -// +/* + * Developed by Torben H. Nielsen + */ + #include "stdafx.h" #include "h6-udlånssystem.h" #include "ResultDetailsDialog.h" #include ".\resultdetailsdialog.h" #include "CommonStorage.h" +#include "DatabaseLayer.h" +#include "CheckoutDialog.h" +#include "SearchDialog.h" +#include "ResultDialog.h" +#include "MyTabCtrl.h" // ResultDetailsDialog dialog @@ -33,6 +40,10 @@ ON_EN_CHANGE(IDC_PLACEMENT, OnEnChangePlacement) ON_EN_CHANGE(IDC_STATUS, OnEnChangeStatus) ON_BN_CLICKED(IDC_CLOSE, OnBnClickedClose) + ON_BN_CLICKED(IDC_RETURN, OnBnClickedReturn) + ON_BN_CLICKED(IDC_CHECKOUT, OnBnClickedCheckout) + ON_BN_CLICKED(IDC_RESERVE, OnBnClickedReserve) + ON_BN_CLICKED(IDC_DELRES, OnBnClickedDelres) END_MESSAGE_MAP() @@ -61,10 +72,7 @@ //load Equipment::checkouts CListCtrl *checkouts = (CListCtrl*) GetDlgItem(IDC_CHECKOUTS); - checkouts->InsertColumn(0,"Inits"); - checkouts->InsertColumn(1,"Start date"); - checkouts->InsertColumn(2,"Return date"); - checkouts->InsertColumn(3,"Number of days"); + checkouts->DeleteAllItems(); for (int i=0; iInsertItem(i,currentdata.checkouts[i].inits); @@ -79,16 +87,22 @@ // load Equipment::reservations CListCtrl *reservations = (CListCtrl*) GetDlgItem(IDC_RESERVATIONS); - reservations->InsertColumn(0,"Inits"); - reservations->InsertColumn(1,"Start date"); - reservations->InsertColumn(2,"Number of days"); + reservations->DeleteAllItems(); + for (int i=0; iInsertItem(i, currentdata.reservations[i].inits); - reservations->SetItemText(nItem,1, currentdata.reservations[i].startdate); - reservations->SetItemText(nItem,2, currentdata.reservations[i].numdays); + CString tmp; + tmp.Format("%d", i+1); + int nItem = reservations->InsertItem(i, tmp); + reservations->SetItemText(nItem,1, currentdata.reservations[i].inits); + reservations->SetItemText(nItem,2, currentdata.reservations[i].startdate); + } + if (currentdata.reservations.size() > 0) + GetDlgItem(IDC_DELRES)->EnableWindow(true); + + reservations->SetColumnWidth(0,LVSCW_AUTOSIZE_USEHEADER); reservations->SetColumnWidth(1,LVSCW_AUTOSIZE_USEHEADER); reservations->SetColumnWidth(2,LVSCW_AUTOSIZE_USEHEADER); @@ -105,15 +119,39 @@ { CDialog::OnInitDialog(); - + CListCtrl *checkouts = (CListCtrl*) GetDlgItem(IDC_CHECKOUTS); + checkouts->SetExtendedStyle( LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT ); + checkouts->InsertColumn(0,"Inits"); + checkouts->InsertColumn(1,"Start date"); + checkouts->InsertColumn(2,"Return date"); + checkouts->InsertColumn(3,"Number of days"); + checkouts->SetColumnWidth(0,LVSCW_AUTOSIZE_USEHEADER); + checkouts->SetColumnWidth(1,LVSCW_AUTOSIZE_USEHEADER); + checkouts->SetColumnWidth(2,LVSCW_AUTOSIZE_USEHEADER); + checkouts->SetColumnWidth(3,LVSCW_AUTOSIZE_USEHEADER); + + CListCtrl *reservations = (CListCtrl*) GetDlgItem(IDC_RESERVATIONS); + reservations->SetExtendedStyle( LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT ); + reservations->InsertColumn(0,"#"); + reservations->InsertColumn(1,"Inits"); + reservations->InsertColumn(2,"Reservation date"); + reservations->SetColumnWidth(0,LVSCW_AUTOSIZE_USEHEADER); + reservations->SetColumnWidth(1,LVSCW_AUTOSIZE_USEHEADER); + reservations->SetColumnWidth(2,LVSCW_AUTOSIZE_USEHEADER); + + + GetDlgItem(IDC_RESERVE)->EnableWindow(CommonStorage::Instance()->getAdmin()); GetDlgItem(IDC_CHECKOUT)->EnableWindow(CommonStorage::Instance()->getAdmin()); GetDlgItem(IDC_RETURN)->EnableWindow(CommonStorage::Instance()->getAdmin()); CString status = CommonStorage::Instance()->getSearchResult()[m_resultIndex].status; - if (status == "Ledig") + if (status == "Ledig") { GetDlgItem(IDC_RETURN)->EnableWindow(false); + GetDlgItem(IDC_RESERVE)->EnableWindow(false); + } + if (status == "Udlånt") GetDlgItem(IDC_CHECKOUT)->EnableWindow(false); if (status == "Reserveret") @@ -125,6 +163,10 @@ return TRUE; } +///////////////////////////////////////////// +// a normal EditControl is prettier than a greyed out read-only +// So to simulate a read-only field, we reload the data every time the +// user tries to modify the data void ResultDetailsDialog::OnEnChangeBarcode() { LoadData(); @@ -145,15 +187,91 @@ LoadData(); } - - void ResultDetailsDialog::OnEnChangeStatus() { LoadData(); } - void ResultDetailsDialog::OnBnClickedClose() { OnOK(); } + +////////////////////////////////////////////////// + +void ResultDetailsDialog::OnBnClickedReturn() +{ + CString barcode = CommonStorage::Instance()->getSearchResult()[m_resultIndex].barcode; + + CommonStorage::Instance()->getDBLayer()->ReturnEquipment(barcode); + ((SearchDialog*)CommonStorage::Instance()->getTabCtrl()->m_tabs[0])->OnBnClickedSearch(); + ((ResultDialog*)CommonStorage::Instance()->getTabCtrl()->m_tabs[1])->LoadResults(); + OnOK(); +} + +void ResultDetailsDialog::OnBnClickedCheckout() +{ + CString status = CommonStorage::Instance()->getSearchResult()[m_resultIndex].status; + CheckoutDialog check; + + check.m_checkoutMode = true; + + + Reservation topReservation; + if (status == "Reserveret") { + topReservation = CommonStorage::Instance()->getSearchResult()[m_resultIndex].reservations[0]; + check.m_reservedTo = topReservation.inits; + } + + if (check.DoModal() == IDOK) + { + DatabaseLayer *dblayer = CommonStorage::Instance()->getDBLayer(); + Person p = dblayer->GetPerson(check.m_inits); + + Equipment eq; + GetDlgItem(IDC_BARCODE)->GetWindowText(eq.barcode); + + dblayer->CheckoutEquipment(p, eq, atoi(check.m_numdays) ); + + if (status == "Reserveret") { //if the equipment was reserved, we must delete the reservation + dblayer->DeleteReservation(eq.barcode, topReservation.reservationID); + } + ((SearchDialog*)CommonStorage::Instance()->getTabCtrl()->m_tabs[0])->OnBnClickedSearch(); + ((ResultDialog*)CommonStorage::Instance()->getTabCtrl()->m_tabs[1])->LoadResults(); + OnOK(); + } +} + +void ResultDetailsDialog::OnBnClickedReserve() +{ + CheckoutDialog check; + check.m_checkoutMode = false; + if (check.DoModal() == IDOK) + { + DatabaseLayer *dblayer = CommonStorage::Instance()->getDBLayer(); + Person p = dblayer->GetPerson(check.m_inits); + CString barcode; + GetDlgItem(IDC_BARCODE)->GetWindowText(barcode); + dblayer->EquipmentReservation(barcode,p); + + ((SearchDialog*)CommonStorage::Instance()->getTabCtrl()->m_tabs[0])->OnBnClickedSearch(); + ((ResultDialog*)CommonStorage::Instance()->getTabCtrl()->m_tabs[1])->LoadResults(); + LoadListControls(); + + } +} + +void ResultDetailsDialog::OnBnClickedDelres() +{ + int sel = ((CListCtrl*)GetDlgItem(IDC_RESERVATIONS))->GetSelectionMark(); + if (sel != -1) { + CString reservationID = CommonStorage::Instance()->getSearchResult()[m_resultIndex].reservations[sel].reservationID; + CString barcode = CommonStorage::Instance()->getSearchResult()[m_resultIndex].barcode; + CommonStorage::Instance()->getDBLayer()->DeleteReservation(barcode, reservationID); + ((SearchDialog*)CommonStorage::Instance()->getTabCtrl()->m_tabs[0])->OnBnClickedSearch(); + ((ResultDialog*)CommonStorage::Instance()->getTabCtrl()->m_tabs[1])->LoadResults(); + LoadListControls(); + } else { + MessageBox("No reservation is selected"); + } +}