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; //稅率,1七、1三、六、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;
}
相關文章
相關標籤/搜索