亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sale2.c

?? 一款收款機C源代碼!因為是幾年前的代碼了
?? C
?? 第 1 頁 / 共 5 頁
字號:
	return (inventory);
}
#endif /* End STOCK */

/*************************************************************/
/**------------------------------------------------**
 ** Computing the tax for trans.price              **
 ** 		tax = sum*rate;									**
 **------------------------------------------------**/
long caltax(char flag, byte taxno, long sum)
{
   long tax;

	tax = 0;
   if(flag && Tax[taxno].rate)
		tax = Sale_Mul(sum, sysflag->sysdots, Tax[taxno].rate, VAT_TAX_DOTS+2, sysflag->tax_round, sysflag->sysdots);
   return (tax);
}

/**********************************************************/
/**-----------------------------------------------**
 **	Calculate the VAT of trans.amount				  **
 **			vat = sum*rate/(1+rate)
 **-----------------------------------------------**/
long calVAT(byte idx, long sum)
{
	DoubleLong dl;
	long vat;
	long round;
	long divisor;

	vat = 0L;

	if(VAT[idx].rate)
	{
      if(sysflag->tax_round == 0)  /** round **/
         round = 5;
      else if(sysflag->tax_round == 1) /** round up **/
         round = 9;
      else //(sysflag->tax_round == 2)  /** round off **/
         round = 0;

		L2DL(labs(sum),&dl,sysflag->sysdots);
//		DL_Div(...);
//		Sale_Mul2(...);
		DL_Mul(&dl,VAT[idx].rate,VAT_TAX_DOTS+2);
		divisor = getLong(VAT_TAX_DOTS+2) + VAT[idx].rate;		/* Get the divisor(1+rate) */
		DL_Div(&dl,divisor,VAT_TAX_DOTS+2,1,sysflag->sysdots);
		if(dl.sign == POSITIVE)
			DL_Add(&dl,round,dl.dots);
		else
			DL_Add(&dl,-round,dl.dots);
		DL_Div(&dl,10,1,0,0);
		vat = dl.lowlong;
	}
	return (sum<0?-vat:vat);
}

/***************************************************************************/
void Get_TVAT(void)
{
	byte	i;

   if(sysflag->Tax_System)
   {
		for(i = 0; i < MAX_TAX_NUM; i ++)
			tmpvars.TVATAmt[i] = caltax(1,i,tmpvars.saleAmt_TVAT[i]);
   }
   else
   {
   	for(i = 0; i < MAX_VAT_NUM; i ++)
   		tmpvars.TVATAmt[i] = calVAT(i,tmpvars.saleAmt_TVAT[i]);
   }
}

void	sto_snd_buf(byte tmpid, byte flag, word nth, long amount);
/*----------------------------------------------------------------------*
 *					Update the structure variable tmpvars
 *			tsbf: 	The transaction buffer variable.
 *			mode: 	Incidate the VAT mode or the tax mode.
 *						0: VAT mode
 *						1: Tax mode
 *			sign:		Athwart the operation or not.
 *						NEGATIVE: Athwart the operation.
 *						POSITIVE: Not athwart the operation.
 *----------------------------------------------------------------------*/
