Ejemplo n.º 1
0
//按钮7:双向打印参数
void CSysArgMenu::OnButton7(int iEvent, unsigned char * pEventData, int iDataLen)
{
	string strErr = "是否放入白纸打印?";
	if(YesNoMsBox(strErr)==SUCCESS)
	{
		if (isPaper() != 0)
		{ 
			CaMsgBox::ShowMsg("打印机未检测到纸");
			return;
		}
#if (POS_TYPE != POS_APE4000RG)		
		char chValue[256];
		
		UINT8 i =0;
		for(i=0;i<10;i++)
		{
			memset(chValue, 0, sizeof(chValue));
			DBG_PRINT(("i=%u", i));
			
			PrinterIni(i);
			sprintf(chValue, "双向打印参数打印:航天信息蜂鸣器正常异常状态 参数%u",i);
			//PrintStr(chValue);
			
			//PrintChineseLine(chValue, strlen(chValue));
			PrintAsciiLine(chValue, strlen(chValue));
			
			SetLineSpace(0);
			sprintf(chValue, "HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH");
			//PrintChineseLine(chValue, strlen(chValue));
			PrintAsciiLine(chValue, strlen(chValue));
			sprintf(chValue, "HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH");
			//PrintChineseLine(chValue, strlen(chValue));
			PrintAsciiLine(chValue, strlen(chValue));

			CarriageReturn();
		}	
		ForwardNLine(FORWARD_LINES);
#else
		BidirectionalParaTest();
		ForwardNLine(FORWARD_LINES);
#endif
	}
	
	m_EditSysArgID = SYS_BIDIRECTION_PRINT;
	m_pSysArgEditWin->ReFresh();
	ChangeWin(SYS_ARG_EDIT_WIN);
}
Ejemplo n.º 2
0
void CMachineInfoWin::PrintMachineInfo(int iEvent, unsigned char * pEventData, int iDataLen)
{
	string strErr;
	UINT8 ret;
	if (isPaper() != 0)
	{	
		strErr = "打印机未检测到纸";
		CaMsgBox::ShowMsg(strErr);
		this->ReFresh();
		return;
	}
//	strErr = "请确认打印机内放入白纸";
//	if (MsgBox(strErr) == FAILURE)
//	{
//		this->ReFresh();
//		return;	
//	}
	ret = YesNoMsgBox("请放入白纸,是否打印?");
	if (ret==FAILURE)
	{
		return;
	}

	//对打印结构体进行赋值
	m_pMachPrnInfo = &m_machinePrnInfo;
	memset((void *)m_pMachPrnInfo, 0x00, sizeof(struct TMachinePrnData));
	memcpy((void *)m_pMachPrnInfo->MachineNo, (void *)(g_globalArg->m_machine->m_machineNo.c_str()), g_globalArg->m_machine->m_machineNo.length());
	memcpy((void *)m_pMachPrnInfo->HardVer, (void *)(g_globalArg->m_machine->m_hVer.c_str()), g_globalArg->m_machine->m_hVer.length());
	memcpy((void *)m_pMachPrnInfo->SoftVer, (void *)(g_globalArg->m_machine->m_sVer.c_str()), g_globalArg->m_machine->m_sVer.length());
	m_pMachPrnInfo->MakeDate = atoi(g_globalArg->m_machine->m_pDate.c_str());

	if( m_IMEI != "" )
	{
		m_pMachPrnInfo->IMEIFlag = 1;
		memcpy((void *)m_pMachPrnInfo->IMEI, (void *)m_IMEI.c_str(), m_IMEI.length());
	}
	else
		m_pMachPrnInfo->IMEIFlag = 0;
	
	print_macinfo(m_pMachPrnInfo, 0);

	ChangeWin(BASIC_REPORT_MENU);	
}
UINT8 CMonthSaleShowWIn::PrnMonthSaleSumProc()
{
	DBG_PRINT(("PrnMonthSaleSumProc()"));

	UINT8 ret;
	string strErr = "";
	INT8 chValue[256];
	memset((void*)chValue, 0, sizeof(chValue));

	//白纸检查
	ret = YesNoMsgBox("请放入白纸,是否打印?");
	if (ret==FAILURE)
	{
		return FAILURE;//不打印
	}
	if (isPaper() != 0)
	{	
		CaMsgBox::ShowMsg("打印机未检测到纸");
		return FAILURE;
	}


	UINT32 nCurDate = TDateTime::CurrentDateTime().FormatInt(YYYYMMDD);
	 ret=CheckCurDate(nCurDate,strErr);
	if (ret !=SUCCESS)
	{
		CaMsgBox::ShowMsg(strErr);
		return FAILURE;		
	}

	CaProgressBar proBar("月销售统计打印中.....");
	proBar.ReFresh();

	//打印报表头
	
	PrnSaleSumHead(m_iStartDate, 0, m_iEndDate, 235959, 0);

	MonthSaleSumHandle();

	return SUCCESS;
}
Ejemplo n.º 4
0
/***
* Find the paper in the list
* First look whether the head or tail is proximately closer.
* There are cases where it will not work, but it is a small improvement for a large server
* Small use cases don't use this improvement
*/
struct paper_list_out* findPaper(int id){
	struct paper_list_out* curr;
	bool forward;

