Files
Facilitor/APPL/MARX/api_bct_factuur_import.asp
Jos Groot Lipman e774a40b51 MARX#82611 Is het mogelijk om bij verwerkingsfout een HTTP4xx code wordt teruggestuurd
svn path=/Website/trunk/; revision=64855
2024-05-28 14:52:57 +00:00

136 lines
6.0 KiB
Plaintext

<%@ language = "JavaScript" %>
<% Server.ScriptTimeout=6000; %>
<% /*
$Revision$
$Id$
File: api_bct_factuur_import.asp
Description: API voor het importeren van data uit xmlbestanden.
Werking werkt naar analogie van gen_import.
Parameters: Upload van een xml
Status:
Context: Callback functie vanuit BCT vanuit export/BCTAdapter.asp
Notes: Kopie van API/api_gen_import.asp met MARX/BCT specifieke aanvullingen
*/
DOCTYPE_Disable = 1;
%>
<!-- #include file="../../appl/Shared/common.inc" -->
<!-- #include file="../../appl/api/api.inc" -->
<!-- #include file="../../appl/shared/FlexFiles.inc" -->
<!-- #include file="../Shared/xml_converter.inc" -->
<script language="javascript" src="../imp/imp_shared.js" runat="server"></script>
<%
// We sturen het antwoord in UTF-8.
Session.Codepage = 65001;
Response.Charset = 'utf-8';
var API = new API_func();
// In APPL\MARX\export\BCTAdapter.asp zijn mar_queue_key en mar_queue_requestid
// aan de callbackurl voor API=FIN_FACTUUR_PDF toegevoegd.
// Die gebruiken we hier om te registreren dat de factuur blijkbaar goed ingescand is
var mar_queue_requestid = getQParam("mar_queue_requestid");
var mar_queue_key = getQParamInt("mar_queue_key");
var sql = "SELECT mar_factuur_queue_aanmaak"
+ " , prs_perslid_key"
+ " , mar_factuur_queue_replied"
+ " , mar_factuur_queue_filename"
+ " , mar_factuur_queue_filesize"
+ " FROM mar_factuur_queue"
+ " WHERE mar_factuur_queue_key = " + mar_queue_key // performance
+ " AND mar_factuur_queue_requestid = " + safe.quoted_sql(mar_queue_requestid); // authenticatie
oRs = Oracle.Execute(sql);
if (oRs.EOF)
{
oRs.Close();
_AiAi("mar_factuur_queue record not found for key {0}".format(mar_queue_key));
}
if (oRs("mar_factuur_queue_replied").Value != null)
{
var dtaanmaak = new Date(oRs("mar_factuur_queue_aanmaak").Value);
var dtreply = new Date(oRs("mar_factuur_queue_replied").Value);
var filename = oRs("mar_factuur_queue_filename").Value;
var filesize = oRs("mar_factuur_queue_filesize").Value;
oRs.Close();
_AiAi("Duplicate reply to mar_factuur_queue record key {0} (created {1}).\nFirst reply was {2}. Ignoring newer BCT reply.\nPDF file was {3} ({4} bytes or {5} as base64)"
.format(mar_queue_key, toDateTimeString(dtaanmaak, true), toDateTimeString(dtreply, true), filename, filesize, Math.round(filesize * 4 /3)));
}
var prs_perslid_contractant_key = oRs("prs_perslid_key").Value;
oRs.Close();
var sql = "UPDATE mar_factuur_queue"
+ " SET mar_factuur_queue_replied = SYSDATE"
+ " WHERE mar_factuur_queue_key = " + mar_queue_key;
Oracle.Execute(sql);
var import_app_key = API.apidata.options['import_app_key'];
var bytes = Request.TotalBytes;
if (bytes == 0)
{
__DoLog("api_bct_factuur_import empty body posted", "#ffff00");
Response.Write("Error: no data posted for API import");
Response.End; // Grof maar anders AiAi, dat is nog erger
}
fileStream = Server.CreateObject("ADODB.Stream");
fileStream.Type = 1; // adTypeBinary eerst nog
fileStream.Open();
"Error 'Operation not Allowed' op de volgende regel betekent meestal dat de upload te groot is";
fileStream.Write(Request.BinaryRead(bytes));
if (API.apidata.loglevel & 1 || __Logging > 0)
{
var savename = __Log2FileName("{0}_{1}".format(API.APIname, user_key));
fileStream.SaveToFile(safe.UNC(savename), 2); // 2=adSaveCreateOverWrite
__DoLog("Import file was saved in {0}".format(savename), "#ff4");
}
var res = impReadStream(fileStream, import_app_key,
{ fac_home: Server.MapPath(rooturl + "/") + "/",
filepathname: "API " + API.APIname,
customerId: customerId,
keep_old: 300, // Parallelle import 300 seconden ondersteunen
user_key: prs_perslid_contractant_key > 0?prs_perslid_contractant_key:user_key,
stylesheet: API.apidata.stylesheet,
keep_backup: true // mits fac_import_app_folder gezet
});
var import_key = res.import_key;
if (res.success)
{
var warn = L("lcl_imp_read_lines") + res.read_lines;
var res = impProcessStream(res.import_key, { customerId: customerId,
user_key: user_key });
}
else
{
var warn = res.warning;
__DoLog("Import (app_key={0}) mislukt: {1}".format(import_app_key, warn), "#ffff00");
API.error(warn); // Abort met 500-status
}
if (import_key > 0)
{
// Mareon specifieke code
// Registreer de effectieve fin_factuur_key zoals aangemaakt
if (mar_queue_requestid)
{
var sql = "UPDATE mar_factuur_queue"
+ " SET fin_factuur_key = (SELECT MAX(fin_factuur_key)"
+ " FROM fac_imp_factuur"
+ " WHERE fac_import_key = " + import_key + ")"
+ " WHERE mar_factuur_queue_key = " + mar_queue_key;
Oracle.Execute(sql);
}
}
// BCT doet niets met de inhoud van onze response op hun request maar verwacht wel een XML formaat
Response.ContentType = "text/xml";
Response.Write("<?xml version=\"1.0\"?>"
+ "<facilitor>"
+ " <result>OK</result>"
+ "</facilitor>");
ASPPAGE_END();
%>