void Update_Tmpvars(TRANSBUFFDEF tsbf, byte sign)
{
	byte ID;
	byte tax1flag;
	byte tax2flag;
	byte tax3flag;
    byte taxflag[MAX_TAX_NUM];
	byte vat_idx;
	long amount;
	long rate;					/* The temporary rate */
	long inc;
	long total;
	byte tmpid;
	byte i, j;

	ID = (tsbf.ID)&0x1F;		/* Get the ID */
	if(ID == TS_EC)			/* Error correct operation, return */
		return;
		#ifdef	REST_PLU_FUNC
	if(ID == TS_PLU_DESC)
		return;
	if((ID == TS_RM_PLU_GIFT)||(ID == TS_PLU_GIFT))
		return;
	if((ID == TS_MENU_HEAD)||(ID == TS_MENU_REAR))
		return;
//	if((ID == TS_MENU_HEAD))
//		return;
	#endif
	
	if((ID == TS_DEPT) || (ID == TS_PLU) || (ID == TS_RM_DEPT) || (ID == TS_RM_PLU) 
				|| (ID == TS_RF_ITEM_DEPT) || (ID == TS_RF_ITEM_PLU) || (ID == TS_RF_SUBT))
	{
		amount = Sale_Mul((sign == POSITIVE)?tsbf.price:-tsbf.price, sysflag->sysdots, tsbf.quantity, 3, (tsbf.flag)>>4, sysflag->sysdots);
	}
	else			/* The amount equal to the price */
	{
		amount = (sign == POSITIVE)?tsbf.price:-tsbf.price;
	}

	if((ID != TS_RF_SUBT) && (ID != TS_PER_SUBT))
	{
        #ifdef REST_PLU_FUNC
		if(ID != TS_MENU_REAR)
        #endif
		{
			if(sysflag->Tax_System)			/* Tax mode */
			{
				tmpvars.subtotal += amount;
				if((ID != TS_RF_SUBT) && (ID != TS_PER_SUBT))		/* After sub total operation, not to update the taxable amount */
				{
                    for(j =0; j< MAX_TAX_NUM; j++)
                    {
                        taxflag[j] = (tsbf.flag>>j)&0x01;
                        if(taxflag[j])
                            tmpvars.saleAmt_TVAT[j] += amount;
                    }
                    
//					tax1flag = (tsbf.flag)&0x01;
//					tax2flag = ((tsbf.flag)&0x02)>>1;
//					tax3flag = ((tsbf.flag)&0x04)>>2;
//					if(tax1flag) tmpvars.saleAmt_TVAT[0] += amount;
//					if(tax2flag) tmpvars.saleAmt_TVAT[1] += amount;
//					if(tax3flag) tmpvars.saleAmt_TVAT[2] += amount;
				}
                tmpvars.netamt = tmpvars.subtotal;
                for(j =0; j< MAX_TAX_NUM; j++)
                {
                    tmpvars.netamt += caltax(1, j, tmpvars.saleAmt_TVAT[j]);
                }
			}
			else				/* VAT mode */
			{
				tmpvars.subtotal += amount;
				if((ID != TS_RF_SUBT) && (ID != TS_PER_SUBT))		/* After sub total operation, not to update the taxable amount */
				{
					vat_idx = (tsbf.flag)&0x0F;
					if(vat_idx)
						tmpvars.saleAmt_TVAT[vat_idx-1] += amount;
				}
				tmpvars.netamt = tmpvars.subtotal;
			}
		}
		switch(ID)
		{
			case TS_DEPT:					/* Department normal operation */
			case TS_VD_DEPT:				/* Department VOID operation */
			case TS_RM_DEPT:				/* Department RETURN operation */
			case TS_RF_ITEM_DEPT:		/* Department Refund after item operation */
			case TS_PER_ITEM_DEPT:		/* Department Percent after item operation */
			#ifdef AUTO_PER				/* Support the department auto percent function */
			case TS_AUTO_PER_DEPT:		/* Department Auto Percent operation */
			#endif /* End AUTO_PER */
				tmpid = TS_DEPT;
				break;

			case TS_PLU:					/* PLU normal operation */
			case TS_VD_PLU:				/* PLU VOID operation */
			case TS_RM_PLU:				/* PLU RETURN operation */
			case TS_RF_ITEM_PLU:			/* PLU Refund after item operation */
			case TS_PER_ITEM_PLU:		/* PLU Percent after item operation */
			#ifdef AUTO_PER				/* Support the department auto percent function */
			case TS_AUTO_PER_PLU:		/* PLU Auto Percent operation */
			#endif /* End AUTO_PER */
				tmpid = TS_PLU;
				break;

#ifdef REST_PLU_FUNC
			case TS_MENU_REAR:			/* The menu operation */
				tmpid = TS_MENU_REAR;
				break;
#endif
			default:							/* This case will not occur */
				tmpid = TS_NULL;
				break;
		}
		sto_snd_buf(tmpid, tsbf.flag, tsbf.nth, amount);
	}
	else					/* Sub total percent and refund, approtion the amount to each register record */
	{
		if(sign == POSITIVE)
		{
			rate = Sale_Div(amount, sysflag->sysdots, tmpvars.netamt, sysflag->sysdots, tsbf.flag>>4, 5);
							// Calculate the rate, then apportion to each item.
			total = 0;
			for(i = 0; i < SndTnsBf_Len; i ++)
			{
				inc = Sale_Mul(BakTnsBf[i].price, sysflag->sysdots, rate, 5, tsbf.flag>>4, sysflag->sysdots);
				BakTnsBf[i].quantity = inc;			/* Store the increment */
				total += inc;
				if(sysflag->Tax_System == 0)					/* In the VAT mode */
				{
					if(i == (SndTnsBf_Len-1))			/* Store the error to the last record */
					{
						BakTnsBf[i].quantity += amount - total;
					}
				}
				else		/* Tax mode */
				{
					;/* Reserved */
				}
				BakTnsBf[i].price += BakTnsBf[i].quantity;
			}
		}
		else
		{
			for(i = 0; i < SndTnsBf_Len; i ++)		/* Restore to the last operation value */
			{
				BakTnsBf[i].price -= BakTnsBf[i].quantity;
				BakTnsBf[i].quantity = 0;
			}
		}
		if(sysflag->Tax_System)			/* Tax mode */
		{
			tmpvars.subtotal += amount;
			memset(tmpvars.saleAmt_TVAT, 0, sizeof(long)*MAX_VAT_NUM);
			for(i = 0; i < SndTnsBf_Len; i ++)
			{
                for(j =0; j < MAX_TAX_NUM; j++)
                {
                    taxflag[j] = ((BakTnsBf[i].flag>>j)&0x01);
                    if(taxflag[j])
                        tmpvars.saleAmt_TVAT[j] +=  BakTnsBf[i].price;
                }
//				tax1flag = (BakTnsBf[i].flag)&0x01;
//				tax2flag = ((BakTnsBf[i].flag)&0x02)>>1;
//				tax3flag = ((BakTnsBf[i].flag)&0x04)>>2;
//				if(tax1flag) tmpvars.saleAmt_TVAT[0] += BakTnsBf[i].price;
//				if(tax2flag) tmpvars.saleAmt_TVAT[1] += BakTnsBf[i].price;
//				if(tax3flag) tmpvars.saleAmt_TVAT[2] += BakTnsBf[i].price;
			}
			tmpvars.netamt = tmpvars.subtotal;
            for(j =0; j < MAX_TAX_NUM; j++)
                tmpvars.netamt += caltax(1, j, tmpvars.saleAmt_TVAT[0]);
		}
		else			/* VAT mode */
		{
			tmpvars.subtotal += amount;
			memset(tmpvars.saleAmt_TVAT, 0, sizeof(long)*MAX_VAT_NUM);
			for(i = 0; i < SndTnsBf_Len; i ++)
			{
				vat_idx = (BakTnsBf[i].flag)&0x0F;
				if(vat_idx)
					tmpvars.saleAmt_TVAT[vat_idx-1] += BakTnsBf[i].price;
			}
			tmpvars.netamt = tmpvars.subtotal;
		}
	}

	// Display the subtotal to the LCD.
	Lcd_Disp_Subttl();
}

