var kindObj = {};
/**
* 连接金税卡
* @param InfoKind 0:专用发票 1:废旧 物资发票 2:普通发票
* @private
*/
function _kind_connect(InfoKind){
var cardInfo = {};
var self = this;
try {
self.kindObj=new ActiveXObject("TaxCardX.GoldTax");
self.kindObj.OpenCard();
if(self.kindObj.RetCode=="1011" || self.kindObj.RetCode=="3001"){
cardInfo.InvLimit = self.kindObj.InvLimit;//kai票限额, 金税卡发票开具价税合计限额
cardInfo.TaxCode = self.kindObj.TaxCode;//本单位税号
cardInfo.TaxClock = self.kindObj.TaxClock;//金税卡时钟
cardInfo.TaxClockStr =self._getDateStr(self.kindObj.TaxClock );//金税卡时钟
cardInfo.MachineNo = self.kindObj.MachineNo;//kai票机号码,主kai票机为 0
cardInfo.IsInvEmpty = self.kindObj.IsInvEmpty;//有票标志,0 为金税卡中无可开发票,1 为有票
cardInfo.IsInvEmptyStr = self.kindObj.IsInvEmpty==0?'否':'是';//有票标志,0 为金税卡中无可开发票,1 为有票
cardInfo.IsRepReached = self.kindObj.IsRepReached;//抄税标志,0 为未到抄税期,1 为已到抄税
cardInfo.IsRepReachedStr = self.kindObj.IsRepReached==0?'否':'是';//抄税标志,0 为未到抄税期,1 为已到抄税
cardInfo.IsLockReached = self.kindObj.IsLockReached;//锁死标志,0 为未到锁死期,1 为已到锁死期
cardInfo.IsLockReachedStr = self.kindObj.IsLockReachedStr==0?'否':'是';//锁死标志,0 为未到锁死期,1 为已到锁死期
self.kindObj.InfoKind=InfoKind;
cardInfo.InfoKindStr = InfoKind==0?'专用发票':'普通发票';//0:专用发票 1:废旧 物资发票 2:普通发票
self._kind_getinfo(cardInfo);
cardInfo.connectMsg = "金税卡已连接";
}else{
cardInfo.errMsg = ("金税卡开启失败,错误代码:"+self.kindObj.RetCode);
}
} catch (e) {
cardInfo.errMsg = ('ActiveX测试失败!'+e.description);
}
return cardInfo;
}
/**
* 开具发票
* @param data 发票数据
* @private
*/
function _kind_invoice(data){
var self = this;
var cardInfo ={};
var importValues =data;
cardInfo.noticeinvBillcode = importValues.noticeinvBillcode;
cardInfo.noticeinvBillcono = importValues.noticeinvBillcono;
cardInfo.memberCode = importValues.memberCode;
try {
var InfoKind = (importValues["ddTypeInvoiceclass"]) == '增值税专用发票'?0:2;
self.kindObj.InfoKind=InfoKind;
self.kindObj.GetInfo();
importValues.noticeinvTaxno = self.kindObj.InfoTypeCode;//发票代码
importValues.noticeinvTaxreceipt = self.kindObj.InfoNumber;//发票号码
} catch (e) {
cardInfo.errMsg = '发票查询失败!'+e.description;
return cardInfo;
}
//开具发票
try {
self.kindObj.InvInfoInit(); // 初始化发票抬头信息
self.kindObj.InfoKind = ((importValues["ddTypeInvoiceclass"]) == '增值税专用发票'?0:2); //增值税普通发票2 专票0
self.kindObj.InfoClientName = importValues["datasBalcorpname"]; //购方名称
self.kindObj.InfoClientTaxCode = importValues["companyTanu"]; //购方税号
self.kindObj.InfoClientBankAccount = importValues["companyAccountsName"]+importValues["companyAccountsCode"]; //购方开户行及账号
self.kindObj.InfoClientAddressPhone = importValues["companyAddr"]+importValues["companyPhone"]; //购方地址电话
self.kindObj.InfoSellerBankAccount = importValues["orgBankname"]+importValues["orgAccounts"]; //销方开户行及账号
self.kindObj.InfoSellerAddressPhone = importValues["orgAddr"]+importValues["orgPhone"]; //销方地址电话
self.kindObj.InfoNotes = ((importValues["invInvremark"])?importValues["invInvremark"]:''); //备注
self.kindObj.InfoInvoicer = ((importValues["operatorName"])?importValues["operatorName"]:''); //kai票人
self.kindObj.InfoChecker = ((importValues["billingCheckman"])?importValues["billingCheckman"]:''); //复核人,可为空
self.kindObj.InfoCashier = ((importValues["billingGatheringman"])?importValues["billingGatheringman"]:''); //收款人,可为空
if(importValues["goodsListFlag"] =="1"){
self.kindObj.InfoListName = '(详见销货清单)'; //如不为空,则开具销货清单,此为发票上商品名称栏的清单信息,应为“(详见销货清单)”字样
}
//kindObj.InfoBillNumber = ''; //销售单据编号,可为空
self.kindObj.ClearInvList(); //清空商品明细列表
var detailList = importValues["list"];
for(var i = 0 ;i< detailList.length; i++){
var item = detailList[i];
self.kindObj.InvListInit();
self.kindObj.ListGoodsName = item.noticeinvPartsname+ ( ((!item.goodsMaterial)|| item.goodsMaterial=='-') ?"":item.goodsMaterial); // 商品或劳务名称
//self.kindObj.ListTaxItem = item.taxCode; // 税目,4位数字,商品所属类别
self.kindObj.ListStandard = ((item.noticeinvSpec)?item.noticeinvSpec:''); // 规格型号
self.kindObj.ListUnit = ((item.partsnameWeightunit)?item.partsnameWeightunit:'');
self.kindObj.InfoTaxRate = item.goodsTaxrate?(item.goodsTaxrate*100):0; //税率,17、13、6、4 等 如果是多商品多税率 税率应该放到商品循环里
// 计量单位,如计量单位为空,则忽略数量和单价
//建议传入数量和含税单价或含税金额 由接口计算带小数的税额 规避误差
if(item.dataBweight){
self.kindObj.ListNumber = ((item.dataBweight)?item.dataBweight:0); // 数量
}
//self.kindObj.ListPrice = item.goodsInprice; // 单价
self.kindObj.ListAmount=item.goodsExmoney;// 金额,可以不传(为0),由接口软件计算,如传入则应符合计算关系
self.kindObj.ListTaxAmount=item.goodsTaxmoney;//税额可以不传(为0),由接口软件计算,如传入则应符合计算关系
self.kindObj.ListPriceKind = 0; // 含税价标志,单价和金额的种类, 0为不含税价,1为含税价
self.kindObj.AddInvList();
}
self.kindObj.Invoice();
if(self.kindObj.RetCode=="4011"){
var mess="开具成功>>";
mess+=" 合计不含税金额:"+self.kindObj.InfoAmount;
mess+=" 合计税额:"+self.kindObj.InfoTaxAmount;
mess+=" 日期:"+self.kindObj.InfoDate;
mess+=" 月份:"+self.kindObj.InfoMonth;
mess+=" 代码:"+self.kindObj.InfoTypeCode;
mess+=" 号码:"+self.kindObj.InfoNumber;
mess+=" 清单:"+self.kindObj.GoodsListFlag;
mess+=" 单价:"+self.kindObj.ListPrice;
mess+=" 数量:"+self.kindObj.ListNumber;
mess+=" 商品编码:"+self.kindObj.ListNumber;
cardInfo.noticeinvTaxno = self.kindObj.InfoTypeCode;//发票代码
cardInfo.noticeinvTaxreceipt = self.kindObj.InfoNumber;//发票号码
cardInfo.invBillstate = 1;
cardInfo.kindInvoiceMsg = mess;
}else{
cardInfo.errMsg = ("kai票失败,错误代码:"+self.kindObj.RetCode);
cardInfo.kindInvoiceMsg = cardInfo.errMsg ;
}
} catch (e) {
cardInfo.errMsg = '发票开具失败!'+e.description;
cardInfo.kindInvoiceMsg = cardInfo.errMsg ;
}
return cardInfo;
}
//断开金税卡
function _kind_close(){
var cardInfo = {};
var self = this;
try {
self.kindObj.CloseCard();
cardInfo.connectMsg = "金税卡已断开";
} catch (e) {
cardInfo.errMsg = ('关闭金税卡失败!'+e.description);
}
return cardInfo;
}
/**
* 查询库存发票
* @param cardInfo 连接信息
* @returns {*}
* @private
*/
function _kind_getinfo(cardInfo){
if(!cardInfo){
cardInfo = {};
}
var self = this;
try {
self.kindObj.GetInfo();
cardInfo.InfoTypeCode = self.kindObj.InfoTypeCode;//要开具发票的十位代码
cardInfo.InfoNumber = self.kindObj.InfoNumber;//要开具发票的号码
cardInfo.InvStock = self.kindObj.InvStock;//发票剩余份数
cardInfo.InvStockStr = self.kindObj.InvStock+"张";//剩余发票
cardInfo.TaxClock = self.kindObj.TaxClock;//金税卡时钟
} catch (e) {
cardInfo.errMsg = ('金税卡查询库存发票失败!'+e.description);
}
return cardInfo;
}
/**
* 作废发票
* @param InfoTypeCode 发票代码
* @param InfoNumber 发票号码
* @private
*/
function _kind_cancelinv(InfoTypeCode,InfoNumber){
var cardInfo = {};
var self = this;
try {
self.kindObj.InfoTypeCode=InfoTypeCode;
self.kindObj.InfoNumber=InfoNumber;
self.kindObj.CancelInv();
if(self.kindObj.RetCode=="6011"){
}else{
cardInfo.errMsg = ("发票作废失败,错误代码:"+self.kindObj.RetCode);
}
} catch (e) {
cardInfo.errMsg = ('发票作废失败!'+e.description);
}
return cardInfo;
}
/**
* 打印发票
* @param InfoTypeCode 发票代码
* @param InfoNumber 发票号码
* @param GoodsListFlag 销货清单标志,0 – 打印发票,1 – 打印销货清单
* @private
*/
function _kind_printinv(InfoTypeCode,InfoNumber,GoodsListFlag){
var cardInfo = {};
var self = this;
try {
self.kindObj.InfoTypeCode=InfoTypeCode;
self.kindObj.InfoNumber=InfoNumber;
self.kindObj.GoodsListFlag=GoodsListFlag;
self.kindObj.PrintInv();
if(GoodsListFlag == 1){ //清单打印两次
if(self.kindObj.RetCode!="5012"){
self.kindObj.PrintInv();
}
}
if(self.kindObj.RetCode=="5011"||self.kindObj.RetCode=="5012"){
cardInfo.RetCode = self.kindObj.RetCode;
}else{
cardInfo.errMsg = ("发票打印失败,错误代码:"+self.kindObj.RetCode);
}
} catch (e) {
cardInfo.errMsg = ('发票打印失败!'+e.description);
}
return cardInfo;
}