	if(!hasPapers())
	{
		return NULL;
	}
	curr = closer(id, head, tail); //Not necessarily best option:
	// [0,1,2,30,100] <= 30 is closer to 100 in this case. But worst O is O(n)
	forward = curr == head ? false : true;

	while(!isPaper(curr, id)){
		curr = forward ? curr->next : curr->prev;
		if(curr == NULL)
		{
			return NULL;
		}
	}
	return curr;
}
//-----------------------------------------------------------
//打印发票存根
//-----------------------------------------------------------
UINT8 PrnInvStub(CInvHead *smallInvInfo, UINT8 IfPrnChar)
{

    DBG_ASSERT_EXIT((smallInvInfo != NULL), (" smallInvInfo == NULL!"));

    //判断装入纸质发票
    if (isPaper() != 0)
    {
        DBG_RETURN(NO_PAPER);
    }

    //开辟打印数据结构体的内存
    TPrnInvoiceInfo *pInvPrnData;
    pInvPrnData = &g_invPrnData;;
    if(pInvPrnData==NULL)
    {
        DBG_PRINT((" malloc(sizeof(pInvPrnData) error !"));
        DBG_RETURN(MALLOC_MEM_ERROR);
    }
    memset((void *)pInvPrnData, 0, sizeof(TPrnInvoiceInfo));//打印结构体内容清零
    if (1==IfPrnChar)
    {
        pInvPrnData->PrintType = STUB_PRINT; //打印类型为存根打印
    }

    //定长版,填充
    FillPrnInvHead(pInvPrnData, smallInvInfo);
    FillPrnInvDetail(pInvPrnData, smallInvInfo);
    FillPrnInvTail(pInvPrnData, smallInvInfo);

    //定长版,打印
    print_invoice_head(pInvPrnData);
    print_invoice_data_cycle(pInvPrnData, 0);
    print_invoice_tail(pInvPrnData);

    pInvPrnData = NULL;

    DBG_RETURN(SUCCESS);

}
//---------------------------------------------------------------------------------
//处理事件
//---------------------------------------------------------------------------------
int CProductSaleWin::ProcEvent(int iEvent,unsigned char *pEventData, int iDataLen)
{
	UINT8 ret;
	double ii;
	char *content;
	string code = "";
	UINT32 deptNo;
	UINT8 IfInvSum = 0;
	INT32 dotNum = 0;
	INT32 nWin;
	INT32 nLen  = 0;
	UINT8 nIndex = 0;
	string strErr("");

	switch(iEvent) 
	{
	case ENTER_KEY:
		m_strSuffix = "";

		//判断装入纸质发票	
		if (isPaper() != 0)
		{
			DBG_PRINT(("没有纸质发票"));
			return(ErrMsgBox(NO_PAPER));
		}
		content = (char*)(m_pInput2->m_contentBuf);
		ii = atof(content);
		m_pInput2->Clear();
		ret = CashShow(ii);
		if (ret != SUCCEED) 
		{
			return(ErrMsgBox(ret));
		}	
		ChangeTitle();
		ReFresh();
		
		if (m_IfCancel)		//之前按了商品取消键
		{
			pSaleData->NoCancelGoods();
			m_IfCancel = false;
			m_strSuffix = "";
		}
		DBG_PRINT(("*****工作模式******:%u", g_globalArg->pSaveTemplateInfo->workMode));
 		ret = pSaleData->PayByCash(IfInvSum);
		DBG_PRINT(("IfInvSum == %u", IfInvSum));
		if ((ret == NO_GOODS)||(ret == DB_FULL))
		{
			ErrMsgBox(ret);
			ChangeWin(PRODUCT_SALE_MAIN_MENU); //返回销售档主界面
			return SUCCESS;
		}

		if (ret != SUCCEED) 
		{
			ErrMsgBox(ret);
			switch(ret) 
			{
				case GET_FISCAL_CODE_ERROR://取税控码失败
					break;
				case UPDATE_INV_VOL_ERROR://写数据库失败
					break;
				case DB_SAVE_ERROR://写数据库失败
					break;
				case MALLOC_MEM_ERROR:
					break;
				case INV_SUM_ERROR:
					break;
				case MUST_RE_LOGIN:
					break;
				case HAVE_ROLLED:
					break;
				case NM_EXCEED_MIN:   //发票金额超下限,退回到部类销售显示,等待再次结帐
				case NO_PAPER: //没纸,退回到部类销售显示,等待再次结帐
					DeptSaleShow();
					ChangeTitle();
					ReFresh();
					return FAILURE;
					break;
				case INV_LIB_ERR:
					break;
				case GX_SV_NUM_EXCEED:
					break;
				case GX_SV_TIME_EXCEED:
					break;
				case GX_SV_SUM_EXCEED: 
					break;
				default:
					return FAILURE;//留在商品销售界面
			}
		}
		else
		{
			DBG_PRINT(("启动开钱箱"));
			MoneyBox_Open();
		}

		if (pSaleData->m_returnOther == 1)
		{
			pSaleData->m_returnOther = 0;
//			ScannerRelease();//停止扫描枪扫描
//			g_winNo = 3;//对应INV_MANAGE_MENU界面
			nWin = INV_MANAGE_MENU;
		}
		else
		{
//			g_winNo = 2;//对应INV_MANAGE_MENU界面
			nWin = PRODUCT_SALE_MAIN_MENU;
		}
// 		if (1==IfInvSum) 
// 		{
// 			InvSumShowPrn();//显示卷汇总并打印
// 		}
// 		else
// 		{
			ChangeWin(nWin); //返回销售档主界面
//		}

		return SUCCESS;
		break;

    case DISCOUNT_KEY:

		if ((pSaleData->m_tmpGoodsNum>=(MAX_GOODS_LINE-1))&&(!m_IfCancel)) 
		{
			CaMsgBox::ShowMsg("商品行数超限");
			return FAILURE;
		}
		content = (char*)(m_pInput2->m_contentBuf);
		if (strlen(content)==0)
		{
			CaMsgBox::ShowMsg("请先输入折扣率");
			return SUCCESS;
		}
		ret =is_Figure(content);
		if (ret != SUCCESS)
		{
			return(ErrMsgBox(INPUT_FIGURE_ERROR));
	}
		ii = atof(content);
		ii = (INT32)ii;//向零取整
		m_pInput2->Clear();
		ret = pSaleData->Discount(ii);
		if (ret != SUCCESS) 
		{
		   return(ErrMsgBox(ret));
		}
		ReFresh();
// 		CaMsgBox::ShowMsg("暂不支持此功能");
// 		return SUCCESS;
		break;

	case PRICE_INPUT:
		return(PriceInputProc());
		break;

	case SUM_INPUT:
		return(SumInputProc());
		break;

	case CLIENT_NAME_INPUT:
		return(ClientInputProc());
		break;

	case FIND_KEY:
		return(ClientCodeInputProc());
		break;

	case HELP_KEY:
		return(RemarksInputProc());
		break;

	case CANCEL_GOODS:
		
		if (m_IfCancel)//之前按了商品取消键
		{
			pSaleData->NoCancelGoods();
			m_IfCancel = false;
			m_strSuffix = "";
			DeptSaleShow();
		}
		else
		{
			if (pSaleData->m_tmpGoodsNum==0)//无商品可取消
			{
				ErrMsgBox(NO_GOODS_CANCEL);	
				ChangeWin(PRODUCT_SALE_MAIN_MENU);
				return SUCCESS;
			}
			pSaleData->CancelGoods();
			m_IfCancel = true;
			m_strSuffix = "<消>";
			CancelGoodsShow();
		}		
		ChangeTitle();
	    ReFresh();
		return SUCCESS;
		break;

	case PLUS_KEY:
		return(PlusProc());
		break;

	case TOTAL_CANCEL:
		if (m_IfCancel)//之前按了商品取消键
		{
			pSaleData->NoCancelGoods();
			m_IfCancel = false;
			m_strSuffix = "";
		}
		return(TotalCancelProc());
		break;

	case PLU_KEY:
		if ((pSaleData->m_tmpGoodsNum>=MAX_GOODS_LINE)&&(!m_IfCancel)) 
		{
			CaMsgBox::ShowMsg("商品行数超限");
			return FAILURE;
		}
		content = (char*)(m_pInput2->m_contentBuf);
		code = "";
        nLen = GOODS_CODE_LEN - strlen(content);
		if (nLen > 0)//不足13位,则前补零到13位
		{
			while(nLen > 0)
			{
				code += "0";
				nLen--;
			}
		}		
		code += content;
		ret = pSaleData->DeptSale(0, code);
		m_pInput2->Clear();
		if (m_IfCancel&&(ret == NO_SUCH_GOODS))//按商品取消键后,未在发票明细中找到该商品
		{
			ErrMsgBox(ret);
			pSaleData->NoCancelGoods();
			m_IfCancel = false;
			m_strSuffix = "";
			DeptSaleShow();
			ChangeTitle();
			ReFresh();
			return SUCCESS;
		}
		if (ret != SUCCEED) 
	   {
			m_strSuffix = "";
		   return(ErrMsgBox(ret));
	   }
	   //添加实现内容调整的函数 
	   DeptSaleShow();
	   ChangeTitle();
	   ReFresh();	
	   //切换到商品销售界面
	   ChangeWin(PRODUCT_SALE_WIN);
	   return SUCCESS;
		break;
	
	case SHIFT_PLU_KEY: //临时输入商品名称
		if ((pSaleData->m_tmpGoodsNum>=MAX_GOODS_LINE)&&(!m_IfCancel)) 
		{
			CaMsgBox::ShowMsg("商品行数超限");
			return FAILURE;
		}
		content = (char*)(m_pInput2->m_contentBuf);
		ret = pSaleData->PLUSale(content, strErr);			
		if (m_IfCancel&&(ret == NO_SUCH_GOODS))//按商品取消键后,未在发票明细中找到该商品
		{
			ErrMsgBox(ret);
			pSaleData->NoCancelGoods();
			m_IfCancel = false;
			m_strSuffix = "";
			DeptSaleShow();
			ChangeTitle();
			ReFresh();
			return SUCCESS;
		}
		if (ret != SUCCEED) 
		{
			m_strSuffix = "";
			if (FAILURE == ret) 
			{
				CaMsgBox::ShowMsg(strErr);
				strErr = "";
			}
			else
			{
				ErrMsgBox(ret);
			}		
			return FAILURE;
		}
		m_pInput2->Clear();
	   //添加实现内容调整的函数 
	   DeptSaleShow();
	   ChangeTitle();
	   ReFresh();	
	   //切换到商品销售界面
	   ChangeWin(PRODUCT_SALE_WIN);
	   return SUCCESS;
		break;
	
// 	case SCANNER_EVENT_KEY:
// 		if ((pSaleData->m_tmpGoodsNum>=MAX_GOODS_LINE)&&(!m_IfCancel)) 
// 		{
// 			CaMsgBox::ShowMsg("商品行数超限");
// 			ClearScannerBuf();
// 			return FAILURE;
// 		}
// 		content = (char*)ScannerCode();
// 		DBG_PRINT((" 扫描枪读出的PLU码:%s", content));
// 		code = "";
//         nLen = GOODS_CODE_LEN - strlen(content);
// 		if (nLen > 0)//不足13位,则前补零到13位
// 		{
// 			while(nLen > 0)
// 			{
// 				code += "0";
// 				nLen--;
// 			}
// 		}
// 		code += content;
// 		//ret = pSaleData->PLUSale(code);
// 		ret = pSaleData->DeptSale(0, code);
// 		m_pInput2->Clear();
// 		if (m_IfCancel&&(ret == NO_SUCH_GOODS))//按商品取消键后,未在发票明细中找到该商品
// 		{
// 			ErrMsgBox(ret);
// 			ClearScannerBuf();
// 			pSaleData->NoCancelGoods();
// 			m_IfCancel = false;
// 			m_strSuffix = "";
// 			DeptSaleShow();
// 			ChangeTitle();
// 			ReFresh();
// 			return SUCCESS;
// 		}
// 		if (ret != SUCCEED) 
// 	   {
// 			ErrMsgBox(ret);
// 			ClearScannerBuf();
// 			return FAILURE;
// 	   }
// 	   //添加实现内容调整的函数 
// 	   DeptSaleShow();
// 	   ChangeTitle();
// 	   ReFresh();	
// 	   //切换到商品销售界面
// 	   ChangeWin(PRODUCT_SALE_WIN);
// 	   return SUCCESS;
// 		break;

	case CHANGE_DEPT_KEY:
		if ((pSaleData->m_tmpGoodsNum>=MAX_GOODS_LINE)&&(!m_IfCancel)) 
		{
			CaMsgBox::ShowMsg("商品行数超限");
			return FAILURE;
		}
		content = (char*)(m_pInput2->m_contentBuf);
		if (is_Figure(content) != SUCCESS)
		{
			CaMsgBox::ShowMsg("请输入1~99区间的整数");
			return FAILURE;
		}
		deptNo = atoi(content);
		m_pInput2->Clear();
		return(DeptSaleProc(deptNo));
		break;	

	case DEPT1_KEY:
		if ((pSaleData->m_tmpGoodsNum>=MAX_GOODS_LINE)&&(!m_IfCancel)) 
		{
			CaMsgBox::ShowMsg("商品行数超限");
			return FAILURE;
		}
		if (QuickSaleProc()!=SUCCESS)
		{
			return FAILURE;
		}
		return(DeptSaleProc(1));
	    break;

	case DEPT2_KEY:
		if ((pSaleData->m_tmpGoodsNum>=MAX_GOODS_LINE)&&(!m_IfCancel)) 
		{
			CaMsgBox::ShowMsg("商品行数超限");
			return FAILURE;
		}
		if (QuickSaleProc()!=SUCCESS)
		{
			return FAILURE;
		}
		return(DeptSaleProc(2));
	    break;
	   
	case DEPT3_KEY:
		if ((pSaleData->m_tmpGoodsNum>=MAX_GOODS_LINE)&&(!m_IfCancel)) 
		{
			CaMsgBox::ShowMsg("商品行数超限");
			return FAILURE;
		}
		if (QuickSaleProc()!=SUCCESS)
		{
			return FAILURE;
		}
		return(DeptSaleProc(3));
	    break;
	   
	case DEPT4_KEY:
		if ((pSaleData->m_tmpGoodsNum>=MAX_GOODS_LINE)&&(!m_IfCancel)) 
		{
			CaMsgBox::ShowMsg("商品行数超限");
			return FAILURE;
		}
		if (QuickSaleProc()!=SUCCESS)
		{
			return FAILURE;
		}
		return(DeptSaleProc(4));
	    break;

	case DEPT5_KEY:
		if ((pSaleData->m_tmpGoodsNum>=MAX_GOODS_LINE)&&(!m_IfCancel)) 
		{
			CaMsgBox::ShowMsg("商品行数超限");
			return FAILURE;
		}
		if (QuickSaleProc()!=SUCCESS)
		{
			return FAILURE;
		}
		return(DeptSaleProc(5));
	    break;
		
	case RETURN_MAIN_MENU:  //return to SYSTEMMENU
		if (pSaleData->m_tmpGoodsNum==0)
		{
			ChangeWin(PRODUCT_SALE_MAIN_MENU);
		}
		else
		{
			CaMsgBox::ShowMsg("商品行数非零,不能返回");
		}
		return SUCCESS;
		break;

	case GOODSREDUCT_KEY:
/*
		if ((pSaleData->m_tmpGoodsNum>=MAX_GOODS_LINE)&&(!m_IfCancel)) 
		{
			CaMsgBox::ShowMsg("商品行数超限");
			return FAILURE;
		}
		GoodesReductProc();*/
		CaMsgBox::ShowMsg("暂不支持此功能");
		return SUCCESS;
		break;
		
	default:
		break;
	}
	
	return CaWindow::ProcEvent(iEvent,pEventData,iDataLen);
}
Ejemplo n.º 7
0
void CSelfTestMenu::OnButton6(int iEvent, unsigned char * pEventData, int iDataLen)
{
//	string strErr = "是否调整打印参数?";
	string strErr = "是否放入白纸打印?";	
	if(YesNoMsBox(strErr)==FAILURE)
	{
		this->ReFresh();
		return;
	}

	if (isPaper() != 0)
	{ 
		CaMsgBox::ShowMsg("打印机未检测到纸");
		return;
	}
#if (POS_TYPE != POS_APE4000RG)
	char chValue[256];
	
	UINT8 i =0;
	for(i=0;i<10;i++)
	{
		memset(chValue, 0, sizeof(chValue));

		//bidirection = i;
		DBG_PRINT(("i=%u", i));
		DBG_PRINT(("bidirection=%u", bidirection));

		PrinterIni(i);	
		
//		sprintf(chValue, "双向打印参数打印:航天信息蜂鸣器正常异常状态 参数%uHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH",i);
		sprintf(chValue, "双向打印参数打印:航天信息蜂鸣器正常异常状态 参数%u",i);
		
		//PrintChineseLine(chValue, strlen(chValue));
		PrintAsciiLine(chValue, strlen(chValue));
		SetLineSpace(0);
		sprintf(chValue, "HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH");
		//PrintChineseLine(chValue, strlen(chValue));
		PrintAsciiLine(chValue, strlen(chValue));
		sprintf(chValue, "HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH");
		//PrintStr(chValue);
		//PrintChineseLine(chValue, strlen(chValue));
	    PrintAsciiLine(chValue, strlen(chValue));
		CarriageReturn();
	}

	ForwardNLine(FORWARD_LINES);
	PrinterIni(bidirection);
#else
	BidirectionalParaTest();//双向打印参数检测功能并不改变当前设置的双向打印参数,无需再次设置
	ForwardNLine(FORWARD_LINES);
#endif

	m_pSysArgEditWin = (CSysArgEditWin *)(m_pFrame->GetWin(SYS_ARG_EDIT_WIN));

	((CSysArgMenu *)m_pFrame->GetWin(SYSTEM_ARG_MENU))->m_EditSysArgID = SYS_BIDIRECTION_PRINT;

//	m_pSysArgEditWin = (CSysArgEditWin *)(m_pFrame->GetWin(SYS_ARG_EDIT_WIN));

	
	m_pSysArgEditWin->ReFresh();
	ChangeWin(SYS_ARG_EDIT_WIN);


//	this->ReFresh();
}