183 lines
4.7 KiB
JavaScript
183 lines
4.7 KiB
JavaScript
function servicetask15(attempt, message) {
|
|
var payload = buildSe2010Payload();
|
|
appendDebugSe2010("servicetask15: payload=" + safeStringify(payload));
|
|
|
|
var response = invokeSe2010(payload);
|
|
appendDebugSe2010("servicetask15: status=" + response.httpStatus + " body=" + response.raw);
|
|
|
|
if (!response.success) {
|
|
throw "Falha ao enviar dados para Protheus SE2010. Status HTTP: " + response.httpStatus + ".";
|
|
}
|
|
}
|
|
|
|
function buildSe2010Payload() {
|
|
var payload = {
|
|
FILIAL: requiredCard("FILIAL"),
|
|
PREFIXO: requiredCard("PREFIXO"),
|
|
NUMERO: requiredCard("NUMERO"),
|
|
PARCELA: requiredCard("PARCELA"),
|
|
TIPO: requiredCard("TIPO"),
|
|
NATUREZA: requiredCard("NATUREZA"),
|
|
COD_FORN: requiredCard("COD_FORN"),
|
|
LOJA: requiredCard("LOJA"),
|
|
EMISSAO: normalizeDate(requiredCard("EMISSAO"), "EMISSAO"),
|
|
VENCIMENTO: normalizeDate(requiredCard("VENCIMENTO"), "VENCIMENTO"),
|
|
VENC_REAL: normalizeDate(requiredCard("VENC_REAL"), "VENC_REAL"),
|
|
VALOR: parseMoney(requiredCard("VALORtotal", "VALOR")),
|
|
HISTORICO: requiredCard("HISTORICO"),
|
|
CODIGO_BARRAS: card("CODIGO_BARRAS"),
|
|
CENTRO_CUSTO: requiredCard("CENTRO_CUSTO")
|
|
};
|
|
|
|
return payload;
|
|
}
|
|
|
|
function invokeSe2010(payload) {
|
|
var serviceCode = card("service_code_se2010") || "protheus_teste";
|
|
var endpoint = card("endpoint_se2010") || "https://comerciode186920.protheus.cloudtotvs.com.br:4050/rest/uf_se2010";
|
|
|
|
var requestData = {
|
|
companyId: getCompanyIdSafe(),
|
|
serviceCode: serviceCode,
|
|
endpoint: endpoint,
|
|
method: "post",
|
|
timeoutService: "120",
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
"Accept": "application/json"
|
|
},
|
|
options: {
|
|
encoding: "UTF-8",
|
|
mediaType: "application/json",
|
|
useSSL: true
|
|
},
|
|
params: payload
|
|
};
|
|
|
|
var clientService = fluigAPI.getAuthorizeClientService();
|
|
var vo = clientService.invoke(JSON.stringify(requestData));
|
|
var raw = vo ? String(vo.getResult() || "") : "";
|
|
|
|
if (!raw) {
|
|
throw "Resposta vazia da API SE2010.";
|
|
}
|
|
|
|
var httpStatus = getHttpStatus(vo);
|
|
var parsed = parseJsonSafe(raw);
|
|
var success = httpStatus >= 200 && httpStatus < 300;
|
|
|
|
if (parsed && parsed.success === false) {
|
|
success = false;
|
|
}
|
|
|
|
return {
|
|
success: success,
|
|
httpStatus: httpStatus,
|
|
raw: raw,
|
|
parsed: parsed
|
|
};
|
|
}
|
|
|
|
function requiredCard() {
|
|
var value = "";
|
|
|
|
for (var i = 0; i < arguments.length; i++) {
|
|
value = card(arguments[i]);
|
|
if (value) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!value) {
|
|
throw "Campo obrigatorio nao informado para envio Protheus: " + arguments[0];
|
|
}
|
|
|
|
return value;
|
|
}
|
|
|
|
function card(name) {
|
|
return ((hAPI.getCardValue(name) || "") + "").replace(/^\s+|\s+$/g, "");
|
|
}
|
|
|
|
function normalizeDate(value, fieldName) {
|
|
var digits = (value || "").replace(/\D/g, "");
|
|
if (digits.length !== 8) {
|
|
throw "Data invalida no campo " + fieldName + ". Informe no formato YYYYMMDD.";
|
|
}
|
|
return digits;
|
|
}
|
|
|
|
function parseMoney(value) {
|
|
var raw = (value || "").toString().replace(/\s/g, "");
|
|
if (!raw) {
|
|
return 0;
|
|
}
|
|
|
|
if (raw.indexOf(",") >= 0) {
|
|
raw = raw.replace(/\./g, "").replace(",", ".");
|
|
} else {
|
|
var dotCount = (raw.match(/\./g) || []).length;
|
|
if (dotCount > 1) {
|
|
raw = raw.replace(/\./g, "");
|
|
}
|
|
}
|
|
|
|
var parsed = parseFloat(raw);
|
|
if (isNaN(parsed)) {
|
|
throw "Valor invalido para envio Protheus: " + value;
|
|
}
|
|
|
|
return parseFloat(parsed.toFixed(2));
|
|
}
|
|
|
|
function getCompanyIdSafe() {
|
|
try {
|
|
if (typeof getValue === "function") {
|
|
return String(getValue("WKCompany") || "1");
|
|
}
|
|
} catch (e) {
|
|
// ignore
|
|
}
|
|
return "1";
|
|
}
|
|
|
|
function getHttpStatus(vo) {
|
|
try {
|
|
var status = parseInt(String(vo.getHttpStatusResult() || "0"), 10);
|
|
if (!isNaN(status) && status > 0) {
|
|
return status;
|
|
}
|
|
} catch (e) {
|
|
// ignore
|
|
}
|
|
|
|
return 200;
|
|
}
|
|
|
|
function parseJsonSafe(value) {
|
|
try {
|
|
return JSON.parse(value);
|
|
} catch (e) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
function safeStringify(value) {
|
|
try {
|
|
return JSON.stringify(value);
|
|
} catch (e) {
|
|
return String(value);
|
|
}
|
|
}
|
|
|
|
function appendDebugSe2010(message) {
|
|
try {
|
|
var prefix = "[SE2010] ";
|
|
var atual = (hAPI.getCardValue("debug_publicacao") || "") + "";
|
|
var linha = prefix + message;
|
|
hAPI.setCardValue("debug_publicacao", atual ? (atual + "\n" + linha) : linha);
|
|
} catch (e) {
|
|
log.warn("appendDebugSe2010 falhou: " + e);
|
|
}
|
|
}
|