// ResultDetailsDialog.cpp : implementation file // #include "stdafx.h" #include "h6-udlånssystem.h" #include "ResultDetailsDialog.h" #include ".\resultdetailsdialog.h" #include "CommonStorage.h" #include "DatabaseLayer.h" #include "CheckoutDialog.h" // ResultDetailsDialog dialog IMPLEMENT_DYNAMIC(ResultDetailsDialog, CDialog) ResultDetailsDialog::ResultDetailsDialog(CWnd* pParent /*=NULL*/) : CDialog(ResultDetailsDialog::IDD, pParent) { m_loadingData = false; } ResultDetailsDialog::~ResultDetailsDialog() { } void ResultDetailsDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(ResultDetailsDialog, CDialog) ON_EN_CHANGE(IDC_BARCODE, OnEnChangeBarcode) ON_EN_CHANGE(IDC_NAME, OnEnChangeName) ON_EN_CHANGE(IDC_DESCRIPTION, OnEnChangeDescription) 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() // ResultDetailsDialog message handlers void ResultDetailsDialog::LoadData(void) { 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); m_loadingData = false; } 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"); 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); } checkouts->SetColumnWidth(0,LVSCW_AUTOSIZE_USEHEADER); checkouts->SetColumnWidth(1,LVSCW_AUTOSIZE_USEHEADER); checkouts->SetColumnWidth(2,LVSCW_AUTOSIZE_USEHEADER); checkouts->SetColumnWidth(3,LVSCW_AUTOSIZE_USEHEADER); // 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"); for (int i=0; iInsertItem(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); } else { // not administrator GetDlgItem(IDC_CHECKOUTS)->EnableWindow(false); GetDlgItem(IDC_RESERVATIONS)->EnableWindow(false); } } BOOL ResultDetailsDialog::OnInitDialog() { CDialog::OnInitDialog(); 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); LoadData(); LoadListControls(); 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(); } void ResultDetailsDialog::OnEnChangeName() { LoadData(); } void ResultDetailsDialog::OnEnChangeDescription() { LoadData(); } void ResultDetailsDialog::OnEnChangePlacement() { 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); 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"); } }