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

📄 deal_data.c

📁 税控收款机源码:拼音输入法,LCD,VFD驱动,IC卡驱动,税控国标
💻 C
📖 第 1 页 / 共 5 页
字号:
		{
			//if(trade_info->invoice_type==RESCISSORY_INVOICE)
			//	record.invoice_no=trade_info->invoice_no;
			//else
			//2005.7.26
			
			for(j=0;j<10;j++)record.invoice_code[j]=invoice_roll_info.invoice_code[j];
				record.invoice_no=invoice_roll_info.invoice_curr_no;
			if(trade_info->invoice_type==RETREAT_INVOICE) //退票的原票号码
				record.valid_inv_no=trade_info->invoice_no;
		}
		else
		record.invoice_no=0;
        //2005.7.26
		//record.disburse_choice=trade_info->pay_way;
		//record.receiver_no=trade_info->receiver_no;
		
        if(read_eeprom(RECEIVER_CHINESE_NAME+(trade_info->receiver_no-1)*10,10,buf))return(READ_EEPROM_FAIL); 
		if(!strlen(buf))
		{
			record.receiver_no[0]=(trade_info->receiver_no/10)|0x30;
			record.receiver_no[1]=(trade_info->receiver_no%10)|0x30;
			for(i=2;i<10;i++) record.receiver_no[i]=0x20;
		}
		else memcpy(record.receiver_no,buf,10);
		 //20058.14
		//send_str(10,record.receiver_no);
         //strcpy(record.disburse_unit,trade_info->customer_name);
        // p=strlen(record.disburse_unit);
		for(i=0;i<40;i++)
		{
			 record.disburse_unit[i]=trade_info->customer_name[i];
			 if(record.disburse_unit[i]==0)record.disburse_unit[i]=0x20;
		}//补空格
		if(trade_info->invoice_type==RESCISSORY_INVOICE) //废票
		{
			record.item_num=0;
			record.invoice_money=0;
		}
		else //正常票或退票
		{
			for(j=0;j<trade_info->menu_num;j++)
			{
				menu_no=j;
				record.invoice_money+=menu[menu_no].money;
				if(menu[menu_no].no==0) //没有输入PLU号
				{
					if(menu[menu_no].branch==0)
						branch_no=DEFAULT_BRANCH;
					else
						branch_no=menu[menu_no].branch;
					rlt=get_branch(&branch,branch_no-1);
					if(rlt)
						return(rlt);
                    //2005.7.26
					item_index=get_tax_item_index(branch.tax_item);
					//send_str(1,&item_index);
					//record.item[item_index].no=branch_no;
					if(is_trade==YES)
						class_money[item_index]+=menu[menu_no].money;
						//2005.8.11
						record.item[j].money=menu[menu_no].money; //分别写入单价,数量,
						record.item[j].num=menu[menu_no].quantity;
						//2005.10.14
			            //record.item[j].price=menu[menu_no].price;
						record.item[j].price=menu_price[menu_no];
						//record.item[j].price=((menu[menu_no].money*100)/menu[menu_no].quantity);
                        //if(((((menu[menu_no].money*100)%menu[menu_no].quantity)*100)/menu[menu_no].quantity)>=50)record.item[j].price++;//4舍5入

                        record.item[j].tax_item=g_tax_catalog[item_index].tax_item;
						//record.item[item_index].money+=menu[menu_no].money;
						//#ifdef TRADE
						//record.item[item_index].num+=menu[menu_no].quantity;
						//#endif
						//取经营项目名称而不是商品名称
						if(is_trade==NO && g_tax_pin_pass==0)
						{
							sprintf(record.item[item_index].item_name,"税目%bu",branch.tax_item);
							p=strlen(record.item[item_index].item_name);
							for(i=p;i<20;i++)record.item[item_index].item_name[i]=0x20;//补空格
						}
						else
						//2005.8.14
						{
						    memcpy(record.item[j].item_name,branch.name,20);
						   	p=strlen(record.item[j].item_name);
							for(i=p;i<20;i++)record.item[j].item_name[i]=0x20;//补空格
							//memcpy(record.item[item_index].item_name, //同一种税目只保留最后一商品名称
								//g_tax_catalog[item_index].tax_chinese_name,20);
						}
					if(is_trade==YES)
					{
						//存盘
						//部门报表更新
						if(record.invoice_type==NORMAL_INVOICE)//正常票
						{
							branch.money+=menu[menu_no].money;
							branch.quantity+=menu[menu_no].quantity;
						}
						else if(record.invoice_type==RETREAT_INVOICE)//退票
						{
							branch.retreat_money+=menu[menu_no].money;
							branch.retreat_num+=menu[menu_no].quantity;
						}
		                
					
						branch.lrc=lrcdata((uint)sizeof(branch)-1,1,&branch);
						//存盘
						if(write_eeprom(BRANCH_ADDR+(branch_no-1)*(uint)sizeof(branch),
								(uint)sizeof(branch),&branch))
						{
						 branch.lrc=lrcdata((uint)sizeof(branch)-1,1,&branch);
						 if(write_eeprom(BRANCH_ADDR+(branch_no-1)*(uint)sizeof(branch),
								(uint)sizeof(branch),&branch))
						   return(WRITE_EEPROM_FAIL);
						 }
						 //2005.7.26
						/*if(low_pwr==1)
						{
						branch.lrc=lrcdata((uint)sizeof(branch)-1,1,&branch);
						if(read_eeprom(BRANCH_ADDR+(branch_no-1)*(uint)sizeof(branch),
						(uint)sizeof(branch),buf))
							return(READ_EEPROM_FAIL);
						if(memcmp(&branch,buf,(uint)sizeof(branch))!=0)
						{
							if(write_eeprom(BRANCH_ADDR+(branch_no-1)*(uint)sizeof(branch),
							(uint)sizeof(branch),&branch))
								return(WRITE_EEPROM_FAIL);
						}
						}
						*/
					}

				}
				else //PLU
				{
					plu_no=menu[menu_no].no;
					rlt=get_plu(&plu,plu_no-1);
					if(rlt)
						return(rlt);
					item_index=get_tax_item_index(plu.tax_item);
					//2005.8.11
					//record.item[item_index].no=plu_no | 0x8000; //最高位置1表示为PLU编号
					if(is_trade==YES)
						class_money[item_index]+=menu[menu_no].money;
                    record.item[j].money=menu[menu_no].money;
                    	//2005.10.14
					//record.item[j].price=menu[menu_no].price;
					record.item[j].price=menu_price[menu_no];
                    //record.item[j].price=((menu[menu_no].money*100)/menu[menu_no].quantity);
                    //if(((((menu[menu_no].money*100)%menu[menu_no].quantity)*100)/menu[menu_no].quantity)>=50)record.item[j].price++;//4舍5入
				
                    record.item[j].tax_item=g_tax_catalog[item_index].tax_item;
					//record.item[item_index].money+=menu[menu_no].money;
					//	#ifdef TRADE
					//	record.item[item_index].num+=menu[menu_no].quantity;
					//	#endif
					record.item[j].num=menu[menu_no].quantity;
					//取经营项目名称而不是商品名称
					//2005.8.14
					if(is_trade==NO && g_tax_pin_pass==0)
					{
						sprintf(record.item[item_index].item_name,"税目%bu",branch.tax_item);
					    p=strlen(record.item[item_index].item_name);
                        for(i=p;i<20;i++)record.item[item_index].item_name[i]=0x20;
					}
					else
					//2005.7.26
					{
						//2005.12.29
						//if(trade_info->invoice_type==RETREAT_INVOICE) //退票的原票号码
					//		memcpy(record.item[j].item_name,trade_info->name[j],20);
					//	else
							memcpy(record.item[j].item_name,plu.name,20);
							
                        p=strlen(record.item[j].item_name);
                        for(i=p;i<20;i++)record.item[j].item_name[i]=0x20;
							
					}
					//memcpy(record.item[item_index].item_name,
					//	g_tax_catalog[item_index].tax_chinese_name,20);
					if(is_trade==YES)
					{
						//PLU更新
						if(record.invoice_type==NORMAL_INVOICE)
						{
							plu.money+=menu[menu_no].money;
							plu.quantity+=menu[menu_no].quantity;
							if(plu.stocks>=menu[menu_no].quantity && g_stocks_opened)
								plu.stocks-=menu[menu_no].quantity;
						}
						else if(record.invoice_type==RETREAT_INVOICE)
						{
							plu.retreat_money+=menu[menu_no].money;
							plu.retreat_num+=menu[menu_no].quantity;
							if(g_stocks_opened)
								plu.stocks+=menu[menu_no].quantity;
						}
						
						plu.crc=crcxdata((uint)sizeof(plu)-2,&plu);
						//plu.lrc=lrcdata((uint)sizeof(plu)-1,1,&plu);
						if(write_sramb(PLU_START_ADDR+((ulong)plu_no-1)*(uint)sizeof(plu),
						(uint)sizeof(plu),&plu))
							return(WRITE_SRAM_FAIL);
						//处理PLU对应的部门报表
						if(is_trade==YES)
						{
							branch_no=plu.branch;
							rlt=get_branch(&branch,branch_no-1);
							if(rlt) return(rlt);
							//部门报表更新
							if(record.invoice_type==NORMAL_INVOICE)
							{
								branch.money+=menu[menu_no].money;
								branch.quantity+=menu[menu_no].quantity;
							}
							else if(record.invoice_type==RETREAT_INVOICE)
							{
								branch.retreat_money+=menu[menu_no].money;
								branch.retreat_num+=menu[menu_no].quantity;
							}
						
							branch.lrc=lrcdata((uint)sizeof(branch)-1,1,&branch);
							//存盘
							if(write_eeprom(BRANCH_ADDR+(branch_no-1)*(uint)sizeof(branch),
									(uint)sizeof(branch),&branch))
							{
							    branch.lrc=lrcdata((uint)sizeof(branch)-1,1,&branch);
							  	if(write_eeprom(BRANCH_ADDR+(branch_no-1)*(uint)sizeof(branch),
									(uint)sizeof(branch),&branch))
							    return(WRITE_EEPROM_FAIL);
							}
							/*if(low_pwr==1)
							{
							    branch.lrc=lrcdata((uint)sizeof(branch)-1,1,&branch);
						        if(read_eeprom(BRANCH_ADDR+(branch_no-1)*(uint)sizeof(branch),
									          (uint)sizeof(branch),buf))
							       return(READ_EEPROM_FAIL);
						        if(memcmp(&branch,buf,(uint)sizeof(branch))!=0)
						           {
								   	
						            if(write_eeprom(BRANCH_ADDR+(branch_no-1)*(uint)sizeof(branch),
									               (uint)sizeof(branch),&branch))
								         return(WRITE_EEPROM_FAIL);
						           }
							}
							*/
						}
					}
				}
			}
			
		/*	if(local_retreat)//本机退票//2005.12.29
			{
				local_retreat = 0;
				for(j=0;j<trade_info->menu_num;j++)
				{
					memcpy(record.item[j].item_name,trade_info->name[j],20);
					//send_str(20,trade_info->name[j]);
				}
			}
		*/
			
			//考虑移动
			//2005.7.26
			record.item_num=trade_info->menu_num; 
		/*	record.item_num=0;
			for(j=0;j<CATALOG_NUM;j++)
			{
				if(record.item[j].money>0)
				{
					if(j!=record.item_num)
						memcpy(&record.item[record.item_num],&record.item[j],
							(uint)sizeof(record.item[j]));
					record.item_num++;
				}
			}
          */
		}
	
		if(is_trade==YES)
		{
			//计算防伪码
			
			rlt=calc_fwm(&record,&class_money);
			
			//send_char(rlt);
			if(rlt)
			{
				p=rlt;
				// if((rlt==CALC_FWM_FAIL))//从卡中找回本票(low_pwr==1)&&
				//{ 
				rlt=SelFile_id(SAM_CARD,0xEF03);
				if(rlt)  return(rlt);
				rlt=ReadRec(SAM_CARD,FIXED_FILE,1,76,buf);
				if(rlt)  return(rlt);
				//send_str(4,&buf[64]);
				if(record.invoice_no==ToLong(&buf[64],4))
				for(j=0;j<8;j++){record.anti_forge_code[j]=buf[68+j];}
				else {return p;}
				// }
				// else return(rlt);
			}
		    //修改是否已录入了一卷新发票的标志
			tmp[0]=0;
			if(read_eeprom(NEW_INVO_ROLL,2,&tmp[0])) 
				return(READ_EEPROM_FAIL);
			
            //send_char(tmp[0]);
			if(tmp[0]==1)
			{
				tmp[0]=0;
				if(write_eeprom(NEW_INVO_ROLL,1,tmp)) 
					return(WRITE_EEPROM_FAIL);
				tmp[0]=0;
				if(read_eeprom(NEW_INVO_ROLL,2,&tmp)) 
					return(READ_EEPROM_FAIL);
				if(tmp[0]==1)
				{
					tmp[0]=0;
					if(write_eeprom(NEW_INVO_ROLL,1,tmp)) 
						return(WRITE_EEPROM_FAIL);
				}
			}
			//return(WRITE_EEPROM_FAIL);
           //send_str((uint)sizeof(record),&record);
		   rlt=save_record_data(&record);//保存明细//掉电丢明细
			if(rlt)
			{
              //send_char(1);
              //send_char(rlt);
			  return(rlt);
			}
			//send_char(1);
            //send_char(record.item_num);
           
			/*testtiaoshu=0;
			while(1)//测试明细压力时用
			{
			//保存笔记录
			rlt=save_record_data(&record);//保存明细
			if(rlt)
			{
				return(rlt);
			}
		    delayms(10000);
			if(get_key()==VOID)break;
		   }
          */
		}
		else
			memcpy(record.anti_forge_code,"00000000",8);
		//2005.7.26
			if(read_rtc(tmp))return(READ_CLOCK_FAIL);
		if(is_trade==YES)
		{
			//读EEPROM中的发票卷暂存信息
			rlt=is_invoice_roll_over(&invoice_roll);
			if(rlt && rlt!=INVO_ROLL_END)
			   {
				return(rlt);
				}
			if(invoice_roll.issue_start_date[3]==0) //第一次开票
			{
			   //2005.7.26
				memcpy(&invoice_roll.issue_start_date[1],tmp,3);
			   //memcpy(&invoice_roll.issue_start_date[1],record.date,3);
				invoice_roll.issue_start_date[0]=0x20;
				memcpy(invoice_roll.invoice_code,invoice_roll_info.invoice_code,
					(uint)sizeof(invoice_roll.invoice_code));
				invoice_roll.invoice_start_no=invoice_roll_info.invoice_start_no;
				invoice_roll.invoice_end_no=invoice_roll_info.invoice_end_no;
			}
			
			if(day.date[2]==0) //该日第一次开票
			{
			   //2005.7.26
               
		        memcpy(day.date,tmp,3);
				//memcpy(day.date,record.date,3);
				for(j=0;j<CATALOG_NUM;j++)
					day.tax_item_code[j]=g_tax_catalog[j].tax_item;
			}
			//发票卷开票截止日期
			//2005.7.26
			memcpy(&invoice_roll.issue_end_date[1],tmp,3);
			//memcpy(&invoice_roll.issue_end_date[1],record.date,3);
			invoice_roll.issue_end_date[0]=0x20;

			switch(record.invoice_type)
			{
			case NORMAL_INVOICE:
				invoice_roll.normal_num++;
				invoice_roll.trade_money+=record.invoice_money;
				day.invoice_num++;
				for(j=0;j<CATALOG_NUM;j++)
					day.sale_money[j]+=class_money[j];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -