--- ResultDetailsDialog.cpp 2006/09/01 03:08:06 24 +++ ResultDetailsDialog.cpp 2006/09/03 09:17:00 29 @@ -6,6 +6,8 @@ #include "ResultDetailsDialog.h" #include ".\resultdetailsdialog.h" #include "CommonStorage.h" +#include "DatabaseLayer.h" +#include "CheckoutDialog.h" // ResultDetailsDialog dialog @@ -33,6 +35,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,6 +67,7 @@ //load Equipment::checkouts 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"); @@ -79,16 +86,25 @@ // 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->SetExtendedStyle( LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT ); + reservations->InsertColumn(0,"#"); + reservations->InsertColumn(1,"Inits"); + reservations->InsertColumn(2,"Reservation date"); + 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); @@ -112,8 +128,11 @@ 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,7 +144,7 @@ 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 @@ -158,3 +177,74 @@ { OnOK(); } + +////////////////////////////////////////////////// + +void ResultDetailsDialog::OnBnClickedReturn() +{ + CString barcode = CommonStorage::Instance()->getSearchResult()[m_resultIndex].barcode; + + CommonStorage::Instance()->getDBLayer()->ReturnEquipment(barcode); + MessageBox("The Item is returned, but the changes won't show until the next query"); + 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); + } + + 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); + OnOK(); + } +} + +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); + MessageBox("Reservation deleted, but won't show until next search"); + } else { + MessageBox("No reservation is selected"); + } +}