?? prog_tax.c
字號:
#include "ecrsys.h"
#include "ftype.h"
#include "sysdata.h"
#include "data.h"
#include "keydef.h"
#include "iccard.h"
#include "mathes.h"
#include <string.h>
#include "disp.h"
#include "lcd2.h"
#include "PC_Comm.h"
#include "lcd_pop.h"
#include "program.h"
#include "prog_tax.h"
#include "stdio.h"
TAX_GST_VAT_DEF Tax_Rate;
void TaxRate_SetGst(void);
void TaxRate_SetUsaVat(void);
void Bell_Special_Alarm(char flag);
char Lcd_GetTenKey(const char **Str,char line,char MaxCntr,long MaxNum,long *ret);
WORD Menu_Select(const char **Str_Menu, const char *Str_Prompt[],BYTE Menu_Line,BYTE CurrLine,BYTE FirstLine, BYTE mode, BYTE *result);
/*提示符號*/
const char Str_ProgTaxRateTaxVatGst[25][MAX_LCD_TEXT+1] =
{
{"TAX 1 SET UP "}, /*0*/
{"TAX 2 SET UP "},
{"TAX 3 SET UP "},
{"TAX 4 SET UP "}, /*3*/
{"VAT 1 SET UP "},
{"VAT 2 SET UP "},
{"VAT 3 SET UP "},
{"VAT 4 SET UP "}, /*7*/
{"GST SET UP "}, /*08*/
{"PST1 SET UP "}, /*09*/
{"PST2 SET UP "}, /*10*/
{"PST3 SET UP "}, /*11*/
{"TAX LIMIT: "}, /*12*/
{"GST RATE "}, /*13*/
{"PST1 RATE "}, /*14*/
{"PST2 RATE "}, /*15*/
{"PST3 RATE "}, /*16*/
{"TAX LIMIT: "}, /*17*/
{"NON TAX LIMIT "} /*18*/
};
const char Str_TaxLimit[] =
{
"Tax Limit:"
};
const char Str_USAVATRATEPRG_PROMPT[4][MAX_LCD_TEXT+1] =
{
"PLEASE INPUT",
"VAT 1 PERCENTAGE RATE.",
"(XX.XXX%) ENTER as",
"5-digit number."
};
const char Str_TaxVat[2][8] =
{
{"TAX X "},
{"VAT X "}
};
const char Str_GstNonGst[2][8] =
{
{"NON GST"},
{"GST"}
};
const char Str_GstRate_Prompt[10][2][100] =
{
{
{"To Enter Canadian GST percentage Rate. "},
{"To Enter the maximum non-taxable limit dollor amount for GST "},
},
{
{"To Enter Canadian PST1 percentage Rate."},
{"To Enter the maximum non-taxable limit dollor amount for PST1"},
},
{
{"To Enter Canadian PST2 percentage Rate."},
{"To Enter the maximum non-taxable limit dollor amount for PST2"},
},
{
{"To Enter Canadian PST3 percentage Rate."},
{"To Enter the maximum non-taxable limit dollor amount for PST3"}
}
};
const char Str_GSTPST[2][6] =
{
"GST ",
"PSTX "
};
const char Str_GstNonTaxLmtPrmpt[2][MAX_LCD_TEXT] =
{
"PLEASE INPUT",
"NON TAX LIMIT AMT."
};
const char Str_Tax_On_Tax[3][MAX_LCD_TEXT] =
{
"NO TAX-ON-TAX ",
"TAX-ON-TAX ",
"TAX-ON-TAX-ON-TAX "
};
/******************************************************************************
* Program the TAX system
* VAT Tax system
* USA Tax system
* VAT tax system
* Created by ZhengXC 2006-8-25 19:08
******************************************************************************/
/*****************************************************************************
* Tax System Initialize
* Initialize the tax rate and limitation to 0 when do the all clearing
*****************************************************************************/
void Tax_Init(void)
{
char i;
for (i=0;i< MAX_TAX_NUM;i++)
{
Tax_Rate.rate[i].rate = 0L;
Tax_Rate.rate[i].lmt = 0L;
}
Tax_Rate.Tax_Lmt_type = TAX_LMT_NO_GST;
Tax_Rate.Tax_On_Tax = TAX_TYPE_NO_TAX_ON_TAX;
}
/*------------------------------------------------------------------------------
* 設置GST模式下的Tax Limit 方式
* 輸入參數 -- None
* 輸出參數 -- 對用戶輸入的數據判斷并更新Tax_Rate.lmt
* 函數返回:
* true -- 正常退出 (Enter鍵退出)
* false -- Cancel鍵退出
*
*-----------------------------------------------------------------------------*/
BOOL TaxRate_Gst_Lmt_Set(void)
{
char ret;
char Flag_Modified = false;
const char *Str_ptr[2];
Str_ptr[0] = Str_GstNonGst[0]; /*提示符號, GST或者非GST*/
Str_ptr[1] = Str_GstNonGst[1];
if(Get_Btn_Choice_Input_Ex(Str_ptr, 0x22, 2,&ret) == OK)/*正常選擇輸入*/
{
if (ret == KD_YES)
Tax_Rate.Tax_Lmt_type = TAX_LMT_NO_GST;
else
Tax_Rate.Tax_Lmt_type = TAX_LMT_GST;
Flag_Modified = true; /*允許光標下移一項*/
}
// if(Get_Btn_Choice_Input_Ex(Str_ptr, 0x22, 2) == OK)/*正常選擇輸入*/
// {
// if (numcnt && (lnum < 2 ))
// {
// if (lnum==0)
// Tax_Rate.Tax_Lmt_type = TAX_LMT_NO_GST;
// else
// Tax_Rate.Tax_Lmt_type = TAX_LMT_GST;
// Flag_Modified = true; /*允許光標下移一項*/
// }
// }
return(Flag_Modified);
}
/*-----------------------------------------------------------------------------
*設定在GST模式下,是否需要TAXONTAX/TAXONTAXONTAX的功能選擇
* 輸入: None
* 輸出: 根據用戶的輸入對Tax_Rate.Tax_On_Tax 進行更新
* 函數返回:
* true -- 正常退出 (Enter鍵退出)
* false -- 用戶按Cancel鍵盤退出
*
*----------------------------------------------------------------------------*/
BOOL TaxRate_Gst_TaxOnTax_Set(void)
{
const char *Str_ptr[3];
BOOL Flag_Modified = false;
Str_ptr[0] = Str_Tax_On_Tax[0];
Str_ptr[1] = Str_Tax_On_Tax[1];
Str_ptr[2] = Str_Tax_On_Tax[2];
if(Get_Btn_Choice_Input(Str_ptr, 0x16, 3) == OK) /*Enter is depressed*/
{
if (lnum < 3 ) /*總共只有三種選擇*/
{
Tax_Rate.Tax_On_Tax = lnum;
Flag_Modified = true;
}
}
return(Flag_Modified);
}
/*------------------------------------------------------------------------------
* Program the Tax Rate
* According to the system flag's tax system status to branch to USA or VAT
* or GST system
* For USA type, the tax table will not support at first.
*
*-----------------------------------------------------------------------------*/
void Prog_TaxRate(void)
{
BYTE idx = 0;
word key = 0;
if ((sysflag->Tax_System != USA_TAXTYPE) && (sysflag->Tax_System != GST_TAXTYPE))
sysflag->Tax_System = GST_TAXTYPE;
if ((sysflag -> Tax_System == USA_TAXTYPE)||(sysflag -> Tax_System == VAT_TAXTYPE))
{
TaxRate_SetUsaVat(); /*Program the USA/VAT rate includes Rate*/
}
else
{
TaxRate_SetGst(); /*Program GST */
}
}
/*******************************************************************************
* 顯示菜單編程GST/PST1-4的Rate和Limitation
*******************************************************************************/
BOOL TaxRate_GstRateLmt_Set(char tax_idx)
{
char i,r1;
char r;
long rate;
char idx = 0;
char loop = true;
char result = 0;
BOOL Flag_Modify = false;
const char *Str_Prompt[10]=
{
{" "},
{" "},
{" "},
{" "},
{" "},
{" "},
{" "},
{" "},
{" "},
{" "}
};
char Str1[5][MAX_LCD_TEXT+1];
char temp[20];
while(loop)
{
/* 菜單上需要提示的字符串*/
memcpy(Str1[0],Str_ProgTaxRateTaxVatGst[13+tax_idx],MAX_LCD_TEXT);
memcpy(Str1[1],Str_ProgTaxRateTaxVatGst[17],MAX_LCD_TEXT);
/* 顯示GST Rate的值以及Non Tax Limitation 的值*/
{
char temp[20];
if (Tax_Rate.rate[tax_idx].rate == 0)
{
memset(temp,' ',10);
temp[6] = '%';
temp[5] = temp[4] = temp[3] = temp[1] = '0';
temp[2] = '.';
}
else
{
sprintf(temp,"%.5ld",Tax_Rate.rate[tax_idx].rate); /*Change to ASCII*/
temp[6] = '%';
temp[5] = temp[4];
temp[4] = temp[3];
temp[3] = temp[2];
temp[2] = '.';
}
memcpy((char*)&Str1[0][MAX_LCD_TEXT-7], temp, 7);
}
/*顯示Non Lmitation value*/
{
char temp[20];
if (Tax_Rate.rate[tax_idx].lmt == 0)
{
memset(temp,' ',10);
temp[6] = temp[5] = temp[3] = '0';
temp[4] = '.';
}
else
{
sprintf(temp,"%.6ld",Tax_Rate.rate[tax_idx].lmt); /*Change to ASCII*/
temp[6] = temp[5];
temp[5] = temp[4];
temp[4] = '.';
}
memcpy((char*)&Str1[1][MAX_LCD_TEXT-7], temp, 7);
}
r1 = NG;
r = Menu_Select(Str1,Str_Prompt,2,idx,1,0,&result);
switch(r)
{
case KD_ENTER: /*Enter Key is depressed*/
switch(result)
{
case 0: /*Rate programming*/
/* 先設定文本區域的顯示內容和在屏幕下方的提示內容在兩個數組中*/
if (result == 0) /*GST Rate input*/
{
for (i=0;i<4;i++)
memcpy(Str1[i],(char*)Str_USAVATRATEPRG_PROMPT[i],MAX_LCD_TEXT);
if (tax_idx == 0) /*GST set*/
memcpy(Str1[1],Str_GSTPST[0],strlen(Str_GSTPST[0]));
else
{
memcpy(Str1[1],Str_GSTPST[1],strlen(Str_GSTPST[1]));
Str1[1][3] = tax_idx + '0';
}
}
else /*Non Tax Limitation input*/
{
for (i=0;i<2;i++)
memcpy(Str1[i],(char*)Str_GstNonTaxLmtPrmpt[i],MAX_LCD_TEXT);
}
/*讓用戶輸入數據*/
if (Lcd_GetTenKey(Str1,4, 5, 99999,&rate) == OK)/*4行提示,輸入5位數,返回在rate*/
{
Tax_Rate.rate[tax_idx].rate = rate; /*Update the Rate*/
r1 = OK;
}
else
{
Bell_Special_Alarm(0); /*輸入非法*/
}
break;
case 1: /*Limitation programming*/
memcpy(Str1[0],Str_GstNonTaxLmtPrmpt[0],MAX_LCD_TEXT);
memcpy(Str1[1],Str_GstNonTaxLmtPrmpt[1],MAX_LCD_TEXT);
if (Lcd_GetTenKey(Str1,2,6,999999,&rate) == OK)/*4行提示,輸入5位數,返回在rate*/
{
Tax_Rate.rate[tax_idx].lmt = rate;
r1 = OK;
}
else
{
Bell_Special_Alarm(0); /*輸入非法*/
}
break;
default:
Bell_Special_Alarm(0); /*輸入非法*/
break;
}
if (r1 == OK) /*用戶更改過某個參數*/
{
idx = (result+1)%2;
Flag_Modify = true;
}
else
{
idx = (result)%2;
}
break;
case KD_CANCEL:
case CTRL_LOCK_CHG:
loop = false;
break;
default:
Bell_Special_Alarm(0); /*輸入非法*/
break;
}
}
return(Flag_Modify);
}
/*******************************************************************************
* 編程GST Rate / PST rate以及 Limitation
* GST Rate
* PST 1 Rate
* PST 2 Rate
* PST 3 Rate
* TAX LIMIT: GST/NO GST
* TAX-ON-TAX: ...
*******************************************************************************/
void TaxRate_SetGst(void)
{
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -