📄 trade.c
字号:
key_tmp=get_key();
if((key_tmp==CASH)||(key_tmp==VOID)||(low_pwr))break;
}
if((key_tmp==VOID)||(low_pwr)){if(key_tmp==VOID)re_lcd=1;continue;}//退出废票
//2005.12.30
clear_lcd(3,1);
strcpy(buf,"退货中...");
lcd_disp(3,0,buf);
for(x=0;x<record.item_num;x++)
{
for(i=0;i<20;i++)
{
if(record.item[x].item_name[19-i]==0x20)
record.item[x].item_name[19-i]=0;
else break;
}
menu[x].no=0;
menu[x].branch=0;
}
i=0;
for(j=0;j<MAX_BRANCH_NUM;j++)
{
if((i==record.item_num)||(low_pwr))break;
rlt=get_branch(&branch,j);
if(rlt)break;
for(x=0;x<record.item_num;x++)
{
if(
(memcmp(branch.name,record.item[x].item_name,strlen(record.item[x].item_name))==0)//部门中找到名称一致退出
&&(menu[x].branch==0)&&(menu[x].no==0)
)
{
send_str(20,record.item[x].item_name);
menu[x].branch=j+1;
i++;
if(i==record.item_num)break;
}
}
}
//send_char(i);
if(i<record.item_num)//部门中未找到名称一致到PLU中继续找
{
for(j=0;j<g_max_plu_no;j++)
{
if((i==record.item_num)||(low_pwr))break;
rlt=get_plu(&plu,j);
if(rlt)break;
for(x=0;x<record.item_num;x++)
{
if(
(memcmp(plu.name,record.item[x].item_name,strlen(record.item[x].item_name))==0)
&&(menu[x].branch==0)&&(menu[x].no==0)
)
{
menu[x].no=j+1;
i++;
if(i==record.item_num)break;
}
}
}
}
if(low_pwr)continue;
for(i=0;i<record.item_num;i++)
{
menu[i].quantity=record.item[i].num;
menu[i].money=record.item[i].money;
//2005.10.14
//menu[i].price=record.item[i].price;
menu_price[i]=record.item[i].price;
//2005.7.26
//if(record.item[i].no & 0x8000) //最高位为1则表示为PLU编号
//menu[i].no=record.item[i].no & 0x7FFF;
//else
// menu[i].branch=record.item[i].no;
//memcpy(trade_info.name[i],record.item[i].item_name,20);
//send_str(20,record.item[i].item_name);
}
//原发票号作为付款单位
sprintf(buf,"%08lu",num);
//2005.11.29
for(i=0;i<32;i++)buf[8+i]=0x20;//补空格
buf[40]=0;
strcpy(trade_info.customer_name,buf);
//strcpy(trade_info.customer_name,record.disburse_unit);
//for(i=0;i<40;i++)trade_info.customer_name[i]=record.disburse_unit[i];//补空格
trade_info.invoice_no=num;
trade_info.invoice_type=RETREAT_INVOICE;
trade_info.menu_num=record.item_num;
trade_info.pay_way=PAY_CASH;
trade_info.total_money=record.invoice_money;
trade_info.trade_end=1;
//local_retreat = 1;//本机退票
//send_char(trade_info.receiver_no);
//限额检查
if(is_trade==YES)
{
rlt=is_money_over(&menu,&trade_info);
if(rlt)
{
clear_lcd(0,3);
error=rlt;
continue;
}
}
//该票号做退票处理,打印一张退票发票
//clear_lcd(3,1);
//strcpy(buf,"退货中...");
//lcd_disp(3,0,buf);
#ifdef GS
rlt=save_data_GS();
if(rlt)
{
error=rlt;
continue;
}
trade_info.trade_status=WAITTRADE;first=1;
#else
rlt=save_data_DS(&menu,&trade_info,is_trade,menu_price);
if(rlt)
{
error=rlt;
continue;
}
#endif
if(is_trade==YES)
{
//从税控卡获得发票卷的信息
rlt=get_invoice_roll_info(&invoice_roll_info);
if(rlt)
return(rlt);
}
num=0;
set_value0(numkey,(uint)sizeof(numkey));
trade_info.trade_status=WAITTRADE;first=1;
continue;
case RESCISSORY: //废票键
//---------直接折扣----------------//
if(numkey[0]==0 ) //没有按下数字键
{
error=KEY_ERROR;
continue;
}
if((trade_info.trade_status==WAITPAY)||(trade_info.trade_status==TRADEING))//直接折扣
{
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;
}
else
{//废票
if(trade_info.trade_status!=READYTRADE)
{
error=KEY_ERROR;
continue;
}
//num为废票的截止号,该票号做废票处理,添加笔交易记录
if(num==0 || num<invoice_roll_info.invoice_curr_no ||
num>invoice_roll_info.invoice_end_no)
{
//无效票号
error=INVO_NO_ERROR;
continue;
}
sprintf(buf,"%lu",num);
if(strlen(buf)>MAX_INVOICE_LENGTH)
{
//无效票号
error=INVO_NO_ERROR;
continue;
}
//废连续票号
tmp=invoice_roll_info.invoice_curr_no;
sprintf(buf,"废票的起止号:\r%08lu--%08lu",tmp,num);
lcd_disp(1,0,buf);
sprintf(buf,"按[确定]废除");
lcd_disp(3,0,buf);
//2005.10.24
while(1)
{
key_tmp=get_key();
if((key_tmp==CASH)||(key_tmp==VOID)||(low_pwr))break;
}
if((key_tmp==VOID)||(low_pwr))
{
if(key_tmp==VOID)
re_lcd=1;
continue;
}//退出废票
for(i=0;i+tmp<=num;i++)
{
trade_info.menu_num=0;
trade_info.invoice_type=RESCISSORY_INVOICE;
trade_info.total_money=0;
trade_info.trade_end=1; //本次交易结束
trade_info.invoice_no=i+tmp;
#ifdef DS
rlt=save_data_DS(&menu,&trade_info,is_trade,menu_price);
#endif
if(rlt)
{
error=rlt;
continue;
}
}
{
//2005.8.27
beep(250);
strcpy(buf,"请核对当前显示/打印票号");
lcd_disp(3,0,buf);
clear_lcd(0,2);
while(1)
{
key_tmp=get_key();
if(key_tmp)break;
if(low_pwr)break;
}
}
num=0;
set_value0(numkey,(uint)sizeof(numkey));
trade_info.trade_status=WAITTRADE;first=1;
if(is_trade==YES)
{
//从税控卡获得发票卷的信息
rlt=get_invoice_roll_info(&invoice_roll_info);
if(rlt)
return(rlt);
}
continue;
}
break;
#ifdef HYS620
case BACK_PAPER: //退纸键
if(trade_info.trade_status!=WAITTRADE)
{
error=KEY_ERROR;
continue;
}
back_on_dot(120);
//first=1;
continue;
#endif
case PAPER1:
//走纸处理
if(trade_info.trade_status!=WAITTRADE)
{
error=KEY_ERROR;
continue;
}
if(g_invoice_locate) //黑标定位
{
// Fast_feed_paper_hang(4);
find_Black_mark();
}
else
#ifdef C8_VER
feed_on_line(1); //走纸一行
#else
Fast_feed_paper_hang(120);//fpaper(1);
#endif
//first=1;
continue;
case QUANTITY: //数量
{
if(trade_info.trade_status==WAITPAY)
{
error=KEY_ERROR;
continue;
}
//num为数量
if(quantity>0 || numkey[0]==0 ||num==0)
{
error=KEY_ERROR;
continue;
}
if(num>MAX_QUANTITY)//999999999
{
error=NUMBER_MAX_ERROR;
continue;
}
if(trade_info.menu_num+1>MAX_MENU_NUM) //每个台最大菜单数50
{
error=MENU_OVERFLOW_ERROR;
continue;
}
//if(bar_codeinputflg)key_tmp=PLU; //作为直接PLU处理
trade_info.menu_num++;
menu[trade_info.menu_num-1].money=0;
menu[trade_info.menu_num-1].quantity=num;
quantity=num;
num=0;
set_value0(numkey,(uint)sizeof(numkey));
//menu[trade_info.menu_num-1].no=0;
if(menu[trade_info.menu_num-1].no==0)
menu[trade_info.menu_num-1].branch=DEFAULT_BRANCH;
//显示
rlt=disp_trade(ALL_AREA,&menu,"营业中...",QUANTITY_AREA,&trade_info);
if(rlt)
{
//send_char(rlt);
error=rlt;
continue;
}
trade_info.trade_status=TRADEING; //营业中
}
continue;
case PRICE: //单价键
if(trade_info.trade_status==WAITPAY)
{
error=KEY_ERROR;
continue;
}
//num为单价
if(numkey[0]==0 || num==0)
{
error=KEY_ERROR;
continue;
}
//2005.11.26
is_fushu=0;
if(num&0x80000000){is_fushu=0xaa;num&=0x7fffffff;}
if(num>MAX_PRICE)
{
error=PRICE_MAX_ERROR;
continue;
}
if(quantity==0)
{
if(trade_info.menu_num+1>MAX_MENU_NUM)
{
error=MENU_OVERFLOW_ERROR;
continue;
}
//2005.11.26
quantity=1;//数量为1
//quantity=100;//数量为1
trade_info.menu_num++;//菜单数加1
}
//bar_codeinputflg=0;
//输入值范围检查
if(is_mul_overflow(quantity,num) ||
is_add_overflow(trade_info.total_money,a_mul_b(quantity,num,1)))
{
error=OVER_RANGE_ERROR;
quantity=0;
trade_info.menu_num--;
continue;
}
if(menu[trade_info.menu_num-1].no==0)
menu[trade_info.menu_num-1].branch=DEFAULT_BRANCH;
menu[trade_info.menu_num-1].quantity=quantity;
//2005.10.14
//menu[trade_info.menu_num-1].price=num;
menu_price[trade_info.menu_num-1]=num;
menu[trade_info.menu_num-1].money=a_mul_b(quantity,num,1);//计算金额
quantity=0;
//2005.11.26
if(is_fushu==0xaa)
{
rlt=trade_info.menu_num;
if(trade_info.menu_num>1)
{
for(i=0;i<trade_info.menu_num;i++)
{
if(menu[i].money==menu[trade_info.menu_num-1].money)//用输入负数的方法消除前面的项目
{
for(j=i;j<(trade_info.menu_num-1);j++)
{
memcpy(&menu[j],&menu[j+1],(uint)sizeof(menu[j+1]));
menu_price[j]=menu_price[j+1];
//send_str(4,&menu[i].money);
}
menu[trade_info.menu_num-2].quantity=0;
menu[trade_info.menu_num-2].money=0;
menu[trade_info.menu_num-2].branch=0;
menu_price[trade_info.menu_num-2]=0;
menu_price[trade_info.menu_num-2]=0;
//for(i=0;i<trade_info.menu_num;i++) send_str(4,&menu[i].money);
break;
}
}
}
menu[trade_info.menu_num-1].quantity=0;
menu[trade_info.menu_num-1].money=0;
menu[trade_info.menu_num-1].branch=0;
menu_price[trade_info.menu_num-1]=0;
menu_price[trade_info.menu_num-1]=0;
if(rlt>1)
{
trade_info.menu_num-=2;
if(trade_info.menu_num==0)
{
trade_info.total_money=0;
clear_lcd(0,3);
continue;
}
}
else trade_info.menu_num=0;
if(rlt==1)
{
error=KEY_ERROR;
clear_lcd(0,3);
continue;
}
}
//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));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -