/* Exibe ou oculta elemento na página (senha) */ function showHide($elementId, $type1, $typeNew, $imageId, $classes1, $classesNew){ if (document.getElementById($elementId).getAttribute('type') == $type1) { document.getElementById($elementId).setAttribute('type',$typeNew); document.getElementById($imageId).className = $classesNew; } else{ document.getElementById($elementId).setAttribute('type',$type1); document.getElementById($imageId).className = $classes1; } } /* Responsavel por clonar div da pagina ao clicar em botão */ var CloneDivAux_i = 1; var CloneDivAux_j = 1; function CloneDiv($remMin = false, $remReq = false, $UseAuxJ = false, $CloneDiv = 'clone', $DadosDiv = 'dados'){ if($UseAuxJ){ CloneDivAux_j++; // incrementando numero inicial (adiciona mais 1 a cada click) var CloneDivAux = CloneDivAux_j; } else{ CloneDivAux_i++; // incrementando numero inicial (adiciona mais 1 a cada click) var CloneDivAux = CloneDivAux_i; } var clone = $('#'+$CloneDiv).clone().removeAttr("id"); // clonando tudo que está dentro da div #clone e remove o ID var data = $('#'+$DadosDiv).append(clone).children().last().attr('id', 'clone_' + CloneDivAux); // inserindo o clone na div #dados, pegando a ultima div inserida e adicionando um novo ID para ela var select = data.find("select"); // Todos os inputs existentes em data. var inputs = data.find("input"); // Todos os selects existentes em data. var trs = data.find("tr"); // Todos as linhas de tabela existentes em data. var textareas = data.find("textarea"); // Todos os selects existentes em data. var btns = data.find("button"); // Todos os selects existentes em data. inputs.each(function() { // aqui pegamos cada input novo var input = $(this); var inputID = input.attr('id'); // id do input var inputNAME = input.attr('name'); // nome do input var inputPlaceHolder = input.attr('placeholder'); // nome do input // if(document.getElementById(inputID).type == 'number') // input.val(0); // else input.val(""); if($remMin) input.removeAttr("min"); //remove valor mínimo, caso tenha if($remReq) input.removeAttr("required"); //remove obrigatoriedade do campo input.removeAttr("name").attr("name", inputNAME.split("_")[0] + "_" + CloneDivAux); // atualizamos o input com um numero (i), tornando esse ID único. input.removeAttr("id").attr("id", inputID.split("_")[0] + "_" + CloneDivAux); // atualizamos o input com um numero (i), tornando esse ID único. input.attr('placeholder',inputPlaceHolder); //Recupera antigo placeholder }); textareas.each(function() { // aqui pegamos cada input novo var input = $(this); var inputID = input.attr('id'); // id do input var inputNAME = input.attr('name'); // nome do input if(document.getElementById(inputID).type == 'number') input.val(0); else input.val(""); if($remMin) input.removeAttr("min"); //remove valor mínimo, caso tenha if($remReq) input.removeAttr("required"); //remove obrigatoriedade do campo input.removeAttr("name").attr("name", inputNAME.split("_")[0] + "_" + CloneDivAux); // atualizamos o input com um numero (i), tornando esse ID único. input.removeAttr("id").attr("id", inputID.split("_")[0] + "_" + CloneDivAux); // atualizamos o input com um numero (i), tornando esse ID único. }); select.each(function() { // aqui pegamos cada select novo var input = $(this); var inputID = input.attr('id'); // id do input var inputNAME = input.attr('name'); // nome do input if($remMin) input.removeAttr("min"); //remove valor mínimo, caso tenha if($remReq) input.removeAttr("required"); //remove obrigatoriedade do campo input.removeAttr("name").attr("name", inputNAME.split("_")[0] + "_" + CloneDivAux); input.removeAttr("id").attr("id", inputID.split("_")[0] + "_" + CloneDivAux); // atualizamos o input com um numero (i), tornando esse ID único. }); trs.each(function() { // aqui pegamos cada tr novo var input = $(this); var inputID = input.attr('id'); // id do input var inputNAME = input.attr('name'); // nome do input input.removeAttr('class'); input.removeAttr("name").attr("name", inputNAME.split("_")[0] + "_" + CloneDivAux); // atualizamos o input com um numero (i), tornando esse ID único. input.removeAttr("id").attr("id", inputID.split("_")[0] + "_" + CloneDivAux); // atualizamos o input com um numero (i), tornando esse ID único. }); btns.each(function() { // aqui pegamos cada tr novo var input = $(this); var inputID = input.attr('id'); // id do input var inputNAME = input.attr('name'); // nome do input input.removeAttr("name").attr("name", inputNAME.split("_")[0] + "_" + CloneDivAux); // atualizamos o input com um numero (i), tornando esse ID único. input.removeAttr("id").attr("id", inputID.split("_")[0] + "_" + CloneDivAux); // atualizamos o input com um numero (i), tornando esse ID único. }); } //Mascaras de input $(document).ready(function(){ $('.date').mask('00/00/0000'); $('.time').mask('00:00:00'); $('.date_time').mask('00/00/0000 00:00:00'); $('.cep').mask('00000-000'); $('.cpf').mask('000.000.000-00', {reverse: true}); $('.cnpj').mask('00.000.000/0000-00', {reverse: true}); $('.phone').mask('0000000-0000', {reverse: true}); //tamanho do 0800 $('.money').mask('000.000.000.000.000,00', {reverse: true}); $('.money2').mask('#.##0,00', {reverse: true}); // $('.phone').mask('0000-000-0000', {reverse: true}); }); /* Envia form se CTRL + Q (form com ID shortcut) */ document.addEventListener('keydown', (event) => { var name = event.key; var code = event.code; if (event.ctrlKey && (name == 'q' || (name == 'Q')) ) { document.getElementById("shortcut").submit(); } }, false); /* Impede envio de formulário com enter, mas permite em botões e selects*/ document.addEventListener("keydown", function(e) { if(e.keyCode === 13) { // console.log(e.target); if(e.target.tagName != 'SELECT' && e.target.tagName != 'BUTTON' && e.target.tagName !== 'TEXTAREA') e.preventDefault(); } }); /*********************************************************************** Adiciona listeners */ /* Adiciona listeners no formulario de registro */ function CheckRegisterListener(){ var nome = document.getElementById("name"); var email = document.getElementById("email"); var dataDigitada = document.getElementById("birth"); var pwd = document.getElementById("pwd"); var newPwd = document.getElementById("confirm_password"); nome.addEventListener('keyup', checkName); email.addEventListener('keyup', checkEmail); dataDigitada.addEventListener('keyup', checkDate); pwd.addEventListener('keyup', checkPass); newPwd.addEventListener('keyup', checkNewPass); } /* Adiciona listener de pressionar botão em filter (entrega e devolução de chaves com filtro) */ function FilterListener(){ var filter = document.getElementById("filter"); filter.addEventListener('keyup', checkFilter); } /* Preenche nome de pessoa na página de telefonemas */ function FillNameListener() { var ddd = document.getElementById("ddd"); var phone = document.getElementById("phone"); phone.addEventListener('keyup', FillName); ddd.addEventListener('keyup', FillName); } /*************************************** Validação de forms completos (chama funções menores) */ /* Valida form de registro do sistema */ function validateRegister(){ if(checkName() && checkEmail() && checkDate() && checkPass() && checkNewPass()){ return true; } return false; } /* Valida filtro de entrega ou recepção de chaves */ function validateFilter(){ if(checkFilter()){ return true; } location.reload(); return false; } /*********************************************************************** Validação de campos */ function checkName(){ var nome = document.getElementById("name"); var regName = new RegExp("^([a-zA-ZáàâãéèêíïóôõöúçñÁÀÂÃÉÈÍÏÓÔÕÖÚÇÑ]{2,}\\s[a-zA-Z]{1,}'?-?[a-zA-ZáàâãéèêíïóôõöúçñÁÀÂÃÉÈÍÏÓÔÕÖÚÇÑ]{2,}\\s?([a-zA-ZáàâãéèêíïóôõöúçñÁÀÂÃÉÈÍÏÓÔÕÖÚÇÑ]{1,})?)"); if(nome.value.match(regName) != null){ nome.classList.add("is-valid"); nome.classList.remove("is-invalid"); document.getElementById("submit").disabled = false; return true; } else{ nome.classList.add("is-invalid"); nome.classList.remove("is-valid"); document.getElementById("submit").disabled = true; return false; } } function checkEmail(){ var email = document.getElementById("email"); var regEmail = new RegExp("[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?"); if(email.value.match(regEmail) != null){ email.classList.add("is-valid"); email.classList.remove("is-invalid"); document.getElementById("submit").disabled = false; return true; } else{ email.classList.add("is-invalid"); email.classList.remove("is-valid"); document.getElementById("submit").disabled = true; return false; } } function checkDate(){ var dataDigitada = document.getElementById("birth"); var date = new Date(document.getElementById("birth").value); var min = new Date(Date.now()); date.setHours('00', '00', '01'); min.setHours('00', '00', '01'); min.setFullYear(min.getFullYear()-18); if(isNaN(date.getTime()) || date.getTime() > min.getTime() || date.getFullYear() < 1890){ dataDigitada.classList.add("is-invalid"); dataDigitada.classList.remove("is-valid"); document.getElementById("submit").disabled = false; return false; } else{ dataDigitada.classList.add("is-valid"); dataDigitada.classList.remove("is-invalid"); document.getElementById("submit").disabled = true; return true; } } function checkPass(){ var pwd = document.getElementById("pwd"); var regPass = new RegExp("^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,16}$"); if(pwd.value.match(regPass) != null){ pwd.classList.add("is-valid"); pwd.classList.remove("is-invalid"); document.getElementById("submit").disabled = false; return true; } else{ pwd.classList.add("is-invalid"); pwd.classList.remove("is-valid"); document.getElementById("submit").disabled = true; return false; } } function checkNewPass(){ var newPwd = document.getElementById("confirm_password"); var regPass = new RegExp("^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{8,16}$"); if(newPwd.value == document.getElementById("pwd").value && newPwd.value.length>=8){ newPwd.classList.add("is-valid"); newPwd.classList.remove("is-invalid"); document.getElementById("submit").disabled = false; return true; } else{ newPwd.classList.add("is-invalid"); newPwd.classList.remove("is-valid"); document.getElementById("submit").disabled = true; return false; } } function checkFilter(){ var filter = document.getElementById("filter"); var regFilter = new RegExp("^[0-9]+(?:,[0-9]+)*$"); if(filter.value.match(regFilter) != null){ filter.classList.add("is-valid"); filter.classList.remove("is-invalid"); document.getElementById("submit").disabled = false; return true; } else{ filter.classList.add("is-invalid"); filter.classList.remove("is-valid"); document.getElementById("submit").disabled = true; return false; } } /* ************************************************************ */ /* Marca ou desmarca todos os itens ao clicar num seletor geral */ /* Id de seletor geral, Id dos itens */ function SelectDeselectAll(AllObj, ItemObj) { var AllObj = document.getElementsByName(AllObj); var list = document.querySelectorAll( '[name^="'+ItemObj+'"]' ); for (var item of list) { item.checked = AllObj[0].checked; } } /* ********************************************* */ /* Ao clicar em um item, corrige seletor 'Todos' */ /*Id de seletor geral, Id dos itens*/ function ChangeAllSelector(AllObj, ItemObj) { var AllObj = document.getElementsByName(AllObj); var list = document.querySelectorAll( '[name^="'+ItemObj+'"]' ); for (var item of list) { if(!item.checked){ AllObj[0].checked = false; return; } } AllObj[0].checked = true; } /* ************************************************** */ /* Atribui cargo->funcionario -> on click */ function CargoAtribuirSelect() { //Remove all before update var ElementsSwitch = document.querySelectorAll('.largerSwitch'); var ElementsSelect = document.querySelectorAll('.select_sala'); for (var i = ElementsSwitch.length - 1; i >= 0; i--) { ElementsSwitch[i].checked = false; } for (var i = ElementsSelect.length - 1; i >= 0; i--) { ElementsSelect[i].value = ''; } // Add Check element on cargo = true var cargo_setor = document.getElementById('cargo_setor').value; //Para em caso de remover cargo escolhido if(cargo_setor == ""){ return 0; } // Ajax para recurar do BD elementos do cargo escolhido $.ajax({ method: 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}, url: "/funcionarios/cargos/atribuir/ajax", data: { cargo_setor: cargo_setor}, dataType:"json", beforeSend:function(){}, aferSend:function(){}, }) .done(function( response ) { for (var i = 0; i < Object.keys(response).length; i++) { var Emp_id = Object.keys(response)[i]; var Emp_manha = response[Emp_id]['manha']; var Emp_tarde = response[Emp_id]['tarde']; var Emp_sala = response[Emp_id]['sala']; var Employee_Check = document.getElementById('check_'+Emp_id); Employee_Check.checked = true; var Employee_manha = document.getElementById('check_manha_'+Emp_id); Employee_manha.checked = Emp_manha; var Employee_tarde = document.getElementById('check_tarde_'+Emp_id); Employee_tarde.checked = Emp_tarde; var Employee_sala = document.getElementById('sala_'+Emp_id); Employee_sala.value = Emp_sala; } // return (); }) .fail(function(xhr, status, error) { alert("Erro ao atualizar cargo dinamicamente js"); console.log(error); return null; }); } /* ************************************************** */ /* Atribui cargo->setor -> on click */ function SetorAtribuirSelect() { //Remove all before update var Elements = document.querySelectorAll('.largerSwitch'); // console.log(Elements); for (var i = Elements.length - 1; i >= 0; i--) { Elements[i].checked = false; } // Add Check element on setor = true var Setor = document.getElementById('setor').value; //Impede AJAX caso setor vazio if(Setor == '') return 0; // Ajax para recurar do BD elementos do cargo escolhido $.ajax({ method: 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}, url: "/funcionarios/setores/atribuir/ajax", data: { setor: Setor }, dataType:"json", beforeSend:function(){}, aferSend:function(){}, }) .done(function( response ) { console.log(response); for (var i = 0; i < response.length; i++) { var Cargo_id = response[i]; var Cargo_Check = document.getElementById('check_'+Cargo_id); Cargo_Check.checked = true; } // return (); }) .fail(function(xhr, status, error) { alert("Erro ao atualizar setor dinamicamente js"+error); return null; }); } /* ************************************************** */ /* Quando um form é enviado, aparece a DIV de loading e reseta filtros do Datatables*/ $(document).ready(function(){ $('form').submit(function(){ var loader = document.getElementById("loader"); loader.style.display = 'block'; var table = $('#table').DataTable(); if(table != null){ table.search('').page.len( -1 ).draw(false); } // Adiciona um tempo de delay para esconder o loader setTimeout(function() { loader.style.display = 'none'; // Esconde o loader após 3 segundos }, 3000); }); }); /* ****************************************** */ /* Quando executada, esconde a DIV de loading */ function HideLoader(){ var loader = document.getElementById("loader"); // loader.fadeOut("fast"); loader.style.display = 'none'; } /* ****************************************** */ /* Sleep timer */ function sleep(milliseconds) { const date = Date.now(); let currentDate = null; do { currentDate = Date.now(); } while (currentDate - date < milliseconds); }