/* Store the item to the second transaction buffer */
void	sto_snd_buf(byte tmpid, byte flag, word nth, long amount)
{
	byte	i;

	for(i = 0; i < SndTnsBf_Len; i ++)
	{
		if( (tmpid == BakTnsBf[i].ID) && (flag == BakTnsBf[i].flag) && (nth == BakTnsBf[i].nth) )		/* The same item */
		{
			BakTnsBf[i].price += amount;
			if(BakTnsBf[i].price == 0)			/* Delete this record */
				// 注: 假如說不進行刪除的話, 在進行測試的時候, 進行了重復性的交易后又進行EC, 那么這個無用的空間就會被累積下來. 
				// 如此不斷的累積, 最終造成了崩潰. 
			{
				if(i != SndTnsBf_Len-1)
				{
					memcpy(&BakTnsBf[i], &BakTnsBf[i+1], (SndTnsBf_Len-1-i)*sizeof(TRANSBUFFDEF));
				}
				if(SndTnsBf_Len)
					SndTnsBf_Len --;
			}
			return;
		}
	}
	BakTnsBf[SndTnsBf_Len].ID = tmpid;
	BakTnsBf[SndTnsBf_Len].flag = flag;
	BakTnsBf[SndTnsBf_Len].nth = nth;
	BakTnsBf[SndTnsBf_Len].price = amount;
	BakTnsBf[SndTnsBf_Len].quantity = 0;
	SndTnsBf_Len ++;
}


