const COMENTARIO = 0;
const CONCLUSAO_DEV = 1;
const CONCLUSAO_QA = 2;
var editorInstanceComment;
function editarDescricao() {
cancelComments('divEditorComentario');
cancelComments('divEditorConclusaoDEV');
cancelComments('divEditorConclusaoQA');
const descricao = $('.containterContentDescricao').html();
// manipular os containers
$('.containterContentDescricao').addClass('d-none');
$('#divEditor').removeClass('d-none');
// carregar e estilizar o editor
const editor = carregarEditorToastUI('editor', 'auto');
editor.setHTML(descricao);
// $('#editor').attr('style', 'width: 100% !important; text-align: start !important; height: 350px !important;');
// manipular os botões
$('#btnEditarDesc').addClass('d-none');
$("#btnSalvarDesc").removeClass('d-none');
$("#btnCancelarDesc").removeClass('d-none');
// Adicionando eventos para usar a instância do editor
$('#btnCancelarDesc').off('click').on('click', function () {
cancelarDescricao();
});
$('#btnSalvarDesc').off('click').on('click', function () {
salvarDescricao(editor);
});
}
function cancelarDescricao() {
// manipular os containers
$('.containterContentDescricao').removeClass('d-none');
$('#divEditor').addClass('d-none');
// manipular os botões
$('#btnEditarDesc').removeClass('d-none');
$("#btnSalvarDesc").addClass('d-none');
$("#btnCancelarDesc").addClass('d-none');
}
function salvarDescricao(editor) {
const novaDescricao = editor.getHTML();
const idDemanda = $('#idDemanda').val();
$.ajax({
type: "POST",
url: `/${URL_BASE}App/DAO/Demandas/Demandas.class.php?method=updateDescription`,
data: {
id: idDemanda,
descricao: novaDescricao,
},
success: function (data) {
const obj = JSON.parse(data);
if (obj.erro == 1) {
OpenToastV2('Erro', 'Ocorreu um erro ao tentar atualizar a descrição da demanda.', 'error');
return;
}
OpenToastV2('Successo', 'Descrição atualizada com sucesso!', 'success');
$('.containterContentDescricao').html(novaDescricao);
// manipular os containers
$('.containterContentDescricao').removeClass('d-none');
$('#divEditor').addClass('d-none')
// manipular os botões
$('#btnEditarDesc').removeClass('d-none');
$("#btnSalvarDesc").addClass('d-none');
$("#btnCancelarDesc").addClass('d-none');
}
})
}
function updateQA(idQA) {
const idDemanda = $('#idDemanda').val();
$.ajax({
type: "POST",
url: `/${URL_BASE}App/DAO/Demandas/Demandas.class.php?method=updateQA`,
data: {
id: idDemanda,
qaID: idQA,
},
success: function (data) {
const obj = JSON.parse(data);
if (obj.erro == 1) {
OpenToastV2('Erro', 'Ocorreu um erro ao adicionar um(a) QA.', 'error');
return;
}
// Remove o button "+" com os colaboradores
$('#addQA').remove();
$('#qaAtual').remove();
// Add um novo QA
const dataOBJ = obj.data;
const fotoQA = (dataOBJ.foto_qa_responsavel) ? URL_ARQUIVOS + '/' + dataOBJ.foto_qa_responsavel : DEFAULT_PICTURE;
const nomeQA = dataOBJ.nome_qa_responsavel;
var qa = '';
qa += `
`;
qa += `

`;
qa += `
${nomeQA}`;
qa += `
`;
$('#cardQA').append(qa);
$('#inputIdQAResponsavel').val(idQA);
ensureCommentContainer('containerComentarioComBotoesQA', idQA, 'qa');
setTimeout(() => {
$('#iconTrocarQA').removeClass('d-none');
$(`#checkbox-trocar-qa-${idQA}`).prop('checked', true);
}, 200);
OpenToastV2('Successo', obj.msg, 'success');
updateJobListing();
saveGeneralLogV2(
'demandas',
idDemanda,
`Definiu ${nomeQA} como QA responsável`,
'Atualizado',
'#ee9696',
'#f9ebeb',
'ri-user-add-line',
null,
0,
(() => {
if ($('#nav-log-tab').hasClass('active')) {
getLogs();
}
})
);
}
});
}
function updateDeveloper(idDeveloper) {
const idDemanda = $('#idDemanda').val();
$.ajax({
type: "POST",
url: `/${URL_BASE}App/DAO/Demandas/Demandas.class.php?method=updateDeveloper`,
data: {
id: idDemanda,
developerID: idDeveloper,
},
success: function (data) {
const obj = JSON.parse(data);
if (obj.erro == 1) {
OpenToastV2('Erro', 'Ocorreu um erro ao adicionar um(a) programador.', 'error');
return;
}
// Remove o button "+" com os colaboradores
$('#addProgramador').remove();
$('#programadorAtual').remove();
// Add um novo Programador
const dataOBJ = obj.data;
const fotoProgramador = (dataOBJ.foto_programador_responsavel) ? URL_ARQUIVOS + '/' + dataOBJ.foto_programador_responsavel : DEFAULT_PICTURE;
const nomeProgramador = dataOBJ.nome_programador_responsavel;
var pr = '';
pr += ``;
pr += `

`;
pr += `
${nomeProgramador}`;
pr += `
`;
$('#cardProgramador').append(pr);
$('#inputIdDevResponsavel').val(idDeveloper);
ensureCommentContainer('containerComentarioComBotoesDEV', idDeveloper, 'dev');
setTimeout(() => {
$('#iconTrocarProgramador').removeClass('d-none');
$(`#checkbox-trocar-programador-${idDeveloper}`).prop('checked', true);
}, 200);
OpenToastV2('Successo', obj.msg, 'success');
updateJobListing();
saveGeneralLogV2(
'demandas',
idDemanda,
`Definiu ${nomeProgramador} como programador(a) responsável`,
'Atualizado',
'#4e8cff',
'#e7f0ff',
'ri-user-add-line',
null,
0,
(() => {
if ($('#nav-log-tab').hasClass('active')) {
getLogs();
}
})
);
}
});
}
function updateClassification(classificationID) {
const idDemanda = $('#idDemanda').val();
$.ajax({
type: "POST",
url: `/${URL_BASE}App/DAO/Demandas/Demandas.class.php?method=updateClassification`,
data: {
id: idDemanda,
classificationID: classificationID,
},
success: function (data) {
const obj = JSON.parse(data);
if (obj.erro == 1) {
OpenToastV2('Erro', 'Ocorreu um erro ao mudar a classificação da demanda.', 'error');
return;
}
const dataOBJ = obj.data;
$('#spanDescClassificacao').text(dataOBJ.descricao);
saveGeneralLogV2(
'demandas',
idDemanda,
`Mudou a classificação para ${dataOBJ.descricao}`,
'Atualizado',
'#05c6e2',
'#d8f9fe',
'ri-price-tag-3-line',
null,
0,
(() => {
if ($('#nav-log-tab').hasClass('active')) {
getLogs();
}
})
);
}
});
}
function updateLabels(labelID, marked) {
const idDemanda = $('#idDemanda').val();
$.ajax({
type: "POST",
url: `/${URL_BASE}App/DAO/Demandas/Demandas.class.php?method=updateLabels`,
data: {
id: idDemanda,
labelID: labelID,
marked: (!marked) ? 0 : 1,
},
success: function (data) {
const obj = JSON.parse(data);
if (obj.erro == 1) {
OpenToastV2('Erro', 'Ocorreu um erro ao adicionar e/ou remover uma etiqueta.', 'error');
return;
}
if (marked) { // adiciona etiqueta na listagem
const objData = obj.data;
var etiqueta = '';
etiqueta += ``;
etiqueta += ` ${objData.titulo}`;
etiqueta += ``;
$('.etiquetas-lista-demanda').append(etiqueta);
} else { // remove etiqueta da listagem
$(`#etiqueta-${labelID}`).remove();
}
}
});
}
async function addAnexos(files) {
ShowLoad();
const idDemanda = $('#idDemanda').val();
const cnpjEmpresa = $('#inputCNPJEmpresa').val().replace(/\D/g, '');
const arquivos = Array.from(files);
try {
const uploads = arquivos.map(file =>
sendFiles(file, cnpjEmpresa, 0, 'file', true),
);
const responses = await Promise.all(uploads);
const filesId = responses.filter(r => r && r.id_arquivo).map(r => Number(r.id_arquivo));
$.ajax({
type: "POST",
url: `/${URL_BASE}App/DAO/Demandas/Demandas.class.php?method=addFiles`,
data: {
id: idDemanda,
filesId: filesId,
},
success: function (data) {
const obj = JSON.parse(data);
if (obj.erro == 1) {
OpenToastV2('Erro', 'Ocorreu um erro ao vincular um arquivo anexado na Demanda.', 'error');
return;
}
filesId.map((fileId) => {
saveGeneralLogV2(
'demandas',
idDemanda,
`Adicionou um anexo`,
'Anexo',
'#ff9800',
'#fff3e6',
'ri-attachment-2',
fileId,
0,
(() => {
if ($('#nav-log-tab').hasClass('active')) {
getLogs();
}
})
);
});
const objData = obj.data;
objData.map((anexo) => {
const file = buildDivFileJob(anexo);
$('#listagemAnexos').prepend(file);
if ($('#aPageModalSemHeader').length) {
const fileID = anexo.id;
const ext = anexo.extensao.toLowerCase();
const nomeArquivo = anexo.nome_arquivo;
const urlFile = URL_ARQUIVOS + anexo.caminho_curto;
addImageTextPreviewInComment(fileID, nomeArquivo, ext, urlFile, true, true);
}
});
OpenToastV2('Sucesso!', 'Arquivo(s) anexado(s) com sucesso.', 'success');
}
})
} catch (err) {
OpenToastV2('Erro Upload', 'Erro ao realizar upload.', 'error');
} finally {
HideLoad();
}
}
function removerAnexo(fileId) {
bootbox.confirm({
title: "Exclusão",
message: "Deseja realmente excluir o anexo desta demanda?",
closeButton: false,
buttons: {
cancel: {
label: ' Cancelar'
},
confirm: {
label: ' Confirmar'
}
},
callback: result => {
if (result) {
const idDemanda = $('#idDemanda').val();
$.ajax({
type: "POST",
url: `/${URL_BASE}App/DAO/Demandas/Demandas.class.php?method=removeFile`,
data: {
id: idDemanda,
fileId: fileId,
},
success: function (data) {
const obj = JSON.parse(data);
if (obj.erro == 1) {
OpenToastV2('Erro', 'Ocorreu um erro ao remover o anexo vinculado a demanda.', 'error');
return;
}
$(`#anexo-${fileId}`).remove();
deleteFiles(fileId); // remove arquivo do servidor.
OpenToastV2('Sucesso!', 'Arquivo removido com sucesso!', 'success');
}
})
}
}
});
}
function editFilename(fileId) {
const titleFile = $(`#titulo-anexo-${fileId}`);
const currentNameFile = titleFile.html();
titleFile.empty();
var edit = ``;
edit += ``;
edit += ``;
titleFile.append(edit);
setFocusAtTheEndOfTheInput(`#input-file-${fileId}`);
}
function saveFilename(fileID) {
ShowLoad();
const titleFile = $(`#titulo-anexo-${fileID}`);
const newFilename = $(`#input-file-${fileID}`).val();
titleFile.empty();
titleFile.append(newFilename);
$.ajax({
type: "POST",
url: `/${URL_BASE}App/DAO/Arquivos/Arquivos.class.php?method=updateFilename`,
data: {
fileID,
newFilename,
},
success: function (data) {
const obj = JSON.parse(data);
if (obj.erro == 1) {
OpenToastV2('Erro', 'Ocorreu um erro ao alterar o nome do arquivo.', 'error');
return;
}
HideLoad();
}
})
}
function getAnexosById() {
const idDemanda = $('#idDemanda').val();
$.ajax({
type: "POST",
url: `/${URL_BASE}App/DAO/Demandas/Demandas.class.php?method=getFilesById`,
data: {
id: idDemanda,
},
success: function (data) {
const obj = JSON.parse(data);
if (obj.erro == 1) {
OpenToastV2('Erro', 'Ocorreu um erro ao buscar os anexos vinculado a demanda.', 'error');
return;
}
const objData = obj.data;
objData.map((anexo) => {
const file = buildDivFileJob(anexo);
$('#listagemAnexos').prepend(file);
});
}
});
}
function downloadAnexo(url, nome) {
var link = document.createElement("a");
link.href = url;
link.download = nome;
link.target = '_blank';
link.click();
}
function buildWriteComments(divEditor, editor, comentario = null, idComentario = 0) {
cancelarDescricao();
cancelComments(divEditor);
// manipular os containers
$('.containerContentComentario').addClass('d-none');
$(`#${divEditor}`).removeClass('d-none');
// carregar e estilizar o editor
editorInstanceComment = carregarEditorToastUI(editor, '200px', {
customImageButton: true,
removeDefaultImage: true,
onCustomImageClick: () => {
const idDemanda = $('#idDemanda').val();
handleClickSelectFilesFromEditor(idDemanda);
}
});
editorInstanceComment.setHTML('');
if (comentario) {
editorInstanceComment.setHTML(comentario);
}
$(`#${editor}`).attr('style', 'width: 100% !important; text-align: start !important; height: 200px !important; margin-top: 10px !important;');
$(`#${editor} .toastui-editor`).attr('style', 'min-height: 100px !important;');
$('.btnSalvarComentario').removeClass('d-none');
$('.btnCancelarComentario').removeClass('d-none');
$('.btnCancelarComentario').off('click').on('click', function () {
cancelComments(divEditor)
});
$('.btnSalvarComentario').off('click').on('click', function () {
saveComments(divEditor, editorInstanceComment, idComentario);
});
return editorInstanceComment;
}
function cancelComments(divEditor) {
// manipular os containers
$(`#${divEditor}`).addClass('d-none');
$('.containerContentComentario').removeClass('d-none');
$('.btnSalvarComentario').addClass('d-none');
$('.btnCancelarComentario').addClass('d-none');
editorInstanceComment = null;
}
function saveComments(divEditor, editor, idComentario = 0) {
const comentario = editor.getHTML();
const idDemanda = $('#idDemanda').val();
const tipo = (divEditor == 'divEditorComentario') ? COMENTARIO : (divEditor == 'divEditorConclusaoDEV') ? CONCLUSAO_DEV : CONCLUSAO_QA;
const nav = (divEditor == 'divEditorComentario') ? 'nav-comentarios' : (divEditor == 'divEditorConclusaoDEV') ? 'nav-conclusao-dev' : 'nav-conclusao-qa';
const list = (divEditor == 'divEditorComentario') ? 'listaComentarios' : (divEditor == 'divEditorConclusaoDEV') ? 'listaConclusaoDEV' : 'listaConclusaoQA';
const editorID = (divEditor == 'divEditorComentario') ? 'editorComentario' : (divEditor == 'divEditorConclusaoDEV') ? 'editorConclusaoDEV' : 'editorConclusaoQA';
$.ajax({
type: "POST",
url: `/${URL_BASE}App/DAO/Demandas/Demandas.class.php?method=saveComment`,
data: {
id: idDemanda,
comentario: comentario,
tipo: tipo,
idComentario: idComentario,
},
success: function (data) {
const obj = JSON.parse(data);
const session = getDataSession();
if (obj.erro == 1) {
OpenToastV2('Erro', 'Ocorreu um erro ao tentar adicionar um comentário.', 'error');
return;
}
$(`#${nav} .skeleton_comentario`).remove();
const objData = obj.data;
if (!objData) {
const currentComment = editor.getHTML();
$(`#texto-comentario-${idComentario}`).empty();
$(`#texto-comentario-${idComentario}`).html(currentComment);
} else {
const fotoUsuario = (objData.src_foto_usuario) ? URL_ARQUIVOS + objData.src_foto_usuario : DEFAULT_PICTURE;
const nomeUsuario = objData.nome_usuario;
var comentario = '';
comentario += ``;
comentario += ` `;
comentario += `
`;
comentario += ` ${objData.comentario}`
comentario += `
`;
comentario += `
`;
if ($('#semComentario').length) {
$(`#semComentario`).remove();
}
$(`#${list}`).prepend(comentario);
}
OpenToastV2('Sucesso', 'Comentário salvo com sucesso!', 'success');
cancelComments(divEditor);
}
});
}
function editComment(id, divEditor, editorID) {
_GET('App/Controller/Query/get.controller.php', {
table_name: 'comentarios_demanda',
condition: `AND id = ${id}`
}).done(data => {
const objData = JSON.parse(data)[0];
buildWriteComments(divEditor, editorID, objData.comentario, id);
});
}
function getCommentsById(type) {
const idDemanda = $('#idDemanda').val();
const list = (type == COMENTARIO) ? 'listaComentarios' : (type == CONCLUSAO_DEV) ? 'listaConclusaoDEV' : 'listaConclusaoQA';
const divEditor = (type == COMENTARIO) ? 'divEditorComentario' : (type == CONCLUSAO_DEV) ? 'divEditorConclusaoDEV' : 'divEditorConclusaoQA';
const editorID = (divEditor == 'divEditorComentario') ? 'editorComentario' : (divEditor == 'divEditorConclusaoDEV') ? 'editorConclusaoDEV' : 'editorConclusaoQA';
$.ajax({
type: "POST",
url: `/${URL_BASE}App/DAO/Demandas/Demandas.class.php?method=getCommentsById`,
data: {
id: idDemanda,
tipo: type,
},
success: function (data) {
const obj = JSON.parse(data);
$(`#${list}`).empty();
if (obj.erro == 1) {
OpenToastV2('Erro', 'Ocorreu um erro ao buscar os comentários da demanda.', 'error');
return;
}
const objData = obj.data;
if (objData.length <= 0) {
var div = ``;
div += '';
div += ' ';
div += ' Nenhum comentário por aqui';
div += '
';
$(`#${list}`).html(div);
}
objData.map((comment) => {
const fotoUsuario = (comment.src_foto_usuario) ? URL_ARQUIVOS + comment.src_foto_usuario : DEFAULT_PICTURE;
const nomeUsuario = comment.nome_usuario;
var comentario = '';
comentario += ``;
$(`#${list}`).prepend(comentario);
});
adicionarBotaoCopiar();
bindFancyboxToEditorImagePreview();
}
});
}
function getLogs() {
const idDemanda = $('#idDemanda').val();
$.ajax({
type: "POST",
url: `/${URL_BASE}App/DAO/Demandas/Demandas.class.php?method=getLogsById`,
data: {
originID: idDemanda,
},
success: function (data) {
const obj = JSON.parse(data);
if (obj.erro == 1) {
OpenToastV2('Erro', 'Ocorreu um erro ao buscar os logs da demanda.', 'error');
return;
}
$(`#listaLogDemanda`).empty();
const objData = obj.data;
objData.map((item) => {
const styleBadgeAndIcon = `style="background-color: ${item.secondary_color} !important; color: ${item.primary_color} !important; border: 1px solid ${item.primary_color} !important;"`;
var log = ``;
log += ``;
log += `
`;
log += ` `;
log += `
`;
log += `
`;
log += ` `;
log += `
`;
log += ` ${item.registro}`;
if (item.id_arquivo) {
log += `
${item.nome_arquivo}
`;
}
log += `
`;
log += `
`;
log += ` ${tempoRelativo(item.data_registro)}`;
log += `
`;
log += `
`;
log += `
`;
$(`#listaLogDemanda`).prepend(log);
});
}
});
}
/**
* Função para garantir que o container de comentário exista apenas para os responsável
* @param {string} idContainer
* @param {number} idResponsibleUser
* @param {qa | dev} type
*/
function ensureCommentContainer(containerID, responsibleUserID, type) {
const session = getDataSession();
if ($(`#${containerID}`).length && responsibleUserID != session.id) {
$(`#${containerID}`).remove();
return;
}
if (!$(`#${containerID}`).length && responsibleUserID == session.id) {
const divEditor = (type == 'dev') ? 'divEditorConclusaoDEV' : 'divEditorConclusaoQA';
const editorID = (type == 'dev') ? 'editorConclusaoDEV' : 'editorConclusaoQA';
const containerListWithCommentID = (type == 'dev') ? 'containerListaComComentarioDEV' : 'containerListaComComentarioQA';
var container = ``;
container += ``;
container += `
`;
container += `
`;
container += `
`;
container += `
`;
container += ` Adicione um comentário...`;
container += `
`;
container += `
`;
container += ` `;
container += ` `;
container += `
`;
container += `
`;
$(`#${containerListWithCommentID}`).append(container);
}
}
/**
* ::begin:: Funções para construir eventos usado na modal de Ações da Demanda
* ::begin:: Funções para construir eventos usado na modal de Ações da Demanda
*/
function buildEventsUpdateQA() {
$(document).off('change', '.checkboxAddQA').on('change', '.checkboxAddQA', function () {
if ($(this).is(':checked')) {
$('.checkboxAddQA').not(this).prop('checked', false);
updateQA($(this).val());
} else {
$(this).prop('checked', true);
}
});
$(document).off('change', '.checkboxTrocarQA').on('change', '.checkboxTrocarQA', function () {
if ($(this).is(':checked')) {
$('.checkboxTrocarQA').not(this).prop('checked', false);
updateQA($(this).val());
} else {
$(this).prop('checked', true);
}
});
}
function buildEventsUpdateDEV() {
$(document).off('change', '.checkboxAddProgramador').on('change', '.checkboxAddProgramador', function () {
if ($(this).is(':checked')) {
$('.checkboxAddProgramador').not(this).prop('checked', false);
updateDeveloper($(this).val());
} else {
$(this).prop('checked', true);
}
});
$(document).off('change', '.checkboxTrocarProgramador').on('change', '.checkboxTrocarProgramador', function () {
if ($(this).is(':checked')) {
$('.checkboxTrocarProgramador').not(this).prop('checked', false);
updateDeveloper($(this).val());
} else {
$(this).prop('checked', true);
}
});
}
function buildEventsUpdateLabels() {
$(document).off('change', '.checkboxEtiqueta').on('change', '.checkboxEtiqueta', function () {
const id = $(this).val();
const marcado = $(this).is(':checked');
updateLabels(id, marcado);
});
}
function buildEventsClickTabComments() {
$('#nav-comentarios-tab').on('click', () => {
cancelComments('divEditorComentario');
getCommentsById(COMENTARIO);
});
$('#nav-conclusao-dev-tab').on('click', () => {
cancelComments('divEditorConclusaoDEV');
getCommentsById(CONCLUSAO_DEV);
});
$('#nav-conclusao-qa-tab').on('click', () => {
cancelComments('divEditorConclusaoQA');
getCommentsById(CONCLUSAO_QA);
});
}
function buildEventsClickTabLogs() {
$('#nav-log-tab').on('click', () => {
getLogs();
});
}
function buildEventsDragAndDropFiles() {
let dragCounter = 0;
const overlay = $('#dragOverlayDemanda');
const inputFile = $('#inputAnexos');
// Remove apenas eventos desse módulo
$(document).off('.dragDemanda');
overlay.off('.dragDemanda');
// Detecta entrada de arquivo na tela
$(document).on('dragenter.dragDemanda', function (e) {
e.preventDefault();
if (e.originalEvent.dataTransfer.types.includes("Files")) {
dragCounter++;
overlay.addClass('dragging');
}
});
$(document).on('dragleave.dragDemanda', function () {
dragCounter--;
if (dragCounter <= 0) {
overlay.removeClass('dragging');
dragCounter = 0;
}
});
$(document).on('dragover.dragDemanda', function (e) {
e.preventDefault();
});
// Drop somente no overlay
overlay.on('drop.dragDemanda', function (e) {
e.preventDefault();
dragCounter = 0;
overlay.removeClass('dragging');
const files = e.originalEvent.dataTransfer.files;
if (files.length > 0) {
inputFile[0].files = files;
addAnexos(files);
}
});
}
function buildEventsInputFile() {
$('#inputAnexos').on('change', function () {
const arquivos = this.files;
addAnexos(arquivos);
});
}
function buildEventsUpdateClassification() {
$(document).off('change', '.checkboxMudarClassificacao').on('change', '.checkboxMudarClassificacao', function () {
if ($(this).is(':checked')) {
$('.checkboxMudarClassificacao').not(this).prop('checked', false);
updateClassification($(this).val());
} else {
$(this).prop('checked', true);
}
});
}
function buildEventsUpdateStatus() {
$(document).off('change', '.checkboxMudarStatus').on('change', '.checkboxMudarStatus', function () {
if ($(this).is(':checked')) {
$('.checkboxMudarStatus').not(this).prop('checked', false);
const idDemanda = $('#idDemanda').val();
const payload = {
jobID: idDemanda,
newStatusID: $(this).val(),
}
changeStatus(payload);
} else {
$(this).prop('checked', true);
}
});
}
function buildEventsDoubleClickDescription() {
$('.containterContentDescricao').on('dblclick', () => {
editarDescricao();
})
}
function buildEventsClickTitleJOB() {
const containerTitleJOB = $('#containerTituloDemanda');
containerTitleJOB.on('click', () => {
const titleJOB = $('#tituloDemanda');
if ($('#containerTituloDemanda #iptTituloDemanda').length) {
return;
}
$('span #nomeProjeto').remove();
const currentTitle = titleJOB.text().trim();
containerTitleJOB.empty();
var input = ``;
containerTitleJOB.append(input);
setFocusAtTheEndOfTheInput('#iptTituloDemanda');
// Fazer expandir conforme digita
$(document).on('input', '#iptTituloDemanda', function () {
this.style.height = 'auto';
this.style.height = this.scrollHeight + 'px';
});
const textarea = $('#iptTituloDemanda');
textarea.css('height', 'auto');
textarea.css('height', textarea[0].scrollHeight + 'px');
verificarMaximoCaracteres('iptTituloDemanda', LIMITE_CARACTERES_TITULO_DEMANDA);
buildEventsUpdateJOB(currentTitle);
});
}
function buildEventsUpdateJOB(oldTitle) {
const inputTitle = $('#iptTituloDemanda');
const containerTitleJOB = $('#containerTituloDemanda');
const jobID = $('#idDemanda').val();
const projectName = $('#inputNomeProjeto').val();
function submitTitle() {
const newTitle = inputTitle.val().trim();
if (!newTitle) {
OpenToastV2('Erro', 'Preencha o título da demanda antes de salvar-la.', 'error');
setFocusAtTheEndOfTheInput('#iptTituloDemanda');
return;
}
var title = '';
title += `${projectName}: `;
title += `${(oldTitle == newTitle) ? oldTitle : newTitle}`;
if (oldTitle == newTitle) {
containerTitleJOB.html(title);
return;
}
$.ajax({
type: "POST",
url: `/${URL_BASE}App/DAO/Demandas/Demandas.class.php?method=updateTitleJOB`,
data: {
id: jobID,
newTitle: newTitle,
},
success: function (data) {
const obj = JSON.parse(data);
if (obj.erro == 1) {
OpenToastV2('Erro', 'Ocorreu um erro ao tentar atualizar o título da demanda.', 'error');
return;
}
containerTitleJOB.html(title);
updateJobListing();
}
});
}
// Quando perde o foco
inputTitle.on('blur', function () {
submitTitle();
});
// Quando aperta Enter
inputTitle.on('keydown', function (e) {
if (e.key === 'Enter') {
e.preventDefault(); // evita submit de form
submitTitle();
$(this).blur(); // força sair do foco
}
});
}
function buildEventsPasteImageToModal() {
const modal = $('#aBodyPageModal'); // ajuste para o container real da sua modal
modal.on('paste', function (e) {
const activeElement = document.activeElement;
// 🚫 Se estiver dentro do Toast UI Editor, deixa ele tratar normalmente
if ($(activeElement).closest('.toastui-editor-defaultUI').length) {
return;
}
const items = (e.originalEvent.clipboardData || e.clipboardData).items;
if (!items) return;
for (let i = 0; i < items.length; i++) {
const item = items[i];
if (item.type.indexOf('image') !== -1) {
e.preventDefault();
const blob = item.getAsFile();
const file = new File(
[blob],
`image.webp`,
{ type: blob.type }
);
addAnexos([file]);
break;
}
}
});
}
/**
* ::end:: Funções para construir eventos usado na modal de Ações da Demanda
* ::end:: Funções para construir eventos usado na modal de Ações da Demanda
*/
function generateAndCopyLinkJob(jobID) {
const baseUrlChamado = `https://movetask.com.br/Demandas/lista?id=${jobID}`;
// const baseUrlChamado = `http://localhost/MoveTask/01/Demandas/lista?id=${jobID}`;
// const baseUrlChamado = `https://test.appg3.com.br/movetask/Demandas/lista?id=${jobID}`;
navigator.clipboard.writeText(baseUrlChamado).then(() => {
OpenToastV2('Link Copiado', `O link da demanda Nº ${formatarNumeroChamado(jobID)} foi copiado com sucesso.`, 'success');
}).catch(err => {
OpenToastV2('Erro ao Copiar', `Não foi possível copiar o link da demanda Nº ${formatarNumeroChamado(jobID)}.`, 'error');
});
}
function addImageTextPreviewInComment(
fileID,
filename,
ext,
urlFile,
closePageModal = false,
useImageTag = false
) {
if (closePageModal) {
ClosePageModalSemHeader();
}
var nameFile = ``;
if ($(`#titulo-anexo-${fileID}`).length) {
nameFile = $(`#titulo-anexo-${fileID}`).text();
} else {
nameFile = decodeURIComponent(filename);
}
const tipo = getFileTypeFancybox(ext);
const navComentario = $('#nav-comentarios-tab');
const navConclusaoDev = $('#nav-conclusao-dev-tab');
const navConclusaoQA = $('#nav-conclusao-qa-tab');
let divEditor = '';
let editorID = '';
// 1. Montar atributos Fancybox
let fancyAttrs = '';
switch (tipo) {
case 'image':
fancyAttrs = `data-fancybox="galeria" data-type="image"`;
break;
case 'video':
fancyAttrs = `data-fancybox="galeria" data-type="html5video"`;
break;
case 'download':
fancyAttrs = '';
break;
}
// 2. Montar conteúdo interno do
let innerContent = nameFile;
if (useImageTag && tipo === 'image') {
innerContent = `
`;
}
const linkImgPreview = `
${innerContent}
`;
// 3. Descobrir qual editor está ativo
if (navComentario.hasClass('active')) {
divEditor = 'divEditorComentario';
editorID = 'editorComentario';
} else if (navConclusaoDev.hasClass('active')) {
divEditor = 'divEditorConclusaoDEV';
editorID = 'editorConclusaoDEV';
} else if (navConclusaoQA.hasClass('active')) {
divEditor = 'divEditorConclusaoQA';
editorID = 'editorConclusaoQA';
}
// 4. Se editor ainda não estiver montado
if ($(`#${divEditor}`).hasClass('d-none')) {
buildWriteComments(divEditor, editorID);
editorInstanceComment.setHTML(linkImgPreview);
bindFancyboxToEditorImagePreview();
return;
}
const currentHTML = editorInstanceComment.getHTML();
editorInstanceComment.setHTML(
currentHTML + `${linkImgPreview}
`
);
bindFancyboxToEditorImagePreview();
}
function handleClickSelectFilesFromEditor(jobID) {
PageModalSemHeader(`/${URL_BASE}App/View/Pages/Demandas/include/modal/selecionar_arquivos_editor.php?jobID=${jobID}`, true, 700);
}
function handleClickAttachFileViaLink() {
const linkFile = $('#inputLinkFileAnexar').val();
if (!linkFile) {
OpenToastV2('Erro', 'Por favor, insira um link antes de enviar.', 'error');
return;
}
const ext = getImageExtension(linkFile);
if (ext) {
const navComentario = $('#nav-comentarios-tab');
const navConclusaoDev = $('#nav-conclusao-dev-tab');
const navConclusaoQA = $('#nav-conclusao-qa-tab');
let divEditor = '';
let editorID = '';
let fancyAttrs = `data-fancybox="galeria" data-type="image"`;
let innerContent = `
`;
const linkImgPreview = `
${innerContent}
`;
if (navComentario.hasClass('active')) {
divEditor = 'divEditorComentario';
editorID = 'editorComentario';
} else if (navConclusaoDev.hasClass('active')) {
divEditor = 'divEditorConclusaoDEV';
editorID = 'editorConclusaoDEV';
} else if (navConclusaoQA.hasClass('active')) {
divEditor = 'divEditorConclusaoQA';
editorID = 'editorConclusaoQA';
}
if ($(`#${divEditor}`).hasClass('d-none')) {
buildWriteComments(divEditor, editorID);
editorInstanceComment.setHTML(linkImgPreview);
bindFancyboxToEditorImagePreview();
return;
}
const currentHTML = editorInstanceComment.getHTML();
editorInstanceComment.setHTML(
currentHTML + `${linkImgPreview}
`
);
bindFancyboxToEditorImagePreview();
ClosePageModalSemHeader();
}
}