extjs 调用金税COM接口


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;
}

 

转载于:https://my.oschina.net/u/1767754/blog/3026142

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值