//已开发票作废
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;
}
Exemplo n.º 2
0
UINT8 GetInvNo(SaleData &tmpSaleData,UINT32 &invNo)
{
//	UINT8 status;
	UINT8 errorcode;
	CInvVol invVol;
	UINT8 nIfInvSum;

	CaProgressBar proBar("");

	if (g_globalArg->m_curInvVol->m_remain == 0)
	{
		DBG_PRINT(("单卷汇总"));
		proBar.SetText("单卷汇总");
		proBar.ReFresh();

		POWOFF_DISABLE(); //屏蔽掉电中断
// 		if(!tmpSaleData.InvSum(nIfInvSum))
// 		{
// 			DBG_PRINT(("Get volume Sum error !"));
// 			CaMsgBox::ShowMsg("单卷汇总失败!");
// 			POWOFF_ENABLE(); //开掉电中断
// 			return FAILURE;
// 		}
		POWOFF_ENABLE(); //开掉电中断
		//判断卷汇总是否要滚动,若滚动,显示消息框
// 		if(IfInvSumRoll()!=SUCCESS) 
// 		{
// 			return FAILURE; 			
// 		}

		proBar.SetText("导入新发票卷");
		proBar.ReFresh();

		//查询可导入的发票卷		
		invVol.m_filter = "where USED_FLAG = 1 and OVER_FLAG = 1 order by NO limit 1";
		invVol.Requery();  //查询
		errorcode = invVol.LoadOneRecord();
		if (errorcode != SQLITE_OK)
		{
			CaMsgBox::ShowMsg("查询可导入发票卷失败!");
			return FAILURE;
		}

		//进行真正的导入操作
		
// 		InvoiceInfoPer_u invoiceInfoPerData; /**< 发票分发临时文件结构体*/			  
// 		memset((void *)&invoiceInfoPerData, 0, sizeof(InvoiceInfoPer_u));
// 	
// 		//查询发票代码
// 		CInvcodeLink invcodeLink;
// 		string strCode; 
// 		errorcode = invcodeLink.CodeNo2Code(strCode, invVol.m_codeNo);
// 		DBG_PRINT(("********errocode = %u\n", errorcode));
// 		if (errorcode!=SUCCESS)
// 		{
// 			CaMsgBox::ShowMsg("查询发票代码失败!");
// 			return FAILURE;
// 		}
// 		char2bin((UINT8 *)(invoiceInfoPerData.invoice_code), (INT8 *)(strCode.c_str()), INV_TYPE_CODE_LEN);

// 
// 		invoiceInfoPerData.InvStart_no = invVol.m_InvStartNo;
// 		invoiceInfoPerData.InvEnd_no = invVol.m_InvEndNo;


		//导入发票卷
		string strErr;
// 		CInvoiceImport invImport;
// 		POWOFF_DISABLE(); //屏蔽掉电中断
// //		if ((invImport.ImportInvVolHandle(&invoiceInfoPerData, strErr)) != SUCCESS)
// 		if ((invImport.ImportInvoice((UINT8 *)(invVol.m_code.c_str()), invVol.m_isno, strErr, 1)) != SUCCESS)
// 		{
// 			CaMsgBox::ShowMsg("发票导入失败!");
// 			return FAILURE;
// 		}

// 		//更新当前卷信息(将发票领用卷信息更新)
// 		char sqlbuf[512];
// 		string sqlstr;	
// 		memset((void*)sqlbuf,0,sizeof(sqlbuf));
// 
// 		sprintf(sqlbuf,"update INV_VOL set USED_FLAG = %u where IS_NO = %u and CODE = %u",0, invVol.m_InvStartNo, invVol.m_codeNo);
// 		sqlstr=sqlbuf;
// 		invVol.SetSQL(sqlstr);
// 		if (invVol.ExecuteSQL() != SQLITE_OK)
// 		{
// 			CaMsgBox::ShowMsg("更新当前卷信息错误!");
// 			return FAILURE;
// 		}
		POWOFF_ENABLE();//开掉电中断

		//当前卷信息赋值
// 		INT8 value[256];
// 		memset((void *)value, 0, sizeof(value));
// 		sprintf(value," where USED_FLAG = %u and  OVER_FLAG = %u", 0 , 1);
// 		g_globalArg->m_curInvVol->m_filter = value;
// 		g_globalArg->m_curInvVol->Requery(); 
// 		errorcode = g_globalArg->m_curInvVol->LoadOneRecord(); 
// 		switch(errorcode)
// 		{
// 		case SQLITE_OK:
// 			break;
// 		default:
// 			CaMsgBox::ShowMsg("读当前卷信息错误!");
// 			return FAILURE;
// 		}

	}
	//计算当前发票号
	invNo = g_globalArg->m_curInvVol->m_ieno + 1 - 
		g_globalArg->m_curInvVol->m_remain;

	return SUCCESS;
}