/licitacoes.php

https://bitbucket.org/denissilva/cgpdi_admin · PHP · 301 lines · 272 code · 28 blank · 1 comment · 20 complexity · d724b772e304a51edc4b95814d934ee9 MD5 · raw file

  1. <!DOCTYPE html>
  2. <html lang="pt-br">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>CGPDI Admin</title>
  8. <link rel="stylesheet" href="css/bootstrap.min.css">
  9. <link rel="stylesheet" href="css/index.css">
  10. <link rel="stylesheet" href="css/datatables.min.css">
  11. </head>
  12. <body>
  13. <?php include_once "cabecalho.php";?>
  14. <main role="main" class="container">
  15. <h2>Licitações</h2>
  16. <ul class="nav nav-tabs" id="cabecalho.phpTab" role="tablist">
  17. <li class="nav-item">
  18. <a class="nav-link active" id="cadastro-tab" data-toggle="tab" href="#cadastro" role="tab" aria-controls="cadastro" aria-selected="true">Cadastro</a>
  19. </li>
  20. <li class="nav-item">
  21. <a class="nav-link" id="lista-tab" data-toggle="tab" href="#lista" role="tab" aria-controls="lista" aria-selected="false">Lista</a>
  22. </li>
  23. </ul>
  24. <div class="tab-content" id="cabecalho.phpTabConteudo">
  25. <div class="tab-pane fade show active" id="cadastro" role="tabpanel" aria-labelledby="cadastro-tab">
  26. <form method="post" enctype="multipart/form-data" onreset="javascrit:$('#id').val('');">
  27. <input type="hidden" class="form-control" id="id" name="id">
  28. <div class="form-group col-sm clearfix">
  29. <button type="submit" class="btn btn-success float-right" id="btn-cadastrar">
  30. <i class="fas fa-save"></i>
  31. </button>
  32. <button class="btn btn-secondary float-right" id="btn-novo">
  33. <i class="fas fa-plus"></i>
  34. </button>
  35. </div>
  36. <div class="form-row">
  37. <div class="form-group col-md-2">
  38. <label for="situacao">Tipo de Processo</label>
  39. <select class="form-control required" id="tipo" name="tipo" >
  40. <option value="" class="hidden">Selecione</div>
  41. <option value="LI">Licitação</option>
  42. <option value="PE">Pregão Eletrônico</option>
  43. <option value="PP">Pregão Presencial</option>
  44. <option value="TP">Tomada de Preço</option>
  45. <option value="OU">Outros</option>
  46. </select>
  47. </div>
  48. <div class="form-group col-md-2">
  49. <label for="codigo"> Processo</label>
  50. <input type="text" class="form-control required" id="codigo" name="codigo" minlength="6" maxlength="6">
  51. </div>
  52. <div class="form-group col-md-8">
  53. <label for="titulo">Título</label>
  54. <input type="text" class="form-control required" id="titulo" name="titulo" maxlength="75">
  55. </div>
  56. </div>
  57. <div class="form-row">
  58. <div class="form-group col-md-2">
  59. <label for="abertura">Abertura</label>
  60. <input type="date" class="form-control required" id="abertura" name="abertura" >
  61. </div>
  62. <div class="form-group col-md-2">
  63. <label for="situacao">Situação</label>
  64. <select class="form-control required" id="situacao" name="situacao" >
  65. <option value="1">Ativo</option>
  66. <option value="0">Inativo</option>
  67. </select>
  68. </div>
  69. <div class="form-group col-md-8" id="div-upload">
  70. <label for="upload">Upload Imagem</label>
  71. <div class="input-group">
  72. <div class="custom-file">
  73. <input type="file" class="custom-file-input required" id="files" name="files[]" multiple="multiple">
  74. <label class="custom-file-label" for="files" id="fileLabel">Escolha os arquivos...</label>
  75. </div>
  76. </div>
  77. </div>
  78. <div class="form-group col-md-8 hidden" id="div-files"></div>
  79. </div>
  80. </form>
  81. </div>
  82. <div class="tab-pane fade" id="lista" role="tabpanel" aria-labelledby="lista-tab">
  83. <div class="alert alert-danger hidden" role="alert" id="alerta-erro"></div>
  84. <div class="alert alert-success hidden" role="alert" id="alerta-sucesso"></div>
  85. <hr />
  86. <div class="row">
  87. <div class="col-sm">
  88. <div class="table-responsive">
  89. <table class="table table-bordered table-striped" id="listaClientes">
  90. <thead>
  91. <tr>
  92. <th>Código</th>
  93. <th>Tipo</th>
  94. <th>Título</th>
  95. <th>Situação</th>
  96. <th>Abertura</th>
  97. <th>Editar</th>
  98. <th>Remover</th>
  99. </tr>
  100. </thead>
  101. <tbody/>
  102. </table>
  103. </div>
  104. </div>
  105. </div>
  106. </div>
  107. </div>
  108. </main>
  109. <?php include_once "modal/Modal.php";?>
  110. <script defer src="https://use.fontawesome.com/releases/v5.0.9/js/all.js" integrity="sha384-8iPTk2s/jMVj81dnzb/iFR2sdA7u06vHJyyLlAd4snFpCl/SnyUjRrbdJsw1pGIl" crossorigin="anonymous"></script>
  111. <script src="js/jquery.min.js"></script>
  112. <script src="js/bootstrap.min.js"></script>
  113. <script src="js/datatables.min.js"></script>
  114. <script src="js/jquery.mask.min.js"></script>
  115. <script src="js/cgpdi.js"></script>
  116. <script src="js/modal.js"></script>
  117. <script>
  118. $('#codigo').mask('0#');
  119. $('body .data-toggle').tooltip();
  120. var div_upload= $("#div-upload").html();
  121. $("#btn-novo").click(function(){
  122. $('input[type="text"], input[type="date"], input[type="hidden"], input[type="file"]').val('');
  123. //$("#fileLabel").html('');
  124. $("#div-upload").html(div_upload).show();
  125. $("#div-files").html("").hide();
  126. });
  127. $(document).ready(function() {
  128. $('table').DataTable({
  129. order: [[ 0, "desc" ]],
  130. ajax: {
  131. url: "controller/licitacao/lista.php",
  132. dataSrc: ""
  133. },
  134. columns: [
  135. { data: "codigo" },
  136. {"render": function (data, type, full, meta)
  137. {
  138. if(full.tipo == "TP") return "Tomada de Preço";
  139. else if(full.tipo == "PE") return "Pregão Eletrônico";
  140. else if(full.tipo == "PP") return "Pregão Presencial";
  141. else if(full.tipo == "LI") return "Licitação";
  142. else return "Outros";
  143. }
  144. },
  145. { data: "titulo" },
  146. { data: "abertura" },
  147. {"render": function (data, type, full, meta)
  148. { return full.situacao == 1 ? "Ativo" : "Inativo"; }
  149. },
  150. {"render": function (data, type, full, meta)
  151. { return '<a class="btn btn-warning editar" id="' + full.id + '"><i class="far fa-edit"></i></a>'; }
  152. },
  153. {"render": function (data, type, full, meta)
  154. { return '<a class="btn btn-danger remover" id="' + full.id + '"><i class="far fa-trash-alt"></i></a>'; }
  155. }
  156. ],
  157. bAutoWidth: false,
  158. info: false,
  159. lengthChange: false,
  160. language: {
  161. search: 'Busca:',
  162. searchPlaceholder: "",
  163. emptyTable: "Nenhum registro encontrado.",
  164. paginate: {
  165. "next": "Próxima",
  166. "previous": "Anterior"
  167. }
  168. }
  169. });
  170. $('body [data-toggle="tooltip"]').tooltip();
  171. });
  172. $('body').on('change', '#codigo', function(){
  173. codigo = $("#codigo").val();
  174. tipo = $("#tipo").val();
  175. $.get('controller/licitacao/checkCodigoTipo.php',{codigo: codigo,tipo: tipo},function(data){
  176. if(JSON.parse(data).length > 0){
  177. $("#alerta-erro").html("Código "+codigo+" já utilizado para esse tipo de processo.").show();
  178. $("#codigo").addClass("border-danger");
  179. setTimeout(function(){ $("#alerta-erro").fadeOut()}, 5000);
  180. }
  181. else{
  182. $("#codigo").removeClass("border-danger");
  183. }
  184. });
  185. });
  186. $('body').on('click', '.editar', function(){
  187. id = $(this).attr("id");
  188. $.get('controller/licitacao/formulario.php',{id: id},function(data){
  189. licitacao = JSON.parse(data)[0];
  190. $("#id").val(licitacao.id);
  191. $("#codigo").val(licitacao.codigo);
  192. $("#tipo").val(licitacao.tipo);
  193. $("#titulo").val(licitacao.titulo);
  194. $("#situacao").val(licitacao.situacao);
  195. $("#abertura").val(licitacao.abertura);
  196. listaArquivos(licitacao.arquivos);
  197. $("#cadastro-tab").click();
  198. $("#div-upload").html("").hide();
  199. });
  200. });
  201. $('body').on('click', '.remover', function(){
  202. id = $(this).attr("id");
  203. modal({title: "Deseja realmente excluir essa Licitação?", confirmTitle: "Sim", cancelTitle: "Não"}, function(){
  204. $.ajax({url: "controller/licitacao/remover.php?id="+id, type: "post", dataType: "html", contentType: false, cache: false, processData: false, success: function (result) {
  205. $("#alerta-sucesso").html(result).show();
  206. $("#btn-novo").click();
  207. $('table').DataTable().ajax.reload();
  208. $('.border-danger').removeClass("border-danger");
  209. },
  210. error: function (result) {
  211. console.log(result);
  212. }});
  213. });
  214. });
  215. $('form').submit(function (evt) {
  216. evt.preventDefault();
  217. if(tools.validaCampos()){
  218. $.ajax({
  219. url: "controller/licitacao/salvar.php",
  220. type: "post",
  221. dataType: "html",
  222. data: new FormData(this),
  223. contentType: false,
  224. cache: false,
  225. processData: false,
  226. success: function (result) {
  227. $("#alerta-sucesso").html(result).show();
  228. $("#btn-novo").click();
  229. $('.border-danger').removeClass("border-danger");
  230. },
  231. error: function (result) {
  232. console.log(result);
  233. }
  234. }).done(function(){
  235. $('table').DataTable().ajax.reload();
  236. $("#lista-tab").click();
  237. });
  238. }
  239. });
  240. listaArquivos = function(arquivos){
  241. paths = arquivos.split(";");
  242. $("#div-upload").hide();
  243. $("#div-files").html("<label>Arquivo</label><br />");
  244. for(i in paths){
  245. niveis = paths[i].split("/");
  246. url = "upload/"+niveis[niveis.length-3]+"/"+niveis[niveis.length-2]+"/"+niveis[niveis.length-1];
  247. nome = niveis[niveis.length-1];
  248. $("#div-files").append("<a class='btn btn-warning data-toggle d-inline-block' target='_blank' href='"+url+"' title='"+nome+"'><i class='far fa-file-pdf'></i></button>");
  249. }
  250. $("#div-files").show();
  251. }
  252. $("#files").change(function() {
  253. $("#fileLabel").html("");
  254. valido = true;
  255. for (i = 0; i < this.files.length; i++){
  256. fileType = this.files[i].type;
  257. if(fileType != "application/pdf"){
  258. valido = false;
  259. break;
  260. }else{
  261. $("#fileLabel").append(this.files[i].name+";");
  262. }
  263. }
  264. if(!valido){
  265. modal({title: "Escolha um arquivo valido (.pdf)", cancel: false}, function(){
  266. $("#fileLabel").html('Selecione os arquivos PDF...');
  267. });
  268. }
  269. return valido;
  270. });
  271. </script>
  272. </body>
  273. </html>