📄 lcd_rpt.c
字号:
#include "ecrsys.h"
#include "keydef.h"
#include "data.h"
#include "sysdata.h"
#include "ftype.h"
#include "lcd_rpt.h"
#include "string.h"
#include "mathes.h"
/*-------------------------------------------------------------------*
make the report display as text on the LCD
*-------------------------------------------------------------------*/
void Lcd_ClrText(void)
{
Rst_Lcd_Text();
Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);
Rst_Tl_Sub();
Lcd_Disp_Text_Buff(BUF_ID_TL_SUB);
}
void Lcd_Disp_Text(byte *str)
{
Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, 1, str, ALIGN_LEFT);
Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);
}
void Lcd_Disp_Rpt_Head(void)
{
char lcd_disp_buf[MAX_LCD_TEXT];
Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, LCD_POSI_SALE_ITEM, Str_Lcd_Item, ALIGN_LEFT);
Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, LCD_POSI_SALE_QTY, Str_Lcd_Qty, ALIGN_LEFT);
Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, LCD_POSI_SALE_PRICE, Str_Lcd_PrAmt, ALIGN_LEFT);
Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);
memset(lcd_disp_buf, '=', MAX_LCD_TEXT);
Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, LCD_POSI_SALE_ITEM, lcd_disp_buf, ALIGN_LEFT);
Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);
}
void Lcd_Disp_Daily_Rpt(void)
{
Lcd_ClrText();
Lcd_Disp_Rpt_Head();
Lcd_Send_Text_Buff_Str(BUF_ID_TL_TITLE,1, "Daily Report", ALIGN_MID);
Lcd_Disp_Text_Buff(BUF_ID_TL_TITLE);
Lcd_Disp_Sale_Rpt(&report,DAILY);
}
void Lcd_Disp_PTD_Rpt(void)
{
Lcd_ClrText();
Lcd_Disp_Rpt_Head();
Lcd_Send_Text_Buff_Str(BUF_ID_TL_TITLE,1, "Period Report", ALIGN_MID);
Lcd_Disp_Text_Buff(BUF_ID_TL_TITLE);
Lcd_Disp_Sale_Rpt(&PTD_report,PTD);
}
/*
显示格式:
部门报表
百分比报表
优惠报表
税报表
付款方式报表
退货,减价,
*/
void Lcd_Disp_Sale_Rpt(REPORT *report, byte mode)
{
byte i;
byte lenth;
long TVATAmt;
byte prn_ra_po_info_flag = 0;
Lcd_Cls_Text_Refresh();
Lcd_Disp_Dept_Rpt(mode);
//for percent
for(i = 0; i < MAX_PER_NUM; i ++)
{
if((report->Per_Item_Cnt[i] == 0) && (report->Per_Item_Amt[i] == 0) && (sysflag->zero_skip == 1)
&& (report->Per_SubTtl_Cnt[i] == 0) && (report->Per_SubTtl_Amt[i] == 0))
continue;
Lcd_Send_Text_Buff_Desc(BUF_ID_LCD_TEXT, LCD_POSI_SALE_ITEM, percent[i].desc, NO, ALIGN_LEFT);
LongLcdFmt_Text_Buff(BUF_ID_LCD_TEXT, LCD_POSI_SALE_PRICE, (((percent[i].flag % 2) == 1)?-1:1)*percent[i].rate, PER_DOTS, ALIGN_LEFT);
lenth = Cal_Len2((((percent[i].flag % 2) == 1)?-1:1)*percent[i].rate, PER_DOTS);
Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, lenth+LCD_POSI_SALE_PRICE, Str_Per_Symbol, ALIGN_LEFT);
Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);
Lcd_Disp_Rpt(Str_Item, report->Per_Item_Cnt[i], 1, report->Per_Item_Amt[i], sysflag->sysdots);
Lcd_Disp_Rpt(Str_SubTtl,report->Per_SubTtl_Cnt[i], 1, report->Per_SubTtl_Amt[i], sysflag->sysdots);
}
//for refund
if((report->RF_Item_Qty!=0)||(report->RF_SubTtl_Qty!=0))
{
Lcd_Send_Text_Buff_Desc(BUF_ID_LCD_TEXT, LCD_POSI_SALE_ITEM, refund.desc, NO, ALIGN_LEFT);
Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);
}
Lcd_Disp_Rpt(Str_Item, report->RF_Item_Qty, 0, report->RF_Item_amount, sysflag->sysdots);
Lcd_Disp_Rpt(Str_SubTtl,report->RF_SubTtl_Qty, 0, report->RF_SubTtl_amount, sysflag->sysdots);
//for TAX/VAT
if(sysflag->Tax_System) /* Tax mode */
{
TVATAmt = 0;
for(i = 0; i < MAX_TAX_NUM; i ++)
{
if(sysflag->zero_skip)
{
if(/*(report->TVATAble[i] == 0) && */(report->TVATAmt[i] == 0))
continue;
}
Lcd_Send_Text_Buff_Desc(BUF_ID_LCD_TEXT, LCD_POSI_SALE_ITEM, Tax[i].desc, NO, ALIGN_LEFT);
Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);
Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, 1, Str_AbleAmt, ALIGN_LEFT);
LongLcdFmt_Text_Buff(BUF_ID_LCD_TEXT, LCD_POSI_SALE_PRICE, report->TVATAble[i], sysflag->sysdots, ALIGN_LEFT);
Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);
Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, 1, Str_Amt, ALIGN_LEFT);
LongLcdFmt_Text_Buff(BUF_ID_LCD_TEXT, LCD_POSI_SALE_PRICE, report->TVATAmt[i], sysflag->sysdots, ALIGN_LEFT);
TVATAmt += report->TVATAmt[i];
Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);
}
Lcd_Disp_Adj(Str_TaxTotAmt,TVATAmt,sysflag->sysdots,LCD_POSI_SALE_PRICE);
}
else /* VAT mode */
{
TVATAmt = 0;
for(i = 0; i < MAX_VAT_NUM; i ++)
{
if(sysflag->zero_skip)
{
if(/*(report->TVATAble[i] == 0) && */(report->TVATAmt[i] == 0))
continue;
}
Lcd_Send_Text_Buff_Desc(BUF_ID_LCD_TEXT, LCD_POSI_SALE_ITEM, VAT[i].desc, NO, ALIGN_LEFT);
Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);
Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, 1, Str_AbleAmt, ALIGN_LEFT);
LongLcdFmt_Text_Buff(BUF_ID_LCD_TEXT, LCD_POSI_SALE_PRICE, report->TVATAble[i], sysflag->sysdots, ALIGN_LEFT);
Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);
Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, 1, Str_Amt, ALIGN_LEFT);
LongLcdFmt_Text_Buff(BUF_ID_LCD_TEXT, LCD_POSI_SALE_PRICE, report->TVATAmt[i], sysflag->sysdots, ALIGN_LEFT);
TVATAmt += report->TVATAmt[i];
Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);
}
Lcd_Disp_Adj(Str_VATTotAmt,TVATAmt,sysflag->sysdots,LCD_POSI_SALE_PRICE);
}
//for payment
Lcd_Disp_Adj(Str_NetNum,report->NetNum,0,LCD_POSI_SALE_PRICE);
Lcd_Disp_Adj(Str_NetAmt,report->NetAmt,sysflag->sysdots,LCD_POSI_SALE_PRICE);
Lcd_Disp_Adj(Str_NetSale,report->NetSale,sysflag->sysdots,LCD_POSI_SALE_PRICE);
Lcd_Disp_Line('-');
//for others
Lcd_Disp_Rpt(Str_RM_Rpt, report->RMquantity, 0, report->RMamount, sysflag->sysdots);
Lcd_Disp_Rpt(Str_EC_Rpt,report->ECcount, 1, report->ECamount, sysflag->sysdots);
Lcd_Disp_Rpt(Str_VOID_Rpt, report->VDcount, 1, report->VDamount, sysflag->sysdots);
Lcd_Disp_Rpt(Str_TSVD_Rpt, report->TSVDcount, 1, report->TSVDamount, sysflag->sysdots);
Lcd_Disp_Adj(Str_NScount,report->NScount,0,LCD_POSI_SALE_PRICE);
Lcd_Disp_Line('-');
if((report->RACount) || (report->RAamount) || (report->RAChk1Cnt) || (report->RAChk1Amt)
|| (report->RACrg1Cnt) || (report->RACrg1Amt) || (report->RAMISCCnt) || (report->RAMISCAmt)
|| (sysflag->zero_skip == 0)) /* Not support the zero skip */
{
Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, 1, Str_RA_Rpt, ALIGN_LEFT);
Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);
Lcd_Disp_Rpt(Str_Cash, report->RACount, 1, report->RAamount, sysflag->sysdots);
Lcd_Disp_Rpt(Str_Misc, report->RAMISCCnt, 1, report->RAMISCAmt, sysflag->sysdots);
Lcd_Disp_Rpt(Str_Check1, report->RAChk1Cnt, 1, report->RAChk1Amt, sysflag->sysdots);
Lcd_Disp_Rpt(Str_Charge1, report->RACrg1Cnt, 1, report->RACrg1Amt, sysflag->sysdots);
prn_ra_po_info_flag = 1;
}
if((report->POCount) || (report->POamount) || (report->POChk1Cnt) || (report->POChk1Amt)
|| (report->POCrg1Cnt) || (report->POCrg1Amt) || (report->POMISCCnt) || (report->POMISCAmt)
|| (sysflag->zero_skip == 0)) /* Not support the zero skip */
{
Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, 1, Str_PO_Rpt, ALIGN_LEFT);
Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);
Lcd_Disp_Rpt(Str_Cash, report->POCount, 1, -report->POamount, sysflag->sysdots);
Lcd_Disp_Rpt(Str_Misc, report->POMISCCnt, 1, -report->POMISCAmt, sysflag->sysdots);
Lcd_Disp_Rpt(Str_Check1,report->POChk1Cnt, 1, -report->POChk1Amt, sysflag->sysdots);
Lcd_Disp_Rpt(Str_Charge1, report->POCrg1Cnt, 1, -report->POCrg1Amt, sysflag->sysdots);
prn_ra_po_info_flag = 1;
}
if(prn_ra_po_info_flag)
Lcd_Disp_Line('*');
Lcd_Disp_Rpt(Str_Cash_Rpt, report->CashCount, 1, report->CashAmt, sysflag->sysdots);
Lcd_Disp_Rpt(Str_MISC_Rpt, report->MiscCount, 1, report->MiscAmt, sysflag->sysdots);
Lcd_Disp_Line('-');
Lcd_Disp_Check_Rpt(report);
Lcd_Disp_Line('-');
Lcd_Disp_Charge_Rpt(report);
Lcd_Disp_Line('-');
#ifdef FCE_FUNC /* Support the FCE function */
Lcd_Disp_FCE_Rpt(mode);
#endif /* End FCE_FUNC */
Lcd_Disp_Adj(Str_MiscTotal,report->MiscTotal,sysflag->sysdots,LCD_POSI_SALE_PRICE);
Lcd_Disp_Adj(Str_CashTotal,report->CashTotal,sysflag->sysdots,LCD_POSI_SALE_PRICE); /* Not skip the cash total */
// Lcd_Disp_Adj(Str_NRGT, report->NRGT, sysflag->sysdots, 16); /* Not skip the cash total */
Lcd_Set_Text_Refresh();
}
void Lcd_Disp_Daily_Dept_Rpt(void)
{
Lcd_ClrText();
Lcd_Disp_Rpt_Head();
Lcd_Send_Text_Buff_Str(BUF_ID_TL_TITLE,1, "Daily Dept Report", ALIGN_MID);
Lcd_Disp_Text_Buff(BUF_ID_TL_TITLE);
Lcd_Disp_Dept_Rpt(DAILY);
}
void Lcd_Disp_PTD_Dept_Rpt(void)
{
Lcd_ClrText();
Lcd_Disp_Rpt_Head();
Lcd_Send_Text_Buff_Str(BUF_ID_TL_TITLE,1, "Period dept Report", ALIGN_MID);
Lcd_Disp_Text_Buff(BUF_ID_TL_TITLE);
Lcd_Disp_Dept_Rpt(PTD);
}
void Lcd_Disp_Dept_Group_Rpt(byte flag, byte group)
{
char text_buf[MAX_TEXT];
byte len;
Lcd_ClrText();
Lcd_Disp_Rpt_Head();
memset(text_buf, 0x20, MAX_TEXT);
if(flag == DAILY)
{
len = strlen(Str_Daily_DPGP_Rpt);
memcpy(text_buf, Str_Daily_DPGP_Rpt, len);
text_buf[17] = group + '0';
}
else
{
len = strlen(Str_PTD_DPGP_Rpt);
memcpy(text_buf, Str_PTD_DPGP_Rpt, len);
text_buf[18] = group + '0';
}
text_buf[len] = '\0';
Lcd_Send_Text_Buff_Str(BUF_ID_TL_TITLE,1, text_buf, ALIGN_MID);
Lcd_Disp_Text_Buff(BUF_ID_TL_TITLE);
Lcd_Disp_Dept_Rpt((flag<<7)+ group +1);
}
/*----------------------------------------------------------------------------------*
* The department report common print
* Parameter: mode: The DAILY mode or the P-T-D mode.
* DAILY: select the daily mode.
* PTD: select the period to date mode.
*----------------------------------------------------------------------------------*/
void Lcd_Disp_Dept_Rpt(byte mode)
{
byte dcnt;
byte i;
long quantity = 0;
long amount = 0;
long Tot_Qty;
long Tot_Amt;
byte group = 0;
Tot_Qty = 0;
Tot_Amt = 0;
if(mode >= 2)
{
group = (mode&0x7f)-1;
mode = mode>>7;
}
Lcd_Cls_Text_Refresh();
for(dcnt = 0; dcnt < Max_Dept_No; dcnt ++) /* Print each department's count and amount. */
{
if(group > 0)
{
if(dept[dcnt].group != group)
continue;
}
if( mode == DAILY )
{
quantity = dept[dcnt].quantity;
amount = dept[dcnt].amount;
}
else if(mode == PTD)
{
quantity = dept[dcnt].PTD_quantity;
amount = dept[dcnt].PTD_amount;
}
if (sys_flag.zero_skip == 1)
{
if((quantity==0) && (amount == 0))
continue;
}
Tot_Qty += quantity;
Tot_Amt += amount;
Lcd_Disp_Rpt_Ex(dept[dcnt].desc, quantity, 0, amount, sysflag->sysdots,1);
}
Lcd_Disp_Line('-');
Lcd_Disp_Rpt(Str_Total, Tot_Qty, 0, Tot_Amt, sysflag->sysdots);
Lcd_Set_Text_Refresh();
}
void Lcd_Disp_Daily_PLU_Rpt(void )
{
Lcd_ClrText();
Lcd_Disp_Rpt_Head();
Lcd_Send_Text_Buff_Str(BUF_ID_TL_TITLE,1, "Daily PLU Report", ALIGN_MID);
Lcd_Disp_Text_Buff(BUF_ID_TL_TITLE);
Lcd_Disp_PLU_Rpt(0, Max_Plu_No-1, DAILY);
}
void Lcd_Disp_PTD_PLU_Rpt(void )
{
Lcd_ClrText();
Lcd_Disp_Rpt_Head();
Lcd_Send_Text_Buff_Str(BUF_ID_TL_TITLE,1, "Period PLU Report", ALIGN_MID);
Lcd_Disp_Text_Buff(BUF_ID_TL_TITLE);
Lcd_Disp_PLU_Rpt(0, Max_Plu_No-1, PTD);
}
void Lcd_Disp_PLU_Group_Rpt(byte flag, byte group)
{
char text_buf[MAX_TEXT];
byte len;
Lcd_ClrText();
Lcd_Disp_Rpt_Head();
memset(text_buf, 0x20, MAX_TEXT);
if(flag == DAILY)
{
len = strlen(Str_Daily_PLUGP_Rpt);
memcpy(text_buf, Str_Daily_PLUGP_Rpt, len);
text_buf[16] = group + '0';
}
else
{
len = strlen(Str_PTD_PLUGP_Rpt);
memcpy(text_buf, Str_PTD_PLUGP_Rpt, len);
text_buf[17] = group + '0';
}
text_buf[len] = '\0';
Lcd_Send_Text_Buff_Str(BUF_ID_TL_TITLE,1, text_buf, ALIGN_MID);
Lcd_Disp_Text_Buff(BUF_ID_TL_TITLE);
Lcd_Disp_Dept_Rpt((flag<<7)+ group+1);
}
/*----------------------------------------------------------------------------------*
* The PLU report common print
* Parameter: mode: The DAILY mode or the P-T-D mode.
* DAILY: select the daily mode.
* PTD: select the period to date mode.
*----------------------------------------------------------------------------------*/
void Lcd_Disp_PLU_Rpt( WORD Start, WORD End, byte mode )
{
WORD plucnt; /* The PLU report counter */
long quantity;
long amount;
long Tot_Qty; /* The total quantity */
long Tot_Amt; /* The total amount */
byte group = 0;
Tot_Qty = 0;
Tot_Amt = 0;
if(mode >= 2)
{
group = (mode&0x7f)-1;
mode = mode >>7;
}
Lcd_Cls_Text_Refresh();
for(plucnt = Start; plucnt <= End; plucnt ++) /* Print the PLU's count and amount */
{
if( (Key_Buff_Chk(KD_CLEAR) == OK) && (plucnt != Start) )
{/* If has press CLEAR key, interrupt the print */
End = plucnt - 1;
Lcd_Send_Text_Buff_Str(BUF_ID_LCD_TEXT, 1, Str_PrnInt_Lcd, ALIGN_MID);
Lcd_Disp_Text_Buff(BUF_ID_LCD_TEXT);
break;
}
if(group > 0)
{
if(plu[plucnt].group != group)
continue;
}
#ifdef REST_PLU_FUNC
if((plu[plucnt].attr.mode==PLU_DESC)||(plu[plucnt].attr.mode==PLU_GIFT))
continue;
#endif
if( mode == DAILY )
{
quantity = plu[plucnt].quantity;
amount = plu[plucnt].amount;
}
else
{
#ifdef PLU_PTD_RPT
quantity = plu[plucnt].PTD_quantity;
amount = plu[plucnt].PTD_amount;
#else
quantity = 0;
amount = 0;
#endif
}
if( quantity == 0 && amount == 0 )
continue;
Tot_Qty += quantity;
Tot_Amt += amount;
// Plu_Add_Prn(plucnt);
Lcd_Disp_Rpt_Ex(plu[plucnt].desc, quantity, 0, amount, sysflag->sysdots,1);
}
Lcd_Disp_Line('-');
Lcd_Disp_Rpt(Str_Total, Tot_Qty, 0, Tot_Amt, sysflag->sysdots);
Lcd_Set_Text_Refresh();
}
void Lcd_Disp_PLU_Stock_Rpt(void)
{
WORD plucnt; /* The PLU report counter */
long quantity;
long safity_qty;
Lcd_ClrText();
Lcd_Disp_Rpt_Head();
Lcd_Send_Text_Buff_Str(BUF_ID_TL_TITLE,1, "PLU inventory Report", ALIGN_MID);
Lcd_Disp_Text_Buff(BUF_ID_TL_TITLE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -