OffdutyDlg.cpp
上传用户:sztwq510
上传日期:2013-06-26
资源大小:4045k
文件大小:13k
源码类别:

酒店行业

开发平台:

Java

  1. // OffdutyDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "MyPos.h"
  5. #include "OffdutyDlg.h"
  6. #include "MyPosDlg.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // COffdutyDlg dialog
  14. extern CMyPosApp theApp;
  15. COffdutyDlg::COffdutyDlg(CWnd* pParent /*=NULL*/)
  16. : CDialog(COffdutyDlg::IDD, pParent)
  17. {
  18. //{{AFX_DATA_INIT(COffdutyDlg)
  19. //}}AFX_DATA_INIT
  20. }
  21. void COffdutyDlg::DoDataExchange(CDataExchange* pDX)
  22. {
  23. CDialog::DoDataExchange(pDX);
  24. //{{AFX_DATA_MAP(COffdutyDlg)
  25. DDX_Control(pDX, IDC_EDIT_OFFRFMONEY, m_oOffrfmoney);
  26. DDX_Control(pDX, IDC_EDIT_OFFRF, m_oOffrf);
  27. DDX_Control(pDX, IDC_LIST3, m_oHanglist);
  28. DDX_Control(pDX, IDC_LIST2, m_oNonchecklist);
  29. DDX_Control(pDX, IDC_LIST1, m_oMoneylist);
  30. DDX_Control(pDX, IDC_EDIT_OFFBILLS, m_oOffbills);
  31. DDX_Control(pDX, IDC_EDIT_OFFTIME, m_oOfftime);
  32. DDX_Control(pDX, IDC_EDIT_OFFPEOPLES, m_oOffpeoples);
  33. DDX_Control(pDX, IDC_EDIT_CHECKMAN, m_oCheckman);
  34. //}}AFX_DATA_MAP
  35. }
  36. BEGIN_MESSAGE_MAP(COffdutyDlg, CDialog)
  37. //{{AFX_MSG_MAP(COffdutyDlg)
  38. ON_BN_CLICKED(IDC_BUTTON_OFFPRINT, OnButtonOffprint)
  39. //}}AFX_MSG_MAP
  40. END_MESSAGE_MAP()
  41. /////////////////////////////////////////////////////////////////////////////
  42. // COffdutyDlg message handlers
  43. void COffdutyDlg::OnOK() 
  44. {
  45. //When the offduty button is click down,send a message(WM_OFFDUTY) to the CPosDlg.
  46. LRESULT Res=::SendMessage(theApp.pWndoff, WM_OFFDUTY, 0, 0);
  47. CDialog::OnOK();
  48. }
  49. BOOL COffdutyDlg::OnInitDialog() 
  50. {
  51. CDialog::OnInitDialog();
  52. _RecordsetPtr m_pRecordset;
  53. //得到系统时间
  54. CTime now=CTime::GetCurrentTime();
  55. CString snowtime=now.Format(_T("%Y-%m-%d %H:%M:%S"));
  56. m_oCheckman.SetWindowText(theApp.name);
  57. m_oOfftime.SetWindowText(snowtime);
  58. CString starttime,stime;
  59. starttime=snowtime.Left(10);
  60. stime=snowtime.Mid(11,2);
  61. if(atoi(stime)>8)
  62. starttime=starttime+" 08:00:00";
  63. else
  64. {
  65. CString smonth=starttime.Mid(5,2);
  66. int imonth=atoi(smonth);
  67. CString sday=starttime.Right(2);
  68. starttime=YearMonthDay("2003",smonth,sday);
  69. starttime=starttime+" 08:00:00";
  70. }
  71. _variant_t vtemp;
  72. //RMB Checkout bills stat.
  73. CString soffsum="0.00",speoplesum="0",sbillsum="0",space=" ";
  74. long lbillsum=0,lpeoplesum=0;
  75. float foffsum=0,fttl=0;
  76. int i,n;
  77. CString sql;
  78. sql="Select sum(ACTTOTAL) as XXX, sum(PEOPLES) as PPP, count(*) as NNN from (Select * from SALEBILL where ENDDATE>'"+starttime+
  79. "' and ENDDATE<'"+snowtime+"') where SALES='"+theApp.name+"' and STATUS='已结帐' and PAYMODE<>88";
  80. try
  81. m_pRecordset.CreateInstance("ADODB.Recordset");
  82. m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
  83. vtemp=m_pRecordset->GetCollect("XXX");
  84. if(vtemp.dblVal>0)
  85. foffsum=vtemp.dblVal;
  86. vtemp=m_pRecordset->GetCollect("NNN");
  87. if(vtemp.lVal>0)
  88. lbillsum=vtemp.lVal;
  89. vtemp=m_pRecordset->GetCollect("PPP");
  90. if(vtemp.iVal>0)
  91. lpeoplesum=vtemp.iVal;
  92. // lpeoplesum=(long)m_pRecordset->GetCollect("PPP");
  93. soffsum.Format("%.2f",foffsum);
  94. if(lpeoplesum>0)
  95. speoplesum.Format("%d",lpeoplesum);
  96. sbillsum.Format("%d",lbillsum);
  97. fttl=foffsum;
  98. }
  99. catch(_com_error e)///捕捉异常
  100. {
  101. CString temp;
  102. temp.Format("[下班]计算结帐总金额出错:%s",e.ErrorMessage());
  103. AfxMessageBox(temp);
  104. return FALSE;
  105. }
  106. m_oOffbills.SetWindowText(sbillsum);
  107. m_oOffpeoples.SetWindowText(speoplesum);
  108. n=17-soffsum.GetLength();
  109. for(i=0;i<n-1;i++)
  110. space=space+" ";
  111. m_oMoneylist.AddString("人民币:"+space+soffsum);
  112. //Non-RMB Checkout bills stat.
  113. sql="Select sum(ACTTOTAL) as XXX from (Select * from SALEBILL where ENDDATE>'"+starttime+
  114. "' and ENDDATE<'"+snowtime+"') where SALES='"+theApp.name+"' and STATUS='已结帐' and PAYMODE<>1 and PAYMODE<>88";
  115. try
  116. m_pRecordset.CreateInstance("ADODB.Recordset");
  117. m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
  118. vtemp=m_pRecordset->GetCollect("XXX");
  119. foffsum=vtemp.dblVal;
  120. soffsum="0.00";
  121. if(foffsum>0)
  122. {
  123. soffsum.Format("%.2f",foffsum);
  124. fttl=fttl+foffsum;
  125. }
  126. }
  127. catch(_com_error e)///捕捉异常
  128. {
  129. CString temp;
  130. temp.Format("[下班]计算非人民币结帐总金额出错:%s",e.ErrorMessage());
  131. AfxMessageBox(temp);
  132. return FALSE;
  133. }
  134. n=17-soffsum.GetLength();
  135. space=" ";
  136. for(i=0;i<n-1;i++)
  137. space=space+" ";
  138. m_oMoneylist.AddString("其 它:"+space+soffsum);
  139. soffsum.Format("%.2f",fttl);
  140. n=17-soffsum.GetLength();
  141. space=" ";
  142. for(i=0;i<n-1;i++)
  143. space=space+" ";
  144. m_oMoneylist.AddString("合 计:"+space+soffsum);
  145. //Noncheck bills and hang bills.
  146. sql="Select ID,TOTAL,STATUS from (Select * from SALEBILL where BEGINDATE>'"+starttime+
  147. "' and BEGINDATE<'"+snowtime+"') where STATUS<>'已结帐'";
  148. try
  149. m_pRecordset.CreateInstance("ADODB.Recordset");
  150. m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
  151. float ftotal=0,ftotal1=0;
  152. while(!m_pRecordset->adoEOF)
  153. {
  154. CString sbillid,sbilltotal,status;
  155. sbillid=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("ID");
  156. float fbilltotal=(float)m_pRecordset->GetCollect("TOTAL");
  157. sbilltotal.Format("%.2f",fbilltotal);
  158. status=(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("STATUS");
  159. n=10-sbilltotal.GetLength();
  160. space=" ";
  161. for(i=0;i<n-1;i++)
  162. space=space+" ";
  163. if(status=="等待")
  164. {
  165. m_oNonchecklist.AddString(sbillid+space+sbilltotal);
  166. ftotal=ftotal+fbilltotal;
  167. }
  168. if(status=="挂帐")
  169. {
  170. m_oHanglist.AddString(sbillid+space+sbilltotal);
  171. ftotal1=ftotal1+fbilltotal;
  172. }
  173. m_pRecordset->MoveNext();
  174. }
  175. CString stotal;
  176. stotal.Format("%.2f",ftotal);
  177. n=17-stotal.GetLength();
  178. space=" ";
  179. for(i=0;i<n-1;i++)
  180. space=space+" ";
  181. m_oNonchecklist.AddString("合 计:"+space+stotal);
  182. stotal.Format("%.2f",ftotal1);
  183. n=17-stotal.GetLength();
  184. space=" ";
  185. for(i=0;i<n-1;i++)
  186. space=space+" ";
  187. m_oHanglist.AddString("合 计:"+space+stotal);
  188. }
  189. catch(_com_error e)///捕捉异常
  190. {
  191. CString temp;
  192. temp.Format("[下班]查找未结帐单据和挂帐出错:%s",e.ErrorMessage());
  193. return FALSE;
  194. AfxMessageBox(temp);
  195. }
  196. //RF bills stat.
  197. CString srfsum="0.00";
  198. float frfsum;
  199. sql="Select sum(TOTAL) as XXX, count(*) as NNN from (Select * from SALEBILL where ENDDATE>'"+starttime+
  200. "' and ENDDATE<'"+snowtime+"') where SALES='"+theApp.name+"' and STATUS='已结帐' and PAYMODE=88";
  201. try
  202. m_pRecordset.CreateInstance("ADODB.Recordset");
  203. m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
  204. vtemp=m_pRecordset->GetCollect("XXX");
  205. lbillsum=(long)m_pRecordset->GetCollect("NNN");
  206. sbillsum.Format("%d",lbillsum);
  207. if(vtemp.dblVal>0)
  208. {
  209. frfsum=vtemp.dblVal;
  210. srfsum.Format("%.2f",frfsum);
  211. }
  212. }
  213. catch(_com_error e)///捕捉异常
  214. {
  215. CString temp;
  216. temp.Format("[下班]计算RF金额出错:%s",e.ErrorMessage());
  217. return FALSE;
  218. AfxMessageBox(temp);
  219. }
  220. m_oOffrf.SetWindowText(sbillsum);
  221. m_oOffrfmoney.SetWindowText(srfsum);
  222. return TRUE;  // return TRUE unless you set the focus to a control
  223.               // EXCEPTION: OCX Property Pages should return FALSE
  224. }
  225. CString COffdutyDlg::YearMonthDay(CString y, CString m, CString d)
  226. {
  227. CString sday,smonth,sy,sdate;
  228. int ny=atoi(y);
  229. sy=y;
  230. int imonth=atoi(m);
  231. smonth=m;
  232. int nday=0;
  233. nday=atoi(d)-1;
  234. sday.Format("%02d",nday);
  235. //If it is 1st,Janurary.
  236. if(nday==0 && imonth==1)
  237. {
  238. ny=ny-1;
  239. sy.Format("%d",ny);
  240. imonth=12;
  241. sday="31";
  242. }
  243. //If it is 1st of the month.
  244. if(nday==0)
  245. {
  246. switch(imonth)
  247. {
  248. case 2:
  249. sday="31";
  250. break;
  251. case 3:
  252. if(ny%4>0)
  253. sday="28";
  254. else
  255. sday="29";
  256. break;
  257. case 4:
  258. sday="31";
  259. break;
  260. case 5:
  261. sday="30";
  262. break;
  263. case 6:
  264. sday="31";
  265. break;
  266. case 7:
  267. sday="30";
  268. break;
  269. case 8:
  270. sday="31";
  271. break;
  272. case 9:
  273. sday="31";
  274. break;
  275. case 10:
  276. sday="30";
  277. break;
  278. case 11:
  279. sday="31";
  280. break;
  281. case 12:
  282. sday="30";
  283. break;
  284. default:
  285. break;
  286. }
  287. imonth=imonth-1;
  288. smonth.Format("%2d",imonth);
  289. }
  290. sdate=sy+"-"+smonth+"-"+sday;
  291. return sdate;
  292. }
  293. void COffdutyDlg::OnButtonOffprint() 
  294. {
  295. int i,ncount;
  296. CDC dc;
  297. //把打印设备环境附加到DC对象
  298. CPrintDialog pdlg(FALSE,PD_NOPAGENUMS|PD_NOSELECTION,this);
  299. BOOL bFindPrinter=pdlg.GetDefaults();
  300. if(!bFindPrinter)
  301. return;
  302. dc.Attach(pdlg.GetPrinterDC());
  303. //取打印机的横方向和纵方向的分辨率
  304. //即每英寸点数
  305. short cxInch = dc.GetDeviceCaps(LOGPIXELSX);
  306. short cyInch = dc.GetDeviceCaps(LOGPIXELSY);
  307. //字体
  308. CFont font;
  309. VERIFY(font.CreatePointFont(96, "宋体", &dc));//为DC创建字体
  310. CFont* def_font = dc.SelectObject(&font);//保存现在的字体
  311. //根据字体宽度、高度计算每行最大字数及每页最大行数
  312. //取打印纸张高度和宽度
  313. int nPageHeight, nPageWidth;
  314. nPageHeight = dc.GetDeviceCaps(VERTRES);
  315. nPageWidth = dc.GetDeviceCaps(HORZRES);
  316. TEXTMETRIC TextM;
  317. dc.GetTextMetrics(&TextM);
  318. //字体高度 //字体平均宽度
  319. int nCharHeight = (unsigned short)TextM.tmHeight;
  320. int nCharWidth=(unsigned short)TextM.tmAveCharWidth;
  321. //每行最大字数 //每页最大行数
  322. int m_MaxLineChar = nPageWidth / nCharWidth - 8; 
  323. //每页最大行数
  324. int nMaxLinePerPage = nPageHeight/nCharHeight -3;
  325. int nCurPage =1;
  326. //页边距
  327. int nXMargin = 2;
  328. int nYMargin = 2;
  329. //设置所需打印纸张数目
  330. DOCINFO di;
  331. di.cbSize = sizeof(DOCINFO);
  332. di.lpszDocName = "Report printing"; 
  333. di.lpszOutput = (LPTSTR) NULL; 
  334. di.lpszDatatype = (LPTSTR) NULL; 
  335. di.fwType = 0; 
  336. dc.StartDoc(&di);
  337. dc.StartPage();
  338. //输出报表名称
  339. CString stitle,sftitle;
  340. stitle="销售日报表";
  341. sftitle.Format("%23s",stitle);
  342. dc.TextOut(2, nYMargin+nCharHeight,sftitle, strlen(sftitle));
  343. stitle="==============";
  344. sftitle.Format("%25s",stitle);
  345. dc.TextOut(2, nYMargin+nCharHeight*2,sftitle, strlen(sftitle));
  346. //输出报表内容
  347. //收银、日期、人数、单数、RF、金额
  348. CString ssale,sdate,speople,sbills,sRF,sRFtotal,stemp;
  349. m_oCheckman.GetWindowText(ssale);
  350. m_oOfftime.GetWindowText(sdate);
  351. m_oOffpeoples.GetWindowText(speople);
  352. m_oOffbills.GetWindowText(sbills);
  353. m_oOffrf.GetWindowText(sRF);
  354. m_oOffrfmoney.GetWindowText(sRFtotal);
  355. stemp.Format("%-7s",ssale);//use stemp save ssale's value.
  356. ssale="收银:"+stemp+"日期:"+sdate;
  357. dc.TextOut(2, nYMargin+nCharHeight*3,ssale, strlen(ssale));//Out put the first line.
  358. stemp.Format("%-7s",speople);//use stemp save ssale's value.
  359. speople="人数:"+stemp+"单数:"+sbills;
  360. dc.TextOut(2, nYMargin+nCharHeight*4,speople, strlen(speople));//Out put the first line.
  361. stemp.Format("%-7s",sRF);//use stemp save ssale's value.
  362. sRF="R  F:"+stemp+"RF金额:"+sRFtotal;
  363. dc.TextOut(2, nYMargin+nCharHeight*5,sRF, strlen(sRF));//Out put the first line.
  364. //输出付款汇总内容
  365. stitle="-------------付款汇总-------------";
  366. dc.TextOut(2, nYMargin+nCharHeight*7,stitle, strlen(stitle));
  367. ncount=m_oMoneylist.GetCount();
  368. CString sline;
  369. for(i=0; i<ncount; i++)
  370. {
  371. if(ncount+7-(nCurPage-1)*nMaxLinePerPage > nMaxLinePerPage)
  372. {
  373. //新的一页
  374. dc.EndPage();
  375. dc.StartPage();
  376. nCurPage ++;
  377. }
  378. m_oMoneylist.GetText(i, sline);//得到选中项的文本
  379. dc.TextOut( 2, nYMargin+(i+8-(nCurPage-1)*nMaxLinePerPage)*nCharHeight, 
  380. sline, strlen(sline));
  381. }
  382. //输出未结单据内容
  383. stitle="-------------未结单据-------------";
  384. dc.TextOut(2, nYMargin+nCharHeight*(ncount+8),stitle, strlen(stitle));
  385. int ncount1=m_oNonchecklist.GetCount();
  386. for(i=0; i<ncount1; i++)
  387. {
  388. if(ncount+ncount1+7-(nCurPage-1)*nMaxLinePerPage > nMaxLinePerPage)
  389. {
  390. //新的一页
  391. dc.EndPage();
  392. dc.StartPage();
  393. nCurPage ++;
  394. }
  395. m_oNonchecklist.GetText(i, sline);//得到选中项的文本
  396. dc.TextOut( 2, nYMargin+(i+ncount+9-(nCurPage-1)*nMaxLinePerPage)*nCharHeight, 
  397. sline, strlen(sline));
  398. }
  399. //输出挂帐单据内容
  400. stitle="-------------挂帐单据-------------";
  401. dc.TextOut(2, nYMargin+nCharHeight*(ncount1+ncount+9),stitle, strlen(stitle));
  402. int ncount2=m_oHanglist.GetCount();
  403. for(i=0; i<ncount2; i++)
  404. {
  405. if(ncount+7-(nCurPage-1)*nMaxLinePerPage > nMaxLinePerPage)
  406. {
  407. //新的一页
  408. dc.EndPage();
  409. dc.StartPage();
  410. nCurPage ++;
  411. }
  412. m_oHanglist.GetText(i, sline);//得到选中项的文本
  413. dc.TextOut( 2, nYMargin+(i+ncount1+ncount+10-(nCurPage-1)*nMaxLinePerPage)*nCharHeight, 
  414. sline, strlen(sline));
  415. }
  416. dc.EndPage();
  417. dc.EndDoc();
  418. //打印结束
  419. //最后不要忘记将字体还原,这一句是必需的
  420. dc.SelectObject(def_font); //恢复原来的字体
  421. font.DeleteObject(); 
  422. DeleteDC(dc.Detach()); 
  423. }