⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd_rpt.c

📁 一款收款机C源代码!因为是几年前的代码了
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -