⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trade.c

📁 税控收款机源码:拼音输入法,LCD,VFD驱动,IC卡驱动,税控国标
💻 C
📖 第 1 页 / 共 5 页
字号:
				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 + -