This commit is contained in:
Andrey Cunha
2026-03-16 18:24:24 -03:00
parent e712c300c6
commit b8a84962ce
28 changed files with 1278 additions and 1196 deletions
@@ -11,13 +11,14 @@ function displayFields(form, customHTML) {
var c1 = DatasetFactory.createConstraint("colleagueId", userId, userId, ConstraintType.MUST);
var filter = new Array(c1);
var fields = new Array("colleagueName");
var fields = new Array("colleagueName", "mail");
var retorno = DatasetFactory.getDataset("colleague", fields, filter, null);
//requester
if (activity == 0) {
form.setValue("requesterName", retorno.getValue(0, "colleagueName"));
form.setValue("requesterMail", retorno.getValue(0, "mail"));
form.setValue("emailSolicitante", retorno.getValue(0, "mail"));
form.setValue("requesterId", userId);
} else {
form.setValue("currentUserName", retorno.getValue(0, "colleagueName"));
@@ -1,35 +1,163 @@
function carregarItensDoExcel(fileInputId) {
const file = document.getElementById(fileInputId).files[0];
const fileInput = document.getElementById(fileInputId);
const file = fileInput ? fileInput.files[0] : null;
if (!file) {
FLUIGC.toast({ title: 'Erro', message: 'Nenhum arquivo selecionado.', type: 'danger' });
return;
}
if (typeof XLSX === "undefined") {
FLUIGC.toast({ title: 'Erro', message: 'Biblioteca XLSX nao carregada.', type: 'danger' });
return;
}
showExcelLoading();
const reader = new FileReader();
reader.onload = function(e) {
const data = new Uint8Array(e.target.result);
const workbook = XLSX.read(data, { type: 'array' });
const sheet = workbook.Sheets[workbook.SheetNames[0]];
const linhas = XLSX.utils.sheet_to_json(sheet);
reader.onload = function (e) {
// Permite o navegador renderizar o overlay antes de processar.
setTimeout(function () {
try {
const data = new Uint8Array(e.target.result);
const workbook = XLSX.read(data, { type: 'array' });
const sheetName = workbook.SheetNames[0];
const sheet = workbook.Sheets[sheetName];
const linhas = XLSX.utils.sheet_to_json(sheet, { defval: "" });
// Limpa a tabela (sem usar form)
const indices = $("input[id^='codigoItem___']").map(function() {
return $(this).attr("id").split("___")[1];
}).get();
indices.forEach(idx => fnWdkRemoveChild(idx));
// Limpa a tabela (sem usar form)
const indices = $("input[id^='codigoItem___']").map(function () {
return $(this).attr("id").split("___")[1];
}).get();
$.each(indices, function (_, idx) {
fnWdkRemoveChild(idx);
});
// Adiciona os itens da planilha
linhas.forEach(item => {
const idx = wdkAddChild('tabelaItens');
window[`descricao___${idx}`].setValue(item.codigoItem);
const linhasValidas = [];
$.each(linhas, function (_, item) {
const codigo = getCellByAliases(item, ["codigoItem", "codigo", "codItem", "sku", "code", "item"]);
const quantidade = getCellByAliases(item, ["quantidadeItem", "quantidade", "qtd", "qtde"]);
const descricao = getCellByAliases(item, ["descricao", "description", "desc"]);
// $(`#codigoItem___${idx}`).val(item.codigoItem);
$(`#quantidadeItem___${idx}`).val(item.quantidadeItem);
$(`#codigoItem___${idx}`).val(item.descricao);
});
if (!codigo || !quantidade) {
return;
}
FLUIGC.toast({ title: 'Sucesso', message: 'Itens carregados com sucesso!', type: 'success' });
linhasValidas.push({
codigo: String(codigo).trim(),
quantidade: String(quantidade).trim(),
descricao: String(descricao || "").trim()
});
});
if (!linhasValidas.length) {
FLUIGC.toast({
title: "Atencao",
message: "Nenhuma linha valida encontrada. Use colunas de codigo e quantidade.",
type: "warning"
});
return;
}
// Adiciona os itens da planilha
$.each(linhasValidas, function (_, item) {
const idx = wdkAddChild('tabelaItens');
const zoomObj = window[`descricao___${idx}`];
if (zoomObj && typeof zoomObj.setValue === "function") {
zoomObj.setValue(item.codigo);
} else {
// Fallback visual caso o objeto zoom ainda nao esteja pronto no momento.
$(`#descricao___${idx}`).val(item.codigo);
}
$(`#quantidadeItem___${idx}`).val(item.quantidade);
var descricaoFinal = item.descricao || buscarDescricaoProduto(item.codigo);
if (descricaoFinal) {
$(`#codigoItem___${idx}`).val(descricaoFinal);
}
});
FLUIGC.toast({ title: 'Sucesso', message: linhasValidas.length + ' itens carregados com sucesso!', type: 'success' });
} catch (err) {
FLUIGC.toast({ title: 'Erro', message: 'Falha ao processar Excel: ' + err.message, type: 'danger' });
console.error("Erro em carregarItensDoExcel:", err);
} finally {
hideExcelLoading();
}
}, 30);
};
reader.onerror = function () {
FLUIGC.toast({ title: 'Erro', message: 'Nao foi possivel ler o arquivo Excel.', type: 'danger' });
hideExcelLoading();
};
reader.readAsArrayBuffer(file);
}
function getCellByAliases(row, aliases) {
if (!row) return "";
const keys = Object.keys(row);
for (let i = 0; i < aliases.length; i++) {
const alias = normalizeHeader(aliases[i]);
for (let k = 0; k < keys.length; k++) {
const originalKey = keys[k];
if (normalizeHeader(originalKey) === alias) {
return row[originalKey];
}
}
}
return "";
}
function normalizeHeader(text) {
return String(text || "")
.normalize("NFD")
.replace(/[\u0300-\u036f]/g, "")
.replace(/\s+/g, "")
.replace(/[^a-zA-Z0-9]/g, "")
.toLowerCase();
}
function buscarDescricaoProduto(codigo) {
try {
if (typeof DatasetFactory === "undefined" || typeof ConstraintType === "undefined") {
return "";
}
var codigoTxt = String(codigo || "").trim();
if (!codigoTxt) return "";
var cCodigo = DatasetFactory.createConstraint("Code", codigoTxt, codigoTxt, ConstraintType.MUST);
var ds = DatasetFactory.getDataset("ds_rgb_products", null, [cCodigo], null);
if (!ds || !ds.values || !ds.values.length) {
return "";
}
for (var i = 0; i < ds.values.length; i++) {
var row = ds.values[i] || {};
if (String(row.Code || "").trim() === codigoTxt) {
return String(row.descricao || row.Description || "").trim();
}
}
var first = ds.values[0] || {};
return String(first.descricao || first.Description || "").trim();
} catch (e) {
console.error("Erro ao buscar descricao por codigo:", e);
return "";
}
}
function showExcelLoading() {
var overlay = document.getElementById("excelLoadingOverlay");
if (overlay) {
overlay.style.display = "flex";
}
}
function hideExcelLoading() {
var overlay = document.getElementById("excelLoadingOverlay");
if (overlay) {
overlay.style.display = "none";
}
}
@@ -141,11 +141,32 @@ $(document).ready(function () {
//formatarMoedasTabela("precoIndica___");
formatarMoedasTabela("ValorTotal");
displayBtnFiles();
invisibleBtnUpload("fnAnexo_Nfe");
invisibleBtnUpload("fdAnexo_Coleta");
invisibleBtnUpload("fdAnexo_Entrega");
invisibleBtnUpload("fdAnexo_recebimento");
// gerarTabelaCotacaoIndica("tabelaCotacaoIndica", "tabelaItens");
});
function resolveFormModeFallback() {
var mode = ($("#formMode").val() || "").toUpperCase();
if (mode) return mode;
try {
if (window.parent && window.parent.WCMAPI && typeof window.parent.WCMAPI.getFormMode === "function") {
return String(window.parent.WCMAPI.getFormMode() || "").toUpperCase();
}
} catch (e) {}
return "ADD";
}
if (typeof window.getFormMode !== "function") {
window.getFormMode = resolveFormModeFallback;
}
function formatarMoedasTabela(ids) {
$(document).on('input', `[id^="${ids}"]`, function() {
let valor = $(this).val();
@@ -353,7 +374,8 @@ function setSelectedZoomItem(selectedItem) {
}
if (name_item == "descricao") {
$("#codigoItem" + "___" + indice).val(selectedItem["descricao"]);
var itemDescricao = selectedItem["descricao"] || selectedItem["Description"] || "";
$("#codigoItem" + "___" + indice).val(itemDescricao);
}
}
@@ -747,14 +769,13 @@ function displayBtnFiles(){
try{
$('.componentAnexo').each(function(i, element) {
let inputFile = $(element).find(".inputAnexo")
let inputFileVew = $(element).find(".componentAnexo")
let btnUpFile = $(element).find(".btnUpFile");
let btnViewerFile = $(element).find(".btnViewerFile");
let btnDownloadFile = $(element).find(".btnDownloadFile");
if(getFormMode() == "VIEW"){
btnUpFile.remove();
if(inputFileVew.val() != ""){
if(inputFile.val() != ""){
btnViewerFile.prop("disabled", false);
btnViewerFile.show()
}