/* Update the tax/VAT transaction buffer */
void Update_TVAT_Buff(void)
{
	byte i;

	transtvat.flag = sysflag->Tax_System;
	transtvat.round = sysflag->tax_round;
   #ifdef VER_RSNT			/* Support the Restaurant function */
	   if((work_mode == RSNT) && (currtable != NUL_VLU))
	   	transtvat.table_no = currtable;
	   else
	   	transtvat.table_no = NUL_VLU;
	#else
		transtvat.table_no = NUL_VLU;
   #endif /* End VER_RSNT */
	if(sysflag->Tax_System)		/* Tax mode */
	{
		for(i = 0; i < MAX_TAX_NUM; i ++)
			transtvat.rate[i] = Tax[i].rate;
	}
	else			/* VAT mode */
	{
		for(i = 0; i < MAX_VAT_NUM; i ++)
			transtvat.rate[i] = VAT[i].rate;
	}
}

/**---------------------------------------------**
 ** 			Update the cash report
 **---------------------------------------------**/
void  Update_Cash_Rpt(void)
{
   if(CurrMode != REGISTER)			/* The training mode, return */
   	return;

   switch(InCmd) {
   	case KD_CASH:			/* Update the CASH report */
   	case KD_PCASH1:
   	case KD_PCASH2:
   	case KD_PCASH3:
   	case KD_PCASH4:
   	   report.CashTotal += trans.amount;
   	   PTD_report.CashTotal += trans.amount;
   	   report.CashAmt   += trans.amount;
   	   PTD_report.CashAmt   += trans.amount;
   	   report.CashCount ++;
   	   PTD_report.CashCount ++;
   	   break;

   	case KD_CHECK:			/* Update the CHECK report */
   	   report.CheckTotal[Check_Idx] += trans.amount;
   	   PTD_report.CheckTotal[Check_Idx] += trans.amount;
   	   report.CheckAmt[Check_Idx]   += trans.amount;
   	   PTD_report.CheckAmt[Check_Idx]   += trans.amount;
   	   report.CheckCount[Check_Idx] ++;
   	   PTD_report.CheckCount[Check_Idx] ++;
   	   break;

   	case KD_CHARGE:		/* Update the CHARGE report */
   	   report.ChargeAmt[Charge_Idx] += trans.amount;
   	   PTD_report.ChargeAmt[Charge_Idx] += trans.amount;
   	   report.ChargeCount[Charge_Idx] ++;
   	   PTD_report.ChargeCount[Charge_Idx] ++;
   	   break;

   	case KD_MISC:			/* Update the MISC report */
   	   report.MiscTotal += trans.amount;
   	   PTD_report.MiscTotal += trans.amount;
   	   report.MiscAmt   += trans.amount;
   	   PTD_report.MiscAmt   += trans.amount;
   	   report.MiscCount ++;
   	   PTD_report.MiscCount ++;
   	   break;

		#ifdef FCE_FUNC		/* Support the FCE function */
		case KD_FCE1:
		case KD_FCE2:
		case KD_FCE3:
		case KD_FCE4:
		case KD_FCE:
			fce[FCE_Idx].count ++;
			fce[FCE_Idx].PTD_count ++;
			fce[FCE_Idx].ttlindwr += bak_fce_input;
			fce[FCE_Idx].PTD_ttlindwr += bak_fce_input;
			if(tmpvars.netamt < 0)		/* The input is more than the sales total */
			{
				fce[FCE_Idx].chg += labs(tmpvars.netamt);			/* Add the positive value */
				fce[FCE_Idx].PTD_chg += labs(tmpvars.netamt);	/* Add the positive value */
   	   	report.CashTotal += tmpvars.netamt;
   	   	PTD_report.CashTotal += tmpvars.netamt;
			}
			break;
		#endif /* End FCE_FUNC */
   }
}

