// DlgSchedMarkers.cpp : implementation file // #include "stdafx.h" #include "sp.h" #include "DlgSchedMarkers.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CDlgSchedMarkers dialog CDlgSchedMarkers::CDlgSchedMarkers(CWnd* pParent /*=NULL*/) : CDialog(CDlgSchedMarkers::IDD, pParent) { //{{AFX_DATA_INIT(CDlgSchedMarkers) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_pApp= (CSpApp*)AfxGetApp(); //Initialize recordset pointer rs=m_pApp->rsPool->GetRS("CDlgSchedMarkers"); } CDlgSchedMarkers::~CDlgSchedMarkers() { //delete rs; m_pApp->rsPool->ReleaseRS(&rs->m_nID); } void CDlgSchedMarkers::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDlgSchedMarkers) DDX_Control(pDX, IDC_BTNCOLOR, m_btnColor); DDX_Control(pDX, IDC_BTNREFRESH, m_btnRefresh); DDX_Control(pDX, IDC_BTNDONE, m_btnDone); DDX_Control(pDX, IDC_BTNADD, m_btnAdd); DDX_Control(pDX, IDC_LSTMARKERS, m_lsMarkers); DDX_Control(pDX, IDC_LBLSAMPLE, m_lblSample); DDX_Control(pDX, IDC_EDNOTES, m_edNotes); DDX_Control(pDX, IDC_DTTSTART, m_dtStartTime); DDX_Control(pDX, IDC_DTTEND, m_dtEndTime); DDX_Control(pDX, IDC_DTSTART, m_dtStartDate); DDX_Control(pDX, IDC_DTEND, m_dtEndDate); DDX_Control(pDX, IDC_CBAPPLIESTO, m_cbAppliesTo); DDX_Control(pDX, IDC_BTNDEL, m_btnDelete); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CDlgSchedMarkers, CDialog) //{{AFX_MSG_MAP(CDlgSchedMarkers) ON_BN_CLICKED(IDC_BTNDONE, OnBtndone) ON_LBN_SELCHANGE(IDC_LSTMARKERS, OnSelchangeLstmarkers) ON_BN_CLICKED(IDC_BTNCOLOR, OnBtncolor) ON_EN_KILLFOCUS(IDC_EDNOTES, OnKillfocusEdnotes) ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DTSTART, OnDatetimechangeDtstart) ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DTEND, OnDatetimechangeDtend) ON_CBN_CLOSEUP(IDC_CBAPPLIESTO, OnCloseupCbappliesto) ON_BN_CLICKED(IDC_BTNADD, OnBtnadd) ON_NOTIFY(NM_KILLFOCUS, IDC_DTTSTART, OnKillfocusDttstart) ON_NOTIFY(NM_KILLFOCUS, IDC_DTTEND, OnKillfocusDttend) ON_BN_CLICKED(IDC_BTNREFRESH, OnBtnrefresh) ON_BN_CLICKED(IDC_BTNDEL, OnBtndel) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDlgSchedMarkers message handlers BOOL CDlgSchedMarkers::OnInitDialog() { CDialog::OnInitDialog(); Security(); m_lblSample.SetFontBold(TRUE); m_lblSample.SetFontSize(14); m_lblSample.SetBkColor(RGB(128,128,128)); m_lGreen=m_lBlue=m_lRed=128; m_lblSample.SetTextColor(RGB(0,0,0)); m_edNotes.SetLimitText(15); FillAppliesToList(); FillMarkerList(); m_bAddMode=false; return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CDlgSchedMarkers::FillAppliesToList() { CString strData, strIndex; long lData; m_cbAppliesTo.Clear(); strData="< Office >"; strIndex="0"; m_cbAppliesTo.AddRow(strData,strIndex); rs->QueryReadOnly("SELECT users.id, [last] & \", \" & [first] AS name " "FROM users WHERE (((users.id)<>1) AND ((users.tech)=True) AND ((users.active)=True)) " "ORDER BY [last] & \", \" & [first];"); if(!rs->IsEmpty()) { do { rs->FetchField("name",&strData); rs->FetchField("id",&lData); strIndex.Format("%u",lData); m_cbAppliesTo.AddRow(strData,strIndex); }while(rs->MoveForward()); m_cbAppliesTo.Select("0"); } } void CDlgSchedMarkers::OnBtndone() { CDialog::OnOK(); } void CDlgSchedMarkers::OnOK() {} //Fill list of items void CDlgSchedMarkers::FillMarkerList() { long lData; CString strIndex,strData,strNotes,strName; COleDateTime dtStart,dtEnd; m_lsMarkers.Clear(); EnableFields(false); rs->QueryReadOnly( "SELECT schedmarkers.id, schedmarkers.link, schedmarkers.startdate, schedmarkers.notes, " "users.first, users.last " "FROM schedmarkers LEFT JOIN users ON schedmarkers.link = users.id " "ORDER BY schedmarkers.startdate DESC;"); if(!rs->IsEmpty()) { EnableFields(true); do{ rs->FetchField("id",&lData); strIndex.Format("%u",lData); rs->FetchField("startdate",&dtStart); strNotes=dtStart.Format(); rs->FetchField("notes",&strData); strNotes+="\t"+strData; rs->FetchField("link",&lData); if(lData==0) { strName=""; } else { rs->FetchField("last",&strData); strName=strData; rs->FetchField("first",&strData); strName+=", " + strData; } strNotes+=" - "+strName; m_lsMarkers.AddRow(strNotes,strIndex); }while(rs->MoveForward()); if(m_strSelectedItem.IsEmpty()) { m_lsMarkers.SetCurSel(0); m_lsMarkers.RebuildIndex();//<--------FIXES PROBLEM m_strSelectedItem=m_lsMarkers.GetSelectedItem(0);//<-------problem } else m_lsMarkers.Select(m_strSelectedItem,true); //OnSelchangeLstmarkers(); FillFields(); } } void CDlgSchedMarkers::OnSelchangeLstmarkers() { CString q,strID,strNotes,strAppliesTo; COleDateTime dtStart,dtEnd; m_lsMarkers.RebuildIndex();//<--------FIXES PROBLEM m_strSelectedItem=m_lsMarkers.GetSelectedItem(0);//<-------problem FillFields(); } void CDlgSchedMarkers::OnBtncolor() { CString q; CColorDialog dlg(RGB(255,0,0),CC_SOLIDCOLOR/*|CC_PREVENTFULLOPEN*/); if (dlg.DoModal() == IDOK) { COLORREF color = dlg.GetColor(); m_lRed=GetRValue(color); m_lGreen=GetGValue(color); m_lBlue=GetBValue(color); m_lblSample.SetBkColor(RGB(m_lRed,m_lGreen,m_lBlue)); m_lblSample.SetTextColor(RGB(0,0,0)); } SaveRecord(false); } //save new record or update existing record void CDlgSchedMarkers::SaveRecord(bool bNew) { //only save or update a record if out of add mode if(m_bAddMode) return; CString q,strID,strNotes,strAppliesTo; COleDateTime dtStart,dtEnd,dtTime,dtDate; long lData; /*m_lsMarkers.RebuildIndex();//<--------FIXES PROBLEM strID=m_lsMarkers.GetSelectedItem(0);//<-------problem */ //get start date/time m_dtStartTime.GetTime(dtTime); m_dtStartDate.GetTime(dtDate); dtStart.SetDateTime(dtDate.GetYear(),dtDate.GetMonth(),dtDate.GetDay(),dtTime.GetHour(),dtTime.GetMinute(),dtTime.GetSecond()); //get End date/time m_dtEndTime.GetTime(dtTime); m_dtEndDate.GetTime(dtDate); dtEnd.SetDateTime(dtDate.GetYear(),dtDate.GetMonth(),dtDate.GetDay(),dtTime.GetHour(),dtTime.GetMinute(),dtTime.GetSecond()); //Get notes m_edNotes.GetWindowText(strNotes); if(strNotes.IsEmpty()) strNotes="??"; //Get link strAppliesTo=m_cbAppliesTo.GetCurrentRowID(); //BUGBUG: on change of date schedule reverts to gray color if(bNew) { q.Format( "INSERT INTO schedmarkers ( link, startdate, enddate, notes, red, green, blue ) " "SELECT %s, #%s#, #%s#, '%s', %u, %u, %u;",strAppliesTo,dtStart.Format(_T("%m/%d/%Y %H:%M:%S")), dtEnd.Format(_T("%m/%d/%Y %H:%M:%S")),strNotes,m_lRed,m_lGreen,m_lBlue); rs->Ex(q,&lData); m_strSelectedItem.Format("%u",lData); } else { ASSERT(!m_strSelectedItem.IsEmpty()); strID=m_strSelectedItem; q.Format( "UPDATE schedmarkers SET schedmarkers.link = %s, schedmarkers.startdate = #%s#, " "schedmarkers.enddate = #%s#, schedmarkers.notes = '%s', schedmarkers.red = %u, " "schedmarkers.green = %u, schedmarkers.blue = %u " "WHERE (((schedmarkers.id)=%s));",strAppliesTo,dtStart.Format(_T("%m/%d/%Y %H:%M:%S")), dtEnd.Format(_T("%m/%d/%Y %H:%M:%S")),strNotes,m_lRed,m_lGreen,m_lBlue,strID); #ifdef _DEBUG //m_pApp->ShowStuff(q); #endif rs->Ex(q); } //force a delay to flush change before refilling list rs->QueryReadOnly("SELECT * FROM defaults;"); rs->Close(); m_pApp->Delay(1); } void CDlgSchedMarkers::OnBtnadd() { COleDateTime dtData; dtData=COleDateTime::GetCurrentTime(); if(m_bAddMode) { m_bAddMode=false; m_btnAdd.SetWindowText("Add"); m_btnDone.ShowWindow(TRUE); m_btnDelete.ShowWindow(TRUE); m_btnRefresh.ShowWindow(TRUE); SaveRecord(true); m_strSelectedItem.Empty(); FillMarkerList(); } else { EnableFields(true); m_bAddMode=true; m_btnAdd.SetWindowText("SAVE"); m_btnDone.ShowWindow(FALSE); m_btnRefresh.ShowWindow(FALSE); m_lblSample.SetBkColor(RGB(128,128,128)); m_lblSample.SetTextColor(RGB(0,0,0)); m_lGreen=m_lBlue=m_lRed=128; m_btnDelete.ShowWindow(FALSE); m_dtEndDate.SetTime(dtData); m_dtStartDate.SetTime(dtData); dtData.SetTime(0,0,0); m_dtStartTime.SetTime(dtData); dtData.SetTime(23,59,59); m_dtEndTime.SetTime(dtData); m_edNotes.SetWindowText("??"); } } void CDlgSchedMarkers::OnKillfocusDttstart(NMHDR* pNMHDR, LRESULT* pResult) { SaveRecord(false); *pResult = 0; } void CDlgSchedMarkers::OnKillfocusDttend(NMHDR* pNMHDR, LRESULT* pResult) { SaveRecord(false); *pResult = 0; } void CDlgSchedMarkers::OnKillfocusEdnotes() { SaveRecord(false); } void CDlgSchedMarkers::OnDatetimechangeDtstart(NMHDR* pNMHDR, LRESULT* pResult) { COleDateTime dtData; if(m_bAddMode)//change stop date to start date when in add mode { m_dtStartDate.GetTime(dtData); m_dtEndDate.SetTime(dtData); } SaveRecord(false); *pResult = 0; } void CDlgSchedMarkers::OnDatetimechangeDtend(NMHDR* pNMHDR, LRESULT* pResult) { SaveRecord(false); *pResult = 0; } void CDlgSchedMarkers::OnCloseupCbappliesto() { SaveRecord(false); } //refresh list void CDlgSchedMarkers::OnBtnrefresh() { FillMarkerList(); } void CDlgSchedMarkers::FillFields() { CString q,strNotes,strAppliesTo; COleDateTime dtStart,dtEnd; long lData; ASSERT(!m_strSelectedItem.IsEmpty()); q.Format("SELECT schedmarkers.* " "FROM schedmarkers " "WHERE (((schedmarkers.id)=%s));",m_strSelectedItem); rs->QueryReadOnly(q); if(!rs->IsEmpty()) { rs->FetchField("startdate",&dtStart); rs->FetchField("enddate",&dtEnd); rs->FetchField("notes",&strNotes); rs->FetchField("red",&m_lRed); rs->FetchField("green",&m_lGreen); rs->FetchField("blue",&m_lBlue); rs->FetchField("link",&lData); m_dtStartDate.SetTime(dtStart); m_dtStartTime.SetTime(dtStart); m_dtEndDate.SetTime(dtEnd); m_dtEndTime.SetTime(dtEnd); m_edNotes.SetWindowText(strNotes); m_lblSample.SetBkColor(RGB(m_lRed,m_lGreen,m_lBlue)); m_lblSample.SetTextColor(RGB(0,0,0)); m_cbAppliesTo.Select(lData); } } void CDlgSchedMarkers::OnBtndel() { if(AfxMessageBox("Delete selected item?\r\nAre you sure?",MB_YESNO)==IDNO) return; CString q; q.Format("DELETE schedmarkers.*, schedmarkers.id " "FROM schedmarkers " "WHERE (((schedmarkers.id)=%s));",m_strSelectedItem); rs->Ex(q); rs->QueryReadOnly("SELECT * FROM defaults;"); rs->Close(); m_pApp->Delay(1); m_strSelectedItem.Empty(); FillMarkerList(); } //enable fields void CDlgSchedMarkers::EnableFields(bool bEnable) { if(m_bReadOnly) return; BOOL e= bEnable ? TRUE:FALSE; m_btnDelete.EnableWindow(e); m_dtEndDate.EnableWindow(e); m_dtStartDate.EnableWindow(e); m_cbAppliesTo.EnableWindow(e); m_dtEndTime.EnableWindow(e); m_dtStartTime.EnableWindow(e); m_edNotes.EnableWindow(e); m_btnColor.EnableWindow(e); } void CDlgSchedMarkers::Security() { m_bReadOnly=false; int x=m_pApp->Allowed(RSCHEDMARKERS,true); if(x==0)//no access allowed { m_pApp->SecurityWarning(); CDialog::OnCancel(); } if(x==2)//read only { m_bReadOnly=true; m_btnAdd.ShowWindow(FALSE); m_btnDelete.ShowWindow(FALSE); m_btnColor.EnableWindow(FALSE); m_cbAppliesTo.EnableWindow(FALSE); m_dtEndDate.EnableWindow(FALSE); m_dtEndTime.EnableWindow(FALSE); m_dtStartDate.EnableWindow(FALSE); m_dtStartTime.EnableWindow(FALSE); m_edNotes.EnableWindow(FALSE); } }