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