📄 sale.c
字号:
Do_Page_Dept();
break;
case KD_PAGE_LEFT_PLU: // Page left
case KD_PAGE_RIGHT_PLU: // Page right
Do_Page_PLU();
break;
case KD_PAGE_LEFT_CM: // Page left
case KD_PAGE_RIGHT_CM: // Page right
Do_Page_CM();
break;
case KD_DETAIL:
Do_Table_Detail();
break;
default: /* Default key, do error */
if((ra_flag) || (po_flag))
{
errorType(ERR_KEY_SEQ);
break;
}
if((InCmd >= KD_DP_ST)&&(InCmd <= KD_DP_END))
{
Idx = getDept();
if(Idx >= Max_Dept_No)
{
errorType(ERR_DEPT_OVER);
break;
}
if(Idx >= MAX_REL_DEPT_CNT)
{
errorType(ERR_DEPT_LIMIT);
break;
}
Do_Dept(Idx);
}
else if ((InCmd >= KD_DPLU_ST) && (InCmd <= KD_DPLU_END))
{
if(numcnt!=0)
{errorType(ERR_DIGIT_ILLEGAL);break;}
Idx = getDPLU();
if(Idx >= MAX_DPLU_NO)
{
errorType(ERR_DPLU_OVER);
break;
}
Idx = Dplu_Pluno[Idx];
if((Idx == 0) || (Idx > Max_Plu_No))
{errorType(ERR_DIGIT_ILLEGAL);break;}
lnum = Idx; /* The index number */
numcnt = 4; /* Set a not zero data */
InCmd = KD_PLU;
Do_PLU();
lastincmd = KD_NULL;
}
else if ((InCmd >= KD_DTABLE_ST) && (InCmd <= KD_DTABLE_END))
{
if (numcnt != 0)
{errorType(ERR_DIGIT_ILLEGAL);break;}
Idx = InCmd - KD_DTABLE_ST;
if (Idx >= Real_Table_No)
{
errorType(ERR_KEY_ILLEGAL);
break;
}
Do_DTABLE(Idx);
}
else if ((InCmd >= KD_TABLE_SHORTCUT_ST) && (InCmd <= KD_TABLE_SHORTCUT_END))
{
// ...
}
else if ((InCmd >= KD_VIRTUAL_ST) && (InCmd <= KD_VIRTUAL_END))
{
Do_Virtual_Key();
}
else
{
if(!sysflag->tax_shift_mode)
Clr_Tax_Flag();
errorType(ERR_KEY_ILLEGAL);
}
break;
} /* end switch */
} /* end while */
} /* end salemain */
/*-----------------------------------------------------------------*
* Function: Input the clerk password operation.
* Parameter: void.
*-----------------------------------------------------------------*/
byte clerkpass(void)
{
byte i; /* The circular temporary variable */
DEBUG_SET(currclerk = 1;return (OK);)
i = 0;
currclerk = NUL_VLU; /* Clear the current clerk */
Clr_Period();
Disp_Spec_Period();
while(TRUE)
{
Clr_Dsp_Data();
VFDDisplay(Disp_Sale_Clerk_Assign,NOTCLEARD,LEFT); /* Display OP in the left position */
if(GetIn()==NG)
continue;
GetMainMode();
if(MainMode!=CurrMode)
{
return (NG);
}
switch(InCmd){
case KD_CLERK:
for(i = 0;i < Max_Clerk_No;i ++)
{
if(lnum==clerk[i].secret)
break;
}
if(i==Max_Clerk_No)
{
#ifdef VER_RSNT /* Support the restaurant function */
if(Open_flag)
{
errorType(ERR_PASS_EXIST);
}
#endif /* End VER_RSNT */
continue;
}
break;
#ifdef VER_RSNT /* Support the restaurant function */
case KD_CASH:
if(Open_flag)
return (NG);
else
continue;
#endif /* End VER_RSNT */
default:
continue;
}
break;
}
currclerk = i + 1;
// Clr_Dsp_Data();
// RightDisp(0L,sysflag->sysdots);
return (OK);
}
#ifdef VER_RSNT /* Support the restaurant function */
/*------------------------------------------------------------------------*
* Input the waiters password.
*------------------------------------------------------------------------*/
byte waiterpass(void)
{
byte i = 0;
Clr_Period();
Disp_Spec_Period();
waiter_input_flag = 1;
while(TRUE)
{
Clr_Dsp_Data();
VFDDisplay(Disp_Sale_Waiter_Assign, NOTCLEARD, LEFT);
if(GetIn() == NG)
continue;
GetMainMode();
if(MainMode != CurrMode)
{
waiter_input_flag = 0;
return (NG);
}
switch(InCmd)
{
case KD_WAITER:
for(i = 0; i < Max_Waiter_No; i ++)
{
if(lnum == waiter[i].secret)
break;
}
if(i == Max_Waiter_No)
{
errorType(ERR_PASS_EXIST);
continue;
}
break;
case KD_CASH:
waiter_input_flag = 0;
return (NG);
default:
continue;
}
break;
}
bakwaiterno = i + 1;
waiter_input_flag = 0;
return (OK);
}
#endif /* End VER_RSNT */
/**-----------------------------------------------**
** Payment processing **
**-----------------------------------------------**/
void Do_Cash(void)
{
byte bak_cash_flag;
byte prn_tbl_det_flag = 0;
static long lcd_subttl = 0;
static long lcd_cash = 0;
static long lcd_change = 0;
if((Void_flag) || (RM_flag) || (Mul_flag))
{errorType(ERR_KEY_SEQ);return;}
if(!NewTrans) /* No transaction */
{
if(numcnt) /* Input with the digit, display the virtual change */
{
if(lnum > MAXCASH)
{
errorType(ERR_DIGIT_ILLEGAL);
return;
}
if(lnum < NetAmtBak)
{
errorType(ERR_DIGIT_ILLEGAL);
return;
}
Clr_Dsp_Data();
//Insert_Char('C', 0);
Lcm_Disp_Str(Cash_Change ,LCM_LINE_2 , ALIGN_LEFT, FALSE);
RightDisp(lnum - NetAmtBak, sysflag->sysdots);
return;
}
else /* Input not with the digit */
{
DisTime();
return;
}
}
if(((InCmd == KD_CASH) || (InCmd == KD_MISC)) && numcnt && lnum == 0) /* Not support the zero pay */
{errorType(ERR_ZERO_PAY);return;}
bak_cash_flag = Cash_flag;
if(sysflag->Subt_PressPrn) /* This case used when press SUBTTL key, whether or not to print the subttl informatin */
{
if(Subt_Prn_Flag == 0)
{
// memcpy(prn_Buf+1,Str_Minus_Line,MAX_PRN_LEN); /* Print one line */
xtr_strcpy(prn_Buf+1,Str_Minus_Line); /* Modified on 2004-04-07 17:26 */
print();
prn_Tot_Info_Ex(Var_Str_Subttl, tmpvars.netamt, bak_cash_flag);
}
Subt_Prn_Flag = 0;
}
else
{
// memcpy(prn_Buf+1,Str_Minus_Line,MAX_PRN_LEN); /* Print one line */
xtr_strcpy(prn_Buf+1,Str_Minus_Line); /* Modified on 2004-04-07 17:25 */
print();
prn_Tot_Info_Ex(Var_Str_Subttl, tmpvars.netamt, bak_cash_flag);
}
lcd_subttl = tmpvars.netamt;
if(!Cash_flag)
{
Cash_flag = 1;
NetAmtBak = tmpvars.netamt; /* Backup the netamt, for the other used */
#ifdef VER_RSNT
if((work_mode == RSNT) && (currtable != NUL_VLU))
{
if((sysflag->prn_tab_pre_posi == 2) && (table_awake_len) && (!Disp_Table_List)) /* 表明以前的挂过的台中有交易项 */
{
prn_tbl_pre_item(); /* print the previous item */
}
}
#endif
Get_TVAT(); /* Calculate the VAT or tax value */
prn_REG_TVAT(); /* Print the tax */
prn_Line('-');
if(CurrMode == REGISTER) /* Update the report */
{
Update_Sale_Rpt(); /* Update the sale report */
}
}
if(numcnt) /** PayIn Process **/
{
if((InCmd == KD_CHECK) || (InCmd == KD_CHARGE)) /* If the pressed key is CHECK or CHARGE, go to the equal input sentences */
goto EQUNOINPUT;
if(lnum < tmpvars.netamt) /* not enough */
{
trans.amount = lnum;
tmpvars.netamt -= trans.amount;
Update_Cash_Rpt();
Clr_Dsp_Data();
Lcm_Disp_Str(Cash_Total ,LCM_LINE_2 ,ALIGN_LEFT , FALSE);
//Insert_Char('T',0);
RightDisp(tmpvars.netamt, 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:25 */
// 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_MISC)
{
//// memcpy(prn_Buf+1,Var_Str_Misc,strlen(Var_Str_Misc));
// xtr_strcpy(prn_Buf+1,Var_Str_Misc); /* Modified on 2004-04-07 17:24 */
// 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();
// #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 */
lcd_cash = trans.amount;
lcd_change = 0;
Lcd_Disp_Cash_Info(lcd_subttl, lcd_cash, lcd_change); /* Display the cash information */
return;
}
else if(lnum == tmpvars.netamt) /* Equal */
{
goto EQUNOINPUT;
}
else // lnum > tmpvars.netamt /* More than */
{
trans.amount = tmpvars.netamt;
tmpvars.netamt = tmpvars.netamt - lnum; /* The negative value */
Update_Cash_Rpt();
_DrawOn(); /* Open the cash drawer */
Clr_Dsp_Data();
Lcm_Disp_Str(Cash_Change,LCM_LINE_2 ,ALIGN_LEFT, FALSE);
//Insert_Char('C',0);
RightDisp(-tmpvars.netamt, sysflag->sysdots); /* Dispaly the positive value */
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 19:06 */
// LongPrnFmt(lnum, sysflag->sysdots, MAX_PRN_LEN, RIGHTFLUSH);
// prn_Cash_Info_Ex(Var_Str_Cash, strlen(Var_Str_Cash)/2, lnum, sysflag->sysdots, 1);
prn_Cash_Info_Ex(Var_Str_Cash, Get_Spec_Len(Var_Str_Cash), lnum, 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), lnum, 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); /* Modified on 2004-04-07 17:24 */
// LongPrnFmt(lnum, sysflag->sysdots, MAX_PRN_LEN, RIGHTFLUSH);
// prn_Cash_Info_Ex(Var_Str_Misc, strlen(Var_Str_Misc)/2, lnum, sysflag->sysdots, 1);
prn_Cash_Info_Ex(Var_Str_Misc, Get_Spec_Len(Var_Str_Misc), lnum, sysflag->sysdots, 1);
}
#ifdef FCE_FUNC /* Support the FCE function */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -