UINT8 IfInvHeadRoll() { CInvHead curInvHead; UINT8 ret = SUCCESS; UINT32 nInvDelDate = 0; // ret = CheckIfFull(g_globalArg->m_invCount, g_globalArg->m_invSumCount); // if (ret==SUCCESS) // { // DBG_RETURN(DB_FULL); // } TDateTime lastDate(g_globalArg->m_startDecDate, 000001); lastDate--; UINT32 nRefDate = lastDate.FormatInt(YYYYMMDD);//上次申报的截止日期 //判断是否需要滚动,并计算需滚动的记录数量 ret = curInvHead.CheckRoll(g_globalArg->m_invCount, nRefDate,nInvDelDate); if (ret!=SUCCESS) { CaMsgBox::ShowMsg("发票张数滚动判断失败!"); DBG_RETURN(FAILURE); } //滚动 if (nInvDelDate>0) { DBG_PRINT(("nInvDelDate = %u", nInvDelDate)); CaMsgBox::ShowMsg("发票张数要滚动!"); } DBG_RETURN(SUCCESS); }
//------------------------------------------------------------------ //存根打印 //------------------------------------------------------------------ UINT8 INVM_GetInvNum(string nCode, UINT32 nStartNo, UINT32 nEndNo, UINT32 &nNum) { DBG_ENTER("GetInvNum(UINT32 &nNum)"); nNum = 0; INT32 errorcode; INT32 nTmpNum = 0; CInvHead curInvHead; CInvHead *pInvHead = &curInvHead; DBG_ASSERT_EXIT((pInvHead != NULL), (" pInvHead == NULL!")); //查总记录数,已分发未导入,赋值pageNum INT8 value[256]; memset((void*)value, 0, sizeof(value)); pInvHead->m_filter = "where FPDM = "; sprintf(value,"'%s' and FPHM >= %u and FPHM <= %u",nCode.c_str(),nStartNo,nEndNo); pInvHead->m_filter.append(value); DBG_PRINT((" pInvHead->m_filter = %s", pInvHead->m_filter.c_str())); nTmpNum = pInvHead->GetRecordNum(); pInvHead = NULL; if (nTmpNum<0) { DBG_RETURN(FAILURE); } nNum = nTmpNum; DBG_RETURN(SUCCESS); }
//按发票号码查询发票明细 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::FPBL_Proc(string nsrsbh, string sksbbh, UINT32 SDate, UINT32 EDate, string &strErr) { DBG_PRINT(("FPBL_Proc Begin()")); CInvHead invHead; INT8 sqlbuf[128]; INT8 tmpBuf[128]; INT32 errcode = 0; XMLConstruct pXmlBuild; UINT32 nCount = 1; string filename(""); memset(tmpBuf, 0, sizeof(tmpBuf)); UINT8 ret = UsbDiskMount(tmpBuf); if (SUCCESS != ret) { DBG_PRINT(("挂载U盘失败")); strErr = "挂载U盘失败"; UsbDiskUnMount(); return JSK_FAILURE; } UINT32 uDate = SDate/100; DBG_PRINT(("uDate= %u",uDate)); sprintf(tmpBuf, "/mnt/%s%s%s_%s_%u_%s%s.DAT", XML_FILE_NAME_CGLPLBL,XML_FILE_NAME_KFSBM,nsrsbh.c_str(),sksbbh.c_str(),uDate,XML_FILE_NAME_ENCODE,"0001"); filename = tmpBuf; DBG_PRINT(("filename = %s", filename.c_str())); memset(sqlbuf, 0, sizeof(sqlbuf)); sprintf(sqlbuf, "where KPRQ>=%u and KPRQ<=%u", SDate, EDate); DBG_PRINT(("sqlbuf = %s", sqlbuf)); invHead.m_filter.append(sqlbuf); INT32 m_InvNum = invHead.GetRecordNum(); DBG_PRINT(("m_InvNum = %ld", m_InvNum)); if(m_InvNum > 0 ) { pXmlBuild.XMLConstructBegin("1.0", "gbk", "business"); pXmlBuild.m_RootElement->SetAttribute("id", "JSZZP"); pXmlBuild.m_RootElement->SetAttribute("comment", "卷式增普票"); pXmlBuild.m_RootElement->SetAttribute("version", "1.0"); } else { strErr = "该时间段没有开票信息!"; return JSK_FAILURE; } UINT32 date_StartNo = 0; //当天的发票起始号码 TDateTime tmpDateTime(SDate, 0); UINT32 TempDate = tmpDateTime.FormatInt(YYYYMMDD); DBG_PRINT(("TempDate = %u", TempDate)); while(TempDate <= EDate) { DBG_PRINT(("补录日期: %u", TempDate)); date_StartNo = 0; memset(sqlbuf, 0, sizeof(sqlbuf)); sprintf(sqlbuf, "WHERE KPRQ=%u order by NO limit 1", TempDate); DBG_PRINT(("sqlbuf = %s", sqlbuf)); invHead.m_filter.append(sqlbuf); errcode = invHead.Load(); DBG_PRINT(("errcode = %u", errcode)); while (errcode == SQLITE_OK) //查到记录 { DBG_PRINT(("查询invhead表有内容!")); pXmlBuild.AddNode(pXmlBuild.m_RootElement, "body"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%u", nCount); pXmlBuild.AddAttr("no", tmpBuf); pXmlBuild.m_parentElement[1] = pXmlBuild.m_NewElement; pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "fpdm"); pXmlBuild.AddText(invHead.m_fpdm); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "fphm"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%08u", invHead.m_fphm); pXmlBuild.AddText(tmpBuf); TDateTime tmpdate(invHead.m_kprq, invHead.m_kpsj); string tmpKprq = tmpdate.FormatString(YYYYMMDD); DBG_PRINT(("tmpKprq= %s",tmpKprq.c_str())); string tmpKpsj = tmpdate.FormatString(HHMMSS); DBG_PRINT(("tmpKpsj= %s",tmpKpsj.c_str())); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "kprq"); //memset(tmpBuf, 0, sizeof(tmpBuf)); //sprintf(tmpBuf, "%08u", invHead.m_kprq); pXmlBuild.AddText(tmpKprq); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "kpsj"); // memset(tmpBuf, 0, sizeof(tmpBuf)); // sprintf(tmpBuf, "%u", invHead.m_kpsj); pXmlBuild.AddText(tmpKpsj); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "sbbh"); pXmlBuild.AddText(sksbbh); if(invHead.m_kplx == JSK_RETURN_INV) { pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "hjje"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "-%.2lf", ((double)(invHead.m_kpje)*1.0)/SUM_EXTENSION); pXmlBuild.AddText(tmpBuf); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "se"); memset(tmpBuf, 0, sizeof(tmpBuf)); if(invHead.m_kpse == 0) { sprintf(tmpBuf, "%.2lf", ((double)invHead.m_kpse *1.0)/SUM_EXTENSION); } else { sprintf(tmpBuf, "-%.2lf", ((double)invHead.m_kpse *1.0)/SUM_EXTENSION); } pXmlBuild.AddText(tmpBuf); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "jshj"); memset(tmpBuf, 0, sizeof(tmpBuf)); invHead.m_kphjje = invHead.m_kpje + invHead.m_kpse; sprintf(tmpBuf, "-%.2lf", ((double)invHead.m_kphjje *1.0)/SUM_EXTENSION); pXmlBuild.AddText(tmpBuf); } else { pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "hjje"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%.2lf", ((double)(invHead.m_kpje)*1.0)/SUM_EXTENSION); pXmlBuild.AddText(tmpBuf); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "se"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%.2lf", ((double)invHead.m_kpse *1.0)/SUM_EXTENSION); pXmlBuild.AddText(tmpBuf); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "jshj"); memset(tmpBuf, 0, sizeof(tmpBuf)); invHead.m_kphjje = invHead.m_kpje + invHead.m_kpse; sprintf(tmpBuf, "%.2lf", ((double)invHead.m_kphjje *1.0)/SUM_EXTENSION); pXmlBuild.AddText(tmpBuf); } pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "jym"); pXmlBuild.AddText(invHead.m_fwm); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "xfmc"); pXmlBuild.AddText(g_globalArgLib->m_corpInfo->m_Nsrmc); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "xfsh"); pXmlBuild.AddText(nsrsbh); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "gfmc"); pXmlBuild.AddText(invHead.m_fkdw); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "gfsh"); pXmlBuild.AddText(invHead.m_payerCode); string fpztbz(""); switch(invHead.m_kplx) { case JSK_NORMAL_INV: fpztbz = "0"; //正票 break; case JSK_RETURN_INV: fpztbz = "1"; //退票 break; case JSK_WASTE_INV: fpztbz = "2"; //空白废 break; case JSK_WASTE_NOR: fpztbz = "3"; //正废 break; case JSK_WASTE_RET: fpztbz = "4"; //负废 break; } //发票状态标志(0 正常票1 退票2新发票的作废发票3正常发票的作废发票4已开退票的作废发票) pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "fpbz"); pXmlBuild.AddText(fpztbz); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "skr"); pXmlBuild.AddText(invHead.m_sky); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "bz"); UINT8 baseBuf[256]; memset(baseBuf, 0, sizeof(baseBuf)); sprintf((INT8 *)baseBuf, "%s", invHead.m_backup1.c_str()); Base64_Encode_2(baseBuf, invHead.m_backup1.length()); string tmpStr = (INT8 *)baseBuf; pXmlBuild.AddText(tmpStr); if(invHead.m_kplx == JSK_RETURN_INV) { pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "yfpdm"); pXmlBuild.AddText(invHead.m_yfpdm); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "yfphm"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%u", invHead.m_yfphm); pXmlBuild.AddText(tmpBuf); } else { pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "yfpdm"); pXmlBuild.AddText(""); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "yfphm"); pXmlBuild.AddText(""); } if( (invHead.m_kplx == JSK_WASTE_NOR) || (invHead.m_kplx == JSK_WASTE_RET) || (invHead.m_kplx == JSK_WASTE_INV) ) { TDateTime zfDate(invHead.m_zfsj.c_str(), DATETIME_POS); string strZfrq = zfDate.FormatString(YYYYMMDD); DBG_PRINT(("strZfrq= %s",strZfrq.c_str())); string strZfsj=zfDate.FormatString(HHMMSS); DBG_PRINT(("strZfsj= %s",strZfsj.c_str())); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "zfrq"); memset(tmpBuf, 0, sizeof(tmpBuf)); //sprintf(tmpBuf, "%u", zfDate.FormatInt(YYYYMMDD)); pXmlBuild.AddText(strZfrq); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "zfsj"); memset(tmpBuf, 0, sizeof(tmpBuf)); //sprintf(tmpBuf, "%u", zfDate.FormatInt(HHMMSS)); pXmlBuild.AddText(strZfsj); } else { pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "zfrq"); pXmlBuild.AddText(""); pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "zfsj"); pXmlBuild.AddText(""); } pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "qmz"); pXmlBuild.AddText(invHead.m_casign); CInvDet *pInvDet = invHead.pHead; for(int j=1; j<=invHead.m_sphsl; j++, pInvDet=pInvDet->pNext) { pXmlBuild.AddNode(pXmlBuild.m_parentElement[1], "zb"); pXmlBuild.m_parentElement[2] = pXmlBuild.m_NewElement; pXmlBuild.AddNode(pXmlBuild.m_parentElement[2], "xh"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%u", pInvDet->m_sphxh); pXmlBuild.AddText(tmpBuf); pXmlBuild.AddNode(pXmlBuild.m_parentElement[2], "xm"); pXmlBuild.AddText(pInvDet->m_spmc); if(invHead.m_kplx == JSK_RETURN_INV) { pXmlBuild.AddNode(pXmlBuild.m_parentElement[2], "sl"); memset(tmpBuf, 0, sizeof(tmpBuf)); if(pInvDet->m_spsl < 0.001) { sprintf(tmpBuf, "0.00000000"); } else { sprintf(tmpBuf, "-%.3lf00000", pInvDet->m_spsl); } pXmlBuild.AddText(tmpBuf); } else { pXmlBuild.AddNode(pXmlBuild.m_parentElement[2], "sl"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%.3lf00000", pInvDet->m_spsl); pXmlBuild.AddText(tmpBuf); } pXmlBuild.AddNode(pXmlBuild.m_parentElement[2], "hsdj"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%.3lf00000", pInvDet->m_spdj); pXmlBuild.AddText(tmpBuf); if(invHead.m_kplx == JSK_RETURN_INV) { pXmlBuild.AddNode(pXmlBuild.m_parentElement[2], "hsje"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "-%.2lf", ((double)pInvDet->m_spje*1.0)/SUM_EXTENSION); pXmlBuild.AddText(tmpBuf); } else { pXmlBuild.AddNode(pXmlBuild.m_parentElement[2], "hsje"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%.2lf", ((double)pInvDet->m_spje*1.0)/SUM_EXTENSION); pXmlBuild.AddText(tmpBuf); } pXmlBuild.AddNode(pXmlBuild.m_parentElement[2], "dj"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%.3lf00000", pInvDet->m_dj); pXmlBuild.AddText(tmpBuf); pXmlBuild.AddNode(pXmlBuild.m_parentElement[2], "je"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%.2lf", ((double)pInvDet->m_je*1.0)/SUM_EXTENSION); pXmlBuild.AddText(tmpBuf); pXmlBuild.AddNode(pXmlBuild.m_parentElement[2], "zsl"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%.2lf", (double)pInvDet->m_sl); pXmlBuild.AddText(tmpBuf); pXmlBuild.AddNode(pXmlBuild.m_parentElement[2], "se"); memset(tmpBuf, 0, sizeof(tmpBuf)); sprintf(tmpBuf, "%.2lf", ((double)pInvDet->m_spse*1.0)/SUM_EXTENSION); pXmlBuild.AddText(tmpBuf); } nCount++; DBG_PRINT(("nCount = %u", nCount)); date_StartNo = invHead.m_no; sprintf(sqlbuf, "WHERE KPRQ=%u and NO>%u limit 1", TempDate, date_StartNo); invHead.m_filter.append(sqlbuf); errcode = invHead.Load(); } //-------------------------------------------------- //未找到票,查下一天 //-------------------------------------------------- if (errcode == SQLITE_DONE) { tmpDateTime ++; TempDate = tmpDateTime.FormatInt(YYYYMMDD); continue; } else { DBG_PRINT(("读数据库错误")); break; } } if( 1 != pXmlBuild.XMLConstructEnd(filename.c_str()) ) { strErr = "报存XML文件错误!"; return JSK_FAILURE; } UsbDiskUnMount(); return JSK_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; }
INT32 CJSKMakeInvoice::FPSC_Proc(UINT8 czlx, UINT32 &fpzx, string &strInvInfo, string &strErr) { INT8 sqlbuf[128]; CInvServ invServ; CInvHead invHead; INT32 retcode = JSK_SUCCESS; INT32 errcode = 0; string tmpErr(""); // CJSKDeclareProc::DelUploadInv(); memset(sqlbuf, 0, sizeof(sqlbuf)); sprintf(sqlbuf, "where UP_FLAG=0 or UP_FLAG=1 "); invServ.m_filter.append(sqlbuf); invServ.Requery(); errcode = invServ.LoadOneRecord(); DBG_PRINT(("errcode = %d", errcode)); if(errcode == SQLITE_OK) { if((invServ.m_code=="") || (invServ.m_InvNo==0)) errcode = SQLITE_DONE; } if(errcode != SQLITE_OK) { retcode = CJSKInfoFunc::GetFirstOffInvInfo(&invHead, tmpErr); if((invHead.m_fpdm=="") || (invHead.m_fphm==0)) retcode = JSK_FAILURE; if(retcode != JSK_SUCCESS) { g_globalArgLib->m_pthreadFlag = 0; g_globalArgLib->m_InvServNum = 0; retcode = JSK_COMMON_ERR_NO; strErr = "所有发票都已上传!"; return retcode; } memset(sqlbuf, 0, sizeof(sqlbuf)); sprintf(sqlbuf, "where FPDM='%s' and FPHM=%u ", invHead.m_fpdm.c_str(), invHead.m_fphm); DBG_PRINT(("sqlbuf = %s", sqlbuf)); invServ.m_filter.append(sqlbuf); invServ.Requery(); if(invServ.LoadOneRecord() == SQLITE_OK) { if(invServ.m_upFlag == INV_UPLOAD_FLAG2) { g_globalArgLib->m_pthreadFlag = 0; retcode = JSK_COMMON_ERR_NO; strErr = "发票上传错误,请核对!"; return retcode; } } invServ.m_code = invHead.m_fpdm; invServ.m_InvNo = invHead.m_fphm; invServ.m_fpsyh = invHead.m_fpsyh; } UINT32 invLen = 0; fpzx = 1; //发票张数 memset(sqlbuf, 0, sizeof(sqlbuf)); sprintf(sqlbuf, "where FPDM='%s' and FPHM=%u ", invServ.m_code.c_str(), invServ.m_InvNo); DBG_PRINT(("sqlbuf = %s", sqlbuf)); invHead.m_filter.append(sqlbuf); retcode = invHead.Load(); if(retcode != SQLITE_OK) { DBG_PRINT(("here query from JSK")); invHead.m_fpdm = invServ.m_code; invHead.m_fphm = invServ.m_InvNo; invHead.m_fpsyh = invServ.m_fpsyh; retcode = CJSKInfoFunc::GetInvDetailInfoNO(&invHead, g_invInfo, invLen, strErr); if(retcode != JSK_SUCCESS) { return retcode; } // if(invHead.Save() != SQLITE_OK) // { // retcode = JSK_COMMON_ERR_NO; // strErr = "发票信息保存数据库错误"; // return retcode; // } } else { DBG_PRINT(("here query from DB success")); //将invHead类转换成string类型输出 CJSKInfoFunc::MutexLock(); CJSKInfoFunc::InvDetail2Data(&invHead, g_invInfo, invLen); CJSKInfoFunc::MutexUnlock(); DBG_PRINT(("invLen = %u", invLen)); } DBG_PRINT(("invLen = %u", invLen)); AddInvDetail2Data(&invHead, g_invInfo, invLen); strInvInfo.append((INT8 *)g_invInfo); DBG_PRINT(("invLen = %u", invLen)); //更新上传标志 invServ.m_upFlag = INV_UPLOAD_FLAG1; DBG_PRINT(("sqlbuf = %s", sqlbuf)); invServ.Update(sqlbuf, &invServ.m_upFlag, NULL); return JSK_SUCCESS; }
INT32 CJSKMakeInvoice::FPZF_Proc(CInvHead *pInvhead, UINT8 zflx, string &strErr) { DBG_PRINT(("===== FPZF_Proc Begin() ======")); DBG_ASSERT_EXIT((pInvhead != NULL), (" pInvhead == NULL!")); INT32 retcode = JSK_SUCCESS; if(zflx == 0) //空白票作废 { pInvhead->m_kplx = JSK_WASTE_INV; pInvhead->m_xfmc = g_globalArgLib->m_corpInfo->m_Nsrmc; retcode = FPKJ_Proc(pInvhead, strErr, 1); return retcode; } ////////////////////////////////////////////////////////////////////////// if(zflx != 1) { strErr = "发票作废类型错误!"; return JSK_FAILURE; } CJSKInvManageProc::fplxdm2fplx(pInvhead->m_fplxdm, pInvhead->m_fplb); //已开票作废 //查询数据库中已开发票信息 INT8 sqlbuf[256]; UINT32 errorcode; CInvHead tmpInvHead; memset(sqlbuf, 0, sizeof(sqlbuf)); sprintf(sqlbuf, "where FPDM='%s' and FPHM=%u", pInvhead->m_fpdm.c_str(), pInvhead->m_fphm); DBG_PRINT(("sqlbuf = %s", sqlbuf)); pInvhead->m_filter.append(sqlbuf); if(pInvhead->Load() != SQLITE_OK) { DBG_PRINT(("here find by jsp")); //数据库查询不到,从盘中查询 retcode = CJSKInfoFunc::GetInvDetailInfoNO(pInvhead, strErr); if(retcode != JSK_SUCCESS) { return retcode; } pInvhead->Save(); } //已开发票作废控制 if(pInvhead->m_kplx == JSK_NORMAL_INV) { pInvhead->m_kplx = JSK_WASTE_NOR; } else if(pInvhead->m_kplx == JSK_RETURN_INV) { pInvhead->m_kplx = JSK_WASTE_RET; } else { retcode = JSK_COMMON_ERR_NO; strErr = "废票不能再次作废!"; return retcode; } //权限控制 retcode = MakeInvAuthority(pInvhead, strErr); if( retcode != JSK_SUCCESS ) { return retcode; } retcode = CJSKInfoFunc::WasteInvHandInfo(pInvhead, strErr); if( retcode != JSK_SUCCESS ) { return retcode; } //数据库事务开始 pInvhead->BeginTransaction(); //修改数据库对应信息 tmpInvHead.m_kplx = pInvhead->m_kplx; tmpInvHead.m_fpsyh = pInvhead->m_fpsyh; tmpInvHead.m_casign = pInvhead->m_casign; tmpInvHead.m_zfsj = pInvhead->m_zfsj; retcode = tmpInvHead.Update(sqlbuf, &tmpInvHead.m_kplx, &tmpInvHead.m_fpsyh, &tmpInvHead.m_zfsj, &tmpInvHead.m_casign, NULL); DBG_PRINT(("更新DB的INV_HEAD:retcode = %d", retcode)); CInvDet invDet; invDet.m_kplx = pInvhead->m_kplx; retcode = invDet.Update(sqlbuf, &invDet.m_kplx, NULL); DBG_PRINT(("更新DB的INV_DET:retcode = %d", retcode)); if(pInvhead->m_kplx == JSK_WASTE_RET ) { DBG_PRINT(("更新RT_INV表")); CRtInv curRtInv; CRtInv *pRtInv = &curRtInv; memset(sqlbuf, 0, sizeof(sqlbuf)); sprintf(sqlbuf, "where FPDM='%s' and FPHM=%u ", pInvhead->m_yfpdm.c_str(), pInvhead->m_yfphm); DBG_PRINT(("sqlbuf = %s", sqlbuf)); pRtInv->m_filter.append(sqlbuf); pRtInv->Delete(); } //处理INV_SERV表,如果已上传发票,需要重新记录INV_SERV??? CInvServ invServ; errorcode = invServ.Save(pInvhead, g_globalArgLib->m_InvServNum, g_globalArgLib->m_InvServSum, strErr); DBG_PRINT(("存储到DB的INV_SERV, errorcode = %u", errorcode)); //数据库事务结束 pInvhead->EndTransaction(); return JSK_SUCCESS; }
void CMaintenanceMenu::OnButton9(int iEvent, unsigned char * pEventData, int iDataLen) { if (g_globalArg->m_initFlag == 0) { CaMsgBox::ShowMsg("机器未初始化"); return ; } CInvServ invServ; CInvHead invHead; CInvDet invDet; INT32 nErrCode; INT8 chValue[128]; invServ.Requery(); nErrCode = invServ.LoadOneRecord(); DBG_PRINT(("nErrCode= %u",nErrCode)); if( nErrCode != SQLITE_OK ) { CaMsgBox::ShowMsg("无缓存记录"); return; } memset(chValue, 0, sizeof(chValue)); sprintf(chValue,"代码:'%s' 号码:%u 确认删除?", invServ.m_code.c_str(), invServ.m_InvNo); CaMsgBox msgBox(chValue,CaMsgBox::MB_YESNO); msgBox.ShowBox(); if (msgBox.m_iStatus == OK_PRESSED) { memset((void*)chValue, 0, sizeof(chValue)); //sprintf(chValue, "where CODE = '%s' and INV_NO = %u", invServ.m_code.c_str(), invServ.m_InvNo); // 更改inv_serv中的两个字段 sprintf(chValue, "where FPDM = '%s' and FPHM = %u", invServ.m_code.c_str(), invServ.m_InvNo); invHead.m_filter = chValue; nErrCode = invHead.Delete(); if (SQLITE_OK != nErrCode) { CaMsgBox::ShowMsg("删除失败"); return; } invDet.m_filter = chValue; nErrCode = invDet.Delete(); if (SQLITE_OK != nErrCode) { CaMsgBox::ShowMsg("删除失败"); return; } sprintf(chValue, "where CODE = '%s' and INV_NO = %u", invServ.m_code.c_str(), invServ.m_InvNo); invServ.m_filter = chValue; nErrCode = invServ.Delete(); if (SQLITE_OK != nErrCode) { CaMsgBox::ShowMsg("删除失败"); return; } CaMsgBox::ShowMsg("删除成功"); if(0 != g_globalArg->m_InvServNum) { g_globalArg->m_InvServNum--; } DBG_PRINT(("m_InvServNum = %u", g_globalArg->m_InvServNum )); } }