/**---------------------------------------------**
 ** 			Update the sale report
 **---------------------------------------------**/
void Update_Sale_Rpt(void)
{
	byte i;
	byte ID;
	byte plink;
	byte peridxtmp;
	word Idx;
	long amount;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产全国免费观看| 精品国产乱子伦一区| 欧美日韩五月天| 国产清纯白嫩初高生在线观看91| 一区二区三区国产豹纹内裤在线| 一区二区欧美国产| 99久久婷婷国产| 久久日一线二线三线suv| 1024成人网| 麻豆精品视频在线观看免费| 极品美女销魂一区二区三区 | 99国产精品久久久久久久久久久 | 欧美日韩电影一区| ㊣最新国产の精品bt伙计久久| 亚洲一区国产视频| 在线观看www91| 欧美国产97人人爽人人喊| 精品亚洲免费视频| 久久免费视频色| 亚洲成人动漫精品| 欧美老肥妇做.爰bbww视频| 日本一区二区三区电影| 日韩电影一区二区三区四区| 欧美亚洲日本国产| 青青草一区二区三区| 欧美乱妇15p| 另类小说综合欧美亚洲| 久久精品在线观看| 成人视屏免费看| 国产精品国产三级国产普通话99 | 91精品在线观看入口| 日本不卡123| www激情久久| 3atv在线一区二区三区| 亚洲高清久久久| 精品国产成人系列| 国产精品一区二区在线播放| 久久久精品中文字幕麻豆发布| www.亚洲国产| 亚洲电影第三页| 中文字幕中文字幕中文字幕亚洲无线 | 国产一区视频在线看| 成人在线视频一区二区| 欧美在线free| 欧美一区二区视频免费观看| 日韩av成人高清| 成人性生交大片免费看中文| 男女男精品网站| caoporm超碰国产精品| 欧美色手机在线观看| 国产日韩高清在线| 人人精品人人爱| 在线日韩国产精品| 国产精品国产精品国产专区不蜜 | 中文字幕av一区二区三区免费看| 一区二区三区中文字幕| 国产真实乱对白精彩久久| 欧美日韩综合色| 亚洲日穴在线视频| 成人精品一区二区三区中文字幕| 日韩欧美一区二区不卡| 亚洲18影院在线观看| 一本色道久久综合狠狠躁的推荐| 亚洲国产岛国毛片在线| 久久精品国产亚洲一区二区三区| 欧美日韩久久久| 亚洲成人av免费| 欧美色图在线观看| 亚洲国产欧美日韩另类综合| 99国产精品久久| 国产精品女同互慰在线看| 高清av一区二区| 国产精品色在线| 成人精品国产一区二区4080| 国产欧美日韩在线看| 丰满少妇久久久久久久| 欧美国产乱子伦| 9人人澡人人爽人人精品| 国产精品理论片在线观看| 波多野洁衣一区| 伊人色综合久久天天人手人婷| 色94色欧美sute亚洲13| 亚洲午夜激情网页| 欧美一级片在线观看| 美国欧美日韩国产在线播放| 欧美电影免费观看完整版| 国产永久精品大片wwwapp| 国产午夜久久久久| 91伊人久久大香线蕉| 亚洲一区二区欧美日韩| 欧美一区二区精美| 国产精品综合一区二区三区| 中文字幕电影一区| 日本精品视频一区二区| 午夜一区二区三区在线观看| 欧美一区二区三区系列电影| 久久电影国产免费久久电影| 日本一区二区三级电影在线观看 | 午夜精品福利一区二区蜜股av| 欧美日韩亚州综合| 激情综合色播激情啊| 中文字幕欧美日韩一区| 欧美网站大全在线观看| 六月丁香婷婷久久| 亚洲视频1区2区| 欧美裸体bbwbbwbbw| 国产一区二区三区久久久| 一区二区中文字幕在线| 91精品在线麻豆| 成年人国产精品| 免费看欧美美女黄的网站| 国产日韩精品一区二区浪潮av| 欧美亚洲动漫精品| 国产麻豆成人传媒免费观看| 亚洲日本电影在线| 日韩女同互慰一区二区| 一本色道久久综合狠狠躁的推荐| 激情文学综合网| 午夜影院久久久| 综合在线观看色| 26uuu精品一区二区| 欧美性生交片4| 国产成人aaa| 麻豆视频一区二区| 亚洲在线中文字幕| 国产精品麻豆视频| 日韩精品一区在线观看| 欧美性做爰猛烈叫床潮| 国产91在线观看| 狠狠色丁香婷婷综合久久片| 一区二区三区加勒比av| 日本一区二区免费在线| 日韩写真欧美这视频| 欧美性猛交xxxx黑人交| 99精品视频免费在线观看| 蜜臀国产一区二区三区在线播放 | 久久综合久久99| 欧美日韩视频在线第一区| av电影在线观看一区| 风间由美一区二区三区在线观看| 久久精品国产精品亚洲综合| 天天色综合天天| 亚洲大尺度视频在线观看| 亚洲黄色av一区| 亚洲色图第一区| 亚洲天堂精品视频| 国产精品视频线看| 亚洲欧洲国产专区| 国产精品国产三级国产| 亚洲欧洲无码一区二区三区| 国产精品成人免费在线| 国产精品久久网站| 亚洲欧洲成人精品av97| 中文字幕中文在线不卡住| 国产精品久久免费看| 国产精品久久久久天堂| 最新不卡av在线| 亚洲嫩草精品久久| 亚洲国产欧美另类丝袜| 香蕉久久一区二区不卡无毒影院 | 欧美色倩网站大全免费| 欧美性大战xxxxx久久久| 欧美在线观看你懂的| 欧美日韩aaa| 日韩一级完整毛片| 精品国产三级a在线观看| 精品国产亚洲在线| 国产精品久久久久毛片软件| 亚洲日本va午夜在线影院| 亚洲综合一区二区三区| 日韩一区欧美二区| 久久99精品国产麻豆婷婷| 国产成人av一区| 91污片在线观看| 9191久久久久久久久久久| 欧美成人精品高清在线播放| 欧美国产精品中文字幕| 亚洲va欧美va天堂v国产综合| 人人超碰91尤物精品国产| 国产精品99久久久久久久vr| 91福利区一区二区三区| 日韩视频免费观看高清完整版| 久久精品人人做人人综合 | 日韩欧美一区二区久久婷婷| 国产日韩欧美激情| 亚洲自拍偷拍图区| 久久99久久久久| 91丨九色丨黑人外教| 3d动漫精品啪啪| 国产精品久久久爽爽爽麻豆色哟哟 | 色94色欧美sute亚洲线路一ni| 欧美一级欧美三级在线观看 | 亚洲精品日韩专区silk| 男人的天堂久久精品| 成人av电影免费在线播放| 欧美一卡二卡在线| 亚洲精品国产品国语在线app| 精品一区二区三区不卡| 在线视频观看一区| 国产精品久久久久影院色老大|