//按发票号码查询发票明细 UINT8 INVM_InvDetailNOQuery(string invCode,UINT32 invNO,UINT8 uFlag) { INT32 Ret=SUCCESS; string strsql(""); string strErr=""; string strBar=""; INT32 ret=0; //发票明细查询 CInvHead Invhead; UINT32 invNum=0;//发票张数 UINT8 cxfs=0; //0:按发票号码段查询 string cxtj(""); // cxfs为0时:12发票代码+8位起始号码+8位终止号码 cxtj =invCode; INT8 tmpChar[16]; memset((void *)tmpChar,0x00,sizeof(tmpChar)); sprintf(tmpChar,"%08u",invNO); cxtj.append(tmpChar); cxtj.append(tmpChar); DBG_PRINT(("cxtj= %s",cxtj.c_str())); if (uFlag ==0) { strBar="发票信息查询中....."; } else { strBar="发票信息补传中....."; } CaProgressBar proBar(strBar.c_str()); proBar.ReFresh(); Ret=g_pAPIBase->GetInvHeadInfo_API(*g_YwXmlArg, cxfs, cxtj, invNum, &Invhead, strErr); DBG_PRINT(("Ret= %d",Ret)); if (Ret !=SUCCESS) { CaMsgBox::ShowMsg(strErr); return FAILURE; } if (uFlag ==1) { CaMsgBox::ShowMsg("发票信息等待上传!"); g_globalArg->m_pthreadFlag = 1; return SUCCESS; } //从盘上获取的明细编码为空,则置为 "0000000000000",便于报表统计 CInvDet *p = Invhead.pHead; while (p) { DBG_PRINT(("p->m_spbm = %u", p->m_spbm.c_str())); if ("" == p->m_spbm) { p->m_spbm = "0000000000000"; } p = p->pNext; DBG_PRINT(("INV_DET AddNew()")); } //查看本地是否有该发票信息 CInvHead invheadtmp; INT8 sqlbuf[128]; memset(sqlbuf, 0x00, sizeof(sqlbuf)); sprintf(sqlbuf, "where FPDM = '%s' and FPHM = %u", invCode.c_str(), invNO); invheadtmp.m_filter = sqlbuf; invheadtmp.Requery(); if (invheadtmp.LoadOneRecord() == SQLITE_OK) { //判断本地数据库的数据类型是否与转换器一致 DBG_PRINT(("invheadtmp.m_kplx= %u",invheadtmp.m_kplx)); DBG_PRINT(("Invhead.m_kplx= %u",Invhead.m_kplx)); if (invheadtmp.m_kplx != Invhead.m_kplx ) { strsql = sqlbuf; invheadtmp.m_kplx = Invhead.m_kplx; ret = invheadtmp.Update(strsql, &(invheadtmp.m_kplx), NULL); DBG_PRINT(("ret= %d",ret)); if ( ret!= SQLITE_OK) { CaMsgBox::ShowMsg("更新发票头信息表错误"); return FAILURE; } //更新INV_DET发票类型 CInvDet invDet; invDet.m_kplx =invheadtmp.m_kplx; ret = invDet.Update(strsql, &(invDet.m_kplx), NULL); DBG_PRINT(("ret= %d",ret)); if ( ret!= SQLITE_OK) { CaMsgBox::ShowMsg("更新发票明细信息表错误"); return FAILURE; } } } else { //发票信息保存 if (SUCCESS != Invhead.Save()) { CaMsgBox::ShowMsg("查询发票存储失败!"); return FAILURE; } DBG_PRINT(("Invhead.m_kplx= %u",Invhead.m_kplx)); if(Invhead.m_kplx == RETURN_INV) { CRtInv rtInv; rtInv.m_fpdm =Invhead.m_yfpdm; rtInv.m_fphm =Invhead.m_yfphm; ret = rtInv.AddNew(); //写已退发票信息表 DBG_PRINT(("ret= %d",ret)); // if ( ret!= SQLITE_OK) // { // CaMsgBox::ShowMsg("查询红票,存储蓝票信息表错误"); // return FAILURE; // } } } CaMsgBox::ShowMsg("查询发票成功"); return SUCCESS; }
INT32 CJSKMakeInvoice::MakeInvAuthority(CInvHead *pInvHead, string& strErr) { INT32 retcode = JSK_SUCCESS; INT8 tmpBuff[32]; UINT8 sDecBuff[MAX_DATETIME_LEN+1]; INT8 sqlbuf[128]; INT32 errcode = 0; memset(sqlbuf, 0, sizeof(sqlbuf)); UINT32 uCurDate = 0; UINT32 uCurTime = 0; uCurDate = pInvHead->m_kprq; uCurTime = pInvHead->m_kpsj; DBG_PRINT(("uCurDate = %u", uCurDate)); DBG_PRINT(("uCurTime = %u", uCurTime)); switch(pInvHead->m_kplx) { case JSK_NORMAL_INV: // { // //离线锁死日(判断当前时间是否超过离线锁死日) // // //离线开票限定时长(当前时间与第一张未上传的发票时间比对) // CInvServ invServ; // invServ.Requery(); // if(invServ.LoadOneRecord() == SQLITE_OK) // { // DBG_PRINT(("invServ.m_issueDate = %u", invServ.m_issueDate)); // DBG_PRINT(("invServ.m_issueTime = %u", invServ.m_issueTime)); // DBG_PRINT(("g_globalArgLib->m_invKind->m_Lxkjsj = %u", g_globalArgLib->m_invKind->m_Lxkjsj)); // TDateTime upDateTime(invServ.m_issueDate, invServ.m_issueTime); // upDateTime = upDateTime.HourAdd(upDateTime, g_globalArgLib->m_invKind->m_Lxkjsj); // DBG_PRINT(("upDateTime = %s", upDateTime.FormatString(YYYYMMDDHHMMSS).c_str())); // DBG_PRINT(("curDateTime = %s", curDateTime.FormatString(YYYYMMDDHHMMSS).c_str())); // if(curDateTime >= upDateTime) // { // strErr = "离线开具限定时长超限!"; // return JSK_FAILURE; // } // } // // //离线开票限定正数累计金额 // if(nSum + g_globalArgLib->m_InvServSum > g_globalArgLib->m_invKind->m_maxSum) // { // strErr = "离线累计金额超限!"; // return JSK_FAILURE; // } // } break; case JSK_RETURN_INV: { sprintf(sqlbuf, "where FPDM='%s' and FPHM=%u", pInvHead->m_yfpdm.c_str(), pInvHead->m_yfphm); DBG_PRINT(("sqlbuf = %s", sqlbuf)); CRtInv tmpRtInv; tmpRtInv.m_filter.append(sqlbuf); tmpRtInv.Requery(); errcode = tmpRtInv.LoadOneRecord(); if(errcode == SQLITE_OK) { retcode = JSK_COMMON_ERR_NO; strErr = "已开过负票,不能再次开具!"; return retcode; } memset(sDecBuff, 0, sizeof(sDecBuff)); retcode = CJSKInfoFunc::GetJSPSendTime(sDecBuff, strErr); if( retcode != JSK_SUCCESS ) { return retcode; } TDateTime sDecDate((INT8 *)sDecBuff, DATETIME_POS); CInvHead tmpInvHead; tmpInvHead.m_filter.append(sqlbuf); tmpInvHead.Requery(); errcode = tmpInvHead.LoadOneRecord(); if(errcode != SQLITE_OK) { tmpInvHead.m_fpdm = pInvHead->m_yfpdm; tmpInvHead.m_fphm = pInvHead->m_yfphm; retcode = CJSKInfoFunc::GetInvDetailInfoNO(&tmpInvHead, strErr); if(retcode != JSK_SUCCESS) { return retcode; } if(tmpInvHead.Save() != SUCCESS) { DBG_PRINT(("InvHead Save Error!")); } } if(tmpInvHead.m_kplx != JSK_NORMAL_INV) { retcode = JSK_COMMON_ERR_NO; strErr = "原发票非正数发票,不能开具负票!"; return retcode; } if(tmpInvHead.m_kphjje != pInvHead->m_kphjje) { retcode = JSK_COMMON_ERR_NO; strErr = "负票金额与原发票不一致!"; return retcode; } // TDateTime invDate(tmpInvHead.m_kprq, tmpInvHead.m_kpsj); // DBG_PRINT(("invDate = %s", invDate.FormatString(YYYYMMDDHHMMSS).c_str())); // DBG_PRINT(("sDecDate = %s", sDecDate.FormatString(YYYYMMDDHHMMSS).c_str())); // if(invDate >= sDecDate) // { // retcode = JSK_COMMON_ERR_NO; // strErr = "原发票未抄报,不能开具负票!"; // return retcode; // } } break; case JSK_WASTE_INV: break; case JSK_WASTE_NOR: case JSK_WASTE_RET: { memset(sDecBuff, 0, sizeof(sDecBuff)); retcode = CJSKInfoFunc::GetJSPSendTime(sDecBuff, strErr); if( retcode != JSK_SUCCESS ) { return retcode; } TDateTime sDecDate((INT8 *)sDecBuff, DATETIME_POS); memset(sDecBuff, 0, sizeof(sDecBuff)); sprintf((INT8 *)sDecBuff, "%08u%06u", pInvHead->m_kprq, pInvHead->m_kpsj); TDateTime invDate((INT8 *)sDecBuff, DATETIME_POS); if(invDate < sDecDate) { retcode = JSK_COMMON_ERR_NO; strErr = "原发票已抄报,不能作废"; return retcode; } } break; default: break; } return JSK_SUCCESS; }