504 lines
12 KiB
C++
504 lines
12 KiB
C++
// 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="<Office>";
|
|
}
|
|
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);
|
|
}
|
|
}
|