initialer Upload

This commit is contained in:
2024-06-17 16:49:41 +02:00
parent 5ccc4188a2
commit f427ef5537
9 changed files with 3391 additions and 0 deletions

View File

@@ -0,0 +1,309 @@
////////////////////////////////////////////////////////////////////////////////
// Hook for dbs | invoice
// => Hooks for insert and update of invoice documents
// File-Encoding: UTF-8 without BOM( Test: ü,ä,ö )
//------------------------------------------------------------------------------
// Created/Edited | Description
//------------------------------------------------------------------------------
// 08.2017 | dbs | invoice workflow 1.1.0
////////////////////////////////////////////////////////////////////////////////
//------------------------------------------------------------------------------
// InsertEntry10_dbsInvoice
/*------------------------------------------------------------------------------
// docType Invoice:
// - get creditor master data
// - check of duplicates
// - default value 'today' for capture date and delivery date
// docType Invoice Attachment:
// [ - copy attributes of vendor transaction folder ( is configured in d.3 administration! )]
//------------------------------------------------------------------------------
*/
proc InsertEntry10_dbsInvoice( pUser, pDocTypeShort )
{
call api_log( gLOGLEVEL, "Start of InsertEntry10_dbsInvoice( :pUser, :pDocTypeShort )" )
vars lReturnValue = 0
// when doctype short is equal invoice
if ( pDocTypeShort == gDTS_INVOICE )
{
// get meta data from ERP-System (will only called if modified in 11_defintions_dbs_invoice.jpl)
lReturnValue = getMetaDataFromERP()
if( lReturnValue != 0 )
{
return lReturnValue
}
// update / validate creditor master data
call updateCreditorData( "" )
// determine if check of duplicates is required
if ( gGMF_CHECK_DUPLICATES == "1" )
{
vars lYear = dok_dat_feld[ gDDF_INVOICE_DATE ](7,4) // Format in d.3 always is '%0d.%0m.%4y %0h:%0M:%0s' or '%0d.%0m.%4y'
if ( dok_dat_feld[ gDDF_CONTACT_ID ] != "" && dok_dat_feld[ gDDF_INVOICE_ID ] != "" && lYear != "" )
{
lReturnValue = checkDuplicates( dok_dat_feld[ gDDF_CONTACT_ID ], dok_dat_feld[ gDDF_INVOICE_ID ], lYear, "" )
if ( lReturnValue != 0 )
{
return lReturnValue
}
}
else
{
call api_log_info("missing mandatory fields for checkDuplicates")
}
}
// determine if capture date is empty
if ( dok_dat_feld[ gDDF_CAPTURE_DATE ] == "" )
{
// default = today -> Format in d.3 always is '%0d.%0m.%4y %0h:%0M:%0s' or '%0d.%0m.%4y'
dok_dat_feld[ gDDF_CAPTURE_DATE ] = sm_sdtime(" %0d.%0m.%4y")
}
// determine if delivery date is empty
if ( dok_dat_feld[ gDDF_DELIVERY_DATE ] == "" )
{
// default = today -> Format in d.3 always is '%0d.%0m.%4y %0h:%0M:%0s' or '%0d.%0m.%4y'
dok_dat_feld[ gDDF_DELIVERY_DATE ] = sm_sdtime(" %0d.%0m.%4y")
}
// determine if status is empty
if ( dok_dat_feld[ gDDF_WFL_STATUS ] == "" && dok_dat_feld[ gDDF_STORAGE ] == gSTORAGE_WORKFLOW )
{
// default = gWFL_STATUS_NEW
dok_dat_feld[ gDDF_WFL_STATUS ] = gWFL_STATUS_NEW
}
// DIW-211
vars lTaxValue, lCounter, lArrayLength, lTaxIDMasterData, lSchemeClause
vars lIsString, lWhereClause
//add scheme to from clause if set
if(gGMF_SCHEME_NAME_RUN_TIME != "")
{
lSchemeClause = ":(gGMF_SCHEME_NAME_RUN_TIME)."
}
else
{
lSchemeClause = ""
}
lArrayLength = sm_n_num_occurs("dok_dat_feld_:gDDF_TAX_KEY")
for lCounter = 1 while ( lCounter <= lArrayLength ) step 1
{
lTaxValue = dok_dat_feld_:(gDDF_TAX_KEY)[ lCounter ]
if( lTaxValue != "" )
{
lIsString = lTaxValue * 1
// check if lTaxValue is string or number
if( lIsString != lTaxValue )
{
lWhereClause = "id = :+lTaxValue"
}
else
{
lWhereClause = "value = :lTaxValue OR id = :+lTaxValue"
}
DBMS ALIAS lTaxIDMasterData
DBMS SQL SELECT TOP 1 id FROM :(lSchemeClause):(gGMF_TABLE_TAX_KEY) \
WHERE :lWhereClause
DBMS ALIAS
if( lTaxIDMasterData != "" )
{
dok_dat_feld_:(gDDF_TAX_KEY)[ lCounter ] = lTaxIDMasterData
}
}
}
// ende DIW-211
}
else if ( pDocTypeShort == gDTS_INVOICE_ATTACHMENT )
{
// update / validate creditor master data
call updateCreditorData( "" )
}
call api_log( gLOGLEVEL, "End of InsertEntry10_dbsInvoice" )
return 0
} //end of InsertEntry10_dbsInvoice
//------------------------------------------------------------------------------
// InsertExit30_dbsInvoice
/*------------------------------------------------------------------------------
// docType Invoice:
// - generation of transaction id
// docType Invoice Attachment:
// [ - link document with vendor transaction folder ( is configured in d.3 administration! no overwrite of existing documents )]
// - generation of transaction id
//------------------------------------------------------------------------------
*/
proc InsertExit30_dbsInvoice( pDocId, pFileDestination, pImportOk, pUser, pDocTypeShort )
{
call api_log( gLOGLEVEL, "Start of InsertExit30_dbsInvoice( :pUser, :pFileDestination, :pImportOk, :pUser, :pDocTypeShort )" )
vars lReturnValue, lCount
// generation of transaction id required? is invoice? transaction id empty?
if( pDocTypeShort == gDTS_INVOICE )
{
//vars lNewTransactionId
// set newly generated transaction id to current document if generation of transaction id is configured
//lNewTransactionId = updateTransactionID( pDocId, pDocTypeShort )
call updateTransactionID( pDocId, pDocTypeShort )
// find matching other documents and fill them with generated transaction id
// STEPS: 1. find all documents with current GUID, 2. fill all documents with current GUID with generated transaction id
// 1. find all documents with current GUID
// delete API-Context
call api_clear_document_context()
// set search criteria
api_doc_type_short = gDTS_INVOICE_ATTACHMENT
if(dok_dat_feld[ gDDF_GUID ] != "")
{
api_doc_field[ gDDF_GUID ] = dok_dat_feld[ gDDF_GUID ]
// execute function document_find_ids
lReturnValue = api_function ("document_find_ids", "")
if (lReturnValue == 0)
{
vars lFoundDocumentIds = api_single_info
api_single_info = ""
// 2. fill all documents with current GUID with new transaction id
// run through all document ids with current GUID
for lCount = 1 while lCount <= lFoundDocumentIds step 1
{
// in case of updating transaction id: stop hook execution
SERVER_API_NO_HOOKS = 1
//call api_function( "attribute_update_single", gDDF_TRANSACTION_ID, lNewTransactionId, 0, api_doc_ids[lCount], "Master" )
call api_function( "attribute_update_single", gDDF_TRANSACTION_ID, dok_dat_feld[ gDDF_TRANSACTION_ID ], 0, api_doc_ids[lCount], "Master" )
SERVER_API_NO_HOOKS = 0
}
}
else
{
call api_log_error("Error code :lReturnValue for document_find_ids in InsertExit30_dbsInvoice!")
}
}
// create record in erp and start workflow (will only called if modified in 51_erp_dbs_rechnungsworkflow.jpl)
lReturnValue = createRecordInERP( pDocId )
if( lReturnValue != 0 )
{
return lReturnValue
}
}
else
{
// find matching other documents and fill them with transaction id
// STEPS: 1. find all documents with current GUID, 2. find valid transaction id for GUID, 3. fill current document with valid transaction id
if ( pDocTypeShort == gDTS_INVOICE_ATTACHMENT && dok_dat_feld[ gDDF_TRANSACTION_ID ] == "" )
{
vars lReturnValue // errorcode
vars lCount // counter
vars lTransactionId = ""
// delete API-Context
call api_clear_document_context()
// 1. find all documents with current GUID
// set search criteria
api_doc_type_short = gDTS_INVOICE
api_doc_field[ gDDF_GUID ] = dok_dat_feld[ gDDF_GUID ]
// execute function document_find_ids
lReturnValue = api_function ("document_find_ids", "")
// 2. find valid transaction id for GUID
// run through all document ids with current GUID
if (lReturnValue == 0)
{
vars lFoundDocumentIds = api_single_info
api_single_info = ""
call api_log_info(":lFoundDocumentIds Document-IDs for current GUID have been found!")
for lCount = 1 while lCount <= lFoundDocumentIds step 1
{
// call api_log_info("doc_id :lCount: :api_doc_ids[lCount]")
lReturnValue = api_function( "attribute_get_single", gDDF_TRANSACTION_ID, 0, api_doc_ids[lCount], "Master" )
if( lReturnValue == 0 && api_single_info != "" )
{
lTransactionId = api_single_info
break
}
}
// 3. fill document with valid transaction id
if( lTransactionId != "" )
{
// run through all document ids with current GUID
// in case of updating transaction: stop hook execution
SERVER_API_NO_HOOKS = 1
call api_function( "attribute_update_single", gDDF_TRANSACTION_ID, lTransactionId, 0, pDocId, "Master" )
SERVER_API_NO_HOOKS = 0
}
}
else
{
call api_log_error("Error code :lReturnValue for document_find_ids in InsertExit30_dbsInvoice!")
}
}
}
call api_log( gLOGLEVEL, "End of InsertExit30_dbsInvoice" )
return 0
} //end of InsertExit30_dbsInvoice
//------------------------------------------------------------------------------
// LinkExit10_dbsInvoice
/*------------------------------------------------------------------------------
// docType Invoice and Attachment:
// - copy multval attributes to all corresponding invoice attachments
// - set net_amount, gross_amount and tax_amount always to 0 when values equal null
//------------------------------------------------------------------------------
*/
proc LinkExit10_dbsInvoice( pDocIdFather, pDocIdChild, pErrorCode, pErrorNumber )
{
call api_log( gLOGLEVEL, "Start of LinkExit10_dbsInvoice( :pDocIdFather, :pDocIdChild, :pErrorCode, :pErrorNumber )" )
call inheritImpCrdTrsFldAttr( pDocIdFather, pDocIdChild )
call api_log( gLOGLEVEL, "End of LinkExit10_dbsInvoice" )
}
//------------------------------------------------------------------------------
// UpdateAttribExit20_dbsInvoice
/*------------------------------------------------------------------------------
// docType Invoice:
// - copy multval attributes to all corresponding invoice attachments
// - set net_amount, gross_amount and tax_amount always to 0 when values equal null
//------------------------------------------------------------------------------
*/
proc UpdAttribExit20_dbsInvoice( pDocId, pErrorNumber, pUser, pDocTypeShort )
{
call api_log( gLOGLEVEL, "Start of UpdAttribExit20_dbsInvoice( :pDocId, :pErrorNumber, :pUser, :pDocTypeShort, :dokuart_kurz )" )
// Update successfull ?
if ( pErrorNumber == 0 )
{
if ( dokuart_kurz == gDTS_INVOICE )
{
// inherit creditor transaction folder attributes
call inheritCrdTrsFldAttributes( pDocId, dokuart_kurz, "" )
// update creditor master data
call updateCreditorData( pDocId ) // not necessary anymore, only write creditor data in import
}
}
call api_log( gLOGLEVEL, "End of UpdAttribExit20_dbsInvoice" )
return 0
}// end of UpdAttribExit20_dbsInvoice