📄 sale.c
字号:
else if((InCmd == KD_FCE1) || (InCmd == KD_FCE2) || (InCmd == KD_FCE3) || (InCmd == KD_FCE4) || (InCmd == KD_FCE))
{
// memcpy(prn_Buf+1, fce[FCE_Idx].desc, MAX_DESC_LEN);
// LongPrnFmt(bak_fce_input, sysflag->sysdots, RPOSI, RIGHTFLUSH);
// prn_Cash_Info(fce[FCE_Idx].desc, Get_Desc_Len(fce[FCE_Idx].desc, MAX_DESC_LEN), bak_fce_input, sysflag->sysdots, 1);
prnFCErate(FCE_Idx);
prn_Cash_Info(Str_Pay, strlen(Str_Pay), bak_fce_input, sysflag->sysdots, 1);
}
#endif /* End FCE_FUNC */
// print();
// prn_Adj(Var_Str_Change,-tmpvars.netamt,sysflag->sysdots,RPOSI); /* Print it with positive value */
Prn_Adj_Ex(Var_Str_Change,-tmpvars.netamt,sysflag->sysdots,RPOSI,DESC_NEW); /* Print it with positive value */
lcd_cash = lnum;
lcd_change = -tmpvars.netamt;
Lcd_Disp_Cash_Info(lcd_subttl, lcd_cash, lcd_change); /* Display the cash information */
}
}
else
{
EQUNOINPUT:
trans.amount = tmpvars.netamt;
tmpvars.netamt = 0;
Update_Cash_Rpt();
_DrawOn();
Clr_Dsp_Data();
if(numcnt && (InCmd != KD_CHARGE) && (InCmd != KD_CHECK))
{
Lcm_Disp_Str(Cash_Change,LCM_LINE_2 ,ALIGN_LEFT, FALSE);
//Insert_Char('C',0);
RightDisp(0, sysflag->sysdots);
}
else
{
Lcm_Disp_Str(Cash_Total,LCM_LINE_2 ,ALIGN_LEFT, FALSE);
//Insert_Char('T',0);
RightDisp(trans.amount, sysflag->sysdots);
}
if(InCmd==KD_CASH)
{
//// memcpy(prn_Buf+1,Var_Str_Cash,strlen(Var_Str_Cash));
// xtr_strcpy(prn_Buf+1,Var_Str_Cash); /* Modified on 2004-04-07 17:23 */
// LongPrnFmt(trans.amount, sysflag->sysdots, MAX_PRN_LEN, RIGHTFLUSH);
// prn_Cash_Info_Ex(Var_Str_Cash, strlen(Var_Str_Cash)/2, trans.amount, sysflag->sysdots, 1);
prn_Cash_Info_Ex(Var_Str_Cash, Get_Spec_Len(Var_Str_Cash), trans.amount, sysflag->sysdots, 1);
}
else if((InCmd == KD_PCASH1) || (InCmd == KD_PCASH2) || (InCmd == KD_PCASH3) || (InCmd == KD_PCASH4))
{
prn_Cash_Info(PCASH[PCASH_Idx].desc, Get_Desc_Len(PCASH[PCASH_Idx].desc,MAX_DESC_LEN), trans.amount, sysflag->sysdots, 1);
}
else if(InCmd==KD_CHECK)
{
// memcpy(prn_Buf+1,check[Check_Idx],MAX_DESC_LEN);
// LongPrnFmt(trans.amount, sysflag->sysdots, MAX_PRN_LEN, RIGHTFLUSH);
prn_Cash_Info(check[Check_Idx], Get_Desc_Len(check[Check_Idx], MAX_DESC_LEN), trans.amount, sysflag->sysdots, 1);
}
else if(InCmd == KD_CHARGE)
{
// memcpy(prn_Buf+1,charge[Charge_Idx],MAX_DESC_LEN);
// LongPrnFmt(trans.amount, sysflag->sysdots, MAX_PRN_LEN, RIGHTFLUSH);
prn_Cash_Info(charge[Charge_Idx], Get_Desc_Len(charge[Charge_Idx], MAX_DESC_LEN), trans.amount, sysflag->sysdots, 1);
}
else if(InCmd == KD_MISC)
{
//// memcpy(prn_Buf+1,Var_Str_Misc,strlen(Var_Str_Misc));
// xtr_strcpy(prn_Buf+1,Var_Str_Misc);
// LongPrnFmt(trans.amount, sysflag->sysdots, MAX_PRN_LEN, RIGHTFLUSH);
// prn_Cash_Info_Ex(Var_Str_Misc, strlen(Var_Str_Misc)/2, trans.amount, sysflag->sysdots, 1);
prn_Cash_Info_Ex(Var_Str_Misc, Get_Spec_Len(Var_Str_Misc), trans.amount, sysflag->sysdots, 1);
}
#ifdef FCE_FUNC /* Support the FCE function */
else if((InCmd == KD_FCE1) || (InCmd == KD_FCE2) || (InCmd == KD_FCE3) || (InCmd == KD_FCE4) || (InCmd == KD_FCE))
{
// memcpy(prn_Buf+1, fce[FCE_Idx].desc, MAX_DESC_LEN);
// LongPrnFmt(bak_fce_input, sysflag->sysdots, RPOSI, RIGHTFLUSH);
// prn_Cash_Info(fce[FCE_Idx].desc, Get_Desc_Len(fce[FCE_Idx].desc, MAX_DESC_LEN), bak_fce_input, sysflag->sysdots, 1);
prnFCErate(FCE_Idx);
prn_Cash_Info(Str_Pay, strlen(Str_Pay), bak_fce_input, sysflag->sysdots, 1);
}
#endif /* End FCE_FUNC */
// print();
if(numcnt && (InCmd != KD_CHARGE) && (InCmd != KD_CHECK))
// Prn_Adj_Ex(Var_Str_Change,0L,sysflag->sysdots,RPOSI);
Prn_Adj_Ex(Var_Str_Change,0L,sysflag->sysdots,RPOSI,DESC_NEW);
lcd_cash = trans.amount;
lcd_change = 0;
Lcd_Disp_Cash_Info(lcd_subttl, lcd_cash, lcd_change); /* Display the cash information */
}
#ifdef ELEC_JRNL /* Support the electronic journal function */
if((CurrMode == REGISTER) && (sysflag->Log_Atv_Flag))
Update_Elec_Jrnl(); /* Update the electronic journal function */
#endif /* End ELEC_JRNL */
Update_Hour_Rpt(); /* Update the hour report */
Update_Clerk_Rpt(); /* Update the clerk report */
prn_Tot_Qty(transbuff, TnsBf_Len); /* Print the total quantity */
prn_Stamp(); /* Print the sale stamp */
#ifdef VER_RSNT /* Support the Restaurant function */
if((work_mode == RSNT) && (currtable != NUL_VLU))
{
if(KP_Prn_Head == TRUE)
{
Ack_Send_KP = 1;
prn_KP_Stamp();
}
Clr_Table(currtable - 1);
currtable = NUL_VLU;
prn_tbl_det_flag = 1;
}
#endif /* End VER_RSNT */
#ifdef RCPT_REPRN /* Support the receipt reprint function */
memcpy(BakTnsBf, transbuff, MAX_TNSBF_LEN*sizeof(TRANSBUFFDEF));
BakTnsBf_Len = TnsBf_Len;
#endif /* End RCPT_REPRN */
// #ifdef FCE_FUNC /* Support the FCE function */
// if((InCmd == KD_FCE1) || (InCmd == KD_FCE2) || (InCmd == KD_FCE3) || (InCmd == KD_FCE4) || (InCmd == KD_FCE))
// InCmd = KD_NULL; /* This is for the FCE specific operation */
// #endif /* End FCE_FUNC */
InitTrans();
continue_sale_flag=0x55;
Lcd_Clr_Text_Btn(BUF_ID_LCD_TEXT, 0);
Lcd_Clr_Text_Btn(BUF_ID_TL_SUB, 0);
// Check the total cash in drawer is override
#ifdef VER_RSNT /* Support the restaurant function */
if((prn_tbl_det_flag) && (sysflag->prn_table_detail)) /* Reprint the receipt */
{
Rcpt_RePrn_Cnt ++;
RePrn_Rcpt(0);
}
#endif /* End VER_RSNT */
if(report.CashTotal >(sysflag->top_cash_ttl))
{
errorType(ERR_CID);
}
#if COUNTRY == HONGKONG
Lcd_Init_Sys_ID(SYS_ID_SALE_MAIN); // 说明: 这是一种取巧的做法,在正式版本中不能够采用这种形式
#endif
}
#ifdef FCE_FUNC /* Suppor the FCE function */
/**********************************************************/
void Do_FCE(void)
{
byte tmp_idx;
word bak_incmd;
long tmp;
static long bak_fce_crg; /* Backup the FCE charge */
byte len;
if((Void_flag) || (RM_flag) || (Mul_flag))
{errorType(ERR_KEY_SEQ);return;}
if(!NewTrans) /* No new transaction, error */
{errorType(ERR_SALE_FNSH);return;}
if(fce[FCE_Idx].rate == 0)
{errorType(ERR_FCE_RATE_ZERO);return;}
bak_incmd = InCmd;
while(TRUE)
{
if(fce[FCE_Idx].flag == 0) /* rate */
tmp = Sale_Mul(tmpvars.netamt, sysflag->sysdots, fce[FCE_Idx].rate, fce[FCE_Idx].dot, fce[FCE_Idx].round, sysflag->sysdots);
else
tmp = Sale_Div(tmpvars.netamt, sysflag->sysdots, fce[FCE_Idx].rate, fce[FCE_Idx].dot, fce[FCE_Idx].round, sysflag->sysdots);
if((tmp == MIN_SIGNED_LONG) || (tmp > MAX_FCE_XCH) || (tmp < 0))
{
errorType(ERR_DIGIT_ILLEGAL);
return;
}
Clr_Dsp_Data();
Lcm_Disp_Desc( fce[FCE_Idx].desc, NO ,LCM_LINE_2 ,ALIGN_LEFT, FALSE);
// disp_Char_Str(Str_FCE_Cash, 0);
// len = strlen(Str_FCE_Cash);
len = 0;
Insert_Num(FCE_Idx+1, len);
Insert_Char('=', len + 1);
RightDisp(tmp, sysflag->sysdots);
if(GetIn() == NG)
continue;
GetMainMode(); /* 在目前的情况下面, 这种情况不会发生 */
if(MainMode != CurrMode)
{
Clr_Dsp_Data();
RightDisp(0, sysflag->sysdots);
return;
}
switch(InCmd)
{
case KD_CLEAR: /* Clear the just input data */
break;
case KD_FCE1:
case KD_FCE2:
case KD_FCE3:
case KD_FCE4:
if(numcnt)
{
errorType(ERR_DIGIT_ILLEGAL);
break;
}
tmp_idx = getFCE();
if(fce[tmp_idx].rate == 0)
{errorType(ERR_FCE_RATE_ZERO);break;}
FCE_Idx = tmp_idx;
break;
case KD_FCE:
if(numcnt)
{
if((lnum > MAX_FCE_CNT) || (lnum == 0))
{
errorType(ERR_DIGIT_ILLEGAL);
break;
}
tmp_idx = getFCE();
}
else
{
// tmp_idx = 0;
tmp_idx = (FCE_Idx+1)%MAX_FCE_CNT;
}
if(fce[tmp_idx].rate == 0)
{errorType(ERR_FCE_RATE_ZERO);break;}
FCE_Idx = tmp_idx;
break;
// case KD_SUBTTL: /* Return the FCE mode */
// Do_Subttl();
// return;
//
case KD_CASH:
if(numcnt)
{
if(lnum == 0)
{
errorType(ERR_DIGIT_ILLEGAL);
break;
}
bak_fce_crg = tmp;
if(fce[FCE_Idx].flag == 0) /* rate */
tmp = Sale_Div(lnum, sysflag->sysdots, fce[FCE_Idx].rate, fce[FCE_Idx].dot, fce[FCE_Idx].round, sysflag->sysdots);
else
tmp = Sale_Mul(lnum, sysflag->sysdots, fce[FCE_Idx].rate, fce[FCE_Idx].dot, fce[FCE_Idx].round, sysflag->sysdots);
if((tmp == MIN_SIGNED_LONG) || (tmp > MAXCASH) || (tmp < 0))
{
errorType(ERR_FCE_OVER);
break;
}
bak_fce_input = lnum;
if(bak_fce_input == bak_fce_crg) /* Equal */
lnum = tmpvars.netamt;
else
lnum = tmp;
}
else /* 直接按下了CASH键, 表明直接以显示的价格进行付款 */
{
bak_fce_input = tmp;
lnum = tmpvars.netamt;
}
InCmd = bak_incmd; /* Revert the command type */
Do_Cash();
return;
default:
Clr_Dsp_Data();
RightDisp(0, sysflag->sysdots);
return;
}
}
}
/* Exchange the foreign currency to the local currency */
void Do_XCH(void)
{
byte break_flag = 0;
long tmp = 0;
if((Void_flag) || (RM_flag) || (Mul_flag))
{errorType(ERR_KEY_SEQ);return;}
if(fce[FCE_Idx].rate == 0)
{errorType(ERR_FCE_RATE_ZERO);return;}
while(TRUE)
{
Clr_Dsp_Data();
Lcm_Disp_Str( Str_Xch_Amount, LCM_LINE_2 ,ALIGN_LEFT, FALSE);
//Insert_Num(FCE_Idx+1, 0); /* Dispaly the FCE index number */
//disp_Char_Str(Disp_Sale_XCH, 1); /* The exchange flag */
Insert_Char('F' ,0);
Insert_Char('C' ,1);
Insert_Char('E' ,2);
Insert_Num(FCE_Idx+1, 0+3);
Insert_Char('=', 1+3);
RightDisp(0, sysflag->sysdots);
if(GetIn() == NG) /* Get a item from keyboard */
continue;
GetMainMode();
if(MainMode != CurrMode)
return;
switch(InCmd)
{
case KD_CLEAR:
break;
case KD_CASH:
if(numcnt)
{
if(fce[FCE_Idx].flag == 0) /* rate */
tmp = Sale_Div(lnum, sysflag->sysdots, fce[FCE_Idx].rate, fce[FCE_Idx].dot, fce[FCE_Idx].round, sysflag->sysdots);
else // CE_Idx].flag == 1) /* 1/rate */
tmp = Sale_Mul(lnum, sysflag->sysdots, fce[FCE_Idx].rate, fce[FCE_Idx].dot, fce[FCE_Idx].round, sysflag->sysdots);
if((tmp == MIN_SIGNED_LONG) || (tmp > MAX_FCE_XCH) || (tmp < 0))
{
errorType(ERR_FCE_XCH_BIG);
break;
}
Clr_Dsp_Data();
Lcm_Disp_Desc( fce[FCE_Idx].desc, NO ,LCM_LINE_2 ,ALIGN_LEFT, FALSE);
//Insert_Num(FCE_Idx+1, 0);
//disp_Char_Str(Disp_Sale_XCH, 1);
Lcm_Disp_Str( Str_Xch_Local, LCM_LINE_1, ALIGN_LEFT, FALSE);
RightDisp(tmp, sysflag->sysdots);
break_flag = 1;
}
else
{
Clr_Dsp_Data();
RightDisp(0, sysflag->sysdots);
}
break;
default:
Clr_Dsp_Data();
RightDisp(0, sysflag->sysdots);
return;
}
if(break_flag)
break;
}
if(GetKey() == KD_SUBTTL)
{
report.CashTotal -= tmp; /* Update the report */
PTD_report.CashTotal -= tmp;
fce[FCE_Idx].count ++;
fce[FCE_Idx].PTD_count ++;
fce[FCE_Idx].ttlindwr += lnum;
fce[FCE_Idx].PTD_ttlindwr += lnum;
Set_Rpt_Flag(RPT_FULL_DAILY);
Set_Rpt_Flag(RPT_FULL_PTD);
_DrawOn();
Clr_Dsp_Data();
Insert_Num(FCE_Idx+1, 0);
disp_Char_Str(Disp_Sale_XCH, 1);
RightDisp(tmp, sysflag->sysdots);
Head_Prn_Flag = 0; /* Not print the flush print head */
xtr_strcpy(prn_Buf+1, Str_FCE_XCH);
print();
prnFCErate(FCE_Idx);
LongPrnFmt(lnum, sysflag->sysdots, 1, LEFTFLUSH);
xtr_strcpy(prn_Buf+14, Str_FCE_Direct);
print();
LongPrnFmt(tmp, sysflag->sysdots, RPOSI, RIGHTFLUSH);
print();
prn_Line('-');
prn_Stamp();
#ifdef RCPT_REPRN /* Support the receipt reprint function */
Rcpt_RePrn_Cnt = 0;
#endif /* End RCPT_REPRN */
}
else
{
Clr_Dsp_Data();
RightDisp(0, sysflag->sysdots);
}
}
#endif /* End FCE_FUNC */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -