824 lines
20 KiB
C++
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);
|
|
|
|
|
|
}
|