📄 trade.c
字号:
if(plu_no>0) //PLU
{
if(trade_info.menu_num==0 || menu[trade_info.menu_num-1].no ||
num>0) //第一项或上一项已有PLU号或有未处理的数字
{
if(trade_info.menu_num+1>MAX_MENU_NUM)
{
error=MENU_OVERFLOW_ERROR;
continue;
}
if(num>MAX_PRICE)
{
error=PRICE_MAX_ERROR;
continue;
}
trade_info.menu_num++;//新的一个商品
//2005.11.26
menu[trade_info.menu_num-1].quantity=1; //新商品的数量
if(numkey[0]==0) //没有未处理的数字
{
rlt=get_plu(&plu,plu_no-1);
if(rlt)
{
error=rlt;
continue;
}
price=plu.price;
//2005.10.14
//menu[trade_info.menu_num-1].price=price;
menu_price[trade_info.menu_num-1]=price;
}
}
else
{
//2005.10.14
// price=menu[trade_info.menu_num-1].price;
price=menu_price[trade_info.menu_num-1];
// price=a_div_b(menu[trade_info.menu_num-1].money,//单价
// menu[trade_info.menu_num-1].quantity);
}
if(numkey[0]!=0) //有未处理的数字
{
if(num==0) //单价不能输入0
{
error=KEY_ERROR;
continue;
}
price=num;
//2005.10.14
//menu[trade_info.menu_num-1].price=price;
menu_price[trade_info.menu_num-1]=price;
}
}
else //部门
{
if(numkey[0]==0) //没有未处理的数字,原商品更新部门
{
if(trade_info.menu_num==0 || (menu[trade_info.menu_num-1].no &&
menu[trade_info.menu_num-1].branch)) //原商品已有PLU和部门则不允许更改
{
error=KEY_ERROR;
continue;
}
menu[trade_info.menu_num-1].branch=branch_no;
branch_no=0;
//显示
rlt=disp_trade(ALL_AREA,&menu,"营业中...",PLU_AREA,&trade_info);
if(rlt)
{
error=rlt;
continue;
}
continue;//直接返回
}
else
{
if(trade_info.menu_num+1>MAX_MENU_NUM)
{
error=MENU_OVERFLOW_ERROR;
continue;
}
if(num>MAX_PRICE)
{
error=PRICE_MAX_ERROR;
continue;
}
trade_info.menu_num++;//新的一个商品
//2005.11.26
menu[trade_info.menu_num-1].quantity=1;
price=num;
//2005.10.14
//menu[trade_info.menu_num-1].price=price;
menu_price[trade_info.menu_num-1]=price;
}
}
}
else //原商品没有输入单价
{
if(plu_no>0) //PLU
{
/*if(menu[trade_info.menu_num-1].quantity==0)
{
menu[trade_info.menu_num-1].quantity=100;
}*/
if(numkey[0]==0) //没有未处理的数字
{
rlt=get_plu(&plu,plu_no-1);
if(rlt)
{
error=rlt;
continue;
}
price=plu.price;
//2005.10.14
//menu[trade_info.menu_num-1].price=price;
menu_price[trade_info.menu_num-1]=price;
}
else
{
if(num==0) //单价不能为0
{
error=KEY_ERROR;
continue;
}
if(num>MAX_PRICE)
{
error=PRICE_MAX_ERROR;
continue;
}
price=num;
//2005.10.14
//menu[trade_info.menu_num-1].price=price;
menu_price[trade_info.menu_num-1]=price;
}
}
else //部门
{
if(num==0) //单价不能为0
{
//send_char(0xaa);
error=KEY_ERROR;
continue;
}
if(num>MAX_PRICE)
{
error=PRICE_MAX_ERROR;
continue;
}
price=num;
//2005.12.27
menu_price[trade_info.menu_num-1]=price;
}
}
num=0;
set_value0(numkey,(uint)sizeof(numkey));
//输入值范围检查
if(is_mul_overflow(menu[trade_info.menu_num-1].quantity,price) ||
is_add_overflow(trade_info.total_money,
a_mul_b(menu[trade_info.menu_num-1].quantity,price,1)))
{
error=OVER_RANGE_ERROR;
continue;
}
menu[trade_info.menu_num-1].money=
a_mul_b(menu[trade_info.menu_num-1].quantity,price,1);
quantity=0;
price=0;
//trade_info.invoice_type=NORMAL_INVOICE;
//限额检查
if(is_trade==YES)
{
rlt=is_money_over(&menu,&trade_info);
if(rlt)
{
error=rlt;
menu[trade_info.menu_num-1].quantity=0;
menu[trade_info.menu_num-1].money=0;
menu[trade_info.menu_num-1].branch=0;
trade_info.menu_num--;
clear_lcd(0,3);
continue;
}
if(trade_info.menu_num>=PAGE_ITEM_NUM)//打印项数超
{
set_value0(numkey,(uint)sizeof(numkey));
strcpy(buf,"发票的打印项数已满请结算");
lcd_disp(3,0,buf);
if(trade_info.menu_num>PAGE_ITEM_NUM)
{
menu[trade_info.menu_num].quantity=0;
menu[trade_info.menu_num].money=0;
menu[trade_info.menu_num].branch=0;
trade_info.menu_num=PAGE_ITEM_NUM;
continue;
}
}
}
trade_info.total_money=0;
for(i=0;i<trade_info.menu_num;i++)
trade_info.total_money+=menu[i].money;
trade_info.subtotal_money=0;
if(plu_no>0)
{
menu[trade_info.menu_num-1].branch=plu.branch;
menu[trade_info.menu_num-1].no=plu_no;
plu_no=0;
}
else
{
menu[trade_info.menu_num-1].branch=branch_no;
branch_no=0;
}
trade_info.subtotal_money=0;
//显示
rlt=disp_trade(ALL_AREA,&menu,"营业中...",PLU_AREA,&trade_info);
if(rlt)
{
error=rlt;
continue;
}
#ifdef GS
if(trade_info.menu_num%PAGE_ITEM_NUM==0) //该张发票已满,请求保存和打印
{
if(is_trade==YES)
{
//检查发票是否已用完
if(invoice_roll_info.invoice_curr_no+
trade_info.menu_num/PAGE_ITEM_NUM==invoice_roll_info.invoice_end_no)
{
//显示
rlt=disp_trade(ALL_AREA,&menu,"票完请先结算!",TOTAL_AREA,&trade_info);
if(rlt)
{
error=rlt;
continue;
}
trade_info.trade_status=WAITPAY; //等待结算
continue;
}
}
}
else
{
#ifdef GS //国税
if(trade_info.customer_name[0]==0) //没有顾客名称
{
trade_info.trade_status=WAITPYINPUT //等待拼音输入
continue;
}
else
{
//打印当前项
rlt=print_invoice_GS(&branch,&plu,&menu[table_no],
&record,&class_money,&trade_info,is_trade);
if(rlt)
{
error=rlt;
continue;
}
}
#endif
}
#endif
trade_info.trade_status=TRADEING; //营业中
continue;
/******************************************************************/
/*case DIRDISCOUNT: //直接折扣键\开台(C6)
#ifdef C6_VER
//----------开台-------------//
if(trade_info.trade_status==READYTRADE) //开台键
{
if(numkey[0]==0 || num==0 || num%100>0)
{
error=KEY_ERROR;
continue;
}
trade_info.table_no=num/100;
num=0;
set_value0(numkey,(uint)sizeof(numkey));
if(is_trade==YES)
{
//从SRAM中读出是否有挂单信息
//读定金
if(read_sramb(MENU_START_ADDR+(ulong)((trade_info.table_no-1)*((uint)sizeof(menu)+4)),4,
(uchar *)&trade_info.pre_money))
{
error=READ_SRAM_FAIL;
}
if(trade_info.pre_money==0xFFFFFFFF)
trade_info.pre_money=0;
set_value0(&menu,(uint)sizeof(menu));
if(read_sramb(MENU_START_ADDR+(ulong)((trade_info.table_no-1)*((uint)sizeof(menu)+4)+4),
(uint)sizeof(menu),&menu))
{
error=READ_SRAM_FAIL;
}
if(menu[0].quantity==0 || menu[0].quantity==0xFFFFFFFF) //没有挂单信息
{
set_value0(&menu,(uint)sizeof(menu));
}
else
{
trade_info.total_money=0;
trade_info.menu_num=0;
//trade_info.invoice_type=NORMAL_INVOICE;
for(i=0;i<MAX_MENU_NUM;i++)
{
if(menu[i].quantity==0 || menu[i].quantity==0xFFFFFFFF)
break;
trade_info.menu_num++;
trade_info.total_money+=menu[i].money;
}
}
}
sprintf(buf,"开台:台号%u",(uint)trade_info.table_no);
if(trade_info.menu_num>0)
{
rlt=disp_trade(ALL_AREA,menu,buf,INPUT_AREA,&trade_info);
if(rlt)
{
error=rlt;
continue;
}
}
else
{
clear_lcd(0,MAX_LCD_NUM);
lcd_disp(3,0,buf);
con_disp(3,0,4,buf);
}
trade_info.trade_status=TRADEING;
continue;
}
#endif
//---------直接折扣----------------//
if(numkey[0]==0 ) //没有按下数字键
{
error=KEY_ERROR;
continue;
}
if(trade_info.trade_status==WAITPAY)//总折扣
{
if(num>trade_info.total_money)
{
error=OVER_RANGE_ERROR;
continue;
}
tmp=0;
for(i=0;i<trade_info.menu_num-1;i++)
{
tmp+=menu[i].money*num/trade_info.total_money;
menu[i].money-=menu[i].money*num/trade_info.total_money; //按比例分配
}
//最后一个商品
menu[i].money-=num-tmp;
trade_info.total_money-=num;
trade_info.decrease_money+=num;
}
else
{
if(trade_info.trade_status!=TRADEING ||
menu[trade_info.menu_num-1].money==0 )
{
error=KEY_ERROR;
continue;
}
if(trade_info.subtotal_money>0)//小计商品折扣/加成
{
if(num>trade_info.subtotal_money)
{
error=OVER_RANGE_ERROR;
continue;
}
tmp=0;
for(i=trade_info.subtotal_menuno;i<trade_info.subtotal_menunum-1;i++)
{
tmp+=menu[i].money*num/trade_info.subtotal_money;
menu[i].money-=menu[i].money*num/trade_info.subtotal_money; //按比例分配
}
//最后一个商品
menu[i].money-=num-tmp;
trade_info.subtotal_money-=num;
trade_info.total_money-=num;
trade_info.decrease_money+=num;
}
else //当前单项商品折扣/加成
{
if(num>menu[trade_info.menu_num-1].money)
{
error=OVER_RANGE_ERROR;
continue;
}
menu[trade_info.menu_num-1].money-=num;
trade_info.total_money-=num;
trade_info.decrease_money+=num;
}
}
sprintf(buf,"-%lu.%02u",num/100,(uint)(num%100));
num=0;
set_value0(numkey,(uint)sizeof(numkey));
rlt=disp_trade(ALL_AREA,&menu,buf,INPUT_AREA,&trade_info);
if(rlt)
{
error=rlt;
continue;
}
continue;
*/
case DISCOUNT: //折扣键
#ifdef C6_VER
if(trade_info.trade_status==READYTRADE)//出帐键
{
if(numkey[0]==0 || num==0)
{
error=KEY_ERROR;
continue;
}
strcpy(buf,"出帐...");
clear_lcd(3,1);
lcd_disp(3,0,buf);
if(is_trade==YES)
{
//收款员报表更新到EEPROM
if(read_eeprom(RECEIVER_ADDR+(trade_info.receiver_no-1)*(uint)sizeof(receiver_report),
(uint)sizeof(receiver_report),&receiver_report))
return(READ_EEPROM_FAIL);
if(lrcdata((uint)sizeof(receiver_report)-1,0,&receiver_report))
return(LRC_ERROR);
receiver_report.not_sell_defray+=num;
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;
}
//日报表
if(read_eeprom(DAY_ADDR,(uint)sizeof(day_report),&day_report))
return(READ_EEPROM_FAIL);
if(day_report.lrc!=lrcdata((uint)sizeof(day_report)-1,1,&day_report))
//if(lrcdata((uint)sizeof(day_report)-1,0,&day_report))
return(LRC_ERROR);
//月报表
if(read_eeprom(MONTH_ADDR,(uint)sizeof(month_report),&month_report))
return(READ_EEPROM_FAIL);
if(lrcdata((uint)sizeof(month_report)-1,0,&month_report))
return(LRC_ERROR);
//日报表更新到EEPROM
day_report.not_sell_defray+=num;
day_report.lrc=lrcdata((uint)sizeof(day_report)-1,1,&day_report);
if(write_eeprom(DAY_ADDR,(uint)sizeof(day_report),&day_report))
{
error=WRITE_EEPROM_FAIL;
continue;
}
//月报表更新到EEPROM
month_report.not_sell_defray+=num;
month_report.lrc=lrcdata((uint)sizeof(month_report)-1,1,&month_report);
if(write_eeprom(MONTH_ADDR,(uint)sizeof(month_report),&month_report))
{
error=WRITE_EEPROM_FAIL;
continue;
}
}
num=0;
set_value0(numkey,sizeof(numkey));
trade_info.trade_status=WAITTRADE;first=1;
continue;
}
#endif
if(trade_info.trade_status!=WAITPAY &&
(trade_info.trade_status!=TRADEING ||
menu[trade_info.menu_num-1].money==0) ||
num%100)
{
error=KEY_ERROR;
continue;
}
if( num/100>99)
{
error=OVER_RANGE_ERROR;
continue;
}
if(numkey[0]==0) //没有按下数字键,按固定折扣处理
rate=parameter.fix_discount;
else
rate=100-num/100;
num=0;
set_value0(numkey,(uint)sizeof(numkey));
if(trade_info.trade_status==WAITPAY)//总折扣
{
trade_info.total_money-=a_mul_b(trade_info.total_money,rate,0);
trade_info.discount_money+=a_mul_b(trade_info.total_money,rate,0);
for(i=0;i<trade_info.menu_num;i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -