--- ResultDetailsDialog.cpp 2006/09/03 10:10:19 31 +++ ResultDetailsDialog.cpp 2006/09/12 09:09:30 54 @@ -10,6 +10,9 @@ #include "CommonStorage.h" #include "DatabaseLayer.h" #include "CheckoutDialog.h" +#include "SearchDialog.h" +#include "ResultDialog.h" +#include "MyTabCtrl.h" // ResultDetailsDialog dialog @@ -51,13 +54,12 @@ if (m_loadingData == true) return; m_loadingData = true; - Equipment currentdata = CommonStorage::Instance()->getSearchResult()[m_resultIndex]; - GetDlgItem(IDC_BARCODE)->SetWindowText(currentdata.barcode); - GetDlgItem(IDC_NAME)->SetWindowText(currentdata.name); - GetDlgItem(IDC_DESCRIPTION)->SetWindowText(currentdata.description); - GetDlgItem(IDC_PLACEMENT)->SetWindowText(currentdata.placement); - GetDlgItem(IDC_STATUS)->SetWindowText(currentdata.status); + GetDlgItem(IDC_BARCODE)->SetWindowText(m_equipment.barcode); + GetDlgItem(IDC_NAME)->SetWindowText(m_equipment.name); + GetDlgItem(IDC_DESCRIPTION)->SetWindowText(m_equipment.description); + GetDlgItem(IDC_PLACEMENT)->SetWindowText(m_equipment.placement); + GetDlgItem(IDC_STATUS)->SetWindowText(m_equipment.status); m_loadingData = false; } @@ -65,21 +67,16 @@ void ResultDetailsDialog::LoadListControls(void) { if (CommonStorage::Instance()->getAdmin() ) { - Equipment currentdata = CommonStorage::Instance()->getSearchResult()[m_resultIndex]; //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"); - checkouts->InsertColumn(3,"Number of days"); + checkouts->DeleteAllItems(); - for (int i=0; iInsertItem(i,currentdata.checkouts[i].inits); - checkouts->SetItemText(nItem,1,currentdata.checkouts[i].startdate); - checkouts->SetItemText(nItem,2,currentdata.checkouts[i].enddate); - checkouts->SetItemText(nItem,3,currentdata.checkouts[i].numdays); + for (int i=0; iInsertItem(i, m_equipment.checkouts[i].inits); + checkouts->SetItemText(nItem,1, m_equipment.checkouts[i].startdate); + checkouts->SetItemText(nItem,2, m_equipment.checkouts[i].enddate); + checkouts->SetItemText(nItem,3, m_equipment.checkouts[i].numdays); } checkouts->SetColumnWidth(0,LVSCW_AUTOSIZE_USEHEADER); checkouts->SetColumnWidth(1,LVSCW_AUTOSIZE_USEHEADER); @@ -88,22 +85,19 @@ // load Equipment::reservations 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->DeleteAllItems(); - for (int i=0; iInsertItem(i, tmp); - reservations->SetItemText(nItem,1, currentdata.reservations[i].inits); - reservations->SetItemText(nItem,2, currentdata.reservations[i].startdate); + reservations->SetItemText(nItem, 1, m_equipment.reservations[i].inits); + reservations->SetItemText(nItem, 2, m_equipment.reservations[i].startdate); } - if (currentdata.reservations.size() > 0) + if (m_equipment.reservations.size() > 0) GetDlgItem(IDC_DELRES)->EnableWindow(true); @@ -123,23 +117,36 @@ { 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") { - GetDlgItem(IDC_RETURN)->EnableWindow(false); - GetDlgItem(IDC_RESERVE)->EnableWindow(false); - } - - if (status == "Udlånt") - GetDlgItem(IDC_CHECKOUT)->EnableWindow(false); - if (status == "Reserveret") - GetDlgItem(IDC_RETURN)->EnableWindow(false); + m_equipment = CommonStorage::Instance()->getDBLayer()->GetEquipment(m_barcode); + + EnableControls(); LoadData(); LoadListControls(); @@ -184,24 +191,22 @@ 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(); + DatabaseLayer *dblayer = CommonStorage::Instance()->getDBLayer(); + dblayer->ReturnEquipment(m_barcode); + this->ReloadData(); } void ResultDetailsDialog::OnBnClickedCheckout() { - CString status = CommonStorage::Instance()->getSearchResult()[m_resultIndex].status; CheckoutDialog check; - check.m_checkoutMode = true; - + check.m_checkoutMode = true; Reservation topReservation; - if (status == "Reserveret") { - topReservation = CommonStorage::Instance()->getSearchResult()[m_resultIndex].reservations[0]; + if (m_equipment.status == "Reserveret") { + + topReservation = m_equipment.reservations[0]; check.m_reservedTo = topReservation.inits; } @@ -215,11 +220,10 @@ dblayer->CheckoutEquipment(p, eq, atoi(check.m_numdays) ); - if (status == "Reserveret") { //if the equipment was reserved, we must delete the reservation + if (m_equipment.status == "Reserveret") { //if the equipment was reserved, we must delete the reservation dblayer->DeleteReservation(eq.barcode, topReservation.reservationID); } - - OnOK(); + this->ReloadData(); } } @@ -234,7 +238,8 @@ CString barcode; GetDlgItem(IDC_BARCODE)->GetWindowText(barcode); dblayer->EquipmentReservation(barcode,p); - OnOK(); + + this->ReloadData(); } } @@ -242,11 +247,42 @@ { 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; + CString reservationID = m_equipment.reservations[sel].reservationID; + CString barcode = m_equipment.barcode; CommonStorage::Instance()->getDBLayer()->DeleteReservation(barcode, reservationID); - MessageBox("Reservation deleted, but won't show until next search"); + this->ReloadData(); + } else { MessageBox("No reservation is selected"); } } + +void ResultDetailsDialog::ReloadData(void) +{ + m_equipment = CommonStorage::Instance()->getDBLayer()->GetEquipment(m_barcode); + this->LoadData(); + this->LoadListControls(); + this->EnableControls(); + + ((SearchDialog*)CommonStorage::Instance()->getTabCtrl()->m_tabs[0])->OnBnClickedSearch(); + ((ResultDialog*)CommonStorage::Instance()->getTabCtrl()->m_tabs[1])->LoadResults(); +} + +void ResultDetailsDialog::EnableControls(void) +{ + if (CommonStorage::Instance()->getAdmin() ) { + if (m_equipment.status == "Ledig") { + GetDlgItem(IDC_CHECKOUT)->EnableWindow(true); + GetDlgItem(IDC_RETURN)->EnableWindow(false); + GetDlgItem(IDC_RESERVE)->EnableWindow(false); + } else if (m_equipment.status == "Udlånt") { + GetDlgItem(IDC_CHECKOUT)->EnableWindow(false); + GetDlgItem(IDC_RETURN)->EnableWindow(true); + GetDlgItem(IDC_RESERVE)->EnableWindow(true); + } else { //m_equipment.status == "Reserveret" + GetDlgItem(IDC_CHECKOUT)->EnableWindow(true); + GetDlgItem(IDC_RETURN)->EnableWindow(false); + GetDlgItem(IDC_RESERVE)->EnableWindow(true); + } + } +}