docElectronicos.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. <?php
  2. $strModulo = 'docElectronicos';
  3. $arrCT = array();
  4. //$url = 'https://www.solerpalau.mx/plantasyp/datosPlanta.php';
  5. $url = 'https://www.solerpalau.mx/plantasyp/datosPlanta.php';
  6. $opciones = array('http' =>
  7. array(
  8. 'method' => 'GET',
  9. 'max_redirects' => '0',
  10. 'ignore_errors' => '1'
  11. )
  12. );
  13. $contexto = stream_context_create($opciones);
  14. $flujo = fopen($url, 'r', false, $contexto);
  15. $arrResultadoPeticion = json_decode(stream_get_contents($flujo), true);
  16. $arrCT[0]['idCT'] = 'todos';
  17. $arrCT[0]['name'] = 'Todos';
  18. $contadorCT = 1;
  19. foreach ($arrResultadoPeticion['datosRespuesta'] as $clave => $valor){
  20. $arrCT[$contadorCT]['idCT'] = $clave;
  21. $arrCT[$contadorCT]['name'] = $clave;
  22. $contadorCT++;
  23. }
  24. $jsonCentrosT = json_encode($arrCT);
  25. $arrCentrosTrabajo = array();
  26. $arrCentrosTrabajo['315'] = 'docs/315/Rechazadora ZENN-200/';
  27. $arrCentrosTrabajo['316'] = '';
  28. $arrCentrosTrabajo['559'] = '';
  29. $arrCentrosTrabajo['606'] = '';
  30. $arrCentrosTrabajo['613'] = 'docs/613/Salvagnini/';
  31. $arrCentrosTrabajo['023'] = 'docs/023/Punzonadora CUPRA/';
  32. $CT_recibido = '';
  33. if($_SERVER['REQUEST_METHOD'] == "POST"){
  34. $CT_recibido = $_POST['select_CentroTrabajo'];
  35. if($CT_recibido != 'todos'){
  36. foreach ($arrCentrosTrabajo as $claveCT => $carpetaPdfs){
  37. if($claveCT != $CT_recibido){
  38. unset($arrCentrosTrabajo[$claveCT]);
  39. }
  40. }
  41. }
  42. }
  43. // Creamos los elementos para Documentos Electrónicos
  44. $tbodyPdfs = '';
  45. $contadorArchivos = 1;
  46. foreach ($arrCentrosTrabajo as $claveCT => $carpetaPdfs){
  47. if(!empty($carpetaPdfs)){
  48. if(file_exists($carpetaPdfs)){
  49. if($directorio = opendir($carpetaPdfs)){
  50. while ($archivo = readdir($directorio)){
  51. if (!is_dir($archivo)){
  52. if (($archivo != ".") && ($archivo != "..")) {
  53. //echo $archivo.'<br>';
  54. $tbodyPdfs .= '<tr>';
  55. $tbodyPdfs .= '<td class="celdaTabla">&nbsp;</td>';
  56. $tbodyPdfs .= '<td class="celdaTabla">'.$contadorArchivos.'</td>';
  57. $tbodyPdfs .= '<td class="celdaTabla">'.$claveCT.'</td>';
  58. $tbodyPdfs .= '<td class="celdaTabla">'.$archivo.'</td>';
  59. $tbodyPdfs .= '<td class="celdaTabla">';
  60. $rutaPDF = $carpetaPdfs.$archivo;
  61. $tbodyPdfs .= '<button id="btnP' . $contadorArchivos . '" data-dojo-type="dijit/form/Button" type="button" ';
  62. $tbodyPdfs .= 'data-dojo-props="showLabel:true,iconClass:\'dijitIttecPdf\'" ';
  63. $tbodyPdfs .= 'onclick="descargar(\'' . base64_encode($rutaPDF) . '\', \'PDF\')">Descargar PDF</button>';
  64. $tbodyPdfs .= '</td>';
  65. $tbodyPdfs .= '<td class="celdaTabla">&nbsp;</td>';
  66. $tbodyPdfs .= '</tr>';
  67. $contadorArchivos++;
  68. }
  69. }
  70. }
  71. }
  72. }
  73. }
  74. }
  75. if(empty($tbodyPdfs)){
  76. $tbodyPdfs = '<td width="100%" colspan="20" class="celdaTabla" style="text-align:center;font-weight:bold;padding:8px;">Usted no cuenta con los permisos necesarios.</td>';
  77. }
  78. ?>
  79. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  80. <html xmlns="http://www.w3.org/1999/xhtml">
  81. <head>
  82. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  83. <meta http-equiv="imagetoolbar" content="no" />
  84. <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Poppins:400,500,700,300,600">
  85. <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans">
  86. <link media="screen" rel="stylesheet" type="text/css" href="css/principal.css" />
  87. <link media="screen" rel="stylesheet" type="text/css" href="css/pagination.css" /> <!--Paginador-->
  88. <link rel="shortcut icon" type="image/x-icon" href="css/layout/global/sp.ico" />
  89. <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dijit/themes/claro/claro.css">
  90. <script src="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dojo/dojo.js" data-dojo-config="async: true, parseOnLoad:true"></script>
  91. <script type="application/javascript">
  92. // Cargamos los complementos de dojo
  93. require(["dojo/dom", "dojo/_base/fx", "dojo/_base/array", "dojo/query", "dojo/dom-construct", "dijit/registry", "dojo/dom-style", "dojo/ready", "dojo/on", "dojo/window",
  94. "dojo/store/Memory", "dijit/form/FilteringSelect", "dijit/form/Button", "dojo/dom-class", "dijit/Dialog",
  95. "dojo/_base/lang", "dojox/grid/DataGrid", "dojo/data/ItemFileWriteStore", "dojox/grid/enhanced/plugins/DnD", "dojox/grid/EnhancedGrid", "dojox/grid/enhanced/plugins/Selector", "dojox/grid/enhanced/plugins/IndirectSelection", "dojox/grid/enhanced/plugins/NestedSorting",
  96. "dijit/ProgressBar", "dijit/ConfirmDialog", "dojo/dom-style", "dijit/form/ComboButton", "dijit/Menu", "dijit/MenuItem", "dijit/MenuSeparator", "dijit/Tooltip", "dijit/form/Form", "dijit/form/TextBox",
  97. "dojox/grid/enhanced/plugins/Filter", "dijit/form/ValidationTextBox", "dijit/form/NumberSpinner", "dojo/request", "dojo/parser"],
  98. function(dom, fx, array, query, domConstruct, dijit, style, ready, on, win,
  99. Memory, FilteringSelect, Button, domClass, Dialog,
  100. lang, DataGrid, ItemFileWriteStore, DnDConfig, EnhancedGrid, Selector, indirectSelection, nestedSorting,
  101. ProgressBar, ConfirmDialog, style, ComboButton, Menu, MenuItem, MenuSeparator, Tooltip, Form, TextBox, filter, ValidationTextBox, NumberSpinner, request) {
  102. const idModulo = "<?php echo($strModulo);?>";
  103. const arrCentrosT = <?php echo($jsonCentrosT); ?>;
  104. const CT_recibido = "<?php echo($CT_recibido); ?>";
  105. // Para Mostrar de Mensajes de "error o éxito"
  106. var dgEjecuta = new Dialog({title: 'Procesando...', style: 'width:300px'});
  107. var pbMarcar = new ProgressBar({value: Number.POSITIVE_INFINITY, layoutAlign: 'left'});
  108. dgEjecuta.setContent(pbMarcar);
  109. dgResultadoError = new ConfirmDialog({ title:"<b>Error</b>", style: "min-width:300px; heigth; auto" });
  110. style.set(dgResultadoError.cancelButton.domNode, 'display', 'none');
  111. dgResultadoExito = new ConfirmDialog({ title:"<b>Éxito</b>", style: "min-width:300px; heigth; auto" });
  112. style.set(dgResultadoExito.cancelButton.domNode, 'display', 'none');
  113. /****************************************************************** Inputs ******************************************************************/
  114. new FilteringSelect({
  115. id: "select_CentroTrabajo",
  116. name: "select_CentroTrabajo",
  117. store: new Memory({ idProperty: "idCT", data: arrCentrosT }),
  118. autoComplete: true,
  119. maxHeight: 300,
  120. style: "width: 100%;",
  121. placeHolder: "Seleccione una opción",
  122. onChange: function(idCt){
  123. }
  124. }, "select_CentroTrabajo");
  125. /****************************************************************** Botones ******************************************************************/
  126. new Button({
  127. id: "btn_Buscar",
  128. label: "Buscar",
  129. iconClass: "dijitIconSearch",
  130. showLabel: false,
  131. onClick: function(){
  132. let centroT = dijit.byId('select_CentroTrabajo').value;
  133. if(centroT != ""){
  134. dijit.byId("frm").submit();
  135. }
  136. }
  137. }, "btn_Buscar").startup();
  138. descargar = function (ruta, opcion) {
  139. dgEjecuta.set("title", "Descargando...");
  140. dgEjecuta.show();
  141. accion = "descargarArchivo";
  142. request.post('descargarArchivos.php', {
  143. data: {
  144. accion: accion,
  145. idModulo: idModulo,
  146. ruta: ruta
  147. }
  148. }).then(
  149. function(response) {
  150. var objResponse = JSON.parse(response);
  151. if(objResponse['estatus'] == "ERROR"){
  152. dgEjecuta.hide();
  153. dgResultadoError.setContent(objResponse['errorDescripcion']);
  154. dgResultadoError.show();
  155. }else{
  156. var data = objResponse['data'];
  157. var type = objResponse['type'];
  158. var datosArchivoSalida = objResponse['type'] + objResponse['data'];
  159. var nombreArchivoSalida = objResponse['fileName'];
  160. if(navigator.msSaveBlob){ // Adaptación para IE
  161. var blob = new Blob([s2ab(atob(data))],{
  162. type: type
  163. });
  164. navigator.msSaveBlob(blob, nombreArchivoSalida);
  165. dgEjecuta.hide();
  166. }else{
  167. // Creamos los elementos para descargar
  168. var spanDescarga = domConstruct.toDom('<span>Para recuperar el archivo, haz click en el siguiente enlace: </span>');
  169. domConstruct.place(spanDescarga, 'contenidoDescarga');
  170. var tipo = accion;
  171. var idElemento = "elementoA_"+tipo;
  172. var linkDescarga = domConstruct.toDom('<a href="' + datosArchivoSalida + '" id="'+idElemento+'" download="' + nombreArchivoSalida + '">'+nombreArchivoSalida+'</a>');
  173. domConstruct.place(linkDescarga, 'contenidoDescarga');
  174. // Evento requerido para cuando no se ejecuta el evento click automáticamente (especialmente en dispositivos móviles)
  175. var clickEjecutado = false;
  176. on(linkDescarga, "click", function (evt) {
  177. clickEjecutado = true;
  178. spanDescarga.remove();
  179. linkDescarga.remove();
  180. divDescargas.hide();
  181. });
  182. linkDescarga.click();
  183. dgEjecuta.hide();
  184. if(clickEjecutado == false){
  185. var tituloDescarga = "<b>Descarga</b>";
  186. divDescargas.set("title", tituloDescarga);
  187. divDescargas.show();
  188. }
  189. }
  190. }
  191. }
  192. );
  193. };
  194. ready(function() {
  195. // Actualizar el tamaño del TabContainer en función del tamaño de página
  196. var ventana = win.getBox();
  197. var strVentana = (ventana.h-75-50)+"px";
  198. style.set(dijit.byId("djTab").id, { height:strVentana });
  199. dijit.byId("djTab").resize();
  200. // Actualizar el tamaño del TabContainer en función del tamaño de página
  201. on(window, "resize", function() {
  202. var ventana = win.getBox();
  203. var strVentana = (ventana.h-75-50)+"px";
  204. style.set(dijit.byId("djTab").id, { height:strVentana });
  205. dijit.byId("djTab").resize();
  206. });
  207. // Eliminar la cortina de entrada
  208. fx.fadeOut({node: dom.byId("loadingOverlay"), duration: 1}).play();
  209. setTimeout(function () {
  210. domConstruct.destroy("loadingOverlay");
  211. }, 1);
  212. // Para cuando cierran el divisor que contiene las descargas
  213. divDescargas.on("Cancel", function (evt) {
  214. var contenido = document.getElementById("contenidoDescarga");
  215. while (contenido.firstChild) {
  216. contenido.removeChild(contenido.firstChild);
  217. }
  218. });
  219. if(CT_recibido != ""){
  220. dijit.byId('select_CentroTrabajo').set("value", CT_recibido);
  221. }
  222. });
  223. });
  224. // Función para convertir string a un array buffer (Necesario para descargar en IE)
  225. function s2ab(s) {
  226. var buf = new ArrayBuffer(s.length);
  227. var view = new Uint8Array(buf);
  228. for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
  229. return buf;
  230. }
  231. </script>
  232. <style type="text/css">
  233. .dijitIttecPdf {
  234. background-image: url("css/layout/site/lsPDF.gif");
  235. background-position: 1px;
  236. background-repeat: no-repeat;
  237. width: 14px;
  238. height: 14px;
  239. }
  240. </style>
  241. </head>
  242. <body class="claro">
  243. <div id="loadingOverlay" class="loadingOverlay pageOverlay">
  244. <div class="loadingMessage">Espere...</div>
  245. </div>
  246. <!-- Divisor para guardar las descargas -->
  247. <div data-dojo-type="dijit/Dialog" data-dojo-id="divDescargas" title="Descarga" style="top:0; position: absolute">
  248. <div id="contenidoDescarga" style="min-width:200px; min-height: 100px"></div>
  249. </div>
  250. <div id="wrapper_container_module">
  251. <div id="wrapper_table" style="position:relative;">
  252. <div data-dojo-type="dijit/form/Form" id="frm" data-dojo-id="frm" encType="multipart/form-data"
  253. action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" style="position:relative;">
  254. <script type="dojo/on" data-dojo-event="submit">return true;</script>
  255. <div id="wrapper_table_head">Documentos Electrónicos</div>
  256. <div id="wrapper_table_body_mod_app">
  257. <table width="100%" height="auto" border="0" style="border-spacing: 5px;">
  258. <tr>
  259. <td width="10%" colspan="2" class="etiquetaFormulario">
  260. <label class="noTopPadding">Centro de Trabajo:</label>
  261. </td>
  262. <td width="20%" colspan="4">
  263. <input id="select_CentroTrabajo" name="select_CentroTrabajo"/>
  264. </td>
  265. <td width="70%" colspan="14">
  266. <button id="btn_Buscar" type="button"></button>
  267. </td>
  268. </tr>
  269. </table>
  270. <div id="djTab" data-dojo-type="dijit/layout/TabContainer" data-dojo-props="tabPosition:'top'" style="width:100%;">
  271. <div data-dojo-type="dijit/layout/ContentPane" title="Lista de Documentos" data-dojo-props="selected:true">
  272. <table width="100%" height="auto" cellpadding="0" cellspacing="0">
  273. <thead>
  274. <tr>
  275. <td width="3%" class="encabezadoTabla"> &nbsp; </td>
  276. <td width="10%" class="encabezadoTabla"> # </td>
  277. <td width="20%" class="encabezadoTabla">Centro de Trabajo</td>
  278. <td width="39%" class="encabezadoTabla"> Nombre Archivo </td>
  279. <td width="25%" class="encabezadoTabla"> Acciones </td>
  280. <td width="3%" class="encabezadoTabla"> &nbsp; </td>
  281. </tr>
  282. </thead>
  283. <tbody id="TBPDFS">
  284. <?php echo($tbodyPdfs); ?>
  285. </tbody>
  286. </table>
  287. </div>
  288. </div>
  289. </div>
  290. </div>
  291. </div>
  292. </div>
  293. </body>