コード例 #1
0
UINT8 IfRtInvRoll()
{
	CRtInv curRtInv;
	UINT8 ret = SUCCESS;
// 	UINT32 nSumDelDate = 0;
	UINT32 nRtDetNo = 0;

//	TDateTime lastDate(g_globalArg->m_startDecDate, 000001);
//	lastDate--;
//	UINT32 nRefDate = lastDate.FormatInt(YYYYMMDD);//上次申报的截止日期

	ret = curRtInv.CheckRoll(g_globalArg->m_rtInvCount, nRtDetNo);
	if (ret!=SUCCESS)
	{
		CaMsgBox::ShowMsg("红票信息滚动判断失败!");
		DBG_RETURN(FAILURE);
	}

	if (nRtDetNo>0)
	{
		DBG_PRINT(("nRtDetNo = %u", nRtDetNo));
		CaMsgBox::ShowMsg("红票信息要滚动!");		
	}
	
	DBG_RETURN(SUCCESS);

}
コード例 #2
0
//---------------------------------------------------------------------
//检验发票是否可退
//---------------------------------------------------------------------
UINT8 INVM_CheckIsNoRet(CInvHead *pInvHead)
{
    DBG_ENTER("MKINV_CheckIsNoRet");
    DBG_PRINT(("进入MKINV_CheckIsNoRet函数"));

    DBG_PRINT(("pInvHead->m_kplx= %u",pInvHead->m_kplx));

    //该票是否在本月内//debug

    DBG_PRINT(("pInvHead->m_kprq= %u",pInvHead->m_kprq));

    INT32 nReturn = CmpCurMonth(pInvHead->m_kprq, pInvHead->m_kpsj);
    DBG_PRINT(("nReturn= %d",nReturn));
    if (0 == nReturn)
    {
        DBG_PRINT(("本月发票,不得冲红%d", nReturn));
        // DBG_RETURN(BX_RET_MONTH_ERR);
    }

    INT8 value[256];
    memset((void*)value, 0, sizeof(value));
    INT32 errorcode;
    sprintf(value,"where FPDM = '%s' and FPHM = %u",pInvHead->m_fpdm.c_str(), pInvHead->m_fphm);

    //若为已退发票,返回
    CRtInv rtInv;
    rtInv.m_filter = value;
    //查询
    rtInv.Requery();
    DBG_PRINT(("pInvHead->m_bzkz = %s", pInvHead->m_bzkz.c_str()));
    if ((rtInv.LoadOneRecord() == SQLITE_OK)||("1" == pInvHead->m_bzkz))
    {
        DBG_PRINT((" This invoice already has returned invoice!"));
        DBG_RETURN(HAVE_RT_INV);
    }

    //若为红票,返回
    if ((pInvHead->m_kplx == RETURN_INV)||(pInvHead->m_kplx == RET_MANUAL_INV)||
            (pInvHead->m_kplx == RET_SPECIAL_INV))
    {
        DBG_RETURN(RT_INV);
    }
    //若为废票,返回
    if( (pInvHead->m_kplx == WASTE_INV) || (pInvHead->m_kplx == WASTE_NOR)
            || (pInvHead->m_kplx == WASTE_RET))
    {
        DBG_RETURN(WT_INV);
    }

    //不能开红票,返回
    DBG_PRINT(("pInvHead->m_hczt = %s", pInvHead->m_hczt.c_str()));
    if ( "1" == pInvHead->m_hczt)
    {
        g_globalArg->m_strMsg =pInvHead->m_backup2;
        DBG_RETURN(INV_LIB_ERR);
    }

    DBG_PRINT(("退出CheckInvReturn函数"));
    DBG_RETURN(SUCCESS);
}
コード例 #3
0
UINT8 CGInvLabelWin::CheckCancelValid(void)
{
	CInvHead *pInvHead = m_pLInvHead; 
	char val[256];
	INT32 errorcode;
	memset((void*)val, 0, sizeof(val));
	
	//若为废票,返回
    if( (WASTE_INV == pInvHead->m_kplx) || (WASTE_NOR == pInvHead->m_kplx)
		|| (WASTE_RET == pInvHead->m_kplx) )
    {
		CaMsgBox::ShowMsg("不能作废废票"); 
		return FAILURE;
    }
	
	//若为已退发票,返回
	memset((void*)val, 0, sizeof(val));
	sprintf(val,"where FPDM = '%s' and FPHM = %u",pInvHead->m_fpdm.c_str(), pInvHead->m_fphm);	
	DBG_PRINT(("val = %s", val));
	CRtInv rtInv;
	rtInv.m_filter = val;
	rtInv.Requery();
	
	DBG_PRINT(("m_pInvHead->m_bzkz = %s", pInvHead->m_bzkz.c_str()));
	if (rtInv.LoadOneRecord() == SQLITE_OK)//一张正票已被冲红则不能作废,但相应的红票可以作废
	{
		CaMsgBox::ShowMsg("该票已开红票"); 
		return FAILURE;
	}
	
	return SUCCESS;
}
コード例 #4
0
//按发票号码查询发票明细
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;
}
コード例 #5
0
//已开发票作废
UINT8 INVM_WstInv(CInvHead* pInvHead, string &strErr)
{
    DBG_ASSERT_EXIT((pInvHead != NULL), (" pInvHead == NULL!"));
    INT32 ret = SUCCESS;
    INT8 val[256];
    string strsql("");
    UINT8 waste_type = 0;
    UINT8 tmpType = pInvHead->m_kplx;

    switch(pInvHead->m_kplx)
    {
    case NORMAL_INV:
        waste_type = WASTE_NOR;//正票可以作废,成为正废票
        break;
    case RETURN_INV:
    case RET_MANUAL_INV:
    case RET_SPECIAL_INV:
        waste_type = WASTE_RET;//红票(负票)也可以作废,成为负废票
        break;
    default:
        ;
    }

    UINT8 zflx= 1; //已开发票作废
    ret= g_pAPIBase->MakeWasteInv_API(*g_YwXmlArg, pInvHead, zflx, strErr);

    if (SUCCESS != ret)
    {
        DBG_PRINT(("strErr = %s", strErr.c_str()));
        return FAILURE;
    }


    POWOFF_DISABLE(); //屏蔽掉电中断
    //更新INV_HEAD发票类型

    memset((void*)val, 0x00, sizeof(val));
    sprintf(val, "where FPDM='%s' AND FPHM=%u", pInvHead->m_fpdm.c_str(), pInvHead->m_fphm);
    strsql = val;

    pInvHead->m_kplx = waste_type;
    pInvHead->m_kprq = pInvHead->m_zfrq;
    pInvHead->m_kpsj = pInvHead->m_zfsj;

    ret = pInvHead->Update(strsql, &(pInvHead->m_kplx), &(pInvHead->m_kprq), &(pInvHead->m_kpsj), NULL);

    if ( ret!= SQLITE_OK)
    {
        strErr = "更新发票信息表错误";
        return FAILURE;
    }

    DBG_PRINT(("更新INV_HEAD发票类型strsql = %s", strsql.c_str()));

    //更新INV_DET发票类型
    CInvDet pInvDet;

    pInvDet.m_kplx = waste_type;
    pInvDet.m_kprq = pInvHead->m_zfrq;
    pInvDet.m_kpsj = pInvHead->m_zfsj;

    ret = pInvDet.Update(strsql, &(pInvDet.m_kplx), &(pInvDet.m_kprq), &(pInvDet.m_kpsj), NULL);

    if ( ret!= SQLITE_OK)
    {
        strErr = "更新发票信息表错误";
        return FAILURE;
    }

    DBG_PRINT(("更新INV_DET发票类型strsql = %s", strsql.c_str()));

    //删除RT_INV表中,红票对应的原发票代码和号码
    DBG_PRINT(("pInvHead->m_kplx = %d", pInvHead->m_kplx));//开票类型并不从金税盘中返回
    if(tmpType == RETURN_INV)
    {
        CRtInv rtInv;
        memset(val, 0, sizeof(val));
        sprintf(val, "where FPDM = '%s' and FPHM = %u ", pInvHead->m_yfpdm.c_str(), pInvHead->m_yfphm);
        DBG_PRINT(("val = %s", val));
        rtInv.m_filter = val;
        if( rtInv.Delete() != SQLITE_OK )
        {
            DBG_PRINT(("Delete RT_INV info error"));
        }
        DBG_PRINT(("Delete RT_INV info succeed"));
    }

    POWOFF_ENABLE(); //开掉电中断

    DBG_PRINT(("WstInv() SUCCESS"));

    return SUCCESS;
}
コード例 #6
0
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;
}
コード例 #7
0
INT32 CJSKMakeInvoice::FPKJ_Proc(CInvHead *pInvhead, string &strErr, UINT8 wasteflag)
{
	DBG_PRINT(("===== FPKJ_Proc Begin() ======"));
	DBG_ASSERT_EXIT((pInvhead != NULL), (" pInvhead == NULL!"));
	INT32 retcode = JSK_SUCCESS;
	UINT8 tmpBuf[16];
	INT8 sqlbuf[128];

	//获取可滚动表的记录数
    UINT8 nIfRolled=0;
	retcode = g_globalArgLib->RollData(nIfRolled);
	if(retcode!= SUCCESS)
	{
		strErr = "中间件数据库滚动失败!";
		DBG_PRINT((" Roll() error !"));
		return JSK_FAILURE;	
	}

	if(wasteflag == 0)
	{
		DBG_PRINT(("kplx = %u", pInvhead->m_kplx));
		if(pInvhead->m_kplx == 0)
		{
			DBG_PRINT(("m_maxSign = %lld", g_globalArgLib->m_invKind->m_maxSign));
			DBG_PRINT(("pInvhead->m_kphjje = %lld", pInvhead->m_kphjje));
			if(pInvhead->m_kphjje > g_globalArgLib->m_invKind->m_maxSign)
			{
				strErr = "开票单张金额超限!";
				return JSK_FAILURE;
			}
			
			if(pInvhead->m_kphjje <= 0)
			{
				strErr = "正数发票金额不能为零";
				return JSK_FAILURE;
			}
			
			pInvhead->m_kplx = JSK_NORMAL_INV;
		}
		else if(pInvhead->m_kplx == 1)
		{
			pInvhead->m_kplx = JSK_RETURN_INV;
		}
		else
		{
			strErr = "发票类型错误!";
			return JSK_FAILURE;
		}
	}
	else
	{
		if(pInvhead->m_kplx != JSK_WASTE_INV)
		{
			strErr = "发票类型错误!";
			return JSK_FAILURE;
		}
	}
	
	//当前开票时间
	UINT8 curTime[MAX_DATETIME_LEN+1];
	retcode = CJSKInfoFunc::GetJSPCurDate(curTime, strErr);
	if( retcode != JSK_SUCCESS )
	{
		return retcode;
	}
	TDateTime tmpDateTime((INT8 *)curTime, DATETIME_POS);
	pInvhead->m_kprq = tmpDateTime.FormatInt(YYYYMMDD);
	pInvhead->m_kpsj = tmpDateTime.FormatInt(HHMMSS);
	pInvhead->m_CurTime = tmpDateTime.FormatString(YYYYMMDDHHMMSS, "%u%02u%02u%02u%02u%02u");
	if(pInvhead->m_kplx == JSK_WASTE_INV)
	{
		pInvhead->m_zfsj = (INT8 *)curTime;
	}

	//权限控制
	retcode = MakeInvAuthority(pInvhead, strErr);
	if( retcode != JSK_SUCCESS )
	{
		//retcode = JSK_COMMON_ERR_NO;
		return retcode;
	}

	CJSKInvManageProc::fplxdm2fplx(pInvhead->m_fplxdm, pInvhead->m_fplb);

	pInvhead->m_xfyhzh = g_globalArgLib->m_corpInfo->m_Khzh;		//销方银行账号
	DBG_PRINT(("pInvhead->fplb = %u", pInvhead->m_fplb));

	//取发票代码、号码
	CInvVol invVol;
	retcode = CJSKInfoFunc::GetCurInvInfo(&invVol, strErr);
	if( retcode != JSK_SUCCESS )
	{
		return retcode;
	}
	pInvhead->m_fpdm = invVol.m_code;
	pInvhead->m_fphm = invVol.m_curInvNo;


	//调用金税盘函数获取税控码、CA签名、索引号
	retcode = CJSKInfoFunc::MakeInvHandInfo(pInvhead, strErr);
	DBG_PRINT(("retcode = %d", retcode));
	if( retcode != JSK_SUCCESS )
	{
		return retcode;
	}

	//数据库事务开始
	pInvhead->BeginTransaction();

	//存数据库
	UINT32  errorcode;
	errorcode = pInvhead->Save();
	if (errorcode != SUCCESS)
	{
// 		retcode = JSK_COMMON_ERR_NO;
// 		DBG_PRINT(("pInvhead->Save() wrong"));
// 		return retcode;
	}
	DBG_PRINT(("pInvhead->Save() SUCCESS"));

	
	//将该发票记录存储到DB的INV_SERV
	CInvServ invServ;
	DBG_PRINT(("m_InvServNum = %lu, m_InvServSum = %lld", g_globalArgLib->m_InvServNum, g_globalArgLib->m_InvServSum));
	errorcode = invServ.Save(pInvhead, g_globalArgLib->m_InvServNum, g_globalArgLib->m_InvServSum, strErr);	
	DBG_PRINT(("存储到DB的INV_SERV, errorcode = %u", errorcode));

	//更新RT_INV表
	if(pInvhead->m_kplx == JSK_RETURN_INV )
	{
		DBG_PRINT(("更新RT_INV表"));
		CRtInv curRtInv;
		CRtInv *pRtInv = &curRtInv;

		pRtInv-> m_fpdm = pInvhead->m_yfpdm;					
		pRtInv-> m_fphm = pInvhead->m_yfphm;
		errorcode = pRtInv->AddNew();				//写已退发票信息表
		if( errorcode != SQLITE_OK )
		{
			DBG_PRINT((" pRtInv->AddNew() error!"));
			//retcode = JSK_COMMON_ERR_NO;
			//return retcode;
		}
	}
	//数据库事务结束
	pInvhead->EndTransaction();

	return JSK_SUCCESS;
}
コード例 #8
0
INT32 CJSKMakeInvoice::FPCX_Proc(UINT8 cxfs, string cxtj, UINT32 &invNum, CInvHead *pInvhead, string &strErr)
{
	DBG_ASSERT_EXIT((pInvhead != NULL), (" pInvhead == NULL!"));
	INT32 retcode = JSK_SUCCESS;

	INT8 sqlbuf[128];
	string fpdm("");
	UINT32 fphm = 0;
	string tmpStr;
	INT32 errcode = 0;

	invNum = 1;
	//cxfs为0时:12发票代码+8位起始号码+8位终止号码; cxfs
	if(cxfs == 0)
	{
		fpdm = cxtj.substr(0, 12);
		tmpStr = cxtj.substr(12, 8);
		fphm = atoi(tmpStr.c_str());

		memset(sqlbuf, 0, sizeof(sqlbuf));
		sprintf(sqlbuf, "where FPDM='%s' and FPHM=%u", fpdm.c_str(), fphm);
		DBG_PRINT(("sqlbuf = %s", sqlbuf));
		pInvhead->m_filter.append(sqlbuf);
		errcode = pInvhead->Load();
		if(errcode != SQLITE_OK)
		{
			DBG_PRINT(("here search JSK========="));
			pInvhead->m_fpdm = fpdm;
			pInvhead->m_fphm = fphm;
			retcode = CJSKInfoFunc::GetInvDetailInfoNO(pInvhead, strErr);
			if(retcode != JSK_SUCCESS)
			{
				return retcode;
			}
			
			if(pInvhead->Save() != SUCCESS)
			{
				DBG_PRINT(("InvHead Save Error!"));
				//retcode = JSK_COMMON_ERR_NO;
				//strErr = "发票信息保存数据库错误";
				//return retcode;
			}

			if(pInvhead->m_kplx == JSK_RETURN_INV)
			{
				DBG_PRINT(("更新RT_INV表"));
				CRtInv curRtInv;
				CRtInv *pRtInv = &curRtInv;
				
				pRtInv-> m_fpdm = pInvhead->m_yfpdm;					
				pRtInv-> m_fphm = pInvhead->m_yfphm;
				if( pRtInv->AddNew() != SQLITE_OK )
				{
					DBG_PRINT((" pRtInv->AddNew() error!"));
				}
			}
		}

		CInvServ invServ;
		DBG_PRINT(("sqlbuf = %s", sqlbuf));
		invServ.m_filter.append(sqlbuf);
		invServ.Requery();
		if(invServ.LoadOneRecord() != SQLITE_OK)
			pInvhead->m_scbz = 1;
		else
		{
			if(invServ.m_upFlag == INV_UPLOAD_FLAG2)
			{
				invServ.m_upFlag = INV_UPLOAD_FLAG0;
				DBG_PRINT(("sqlbuf = %s", sqlbuf));
				invServ.Update(sqlbuf, &invServ.m_upFlag, NULL);
			}
		}
	}
	//为1是:起始日期(YYYYMMDD)+终止日期(YYYYMMDD)
	else if(cxfs == 1)
	{
		retcode = JSK_COMMON_ERR_NO;
		strErr = "不支持时间段查询方式!";
		return retcode;
	}
	else
	{
		retcode = JSK_COMMON_ERR_NO;
		strErr = "非法查询方式!";
		return retcode;
	}
	
	return JSK_SUCCESS;
}
コード例 #9
0
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;
}