This commit is contained in:
Andrey Cunha 2026-05-06 20:26:42 -03:00
commit 4b465e54fe
26 changed files with 22041 additions and 2083 deletions

View File

@ -0,0 +1,18 @@
{
"version": "1.0.0",
"configurations": [
{
"id": "achirhwa847morhkc4qxjten2zltol",
"name": "Ginseng Produção",
"host": "comerciode188006.fluig.cloudtotvs.com.br",
"ssl": true,
"port": 443,
"username": "andrey.cunha",
"password": "eyJpdiI6IjRjYjRiMmM5MWJhZmVkNzU0OWQzOTljZWI3ZmQxMzViIiwic2FsdCI6IjRjYTAyMWMxY2YxNzdmZWRiYmYzNjk2MTczYWRiMzI2IiwidGV4dCI6ImNlN2JhYjU5NWNmZjk1NWVjZDJiN2EzNzQwMTA0NmFiIn0=",
"userCode": "andrey.cunha",
"confirmExporting": false,
"hasBrowser": false,
"companyId": 1
}
]
}

View File

@ -364,20 +364,20 @@
Estabelecimento/Filial Estabelecimento/Filial
</label> </label>
<span class="required text-danger"><strong> * </strong></span> <span class="required text-danger"><strong> * </strong></span>
<input type="zoom" class="form-control requiredInput" name="estabelecimentoFilial" id="estabelecimentoFilial" <input type="zoom" class="form-control" name="estabelecimento" id="estabelecimento" data-zoom="{
data-zoom="{ 'displayKey':'LOJA',
'displayKey':'estabelecimento', 'placeholder': 'Buscar nome do estabelecimento ou filial',
'datasetId':'dsFiliais', 'datasetId':'dsFiliais',
'placeholder': 'Pesquisar nome do estabelecimento ou filial.', 'fields':[
'fields':[ {'field':'LOJA','label':'Filial','standard':'true','search':'true'},
{ {'field':'REGIONAL','label':'REGIONAL','standard':'true'},
'field':'estabelecimento', {'field':'UF','label':'UF','standard':'true'},
'label':'Filial', {'field':'RESPONSAVEL_LOJA','label':'RESPONSAVEL_LOJA','visible':'false'},
'standard':'true', {'field':'PDV','label':'PDV','visible':'false'},
'search':'true' {'field':'COLLEAGUE_ID','label':'COLLEAGUE_ID','visible':'false'},
} {'field':'LOGIN_LOJA','label':'LOGIN_LOJA','visible':'false'}
] ]
}" /> }">
<p class="text-danger text-error"> <p class="text-danger text-error">
Preenchimento obrigatório. Preenchimento obrigatório.
</p> </p>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

18
compras_digital/.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,18 @@
{
"version": "0.2.0",
"configurations": [
{
"type": "totvs_language_debug",
"request": "launch",
"name": "TOTVS Language Debug",
"program": "${command:AskForProgramName}",
"cwb": "${workspaceFolder}",
"smartclientBin": "../totvs/bin/smartclient/smartclient.exe",
"isMultiSession": true,
"enableTableSync": true,
"extendFeatures": {
"charDetails": false
}
}
]
}

18
compras_digital/.vscode/servers.json vendored Normal file
View File

@ -0,0 +1,18 @@
{
"version": "1.0.0",
"configurations": [
{
"id": "6ki8w4m1dpmor606g3n0y6sgduhc",
"name": "Ginseng Produção",
"host": "comerciode188006.fluig.cloudtotvs.com.br",
"ssl": true,
"port": 443,
"username": "andrey.cunha",
"password": "eyJpdiI6IjUyYTgyOGQ0ZGM1ZWI3ZjNhZWRlNTQ1ZWZiNzAwOWQwIiwic2FsdCI6IjYwYTZjODBjY2RiNDk5OWI3YTc0NmY1ZGY1NTgwOGI5IiwidGV4dCI6IjdmYTA2ZGFhODM1MWI2NzRmNTk1ZTEzMzc1NjMxZjQ1In0=",
"userCode": "andrey.cunha",
"confirmExporting": false,
"hasBrowser": false,
"companyId": 1
}
]
}

4
compras_digital/.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,4 @@
{
"totvsLanguageServer.welcomePage": false,
"totvsLanguageServer.editor.linter.includes": "C:\\25-04-14-P12-SMARTCLIENT_BUILD 20.3.2.12_WINDOWS_X64\\include"
}

View File

@ -1,61 +0,0 @@
function defineStructure() {
addColumn("codigo");
addColumn("descricao");
}
function onSync(lastSyncDate) {}
function createDataset(fields, constraints, sortFields) {
var dataset = DatasetBuilder.newDataset();
var dataSource = "/jdbc/Protheus12"; // Nome da conexão cadastrada no Fluig
var ic = new javax.naming.InitialContext();
var ds = ic.lookup(dataSource);
var conn = ds.getConnection();
var stmt = null;
var rs = null;
try {
log.info("Iniciando execução do dataset...");
var sql = "SELECT b1_cod, b1_desc FROM sb1010 WHERE LEFT(b1_cod, 4) IN ('0001','0008', '0002', '0003', '0007', '0006', '0009', '0010', '0011', '0014','0016')";
log.info("Query SQL: " + sql);
stmt = conn.prepareStatement(sql);
rs = stmt.executeQuery();
dataset.addColumn("codigo");
dataset.addColumn("descricao");
var encontrados = {}; // Usando um objeto para evitar duplicação
while (rs.next()) {
var codigo = rs.getString("b1_cod");
var descricao = rs.getString("b1_desc");
if (!encontrados[codigo]) { // Verifica se já foi adicionado
encontrados[codigo] = true; // Marca como processado
log.info("Registro encontrado: " + codigo + " - " + descricao);
dataset.addRow([codigo, descricao]);
}
}
if (Object.keys(encontrados).length === 0) {
log.info("Nenhum registro encontrado para a consulta.");
}
} catch (e) {
log.error("Erro ao executar dataset: " + e.message);
} finally {
try {
if (rs) rs.close();
if (stmt) stmt.close();
if (conn) conn.close();
} catch (e) {
log.error("Erro ao fechar recursos: " + e.message);
}
}
return dataset;
}
function onMobileSync(user) {}

View File

@ -0,0 +1,345 @@
function defineStructure() {
addColumn("B1_COD");
addColumn("B1_DESC");
addColumn("B1_UM");
addColumn("B1_TIPO");
addColumn("B1_LOCPAD");
addColumn("B1_LOCALIZ");
addColumn("B1_CONTRAT");
addColumn("B1_PICM");
addColumn("B1_IPI");
addColumn("B1_RASTRO");
addColumn("B1_MSBLQL");
addColumn("TOTAL");
addColumn("HORA_CONSULTA");
addColumn("CODIGO_DESCRICAO");
setKey(["B1_COD"]);
addIndex(["B1_COD"]);
addIndex(["B1_DESC"]);
}
function onSync(lastSyncDate) {
var dataset = DatasetBuilder.newDataset();
addDatasetColumns(dataset);
var payload = fetchProdutos();
var produtos = payload.produtos || [];
log.info("[dsComprasProdutos.onSync] lastSyncDate=" + lastSyncDate + ", totalRecebido=" + produtos.length);
for (var i = 0; i < produtos.length; i++) {
var row = mapProdutoToRow(produtos[i], payload.total, payload.horaConsulta);
if (typeof dataset.addOrUpdateRow === "function") {
dataset.addOrUpdateRow(row);
} else {
dataset.addRow(row);
}
}
return dataset;
}
function createDataset(fields, constraints, sorts) {
var dataset = DatasetBuilder.newDataset();
addDatasetColumns(dataset);
var payload = fetchProdutos();
var produtos = payload.produtos || [];
var filtro = parseConstraints(constraints);
var count = 0;
log.info("[dsComprasProdutos.createDataset] totalRecebido=" + produtos.length + ", search=[" + filtro.search + "], maxRows=" + filtro.maxRows);
for (var i = 0; i < produtos.length; i++) {
var item = produtos[i] || {};
if (!matchProduto(item, filtro)) {
continue;
}
dataset.addRow(mapProdutoToRow(item, payload.total, payload.horaConsulta));
count++;
if (filtro.maxRows > 0 && count >= filtro.maxRows) {
break;
}
}
log.info("[dsComprasProdutos.createDataset] totalRetornado=" + count);
return dataset;
}
function onMobileSync(user) {
var sortFields = ["B1_COD"];
var constraints = [];
var fields = [
"B1_COD",
"B1_DESC",
"B1_UM",
"B1_TIPO",
"B1_LOCPAD",
"B1_LOCALIZ",
"B1_CONTRAT",
"B1_PICM",
"B1_IPI",
"B1_RASTRO",
"B1_MSBLQL",
"TOTAL",
"HORA_CONSULTA",
"CODIGO_DESCRICAO"
];
return {
fields: fields,
constraints: constraints,
sortFields: sortFields
};
}
function addDatasetColumns(dataset) {
dataset.addColumn("B1_COD");
dataset.addColumn("B1_DESC");
dataset.addColumn("B1_UM");
dataset.addColumn("B1_TIPO");
dataset.addColumn("B1_LOCPAD");
dataset.addColumn("B1_LOCALIZ");
dataset.addColumn("B1_CONTRAT");
dataset.addColumn("B1_PICM");
dataset.addColumn("B1_IPI");
dataset.addColumn("B1_RASTRO");
dataset.addColumn("B1_MSBLQL");
dataset.addColumn("TOTAL");
dataset.addColumn("HORA_CONSULTA");
dataset.addColumn("CODIGO_DESCRICAO");
}
function mapProdutoToRow(item, total, horaConsulta) {
var codigo = trim(item["B1_COD"]);
var descricao = trim(item["B1_DESC"]);
return [
codigo,
descricao,
trim(item["B1_UM"]),
trim(item["B1_TIPO"]),
trim(item["B1_LOCPAD"]),
trim(item["B1_LOCALIZ"]),
trim(item["B1_CONTRAT"]),
trim(item["B1_PICM"]),
trim(item["B1_IPI"]),
trim(item["B1_RASTRO"]),
trim(item["B1_MSBLQL"]),
trim(total),
trim(horaConsulta),
codigo + " - " + descricao
];
}
function fetchProdutos() {
var response = {
total: "",
horaConsulta: "",
produtos: []
};
try {
var clientService = fluigAPI.getAuthorizeClientService();
var endpoints = [
"/rest/uf_mata010/",
"/rest/uf_mata010",
"https://rest.grupoginseng.com.br/rest/uf_mata010/",
"https://rest.grupoginseng.com.br/rest/uf_mata010",
"/",
""
];
var lastStatus = "";
var lastRetorno = "";
for (var i = 0; i < endpoints.length; i++) {
var endpoint = endpoints[i];
var apiResp = invokePostprod(clientService, endpoint);
var statusHttp = apiResp.status;
var retorno = apiResp.body;
lastStatus = statusHttp;
lastRetorno = retorno;
log.info("[dsComprasProdutos] endpoint=[" + endpoint + "], HTTP status=" + statusHttp);
if (!retorno) {
continue;
}
var obj = parseApiResponseObject(retorno);
if (!obj || !(obj.produtos instanceof Array)) {
continue;
}
response.total = obj.total != null ? String(obj.total) : "";
response.horaConsulta = obj.hora_consulta != null ? String(obj.hora_consulta) : "";
response.produtos = obj.produtos;
log.info("[dsComprasProdutos] endpointOK=[" + endpoint + "], total=" + response.total + ", produtos=" + response.produtos.length + ", hora_consulta=" + response.horaConsulta);
return response;
}
var preview = trim(lastRetorno);
if (preview.length > 220) {
preview = preview.substring(0, 220) + "...";
}
log.error("[dsComprasProdutos] Nenhum endpoint retornou JSON válido. UltimoStatus=" + lastStatus + ", ultimoRetornoPreview=[" + preview + "]");
} catch (e) {
log.error("[dsComprasProdutos] Erro ao consultar API Postprod: " + e);
}
return response;
}
function invokePostprod(clientService, endpoint) {
var data = {
companyId: String(getValue("WKCompany") || "1"),
serviceCode: "Postprod",
endpoint: endpoint,
method: "get",
timeoutService: "60000",
params: {}
};
try {
var vo = clientService.invoke(JSON.stringify(data));
return {
status: vo ? String(vo.getHttpStatusResult() || "") : "",
body: vo ? String(vo.getResult() || "") : ""
};
} catch (e) {
return {
status: "EXCEPTION",
body: String(e)
};
}
}
function parseConstraints(constraints) {
var out = {
codigo: "",
descricao: "",
bloqueado: "",
search: "",
maxRows: 0
};
if (!constraints) return out;
for (var i = 0; i < constraints.length; i++) {
var c = constraints[i];
if (!c || !c.fieldName) continue;
var name = String(c.fieldName || "").toUpperCase();
var value = trim(c.initialValue);
if (name === "B1_COD" && value) {
out.codigo = cleanSearchValue(value);
continue;
}
if (name === "B1_DESC" && value) {
out.descricao = cleanSearchValue(value);
continue;
}
if (name === "B1_MSBLQL" && value) {
out.bloqueado = cleanSearchValue(value);
continue;
}
if ((name === "SEARCH" || name === "TERMO" || name === "FILTRO") && value) {
out.search = cleanSearchValue(value);
continue;
}
if (name === "SQLLIMIT" || name === "RESULTLIMIT") {
var n = parseInt(value, 10);
if (!isNaN(n) && n > 0) out.maxRows = n;
continue;
}
}
return out;
}
function matchProduto(item, filtro) {
var codigo = trim(item["B1_COD"]);
var descricao = trim(item["B1_DESC"]);
var um = trim(item["B1_UM"]);
var bloqueado = trim(item["B1_MSBLQL"]);
if (filtro.codigo && codigo !== filtro.codigo) {
return false;
}
if (filtro.descricao && normalize(descricao).indexOf(normalize(filtro.descricao)) === -1) {
return false;
}
if (filtro.bloqueado && bloqueado !== filtro.bloqueado) {
return false;
}
if (filtro.search) {
var blob = normalize([codigo, descricao, um, bloqueado].join(" "));
if (blob.indexOf(normalize(filtro.search)) === -1) {
return false;
}
}
return true;
}
function parseJsonSafe(text) {
try {
return JSON.parse(text);
} catch (e) {
return null;
}
}
function parseApiResponseObject(rawText) {
var root = parseJsonSafe(rawText);
if (!root) return null;
if (root.produtos instanceof Array) {
return root;
}
if (typeof root.content === "string") {
var inner = parseJsonSafe(root.content);
if (inner && inner.produtos instanceof Array) {
return inner;
}
}
if (root.content && root.content.produtos instanceof Array) {
return root.content;
}
if (typeof root.result === "string") {
var parsedResult = parseJsonSafe(root.result);
if (parsedResult && parsedResult.produtos instanceof Array) {
return parsedResult;
}
}
return null;
}
function cleanSearchValue(v) {
var s = trim(v);
s = s.replace(/[%*_]/g, "");
if (s === "true" || s === "false" || s === "on" || s === "off" || s === "1") {
return "";
}
return trim(s);
}
function normalize(v) {
return trim(v).toLowerCase();
}
function trim(v) {
return String(v == null ? "" : v).trim();
}

View File

