Files

953 lines
22 KiB
C++

// PMDlg.cpp : implementation file
//
#include "stdafx.h"
#include "sp.h"
#include "PMDlg.h"
#include "partsdlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPMDlg dialog
CPMDlg::CPMDlg(CWnd* pParent /*=NULL*/)
: CDialog(CPMDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CPMDlg)
//}}AFX_DATA_INIT
m_bAddMode=false;
m_pApp= (CSpApp*)AfxGetApp();
rs=new GZRset("Error: PM dialog");
rs->SetConnect(m_pApp->strConnectString);
cbrs=new GZRset("Error: PM dialog combo box recordset\r\n");
cbrs->SetConnect(m_pApp->strConnectString);
m_strSelectedPM.Empty();
m_strCriteria.Empty();
m_bNoRecord=true;
}
//*********************************
CPMDlg::~CPMDlg()
{
delete rs;
delete cbrs;
}
void CPMDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CPMDlg)
DDX_Control(pDX, IDC_CKAUTOWO, m_ckAutoWO);
DDX_Control(pDX, IDC_EDADVANCE, m_edAdvance);
DDX_Control(pDX, IDC_LBLADVANCE, m_lblAdvance);
DDX_Control(pDX, IDC_LBPARTSREQ, m_lbParts);
DDX_Control(pDX, IDC_LBLQUANT, m_lblQuantity);
DDX_Control(pDX, IDC_LBLPARTSLIST, m_lblPartsList);
DDX_Control(pDX, IDC_CKREPEAT, m_ckRepeat);
DDX_Control(pDX, IDC_LBLMETERMONTHS, m_lblMeterMonths);
DDX_Control(pDX, IDC_CKONCEONLY, m_ckOnceOnly);
DDX_Control(pDX, IDC_CKMETER, m_ckMeter);
DDX_Control(pDX, IDC_CKAGE, m_ckAge);
DDX_Control(pDX, IDC_EDQUANTITY, m_edQuantity);
DDX_Control(pDX, IDC_BTNREMOVEPART, m_btnRemovePart);
DDX_Control(pDX, IDC_LBLPMLIST, m_lblPMList);
DDX_Control(pDX, IDC_LBLPART, m_lblPart);
DDX_Control(pDX, IDC_LBLNEXTSERVICEDATE, m_lblNextServiceDate);
DDX_Control(pDX, IDC_LBLAGEMETER, m_lblAgeMeter);
DDX_Control(pDX, IDC_EDNOTES, m_edNotes);
DDX_Control(pDX, IDC_EDMETERMONTHS, m_edMeterMonths);
DDX_Control(pDX, IDC_EDDESCRIPTION, m_edDescription);
DDX_Control(pDX, IDC_DTNEXTSERVICE, m_dtNextService);
DDX_Control(pDX, IDC_CKACTIVE, m_ckActive);
DDX_Control(pDX, IDC_CBPMLIST, m_cbPMList);
DDX_Control(pDX, IDC_CBPARTS, m_cbParts);
DDX_Control(pDX, IDC_BTNDONE, m_btnDone);
DDX_Control(pDX, IDC_BTNDELETE, m_btnDelete);
DDX_Control(pDX, IDC_BTNADDPART, m_btnAddPart);
DDX_Control(pDX, IDC_BTNADD, m_btnAdd);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CPMDlg, CDialog)
//{{AFX_MSG_MAP(CPMDlg)
ON_BN_CLICKED(IDC_BTNDONE, OnBtndone)
ON_BN_CLICKED(IDC_BTNREMOVEPART, OnBtnremovepart)
ON_BN_CLICKED(IDC_BTNADDPART, OnBtnaddpart)
ON_BN_CLICKED(IDC_BTNADD, OnBtnadd)
ON_BN_CLICKED(IDC_BTNDELETE, OnBtndelete)
ON_CBN_CLOSEUP(IDC_CBPARTS, OnCloseupCbparts)
ON_CBN_CLOSEUP(IDC_CBPMLIST, OnCloseupCbpmlist)
ON_BN_CLICKED(IDC_CKACTIVE, OnCkactive)
ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DTNEXTSERVICE, OnDatetimechangeDtnextservice)
ON_EN_KILLFOCUS(IDC_EDDESCRIPTION, OnKillfocusEddescription)
ON_EN_KILLFOCUS(IDC_EDMETERMONTHS, OnKillfocusEdmetermonths)
ON_EN_KILLFOCUS(IDC_EDNOTES, OnKillfocusEdnotes)
ON_BN_CLICKED(IDC_LBLPART, OnLblpart)
ON_BN_CLICKED(IDC_CKAGE, OnCkage)
ON_BN_CLICKED(IDC_CKMETER, OnCkmeter)
ON_BN_CLICKED(IDC_CKONCEONLY, OnCkonceonly)
ON_BN_CLICKED(IDC_CKREPEAT, OnCkrepeat)
ON_EN_KILLFOCUS(IDC_EDADVANCE, OnKillfocusEdadvance)
ON_BN_CLICKED(IDC_CKAUTOWO, OnCkautowo)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPMDlg message handlers
void CPMDlg::SetMode(bool clientmode)
{
m_bClientMode=clientmode;
//false=model record
//true =client record
}
//*************************************
BOOL CPMDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// ShowWindow(SW_MAXIMIZE);
//make "hyperlinks"
m_lblPart.SetTextColor(RGB(0,0,255));
m_lblPart.SetFontUnderline(TRUE);
m_lblPart.SetLink(TRUE);
m_lblPart.SetLinkCursor(m_pApp->hcHand);
m_lblPart.SetLinkURL("");
ASSERT(!m_strCriteria.IsEmpty());//would mean no criteria was passed
if(m_strCriteria.IsEmpty())
{
AfxMessageBox("Error in PMSCHEDULE dialog, no Model or Client criteria.");
CDialog::OnCancel();
}
if(m_bClientMode==true)
{
m_lblAgeMeter.ShowWindow(FALSE);
m_ckAge.ShowWindow(FALSE);
m_ckMeter.ShowWindow(FALSE);
m_lblNextServiceDate.ShowWindow(TRUE);
m_dtNextService.ShowWindow(TRUE);
m_ckRepeat.SetWindowText("Repeat at interval");
m_ckOnceOnly.SetWindowText("Service once only next service date");
m_lblMeterMonths.SetWindowText("Repeat interval (months):");
}
else
{
m_lblAgeMeter.ShowWindow(TRUE);
m_ckAge.ShowWindow(TRUE);
m_ckMeter.ShowWindow(TRUE);
m_lblNextServiceDate.ShowWindow(FALSE);
m_dtNextService.ShowWindow(FALSE);
m_ckRepeat.SetWindowText("Repeat every reading / age interval");
m_ckOnceOnly.SetWindowText("Service once only at reading / age");
m_lblMeterMonths.SetWindowText("Repeat interval (meter/months):");
}
FillPartsList();
FillPMList();
Security();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
//**************************************
void CPMDlg::SetCriteria(CString strID)
{
ASSERT(!strID.IsEmpty());
m_strCriteria=strID;
}
//***************************************
void CPMDlg::FillPMList()
{
CString strData,strType,q;
CString strIndex;
long lData;
m_cbPMList.Clear();
//are we doing this for a client or a model?
if(m_bClientMode)
strType="client";
else
strType="model";
//select all schedule records for this
//client or unit model
q.Format("SELECT pmschedules.* FROM pmschedules "
"WHERE (((pmschedules.%s)=%s)) "
"ORDER BY pmschedules.description;",strType,m_strCriteria);
rs->QueryReadOnly(q);
if(rs->IsEmpty())
{
m_bNoRecord=true;
ClearFields();
return;
}
m_bNoRecord=false;
rs->MoveFirst();
do
{
rs->FetchField("description",&strData);
rs->FetchField("id",&lData);
strIndex.Format("%u",lData);
m_cbPMList.AddRow(strData,strIndex);
}while(rs->MoveForward());
//pretend user has selected so that other fields get filled in
if(m_strSelectedPM.IsEmpty()) //first time in
{
m_cbPMList.SetCurSel(0);
m_strSelectedPM=m_cbPMList.GetCurrentRowID();
}
else//something valid was selected before so stick with it
m_cbPMList.Select(m_strSelectedPM);
FillFields();
}
//*************************************
void CPMDlg::FillPartsList()
{
CString strData;
CString strIndex;
long lData;
m_cbParts.Clear();
cbrs->QueryReadOnly("SELECT parts.id, [partnumber] & \" - \" "
"& [description] AS name FROM parts "
"ORDER BY parts.partnumber;");
if(cbrs->IsEmpty())
return;
cbrs->MoveFirst();
do
{
cbrs->FetchField("name",&strData);
cbrs->FetchField("id",&lData);
strIndex.Format("%u",lData);
m_cbParts.AddRow(strData,strIndex);
}while(cbrs->MoveForward());
m_cbParts.SetCurSel(0);
}
//***********************************
void CPMDlg::OnBtndone()
{
CDialog::OnOK();
}
//***********************************
void CPMDlg::OnBtnremovepart()
{
CString str,q;
if(m_bNoRecord) return;
int x = m_lbParts.SelectionCount();
if(x==0) return;
//Loop through and delete each item
for(int y=0;y<x;y++)
{
q.Format("DELETE pmparts.*, pmparts.pmlink, pmparts.partnum FROM pmparts "
"WHERE (((pmparts.pmlink)=%s) AND ((pmparts.partnum)=%s));",m_strSelectedPM,m_lbParts.GetSelectedItem(y));
if(!rs->Execute(q))
break;
}
FillRequiredPartsList();
}
//check for and fill in required parts lb
void CPMDlg::FillRequiredPartsList()
{
CString strData,q;
CString strIndex;
long lData;
m_lbParts.Clear();
if(m_bNoRecord) return;
q.Format("SELECT parts.id, \"Quantity: \" & [quantity] & \" of \" & [partnumber] & \" - (\" & [description] & \")\" AS name "
"FROM pmparts LEFT JOIN parts ON pmparts.partnum = parts.id "
"WHERE (((pmparts.pmlink)=%s));",m_strSelectedPM);
cbrs->QueryReadOnly(q);
if(cbrs->IsEmpty())
return;
cbrs->MoveFirst();
do
{
cbrs->FetchField("name",&strData);
cbrs->FetchField("id",&lData);
strIndex.Format("%u",lData);
m_lbParts.AddRow(strData,strIndex);
}while(cbrs->MoveForward());
}
//*************************************************
void CPMDlg::OnBtnaddpart()
{
CString q,strData;
float fData;
if(m_bNoRecord) return;
m_edQuantity.GetWindowText(strData);
fData=(float)atof(strData);
q.Format("SELECT pmparts.pmlink FROM pmparts "
"WHERE (((pmparts.pmlink)=%s) AND ((pmparts.partnum)=%s));",m_strSelectedPM,m_cbParts.GetCurrentRowID());
cbrs->QueryReadOnly(q);
if(!cbrs->IsEmpty())//trying to dupe...tsk tsk
{
AfxMessageBox("The same part can only be in the list once\r\n"
"If you want to change the quantity on a part in the list\r\n"
"You will need to delete it first and then re-add\r\n"
"with the correct quantity");
return;
}
//take the value selected and insert it
q.Format("INSERT INTO pmparts ( pmlink, partnum, quantity ) "
"SELECT %s, %s, %f;",m_strSelectedPM,m_cbParts.GetCurrentRowID(),fData);
cbrs->Execute(q);
cbrs->Close();
FillRequiredPartsList();
}
//**************************************************
void CPMDlg::OnBtnadd()
{
CString strData,q;
bool bData;
float fData,fZero;
long lData;
COleDateTime dtData;
fZero=0;
if(!m_bAddMode)
{
//Go Add mode
m_bAddMode=true;
m_lblPart.ShowWindow(FALSE);
m_lblPMList.ShowWindow(FALSE);
m_cbPMList.ShowWindow(FALSE);
m_lbParts.ShowWindow(FALSE);
m_btnRemovePart.ShowWindow(FALSE);
m_btnAddPart.ShowWindow(FALSE);
m_cbParts.ShowWindow(FALSE);
m_lblPartsList.ShowWindow(FALSE);
m_lblQuantity.ShowWindow(FALSE);
m_edQuantity.ShowWindow(FALSE);
m_btnDone.ShowWindow(FALSE);
m_btnAdd.SetWindowText("SAVE");
m_btnDelete.SetWindowText("CANCEL");
ClearFields();
}
else
{ //Save and go edit mode
//DESCRIPTION
m_edDescription.GetWindowText(strData);
if(strData.IsEmpty())
{
AfxMessageBox("Description is required to proceed");
return;
}
if(!rs->AddNewRecord())
return;
rs->UpdateField("description",&strData);
//UNITBASED
bData=m_bClientMode ? false : true;
rs->UpdateField("unitbased",&bData);
//CLIENT
if(m_bClientMode)
lData=atol(m_strCriteria);
else
lData=0;
rs->UpdateField("client",&lData);
//MODEL
if(!m_bClientMode)
lData=atol(m_strCriteria);
else
lData=0;
rs->UpdateField("model",&lData);
//AGEBASED
bData=m_ckAge.GetCheck() ? true : false;
rs->UpdateField("agebased",&bData);
//AGEMONTHS / METER
m_edMeterMonths.GetWindowText(strData);
fData=(float)atof(strData);
if(bData)//is age
{
rs->UpdateField("agemonths",&fData);
rs->UpdateField("meter",&fZero);
}
else
{//is metric
rs->UpdateField("meter",&fData);
rs->UpdateField("agemonths",&fZero);
}
//CYCLICAL
bData=m_ckRepeat.GetCheck() ? true : false;
rs->UpdateField("cyclical",&bData);
//NOTES
m_edNotes.GetWindowText(strData);
rs->UpdateField("notes",&strData);
//NEXTDATE
m_dtNextService.GetTime(dtData);
rs->UpdateField("nextdate",&dtData);
//ACTIVE
bData=m_ckActive.GetCheck() ? true : false;
rs->UpdateField("active",&bData);
//ADVANCE WARNING
m_edAdvance.GetWindowText(strData);
if(strData.IsEmpty()) strData="1";
lData=atol(strData);
if(lData==0) lData=1;
rs->UpdateField("advancewarning",&lData);
//CREATOR FIELDS
dtData=COleDateTime::GetCurrentTime();
rs->UpdateField("creator",&m_pApp->m_lusrID);
rs->UpdateField("created",&dtData);
rs->UpdateField("modifier",&m_pApp->m_lusrID);
rs->UpdateField("modified",&dtData);
if(!rs->SaveRecord())
return;
m_bAddMode=false;
m_cbPMList.ShowWindow(TRUE);
m_lblPart.ShowWindow(TRUE);
m_lblPMList.ShowWindow(TRUE);
m_lbParts.ShowWindow(TRUE);
m_btnRemovePart.ShowWindow(TRUE);
m_btnAddPart.ShowWindow(TRUE);
m_cbParts.ShowWindow(TRUE);
m_lblPartsList.ShowWindow(TRUE);
m_lblQuantity.ShowWindow(TRUE);
m_edQuantity.ShowWindow(TRUE);
m_btnDone.ShowWindow(TRUE);
m_btnAdd.SetWindowText("Add");
m_btnDelete.SetWindowText("Delete");
FillPMList();
}
}
//***********************************************
void CPMDlg::OnBtndelete()
{
CString q;
if(m_bAddMode)
{//Cancel add mode
m_bAddMode=false;
m_lblPart.ShowWindow(TRUE);
m_lblPMList.ShowWindow(TRUE);
m_lbParts.ShowWindow(TRUE);
m_btnRemovePart.ShowWindow(TRUE);
m_btnAddPart.ShowWindow(TRUE);
m_cbParts.ShowWindow(TRUE);
m_lblPartsList.ShowWindow(TRUE);
m_lblQuantity.ShowWindow(TRUE);
m_edQuantity.ShowWindow(TRUE);
m_cbPMList.ShowWindow(TRUE);
m_btnDone.ShowWindow(TRUE);
m_btnAdd.SetWindowText("Add");
m_btnDelete.SetWindowText("Delete");
FillPMList();
}
if(m_bNoRecord) return;
if(AfxMessageBox("Permanently delete this PM record?",MB_YESNO)!=IDYES)
return;
//delete PM entry
q.Format("DELETE pmschedules.*, pmschedules.id FROM pmschedules "
"WHERE (((pmschedules.id)=%s));",m_strSelectedPM);
if(!rs->Execute(q)) return;
//Delete parts list enty if any
q.Format("DELETE pmparts.*, pmparts.pmlink FROM pmparts "
"WHERE (((pmparts.pmlink)=%s));",m_strSelectedPM);
rs->Execute(q);
m_strSelectedPM.Empty();
FillPMList();
}
//************************************************
void CPMDlg::OnCloseupCbparts()
{
//do nothing, nothing necessary in this case
}
//************************************************
void CPMDlg::OnCloseupCbpmlist()
{
m_strSelectedPM=m_cbPMList.GetCurrentRowID();
FillFields();
}
//******************************************
void CPMDlg::OnCkactive()
{
SaveField(&m_ckActive,"active");
}
//********************************
void CPMDlg::OnDatetimechangeDtnextservice(NMHDR* pNMHDR, LRESULT* pResult)
{
SaveField(&m_dtNextService,"nextdate");
*pResult = 0;
}
//*************************************
void CPMDlg::OnKillfocusEddescription()
{
SaveField(&m_edDescription,"description",false);
if(!m_bAddMode)
FillPMList();
}
//*************************************
void CPMDlg::OnKillfocusEdmetermonths()
{
if(m_bAddMode || m_bNoRecord) return;
CString strData;
bool bData;
float fData,fZero;
fZero=0;
bData=m_ckAge.GetCheck() ? true : false;
//AGEMONTHS / METER
m_edMeterMonths.GetWindowText(strData);
fData=(float)atof(strData);
if(bData)//is age
{
rs->UpdateField("agemonths",&fData);
rs->UpdateField("meter",&fZero);
}
else
{//is metric
rs->UpdateField("meter",&fData);
rs->UpdateField("agemonths",&fZero);
}
rs->SaveRecord();
UpdateModified();
}
//*****************************
void CPMDlg::OnKillfocusEdnotes()
{
SaveField(&m_edNotes,"notes",true);
}
//************************************
void CPMDlg::OnLblpart()
{
CPartsDlg d;
if(d.DoModal()==IDOK)
FillPartsList();
}
//fill fields
void CPMDlg::FillFields()
{
CString strData,q;
COleDateTime dtData;
bool bData;
float fData;
long lData;
ClearFields();
q.Format("SELECT pmschedules.* FROM pmschedules "
"WHERE (((pmschedules.id)=%s));",m_cbPMList.GetCurrentRowID());
rs->QueryReadOnly(q);
if(rs->IsEmpty())
return;
//DESCRIPTION
rs->FetchField("description",&strData);
m_edDescription.SetWindowText(strData);
//AGEBASED
rs->FetchField("agebased",&bData);
m_ckAge.SetCheck(bData ? TRUE : FALSE);
m_ckMeter.SetCheck(!m_ckAge.GetCheck());
//AGEMONTHS
if(bData)//is age based
rs->FetchField("agemonths",&fData);
else//is metric
rs->FetchField("meter",&fData);
strData.Format("%1.2f",fData);
m_edMeterMonths.SetWindowText(strData);
//CYCLICAL
rs->FetchField("cyclical",&bData);
m_ckRepeat.SetCheck(bData ? TRUE : FALSE);
m_ckOnceOnly.SetCheck(!m_ckRepeat.GetCheck());
//NOTES
rs->FetchField("notes",&strData);
m_edNotes.SetWindowText(strData);
//NEXTDATE
rs->FetchField("nextdate",&dtData);
m_dtNextService.SetTime(dtData);
//ACTIVE
rs->FetchField("active",&bData);
m_ckActive.SetCheck(bData ? TRUE : FALSE);
//Autoworkorder
rs->FetchField("autoworkorder",&bData);
m_ckAutoWO.SetCheck(bData ? TRUE : FALSE);
//advance warning
rs->FetchField("advancewarning",&lData);
strData.Format("%u",lData);
m_edAdvance.SetWindowText(strData);
FillRequiredPartsList();
}
//**************************************
void CPMDlg::OnCkage()
{
m_ckMeter.SetCheck(!m_ckAge.GetCheck());
SaveAgeMeterFields();
}
//********************************************
void CPMDlg::OnCkmeter()
{
m_ckAge.SetCheck(!m_ckMeter.GetCheck());
SaveAgeMeterFields();
}
//************************************
void CPMDlg::OnCkonceonly()
{
m_ckRepeat.SetCheck(!m_ckOnceOnly.GetCheck());
if(m_ckRepeat.GetCheck()==FALSE)
m_edMeterMonths.SetWindowText("0");
SaveRepeatOnceOnlyFields();
}
//*********************************************
void CPMDlg::OnCkrepeat()
{
m_ckOnceOnly.SetCheck(!m_ckRepeat.GetCheck());
SaveRepeatOnceOnlyFields();
}
//**********************************************
void CPMDlg::OnCkautowo()
{
SaveField(&m_ckAutoWO,"autoworkorder");
}
//************************************************
//UPDATE MODIFIED DATA
//*************************************************
bool CPMDlg::UpdateModified()
{
//updates modified by and modified on fields
rs->UpdateField("modifier",&m_pApp->m_lusrID);
COleDateTime dtData;
dtData=COleDateTime::GetCurrentTime();
rs->UpdateField("modified",&dtData);
rs->SaveRecord();
return true;
}
//************************************
void CPMDlg::ClearFields()
{
m_edNotes.SetWindowText("");
m_edQuantity.SetWindowText("");
m_edMeterMonths.SetWindowText("");
m_edDescription.SetWindowText("");
m_dtNextService.SetTime(COleDateTime::GetCurrentTime());
m_ckRepeat.SetCheck(TRUE);
m_ckOnceOnly.SetCheck(FALSE);
m_ckMeter.SetCheck(FALSE);
m_ckAge.SetCheck(TRUE);
m_ckActive.SetCheck(TRUE);
m_lbParts.Clear();
}
//************************************************************
//SAVE EDIT CONTROL FIELD
//************************************************************
bool CPMDlg::SaveField(CEdit *edControl,CString fldname,bool AllowEmpty)
{
if(m_bAddMode || m_bNoRecord) return true;//dont attempt to update
CString str;
//do nothing if not changed
if(edControl->GetModify()!=TRUE) return true;
edControl->GetWindowText(str);
//dont save empty fields if not allowed to
if(!AllowEmpty)
{
if(str.IsEmpty())
{
edControl->Undo();
return false;
}
}
rs->UpdateField(fldname,&str);
rs->SaveRecord();
UpdateModified();
return true;
}
//************************************************************
//SAVE GZCOMBO CONTROL FIELD
//************************************************************
bool CPMDlg::SaveField(CgzCombo *cbControl,CString fldname)
{
if(m_bAddMode || m_bNoRecord) return true;//dont attempt to update
CString str;
long lData;
str=cbControl->GetCurrentRowID();
if(str.IsEmpty()) return false;//shouldn't happen but...
lData=atol(str);
rs->UpdateField(fldname,&lData);
rs->SaveRecord();
UpdateModified();
return true;
}
//************************************************************
//SAVE CheckBox CONTROL FIELD
//************************************************************
bool CPMDlg::SaveField(CButton *ckControl,CString fldname)
{
if(m_bAddMode || m_bNoRecord) return true;//dont attempt to update
bool bData=false;
BOOL BData;
BData=ckControl->GetCheck();
if(BData==TRUE) bData=true;
rs->UpdateField(fldname,&bData);
rs->SaveRecord();
UpdateModified();
return true;
}
//************************************************************
//SAVE DateTimePicker CONTROL FIELD
//************************************************************
bool CPMDlg::SaveField(CDateTimeCtrl *dtControl,CString fldname)
{
if(m_bAddMode || m_bNoRecord) return true;//dont attempt to update
COleDateTime dtData;
dtControl->GetTime(dtData);
rs->UpdateField(fldname,&dtData);
rs->SaveRecord();
UpdateModified();
return true;
}
//**************************************
void CPMDlg::SaveAgeMeterFields()
{
bool bData;
if(m_bAddMode || m_bNoRecord) return;
bData=m_ckAge.GetCheck() ? true : false;
rs->UpdateField("agebased",&bData);
rs->SaveRecord();
UpdateModified();
}
//*************************************
void CPMDlg::SaveRepeatOnceOnlyFields()
{
bool bData;
if(m_bAddMode || m_bNoRecord) return;
bData=m_ckRepeat.GetCheck() ? true : false;
rs->UpdateField("cyclical",&bData);
rs->SaveRecord();
UpdateModified();
}
void CPMDlg::OnKillfocusEdadvance()
{
//ADVANCE WARNING
if(m_bAddMode || m_bNoRecord) return;
CString strData;
long lData;
m_edAdvance.GetWindowText(strData);
if(strData.IsEmpty()) strData="1";
lData=atol(strData);
if(lData==0) lData=1;
strData.Format("%u",lData);
m_edAdvance.SetWindowText(strData);
rs->UpdateField("advancewarning",&lData);
rs->SaveRecord();
UpdateModified();
}
void CPMDlg::Security()
{
//m_bReadOnly=false;
int x=m_pApp->Allowed(RPM,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_btnAddPart.ShowWindow(FALSE);
m_btnRemovePart.ShowWindow(FALSE);
m_cbParts.EnableWindow(FALSE);
m_ckActive.EnableWindow(FALSE);
m_ckAge.EnableWindow(FALSE);
m_ckMeter.EnableWindow(FALSE);
m_ckOnceOnly.EnableWindow(FALSE);
m_ckRepeat.EnableWindow(FALSE);
m_dtNextService.EnableWindow(FALSE);
m_edAdvance.SetReadOnly(TRUE);
m_edDescription.SetReadOnly(TRUE);
m_edMeterMonths.SetReadOnly(TRUE);
m_edNotes.SetReadOnly(TRUE);
m_edQuantity.SetReadOnly(TRUE);
}
}