📄 sale1.c
字号:
Clr_Dsp_Data();
//Insert_Sect(SECT_PO,0);
Lcm_Disp_Str(PO_Check ,LCM_LINE_2 , ALIGN_LEFT, FALSE);
RightDisp(-po_input, sysflag->sysdots);
_DrawOn();
Head_Prn_Flag = 0; /* Not print the flush print head */
Logo_Prn_Flag = 0; /* Not print the logo */
Prn_InsFmtStr(Var_Str_PO, 1, Get_Spec_Len(Var_Str_PO), FLUSH_LEFT);
Print_Ex(1);
memcpy(prn_Buf+1, check[0], MAX_DESC_LEN);
LongPrnFmt(-po_input, sysflag->sysdots, RPOSI, RIGHTFLUSH);
print();
prn_Line('-');
prn_Stamp();
Logo_Prn_Flag = 1;
Flag_Prn_Head = FALSE;
#ifdef RCPT_REPRN /* Support the receipt reprint function */
Rcpt_RePrn_Cnt = 0;
#endif /* End RCPT_REPRN */
Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, 1, PO_Check, ALIGN_LEFT);
LongLcdFmt_Text_Buff(BUF_ID_LCD_TEXT, 15, -po_input, sysflag->sysdots, ALIGN_LEFT);
Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);
}
else if(InCmd == KD_CHARGE)
{
report.POCrg1Amt +=po_input;
report.POCrg1Cnt ++;
PTD_report.POCrg1Amt +=po_input;
PTD_report.POCrg1Cnt ++;
report.Crg1Total -=po_input;
PTD_report.Crg1Total -=po_input;
report.GrandTotal -= po_input;
PTD_report.GrandTotal -= po_input;
DL_Add(&report.NRGT, -po_input, sysflag->sysdots);
DL_Add(&PTD_report.NRGT, -po_input, sysflag->sysdots);
Set_Rpt_Flag(RPT_FULL_DAILY);
Set_Rpt_Flag(RPT_FULL_PTD);
Set_Rpt_Flag(RPT_NRGT);
Clr_Dsp_Data();
//Insert_Sect(SECT_PO,0);
Lcm_Disp_Str(PO_Charge ,LCM_LINE_2 , ALIGN_LEFT, FALSE);
RightDisp(-po_input, sysflag->sysdots);
_DrawOn();
Head_Prn_Flag = 0; /* Not print the flush print head */
Logo_Prn_Flag = 0; /* Not print the logo */
Prn_InsFmtStr(Var_Str_PO, 1, Get_Spec_Len(Var_Str_PO), FLUSH_LEFT);
Print_Ex(1);
memcpy(prn_Buf+1, charge[0], MAX_DESC_LEN);
LongPrnFmt(-po_input, sysflag->sysdots, RPOSI, RIGHTFLUSH);
print();
prn_Line('-');
prn_Stamp();
Logo_Prn_Flag = 1;
Flag_Prn_Head = FALSE;
#ifdef RCPT_REPRN /* Support the receipt reprint function */
Rcpt_RePrn_Cnt = 0;
#endif /* End RCPT_REPRN */
Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, 1, PO_Charge, ALIGN_LEFT);
LongLcdFmt_Text_Buff(BUF_ID_LCD_TEXT, 15, -po_input, sysflag->sysdots, ALIGN_LEFT);
Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);
}
else if(InCmd == KD_MISC)
{
report.POMISCAmt +=po_input;
report.POMISCCnt ++;
PTD_report.POMISCAmt +=po_input;
PTD_report.POMISCCnt ++;
report.MiscTotal -=po_input;
PTD_report.MiscTotal -=po_input;
report.GrandTotal -= po_input;
PTD_report.GrandTotal -= po_input;
DL_Add(&report.NRGT, -po_input, sysflag->sysdots);
DL_Add(&PTD_report.NRGT, -po_input, sysflag->sysdots);
Set_Rpt_Flag(RPT_FULL_DAILY);
Set_Rpt_Flag(RPT_FULL_PTD);
Set_Rpt_Flag(RPT_NRGT);
Clr_Dsp_Data();
//Insert_Sect(SECT_PO,0);
Lcm_Disp_Str(PO_Misc ,LCM_LINE_2 , ALIGN_LEFT, FALSE);
RightDisp(-po_input, sysflag->sysdots);
_DrawOn();
Head_Prn_Flag = 0; /* Not print the flush print head */
Logo_Prn_Flag = 0; /* Not print the logo */
Prn_InsFmtStr(Var_Str_PO, 1, Get_Spec_Len(Var_Str_PO), FLUSH_LEFT);
Print_Ex(1);
Prn_Adj_Ex(Var_Str_Misc,-po_input,sysflag->sysdots,RPOSI, DESC_NEW);
prn_Line('-');
prn_Stamp();
Logo_Prn_Flag = 1;
Flag_Prn_Head = FALSE;
#ifdef RCPT_REPRN /* Support the receipt reprint function */
Rcpt_RePrn_Cnt = 0;
#endif /* End RCPT_REPRN */
Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, 1, PO_Misc, ALIGN_LEFT);
LongLcdFmt_Text_Buff(BUF_ID_LCD_TEXT, 15, -po_input, sysflag->sysdots, ALIGN_LEFT);
Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);
}
po_flag = 0;
}
/**---------------------------------------------------**
** processing index number printing and open drawer **
**---------------------------------------------------**/
void Do_NS(void)
{
byte i;
char tmp_str[MAX_TEXT];
byte len = 0;
memset(tmp_str, 0x20, MAX_TEXT);
#ifndef VER_RSNT
if(Cash_flag){errorType(ERR_PAY_NO_END);return;}
#else
if((work_mode == RETAIL) && (Cash_flag))
{errorType(ERR_PAY_NO_END);return;}
#endif /* End VER_RSNT */
if((Void_flag) || (RM_flag) || (Mul_flag))
{errorType(ERR_KEY_SEQ);return;}
if(numcnt)
{
//Insert_Char('N',0);
Lcm_Disp_Str( Note_Number ,LCM_LINE_2,ALIGN_LEFT, FALSE);
len = strlen(Note_Number);
memcpy(tmp_str, Note_Number, len);
prn_Buf[1] = '#';
memcpy(prn_Buf+1+1,In_Buff,numcnt);
for(i = 0;i < numcnt; i++) /* Adjust with ASCII code */
prn_Buf[i+1+1] += '0';
memcpy(tmp_str+len+2, prn_Buf+1, 1+numcnt);
len += 2+ 1 +numcnt;
print();
if(NewTrans == 0)
{
NewTrans = 1;
Update_TVAT_Buff();
}
tmp_str[len] = '\0';
Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, 1, tmp_str, ALIGN_LEFT);
Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);
}
else if(!NewTrans)
{
_DrawOn();
if(CurrMode == REGISTER) /* Update the no sale report */
{
report.NScount++;
PTD_report.NScount++;
}
// #ifndef VER_RSNT
if(sysflag->NS_switch)
{
Head_Prn_Flag = 0; /* Not print the flush print head */
Logo_Prn_Flag = 0; /* Not print the logo */
// memcpy(prn_Buf+1,Var_Str_NS,strlen(Var_Str_NS));
// xtr_strcpy(prn_Buf+1,Var_Str_NS); /* Modified on 2004-04-07 17:30 */
// Prn_InsFmtStr(Var_Str_NS, 1, strlen(Var_Str_NS)/2, FLUSH_LEFT);
Prn_InsFmtStr(Var_Str_NS, 1, Get_Spec_Len(Var_Str_NS), FLUSH_LEFT);
// print();
Print_Ex(1);
prn_Line('-');
prn_Stamp();
Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, 1, Str_NS, ALIGN_LEFT);
Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);
Logo_Prn_Flag = 1;
}
#ifdef RCPT_REPRN /* Support the receipt reprint function */
Rcpt_RePrn_Cnt = 0;
#endif /* End RCPT_REPRN */
DisTime();
//Lcm_Disp_Str(Reg_mode ,LCM_LINE_2,ALIGN_LEFT);
// #endif /* End VER_RSNT */
}
else
{ errorType(ERR_SALE_NO_END);return; }
}
/*************************************************************/
/**------------------------------------------------**
** process X-count and display date and time **
**------------------------------------------------**/
void Do_xTime(void)
{
if(Cash_flag) /* The payment not end */
{errorType(ERR_PAY_NO_END);return;}
if((Void_flag) || (Mul_flag))
{errorType(ERR_KEY_SEQ);return;}
if(numcnt)
{
Lcm_Disp_Str( X_count ,LCM_LINE_2 ,ALIGN_LEFT, FALSE);
if(lnum == 0)
{errorType(ERR_DIGIT_ILLEGAL);return;}
if(dec_flag == 0)
{
#ifdef VER_RSNT /* Support the restaurant function */
if(lnum > (MAX_TABLE_LOGI_NO))
{errorType(ERR_DIGIT_ILLEGAL);return;}
#endif /* End VER_RSNT */
VFDSetPeriod(MAX_LCD_NUM - sysflag->sysdots - 1,CLR); /* Clear the period when the price has inputed */
lnum *= 1000;
#ifndef VER_RSNT /* Not support restaurant function */
if(lnum > (MAXQUNTY))
{errorType(ERR_XTIME_QTY);return;}
#endif /* End VER_RSNT */
}
else
{
lnum *= getLong(3-dec_cnt); /* Adjust, for the 3 percent decimal points */
if(lnum > MAXQUNTY)
{errorType(ERR_XTIME_QTY);return;}
}
Mul_flag = 1;
tmp_count=lnum;
Qty_Adjust(lnum);
Clr_Dsp_Data();
RightDisp(adj_num, adj_dots);
}
else
{
if(!sysflag->tax_shift_mode)
Clr_Tax_Flag();
if(NewTrans)
{ errorType(ERR_SALE_NO_END); return; }
DisTime();
}
#ifdef VER_RSNT /* Support the restaurant function */
bak_dec_flag = dec_flag; /* When in the restaurant mode, save the decimal point key pressed status */
#endif /* End VER_RSNT */
}
/**-------------------------------------------------------**
** checking and calculating max or min value of **
** count and amount etc. of dept1 and dept2 **
**-------------------------------------------------------**/
byte maxcheck(byte ch, byte flag)
{
byte i;
if(Chk_Buff_Full() == NG)
return (NOTOK);
if(Void_flag)
{
if(flag == DEPT)
{
if(trans.amount > calPrtAmt(DEPT,ch)) /* Judge the VOID amount is larger than the buffer amount or not */
{ errorType(ERR_VOID_OVER); return (NOTOK);}
}
transbuff[TnsBf_Len].ID = TS_VD_DEPT; /* Department VOID operation */
transbuff[TnsBf_Len].price = -trans.price; /* Set it a negative value */
transbuff[TnsBf_Len].quantity = 1*1000; /* Set it 1 quantity */
}
else if(RM_flag) /* In the Return Merchandise mode, don't need any judge */
{
transbuff[TnsBf_Len].ID = TS_RM_DEPT; /* Department Return Merchandise operation */
transbuff[TnsBf_Len].price = -trans.price; /* Set it a negative value */
transbuff[TnsBf_Len].quantity = trans.count; /* The quantity is always positive */
}
else /* The normal press DEPT mode */
{
if(labs(ltmp + trans.amount + tmpvars.netamt) > (unsigned long )MAXCASH) /* Reach to the max total */
{ errorType(ERR_TRANS_AMT);return (NOTOK); }
if((calTotQty(transbuff, TnsBf_Len) + trans.count)/1000 > MAXTCNT) /* Reach to the max quantity */
{errorType(ERR_TRANS_QTY);return (NOTOK);}
if((dept[ch].pflag2>>4) != 0)//age limit
{
// if(Warning(WARN_AGE1) != OK)
// return NOTOK;
}
transbuff[TnsBf_Len].ID = TS_DEPT;
transbuff[TnsBf_Len].price = trans.price; /* Positive value */
transbuff[TnsBf_Len].quantity = trans.count;
}
transbuff[TnsBf_Len].nth = ch;
transbuff[TnsBf_Len].flag = (sysflag->xCount_round)<<4;
if(sysflag->Tax_System) /* Tax mode */
{
for(i = 0; i < MAX_TAX_NUM; i++)
transbuff[TnsBf_Len].flag |= (TaxFlag[i]<<i);
}
else /* VAT mode */
transbuff[TnsBf_Len].flag |= (dept[ch].pflag) & (0x0F);
TnsBf_Len ++;
if(!NewTrans) /* Is the new transaction, store the tax/VAT rate and the tax/VAT mode */
Update_TVAT_Buff();
if(CurrMode == REGISTER)
{
Set_Rpt_Flag(RPT_FULL_DAILY);
Set_Rpt_Flag(RPT_FULL_PTD);
}
#ifdef AUTO_PER /* Support the auto percent function */
Auto_Per_Flag = 0;
#endif /* End AUTO_PER */
return (OK); /* Normal return */
}
/**----------------------------------------------------**
** computing programmed price of departments **
**----------------------------------------------------**/
byte get_dept_price(byte ch)
{
lnum = dept[ch].price;
if(lnum ==0L)
{ errorType(ERR_ZERO_TRANS); return (NOTOK); }
return (OK);
}
/**---------------------------------------------------**
** Processing department operation **
**---------------------------------------------------**/
void Do_Dept(byte ch)
{
byte pflag; /* Store the department structure flag */
long tmp; /* temporary variable */
byte qty[MAX_LENGTH_15+1];
byte len;
byte i;
if(Cash_flag) /* The payment is not end */
{errorType(ERR_PAY_NO_END); return;}
#if COUNTRY == HONGKONG
if (!dept[ch].sale) // 不允许直接销售, 表明是管理PLU的.
{
curr_dept = ch;
Do_Dept_Ex(ch); // 部门的额外处理, 刷新PLU及Cooking Message的显示
return;
}
#endif
if(numcnt) /** manual price processing **/
{
if((lnum >= getLong(dept[ch].Hdlo)) || (lnum > sysflag->HaloNum))
{errorType(ERR_HALO);return;}
if((lnum == 0) && (sysflag->zero_trans_flag == 0)) /* Not support the zero transaction */
{errorType(ERR_ZERO_TRANS);return;}
if(Void_flag == 1)
{errorType(ERR_DIGIT_ILLEGAL);return;}
if(Mul_flag) /* Has press the XTIME key */
{
if(tmp_count > MAXQUNTY)
{errorType(ERR_XTIME_QTY);return;}
tmp = Sale_Mul(lnum, sysflag->sysdots, tmp_count, 3, sysflag->xCount_round, sysflag->sysdots);
if((tmp > sysflag->HaloNum) || (tmp == MIN_SIGNED_LONG) || (tmp < 0))
{errorType(ERR_HALO);return;}
/* The trans.count has do in the function Do_xTime */
trans.price = lnum;
trans.count = tmp_count;
trans.amount = tmp;
}
else
{
trans.price = lnum;
trans.count = 1*1000; /* For the quantity has 3 dots */
trans.amount = lnum;
}
/* this palce will be added Tax Shift Flag processing */
pflag=dept[ch].pflag;
if(sysflag->Tax_System)
{
if(!Tax_Emp_Flag)
{
ltmp = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -