Files
ayanova7/archive/ayanova 1.9.4 CE final release db schema 171/sp/WOTABProblem.cpp

800 lines
22 KiB
C++

// WOTABProblem.cpp : implementation file
//
#include "stdafx.h"
#include "sp.h"
#include "WOTABProblem.h"
#include "UnitsDlg.h"
#include "DlgTasks.h"
#include "PM.h"
#include "UnitsDlg.h"
#include "GetAllOrXValue.h"
#include "ProbStatDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CWOTABProblem dialog
CWOTABProblem::CWOTABProblem(CWnd* pParent /*=NULL*/)
: CDialog(CWOTABProblem::IDD, pParent)
{
//{{AFX_DATA_INIT(CWOTABProblem)
//}}AFX_DATA_INIT
m_pApp = (CSpApp*)AfxGetApp();
/*
rs = new GZRset("Error: Standard workorder (problem tab)");
rs->SetConnect(m_pApp->strConnectString);
rsPrint=new GZRset("standard workorder screen (unit history report / PM lbl) rsPrint error:",true);
rsPrint->SetConnect(m_pApp->strConnectString);
*/
//Initialize recordset pointer
rs=m_pApp->rsPool->GetRS("CWOTABProblem (RS)");
rsPrint=m_pApp->rsPool->GetRSPrint("CWOTABProblem (RSPRINT)");
m_strSelectedPM="0";
m_strSelectedProbStat="0";
m_strSelectedUnit="0";
m_strLastSelectedTask="0";
bModified=false;
}
CWOTABProblem::~CWOTABProblem()
{
m_pApp->rsPool->ReleaseRS(&rs->m_nID);
m_pApp->rsPool->ReleaseRS(&rsPrint->m_nID);
}
void CWOTABProblem::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CWOTABProblem)
DDX_Control(pDX, IDC_LBLWARRANTY, m_lblWarranty);
DDX_Control(pDX, IDC_LBLPROBSTATUS, m_lblProbStatus);
DDX_Control(pDX, IDC_EDPROBBRIEF, m_edProblemBrief);
/*DDX_Control(pDX, IDC_LBLMODELINFO, m_lblModelInfo);*/
DDX_Control(pDX, IDC_EDMETERCOUNT, m_edMeter);
DDX_Control(pDX, IDC_LBLMETER, m_lblMeter);
DDX_Control(pDX, IDC_LBLTASKLIST, m_lblTasks);
DDX_Control(pDX, IDC_CBTASKS, m_cbTasks);
DDX_Control(pDX, IDC_LBLPMLIST, m_lblPMList);
DDX_Control(pDX, IDC_CBPMLIST, m_cbPMList);
DDX_Control(pDX, IDC_CBPROBSTAT, m_cbProbStat);
DDX_Control(pDX, IDC_LBLSNLIST, m_lblSnList);
DDX_Control(pDX, IDC_EDPROB, m_edProblem);
DDX_Control(pDX, IDC_CKALLSN, m_ckAllSn);
DDX_Control(pDX, IDC_CBSN, m_cbSNUnits);
DDX_Control(pDX, IDC_BTNUNITHIST, m_btnUnitHist);
//}}AFX_DATA_MAP
DDX_Control(pDX, IDC_LBLWORKHEADER, m_lblTitle);
}
BEGIN_MESSAGE_MAP(CWOTABProblem, CDialog)
//{{AFX_MSG_MAP(CWOTABProblem)
ON_BN_CLICKED(IDC_CKALLSN, OnCkallsn)
ON_CBN_CLOSEUP(IDC_CBSN, OnCloseupCbsn)
ON_CBN_CLOSEUP(IDC_CBPMLIST, OnCloseupCbpmlist)
ON_CBN_CLOSEUP(IDC_CBPROBSTAT, OnCloseupCbprobstat)
ON_BN_CLICKED(IDC_LBLSNLIST, OnLblsnlist)
ON_CBN_CLOSEUP(IDC_CBTASKS, OnCloseupCbtasks)
ON_BN_CLICKED(IDC_LBLTASKLIST, OnLbltasklist)
ON_BN_CLICKED(IDC_LBLPMLIST, OnLblpmlist)
ON_BN_CLICKED(IDC_BTNUNITHIST, OnBtnunithist)
ON_EN_KILLFOCUS(IDC_EDMETERCOUNT, OnKillfocusEdmetercount)
ON_EN_KILLFOCUS(IDC_EDPROB, OnKillfocusEdprob)
ON_EN_KILLFOCUS(IDC_EDPROBBRIEF, OnKillfocusEdprobbrief)
ON_BN_CLICKED(IDC_LBLPROBSTATUS, OnLblprobstatus)
ON_BN_CLICKED(IDC_LBLWARRANTY, OnLblwarranty)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CWOTABProblem message handlers
BOOL CWOTABProblem::OnInitDialog()
{
CDialog::OnInitDialog();
CString q,strData;
long lData;
// float fData;
bool bUnitSelected=false;
_variant_t vData;
//BSTR bstrValue;
//"Hyperlink-o-size" labels
m_lblSnList.SetTextColor(RGB(0,0,255));
m_lblSnList.SetFontUnderline(TRUE);
m_lblSnList.SetLink(TRUE);
m_lblSnList.SetLinkCursor(m_pApp->hcHand);
m_lblSnList.SetLinkURL("");
/*m_lblPMList.SetTextColor(RGB(0,0,255));
m_lblPMList.SetFontUnderline(TRUE);
m_lblPMList.SetLink(TRUE);
m_lblPMList.SetLinkCursor(m_pApp->hcHand);
m_lblPMList.SetLinkURL("");*/
m_lblTasks.SetTextColor(RGB(0,0,255));
m_lblTasks.SetFontUnderline(TRUE);
m_lblTasks.SetLink(TRUE);
m_lblTasks.SetLinkCursor(m_pApp->hcHand);
m_lblTasks.SetLinkURL("");
//Added 8/28/2000 problem status list edit access
m_lblProbStatus.SetTextColor(RGB(0,0,255));
m_lblProbStatus.SetFontUnderline(TRUE);
m_lblProbStatus.SetLink(TRUE);
m_lblProbStatus.SetLinkCursor(m_pApp->hcHand);
m_lblProbStatus.SetLinkURL("");
//Added 8/30/2000 warranty details
m_lblWarranty.SetTextColor(RGB(0,0,255));
m_lblWarranty.SetFontUnderline(TRUE);
m_lblWarranty.SetLink(TRUE);
m_lblWarranty.SetLinkCursor(m_pApp->hcHand);
m_lblWarranty.SetLinkURL("");
//Added 10/12/2002 attempt to beautify the form
m_lblTitle.SetFontBold(TRUE);
Security();
//Fetch problem description and values for partnum pm item, unit and probstat
q.Format("SELECT probs.* FROM probs "
"WHERE (((probs.id)=%s));",*m_pstrProblemID);
rs->QueryReadOnly(q);
//should never be empty
ASSERT(!rs->IsEmpty());
rs->FetchField("notes",&strData);
m_edProblem.SetWindowText(strData);
rs->FetchField("brief",&strData);
m_edProblemBrief.SetWindowText(strData);
rs->FetchField("status",&lData);
m_strSelectedProbStat.Format("%u",lData);
m_cbProbStat.Select(lData);
rs->FetchField("taskid",&lData);
m_cbTasks.Select(lData);
/*rs->FetchField("pmscheduleid",&lData);
m_strSelectedPM.Format("%u",lData);*/
rs->FetchField("unit",&lData);
m_strSelectedUnit.Format("%u",lData);
//m_cbSNUnits.Select(lData);
//m_strSelectedUnit=m_cbSNUnits.GetCurrentRowID();
if(lData!=0)
{
bUnitSelected=true;
m_lblMeter.ShowWindow(TRUE);
m_edMeter.ShowWindow(TRUE);
m_btnUnitHist.ShowWindow(TRUE);
}
//METER COUNT
rs->FetchField("meter",&lData);
strData.Format("%u",lData);
m_edMeter.SetWindowText(strData);
////METER COUNT
//rs->FetchField("meter",&fData);
//vData=fData;
////format to system default for numbers
////so that guy in Bali can makes just as much
////sense of the numbers as the guy in denmark
////and the guy in TexArcana Arizona
////localization rocks!: Eee-yahh-ba-by!
//VarFormatNumber(&vData,-1,-2,-2,-2,0,&bstrValue);
////on the downside will not work with NT 3.0
////See CGZCurrencyFormatter for details why we don't
////care so far.
//strData=bstrValue;
//m_edMeter.SetWindowText(strData);
m_edProblemBrief.SetLimitText(75);
if(bUnitSelected==true)
ShowExtendedUnitInfo();
rs->Close();
//FillPMList();
FillLists();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
//*****************************
void CWOTABProblem::OnCkallsn()
{
FillLists();
}
//FILL PICK LISTS
void CWOTABProblem::FillLists()
{
/*
//fill units
m_cbUnit.Clear();
m_cbUnit.AddRow(" < All Units >","0");
q="SELECT units.id, [sn] & \" - \" & [company_person] & \" \" & [unitmodels].[description] & \" \" & [unitmodels].[model] AS name "
"FROM (units LEFT JOIN unitmodels ON units.model = unitmodels.id) LEFT JOIN nonclients ON unitmodels.manufacturer = nonclients.id;";
rs->QueryReadOnly(q);
if(!rs->IsEmpty())
{
do
{
VERIFY(rs->FetchField("name",&strData));
VERIFY(rs->FetchField("id",&lData));
strIndex.Format("%u",lData);
m_cbUnit.AddRow(strData,strIndex);
}while(rs->MoveForward());
}
m_cbUnit.SetCurSel(0);
*/
CString q,strData,strIndex;
long lData;
//FILL UNIT LIST:
m_cbSNUnits.Clear();
m_cbSNUnits.AddRow(" < No unit >","0");
if(m_ckAllSn.GetCheck())
q.Format("SELECT units.sn, units.id FROM units ORDER BY units.sn;");
else//just this client's based on workorder number
q.Format("SELECT units.id, [sn] & \" - \" & IIf(IsNull( [company_person]),\" "
"\",[company_person]) & \" \" & IIf(IsNull([unitmodels].[description]),\" "
"\",[unitmodels].[description]) "
"& \" \" & IIf(IsNull([unitmodels].[model]),\" "
"\",[unitmodels].[model]) AS name FROM ((units "
"LEFT JOIN unitmodels ON units.model = unitmodels.id) "
"LEFT JOIN nonclients ON unitmodels.manufacturer "
"= nonclients.id) RIGHT JOIN wo ON units.client = "
"wo.client WHERE (((wo.id)=%s)) ORDER BY units.sn; ",*m_pstrWorkorderID);
#ifdef _DEBUG
// m_pApp->ShowStuff(q);
#endif
rs->QueryReadOnly(q);
if(!rs->IsEmpty())
{
do
{
rs->FetchField("name",&strData);
strData.TrimRight();
strData.TrimRight('-');
rs->FetchField("id",&lData);
strIndex.Format("%u",lData);
m_cbSNUnits.AddRow(strData,strIndex);
}while(rs->MoveForward());
}
m_cbSNUnits.Select(m_strSelectedUnit);
//Fill problem status list
FillProbStatList();
//FILL TASKS LIST
m_cbTasks.Clear();
m_cbTasks.AddRow(" < No task >","0");
rs->QueryReadOnly("SELECT tasks.description, tasks.id FROM tasks ORDER BY tasks.description;");
if(!rs->IsEmpty())
{
do
{
rs->FetchField("description",&strData);
rs->FetchField("id",&lData);
strIndex.Format("%u",lData);
m_cbTasks.AddRow(strData,strIndex);
}while(rs->MoveForward());
}
m_cbTasks.Select("0");
rs->Close();
FillPMList();
}
//******************************
void CWOTABProblem::FillPMList()
{
//no longer used 10/12/2002
return;
CString q,strData,strIndex;
long lData;
m_cbPMList.Clear();
m_cbPMList.AddRow(" < Not a P.M. item >","0");
strData=m_cbSNUnits.GetCurrentRowID();
if(strData.IsEmpty()) strData="0";
//FILL PM LIST
q.Format("SELECT pmhead.id, pmhead.description "
"FROM pmhead INNER JOIN units ON pmhead.link = units.id "
"WHERE (((pmhead.isclient)=False) AND ((units.id)=%s)) "
"UNION (SELECT pmhead.id, pmhead.description "
"FROM pmhead INNER JOIN (wo INNER JOIN clients ON wo.client = clients.id) ON pmhead.link = clients.id "
"WHERE (((pmhead.isclient)=True) AND ((wo.id)=%s))) "
"ORDER BY description;",strData,*m_pstrWorkorderID);
//// m_pApp->ShowStuff(q);
rs->QueryReadOnly(q);
if(!rs->IsEmpty())
{
do
{
rs->FetchField("description",&strData);
rs->FetchField("id",&lData);
strIndex.Format("%u",lData);
m_cbPMList.AddRow(strData,strIndex);
}while(rs->MoveForward());
}
m_cbPMList.Select(m_strSelectedPM);
rs->Close();
}
//*****************************************************
void CWOTABProblem::OnCloseupCbsn()
{
m_strSelectedUnit=m_cbSNUnits.GetCurrentRowID();
CString q;
//m_lblModelInfo.SetWindowText("");
if(m_strSelectedUnit=="0")
{
m_lblMeter.ShowWindow(FALSE);
m_edMeter.ShowWindow(FALSE);
m_btnUnitHist.ShowWindow(FALSE);
m_lblWarranty.SetWindowText("");
}
else
{
m_lblMeter.ShowWindow(TRUE);
m_edMeter.ShowWindow(TRUE);
m_btnUnitHist.ShowWindow(TRUE);
ShowExtendedUnitInfo();
}
FillPMList();
bModified=true;
}
//*****************************************************
void CWOTABProblem::OnCloseupCbpmlist()
{
/*m_strSelectedPM=m_cbPMList.GetCurrentRowID();
bModified=true;*/
}
//*****************************************************
void CWOTABProblem::OnCloseupCbprobstat()
{
m_strSelectedProbStat=m_cbProbStat.GetCurrentRowID();
bModified=true;
}
//*****************************************
void CWOTABProblem::OnLblsnlist()
{//m_strSelectedUnit
CUnitsDlg d;
if(m_strSelectedUnit!="0" && !m_strSelectedUnit.IsEmpty())
d.m_strSelectedUnit=m_strSelectedUnit;
d.DoModal();
FillLists();//BUGBUG: NOT FILLING UNIT LIST?
}
void CWOTABProblem::OnOK()
{ //HACK to work around default enter key behaviour and do nothing
}
void CWOTABProblem::OnCloseupCbtasks()
{
CString id,q,strData, strTemp1, strTemp2;
id=m_cbTasks.GetCurrentRowID();
if(id=="0")
return;
//was firing twice, once on killfocus and
//once on close up. FUTURE: fix control
if(id==m_strLastSelectedTask)
return;
m_strLastSelectedTask=id;
//confirm user wants to overwrite if the existing fields are not empty
m_edProblem.GetWindowText(strTemp2);
m_edProblemBrief.GetWindowText(strTemp1);
if(!strTemp1.IsEmpty() || !strTemp2.IsEmpty())
{
if(AfxMessageBox(
"Caution:\r\n"
"You are about to overwrite the existing brief description\r\n"
"and detailed description with the task information\r\n\r\n"
"Continue?",MB_YESNO|MB_DEFBUTTON2)==IDNO) return;
}
m_edProblemBrief.SetWindowText(m_cbTasks.GetCurrentRowText());
//m_edProblem.GetWindowText(existtext);
//addtext=m_cbTasks.GetCurrentRowText();
//addtext=addtext+"\r\n"+existtext;
//m_edProblem.SetWindowText(addtext);
//Added 10/11/2002
//Put detailed task description at bottom of details
q.Format("SELECT tasks.* FROM tasks WHERE (((tasks.id)=%s));",id);
if(rs->QueryReadOnly(q))
{
if(rs->FetchField("details",&strData))
{
m_edProblem.SetWindowText(strData);
}
}
bModified=true;
}
void CWOTABProblem::OnLbltasklist()
{
CDlgTasks d;
d.DoModal();
FillLists();
}
//===========================
void CWOTABProblem::OnLblpmlist()
{
AfxMessageBox("Note: this will take you to the P.M. screen where you can\r\n"
"edit the displayed item only.\r\n\r\n"
"If you want to setup a new P.M. schedule for a unit or client you need to\r\n"
"go through Edit->Clients or Edit->Units or Edit->Models instead\r\n");
//get needed info for this item
//this is !@#$ed, should have made a
//way to call up the pmedit dialog with
//just the pmheads id number
CString q,strLink;
long lLink;
bool bClient,bModel;
q.Format("SELECT pmhead.isclient, pmhead.ismodel, pmhead.link "
"FROM pmhead WHERE (((pmhead.id)=%s));",m_strSelectedPM);
rsPrint->QueryReadOnly(q);
if(rsPrint->IsEmpty())
{
AfxMessageBox("Error opening PM record");
return;
}
rsPrint->FetchField("isclient",&bClient);
rsPrint->FetchField("ismodel",&bModel);
rsPrint->FetchField("link",&lLink);
strLink.Format("%u",lLink);
//Open the PM dialog for this client
CPM d;
d.PreInitialize(bClient,bModel,strLink,"Edit scheduled item");
d.DoModal();
rs->Close();
FillPMList();
}
void CWOTABProblem::OnBtnunithist()
{
CString q,str,parameters;
CGetAllOrXValue d;
long top;
if(m_strSelectedUnit=="0") return;
d.m_strPrompt="How many incidents?";
d.m_plValueReturn=&top;
if(d.DoModal()!=IDOK) return;
if(top==0) return;
if(top!=-1)
str.Format(" TOP %u ",top);
//PARAMETERS
parameters=str;
str.Format("\"%s\" AS zCurrentUser, ",m_pApp->m_strCurrentUserName);
parameters=parameters + str;
/*
q.Format("SELECT %s probs.id, probs.wolink AS WORKORDERID, probs.brief AS PROBBRIEF, probs.notes AS PROBNOTES, Format([start],\"Short Date\") AS servdate, "
"[labor].[details], clients.company AS clientcompany, [units].[sn], [unitmodels].[model], [users].[initials], [probs].[meter], [ztotalparts].[totalparts], [ztotallabor].[totallabor] "
"FROM [SELECT Sum((labor.hours*rates.rate)+(labor.travhours*travrates.rate)) AS totallabor "
"FROM probs INNER JOIN (rates INNER JOIN (rates AS travrates INNER JOIN labor ON travrates.id = labor.rate) ON rates.id = labor.rate) ON probs.id = labor.link "
"GROUP BY probs.id]. AS ztotallabor RIGHT JOIN ([SELECT IIf(IsNull(Sum(woparts.quantity*woparts.price)),0,Sum(woparts.quantity*woparts.price)) AS totalparts, probs.id "
"FROM probs LEFT JOIN woparts ON probs.id = woparts.link "
"GROUP BY probs.id]. AS ztotalparts RIGHT JOIN (users RIGHT JOIN ((labor RIGHT JOIN (((wo RIGHT JOIN probs ON [wo].[id]=[probs].[wolink]) LEFT JOIN units ON [probs].[unit]=[units].[id]) LEFT JOIN unitmodels ON [units].[model]=[unitmodels].[id]) ON [labor].[link]=[probs].[id]) LEFT JOIN clients ON [wo].[client]=[clients].[id]) ON [users].[id]=[labor].[tech]) ON [ztotalparts].[id]=[probs].[id]) ON [ztotallabor].[id]=[probs].[id] "
"WHERE ((([probs].[unit])=%s)) "
"ORDER BY [labor].[start] DESC;",parameters, m_strSelectedUnit);
*/
q.Format("SELECT %s probs.id, probs.wolink AS WORKORDERID, probs.brief AS PROBBRIEF, probs.notes AS "
"PROBNOTES, Format([start],\"Short Date\") AS servdate, labor.details, clients.company AS "
"clientcompany, units.sn, unitmodels.model, users.initials, probs.meter, ztotalparts.totalparts, ztotallabor.totallabor "
"FROM [SELECT Sum((labor.hours*rates.rate)+(labor.travhours*travrates.rate)) AS totallabor, "
"probs.id FROM probs INNER JOIN (rates INNER JOIN (rates AS travrates INNER JOIN labor ON "
"travrates.id = labor.travrate) ON rates.id = labor.rate) ON probs.id = labor.link GROUP BY "
"probs.id]. AS ztotallabor RIGHT JOIN ([SELECT IIf(IsNull(Sum(woparts.quantity*woparts.price)), "
"0,Sum(woparts.quantity*woparts.price)) AS totalparts, probs.id FROM probs LEFT JOIN woparts ON "
"probs.id = woparts.link GROUP BY probs.id]. AS ztotalparts RIGHT JOIN (users RIGHT JOIN ((labor "
"RIGHT JOIN (((wo RIGHT JOIN probs ON wo.id = probs.wolink) LEFT JOIN units ON probs.unit = units.id) "
"LEFT JOIN unitmodels ON units.model = unitmodels.id) ON labor.link = probs.id) LEFT JOIN clients ON "
"wo.client = clients.id) ON users.id = labor.tech) ON ztotalparts.id = probs.id) ON ztotallabor.id = probs.id "
"WHERE (((probs.unit)=%s) AND ((units.sn) Is Not Null)) "
"ORDER BY labor.start DESC;",parameters, m_strSelectedUnit);
#ifdef _DEBUG
m_pApp->ShowStuff(q);
#endif
rsPrint->QueryReadOnly(q);
rsPrint->Close();
rsPrint->QueryReadOnly(q);
rsPrint->QueryReadOnly(q);
if(rsPrint->IsEmpty())
AfxMessageBox("There is no historical data for this unit");
else
{
m_pApp->PrintCMReportRDC("Unit history report",rsPrint->RecordSetPointer());
//m_pApp->CreateTTX("unithist.ttx",rsPrint->RecordSetPointer());
}
rsPrint->Close();
}
void CWOTABProblem::OnKillfocusEdmetercount()
{
CString strTemp;
m_edMeter.GetWindowText(strTemp);
if(strTemp.GetLength()>10)
{
AfxMessageBox("Maximum value for meter count is: 2,147,483,647");
m_edMeter.SetFocus();
return;
}
if(strTemp.GetLength()==10)
{
double dbData=atof(strTemp);
if(dbData>2147483647)
{
AfxMessageBox("Maximum value for meter count is: 2,147,483,647");
m_edMeter.SetFocus();
return;
}
}
if(m_edMeter.GetModify())
bModified=true;
}
void CWOTABProblem::OnKillfocusEdprob()
{
if(m_edProblem.GetModify())
bModified=true;
}
void CWOTABProblem::OnKillfocusEdprobbrief()
{
if(m_edProblemBrief.GetModify())
bModified=true;
}
void CWOTABProblem::Security()
{
//m_bReadOnly=false;
int x=m_pApp->Allowed(RWORKORDER,false);
if(x==0)//no access allowed
{
m_pApp->SecurityWarning();
CDialog::OnCancel();
}
//modified 8/28/00 to allow non-tech dispatch
//if(x==2 || (!m_pApp->m_bTech))//read only
if(x==2)//read only
{
//m_bReadOnly=true;
//m_cbPMList.EnableWindow(FALSE);
m_cbProbStat.EnableWindow(FALSE);
m_cbSNUnits.EnableWindow(FALSE);
m_cbTasks.EnableWindow(FALSE);
m_ckAllSn.EnableWindow(FALSE);
m_edMeter.SetReadOnly(TRUE);
m_edProblem.SetReadOnly(TRUE);
m_edProblemBrief.SetReadOnly(TRUE);
//m_lblPMList.EnableWindow(FALSE);
m_lblTasks.EnableWindow(FALSE);
m_lblSnList.EnableWindow(FALSE);
}
}
//Added 8/28/00
void CWOTABProblem::OnLblprobstatus()
{
CProbStatDlg d;
d.DoModal();
FillProbStatList();
}
void CWOTABProblem::FillProbStatList()
{
CString q,strData,strIndex;
long lData;
//FILL STATUS LIST
m_cbProbStat.Clear();
//1.9.3.0 changed to order by notes instead of by ID
rs->QueryReadOnly("SELECT probstat.id, probstat.notes FROM probstat ORDER BY probstat.notes;");
if(!rs->IsEmpty())
{
do
{
rs->FetchField("notes",&strData);
rs->FetchField("id",&lData);
strIndex.Format("%u",lData);
m_cbProbStat.AddRow(strData,strIndex);
}while(rs->MoveForward());
}
m_cbProbStat.Select(m_strSelectedProbStat);
rs->Close();
}
void CWOTABProblem::ShowExtendedUnitInfo()
{
m_strSelectedUnit;//=m_cbSNUnits.GetCurrentRowID();
CString q,UnitNotes,terms,ModelNotes;
COleDateTime dtPurchased;
long lMonths;
bool bLifetime;
bool bWarrantyOverride=false;
q.Format("SELECT units.specialwarranty FROM units WHERE (((units.id)=%s) "
"AND (Len([specialwarranty])>\"1\"));",m_strSelectedUnit);
if(rs->QueryReadOnly(q))
if(!rs->IsEmpty())//It has overridden warranty terms!!
{
bWarrantyOverride=true;
rs->FetchField("specialwarranty",&terms);
}
q.Format("SELECT units.id, unitmodels.lifetimewarranty, [unitmodels].[warranty]-DateDiff(\"m\",[units].[purchasedate],Now()) AS months_remaining, "
"unitmodels.warrantyterms, unitmodels.notes AS MODELNOTES, units.notes AS UNITNOTES, units.purchasedate FROM units LEFT JOIN unitmodels ON units.model = unitmodels.id "
"WHERE (((units.id)=%s));",m_strSelectedUnit);
//#ifdef _DEBUG
// m_pApp->ShowStuff(q);
//#endif
if(rs->QueryReadOnly(q))
if(!rs->IsEmpty())
{
rs->FetchField("months_remaining",&lMonths);
rs->FetchField("lifetimewarranty",&bLifetime);
rs->FetchField("purchasedate",&dtPurchased);
if(!bWarrantyOverride)
rs->FetchField("warrantyterms",&terms);//fetch standard terms
rs->FetchField("UNITNOTES",&UnitNotes);
rs->FetchField("MODELNOTES",&ModelNotes);
if(!bWarrantyOverride)
m_strWarrantyInfo.Format(
"Warranty information:\r\n"
"Unit purchased: %s\r\n\r\n"
"Warranty terms:\r\n%s\r\n\r\n"
"Unit notes:\r\n%s\r\n\r\n"
"Unit model notes:\r\n%s",
dtPurchased.Format(VAR_DATEVALUEONLY),terms,UnitNotes,ModelNotes);
else
m_strWarrantyInfo.Format(
"Warranty information:\r\n"
"Unit purchased: %s\r\n\r\n"
"Warranty (CUSTOM TO THIS UNIT):\r\n%s\r\n\r\n"
"Unit notes:\r\n%s\r\n\r\n"
"Unit model notes:\r\n%s",
dtPurchased.Format(VAR_DATEVALUEONLY),terms,UnitNotes,ModelNotes);
if(bLifetime)
{
m_lblWarranty.SetTextColor(RGB(0,0,255));
m_lblWarranty.SetWindowText("Lifetime warranty. < warranty info.>");
}
else
{
if(lMonths<0)
{
m_lblWarranty.SetTextColor(RGB(255,0,0));
q.Format("Warranty expired %u months ago. < warranty info.>",abs(lMonths));
m_lblWarranty.SetWindowText(q);
}
else
{
m_lblWarranty.SetTextColor(RGB(0,0,255));
q.Format("Warrantied for %u more months. < warranty info.>",lMonths);
m_lblWarranty.SetWindowText(q);
}
}
}
else
{
m_lblWarranty.SetWindowText("Warranty: no information available");
}
if(bWarrantyOverride)
m_lblWarranty.SetWindowText(" < CUSTOM WARRANTY >");
}
//**********************************
void CWOTABProblem::OnLblwarranty()
{
AfxMessageBox(m_strWarrantyInfo );
}