Files

824 lines
20 KiB
C++

// LoanersDlg.cpp : implementation file
//
#include "stdafx.h"
#include "sp.h"
#include "LoanersDlg.h"
#include "loanerseditdlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CLoanersDlg dialog
CLoanersDlg::CLoanersDlg(CWnd* pParent /*=NULL*/)
: CDialog(CLoanersDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CLoanersDlg)
//}}AFX_DATA_INIT
m_pApp= (CSpApp*)AfxGetApp();
rsPrint=m_pApp->rsPool->GetRSPrint("CLoanersDlg rsPrint");
rs=m_pApp->rsPool->GetRS("CLoanersDlg");
m_strCriteria=" WHERE (((rentals.returned)=False))";
m_nDateCriteriaX=0;
//show rented out items only when startup
m_nTypeCriteriaX=2;
}
CLoanersDlg::~CLoanersDlg()
{
m_pApp->rsPool->ReleaseRS(&rsPrint->m_nID);
m_pApp->rsPool->ReleaseRS(&rs->m_nID);
}
void CLoanersDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLoanersDlg)
DDX_Control(pDX, IDC_CKRECEIVEDDATE, m_ckReceivedDate);
DDX_Control(pDX, IDC_CKDUEDATE, m_ckDueDate);
DDX_Control(pDX, IDC_CKANYDATE, m_ckAnyDate);
DDX_Control(pDX, IDC_CKSENTDATE, m_ckSentDate);
DDX_Control(pDX, IDC_CKSHOWRETURNED, m_ckShowReturned);
DDX_Control(pDX, IDC_CKSHOWOUT, m_ckShowOut);
DDX_Control(pDX, IDC_CKSHOWALLITEMS, m_ckShowAll);
DDX_Control(pDX, IDC_REPORT, m_rc);
DDX_Control(pDX, IDC_lblTo, m_lblTo);
DDX_Control(pDX, IDC_DTTO, m_dtTo);
DDX_Control(pDX, IDC_DTFROM, m_dtFrom);
//}}AFX_DATA_MAP
DDX_Control(pDX, IDC_LBL_SHOW, m_lblShow);
}
BEGIN_MESSAGE_MAP(CLoanersDlg, CDialog)
//{{AFX_MSG_MAP(CLoanersDlg)
ON_BN_CLICKED(IDC_CKANYDATE, OnCkanydate)
ON_BN_CLICKED(IDC_CKSENTDATE, OnCksentdate)
ON_BN_CLICKED(IDC_CKDUEDATE, OnCkduedate)
ON_BN_CLICKED(IDC_CKRECEIVEDDATE, OnCkreceiveddate)
ON_BN_CLICKED(IDC_CKSHOWRETURNED, OnCkshowreturned)
ON_BN_CLICKED(IDC_CKSHOWOUT, OnCkshowout)
ON_BN_CLICKED(IDC_CKSHOWALLITEMS, OnCkshowallitems)
ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DTTO, OnDatetimechangeDtto)
ON_NOTIFY(DTN_DATETIMECHANGE, IDC_DTFROM, OnDatetimechangeDtfrom)
ON_NOTIFY(RVN_ITEMDBCLICK, IDC_REPORT, OnRvnItemDbClick)
ON_NOTIFY(RVN_COLUMNCLICK, IDC_REPORT, OnColumnClick)
ON_BN_CLICKED(IDC_BTNPRINT, OnBtnprint)
//}}AFX_MSG_MAP
ON_COMMAND(ID_NEW, OnNew)
ON_COMMAND(ID_DELETE, OnDelete)
ON_COMMAND(ID_CLOSE_LOANERS_AND_RENTALS, OnCloseThisScreen)
ON_COMMAND(ID_HELPONLOANERS, OnHelponloaners)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLoanersDlg message handlers
void CLoanersDlg::OnRvnItemDbClick(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMREPORTVIEW lpnmrv = (LPNMREPORTVIEW)pNMHDR;
if(lpnmrv->iItem >=0)//-1 if clicked on invalid
{
CLoanersEditDlg d;
CString item=m_rc.GetItemText(lpnmrv->iItem,6);
d.SetRentalID(&item);
if(d.DoModal()==IDOK)
FillView();
}
*pResult = FALSE;
}
BOOL CLoanersDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_resize.Create( this );
ShowWindow(SW_HIDE);
Security();
CWaitCursor wait;
//defaults
m_ckShowOut.SetCheck(TRUE);
m_ckAnyDate.SetCheck(TRUE);
CString profile,q;
q.Format("SELECT users.rentalprofile "
"FROM users WHERE (((users.id)=%u));",m_pApp->m_lusrID);
rs->Query(q);
rs->FetchField("rentalprofile",&profile);
m_ilReport.Create(IDB_BM2, 16, 1, RGB(255,0,255));
m_rc.SetImageList(&m_ilReport);
//ShowWindow(SW_MAXIMIZE);
m_rc.InsertColor(0, 0x00C0D8C0);
m_rc.InsertColor(1, ::GetSysColor(COLOR_GRAYTEXT));
m_rc.InsertColor(2, 0x00D0C0C0);
m_rc.InsertColor(3, 0x00804000);
RVCOLUMN rvc;
rvc.nFormat = RVCF_TEXT|RVCF_EX_AUTOWIDTH|RVCF_EX_FIXEDWIDTH|RVCF_SUBITEM_IMAGE;
rvc.iImage = 1;
rvc.lpszText = _T("Status");
rvc.iWidth = 60;
m_rc.DefineColumn(0, &rvc);
rvc.nFormat = RVCF_TEXT;
rvc.lpszText = "Item";
rvc.iWidth = 60;
m_rc.DefineColumn(1, &rvc);
rvc.lpszText = "At";
rvc.iWidth = 60;
m_rc.DefineColumn(2, &rvc);
rvc.lpszText = "Out";
rvc.iWidth = 60;
m_rc.DefineColumn(3, &rvc);
rvc.nFormat = RVCF_TEXT;
rvc.lpszText = "Due";
rvc.iWidth = 60;
m_rc.DefineColumn(4, &rvc);
rvc.lpszText = "Rcvd.";
rvc.iWidth = 60;
m_rc.DefineColumn(5, &rvc);
rvc.nFormat = RVCF_TEXT | RVCF_EX_FIXEDWIDTH;
rvc.lpszText = "id";
rvc.iWidth = 0;
m_rc.DefineColumn(6, &rvc);
rvc.nFormat = RVCF_TEXT;
rvc.lpszText = "Ref";
rvc.iWidth = 60;
m_rc.DefineColumn(7, &rvc);
rvc.nFormat = RVCF_TEXT;
rvc.lpszText = "Desc.";
rvc.iWidth = 60;
m_rc.DefineColumn(8, &rvc);
//setup according to users preferences
if(!profile.IsEmpty())
m_rc.GetProfile(&profile);
else
{
//not needed when setting by pref
//but if there are no preferences then you would need it
m_rc.ActivateColumn(0, 0);
m_rc.ActivateColumn(1, 1);
m_rc.ActivateColumn(2, 2);
m_rc.ActivateColumn(3, 3);
m_rc.ActivateColumn(4, 4);
m_rc.ActivateColumn(5, 5);
m_rc.ActivateColumn(6, 6);
m_rc.ActivateColumn(7, 7);
m_rc.ActivateColumn(8, 8);
}
m_rc.ModifyStyle(0, RVS_SINGLESELECT);
//m_rc.ModifyStyle(0, RVS_SHOWCOLORALTERNATE);
//turn off the grids
m_rc.ModifyStyle(RVS_SHOWVGRID, 0);
m_rc.ModifyStyle(RVS_SHOWHGRID, 0);
//retrieve the loaner items and display them
FillView();
Layout();
//Use the current width and height as the minimum size
m_resize.SetMinimumTrackingSize();
//===================================================
// SET WINDOW SIZE TO MATCH WORK AREA
ShowWindow(SW_SHOWMAXIMIZED);
CRect workarea;
SystemParametersInfo(SPI_GETWORKAREA,0,&workarea,0);
SetWindowPos(NULL,workarea.left,workarea.top,workarea.Width(),workarea.Height(),SWP_NOZORDER);
//===================================================
//ShowWindow(SW_MAXIMIZE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CLoanersDlg::FillView()
{
CString q;
COleDateTime dtDefault;
dtDefault.SetDate(1968,03,12);
int x=0;
q.Format("SELECT rentals.id, rentals.ref, IIf(IsNull([sn]),[rentals].[description] & [parts].[description],[company_person] & "
"\" \" & [unitmodels].[description] & \" \" & [unitmodels].[model]) AS [desc], [rentals]![description] & "
"IIf(IsNull([parts]![partnumber]),\"\",\"part:\" & [parts]![partnumber]) & "
"IIf(IsNull([units]![sn]),\"\",\"unit:\" & [units]![sn]) AS item, [loanedto] & "
"IIf(IsNull([clients]![company]),[clients]![first] & \" \" & [clients]![last],[clients]![company]) "
"AS rentor, Format([dateout],\"Short Date\") AS outdate, IIf([datedue]=#%s#,\"na\",Format([datedue], "
"\"Short Date\")) AS duedate, IIf([datereturn]=#%s#,\"Out\",Format([datereturn],\"Short Date\")) "
"AS retdate, rentals.returned, DateDiff(\"d\",Now(),[datedue]) AS duedays "
"FROM ((((rentals LEFT JOIN clients ON rentals.clientlink = clients.id) LEFT JOIN "
"units ON rentals.unitlink = units.id) LEFT JOIN parts ON rentals.partlink = parts.id) "
"LEFT JOIN unitmodels ON units.model = unitmodels.id) LEFT JOIN nonclients ON unitmodels.manufacturer = nonclients.id "
"%s %s;",dtDefault.Format(_T("%m/%d/%Y")),
dtDefault.Format(_T("%m/%d/%Y")),m_strCriteria,m_strOrderBy);
/*
q.Format("SELECT rentals.id, rentals.ref, [rentals]![description] "
"& IIf(IsNull([parts]![partnumber]),\"\","
"\"part:\" & [parts]![partnumber] ) & "
"IIf(IsNull([units]![sn]),\"\",\"unit:\" & "
"[units]![sn]) AS item, [loanedto] & "
"IIf(IsNull([clients]![company]), "
"[clients]![first] & \" \" & [clients]![last], "
"[clients]![company]) AS rentor, Format([dateout], "
"\"Short Date\") AS outdate, IIf([datedue]=#%s# "
",\"na\",Format([datedue],\"Short Date\")) AS "
"duedate, IIf([datereturn]=#%s#,\"Out\", "
"Format([datereturn],\"Short Date\")) AS retdate, "
"rentals.returned, DateDiff(\"d\",Now(),[datedue]) AS duedays "
"FROM ((rentals LEFT JOIN clients ON "
"rentals.clientlink = clients.id) LEFT JOIN units "
"ON rentals.unitlink = units.id) LEFT JOIN parts "
"ON rentals.partlink = parts.id %s %s;",dtDefault.Format(_T("%m/%d/%Y")),
dtDefault.Format(_T("%m/%d/%Y")),m_strCriteria,m_strOrderBy);
*/
//"WHERE ( ((rentals.datereturn) Between #06/01/2000# And #06/30/2000#) AND ((rentals.returned)=False));");
// "WHERE ( ((rentals.returned)=True) AND ((rentals.dateout) Between #1/1/1990# And #1/1/2000#));");
//WHERE (((rentals.returned)=True) AND ((rentals.dateout) Between #1/1/1990# And #1/1/2001#))
//rs->Query("SELECT rentals.* FROM rentals WHERE (((rentals.id)=0));");
rs->Query(q);
//m_pApp->ShowStuff(q);
m_rc.DeleteAllItems();
if(rs->IsEmpty())
return;
CString strData,strItem,strRentor,strOutdate,strDueDays,strDuedate,strRetdate,strID,strRef,strDesc;
COleDateTime dtDate;
long lData;
long lDueDays;
bool bReturned;
int nDueDays;
rs->MoveFirst();
do
{
rs->FetchField("item",&strItem);
//avoid the underline in the report control
//for a single &
strItem.Replace("&","&&");
rs->FetchField("rentor",&strRentor);
strRentor.Replace("&","&&");
rs->FetchField("outdate",&strOutdate);
rs->FetchField("duedate",&strDuedate);
rs->FetchField("retdate",&strRetdate);
rs->FetchField("duedays",&lDueDays);
nDueDays=lDueDays;//atoi(strDueDays);
rs->FetchField("id",&lData);
strID.Format("%u",lData);
rs->FetchField("returned",&bReturned);
rs->FetchField("ref",&strRef);
rs->FetchField("desc",&strDesc);
//Set the look of the row and insert it
//LATE!
RVITEM rvi;
rvi.iItem = x;
rvi.iSubItem = 0;
rvi.nMask = RVIM_IMAGE|RVIM_PREVIEW|RVIM_STATE|RVIM_LPARAM;
rvi.nState = 0;
rvi.nPreview = 0;//no preview necessary
if(bReturned)
rvi.iImage=3;//blank
else
{
rvi.iImage=0;//green light - default
if(nDueDays<0)//overdue
rvi.iImage=2;//redlight
if(nDueDays==0)//due today
rvi.iImage=1;//orange light
}
rvi.lParam = x;
m_rc.InsertItem(&rvi);
//ITEM
rvi.iSubItem = 1;
rvi.nMask = RVIM_TEXT;
rvi.lpszText = strItem.GetBuffer(strItem.GetLength());
m_rc.SetItem(&rvi);
//AT
rvi.iSubItem = 2;
rvi.lpszText = strRentor.GetBuffer(strRentor.GetLength());
m_rc.SetItem(&rvi);
//OUT
rvi.iSubItem = 3;
rvi.lpszText = strOutdate.GetBuffer(strOutdate.GetLength());
m_rc.SetItem(&rvi);
//DUE
rvi.iSubItem = 4;
rvi.lpszText = strDuedate.GetBuffer(strDuedate.GetLength());
m_rc.SetItem(&rvi);
//BACK
rvi.iSubItem = 5;
if(bReturned==false)
rvi.lpszText=" ";
else
rvi.lpszText = strRetdate.GetBuffer(strRetdate.GetLength());
m_rc.SetItem(&rvi);
//ID
rvi.iSubItem = 6;
rvi.lpszText = strID.GetBuffer(strID.GetLength());
m_rc.SetItem(&rvi);
//ref
rvi.iSubItem = 7;
rvi.lpszText = strRef.GetBuffer(strRef.GetLength());
m_rc.SetItem(&rvi);
//description
rvi.iSubItem = 8;
rvi.lpszText = strDesc.GetBuffer(strDesc.GetLength());
m_rc.SetItem(&rvi);
x++;
}while(rs->MoveForward());
}
//SET CRITERIA FOR QUERY:
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
//*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
void CLoanersDlg::OnCkanydate()
{
m_nDateCriteriaX=0;
ShowDateFields(false);
Criteria();
}
void CLoanersDlg::OnCksentdate()
{/*
if(m_nDateCriteriaX==0)//were not dates showing before
{
//so just show dates and exit
m_ckAnyDate.SetCheck(FALSE);
ShowDateFields(true);
m_nDateCriteriaX=(1);
return;
}
*/
ShowDateFields(true);
m_nDateCriteriaX=(1);
Criteria();
}
void CLoanersDlg::OnCkduedate()
{/*
if(m_nDateCriteriaX==0)//were not dates showing before
{
//so just show dates and exit
m_ckAnyDate.SetCheck(FALSE);
ShowDateFields(true);
m_nDateCriteriaX=(2);
return;
}*/
ShowDateFields(true);
m_nDateCriteriaX=(2);
Criteria();
}
void CLoanersDlg::OnCkreceiveddate()
{
/*
if(m_nDateCriteriaX==0)//were not dates showing before
{
//so just show dates and exit
m_ckAnyDate.SetCheck(FALSE);
ShowDateFields(true);
m_nDateCriteriaX=(3);
return;
}*/
ShowDateFields(true);
m_nDateCriteriaX=(3);
Criteria();
}
void CLoanersDlg::OnDatetimechangeDtto(NMHDR* pNMHDR, LRESULT* pResult)
{
Criteria();
*pResult = 0;
}
void CLoanersDlg::OnDatetimechangeDtfrom(NMHDR* pNMHDR, LRESULT* pResult)
{
Criteria();
*pResult = 0;
}
void CLoanersDlg::OnCkshowreturned()
{
m_nTypeCriteriaX=1;
Criteria();
}
void CLoanersDlg::OnCkshowout()
{
m_nTypeCriteriaX=2;
Criteria();
}
void CLoanersDlg::OnCkshowallitems()
{
m_nTypeCriteriaX=0;
Criteria();
}
//set date and type criteria and rebuild list
void CLoanersDlg::Criteria()
{
CString strFrom,strTo,strDatePart,strTypePart;
COleDateTime dtData;
m_ckAnyDate.SetCheck(FALSE);
m_ckDueDate.SetCheck(FALSE);
m_ckSentDate.SetCheck(FALSE);
m_ckShowAll.SetCheck(FALSE);
m_ckShowOut.SetCheck(FALSE);
m_ckShowReturned.SetCheck(FALSE);
m_ckReceivedDate.SetCheck(FALSE);
m_dtFrom.GetTime(dtData);
strFrom=dtData.Format(_T("%m/%d/%Y"));
m_dtTo.GetTime(dtData);
strTo=dtData.Format(_T("%m/%d/%Y"));
m_strCriteria.Empty();
switch(m_nDateCriteriaX)
{
case 1://sent date
m_ckSentDate.SetCheck(TRUE);
strDatePart.Format("((rentals.dateout) Between #%s# And #%s#)",strFrom,strTo);
break;
case 2://due date
m_ckDueDate.SetCheck(TRUE);
strDatePart.Format("((rentals.datedue) Between #%s# And #%s#)",strFrom,strTo);
break;
case 3://received date
m_ckReceivedDate.SetCheck(TRUE);
strDatePart.Format("((rentals.datereturn) Between #%s# And #%s#) AND ((rentals.returned)=True)",strFrom,strTo);
break;
default://any date
strDatePart.Empty();
m_ckAnyDate.SetCheck(TRUE);
break;
}
switch(m_nTypeCriteriaX)
{
case 1://returned
strTypePart=" ((rentals.returned)=True)";
m_ckShowReturned.SetCheck(TRUE);
break;
case 2://out
m_ckShowOut.SetCheck(TRUE);
strTypePart=" ((rentals.returned)=False)";
break;
default://all
m_ckShowAll.SetCheck(TRUE);
strTypePart.Empty();
break;
}
//No criteria
if(strDatePart.IsEmpty() && strTypePart.IsEmpty())
{
m_strCriteria.Empty();
FillView();
return;
}
//both criteria
if(!strDatePart.IsEmpty() && !strTypePart.IsEmpty() )
{
m_strCriteria=" WHERE (" + strTypePart + " AND " + strDatePart + ")";
FillView();
return;
}
//only one criteria
if(!strTypePart.IsEmpty())
{
m_strCriteria = " WHERE (" + strTypePart+ ")";
FillView();
return;
}
else
{
m_strCriteria=" WHERE (" + strDatePart+ ")";
FillView();
return;
}
}
void CLoanersDlg::ShowDateFields(bool bShow)
{
m_dtFrom.ShowWindow(bShow ? TRUE : FALSE);
m_dtTo.ShowWindow(bShow ? TRUE : FALSE);
m_lblTo.ShowWindow(bShow ? TRUE : FALSE);
}
void CLoanersDlg::Security()
{
int x=m_pApp->Allowed(RLOANERS,true);
if(x==2)//read only
{
m_btnAdd.ShowWindow(FALSE);
m_btnDelete.ShowWindow(FALSE);
}
if(x==0)
{
m_pApp->SecurityWarning();
CDialog::OnCancel();
}
}
//SET ORDER BY CLAUSE DEPENDING ON CLICK HERE
void CLoanersDlg::OnColumnClick(NMHDR* pNMHDR, LRESULT* pResult)
{
int x;
CString str;
CFlatHeaderCtrl* header;
header=m_rc.GetHeaderCtrl();
//FIND CLICKED COLUMN
str=header->m_szHotItemText;
if(str=="Status"){x=0;goto OUTTAHERE;}
if(str=="Item"){x=1;goto OUTTAHERE;}
if(str=="At"){x=2;goto OUTTAHERE;}
if(str=="Out"){x=3;goto OUTTAHERE;}
if(str=="Due"){x=4;goto OUTTAHERE;}
if(str=="Rcvd."){x=5;goto OUTTAHERE;}
if(str=="Ref"){x=7;goto OUTTAHERE;}
if(str=="Desc."){x=8;goto OUTTAHERE;}
OUTTAHERE:
bColumnSortAsc[x]=!bColumnSortAsc[x];
switch(x)
{//DESC
case 0://duedays
m_strOrderBy="ORDER BY [datedue]";
break;
case 1://item
m_strOrderBy="ORDER BY [rentals]![description] & IIf(IsNull([parts]![partnumber]),\"\",\"part:\" & [parts]![partnumber]) & IIf(IsNull([units]![sn]),\"\",\"unit:\" & [units]![sn])";
break;
case 2://RENTOR
m_strOrderBy="ORDER BY [loanedto] & IIf(IsNull([clients]![company]),[clients]![first] & \" \" & [clients]![last],[clients]![company])";
break;
case 3://OUTDATE
m_strOrderBy="ORDER BY [dateout]";
break;
case 4://DUEDATE
m_strOrderBy="ORDER BY [datedue]";
break;
case 5://backdate/returned
m_strOrderBy="ORDER BY rentals.returned,[datereturn]";
break;
//case 6: is id number so not sortable
case 7://reference number/text
m_strOrderBy="ORDER BY rentals.ref";
break;
case 8://Description
m_strOrderBy="ORDER BY IIf(IsNull([sn]),[rentals].[description] & [parts].[description],[company_person] & \" \" & [unitmodels].[description] & \" \" & [unitmodels].[model])";
break;
}
if(!bColumnSortAsc[x])
m_strOrderBy+=" DESC";
header->SetSortColumn(header->GetHotIndex(),bColumnSortAsc[x]);
*pResult = TRUE;//TRUE means we handled it here thanks anyway
FillView();
}
void CLoanersDlg::OnBtnprint()
{
CString q;
COleDateTime dtDefault;
dtDefault.SetDate(1968,03,12);
q.Format("SELECT rentals.*, IIf(IsNull([sn]),[rentals].[description] & [parts].[description],[company_person] & "
"\" \" & [unitmodels].[description] & \" \" & [unitmodels].[model]) AS [desc], [rentals]![description] & "
"IIf(IsNull([parts]![partnumber]),\"\",\"part:\" & [parts]![partnumber]) & "
"IIf(IsNull([units]![sn]),\"\",\"unit:\" & [units]![sn]) AS item, [loanedto] & "
"IIf(IsNull([clients]![company]),[clients]![first] & \" \" & [clients]![last],[clients]![company]) "
"AS rentor, Format([dateout],\"Short Date\") AS outdate, IIf([datedue]=#%s#,\"na\",Format([datedue], "
"\"Short Date\")) AS duedate, IIf([datereturn]=#%s#,\"Out\",Format([datereturn],\"Short Date\")) "
"AS retdate, DateDiff(\"d\",Now(),[datedue]) AS duedays "
"FROM ((((rentals LEFT JOIN clients ON rentals.clientlink = clients.id) LEFT JOIN "
"units ON rentals.unitlink = units.id) LEFT JOIN parts ON rentals.partlink = parts.id) "
"LEFT JOIN unitmodels ON units.model = unitmodels.id) LEFT JOIN nonclients ON unitmodels.manufacturer = nonclients.id "
"%s %s;",dtDefault.Format(_T("%m/%d/%Y")),
dtDefault.Format(_T("%m/%d/%Y")),m_strCriteria,m_strOrderBy);
rsPrint->QueryReadOnly(q);
if(rsPrint->IsEmpty())
{
AfxMessageBox("Nothing to print!");
return;
}
//m_pApp->CreateTTX("loaners.ttx",rsPrint->RecordSetPointer());
m_pApp->PrintCMReportRDC("loaners",rsPrint->RecordSetPointer());
}
void CLoanersDlg::OnNew()
{
CLoanersEditDlg d;
if(d.DoModal()==IDOK)
FillView();
}
void CLoanersDlg::OnDelete()
{
int x;
CString q,strID;
x=m_rc.GetFirstSelectedItem();
if(x<0) return;//no selection
if(AfxMessageBox("Delete the highlighted item? Are you sure?",MB_YESNO)==IDNO)
return;
strID=m_rc.GetItemText(x,6);
q.Format("DELETE rentals.* FROM rentals WHERE (((rentals.id)=%s));",strID);
rs->Ex(q);
FillView();
}
void CLoanersDlg::OnCloseThisScreen()
{
CString profile,q;
//save to user prefs.
m_rc.WriteProfile(&profile);
q.Format("UPDATE users SET users.rentalprofile = \"%s\" "
"WHERE (((users.id)=%u));",profile,m_pApp->m_lusrID);
rs->Ex(q);
CDialog::OnOK();
}
void CLoanersDlg::OnHelponloaners()
{
WinHelp(0x200A8);
//
}
void CLoanersDlg::Layout(void)
{
int nVertFactor;//used to scale vertically
int nDelta=0;//change in vertical height
nVertFactor=0;
nDelta=5;
m_resize.Add(IDC_LBL_SHOW,0,100,0,0);
m_resize.Add(IDC_CKSHOWRETURNED,0,100,0,0);
m_resize.Add(IDC_CKSHOWOUT,0,100,0,0);
m_resize.Add(IDC_CKSHOWALLITEMS,0,100,0,0);
m_resize.Add(IDC_CKANYDATE,0,100,0,0);
m_resize.Add(IDC_CKSENTDATE,0,100,0,0);
m_resize.Add(IDC_CKDUEDATE,0,100,0,0);
m_resize.Add(IDC_CKRECEIVEDDATE,0,100,0,0);
m_resize.Add(IDC_DTFROM,0,100,0,0);
m_resize.Add(IDC_lblTo,0,100,0,0);
m_resize.Add(IDC_DTTO,0,100,0,0);
m_resize.Add(IDC_REPORT,0,0,100,100);
}