@ -1,118 +1,212 @@
function defineStructure() {
}
function onSync(lastSyncDate) {
}
function createDataset(fields, constraints, sortFields) { function createDataset(fields, constraints, sortFields) {
var dataset = DatasetBuilder.newDataset();
var ds = DatasetBuilder.newDataset();
ds.addColumn("codigo");
ds.addColumn("filial");
ds.addColumn("estabelecimento");
ds.addColumn("cep");
ds.addColumn("logradouro");
ds.addColumn("numero");
ds.addColumn("bairro");
ds.addColumn("cidade");
ds.addColumn("estado");
ds.addColumn("cnpj");
dataset.addColumn("PDV");
dataset.addColumn("LOJA");
dataset.addColumn("RESPONSAVEL_LOJA");
dataset.addColumn("REGIONAL");
dataset.addColumn("UF");
dataset.addColumn("CIDADE");
dataset.addColumn("STATUS");
dataset.addColumn("CANAL");
dataset.addColumn("ID");
dataset.addColumn("PROTHEUS");
dataset.addColumn("LOGIN_LOJA");
dataset.addColumn("COLLEAGUE_ID");
dataset.addColumn("USER_CREATE");
try {
ds.addRow(new Array("010101","4494", "ESCRITÓRIO MATRIZ","57035-030","RUA DESPORTISTA HUMBERTO GUIMARAES","343","PONTA VERDE","MACEIÓ","AL","08.489.643/0001-52")); var clientService = fluigAPI.getAuthorizeClientService();
ds.addRow(new Array("010102","3546", "LJ BIG BOMPREÇO GRUTA","57052-000","AVENIDA FERNANDES LIMA","3700","GRUTA DE LOURDES","MACEIÓ","AL","08.489.643/0003-14")); var data = {
ds.addRow(new Array("010103","4560", "LJ MACEIÓ SHOPPING TERREO","57031-532","AVENIDA GUSTAVO PAIVA","2900","MANGABEIRAS","MACEIÓ","AL","08.489.643/0004-03")); companyId: String(getValue("WKCompany") || "1"),
ds.addRow(new Array("010104","5699", "LJ MOREIRA LIMA","57020-000","RUA MOREIRA LIMA","93","CENTRO","MACEIÓ","AL","08.489.643/0005-86")); serviceCode: "GINSENG API", // ajuste para o codigo do servico cadastrado no Fluig
ds.addRow(new Array("010106","12522", "LJ MACEIÓ SHOPPING EXPANSÃO","57031-530","AVENIDA GUSTAVO PAIVA","2990","MANGABEIRAS","MACEIÓ","AL","08.489.643/0016-39")); endpoint: "/base_pdvs",
ds.addRow(new Array("010107","12828", "LJ GBARBOSA S.MARIS","57036-550","AV ENG. PAULO BRANDÃO NOGUEIRA","S/N","JATIÚCA","MACEIÓ","AL","08.489.643/0017-10")); method: "get",
ds.addRow(new Array("010108","12838", "LJ RIO LARGO","57100-000","AV PRES GETULIO VARGAS","148","CENTRO","RIO LARGO","AL","08.489.643/0018-09")); timeoutService: "60000",
ds.addRow(new Array("010109","21647", "QUIOSQUE CARAJÁS MANGABEIRAS","57037-901","AV COMENDADOR GUSTAVO PAIVA","S/N","MANGABEIRAS","MACEIÓ","AL","08.489.643/0019-81")); params: {}
ds.addRow(new Array("010110","12817", "LJ SHOPPING PÁTIO","57073-470","AV MENINO MARCELO","3800","CIDADE UNIVERSITÁRIA","MACEIÓ","AL","08.489.643/0020-15")); };
ds.addRow(new Array("010111","12824", "QUIOSQUE GBARBOSA TABULEIRO","57061-110","AVENIDA MACEIÓ","S/N","TABULEIRO","MACEIÓ","AL","08.489.643/0021-04"));
ds.addRow(new Array("010112","12823", "LJ PONTA VERDE","57035-330","RUA DEPUTADO JOSÉ LAGES","431","PONTA VERDE","MACEIÓ","AL","08.489.643/0022-87"));
ds.addRow(new Array("010113","20858", "QUIOSQUE SUPER GIRO","57010-003","AVENIDA SIQUEIRA CAMPOS","1368","PRADO","MACEIÓ","AL","08.489.643/0023-68"));
ds.addRow(new Array("010114","12820", "LJ ATACADÃO TABULEIRO","57082-160","AV DOUTOR DURVAL DE GOIS MONTEIRO","12650","TABULEIRO","MACEIÓ","AL","08.489.643/0024-49"));
ds.addRow(new Array("010115","12830", "LJ LIVRAMENTO","57020-030","RUA DO LIVRAMENTO","24","CENTRO","MACEIÓ","AL","08.489.643/0025-20"));
ds.addRow(new Array("010117","19103", "LJ UNICOMPRA PONTA VERDE","57035-060","RUA DURVAL GUIMARÃES","S/N","PONTA VERDE","MACEIÓ","AL","08.489.643/0027-91"));
ds.addRow(new Array("010118","12826", "LJ ASSAÍ MANGABEIRAS","57037-532","AV COMENDADOR GUSTAVO PAIVA","3261","MANGABEIRAS","MACEIÓ","AL","08.489.643/0028-72"));
ds.addRow(new Array("010119","12829", "LJ JACINTINHO","57041-000","RUA CLETO CAMPELO","2394","JACINTINHO","MACEIÓ","AL","08.489.643/0029-53"));
ds.addRow(new Array("010120","12818", "LJ GBARBOSA SERRARIA","57046-000","AVENIDA MENINO MARCELO","9730","SERRARIA","MACEIÓ","AL","08.489.643/0030-97"));
ds.addRow(new Array("010121","13427", "LJ SHOPPING CIDADE","57055-000","AVENIDA FERNANDES LIMA","679","FAROL","MACEIÓ","AL","08.489.643/0031-78"));
ds.addRow(new Array("010124","14617", "LJ PARQUE SHOPPING","57038-000","AVENIDA GUSTAVO PAIVA","5945","CRUZ DAS ALMAS",",MACEIÓ","AL","08.489.643/0034-10"));
ds.addRow(new Array("010126","14668", "LJ MIX MATHEUS ANTARES","57038-410","AVENIDA MENINO MARCELO","5300","ANTARES","MACEIÓ","AL","08.489.643/0036-82"));
ds.addRow(new Array("010128","20006", "LJ SÃO SEBASTIÃO","43850-000","PRAÇA DOZE DE OUTUBRO","65","CENTRO","SÃO SEBASTIÃO DO PASSÉ","BA","08.489.643/0038-44"));
ds.addRow(new Array("010130","20009", "LJ CANDEIAS BAIXO","43815-050","AVENIDA ANTONIO PATTERSON","196","TRIÂNGULO","CANDEIAS","BA","08.489.643/0040-69"));
ds.addRow(new Array("010131","20005", "LJ CANDEIAS CIMA","43805-000","RUA 13 DE MAIO","147","CENTRO","CANDEIAS","BA","08.489.643/0041-40"));
ds.addRow(new Array("010132","20056", "LJ SIMÕES FILHO","43700-000","AV LUÍS EDUARDO MAGALHÃES","109","CENTRO","SIMÕES FILHO","BA","08.489.643/0042-20"));
ds.addRow(new Array("010133","20057", "LJ CONCEIÇÃO COITÉ","48730-000","RUA DR AMÂNCIO MOTA","30","CENTRO","CONCEIÃO DO COITÉ","BA","08.489.643/0043-01"));
ds.addRow(new Array("010134","20441", "LJ LAGARTO","49400-000","AVENIDA LEANDRO MACIEL","36","CENTRO","LAGARTO","SE","08.489.643/0044-92"));
ds.addRow(new Array("010135","20968", "HIB ITABAIANINHA","49290-000","PRAÇA OLÍMPIO CAMPOS","154","CENTRO","ITABAIANINHA","SE","08.489.643/0059-79"));
ds.addRow(new Array("010136","20969", "HIB MARECHAL DEODORO","57160-000","RUA DR TAVARES BASTOS","03","CENTRO","MARECHAL DEODORO","AL","08.489.643/0054-64"));
ds.addRow(new Array("010137","20970", "VD SÃO SEBASTIÃO","43850-000","PRAÇA DOZE DE OUTUBRO","116","CENTRO","SÃO SEBASTIÃO DO PASSÉ","BA","08.489.643/0050-30"));
ds.addRow(new Array("010138","20986", "HIB OLINDINA","48470-000","AVENIDA ANTONIO MANGABEIRA","84","CENTRO","OLINDINA","BA","08.489.643/0055-45"));
ds.addRow(new Array("010139","20988", "HIB QUEIMADAS","48860-000","PRAÇA CORONEL FRANCISCO LANTYER","21","CENTRO","QUEIMADAS","BA","08.489.643/0051-11"));
ds.addRow(new Array("010140","20989", "HIB ENTRE RIOS","48180-000","AVENIDA JURACY MAGALHÃES","320","CENTRO","ENTRE RIOS","BA","08.489.643/0056-26"));
ds.addRow(new Array("010141","20991", "HIB CAMPO ALEGRE","57250-000","RUA DO COMÉRCIO","49","CENTRO","CAMPO ALEGRE","AL","08.489.643/0061-93"));
ds.addRow(new Array("010142","20992", "ER CONCEIÇÃO COITÉ","48730-000","RUA DR AMANCIO MOTA","35","CENTRO","CONCEIÇÃO DO COITÉ","BA","08.489.643/0045-73"));
ds.addRow(new Array("010143","20993", "ER CANDEIAS","43815-010","AV ANTONIO PATTERSON","213","TRIANGULO","CANDEIAS","BA","08.489.643/0046-54"));
ds.addRow(new Array("010144","20994", "ER SIMÕES FILHO","43700-000","AV LUÍS EDUARDO MAGALHÃES","109","CENTRO","SIMÕES FILHO","BA","08.489.643/0047-35"));
ds.addRow(new Array("010145","20995", "ER LAGARTO","49400-000","AVENIDA LEANDRO MACIEL","36","CENTRO","LAGARTO","SE","08.489.643/0060-02"));
ds.addRow(new Array("010146","20996", "ER ANTARES","57083-048","AV ANTONIO LISBOA DE AMORIM","220","ANTARES","MACEIÓ","AL","08.489.643/0057-07"));
ds.addRow(new Array("010147","20997", "ER PITANGUINHA","57052-050","AVENIDA FERNANDES LIMA","840","PITANGUINHA","MACEIÓ","AL","08.489.643/0058-98"));
ds.addRow(new Array("010148","20998", "CD TABULEIRO","57073-482","ESTRADA DA CODEAL","770","TABULEIRO","MACEIÓ","AL","08.489.643/0062-74"));
ds.addRow(new Array("010149","20999", "HIB ESPLANADA","48370-000","PRAÇA LADISLAU CAVALCANTE","31","CENTRO","ESPLANADA","BA","08.489.643/0053-83"));
ds.addRow(new Array("010150","21000", "HIB SANTALUZ","48880-000","RUA RIO BRANCO","96","CENTRO","SANTALUZ","BA","08.489.643/0052-00"));
ds.addRow(new Array("010151","21001", "HIB RIO REAL","48330-000","PC SEN ANTONIO CARLOS MAGALHÃES","146","CENTRO","RIO REAL","BA","08.489.643/0049-05"));
ds.addRow(new Array("010152","21007", "TÔ QUE TÔ MACEIÓ CENTRO","57020-220","AVENIDA MOREIRA LIMA","293","CENTRO","MACEIÓ","AL","08.489.643/0048-16"));
ds.addRow(new Array("010153","21068", "LJ ATAKAREJO SIMÕES FILHO","43700-000","AV ENG ELMO SEREJO DE FARIAS","2073","CONJ HAB VIDA NOVA","SIMÕES FILHO","BA","08.489.643/0063-55"));
ds.addRow(new Array("010154","21277", "LJ GBARBOSA SOCORRO","49160-000","AVENIDA 1","13","CONJ JOAO ALVES FILHO","NOSSA SENHORA DO SOCORRO","SE","08.489.643/0065-17"));
ds.addRow(new Array("010155","21278", "ER SOCORRO","49140-000","AVENIDA COLETORA A","597","CONJ MARCOS FREIRE I","NOSSA SENHORA DO SOCORRO","SE","08.489.643/0066-06"));
ds.addRow(new Array("010156","21495", "HIB BARRA DOS COQUEIROS","49140-000","AVENIDA OCEANICA","506","ANTONIO PEDRO","BARRA DOS COQUEIROS","SE","08.489.643/0067-89"));
ds.addRow(new Array("010157","21296", "LJ SHOPPING PRÊMIO SOCORRO","49160-000","AVENIDA COLETORA A","S/N","CONJ MARCOS FREIRE I","NOSSA SENHORA DO SOCRRO","SE","08.489.643/0064-36"));
ds.addRow(new Array("010159","21381", "LJ CAPIM GROSSO","44695-000","AV ACM","121","CENTRO","CAPIM-GROSSO","BA","08.489.643/0069-40"));
ds.addRow(new Array("010160","21383", "ER CAPIM GROSSO","44695-000","AV ACM","121","CENTRO","CAPIM-GROSSO","BA","08.489.643/0070-84"));
ds.addRow(new Array("010161","21375", "HIB IPIRÁ","44600-000","AVENIDA CESÁR CABRAL","15","CENTRO","IPIRÁ","BA","08.489.643/0071-65"));
ds.addRow(new Array("010162","21624", "MIX MATEUS TRAPICHE","57010-000","AVENIDA SIQUEIRA CAMPOS","1295","PRADO","MACEIÓ","AL","08.489.643/0072-46"));
ds.addRow(new Array("010163","22448", "ER CAMPO ALEGRE","57250-000","RUA DO COMÉRCIO","49","CENTRO","CAMPO ALEGRE","AL","08.489.643/0073-27"));
ds.addRow(new Array("010164","23475", "MIX MATEUS TABULEIRO","57082-160","AV DOUTOR DURVAL DE GOIS MONTEIRO","9207","TABULEIRO","MACEIÓ","AL","08.489.643/0074-08"));
ds.addRow(new Array("010165","22541", "ER RIO LARGO","57100-000","RUA JUDITH PAIVA","445","CENTRO","RIO LARGO","AL","08.489.643/0075-99"));
ds.addRow(new Array("010166","AMG", "AMG SERRARIA","57046-000","AVENIDA MENINO MARCELO","S/N","SERRARIA","MACEIÓ","AL","08.489.643/0076-70"));
ds.addRow(new Array("010167","23156", "SHOPPING CENTRO SUL","49400-000","AV CONTORNO BR","3795","SÃO JOSE","LAGARTO","SE","08.489.643/0077-50"));
ds.addRow(new Array("030101","910173", "QDB PARQUE SHOPPING","57038-000","AVENIDA COMENDADOR GUSTAVO PAIVA","5945","CRUZ DAS ALMAS","MACEIÓ","AL","20.318.877/0001-32"));
ds.addRow(new Array("030102","910291", "QDB MACEIO SHOPPING","57037-532","AVENIDA COMENDADOR GUSTAVO PAIVA","2900","MANGABEIRAS","MACEIÓ","AL","20.318.877/0002-13"));
ds.addRow(new Array("070101","23713", "MATRIZ - ZEFERINO CORREIA","45000-520","RUA ZEFERINO CORREIA","17","CENTRO","VITORIA DA CONQUISTA","BA","14.378.160/0001-83"));
ds.addRow(new Array("070102","23711", "HIB LIMA GUERRA","45000-390","AL. LIMA GUERRA","04","CENTRO","VITORIA DA CONQUISTA","BA","14.378.160/0005-07"));
ds.addRow(new Array("070103","23712", "HIB CANDIDO SALES","24157-000","AL. RIO BRANCO","373","CENTRO","CÂNDIDO SALES","BA","14.378.160/0006-98"));
ds.addRow(new Array("070104","23705", "LOJA SHOPPING CONQUISTA SUL","45055-900","AVENIDA JURACY MAGALHAES","3340","FELICIA","VITORIA DA CONQUISTA","BA","14.378.160/0013-17"));
ds.addRow(new Array("070105","23703", " VD BARRA CHOCA","45120-000","AV GETULIO VARGAS","98","CENTRO","CHOCA","BA","14.378.160/0016-60"));
ds.addRow(new Array("070106","23707", "LOJA BRASIL","45051-070","AV ITABUNA","2724","BRASIL","VITORIA DA CONQUISTA","BA","14.378.160/0011-55"));
ds.addRow(new Array("070107","23706", "LOJA ASSAI FELICIA","45055-686","AV ANEL DE CONTORNO","S/N","FELICIA","VITORIA DA CONQUISTA","BA","14.378.160/0012-36"));
ds.addRow(new Array("070108","23709", "LOJA SHOPPING CONQUISTA","45055-900","AV JURACY MAGALHAES","3340","FELICIA","VITORIA DA CONQUISTA","BA","14.378.160/0009-30"));
ds.addRow(new Array("070109","23704", "VD CONDEUBA","46200-000","PC NOSSA SENHORA APARECIDA","08","CENTRO","CONDEÚBA","BA","14.378.160/0015-89"));
ds.addRow(new Array("070110","23703", "LOJA BARRA CHOCA","45120-000","AV GETULIO VARGAS","98","CENTRO","CHOCA","BA","14.378.160/0016-60"));
ds.addRow(new Array("070111","23702", "LOJA PANVICON CENTER","45000-230","AVENIDA LAURO DE FREITAS","142","CENTRO","VITORIA DA CONQUISTA","BA","14.378.160/0017-40"));
ds.addRow(new Array("070112","23701", "LOJA NOVE DE NOVEMBRO","45000-370","PC NOVE DE NOVEMBRO","10","CENTRO","VITORIA DA CONQUISTA","BA","14.378.160/0018-21"));
ds.addRow(new Array("070113","23665", "LOJA UNIVERSIDADE","45031-000","AV OLIVIA FLORES","2500","UNIVERSIDADE","VITORIA DA CONQUISTA","BA","14.378.160/0021-27"));
ds.addRow(new Array("010172","24253", "LOJA IRECÊ CENTRO","44860-051","RUA AUGUSTO NUNES PEREIRA","162","CENTRO","IRECÊ","BA","08.489.643/0095-32"));
ds.addRow(new Array("010171","24254", "LOJA JOÃO DOURADO","44920-000","AVENIDA JOAQUIM AUGUSTO","212D","CENTRO","JOÃO DOURADO","BA","08.489.643/0089-94"));
ds.addRow(new Array("010173","24254", "ER IRECE","44860-169","AVENIDA EDVALDO SANTOS LOPES","438","CENTRO","IRECE","BA","08.489.643/0094-51"));
ds.addRow(new Array("010169","24257", "HIB MIGUEL CALMON","44720-000","PRAÇA LAURO DE FREITAS","180","CENTRO","MIGUEL CALMON","BA","08.489.643/0088-03"));
ds.addRow(new Array("010170","24258", "LOJA ATACADAO IRECE","44868-520","AVENIDA ATACADAO NOVO IRECE","01","NOVO IRECÊ","IRECÊ","BA","08.489.643/0093-70"));
ds.addRow(new Array("010175","24268", "LOJA JACOBINA","44702-342","RUA CORONEL TEIXEIRA","44","CENTRO","JACOBINA","BA","08.489.643/0097-02"));
ds.addRow(new Array("010176","24269", "ER JACOBINA","44702-358","AVENIDA MANOEL NOVAES","178","CENTRO","JACOBINA","BA","08.489.643/0096-13"));
ds.addRow(new Array("010174","24293", "HIB MORRO DO CHAPEU","44850-970","RUA PROJETADA 01","203","CENTRO","MORRO DO CHAPEU","BA","08.489.643/0099-66"));
ds.addRow(new Array("010168","23813", "HIB VALENTE","48890-000","RUA CASTRO ALVES","174","CENTRO","VALENTE","BA","08.489.643/0078-31"));
ds.addRow(new Array("010177","23711", "ER CONQUISTA","45000-390","ALAMEDA LIMA GUERRA","174","CENTRO","VITORIA DA CONQUISTA","BA","08.489.643/0100-34"));
var vo = clientService.invoke(JSON.stringify(data));
var statusHttp = vo ? String(vo.getHttpStatusResult() || "") : "";
var retorno = vo ? String(vo.getResult() || "") : "";
if (!retorno) {
dataset.addRow(["", "Sem resposta da API (HTTP " + statusHttp + ")", "", "", "", "", "", "", "", "", "", "", ""]);
return dataset;
}
var objData = JSON.parse(retorno);
var success = !!objData.success;
var itens = objData.data || [];
if (!success || !itens.length) {
return ds; var msg = trim(objData.message) || trim(objData.error) || "Sem lojas retornadas";
dataset.addRow(["", msg + " (HTTP " + statusHttp + ")", "", "", "", "", "", "", "", "", "", "", ""]);
return dataset;
}
var filtros = parseConstraints(constraints);
var colleagueCache = {};
for (var i = 0; i < itens.length; i++) {
var item = itens[i] || {};
var pdv = trim(item["PDV"]);
var loja = trim(item["PDV DESC"]);
var responsavel = trim(item["GESTAO"]) || trim(item["GESTAO"]);
var regional = trim(item["SUPERVISOR"]) || trim(item["SUPERVISOR"]);
var uf = trim(item["UF"]);
var cidade = trim(item["CIDADE"]);
var status = trim(item["STATUS"]);
var canal = trim(item["CANAL"]);
var id = trim(item["id"]);
var protheus = trim(item["PROTHEUS"] || item["protheus"] || item["Protheus"]);
var loginLoja = pdv ? (pdv + ".ginseng") : "";
var colleagueId = resolveColleagueIdByLogin(loginLoja);
var userCreate = getUserCreateStatus(loginLoja, colleagueCache);
if (filtros.onlyAtivo && status.toUpperCase() !== "ATIVO") {
continue;
}
if (filtros.pdv && pdv !== filtros.pdv) {
continue;
}
if (filtros.loja && normalize(loja).indexOf(normalize(filtros.loja)) === -1) {
continue;
}
if (filtros.termoLivre) {
var blob = normalize([
pdv,
loja,
responsavel,
regional,
uf,
cidade
].join(" "));
if (blob.indexOf(normalize(filtros.termoLivre)) === -1) {
continue;
}
}
dataset.addRow([
pdv,
loja,
responsavel,
regional,
uf,
cidade,
status,
canal,
id,
protheus,
loginLoja,
colleagueId,
userCreate
]);
}
if (dataset.rowsCount === 0) {
dataset.addRow(["", "Sem lojas apos filtros (HTTP " + statusHttp + ")", "", "", "", "", "", "", "", "", "", "", ""]);
}
} catch (e) {
dataset = DatasetBuilder.newDataset();
dataset.addColumn("ERRO");
dataset.addRow([String(e)]);
}
return dataset;
} }
function onMobileSync(user) {
} function parseConstraints(constraints) {
var out = {
pdv: "",
loja: "",
onlyAtivo: false,
termoLivre: ""
};
if (!constraints) return out;
for (var i = 0; i < constraints.length; i++) {
var c = constraints[i];
if (!c || !c.fieldName) continue;
var name = String(c.fieldName);
var value = trim(c.initialValue);
if (name === "PDV" && value) out.pdv = value;
if (name === "LOJA" && value) out.loja = value;
if (name === "onlyAtivo" && value.toLowerCase() === "false") out.onlyAtivo = false;
// Zoom costuma enviar constraints variadas de busca; capturamos termo livre.
if (
value &&
name !== "onlyAtivo" &&
name !== "metadata#id" &&
name !== "metadata#active" &&
name !== "sqlLimit"
) {
var cleaned = cleanSearchValue(value);
if (cleaned && (!out.termoLivre || cleaned.length > out.termoLivre.length)) {
out.termoLivre = cleaned;
}
}
}
return out;
}
function trim(v) {
return String(v == null ? "" : v).trim();
}
function normalize(v) {
return trim(v).toLowerCase();
}
function cleanSearchValue(v) {
var s = trim(v);
// remove curingas comuns de busca do Zoom/like
s = s.replace(/[%*_]/g, "");
return trim(s);
}
function getUserCreateStatus(loginLoja, cache) {
var login = trim(loginLoja);
if (!login) return "NAO";
if (cache.hasOwnProperty(login)) return cache[login];
try {
var cLogin = DatasetFactory.createConstraint("login", login, login, ConstraintType.MUST);
var cActive = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST);
var ds = DatasetFactory.getDataset("colleague", null, [cLogin, cActive], null);
var exists = !!(ds && ds.rowsCount > 0);
// fallback para ambientes onde o identificador esta em colleagueId
if (!exists) {
var cId = DatasetFactory.createConstraint("colleaguePK.colleagueId", login, login, ConstraintType.MUST);
ds = DatasetFactory.getDataset("colleague", null, [cId, cActive], null);
exists = !!(ds && ds.rowsCount > 0);
}
cache[login] = exists ? "OK" : "NAO";
return cache[login];
} catch (e) {
cache[login] = "NAO";
return "NAO";
}
}
function resolveColleagueIdByLogin(loginLoja) {
var login = trim(loginLoja);
if (!login) return "";
try {
var cLogin = DatasetFactory.createConstraint("login", login, login, ConstraintType.MUST);
var cActive = DatasetFactory.createConstraint("active", "true", "true", ConstraintType.MUST);
var ds = DatasetFactory.getDataset("colleague", null, [cLogin, cActive], null);
if (ds && ds.rowsCount > 0) {
return trim(ds.getValue(0, "colleaguePK.colleagueId"));
}
} catch (e) {}
return "";
}

