📄 trade.c
字号:
strcpy(buf,"条码输入无效");
lcd_disp(3,0,buf);
if(in_plubarcode_hand)in_plubarcode_hand=0;
continue;
}
sprintf(numkey,"%u",plu_no);
strcpy(buf,"条码输入有效");
lcd_disp(3,0,buf);
beep(50);
key_tmp=PLU; //作为直接PLU处理
if(trade_info.trade_status==WAITTRADE)
trade_info.trade_status=TRADEING;
}
//#endif
if (error)
{
if(error<50 //<50硬件故障
|| error==MACHINE_NO_ERROR
|| error==TAXCARD_NO_ERROR
|| error==TAXCARD_MAC_ERROR
|| error==USERCARD_MAC_ERROR
|| error==TAXCARD_REGISTER_ERROR
|| error==ADD_MONEY_ERROR
|| error==ADD_MONEY1_ERROR
|| error==INVO_ROLL_END
|| error==LOCK_DATE
|| error==POWER_FAIL
)
{return(error);}
//错误分类处理
if(error!=old_error)
{
beep(250);
catch_error_display(error,0);
old_error=error;
}
if(key_tmp==CLEAR)
{
error=0;
old_error=0;
clear_lcd(3,1);
strcpy(buf,"等待重新输入...");
lcd_disp(3,0,buf);
/* if(numkey[0]==0 )
{
strcpy(buf,"等待重新输入...");
lcd_disp(3,0,buf);
}
else
*/
if(numkey[0]!=0 )
{
set_value0(numkey,(uint)sizeof(numkey));
num=0;
//clear_lcd(3,1);
//strcpy(buf,numkey);
}
continue;
}
else
continue;
}
if(trade_info.trade_status==WAITPYINPUT) //等待拼音输入
{
rlt=0;
if(g_pda_switch)
{
clear_lcd(3,1);
strcpy(buf,"PDA输入...");
lcd_disp(3,0,buf);
//PDA输入
rlt=Pda_input(&i,trade_info.customer_name);
if(!rlt) //显示PDA输入的名称
{
beep(100);
strcpy(buf,"名称:");
strcat(buf,trade_info.customer_name);
lcd_disp(2,0,buf);
}
else if(low_pwr) return(POWER_OFF);
}
if(!g_pda_switch || rlt)//PDA输入不正确或不能PDA输入
{
rlt=Get_HzString(20,trade_info.customer_name);//20个汉字
if(low_pwr) return(POWER_OFF);
//2005.11.26
if(rlt==CANCEL)
{
//退票付款单位默认为原票号
if(trade_info.invoice_type==RETREAT_INVOICE)
{
sprintf(buf,"%%0%ulu",(uint)MAX_INVO_NO_LEN);
sprintf(trade_info.customer_name,buf,trade_info.invoice_no);
//sprintf(buf,"%08lu",trade_info.invoice_no);
}
else ;
//strcpy(trade_info.customer_name,"个人");//2006.01.16
}
}
if(trade_info.menu_num>0)
{
strcpy(buf,"输入完毕");
lcd_disp(3,0,buf);
/*rlt=disp_trade(ALL_AREA,&menu,buf,INPUT_AREA,
&trade_info);
if(rlt)
{
error=rlt;
continue;
}*/
}
#ifdef GS
trade_info.trade_status=TRADEING;
#else
trade_info.trade_status=HZSELECTED;
key_tmp=CASH;//汉字输入完毕开始打票
key_first=0;
#endif
}
//if((key_tmp==RESCISSORY)&&(!error))send_char(1);
if(trade_info.trade_status==WAITRECEIVER)
{
rlt=receiver_log_on(&trade_info.receiver_no); //收款员登录
if(rlt==CANCEL) //按了取消键返回的
{
return 0;//返回上一级
}
else if(rlt)
{
error=rlt;
continue;
}
error=0;
trade_info.trade_status=WAITTRADE;first=1;
//读收款员报表
if(read_eeprom(RECEIVER_ADDR+(trade_info.receiver_no-1)*(uint)sizeof(receiver_report),
(uint)sizeof(receiver_report),&receiver_report))
return(READ_EEPROM_FAIL);
//send_char(lrcdata((uint)sizeof(receiver_report)-1,1,&receiver_report));
if(lrcdata((uint)sizeof(receiver_report)-1,0,&receiver_report))
{
return(LRC_ERROR);
}
receiver_report.receiver_no=trade_info.receiver_no; //收款员号
rlt=read_rtc(buf); //上班时间
memcpy(receiver_report.time,buf,6);
if(rlt)
{
error=READ_CLOCK_FAIL;
continue;
}
//保存收款员号到EEPROM
rlt=write_eeprom(RECEIVER_NO,1,&trade_info.receiver_no);
if(rlt)
{
error=rlt;
continue;
}
//收款员报表更新到EEPROM
receiver_report.lrc=lrcdata((uint)sizeof(receiver_report)-1,1,
&receiver_report);
if(write_eeprom(RECEIVER_ADDR+
(trade_info.receiver_no-1)*(uint)sizeof(receiver_report),
(uint)sizeof(receiver_report),&receiver_report))
{
error=WRITE_EEPROM_FAIL;
continue;
}
rlt=is_lock_mac(); //检查是否到了开票截止日期
if(rlt) return(rlt);//暂时不检查
//检查发票是否用完,这里不需要保存发票卷数据
//从税控卡获得发票卷的信息
rlt=get_invoice_roll_info(&invoice_roll_info);
if(rlt)
return(rlt);
continue; //返回
}
if (key_tmp==0)
{
if(is_displaytime)
{
read_rtc(rtc);
display_time(rtc,0,is_trade);
}
old_key_tmp=0;
continue;
}
else
{
if(is_displaytime)
{
clear_lcd(0,MAX_LCD_NUM);
if(key_tmp!=QUANTITY) is_displaytime=0;
}
if(key_tmp==old_key_tmp)
{
/*if(key_first)
{
delayms(100);
key_first=0;
continue;
}
else
{
// beep(30);
}
*/
}
else
{
key_first=1;
//beep(30);
}
old_key_tmp=key_tmp;
}
//if(trade_info.trade_status==WAITTRADE)
// clear_lcd(0,MAX_LCD_NUM);
if(trade_info.trade_status==READYRETREAT && //准备退货状态
key_tmp!=VOID && key_tmp!=RETREAT)
{
error=KEY_ERROR;
continue;
}
if(key_tmp==RECEIVER) //收款员键
{
if(is_trade==YES)
{
if(trade_info.trade_status==WAITTRADE)
{
rlt=receiver_log_off();//收款员退出
if(rlt==CANCEL) //按了取消键返回的
{
first=1;
continue;
}
else if(rlt) //有错误
{
error=rlt;
continue;
}
error=0;
trade_info.trade_status=WAITRECEIVER;
continue;
}
}
//看是否为挂单键
if(trade_info.trade_status!=TRADEING)//&&(trade_info.trade_status!=WAITPAY))
{
error=KEY_ERROR;
continue;
}
}
else //不是收款员键
{
if(key_tmp==VOID && (trade_info.trade_status==WAITTRADE ||
trade_info.trade_status==WAITRECEIVER))
{
clear_lcd(0,MAX_LCD_NUM);
return(0); //返回上一级
}
}
/*******************按键处理**************************/
//if(key_tmp>='0' && key_tmp<='9' ||
// key_tmp==KEY00 || key_tmp==POINT) //数字键
//2005.11.16
if(key_tmp>='0' && key_tmp<='9' ||
key_tmp==KEY00 || key_tmp==POINT||((key_tmp=='-')&&(!strlen(numkey)))) //数字键//
{
//send_char(key_tmp);
if(trade_info.trade_status==WAITPYINPUT ||
trade_info.trade_status==HZSELECTED)
{
error=KEY_ERROR;
continue;
}
if(input_plu_barcode)
rlt=get_valid_digit(key_tmp,2,20,numkey);
else
rlt=get_valid_digit(key_tmp,1,10,numkey);
clear_lcd(3,1);
lcd_disp(3,0,numkey);
if(rlt)
{
error=KEY_ERROR;
num=0;
set_value0(numkey,(uint)sizeof(numkey));
}
else
if(trade_info.trade_status==WAITTRADE)
trade_info.trade_status=READYTRADE; //等待营业
continue;
}
else //功能键
{
if(
key_tmp==RETREAT ||//退票键
((key_tmp==RESCISSORY)&&(trade_info.trade_status==READYTRADE)) || //废票键
key_tmp==BRANCH || //部门
key_tmp==PLU || //PLU
key_tmp==PAPER1 || //走纸
key_tmp==NS || //开钱箱
key_tmp==BIT //辅币键
#ifdef C8_VER
||key_tmp==TRADER
#endif
)//编号
num=numstr_to_long(numkey,0,2);//send_char(0xaa);
else
{
pointlong=look_up_pointlong(numkey);
//2005.12.9
if(((pointlong>2)&&(key_tmp!=QUANTITY)&&(key_tmp!=VOID)&&(key_tmp!=CLEAR))||(((look_up_fushu(numkey)))&&(key_tmp!=PRICE)))//||(key_tmp!=VOID)||(key_tmp!=CLEAR))
{
error=KEY_ERROR;
continue;
}
if(key_tmp==QUANTITY)
{
num=numstr_to_long(numkey,1,pointlong);
if(num>0xffffff)
{
error=KEY_ERROR;
continue;
}
tmp=pointlong;
tmp=tmp<<24;
num|=tmp; //小数点的位数
}
else if(key_tmp==PRICE)
{
is_fushu=0;
if((look_up_fushu(numkey)))//单价为负数
{
is_fushu=0xaa;
num=numstr_to_long(&numkey[1],1,2);
}
else
num=numstr_to_long(&numkey[0],1,2);
num&=0x7fffffff;
if(is_fushu==0xaa)num|=0x80000000; //单价为负数
is_fushu=0;
}
//2005.12.9
else if(!((key_tmp==VOID)||(key_tmp==CLEAR)))num=numstr_to_long(numkey,1,2);
}
}
switch(key_tmp)
{
case RETREAT: //退票键\挂单(C6)
//send_char(0xaa);
#ifdef C6_VER
if(trade_info.trade_status==TRADEING ||
trade_info.trade_status==WAITPAY)
{
if(trade_info.menu_num==0 ||
menu[trade_info.menu_num-1].money==0 ||
numkey[0]!=0 || trade_info.table_no==0)
{
error=KEY_ERROR;
continue;
}
sprintf(buf,"%u号台挂单...",(uint)trade_info.table_no);
clear_lcd(3,1);
lcd_disp(3,0,buf);
if(is_trade==YES)
{
//保存定金(保存到每个台号的最前面4个字节)
if(write_sramb(MENU_START_ADDR+
(ulong)((trade_info.table_no-1)*((uint)sizeof(menu)+4)),4,
&trade_info.pre_money))
{
error=WRITE_SRAM_FAIL;
continue;
}
//保存当前台号的菜单数据到SRAM
if(write_sramb(MENU_START_ADDR+
(ulong)((trade_info.table_no-1)*((uint)sizeof(menu)+4)+4),(uint)sizeof(menu),&menu))
{
error=WRITE_SRAM_FAIL;
continue;
}
}
set_value0(&menu,(uint)sizeof(menu));
//交易信息更新
init_trade_info(&trade_info);
trade_info.trade_status=WAITTRADE;first=1;
continue;
}
#endif
if(trade_info.trade_status==READYRETREAT) //退票确认
{
if(numkey[0]!=0)
{
error=KEY_ERROR;
continue;
}
trade_info.invoice_type=RETREAT_INVOICE;
trade_info.trade_status=TRADEING;
trade_info.pay_way=PAY_CASH; //退货只能退现金
//原发票号作为付款单位
sprintf(buf,"%010lu",trade_info.invoice_no);
strcpy(trade_info.customer_name,buf);
clear_lcd(0,MAX_LCD_NUM);
strcpy(buf,"退货状态");
lcd_disp(3,0,buf);
continue;
}
if(trade_info.trade_status!=READYTRADE)
{
error=KEY_ERROR;
continue;
}
if(num==0)
{
//无效票号
error=INVO_NO_ERROR;
continue;
}
sprintf(buf,"%lu",num);
if(strlen(buf)>MAX_INVOICE_LENGTH)
{
//无效票号
error=INVO_NO_ERROR;
continue;
}
//num为原票号,根据票号查找是否有历史记录,
rlt=locate_invoice(num,&record,1);
if((rlt && rlt!=1)&&(rlt!=2))
{
error=rlt;
continue;
}
if(rlt==2) //已退票
{
error=NOT_RETREAT;
trade_info.trade_status=WAITTRADE;first=1;
num=0;
set_value0(numkey,(uint)sizeof(numkey));
continue;
}
if(rlt==1) //没找到
{
clear_lcd(0,MAX_LCD_NUM);
#ifdef C6_VER
strcpy(buf,"没找到该票号的记录,\r请再按[退货]键手工退货,\r[取消]键取消退货");
#else
strcpy(buf,"没找到该票号的记录,\r再按[退票]键手工退货,\r[取消]键取消退货");
#endif
lcd_disp(0,0,buf);
trade_info.trade_status=READYRETREAT;
trade_info.invoice_no=num;
num=0;
retreat__money=0;
set_value0(numkey,(uint)sizeof(numkey));
continue;
}
//找到若是废票或退票不能退
if(record.invoice_type!=NORMAL_INVOICE)
{
error=NOT_RETREAT;
trade_info.trade_status=WAITTRADE;first=1;
num=0;
set_value0(numkey,(uint)sizeof(numkey));
continue;
}
//找到则
/*加以下括号中的代码是为了退本机发票时,不能打印出同种税目不同商品的明细
例如:原票 经营了,商品1 15元 商品2 20元 退票时只能打印 商品2 35元 因为明细保存中
同一种税目只保存最后的名称,以下代码改变退票方式
*/
/* {
clear_lcd(0,MAX_LCD_NUM);
strcpy(buf,"请再按[退货]键手工退货,\r按[取消]键取消退货");
lcd_disp(0,0,buf);
trade_info.trade_status=READYRETREAT;
trade_info.invoice_no=num;
num=0;
retreat__money=record.invoice_money;
set_value0(numkey,(uint)sizeof(numkey));
continue;
}
*/
//2005.10.24
sprintf(buf,"退票票号:%08lu",num);
lcd_disp(2,0,buf);
sprintf(buf,"按[确定]退票");
lcd_disp(3,0,buf);
while(1)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -