var EXCEL_ATTACHMENT_DESCRIPTION = "Planilha de Itens Excel";
var EXCEL_ATTACHMENT_INPUT_ID = "fnAnexo_PlanilhaItens";
function updateExcelImportUi(filename) {
var name = String(filename || "").trim();
if (name) {
$("#nomeArquivoExcel").text("Arquivo selecionado: " + name);
$("#btnAdicionarExcel").hide();
$("#btnRemoverExcel").show();
return;
}
$("#nomeArquivoExcel").text("Nenhum arquivo selecionado");
$("#btnAdicionarExcel").show();
$("#btnRemoverExcel").hide();
}
function getExcelAttachmentField() {
var $field = $("#" + EXCEL_ATTACHMENT_INPUT_ID);
if ($field.length) return $field;
return $("#_" + EXCEL_ATTACHMENT_INPUT_ID);
}
$(document).ready(function () {
// Quando clicar em "Adicionar arquivo"
$('#btnAdicionarExcel').on('click', function () {
if (typeof uploadFile === "function" && getExcelAttachmentField().length) {
uploadFile(EXCEL_ATTACHMENT_DESCRIPTION, EXCEL_ATTACHMENT_INPUT_ID);
return;
}
$('#excelUpload').click(); // fallback: aciona o input escondido
});
// Quando um arquivo for selecionado
$('#excelUpload').on('change', function () {
const file = this.files[0];
if (file) {
updateExcelImportUi(file.name);
carregarItensDoExcel('excelUpload'); // chama sua função
}
});
// Quando clicar em "Remover arquivo"
$('#btnRemoverExcel').on('click', function () {
$('#excelUpload').val('');
updateExcelImportUi("");
getExcelAttachmentField().val("");
try {
removeFile(EXCEL_ATTACHMENT_DESCRIPTION);
if (typeof setFilePhisicalName === "function") {
setFilePhisicalName(EXCEL_ATTACHMENT_INPUT_ID, "");
}
} catch (e) {
console.error("Falha ao remover anexo da planilha:", e);
}
});
$('#chaveNfe').on('input', function () {
var key = normalizeNfeKey($(this).val());
$(this).val(key);
clearNfeConsultaFields();
setNfeFeedback("", "hidden");
});
$('#btnConsultarChaveNfe').on('click', function () {
consultarChaveNfe();
});
$(document).on("change", "input[name='tipoMotoristaEntrega']", function () {
applyMotoristaEntregaMode($(this).val(), false);
});
$(document).on("change", "#motoristaEntregaSelecionado", function () {
applySelectedMotoristaEntregaOption();
});
$(document).on("input", "input[name^='quantidadeItem___'], input[name^='_quantidadeItem___'], input[name='quantidadeItem'], input[name='_quantidadeItem'], input[id^='quantidadeItem___'], input[id^='_quantidadeItem___'], #quantidadeItem, #_quantidadeItem", function () {
syncQuantidadeAprovadaFromSolicitada(this);
processarConferenciaNfe();
toggleQuantidadeAprovadaGestorByActivity($("#activity").val());
});
$(document).on("input", ".input-qtd-aprov-gestor-view", function () {
var linha = String($(this).attr("data-linha") || "");
var indice = String($(this).attr("data-indice") || "");
if (!linha) return;
var normalized = normalizeQuantidadeCampo($(this).val());
$(this).val(normalized);
var $row = $("#tabelaAprovacaoGestorItensBody tr[data-linha='" + linha + "']");
var $hidden = getCampoItem("quantidadeAprovadaGestor", indice, $row);
if (!$hidden.length) {
$hidden = getCampoItem("quantidadeAprovadaGestor", indice);
}
if ($hidden.length) {
$hidden.val(normalized);
}
atualizarStatusLinhaAprovacaoGestor(linha);
});
var activity = String($("#activity").val() || "");
applyTransferStatus(activity);
if ($("#formMode").val() == "VIEW") {
showAndBlock(["all"]);
$("#btnConsultarChaveNfe").prop("disabled", true).hide();
updateConferenciaNfeVisibility(activity);
} else {
//show the right fields
var requestDate = getCurrentDate();
if (String(activity) !== "6") {
$("#btnConsultarChaveNfe").prop("disabled", true).hide();
}
$(".activity").hide();
$(".activity-" + activity).show();
if (activity == 0 || activity == 1) {
//primeira atividade
//$("#dataAbertura").val(requestDate[0] + " - " + requestDate[1]);
$("#dataAbertura").val(requestDate[0]);
// add_new_row("tabelaItens");
} else if (activity == 4) {
showAndBlock([0]);
$("#userValidacaoGestor").val($("#currentUserName").val());
$("#dataValidacaoGestor").val(
requestDate[0] + " - " + requestDate[1]
);
updt_line();
} else if (activity == 6) {
showAndBlock([0, 4]);
if ($("#usuarioEmissorNfe").val() == "") {
$("#usuarioEmissorNfe").val($("#currentUserName").val());
}
if ($("#dataEmissaoNfe").val() == "") {
$("#dataEmissaoNfe").val(
requestDate[0] + " - " + requestDate[1]
);
}
if ($("#justificativaDecisaoGestor").val() == "") {
$(".justificativa-activity-4").hide();
}
updt_line();
} else if (activity == 57) {
$("#userCotacaoGestor").val($("#currentUserName").val());
$("#dataAprovCompras").val(
requestDate[0] + " - " + requestDate[1]
);
$("#blocoTipoMotoristaEntrega, #blocoOutroMotoristaEntrega").hide();
$("input[name='tipoMotoristaEntrega']").prop("disabled", true);
$("#motoristaEntregaSelecionado").prop("disabled", true);
showAndBlock([0, 4, 6]);
if ($("#justificativaDecisaoGestor").val() == "") {
$(".justificativa-activity-4").hide();
}
if ($("#justificativaDecisaoCompras").val() == "") {
$(".justificativa-activity-6").hide();
}
updt_line();
} else if (activity == 31) {
$("#userRealizacaoCompras").val($("#currentUserName").val());
$("#dataRealizacaoCompras").val(
requestDate[0] + " - " + requestDate[1]
);
if ($("#motoristaColetaNome").val() == "") {
$("#motoristaColetaNome").val($("#currentUserName").val());
}
if ($("#motoristaColetaLogin").val() == "") {
$("#motoristaColetaLogin").val($("#currentUserId").val());
}
if ($("#dataColeta").val() == "") {
$("#dataColeta").val(requestDate[0] + " " + requestDate[1]);
}
initMotoristaEntregaEscolha();
$("#blocoTipoMotoristaEntrega").show();
$("input[name='tipoMotoristaEntrega']").prop("disabled", false);
$("#motoristaEntregaSelecionado").prop("disabled", false);
// Mantem apenas etapas anteriores bloqueadas; card de coleta e entrega estao separados.
showAndBlock([0, 4, 6]);
if ($("#justificativaDecisaoGestor").val() == "") {
$(".justificativa-activity-4").hide();
}
if ($("#justificativaDecisaoCompras").val() == "") {
$(".justificativa-activity-6").hide();
}
updt_line();
} else if (activity == 18) {
var campoJustificativaProblema = $("#justificativaValidaProblema");
if (campoJustificativaProblema.length && campoJustificativaProblema.val() != "") {
showAndBlock([0, 4, 6, 24, 31, 57]);
} else {
showAndBlock([0, 4, 6, 31, 57]);
}
$("#userValidacaoItens").val($("#currentUserName").val());
$("#dataValidacaoItens").val(requestDate[0] + " - " + requestDate[1]);
if ($("#justificativaDecisaoGestor").val() == "") {
$(".justificativa-activity-4").hide();
}
if ($("#justificativaDecisaoCompras").val() == "") {
$(".justificativa-activity-6").hide();
}
if ($("#consideracoesCompras").val() == "") {
$(".justificativa-activity-31").hide();
}
$("input[name=validacaoItens]").on("change", function () {
$(".justificativaDecisaoItens").hide();
var validacaoItensSelecionada = $("input[name=validacaoItens]:checked").val();
if (
validacaoItensSelecionada == "divergencia" ||
validacaoItensSelecionada == "incorreto" ||
validacaoItensSelecionada == "naoEntregue"
) {
$(".justificativaDecisaoItens").show();
}
});
$("input[name=validacaoItens]").trigger("change");
updt_line();
} else if (activity == 24) {
showAndBlock([0, 4, 6, 31, 18]);
if ($("#justificativaDecisaoGestor").val() == "") {
$(".justificativa-activity-4").hide();
}
if ($("#justificativaDecisaoCompras").val() == "") {
$(".justificativa-activity-6").hide();
}
if ($("#consideracoesCompras").val() == "") {
$(".justificativa-activity-31").hide();
}
updt_line();
}
updateConferenciaNfeVisibility(activity);
}
syncQuantidadeAprovadaAllRows();
toggleQuantidadeAprovadaGestorByActivity(activity);
agendarRefreshTabelaAprovacao(activity);
updateExcelImportUi(getExcelAttachmentField().val());
formatarMoedasTabela("preco___");
//formatarMoedasTabela("precoIndica___");
formatarMoedasTabela("ValorTotal");
displayBtnFiles();
invisibleBtnUpload("fnAnexo_PlanilhaItens");
invisibleBtnUpload("fnAnexo_Nfe");
invisibleBtnUpload("fdAnexo_Coleta");
invisibleBtnUpload("fdAnexo_Entrega");
invisibleBtnUpload("fdAnexo_recebimento");
initAttachmentPlugins();
processarConferenciaNfe();
// gerarTabelaCotacaoIndica("tabelaCotacaoIndica", "tabelaItens");
});
function agendarRefreshTabelaAprovacao(activity) {
var state = String(activity || $("#activity").val() || "");
var retries = [250, 800, 1800];
for (var i = 0; i < retries.length; i++) {
(function (delay) {
setTimeout(function () {
syncQuantidadeAprovadaAllRows();
toggleQuantidadeAprovadaGestorByActivity(state);
}, delay);
})(retries[i]);
}
}
function applyTransferStatus(activity) {
var current = String(activity || "");
var pills = $("#transferStatus .status-pill");
if (!pills.length) return;
pills.removeClass("is-active is-done");
var activeOrder = -1;
pills.each(function () {
var pill = $(this);
var activities = String(pill.attr("data-activities") || "").split(",");
for (var i = 0; i < activities.length; i++) {
if ($.trim(activities[i]) === current) {
pill.addClass("is-active");
var order = parseInt(pill.attr("data-order"), 10);
if (!isNaN(order)) {
activeOrder = order;
}
break;
}
}
});
if (activeOrder < 0) return;
pills.each(function () {
var pill = $(this);
var order = parseInt(pill.attr("data-order"), 10);
if (!isNaN(order) && order < activeOrder) {
pill.addClass("is-done");
}
});
}
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();
// Remove tudo que não for número
valor = valor.replace(/\D/g, '');
// Converte para número decimal
let numero = parseFloat(valor) / 100;
// Formata para Real Brasileiro
if (!isNaN(numero)) {
valor = numero.toLocaleString('pt-BR', { minimumFractionDigits: 2, maximumFractionDigits: 2 });
}
// Atualiza o campo com a formatação correta
$(this).val(valor);
});
}
//show the activity and then block the fields
function showAndBlock(activity) {
for (var i = 0, l = activity.length; i < l; i++) {
$(".activity-" + activity[i]).show();
$(".hideButton").hide();
$(".activity-" + activity[i] + " :input").each(function () {
$(this).attr("readonly", "readonly");
$(this)
.css("background-color", "#eee")
.children("option:not(:selected)")
.prop("disabled", true);
$(this).on("mousedown", function (e) {
this.blur();
window.focus();
});
if ($(this).is(":checkbox")) {
$(this).attr("disabled", true);
} else if ($(this).is(":radio")) {
$(this).on("click", function () {
return false;
});
}
});
}
}
function getCurrentDate() {
var newDate = new Date();
var h = newDate.getHours();
if (h < 10) {
h = "0" + h;
}
var m = newDate.getMinutes();
if (m < 10) {
m = "0" + m;
}
var hour = h + ":" + m; // + ":" + s;
var day = newDate.getDate();
if (day < 10) {
day = "0" + day;
}
var month = newDate.getMonth() + 1;
if (month < 10) {
month = "0" + month;
}
newDate = day + "/" + month + "/" + newDate.getFullYear();
var currentDate = [newDate, hour];
return currentDate;
}
function normalizeQuantidadeCampo(value) {
var txt = String(value == null ? "" : value).trim();
if (txt === "") return "";
txt = txt.replace(",", ".");
var n = parseFloat(txt);
if (isNaN(n) || n < 0) return "";
if (Math.floor(n) === n) return String(parseInt(n, 10));
return String(n);
}
function toNumberQuantidade(value) {
var txt = normalizeQuantidadeCampo(value);
if (txt === "") return NaN;
return parseFloat(txt);
}
function getIndiceCampoPaiFilho($el) {
var raw = String($el.attr("name") || $el.attr("id") || "");
if (raw.indexOf("___") < 0) return "";
return String(raw.split("___")[1] || "");
}
function collectQuantidadeItemFields() {
var out = [];
var seen = {};
var selector = [
"input[name^='quantidadeItem___']",
"input[name^='_quantidadeItem___']",
"input[name='quantidadeItem']",
"input[name='_quantidadeItem']",
"input[id^='quantidadeItem___']",
"input[id^='_quantidadeItem___']",
"#quantidadeItem",
"#_quantidadeItem"
].join(", ");
$(selector).each(function () {
var $field = $(this);
var key = String($field.attr("name") || $field.attr("id") || "");
if (!key) {
key = "anon_" + out.length;
}
if (seen[key]) return;
seen[key] = true;
out.push(this);
});
return out;
}
function getCampoItem(baseName, indice, $scopeRow) {
var idx = String(indice == null ? "" : indice).trim();
var selectors = [];
if (idx !== "") {
selectors.push("#" + baseName + "___" + idx);
selectors.push("#_" + baseName + "___" + idx);
selectors.push("[name='" + baseName + "___" + idx + "']");
selectors.push("[name='_" + baseName + "___" + idx + "']");
}
selectors.push("#" + baseName);
selectors.push("#_" + baseName);
selectors.push("[name='" + baseName + "']");
selectors.push("[name='_" + baseName + "']");
for (var i = 0; i < selectors.length; i++) {
var selector = selectors[i];
var $field = $();
if ($scopeRow && $scopeRow.length) {
$field = $scopeRow.find(selector).first();
}
if (!$field.length) {
$field = $(selector).first();
}
if ($field.length) return $field;
}
return $();
}
function syncQuantidadeAprovadaFromSolicitada(inputSolicitada) {
var $solicitada = $(inputSolicitada);
var idx = getIndiceCampoPaiFilho($solicitada);
var $row = $solicitada.closest("tr");
var $aprovada = getCampoItem("quantidadeAprovadaGestor", idx, $row);
if (!$aprovada.length) return;
var currentAprovada = normalizeQuantidadeCampo($aprovada.val());
if (currentAprovada !== "") return;
var solicitada = normalizeQuantidadeCampo($solicitada.val());
if (solicitada !== "") {
$aprovada.val(solicitada);
}
}
function syncQuantidadeAprovadaAllRows() {
$(collectQuantidadeItemFields()).each(function () {
syncQuantidadeAprovadaFromSolicitada(this);
});
}
function toggleQuantidadeAprovadaGestorByActivity(activity) {
var state = String(activity || "");
var isGestorApproval = state === "4";
var $tbody = $("#tabelaAprovacaoGestorItensBody");
if (!$tbody.length) return;
var html = [];
var rowsFound = 0;
$(collectQuantidadeItemFields()).each(function (idx, el) {
var $qtdSolicitadaField = $(el);
var $row = $qtdSolicitadaField.closest("tr");
var linha = getIndiceCampoPaiFilho($qtdSolicitadaField);
var linhaKey = linha !== "" ? linha : ("base_" + idx);
var codigo = $.trim(String(getCampoItem("descricao", linha, $row).val() || ""));
var descricao = $.trim(String(getCampoItem("codigoItem", linha, $row).val() || ""));
var categoria = $.trim(String(getCampoItem("categoriaItem", linha, $row).val() || ""));
var qtdSolicitadaNorm = normalizeQuantidadeCampo($qtdSolicitadaField.val());
var hasData = qtdSolicitadaNorm !== "" || codigo !== "" || descricao !== "" || categoria !== "";
if (!hasData) return;
rowsFound++;
var qtdSolicitadaLabel = qtdSolicitadaNorm || "-";
var itemLabel = codigo || descricao || ("Item " + rowsFound);
if (descricao && descricao !== codigo) itemLabel += " - " + descricao;
if (categoria) itemLabel += " (" + categoria + ")";
var $hiddenAprovada = getCampoItem("quantidadeAprovadaGestor", linha, $row);
var qtdAprovadaAtual = normalizeQuantidadeCampo($hiddenAprovada.val());
if (qtdAprovadaAtual === "" && qtdSolicitadaNorm !== "") {
qtdAprovadaAtual = qtdSolicitadaNorm;
$hiddenAprovada.val(qtdAprovadaAtual);
}
var status = "Sem divergência";
var statusClass = "label label-success";
if (qtdSolicitadaNorm === "" || qtdAprovadaAtual === "") {
status = "Aprovado";
statusClass = "label label-default";
} else {
var nSolicitada = toNumberQuantidade(qtdSolicitadaNorm);
var nAprovada = toNumberQuantidade(qtdAprovadaAtual);
if (isNaN(nSolicitada) || isNaN(nAprovada)) {
status = "Inválido";
statusClass = "label label-danger";
} else if (nAprovada > nSolicitada) {
status = "Maior que solicitada";
statusClass = "label label-danger";
} else if (nAprovada === 0) {
status = "Sem estoque";
statusClass = "label label-warning";
} else if (nAprovada < nSolicitada) {
status = "Divergente";
statusClass = "label label-warning";
}
}
var disabledAttr = isGestorApproval ? "" : " readonly disabled ";
html.push(
"
" +
"
" + rowsFound + "
" +
"
" + escapeHtml(itemLabel) + "
" +
"
" + escapeHtml(qtdSolicitadaLabel) + "
" +
"
" +
"" +
"
" +
"
" + escapeHtml(status) + "
" +
"
"
);
});
if (!rowsFound) {
html.push("
Sem itens para validação.
");
}
$tbody.html(html.join(""));
$(".hint-qtd-aprov-gestor").toggle(isGestorApproval);
}
function atualizarStatusLinhaAprovacaoGestor(linha) {
var rowSelector = "#tabelaAprovacaoGestorItensBody tr[data-linha='" + linha + "']";
var $row = $(rowSelector);
if (!$row.length) return;
var $status = $row.find(".status-aprov-gestor");
if (!$status.length) return;
var qtdSolicitada = toNumberQuantidade($row.attr("data-qtd-solicitada"));
var qtdAprovada = toNumberQuantidade($row.find(".input-qtd-aprov-gestor-view").val());
$status.removeClass("label-success label-warning label-danger label-default");
if (isNaN(qtdSolicitada) || isNaN(qtdAprovada)) {
$status.addClass("label-default").text("Pendente");
return;
}
if (qtdAprovada > qtdSolicitada) {
$status.addClass("label-danger").text("Maior que solicitada");
return;
}
if (qtdAprovada === 0) {
$status.addClass("label-warning").text("Sem estoque");
return;
}
if (qtdAprovada < qtdSolicitada) {
$status.addClass("label-warning").text("Divergente");
return;
}
$status.addClass("label-success").text("Sem divergência");
}
function validarQuantidadeAprovadaGestor() {
var divergencias = 0;
var itemContador = 0;
$(collectQuantidadeItemFields()).each(function () {
var $qtdSolicitada = $(this);
var $row = $qtdSolicitada.closest("tr");
var linha = getIndiceCampoPaiFilho($qtdSolicitada);
var codigo = $.trim(String(getCampoItem("descricao", linha, $row).val() || ""));
var descricao = $.trim(String(getCampoItem("codigoItem", linha, $row).val() || ""));
var qtdSolicitadaRaw = $.trim(String($qtdSolicitada.val() || ""));
if (qtdSolicitadaRaw === "" && !codigo && !descricao) {
return;
}
itemContador++;
var $qtdAprovada = getCampoItem("quantidadeAprovadaGestor", linha, $row);
if (!$qtdAprovada.length) return;
var qtdSolicitada = toNumberQuantidade(qtdSolicitadaRaw);
if (isNaN(qtdSolicitada) || qtdSolicitada <= 0) {
$qtdSolicitada.closest("td, div").addClass("errorValidate");
throw "Quantidade solicitada inválida no item " + itemContador + ".";
}
var qtdAprovadaRaw = $.trim(String($qtdAprovada.val() || ""));
if (qtdAprovadaRaw === "") {
$qtdAprovada.val(normalizeQuantidadeCampo($qtdSolicitada.val()));
qtdAprovadaRaw = $.trim(String($qtdAprovada.val() || ""));
}
var qtdAprovada = toNumberQuantidade(qtdAprovadaRaw);
if (isNaN(qtdAprovada) || qtdAprovada < 0) {
$qtdAprovada.closest("td, div").addClass("errorValidate");
throw "Preencha a quantidade aprovada do item " + itemContador + " com valor maior ou igual a zero.";
}
if (qtdAprovada > qtdSolicitada) {
$qtdAprovada.closest("td, div").addClass("errorValidate");
throw "A quantidade aprovada do item " + itemContador + " não pode ser maior que a solicitada.";
}
if (qtdAprovada !== qtdSolicitada) {
divergencias++;
}
});
$("#qtdDivergenciasGestor").val(String(divergencias));
if (divergencias > 0 && $.trim($("#justificativaDecisaoGestor").val()) === "") {
$("#justificativaDecisaoGestor").parent("div").addClass("errorValidate");
throw "Informe a justificativa da decisão quando houver divergência de quantidade.";
}
}
function initMotoristaEntregaEscolha() {
var escolha = String($("input[name='tipoMotoristaEntrega']:checked").val() || "");
if (!escolha) {
var coletaLogin = String($("#motoristaColetaLogin").val() || "").trim();
var entregaLogin = String($("#motoristaEntregaLogin").val() || "").trim();
if (entregaLogin && coletaLogin && entregaLogin !== coletaLogin) {
escolha = "outro";
} else {
escolha = $("#motoristaColetaNome").val() ? "mesmo" : "outro";
}
$("input[name='tipoMotoristaEntrega'][value='" + escolha + "']").prop("checked", true);
}
applyMotoristaEntregaMode(escolha, true);
}
function applyMotoristaEntregaMode(mode, keepValues) {
var escolha = String(mode || "");
var blocoOutro = $("#blocoOutroMotoristaEntrega");
if (!blocoOutro.length) return;
if (escolha === "outro") {
blocoOutro.show();
loadMotoristasEntregaSelect(false);
if (!keepValues) {
$("#motoristaEntregaNome").val("");
$("#motoristaEntregaLogin").val("");
clearZoomField("motoristaEntregaSelecionado");
} else {
syncMotoristaEntregaSelectFromHidden();
}
return;
}
blocoOutro.hide();
if (escolha === "mesmo") {
var coletaNome = String($("#motoristaColetaNome").val() || "").trim();
var coletaLogin = String($("#motoristaColetaLogin").val() || "").trim();
if (coletaNome) $("#motoristaEntregaNome").val(coletaNome);
if (coletaLogin) $("#motoristaEntregaLogin").val(coletaLogin);
}
}
function clearZoomField(fieldId) {
try {
if (window[fieldId] && typeof window[fieldId].clear === "function") {
window[fieldId].clear();
}
} catch (e) {}
try {
if (window[fieldId] && typeof window[fieldId].setValue === "function") {
window[fieldId].setValue("");
}
} catch (e2) {}
$("#" + fieldId).val("");
}
var MOTORISTAS_GROUP_DEFAULT_ID = "Motoristas";
var MOTORISTAS_GROUP_BY_UF = {
AL: "motoristaAL",
BA: "motoristaBA",
SE: "motoristaSE"
};
var motoristasEntregaCacheByGroup = {};
var motoristasEntregaLoadingByGroup = {};
var motoristaEntregaGroupAtual = "";
function normalizeUfCode(value) {
return String(value || "").toUpperCase().replace(/[^A-Z]/g, "").substring(0, 2);
}
function resolveMotoristasGroupIdByUf(uf) {
var ufCode = normalizeUfCode(uf);
if (!ufCode) {
return MOTORISTAS_GROUP_DEFAULT_ID;
}
if (MOTORISTAS_GROUP_BY_UF[ufCode]) {
return String(MOTORISTAS_GROUP_BY_UF[ufCode] || "").trim() || MOTORISTAS_GROUP_DEFAULT_ID;
}
// Convencao para facilitar novos estados sem precisar alterar o JS.
return "motorista" + ufCode;
}
function getMotoristasEntregaQueryContext() {
var uf = normalizeUfCode($("#ufDestino").val());
var groupId = resolveMotoristasGroupIdByUf(uf);
return {
uf: uf,
groupId: groupId,
cacheKey: groupId
};
}
function loadMotoristasEntregaSelect(forceReload) {
var select = $("#motoristaEntregaSelecionado");
if (!select.length) return;
var context = getMotoristasEntregaQueryContext();
var cacheKey = context.cacheKey;
motoristaEntregaGroupAtual = context.groupId;
if (!forceReload && Object.prototype.hasOwnProperty.call(motoristasEntregaCacheByGroup, cacheKey)) {
renderMotoristasEntregaOptions(motoristasEntregaCacheByGroup[cacheKey], context);
return;
}
if (motoristasEntregaLoadingByGroup[cacheKey]) return;
motoristasEntregaLoadingByGroup[cacheKey] = true;
select.prop("disabled", true);
var requestPayload = {
name: "ds_motoristas_grupo",
fields: null,
constraints: [{
_field: "GROUP_ID",
_initialValue: context.groupId,
_finalValue: context.groupId,
_type: 1
}],
order: null
};
$.ajax({
type: "POST",
url: "/api/public/ecm/dataset/datasets/",
contentType: "application/json",
dataType: "json",
data: JSON.stringify(requestPayload)
}).done(function (response) {
var values = ((((response || {}).content || {}).values) || []);
var rows = normalizeMotoristasEntregaRows(values);
motoristasEntregaCacheByGroup[cacheKey] = rows;
if (motoristaEntregaGroupAtual === context.groupId) {
renderMotoristasEntregaOptions(rows, context);
}
}).fail(function (xhr) {
console.error("Falha ao carregar motoristas do dataset (" + context.groupId + "):", xhr);
motoristasEntregaCacheByGroup[cacheKey] = [];
if (motoristaEntregaGroupAtual === context.groupId) {
renderMotoristasEntregaOptions([], context);
}
}).always(function () {
motoristasEntregaLoadingByGroup[cacheKey] = false;
if (motoristaEntregaGroupAtual === context.groupId) {
select.prop("disabled", false);
}
});
}
function normalizeMotoristasEntregaRows(values) {
var out = [];
var map = {};
for (var i = 0; i < values.length; i++) {
var row = values[i] || {};
var colleagueId = String(row.COLLEAGUE_ID || row.colleagueId || row.colleagueid || "").trim();
if (!colleagueId) continue;
if (map[colleagueId]) continue;
map[colleagueId] = true;
out.push({
COLLEAGUE_ID: colleagueId,
NOME: String(row.NOME || row.colleagueName || row.nome || "").trim(),
LOGIN: String(row.LOGIN || row.login || "").trim(),
EMAIL: String(row.EMAIL || row.mail || row.email || "").trim()
});
}
out.sort(function (a, b) {
var aNome = (a.NOME || a.LOGIN || a.COLLEAGUE_ID).toLowerCase();
var bNome = (b.NOME || b.LOGIN || b.COLLEAGUE_ID).toLowerCase();
return aNome < bNome ? -1 : (aNome > bNome ? 1 : 0);
});
return out;
}
function renderMotoristasEntregaOptions(rows, context) {
var select = $("#motoristaEntregaSelecionado");
if (!select.length) return;
var selectedValue = String($("#motoristaEntregaLogin").val() || select.val() || "").trim();
var placeholder = "Selecione o motorista";
if (context && context.uf) {
placeholder = "Selecione o motorista da UF " + context.uf;
}
if ((rows || []).length === 0 && context && context.uf) {
placeholder = "Sem motoristas cadastrados para UF " + context.uf;
}
select.empty();
select.append($("").val("").text(placeholder));
for (var i = 0; i < rows.length; i++) {
var row = rows[i];
var nome = String(row.NOME || row.LOGIN || row.COLLEAGUE_ID);
var label = row.LOGIN ? (nome + " (" + row.LOGIN + ")") : nome;
var option = $("")
.val(row.COLLEAGUE_ID)
.text(label)
.attr("data-nome", nome)
.attr("data-login", String(row.LOGIN || ""));
select.append(option);
}
if (selectedValue) {
select.val(selectedValue);
}
if (!select.val()) {
// Limpa selecao visual quando o valor salvo nao existe mais no dataset.
select.val("");
}
applySelectedMotoristaEntregaOption();
}
function refreshMotoristasEntregaByUf(forceReload) {
var escolha = String($("input[name='tipoMotoristaEntrega']:checked").val() || "");
if (escolha !== "outro") return;
loadMotoristasEntregaSelect(forceReload === true);
}
function syncMotoristaEntregaSelectFromHidden() {
var select = $("#motoristaEntregaSelecionado");
if (!select.length) return;
var storedId = String($("#motoristaEntregaLogin").val() || "").trim();
if (!storedId) {
select.val("");
return;
}
select.val(storedId);
if (select.val()) {
applySelectedMotoristaEntregaOption();
}
}
function applySelectedMotoristaEntregaOption() {
var select = $("#motoristaEntregaSelecionado");
if (!select.length) return;
var selectedId = String(select.val() || "").trim();
if (!selectedId) {
if (String($("input[name='tipoMotoristaEntrega']:checked").val() || "") === "outro") {
$("#motoristaEntregaNome").val("");
$("#motoristaEntregaLogin").val("");
}
return;
}
var option = select.find("option:selected");
var nome = String(option.attr("data-nome") || option.text() || "").trim();
$("#motoristaEntregaLogin").val(selectedId);
$("#motoristaEntregaNome").val(nome);
$("#tipoMotoristaEntregaOutro").prop("checked", true);
}
function updateConferenciaNfeVisibility(activity) {
var activityValue = String(activity || $("#activity").val() || "");
var exibirConferencia = (activityValue === "6" || activityValue === "18");
$("#blocoConferenciaNfe").toggle(exibirConferencia);
// Na emissao (6), mostra apenas a tabela de conferencia.
// Os campos de validacao de recebimento ficam apenas na atividade 18.
var showOnlyConferencia = (activityValue === "6");
$("input[name='validacaoItens']").closest(".row").toggle(!showOnlyConferencia);
$("#fdAnexo_recebimento").closest(".row").toggle(!showOnlyConferencia);
$(".justificativaDecisaoItens").toggle(!showOnlyConferencia);
}
var ATTACHMENT_PLUGIN_CONFIG = {
fnAnexo_PlanilhaItens: {
filename: EXCEL_ATTACHMENT_DESCRIPTION,
accept: ".xlsx,.xls"
},
fnAnexo_Nfe: {
filename: "Nota Fiscal",
accept: ".pdf,.xml,image/*"
},
fdAnexo_Coleta: {
filename: "Comprovante de Coleta",
accept: ".pdf,image/*"
},
fdAnexo_Entrega: {
filename: "Comprovante de Entrega",
accept: ".pdf,image/*"
},
fdAnexo_recebimento: {
filename: "Comprovante de Recebimento",
accept: ".pdf,image/*"
}
};
function initAttachmentPlugins() {
var mode = getFormMode();
var allowedInputs = getAllowedAttachmentInputs();
var hasPlugin = typeof $.fn.fluigFormAttachment === "function";
if (!hasPlugin) {
console.warn("fluigFormAttachment.js nao carregado; campos de anexo sem botoes de upload.");
return;
}
Object.keys(ATTACHMENT_PLUGIN_CONFIG).forEach(function (inputId) {
var cfg = ATTACHMENT_PLUGIN_CONFIG[inputId];
var input = $("#" + inputId);
if (!input.length) return;
var dynamicFilename = resolveAttachmentFilename(inputId, cfg.filename);
var canUploadHere = (mode !== "VIEW" && allowedInputs.indexOf(inputId) >= 0);
try {
if (!input.data("fluigFormAttachment")) {
input.fluigFormAttachment({
filename: dynamicFilename,
accept: cfg.accept,
showActionButton: canUploadHere
});
} else {
input.fluigFormAttachment("filename", dynamicFilename);
}
if (canUploadHere) {
input.fluigFormAttachment("showActionButton");
} else {
input.fluigFormAttachment("hideActionButton");
}
} catch (e) {
console.error("Falha ao inicializar anexo '" + inputId + "':", e);
}
});
}
function resolveAttachmentFilename(inputId, fallback) {
if (inputId === EXCEL_ATTACHMENT_INPUT_ID) {
var numProcExcel = String($("#WKNumProces").val() || "").trim();
return numProcExcel ? (EXCEL_ATTACHMENT_DESCRIPTION + " - " + numProcExcel) : EXCEL_ATTACHMENT_DESCRIPTION;
}
if (inputId !== "fnAnexo_Nfe") return fallback;
var solicitacao = String($("#WKNumProces").val() || "").trim();
if (!solicitacao) return "Nota Fiscal";
return "Nota Fiscal - " + solicitacao;
}
function normalizeNfeKey(value) {
return String(value == null ? "" : value).replace(/\D/g, "").substring(0, 44);
}
function clearNfeConsultaFields() {
$("#numeroNfeConsulta").val("");
$("#serieNfeConsulta").val("");
$("#dataEmissaoApiNfe").val("");
$("#situacaoNfeConsulta").val("");
$("#fornecedorNfeConsulta").val("");
$("#valorNfeConsulta").val("");
$("#dataEntradaNfeConsulta").val("");
$("#itensNfeConsulta").val("");
$("#operacaoNfeConsulta").val("");
$("#lojaNfeConsulta").val("");
$("#invoiceIdNfeConsulta").val("");
$("#storeIdNfeConsulta").val("");
$("#itensNfeJson").val("[]");
$("#qtdDivergenciasNfe").val("0");
renderTabelaConferencia([], 0, 0, "Consulte a chave da NFe para gerar o confronto dos itens.", "info");
}
function setNfeFeedback(message, type) {
var feedback = $("#consultaNfeFeedback");
if (!feedback.length) {
return;
}
feedback.removeClass("alert-success alert-danger alert-info alert-warning");
if (!message || type === "hidden") {
feedback.hide().text("");
return;
}
if (type === "success") {
feedback.addClass("alert-success");
} else if (type === "warning") {
feedback.addClass("alert-warning");
} else if (type === "info") {
feedback.addClass("alert-info");
} else {
feedback.addClass("alert-danger");
}
feedback.text(message).show();
}
function formatNfeCurrency(value) {
var textValue = String(value == null ? "" : value).trim();
if (textValue === "") {
return "";
}
var numberValue = parseFloat(textValue.replace(",", "."));
if (isNaN(numberValue)) {
return textValue;
}
try {
return numberValue.toLocaleString("pt-BR", { style: "currency", currency: "BRL" });
} catch (e) {
return textValue;
}
}
function fillNfeConsultaFields(row) {
var emissionDate = String(row.emissionDate || "");
$("#numeroNfeConsulta").val(String(row.invoiceNumber || ""));
$("#serieNfeConsulta").val(String(row.serie || ""));
$("#dataEmissaoApiNfe").val(emissionDate);
$("#situacaoNfeConsulta").val(String(row.situation || ""));
$("#fornecedorNfeConsulta").val(String(row.supplierName || ""));
$("#valorNfeConsulta").val(formatNfeCurrency(row.documentValue));
$("#dataEntradaNfeConsulta").val(String(row.updatedAt || ""));
$("#itensNfeConsulta").val(String(row.itemCount || ""));
$("#operacaoNfeConsulta").val(String(row.fiscalOperationDescription || ""));
$("#lojaNfeConsulta").val(String(row.storeId || ""));
$("#invoiceIdNfeConsulta").val(String(row.invoiceId || ""));
$("#storeIdNfeConsulta").val(String(row.storeId || ""));
$("#itensNfeJson").val(String(row.itensJson || "[]"));
if (emissionDate) {
$("#dataEmissaoNfe").val(emissionDate);
}
processarConferenciaNfe();
}
function processarConferenciaNfe() {
var nfeItems = parseItensNfeJson();
if (nfeItems.length === 0) {
$("#qtdDivergenciasNfe").val("0");
renderTabelaConferencia([], 0, 0, "Consulte a chave da NFe para gerar o confronto dos itens.", "info");
return;
}
var solicitacaoMap = buildSolicitacaoMap();
var nfeMap = buildNfeMap(nfeItems);
var allKeys = mergeKeys(solicitacaoMap, nfeMap);
var rows = [];
var divergencias = 0;
for (var i = 0; i < allKeys.length; i++) {
var key = allKeys[i];
var req = solicitacaoMap[key] || { qty: 0, label: key };
var nfe = nfeMap[key] || { qty: 0, label: key };
var status = "OK";
if (req.qty === 0 && nfe.qty > 0) {
status = "Somente NFe";
} else if (nfe.qty === 0 && req.qty > 0) {
status = "Somente base";
} else if (Math.abs(req.qty - nfe.qty) > 0.00001) {
status = "Quantidade divergente";
}
if (status !== "OK") {
divergencias++;
}
rows.push({
key: req.label || nfe.label || key,
requestedQty: req.qty,
nfeQty: nfe.qty,
status: status
});
}
$("#qtdDivergenciasNfe").val(String(divergencias));
var resumo = "Conferencia finalizada: " + rows.length + " item(ns), " + divergencias + " divergencia(s).";
var resumoType = divergencias > 0 ? "warning" : "success";
renderTabelaConferencia(rows, rows.length, divergencias, resumo, resumoType);
}
function parseItensNfeJson() {
var raw = String($("#itensNfeJson").val() || "[]");
try {
var parsed = JSON.parse(raw);
return parsed instanceof Array ? parsed : [];
} catch (e) {
return [];
}
}
function buildSolicitacaoMap() {
var out = {};
$(collectQuantidadeItemFields()).each(function (i) {
var $qtd = $(this);
var $row = $qtd.closest("tr");
var indice = getIndiceCampoPaiFilho($qtd);
var rowKey = indice || ("BASE_" + (i + 1));
var qty = getQuantidadeBaseConferencia($qtd, indice, $row);
if (qty <= 0) return;
var productId = String(getCampoItem("productIdItem", indice, $row).val() || "").trim();
var code = resolveSolicitacaoItemCode(indice, $qtd);
var descricao = String(getCampoItem("codigoItem", indice, $row).val() || "").trim();
var key = resolveConferenciaKey(productId, code, "ROW:" + rowKey);
var label = productId ? ("PID " + productId) : (code || descricao || ("Linha " + rowKey));
if (!out[key]) {
out[key] = { qty: 0, label: label };
}
out[key].qty += qty;
});
return out;
}
function getQuantidadeBaseConferencia($qtdSolicitada, indice, $row) {
var qtdSolicitada = toFloatSafe($qtdSolicitada.val());
var $qtdAprovada = getCampoItem("quantidadeAprovadaGestor", indice, $row);
if ($qtdAprovada.length) {
var qtdAprovadaRaw = String($qtdAprovada.val() == null ? "" : $qtdAprovada.val()).trim();
// Regra: se o gestor preencheu, a conferencia da NFe usa a quantidade aprovada (inclusive 0).
if (qtdAprovadaRaw !== "") {
return toFloatSafe(qtdAprovadaRaw);
}
}
return qtdSolicitada;
}
function resolveSolicitacaoItemCode(indice, qtyInput) {
var code = String($("#codigoProdutoItem___" + indice).val() || "").trim();
if (code) return normalizeCodigoComparacao(code);
code = String($("#descricao___" + indice).val() || "").trim();
if (code) return normalizeCodigoComparacao(code);
var row = qtyInput && qtyInput.length ? qtyInput.closest("tr") : $();
if (row.length) {
var byName = findFirstFilledValue(row.find("input[name='descricao___" + indice + "']"));
if (byName) return normalizeCodigoComparacao(byName);
var anyDescricao = findFirstFilledValue(row.find("input[name^='descricao']"));
if (anyDescricao) return normalizeCodigoComparacao(anyDescricao);
var byIdLike = findFirstFilledValue(row.find("input[id*='descricao']"));
if (byIdLike) return normalizeCodigoComparacao(byIdLike);
var codigoCellInputs = row.find("td").eq(1).find("input,select,textarea");
var fromCodigoCell = findFirstFilledValue(codigoCellInputs);
if (fromCodigoCell) return normalizeCodigoComparacao(fromCodigoCell);
// Em modo bloqueado/view, o Zoom pode renderizar apenas texto em span/div.
var codigoCell = row.find("td").eq(1);
var zoomRendered = findFirstFilledText(codigoCell.find(
".select2-selection__rendered, .select2-chosen, .zoom-value, .zoom-span, span, div"
));
if (zoomRendered) return normalizeCodigoComparacao(zoomRendered);
// Fallback final: texto bruto da célula.
var rawCellText = String(codigoCell.text() || "").trim();
if (rawCellText) return normalizeCodigoComparacao(rawCellText);
}
return "";
}
function findFirstFilledValue(elements) {
if (!elements || !elements.length) return "";
for (var i = 0; i < elements.length; i++) {
var $el = $(elements[i]);
var val = String($el.val() || "").trim();
if (!val) {
val = String($el.attr("value") || "").trim();
}
if (!val) {
val = String($el.attr("data-value") || "").trim();
}
if (val) return val;
}
return "";
}
function findFirstFilledText(elements) {
if (!elements || !elements.length) return "";
for (var i = 0; i < elements.length; i++) {
var txt = String($(elements[i]).text() || "").trim();
if (txt) return txt;
}
return "";
}
function normalizeCodigoComparacao(value) {
var raw = String(value || "").trim();
if (!raw) return "";
// Zoom pode trazer "75655 - DESCRICAO"; para conferencia usamos o primeiro token.
var firstToken = raw.split(" - ")[0].split(" | ")[0].trim();
return firstToken || raw;
}
function buildNfeMap(items) {
var out = {};
for (var i = 0; i < items.length; i++) {
var item = items[i] || {};
var qty = toFloatSafe(item.quantity);
if (qty <= 0) continue;
var productId = String(item.productId || "").trim();
var code = String(item.code || "").trim();
var key = resolveConferenciaKey(productId, code, "NFE:" + i);
var label = productId ? ("PID " + productId) : (code || ("Item NFe " + (i + 1)));
if (!out[key]) {
out[key] = { qty: 0, label: label };
}
out[key].qty += qty;
}
return out;
}
function resolveConferenciaKey(productId, code, fallback) {
var pid = String(productId || "").trim();
if (pid) {
return "ITEM:" + pid;
}
var cod = String(code || "").trim();
if (cod) {
return "ITEM:" + cod;
}
return String(fallback || "");
}
function mergeKeys(a, b) {
var obj = {};
for (var ka in a) obj[ka] = true;
for (var kb in b) obj[kb] = true;
return Object.keys(obj);
}
function renderTabelaConferencia(rows, totalItens, divergencias, mensagem, tipo) {
var tbody = $("#tabelaConferenciaNfeBody");
var resumo = $("#resumoConferenciaNfe");
if (!tbody.length || !resumo.length) return;
var html = "";
if (!rows || rows.length === 0) {
html = "
Sem conferencia.
";
} else {
for (var i = 0; i < rows.length; i++) {
var row = rows[i];
var rowClass = row.status === "OK" ? "" : " class='danger'";
var itemSolicitado = row.key;
var qtdSolicitada = formatConferenciaNumero(row.requestedQty);
var itemNfe = row.key;
var qtdNfe = formatConferenciaNumero(row.nfeQty);
if (row.status === "Somente base") {
itemNfe = "-";
qtdNfe = "0";
} else if (row.status === "Somente NFe") {
itemSolicitado = "-";
qtdSolicitada = "0";
}
html += "
" +
"
" + escapeHtml(itemSolicitado) + "
" +
"
" + escapeHtml(qtdSolicitada) + "
" +
"
" + escapeHtml(itemNfe) + "
" +
"
" + escapeHtml(qtdNfe) + "
" +
"
" + escapeHtml(row.status) + "
" +
"
";
}
}
tbody.html(html);
var typeClass = "alert-info";
if (tipo === "success") typeClass = "alert-success";
if (tipo === "warning") typeClass = "alert-warning";
if (tipo === "danger" || tipo === "error") typeClass = "alert-danger";
resumo.removeClass("alert-info alert-success alert-warning alert-danger");
resumo.addClass(typeClass);
resumo.text(mensagem || ("Conferencia: " + totalItens + " item(ns), " + divergencias + " divergencia(s)."));
}
function montarResumoDivergenciasConferencia(limit) {
var max = parseInt(limit, 10);
if (isNaN(max) || max <= 0) max = 5;
var linhas = [];
$("#tabelaConferenciaNfeBody tr.danger").each(function () {
var cols = $(this).find("td");
if (!cols || cols.length < 5) return;
var itemSolicitado = String($(cols[0]).text() || "").trim();
var qtdSolicitada = String($(cols[1]).text() || "").trim();
var itemNfe = String($(cols[2]).text() || "").trim();
var qtdNfe = String($(cols[3]).text() || "").trim();
linhas.push("Item base: " + itemSolicitado + " / Quantidade: " + qtdSolicitada + " | Item emitido na nota: " + itemNfe + " / Quantidade: " + qtdNfe);
});
if (!linhas.length) return "";
if (linhas.length > max) {
var restantes = linhas.length - max;
return linhas.slice(0, max).join("; ") + "; ... +" + restantes + " item(ns)";
}
return linhas.join("; ");
}
function listarProdutosDivergentes(limit) {
var max = parseInt(limit, 10);
if (isNaN(max) || max <= 0) max = 10;
var items = [];
var seen = {};
$("#tabelaConferenciaNfeBody tr.danger").each(function () {
var cols = $(this).find("td");
if (!cols || cols.length < 5) return;
var itemSolicitado = String($(cols[0]).text() || "").trim();
var itemNfe = String($(cols[2]).text() || "").trim();
if (itemSolicitado && itemSolicitado !== "-" && !seen[itemSolicitado]) {
seen[itemSolicitado] = true;
items.push(itemSolicitado);
}
if (itemNfe && itemNfe !== "-" && !seen[itemNfe]) {
seen[itemNfe] = true;
items.push(itemNfe);
}
});
if (!items.length) return "";
if (items.length > max) {
return items.slice(0, max).join(", ") + " ... +" + (items.length - max);
}
return items.join(", ");
}
function toFloatSafe(value) {
var text = String(value == null ? "" : value).replace(",", ".").trim();
var n = parseFloat(text);
return isNaN(n) ? 0 : n;
}
function formatConferenciaNumero(value) {
var n = toFloatSafe(value);
return String(n).indexOf(".") >= 0 ? n.toFixed(2) : String(n);
}
function escapeHtml(value) {
return String(value == null ? "" : value)
.replace(/&/g, "&")
.replace(//g, ">")
.replace(/\"/g, """)
.replace(/'/g, "'");
}
function consultarChaveNfe() {
var key = normalizeNfeKey($("#chaveNfe").val());
$("#chaveNfe").val(key);
clearNfeConsultaFields();
if (key.length !== 44) {
setNfeFeedback("Informe uma chave com 44 digitos para consultar.", "warning");
return;
}
setNfeFeedback("Consultando chave da NFe...", "info");
try {
var constraint = DatasetFactory.createConstraint("key", key, key, ConstraintType.MUST);
var dataset = DatasetFactory.getDataset("ds_fiscal_invoice_by_keys", null, [constraint], null);
if (!dataset || !dataset.values || dataset.values.length === 0) {
setNfeFeedback("Nao foi possivel consultar a NFe no momento.", "error");
return;
}
var row = dataset.values[0] || {};
var success = String(row.success || "").toLowerCase() === "true";
if (!success) {
setNfeFeedback(String(row.message || "NFe nao encontrada para a chave informada."), "error");
return;
}
fillNfeConsultaFields(row);
if ($("#invoiceIdNfeConsulta").val() === "") {
setNfeFeedback("A consulta retornou sem identificador tecnico da NFe.", "error");
return;
}
setNfeFeedback("NFe localizada e vinculada a solicitacao.", "success");
} catch (e) {
setNfeFeedback("Erro ao consultar chave da NFe: " + e, "error");
}
}
var beforeSendValidate = function (numState, nextState) {
$(".errorValidate").removeClass("errorValidate");
if (numState == 0 || numState == 1) {
if ($("#estabelecimento ").val() == "") {
$("#estabelecimento ").parent("div").addClass("errorValidate");
throw "'Estabelecimento/filial ' é obrigatório.";
} else if ($("#enderecoSolicitante").val() == "") {
$("#enderecoSolicitante").parent("div").addClass("errorValidate");
throw "'Endereço do solicitante' é obrigatório.";
} else if ($("#complemento").val() == "") {
$("#complemento").parent("div").addClass("errorValidate");
throw "'Complemento' é obrigatório.";
} else if ($("#justificativa").val() == "") {
$("#justificativa").parent("div").addClass("errorValidate");
throw "'Qual o motivo da transferência?' é obrigatório.";
} else if (String($("#analistasup").val() || "").trim() == "") {
$("#analistasup").parent("div").addClass("errorValidate");
throw "'Analista solicitante' é obrigatório.";
} else {
$(collectQuantidadeItemFields()).each(function () {
var $qtd = $(this);
var $row = $qtd.closest("tr");
var linha = getIndiceCampoPaiFilho($qtd);
if (!linha) return;
var $descricao = getCampoItem("descricao", linha, $row);
var descricaoValor = $.trim(String($descricao.val() || ""));
var qtdValor = $.trim(String($qtd.val() || ""));
if (!descricaoValor && !qtdValor) {
var $btnRemove = $row.find("button[onclick*='remove_row']");
if ($btnRemove.length) {
remove_row($btnRemove.get(0));
}
}
});
var itensInformados = 0;
$(collectQuantidadeItemFields()).each(function () {
var $qtd = $(this);
var $row = $qtd.closest("tr");
var linha = getIndiceCampoPaiFilho($qtd);
var $descricao = getCampoItem("descricao", linha, $row);
var descricaoValor = $.trim(String($descricao.val() || ""));
var qtdValor = $.trim(String($qtd.val() || ""));
if (!descricaoValor && !qtdValor) return;
itensInformados++;
if (!descricaoValor) {
$descricao.parent("div").addClass("errorValidate");
throw "Selecione o item " + itensInformados + ".";
}
if (!qtdValor) {
$qtd.parent("div").addClass("errorValidate");
throw "Preencha a quantidade do item " + itensInformados + ".";
}
});
if (itensInformados === 0) {
throw "Ao menos um item é necessário para iniciar a solicitação.";
}
}
} else if (numState == 4) {
if (String(nextState) == "39") {
if ($("#justificativaDecisaoGestor").val() == "") {
$("#justificativaDecisaoGestor").parent("div").addClass("errorValidate");
throw "'Justificativa da decisão' é obrigatória para reprovar.";
}
} else {
validarQuantidadeAprovadaGestor();
}
} else if (numState == 6) {
var chaveNfe = normalizeNfeKey($("#chaveNfe").val());
$("#chaveNfe").val(chaveNfe);
if (chaveNfe == "") {
$("#chaveNfe").parent("div").addClass("errorValidate");
throw "'Chave de acesso da NFe' e obrigatoria.";
}
if (chaveNfe.length !== 44) {
$("#chaveNfe").parent("div").addClass("errorValidate");
throw "'Chave de acesso da NFe' deve conter 44 digitos.";
}
if ($("#invoiceIdNfeConsulta").val() == "") {
$("#chaveNfe").parent("div").addClass("errorValidate");
throw "Consulte a chave da NFe antes de enviar a etapa.";
}
var qtdDivergencias = parseInt($("#qtdDivergenciasNfe").val() || "0", 10);
if (!isNaN(qtdDivergencias) && qtdDivergencias > 0) {
var produtos = listarProdutosDivergentes(10);
var msg = "A nota tem produtos divergentes da base aprovada para emissão.";
if (produtos) {
msg += " Produtos: " + produtos + ".";
}
throw msg;
}
} else if (numState == 31) {
if ($("#motoristaColetaNome").val() == "") {
throw "'Motorista responsável pela coleta' é obrigatório.";
}
if ($("#dataColeta").val() == "") {
throw "'Data da coleta' é obrigatória.";
}
if ($("#fdAnexo_Coleta").val() == "") {
throw "'Anexo da Coleta' é obrigatório.";
}
if (invalidFile("fdAnexo_Coleta")) {
throw "O arquivo informado em 'Anexo da Coleta' não foi encontrado na aba de anexos.";
}
var tipoMotoristaEntrega31 = $("input[name='tipoMotoristaEntrega']:checked").val();
if (!tipoMotoristaEntrega31) {
throw "Informe quem vai fazer a entrega (mesmo motorista da coleta ou outro).";
}
if (tipoMotoristaEntrega31 === "mesmo") {
if ($("#motoristaColetaLogin").val() == "") {
throw "Nao foi encontrado login do motorista da coleta para enviar a etapa de entrega.";
}
$("#motoristaEntregaNome").val($("#motoristaColetaNome").val());
$("#motoristaEntregaLogin").val($("#motoristaColetaLogin").val());
} else if ($("#motoristaEntregaLogin").val() == "") {
throw "Selecione o outro motorista responsavel pela entrega.";
}
} else if (numState == 57) {
if ($("#motoristaEntregaLogin").val() == "") {
throw "Motorista da entrega nao definido. Configure na etapa de coleta.";
}
if ($("#motoristaEntregaNome").val() == "") {
throw "'Motorista responsável pela entrega' é obrigatório.";
}
if ($("#dataEntrega").val() == "") {
var entregaNow = getCurrentDate();
$("#dataEntrega").val(entregaNow[0] + " " + entregaNow[1]);
}
if ($("#dataEntrega").val() == "") {
throw "'Data da entrega' é obrigatória.";
}
if (String($("#nomerecebedor").val() || "").trim() == "") {
$("#nomerecebedor").parent("div").addClass("errorValidate");
throw "'Nome de quem recebeu a mercadoria' é obrigatório.";
}
} else if (numState == 18) {
var validacaoItens = $("input[name='validacaoItens']:checked").val();
if (validacaoItens == "" || validacaoItens == undefined) {
throw "'Validação do recebimento' é obrigatória.";
} else if (
validacaoItens == "divergencia" ||
validacaoItens == "naoEntregue" ||
validacaoItens == "incorreto"
) {
if ($("#justificativaDecisaoItens").val() == "") {
$("#justificativaDecisaoItens")
.parent("div")
.addClass("errorValidate");
throw "'Justificativa' é obrigatório.";
}
}
} else if (numState == 24) {
$('#justificativaValidaProblema').parent().removeClass('has-error errorValidate');
if ($('#justificativaValidaProblema').val() == "") {
$('#justificativaValidaProblema').parent().addClass('has-error errorValidate');
throw "Preencha os campos obrigatórios."
}
}
};
function setSelectedZoomItem(selectedItem) {
var name_item = selectedItem.inputId;
var ehItem = name_item.indexOf("___") >= 0;
var indice = "";
if (ehItem){
var valores = name_item.split("___");
name_item = valores[0];
indice = valores[1];
}
// var dtsCentroCusto = DatasetFactory.getDataset(
// "ds_LojasTransf",
// null,
// null,
// null
// ).values;
// var nomeGestorComercial = dtsCentroCusto[0].gestorCentroCusto;
// var emailGestorComercial = dtsCentroCusto[0].emailGestor;
// var idGestorComercial = dtsCentroCusto[0].idGestor;
// var nomeGestorOperacoes = dtsCentroCusto[2].gestorCentroCusto;
// var emailGestorOperacoes = dtsCentroCusto[2].emailGestor;
// var idGestorOperacoes = dtsCentroCusto[2].idGestor;
// if (name_item == "estabelecimento") {
// let estabelecimento = selectedItem["estabelecimento"];
// if (estabelecimento.includes("ESCRITÓRIO")) {
// } else if (estabelecimento.includes("CD")) {
// window["centroCusto"].setValue("Operações");
// $("#gestorNome").val(nomeGestorOperacoes);
// $("#gestorEmail").val(emailGestorOperacoes);
// $("#gestor_cc").val(idGestorOperacoes);
// } else {
// window["centroCusto"].setValue("Comercial");
// $("#gestorNome").val(nomeGestorComercial);
// $("#gestorEmail").val(emailGestorComercial);
// $("#gestor_cc").val(idGestorComercial);
// }
// }
if (name_item == "centroCusto") {
$("#gestorNome").val(selectedItem["RESPONSAVEL_LOJA"] || "");
$("#gestorEmail").val(selectedItem["emailGestor"] || "");
$("#gestor_cc").val(selectedItem["COLLEAGUE_ID"] || "");
$("#ufDestino").val(selectedItem["UF"] || "");
refreshMotoristasEntregaByUf(true);
}
if (name_item == "estabelecimento") {
$("#gestorNomeE").val(selectedItem["RESPONSAVEL_LOJA"] || "");
$("#gestorEmailE").val(selectedItem["emailGestor"] || "");
$("#gestor_cce").val(selectedItem["COLLEAGUE_ID"] || "");
$("#ufOrigem").val(selectedItem["UF"] || "");
}
if (name_item == "userSolicitante") {
$("#emailSolicitante").val(selectedItem.mail);
}
if (name_item == "motoristaEntregaSelecionado") {
var motoristaNome = selectedItem["NOME"] || selectedItem["colleagueName"] || selectedItem["LOGIN"] || selectedItem["login"] || "";
var motoristaColleagueId = selectedItem["COLLEAGUE_ID"] || selectedItem["colleaguePK.colleagueId"] || "";
$("#motoristaEntregaNome").val(String(motoristaNome || ""));
$("#motoristaEntregaLogin").val(String(motoristaColleagueId || ""));
$("#tipoMotoristaEntregaOutro").prop("checked", true);
applyMotoristaEntregaMode("outro", true);
}
if (name_item == "descricao") {
var itemDescricao = selectedItem["descricao"] || selectedItem["Description"] || "";
var itemCode = selectedItem["Code"] || selectedItem["sku"] || "";
var itemProductId = selectedItem["id"] || selectedItem["productId"] || "";
var itemCategoria = selectedItem["categoria"] || selectedItem["strategicDescription"] || "";
$("#codigoItem" + "___" + indice).val(itemDescricao);
$("#codigoProdutoItem" + "___" + indice).val(itemCode);
$("#productIdItem" + "___" + indice).val(itemProductId);
$("#categoriaItem" + "___" + indice).val(itemCategoria);
processarConferenciaNfe();
toggleQuantidadeAprovadaGestorByActivity($("#activity").val());
}
}
function removedZoomItem(removedItem) {
var name_item = removedItem.inputId;
var ehItem = name_item.indexOf("___") >= 0;
var indice = "";
if (ehItem){
var valores = name_item.split("___");
name_item = valores[0];
indice = valores[1];
}
if (name_item == "userSolicitante") {
$("#emailSolicitante").val("");
} else if (name_item == "centroCusto") {
$("#gestorNome").val("");
$("#gestorEmail").val("");
$("#gestor_cc").val("");
$("#ufDestino").val("");
refreshMotoristasEntregaByUf(true);
} else if (name_item == "estabelecimento") {
$("#gestorNomeE").val("");
$("#gestorEmailE").val("");
$("#gestor_cce").val("");
$("#ufOrigem").val("");
} else if (name_item == "motoristaEntregaSelecionado") {
if ($("input[name='tipoMotoristaEntrega']:checked").val() === "outro") {
$("#motoristaEntregaNome").val("");
$("#motoristaEntregaLogin").val("");
}
} else if (~name_item.indexOf("___")) {
var linha = name_item.split("___");
if (linha[0] == "descricao") {
$("#codigoItem___" + linha[1]).val("");
$("#codigoProdutoItem___" + linha[1]).val("");
$("#productIdItem___" + linha[1]).val("");
$("#categoriaItem___" + linha[1]).val("");
$("#quantidadeItem___" + linha[1]).val("");
$("#quantidadeAprovadaGestor___" + linha[1]).val("");
processarConferenciaNfe();
toggleQuantidadeAprovadaGestorByActivity($("#activity").val());
}
}
if (name_item == "descricao") {
$("#codigoItem" + "___" + indice).val("");
$("#codigoProdutoItem" + "___" + indice).val("");
$("#productIdItem" + "___" + indice).val("");
$("#categoriaItem" + "___" + indice).val("");
$("#quantidadeAprovadaGestor" + "___" + indice).val("");
processarConferenciaNfe();
toggleQuantidadeAprovadaGestorByActivity($("#activity").val());
}
}
function add_new_row(table) {
var row = wdkAddChild(table);
updt_line();
toggleQuantidadeAprovadaGestorByActivity($("#activity").val());
syncQuantidadeAprovadaAllRows();
}
function updt_line() {
$(".tabela_itens_id").each(function (index, item) {
if (index == 0) return;
$(item)[0].innerHTML = index;
});
}
function remove_row(element) {
fnWdkRemoveChild(element);
updt_line();
processarConferenciaNfe();
toggleQuantidadeAprovadaGestorByActivity($("#activity").val());
}
// Andrey, nao esqueca de ver isso
// function removedZoomItem(removedItem) {
// // if (removedItem.inputId === "estabelecimento") {
// // document.getElementById("setor-container").style.display = "none"; // Oculta ao remover
// window["centroCusto"].setValue("")[0]
// // }
// }
$(document).ready(function() {
// $('#gerarTabela').click(function() {
// var numCotacoes = $('#numCotacoes').val();
// var tbody = $("#tabelaCotacao tbody");
// tbody.empty(); // Limpa a tabela antes de gerar novas linhas
// // Supondo que você já tenha uma tabela de origem com os produtos
// $('table.table[tablename="tabelaItens"] tbody tr:visible').each(function(index, element) {
// var nomeItem = $(element).find('input[name^="nomeItem"]').val();
// var quantidadeItem = $(element).find('input[name^="quantidadeItem"]').val();
// for (var i = 0; i < numCotacoes; i++) {
// var row = `
//
${index + 1}.${i + 1}
//
${nomeItem}
//
${quantidadeItem}
//
//
//
//
//
`;
// tbody.append(row);
// }
// });
// });
$('#gerarTabela').click(function() {
});
});
/**
* Toda a lógica para o correto funcionamento desse componente foi feito em cima das classes abaixo:
* .componentAnexo, .descAnexo, .inputAnexo, .btnUpFile, .btnViewerFile, .btnDownloadFile e o atributo data-acao
* Sem elas o código não irá funcionar, então se por acaso você quiser alterar os nomes dessas classes
* lembre-se de alterar nas funções desse arquivo e também no css
*/
/**
* Direciona para cada função correspondente ao valor que esta no atributo data-acao do botão
* @param {object} event Parâmetro obrigatório, o própio elemento que sofreu o evento click
* @return {void}
* @author Sérgio Machado
*/
function anexo(event){
console.log("event")
console.log(event)
try{
const acao = event.currentTarget.getAttribute("data-acao");
const inputFile = $(event.currentTarget).parent().parent().find(".inputAnexo")[0]
const fileDescription = $(event.currentTarget).parent().parent().find(".descAnexo").val()
if(acao == "upload"){
uploadFile(fileDescription, inputFile.id)
}
if(acao == "viewer"){
viewerFile(fileDescription)
}
if(acao == "download"){
downloadFile(fileDescription, inputFile.id)
}
if(acao == "delete"){
removeFileConfirm(fileDescription, inputFile.id)
}
}catch(e){
console.error("Houve um erro inesperado na função anexo")
console.error(e)
}
}
/**
* Envia arquivos para a aba Anexos do Fluig
* Função adaptada por Sérgio Machado
* @param {String} fileDescription Parâmetro obrigatório, Descrição do arquivo que ficará na aba anexos do Fluig
* @param {String} idInput Parâmetro obrigatório, Id do campo em que o nome do arquivo fisico é gravado
* @return {void}
*/
function uploadFile(fileDescription, idInput) {
try{
var tabAttachments = parent.document.getElementById("tab-attachments");
if (tabAttachments) {
//Verifica se o navegador é o Ie9 para realizar o devido tratamento
if (parent.WCMAPI.isIe9()) {
$(".ecm-navigation-silverlight", parent.document).show("fade").css("top", 0);
$("#ecm-navigation-silverlight", parent.document).attr({
"data-on-camera": "true", "data-file-name-camera": fileDescription, "data-inputNameFile": idInput
});
$(parent.document).on("keyup", this.actionKeyup)
} else {
var element = parent.document.getElementById("ecm-navigation-inputFile-clone");
if (element && document.createEvent) {
element.setAttribute("data-on-camera", "true");
if (fileDescription && idInput) {
element.setAttribute("data-file-name-camera", fileDescription)
element.setAttribute("data-inputNameFile", idInput)
}
//Realiza o click no botão "Carregar arquivos" que tem na aba de anexos
element.click();
}
}
}
}catch(e){
console.error("Houve um erro inesperado na função uploadFile")
console.error(e)
}
}
/**
* Função executada após a escolha do arquivo a ser enviado para o Fluig.
* Verifica se o anexo já existe, seta o valor do arquivo fisico no campo e altera o estado dos botões
* @return {void}
*/
$(function(){
try{
window.parent.$("#ecm-navigation-inputFile-clone").on('change', function(e) {
const inputNameFile = this.getAttribute("data-inputNameFile");
const fileDescription = this.getAttribute("data-file-name-camera");
const filePhisical = this.files[0].name;
if(fileDescription && fileDescription){
/**
* O trecho de código abaixo percorre os anexos do Fluig e caso já exista um anexo com a mesma descrição, ele será removido.
* Em seguida limpa o campo onde é armazenado o nome fisico do arquivo
*/
$.each(parent.ECM.attachmentTable.getData(), function(i, attachment) {
var descricao = attachment.description;
if (fileDescription == descricao) {
parent.WKFViewAttachment.removeAttach([i]);
setFilePhisicalName(inputNameFile, "");
}
});
setFilePhisicalName(inputNameFile, filePhisical)
if(getFormMode() == "ADD"){
btnState(inputNameFile, 'delete', 'download');
}
if(getFormMode() == "MOD"){
btnState(inputNameFile, 'delete', 'viewer');
}
if(getFormMode() == "VIEW"){
btnState(inputNameFile, 'download', 'viewer');
}
}
});
}catch(e){
console.error("Houve um erro inesperado ao selecionar o arquivo")
console.error(e)
}
});
/**
* Visualizar arquivos que esta na aba Anexos do Fluig
* @param {String} fileDescription Parâmetro obrigatório, Descrição do anexo
* @return {void}
*/
function viewerFile(fileDescription) {
try{
if(hasFileFluig(fileDescription)){
const anexos = parent.ECM.attachmentTable.getData();
for(let i = 0; i < anexos.length; i++){
var descricao = anexos[i].description;
if (fileDescription == descricao) {
parent.WKFViewAttachment.openAttachmentView('adm', anexos[i].documentId);
return
}
}
}else{
FLUIGC.toast({
title: "Atenção",
message: "Anexo não encontrado",
type: "warning"
});
}
}catch(e){
console.error("Houve um erro inesperado na função viewerFile")
console.error(e)
}
}
/**
* Realiza o download do arquivo que esta na aba Anexos do Fluig
* @param {String} idInput Parâmetro obrigatório, Id do campo em que o nome do arquivo fisico é gravado
* @param {String} fileDescription Parâmetro obrigatório, Descrição do arquivo que esta na aba anexos do Fluig
* @return {void}
*/
function downloadFile(fileDescription, idInput) {
try{
const filename = getFormMode() == "VIEW" ? $(`#${idInput}`).text() : $(`#${idInput}`).val()
FLUIGC.message.confirm({
message: `Deseja baixar o anexo ${filename}?`,
title: 'Confirmação',
labelYes: 'Sim, quero baixar',
labelNo: 'Não, quero cancelar',
}, function(result) {
if (result) {
$.each(parent.ECM.attachmentTable.getData(), function(i, attachment) {
var descricao = attachment.description;
if (fileDescription == descricao) {
parent.WKFViewAttachment.downloadAttach([i]);
}
});
}
});
}catch(e){
console.error("Houve um erro inesperado na função downloadFile")
console.error(e)
}
}
/**
* Confirmação para Remove arquivo que esta na aba Anexos do Fluig
* @param {String} idInput Parâmetro obrigatório, Id do campo em que o nome do arquivo fisico é gravado
* @param {String} fileDescription Parâmetro obrigatório, Descrição do arquivo que esta na aba anexos do Fluig
* @return {void}
* @author Sérgio Machado
*/
function removeFileConfirm(fileDescription, idInput) {
try{
const filename = $(`#${idInput}`).val()
FLUIGC.message.confirm({
message: `Deseja remover o anexo ${filename}?`,
title: 'Confirmação',
labelYes: 'Sim, quero remover',
labelNo: 'Não, quero cancelar',
}, function(result) {
if (result) {
removeFile(fileDescription)
setFilePhisicalName(idInput, "")
btnState(idInput, "upload", "download")
}
});
}catch(e){
console.error("Houve um erro inesperado na função removeFileConfirm")
console.error(e)
}
}
/**
* Remove arquivo que esta na aba Anexos do Fluig
* @param {String} fileDescription Parâmetro obrigatório, Descrição do arquivo que esta na aba anexos do Fluig
* @return {void}
* @author Sérgio Machado
*/
function removeFile(fileDescription) {
try{
$.each(parent.ECM.attachmentTable.getData(), function(i, attachment) {
if (attachment.description == fileDescription) {
parent.WKFViewAttachment.removeAttach([i]);
}
});
}catch(e){
console.error("Houve um erro inesperado na função removeFile")
console.error(e)
}
}
/**
* Seta o nome do arquivo fisico no campo e realiza tratativa caso o campo esteja bloqueado pelo enableFields
* @param {String} idInput Parâmetro obrigatório, Id do campo em que o nome do arquivo fisico é gravado
* @param {String} filePhisical Parâmetro obrigatório, nome do arquivo fisico
* @return {void}
* @author Sérgio Machado
*/
function setFilePhisicalName(idInput, filePhisical){
try{
if(idInput.indexOf("_") == 0){
$("#" + idInput.substring(1)).val(filePhisical);
}
$("#" + idInput).val(filePhisical);
}catch(e){
console.error("Houve um erro inesperado na função setFilePhisicalName")
console.error(e)
}
}
/**
* Altera o estado e visibilidade dos botões de anexos
* @param {String} idInput Parâmetro obrigatório, Id do campo em que o nome do arquivo fisico é gravado
* @param {String} acao Parâmetro obrigatório, ação para ser executada no momento do click, se é delete ou upload
* @param {String} btn Parâmetro obrigatório, botão secundário que deve sofrer ação de ficar visível ou não. Botão de Download ou Viewer
* @return {void}
* @author Sérgio Machado
*/
function btnState(idInput, acao, btn){
try{
let btnUpFile = $(`#${idInput}`).parent().parent().find(".btnUpFile");
let btnDownloadFile = $(`#${idInput}`).parent().parent().find(".btnDownloadFile");
let btnViewerFile = $(`#${idInput}`).parent().parent().find(".btnViewerFile");
if(acao == "delete"){
btnUpFile.removeClass("btn-success").addClass("btn-danger");
btnUpFile.attr({'data-acao': acao, 'title': 'Excluir'});
btnUpFile.find("i").removeClass("fluigicon-file-upload").addClass("fluigicon-trash");
if(btn == "download"){
btnDownloadFile.prop("disabled", false);
btnDownloadFile.show()
}
if(btn == "viewer"){
btnViewerFile.prop("disabled", false);
btnViewerFile.show()
}
}
if(acao == "upload"){
btnUpFile.removeClass("btn-danger").addClass("btn-success");
btnUpFile.attr({'data-acao': acao, 'title': 'Selecionar'});
btnUpFile.find("i").removeClass("fluigicon-trash").addClass("fluigicon-file-upload");
btnDownloadFile.prop("disabled", true);
btnDownloadFile.hide()
btnViewerFile.prop("disabled", true);
btnViewerFile.hide()
}
}catch(e){
console.error("Houve um erro inesperado na função btnState")
console.error(e)
}
}
/**
* Faz tratativa nos botões do anexos percorrente cada class .componentAnexo
* Em modo de visualização o botão de upload é removido, e caso tenha anexo, habilita o botão de visualização do anexo
* Se em modo de edição e conter anexo o botão de upload é alterado para o botão de deletar anexos e habilita o botão de visualização
* @return {void}
* @author Sérgio Machado
*/
function displayBtnFiles(){
try{
var mode = getFormMode();
var allowedInputs = getAllowedAttachmentInputs();
$('.componentAnexo').each(function(i, element) {
let inputFile = $(element).find(".inputAnexo")
let inputId = inputFile.attr("id") || "";
let normalizedInputId = inputId.indexOf("_") === 0 ? inputId.substring(1) : inputId;
let btnUpFile = $(element).find(".btnUpFile");
let btnViewerFile = $(element).find(".btnViewerFile");
let btnDownloadFile = $(element).find(".btnDownloadFile");
let canUploadHere = allowedInputs.indexOf(normalizedInputId) >= 0;
if(mode == "VIEW"){
btnUpFile.remove();
if(inputFile.val() != ""){
btnViewerFile.prop("disabled", false);
btnViewerFile.show()
btnDownloadFile.prop("disabled", false);
btnDownloadFile.show()
}
}
if(mode == "MOD"){
if(inputFile.val() != ""){
if(canUploadHere){
btnState(inputId, "delete", "viewer");
} else {
btnUpFile.remove();
btnViewerFile.prop("disabled", false);
btnViewerFile.show()
btnDownloadFile.prop("disabled", false);
btnDownloadFile.show()
}
} else if(!canUploadHere){
btnUpFile.remove();
}
}
});
}catch(e){
console.error("Houve um erro inesperado na função displayBtnFiles")
console.error(e)
}
}
function getAllowedAttachmentInputs() {
var mode = getFormMode();
var activity = String($("#activity").val() || "");
if (mode === "VIEW") {
return [];
}
if (mode !== "MOD" && mode !== "ADD") {
return [];
}
if (activity === "0" || activity === "1") {
return ["fnAnexo_PlanilhaItens"];
}
if (activity === "6") {
return ["fnAnexo_Nfe"];
}
if (activity === "31") {
return ["fdAnexo_Coleta"];
}
if (activity === "57") {
return ["fdAnexo_Entrega"];
}
if (activity === "18") {
return ["fdAnexo_recebimento"];
}
return [];
}
/**
* Remove o botão de upload/delete
* @param {String} inputFile Parâmetro obrigatório, Id do campo
* @return {void}
* @author Sérgio Machado
*/
function invisibleBtnUpload(inputFile){
try{
var mode = getFormMode();
var allowedInputs = getAllowedAttachmentInputs();
var canUploadHere = allowedInputs.indexOf(inputFile) >= 0;
if(mode == "VIEW" || ((mode == "MOD" || mode == "ADD") && !canUploadHere)){
if($(`#_${inputFile}`).length){
let btnUpFile = $(`#_${inputFile}`).parent().parent().find(".btnUpFile");
btnUpFile.remove();
} else{
let btnUpFile = $(`#${inputFile}`).parent().parent().find(".btnUpFile");
btnUpFile.remove();
}
}
if($(`#_${inputFile}`).length){
if($(`#_${inputFile}`).val() == ""){
$(`#_${inputFile}`).attr({placeholder:"Nenhum anexo selecionado"});
}
} else{
if($(`#${inputFile}`).val() == ""){
$(`#${inputFile}`).attr({placeholder:"Nenhum anexo selecionado"});
}
}
}catch(e){
console.error("Houve um erro inesperado na função invisibleBtnUpload")
console.error(e)
}
}
/**
* Verifica se os campos do anexo de uma tabela pai e filho esta preenchido,
* caso esteja, ele verifica se o anexo esta presente na aba de anexos do Fluig
* @param {String} tablename Parâmetro obrigatório, tablename da tabela pai e filho.
* @param {String} idInput Parâmetro obrigatório, Id do campo de anexo que deseja verificar
* @return {String} - Retorna string de erros caso apresente erros
* @author Sérgio Machado
*/
function invalidFilesTable(tablename, idInput){
try {
let errors = "";
const countRows = $(`[tablename='${tablename}']`).find('tbody tr').not(':first');
for(let i = 0; i < countRows.length; i++){
let indice = getIndice(countRows.eq(i).find("input")[0].id);
let inputNameFile = $(`#_${idInput}___${indice}`).length ? $(`#_${idInput}___${indice}`) : $(`#${idInput}___${indice}`)
let fileDescription = inputNameFile.parent().find(".descAnexo").val()
if(inputNameFile.val() && !hasFileFluig(fileDescription)){
errors += `
O anexo ${inputNameFile.val()} da linha ${i+1} não foi encontrado
`
}
}
return errors
} catch (e) {
console.error('Houve um erro inesperado na função invalidFileTable')
console.error(e)
}
}
/**
* Verifica se o campo do anexo esta preenchido, caso esteja, ele verifica se o anexo esta válido
* @param {String} idInput Parâmetro obrigatório, Id do campo em que o nome do arquivo fisico é gravado
* @return {Boolean}
* @author Sérgio Machado
*/
function invalidFile(idInput){
try {
const inputNameFile = String($(`#${idInput}`).val() || "").trim();
if(inputNameFile){
let fileDescription = "";
if($(`#_${idInput}`).length){
fileDescription = String($(`#_${idInput}`).parent().find(".descAnexo").val() || "").trim();
} else{
fileDescription = String($(`#${idInput}`).parent().find(".descAnexo").val() || "").trim();
}
if (!fileDescription) {
fileDescription = inputNameFile;
}
return !hasFileFluig(fileDescription)
}else{
return false
}
} catch (e) {
console.error('Houve um erro inesperado na função invalidFile')
console.error(e)
}
}
/**
* Verifica se o anexo existe na aba de anexos do Fluig
* @param {String} fileDescription Parâmetro obrigatório, Descrição do arquivo
* @return {Boolean} - Retorna verdadeiro caso o arquivo exista
* @author Sérgio Machado
*/
function hasFileFluig(fileDescription){
try {
var target = String(fileDescription || "").trim();
if (!target) return false;
const anexos = parent.ECM.attachmentTable.getData();
for(let i = 0; i < anexos.length; i++){
var descricao = String(anexos[i].description || "").trim();
if (target == descricao || descricao.indexOf(target + " - ") === 0) {
return true
}
}
return false
} catch (e) {
console.error('Houve um erro inesperado na função hasFileFluig')
console.error(e)
}
}
//Quando o Fluig finalizar o upload e o anexo for escolhido
window.parent.$("#ecm-navigation-inputFile-clone").on('change', function () {
const fileDescription = String(this.getAttribute("data-file-name-camera") || "");
const file = this.files[0];
if (!file) return;
if (fileDescription === EXCEL_ATTACHMENT_DESCRIPTION || fileDescription.indexOf(EXCEL_ATTACHMENT_DESCRIPTION + " - ") === 0) {
// Copia o arquivo para o input técnico
const dt = new DataTransfer();
dt.items.add(file);
var excelInput = document.getElementById("excelUpload");
if (!excelInput) return;
excelInput.files = dt.files;
// Atualiza nome mostrado
updateExcelImportUi(file.name);
getExcelAttachmentField().val(file.name);
// Agora sim o arquivo está dentro do input e pode ser lido
carregarItensDoExcel("excelUpload");
}
});
function getChaveNfeLimpa() {
return (document.getElementById("chaveNfe").value || "")
.replace(/\s+/g, "") // tira espaços
.replace(/\D/g, "") // garante só dígitos
.slice(0, 44); // limite oficial
}