View File

@ -20,7 +20,7 @@ function createDataset(fields, constraints, sortFields) {
var data = { var data = {
companyId: "1", companyId: "1",
serviceCode: "Postprod", serviceCode: "Postprod",
endpoint: "/rest/uf_mata010/", endpoint: "/uf_mata010/",
method: "get", method: "get",
timeoutService: "60000", timeoutService: "60000",
params: {} params: {}

View File

@ -18,7 +18,7 @@ function createDataset(fields, constraints, sortFields) {
} }
log.info("Dados recebidos: " + jsonData); log.info("Dados recebidos: " + jsonData);
var url = "https://rest.grupoginseng.com.br/rest_teste/uf_mata010"; var url = "https://rest.grupoginseng.com.br/rest/uf_mata010";
var urlObj = new java.net.URL(url); var urlObj = new java.net.URL(url);
var httpConn = urlObj.openConnection(); var httpConn = urlObj.openConnection();

View File

@ -1,84 +0,0 @@
function onSync(lastSyncDate) {}
function createDataset(fields, constraints, sortFields) {
var dataset = DatasetBuilder.newDataset();
// Define as colunas do dataset
dataset.addColumn("CODIGO");
dataset.addColumn("DESCRICAO");
dataset.addColumn("CNPJ");
dataset.addColumn("ENDERECO");
dataset.addColumn("COMPLEMENTO");
dataset.addColumn("BAIRRO");
dataset.addColumn("CIDADE");
dataset.addColumn("ESTADO");
dataset.addColumn("CEP");
dataset.addColumn("CODIGO_MUNICIPIO");
dataset.addColumn("BPCS");
dataset.addColumn("LOJA");
var dataSource = "/jdbc/Tabeladeloja"; // ajuste se necessário
var ic = new javax.naming.InitialContext();
var ds = ic.lookup(dataSource);
var conn = ds.getConnection();
var stmt = null;
var rs = null;
try {
log.info("Iniciando execução do dataset...");
var sql = ""
+ " SELECT "
+ " M0_CODFIL, M0_FILIAL, M0_CGC, M0_ENDENT, M0_COMPENT, "
+ " M0_BAIRENT, M0_CIDENT, M0_ESTENT, M0_CEPENT, M0_CODMUN, M0_TEL_PO "
+ " FROM SYS_COMPANY "
+ " WHERE (M0_CODFIL LIKE '0101%' OR M0_CODFIL LIKE '03%') "
+ " AND D_E_L_E_T_ = ' '";
log.info("Query SQL: " + sql);
stmt = conn.prepareStatement(sql);
rs = stmt.executeQuery();
var vistos = {};
while (rs.next()) {
var codigo = rs.getString("M0_CODFIL");
var descricao = rs.getString("M0_FILIAL");
var cnpj = rs.getString("M0_CGC");
var endereco = rs.getString("M0_ENDENT");
var complemento = rs.getString("M0_COMPENT");
var bairro = rs.getString("M0_BAIRENT");
var cidade = rs.getString("M0_CIDENT");
var estado = rs.getString("M0_ESTENT");
var cep = rs.getString("M0_CEPENT");
var ibge = rs.getString("M0_CODMUN");
var bpcs = rs.getString("M0_TEL_PO");
var loja = (bpcs ? bpcs.trim() : "") + "-" + (descricao ? descricao.trim() : "");
if (!vistos[codigo]) {
vistos[codigo] = true;
dataset.addRow([
codigo, descricao, cnpj, endereco, complemento, bairro,
cidade, estado, cep, ibge, bpcs, loja
]);
}
}
if (Object.keys(vistos).length === 0) {
log.info("Nenhum registro encontrado para a consulta.");
}
} catch (e) {
log.error("Erro ao executar dataset: " + e.message);
} finally {
try { if (rs) rs.close(); } catch (e) { log.error(e.message); }
try { if (stmt) stmt.close(); } catch (e) { log.error(e.message); }
try { if (conn) conn.close(); } catch (e) { log.error(e.message); }
}
return dataset;
}
function onMobileSync(user) {}

View File

@ -1,98 +0,0 @@
function defineStructure() {
dataset.addColumn("CODIGO");
dataset.addColumn("DESCRICAO");
dataset.addColumn("CNPJ");
dataset.addColumn("ENDERECO");
dataset.addColumn("COMPLEMENTO");
dataset.addColumn("BAIRRO");
dataset.addColumn("CIDADE");
dataset.addColumn("ESTADO");
dataset.addColumn("CEP");
dataset.addColumn("CODIGO_MUNICIPIO");
dataset.addColumn("BPCS");
dataset.addColumn("LOJA");
}
function onSync(lastSyncDate) {}
function createDataset(fields, constraints, sortFields) {
var dataset = DatasetBuilder.newDataset();
var dataSource = "/jdbc/Tabeladeloja";
var ic = new javax.naming.InitialContext();
var ds = ic.lookup(dataSource);
var conn = ds.getConnection();
var stmt = null;
var rs = null;
try {
log.info("Iniciando execução do dataset...");
var sql = ""
+ " SELECT "
+ " M0_CODFIL, M0_FILIAL, M0_CGC, M0_ENDENT, M0_COMPENT, "
+ " M0_BAIRENT, M0_CIDENT, M0_ESTENT, M0_CEPENT, M0_CODMUN, M0_TEL_PO "
+ " FROM SYS_COMPANY "
+ " WHERE (M0_CODFIL LIKE '0101%' OR M0_CODFIL LIKE '03%') "
+ " AND D_E_L_E_T_ = ' '";
log.info("Query SQL: " + sql);
stmt = conn.prepareStatement(sql);
rs = stmt.executeQuery();
// As colunas aqui devem ter exatamente os MESMOS nomes do defineStructure:
dataset.addColumn("CODIGO");
dataset.addColumn("DESCRICAO");
dataset.addColumn("CNPJ");
dataset.addColumn("ENDERECO");
dataset.addColumn("COMPLEMENTO");
dataset.addColumn("BAIRRO");
dataset.addColumn("CIDADE");
dataset.addColumn("ESTADO");
dataset.addColumn("CEP");
dataset.addColumn("CODIGO_MUNICIPIO");
dataset.addColumn("BPCS");
dataset.addColumn("LOJA");
var vistos = {};
while (rs.next()) {
var codigo = rs.getString("M0_CODFIL");
var descricao = rs.getString("M0_FILIAL");
var cnpj = rs.getString("M0_CGC");
var endereco = rs.getString("M0_ENDENT");
var complemento = rs.getString("M0_COMPENT");
var bairro = rs.getString("M0_BAIRENT");
var cidade = rs.getString("M0_CIDENT");
var estado = rs.getString("M0_ESTENT");
var cep = rs.getString("M0_CEPENT");
var ibge = rs.getString("M0_CODMUN");
var bpcs = rs.getString("M0_TEL_PO");
var loja = (bpcs ? bpcs.trim() : "") + "-" + (descricao ? descricao.trim() : "");
if (!vistos[codigo]) {
vistos[codigo] = true;
dataset.addRow([
codigo, descricao, cnpj, endereco, complemento, bairro,
cidade, estado, cep, ibge, bpcs, loja
]);
}
}
if (Object.keys(vistos).length === 0) {
log.info("Nenhum registro encontrado para a consulta.");
}
} catch (e) {
log.error("Erro ao executar dataset: " + e.message);
} finally {
try { if (rs) rs.close(); } catch (e) { log.error(e.message); }
try { if (stmt) stmt.close(); } catch (e) { log.error(e.message); }
try { if (conn) conn.close(); } catch (e) { log.error(e.message); }
}
return dataset;
}
function onMobileSync(user) {}

View File

@ -1,7 +1,6 @@
function createDataset(fields, constraints, sortFields) { function createDataset(fields, constraints, sortFields) {
var dataset = DatasetBuilder.newDataset(); var dataset = DatasetBuilder.newDataset();
// Definir colunas que queremos no retorno
dataset.addColumn("C1_FILIAL"); dataset.addColumn("C1_FILIAL");
dataset.addColumn("C1_NUM"); dataset.addColumn("C1_NUM");
dataset.addColumn("C1_ITEM"); dataset.addColumn("C1_ITEM");
@ -15,6 +14,7 @@ function createDataset(fields, constraints, sortFields) {
dataset.addColumn("C1_CONTA"); dataset.addColumn("C1_CONTA");
dataset.addColumn("C1_SOLICIT"); dataset.addColumn("C1_SOLICIT");
dataset.addColumn("C1_EMISSAO"); dataset.addColumn("C1_EMISSAO");
dataset.addColumn("C1_APROV");
dataset.addColumn("C1_COTACAO"); dataset.addColumn("C1_COTACAO");
dataset.addColumn("C1_PEDIDO"); dataset.addColumn("C1_PEDIDO");
dataset.addColumn("C1_ITEMPED"); dataset.addColumn("C1_ITEMPED");
@ -23,8 +23,11 @@ function createDataset(fields, constraints, sortFields) {
dataset.addColumn("hora_consulta"); dataset.addColumn("hora_consulta");
dataset.addColumn("sucesso"); dataset.addColumn("sucesso");
function emptyRow() {
return ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "false"];
}
try { try {
// 🔎 Captura o número da SC passado como constraint
var numeroSC = null; var numeroSC = null;
if (constraints != null) { if (constraints != null) {
for (var i = 0; i < constraints.length; i++) { for (var i = 0; i < constraints.length; i++) {
@ -35,17 +38,16 @@ function createDataset(fields, constraints, sortFields) {
} }
if (!numeroSC) { if (!numeroSC) {
dataset.addRow(["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Erro: número SC não informado"]); dataset.addRow(emptyRow());
return dataset; return dataset;
} }
// ⚙️ Monta requisição para o Protheus
var data = { var data = {
companyId: "1", companyId: "1",
serviceCode: "Postprod", // ajuste conforme seu serviço cadastrado serviceCode: "Postprod",
endpoint: "/rest/uf_mata110/" + numeroSC, endpoint: "/UF_MATA110/" + numeroSC,
method: "get", method: "get",
timeoutService: "10000", timeoutService: "60000",
headers: { headers: {
"Content-Type": "application/json" "Content-Type": "application/json"
} }
@ -58,9 +60,7 @@ function createDataset(fields, constraints, sortFields) {
var result = JSON.parse(response.getResult()); var result = JSON.parse(response.getResult());
if (result.sucesso && result.solicitacoes && result.solicitacoes.length > 0) { if (result.sucesso && result.solicitacoes && result.solicitacoes.length > 0) {
var sc = result.solicitacoes[0]; // pega a primeira solicitação retornada var sc = result.solicitacoes[0];
// ⚠️ Trata a cotação: ignora valores default
var cotacao = sc.C1_COTACAO || ""; var cotacao = sc.C1_COTACAO || "";
if (cotacao == "000000" || cotacao == "000001") { if (cotacao == "000000" || cotacao == "000001") {
cotacao = ""; cotacao = "";
@ -80,6 +80,7 @@ function createDataset(fields, constraints, sortFields) {
sc.C1_CONTA || "", sc.C1_CONTA || "",
sc.C1_SOLICIT || "", sc.C1_SOLICIT || "",
sc.C1_EMISSAO || "", sc.C1_EMISSAO || "",
sc.C1_APROV || "",
cotacao, cotacao,
sc.C1_PEDIDO || "", sc.C1_PEDIDO || "",
sc.C1_ITEMPED || "", sc.C1_ITEMPED || "",
@ -89,13 +90,13 @@ function createDataset(fields, constraints, sortFields) {
"true" "true"
]); ]);
} else { } else {
dataset.addRow(["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "false"]); dataset.addRow(emptyRow());
} }
} else { } else {
dataset.addRow(["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "false"]); dataset.addRow(emptyRow());
} }
} catch (e) { } catch (e) {
dataset.addRow(["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Erro: " + e.message]); dataset.addRow(emptyRow());
} }
return dataset; return dataset;

View File

@ -58,27 +58,281 @@
margin-bottom: 24px; margin-bottom: 24px;
} }
.change-weight { font-weight: 400 !important; } .change-weight { font-weight: 400 !important; }
.sc-status-panel {
margin-top: 15px;
padding: 18px;
border: 1px solid #d8e1e8;
border-radius: 12px;
background: #f7fafc;
box-shadow: 0 2px 10px rgba(12, 50, 74, 0.08);
}
.sc-primary-grid,
.sc-secondary-grid {
display: grid;
grid-template-columns: repeat(3, minmax(220px, 1fr));
gap: 12px;
}
.sc-primary-grid {
margin-bottom: 12px;
}
.sc-secondary-grid {
gap: 8px 12px;
}
.sc-info {
background: #fff;
border-radius: 10px;
padding: 12px 14px;
min-height: 72px;
}
.sc-info--primary {
border-left: 4px solid #04506b;
box-shadow: inset 0 0 0 1px #d9e4ec;
}
.sc-info--secondary {
box-shadow: inset 0 0 0 1px #e3ebf2;
opacity: .96;
}
.sc-info--clickable {
cursor: pointer;
transition: box-shadow .2s ease, transform .2s ease;
}
.sc-info--clickable:hover {
transform: translateY(-1px);
box-shadow: inset 0 0 0 1px #c8d9e7, 0 4px 12px rgba(8, 47, 72, 0.1);
}
.sc-label {
font-size: 11px;
color: #4d6073;
letter-spacing: .04em;
text-transform: uppercase;
margin-bottom: 4px;
}
.sc-value {
font-size: 15px;
font-weight: 600;
color: #24313f;
word-break: break-word;
}
.sc-info--primary .sc-value {
font-size: 30px;
line-height: 1.1;
color: #102a43;
font-weight: 700;
letter-spacing: .01em;
}
.sc-hint {
display: block;
margin-top: 6px;
font-size: 11px;
color: #5f7386;
letter-spacing: .02em;
}
.sc-value.badge {
display: inline-flex;
align-items: center;
min-height: 30px;
padding: 6px 12px;
border-radius: 999px;
font-size: 12px;
font-weight: 700;
line-height: 1;
}
.sc-timeline-wrap {
margin-top: 16px;
padding-top: 0;
border-top: 1px solid transparent;
transition: background-color .25s ease, max-height .25s ease, opacity .25s ease, padding-top .25s ease;
max-height: 0;
opacity: 0;
overflow: hidden;
pointer-events: none;
}
.sc-timeline-wrap.is-open {
padding-top: 14px;
border-top-color: #d7e2eb;
max-height: 640px;
opacity: 1;
pointer-events: auto;
}
.sc-timeline-wrap.is-focus {
background: #f2f9ff;
border-radius: 8px;
}
.sc-timeline-title {
margin: 0 0 10px;
color: #12344d;
font-size: 14px;
font-weight: 700;
letter-spacing: .01em;
}
.sc-timeline {
list-style: none;
margin: 0;
padding: 0 0 0 18px;
position: relative;
}
.sc-timeline:before {
content: "";
position: absolute;
left: 5px;
top: 2px;
bottom: 2px;
width: 2px;
background: #c8d8e6;
}
.sc-timeline-item {
position: relative;
padding: 0 0 14px 16px;
}
.sc-timeline-item:last-child {
padding-bottom: 0;
}
.sc-timeline-item:before {
content: "";
position: absolute;
left: -18px;
top: 4px;
width: 10px;
height: 10px;
border-radius: 50%;
background: #92a9bf;
box-shadow: 0 0 0 2px #92a9bf;
border: 2px solid #fff;
}
.sc-timeline-item.done:before {
background: #1ab04a;
box-shadow: 0 0 0 2px #1ab04a;
}
.sc-timeline-item.pending:before {
background: #e6a229;
box-shadow: 0 0 0 2px #e6a229;
}
.sc-timeline-title-row {
display: flex;
align-items: baseline;
gap: 8px;
flex-wrap: wrap;
}
.sc-timeline-event {
color: #18354f;
font-size: 14px;
font-weight: 700;
}
.sc-timeline-time {
color: #6b7f92;
font-size: 12px;
font-weight: 500;
}
.sc-timeline-detail {
margin-top: 3px;
color: #3e556b;
font-size: 13px;
}
#tbCotacao {
table-layout: fixed;
width: 100%;
margin-bottom: 0;
}
#tbCotacao thead th {
background: #eef3f8;
color: #3b4d5f;
font-weight: 700;
}
#tbCotacao tbody tr:nth-child(odd) {
background: #f9fbfd;
}
#tbCotacao tbody td,
#tbCotacao thead th,
#tbCotacao tfoot td {
vertical-align: middle;
}
#tbCotacao th:nth-child(3),
#tbCotacao th:nth-child(4),
#tbCotacao th:nth-child(5),
#tbCotacao td:nth-child(3),
#tbCotacao td:nth-child(4),
#tbCotacao td:nth-child(5) {
text-align: right;
}
#tbCotacao td:nth-child(3) input,
#tbCotacao td:nth-child(4) input,
#tbCotacao td:nth-child(5) input {
text-align: right;
}
#tbCotacao tfoot .sc-total-label {
text-align: right;
font-weight: 700;
background: #edf3f8;
color: #324a60;
}
#tbCotacao tfoot .sc-total-value {
background: #edf3f8;
color: #12344d;
font-size: 15px;
font-weight: 700;
text-align: right;
}
@media (max-width: 992px) {
.sc-primary-grid,
.sc-secondary-grid {
grid-template-columns: repeat(2, minmax(180px, 1fr));
}
}
@media (max-width: 640px) {
.sc-primary-grid,
.sc-secondary-grid {
grid-template-columns: 1fr;
}
.sc-info--primary .sc-value {
font-size: 24px;
}
}
</style> </style>
</head> </head>
<body> <body>
<div class="fluig-style-guide" style="background-color:white;"> <div class="fluig-style-guide" style="background-color:white;">
<h1 id="rcorners" style="margin:0;">Solicitação de compra</h1> <h1 id="rcorners" style="margin:0;">Solicitação de compra</h1>
<ul id="wizard-steps" class="steps m-t-20">
<li class="step-item"><span class="step-bullet"></span><span class="step-label">Solicitação</span></li>
<li class="step-item"><span class="step-bullet"></span><span class="step-label">Validando necessidade</span></li>
<li class="step-item"><span class="step-bullet"></span><span class="step-label">Solicitando...</span></li>
<li class="step-item"><span class="step-bullet"></span><span class="step-label">Dados Adicionais</span></li>
<li class="step-item"><span class="step-bullet"></span><span class="step-label">Indicar Cotação</span></li>
<li class="step-item"><span class="step-bullet"></span><span class="step-label">Confirmação Cotação</span></li>
<li class="step-item"><span class="step-bullet"></span><span class="step-label">Aprovação Ccusto</span></li>
<li class="step-item"><span class="step-bullet"></span><span class="step-label">Aprovação GERF</span></li>
<li class="step-item"><span class="step-bullet"></span><span class="step-label">Aprovação CEO</span></li>
<li class="step-item"><span class="step-bullet"></span><span class="step-label">Receber Produto</span></li>
<li class="step-item"><span class="step-bullet"></span><span class="step-label">Problema</span></li>
<li class="step-item"><span class="step-bullet"></span><span class="step-label">Fim</span></li>
</ul>
<form name="form" role="form"> <form name="form" role="form">
<!-- Campos ocultos --> <!-- Campos ocultos -->
<input type="hidden" id="WKNumProces" name="WKNumProces"> <input type="hidden" id="WKNumProces" name="WKNumProces">
@ -115,10 +369,6 @@
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<h2><i class="flaticon flaticon-tests-central icon-md" aria-hidden="true"></i>Dados da solicitação</h2> <h2><i class="flaticon flaticon-tests-central icon-md" aria-hidden="true"></i>Dados da solicitação</h2>
<button type="button" class="btn btn-info btn-sm" id="btnHistorico"
style="background-color:#04506b; border-color:#04506b;">
<i class="fluigicon fluigicon-eye-open"></i> Ver Histórico
</button>
<h6>Dados referentes aos responsáveis pela abertura e pela solicitação do atual processo.</h6> <h6>Dados referentes aos responsáveis pela abertura e pela solicitação do atual processo.</h6>
</div> </div>
</div> </div>
@ -154,11 +404,16 @@
<input type="zoom" class="form-control" name="estabelecimento" id="estabelecimento" data-zoom="{ <input type="zoom" class="form-control" name="estabelecimento" id="estabelecimento" data-zoom="{
'displayKey':'LOJA', 'displayKey':'LOJA',
'placeholder': 'Buscar nome do estabelecimento ou filial', 'placeholder': 'Buscar nome do estabelecimento ou filial',
'datasetId':'dsSysCompan', 'datasetId':'dsFiliais',
'fields':[ 'fields':[
{'field':'LOJA','label':'Filial','standard':'true','search':'true'}, {'field':'LOJA','label':'Filial','standard':'true','search':'true'},
{'field':'CNPJ','label':'CNPJ','standard':'true'}, {'field':'REGIONAL','label':'REGIONAL','standard':'true'},
{'field':'ESTADO','label':'ESTADO','standard':'true'} {'field':'UF','label':'UF','standard':'true'},
{'field':'RESPONSAVEL_LOJA','label':'RESPONSAVEL_LOJA','visible':'false'},
{'field':'PDV','label':'PDV','visible':'false'},
{'field':'PROTHEUS','label':'PROTHEUS','visible':'false'},
{'field':'COLLEAGUE_ID','label':'COLLEAGUE_ID','visible':'false'},
{'field':'LOGIN_LOJA','label':'LOGIN_LOJA','visible':'false'}
] ]
}"> }">
<p class="help-block" id="estabelecimentoFilial" style="display:none;position:absolute;font-size:12px;"> <p class="help-block" id="estabelecimentoFilial" style="display:none;position:absolute;font-size:12px;">
@ -166,19 +421,9 @@
</p> </p>
</div> </div>
<div class="form-group col-md-3 col-xs-12 divCentroCusto alertaCampo"> <div class="form-group col-md-3 col-xs-12 divCentroCusto alertaCampo">
<label for="zoom">Centro de custo <span class="required text-danger"><strong>*</strong></span></label> <label>Gestor da loja <span class="required text-danger"><strong>*</strong></span></label>
<input type="zoom" class="form-control" name="centro_custo" id="centro_custo" data-zoom="{ <input type="text" class="form-control" name="centro_custo" id="centro_custo"
'displayKey':'centroCusto', placeholder="Será preenchido automaticamente ao selecionar a filial" readonly>
'placeholder': 'Buscar número ou nome do centro de custo',
'datasetId':'ds_centroCusto',
'fields':[
{'field':'codigoCentroCusto','label':'Código','standard':'true','search':'true'},
{'field':'centroCusto','label':'Nome','search':'true'},
{'field':'gestorCentroCusto','label':'gestorCentroCusto','visible':'false'},
{'field':'idGestor','label':'idGestor','visible':'false'},
{'field':'emailGestor','label':'emailGestor','visible':'false'}
]
}">
<p class="help-block" id="centroCusto" style="display:none;position:absolute;font-size:12px;"> <p class="help-block" id="centroCusto" style="display:none;position:absolute;font-size:12px;">
Preenchimento obrigatório Preenchimento obrigatório
</p> </p>
@ -364,37 +609,53 @@
</div> </div>
</div> </div>
<div class="card" style="margin-top:15px; border-radius:8px; box-shadow:0 2px 5px rgba(0,0,0,0.1);"> <div class="sc-status-panel">
<div class="card-body" style="padding:15px; background-color:#f9f9f9;"> <div class="sc-primary-grid">
<div class="row"> <div class="sc-info sc-info--primary sc-info--clickable" id="cardNumeroSC" title="Clique para ver a linha do tempo da SC">
<div class="col-md-4"> <div class="sc-label">Número SC</div>
<p><strong>Número:</strong> <span id="numeroSCProtheus_label">-</span></p> <div class="sc-value" id="numeroSCProtheus_label">-</div>
</div> <span class="sc-hint" id="cardNumeroSCHint">Clique para ver a linha do tempo</span>
<div class="col-md-4">
<p><strong>Status:</strong> <span id="statusSCProtheus_label" class="badge bg-secondary">-</span></p>
</div>
<div class="col-md-4">
<p><strong>Solicitante:</strong> <span id="solicitanteSCProtheus_label">-</span></p>
</div>
<div class="col-md-4">
<p><strong>Emissão:</strong> <span id="emissaoSCProtheus_label">-</span></p>
</div>
<div class="col-md-4">
<p><strong>Qtd. Itens:</strong> <span id="qtdItensSCProtheus_label">-</span></p>
</div>
<div class="col-md-4">
<p><strong>Data da aprovação:</strong> <span id="dataCadastroSCProtheus_label">-</span> às <span id="horaCadastroSCProtheus_label">-</span></p>
</div>
<div class="col-md-4">
<p><strong>Status:</strong> <span id="statusSC_label" class="badge bg-secondary">-</span></p>
</div>
<div class="col-md-4">
<p><strong>Cotação:</strong> <span id="cotacaoSC_label">-</span></p>
</div>
<div class="col-md-4">
<p><strong>Pedido:</strong> <span id="pedidoSC_label">-</span></p>
</div>
</div> </div>
<div class="sc-info sc-info--primary">
<div class="sc-label">Status Cadastro</div>
<span class="sc-value badge bg-secondary" id="statusSCProtheus_label">-</span>
</div>
<div class="sc-info sc-info--primary">
<div class="sc-label">Andamento</div>
<span class="sc-value badge bg-secondary" id="statusSC_label">-</span>
</div>
</div>
<div class="sc-secondary-grid">
<div class="sc-info sc-info--secondary">
<div class="sc-label">Solicitante</div>
<div class="sc-value" id="solicitanteSCProtheus_label">-</div>
</div>
<div class="sc-info sc-info--secondary">
<div class="sc-label">Emissão</div>
<div class="sc-value" id="emissaoSCProtheus_label">-</div>
</div>
<div class="sc-info sc-info--secondary">
<div class="sc-label">Qtd. Itens</div>
<div class="sc-value" id="qtdItensSCProtheus_label">-</div>
</div>
<div class="sc-info sc-info--secondary">
<div class="sc-label">Data do Cadastro</div>
<div class="sc-value"><span id="dataCadastroSCProtheus_label">-</span> às <span id="horaCadastroSCProtheus_label">-</span></div>
</div>
<div class="sc-info sc-info--secondary">
<div class="sc-label">Cotação</div>
<div class="sc-value" id="cotacaoSC_label">-</div>
</div>
<div class="sc-info sc-info--secondary">
<div class="sc-label">Pedido</div>
<div class="sc-value" id="pedidoSC_label">-</div>
</div>
</div>
<div class="sc-timeline-wrap" id="scTimelineSection">
<h4 class="sc-timeline-title">Linha do tempo da SC</h4>
<ul class="sc-timeline" id="scTimeline"></ul>
</div> </div>
</div> </div>
</div> </div>
@ -430,6 +691,13 @@
<td><input type="checkbox" name="selecionado" id="selecionado" value="S"></td> <td><input type="checkbox" name="selecionado" id="selecionado" value="S"></td>
</tr> </tr>
</tbody> </tbody>
<tfoot>
<tr>
<td colspan="4" class="sc-total-label">Total selecionado</td>
<td class="sc-total-value" id="valorTotalCotacaoLabel">R$ 0,00</td>
<td></td>
</tr>
</tfoot>
</table> </table>
</div> </div>
</div> </div>

View File

@ -46,15 +46,21 @@ function recalcTotal() {
function setSelectedZoomItem(selectedItem) { function setSelectedZoomItem(selectedItem) {
if (selectedItem.inputId === "estabelecimento") { if (selectedItem.inputId === "estabelecimento") {
// joga o código da filial (cnpj, etc.) // dsFiliais: guarda dados da filial e define gestor da próxima atividade
$("#filialdest").val(selectedItem.CNPJ); // supondo que o dataset dsSysCompany devolva o campo CNPJ var codigoProtheus = String(selectedItem.PROTHEUS || selectedItem.protheus || "").trim();
$("#filialest").val(selectedItem.ESTADO); // supondo que o dataset dsSysCompany devolva o campo ESTADO
$("#filialprotheus").val(selectedItem.CODIGO); // supondo que o dataset dsSysCompany devolva o campo CODIGO $("#filialdest").val(selectedItem.LOJA || "");
} $("#filialest").val(selectedItem.UF || "");
if (selectedItem.inputId === "centro_custo") { $("#filialprotheus").val(codigoProtheus);
// joga o código da filial (cnpj, etc.) $("#centro_custo").val(selectedItem.RESPONSAVEL_LOJA || selectedItem.LOJA || "");
$("#gestor_cc").val(selectedItem.idGestor); // supondo que o dataset Centro_custo devolva o campo GestorCentroCusto $("#codigocentroCusto").val(codigoProtheus);
$("#codigocentroCusto").val(selectedItem.codigoCentroCusto); // supondo que o dataset Centro_custo devolva o campo GestorCentroCusto
var gestorLoja = (selectedItem.COLLEAGUE_ID || selectedItem.LOGIN_LOJA || "").trim();
$("#gestor_cc").val(gestorLoja);
if (!codigoProtheus) {
console.warn("Filial selecionada sem campo PROTHEUS no dsFiliais.");
}
} }
@ -62,14 +68,18 @@ function setSelectedZoomItem(selectedItem) {
function removedZoomItem(removedItem) { function removedZoomItem(removedItem) {
if (removedItem.inputId === "estabelecimento") { if (removedItem.inputId === "estabelecimento") {
// Quando remover a empresa, limpa os campos relacionados // Quando remover a filial, limpa os campos relacionados
$("#filialDesc").val(''); $("#filialdest").val("");
$("#filialest").val(''); $("#filialest").val("");
$("#filialprotheus").val("");
$("#centro_custo").val("");
$("#codigocentroCusto").val("");
$("#gestor_cc").val("");
} }
} }
/* ========= Config ========= */ /* ========= Config ========= */
const DATASET_PRODUTOS = "dsProd"; // dataset de produtos const DATASET_PRODUTOS = "dsComprasProdutos"; // dataset de produtos
let todosProdutos = []; let todosProdutos = [];
let paginaAtual = 1; let paginaAtual = 1;
const itensPorPagina = 10; const itensPorPagina = 10;
@ -120,7 +130,10 @@ function carregaListaProdutos(filtro) {
// Só chama o dataset se ainda não carregou nada // Só chama o dataset se ainda não carregou nada
if (todosProdutos.length === 0) { if (todosProdutos.length === 0) {
let dataset = DatasetFactory.getDataset(DATASET_PRODUTOS, null, null, null); let dataset = DatasetFactory.getDataset(DATASET_PRODUTOS, null, null, null);
todosProdutos = dataset && dataset.values ? dataset.values : []; const values = dataset && dataset.values ? dataset.values : [];
todosProdutos = values
.map(normalizarProduto)
.filter(p => p.codigo && p.descricao);
console.log("Produtos carregados do dataset:", todosProdutos.length); console.log("Produtos carregados do dataset:", todosProdutos.length);
} }
@ -171,10 +184,10 @@ function renderizaProdutos(filtro) {
</tr>`; </tr>`;
} else { } else {
produtosPagina.forEach(produto => { produtosPagina.forEach(produto => {
const codigo = escapeHTML(produto['codigo']); const codigo = escapeHTML(produto.codigo);
const descricao = escapeHTML(produto['descricao']); const descricao = escapeHTML(produto.descricao);
const um = escapeHTML(produto['medida'] || ''); const um = escapeHTML(produto.medida || '');
const preco = produto['ultimo_preco'] || '0,00'; const preco = produto.ultimo_preco || '0,00';
html += ` html += `
<tr> <tr>
@ -200,6 +213,15 @@ function renderizaProdutos(filtro) {
renderizaPaginacao(produtosFiltrados.length); renderizaPaginacao(produtosFiltrados.length);
} }
function normalizarProduto(row) {
return {
codigo: String(row.B1_COD || row.codigo || "").trim(),
descricao: String(row.B1_DESC || row.descricao || "").trim(),
medida: String(row.B1_UM || row.medida || "").trim(),
ultimo_preco: String(row.B1_UPRC || row.ultimo_preco || "0,00").trim()
};
}
function renderizaPaginacao(totalItens) { function renderizaPaginacao(totalItens) {
@ -375,29 +397,325 @@ $(function () {
}); });
function valorCampo(id) {
return String($("#" + id).val() || "").trim();
}
function setLabel(id, valor) {
var texto = String(valor || "").trim();
$("#" + id).text(texto || "-");
}
function badgeClassByStatus(status) {
var s = String(status || "").toLowerCase();
if (!s) return "badge bg-secondary";
if (s.indexOf("erro") >= 0 || s.indexOf("reprov") >= 0 || s.indexOf("cancel") >= 0) return "badge bg-danger";
if (s.indexOf("sucesso") >= 0 || s.indexOf("aprov") >= 0 || s.indexOf("gerad") >= 0 || s.indexOf("liberad") >= 0) return "badge bg-success";
if (s.indexOf("aguard") >= 0 || s.indexOf("pend") >= 0) return "badge bg-warning";
return "badge bg-info";
}
function setBadge(selector, valor) {
var texto = String(valor || "").trim() || "-";
$(selector)
.text(texto)
.removeClass("bg-secondary bg-success bg-danger bg-warning bg-info")
.addClass(badgeClassByStatus(texto));
}
function normalizarStatusCadastro(statusCadastro, numeroSC) {
var numero = String(numeroSC || "").trim();
var status = String(statusCadastro || "").trim();
var s = status.toLowerCase();
if (!numero) return status;
if (!status) return "SC cadastrada com sucesso";
if (s.indexOf("sucesso") >= 0 || s.indexOf("cadastr") >= 0) return "SC cadastrada com sucesso";
return status;
}
function normalizarAndamento(andamento, cotacao, pedido) {
var atual = String(andamento || "").trim();
if (pedido) return "Pedido gerado";
if (cotacao && (!atual || atual.toLowerCase().indexOf("pedido") < 0)) return "Cotacao gerada";
return atual;
}
function normalizarDataProtheus(data) {
var d = String(data || "").trim();
if (/^\d{8}$/.test(d)) {
return d.substring(6, 8) + "/" + d.substring(4, 6) + "/" + d.substring(0, 4);
}
return d;
}
function limparNumeroDocumento(valor) {
var v = String(valor || "").trim();
if (!v || /^0+$/.test(v)) return "";
return v;
}
function comporDataHora(data, hora) {
var d = String(data || "").trim();
var h = String(hora || "").trim();
if (d && h && h !== "-") return d + " as " + h;
return d || h || "";
}
function montarEventosTimelineSC(dados) {
var eventos = [];
var momentoSolicitacao = comporDataHora(dados.dataCadastro, dados.horaCadastro);
var momentoSC = dados.emissao || momentoSolicitacao;
eventos.push({
classe: (dados.numero || dados.solicitante || momentoSolicitacao) ? "done" : "pending",
titulo: "Solicitacao criada",
momento: momentoSolicitacao,
detalhe: dados.solicitante ? "Solicitante: " + dados.solicitante : ""
});
if (dados.numero) {
eventos.push({
classe: "done",
titulo: "SC " + dados.numero + " cadastrada",
momento: momentoSC,
detalhe: dados.statusCadastro ? "Status: " + dados.statusCadastro : ""
});
} else {
eventos.push({
classe: "pending",
titulo: "Aguardando geracao da SC",
momento: "",
detalhe: "A SC sera exibida assim que for criada no Protheus."
});
}
if (dados.cotacao) {
eventos.push({
classe: "done",
titulo: "Cotacao " + dados.cotacao + " gerada",
momento: "",
detalhe: "Cotacao disponivel para analise."
});
} else {
eventos.push({
classe: "pending",
titulo: "Aguardando cotacao",
momento: "",
detalhe: "Ainda nao existe cotacao vinculada a SC."
});
}
if (dados.pedido) {
eventos.push({
classe: "done",
titulo: "Pedido " + dados.pedido + " gerado",
momento: "",
detalhe: "Compra convertida em pedido."
});
} else {
eventos.push({
classe: "pending",
titulo: "Aguardando pedido",
momento: "",
detalhe: "O pedido sera criado apos a aprovacao final da cotacao."
});
}
return eventos;
}
function renderizarTimelineSC(dados) {
var eventos = montarEventosTimelineSC(dados);
var html = eventos.map(function (evento) {
var titulo = escapeHTML(evento.titulo);
var momento = escapeHTML(evento.momento || "");
var detalhe = escapeHTML(evento.detalhe || "");
var classe = evento.classe === "done" ? "done" : "pending";
return [
'<li class="sc-timeline-item ' + classe + '">',
' <div class="sc-timeline-title-row">',
' <span class="sc-timeline-event">' + titulo + '</span>',
momento ? (' <span class="sc-timeline-time">' + momento + '</span>') : "",
" </div>",
detalhe ? (' <div class="sc-timeline-detail">' + detalhe + "</div>") : "",
"</li>"
].join("");
}).join("");
$("#scTimeline").html(html);
}
function focarTimelineSC() {
var secao = $("#scTimelineSection");
if (!secao.length) return;
secao.addClass("is-focus");
setTimeout(function () {
secao.removeClass("is-focus");
}, 900);
try {
secao.get(0).scrollIntoView({ behavior: "smooth", block: "nearest" });
} catch (e) {
// fallback para navegadores sem smooth scroll
secao.get(0).scrollIntoView();
}
}
function abrirTimelineSC() {
var secao = $("#scTimelineSection");
if (!secao.length) return;
secao.addClass("is-open");
$("#cardNumeroSCHint").text("Clique para ocultar a linha do tempo");
}
function fecharTimelineSC() {
var secao = $("#scTimelineSection");
if (!secao.length) return;
secao.removeClass("is-open is-focus");
$("#cardNumeroSCHint").text("Clique para ver a linha do tempo");
}
function alternarTimelineSC() {
var secao = $("#scTimelineSection");
if (!secao.length) return;
if (secao.hasClass("is-open")) {
fecharTimelineSC();
return;
}
abrirTimelineSC();
focarTimelineSC();
}
function montarStatusAndamento(scRow, cotacao, pedido) {
if (pedido) return "Pedido gerado";
if (cotacao) return "Cotacao gerada";
var statusApi = String(scRow.STATUS || "").trim();
if (statusApi) return statusApi;
var aprov = String(scRow.C1_APROV || "").trim().toUpperCase();
if (aprov === "B") return "Aguardando cotacao";
if (aprov === "L") return "Liberada";
if (aprov === "R") return "Reprovada";
if (aprov) return "Status Protheus: " + aprov;
return "";
}
function preencherResumoSC() {
var numero = valorCampo("numeroSCProtheus");
var statusCadastro = valorCampo("statusSCProtheus");
var solicitante = valorCampo("solicitanteSCProtheus");
var emissao = normalizarDataProtheus(valorCampo("emissaoSCProtheus"));
var qtdItens = valorCampo("qtdItensSCProtheus");
var dataCadastro = normalizarDataProtheus(valorCampo("dataCadastroSCProtheus"));
var horaCadastro = valorCampo("horaCadastroSCProtheus");
var cotacao = limparNumeroDocumento(valorCampo("cotacaoSCProtheus"));
var pedido = limparNumeroDocumento(valorCampo("pedidoSCProtheus"));
var andamento = valorCampo("statusAtendimento");
var statusCadastroPadrao = normalizarStatusCadastro(statusCadastro, numero);
if (!andamento && numero) {
if (pedido) andamento = "Pedido gerado";
else if (cotacao) andamento = "Cotacao gerada";
else andamento = "Em andamento";
}
andamento = normalizarAndamento(andamento, cotacao, pedido);
setLabel("numeroSCProtheus_label", numero);
setLabel("solicitanteSCProtheus_label", solicitante);
setLabel("emissaoSCProtheus_label", emissao);
setLabel("qtdItensSCProtheus_label", qtdItens);
setLabel("dataCadastroSCProtheus_label", dataCadastro);
setLabel("horaCadastroSCProtheus_label", horaCadastro);
setLabel("cotacaoSC_label", cotacao);
setLabel("pedidoSC_label", pedido);
setBadge("#statusSCProtheus_label", statusCadastroPadrao || (numero ? "SC cadastrada com sucesso" : ""));
setBadge("#statusSC_label", andamento);
renderizarTimelineSC({
numero: numero,
statusCadastro: statusCadastroPadrao,
andamento: andamento,
solicitante: solicitante,
emissao: emissao,
dataCadastro: dataCadastro,
horaCadastro: horaCadastro,
cotacao: cotacao,
pedido: pedido
});
}
function consultarAndamentoSC() {
var numero = valorCampo("numeroSCProtheus");
if (!numero || typeof DatasetFactory === "undefined" || typeof ConstraintType === "undefined") {
return;
}
try {
var cNumero = DatasetFactory.createConstraint("numeroSCProtheus", numero, numero, ConstraintType.MUST);
var ds = DatasetFactory.getDataset("ds_consultaSC", null, [cNumero], null);
var row = (ds && ds.values && ds.values.length > 0) ? ds.values[0] : null;
if (!row) return;
if (String(row.sucesso || "").toLowerCase() !== "true") return;
var cotacao = limparNumeroDocumento(row.C1_COTACAO);
var pedido = limparNumeroDocumento(row.C1_PEDIDO);
if (cotacao) $("#cotacaoSCProtheus").val(cotacao);
if (pedido) $("#pedidoSCProtheus").val(pedido);
if (row.C1_SOLICIT) $("#solicitanteSCProtheus").val(String(row.C1_SOLICIT).trim());
if (row.C1_EMISSAO) $("#emissaoSCProtheus").val(normalizarDataProtheus(row.C1_EMISSAO));
var andamento = montarStatusAndamento(row, cotacao, pedido);
if (andamento) $("#statusAtendimento").val(andamento);
preencherResumoSC();
} catch (e) {
console.warn("Nao foi possivel consultar andamento da SC no ds_consultaSC:", e);
}
}
$(document).ready(function () { $(document).ready(function () {
// Quando carregar a página, já pinta o status se tiver valor nos inputs preencherResumoSC();
let status = $("#statusSCProtheus").val() || ""; consultarAndamentoSC();
let badgeClass = "badge bg-secondary";
if (status.toLowerCase().includes("sucesso")) badgeClass = "badge bg-success"; $(document).on("click", "#cardNumeroSC", function () {
if (status.toLowerCase().includes("erro")) badgeClass = "badge bg-danger"; alternarTimelineSC();
});
$("#statusSCProtheus_label")
.text(status || "-")
.removeClass()
.addClass(badgeClass);
}); });
function parseNumeroCotacao(valor) {
var texto = String(valor || "").trim();
if (!texto) return 0;
if (texto.indexOf(",") >= 0) {
texto = texto.replace(/\./g, "").replace(",", ".");
}
texto = texto.replace(/[^\d.-]/g, "");
return parseFloat(texto) || 0;
}
function recalcularTotalCotacao() { function recalcularTotalCotacao() {
var soma = 0; var soma = 0;
$("input[name^='selecionado___']").each(function() { $("input[name^='selecionado___']").each(function() {
var idx = $(this).attr("id").split("___")[1]; var idCampo = String($(this).attr("id") || "");
if (idCampo.indexOf("___") < 0) return;
var idx = idCampo.split("___")[1];
// pega qtd e preço da linha // pega qtd e preço da linha
var qtd = parseFloat($("#qtdc___" + idx).val() || "0"); var qtd = parseNumeroCotacao($("#qtdc___" + idx).val() || "0");
var preco = parseFloat($("#preco___" + idx).val() || "0"); var preco = parseNumeroCotacao($("#preco___" + idx).val() || "0");
// calcula total da linha // calcula total da linha
var total = qtd * preco; var total = qtd * preco;
@ -413,6 +731,7 @@ function recalcularTotalCotacao() {
// Atualiza o hidden e dispara change pro Fluig gravar // Atualiza o hidden e dispara change pro Fluig gravar
$("#valorTotalCotacao").val(soma.toFixed(2)).trigger("change"); $("#valorTotalCotacao").val(soma.toFixed(2)).trigger("change");
$("#valorTotalCotacaoLabel").text(floatToBRL(soma));
} }
// dispara sempre que marcar/desmarcar // dispara sempre que marcar/desmarcar
$(document).on("change", "input[name^='selecionado___']", function() { $(document).on("change", "input[name^='selecionado___']", function() {

View File

@ -1,283 +1,55 @@
function displayFields(form, customHTML) { function displayFields(form, customHTML) {
var activity = parseInt(getValue("WKNumState"), 10);
var activity = getValue('WKNumState'); var userId = getValue("WKUser");
var userId = getValue('WKUser'); var hoje = new java.text.SimpleDateFormat("dd/MM/yyyy").format(new java.util.Date());
form.setShowDisabledFields(true); form.setShowDisabledFields(true);
form.setHidePrintLink(true); form.setHidePrintLink(true);
form.setValue("WKNumProces", getValue('WKNumProces')); form.setValue("WKNumProces", getValue("WKNumProces"));
form.setValue("activity", activity); form.setValue("activity", String(activity));
form.setValue("formMode", form.getFormMode()); form.setValue("formMode", form.getFormMode());
form.setValue("empresa", getValue("WKCompany")); form.setValue("empresa", getValue("WKCompany"));
var c1 = DatasetFactory.createConstraint("colleagueId", userId, userId, ConstraintType.MUST); var nomeUsuario = "";
var filter = new Array(c1); var emailUsuario = "";
var fields = new Array("colleagueName");
var retorno = DatasetFactory.getDataset("colleague", fields, filter, null);
//requester try {
if (activity == 0) { var c1 = DatasetFactory.createConstraint("colleagueId", userId, userId, ConstraintType.MUST);
form.setValue("usuario_abertura", retorno.getValue(0, "colleagueName")); var constraints = [c1];
form.setValue("requesterMail", retorno.getValue(0, "mail")); var fields = ["colleagueName", "mail"];
form.setValue("requesterId", userId); var dsColleague = DatasetFactory.getDataset("colleague", fields, constraints, null);
} else {
form.setValue("currentUserName", retorno.getValue(0, "colleagueName")); if (dsColleague && dsColleague.rowsCount > 0) {
form.setValue("currentUsermail", retorno.getValue(0, "mail")); nomeUsuario = dsColleague.getValue(0, "colleagueName") || "";
form.setValue("currentUserId", userId); emailUsuario = dsColleague.getValue(0, "mail") || "";
}
} catch (e) {
log.error("[displayFields] Erro ao consultar colleague: " + e);
} }
// ✅ Quando for atividade de aprovação do gestor form.setValue("currentUserName", nomeUsuario);
if (activity == 121) { form.setValue("currentUsermail", emailUsuario);
var hoje = new java.text.SimpleDateFormat("dd/MM/yyyy").format(new java.util.Date()); form.setValue("currentUserId", userId);
form.setValue("user_validacao_gestor", retorno.getValue(0, "colleagueName"));
if (activity === 0 || activity === 1) {
form.setValue("requesterId", userId);
if (emailUsuario) {
form.setValue("requesterMail", emailUsuario);
}
if (!form.getValue("usuarioSolicitante") && nomeUsuario) {
form.setValue("usuarioSolicitante", nomeUsuario);
}
if (!form.getValue("emailSolicitante") && emailUsuario) {
form.setValue("emailSolicitante", emailUsuario);
}
}
if (activity === 121) {
if (nomeUsuario) {
form.setValue("user_validacao_gestor", nomeUsuario);
}
form.setValue("data_validacao_gestor", hoje); form.setValue("data_validacao_gestor", hoje);
} }
}
if (activity == 133) {
var hoje = new java.text.SimpleDateFormat("dd/MM/yyyy").format(new java.util.Date());
form.setValue("gestor_validacao_aprova", retorno.getValue(0, "colleagueName"));
form.setValue("data_validacao_aprova_gestor", hoje);
}
if (activity == 137) {
var hoje = new java.text.SimpleDateFormat("dd/MM/yyyy").format(new java.util.Date());
form.setValue("user_validacao_aprova", retorno.getValue(0, "colleagueName"));
form.setValue("data_validacao_aprova", hoje);
}
if (activity == 147) {
var hoje = new java.text.SimpleDateFormat("dd/MM/yyyy").format(new java.util.Date());
form.setValue("gerf_validacao_aprova", retorno.getValue(0, "colleagueName"));
form.setValue("data_validacao_aprova_gerf", hoje);
}
if (activity == 18) {
var hoje = new java.text.SimpleDateFormat("dd/MM/yyyy").format(new java.util.Date());
form.setValue("userValidacaoItens", retorno.getValue(0, "colleagueName"));
form.setValue("dataValidacaoItens", hoje);
}
// ✅ Injetar dados da SC do Protheus (se já tiverem sido preenchidos no servicetask)
var camposSC = [
"numeroSCProtheus",
"statusSCProtheus",
"solicitanteSCProtheus",
"emissaoSCProtheus",
"qtdItensSCProtheus",
"dataCadastroSCProtheus",
"horaCadastroSCProtheus"
];
camposSC.forEach(function(campo) {
var valor = form.getValue(campo);
if (valor) {
customHTML.append("<script>$('#" + campo + "_label').text('" + valor + "');</script>");
}
});
// cor no status
var status = form.getValue("statusSCProtheus");
if (status) {
var badgeClass = "badge bg-secondary";
if (status.toLowerCase().indexOf("sucesso") >= 0) badgeClass = "badge bg-success";
if (status.toLowerCase().indexOf("erro") >= 0) badgeClass = "badge bg-danger";
customHTML.append("<script>$('#statusSCProtheus_label').removeClass().addClass('" + badgeClass + "').text('" + status + "');</script>");
}
// Consultar informações adicionais da SC no Protheus
var numSC = form.getValue("numeroSCProtheus");
if (numSC) {
try {
var c1 = DatasetFactory.createConstraint("numeroSCProtheus", numSC, numSC, ConstraintType.MUST);
var ds = DatasetFactory.getDataset("ds_consultaSC", null, [c1], null);
if (ds && ds.rowsCount > 0) {
var status = ds.getValue(0, "STATUS") || "";
var cotacao = ds.getValue(0, "C1_COTACAO") || "";
var pedido = ds.getValue(0, "C1_PEDIDO") || "";
// grava nos hidden inputs
form.setValue("statusAtendimento", status);
form.setValue("cotacaoSCProtheus", cotacao);
form.setValue("pedidoSCProtheus", pedido);
// mostra nos cards (HTML)
customHTML.append("<script>$('#statusSC_label').text('" + status + "');</script>");
customHTML.append("<script>$('#cotacaoSC_label').text('" + cotacao + "');</script>");
customHTML.append("<script>$('#pedidoSC_label').text('" + pedido + "');</script>");
}
} catch (e) {
log.error("❌ Erro ao consultar dataset ds_consultaSC: " + e);
}
}
try {
var msgs = [];
var numeroSC = form.getValue("numeroSCProtheus");
var cotacaoSC = form.getValue("cotacaoSCProtheus");
var pedidoSC = form.getValue("pedidoSCProtheus");
if (numeroSC) msgs.push("📌 Gerou SC Protheus nº " + numeroSC);
if (cotacaoSC) msgs.push("📌 SC originou Cotação nº " + cotacaoSC);
if (pedidoSC) msgs.push("📌 Cotação finalizou → Pedido nº " + pedidoSC);
if (msgs.length === 0) {
msgs.push(" Nenhum dado de integração Protheus encontrado no formulário");
}
// Monta conteúdo HTML do histórico
var htmlHistorico = "<ul class='hist-list'>";
for (var i = 0; i < msgs.length; i++) {
htmlHistorico += "<li class='hist-item'>" + msgs[i] + "</li>";
}
htmlHistorico += "</ul>";
// Script para abrir modal ao clicar no botão
customHTML.append("<script>");
customHTML.append("$('#btnHistorico').off('click').on('click', function(){");
customHTML.append(" var myModal = FLUIGC.modal({");
customHTML.append(" title: 'Histórico do Processo',");
customHTML.append(" content: `" + htmlHistorico + "`,");
customHTML.append(" id: 'modalHistorico',");
customHTML.append(" size: 'large'");
customHTML.append(" });");
customHTML.append("});");
customHTML.append("</script>");
} catch (e) {
log.error("[displayFields] Erro ao montar histórico: " + e);
}
var numCot = form.getValue("cotacaoSCProtheus");
var numSC = form.getValue("numeroSCProtheus"); // pega a SC atual
function formatCurrency(v) {
if (!v || isNaN(v)) return "R$ 0,00";
var num = parseFloat(v).toFixed(2);
return "R$ " + num.replace(".", ",").replace(/\B(?=(\d{3})+(?!\d))/g, ".");
}
function formatDate(v) {
if (!v || v.length !== 8) return v || "";
var y = v.substring(0,4);
var m = v.substring(4,6);
var d = v.substring(6,8);
return d + "/" + m + "/" + y;
}
function formatPrazo(v) {
if (!v) return "";
return v + " dias úteis";
}
if (!numCot) {
customHTML.append("<script>");
customHTML.append("$('#cotacaoContainer').html('<p>⚠️ Cotação não informada no formulário.</p>');");
customHTML.append("</script>");
return;
}
var c = DatasetFactory.createConstraint("numCotacao", numCot, numCot, ConstraintType.MUST);
var ds = DatasetFactory.getDataset("dsComprasCotacao", null, [c], null);
var precoFormatado = formatCurrency(preco);
var totalFormatado = formatCurrency(total);
if (ds && ds.rowsCount > 0) {
for (var i = 0; i < ds.rowsCount; i++) {
var item = ds.getValue(i, "C8_ITEM");
var desc = ds.getValue(i, "B1_DESC");
var qtd = ds.getValue(i, "C8_QUANT");
var preco = ds.getValue(i, "C8_PRECO");
var total = ds.getValue(i, "C8_TOTAL");
// adiciona linha na tabela pai-filho
customHTML.append("<script>");
customHTML.append("var idx = wdkAddChild('tbCotacao');");
customHTML.append("$('#item___'+idx).val('" + item + "');");
customHTML.append("$('#produto___'+idx).val('" + desc + "');");
customHTML.append("$('#qtdc___'+idx).val('" + qtd + "');");
customHTML.append("$('#preco___' + idx).val('" + precoFormatado + "');");
customHTML.append("$('#total___' + idx).val('" + totalFormatado + "');");
customHTML.append("</script>");
}
} else {
customHTML.append("<script>$('#tbCotacao tbody').html('<tr><td colspan=6>⏳ Nenhum item encontrado.</td></tr>');</script>");
}
try {
var numPedido = form.getValue("pedidoSCProtheus"); // hidden no formulário
if (!numPedido) {
customHTML.append("<script>");
customHTML.append("$('#espelhoPedido').html('<span class=\"badge bg-warning\">⏳ O pedido ainda não foi criado</span>');");
customHTML.append("</script>");
return;
}
var c = DatasetFactory.createConstraint("numeroPed", numPedido, numPedido, ConstraintType.MUST);
var ds = DatasetFactory.getDataset("dsComprasGateway", null, [c], null);
if (!ds || ds.rowsCount === 0) {
customHTML.append("<script>");
customHTML.append("$('#espelhoPedido').html('<span class=\"badge bg-warning\">⏳ O pedido ainda não foi criado</span>');");
customHTML.append("</script>");
return;
}
var html = "";
for (var i = 0; i < ds.rowsCount; i++) {
var rowNum = ds.getValue(i, "C7_NUM");
var desc = ds.getValue(i, "B1_DESC");
var qtd = ds.getValue(i, "C7_QUANT");
var valor = ds.getValue(i, "C7_TOTAL");
var un = ds.getValue(i, "B1_UM");
var pr = ds.getValue(i, "C7_DATPRF");
html += "<div class='pedido-card'>"
+ " <div class='pedido-header'>Pedido nº " + (rowNum || "-") + "</div>"
+ " <div class='pedido-grid'>"
+ " <div class='pedido-box'><b>Descrição</b><br>" + (desc || "-") + "</div>"
+ " <div class='pedido-box'><b>Quantidade</b><br>" + parseInt(qtd || 0) + " " + (un || "") + "</div>"
+ " <div class='pedido-box'><b>Valor</b><br>" + formatCurrency(valor) + "</div>"
+ " <div class='pedido-box'><b>Data de Entrega</b><br>" + formatDate(pr) + "</div>"
+ " </div>"
+ "</div>";
}
customHTML.append("<script>");
customHTML.append("$('#espelhoPedido').html(" + JSON.stringify(html) + ");");
customHTML.append("</script>");
} catch (e) {
var msg = "❌ Erro displayFields Pedido: " + (e && e.message ? e.message : e);
log.error(msg);
customHTML.append("<script>");
customHTML.append("console.error(" + JSON.stringify(msg) + ");"); // aparece no console do navegador
customHTML.append("$('#espelhoPedido').html('<span class=\"badge bg-danger\">" + msg + "</span>');");
customHTML.append("</script>");
}
// Se estou na atividade do Gestor do CC (ex: 133)
if (activity == 133) {
// Copia a justificativa do solicitante para o campo de exibição
form.setValue("observacoesdosolicitante", form.getValue("observacoes"));
}
// Se estou na atividade do GERF (ex: 147)
if (activity == 147) {
form.setValue("justi_decisao__soli", form.getValue("observacoes")); // solicitante
form.setValue("justi_decisao_gc", form.getValue("justi_decisao_aprova_gestor")); // gestor
}
// Se estou na atividade do CEO (ex: 158)
if (activity == 158) {
form.setValue("justi_decisao_solic", form.getValue("observacoes")); // solicitante
form.setValue("justi_decisaogc", form.getValue("justi_decisao_aprova_gestor")); // gestor
form.setValue("justi_decisao_gerf", form.getValue("justi_decisao_aprova_gerente")); // gerente financeiro
}
}

View File

@ -2,6 +2,12 @@ function validateForm(form){
var msg = ""; var msg = "";
var activity = getValue("WKNumState"); var activity = getValue("WKNumState");
if (activity == 0 || activity == 1) {
if (form.getValue("gestor_cc") == "") {
msg += "Não foi possível identificar o gestor da loja selecionada. Selecione a filial novamente.\n";
}
}
// Só valida "Justificativa do Gestor" quando estiver na atividade do gestor (ex.: 5) // Só valida "Justificativa do Gestor" quando estiver na atividade do gestor (ex.: 5)
if (activity == 121) { if (activity == 121) {
if (form.getValue("justi_decisao_gestor") == "") { if (form.getValue("justi_decisao_gestor") == "") {
@ -12,4 +18,4 @@ function validateForm(form){
if (msg != "") { if (msg != "") {
throw msg; throw msg;
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_461" class="java.beans.XMLDecoder"> <java version="1.8.0_202" class="java.beans.XMLDecoder">
<object class="java.util.HashMap"> <object class="java.util.HashMap">
<void method="put">
<string>camposFormulario, documentoId = 2297</string>
<array class="java.lang.String" length="0"/>
</void>
<void method="put"> <void method="put">
<string>volume</string> <string>volume</string>
<array class="java.lang.String" length="1"> <array class="java.lang.String" length="1">
@ -13,81 +9,6 @@
</void> </void>
</array> </array>
</void> </void>
<void method="put">
<string>mecanismoGrupo</string>
<object class="java.util.ArrayList">
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>Aprovadores Compras Nvl 3</string>
</void>
<void property="groupId">
<string>AprovadoresComprasNvl3</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>Compras Indiretos</string>
</void>
<void property="groupId">
<string>ComprasIndiretos</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>Obras e manutenção</string>
</void>
<void property="groupId">
<string>Manutencao</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>Motoristas</string>
</void>
<void property="groupId">
<string>Motoristas</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>Recrutamento</string>
</void>
<void property="groupId">
<string>Recrutamento</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>Requisitantes de Vaga</string>
</void>
<void property="groupId">
<string>Requisitantesdevaga</string>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.tds.ecm.foundation.ws.GroupDto">
<void property="groupDescription">
<string>Tecnologia e Comunicação</string>
</void>
<void property="groupId">
<string>TIC</string>
</void>
</object>
</void>
</object>
</void>
<void method="put"> <void method="put">
<string>expediente</string> <string>expediente</string>
<array class="java.lang.String" length="4"> <array class="java.lang.String" length="4">
@ -107,7 +28,7 @@
</void> </void>
<void method="put"> <void method="put">
<string>mecanismo</string> <string>mecanismo</string>
<array class="[Ljava.lang.Object;" length="10"> <array class="[Ljava.lang.Object;" length="12">
<void index="0"> <void index="0">
<array class="java.lang.Object" length="2"> <array class="java.lang.Object" length="2">
<void index="0"> <void index="0">
@ -129,6 +50,26 @@
</array> </array>
</void> </void>
<void index="2"> <void index="2">
<array class="java.lang.Object" length="2">
<void index="0">
<string>dpf_di_emp_filial_filtro</string>
</void>
<void index="1">
<string>dpf_di_emp_filial_filtro</string>
</void>
</array>
</void>
<void index="3">
<array class="java.lang.Object" length="2">
<void index="0">
<string>dpf_di_inicio_diadmissao</string>
</void>
<void index="1">
<string>dpf_di_inicio_diadmissao</string>
</void>
</array>
</void>
<void index="4">
<array class="java.lang.Object" length="2"> <array class="java.lang.Object" length="2">
<void index="0"> <void index="0">
<string>Atribuição por Executor de Atividade</string> <string>Atribuição por Executor de Atividade</string>
@ -138,7 +79,7 @@
</void> </void>
</array> </array>
</void> </void>
<void index="3"> <void index="5">
<array class="java.lang.Object" length="2"> <array class="java.lang.Object" length="2">
<void index="0"> <void index="0">
<string>Atribuição por Grupo</string> <string>Atribuição por Grupo</string>
@ -148,7 +89,7 @@
</void> </void>
</array> </array>
</void> </void>
<void index="4"> <void index="6">
<array class="java.lang.Object" length="2"> <array class="java.lang.Object" length="2">
<void index="0"> <void index="0">
<string>Atribuição por Grupos do Colaborador</string> <string>Atribuição por Grupos do Colaborador</string>
@ -158,7 +99,7 @@
</void> </void>
</array> </array>
</void> </void>
<void index="5"> <void index="7">
<array class="java.lang.Object" length="2"> <array class="java.lang.Object" length="2">
<void index="0"> <void index="0">
<string>mecCustomAprov</string> <string>mecCustomAprov</string>
@ -168,7 +109,7 @@
</void> </void>
</array> </array>
</void> </void>
<void index="6"> <void index="8">
<array class="java.lang.Object" length="2"> <array class="java.lang.Object" length="2">
<void index="0"> <void index="0">
<string>Atribuição por Papel</string> <string>Atribuição por Papel</string>
@ -178,7 +119,7 @@
</void> </void>
</array> </array>
</void> </void>
<void index="7"> <void index="9">
<array class="java.lang.Object" length="2"> <array class="java.lang.Object" length="2">
<void index="0"> <void index="0">
<string>Atribuição para um Grupo</string> <string>Atribuição para um Grupo</string>
@ -188,7 +129,7 @@
</void> </void>
</array> </array>
</void> </void>
<void index="8"> <void index="10">
<array class="java.lang.Object" length="2"> <array class="java.lang.Object" length="2">
<void index="0"> <void index="0">
<string>Atribuição para um Papel</string> <string>Atribuição para um Papel</string>
@ -198,7 +139,7 @@
</void> </void>
</array> </array>
</void> </void>
<void index="9"> <void index="11">
<array class="java.lang.Object" length="2"> <array class="java.lang.Object" length="2">
<void index="0"> <void index="0">
<string>Atribuição por Usuário</string> <string>Atribuição por Usuário</string>
@ -210,482 +151,5 @@
</void> </void>
</array> </array>
</void> </void>
<void method="put">
<string>forms</string>
<object class="java.util.LinkedList">
<void method="add">
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
<void property="datasetName">
<string>FLUIGADHOC</string>
</void>
<void property="documentDescription">
<string>FLUIGADHOC</string>
</void>
<void property="documentId">
<int>3</int>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
<void property="datasetName">
<string>FLUIGADHOCPROCESS</string>
</void>
<void property="documentDescription">
<string>FLUIGADHOCPROCESS</string>
</void>
<void property="documentId">
<int>4</int>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
<void property="datasetName">
<string>totvsflow_dataset_tipo_ocorrencia</string>
</void>
<void property="documentDescription">
<string>totvsflow_dataset_tipo_ocorrencia</string>
</void>
<void property="documentId">
<int>14</int>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
<void property="datasetName">
<string>totvsflow_abertura_chamado</string>
</void>
<void property="documentDescription">
<string>totvsflow_abertura_chamado</string>
</void>
<void property="documentId">
<int>15</int>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
<void property="datasetName">
<string>DSFormulariodeAberturadechamado</string>
</void>
<void property="documentDescription">
<string>Formulário de Abertura de chamado</string>
</void>
<void property="documentId">
<int>20</int>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
<void property="datasetName">
<string>Abertura_de_chamados</string>
</void>
<void property="documentDescription">
<string>Solicitação de abertura de chamados</string>
</void>
<void property="documentId">
<int>21</int>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
<void property="datasetName">
<string>DSvistoriadeServico</string>
</void>
<void property="documentDescription">
<string>vistoriadeServico</string>
</void>
<void property="documentId">
<int>24</int>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
<void property="datasetName">
<string>DSFormulariodeReservadesala</string>
</void>
<void property="documentDescription">
<string>Formulário de Reserva de sala</string>
</void>
<void property="documentId">
<int>34</int>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
<void property="datasetName">
<string>totvsflow_dataset_centrocusto</string>
</void>
<void property="documentDescription">
<string>totvsflow_dataset_centrocusto</string>
</void>
<void property="documentId">
<int>103</int>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
<void property="datasetName">
<string>totvsflow_dataset_cadastro_item</string>
</void>
<void property="documentDescription">
<string>totvsflow_dataset_cadastro_item</string>
</void>
<void property="documentId">
<int>104</int>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
<void property="datasetName">
<string>totvsflow_dataset_estabelecimento</string>
</void>
<void property="documentDescription">
<string>totvsflow_dataset_estabelecimento</string>
</void>
<void property="documentId">
<int>105</int>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
<void property="datasetName">
<string>totvsflow_solicitacao_compras</string>
</void>
<void property="documentDescription">
<string>totvsflow_solicitacao_compras</string>
</void>
<void property="documentId">
<int>165</int>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
<void property="datasetName">
<string>aberturadechamado_manutencao</string>
</void>
<void property="documentDescription">
<string>aberturadechamado_manutencao</string>
</void>
<void property="documentId">
<int>400</int>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
<void property="datasetName">
<string>Solicitacao_transferencia</string>
</void>
<void property="documentDescription">
<string>Solicitacao_transferencia</string>
</void>
<void property="documentId">
<int>590</int>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
<void property="datasetName">
<string>recrutamento</string>
</void>
<void property="documentDescription">
<string>recrutamento</string>
</void>
<void property="documentId">
<int>823</int>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
<void property="datasetName">
<string>kit_aniversariantes</string>
</void>
<void property="documentDescription">
<string>Aniversariantes</string>
</void>
<void property="documentId">
<int>7690</int>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
<void property="datasetName">
<string>kit_cardapio</string>
</void>
<void property="documentDescription">
<string>Cardápio do Dia</string>
</void>
<void property="documentId">
<int>7695</int>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
<void property="datasetName">
<string>kit_convenios</string>
</void>
<void property="documentDescription">
<string>Convênios</string>
</void>
<void property="documentId">
<int>7703</int>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
<void property="datasetName">
<string>kit_news</string>
</void>
<void property="documentDescription">
<string>Notícias</string>
</void>
<void property="documentId">
<int>7709</int>
</void>
</object>
</void>
<void method="add">
<object class="com.totvs.technology.ecmrestclient.cardindexpublisher.FormVO">
<void property="datasetName">
<string>compras_digital</string>
</void>
<void property="documentDescription">
<string>compras_digital</string>
</void>
<void property="documentId">
<int>9305</int>
</void>
</object>
</void>
</object>
</void>
<void method="put">
<string>camposFormulario, documentoId = 9305</string>
<array class="java.lang.String" length="69">
<void index="0">
<string>activity</string>
</void>
<void index="1">
<string>centro_custo</string>
</void>
<void index="2">
<string>ceo_validacao_aprova</string>
</void>
<void index="3">
<string>codigocentroCusto</string>
</void>
<void index="4">
<string>Codproduto</string>
</void>
<void index="5">
<string>cotacaoSCProtheus</string>
</void>
<void index="6">
<string>currentUserId</string>
</void>
<void index="7">
<string>currentUsermail</string>
</void>
<void index="8">
<string>currentUserName</string>
</void>
<void index="9">
<string>dataCadastroSCProtheus</string>
</void>
<void index="10">
<string>dataNec</string>
</void>
<void index="11">
<string>dataValidacaoItens</string>
</void>
<void index="12">
<string>data_validacao_aprova</string>
</void>
<void index="13">
<string>data_validacao_aprova_ceo</string>
</void>
<void index="14">
<string>data_validacao_aprova_gerf</string>
</void>
<void index="15">
<string>data_validacao_aprova_gestor</string>
</void>
<void index="16">
<string>data_validacao_gestor</string>
</void>
<void index="17">
<string>descProduto</string>
</void>
<void index="18">
<string>emailSolicitante</string>
</void>
<void index="19">
<string>emissaoSCProtheus</string>
</void>
<void index="20">
<string>empresa</string>
</void>
<void index="21">
<string>estabelecimento</string>
</void>
<void index="22">
<string>fdComprovante</string>
</void>
<void index="23">
<string>filialdest</string>
</void>
<void index="24">
<string>filialest</string>
</void>
<void index="25">
<string>filialprotheus</string>
</void>
<void index="26">
<string>fnComprovante</string>
</void>
<void index="27">
<string>formMode</string>
</void>
<void index="28">
<string>gerf_validacao_aprova</string>
</void>
<void index="29">
<string>gestor_cc</string>
</void>
<void index="30">
<string>gestor_validacao_aprova</string>
</void>
<void index="31">
<string>horaCadastroSCProtheus</string>
</void>
<void index="32">
<string>item</string>
</void>
<void index="33">
<string>justificativaDecisaoItens</string>
</void>
<void index="34">
<string>justificativaValidaProblema</string>
</void>
<void index="35">
<string>justi_decisao_aprova</string>
</void>
<void index="36">
<string>justi_decisao_aprova_ceo</string>
</void>
<void index="37">
<string>justi_decisao_aprova_gerente</string>
</void>
<void index="38">
<string>justi_decisao_aprova_gestor</string>
</void>
<void index="39">
<string>justi_decisao_gestor</string>
</void>
<void index="40">
<string>moreInfo</string>
</void>
<void index="41">
<string>numeroSCProtheus</string>
</void>
<void index="42">
<string>observacoes</string>
</void>
<void index="43">
<string>pedidoSCProtheus</string>
</void>
<void index="44">
<string>preco</string>
</void>
<void index="45">
<string>produto</string>
</void>
<void index="46">
<string>produtoCod</string>
</void>
<void index="47">
<string>produtoDesc</string>
</void>
<void index="48">
<string>produtoLink</string>
</void>
<void index="49">
<string>qtd</string>
</void>
<void index="50">
<string>qtdc</string>
</void>
<void index="51">
<string>qtdItensSCProtheus</string>
</void>
<void index="52">
<string>quantidade</string>
</void>
<void index="53">
<string>requesterId</string>
</void>
<void index="54">
<string>requesterMail</string>
</void>
<void index="55">
<string>selecionado</string>
</void>
<void index="56">
<string>solicitanteSCProtheus</string>
</void>
<void index="57">
<string>statusAtendimento</string>
</void>
<void index="58">
<string>statusSCProtheus</string>
</void>
<void index="59">
<string>tipoSolicitacao</string>
</void>
<void index="60">
<string>total</string>
</void>
<void index="61">
<string>urgencia</string>
</void>
<void index="62">
<string>userValidacaoItens</string>
</void>
<void index="63">
<string>user_validacao_aprova</string>
</void>
<void index="64">
<string>user_validacao_gestor</string>
</void>
<void index="65">
<string>usuarioSolicitante</string>
</void>
<void index="66">
<string>validacaoItens</string>
</void>
<void index="67">
<string>valorTotalCotacao</string>
</void>
<void index="68">
<string>WKNumProces</string>
</void>
</array>
</void>
</object> </object>
</java> </java>

View File

@ -29,7 +29,7 @@
<processDefinitionVersionPK> <processDefinitionVersionPK>
<companyId>1</companyId> <companyId>1</companyId>
<processId>Solicitação de compra - Ginseng</processId> <processId>Solicitação de compra - Ginseng</processId>
<version>8</version> <version>86</version>
</processDefinitionVersionPK> </processDefinitionVersionPK>
<versionDescription></versionDescription> <versionDescription></versionDescription>
<formId>9305</formId> <formId>9305</formId>
@ -1009,7 +1009,7 @@
<companyId>1</companyId> <companyId>1</companyId>
<processId>Solicitação de compras </processId> <processId>Solicitação de compras </processId>
<expressionOrder>1</expressionOrder> <expressionOrder>1</expressionOrder>
<version>8</version> <version>86</version>
<sequence>46</sequence> <sequence>46</sequence>
</conditionProcessStatePK> </conditionProcessStatePK>
<condition>hAPI.getCardValue(&quot;validacaoItens&quot;) == &quot;entregue&quot;</condition> <condition>hAPI.getCardValue(&quot;validacaoItens&quot;) == &quot;entregue&quot;</condition>
@ -1021,7 +1021,7 @@
<companyId>1</companyId> <companyId>1</companyId>
<processId>Solicitação de compras </processId> <processId>Solicitação de compras </processId>
<expressionOrder>2</expressionOrder> <expressionOrder>2</expressionOrder>
<version>8</version> <version>86</version>
<sequence>46</sequence> <sequence>46</sequence>
</conditionProcessStatePK> </conditionProcessStatePK>
<condition>true</condition> <condition>true</condition>
@ -1033,7 +1033,7 @@
<companyId>1</companyId> <companyId>1</companyId>
<processId>Solicitação de compras </processId> <processId>Solicitação de compras </processId>
<expressionOrder>1</expressionOrder> <expressionOrder>1</expressionOrder>
<version>8</version> <version>86</version>
<sequence>128</sequence> <sequence>128</sequence>
</conditionProcessStatePK> </conditionProcessStatePK>
<condition>parseFloat(hAPI.getCardValue(&quot;valorTotalCotacao&quot;)) &lt;= 100000.00</condition> <condition>parseFloat(hAPI.getCardValue(&quot;valorTotalCotacao&quot;)) &lt;= 100000.00</condition>
@ -1047,7 +1047,7 @@
<companyId>1</companyId> <companyId>1</companyId>
<processId>Solicitação de compras </processId> <processId>Solicitação de compras </processId>
<expressionOrder>1</expressionOrder> <expressionOrder>1</expressionOrder>
<version>8</version> <version>86</version>
<sequence>150</sequence> <sequence>150</sequence>
</conditionProcessStatePK> </conditionProcessStatePK>
<condition>parseFloat(hAPI.getCardValue(&quot;valorTotalCotacao&quot;)) &gt;= 5001.00 &amp;&amp; &#xd; <condition>parseFloat(hAPI.getCardValue(&quot;valorTotalCotacao&quot;)) &gt;= 5001.00 &amp;&amp; &#xd;
@ -1063,7 +1063,7 @@ parseFloat(hAPI.getCardValue(&quot;valorTotalCotacao&quot;)) &lt;= 50000.00&#xd;
<companyId>1</companyId> <companyId>1</companyId>
<processId>Solicitação de compras </processId> <processId>Solicitação de compras </processId>
<expressionOrder>2</expressionOrder> <expressionOrder>2</expressionOrder>
<version>8</version> <version>86</version>
<sequence>150</sequence> <sequence>150</sequence>
</conditionProcessStatePK> </conditionProcessStatePK>
<condition>true</condition> <condition>true</condition>
@ -1077,7 +1077,7 @@ parseFloat(hAPI.getCardValue(&quot;valorTotalCotacao&quot;)) &lt;= 50000.00&#xd;
<companyId>1</companyId> <companyId>1</companyId>
<processId>Solicitação de compras </processId> <processId>Solicitação de compras </processId>
<expressionOrder>1</expressionOrder> <expressionOrder>1</expressionOrder>
<version>8</version> <version>86</version>
<sequence>154</sequence> <sequence>154</sequence>
</conditionProcessStatePK> </conditionProcessStatePK>
<condition>parseFloat(hAPI.getCardValue(&quot;valorTotalCotacao&quot;)) &gt; 50000.00</condition> <condition>parseFloat(hAPI.getCardValue(&quot;valorTotalCotacao&quot;)) &gt; 50000.00</condition>
@ -1091,7 +1091,7 @@ parseFloat(hAPI.getCardValue(&quot;valorTotalCotacao&quot;)) &lt;= 50000.00&#xd;
<companyId>1</companyId> <companyId>1</companyId>
<processId>Solicitação de compras </processId> <processId>Solicitação de compras </processId>
<expressionOrder>2</expressionOrder> <expressionOrder>2</expressionOrder>
<version>8</version> <version>86</version>
<sequence>154</sequence> <sequence>154</sequence>
</conditionProcessStatePK> </conditionProcessStatePK>
<condition>parseFloat(hAPI.getCardValue(&quot;valorTotalCotacao&quot;)) &lt; 50000.00</condition> <condition>parseFloat(hAPI.getCardValue(&quot;valorTotalCotacao&quot;)) &lt; 50000.00</condition>
@ -1536,102 +1536,110 @@ parseFloat(hAPI.getCardValue(&quot;valorTotalCotacao&quot;)) &lt;= 50000.00&#xd;
<processId>Solicitação de compras </processId> <processId>Solicitação de compras </processId>
<version>1</version> <version>1</version>
</workflowProcessEventPK> </workflowProcessEventPK>
<eventDescription>function toProtheusDate(d) { <eventDescription>function toProtheusDate(d) {&#xd;
if (!d) return &quot;&quot;; if (!d) return &quot;&quot;;&#xd;
if (d.indexOf(&quot;/&quot;) &gt; -1) { if (d.indexOf(&quot;/&quot;) &gt; -1) {&#xd;
var parts = d.split(&quot;/&quot;); var parts = d.split(&quot;/&quot;);&#xd;
return parts[2] + parts[1] + parts[0]; // dd/MM/yyyy -&gt; yyyyMMdd return parts[2] + parts[1] + parts[0]; // dd/MM/yyyy -&gt; yyyyMMdd&#xd;
} }&#xd;
if (d.indexOf(&quot;-&quot;) &gt; -1) { if (d.indexOf(&quot;-&quot;) &gt; -1) {&#xd;
return d.replace(/-/g, &quot;&quot;); // yyyy-MM-dd -&gt; yyyyMMdd return d.replace(/-/g, &quot;&quot;); // yyyy-MM-dd -&gt; yyyyMMdd&#xd;
} }&#xd;
return d; // já está no formato certo return d; // já está no formato certo&#xd;
} }&#xd;
&#xd;
function hojeProtheus() { function hojeProtheus() {&#xd;
var d = new Date(); var d = new Date();&#xd;
var yyyy = d.getFullYear(); var yyyy = d.getFullYear();&#xd;
var mm = d.getMonth() + 1; var mm = d.getMonth() + 1;&#xd;
var dd = d.getDate(); var dd = d.getDate();&#xd;
if (mm &lt; 10) mm = &quot;0&quot; + mm; if (mm &lt; 10) mm = &quot;0&quot; + mm;&#xd;
if (dd &lt; 10) dd = &quot;0&quot; + dd; if (dd &lt; 10) dd = &quot;0&quot; + dd;&#xd;
return &quot;&quot; + yyyy + mm + dd; // yyyyMMdd return &quot;&quot; + yyyy + mm + dd; // yyyyMMdd&#xd;
} }&#xd;
&#xd;
function servicetask82(attempt, message) { function servicetask82(attempt, message) {&#xd;
log.info(&quot;🚀 Iniciando servicetask82&quot;); log.info(&quot;🚀 Iniciando servicetask82&quot;);&#xd;
&#xd;
var qtdItens = hAPI.getChildrenIndexes(&quot;tbItens&quot;); var qtdItens = hAPI.getChildrenIndexes(&quot;tbItens&quot;);&#xd;
log.info(&quot;📦 Total de itens na tabela: &quot; + qtdItens.length); log.info(&quot;📦 Total de itens na tabela: &quot; + qtdItens.length);&#xd;
&#xd;
var itens = []; var itens = [];&#xd;
for (var i = 0; i &lt; qtdItens.length; i++) { for (var i = 0; i &lt; qtdItens.length; i++) {&#xd;
var index = qtdItens[i]; var index = qtdItens[i];&#xd;
var item = { var item = {&#xd;
&quot;C1_PRODUTO&quot;: String(hAPI.getCardValue(&quot;Codproduto___&quot; + index)), &quot;C1_PRODUTO&quot;: String(hAPI.getCardValue(&quot;Codproduto___&quot; + index)),&#xd;
&quot;C1_QUANT&quot;: Number(hAPI.getCardValue(&quot;qtd___&quot; + index)), &quot;C1_QUANT&quot;: Number(hAPI.getCardValue(&quot;qtd___&quot; + index)),&#xd;
&quot;C1_DATPRF&quot;: toProtheusDate(String(hAPI.getCardValue(&quot;dataNec___&quot; + index))) &quot;C1_DATPRF&quot;: toProtheusDate(String(hAPI.getCardValue(&quot;dataNec___&quot; + index)))&#xd;
}; };&#xd;
itens.push(item); itens.push(item);&#xd;
log.info(&quot;📌 Item adicionado: &quot; + JSON.stringify(item)); log.info(&quot;📌 Item adicionado: &quot; + JSON.stringify(item));&#xd;
} }&#xd;
&#xd;
var payload = { var filial = String(hAPI.getCardValue(&quot;filialprotheus&quot;) || hAPI.getCardValue(&quot;filialProtheus&quot;) || &quot;&quot;).trim();&#xd;
&quot;C1_SOLICIT&quot;: String(hAPI.getCardValue(&quot;usuarioSolicitante&quot;)), if (!filial) {&#xd;
&quot;C1_EMISSAO&quot;: hojeProtheus(), throw &quot;Campo de filial não preenchido no formulário (filialprotheus).&quot;;&#xd;
&quot;C1_FILENT&quot;: String(hAPI.getCardValue(&quot;filialProtheus&quot;)).trim(), }&#xd;
&quot;C1_OBS&quot;: String(hAPI.getCardValue(&quot;observacoes&quot;)), &#xd;
&quot;itens&quot;: itens var payload = {&#xd;
}; &quot;C1_SOLICIT&quot;: String(hAPI.getCardValue(&quot;usuarioSolicitante&quot;)),&#xd;
&quot;C1_EMISSAO&quot;: hojeProtheus(),&#xd;
log.info(&quot;📦 Payload montado:&quot;); &quot;C1_FILENT&quot;: filial,&#xd;
log.info(JSON.stringify(payload)); &quot;C1_OBS&quot;: String(hAPI.getCardValue(&quot;observacoes&quot;)),&#xd;
&quot;itens&quot;: itens&#xd;
var data1 = { };&#xd;
companyId: &apos;1&apos;, &#xd;
serviceCode: &apos;Postprod&apos;, log.info(&quot;📦 Payload montado:&quot;);&#xd;
endpoint: &apos;/rest/UF_MATA110&apos;, log.info(JSON.stringify(payload));&#xd;
method: &apos;post&apos;, &#xd;
timeoutService: &apos;100&apos;, var data1 = {&#xd;
params: payload, // objeto puro companyId: &apos;1&apos;,&#xd;
headers: { serviceCode: &apos;Postprod&apos;,&#xd;
&apos;Content-Type&apos;: &apos;application/json&apos; endpoint: &apos;/UF_MATA110&apos;,&#xd;
} method: &apos;post&apos;,&#xd;
}; timeoutService: &apos;60000&apos;,&#xd;
params: payload, // objeto puro&#xd;
try { headers: {&#xd;
var clientService = fluigAPI.getAuthorizeClientService(); &apos;Content-Type&apos;: &apos;application/json&apos;&#xd;
var response = clientService.invoke(JSON.stringify(data1)); // SEMPRE stringify aqui }&#xd;
};&#xd;
log.info(&quot;📬 Resposta da API Protheus:&quot;); &#xd;
log.dir(response); try {&#xd;
var clientService = fluigAPI.getAuthorizeClientService();&#xd;
if (response &amp;&amp; response.getResult()) { var response = clientService.invoke(JSON.stringify(data1)); // SEMPRE stringify aqui&#xd;
var result = JSON.parse(response.getResult()); &#xd;
if (result.sucesso) { log.info(&quot;📬 Resposta da API Protheus:&quot;);&#xd;
hAPI.setCardValue(&quot;numeroSCProtheus&quot;, result.C1_NUM || &quot;&quot;); if (response) {&#xd;
hAPI.setCardValue(&quot;statusSCProtheus&quot;, &quot;SC cadastrada com sucesso&quot;); log.info(&quot;HTTP status: &quot; + response.getHttpStatusResult());&#xd;
hAPI.setCardValue(&quot;solicitanteSCProtheus&quot;, result.C1_SOLICIT || &quot;&quot;); log.info(&quot;Body: &quot; + response.getResult());&#xd;
hAPI.setCardValue(&quot;emissaoSCProtheus&quot;, result.C1_EMISSAO || &quot;&quot;); }&#xd;
hAPI.setCardValue(&quot;qtdItensSCProtheus&quot;, String(result.quantidade_itens || &quot;&quot;)); &#xd;
hAPI.setCardValue(&quot;dataCadastroSCProtheus&quot;, result.data_cadastro || &quot;&quot;); if (response &amp;&amp; response.getResult()) {&#xd;
hAPI.setCardValue(&quot;horaCadastroSCProtheus&quot;, result.hora_cadastro || &quot;&quot;); var result = JSON.parse(response.getResult());&#xd;
} else { if (result.sucesso) {&#xd;
hAPI.setCardValue(&quot;statusSCProtheus&quot;, &quot;Erro: &quot; + result.erro); hAPI.setCardValue(&quot;numeroSCProtheus&quot;, result.C1_NUM || &quot;&quot;);&#xd;
throw &quot;Erro Protheus: &quot; + result.message; hAPI.setCardValue(&quot;statusSCProtheus&quot;, &quot;SC cadastrada com sucesso&quot;);&#xd;
} hAPI.setCardValue(&quot;solicitanteSCProtheus&quot;, result.C1_SOLICIT || &quot;&quot;);&#xd;
} else { hAPI.setCardValue(&quot;emissaoSCProtheus&quot;, result.C1_EMISSAO || &quot;&quot;);&#xd;
throw &quot;Sem resposta da API Protheus&quot;; hAPI.setCardValue(&quot;qtdItensSCProtheus&quot;, String(result.quantidade_itens || &quot;&quot;));&#xd;
} hAPI.setCardValue(&quot;dataCadastroSCProtheus&quot;, result.data_cadastro || &quot;&quot;);&#xd;
} catch (e) { hAPI.setCardValue(&quot;horaCadastroSCProtheus&quot;, result.hora_cadastro || &quot;&quot;);&#xd;
log.error(&quot;❌ Erro ao enviar SC para o Protheus: &quot; + e); } else {&#xd;
throw e; hAPI.setCardValue(&quot;statusSCProtheus&quot;, &quot;Erro: &quot; + result.erro);&#xd;
} throw &quot;Erro Protheus: &quot; + result.message;&#xd;
}&#xd;
} else {&#xd;
throw &quot;Sem resposta da API Protheus&quot;;&#xd;
log.info(&quot;🏁 Finalização da servicetask82&quot;); }&#xd;
} } catch (e) {&#xd;
log.error(&quot;❌ Erro ao enviar SC para o Protheus: &quot; + e);&#xd;
throw e;&#xd;
}&#xd;
&#xd;
&#xd;
&#xd;
log.info(&quot;🏁 Finalização da servicetask82&quot;);&#xd;
}&#xd;
</eventDescription> </eventDescription>
</WorkflowProcessEvent> </WorkflowProcessEvent>
<WorkflowProcessEvent> <WorkflowProcessEvent>
@ -1641,25 +1649,25 @@ function servicetask82(attempt, message) {
<processId>Solicitação de compras </processId> <processId>Solicitação de compras </processId>
<version>1</version> <version>1</version>
</workflowProcessEventPK> </workflowProcessEventPK>
<eventDescription>function servicetask114(attempt, message) { <eventDescription>function servicetask114(attempt, message) {&#xd;
log.info(&quot;🚀 ST92 — Verifica se já existe código de cotação no formulário&quot;); log.info(&quot;🚀 ST92 — Verifica se já existe código de cotação no formulário&quot;);&#xd;
&#xd;
var numSC = hAPI.getCardValue(&quot;numeroSCProtheus&quot;); var numSC = hAPI.getCardValue(&quot;numeroSCProtheus&quot;);&#xd;
var numCot = hAPI.getCardValue(&quot;cotacaoSCProtheus&quot;); var numCot = hAPI.getCardValue(&quot;cotacaoSCProtheus&quot;);&#xd;
&#xd;
log.info(&quot;📌 SC: &quot; + numSC + &quot; | Cotação: &quot; + numCot); log.info(&quot;📌 SC: &quot; + numSC + &quot; | Cotação: &quot; + numCot);&#xd;
&#xd;
if (!numSC) { if (!numSC) {&#xd;
throw &quot;❌ Número da SC não informado no formulário.&quot;; throw &quot;❌ Número da SC não informado no formulário.&quot;;&#xd;
} }&#xd;
&#xd;
// se não tiver cotação ainda, força o loop da atividade // se não tiver cotação ainda, força o loop da atividade&#xd;
if (!numCot || numCot === &quot;000000&quot; || numCot === &quot;000001&quot;) { if (!numCot || numCot === &quot;000000&quot; || numCot === &quot;000001&quot;) {&#xd;
throw &quot;⏳ Cotação ainda não disponível para a SC &quot; + numSC; throw &quot;⏳ Cotação ainda não disponível para a SC &quot; + numSC;&#xd;
} }&#xd;
&#xd;
// se já tiver código, só registra log e deixa o processo seguir // se já tiver código, só registra log e deixa o processo seguir&#xd;
log.info(&quot;✅ Cotação &quot; + numCot + &quot; encontrada no formulário. Processo segue.&quot;); log.info(&quot;✅ Cotação &quot; + numCot + &quot; encontrada no formulário. Processo segue.&quot;);&#xd;
}</eventDescription> }</eventDescription>
</WorkflowProcessEvent> </WorkflowProcessEvent>
</list> </list>
@ -1801,7 +1809,7 @@ function servicetask82(attempt, message) {
<processLinkBendPK> <processLinkBendPK>
<companyId>1</companyId> <companyId>1</companyId>
<processId>Solicitação de compras </processId> <processId>Solicitação de compras </processId>
<version>8</version> <version>86</version>
<linkSequence>26</linkSequence> <linkSequence>26</linkSequence>
<bendSequence>1</bendSequence> <bendSequence>1</bendSequence>
</processLinkBendPK> </processLinkBendPK>
@ -1812,7 +1820,7 @@ function servicetask82(attempt, message) {
<processLinkBendPK> <processLinkBendPK>
<companyId>1</companyId> <companyId>1</companyId>
<processId>Solicitação de compras </processId> <processId>Solicitação de compras </processId>
<version>8</version> <version>86</version>
<linkSequence>125</linkSequence> <linkSequence>125</linkSequence>
<bendSequence>1</bendSequence> <bendSequence>1</bendSequence>
</processLinkBendPK> </processLinkBendPK>
@ -1823,7 +1831,7 @@ function servicetask82(attempt, message) {
<processLinkBendPK> <processLinkBendPK>
<companyId>1</companyId> <companyId>1</companyId>
<processId>Solicitação de compras </processId> <processId>Solicitação de compras </processId>
<version>8</version> <version>86</version>
<linkSequence>126</linkSequence> <linkSequence>126</linkSequence>
<bendSequence>1</bendSequence> <bendSequence>1</bendSequence>
</processLinkBendPK> </processLinkBendPK>
@ -1834,7 +1842,7 @@ function servicetask82(attempt, message) {
<processLinkBendPK> <processLinkBendPK>
<companyId>1</companyId> <companyId>1</companyId>
<processId>Solicitação de compras </processId> <processId>Solicitação de compras </processId>
<version>8</version> <version>86</version>
<linkSequence>127</linkSequence> <linkSequence>127</linkSequence>
<bendSequence>1</bendSequence> <bendSequence>1</bendSequence>
</processLinkBendPK> </processLinkBendPK>
@ -1845,7 +1853,7 @@ function servicetask82(attempt, message) {
<processLinkBendPK> <processLinkBendPK>
<companyId>1</companyId> <companyId>1</companyId>
<processId>Solicitação de compras </processId> <processId>Solicitação de compras </processId>
<version>8</version> <version>86</version>
<linkSequence>129</linkSequence> <linkSequence>129</linkSequence>
<bendSequence>1</bendSequence> <bendSequence>1</bendSequence>
</processLinkBendPK> </processLinkBendPK>
@ -1856,7 +1864,7 @@ function servicetask82(attempt, message) {
<processLinkBendPK> <processLinkBendPK>
<companyId>1</companyId> <companyId>1</companyId>
<processId>Solicitação de compras </processId> <processId>Solicitação de compras </processId>
<version>8</version> <version>86</version>
<linkSequence>142</linkSequence> <linkSequence>142</linkSequence>
<bendSequence>1</bendSequence> <bendSequence>1</bendSequence>
</processLinkBendPK> </processLinkBendPK>
@ -1867,7 +1875,7 @@ function servicetask82(attempt, message) {
<processLinkBendPK> <processLinkBendPK>
<companyId>1</companyId> <companyId>1</companyId>
<processId>Solicitação de compras </processId> <processId>Solicitação de compras </processId>
<version>8</version> <version>86</version>
<linkSequence>144</linkSequence> <linkSequence>144</linkSequence>
<bendSequence>1</bendSequence> <bendSequence>1</bendSequence>
</processLinkBendPK> </processLinkBendPK>
@ -1878,7 +1886,7 @@ function servicetask82(attempt, message) {
<processLinkBendPK> <processLinkBendPK>
<companyId>1</companyId> <companyId>1</companyId>
<processId>Solicitação de compras </processId> <processId>Solicitação de compras </processId>
<version>8</version> <version>86</version>
<linkSequence>152</linkSequence> <linkSequence>152</linkSequence>
<bendSequence>1</bendSequence> <bendSequence>1</bendSequence>
</processLinkBendPK> </processLinkBendPK>
@ -1889,7 +1897,7 @@ function servicetask82(attempt, message) {
<processLinkBendPK> <processLinkBendPK>
<companyId>1</companyId> <companyId>1</companyId>
<processId>Solicitação de compras </processId> <processId>Solicitação de compras </processId>
<version>8</version> <version>86</version>
<linkSequence>152</linkSequence> <linkSequence>152</linkSequence>
<bendSequence>2</bendSequence> <bendSequence>2</bendSequence>
</processLinkBendPK> </processLinkBendPK>
@ -1900,7 +1908,7 @@ function servicetask82(attempt, message) {
<processLinkBendPK> <processLinkBendPK>
<companyId>1</companyId> <companyId>1</companyId>
<processId>Solicitação de compras </processId> <processId>Solicitação de compras </processId>
<version>8</version> <version>86</version>
<linkSequence>161</linkSequence> <linkSequence>161</linkSequence>
<bendSequence>1</bendSequence> <bendSequence>1</bendSequence>
</processLinkBendPK> </processLinkBendPK>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 62 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -9089,7 +9089,7 @@
<bpmn2:BpmnEndEvent extendedFields="&lt;list/&gt;" id="endcancel39" incoming="flow124" name="Cancelado" notificaRequisitante="true" signalId="0" type="65"/> <bpmn2:BpmnEndEvent extendedFields="&lt;list/&gt;" id="endcancel39" incoming="flow124" name="Cancelado" notificaRequisitante="true" signalId="0" type="65"/>
<bpmn2:BpmnGateway condition="&lt;list&gt;&#10; &lt;org.eclipse.bpmn2.impl.ConditionImpl&gt;&#10; &lt;order&gt;1&lt;/order&gt;&#10; &lt;expression&gt;hAPI.getCardValue(&amp;quot;validacaoItens&amp;quot;) == &amp;quot;entregue&amp;quot;&lt;/expression&gt;&#10; &lt;targetTask&gt;endevent52&lt;/targetTask&gt;&#10; &lt;conditionType&gt;0&lt;/conditionType&gt;&#10; &lt;/org.eclipse.bpmn2.impl.ConditionImpl&gt;&#10; &lt;org.eclipse.bpmn2.impl.ConditionImpl&gt;&#10; &lt;order&gt;2&lt;/order&gt;&#10; &lt;expression&gt;true&lt;/expression&gt;&#10; &lt;targetTask&gt;task24&lt;/targetTask&gt;&#10; &lt;conditionType&gt;0&lt;/conditionType&gt;&#10; &lt;/org.eclipse.bpmn2.impl.ConditionImpl&gt;&#10;&lt;/list&gt;" extendedFields="&lt;list/&gt;" id="exclusivegateway46" incoming="flow47" name="Validar compra" outgoing="flow48 flow78" type="120"/> <bpmn2:BpmnGateway condition="&lt;list&gt;&#10; &lt;org.eclipse.bpmn2.impl.ConditionImpl&gt;&#10; &lt;order&gt;1&lt;/order&gt;&#10; &lt;expression&gt;hAPI.getCardValue(&amp;quot;validacaoItens&amp;quot;) == &amp;quot;entregue&amp;quot;&lt;/expression&gt;&#10; &lt;targetTask&gt;endevent52&lt;/targetTask&gt;&#10; &lt;conditionType&gt;0&lt;/conditionType&gt;&#10; &lt;/org.eclipse.bpmn2.impl.ConditionImpl&gt;&#10; &lt;org.eclipse.bpmn2.impl.ConditionImpl&gt;&#10; &lt;order&gt;2&lt;/order&gt;&#10; &lt;expression&gt;true&lt;/expression&gt;&#10; &lt;targetTask&gt;task24&lt;/targetTask&gt;&#10; &lt;conditionType&gt;0&lt;/conditionType&gt;&#10; &lt;/org.eclipse.bpmn2.impl.ConditionImpl&gt;&#10;&lt;/list&gt;" extendedFields="&lt;list/&gt;" id="exclusivegateway46" incoming="flow47" name="Validar compra" outgoing="flow48 flow78" type="120"/>
<bpmn2:BpmnEndEvent extendedFields="&lt;list/&gt;" id="endevent52" incoming="flow78" name="Fim" signalId="0" type="60"/> <bpmn2:BpmnEndEvent extendedFields="&lt;list/&gt;" id="endevent52" incoming="flow78" name="Fim" signalId="0" type="60"/>
<bpmn2:BpmnProcess author="" cardIndex="9305" category="Compras - Testes" complementsLevel="1" descriptorFields="&lt;list&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;descProduto&lt;/id&gt;&#10; &lt;label&gt;descProduto&lt;/label&gt;&#10; &lt;cardIndex&gt;9305 - compras_digital&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;empresa&lt;/id&gt;&#10; &lt;label&gt;empresa&lt;/label&gt;&#10; &lt;cardIndex&gt;9305 - compras_digital&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;estabelecimento&lt;/id&gt;&#10; &lt;label&gt;estabelecimento&lt;/label&gt;&#10; &lt;cardIndex&gt;9305 - compras_digital&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;filialdest&lt;/id&gt;&#10; &lt;label&gt;filialdest&lt;/label&gt;&#10; &lt;cardIndex&gt;9305 - compras_digital&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;numeroSCProtheus&lt;/id&gt;&#10; &lt;label&gt;numeroSCProtheus&lt;/label&gt;&#10; &lt;cardIndex&gt;9305 - compras_digital&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;pedidoSCProtheus&lt;/id&gt;&#10; &lt;label&gt;pedidoSCProtheus&lt;/label&gt;&#10; &lt;cardIndex&gt;9305 - compras_digital&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;quantidade&lt;/id&gt;&#10; &lt;label&gt;quantidade&lt;/label&gt;&#10; &lt;cardIndex&gt;9305 - compras_digital&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;solicitanteSCProtheus&lt;/id&gt;&#10; &lt;label&gt;solicitanteSCProtheus&lt;/label&gt;&#10; &lt;cardIndex&gt;9305 - compras_digital&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;urgencia&lt;/id&gt;&#10; &lt;label&gt;urgencia&lt;/label&gt;&#10; &lt;cardIndex&gt;9305 - compras_digital&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;valorTotalCotacao&lt;/id&gt;&#10; &lt;label&gt;valorTotalCotacao&lt;/label&gt;&#10; &lt;cardIndex&gt;9305 - compras_digital&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10;&lt;/list&gt;" expedient="Default" extendedFields="&lt;list/&gt;" formSource="server" id="Solicita&#231;&#227;o de compras " instruction="Este flow permite abertura de solicita&#231;&#227;o de compras automatizadas, informando qual item ser&#225; comprado e direcionado para as aprova&#231;&#245;es corretas." keyWord="" managerAssignmentController="&lt;org.eclipse.bpmn2.impl.AssignmentControllerGroup&gt;&#10; &lt;groupId&gt;TIC&lt;/groupId&gt;&#10; &lt;mechanismName&gt;Grupo&lt;/mechanismName&gt;&#10;&lt;/org.eclipse.bpmn2.impl.AssignmentControllerGroup&gt;" name="Solicita&#231;&#227;o de compra - Ginseng" notifyRequisitionerComplements="true" notifyResponsibleComplements="true" serverId="Ginseng Produ&#231;&#227;o" version="8" volume="Default"/> <bpmn2:BpmnProcess author="" cardIndex="9305" category="Compras - Testes" complementsLevel="1" descriptorFields="&lt;list&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;descProduto&lt;/id&gt;&#10; &lt;label&gt;descProduto&lt;/label&gt;&#10; &lt;cardIndex&gt;9305 - compras_digital&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;empresa&lt;/id&gt;&#10; &lt;label&gt;empresa&lt;/label&gt;&#10; &lt;cardIndex&gt;9305 - compras_digital&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;estabelecimento&lt;/id&gt;&#10; &lt;label&gt;estabelecimento&lt;/label&gt;&#10; &lt;cardIndex&gt;9305 - compras_digital&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;filialdest&lt;/id&gt;&#10; &lt;label&gt;filialdest&lt;/label&gt;&#10; &lt;cardIndex&gt;9305 - compras_digital&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;numeroSCProtheus&lt;/id&gt;&#10; &lt;label&gt;numeroSCProtheus&lt;/label&gt;&#10; &lt;cardIndex&gt;9305 - compras_digital&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;pedidoSCProtheus&lt;/id&gt;&#10; &lt;label&gt;pedidoSCProtheus&lt;/label&gt;&#10; &lt;cardIndex&gt;9305 - compras_digital&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;quantidade&lt;/id&gt;&#10; &lt;label&gt;quantidade&lt;/label&gt;&#10; &lt;cardIndex&gt;9305 - compras_digital&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;solicitanteSCProtheus&lt;/id&gt;&#10; &lt;label&gt;solicitanteSCProtheus&lt;/label&gt;&#10; &lt;cardIndex&gt;9305 - compras_digital&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;urgencia&lt;/id&gt;&#10; &lt;label&gt;urgencia&lt;/label&gt;&#10; &lt;cardIndex&gt;9305 - compras_digital&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10; &lt;id&gt;valorTotalCotacao&lt;/id&gt;&#10; &lt;label&gt;valorTotalCotacao&lt;/label&gt;&#10; &lt;cardIndex&gt;9305 - compras_digital&lt;/cardIndex&gt;&#10; &lt;/org.eclipse.bpmn2.impl.BpmnProcessFormField&gt;&#10;&lt;/list&gt;" expedient="Default" extendedFields="&lt;list/&gt;" formSource="server" id="Solicita&#231;&#227;o de compras " instruction="Este flow permite abertura de solicita&#231;&#227;o de compras automatizadas, informando qual item ser&#225; comprado e direcionado para as aprova&#231;&#245;es corretas." keyWord="" managerAssignmentController="&lt;org.eclipse.bpmn2.impl.AssignmentControllerGroup&gt;&#10; &lt;groupId&gt;TIC&lt;/groupId&gt;&#10; &lt;mechanismName&gt;Grupo&lt;/mechanismName&gt;&#10;&lt;/org.eclipse.bpmn2.impl.AssignmentControllerGroup&gt;" name="Solicita&#231;&#227;o de compra - Ginseng" notifyRequisitionerComplements="true" notifyResponsibleComplements="true" serverId="Ginseng Produ&#231;&#227;o" version="86" volume="Default"/>
<bpmn2:SequenceFlow atividadeFluxo="" atividadeRetorno="" extendedFields="&lt;list/&gt;" id="flow26" name="" sourceRef="task24" targetRef="task18"/> <bpmn2:SequenceFlow atividadeFluxo="" atividadeRetorno="" extendedFields="&lt;list/&gt;" id="flow26" name="" sourceRef="task24" targetRef="task18"/>
<bpmn2:SequenceFlow atividadeFluxo="" atividadeRetorno="" extendedFields="&lt;list/&gt;" id="flow47" name="" sourceRef="task18" targetRef="exclusivegateway46"/> <bpmn2:SequenceFlow atividadeFluxo="" atividadeRetorno="" extendedFields="&lt;list/&gt;" id="flow47" name="" sourceRef="task18" targetRef="exclusivegateway46"/>
<bpmn2:SequenceFlow atividadeFluxo="" atividadeRetorno="" extendedFields="&lt;list/&gt;" id="flow48" name="Reprovar" sourceRef="exclusivegateway46" targetRef="task24"/> <bpmn2:SequenceFlow atividadeFluxo="" atividadeRetorno="" extendedFields="&lt;list/&gt;" id="flow48" name="Reprovar" sourceRef="exclusivegateway46" targetRef="task24"/>
@ -9134,5 +9134,5 @@
<bpmn2:BpmnTask authNotify="true" esforcoCalculo="0" executionAttempts="0" expediente="" frequency="0" id="task158" incoming="flow159" loopType="0" name="Aprova&#231;&#227;o CEO" outgoing="flow160" selecionaColaboradores="1" type="80"/> <bpmn2:BpmnTask authNotify="true" esforcoCalculo="0" executionAttempts="0" expediente="" frequency="0" id="task158" incoming="flow159" loopType="0" name="Aprova&#231;&#227;o CEO" outgoing="flow160" selecionaColaboradores="1" type="80"/>
<bpmn2:SequenceFlow atividadeFluxo="" atividadeRetorno="" extendedFields="&lt;list/&gt;" id="flow159" name="" sourceRef="exclusivegateway154" targetRef="task158"/> <bpmn2:SequenceFlow atividadeFluxo="" atividadeRetorno="" extendedFields="&lt;list/&gt;" id="flow159" name="" sourceRef="exclusivegateway154" targetRef="task158"/>
<bpmn2:SequenceFlow atividadeFluxo="" atividadeRetorno="" extendedFields="&lt;list/&gt;" id="flow160" name="" sourceRef="task158" targetRef="task18"/> <bpmn2:SequenceFlow atividadeFluxo="" atividadeRetorno="" extendedFields="&lt;list/&gt;" id="flow160" name="" sourceRef="task158" targetRef="task18"/>
<bpmn2:SequenceFlow atividadeFluxo="Ajustar Solicita&#231;&#227;o" atividadeRetorno="" id="flow161" name="" sourceRef="task121" targetRef="startevent1"/> <bpmn2:SequenceFlow atividadeFluxo="Ajustar Solicita&#231;&#227;o" atividadeRetorno="" extendedFields="&lt;list/&gt;" id="flow161" name="" sourceRef="task121" targetRef="startevent1"/>
</xmi:XMI> </xmi:XMI>

View File

@ -38,10 +38,21 @@ function servicetask82(attempt, message) {
log.info("📌 Item adicionado: " + JSON.stringify(item)); log.info("📌 Item adicionado: " + JSON.stringify(item));
} }
var filial = String(
hAPI.getCardValue("filialprotheus") ||
hAPI.getCardValue("filialProtheus") ||
hAPI.getCardValue("codigocentroCusto") ||
""
).trim();
if (!filial) {
throw "Campo PROTHEUS da filial não preenchido no formulário (filialprotheus).";
}
log.info("🏬 Filial PROTHEUS enviada no C1_FILENT: " + filial);
var payload = { var payload = {
"C1_SOLICIT": String(hAPI.getCardValue("usuarioSolicitante")), "C1_SOLICIT": String(hAPI.getCardValue("usuarioSolicitante")),
"C1_EMISSAO": hojeProtheus(), "C1_EMISSAO": hojeProtheus(),
"C1_FILENT": String(hAPI.getCardValue("filialProtheus")).trim(), "C1_FILENT": filial,
"C1_OBS": String(hAPI.getCardValue("observacoes")), "C1_OBS": String(hAPI.getCardValue("observacoes")),
"itens": itens "itens": itens
}; };
@ -52,9 +63,9 @@ function servicetask82(attempt, message) {
var data1 = { var data1 = {
companyId: '1', companyId: '1',
serviceCode: 'Postprod', serviceCode: 'Postprod',
endpoint: '/rest/UF_MATA110', endpoint: '/UF_MATA110',
method: 'post', method: 'post',
timeoutService: '100', timeoutService: '60000',
params: payload, // objeto puro params: payload, // objeto puro
headers: { headers: {
'Content-Type': 'application/json' 'Content-Type': 'application/json'
@ -66,21 +77,27 @@ function servicetask82(attempt, message) {
var response = clientService.invoke(JSON.stringify(data1)); // SEMPRE stringify aqui var response = clientService.invoke(JSON.stringify(data1)); // SEMPRE stringify aqui
log.info("📬 Resposta da API Protheus:"); log.info("📬 Resposta da API Protheus:");
log.dir(response); if (response) {
log.info("HTTP status: " + response.getHttpStatusResult());
log.info("Body: " + response.getResult());
}
if (response && response.getResult()) { if (response && response.getResult()) {
var result = JSON.parse(response.getResult()); var result = JSON.parse(response.getResult());
if (result.sucesso) { if (result.sucesso) {
hAPI.setCardValue("numeroSCProtheus", result.C1_NUM || ""); hAPI.setCardValue("numeroSCProtheus", result.C1_NUM || "");
hAPI.setCardValue("statusSCProtheus", "SC cadastrada com sucesso"); hAPI.setCardValue("statusSCProtheus", "SC cadastrada com sucesso");
hAPI.setCardValue("statusAtendimento", "Em andamento");
hAPI.setCardValue("solicitanteSCProtheus", result.C1_SOLICIT || ""); hAPI.setCardValue("solicitanteSCProtheus", result.C1_SOLICIT || "");
hAPI.setCardValue("emissaoSCProtheus", result.C1_EMISSAO || ""); hAPI.setCardValue("emissaoSCProtheus", result.C1_EMISSAO || "");
hAPI.setCardValue("qtdItensSCProtheus", String(result.quantidade_itens || "")); hAPI.setCardValue("qtdItensSCProtheus", String(result.quantidade_itens || ""));
hAPI.setCardValue("dataCadastroSCProtheus", result.data_cadastro || ""); hAPI.setCardValue("dataCadastroSCProtheus", result.data_cadastro || "");
hAPI.setCardValue("horaCadastroSCProtheus", result.hora_cadastro || ""); hAPI.setCardValue("horaCadastroSCProtheus", result.hora_cadastro || "");
} else { } else {
hAPI.setCardValue("statusSCProtheus", "Erro: " + result.erro); var erroMsg = result.erro || result.message || JSON.stringify(result);
throw "Erro Protheus: " + result.message; hAPI.setCardValue("statusSCProtheus", "Erro: " + erroMsg);
hAPI.setCardValue("statusAtendimento", "Erro no envio");
throw "Erro Protheus: " + erroMsg;
} }
} else { } else {
throw "Sem resposta da API Protheus"; throw "Sem resposta da API Protheus";