Last active
June 3, 2025 16:59
-
-
Save leonardAlbert/f81f76d78df1d65f2c526d9f0ea24b80 to your computer and use it in GitHub Desktop.
Script for AMS CAP Workflow.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name Custom CAP AMS Script | |
// @namespace custom-cap-ams-script | |
// @version 0.1 | |
// @description | |
// @author Leonard A M Pedro | |
// @grant none | |
// | |
// @note Instructions: | |
// @note * Paste the script into the browser console to apply the changes. | |
// @note ** For best use, install the chrome extension for the timesheet domain. | |
// @chrome extension https://chromewebstore.google.com/detail/user-javascript-and-css/nbhcbdghjpllgmfilhnhkllmkecfmpld | |
(function () { | |
'use strict'; | |
const appV = { | |
// Run tasks. | |
run: function () { | |
appV.filterByColumn(); | |
appV.pageDetailsStyle(); | |
appV.findTicketByNumber(); | |
}, | |
// ============================================================ | |
// === FUNCTIONS | |
// ============================================================ | |
// | |
/** | |
* Tela: Pesquisa | |
* | |
* Organiza as colunas de resultados de acordo com os filtros aplicados. | |
*/ | |
filterByColumn: function () { | |
if (!/Pages\/SearchRequests.aspx/.test(window.location.href)) return; | |
setInterval(function () { | |
let filters = $('#search-requests-filter-pills .search-requests-filter-pill'); | |
let headerResults = $('#search-requests_table thead tr th'); | |
let results = $('#search-requests_table tbody tr'); | |
let noResults = $('#search-requests_table tbody tr.odd td.dataTables_empty'); | |
if (noResults.length) return; | |
let formatFilters = []; | |
filters.each(function () { | |
let filter = $(this).text().split(':'); | |
let key = filter[0].trim(); | |
let values = filter[1].trim().slice(0, -1).split('|').map(item => item.trim()); | |
formatFilters[key] = values; | |
}); | |
headerResults.each(function (index) { | |
let headerText = $(this).text().trim(); | |
for (let key in formatFilters) { | |
if (headerText !== key) continue; | |
results.each(function () { | |
let rowValues = $(this).find('td').eq(index).find('img').map(function () { | |
return $(this).attr('onclick'); | |
}).get(); | |
let allValuesPresent = formatFilters[key].every(function (value) { | |
return rowValues.some(s => s.includes(value)) | |
}); | |
if (!allValuesPresent) $(this).hide(); | |
}); | |
} | |
}); | |
}, 500); | |
}, | |
/** | |
* Tela: Detalhes da Solicitação | |
* | |
* Organiza o layout da pagina com base no Freshdesk. | |
*/ | |
pageDetailsStyle: function () { | |
if (!/Pages\/RequestDetails.aspx/.test(window.location.href)) return; | |
setInterval(function () { | |
if ($('#custom-body-a').length && $('#custom-body-b').length) | |
return; | |
let mainContent = $('#request-body-container').parent(); | |
let bodyContent = mainContent.find('#request-body-container'); | |
let msgContent = mainContent.find('#request-message-board-container'); | |
// bodyContent.children().hide(); | |
let blockComentarios = bodyContent.find('.request-comments'); | |
let blockSolicitante = bodyContent.find('#request-attributes-container .form-row').first().children().first(); | |
let blockCliente = bodyContent.find('#request-attributes-container .card .form-row [internalname="Cliente"]').parent(); | |
let blockQualOProjeto = bodyContent.find('#request-attributes-container .card .form-row [internalname="QualOProjeto"]').parent(); | |
let blockTipoDoAtendimento = bodyContent.find('#request-attributes-container .card .form-row [internalname="TipoDoAtendimento"]').parent(); | |
let blockUrgencia = bodyContent.find('#request-attributes-container .card .form-row [internalname="Urgencia"]').parent(); | |
let blockImpacto = bodyContent.find('#request-attributes-container .card .form-row [internalname="Impacto"]').parent(); | |
let blockTitulo = bodyContent.find('#request-attributes-container .card .form-row [internalname="Titulo"]').parent(); | |
let blockDescricao = bodyContent.find('#request-attributes-container .card .form-row [internalname="Descricao"]').parent(); | |
let blockUsuariosAfetados = bodyContent.find('#request-attributes-container .card .form-row [internalname="UsuariosAfetados"]').parent(); | |
let blockFrequencia = bodyContent.find('#request-attributes-container .card .form-row [internalname="Frequencia"]').parent(); | |
let blockEvidencias = bodyContent.find('#request-attributes-container .card .form-row [internalname="Evidencias"]').closest('.cap-form-control'); | |
let blockCategoria = bodyContent.find('#request-attributes-container .card .form-row [internalname="Categoria"]').parent(); | |
let blockNecessarioMaisInformacoesParaOAtendimento = bodyContent.find('#request-attributes-container .card .form-row [internalname="NecessarioMaisInformacoesParaOAtendimento"]').parent(); | |
let blockSolicitacaoDoSuporte = bodyContent.find('#request-attributes-container .card .form-row [internalname="SolicitacaoDoSuporte"]').parent(); | |
let blockNecessarioHomologacaoDoCliente = bodyContent.find('#request-attributes-container .card .form-row [internalname="NecessarioHomologacaoDoCliente"]').parent(); | |
let blockEvidenciaSuporte = bodyContent.find('#request-attributes-container .card .form-row [internalname="EvidenciaSuporte"]').closest('.cap-form-control'); | |
let blockHorasEstimadas = bodyContent.find('#request-attributes-container .card .form-row [internalname="HorasEstimadas"]').parent(); | |
let blockAcaoDoSuporte = bodyContent.find('#request-attributes-container .card .form-row [internalname="AcaoDoSuporte"]').closest('.cap-form-control'); | |
let blockEntregaAprovada = bodyContent.find('#request-attributes-container .card .form-row [internalname="EntregaAprovada"]').parent(); | |
let blockHomologacaoReprovada = bodyContent.find('#request-attributes-container .card .form-row [internalname="HomologacaoReprovada"]').parent(); | |
let blockChamadoSolucionado = bodyContent.find('#request-attributes-container .card .form-row [internalname="ChamadoSolucionado"]').parent(); | |
let blockChamadoNaoSolucionado = bodyContent.find('#request-attributes-container .card .form-row [internalname="ChamadoNaoSolucionado"]').parent(); | |
let blockComoVoceAvaliaSuaSatisfacaoComEsteAtendimento = bodyContent.find('#request-attributes-container .card .form-row [internalname="ComoVoceAvaliaSuaSatisfacaoComEsteAtendimento"]').parent(); | |
let blockOQuePodemosMelhorar = bodyContent.find('#request-attributes-container .card .form-row [internalname="OQuePodemosMelhorar"]').parent(); | |
let blockGostariaDeDeixarUmElogio = bodyContent.find('#request-attributes-container .card .form-row [internalname="GostariaDeDeixarUmElogio"]').parent(); | |
let blockTotalDeHorasSemAdicional = bodyContent.find('#request-attributes-container .card .form-row [internalname="TotalDeHorasSemAdicional"]').parent(); | |
let blockTotalDeHorasComAdicional = bodyContent.find('#request-attributes-container .card .form-row [internalname="TotalDeHorasComAdicional"]').parent(); | |
mainContent.prepend(` | |
<div class="col-12"> | |
<div class="row"> | |
<div id="custom-body-a" class="col-8"> | |
</div> | |
<div id="custom-body-b" class="col-4"> | |
<h4 class="mr-3">Cliente</h4> | |
<hr class="mr-3"> | |
<div class="d-client"></div> | |
<h4 class="mr-3 pt-4">Dados do Chamado</h4> | |
<hr class="mr-3"> | |
<div class="d-infos"></div> | |
<h4 class="mr-3 pt-4">Detalhes</h4> | |
<hr class="mr-3"> | |
<div class="d-details"></div> | |
</div> | |
</div> | |
<div class="row"> | |
<div id="custom-body-c" class="col-12 mt-3 mb-5"> | |
<h4 class="">Apontamentos</h4> | |
<hr class=""> | |
<div class="custom-appointments row"> | |
<div class="col-4 h-estimate"></div> | |
<div class="col-4 h-consumed"></div> | |
<div class="col-4 h-consumed-no-additional"></div> | |
</div> | |
</div> | |
</div> | |
</div> | |
`); | |
// Custom | |
$('<hr class="mb-4">').insertAfter($('.cap-navigation')); | |
let ticketTitle = blockTitulo.find('input').val(); | |
$(`<h4 class="text-truncate"> > ${ticketTitle}</h4>`).insertAfter($('.cap-navigation')); | |
// Block A | |
if (blockTitulo.length) blockTitulo.appendTo('#custom-body-a'); | |
if (blockDescricao.length) { | |
blockDescricao.find('textarea').css('height', '300px'); | |
blockDescricao.appendTo('#custom-body-a'); | |
} | |
if (blockComentarios.length) blockComentarios.appendTo('#custom-body-a'); | |
if (msgContent.children().length) msgContent.children().appendTo('#custom-body-a'); | |
// Block B | |
if (blockCliente.length) blockCliente.removeClass().addClass('mx-3 mb-3 cap-form-control').appendTo('#custom-body-b .d-client'); | |
if (blockSolicitante) $(blockSolicitante).removeClass().addClass('mx-3 mb-3 cap-form-control').appendTo('#custom-body-b .d-client'); | |
if (blockQualOProjeto.length) blockQualOProjeto.appendTo('#custom-body-b .d-client'); | |
if (blockCategoria.length) blockCategoria.appendTo('#custom-body-b .d-infos'); | |
if (blockTipoDoAtendimento.length) blockTipoDoAtendimento.appendTo('#custom-body-b .d-infos'); | |
if (blockUrgencia.length) blockUrgencia.appendTo('#custom-body-b .d-infos'); | |
if (blockImpacto.length) blockImpacto.appendTo('#custom-body-b .d-infos'); | |
if (blockUsuariosAfetados.length) blockUsuariosAfetados.removeClass().addClass('mx-3 mb-3 cap-form-control').appendTo('#custom-body-b .d-infos'); | |
if (blockFrequencia.length) blockFrequencia.removeClass().addClass('mx-3 mb-3 cap-form-control').appendTo('#custom-body-b .d-infos'); | |
if (blockEvidencias.length) blockEvidencias.appendTo('#custom-body-b .d-infos'); | |
if (blockNecessarioMaisInformacoesParaOAtendimento.length) blockNecessarioMaisInformacoesParaOAtendimento.appendTo('#custom-body-b .d-details'); | |
if (blockNecessarioHomologacaoDoCliente.length) blockNecessarioHomologacaoDoCliente.appendTo('#custom-body-b .d-details'); | |
if (blockEvidenciaSuporte.length) blockEvidenciaSuporte.appendTo('#custom-body-b .d-details'); | |
// Block C | |
if (blockHorasEstimadas.length) blockHorasEstimadas.removeClass().addClass('mb-3 cap-form-control').appendTo('#custom-body-c .custom-appointments .h-estimate'); | |
if (blockTotalDeHorasSemAdicional.length) blockTotalDeHorasSemAdicional.removeClass().addClass('mb-3 cap-form-control').appendTo('#custom-body-c .custom-appointments .h-consumed'); | |
if (blockTotalDeHorasComAdicional.length) blockTotalDeHorasComAdicional.removeClass().addClass('mb-3 cap-form-control').appendTo('#custom-body-c .custom-appointments .h-consumed-no-additional'); | |
if (blockAcaoDoSuporte.length) blockAcaoDoSuporte.removeClass().addClass('mb-3 cap-form-control').appendTo('#custom-body-c'); | |
bodyContent.prev().hide(); | |
}, 500); | |
}, | |
/** | |
* Tela: Detalhes da Solicitação | |
* | |
* Abre a solicitação pelo número dela. | |
* Ex: /Pages/RequestDetails.aspx?params=58 | |
*/ | |
findTicketByNumber: function () { | |
if (!/Pages\/RequestDetails.aspx/.test(window.location.href)) return; | |
const urlParams = new URLSearchParams(window.location.search); | |
const params = urlParams.get('params').toString(); | |
if (params !== null && Number.isInteger(parseInt(params))) { | |
const base64Params = btoa(`RequestId=${params}`); | |
const newUrl = `/Pages/RequestDetails.aspx?params=${base64Params}`; | |
window.location.href = newUrl; | |
} | |
}, | |
}; | |
$('document').ready(function () { | |
// Run script. | |
appV.run(); | |
}); | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment