Browse Source

first commit

JeanBenitez 1 năm trước cách đây
mục cha
commit
4b325003a2

+ 25 - 0
plantasyp/acceso.php

@@ -0,0 +1,25 @@
+<?php
+
+$q = 'acceso_principal.php';
+
+?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="imagetoolbar" content="no" />
+    <title>Smart Portal de S&amp;P</title>
+    <link rel="shortcut icon" type="image/x-icon" href="css/layout/global/sp.ico" />
+    <script type="text/JavaScript">
+        if(top.location != self.location)top.location = self.location;
+    </script>
+</head>
+<frameset rows="135,*,52" frameborder="0" framespacing="0" border="0">
+    <frame name="menu" src="acceso_encabezado.php" marginwidth="0" marginheight="0" scrolling="no" >
+    <frame name="aplicacion" src="<?php echo($q); ?>" marginwidth="0" marginheight="0" scrolling="auto" >
+    <frame name="pie" src="acceso_footer.php" marginwidth="0" marginheight="0" scrolling="auto" >
+</frameset>
+<noframes>
+</noframes>
+</html>

+ 54 - 0
plantasyp/acceso_encabezado.php

@@ -0,0 +1,54 @@
+<?php
+require_once('shared/iniciaSesion.php');
+
+?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="imagetoolbar" content="no" />
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Poppins:400,500,700,300,600">
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans">
+    <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dijit/themes/claro/claro.css">
+    <link media="screen" rel="stylesheet" type="text/css" href="css/menu.css" />
+    <link rel="shortcut icon" type="image/x-icon" href="css/layout/global/sp.ico" />
+    <script type="text/JavaScript" src="js/menu.js"></script>
+    <script src="//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js" data-dojo-config="async: true, parseOnLoad:true"></script>
+    <script>
+        require(["dijit/Tooltip",  "dojo/parser", "dojo/domReady!"],
+            function(Tooltip, parser){ parser.parse(); new Tooltip({ connectId: ["salirDelSistema"], label: "Cerrar Sesión", showDelay: 500, defaultPosition: "before-centered" });	});
+
+        function salir() {
+            location.href = "acceso_logout.php";
+        }
+    </script>
+</head>
+<body class="claro">
+<div id="header">
+    <div id="header_container">
+        <div id="header_inner">
+            <div id="header_inner_l1"></div>
+            <div id="header_inner_l2"></div>
+        </div>
+        <div id="header_user_container">
+            <div id="header_inner_user_container_table">
+                <strong>Bienvenido a Planta S&P:</strong><?php echo($_SESSION['GBL_NOMBRE']); ?><span class="division">|</span>
+                <span id="salirDelSistema" class="salir" onclick="salir();"></span><br/>
+                <span class="l2">
+                    	<a href="#" onclick="actMenu(1);">Cambiar contraseña</a><span class="division">|</span>
+                        <a href="#" onclick="actMenu(2);">Preguntas frecuentes</a><span class="division">|</span>
+                        <a href="#" onclick="actMenu(3);">Tutoriales</a><span class="division">|</span>
+                        <a href="#" onclick="actMenu(4);">Reportar una falla</a>
+                    </span>
+            </div>
+        </div>
+    </div>
+</div>
+<div id="wrapper_bg">
+    <div id="wrapper_bg_container">
+        <div id="wrapper_bg_container_title"> Planta S&P </div>
+    </div>
+</div>
+</body>
+</html>

+ 15 - 0
plantasyp/acceso_footer.php

@@ -0,0 +1,15 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="imagetoolbar" content="no" />
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Poppins:400,500,700,300,600">
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans">
+    <link media="screen" rel="stylesheet" type="text/css" href="css/footer.css" />
+    <link rel="shortcut icon" type="image/x-icon" href="css/layout/global/sp.ico" />
+</head>
+<body>
+<?php require('shared/footer.php'); ?>
+</body>
+</html>

+ 12 - 0
plantasyp/acceso_logout.php

@@ -0,0 +1,12 @@
+<?php 
+/*  
+	Sistema de Portales de Soler y Palau SA de CV
+	(2015) Desarrollos y Servicios en Tecnología Inteligente S de RL de CV
+	Versión 1.0
+	Última Actualización: 17/07/2015
+	Código del Módulo: GBL008
+*/
+	session_start();	
+	session_destroy();
+	header('Location: index.php'); 	
+?>

+ 37 - 0
plantasyp/acceso_principal.php

@@ -0,0 +1,37 @@
+<?php
+/*
+	Sistema de Portales de Soler y Palau SA de CV
+	(2017) Desarrollos y Servicios en Tecnología Inteligente S de RL de CV
+	Versión 1.0
+	Última Actualización: 27/12/2020
+	Código del Módulo: GAS000
+*/
+$strModulo = 'Planta_Mantenimiento';
+require_once('shared/iniciaSesion.php');
+// Para acceder a esta página el usuario debe tener un login válido
+require_once('shared/sesionIniciada.php');
+
+$strAppModulo = '';
+
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="imagetoolbar" content="no" />
+    <link media="screen" rel="stylesheet" type="text/css" href="css/principal.css" />
+    <link rel="shortcut icon" type="image/x-icon" href="css/layout/global/sp.ico" />
+</head>
+<body class="claro">
+<div id="wrapper">
+    <div id="wrapper_container">
+        <table width="100%" height="100%">
+            <tr height="100%">
+                <td width="180px" height="100%"><iframe name="app_menu" src="menuIzquierdo.php" width="100%" height="100%" frameborder="0" scrolling="no"></iframe></td>
+                <td height="100%"><iframe name="app_modulo" src="<?php echo($strAppModulo); ?>" width="100%" height="100%" frameborder="0" scrolling="auto"></iframe></td>
+            </tr>
+        </table>
+    </div>
+</div>
+</body>
+</html>

+ 427 - 0
plantasyp/bitacorasDeMantenimiento.php

@@ -0,0 +1,427 @@
+<?php
+$strModulo = 'PRUEBA';
+
+$strDatos = "";
+
+$linkStr = __FILE__;
+$linkArr = explode("/", $linkStr);
+$link = end($linkArr);
+
+if($_SERVER['REQUEST_METHOD'] == "POST"){
+    $ctrab = $_POST["CTRAB"];
+    $maq = $_POST["MAQ"];
+    $norden = $_POST["NORDEN"];
+    $fini = $_POST["FINI"];
+    $ffin = $_POST["FFIN"];
+
+    if(!(empty($ctrab) && empty($maq) && empty($norden) && empty($fini) && empty($ffin))){
+        if($ctrab == "#315"){
+            $strDatos .= "[ \n";
+            $strDatos .= "{ id: 'BI001', CentroDeTrabajo: 'Centro de Trabajo #315', Maquina: 'Rechazadora', NumOrden: '0100', FechaOrden: '22/10/2021' }, \n";
+            $strDatos .= "{ id: 'BI004', CentroDeTrabajo: 'Centro de Trabajo #315', Maquina: 'Rechazadora', NumOrden: '0080', FechaOrden: '01/09/2021' }, \n";
+            $strDatos .= "]; \n";
+        }else if($ctrab == "#613"){
+            $strDatos .= "[ \n";
+            $strDatos .= "{ id: 'BI002', CentroDeTrabajo: 'Centro de Trabajo #613', Maquina: 'Paneladora', NumOrden: '0098', FechaOrden: '18/10/2021' }, \n";
+            $strDatos .= "{ id: 'BI003', CentroDeTrabajo: 'Centro de Trabajo #613', Maquina: 'Paneladora', NumOrden: '0095', FechaOrden: '05/09/2021' }, \n";
+            $strDatos .= "{ id: 'BI005', CentroDeTrabajo: 'Centro de Trabajo #613', Maquina: 'Paneladora', NumOrden: '0075', FechaOrden: '29/08/2021' }, \n";
+            $strDatos .= "]; \n";
+        }else if($ctrab == "#023"){
+            $strDatos .= "[ \n";
+            $strDatos .= "{ id: 'BI006', CentroDeTrabajo: 'Centro de Trabajo #023', Maquina: 'Punzonadora', NumOrden: '0065', FechaOrden: '17/08/2021' }, \n";
+            $strDatos .= "]; \n";
+        }else if($maq == "rec"){
+            $strDatos .= "[ \n";
+            $strDatos .= "{ id: 'BI001', CentroDeTrabajo: 'Centro de Trabajo #315', Maquina: 'Rechazadora', NumOrden: '0100', FechaOrden: '22/10/2021' }, \n";
+            $strDatos .= "{ id: 'BI004', CentroDeTrabajo: 'Centro de Trabajo #315', Maquina: 'Rechazadora', NumOrden: '0080', FechaOrden: '01/09/2021' }, \n";
+            $strDatos .= "]; \n";
+        }else if($maq == "pan"){
+            $strDatos .= "[ \n";
+            $strDatos .= "{ id: 'BI002', CentroDeTrabajo: 'Centro de Trabajo #613', Maquina: 'Paneladora', NumOrden: '0098', FechaOrden: '18/10/2021' }, \n";
+            $strDatos .= "{ id: 'BI003', CentroDeTrabajo: 'Centro de Trabajo #613', Maquina: 'Paneladora', NumOrden: '0095', FechaOrden: '05/09/2021' }, \n";
+            $strDatos .= "{ id: 'BI005', CentroDeTrabajo: 'Centro de Trabajo #613', Maquina: 'Paneladora', NumOrden: '0075', FechaOrden: '29/08/2021' }, \n";
+            $strDatos .= "]; \n";
+        }else if($maq == "pun"){
+            $strDatos .= "[ \n";
+            $strDatos .= "{ id: 'BI006', CentroDeTrabajo: 'Centro de Trabajo #023', Maquina: 'Punzonadora', NumOrden: '0065', FechaOrden: '17/08/2021' }, \n";
+            $strDatos .= "]; \n";
+        }else if($norden == "0100"){
+            $strDatos .= "[ \n";
+            $strDatos .= "{ id: 'BI001', CentroDeTrabajo: 'Centro de Trabajo #315', Maquina: 'Rechazadora', NumOrden: '0100', FechaOrden: '22/10/2021' }, \n";
+            $strDatos .= "]; \n";
+        }else if($norden == "0098"){
+            $strDatos .= "[ \n";
+            $strDatos .= "{ id: 'BI002', CentroDeTrabajo: 'Centro de Trabajo #613', Maquina: 'Paneladora', NumOrden: '0098', FechaOrden: '18/10/2021' }, \n";
+            $strDatos .= "]; \n";
+        }else if($norden == "0095"){
+            $strDatos .= "[ \n";
+            $strDatos .= "{ id: 'BI003', CentroDeTrabajo: 'Centro de Trabajo #613', Maquina: 'Paneladora', NumOrden: '0095', FechaOrden: '05/09/2021' }, \n";
+            $strDatos .= "]; \n";
+        }else if($norden == "0080"){
+            $strDatos .= "[ \n";
+            $strDatos .= "{ id: 'BI004', CentroDeTrabajo: 'Centro de Trabajo #315', Maquina: 'Rechazadora', NumOrden: '0080', FechaOrden: '01/09/2021' }, \n";
+            $strDatos .= "]; \n";
+        }else if($norden == "0075"){
+            $strDatos .= "[ \n";
+            $strDatos .= "{ id: 'BI005', CentroDeTrabajo: 'Centro de Trabajo #613', Maquina: 'Paneladora', NumOrden: '0075', FechaOrden: '29/08/2021' }, \n";
+            $strDatos .= "]; \n";
+        }else if($norden == "0065"){
+            $strDatos .= "[ \n";
+            $strDatos .= "{ id: 'BI006', CentroDeTrabajo: 'Centro de Trabajo #023', Maquina: 'Punzonadora', NumOrden: '0065', FechaOrden: '17/08/2021' }, \n";
+            $strDatos .= "]; \n";
+        }else{
+            $strDatos .= "[] \n";
+        }
+    }else{
+        $strDatos .= "[ \n";
+        $strDatos .= "{ id: 'BI001', CentroDeTrabajo: 'Centro de Trabajo #315', Maquina: 'Rechazadora', NumOrden: '0100', FechaOrden: '22/10/2021' }, \n";
+        $strDatos .= "{ id: 'BI002', CentroDeTrabajo: 'Centro de Trabajo #613', Maquina: 'Paneladora', NumOrden: '0098', FechaOrden: '18/10/2021' }, \n";
+        $strDatos .= "{ id: 'BI003', CentroDeTrabajo: 'Centro de Trabajo #613', Maquina: 'Paneladora', NumOrden: '0095', FechaOrden: '05/09/2021' }, \n";
+        $strDatos .= "{ id: 'BI004', CentroDeTrabajo: 'Centro de Trabajo #315', Maquina: 'Rechazadora', NumOrden: '0080', FechaOrden: '01/09/2021' }, \n";
+        $strDatos .= "{ id: 'BI005', CentroDeTrabajo: 'Centro de Trabajo #613', Maquina: 'Paneladora', NumOrden: '0075', FechaOrden: '29/08/2021' }, \n";
+        $strDatos .= "{ id: 'BI006', CentroDeTrabajo: 'Centro de Trabajo #023', Maquina: 'Punzonadora', NumOrden: '0065', FechaOrden: '17/08/2021' }, \n";
+        $strDatos .= "]; \n";
+    }
+}else{
+    $strDatos .= "[ \n";
+    $strDatos .= "{ id: 'BI001', CentroDeTrabajo: 'Centro de Trabajo #315', Maquina: 'Rechazadora', NumOrden: '0100', FechaOrden: '22/10/2021' }, \n";
+    $strDatos .= "{ id: 'BI002', CentroDeTrabajo: 'Centro de Trabajo #613', Maquina: 'Paneladora', NumOrden: '0098', FechaOrden: '18/10/2021' }, \n";
+    $strDatos .= "{ id: 'BI003', CentroDeTrabajo: 'Centro de Trabajo #613', Maquina: 'Paneladora', NumOrden: '0095', FechaOrden: '05/09/2021' }, \n";
+    $strDatos .= "{ id: 'BI004', CentroDeTrabajo: 'Centro de Trabajo #315', Maquina: 'Rechazadora', NumOrden: '0080', FechaOrden: '01/09/2021' }, \n";
+    $strDatos .= "{ id: 'BI005', CentroDeTrabajo: 'Centro de Trabajo #613', Maquina: 'Paneladora', NumOrden: '0075', FechaOrden: '29/08/2021' }, \n";
+    $strDatos .= "{ id: 'BI006', CentroDeTrabajo: 'Centro de Trabajo #023', Maquina: 'Punzonadora', NumOrden: '0065', FechaOrden: '17/08/2021' }, \n";
+    $strDatos .= "]; \n";
+}
+?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="imagetoolbar" content="no" />
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Poppins:400,500,700,300,600">
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans">
+    <link media="screen" rel="stylesheet" type="text/css" href="css/principal.css" />
+    <!--<link media="screen" rel="stylesheet" type="text/css" href="css/pagination.css"  />--> <!--Paginador-->
+    <link rel="shortcut icon" type="image/x-icon" href="css/layout/global/sp.ico" />
+
+    <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dijit/themes/claro/claro.css">
+    <script src="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dojo/dojo.js" data-dojo-config="async: true, parseOnLoad:true"></script>
+
+    <script type="application/javascript">
+        // Cargamos los complementos de dojo
+        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",
+                "dojo/store/Memory", "dijit/form/FilteringSelect", "dijit/form/Button", "dojo/dom-class", "dijit/Dialog",
+                "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",
+                "dijit/ProgressBar", "dijit/ConfirmDialog", "dojo/dom-style", "dijit/form/ComboButton", "dijit/Menu", "dijit/MenuItem", "dijit/MenuSeparator", "dijit/Tooltip", "dijit/form/Form", "dijit/form/TextBox",
+                "dojox/grid/enhanced/plugins/Filter", "dijit/form/ValidationTextBox", "dijit/form/NumberSpinner", "dojo/request", "dojo/parser"],
+            function(dom, fx, array, query, domConstruct, dijit, style, ready, on, win,
+                     Memory, FilteringSelect, Button, domClass, Dialog,
+                     lang, DataGrid, ItemFileWriteStore, DnDConfig, EnhancedGrid, Selector, indirectSelection, nestedSorting,
+                     ProgressBar, ConfirmDialog, style, ComboButton, Menu, MenuItem, MenuSeparator, Tooltip, Form, TextBox, filter, ValidationTextBox, NumberSpinner, request) {
+
+                const urlPeticiones = "plantillaEjemplo_DO.php";
+                const idModulo = "<?php echo($strModulo);?>";
+
+                // Para Mostrar de Mensajes de "error o éxito"
+                var dgEjecuta = new Dialog({title: 'Procesando...', style: 'width:300px'});
+                var pbMarcar = new ProgressBar({value: Number.POSITIVE_INFINITY, layoutAlign: 'left'});
+                dgEjecuta.setContent(pbMarcar);
+                dgResultadoError = new ConfirmDialog({ title:"<b>Error</b>", style: "min-width:300px; heigth; auto" });
+                style.set(dgResultadoError.cancelButton.domNode, 'display', 'none');
+                dgResultadoExito = new ConfirmDialog({ title:"<b>Éxito</b>", style: "min-width:300px; heigth; auto" });
+                style.set(dgResultadoExito.cancelButton.domNode, 'display', 'none');
+
+                /*const datos = [
+                    { id: 'BI001', CentroDeTrabajo: 'Centro de Trabajo #315', Maquina: 'Rechazadora', NumOrden: '0100', FechaOrden: '22/10/2021' },
+                    { id: 'BI002', CentroDeTrabajo: 'Centro de Trabajo #613', Maquina: 'Paneladora', NumOrden: '0098', FechaOrden: '18/10/2021' },
+                    { id: 'BI003', CentroDeTrabajo: 'Centro de Trabajo #613', Maquina: 'Paneladora', NumOrden: '0095', FechaOrden: '05/09/2021' },
+                    { id: 'BI004', CentroDeTrabajo: 'Centro de Trabajo #315', Maquina: 'Rechazadora', NumOrden: '0080', FechaOrden: '01/09/2021' },
+                    { id: 'BI005', CentroDeTrabajo: 'Centro de Trabajo #613', Maquina: 'Paneladora', NumOrden: '0075', FechaOrden: '29/08/2021' },
+                    { id: 'BI006', CentroDeTrabajo: 'Centro de Trabajo #612', Maquina: 'Punzonadora', NumOrden: '0065', FechaOrden: '17/08/2021' },
+                ];*/
+
+                const datos = <?php echo $strDatos; ?>
+
+                /****************************************************************** Botones ******************************************************************/
+                // Limpiar
+                new Button({
+                    label: "Limpiar",
+                    iconClass: "dijitEditorIcon dijitEditorIconRemoveFormat",
+                    showLabel: true,
+                    onClick: function() {
+                        dijit.byId("frm").submit();
+                    }
+                }, "BTNLIMPIAR").startup();
+
+                // Buscar
+                new Button({
+                    id: "BTNBUSCAR",
+                    label: "Buscar",
+                    iconClass: "dijitIcon dijitIconDatabase",
+                    showLabel: true,
+                    onClick: function(){
+                        dijit.byId("frm").submit();
+                    }
+                }, "BTNBUSCAR").startup();
+
+                // Buscar
+                new Button({
+                    id: "BTNPETICION",
+                    label: "Realizar Petición",
+                    iconClass: "dijitIconFunction",
+                    showLabel: true,
+                    onClick: function(){
+
+                        realizaAccion("buscarDatos");
+
+                    }
+                }, "BTNPETICION").startup();
+
+                /****************************************************************** Acciones ******************************************************************/
+                realizaAccion = function (accion){
+                    dgEjecuta.set("title", "Consultando...");
+                    dgEjecuta.show();
+
+                    request.post(urlPeticiones, {
+                        data: {
+                            accion: accion,
+                            idModulo: idModulo,
+                            dato1: "prueba"
+                        }
+                    }).then(
+                        function (response) {
+                            var objResponse = JSON.parse(response);
+                            if (objResponse['estatus'] == "ERROR") {
+                                dgEjecuta.hide();
+                                dgResultadoError.setContent(objResponse['errorDescripcion']);
+                                dgResultadoError.show();
+                            } else {
+                                let datosRecibidos = objResponse["datosRecibidos"];
+
+                                console.log(datosRecibidos);
+
+                                dgEjecuta.hide();
+                            }
+                        }
+                    );
+                };
+
+                crearTabla = function (datos) {
+
+                    domConstruct.empty('TBREGISTROS');
+
+                    if (datos.length > 0) {
+
+                        for (const key in datos) {
+
+                            var trRegistro = domConstruct.create('tr', { class: '' }, 'TBREGISTROS');
+
+                            var tdVacioInicio = domConstruct.create('td', { class: 'celdaTabla', innerHTML: '' }, trRegistro);
+
+                            // Centro de Trabajo
+                            var CentroDeTrabajo = datos[key]['CentroDeTrabajo'];
+                            var tdCentroDeTrabajo = domConstruct.create('td', { class: 'celdaTabla', innerHTML: CentroDeTrabajo }, trRegistro);
+
+                            // Máquina
+                            var Maquina = datos[key]['Maquina'];
+                            var tdMaquina = domConstruct.create('td', { class: 'celdaTabla', innerHTML: Maquina }, trRegistro);
+
+                            // # De Orden
+                            var NumOrden = datos[key]['NumOrden'];
+                            var tdNumOrden = domConstruct.create('td', { class: 'celdaTabla', innerHTML: NumOrden }, trRegistro);
+
+                            // Fecha de laOrden
+                            var FechaOrden = datos[key]['FechaOrden'];
+                            var tdFechaOrden = domConstruct.create('td', { class: 'celdaTabla', innerHTML: FechaOrden }, trRegistro);
+
+                            // Acciones
+                            var tdAcciones = domConstruct.create('td', { class: 'celdaTabla', innerHTML: '' }, trRegistro);
+
+                            var btnPdf = domConstruct.create('button', { type: 'button' }, tdAcciones);
+                            new Button({
+                                label: 'Orden de Trabajo',
+                                iconClass: 'dijitIconTask',
+                                showLabel: false,
+                                onClick: function () {
+                                    pdf(datos[key]['NumOrden']);
+                                }
+                            }, btnPdf).startup();
+
+                            var btnAbrir = domConstruct.create('button', { type: 'button' }, tdAcciones);
+                            new Button({
+                                label: 'Revisar Archivo',
+                                iconClass: 'dijitIconFolderOpen',
+                                showLabel: false,
+                                onClick: function () {
+                                    abrir(datos[key]['NumOrden']);
+                                }
+                            }, btnAbrir).startup();
+
+                            var tdVacioFinal = domConstruct.create('td', { class: 'celdaTabla', innerHTML: '' }, trRegistro);
+
+                        }
+
+                    }
+
+                }
+
+                ready(function() {
+
+                    // Actualizar el tamaño del TabContainer en función del tamaño de página
+                    var ventana = win.getBox();
+                    var strVentana = (ventana.h-75-120)+"px";
+
+                    style.set(dijit.byId("djTab").id, { height:strVentana });
+                    dijit.byId("djTab").resize();
+
+                    // Actualizar el tamaño del TabContainer en función del tamaño de página
+                    on(window, "resize", function() {
+                        var ventana = win.getBox();
+                        var strVentana = (ventana.h-75-120)+"px";
+                        style.set(dijit.byId("djTab").id, { height:strVentana });
+                        dijit.byId("djTab").resize();
+                    });
+
+                    // Eliminar la cortina de entrada
+                    fx.fadeOut({node: dom.byId("loadingOverlay"), duration: 1}).play();
+
+                    setTimeout(function () {
+                        domConstruct.destroy("loadingOverlay");
+                    }, 1);
+
+                    crearTabla(datos);
+
+                });
+
+            });
+        function abrir(numOrden){ document.getElementById("numOrden").value = numOrden; document.getElementById("frmAbrir").submit(); }
+        function pdf(numOrden){ document.getElementById("pdf").value = numOrden; document.getElementById("frmPDF").submit(); }
+    </script>
+
+</head>
+
+<body class="claro">
+<div id="loadingOverlay" class="loadingOverlay pageOverlay">
+    <div class="loadingMessage">Espere...</div>
+</div>
+
+<div id="wrapper_container_module">
+    <div id="wrapper_table" style="position:relative;">
+        <div data-dojo-type="dijit/form/Form" id="frm" data-dojo-id="frm" encType="multipart/form-data" action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" style="position:relative;">
+
+            <script type="dojo/on" data-dojo-event="submit"> return true; </script>
+
+            <div id="wrapper_table_head"> Bitácora de Mantenimiento </div>
+
+            <div id="wrapper_table_body_mod_app">
+
+                <table width="100%" height="auto">
+                    <tr>
+                        <td width="15%" colspan="3" class="etiquetaFormulario">
+                            <label class="noTopPadding" for="CTRAB">Centro de trabajo:</label>
+                            <input type="hidden" id="pagina" name="pagina" value="" /> <!--Paginador-->
+                        </td>
+                        <td width="30%" colspan="6">
+                            <select  id="CTRAB" name="CTRAB" data-dojo-type="dijit/form/Select" style="width:100%" required="false">
+                                <option value="" selected></option>
+                                <option value="#315">Centro de Trabajo #315</option>
+                                <option value="#023">Centro de Trabajo #023</option>
+                                <option value="#613">Centro de Trabajo #613</option>
+                            </select>
+                        </td>
+                        <td width="10%" colspan="2"></td>
+                        <td width="10%" colspan="2" class="etiquetaFormulario">
+                            <label class="noTopPadding" for="MAQ">Máquina:</label>
+                        </td>
+                        <td width="35%" colspan="7">
+                            <select  id="MAQ" name="MAQ" data-dojo-type="dijit/form/Select" style="width:100%" required="false">
+                                <option value="" selected></option>
+                                <option value="rec">Rechazadora</option>
+                                <option value="pan">Paneladora</option>
+                                <option value="pun">Punzonadora</option>
+                            </select>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td width="15%" colspan="3" class="etiquetaFormulario">
+                            <label class="noTopPadding" for="NORDEN">Número de orden:</label>
+                        </td>
+                        <td width="30%" colspan="6">
+                            <select  id="NORDEN" name="NORDEN" data-dojo-type="dijit/form/Select" style="width:100%" required="false">
+                                <option value="" selected></option>
+                                <option value="0100">0100</option>
+                                <option value="0098">0098</option>
+                                <option value="0095">0095</option>
+                                <option value="0080">0080</option>
+                                <option value="0075">0075</option>
+                                <option value="0065">0065</option>
+                            </select>
+                        </td>
+                        <td width="20%" colspan="4" class="etiquetaFormulario">
+                            <label class="noTopPadding" for="FINI">Fecha Inicial:</label>
+                        </td>
+                        <td width="35%" colspan="7">
+                        <input type="text" name="FINI" id="FINI" data-dojo-type="dijit/form/DateTextBox" required="false"
+                            style="width:100%;" data-dojo-props="placeHolder:'DD/MM/YYYY', invalidMessage: 'La fecha debe capturarse en formato DD/MM/YYYY donde DD corresponde al día, MM al mes y  YYYY al año.'" data-dojo-type="dijit.form.DateTextBox" required="false" onChange="dijit.byId('FFIN').constraints.min = arguments[0];"/>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td width="15%" colspan="3" class="etiquetaFormulario">
+                            <label class="noTopPadding" for="FFIN">Fecha Final:</label>
+                        </td>
+                        <td width="30%" colspan="6">
+                            <input type="text" name="FFIN" id="FFIN" data-dojo-type="dijit/form/DateTextBox" required="false"
+                            style="width:100%;" data-dojo-props="placeHolder:'DD/MM/YYYY', invalidMessage: 'La fecha debe capturarse en formato DD/MM/YYYY donde DD corresponde al día, MM al mes y  YYYY al año.'" data-dojo-type="dijit.form.DateTextBox" required="false" onChange="dijit.byId('FFIN').constraints.min = arguments[0];"/>
+                        </td>
+                    </tr>
+                    <tr>
+                        <td width="100%" colspan="20" align="center">
+                            <button id="BTNBUSCAR" type="button"></button>
+                            <button id="BTNLIMPIAR" type="button"></button>
+                        </td>
+                    </tr>
+                </table>
+
+
+                <div id="djTab" data-dojo-type="dijit/layout/TabContainer" data-dojo-props="tabPosition:'top'" style="width:100%;">
+                    <div data-dojo-type="dijit/layout/ContentPane" title="Lista de Mantenimiento" data-dojo-props="selected:true">
+
+                        <table width="100%" height="auto" cellpadding="0" cellspacing="0">
+
+                            <thead>
+                                <tr>
+                                    <td width="3%" class="encabezadoTabla"> &nbsp; </td>
+                                    <td width="20%" class="encabezadoTabla"> Centro de Trabajo </td>
+                                    <td width="20%" class="encabezadoTabla"> Máquina </td>
+                                    <td width="18%" class="encabezadoTabla"> # De Orden </td>
+                                    <td width="18%" class="encabezadoTabla"> Fecha de la Orden </td>
+                                    <td width="18%" class="encabezadoTabla">Acciones</td>
+                                    <td width="3%" class="encabezadoTabla"> &nbsp; </td>
+                                </tr>
+                            </thead>
+
+                            <tbody id="TBREGISTROS">
+
+                            </tbody>
+
+                        </table>
+
+                    </div>
+                </div>
+
+            </div>
+
+        </div>
+        <form id="frmAbrir" action="bitacorasDeMantenimiento_FR.php" method="post">
+            <input type="hidden" value="" id="numOrden" name="numOrden">
+            <input type="hidden" value="<?php echo $link; ?>" id="from" name="from">
+        </form>
+        <form id="frmPDF" action="bitacorasDeMantenimiento_FR.php" method="post" target="_blank">
+            <input type="hidden" value="" id="pdf" name="pdf">
+        </form>
+    </div>
+</div>
+
+</body>
+

+ 459 - 0
plantasyp/bitacorasDeMantenimiento_FR.php

@@ -0,0 +1,459 @@
+<?php
+$strModulo = 'PRUEBA';
+
+$boolError = true;
+$arrOrdenes = [
+    "0100" => [
+        "cTrab" => "#315",
+        "maq" => "Rechazadora ZENN",
+        "fol" => "0100",
+        "fIni" => "22/10/21",
+        "fFin" => "22/10/21",
+        "desc" => "Cambio de rulina de trabajo",
+        "prio" => "Muy alta",
+        "tMan" => "Preventivo",
+        "nEmp" => "88516",
+        "obse" => "Se hizo el cambio de la rulina de trabajo al observarse un desgaste importante en la pieza.",
+        "eva" => "Excelente",
+        "cau" => "Mecánica",
+        "mat" => [
+            "conc" => "Rulina de trabajo",
+            "uni" => "Pieza",
+            "cant" => "1",
+            "imp" => "795.00",
+            "cTot" => "795.00"
+        ],
+        "rTiem" => [
+            "fech" => "22/10/21",
+            "hIni" => "10:00:00",
+            "hFin" => "10:30:00",
+            "tUti" => "00:30:00",
+            "cosH" => "1,500.00",
+            "impT" => "1,500.00"
+        ]
+    ],
+    "0098" => [
+        "cTrab" => "#613",
+        "maq" => "Paneladora Salvagnini",
+        "fol" => "0098",
+        "fIni" => "19/10/21",
+        "fFin" => "22/10/21",
+        "desc" => "Cambio de el láser",
+        "prio" => "Muy alta",
+        "tMan" => "Preventivo",
+        "nEmp" => "88550",
+        "obse" => "Se hizo el cambio de el láser ya que se rompio.",
+        "eva" => "Excelente",
+        "cau" => "Mecánica",
+        "mat" => [
+            "conc" => "Láser",
+            "uni" => "Pieza",
+            "cant" => "1",
+            "imp" => "1000.00",
+            "cTot" => "1000.00"
+        ],
+        "rTiem" => [
+            "fech" => "22/10/21",
+            "hIni" => "10:00:00",
+            "hFin" => "10:30:00",
+            "tUti" => "00:30:00",
+            "cosH" => "1,500.00",
+            "impT" => "1,500.00"
+        ]
+    ],
+    "0095" => [
+        "cTrab" => "#613",
+        "maq" => "Paneladora Salvagnini",
+        "fol" => "0095",
+        "fIni" => "22/10/21",
+        "fFin" => "22/10/21",
+        "desc" => "Cambio de rulina de trabajo",
+        "prio" => "Muy alto",
+        "tMan" => "Preventivo",
+        "nEmp" => "88516",
+        "obse" => "Cambio en la Bastidora Punzonadora",
+        "eva" => "Excelente",
+        "cau" => "Mecánica",
+        "mat" => [
+            "conc" => "Bastidora Punzonadora",
+            "uni" => "Pieza",
+            "cant" => "1",
+            "imp" => "1200.00",
+            "cTot" => "1200.00"
+        ],
+        "rTiem" => [
+            "fech" => "28/10/21",
+            "hIni" => "11:00:00",
+            "hFin" => "12:30:00",
+            "tUti" => "00:40:00",
+            "cosH" => "1,800.00",
+            "impT" => "1,800.00"
+        ]
+    ],
+    "0080" => [
+        "cTrab" => "#315",
+        "maq" => "Rechazadora ZENN",
+        "fol" => "0080",
+        "fIni" => "22/10/21",
+        "fFin" => "22/10/21",
+        "desc" => "Cambio de rulina de trabajo",
+        "prio" => "Muy alta",
+        "tMan" => "Preventivo",
+        "nEmp" => "88516",
+        "obse" => "Se hizo el cambio de la rulina de trabajo al observarse un desgaste importante en la pieza.",
+        "eva" => "Excelente",
+        "cau" => "Mecánica",
+        "mat" => [
+            "conc" => "Rulina de trabajo",
+            "uni" => "Pieza",
+            "cant" => "1",
+            "imp" => "795.00",
+            "cTot" => "795.00"
+        ],
+        "rTiem" => [
+            "fech" => "22/10/21",
+            "hIni" => "10:00:00",
+            "hFin" => "10:30:00",
+            "tUti" => "00:30:00",
+            "cosH" => "1,500.00",
+            "impT" => "1,500.00"
+        ]
+    ],
+    "0075" => [
+        "cTrab" => "#613",
+        "maq" => "Paneladora Salvagnini",
+        "fol" => "0075",
+        "fIni" => "22/10/21",
+        "fFin" => "22/10/21",
+        "desc" => "Cambio de rulina de trabajo",
+        "prio" => "Muy alta",
+        "tMan" => "Preventivo",
+        "nEmp" => "88516",
+        "obse" => "Se hizo el cambio de la rulina de trabajo al observarse un desgaste importante en la pieza.",
+        "eva" => "Excelente",
+        "cau" => "Mecánica",
+        "mat" => [
+            "conc" => "Rulina de trabajo",
+            "uni" => "Pieza",
+            "cant" => "1",
+            "imp" => "795.00",
+            "cTot" => "795.00"
+        ],
+        "rTiem" => [
+            "fech" => "22/10/21",
+            "hIni" => "10:00:00",
+            "hFin" => "10:30:00",
+            "tUti" => "00:30:00",
+            "cosH" => "1,500.00",
+            "impT" => "1,500.00"
+        ]
+    ],
+    "0065" => [
+        "cTrab" => "#023",
+        "maq" => "Punzonadora",
+        "fol" => "0065",
+        "fIni" => "22/10/21",
+        "fFin" => "22/10/21",
+        "desc" => "Cambio de rulina de trabajo",
+        "prio" => "Muy alta",
+        "tMan" => "Preventivo",
+        "nEmp" => "88516",
+        "obse" => "Se hizo el cambio de la rulina de trabajo al observarse un desgaste importante en la pieza.",
+        "eva" => "Excelente",
+        "cau" => "Mecánica",
+        "mat" => [
+            "conc" => "Rulina de trabajo",
+            "uni" => "Pieza",
+            "cant" => "1",
+            "imp" => "795.00",
+            "cTot" => "795.00"
+        ],
+        "rTiem" => [
+            "fech" => "22/10/21",
+            "hIni" => "10:00:00",
+            "hFin" => "10:30:00",
+            "tUti" => "00:30:00",
+            "cosH" => "1,500.00",
+            "impT" => "1,500.00"
+        ]
+    ],
+];
+
+$arrCampos = [
+    "cTrab" => "Centro de Trabajo",
+    "maq" => "Máquina",
+    "fol" => "Folio",
+    "fIni" => "Fecha de Inicio",
+    "fFin" => "Fecha de Termino",
+    "desc" => "Descripción del Servicio de Mantenimiento",
+    "prio" => "Prioridad",
+    "tMan" => "Tipo de Mantenimiento",
+    "nEmp" => "ID del Técnico",
+    "obse" => "Observaciones",
+    "eva" => "Evaluación del servicio",
+    "cau" => "Causa de la falla",
+    "mat" => [
+        "conc" => "Concepto",
+        "uni" => "Unidad",
+        "cant" => "Cantidad",
+        "imp" => "Importe",
+        "cTot" => "Costo total"
+    ],
+    "rTiem" => [
+        "fech" => "Fecha",
+        "hIni" => "Hora Inicio",
+        "hFin" => "Hora Termino",
+        "tUti" => "Tiempo utilizado",
+        "cosH" => "Costo HH",
+        "impT" => "Importe"
+    ],
+];
+
+if($_SERVER['REQUEST_METHOD'] == "POST"){
+    $numOrden = $_POST["numOrden"];
+    $boolError = empty($numOrden);
+    $detallesOrden = [];
+
+    if(array_key_exists("pdf", $_POST)){
+        $datos = json_encode($arrOrdenes[$_POST["pdf"]]);
+        $fields = array("infoPDF" => base64_encode($datos));
+        $fieldsStr = http_build_query($fields);
+
+        $ch = curl_init();
+        curl_setopt($ch, CURLOPT_URL, "https://smart.solerpalau.mx/QA/api/pdfIOS/crearPdfTmp.php");
+        curl_setopt($ch, CURLOPT_POST, 1);
+        curl_setopt($ch, CURLOPT_POSTFIELDS, $fieldsStr);
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+
+        $data = curl_exec($ch);
+        curl_close($ch);
+
+        $strInfo = base64_decode($data);
+        $arrInfo = json_decode($strInfo, true);
+
+        $filename = $arrInfo["name"];
+        $fileinfo = $arrInfo["content"];
+
+        // Header content type
+        header('Content-type: application/pdf');
+        header('Content-Disposition: inline; filename="' . $filename . '"');
+        header('Content-Transfer-Encoding: binary');
+        header('Accept-Ranges: bytes');
+
+        // Read the file
+        echo base64_decode($fileinfo);
+        exit;
+    }
+
+    if(!$boolError){
+        $detallesOrden = $arrOrdenes[$numOrden];
+        $link = $_POST["from"];
+
+        $cont = 0;
+        $strOut = "";
+        foreach($detallesOrden as $key=>$val){
+            if($cont == 0 && !is_array($val)){
+                $strOut .= "<tr> \n";
+                $strOut .= "<td width=\"15%\" colspan=\"3\" class=\"etiquetaFormulario\"> \n";
+                $strOut .= "<label class=\"noTopPadding\" for='". $key ."'>". $arrCampos[$key] ."</label> \n";
+                $strOut .= "</td> \n";
+                $strOut .= "<td width=\"30%\" colspan=\"6\" class=\"etiquetaFormulario\"> \n";
+                $strOut .= "<input id='". $key ."' name='" . $key . "' value='" . $detallesOrden[$key] . "' data-dojo-type=\"dijit/form/ValidationTextBox\" style=\"width:100%\" required=\"false\" data-dojo-props=\"placeHolder:'Automático.'\"/> \n";
+                $strOut .= "</td> \n";
+                $cont++;
+            }else if(!is_array($val)){
+                $strOut .= "<td width=\"20%\" colspan=\"4\" class=\"etiquetaFormulario\"> \n";
+                $strOut .= "<label class=\"noTopPadding\" for='". $key ."'>". $arrCampos[$key] ."</label> \n";
+                $strOut .= "</td> \n";
+                $strOut .= "<td width=\"35%\" colspan=\"7\" class=\"etiquetaFormulario\"> \n";
+                $strOut .= "<input id='". $key ."' name='" . $key . "' value='" . $detallesOrden[$key] . "' data-dojo-type=\"dijit/form/ValidationTextBox\" style=\"width:100%\" required=\"false\" data-dojo-props=\"placeHolder:'Automático.'\"/> \n";
+                $strOut .= "</td> \n";
+                $strOut .= "</tr> \n";
+                $cont = 0;
+            }else{
+                $bandName = $key == "mat" ? "Materiales y/o refacciones" : "Registro de tiempo";
+                $strOut .= "<tr> \n";
+                $strOut .= "<td>&nbsp;</td> \n";
+                $strOut .= "</tr> \n";
+                $strOut .= "<tr> \n";
+                $strOut .= "<td width=\"100%\" colspan=\"20\" bgcolor=\"#FF0000\" style=\"height:23px;color:#FFFFFF;padding-left:5px;\">$bandName</td> \n";
+                $strOut .= "</tr> \n";
+                $strOut .= "<tr> \n";
+                $strOut .= "<td>&nbsp;</td> \n";
+                $strOut .= "</tr> \n";
+
+                $cont1 = 0;
+                foreach($val as $key0=>$val0){
+                    if($cont1 == 0){
+                        $strOut .= "<tr> \n";
+                        $strOut .= "<td width=\"15%\" colspan=\"3\" class=\"etiquetaFormulario\"> \n";
+                        $strOut .= "<label class=\"noTopPadding\" for='". $key0 ."'>". $arrCampos[$key][$key0] ."</label> \n";
+                        $strOut .= "</td> \n";
+                        $strOut .= "<td width=\"30%\" colspan=\"6\" class=\"etiquetaFormulario\"> \n";
+                        $strOut .= "<input id='". $key0 ."' name='" . $key0 . "' value='" . $detallesOrden[$key][$key0] . "' data-dojo-type=\"dijit/form/ValidationTextBox\" style=\"width:100%\" required=\"false\" data-dojo-props=\"placeHolder:'Automático.'\"/> \n";
+                        $strOut .= "</td> \n";
+                        $cont1++;
+                    }else{
+                        $strOut .= "<td width=\"20%\" colspan=\"4\" class=\"etiquetaFormulario\"> \n";
+                        $strOut .= "<label class=\"noTopPadding\" for='". $key0 ."'>". $arrCampos[$key][$key0] ."</label> \n";
+                        $strOut .= "</td> \n";
+                        $strOut .= "<td width=\"35%\" colspan=\"7\" class=\"etiquetaFormulario\"> \n";
+                        $strOut .= "<input id='". $key0 ."' name='" . $key0 . "' value='" . $detallesOrden[$key][$key0] . "' data-dojo-type=\"dijit/form/ValidationTextBox\" style=\"width:100%\" required=\"false\" data-dojo-props=\"placeHolder:'Automático.'\"/> \n";
+                        $strOut .= "</td> \n";
+                        $strOut .= "</tr> \n";
+                        $cont1 = 0;
+                    }
+                }
+                $cont = 0;
+            }
+        }
+    }
+}
+?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="imagetoolbar" content="no" />
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Poppins:400,500,700,300,600">
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans">
+    <link media="screen" rel="stylesheet" type="text/css" href="css/principal.css" />
+    <!--<link media="screen" rel="stylesheet" type="text/css" href="css/pagination.css"  />--> <!--Paginador-->
+    <link rel="shortcut icon" type="image/x-icon" href="css/layout/global/sp.ico" />
+
+    <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dijit/themes/claro/claro.css">
+    <script src="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dojo/dojo.js" data-dojo-config="async: true, parseOnLoad:true"></script>
+
+    <script type="application/javascript">
+        // Cargamos los complementos de dojo
+        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",
+                "dojo/store/Memory", "dijit/form/FilteringSelect", "dijit/form/Button", "dojo/dom-class", "dijit/Dialog",
+                "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",
+                "dijit/ProgressBar", "dijit/ConfirmDialog", "dojo/dom-style", "dijit/form/ComboButton", "dijit/Menu", "dijit/MenuItem", "dijit/MenuSeparator", "dijit/Tooltip", "dijit/form/Form", "dijit/form/TextBox",
+                "dojox/grid/enhanced/plugins/Filter", "dijit/form/ValidationTextBox", "dijit/form/NumberSpinner", "dojo/request", "dojo/parser"],
+            function(dom, fx, array, query, domConstruct, dijit, style, ready, on, win,
+                     Memory, FilteringSelect, Button, domClass, Dialog,
+                     lang, DataGrid, ItemFileWriteStore, DnDConfig, EnhancedGrid, Selector, indirectSelection, nestedSorting,
+                     ProgressBar, ConfirmDialog, style, ComboButton, Menu, MenuItem, MenuSeparator, Tooltip, Form, TextBox, filter, ValidationTextBox, NumberSpinner, request) {
+
+                const urlPeticiones = "plantillaEjemplo_DO.php";
+                const idModulo = "<?php echo($strModulo);?>";
+
+                // Para Mostrar de Mensajes de "error o éxito"
+                var dgEjecuta = new Dialog({title: 'Procesando...', style: 'width:300px'});
+                var pbMarcar = new ProgressBar({value: Number.POSITIVE_INFINITY, layoutAlign: 'left'});
+                dgEjecuta.setContent(pbMarcar);
+                dgResultadoError = new ConfirmDialog({ title:"<b>Error</b>", style: "min-width:300px; heigth; auto" });
+                style.set(dgResultadoError.cancelButton.domNode, 'display', 'none');
+                dgResultadoExito = new ConfirmDialog({ title:"<b>Éxito</b>", style: "min-width:300px; heigth; auto" });
+                style.set(dgResultadoExito.cancelButton.domNode, 'display', 'none');
+
+
+                /****************************************************************** Botones ******************************************************************/
+                // Limpiar
+                new Button({
+                    label: "Regresar",
+                    iconClass: "dijitEditorIcon dijitEditorIconUndo",
+                    showLabel: true,
+                    onClick: function() {
+                        window.parent.frames.app_modulo.location.href = '<?php echo $link; ?>';
+                    }
+                }, "BTNCERRAR").startup();
+
+                /****************************************************************** Acciones ******************************************************************/
+                realizaAccion = function (accion){
+                    dgEjecuta.set("title", "Consultando...");
+                    dgEjecuta.show();
+
+                    request.post(urlPeticiones, {
+                        data: {
+                            accion: accion,
+                            idModulo: idModulo,
+                            dato1: "prueba"
+                        }
+                    }).then(
+                        function (response) {
+                            var objResponse = JSON.parse(response);
+                            if (objResponse['estatus'] == "ERROR") {
+                                dgEjecuta.hide();
+                                dgResultadoError.setContent(objResponse['errorDescripcion']);
+                                dgResultadoError.show();
+                            } else {
+                                let datosRecibidos = objResponse["datosRecibidos"];
+
+                                console.log(datosRecibidos);
+
+                                dgEjecuta.hide();
+                            }
+                        }
+                    );
+
+
+                };
+
+                ready(function() {
+                    // Actualizar el tamaño del TabContainer en función del tamaño de página
+                    var ventana = win.getBox();
+                    var strVentana = (ventana.h-75-100)+"px";
+                    style.set(dijit.byId("djTab").id, { height:strVentana });
+                    dijit.byId("djTab").resize();
+
+                    // Actualizar el tamaño del TabContainer en función del tamaño de página
+                    on(window, "resize", function() {
+                        var ventana = win.getBox();
+                        var strVentana = (ventana.h-75-100)+"px";
+                        style.set(dijit.byId("djTab").id, { height:strVentana });
+                        dijit.byId("djTab").resize();
+                    });
+                    // Eliminar la cortina de entrada
+                    fx.fadeOut({node: dom.byId("loadingOverlay"), duration: 1}).play();
+                    setTimeout(function () {
+                        domConstruct.destroy("loadingOverlay");
+                    }, 1);
+
+                });
+            });
+    </script>
+
+</head>
+
+<body class="claro">
+<div id="loadingOverlay" class="loadingOverlay pageOverlay">
+    <div class="loadingMessage">Espere...</div>
+</div>
+
+<div id="wrapper_container_module">
+    <div id="wrapper_table" style="position:relative;">
+        <div data-dojo-type="dijit/form/Form" id="frm" data-dojo-id="frm" encType="multipart/form-data"
+             action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" style="position:relative;">
+            <script type="dojo/on" data-dojo-event="submit">return true;</script>
+            <div id="wrapper_table_head">Órden de Mantenimiento</div>
+            <div id="wrapper_table_body_mod_app">
+                <table width="100%" height="auto">
+                    <tr>
+                        <td width="100%" colspan="20" align="center">
+                    </tr>
+
+                    <tr>
+                        <td width="100%" colspan="20" align="center">
+                            <button id="BTNCERRAR" type="button"></button>
+                        </td>
+                    </tr>
+                </table>
+
+
+                <div id="djTab" data-dojo-type="dijit/layout/TabContainer" data-dojo-props="tabPosition:'top'" style="width:100%;">
+                    <div data-dojo-type="dijit/layout/ContentPane" title="Detalles" data-dojo-props="selected:true">
+                        <table width="100%" heifght="auto">
+                            <?php echo $strOut; ?>
+                        </table>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+</body>
+

+ 246 - 0
plantasyp/centroTrabajo.php

@@ -0,0 +1,246 @@
+<?php
+    $strModulo = 'centroTrabajo';
+    $arrCT = array();
+    //$url = 'https://www.solerpalau.mx/plantasyp/datosPlanta.php';
+    $url = 'https://www.solerpalau.mx/plantasyp/datosPlanta.php';
+    $opciones = array('http' =>
+        array(
+            'method' => 'GET',
+            'max_redirects' => '0',
+            'ignore_errors' => '1'
+        )
+    );
+
+    $contexto = stream_context_create($opciones);
+    $flujo = fopen($url, 'r', false, $contexto);
+    $arrResultadoPeticion = json_decode(stream_get_contents($flujo), true);
+
+    $arrCT[0]['idCT'] = 'T';
+    $arrCT[0]['name'] = 'Todos';
+    $contadorCT = 1;
+    foreach ($arrResultadoPeticion['datosRespuesta'] as $clave => $valor){
+        $arrCT[$contadorCT]['idCT'] = $clave;
+        $arrCT[$contadorCT]['name'] = $clave;
+        $contadorCT++;
+    }
+
+    $jsonCentrosT = json_encode($arrCT);
+?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="imagetoolbar" content="no" />
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Poppins:400,500,700,300,600">
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans">
+    <link media="screen" rel="stylesheet" type="text/css" href="css/principal.css" />
+    <!--<link media="screen" rel="stylesheet" type="text/css" href="css/pagination.css"  />--> <!--Paginador-->
+    <link rel="shortcut icon" type="image/x-icon" href="css/layout/global/sp.ico" />
+    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
+    <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dijit/themes/claro/claro.css">
+    <script src="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dojo/dojo.js" data-dojo-config="async: true, parseOnLoad:true"></script>
+    <script type="application/javascript">
+        // Cargamos los complementos de dojo
+        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",
+                "dojo/store/Memory", "dijit/form/FilteringSelect", "dijit/form/Button", "dojo/dom-class", "dijit/Dialog",
+                "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",
+                "dijit/ProgressBar", "dijit/ConfirmDialog", "dojo/dom-style", "dijit/form/ComboButton", "dijit/Menu", "dijit/MenuItem", "dijit/MenuSeparator", "dijit/Tooltip", "dijit/form/Form", "dijit/form/TextBox",
+                "dojox/grid/enhanced/plugins/Filter", "dijit/form/ValidationTextBox", "dijit/form/NumberSpinner", "dojo/request", "dojo/parser"],
+            function(dom, fx, array, query, domConstruct, dijit, style, ready, on, win,
+                     Memory, FilteringSelect, Button, domClass, Dialog,
+                     lang, DataGrid, ItemFileWriteStore, DnDConfig, EnhancedGrid, Selector, indirectSelection, nestedSorting,
+                     ProgressBar, ConfirmDialog, style, ComboButton, Menu, MenuItem, MenuSeparator, Tooltip, Form, TextBox, filter, ValidationTextBox, NumberSpinner, request) {
+
+                const idModulo = "<?php echo($strModulo);?>";
+                const arrCentrosT = <?php echo($jsonCentrosT); ?>;
+
+                // Para Mostrar de Mensajes de "error o éxito"
+                var dgEjecuta = new Dialog({title: 'Procesando...', style: 'width:300px'});
+                var pbMarcar = new ProgressBar({value: Number.POSITIVE_INFINITY, layoutAlign: 'left'});
+                dgEjecuta.setContent(pbMarcar);
+                dgResultadoError = new ConfirmDialog({ title:"<b>Error</b>", style: "min-width:300px; heigth; auto" });
+                style.set(dgResultadoError.cancelButton.domNode, 'display', 'none');
+                dgResultadoExito = new ConfirmDialog({ title:"<b>Éxito</b>", style: "min-width:300px; heigth; auto" });
+                style.set(dgResultadoExito.cancelButton.domNode, 'display', 'none');
+
+                /****************************************************************** Inputs ******************************************************************/
+                new FilteringSelect({
+                    id: "select_CentroTrabajo",
+                    store: new Memory({ idProperty: "idCT", data: arrCentrosT }),
+                    autoComplete: true,
+                    maxHeight: 300,
+                    style: "width: 100%;",
+                    placeHolder: "Seleccione una opción",
+                    onChange: function(idCt){
+                    }
+                }, "select_CentroTrabajo");
+
+                /****************************************************************** Botones ******************************************************************/
+                new Button({
+                    id: "btn_Buscar",
+                    label: "Buscar",
+                    iconClass: "dijitIconSearch",
+                    showLabel: false,
+                    onClick: function(){
+                        let centroT = dijit.byId('select_CentroTrabajo').value;
+                        if(centroT != ""){
+                            consultarDatos(centroT);
+                        }
+                    }
+                }, "btn_Buscar").startup();
+
+                /****************************************************************** Funciones ******************************************************************/
+                consultarDatos = function(ct){
+
+                    let urlBusqueda = "datosPlanta.php";
+                    if(ct != ""){
+                        urlBusqueda += "?ct=" + ct;
+                    }
+
+                    request.post(urlBusqueda, {
+                        data: {
+                            accion: 'accion',
+                            idModulo: idModulo
+                        }
+                    }).then(
+                        function (response) {
+                            var objResponse = JSON.parse(response);
+                            if (objResponse['estatus'] == "ERROR") {
+                                dgEjecuta.hide();
+                                dgResultadoError.setContent(objResponse['errorDescripcion']);
+                                dgResultadoError.show();
+                            } else {
+                                let datosRecibidos = objResponse["datosRespuesta"];
+
+                                domConstruct.empty("div_Cards");
+
+                                for(var centroTrabajo in datosRecibidos){
+                                    var divCol = domConstruct.create("div", {
+                                        class: "col  pb-5",
+                                    }, "div_Cards");
+
+                                    var div_C = domConstruct.create("div", {
+                                        class: "card",
+                                    }, divCol);
+
+                                    var img_C = domConstruct.create("img", {
+                                        class: "card-img-top",
+                                        height: "180px",
+                                        src: datosRecibidos[centroTrabajo]['rutaImagenCT']
+                                    }, div_C);
+
+                                    var div_Body = domConstruct.create("div", {
+                                        class: "card-body"
+                                    }, div_C);
+
+                                    var h5_C = domConstruct.create("h5", {
+                                        class: "card-title",
+                                        innerHTML: "Centro de Trabajo: <b>"+centroTrabajo+"</b>"
+                                    }, div_Body);
+
+                                    var urlIr = "maquinaria.php?ct="+centroTrabajo
+                                    var a_C = domConstruct.create("a", {
+                                        class: "btn btn-link",
+                                        innerHTML: "Ver Maquinaria",
+                                        href: urlIr
+                                    }, div_Body);
+                                }
+                            }
+                        }
+                    );
+                };
+
+
+                ready(function() {
+                    // Actualizar el tamaño del TabContainer en función del tamaño de página
+                    var ventana = win.getBox();
+                    var strVentana = (ventana.h-110)+"px";
+                    style.set(dijit.byId("djTab").id, { height:strVentana });
+                    dijit.byId("djTab").resize();
+
+                    // Actualizar el tamaño del TabContainer en función del tamaño de página
+                    on(window, "resize", function() {
+                        var ventana = win.getBox();
+                        var strVentana = (ventana.h-110)+"px";
+                        style.set(dijit.byId("djTab").id, { height:strVentana });
+                        dijit.byId("djTab").resize();
+                    });
+                    // Eliminar la cortina de entrada
+                    fx.fadeOut({node: dom.byId("loadingOverlay"), duration: 1}).play();
+                    setTimeout(function () {
+                        domConstruct.destroy("loadingOverlay");
+                    }, 1);
+
+                    consultarDatos("");
+
+                });
+            });
+    </script>
+    <style>
+       .card{
+            width:300px;
+            height:300px;
+            box-shadow: 10px 5px 5px #b0bec5;
+            transition: width 2s, height 2s, transform 2s;
+            border-radius: 5px;
+            border-color: #34495E;
+        }
+
+        img{
+            opacity: 0.8;
+
+        }
+
+       .card:hover{
+            transform: scale(1.1);
+       }
+       .col{
+           flex: 0 0 0%;
+       }
+
+    </style>
+
+</head>
+
+<body class="claro">
+<div id="loadingOverlay" class="loadingOverlay pageOverlay">
+    <div class="loadingMessage">Espere...</div>
+</div>
+
+<div id="wrapper_container_module">
+    <div id="wrapper_table" style="position:relative;">
+        <div data-dojo-type="dijit/form/Form" id="frm" data-dojo-id="frm" encType="multipart/form-data"
+             action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" style="position:relative;">
+            <script type="dojo/on" data-dojo-event="submit">return true;</script>
+            <div id="wrapper_table_head">Centro de Trabajo</div>
+            <div id="wrapper_table_body_mod_app">
+
+                <table width="100%" height="auto" border="0" style="border-spacing: 5px;">
+                    <tr>
+                        <td width="10%" colspan="2" class="etiquetaFormulario">
+                            <label class="noTopPadding">Centro de Trabajo:</label>
+                        </td>
+                        <td width="20%" colspan="4">
+                            <input id="select_CentroTrabajo"/>
+                        </td>
+                        <td width="70%" colspan="14">
+                            <button id="btn_Buscar" type="button"></button>
+                        </td>
+                    </tr>
+                </table>
+
+                <div id="djTab" data-dojo-type="dijit/layout/LayoutContainer" style="overflow-y: auto;">
+                    <div class="container" style="margin-left: 5px; margin-right: 5px; margin-top: 20px">
+                        <div class="row" id="div_Cards">
+                        </div>
+                    </div>
+                </div>
+
+            </div>
+        </div>
+    </div>
+</div>
+
+</body>
+

+ 650 - 0
plantasyp/datosPlanta.php

@@ -0,0 +1,650 @@
+<?php
+
+ob_start(); // Limpia el buffer por errores de salida
+// Permite un mayor tiempo de respuesta del socket
+ini_set('memory_limit', '-1');
+
+header('Content-Type: application/json');
+
+$strModulo = 'DatosPlanta';
+
+// Variables de respuesta
+$estatus = 'EXITO';
+$errorDescripcion = '';
+$datosRespuesta = array();
+
+
+$arrCentrosTrabajo = array('315', '316', '559', '606', '613', '023');
+$arrRutaImagenes = array(
+    '315' => 'css/layout/site/imgPlanta/centroTrabajo/315.jpg',
+    '316' => 'css/layout/site/imgPlanta/centroTrabajo/316.jpg',
+    '559' => 'css/layout/site/imgPlanta/centroTrabajo/559.jpg',
+    '606' => 'css/layout/site/imgPlanta/centroTrabajo/606.jpg',
+    '613' => 'css/layout/site/imgPlanta/centroTrabajo/613.jpg',
+    '023' => 'css/layout/site/imgPlanta/centroTrabajo/023.jpg'
+
+);
+$arrMaquinas = array();
+
+
+$centroTrabajo = '315';
+$arrMaquinas[$centroTrabajo][0]['id'] = $centroTrabajo . '_0';
+$arrMaquinas[$centroTrabajo][0]['nombre'] = 'Rechazadora';
+$arrMaquinas[$centroTrabajo][0]['descripcion'] = 'Máquina que realiza la deformación por rotación de un disco plano de lámina, para este proceso se requiere un molde
+el cial está diseñado de acuerdo a la pieza a fabricar y el cual es adaptado a la máquina; una vez montado el molde, se asegura la pieza en el plano y mediante la 
+presión ejercida por un rodillo se va adaptando el disco plano al molde hasta dar la forma del componente deseado.
+Al igual que las otras máquinas el proceso se realiza através de un lenguaje de programación de acuerdo a cada tipo de pieza a procesar.';
+$arrMaquinas[$centroTrabajo][0]['rutaImagen'] = 'css/layout/site/imgPlanta/maquinas/Rechazadora/Rechazadora_principal.jpg';
+$arrMaquinas[$centroTrabajo][0]['carpetaImagenesMaquinaria'] = 'Rechazadora';
+$arrMaquinas[$centroTrabajo][0]['carpetaPdfs'] = 'docs/315/Rechazadora ZENN-200/';
+
+
+$centroTrabajo = '316';
+$arrMaquinas[$centroTrabajo][0]['id'] = $centroTrabajo . '_0';
+$arrMaquinas[$centroTrabajo][0]['nombre'] = 'Máquina Láser';
+$arrMaquinas[$centroTrabajo][0]['descripcion'] = 'Máquina que realiza diferentes cortar diferentes tipo de materiales de lámina mediante el uso de una boquilla y un gas. Tiene mejores acabados en las piezas a comparación de una punzonadora, que de igual manera requiere de la generación de un programa CNC para el corte de los diferentes componentes.';
+$arrMaquinas[$centroTrabajo][0]['rutaImagen'] = 'css/layout/site/imgPlanta/maquinas/MaquinaLaser/maquinaLaser_principal.jpg';
+$arrMaquinas[$centroTrabajo][0]['carpetaImagenesMaquinaria'] = 'MaquinaLaser';
+$arrMaquinas[$centroTrabajo][0]['carpetaPdfs'] = '';
+
+$centroTrabajo = '559';
+$arrMaquinas[$centroTrabajo][0]['id'] = $centroTrabajo . '_0';
+$arrMaquinas[$centroTrabajo][0]['nombre'] = 'Balanceadora Hofman';
+$arrMaquinas[$centroTrabajo][0]['descripcion'] = 'Es un dispositivo diseñado para medir y corregir la masa de desbalanceo de un rotor, en nuestro caso es utilizado para las turbinas, en estas máquinas se hacen girar las piezas para detectar los centros de masas a través de medidores de vibración, con lo cual se puede identificar la posición donde es necesario hacer el ajuste.';
+$arrMaquinas[$centroTrabajo][0]['rutaImagen'] = 'css/layout/site/imgPlanta/maquinas/Balanceadora/Balanceadora_principal.jpg';
+$arrMaquinas[$centroTrabajo][0]['carpetaImagenesMaquinaria'] = 'Balanceadora';
+$arrMaquinas[$centroTrabajo][0]['carpetaPdfs'] = '';
+
+$centroTrabajo = '606';
+$arrMaquinas[$centroTrabajo][0]['id'] = $centroTrabajo . '_0';
+$arrMaquinas[$centroTrabajo][0]['nombre'] = 'Dobladora AMADA';
+$arrMaquinas[$centroTrabajo][0]['descripcion'] = 'Esta máquina tiene la misma función que la paneladora Salvagnini realizar el proceso de doblez a componentes de lámina en diferentes tipos de material, teniendo como diferencia que se requiere de mayor operación por parte de la persona que la opere, al no contar con un sistema que permita mover la pieza a procesar de manera automatizada. Requiere de igual manera hacer una programación de acuerdo a las especificaciones señaladas por cada componente a fabricar.';
+$arrMaquinas[$centroTrabajo][0]['rutaImagen'] = 'css/layout/site/imgPlanta/maquinas/Dobladora/Dobladora_principal.jpg';
+$arrMaquinas[$centroTrabajo][0]['carpetaImagenesMaquinaria'] = 'Dobladora';
+$arrMaquinas[$centroTrabajo][0]['carpetaPdfs'] = '';
+
+$centroTrabajo = '613';
+$arrMaquinas[$centroTrabajo][0]['id'] = $centroTrabajo . '_0';
+$arrMaquinas[$centroTrabajo][0]['nombre'] = 'Paneladora Salvagnini';
+$arrMaquinas[$centroTrabajo][0]['descripcion'] = 'Máquina utilizada para el proceso de plegado de chapa, es decir, puede realizar 
+diferentes dobleces a piezas en formas en determinados calibres de lámina, la paneladora Salvagnini realiza el proceso 
+a traves de un lenguae de programación que van en la relación a cada una de las íezas que se procesan de acuerdo a las 
+especificaciones señaladas para cada una de ellas';
+$arrMaquinas[$centroTrabajo][0]['rutaImagen'] = 'css/layout/site/imgPlanta/maquinas/PaneladoraSalvagnini/PaneladoraSalvagnini_principal.jpg';
+$arrMaquinas[$centroTrabajo][0]['carpetaImagenesMaquinaria'] = 'PaneladoraSalvagnini';
+$arrMaquinas[$centroTrabajo][0]['carpetaPdfs'] = 'docs/613/Salvagnini/';
+
+
+$centroTrabajo = '023';
+$arrMaquinas[$centroTrabajo][0]['id'] = $centroTrabajo . '_0';
+$arrMaquinas[$centroTrabajo][0]['nombre'] = 'Punzonadora';
+$arrMaquinas[$centroTrabajo][0]['descripcion'] = 'Máquina que se usa para perforar y conformar piezas en chapa ( lámina) de diferentes materiales. funciona mediante
+el uso de un punzón y una matriz que son los qe realizan la acción del perforado mediante golpecitos, esta máquina también opera mediante un lenguaje de programación
+que se adapta de acuerdo a las piezas a procesar';
+$arrMaquinas[$centroTrabajo][0]['rutaImagen'] = 'css/layout/site/imgPlanta/maquinas/Punzadora/Punzadora_principal.jpg';
+$arrMaquinas[$centroTrabajo][0]['carpetaImagenesMaquinaria'] = 'Punzadora';
+$arrMaquinas[$centroTrabajo][0]['carpetaPdfs'] = 'docs/023/Punzonadora CUPRA/';
+
+
+$ct = "";
+$maq = "";
+if (!empty($_GET['ct'])) {
+    $ct = $_GET['ct'];
+}
+if (!empty($_GET['maq'])) {
+    $maq = $_GET['maq'];
+}
+
+foreach ($arrCentrosTrabajo as $centroTrabajo) {
+    if ((!empty($ct)) && ($ct != 'T')) {
+        if ($centroTrabajo == $ct) {
+            if (!empty($maq)) {
+                foreach ($arrMaquinas[$centroTrabajo] as $clave => $valor) {
+                    $idMaquina = $arrMaquinas[$centroTrabajo][$clave]['id'];
+                    if ($idMaquina != $maq) {
+                        unset($arrMaquinas[$centroTrabajo][$clave]);
+                    }
+                }
+                $datosRespuesta[$centroTrabajo]['centroTrabajo'] = $centroTrabajo;
+                $datosRespuesta[$centroTrabajo]['rutaImagenCT'] = $arrRutaImagenes[$centroTrabajo];
+                $datosRespuesta[$centroTrabajo]['maquinas'] = $arrMaquinas[$centroTrabajo];
+            } else {
+                $datosRespuesta[$centroTrabajo]['centroTrabajo'] = $centroTrabajo;
+                $datosRespuesta[$centroTrabajo]['rutaImagenCT'] = $arrRutaImagenes[$centroTrabajo];
+                $datosRespuesta[$centroTrabajo]['maquinas'] = $arrMaquinas[$centroTrabajo];
+            }
+        }
+    } else {
+        $datosRespuesta[$centroTrabajo]['centroTrabajo'] = $centroTrabajo;
+        $datosRespuesta[$centroTrabajo]['rutaImagenCT'] = $arrRutaImagenes[$centroTrabajo];
+        $datosRespuesta[$centroTrabajo]['maquinas'] = $arrMaquinas[$centroTrabajo];
+    }
+}
+
+
+/********************** Para cargar Grid **********************/
+$accion = $_POST['accion'];
+$arrAccionesValidas = array('buscarMantoPreventivo', 'buscarRefacciones');
+if (in_array($accion, $arrAccionesValidas)) {
+
+    $arrDatosMantoPreventivo = array();
+    $arrDatosRefacciones = array();
+    $ct = $_POST['ct'];
+    $maq = $_POST['maq'];
+    $contadorManto = 0;
+    $contadorRefaccion = 0;
+
+
+    if (($ct == '315') || ($ct == 'todos')) { // Existe
+        $ctR = '315';
+        // Para Consulta de Mantenimiento Preventivo
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'TABLERO ELECTRICO';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'LIMPIEZA Y REVISIÓN DE CONEXIONES';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '0 h 40 m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'ELECTRICO';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'ACEITE ISO 32';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'CAMBIO RELLENO DEPOSITO';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '0 h 40 m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'HIDRAULICA';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'SISTEMA DE LUBRICACIÓN';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'REVISIÓN DE SSTEMA DE LUBRICACION';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '0 h 15 m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'HIDRAULICA';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'MOTOR UNIDAD HIDRAULICA';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'MATENIMIENTO A OTOR DE UNIDAD HIDRAULICA';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '0 h 35 m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'MECANICO';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'SISTEMA HIDRAULICO';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'SERVICIO DE LIMPIEZA Y REVISION DE SISTEMA HIDRAULICO';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '0 h 20 m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'HIDRAULICA';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'CNC';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'SERVICIO Y REVISION DE SERVO-MOTOR PRINCIPAL DE TORRETA';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '0 h 20 m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'ELECTRICO ELECTRONICO';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'ACTUADORES';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'MANTENIMIENTO, REVISION Y LUBRICACION DE PISTONES, CORREDERAS Y BANCADA';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '0 h 20 m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'MECANCO';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'RULINAS';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'REVISION Y/O CAMBIO DE RODAMIENTOS DE RULINAS Y CONTRAPUNTOS';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '0 h 20 m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'MECANICO';
+        $contadorManto++;
+
+
+        // Para Consulta de Refacciones
+        $arrDatosRefacciones[$contadorRefaccion]['ct'] = $ctR;
+        $arrDatosRefacciones[$contadorRefaccion]['maquina'] = 'Rechazadora ZENN 200';
+        $arrDatosRefacciones[$contadorRefaccion]['refaccion'] = 'Rulina de trabajo';
+        $arrDatosRefacciones[$contadorRefaccion]['desgaste'] = 'Muy Alto';
+        $arrDatosRefacciones[$contadorRefaccion]['duracion'] = 'Cada año';
+        $arrDatosRefacciones[$contadorRefaccion]['proximoPedido'] = '25/10/2021';
+        $contadorRefaccion++;
+
+        $arrDatosRefacciones[$contadorRefaccion]['ct'] = $ctR;
+        $arrDatosRefacciones[$contadorRefaccion]['maquina'] = 'Rechazadora ZENN 200';
+        $arrDatosRefacciones[$contadorRefaccion]['refaccion'] = 'Molde';
+        $arrDatosRefacciones[$contadorRefaccion]['desgaste'] = 'Muy Bajo';
+        $arrDatosRefacciones[$contadorRefaccion]['duracion'] = 'Cada año';
+        $arrDatosRefacciones[$contadorRefaccion]['proximoPedido'] = '29/10/2021';
+        $contadorRefaccion++;
+
+        $arrDatosRefacciones[$contadorRefaccion]['ct'] = $ctR;
+        $arrDatosRefacciones[$contadorRefaccion]['maquina'] = 'Rechazadora ZENN 200';
+        $arrDatosRefacciones[$contadorRefaccion]['refaccion'] = 'Tapiol';
+        $arrDatosRefacciones[$contadorRefaccion]['desgaste'] = 'Bajo';
+        $arrDatosRefacciones[$contadorRefaccion]['duracion'] = 'Cada año';
+        $arrDatosRefacciones[$contadorRefaccion]['proximoPedido'] = '02/11/2021';
+        $contadorRefaccion++;
+
+        $arrDatosRefacciones[$contadorRefaccion]['ct'] = $ctR;
+        $arrDatosRefacciones[$contadorRefaccion]['maquina'] = 'Rechazadora ZENN 200';
+        $arrDatosRefacciones[$contadorRefaccion]['refaccion'] = 'Apoyo de Chapa';
+        $arrDatosRefacciones[$contadorRefaccion]['desgaste'] = 'Medio';
+        $arrDatosRefacciones[$contadorRefaccion]['duracion'] = 'Cada año';
+        $arrDatosRefacciones[$contadorRefaccion]['proximoPedido'] = '15/11/2021';
+        $contadorRefaccion++;
+
+        $arrDatosRefacciones[$contadorRefaccion]['ct'] = $ctR;
+        $arrDatosRefacciones[$contadorRefaccion]['maquina'] = 'Rechazadora ZENN 200';
+        $arrDatosRefacciones[$contadorRefaccion]['refaccion'] = 'Centrador';
+        $arrDatosRefacciones[$contadorRefaccion]['desgaste'] = 'Medio';
+        $arrDatosRefacciones[$contadorRefaccion]['duracion'] = 'Cada año';
+        $arrDatosRefacciones[$contadorRefaccion]['proximoPedido'] = '20/12/2021';
+        $contadorRefaccion++;
+
+        $arrDatosRefacciones[$contadorRefaccion]['ct'] = $ctR;
+        $arrDatosRefacciones[$contadorRefaccion]['maquina'] = 'Rechazadora ZENN 200';
+        $arrDatosRefacciones[$contadorRefaccion]['refaccion'] = 'Borneador';
+        $arrDatosRefacciones[$contadorRefaccion]['desgaste'] = 'Alto';
+        $arrDatosRefacciones[$contadorRefaccion]['duracion'] = 'Cada año';
+        $arrDatosRefacciones[$contadorRefaccion]['proximoPedido'] = '10/11/2021';
+        $contadorRefaccion++;
+
+        $arrDatosRefacciones[$contadorRefaccion]['ct'] = $ctR;
+        $arrDatosRefacciones[$contadorRefaccion]['maquina'] = 'Rechazadora ZENN 200';
+        $arrDatosRefacciones[$contadorRefaccion]['refaccion'] = 'Refrentador Fijo';
+        $arrDatosRefacciones[$contadorRefaccion]['desgaste'] = 'Bajo';
+        $arrDatosRefacciones[$contadorRefaccion]['duracion'] = 'Cada año';
+        $arrDatosRefacciones[$contadorRefaccion]['proximoPedido'] = '30/11/2021';
+        $contadorRefaccion++;
+
+    }
+
+    if (($ct == '316') || ($ct == 'todos')) { // Datos ficticios
+        $ctR = '316';
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'GOLPEADOR PUNZADORA';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'CAMBIO DE ACEITE';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '0h 45m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'ELECTRICO';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'ELEMENTOS DE SEGURIDAD';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'PAROS DE SEGURIDAD';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '0h 45m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'ELECTRICO MECANICO';
+        $contadorManto++;
+
+
+        // Para Consulta de Refacciones
+        $arrDatosRefacciones[$contadorRefaccion]['ct'] = $ctR;
+        $arrDatosRefacciones[$contadorRefaccion]['maquina'] = 'Maquina Laser';
+        $arrDatosRefacciones[$contadorRefaccion]['refaccion'] = 'Rulina de trabajo';
+        $arrDatosRefacciones[$contadorRefaccion]['desgaste'] = 'Muy Alto';
+        $arrDatosRefacciones[$contadorRefaccion]['duracion'] = 'Cada año';
+        $arrDatosRefacciones[$contadorRefaccion]['proximoPedido'] = '01/11/2021';
+        $contadorRefaccion++;
+    }
+
+    if (($ct == '559') || ($ct == 'todos')) { // Datos ficticios
+        $ctR = '559';
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'TABLE ELECTRICO Y COTROL';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'APRIETE Y REVISION DE CONEXIONES';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '0h 45m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'ELECTRICO';
+        $contadorManto++;
+
+        //datos refracciones
+        $arrDatosRefacciones[$contadorRefaccion]['ct'] = $ctR;
+        $arrDatosRefacciones[$contadorRefaccion]['maquina'] = 'Balanceadora N3';
+        $arrDatosRefacciones[$contadorRefaccion]['refaccion'] = 'Bastidor Punzonadora';
+        $arrDatosRefacciones[$contadorRefaccion]['desgaste'] = 'Muy Alto';
+        $arrDatosRefacciones[$contadorRefaccion]['duracion'] = 'Cada mes';
+        $arrDatosRefacciones[$contadorRefaccion]['proximoPedido'] = '03/11/2021';
+        $contadorRefaccion++;
+
+        $arrDatosRefacciones[$contadorRefaccion]['ct'] = $ctR;
+        $arrDatosRefacciones[$contadorRefaccion]['maquina'] = 'Balanceadora N3';
+        $arrDatosRefacciones[$contadorRefaccion]['refaccion'] = 'Bastidor Punzonadora';
+        $arrDatosRefacciones[$contadorRefaccion]['desgaste'] = 'Muy Alto';
+        $arrDatosRefacciones[$contadorRefaccion]['duracion'] = 'Cada mes';
+        $arrDatosRefacciones[$contadorRefaccion]['proximoPedido'] = '09/11/2021';
+        $contadorRefaccion++;
+    }
+
+    if (($ct == '606') || ($ct == 'todos')) { // Datos ficticios
+        $ctR = '606';
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'GOLPEADOR PUNZADORA';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'CAMBIO DE ACEITE Y MANTTO A VALVULA';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '0h 35m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'HIDRAULICA';
+        $contadorManto++;
+
+        //datos refracciones
+        $arrDatosRefacciones[$contadorRefaccion]['ct'] = $ctR;
+        $arrDatosRefacciones[$contadorRefaccion]['maquina'] = 'Punzonadora CUPRA';
+        $arrDatosRefacciones[$contadorRefaccion]['refaccion'] = 'Bastidor Punzonadora';
+        $arrDatosRefacciones[$contadorRefaccion]['desgaste'] = 'Alto';
+        $arrDatosRefacciones[$contadorRefaccion]['duracion'] = 'Cada bimestre';
+        $arrDatosRefacciones[$contadorRefaccion]['proximoPedido'] = '05/11/2021';
+        $contadorRefaccion++;
+
+        $arrDatosRefacciones[$contadorRefaccion]['ct'] = $ctR;
+        $arrDatosRefacciones[$contadorRefaccion]['maquina'] = 'Punzonadora CUPRA';
+        $arrDatosRefacciones[$contadorRefaccion]['refaccion'] = 'Husillos';
+        $arrDatosRefacciones[$contadorRefaccion]['desgaste'] = 'Alto';
+        $arrDatosRefacciones[$contadorRefaccion]['duracion'] = 'Cada bimestre';
+        $arrDatosRefacciones[$contadorRefaccion]['proximoPedido'] = '30/11/2021';
+        $contadorRefaccion++;
+    }
+
+    if (($ct == '613') || ($ct == 'todos')) { // Existe
+        $ctR = '613';
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'MECANISMOS DE MOVIMIENTO CONTINUO';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'INSPECCIÓN';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '0h 30m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'PISADORES';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'CUERPO DE PANELADORA';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'LIMPIEZA';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '1h 00m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Baja';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'LIMPIEZA';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'GUIAS Y CORREDERAS';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'LUBRICANTE Y ENGRASE';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '1h 00m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'MECANICO';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'MODULOS DE COMUNICACIÓN';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'LIMPIEZA E INSPECSION';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '1h 00m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Media';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'ELECTRONICO';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'MOTORES Y VENTILADORES';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'MANTENIMIENTO A MOTOR';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '2h 00m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Baja';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'ELECTRO / MECANICO';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'PISADORES';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'LUBRICACION Y ENGRASE';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '1h 00m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'baja';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'MECANICO';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'PISTONES';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'REVISISON / LUBRICACION AJUSTE DE TORNILLERIA';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '1h 00m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Bja';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'NEUMATICO';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'POLEAS Y BANDAS';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'REVISION DE TENSION Y BANDAS Y POLEAS';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '1h 00m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Media';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'MECANICO';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'TABLERO ELECTRONICO';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'REVISION DE CONEXIONES';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '1h 00m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'ELECTRICO';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'CONTROL DE MAQUINA';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'REVISION DE REQURIMIENTOS DE CONTROL DE HORAS DE MAQUINA';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '1h 00m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'ELECTRICO MECANICO';
+        $contadorManto++;
+
+        // Para Consulta de Refacciones
+        $arrDatosRefacciones[$contadorRefaccion]['ct'] = $ctR;
+        $arrDatosRefacciones[$contadorRefaccion]['maquina'] = 'Paneladora Salvagnini';
+        $arrDatosRefacciones[$contadorRefaccion]['refaccion'] = 'Portacables';
+        $arrDatosRefacciones[$contadorRefaccion]['desgaste'] = 'Alto';
+        $arrDatosRefacciones[$contadorRefaccion]['duracion'] = 'Cada bimestre';
+        $arrDatosRefacciones[$contadorRefaccion]['proximoPedido'] = '28/10/2021';
+        $contadorRefaccion++;
+
+        $arrDatosRefacciones[$contadorRefaccion]['ct'] = $ctR;
+        $arrDatosRefacciones[$contadorRefaccion]['maquina'] = 'Paneladora Salvagnini';
+        $arrDatosRefacciones[$contadorRefaccion]['refaccion'] = 'Lubricación puertas de protección';
+        $arrDatosRefacciones[$contadorRefaccion]['desgaste'] = 'Muy Bajo';
+        $arrDatosRefacciones[$contadorRefaccion]['duracion'] = 'Cada año';
+        $arrDatosRefacciones[$contadorRefaccion]['proximoPedido'] = '05/11/2021';
+        $contadorRefaccion++;
+
+        $arrDatosRefacciones[$contadorRefaccion]['ct'] = $ctR;
+        $arrDatosRefacciones[$contadorRefaccion]['maquina'] = 'Paneladora Salvagnini';
+        $arrDatosRefacciones[$contadorRefaccion]['refaccion'] = 'Lubricación husillos de los motores';
+        $arrDatosRefacciones[$contadorRefaccion]['desgaste'] = 'Muy Bajo';
+        $arrDatosRefacciones[$contadorRefaccion]['duracion'] = 'Cada año';
+        $arrDatosRefacciones[$contadorRefaccion]['proximoPedido'] = '15/11/2021';
+        $contadorRefaccion++;
+
+        $arrDatosRefacciones[$contadorRefaccion]['ct'] = $ctR;
+        $arrDatosRefacciones[$contadorRefaccion]['maquina'] = 'Paneladora Salvagnini';
+        $arrDatosRefacciones[$contadorRefaccion]['refaccion'] = 'Lubricación de carros de guía';
+        $arrDatosRefacciones[$contadorRefaccion]['desgaste'] = 'Muy Bajo';
+        $arrDatosRefacciones[$contadorRefaccion]['duracion'] = 'Cada año';
+        $arrDatosRefacciones[$contadorRefaccion]['proximoPedido'] = '02/12/2021';
+        $contadorRefaccion++;
+    }
+
+    if (($ct == '023') || ($ct == 'todos')) { // Existe
+        $ctR = '023';
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'TABLE ELECTRICO Y COTROL';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'APRIETE Y REVISION DE CONEXIONES';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '0h 45m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'ELECTRICO';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'GOLPEADOR PUNZADORA';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'CAMBIO DE ACEITE Y MANTTO A VALVULA';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '0h 35m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'HIDRAULICA';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'TORRETA AUTO INDEX';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'VERIFICACION DE CENTRAJE';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '0h 30m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'MECANICO';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'GRUPO DE GARRAS';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'REVISION MECANICA Y DE SENSORES AJUSTE DE FRENO';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '0h 20m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'ELECTRO MECANICO';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'ELEMENTOS DE SEGUREIDAD';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'PAROS DE EMERGENCIA ACTUADORES NEUMATICOS';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '0h 30m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'ELECTRO MECANICO';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'CARRO DE CHAPA';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'LUBRICACION Y MANTTO A MOTORES DE TRANSMICION';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '0h 20m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'MECANICO';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'CARRO DESCARGA';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'REVISION DE MESA Y PISTONES DE ELEVACION DE RODILLO';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '0h 30m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'MECANICO';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'CNC';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'MANTENIMIENTO Y SERVOMOTORES Y DRIVE';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '0h 35m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'ELECTRICO ELECTRONICO';
+        $contadorManto++;
+
+        $arrDatosMantoPreventivo[$contadorManto]['ct'] = $ctR;
+        $arrDatosMantoPreventivo[$contadorManto]['parte'] = 'TRANSMISION';
+        $arrDatosMantoPreventivo[$contadorManto]['actividad'] = 'REVISION DE TRANSMICIONES MECANICAS POLEAS Y BANDAS';
+        $arrDatosMantoPreventivo[$contadorManto]['duracion'] = '0h 35m';
+        $arrDatosMantoPreventivo[$contadorManto]['prioridad'] = 'Alta';
+        $arrDatosMantoPreventivo[$contadorManto]['tipo'] = 'Preventivo';
+        $arrDatosMantoPreventivo[$contadorManto]['clasificacion'] = 'MECANICO';
+        $contadorManto++;
+
+        //datos refracciones
+        $arrDatosRefacciones[$contadorRefaccion]['ct'] = $ctR;
+        $arrDatosRefacciones[$contadorRefaccion]['maquina'] = 'Punzonadora CUPRA';
+        $arrDatosRefacciones[$contadorRefaccion]['refaccion'] = 'Bastidor Punzonadora';
+        $arrDatosRefacciones[$contadorRefaccion]['desgaste'] = 'Alto';
+        $arrDatosRefacciones[$contadorRefaccion]['duracion'] = 'Cada bimestre';
+        $arrDatosRefacciones[$contadorRefaccion]['proximoPedido'] = '28/10/2021';
+        $contadorRefaccion++;
+
+        $arrDatosRefacciones[$contadorRefaccion]['ct'] = $ctR;
+        $arrDatosRefacciones[$contadorRefaccion]['maquina'] = 'Punzonadora CUPRA';
+        $arrDatosRefacciones[$contadorRefaccion]['refaccion'] = 'Husillos';
+        $arrDatosRefacciones[$contadorRefaccion]['desgaste'] = 'Alto';
+        $arrDatosRefacciones[$contadorRefaccion]['duracion'] = 'Cada bimestre';
+        $arrDatosRefacciones[$contadorRefaccion]['proximoPedido'] = '10/11/2021';
+        $contadorRefaccion++;
+
+        $arrDatosRefacciones[$contadorRefaccion]['ct'] = $ctR;
+        $arrDatosRefacciones[$contadorRefaccion]['maquina'] = 'Punzonadora CUPRA';
+        $arrDatosRefacciones[$contadorRefaccion]['refaccion'] = 'Mesas';
+        $arrDatosRefacciones[$contadorRefaccion]['desgaste'] = 'Bajo';
+        $arrDatosRefacciones[$contadorRefaccion]['duracion'] = 'Cada semestre';
+        $arrDatosRefacciones[$contadorRefaccion]['proximoPedido'] = '20/12/2021';
+        $contadorRefaccion++;
+
+        $arrDatosRefacciones[$contadorRefaccion]['ct'] = $ctR;
+        $arrDatosRefacciones[$contadorRefaccion]['maquina'] = 'Punzonadora CUPRA';
+        $arrDatosRefacciones[$contadorRefaccion]['refaccion'] = 'Cilindro';
+        $arrDatosRefacciones[$contadorRefaccion]['desgaste'] = 'Muy Alto';
+        $arrDatosRefacciones[$contadorRefaccion]['duracion'] = 'Cada mes';
+        $arrDatosRefacciones[$contadorRefaccion]['proximoPedido'] = '18/11/2021';
+        $contadorRefaccion++;
+
+        $arrDatosRefacciones[$contadorRefaccion]['ct'] = $ctR;
+        $arrDatosRefacciones[$contadorRefaccion]['maquina'] = 'Punzonadora CUPRA';
+        $arrDatosRefacciones[$contadorRefaccion]['refaccion'] = 'Cuchillas';
+        $arrDatosRefacciones[$contadorRefaccion]['desgaste'] = 'Medio';
+        $arrDatosRefacciones[$contadorRefaccion]['duracion'] = 'Cada trimestre';
+        $arrDatosRefacciones[$contadorRefaccion]['proximoPedido'] = '15/11/2021';
+        $contadorRefaccion++;
+
+
+    }
+
+
+    $arrDatos = array();
+    switch ($accion) {
+        case 'buscarMantoPreventivo':
+            $arrDatos = $arrDatosMantoPreventivo;
+            break;
+        case 'buscarRefacciones':
+            $arrDatos = $arrDatosRefacciones;
+            break;
+    }
+
+    // Para utilizarlos en javascript
+    $arrDatosJs = array();
+    foreach ($arrDatos as $Campos) {
+        $arrDatosJs[] = $Campos;
+    }
+    unset($Campos);
+    $strDatosJs = json_encode($arrDatosJs);
+    unset($arrDatosJs);
+
+    $datosRespuesta = $strDatosJs;
+
+}
+
+fin :
+$jsonResponse = array(
+    'estatus' => $estatus,
+    'errorDescripcion' => $errorDescripcion,
+    'datosRespuesta' => $datosRespuesta
+);
+echo json_encode($jsonResponse);

+ 76 - 0
plantasyp/descargarArchivos.php

@@ -0,0 +1,76 @@
+<?php
+
+ob_start(); // Limpia el buffer por errores de salida
+// Permite un mayor tiempo de respuesta del socket
+ini_set('memory_limit', '-1');
+
+$strModulo = $_POST['idModulo'];
+if(empty($strModulo)){
+    $strModulo = 'ERR';
+}
+
+// Variables de respuesta
+$estatus = 'EXITO';
+$errorDescripcion = '';
+$datosRecibidos = array();
+
+if($_SERVER["REQUEST_METHOD"] == "POST") {
+    // Variables Recibidas
+    $accion = $_POST['accion'];
+    // Acciones Válidas
+    $arrAccionesValidas = array('descargarArchivo');
+
+    if(in_array($accion, $arrAccionesValidas)){
+        switch ($accion){
+            case 'descargarArchivo':
+                $ruta = $_POST['ruta'];
+                if(!empty($ruta)){
+                    $nombreArchivo = 'archivo.pdf';
+                    $archivoParaDescargar = base64_decode($ruta);
+
+                    if(file_exists($archivoParaDescargar)){
+                        $arrDatosRuta = explode('/', $archivoParaDescargar);
+                        $nombreArchivo = array_pop($arrDatosRuta);
+
+                        $rData = file_get_contents($archivoParaDescargar);
+                        $data = base64_encode($rData);
+                        $type = 'data:application/octet-stream;base64,';
+
+                        // Enviamos los datos de respuesta
+                        $jsonResponse = array(
+                            'fileName' => $nombreArchivo,
+                            'data' => $data,
+                            'type' => $type
+                        );
+                        echo json_encode($jsonResponse);
+                        exit;
+                    }else{
+                        $estatus = 'ERROR';
+                        $errorDescripcion = 'SPS003 (' . $strModulo . ') - El archivo solicitado no existe.';
+                        goto fin;
+                    }
+                }else{
+                    $estatus = 'ERROR';
+                    $errorDescripcion = 'SPS003 (' . $strModulo . ') - Ocurrió un problema al descargar el archivo.';
+                    goto fin;
+                }
+                break;
+        }
+    }else{
+        $estatus = 'ERROR';
+        $errorDescripcion = 'SPS001 (' . $strModulo . ') - La acción solicitada no es válida.';
+        goto fin;
+    }
+}else{
+    $estatus = 'ERROR';
+    $errorDescripcion = 'SPS002 (' . $strModulo . ') - Ocurrió un error al procesar la petición.';
+    goto fin;
+}
+
+fin :
+$jsonResponse = array(
+    'estatus' => $estatus,
+    'errorDescripcion' => $errorDescripcion,
+    'datosRecibidos' => $datosRecibidos
+);
+echo json_encode($jsonResponse);

+ 875 - 0
plantasyp/detalles.php

@@ -0,0 +1,875 @@
+<?php
+
+    $strModulo = 'detalles';
+
+    $CT_recibido = $_GET['ct'];
+    $maq_recibido = $_GET['maq'];
+
+    $url = 'https://www.solerpalau.mx/plantasyp/datosPlanta.php?ct='.$CT_recibido.'&maq='.$maq_recibido;
+    $opciones = array('http' =>
+        array(
+            'method' => 'GET',
+            'max_redirects' => '0',
+            'ignore_errors' => '1'
+        )
+    );
+
+    /*Ordenes de trabajo*/
+    $strDatos = "";
+    $linkStr = __FILE__;
+    $linkArr = explode("/", $linkStr);
+    $link = end($linkArr) . "?ct=" . $CT_recibido . "&maq=" . $maq_recibido;
+    if($maq_recibido == "315_0"){
+        $strDatos .= "[ \n";
+        $strDatos .= "{ id: 'BI001', CentroDeTrabajo: 'Centro de Trabajo #315', Maquina: 'Rechazadora', NumOrden: '0100', FechaOrden: '22/10/2021' }, \n";
+        $strDatos .= "{ id: 'BI004', CentroDeTrabajo: 'Centro de Trabajo #315', Maquina: 'Rechazadora', NumOrden: '0080', FechaOrden: '01/09/2021' }, \n";
+        $strDatos .= "]; \n";
+    }else if($maq_recibido == "613_0"){
+        $strDatos .= "[ \n";
+        $strDatos .= "{ id: 'BI002', CentroDeTrabajo: 'Centro de Trabajo #613', Maquina: 'Paneladora', NumOrden: '0098', FechaOrden: '18/10/2021' }, \n";
+        $strDatos .= "{ id: 'BI003', CentroDeTrabajo: 'Centro de Trabajo #613', Maquina: 'Paneladora', NumOrden: '0095', FechaOrden: '05/09/2021' }, \n";
+        $strDatos .= "{ id: 'BI005', CentroDeTrabajo: 'Centro de Trabajo #613', Maquina: 'Paneladora', NumOrden: '0075', FechaOrden: '29/08/2021' }, \n";
+        $strDatos .= "]; \n";
+    }else if($maq_recibido == "023_0"){
+        $strDatos .= "[ \n";
+        $strDatos .= "{ id: 'BI006', CentroDeTrabajo: 'Centro de Trabajo #023', Maquina: 'Punzonadora', NumOrden: '0065', FechaOrden: '17/08/2021' }, \n";
+        $strDatos .= "]; \n";
+    }else{
+        $strDatos .= "[]; \n";
+    }
+    /*Fin ordenes de trabajo*/
+
+
+    $contexto = stream_context_create($opciones);
+    $flujo = fopen($url, 'r', false, $contexto);
+    $arrResultadoPeticion = json_decode(stream_get_contents($flujo), true);
+
+    $nombreMaquina = '';
+    $carpetaImagenesMaquinaria = '';
+    $carpetaPdfs = '';
+    $infoGral = '';
+    foreach ($arrResultadoPeticion['datosRespuesta'] as $idCentroT => $arrData){
+        foreach ($arrData['maquinas'] as $clave => $valor){
+            $nombreMaquina = $arrData['maquinas'][$clave]['nombre'];
+            $carpetaImagenesMaquinaria = $arrData['maquinas'][$clave]['carpetaImagenesMaquinaria'];
+            $infoGral = $arrData['maquinas'][$clave]['descripcion'];
+            $carpetaPdfs = $arrData['maquinas'][$clave]['carpetaPdfs'];
+        }
+    }
+
+    // Creamos los elementos para el "carousel" de imágenes
+    $div_carousel_indicators = '';
+    $imagenes_carousel = '';
+    $contador_carousel = 0;
+    if(!empty($carpetaImagenesMaquinaria)){
+        $rutaBusqueda = 'css/layout/site/imgPlanta/maquinas/'.$carpetaImagenesMaquinaria;
+        if(file_exists($rutaBusqueda)){
+            if($directorio = opendir($rutaBusqueda)){
+                while ($archivo = readdir($directorio)){
+                    if (!is_dir($archivo)){
+                        if (($archivo != ".") && ($archivo != "..")) {
+                            $arrArchivo = explode('_', $archivo);
+                            if(strpos($arrArchivo[1], 'principal') === false){
+                                $rutaImg = $rutaBusqueda.'/'.$archivo;
+                                $clase1 = '';
+                                if($contador_carousel == 0){
+                                    $clase1 = 'active';
+                                }
+                                $div_carousel_indicators .= '<button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="'.$contador_carousel.'" class="'.$clase1.' btn-carrusel" aria-current="true" aria-label="Slide '.($contador_carousel+1).'"></button>';
+                                $imagenes_carousel .= '<div class="carousel-item '.$clase1.'">';
+                                $imagenes_carousel .= '<img src="'.$rutaImg.'" class="d-block w-100" alt="...">';
+                                $imagenes_carousel .= '</div>';
+                                $contador_carousel++;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    // Elementos para los Datos Generales
+    $strTbodyEspecificaciones = '';
+    $arrEspecificaciones = array();
+    $arrTextoCol2 = array();
+    // Rechazadora
+    $arrTextoCol2['315'] = 'Rechazadora TLA 550';
+    $arrEspecificaciones['315'][0]['col1'] = 'Espesor AL';
+    $arrEspecificaciones['315'][1]['col1'] = 'Espesor FE';
+    $arrEspecificaciones['315'][2]['col1'] = 'Espesor INOX';
+    $arrEspecificaciones['315'][3]['col1'] = 'Altura puntas';
+    $arrEspecificaciones['315'][4]['col1'] = 'Distancia entre puntas';
+    $arrEspecificaciones['315'][5]['col1'] = 'Velocidad';
+    $arrEspecificaciones['315'][6]['col1'] = 'Empuje';
+    $arrEspecificaciones['315'][7]['col1'] = 'Potencia';
+    $arrEspecificaciones['315'][8]['col1'] = 'Peso';
+    $arrEspecificaciones['315'][0]['col2'] = '5 mm';
+    $arrEspecificaciones['315'][1]['col2'] = '3.5 mm';
+    $arrEspecificaciones['315'][2]['col2'] = '2.2 mm';
+    $arrEspecificaciones['315'][3]['col2'] = '550 mm';
+    $arrEspecificaciones['315'][4]['col2'] = '1150 mm';
+    $arrEspecificaciones['315'][5]['col2'] = '0 1600 m/min';
+    $arrEspecificaciones['315'][6]['col2'] = '1200 kg';
+    $arrEspecificaciones['315'][7]['col2'] = '16 KW';
+    $arrEspecificaciones['315'][8]['col2'] = '3200 kg';
+    // Maquina Láser
+    $arrTextoCol2['316'] = 'Maquina Láser Amada LC 2415';
+    $arrEspecificaciones['316'][0]['col1'] = 'Área de trabajo';
+    $arrEspecificaciones['316'][1]['col1'] = 'Carrera (eje X / Y / Z)';
+    $arrEspecificaciones['316'][2]['col1'] = 'Precisión de posicionamiento';
+    $arrEspecificaciones['316'][3]['col1'] = 'Precisión de reposicionamiento';
+    $arrEspecificaciones['316'][4]['col1'] = 'Velocidad máxima de movimiento';
+    $arrEspecificaciones['316'][5]['col1'] = 'Aceleración máxima';
+    $arrEspecificaciones['316'][6]['col1'] = 'Poder de láser';
+    $arrEspecificaciones['316'][7]['col1'] = 'Peso máximo de carga';
+    $arrEspecificaciones['316'][8]['col1'] = 'Dimensiones generales';
+    $arrEspecificaciones['316'][0]['col2'] = '300mm * 1500mm';
+    $arrEspecificaciones['316'][1]['col2'] = '1525mm / 3025mm / 150mm';
+    $arrEspecificaciones['316'][2]['col2'] = '± 0,03 mm / m';
+    $arrEspecificaciones['316'][3]['col2'] = '± 0,03 mm';
+    $arrEspecificaciones['316'][4]['col2'] = '140 m / min';
+    $arrEspecificaciones['316'][5]['col2'] = '1.5G';
+    $arrEspecificaciones['316'][6]['col2'] = '1.5KW ~ 4KW';
+    $arrEspecificaciones['316'][7]['col2'] = '700KG';
+    $arrEspecificaciones['316'][8]['col2'] = '4900 × 2250 × 1700 mm';
+    // Balanceadora
+    $arrTextoCol2['559'] = 'Balanceadora Hofmann CVW - B';
+    $arrEspecificaciones['559'][0]['col1'] = 'Peso máximo (kg)';
+    $arrEspecificaciones['559'][1]['col1'] = 'Comp. Cama (mm)';
+    $arrEspecificaciones['559'][2]['col1'] = 'Rotor';
+    $arrEspecificaciones['559'][3]['col1'] = 'Hoja de balance (RPM)';
+    $arrEspecificaciones['559'][4]['col1'] = 'Desencadenar (CV)';
+    $arrEspecificaciones['559'][5]['col1'] = 'Cardán (CV)';
+    $arrEspecificaciones['559'][6]['col1'] = 'Planos de compensación';
+    $arrEspecificaciones['559'][7]['col1'] = 'Accionado';
+    $arrEspecificaciones['559'][8]['col1'] = 'Medición computarizada';
+    $arrEspecificaciones['559'][0]['col2'] = '15,500';
+    $arrEspecificaciones['559'][1]['col2'] = '3000';
+    $arrEspecificaciones['559'][2]['col2'] = '2400';
+    $arrEspecificaciones['559'][3]['col2'] = '300 - 1500';
+    $arrEspecificaciones['559'][4]['col2'] = '30,0';
+    $arrEspecificaciones['559'][5]['col2'] = '50';
+    $arrEspecificaciones['559'][6]['col2'] = '2,3';
+    $arrEspecificaciones['559'][7]['col2'] = 'Correa, Cardán o ambos';
+    $arrEspecificaciones['559'][8]['col2'] = 'Balsis 3.0';
+    // Dobladora Amada
+    $arrTextoCol2['606'] = 'Dobladora Amada HG-1303';
+    $arrEspecificaciones['606'][0]['col1'] = 'Peso máximo';
+    $arrEspecificaciones['606'][1]['col1'] = 'Peso de la maquina';
+    $arrEspecificaciones['606'][2]['col1'] = 'Entre columnas';
+    $arrEspecificaciones['606'][3]['col1'] = 'Longitud OA (en Total))';
+    $arrEspecificaciones['606'][4]['col1'] = 'Control';
+    $arrEspecificaciones['606'][5]['col1'] = 'Repetibilidad';
+    $arrEspecificaciones['606'][6]['col1'] = 'Accionamiento';
+    $arrEspecificaciones['606'][7]['col1'] = 'Longitud máxima de flexión';
+    $arrEspecificaciones['606'][8]['col1'] = 'Distancia entre marcos laterales';
+    $arrEspecificaciones['606'][9]['col1'] = 'Longitud Total';
+    $arrEspecificaciones['606'][10]['col1'] = 'Altura total';
+    $arrEspecificaciones['606'][0]['col2'] = '55 toneladas';
+    $arrEspecificaciones['606'][1]['col2'] = '7,940 Lbs.';
+    $arrEspecificaciones['606'][2]['col2'] = '2.7 m';
+    $arrEspecificaciones['606'][3]['col2'] = '3.1 m';
+    $arrEspecificaciones['606'][4]['col2'] = 'CNC (AMNC3i)';
+    $arrEspecificaciones['606'][5]['col2'] = '0.00004" (±0.001016 mm)';
+    $arrEspecificaciones['606'][6]['col2'] = 'Híbrido';
+    $arrEspecificaciones['606'][7]['col2'] = '82.1';
+    $arrEspecificaciones['606'][8]['col2'] = '59.93';
+    $arrEspecificaciones['606'][9]['col2'] = '89.00”';
+    $arrEspecificaciones['606'][10]['col2'] = '76.00”';
+    // Paneladora Salvagnini
+    $arrTextoCol2['613'] = 'Paneladora Salvagnini P22116';
+    $arrEspecificaciones['613'][0]['col1'] = 'Longitud máxima formato en entrada (mm)';
+    $arrEspecificaciones['613'][1]['col1'] = 'Anchura máxima formato en entrada (mm)';
+    $arrEspecificaciones['613'][2]['col1'] = 'Diagonal máxima de giro (mm)';
+    $arrEspecificaciones['613'][3]['col1'] = 'Fuerza máxima de plegado (cuchillas) (kN)';
+    $arrEspecificaciones['613'][4]['col1'] = 'Fuerza máxima de fijación (kN)';
+    $arrEspecificaciones['613'][5]['col1'] = 'Longitud máxima de plegado (mm)';
+    $arrEspecificaciones['613'][6]['col1'] = 'Altura máxima de plegado (mm)';
+    $arrEspecificaciones['613'][7]['col1'] = 'Espesor mínimo (mm)';
+    $arrEspecificaciones['613'][8]['col1'] = 'Espesor máximo y ángulo de plegado acero, UTS 410 N/mm2 (mm)';
+    $arrEspecificaciones['613'][9]['col1'] = 'Espesor máximo y ángulo de plegado acero inoxidable, UTS 660 N/mm2 (mm)';
+    $arrEspecificaciones['613'][10]['col1'] = 'Espesor máximo y ángulo de plegado aluminio, UTS 265 N/mm2 (mm)';
+    $arrEspecificaciones['613'][11]['col1'] = 'Consumo medio (kW)';
+    $arrEspecificaciones['613'][12]['col1'] = 'Nivel de ruido (Directiva de Máquinas 2006/42/CE) (dB)';
+    $arrEspecificaciones['613'][0]['col2'] = '2495';
+    $arrEspecificaciones['613'][1]['col2'] = '1600';
+    $arrEspecificaciones['613'][2]['col2'] = '2500';
+    $arrEspecificaciones['613'][3]['col2'] = '330';
+    $arrEspecificaciones['613'][4]['col2'] = '530';
+    $arrEspecificaciones['613'][5]['col2'] = '2180';
+    $arrEspecificaciones['613'][6]['col2'] = '165';
+    $arrEspecificaciones['613'][7]['col2'] = '0.4';
+    $arrEspecificaciones['613'][8]['col2'] = '3.2 (±90°)<br>2.5 (±120°)<br>2.1 (±135°)';
+    $arrEspecificaciones['613'][9]['col2'] = '2.5 (±90°)<br>2.1 (±120°)<br>1.6 (±130°)';
+    $arrEspecificaciones['613'][10]['col2'] = '4.0 (±120°)<br>3.5 (±130°)';
+    $arrEspecificaciones['613'][11]['col2'] = '3.0';
+    $arrEspecificaciones['613'][12]['col2'] = '68';
+    // Punzadora
+    $arrTextoCol2['023'] = 'Punzadora AE 610';
+    $arrEspecificaciones['023'][0]['col1'] = 'Capacidad de prensa (KN)';
+    $arrEspecificaciones['023'][1]['col1'] = 'Precisión de posicionamiento (mm)';
+    $arrEspecificaciones['023'][2]['col1'] = 'Número de estaciones';
+    $arrEspecificaciones['023'][3]['col1'] = 'Bastidor de la máquina';
+    $arrEspecificaciones['023'][4]['col1'] = 'Distancia de recorrido del eje (mm)';
+    $arrEspecificaciones['023'][5]['col1'] = 'Longitud';
+    $arrEspecificaciones['023'][6]['col1'] = 'Anchura';
+    $arrEspecificaciones['023'][7]['col1'] = 'Altura';
+    $arrEspecificaciones['023'][8]['col1'] = 'Peso';
+    $arrEspecificaciones['023'][0]['col2'] = '200';
+    $arrEspecificaciones['023'][1]['col2'] = '± 0.1';
+    $arrEspecificaciones['023'][2]['col2'] = '45';
+    $arrEspecificaciones['023'][3]['col2'] = 'Marco de puente';
+    $arrEspecificaciones['023'][4]['col2'] = '2500x 1525';
+    $arrEspecificaciones['023'][5]['col2'] = '4998';
+    $arrEspecificaciones['023'][6]['col2'] = '5120';
+    $arrEspecificaciones['023'][7]['col2'] = '2265';
+    $arrEspecificaciones['023'][8]['col2'] = '13800';
+
+    $arrColores = array();
+    $arrColores['315']['estadoGral'] = 'color-perso';
+    $arrColores['315']['ciclo'] = 'color-perso';
+    $arrColores['315']['edoRefa'] = 'color-perso';
+
+    $arrColores['316']['estadoGral'] = 'color-perso';
+    $arrColores['316']['ciclo'] = 'color-perso';
+    $arrColores['316']['edoRefa'] = 'color-perso';
+
+    $arrColores['559']['estadoGral'] = 'color-perso';
+    $arrColores['559']['ciclo'] = 'color-perso';
+    $arrColores['559']['edoRefa'] = 'color-perso';
+
+    $arrColores['606']['estadoGral'] = 'color-perso';
+    $arrColores['606']['ciclo'] = 'color-perso';
+    $arrColores['606']['edoRefa'] = 'color-perso';
+
+    $arrColores['613']['estadoGral'] = 'color-perso';
+    $arrColores['613']['ciclo'] = 'color-perso';
+    $arrColores['613']['edoRefa'] = 'color-perso';
+
+    $arrColores['023']['estadoGral'] = 'color-perso';
+    $arrColores['023']['ciclo'] = 'bg-danger';
+    $arrColores['023']['edoRefa'] = 'bg-warning';
+
+    /* Atrasado - rojo && Sin Inventarios -> Amarillo */
+    // Operativa
+    // Al corriente
+    // Disponibles
+
+    $arrTextos = array();
+    $arrTextos['color-perso'] = 'estadoGral';
+    $arrTextos['bg-danger'] = 'Atrasado';
+    $arrTextos['bg-warning'] = 'Sin Inventarios';
+
+
+    //if($arrColores[$CT_recibido]['estadoGral'] == 'color-perso'){
+        $texto1 = 'Operativa';
+    //}
+
+    if($arrColores[$CT_recibido]['ciclo'] == 'color-perso'){
+        $texto2 = 'Al Corriente';
+    }elseif ($arrColores[$CT_recibido]['ciclo'] == 'bg-danger'){
+        $texto2 = 'Atrasado';
+    }
+
+    if($arrColores[$CT_recibido]['edoRefa'] == 'color-perso'){
+        $texto3 = 'Disponible';
+    }elseif ($arrColores[$CT_recibido]['edoRefa'] == 'bg-warning'){
+        $texto3 = 'Sin Inventario';
+    }
+
+
+    $numRow = 1;
+    foreach ($arrEspecificaciones[$CT_recibido] as $clave => $arrDetalles){
+        $c1 = $arrDetalles['col1'];
+        $c2 = $arrDetalles['col2'];
+        $strTbodyEspecificaciones .= '<tr>';
+        $strTbodyEspecificaciones .= '<th scope="row">'.$numRow.'</th>';
+        $strTbodyEspecificaciones .= '<td>'.$c1.'</td>';
+        $strTbodyEspecificaciones .= '<td>'.$c2.'</td>';
+        $strTbodyEspecificaciones .= '</tr>';
+        $numRow++;
+    }
+
+    // Creamos los elementos para Documentos Electrónicos
+    $tbodyPdfs = '';
+    $contadorArchivos = 1;
+    if(!empty($carpetaPdfs)){
+        if(file_exists($carpetaPdfs)){
+            if($directorio = opendir($carpetaPdfs)){
+                while ($archivo = readdir($directorio)){
+                    if (!is_dir($archivo)){
+                        if (($archivo != ".") && ($archivo != "..")) {
+                            //echo $archivo.'<br>';
+                            $tbodyPdfs .= '<tr>';
+                            $tbodyPdfs .= '<td class="celdaTabla">&nbsp;</td>';
+                            $tbodyPdfs .= '<td class="celdaTabla">'.$contadorArchivos.'</td>';
+                            $tbodyPdfs .= '<td class="celdaTabla">'.$archivo.'</td>';
+
+                            $tbodyPdfs .= '<td class="celdaTabla">';
+                            $rutaPDF = $carpetaPdfs.$archivo;
+                            $tbodyPdfs .= '<button id="btnP' . $contadorArchivos . '" data-dojo-type="dijit/form/Button" type="button" ';
+                            $tbodyPdfs .= 'data-dojo-props="showLabel:true,iconClass:\'dijitIttecPdf\'" ';
+                            $tbodyPdfs .= 'onclick="descargar(\'' . base64_encode($rutaPDF) . '\', \'PDF\')">Descargar PDF</button>';
+                            $tbodyPdfs .= '</td>';
+
+                            $tbodyPdfs .= '<td class="celdaTabla">&nbsp;</td>';
+                            $tbodyPdfs .= '</tr>';
+                            $contadorArchivos++;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+$textoCol2 = $arrTextoCol2[$CT_recibido];
+$titulo = $nombreMaquina . ' (Centro de Trabajo '.$CT_recibido.')';
+
+if(empty($tbodyPdfs)){
+    $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>';
+}
+
+?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="imagetoolbar" content="no" />
+<link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Poppins:400,500,700,300,600">
+<link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans">
+<link media="screen" rel="stylesheet" type="text/css" href="css/principal.css" />
+<!--<link media="screen" rel="stylesheet" type="text/css" href="css/pagination.css"  />--> <!--Paginador-->
+    <link rel="shortcut icon" type="image/x-icon" href="css/layout/global/sp.ico" />
+    <link media="screen" rel="stylesheet" type="text/css" href="css/chunk-vendors.3b8eb8e0.css" /> <!--CSS de los rectangulos-->
+
+    <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dijit/themes/claro/claro.css">
+    <link rel="stylesheet" href="css/carrusel.css">
+    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
+    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
+    <script src="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dojo/dojo.js" data-dojo-config="async: true, parseOnLoad:true"></script>
+
+    <!--<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.2/jquery.min.js'></script>-->
+
+    <style type="text/css">
+        /* Estilos para el DataGrid */
+        @import "//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojox/grid/resources/claroGrid.css";
+        @import "//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/resources/dojo.css";
+        @import "//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dijit/themes/claro/claro.css";
+        @import "//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dijit/themes/claro/document.css";
+        @import "//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojox/grid/enhanced/resources/claro/EnhancedGrid.css";
+        @import "//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojox/grid/enhanced/resources/EnhancedGrid_rtl.css";
+        #Grid_MantoPreventivo, #Grid_Refacciones {
+            height: 400px;
+        }
+
+        .btn-carrusel:focus{outline:none !important;}
+
+        .card {
+            position:relative;
+            display:flex;
+            flex-direction:column;
+            min-width:0;
+            word-wrap:break-word;
+            background-color:#fff;
+            background-clip:border-box;
+            border:1px solid rgba(0,0,0,.125);
+            border-radius:.25rem
+        }
+        .color-perso{
+            background-color: #1e9e20 !important;
+        }
+
+        .color-dataGral{
+            background-color: rgba(250,245,250,0.5);
+        }
+
+        .padre{
+            width: 100%;
+            display: flex;
+            justify-content: center;
+        }
+
+        .carousel-perso{
+            margin: 0 100px 0 100px !important;
+        }
+
+        .dijitIttecPdf {
+            background-image: url("css/layout/site/lsPDF.gif");
+            background-position: 1px;
+            background-repeat: no-repeat;
+            width: 14px;
+            height: 14px;
+        }
+
+    </style>
+
+    <script type="application/javascript">
+        // Cargamos los complementos de dojo
+        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",
+                "dojo/store/Memory", "dijit/form/FilteringSelect", "dijit/form/Button", "dojo/dom-class", "dijit/Dialog",
+                "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",
+                "dijit/ProgressBar", "dijit/ConfirmDialog", "dojo/dom-style", "dijit/form/ComboButton", "dijit/Menu", "dijit/MenuItem", "dijit/MenuSeparator", "dijit/Tooltip", "dijit/form/Form", "dijit/form/TextBox",
+                "dojox/grid/enhanced/plugins/Filter", "dijit/form/ValidationTextBox", "dijit/form/NumberSpinner", "dojo/request", "dojo/parser"],
+            function(dom, fx, array, query, domConstruct, dijit, style, ready, on, win,
+                     Memory, FilteringSelect, Button, domClass, Dialog,
+                     lang, DataGrid, ItemFileWriteStore, DnDConfig, EnhancedGrid, Selector, indirectSelection, nestedSorting,
+                     ProgressBar, ConfirmDialog, style, ComboButton, Menu, MenuItem, MenuSeparator, Tooltip, Form, TextBox, filter, ValidationTextBox, NumberSpinner, request) {
+
+                const idModulo = "<?php echo($strModulo);?>";
+                const CT_recibido = "<?php echo($CT_recibido); ?>";
+                const maq_recibido = "<?php echo($maq_recibido); ?>";
+
+                /*Datos ordenes de trabajo*/
+                const datos = <?php echo $strDatos; ?>
+
+                crearTabla = function (datos) {
+                    domConstruct.empty('TBREGISTROS');
+                    if (datos.length > 0) {
+                        for (const key in datos) {
+                            var trRegistro = domConstruct.create('tr', { class: '' }, 'TBREGISTROS');
+                            var tdVacioInicio = domConstruct.create('td', { class: 'celdaTabla', innerHTML: '' }, trRegistro);
+                            // Centro de Trabajo
+                            var CentroDeTrabajo = datos[key]['CentroDeTrabajo'];
+                            var tdCentroDeTrabajo = domConstruct.create('td', { class: 'celdaTabla', innerHTML: CentroDeTrabajo }, trRegistro);
+                            // Máquina
+                            var Maquina = datos[key]['Maquina'];
+                            var tdMaquina = domConstruct.create('td', { class: 'celdaTabla', innerHTML: Maquina }, trRegistro);
+                            // # De Orden
+                            var NumOrden = datos[key]['NumOrden'];
+                            var tdNumOrden = domConstruct.create('td', { class: 'celdaTabla', innerHTML: NumOrden }, trRegistro);
+                            // Fecha de laOrden
+                            var FechaOrden = datos[key]['FechaOrden'];
+                            var tdFechaOrden = domConstruct.create('td', { class: 'celdaTabla', innerHTML: FechaOrden }, trRegistro);
+                            // Acciones
+                            var tdAcciones = domConstruct.create('td', { class: 'celdaTabla', innerHTML: '' }, trRegistro);
+                            var btnPdf = domConstruct.create('button', { type: 'button' }, tdAcciones);
+                            new Button({
+                                label: 'Orden de Trabajo',
+                                iconClass: 'dijitIconTask',
+                                showLabel: false,
+                                onClick: function () {
+                                    pdf(datos[key]['NumOrden']);
+                                }
+                            }, btnPdf).startup();
+                            var btnAbrir = domConstruct.create('button', { type: 'button' }, tdAcciones);
+                            new Button({
+                                label: 'Revisar Archivo',
+                                iconClass: 'dijitIconFolderOpen',
+                                showLabel: false,
+                                onClick: function () {
+                                    abrir(datos[key]['NumOrden']);
+                                }
+                            }, btnAbrir).startup();
+                            var tdVacioFinal = domConstruct.create('td', { class: 'celdaTabla', innerHTML: '' }, trRegistro);
+                        }
+
+                    }else{
+                        var trRegistro = domConstruct.create('tr', { class: '', innerHTML: '<td width="100%" colspan="20" class="celdaTabla" style="text-align:center;font-weight:bold;padding:8px;">Usted no cuenta con los permisos necesarios.</td>' }, 'TBREGISTROS');
+                    }
+
+                }
+                /**************************/
+
+                // Para Mostrar de Mensajes de "error o éxito"
+                var dgEjecuta = new Dialog({title: 'Procesando...', style: 'width:300px'});
+                var pbMarcar = new ProgressBar({value: Number.POSITIVE_INFINITY, layoutAlign: 'left'});
+                dgEjecuta.setContent(pbMarcar);
+                dgResultadoError = new ConfirmDialog({ title:"<b>Error</b>", style: "min-width:300px; heigth; auto" });
+                style.set(dgResultadoError.cancelButton.domNode, 'display', 'none');
+                dgResultadoExito = new ConfirmDialog({ title:"<b>Éxito</b>", style: "min-width:300px; heigth; auto" });
+                style.set(dgResultadoExito.cancelButton.domNode, 'display', 'none');
+
+
+                /****************************************************************** Botones ******************************************************************/
+
+
+                /****************************************************************** Acciones ******************************************************************/
+                descargar = function (ruta, opcion) {
+                    dgEjecuta.set("title", "Descargando...");
+                    dgEjecuta.show();
+
+                    accion = "descargarArchivo";
+
+                    request.post('descargarArchivos.php', {
+                        data: {
+                            accion: accion,
+                            idModulo: idModulo,
+                            ruta: ruta
+                        }
+                    }).then(
+                        function(response) {
+                            var objResponse = JSON.parse(response);
+                            if(objResponse['estatus'] == "ERROR"){
+                                dgEjecuta.hide();
+                                dgResultadoError.setContent(objResponse['errorDescripcion']);
+                                dgResultadoError.show();
+                            }else{
+                                var data = objResponse['data'];
+                                var type = objResponse['type'];
+                                var datosArchivoSalida = objResponse['type'] + objResponse['data'];
+                                var nombreArchivoSalida = objResponse['fileName'];
+
+                                if(navigator.msSaveBlob){ // Adaptación para IE
+                                    var blob = new Blob([s2ab(atob(data))],{
+                                        type: type
+                                    });
+                                    navigator.msSaveBlob(blob, nombreArchivoSalida);
+                                    dgEjecuta.hide();
+                                }else{
+                                    // Creamos los elementos para descargar
+                                    var spanDescarga = domConstruct.toDom('<span>Para recuperar el archivo, haz click en el siguiente enlace: </span>');
+                                    domConstruct.place(spanDescarga, 'contenidoDescarga');
+
+                                    var tipo = accion;
+                                    var idElemento = "elementoA_"+tipo;
+                                    var linkDescarga = domConstruct.toDom('<a href="' + datosArchivoSalida + '" id="'+idElemento+'" download="' + nombreArchivoSalida + '">'+nombreArchivoSalida+'</a>');
+                                    domConstruct.place(linkDescarga, 'contenidoDescarga');
+
+                                    // Evento requerido para cuando no se ejecuta el evento click automáticamente (especialmente en dispositivos móviles)
+                                    var clickEjecutado = false;
+                                    on(linkDescarga, "click", function (evt) {
+                                        clickEjecutado = true;
+                                        spanDescarga.remove();
+                                        linkDescarga.remove();
+                                        divDescargas.hide();
+
+                                    });
+
+                                    linkDescarga.click();
+                                    dgEjecuta.hide();
+
+                                    if(clickEjecutado == false){
+                                        var tituloDescarga = "<b>Descarga</b>";
+                                        divDescargas.set("title", tituloDescarga);
+                                        divDescargas.show();
+                                    }
+                                }
+                            }
+                        }
+                    );
+
+                };
+
+                cargarGrid = function (idGrid, ct, maq){
+                    dgEjecuta.set("title", "Consultando...");
+                    dgEjecuta.show();
+
+                    var accion = "";
+                    var resdatosRecibidos = "datosRespuesta";
+                    var posicionDom = "";
+
+                    if(idGrid == "id_Grid_MantoPreventivo"){
+                        accion = "buscarMantoPreventivo";
+                        posicionDom = "Grid_MantoPreventivo";
+                    }else if(idGrid == "id_Grid_Refacciones"){
+                        accion = "buscarRefacciones";
+                        posicionDom = "Grid_Refacciones";
+                    }
+
+                    request.post("datosPlanta.php", {
+                        data: {
+                            accion: accion,
+                            idModulo: idModulo,
+                            ct: ct,
+                            maq: maq
+                        }
+                    }).then(
+                        function (response) {
+                            var objResponse = JSON.parse(response);
+                            if (objResponse['estatus'] == "ERROR") {
+                                dgEjecuta.hide();
+                                dgResultadoError.setContent(objResponse['errorDescripcion']);
+                                dgResultadoError.show();
+                            } else {
+                                let datosRecibidos = objResponse[resdatosRecibidos];
+
+                                // Configuramos el data store
+                                var data = {
+                                    identifier: "id",
+                                    items: []
+                                };
+
+                                // Creamos la lista de objetos
+                                var data_list = JSON.parse(datosRecibidos);
+
+                                for(var i = 0, l = data_list.length; i < data_list.length; i++){
+                                    data.items.push(lang.mixin({ id: i+1 }, data_list[i%l]));
+                                }
+                                var store = new ItemFileWriteStore({data: data});
+
+                                // Destruimos el dataGrid si ya existe
+                                if (dijit.byId(idGrid)){
+                                    dijit.byId(idGrid).destroy();
+                                }
+
+                                if(idGrid == "id_Grid_MantoPreventivo"){
+                                    var estructuralayout = [[
+                                        /*{'name': 'Line Number', 'field': 'id', 'width': '80px', 'datatype':'number'},*/
+                                        {'name': 'Parte', 'field': 'parte', 'width': '250px', 'datatype':'string'},
+                                        {'name': 'Actividad', 'field': 'actividad', 'width': '250px', 'datatype':'string'},
+                                        {'name': 'Duración', 'field': 'duracion', 'width': '250px', 'datatype':'string'},
+                                        {'name': 'Prioridad', 'field': 'prioridad', 'width': '250px', 'datatype':'string'},
+                                        {'name': 'Tipo', 'field': 'tipo', 'width': '250px', 'datatype':'string'},
+                                        {'name': 'Clasificación 1', 'field': 'clasificacion', 'width': '250px', 'datatype':'string'}
+                                    ]];
+                                }else if(idGrid == "id_Grid_Refacciones"){
+                                    var estructuralayout = [[
+                                        {'name': 'Máquina', 'field': 'maquina', 'width': '250px', 'datatype':'string'},
+                                        {'name': 'Refacción', 'field': 'refaccion', 'width': '250px', 'datatype':'string'},
+                                        {'name': 'Desgaste', 'field': 'desgaste', 'width': '250px', 'datatype':'string'},
+                                        {'name': 'Duración', 'field': 'duracion', 'width': '250px', 'datatype':'string'},
+                                        {'name': 'Próximo Pedido', 'field': 'proximoPedido', 'width': '250px', 'datatype':'string'}
+                                    ]];
+                                }
+
+                                var grid = new EnhancedGrid({
+                                    id: idGrid,
+                                    store: store,
+                                    structure: estructuralayout,
+                                    autoHeight: false,
+                                    autoWidth: false,
+                                    rowSelector: '20px',
+                                    noDataMessage: 'No se encontraron datos',
+                                    canSort: function () {
+                                        return true;
+                                    }, // Filtra
+                                    plugins: {
+                                        nestedSorting: true,
+                                        /*filter: {
+                                            // Show the closeFilterbarButton at the filter bar
+                                            closeFilterbarButton: false,
+                                            // Set the maximum rule count to 5
+                                            ruleCount: 5,
+                                            // Set the name of the items
+                                            itemsName: "registros"
+                                        }*/
+                                    }
+                                });
+
+
+                                // Cargamos el dataGrid en el div
+                                grid.placeAt(posicionDom);
+                                // Inicializamos el dataGrid
+                                grid.startup();
+
+                                dgEjecuta.hide();
+                            }
+                        }
+                    );
+
+                };
+
+
+                ready(function() {
+                    // Actualizar el tamaño del TabContainer en función del tamaño de página
+                    var ventana = win.getBox();
+                    var strVentana = (ventana.h-170)+"px";
+                    style.set(dijit.byId("djTab").id, { height:strVentana });
+                    dijit.byId("djTab").resize();
+
+                    // Actualizar el tamaño del TabContainer en función del tamaño de página
+                    on(window, "resize", function() {
+                        var ventana = win.getBox();
+                        var strVentana = (ventana.h-170)+"px";
+                        style.set(dijit.byId("djTab").id, { height:strVentana });
+                        dijit.byId("djTab").resize();
+                    });
+                    // Eliminar la cortina de entrada
+                    fx.fadeOut({node: dom.byId("loadingOverlay"), duration: 1}).play();
+                    setTimeout(function () {
+                        domConstruct.destroy("loadingOverlay");
+                    }, 1);
+
+                    on(dijit.byId("ContentPane_MantoPreventivo"),"show", function(){
+                        cargarGrid("id_Grid_MantoPreventivo", CT_recibido, maq_recibido);
+                    });
+                    on(dijit.byId("ContentPane_Refacciones"),"show", function(){
+                        cargarGrid("id_Grid_Refacciones", CT_recibido, maq_recibido);
+                    });
+
+                    // Para cuando cierran el divisor que contiene las descargas
+                    divDescargas.on("Cancel", function (evt) {
+                        var contenido = document.getElementById("contenidoDescarga");
+                        while (contenido.firstChild) {
+                            contenido.removeChild(contenido.firstChild);
+                        }
+                    });
+                    crearTabla(datos);
+
+                });
+            });
+        function abrir(numOrden){ document.getElementById("numOrden").value = numOrden; document.getElementById("frmAbrir").submit(); }
+        function pdf(numOrden){ document.getElementById("pdf").value = numOrden; document.getElementById("frmPDF").submit(); }
+
+        // Función para convertir string a un array buffer (Necesario para descargar en IE)
+        function s2ab(s) {
+            var buf = new ArrayBuffer(s.length);
+            var view = new Uint8Array(buf);
+            for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
+            return buf;
+        }
+    </script>
+
+</head>
+
+<body class="claro">
+<div id="loadingOverlay" class="loadingOverlay pageOverlay">
+    <div class="loadingMessage">Espere...</div>
+</div>
+
+<!-- Divisor para guardar las descargas -->
+<div data-dojo-type="dijit/Dialog" data-dojo-id="divDescargas" title="Descarga" style="top:0; position: absolute">
+    <div id="contenidoDescarga" style="min-width:200px; min-height: 100px"></div>
+</div>
+
+<div id="wrapper_container_module">
+    <div id="wrapper_table" style="position:relative;">
+        <div data-dojo-type="dijit/form/Form" id="frm" data-dojo-id="frm" encType="multipart/form-data"
+             action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" style="position:relative;">
+            <script type="dojo/on" data-dojo-event="submit">return true;</script>
+            <div id="wrapper_table_head"><?php echo($titulo); ?></div>
+            <div id="wrapper_table_body_mod_app">
+
+                <div class="row" style="margin-bottom: 10px">
+                    <div class="col-12 col-sm-4 col-md-4 col-lg-4">
+                        <div class="card card-inverse <?php echo($arrColores[$CT_recibido]['estadoGral']); ?>">
+                            <div class="box color-perso text-center"><h1 class="font-light text-white"><?php echo($texto1); ?></h1><h6
+                                        class="text-white">Estado General</h6></div>
+                        </div>
+                    </div>
+
+                    <div class="col-12 col-sm-4 col-md-4 col-lg-4">
+                        <div class="card card-inverse <?php echo($arrColores[$CT_recibido]['ciclo']); ?>">
+                            <div class="box text-center"><h1 class="font-light text-white"><?php echo($texto2); ?></h1><h6
+                                        class="text-white">Ciclo de Mantenimiento</h6></div>
+                        </div>
+                    </div>
+                    <div class="col-12 col-sm-4 col-md-4 col-lg-4">
+                        <div class="card card-inverse <?php echo($arrColores[$CT_recibido]['edoRefa']); ?>">
+                            <div class="box text-center"><h1 class="font-light text-white"><?php echo($texto3); ?></h1><h6
+                                        class="text-white">Estado de Refacciones</h6></div>
+                        </div>
+                    </div>
+                </div>
+
+                <div id="djTab" data-dojo-type="dijit/layout/TabContainer" data-dojo-props="tabPosition:'top'" style="width:100%;">
+                    <div data-dojo-type="dijit/layout/ContentPane" title="Datos Generales" data-dojo-props="selected:true, iconClass:'dijitIconFile'">
+                        <div style="width: 40%; float:left">
+                            <div class="padre">
+                                <div class="" style="max-width: 66.66%; text-align: center" >
+                                    <div class="card card-inverse color-dataGral" style="padding: 20px">
+                                        <div class="box text-center" >
+                                            <h6 class="text-black"><?php echo($infoGral);?></h6></div>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+
+                        <div style="width: 60%; float:right">
+                            <table class="table table-striped">
+                                <thead>
+                                    <tr>
+                                        <th scope="col" style="border-top: none"><b>#</b></th>
+                                        <th scope="col" style="border-top: none"><b>Especificaciones Técnicas</b></th>
+                                        <th scope="col" style="border-top: none"><b><?php echo($textoCol2); ?><b></th>
+                                    </tr>
+                                </thead>
+                                <tbody>
+                                <?php echo($strTbodyEspecificaciones); ?>
+                                </tbody>
+                            </table>
+                        </div>
+                    </div>
+
+                    <div data-dojo-type="dijit/layout/ContentPane" title="Fotografías" data-dojo-props="iconClass:'dijitEditorIcon dijitEditorIconInsertImage'">
+                        <!--Colocar slider-->
+                        <?php if(!empty($div_carousel_indicators)){ ?>
+                        <div id="carouselExampleCaptions" class="carousel slide carousel-perso" data-bs-ride="carousel">
+                            <div class="carousel-indicators">
+                                <?php echo($div_carousel_indicators); ?>
+                            </div>
+                            <div class="carousel-inner">
+                                <?php echo($imagenes_carousel); ?>
+                            </div>
+                            <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide="prev">
+                                <span class="carousel-control-prev-icon" aria-hidden="true"></span>
+                                <span class="visually-hidden">Previous</span>
+                            </button>
+                            <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide="next">
+                                <span class="carousel-control-next-icon" aria-hidden="true"></span>
+                                <span class="visually-hidden">Next</span>
+                            </button>
+                        </div>
+                        <?php } ?>
+                    </div>
+
+                    <div id="ContentPane_MantoPreventivo" data-dojo-type="dijit/layout/ContentPane" title="Ciclo de Mantenimiento Preventivo" data-dojo-props="iconClass:'dijitIconUndo'">
+                        <div style="margin-top: 15px">
+                            <div id="Grid_MantoPreventivo"></div>
+                        </div>
+                    </div>
+
+                    <div id="ContentPane_OrdenesManto" data-dojo-type="dijit/layout/ContentPane" title="Órdenes de Mantenimiento" data-dojo-props="iconClass:'dijitEditorIcon dijitEditorIconPaste'">
+                        <table width="100%" height="auto" cellpadding="0" cellspacing="0">
+                            <thead>
+                            <tr>
+                                <td width="3%" class="encabezadoTabla"> &nbsp; </td>
+                                <td width="20%" class="encabezadoTabla"> Centro de Trabajo </td>
+                                <td width="20%" class="encabezadoTabla"> Máquina </td>
+                                <td width="18%" class="encabezadoTabla"> # De Orden </td>
+                                <td width="18%" class="encabezadoTabla"> Fecha de la Orden </td>
+                                <td width="18%" class="encabezadoTabla">Acciones</td>
+                                <td width="3%" class="encabezadoTabla"> &nbsp; </td>
+                            </tr>
+                            </thead>
+
+                            <tbody id="TBREGISTROS">
+                            </tbody>
+                        </table>
+                    </div>
+
+                    <div id="ContentPane_Refacciones" data-dojo-type="dijit/layout/ContentPane" title="Refacciones" data-dojo-props="iconClass:'dijitIconSample'">
+                        <div style="margin-top: 15px">
+                            <div id="Grid_Refacciones"></div>
+                        </div>
+                    </div>
+                    <div data-dojo-type="dijit/layout/ContentPane" title="Documentos Electrónicos" data-dojo-props="iconClass:'dijitIconDocuments'">
+                        <table width="100%" height="auto" cellpadding="0" cellspacing="0">
+
+                            <thead>
+                            <tr>
+                                <td width="3%" class="encabezadoTabla"> &nbsp; </td>
+                                <td width="20%" class="encabezadoTabla"> # </td>
+                                <td width="50%" class="encabezadoTabla"> Nombre Archivo </td>
+                                <td width="24%" class="encabezadoTabla"> Acciones </td>
+                                <td width="3%" class="encabezadoTabla"> &nbsp; </td>
+                            </tr>
+                            </thead>
+
+                            <tbody id="TBPDFS">
+                                <?php echo($tbodyPdfs); ?>
+                            </tbody>
+
+                        </table>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <form id="frmAbrir" action="bitacorasDeMantenimiento_FR.php" method="post">
+            <input type="hidden" value="" id="numOrden" name="numOrden">
+            <input type="hidden" value="<?php echo $link; ?>" id="from" name="from">
+        </form>
+        <form id="frmPDF" action="bitacorasDeMantenimiento_FR.php" method="post" target="_blank">
+            <input type="hidden" value="" id="pdf" name="pdf">
+        </form>
+
+    </div>
+</div>
+
+<script type="application/javascript">
+
+</script>
+
+</body>
+

+ 343 - 0
plantasyp/docElectronicos.php

@@ -0,0 +1,343 @@
+<?php
+$strModulo = 'docElectronicos';
+
+$arrCT = array();
+//$url = 'https://www.solerpalau.mx/plantasyp/datosPlanta.php';
+$url = 'https://www.solerpalau.mx/plantasyp/datosPlanta.php';
+$opciones = array('http' =>
+    array(
+        'method' => 'GET',
+        'max_redirects' => '0',
+        'ignore_errors' => '1'
+    )
+);
+
+$contexto = stream_context_create($opciones);
+$flujo = fopen($url, 'r', false, $contexto);
+$arrResultadoPeticion = json_decode(stream_get_contents($flujo), true);
+
+$arrCT[0]['idCT'] = 'todos';
+$arrCT[0]['name'] = 'Todos';
+$contadorCT = 1;
+foreach ($arrResultadoPeticion['datosRespuesta'] as $clave => $valor){
+    $arrCT[$contadorCT]['idCT'] = $clave;
+    $arrCT[$contadorCT]['name'] = $clave;
+    $contadorCT++;
+}
+
+$jsonCentrosT = json_encode($arrCT);
+
+$arrCentrosTrabajo = array();
+$arrCentrosTrabajo['315'] = 'docs/315/Rechazadora ZENN-200/';
+$arrCentrosTrabajo['316'] = '';
+$arrCentrosTrabajo['559'] = '';
+$arrCentrosTrabajo['606'] = '';
+$arrCentrosTrabajo['613'] = 'docs/613/Salvagnini/';
+$arrCentrosTrabajo['023'] = 'docs/023/Punzonadora CUPRA/';
+
+
+$CT_recibido = '';
+if($_SERVER['REQUEST_METHOD'] == "POST"){
+    $CT_recibido = $_POST['select_CentroTrabajo'];
+    if($CT_recibido != 'todos'){
+        foreach ($arrCentrosTrabajo as $claveCT => $carpetaPdfs){
+            if($claveCT != $CT_recibido){
+                unset($arrCentrosTrabajo[$claveCT]);
+            }
+        }
+    }
+}
+
+
+// Creamos los elementos para Documentos Electrónicos
+$tbodyPdfs = '';
+$contadorArchivos = 1;
+foreach ($arrCentrosTrabajo as $claveCT => $carpetaPdfs){
+    if(!empty($carpetaPdfs)){
+        if(file_exists($carpetaPdfs)){
+            if($directorio = opendir($carpetaPdfs)){
+                while ($archivo = readdir($directorio)){
+                    if (!is_dir($archivo)){
+                        if (($archivo != ".") && ($archivo != "..")) {
+                            //echo $archivo.'<br>';
+                            $tbodyPdfs .= '<tr>';
+                            $tbodyPdfs .= '<td class="celdaTabla">&nbsp;</td>';
+                            $tbodyPdfs .= '<td class="celdaTabla">'.$contadorArchivos.'</td>';
+                            $tbodyPdfs .= '<td class="celdaTabla">'.$claveCT.'</td>';
+                            $tbodyPdfs .= '<td class="celdaTabla">'.$archivo.'</td>';
+
+                            $tbodyPdfs .= '<td class="celdaTabla">';
+                            $rutaPDF = $carpetaPdfs.$archivo;
+                            $tbodyPdfs .= '<button id="btnP' . $contadorArchivos . '" data-dojo-type="dijit/form/Button" type="button" ';
+                            $tbodyPdfs .= 'data-dojo-props="showLabel:true,iconClass:\'dijitIttecPdf\'" ';
+                            $tbodyPdfs .= 'onclick="descargar(\'' . base64_encode($rutaPDF) . '\', \'PDF\')">Descargar PDF</button>';
+                            $tbodyPdfs .= '</td>';
+
+                            $tbodyPdfs .= '<td class="celdaTabla">&nbsp;</td>';
+                            $tbodyPdfs .= '</tr>';
+                            $contadorArchivos++;
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+if(empty($tbodyPdfs)){
+    $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>';
+}
+
+?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="imagetoolbar" content="no" />
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Poppins:400,500,700,300,600">
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans">
+    <link media="screen" rel="stylesheet" type="text/css" href="css/principal.css" />
+    <link media="screen" rel="stylesheet" type="text/css" href="css/pagination.css"  /> <!--Paginador-->
+    <link rel="shortcut icon" type="image/x-icon" href="css/layout/global/sp.ico" />
+
+    <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dijit/themes/claro/claro.css">
+    <script src="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dojo/dojo.js" data-dojo-config="async: true, parseOnLoad:true"></script>
+
+    <script type="application/javascript">
+        // Cargamos los complementos de dojo
+        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",
+                "dojo/store/Memory", "dijit/form/FilteringSelect", "dijit/form/Button", "dojo/dom-class", "dijit/Dialog",
+                "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",
+                "dijit/ProgressBar", "dijit/ConfirmDialog", "dojo/dom-style", "dijit/form/ComboButton", "dijit/Menu", "dijit/MenuItem", "dijit/MenuSeparator", "dijit/Tooltip", "dijit/form/Form", "dijit/form/TextBox",
+                "dojox/grid/enhanced/plugins/Filter", "dijit/form/ValidationTextBox", "dijit/form/NumberSpinner", "dojo/request", "dojo/parser"],
+            function(dom, fx, array, query, domConstruct, dijit, style, ready, on, win,
+                     Memory, FilteringSelect, Button, domClass, Dialog,
+                     lang, DataGrid, ItemFileWriteStore, DnDConfig, EnhancedGrid, Selector, indirectSelection, nestedSorting,
+                     ProgressBar, ConfirmDialog, style, ComboButton, Menu, MenuItem, MenuSeparator, Tooltip, Form, TextBox, filter, ValidationTextBox, NumberSpinner, request) {
+
+                const idModulo = "<?php echo($strModulo);?>";
+                const arrCentrosT = <?php echo($jsonCentrosT); ?>;
+                const CT_recibido = "<?php echo($CT_recibido); ?>";
+
+                // Para Mostrar de Mensajes de "error o éxito"
+                var dgEjecuta = new Dialog({title: 'Procesando...', style: 'width:300px'});
+                var pbMarcar = new ProgressBar({value: Number.POSITIVE_INFINITY, layoutAlign: 'left'});
+                dgEjecuta.setContent(pbMarcar);
+                dgResultadoError = new ConfirmDialog({ title:"<b>Error</b>", style: "min-width:300px; heigth; auto" });
+                style.set(dgResultadoError.cancelButton.domNode, 'display', 'none');
+                dgResultadoExito = new ConfirmDialog({ title:"<b>Éxito</b>", style: "min-width:300px; heigth; auto" });
+                style.set(dgResultadoExito.cancelButton.domNode, 'display', 'none');
+
+                /****************************************************************** Inputs ******************************************************************/
+                new FilteringSelect({
+                    id: "select_CentroTrabajo",
+                    name: "select_CentroTrabajo",
+                    store: new Memory({ idProperty: "idCT", data: arrCentrosT }),
+                    autoComplete: true,
+                    maxHeight: 300,
+                    style: "width: 100%;",
+                    placeHolder: "Seleccione una opción",
+                    onChange: function(idCt){
+                    }
+                }, "select_CentroTrabajo");
+
+                /****************************************************************** Botones ******************************************************************/
+                new Button({
+                    id: "btn_Buscar",
+                    label: "Buscar",
+                    iconClass: "dijitIconSearch",
+                    showLabel: false,
+                    onClick: function(){
+                        let centroT = dijit.byId('select_CentroTrabajo').value;
+                        if(centroT != ""){
+                            dijit.byId("frm").submit();
+                        }
+                    }
+                }, "btn_Buscar").startup();
+
+                descargar = function (ruta, opcion) {
+                    dgEjecuta.set("title", "Descargando...");
+                    dgEjecuta.show();
+
+                    accion = "descargarArchivo";
+
+                    request.post('descargarArchivos.php', {
+                        data: {
+                            accion: accion,
+                            idModulo: idModulo,
+                            ruta: ruta
+                        }
+                    }).then(
+                        function(response) {
+                            var objResponse = JSON.parse(response);
+                            if(objResponse['estatus'] == "ERROR"){
+                                dgEjecuta.hide();
+                                dgResultadoError.setContent(objResponse['errorDescripcion']);
+                                dgResultadoError.show();
+                            }else{
+                                var data = objResponse['data'];
+                                var type = objResponse['type'];
+                                var datosArchivoSalida = objResponse['type'] + objResponse['data'];
+                                var nombreArchivoSalida = objResponse['fileName'];
+
+                                if(navigator.msSaveBlob){ // Adaptación para IE
+                                    var blob = new Blob([s2ab(atob(data))],{
+                                        type: type
+                                    });
+                                    navigator.msSaveBlob(blob, nombreArchivoSalida);
+                                    dgEjecuta.hide();
+                                }else{
+                                    // Creamos los elementos para descargar
+                                    var spanDescarga = domConstruct.toDom('<span>Para recuperar el archivo, haz click en el siguiente enlace: </span>');
+                                    domConstruct.place(spanDescarga, 'contenidoDescarga');
+
+                                    var tipo = accion;
+                                    var idElemento = "elementoA_"+tipo;
+                                    var linkDescarga = domConstruct.toDom('<a href="' + datosArchivoSalida + '" id="'+idElemento+'" download="' + nombreArchivoSalida + '">'+nombreArchivoSalida+'</a>');
+                                    domConstruct.place(linkDescarga, 'contenidoDescarga');
+
+                                    // Evento requerido para cuando no se ejecuta el evento click automáticamente (especialmente en dispositivos móviles)
+                                    var clickEjecutado = false;
+                                    on(linkDescarga, "click", function (evt) {
+                                        clickEjecutado = true;
+                                        spanDescarga.remove();
+                                        linkDescarga.remove();
+                                        divDescargas.hide();
+
+                                    });
+
+                                    linkDescarga.click();
+                                    dgEjecuta.hide();
+
+                                    if(clickEjecutado == false){
+                                        var tituloDescarga = "<b>Descarga</b>";
+                                        divDescargas.set("title", tituloDescarga);
+                                        divDescargas.show();
+                                    }
+                                }
+                            }
+                        }
+                    );
+
+                };
+
+                ready(function() {
+                    // Actualizar el tamaño del TabContainer en función del tamaño de página
+                    var ventana = win.getBox();
+                    var strVentana = (ventana.h-75-50)+"px";
+                    style.set(dijit.byId("djTab").id, { height:strVentana });
+                    dijit.byId("djTab").resize();
+
+                    // Actualizar el tamaño del TabContainer en función del tamaño de página
+                    on(window, "resize", function() {
+                        var ventana = win.getBox();
+                        var strVentana = (ventana.h-75-50)+"px";
+                        style.set(dijit.byId("djTab").id, { height:strVentana });
+                        dijit.byId("djTab").resize();
+                    });
+                    // Eliminar la cortina de entrada
+                    fx.fadeOut({node: dom.byId("loadingOverlay"), duration: 1}).play();
+                    setTimeout(function () {
+                        domConstruct.destroy("loadingOverlay");
+                    }, 1);
+
+                    // Para cuando cierran el divisor que contiene las descargas
+                    divDescargas.on("Cancel", function (evt) {
+                        var contenido = document.getElementById("contenidoDescarga");
+                        while (contenido.firstChild) {
+                            contenido.removeChild(contenido.firstChild);
+                        }
+                    });
+
+                    if(CT_recibido != ""){
+                        dijit.byId('select_CentroTrabajo').set("value", CT_recibido);
+                    }
+
+                });
+            });
+
+        // Función para convertir string a un array buffer (Necesario para descargar en IE)
+        function s2ab(s) {
+            var buf = new ArrayBuffer(s.length);
+            var view = new Uint8Array(buf);
+            for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
+            return buf;
+        }
+    </script>
+
+    <style type="text/css">
+        .dijitIttecPdf {
+            background-image: url("css/layout/site/lsPDF.gif");
+            background-position: 1px;
+            background-repeat: no-repeat;
+            width: 14px;
+            height: 14px;
+        }
+    </style>
+</head>
+
+<body class="claro">
+<div id="loadingOverlay" class="loadingOverlay pageOverlay">
+    <div class="loadingMessage">Espere...</div>
+</div>
+
+<!-- Divisor para guardar las descargas -->
+<div data-dojo-type="dijit/Dialog" data-dojo-id="divDescargas" title="Descarga" style="top:0; position: absolute">
+    <div id="contenidoDescarga" style="min-width:200px; min-height: 100px"></div>
+</div>
+
+<div id="wrapper_container_module">
+    <div id="wrapper_table" style="position:relative;">
+        <div data-dojo-type="dijit/form/Form" id="frm" data-dojo-id="frm" encType="multipart/form-data"
+             action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" style="position:relative;">
+
+            <script type="dojo/on" data-dojo-event="submit">return true;</script>
+
+            <div id="wrapper_table_head">Documentos Electrónicos</div>
+            <div id="wrapper_table_body_mod_app">
+                <table width="100%" height="auto" border="0" style="border-spacing: 5px;">
+                    <tr>
+                        <td width="10%" colspan="2" class="etiquetaFormulario">
+                            <label class="noTopPadding">Centro de Trabajo:</label>
+                        </td>
+                        <td width="20%" colspan="4">
+                            <input id="select_CentroTrabajo" name="select_CentroTrabajo"/>
+                        </td>
+                        <td width="70%" colspan="14">
+                            <button id="btn_Buscar" type="button"></button>
+                        </td>
+                    </tr>
+                </table>
+
+
+                <div id="djTab" data-dojo-type="dijit/layout/TabContainer" data-dojo-props="tabPosition:'top'" style="width:100%;">
+                    <div data-dojo-type="dijit/layout/ContentPane" title="Lista de Documentos" data-dojo-props="selected:true">
+
+                        <table width="100%" height="auto" cellpadding="0" cellspacing="0">
+                            <thead>
+                            <tr>
+                                <td width="3%" class="encabezadoTabla"> &nbsp; </td>
+                                <td width="10%" class="encabezadoTabla"> # </td>
+                                <td width="20%" class="encabezadoTabla">Centro de Trabajo</td>
+                                <td width="39%" class="encabezadoTabla"> Nombre Archivo </td>
+                                <td width="25%" class="encabezadoTabla"> Acciones </td>
+                                <td width="3%" class="encabezadoTabla"> &nbsp; </td>
+                            </tr>
+                            </thead>
+
+                            <tbody id="TBPDFS">
+                            <?php echo($tbodyPdfs); ?>
+                            </tbody>
+                        </table>
+
+                    </div>
+                </div>
+
+            </div>
+        </div>
+    </div>
+</div>
+
+</body>
+

+ 137 - 0
plantasyp/energia.php

@@ -0,0 +1,137 @@
+<?php
+    $strModulo = 'PRUEBA';
+?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="imagetoolbar" content="no" />
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Poppins:400,500,700,300,600">
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans">
+    <link media="screen" rel="stylesheet" type="text/css" href="css/principal.css" />
+    <!--<link media="screen" rel="stylesheet" type="text/css" href="css/pagination.css"  />--> <!--Paginador-->
+    <link rel="shortcut icon" type="image/x-icon" href="css/layout/global/sp.ico" />
+
+    <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dijit/themes/claro/claro.css">
+    <script src="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dojo/dojo.js" data-dojo-config="async: true, parseOnLoad:true"></script>
+
+    <script type="application/javascript">
+        // Cargamos los complementos de dojo
+        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",
+                "dojo/store/Memory", "dijit/form/FilteringSelect", "dijit/form/Button", "dojo/dom-class", "dijit/Dialog",
+                "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",
+                "dijit/ProgressBar", "dijit/ConfirmDialog", "dojo/dom-style", "dijit/form/ComboButton", "dijit/Menu", "dijit/MenuItem", "dijit/MenuSeparator", "dijit/Tooltip", "dijit/form/Form", "dijit/form/TextBox",
+                "dojox/grid/enhanced/plugins/Filter", "dijit/form/ValidationTextBox", "dijit/form/NumberSpinner", "dojo/request", "dojo/parser"],
+            function(dom, fx, array, query, domConstruct, dijit, style, ready, on, win,
+                     Memory, FilteringSelect, Button, domClass, Dialog,
+                     lang, DataGrid, ItemFileWriteStore, DnDConfig, EnhancedGrid, Selector, indirectSelection, nestedSorting,
+                     ProgressBar, ConfirmDialog, style, ComboButton, Menu, MenuItem, MenuSeparator, Tooltip, Form, TextBox, filter, ValidationTextBox, NumberSpinner, request) {
+
+                const idModulo = "<?php echo($strModulo);?>";
+
+                // Para Mostrar de Mensajes de "error o éxito"
+                var dgEjecuta = new Dialog({title: 'Procesando...', style: 'width:300px'});
+                var pbMarcar = new ProgressBar({value: Number.POSITIVE_INFINITY, layoutAlign: 'left'});
+                dgEjecuta.setContent(pbMarcar);
+                dgResultadoError = new ConfirmDialog({ title:"<b>Error</b>", style: "min-width:300px; heigth; auto" });
+                style.set(dgResultadoError.cancelButton.domNode, 'display', 'none');
+                dgResultadoExito = new ConfirmDialog({ title:"<b>Éxito</b>", style: "min-width:300px; heigth; auto" });
+                style.set(dgResultadoExito.cancelButton.domNode, 'display', 'none');
+
+
+                /****************************************************************** Botones ******************************************************************/
+                // Limpiar
+                new Button({
+                    label: "Limpiar",
+                    iconClass: "dijitEditorIcon dijitEditorIconRemoveFormat",
+                    showLabel: true,
+                    onClick: function() {
+                        dijit.byId("frm").submit();
+                    }
+                }, "BTNLIMPIAR").startup();
+
+                // Buscar
+                new Button({
+                    id: "BTNBUSCAR",
+                    label: "Buscar",
+                    iconClass: "dijitIcon dijitIconDatabase",
+                    showLabel: true,
+                    onClick: function(){
+                        alert("Buscando");
+                    }
+                }, "BTNBUSCAR").startup();
+
+
+                ready(function() {
+                    // Actualizar el tamaño del TabContainer en función del tamaño de página
+                    var ventana = win.getBox();
+                    var strVentana = (ventana.h-110)+"px";
+                    var strVentanaPan = (ventana.h-75)+"px";
+                    //style.set(dijit.byId("djTab").id, { height:strVentana });
+                    style.set(dom.byId("framePanel"), "height", strVentanaPan);
+                    //dijit.byId("djTab").resize();
+
+                    // Actualizar el tamaño del TabContainer en función del tamaño de página
+                    on(window, "resize", function() {
+                        var ventana = win.getBox();
+                        var strVentana = (ventana.h-75-100)+"px";
+                        //style.set(dijit.byId("djTab").id, { height:strVentana });
+                        style.set(dom.byId("framePanel"), "height", strVentana);
+                        //dijit.byId("djTab").resize();
+                    });
+                    // Eliminar la cortina de entrada
+                    fx.fadeOut({node: dom.byId("loadingOverlay"), duration: 1}).play();
+                    setTimeout(function () {
+                        domConstruct.destroy("loadingOverlay");
+                    }, 1);
+
+                });
+            });
+    </script>
+
+</head>
+
+<body class="claro">
+<div id="loadingOverlay" class="loadingOverlay pageOverlay">
+    <div class="loadingMessage">Espere...</div>
+</div>
+
+<div id="wrapper_container_module">
+    <div id="wrapper_table" style="position:relative;">
+        <div data-dojo-type="dijit/form/Form" id="frm" data-dojo-id="frm" encType="multipart/form-data"
+             action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" style="position:relative;">
+            <script type="dojo/on" data-dojo-event="submit">return true;</script>
+            <div id="wrapper_table_head">Panel de Control de Energía</div>
+            <div id="wrapper_table_body_mod_app">
+                <!--<table width="100%" height="auto">
+                    <tr>
+                        <td width="100%" colspan="20" align="center">
+                    </tr>
+
+                    <tr>
+                        <td width="100%" colspan="20" align="center">
+                            <button id="BTNBUSCAR" type="button"></button>
+                            <button id="BTNLIMPIAR" type="button"></button>
+                        </td>
+                    </tr>
+                </table>-->
+                <iframe id="framePanel" src="shared/panel_energia/index.html" frameborder="0" style="width:100%;"></iframe>
+
+
+                <!--<div id="djTab" data-dojo-type="dijit/layout/TabContainer" data-dojo-props="tabPosition:'top'" style="width:100%;">
+                    <div data-dojo-type="dijit/layout/ContentPane" title="Panel de Control" data-dojo-props="selected:true">
+                        <div style="margin-top: 15px">
+                            <div id="div_GridPrincipal">
+                                <iframe id="framePanel" src="panel/index.html" frameborder="0" style="width:100%;"></iframe>
+                            </div>
+                        </div>
+                    </div>
+                </div>-->
+            </div>
+        </div>
+    </div>
+</div>
+
+</body>
+

+ 424 - 0
plantasyp/index.php

@@ -0,0 +1,424 @@
+<?php
+/*
+	Sistema de Portales de Soler y Palau SA de CV
+	(2021) Desarrollos y Servicios en Tecnología Inteligente S de RL de CV
+	Versión 1.0
+	Última Actualización: 05/08/2021
+	Código del Módulo: GBL001
+*/
+
+	$strModulo = 'GBL001';
+	/*require_once('shared/conexionBaseDatos.php');
+	require_once('shared/conexionBaseDatosCtl.php');
+	require_once('shared/encriptacion.php');
+	require_once('shared/iniciaSesion.php');
+	require_once('shared/funciones.php');*/
+
+    $bolErrorLogin = false;	// Predefine que no hay error para el login
+    $bolErrorApp = false;	// Predefine que no hay errores para la aplicación
+    $bolBloqueo = false;	// Predefine que no hay bloqueos de acceso por Usuario / IP
+    $bolSinPerfil = false;	// Predefine que no se rechaza el acceso por falta de Perfiles asociados
+
+	if((!empty($_POST['usuario'])) && (!empty($_POST['contrasena'])) && (!$bolErrorApp) && (!$bolBloqueo)) {
+        $user = trim($_POST['usuario']);
+        $contra = trim($_POST['contrasena']);
+
+        if((intval($user) == 10) && ($contra == 'admin')){
+            $q = '';
+            header('Location: acceso.php'.$q);
+            exit;
+        }else{
+            $bolErrorLogin = true;
+            goto fin;
+        }
+	}
+
+
+	// Destruye cualquier sesión existente para el usuario
+	//session_destroy();
+
+	// Si se disparó un error por Perfil impide que se dispare simultáneamente un error de Aplicación
+	if($bolSinPerfil==true) { $bolErrorApp == false; }
+	// Si se recibió un parámetro de acceso directo, lo mantiene vivo dentro de la petición.
+	/*if(!empty($_GET['q'])) {
+		$q = $_SERVER['PHP_SELF'].'?q='.urlencode($_GET['q']);
+    } elseif(!empty($_GET['p'])) { // Para Proveedores
+    	$q = $_SERVER['PHP_SELF'].'?p='.urlencode($_GET['p']);
+    }else{
+    	$q = $_SERVER['PHP_SELF'];
+    }*/
+
+	fin :
+    $mensajeError = '';
+    if($bolBloqueo){
+    	$mensajeError = '<b>Acceso Bloqueado</b> <br> Contacte al Administrador.';
+    }
+    if($bolErrorLogin){
+    	$mensajeError = '<b>Acceso Denegado</b> <br> Usuario o contraseña incorrecto.';
+    }
+    if($bolErrorApp){
+    	$mensajeError = '<b>Servicio No Disponible</b> <br> Intente nuevamente más tarde.';
+    }
+    if($bolSinPerfil){
+    	$mensajeError = '<b>El usuario no tiene Perfiles relacionados</b>';
+    }
+
+    ?>
+    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+    <html xmlns="http://www.w3.org/1999/xhtml">
+    <head>
+    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    	<meta http-equiv="imagetoolbar" content="no" />
+    	<title>Bienvenido al Smart Portal de S&amp;P</title>
+    	<link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Poppins:400,500,700,300,600">
+    	<link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans">
+    	<!-- <link media="screen" rel="stylesheet" type="text/css" href="css/admin-login.css" /> -->
+    	<link rel="shortcut icon" type="image/x-icon" href="css/layout/global/sp.ico" />
+
+    	<meta name="viewport" content="width=device-width, user-scalable=yes">
+    	<!-- <meta name="theme-color" content="#dc3545"> -->
+    	<meta name="theme-color" content="#EC161E">
+
+    	<link rel="stylesheet" href="https://s3-us-west-2.amazonaws.com/s.cdpn.io/3/vivify.min.css">
+    	<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.0/css/bootstrap.min.css">
+
+    	<link href="https://fonts.googleapis.com/icon?family=Material+Icons"
+    	rel="stylesheet">
+
+    	<script type="text/JavaScript" src="js/front.js"></script>
+    	<script type="text/JavaScript">if(top.location != self.location)top.location = self.location;</script>
+
+    	<script>
+
+    		function crearIframe(){
+    			var link = "lp/mantenimiento.php";
+    			var iframe = document.createElement('iframe');
+    			iframe.frameBorder=0;
+    			iframe.width="100%";
+    			iframe.height="400px";
+    			iframe.id="randomid";
+    			iframe.setAttribute("src", link);
+    			document.getElementById("iframeIn").appendChild(iframe);
+    		}
+
+    	</script>
+    </head>
+    <body>
+
+    	<!-- header -->
+    	<div class="container-fluid">
+    		<div class="row">
+    			<nav class="navbar navbar-light bg-white col-sm-12">
+    				<div class="col-sm-6 col-9">
+    					<a class="navbar-brand" href="#">
+    						<img src="css/layout/global/header_logo_1.png" width="245"  class="align-top mb-2 img-fluid" alt="S&P Mexico">
+    					</a>
+    				</div>
+    				<div class="col-sm-6 col-6 d-none d-sm-block">
+    					<a class="form-inline float-right" href="#">
+    						<img src="css/layout/global/SPA861201DK4_PDF.jpg" width="100" class="img-fluid" alt="Soler Y Palau Ventilation Group">
+    					</a>
+    				</div>
+    			</nav>
+    		</div>
+    		<div class="row">
+    			<div class="barra-roja">
+    				<div id="titulo"> Planta S&P </div>
+    			</div>
+    		</div>
+    	</div>
+    	<!-- body section -->
+        <div class="container">
+            <div id="iframeIn"></div>
+            <div class="col-12 col-sm-9 col-md-7 col-lg-5 col-xl-4 mx-auto" id="login">
+                <div class="card card-signin my-2 vivify animationObject popInTop">
+                    <div class="card-body">
+                        <h4 class="card-title text-center mb-2">Iniciar Sesión</h4>
+
+                        <form class="form-signin" action="index.php"
+                              onsubmit=""
+                              method="POST">
+
+                            <div class="form-label-group">
+                                <input type="text" id="inputUser" name="usuario" class="form-control" placeholder=""
+                                       required autofocus="">
+                                <label for="inputUser">
+                                    <i class="material-icons" style="vertical-align: middle;">person</i>
+                                    Usuario
+                                </label>
+                            </div>
+
+                            <div class="form-label-group">
+                                <input type="password" id="inputPassword" name="contrasena" class="form-control"
+                                       placeholder="" required>
+                                <label for="inputPassword">
+                                    <i class="material-icons" style="vertical-align: middle;">lock</i>
+                                    Contraseña</label>
+                            </div>
+                            <div class="vivify animationObject shake m-1 text-center"
+                                <?php if ($mensajeError === ''): ?>
+                                    style="display:none;background: "
+                                <?php endif; ?>
+                            >
+                                <label class="text-dark text-center">
+                                    <?php echo $mensajeError; ?>
+                                </label>
+                            </div>
+                            <button class="btn btn-lg btn-danger btn-block" type="submit">ACCEDER</button>
+                        </form>
+                    </div>
+                </div>
+            </div>
+        </div>
+
+    	<!-- footer -->
+    	<div class="container-fluid">
+    		<div class="row">
+    			<footer class="text-left">
+    				<label class="ml-2">
+    					Copyright © <?php echo date('Y'); ?> <b class="font-weight-bold">S&P México.</b> Todos los derechos reservados.
+    				</label>
+    				<label class="footer_terminos">
+    					<a class="text-white" href="http://www.soler-palau.mx/terminos-condiciones.php" target="_new"> &nbsp; Términos y Condiciones</a>
+
+    					<a class="text-white" href="http://www.soler-palau.mx/politicas-privacidad.php" target="_new"> | Políticas de Privacidad</a>
+
+    					<a class="text-white" href="http://www.soler-palau.mx/aviso-privacidad.php" target="_new"> | Aviso de Privacidad</a>
+    				</label>
+    			</footer>
+    		</div>
+    	</div>
+
+    	<!-- modals aviso -->
+    	<div class="modal fade bd-example-modal-lg" id="modal-aviso" tabindex="-1" role="dialog" aria-labelledby="modal-aviso" aria-hidden="true">
+    	  <div class="modal-dialog modal-lg">
+    	  	<button type="button" class="close" data-dismiss="modal" aria-label="Close" style="cursor: pointer;">
+    	  		<span aria-hidden="true">&times;</span>
+    	  	</button>
+    	    <div class="modal-content p-4">
+    	    	<img class="img-fluid" src="https://sportalsolerpalau.mx/portalsp/Avisos/AVISOCXC.png">
+    	    </div>
+    	  </div>
+    	</div>
+    </body>
+    <!-- <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script> -->
+    <!-- <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" ></script> -->
+    <script>
+		// modal aviso
+    	// $('#modal-aviso').modal('show');
+    </script>
+
+    </html>
+<style>
+
+    :root {
+        --input-padding-x: 1.6rem;
+        --input-padding-y: .75rem;
+    }
+
+    .barra-roja {
+        background-image: url("css/layout/login/wrapper_bg.gif");
+        height: 80px;
+        width: 100%;
+    }
+
+    #titulo {
+
+        height: 40px;
+        width: auto;
+        color: #fff;
+        font-family: Poppins, ​Helvetica, ​sans-serif;
+        font-size: 30px;
+        font-weight: 200;
+        line-height: 40px;
+        text-align: right;
+        padding-right: 20px;
+        padding-top: 15px;
+    }
+
+    #login {
+        margin-top: 2rem;
+
+    }
+
+    footer {
+        border-top: 8px solid #D6D4D4;
+        background-color: #333;
+        position: absolute;
+        bottom: 0;
+        width: 100%;
+        height: 52px;
+        color: white;
+        font-size: 12px;
+        font-weight: 300;
+        font-family: 'Open Sans', sans-serif;
+        line-height: 24px;
+        padding: 8px;
+    }
+
+
+    .btn-danger {
+        color: #fff;
+        background-color: #ec161e;
+        border-color: #ec161e;
+
+    }
+
+    .card-signin {
+        border: 2px solid #f90000;
+        border-radius: 1rem;
+        box-shadow: 0 0.3rem 0.2rem 0 rgba(101, 101, 101, 0.75);
+    }
+
+
+    .card-signin .card-body {
+        padding: 2rem;
+
+    }
+
+    .form-signin {
+        width: 100%;
+    }
+
+    .form-signin .btn {
+        font-size: 90%;
+        border-radius: 5rem;
+        letter-spacing: .1rem;
+        font-weight: bold;
+        padding: 0.6rem;
+        transition: all 0.2s;
+    }
+
+    .form-label-group {
+        position: relative;
+        margin-bottom: 1rem;
+    }
+
+    .form-label-group input {
+        height: auto;
+        border-radius: 2rem;
+    }
+
+    .form-label-group > input,
+    .form-label-group > label {
+        padding: var(--input-padding-y) var(--input-padding-x);
+    }
+
+    .form-label-group input:not(:placeholder-shown) ~ label > i {
+        font-size: 11px;
+    }
+
+    .form-label-group > label {
+        position: absolute;
+        top: 0;
+        left: 0;
+        display: block;
+        width: 100%;
+        margin-bottom: 0;
+        /* Override default `<label>` margin */
+        line-height: 1.5;
+        color: #495057;
+        border: 1px solid transparent;
+        border-radius: .25rem;
+        transition: all .1s ease-in-out;
+    }
+
+    .form-label-group input::-webkit-input-placeholder {
+        color: transparent;
+    }
+
+    .form-label-group input:-ms-input-placeholder {
+        color: transparent;
+    }
+
+    .form-label-group input::-ms-input-placeholder {
+        color: transparent;
+    }
+
+    .form-label-group input::-moz-placeholder {
+        color: transparent;
+    }
+
+    .form-label-group input::placeholder {
+        color: transparent;
+    }
+
+    .form-label-group input:not(:placeholder-shown) {
+        padding-top: calc(var(--input-padding-y) + var(--input-padding-y) * (2 / 3));
+        padding-bottom: calc(var(--input-padding-y) / 3);
+    }
+
+    .form-label-group input:not(:placeholder-shown) ~ label {
+        padding-top: calc(var(--input-padding-y) / 3);
+        padding-bottom: calc(var(--input-padding-y) / 3);
+        font-size: 12px;
+        color: #777;
+    }
+
+    /* Fallback for all
+    -------------------------------------------------- */
+    @media (min-width: 1500px) {
+        #login {
+            margin-top: 8rem;
+        }
+
+    }
+
+    /* Alto maximo 590*/
+    @media (max-height: 590px) {
+        footer {
+            position: relative;
+
+        }
+    }
+
+    @media (max-width: 777px) {
+        .footer_terminos {
+            display: none;
+        }
+
+        footer {
+            height: auto;
+        }
+    }
+
+    /*Pantallas pequeñas*/
+    @media (max-width: 540px) {
+
+
+        #login {
+            margin-top: 2rem;
+            margin-bottom: 3rem;
+        }
+    }
+
+
+    /* Fallback for Edge
+    -------------------------------------------------- */
+
+    @supports (-ms-ime-align: auto) {
+        .form-label-group > label {
+            display: none;
+        }
+
+        .form-label-group input::-ms-input-placeholder {
+            color: #777;
+        }
+    }
+
+    /* Fallback for IE
+    -------------------------------------------------- */
+
+    @media all and (-ms-high-contrast: none),
+    (-ms-high-contrast: active) {
+        .form-label-group > label {
+            display: none;
+        }
+
+        .form-label-group input:-ms-input-placeholder {
+            color: #777;
+        }
+    }
+
+
+</style>

+ 136 - 0
plantasyp/indicadores.php

@@ -0,0 +1,136 @@
+<?php
+    $strModulo = 'PRUEBA';
+?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="imagetoolbar" content="no" />
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Poppins:400,500,700,300,600">
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans">
+    <link media="screen" rel="stylesheet" type="text/css" href="css/principal.css" />
+    <!--<link media="screen" rel="stylesheet" type="text/css" href="css/pagination.css"  />--> <!--Paginador-->
+    <link rel="shortcut icon" type="image/x-icon" href="css/layout/global/sp.ico" />
+
+    <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dijit/themes/claro/claro.css">
+    <script src="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dojo/dojo.js" data-dojo-config="async: true, parseOnLoad:true"></script>
+
+    <script type="application/javascript">
+        // Cargamos los complementos de dojo
+        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",
+                "dojo/store/Memory", "dijit/form/FilteringSelect", "dijit/form/Button", "dojo/dom-class", "dijit/Dialog",
+                "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",
+                "dijit/ProgressBar", "dijit/ConfirmDialog", "dojo/dom-style", "dijit/form/ComboButton", "dijit/Menu", "dijit/MenuItem", "dijit/MenuSeparator", "dijit/Tooltip", "dijit/form/Form", "dijit/form/TextBox",
+                "dojox/grid/enhanced/plugins/Filter", "dijit/form/ValidationTextBox", "dijit/form/NumberSpinner", "dojo/request", "dojo/parser"],
+            function(dom, fx, array, query, domConstruct, dijit, style, ready, on, win,
+                     Memory, FilteringSelect, Button, domClass, Dialog,
+                     lang, DataGrid, ItemFileWriteStore, DnDConfig, EnhancedGrid, Selector, indirectSelection, nestedSorting,
+                     ProgressBar, ConfirmDialog, style, ComboButton, Menu, MenuItem, MenuSeparator, Tooltip, Form, TextBox, filter, ValidationTextBox, NumberSpinner, request) {
+
+                const idModulo = "<?php echo($strModulo);?>";
+
+                // Para Mostrar de Mensajes de "error o éxito"
+                var dgEjecuta = new Dialog({title: 'Procesando...', style: 'width:300px'});
+                var pbMarcar = new ProgressBar({value: Number.POSITIVE_INFINITY, layoutAlign: 'left'});
+                dgEjecuta.setContent(pbMarcar);
+                dgResultadoError = new ConfirmDialog({ title:"<b>Error</b>", style: "min-width:300px; heigth; auto" });
+                style.set(dgResultadoError.cancelButton.domNode, 'display', 'none');
+                dgResultadoExito = new ConfirmDialog({ title:"<b>Éxito</b>", style: "min-width:300px; heigth; auto" });
+                style.set(dgResultadoExito.cancelButton.domNode, 'display', 'none');
+
+
+                /****************************************************************** Botones ******************************************************************/
+                // Limpiar
+                new Button({
+                    label: "Limpiar",
+                    iconClass: "dijitEditorIcon dijitEditorIconRemoveFormat",
+                    showLabel: true,
+                    onClick: function() {
+                        dijit.byId("frm").submit();
+                    }
+                }, "BTNLIMPIAR").startup();
+
+                // Buscar
+                new Button({
+                    id: "BTNBUSCAR",
+                    label: "Buscar",
+                    iconClass: "dijitIcon dijitIconDatabase",
+                    showLabel: true,
+                    onClick: function(){
+                        alert("Buscando");
+                    }
+                }, "BTNBUSCAR").startup();
+
+
+                ready(function() {
+                    // Actualizar el tamaño del TabContainer en función del tamaño de página
+                    var ventana = win.getBox();
+                    var strVentana = (ventana.h-110)+"px";
+                    var strVentanaPan = (ventana.h-75)+"px";
+                    //style.set(dijit.byId("djTab").id, { height:strVentana });
+                    style.set(dom.byId("framePanel"), "height", strVentanaPan);
+                    //dijit.byId("djTab").resize();
+
+                    // Actualizar el tamaño del TabContainer en función del tamaño de página
+                    on(window, "resize", function() {
+                        var ventana = win.getBox();
+                        var strVentana = (ventana.h-75-100)+"px";
+                        //style.set(dijit.byId("djTab").id, { height:strVentana });
+                        style.set(dom.byId("framePanel"), "height", strVentana);
+                        //dijit.byId("djTab").resize();
+                    });
+                    // Eliminar la cortina de entrada
+                    fx.fadeOut({node: dom.byId("loadingOverlay"), duration: 1}).play();
+                    setTimeout(function () {
+                        domConstruct.destroy("loadingOverlay");
+                    }, 1);
+
+                });
+            });
+    </script>
+
+</head>
+
+<body class="claro">
+<div id="loadingOverlay" class="loadingOverlay pageOverlay">
+    <div class="loadingMessage">Espere...</div>
+</div>
+
+<div id="wrapper_container_module">
+    <div id="wrapper_table" style="position:relative;">
+        <div data-dojo-type="dijit/form/Form" id="frm" data-dojo-id="frm" encType="multipart/form-data"
+             action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" style="position:relative;">
+            <script type="dojo/on" data-dojo-event="submit">return true;</script>
+            <div id="wrapper_table_head">Panel de Control de Indicadores</div>
+            <div id="wrapper_table_body_mod_app">
+                <!--<table width="100%" height="auto">
+                    <tr>
+                        <td width="100%" colspan="20" align="center">
+                    </tr>
+
+                    <tr>
+                        <td width="100%" colspan="20" align="center">
+                            <button id="BTNBUSCAR" type="button"></button>
+                            <button id="BTNLIMPIAR" type="button"></button>
+                        </td>
+                    </tr>
+                </table>-->
+                <iframe id="framePanel" src="shared/panel_general/index.html" frameborder="0" style="width:100%;"></iframe>
+
+
+                <!--<div id="djTab" data-dojo-type="dijit/layout/TabContainer" data-dojo-props="tabPosition:'top'" style="width:100%;">
+                    <div data-dojo-type="dijit/layout/ContentPane" title="Panel de Control" data-dojo-props="selected:true">
+                        <div style="margin-top: 15px">
+                            <div id="div_GridPrincipal">
+                                <iframe id="framePanel" src="panel/index.html" frameborder="0" style="width:100%;"></iframe>
+                            </div>
+                        </div>
+                    </div>
+                </div>-->
+            </div>
+        </div>
+    </div>
+</div>
+
+</body>

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 5 - 0
plantasyp/js/bootstrap.min.js


+ 279 - 0
plantasyp/mantoPreventivo.php

@@ -0,0 +1,279 @@
+<?php
+$strModulo = 'refacciones';
+
+$arrCT = array();
+//$url = 'https://www.solerpalau.mx/plantasyp/datosPlanta.php';
+$url = 'https://www.solerpalau.mx/plantasyp/datosPlanta.php';
+$opciones = array('http' =>
+    array(
+        'method' => 'GET',
+        'max_redirects' => '0',
+        'ignore_errors' => '1'
+    )
+);
+
+$contexto = stream_context_create($opciones);
+$flujo = fopen($url, 'r', false, $contexto);
+$arrResultadoPeticion = json_decode(stream_get_contents($flujo), true);
+
+$arrCT[0]['idCT'] = 'todos';
+$arrCT[0]['name'] = 'Todos';
+$contadorCT = 1;
+foreach ($arrResultadoPeticion['datosRespuesta'] as $clave => $valor){
+    $arrCT[$contadorCT]['idCT'] = $clave;
+    $arrCT[$contadorCT]['name'] = $clave;
+    $contadorCT++;
+}
+
+$jsonCentrosT = json_encode($arrCT);
+
+?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="imagetoolbar" content="no" />
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Poppins:400,500,700,300,600">
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans">
+    <link media="screen" rel="stylesheet" type="text/css" href="css/principal.css" />
+    <!--<link media="screen" rel="stylesheet" type="text/css" href="css/pagination.css"  />--> <!--Paginador-->
+    <link rel="shortcut icon" type="image/x-icon" href="css/layout/global/sp.ico" />
+
+    <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dijit/themes/claro/claro.css">
+    <script src="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dojo/dojo.js" data-dojo-config="async: true, parseOnLoad:true"></script>
+
+    <style type="text/css">
+        /* Estilos para el DataGrid */
+        @import "//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojox/grid/resources/claroGrid.css";
+        @import "//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/resources/dojo.css";
+        @import "//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dijit/themes/claro/claro.css";
+        @import "//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dijit/themes/claro/document.css";
+        @import "//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojox/grid/enhanced/resources/claro/EnhancedGrid.css";
+        @import "//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojox/grid/enhanced/resources/EnhancedGrid_rtl.css";
+        #Grid_Refacciones {
+            height: 600px;
+        }
+
+    </style>
+
+    <script type="application/javascript">
+        // Cargamos los complementos de dojo
+        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",
+                "dojo/store/Memory", "dijit/form/FilteringSelect", "dijit/form/Button", "dojo/dom-class", "dijit/Dialog",
+                "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",
+                "dijit/ProgressBar", "dijit/ConfirmDialog", "dojo/dom-style", "dijit/form/ComboButton", "dijit/Menu", "dijit/MenuItem", "dijit/MenuSeparator", "dijit/Tooltip", "dijit/form/Form", "dijit/form/TextBox",
+                "dojox/grid/enhanced/plugins/Filter", "dijit/form/ValidationTextBox", "dijit/form/NumberSpinner", "dojo/request", "dojo/parser"],
+            function(dom, fx, array, query, domConstruct, dijit, style, ready, on, win,
+                     Memory, FilteringSelect, Button, domClass, Dialog,
+                     lang, DataGrid, ItemFileWriteStore, DnDConfig, EnhancedGrid, Selector, indirectSelection, nestedSorting,
+                     ProgressBar, ConfirmDialog, style, ComboButton, Menu, MenuItem, MenuSeparator, Tooltip, Form, TextBox, filter, ValidationTextBox, NumberSpinner, request) {
+
+                const idModulo = "<?php echo($strModulo);?>";
+                const arrCentrosT = <?php echo($jsonCentrosT); ?>;
+
+                // Para Mostrar de Mensajes de "error o éxito"
+                var dgEjecuta = new Dialog({title: 'Procesando...', style: 'width:300px'});
+                var pbMarcar = new ProgressBar({value: Number.POSITIVE_INFINITY, layoutAlign: 'left'});
+                dgEjecuta.setContent(pbMarcar);
+                dgResultadoError = new ConfirmDialog({ title:"<b>Error</b>", style: "min-width:300px; heigth; auto" });
+                style.set(dgResultadoError.cancelButton.domNode, 'display', 'none');
+                dgResultadoExito = new ConfirmDialog({ title:"<b>Éxito</b>", style: "min-width:300px; heigth; auto" });
+                style.set(dgResultadoExito.cancelButton.domNode, 'display', 'none');
+
+
+                /****************************************************************** Inputs ******************************************************************/
+                new FilteringSelect({
+                    id: "select_CentroTrabajo",
+                    store: new Memory({ idProperty: "idCT", data: arrCentrosT }),
+                    autoComplete: true,
+                    maxHeight: 300,
+                    style: "width: 100%;",
+                    placeHolder: "Seleccione una opción",
+                    onChange: function(idCt){
+                    }
+                }, "select_CentroTrabajo");
+
+                /****************************************************************** Botones ******************************************************************/
+                new Button({
+                    id: "btn_Buscar",
+                    label: "Buscar",
+                    iconClass: "dijitIconSearch",
+                    showLabel: false,
+                    onClick: function(){
+                        let centroT = dijit.byId('select_CentroTrabajo').value;
+                        if(centroT != ""){
+                            cargarGrid("id_Grid_Refacciones", centroT, "");
+                        }
+                    }
+                }, "btn_Buscar").startup();
+
+
+                /****************************************************************** Acciones ******************************************************************/
+                cargarGrid = function (idGrid, ct, maq){
+                    dgEjecuta.set("title", "Consultando...");
+                    dgEjecuta.show();
+
+                    var accion = "";
+                    var resdatosRecibidos = "datosRespuesta";
+                    var posicionDom = "";
+
+                    if(idGrid == "id_Grid_Refacciones"){
+                        accion = "buscarMantoPreventivo";
+                        posicionDom = "Grid_Refacciones";
+                    }
+
+                    request.post("datosPlanta.php", {
+                        data: {
+                            accion: accion,
+                            idModulo: idModulo,
+                            ct: ct,
+                            maq: maq
+                        }
+                    }).then(
+                        function (response) {
+                            var objResponse = JSON.parse(response);
+                            if (objResponse['estatus'] == "ERROR") {
+                                dgEjecuta.hide();
+                                dgResultadoError.setContent(objResponse['errorDescripcion']);
+                                dgResultadoError.show();
+                            } else {
+                                let datosRecibidos = objResponse[resdatosRecibidos];
+
+                                // Configuramos el data store
+                                var data = {
+                                    identifier: "id",
+                                    items: []
+                                };
+
+                                // Creamos la lista de objetos
+                                var data_list = JSON.parse(datosRecibidos);
+
+                                for(var i = 0, l = data_list.length; i < data_list.length; i++){
+                                    data.items.push(lang.mixin({ id: i+1 }, data_list[i%l]));
+                                }
+                                var store = new ItemFileWriteStore({data: data});
+
+                                // Destruimos el dataGrid si ya existe
+                                if (dijit.byId(idGrid)){
+                                    dijit.byId(idGrid).destroy();
+                                }
+
+                                if(idGrid == "id_Grid_Refacciones"){
+                                    var estructuralayout = [[
+                                        {'name': 'No.', 'field': 'id', 'width': '30px', 'datatype':'number'},
+                                        {'name': 'Centro de Trabajo', 'field': 'ct', 'width': '120px', 'datatype':'string'},
+                                        {'name': 'Parte', 'field': 'parte', 'width': '250px', 'datatype':'string'},
+                                        {'name': 'Actividad', 'field': 'actividad', 'width': '270px', 'datatype':'string'},
+                                        {'name': 'Duración', 'field': 'duracion', 'width': '150px', 'datatype':'string'},
+                                        {'name': 'Prioridad', 'field': 'prioridad', 'width': '150px', 'datatype':'string'},
+                                        {'name': 'Tipo', 'field': 'tipo', 'width': '150px', 'datatype':'string'},
+                                        {'name': 'Clasificación 1', 'field': 'clasificacion', 'width': '260px', 'datatype':'string'}
+                                    ]];
+                                }
+
+                                var grid = new EnhancedGrid({
+                                    id: idGrid,
+                                    store: store,
+                                    structure: estructuralayout,
+                                    autoHeight: false,
+                                    autoWidth: false,
+                                    rowSelector: '20px',
+                                    noDataMessage: 'No se encontraron datos',
+                                    canSort: function () {
+                                        return true;
+                                    }, // Filtra
+                                    plugins: {
+                                        nestedSorting: true,
+                                        filter: {
+                                            // Show the closeFilterbarButton at the filter bar
+                                            closeFilterbarButton: false,
+                                            // Set the maximum rule count to 5
+                                            ruleCount: 5,
+                                            // Set the name of the items
+                                            itemsName: "registros"
+                                        }
+                                    }
+                                });
+
+
+                                // Cargamos el dataGrid en el div
+                                grid.placeAt(posicionDom);
+                                // Inicializamos el dataGrid
+                                grid.startup();
+
+                                dgEjecuta.hide();
+                            }
+                        }
+                    );
+
+                };
+
+                ready(function() {
+                    // Actualizar el tamaño del TabContainer en función del tamaño de página
+                    var ventana = win.getBox();
+                    var strVentana = (ventana.h-130)+"px";
+                    style.set(dijit.byId("djTab").id, { height:strVentana });
+                    dijit.byId("djTab").resize();
+
+                    // Actualizar el tamaño del TabContainer en función del tamaño de página
+                    on(window, "resize", function() {
+                        var ventana = win.getBox();
+                        var strVentana = (ventana.h-130)+"px";
+                        style.set(dijit.byId("djTab").id, { height:strVentana });
+                        dijit.byId("djTab").resize();
+                    });
+                    // Eliminar la cortina de entrada
+                    fx.fadeOut({node: dom.byId("loadingOverlay"), duration: 1}).play();
+                    setTimeout(function () {
+                        domConstruct.destroy("loadingOverlay");
+                    }, 1);
+
+                    cargarGrid("id_Grid_Refacciones", "todos", "");
+
+                });
+            });
+    </script>
+
+</head>
+
+<body class="claro">
+<div id="loadingOverlay" class="loadingOverlay pageOverlay">
+    <div class="loadingMessage">Espere...</div>
+</div>
+
+<div id="wrapper_container_module">
+    <div id="wrapper_table" style="position:relative;">
+        <div data-dojo-type="dijit/form/Form" id="frm" data-dojo-id="frm" encType="multipart/form-data"
+             action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" style="position:relative;">
+            <script type="dojo/on" data-dojo-event="submit">return true;</script>
+            <div id="wrapper_table_head">Mantenimiento Preventivo</div>
+            <div id="wrapper_table_body_mod_app">
+
+                <table width="100%" height="auto" border="0" style="border-spacing: 5px;">
+                    <tr>
+                        <td width="10%" colspan="2" class="etiquetaFormulario">
+                            <label class="noTopPadding">Centro de Trabajo:</label>
+                        </td>
+                        <td width="20%" colspan="4">
+                            <input id="select_CentroTrabajo"/>
+                        </td>
+                        <td width="70%" colspan="14">
+                            <button id="btn_Buscar" type="button"></button>
+                        </td>
+                    </tr>
+                </table>
+
+                <div id="djTab" data-dojo-type="dijit/layout/LayoutContainer" style="overflow-y: auto;">
+                    <div style="margin-top: 15px">
+                        <div id="Grid_Refacciones"></div>
+                    </div>
+                </div>
+
+            </div>
+        </div>
+    </div>
+</div>
+
+</body>
+

+ 320 - 0
plantasyp/maquinaria.php

@@ -0,0 +1,320 @@
+<?php
+    $strModulo = 'maquinaria';
+    $arrCT = array();
+    $arrMaq = array();
+
+    $url = 'https://www.solerpalau.mx/plantasyp/datosPlanta.php';
+    $opciones = array('http' =>
+        array(
+            'method' => 'GET',
+            'max_redirects' => '0',
+            'ignore_errors' => '1'
+        )
+    );
+
+    $contexto = stream_context_create($opciones);
+    $flujo = fopen($url, 'r', false, $contexto);
+    $arrResultadoPeticion = json_decode(stream_get_contents($flujo), true);
+
+    $arrCT[0]['idCT'] = 'T';
+    $arrCT[0]['name'] = 'Todos';
+    $contadorCT = 1;
+    $contadorMaq = 0;
+    foreach ($arrResultadoPeticion['datosRespuesta'] as $idCentroT => $arrData){
+        $arrCT[$contadorCT]['idCT'] = $idCentroT;
+        $arrCT[$contadorCT]['name'] = $idCentroT;
+        $contadorCT++;
+
+        foreach ($arrData['maquinas'] as $clave => $valor){
+            //echo $arrData['maquinas'][$clave]['nombre'].'<br>';
+            $arrMaq[$contadorMaq]['idCT'] = $idCentroT;
+            $arrMaq[$contadorMaq]['name'] = $arrData['maquinas'][$clave]['nombre'];
+            $arrMaq[$contadorMaq]['id'] = $arrData['maquinas'][$clave]['id'];
+            $contadorMaq++;
+        }
+
+    }
+
+    $jsonCentrosT = json_encode($arrCT);
+    $jsonMaquinaria = json_encode($arrMaq);
+
+    $CT_recibido = $_GET['ct'];
+
+?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="imagetoolbar" content="no" />
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Poppins:400,500,700,300,600">
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans">
+    <link media="screen" rel="stylesheet" type="text/css" href="css/principal.css" />
+    <!--<link media="screen" rel="stylesheet" type="text/css" href="css/pagination.css"  />--> <!--Paginador-->
+    <link rel="shortcut icon" type="image/x-icon" href="css/layout/global/sp.ico" />
+    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
+    <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dijit/themes/claro/claro.css">
+    <script src="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dojo/dojo.js" data-dojo-config="async: true, parseOnLoad:true"></script>
+    <script type="application/javascript">
+        // Cargamos los complementos de dojo
+        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",
+                "dojo/store/Memory", "dijit/form/FilteringSelect", "dijit/form/Button", "dojo/dom-class", "dijit/Dialog",
+                "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",
+                "dijit/ProgressBar", "dijit/ConfirmDialog", "dojo/dom-style", "dijit/form/ComboButton", "dijit/Menu", "dijit/MenuItem", "dijit/MenuSeparator", "dijit/Tooltip", "dijit/form/Form", "dijit/form/TextBox",
+                "dojox/grid/enhanced/plugins/Filter", "dijit/form/ValidationTextBox", "dijit/form/NumberSpinner", "dijit/form/ComboBox", "dojo/request", "dojo/parser"],
+            function(dom, fx, array, query, domConstruct, dijit, style, ready, on, win,
+                     Memory, FilteringSelect, Button, domClass, Dialog,
+                     lang, DataGrid, ItemFileWriteStore, DnDConfig, EnhancedGrid, Selector, indirectSelection, nestedSorting,
+                     ProgressBar, ConfirmDialog, style, ComboButton, Menu, MenuItem, MenuSeparator, Tooltip, Form, TextBox, filter, ValidationTextBox, NumberSpinner, ComboBox, request) {
+
+                const idModulo = "<?php echo($strModulo);?>";
+                const arrCentrosT = <?php echo($jsonCentrosT); ?>;
+                const arrMaquinaria = <?php echo($jsonMaquinaria); ?>;
+                const CT_recibido = "<?php echo($CT_recibido); ?>";
+                var idMaquina = "";
+
+                // Para Mostrar de Mensajes de "error o éxito"
+                var dgEjecuta = new Dialog({title: 'Procesando...', style: 'width:300px'});
+                var pbMarcar = new ProgressBar({value: Number.POSITIVE_INFINITY, layoutAlign: 'left'});
+                dgEjecuta.setContent(pbMarcar);
+                dgResultadoError = new ConfirmDialog({ title:"<b>Error</b>", style: "min-width:300px; heigth; auto" });
+                style.set(dgResultadoError.cancelButton.domNode, 'display', 'none');
+                dgResultadoExito = new ConfirmDialog({ title:"<b>Éxito</b>", style: "min-width:300px; heigth; auto" });
+                style.set(dgResultadoExito.cancelButton.domNode, 'display', 'none');
+
+                /****************************************************************** Inputs ******************************************************************/
+                new FilteringSelect({
+                    id: "select_CentroTrabajo",
+                    store: new Memory({ idProperty: "idCT", data: arrCentrosT }),
+                    autoComplete: true,
+                    maxHeight: 300,
+                    style: "width: 100%;",
+                    placeHolder: "Seleccione una opción",
+                    onChange: function(idCt){
+                        if((idCt != "") && (idCt != "T")){
+                            dijit.byId('combo_Maquinaria').set("disabled", false);
+                            dijit.byId('combo_Maquinaria').query.idCT = this.item.idCT || /.*!/;
+                            dijit.byId('combo_Maquinaria').reset();
+                        }else{
+                            dijit.byId('combo_Maquinaria').reset();
+                            dijit.byId('combo_Maquinaria').set("disabled", true);
+                        }
+                    }
+                }, "select_CentroTrabajo");
+
+                new ComboBox({
+                    id: "combo_Maquinaria",
+                    store: new Memory({ data: arrMaquinaria }),
+                    autoComplete: true,
+                    maxHeight: 300,
+                    query: {idCT: /.*/},
+                    style: "width: 100%;",
+                    required: false,
+                    searchAttr: "name",
+                    disabled: true,
+                    placeHolder: "Seleccione una opción",
+                    onChange: function(val){
+                        if((this.item != null)){
+                            idMaquina = this.item.id;
+                        }else{
+                            dijit.byId('combo_Maquinaria').set("value", "");
+                            idMaquina = "";
+                        }
+                    }
+                }, "combo_Maquinaria");
+
+                /****************************************************************** Botones ******************************************************************/
+                new Button({
+                    id: "btn_Buscar",
+                    label: "Buscar",
+                    iconClass: "dijitIconSearch",
+                    showLabel: false,
+                    onClick: function(){
+                        let centroT = dijit.byId('select_CentroTrabajo').value;
+                        if(centroT != ""){
+                            consultarDatos(centroT, idMaquina);
+                        }
+                    }
+                }, "btn_Buscar").startup();
+
+                /****************************************************************** Funciones ******************************************************************/
+                consultarDatos = function(ct, maq){
+                    let urlBusqueda = "datosPlanta.php";
+                    if(ct != ""){
+                        urlBusqueda += "?ct=" + ct;
+                    }
+                    if(maq != ""){
+                        urlBusqueda += "&maq=" + maq;
+                    }
+
+                    request.post(urlBusqueda, {
+                        data: {
+                            accion: 'accion',
+                            idModulo: idModulo
+                        }
+                    }).then(
+                        function (response) {
+                            var objResponse = JSON.parse(response);
+                            if (objResponse['estatus'] == "ERROR") {
+                                dgEjecuta.hide();
+                                dgResultadoError.setContent(objResponse['errorDescripcion']);
+                                dgResultadoError.show();
+                            } else {
+                                let datosRecibidos = objResponse["datosRespuesta"];
+
+                                domConstruct.empty("div_Cards");
+
+                                for(var centroTrabajo in datosRecibidos){
+                                    //console.log(datosRecibidos[centroTrabajo]['maquinas']);
+                                    for(var maquina in datosRecibidos[centroTrabajo]['maquinas']){
+                                        //console.log(datosRecibidos[centroTrabajo]['maquinas'][maquina]['nombre']);
+
+                                        var divCol = domConstruct.create("div", {
+                                            class: "col  pb-5",
+                                        }, "div_Cards");
+
+                                        var div_C = domConstruct.create("div", {
+                                            class: "card",
+                                        }, divCol);
+
+                                        var img_C = domConstruct.create("img", {
+                                            class: "card-img-top",
+                                            height: "180px",
+                                            src: datosRecibidos[centroTrabajo]['maquinas'][maquina]['rutaImagen']
+                                        }, div_C);
+
+                                        var div_Body = domConstruct.create("div", {
+                                            class: "card-body"
+                                        }, div_C);
+
+                                        var h5_C = domConstruct.create("h5", {
+                                            class: "card-title",
+                                            innerHTML: datosRecibidos[centroTrabajo]['maquinas'][maquina]['nombre']
+                                        }, div_Body);
+
+                                        var p_C = domConstruct.create("p", {
+                                            class: "card-text fst-italic",
+                                            innerHTML: "Centro de Trabajo: <b>"+centroTrabajo+"</b>"
+                                        }, div_Body);
+
+                                        var idMaquinaUrl = datosRecibidos[centroTrabajo]['maquinas'][maquina]['id']
+                                        var urlIr = "detalles.php?ct="+centroTrabajo+"&maq="+idMaquinaUrl
+                                        var a_C = domConstruct.create("a", {
+                                            class: "btn btn-link",
+                                            innerHTML: "Ver Detalles",
+                                            href: urlIr
+                                        }, div_Body);
+                                    }
+                                }
+                            }
+                        }
+                    );
+                };
+
+
+                ready(function() {
+                    // Actualizar el tamaño del TabContainer en función del tamaño de página
+                    var ventana = win.getBox();
+                    var strVentana = (ventana.h-110)+"px";
+                    style.set(dijit.byId("djTab").id, { height:strVentana });
+                    dijit.byId("djTab").resize();
+
+                    // Actualizar el tamaño del TabContainer en función del tamaño de página
+                    on(window, "resize", function() {
+                        var ventana = win.getBox();
+                        var strVentana = (ventana.h-110)+"px";
+                        style.set(dijit.byId("djTab").id, { height:strVentana });
+                        dijit.byId("djTab").resize();
+                    });
+                    // Eliminar la cortina de entrada
+                    fx.fadeOut({node: dom.byId("loadingOverlay"), duration: 1}).play();
+                    setTimeout(function () {
+                        domConstruct.destroy("loadingOverlay");
+                    }, 1);
+
+                    if(CT_recibido != ""){
+                        consultarDatos(CT_recibido, "");
+                        dijit.byId('select_CentroTrabajo').set("value", CT_recibido);
+                    }else{
+                        consultarDatos("", "");
+                    }
+
+                });
+            });
+    </script>
+    <style>
+        .card{
+            width:300px;
+            height:300px;
+            box-shadow: 10px 5px 5px #b0bec5;
+            transition: width 2s, height 2s, transform 2s;
+            border-radius: 5px;
+            border-color: #34495E;
+        }
+
+        img{
+            opacity: 0.8;
+
+        }
+
+        .card:hover{
+            transform: scale(1.1);
+        }
+        .col{
+            flex: 0 0 0%;
+        }
+
+    </style>
+
+</head>
+
+<body class="claro">
+<div id="loadingOverlay" class="loadingOverlay pageOverlay">
+    <div class="loadingMessage">Espere...</div>
+</div>
+
+<div id="wrapper_container_module">
+    <div id="wrapper_table" style="position:relative;">
+        <div data-dojo-type="dijit/form/Form" id="frm" data-dojo-id="frm" encType="multipart/form-data"
+             action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" style="position:relative;">
+            <script type="dojo/on" data-dojo-event="submit">return true;</script>
+            <div id="wrapper_table_head">Maquinaria</div>
+            <div id="wrapper_table_body_mod_app">
+
+                <table width="100%" height="auto" border="0" style="border-spacing: 5px;">
+                    <tr>
+                        <td width="10%" colspan="2" class="etiquetaFormulario">
+                            <label class="noTopPadding">Centro de Trabajo:</label>
+                        </td>
+                        <td width="20%" colspan="4">
+                            <input id="select_CentroTrabajo"/>
+                        </td>
+                        <td width="5%" colspan="1"></td>
+                        <td width="10%" colspan="2" class="etiquetaFormulario">
+                            <label class="noTopPadding">Maquinaria:</label>
+                        </td>
+                        <td width="20%" colspan="4">
+                            <input id="combo_Maquinaria"/>
+                        </td>
+
+                        <td width="35%" colspan="7">
+                            <button id="btn_Buscar" type="button"></button>
+                        </td>
+                    </tr>
+                </table>
+
+                <div id="djTab" data-dojo-type="dijit/layout/LayoutContainer" style="overflow-y: auto;">
+                    <div class="container" style="margin-left: 5px; margin-right: 5px; margin-top: 20px">
+                        <div class="row" id="div_Cards">
+                        </div>
+                    </div>
+
+                </div>
+
+            </div>
+        </div>
+    </div>
+</div>
+
+</body>
+

+ 230 - 0
plantasyp/menuIzquierdo.php

@@ -0,0 +1,230 @@
+<?php
+/*
+	Sistema de Portales de Soler y Palau SA de CV
+	(2018) Desarrollos y Servicios en Tecnología Inteligente S de RL de CV
+	Versión 1.0
+	Última Actualización: 27/12/2020
+	Código del Módulo: GAS002
+*/
+
+$strModulo = 'HYC002';
+
+$_SESSION['GBL_PERFIL_ACTUAL'] = 'ADMINISTRADOR';
+$strEsp = true;
+$bolMultiPerfil = false;
+$strPerfilUsuario = 'SUPERVISOR';
+$_SESSION['GBL_USUARIO'] = 10;
+
+//require_once('shared/conexionBaseDatos.php');
+//require_once('shared/encriptacion.php');
+//require_once('shared/iniciaSesion.php');
+//require_once('shared/funciones.php');
+// Para acceder a esta página el usuario debe tener un login válido
+//require_once('shared/sesionIniciada.php');
+
+// Determina si el usuario tiene múltiples perfiles
+/*$arrPerfiles = json_decode($_SESSION['GBL_PERFILES'],true);
+$intPerfiles = 0;
+foreach($arrPerfiles as $perfil) { if($perfil['IDPORTAL']=='GAS') { $intPerfiles++; } }
+if($intPerfiles>1) { $bolMultiPerfil = true; } else { $bolMultiPerfil = false; }
+
+// Para Usuario Especial
+$strIDUsuario = trim($_SESSION['GBL_DINUM']);
+$gstEsp = oci_parse($conBaseDatos, 'SELECT USAD FROM ITT_GAS_CONF WHERE USAD=:USAD');
+oci_bind_by_name($gstEsp, ':USAD', $strIDUsuario);
+if (oci_execute($gstEsp)) {
+    while ($rowEsp = oci_fetch_array($gstEsp, OCI_ASSOC + OCI_RETURN_NULLS)) {
+        $idEsp = $rowEsp['USAD'];
+    }
+} else {
+    $bolError = true;
+    $rErrorDescripcion = 'Ocurrió un error al consultar los datos de la tabla ITT_GAS_CONF.';
+}
+if(!empty($idEsp)){
+    $strEsp = true;
+}else{
+    $strEsp = false;
+}
+if($strEsp == true){
+    $bolMultiPerfil = true;
+    // Buscamos el perfil de cada Usuario
+    $strUsuario = trim($_SESSION['GBL_USUARIO']);
+    $gstPerf = oci_parse($conBaseDatos, "SELECT IDUSUARIO, IDPERFIL, IDPORTAL  FROM ITT_USUARIOS_PERFILES WHERE IDPORTAL='GAS' AND IDUSUARIO=:IDUSUARIO ");
+    oci_bind_by_name($gstPerf, ':IDUSUARIO', $strUsuario);
+    if (oci_execute($gstPerf)) {
+        while ($rowPerf = oci_fetch_array($gstPerf, OCI_ASSOC + OCI_RETURN_NULLS)) {
+            $strPerfilUsuario = $rowPerf['IDPERFIL'];
+        }
+    } else {
+        $bolError = true;
+        $rErrorDescripcion = 'Ocurrió un error al consultar los datos de la tabla ITT_USUARIOS_PERFILES.';
+    }
+}*/
+
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="imagetoolbar" content="no" />
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Poppins:400,500,700,300,600">
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans">
+    <link media="screen" rel="stylesheet" type="text/css" href="css/principal.css" />
+    <link rel="shortcut icon" type="image/x-icon" href="css/layout/global/sp.ico" />
+    <script src="//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/dojo.js" data-dojo-config="async: true, parseOnLoad:true"></script>
+    <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.2/jquery.min.js'></script>
+    <script>require(["dojo/dom", "dojo/_base/fx", "dojo/query", "dojo/dom-construct", "dojo/dom-class", "dijit/registry", "dojo/dom-style",
+                "dojo/ready", "dojo/on", "dojo/window"],
+            function(dom, fx, query, domConstruct, domClass, dijit, style, ready, on, win) {
+                cerrarModulos = function(modulo){
+                    query(".menuPrimero").forEach(function(nodePadre,indexPadre,nodelistPadre) {
+                        var idElemento = nodePadre.id;
+
+                        if(idElemento != modulo){
+                            if (domClass.contains(idElemento, "menu_perfil_linea")){
+                                domClass.remove(idElemento, "menuExtendido");
+                                domClass.add(idElemento, "menuCompacto");
+                            }else if(domClass.contains(idElemento, "menu_perfil_linea_segundo")){
+                                domClass.remove(idElemento, "menuExtendidoSegundo");
+                                domClass.add(idElemento, "menuCompactoSegundo");
+                            }
+                            if(dom.byId(idElemento)){
+                                query("."+idElemento).forEach(function(node,index,nodelist) { style.set(node.id, {display:"none"}); });
+                            }
+                        }
+                    });
+                };
+
+                cerrarSubModulos = function(modulo){
+                    query(".menu_perfil_linea_segundo").forEach(function(nodePadre,indexPadre,nodelistPadre) {
+                        var idElemento = nodePadre.id;
+                        if(idElemento != modulo){
+                            if (domClass.contains(idElemento, "menuPrimero")){
+                                domClass.remove(idElemento, "menuExtendidoSegundo");
+                                domClass.add(idElemento, "menuCompactoSegundo");
+                            }
+                            if(dom.byId(idElemento)){
+                                query("."+idElemento).forEach(function(node,index,nodelist) { style.set(node.id, {display:"none"}); });
+                            }
+                        }
+                    });
+                };
+
+                abrirCerrarModulo = function(modulo){
+                    // Módulos Principales
+                    if (domClass.contains(modulo, "menuExtendido")){
+                        // Cerrar Módulo
+                        domClass.remove(modulo, "menuExtendido");
+                        domClass.add(modulo, "menuCompacto");
+                        cerrarModulos("TODOS");
+                    }else if(domClass.contains(modulo, "menuCompacto")){
+                        // Abrir Módulo
+                        domClass.remove(modulo, "menuCompacto");
+                        domClass.add(modulo, "menuExtendido");
+                        cerrarModulos(modulo);
+                        query("."+modulo).forEach(function(node,index,nodelist) { style.set(node.id, {display:"block"}); });
+                    }
+
+                    // Sub-Módulos
+                    if (domClass.contains(modulo, "menuExtendidoSegundo")){
+                        // Cerrar Módulo
+                        domClass.remove(modulo, "menuExtendidoSegundo");
+                        domClass.add(modulo, "menuCompactoSegundo");
+                        cerrarSubModulos("TODOS");
+                    }else if(domClass.contains(modulo, "menuCompactoSegundo")){
+                        // Abrir Módulo
+                        domClass.remove(modulo, "menuCompactoSegundo");
+                        domClass.add(modulo, "menuExtendidoSegundo");
+                        cerrarSubModulos(modulo);
+                        query("."+modulo).forEach(function(node,index,nodelist) { style.set(node.id, {display:"block"}); });
+                    }
+                };
+
+                ready(function() {
+                    cerrarModulos("");
+                    // Modificar estilos dependiendo de la existencia de scroll
+                    if($('#bodyScroller').hasScrollBar() == true){
+                        $('#menu_perfil_normal').css('width', '155px');
+                        $('#menu_perfil').css('width', '155px');
+                    }else{
+                        $('#menu_perfil_normal').css('width', '175px');
+                        $('#menu_perfil').css('width', '175px');
+                    }
+                    on(window, "resize", function() {
+                        if($('#bodyScroller').hasScrollBar() == true){
+                            $('#menu_perfil_normal').css('width', '155px');
+                            $('#menu_perfil').css('width', '155px');
+                        }else{
+                            $('#menu_perfil_normal').css('width', '175px');
+                            $('#menu_perfil').css('width', '175px');
+                        }
+                    });
+
+                });
+            });
+        function actualizaModulo(id, up) {
+            window.parent.frames.app_modulo.location.href = id;
+            if (typeof up === 'undefined') { up = false; }
+            if(up==true) { setTimeout(function(){ location.reload(); },1000); }
+        }
+
+        // Función para detectar la existencia de scrool en un elemento
+        (function($) {
+            $.fn.hasScrollBar = function() { return this.get(0).scrollHeight > this.height(); }
+        })(jQuery);
+
+    </script>
+</head>
+<body id="bodyScroller">
+<div id="menu_encabezado">
+    <span id="HYC"></span>
+</div>
+<?php if(!empty($_SESSION['GBL_PERFIL_ACTUAL'])) { ?>
+    <div id="menu_perfil">
+        <div id="menu_perfil_linea" class="sombra menuPerfil">
+            <table width="100%" height="100%">
+                <tr height="100%">
+                    <td width="40px" height="100%"><strong>Perfil:</strong></td>
+                    <?php if($strEsp == true){ ?>
+                        <td height="100%"><?php echo($strPerfilUsuario); ?></td>
+                    <?php }else{ ?>
+                        <td height="100%"><?php echo(substr($_SESSION['GBL_PERFIL_ACTUAL'],4)); ?></td>
+                    <?php } ?>
+                </tr>
+            </table>
+        </div>
+        <div id="menu_perfil_linea" class="sombra menuPerfil">
+            <table width="100%" height="100%">
+                <tr height="100%">
+                    <td width="40px" height="100%"><strong>Usuario:</strong></td>
+                    <td height="100%"><?php echo($_SESSION['GBL_USUARIO']); ?></td>
+                </tr>
+            </table>
+        </div>
+    </div>
+    <div id="menu_perfil" class="opciones">
+        <?php if($bolMultiPerfil==true) { ?>
+            <div class="menu_perfil_linea noShadow menuSegundo" onclick="actualizaModulo('HYC001.php',true)">Cambiar Perfil</div>
+        <?php } ?>
+
+        <!--<div class="menu_perfil_linea noShadow menuSegundo" onclick="actualizaModulo('plantillaEjemplo.php')">Plantilla Ejemplo</div>
+        <div class="menu_perfil_linea noShadow menuSegundo" onclick="actualizaModulo('panelControl.php')">Panel de Control</div>-->
+
+        <div id="PC" class="menu_perfil_linea noShadow menuPrimero menuExtendido" onclick="abrirCerrarModulo(this.id)">Paneles de Control</div>
+        <div id="PC1" class="menu_perfil_linea noShadow menuSegundo PC" onclick="actualizaModulo('indicadores.php')">Indicadores</div>
+        <div id="PC2" class="menu_perfil_linea noShadow menuSegundo PC" onclick="actualizaModulo('energia.php')">Energía</div>
+
+        <div id="PS" class="menu_perfil_linea noShadow menuPrimero menuExtendido" onclick="abrirCerrarModulo(this.id)">Planta S&P</div>
+        <div id="PS1" class="menu_perfil_linea noShadow menuSegundo PS" onclick="actualizaModulo('centroTrabajo.php')">Centro de Trabajo</div>
+        <div id="PS2" class="menu_perfil_linea noShadow menuSegundo PS" onclick="actualizaModulo('maquinaria.php')">Maquinaria</div>
+
+        <div id="MT" class="menu_perfil_linea noShadow menuPrimero menuExtendido" onclick="abrirCerrarModulo(this.id)">Mantenimiento</div>
+        <div id="MT1" class="menu_perfil_linea noShadow menuSegundo MT" onclick="actualizaModulo('mantoPreventivo.php')">Mantenimiento Preventivo</div>
+        <div id="MT2" class="menu_perfil_linea noShadow menuSegundo MT" onclick="actualizaModulo('bitacorasDeMantenimiento.php')">Órdenes de Mantenimiento</div>
+        <div id="MT3" class="menu_perfil_linea noShadow menuSegundo MT" onclick="actualizaModulo('refacciones.php')">Refacciones</div>
+        <div id="MT4" class="menu_perfil_linea noShadow menuSegundo MT" onclick="actualizaModulo('docElectronicos.php')">Documentos Electrónicos</div>
+
+    </div>
+<?php } ?>
+</body>
+</html>

+ 131 - 0
plantasyp/panelControl.php

@@ -0,0 +1,131 @@
+<?php
+    $strModulo = 'PRUEBA';
+?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="imagetoolbar" content="no" />
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Poppins:400,500,700,300,600">
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans">
+    <link media="screen" rel="stylesheet" type="text/css" href="css/principal.css" />
+    <!--<link media="screen" rel="stylesheet" type="text/css" href="css/pagination.css"  />--> <!--Paginador-->
+    <link rel="shortcut icon" type="image/x-icon" href="css/layout/global/sp.ico" />
+
+    <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dijit/themes/claro/claro.css">
+    <script src="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dojo/dojo.js" data-dojo-config="async: true, parseOnLoad:true"></script>
+
+    <script type="application/javascript">
+        // Cargamos los complementos de dojo
+        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",
+                "dojo/store/Memory", "dijit/form/FilteringSelect", "dijit/form/Button", "dojo/dom-class", "dijit/Dialog",
+                "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",
+                "dijit/ProgressBar", "dijit/ConfirmDialog", "dojo/dom-style", "dijit/form/ComboButton", "dijit/Menu", "dijit/MenuItem", "dijit/MenuSeparator", "dijit/Tooltip", "dijit/form/Form", "dijit/form/TextBox",
+                "dojox/grid/enhanced/plugins/Filter", "dijit/form/ValidationTextBox", "dijit/form/NumberSpinner", "dojo/request", "dojo/parser"],
+            function(dom, fx, array, query, domConstruct, dijit, style, ready, on, win,
+                     Memory, FilteringSelect, Button, domClass, Dialog,
+                     lang, DataGrid, ItemFileWriteStore, DnDConfig, EnhancedGrid, Selector, indirectSelection, nestedSorting,
+                     ProgressBar, ConfirmDialog, style, ComboButton, Menu, MenuItem, MenuSeparator, Tooltip, Form, TextBox, filter, ValidationTextBox, NumberSpinner, request) {
+
+                const idModulo = "<?php echo($strModulo);?>";
+
+                // Para Mostrar de Mensajes de "error o éxito"
+                var dgEjecuta = new Dialog({title: 'Procesando...', style: 'width:300px'});
+                var pbMarcar = new ProgressBar({value: Number.POSITIVE_INFINITY, layoutAlign: 'left'});
+                dgEjecuta.setContent(pbMarcar);
+                dgResultadoError = new ConfirmDialog({ title:"<b>Error</b>", style: "min-width:300px; heigth; auto" });
+                style.set(dgResultadoError.cancelButton.domNode, 'display', 'none');
+                dgResultadoExito = new ConfirmDialog({ title:"<b>Éxito</b>", style: "min-width:300px; heigth; auto" });
+                style.set(dgResultadoExito.cancelButton.domNode, 'display', 'none');
+
+
+                /****************************************************************** Botones ******************************************************************/
+                // Limpiar
+                new Button({
+                    label: "Limpiar",
+                    iconClass: "dijitEditorIcon dijitEditorIconRemoveFormat",
+                    showLabel: true,
+                    onClick: function() {
+                        dijit.byId("frm").submit();
+                    }
+                }, "BTNLIMPIAR").startup();
+
+                // Buscar
+                new Button({
+                    id: "BTNBUSCAR",
+                    label: "Buscar",
+                    iconClass: "dijitIcon dijitIconDatabase",
+                    showLabel: true,
+                    onClick: function(){
+                        alert("Buscando");
+                    }
+                }, "BTNBUSCAR").startup();
+
+
+                ready(function() {
+                    // Actualizar el tamaño del TabContainer en función del tamaño de página
+                    var ventana = win.getBox();
+                    var strVentana = (ventana.h-75-100)+"px";
+                    style.set(dijit.byId("djTab").id, { height:strVentana });
+                    dijit.byId("djTab").resize();
+
+                    // Actualizar el tamaño del TabContainer en función del tamaño de página
+                    on(window, "resize", function() {
+                        var ventana = win.getBox();
+                        var strVentana = (ventana.h-75-100)+"px";
+                        style.set(dijit.byId("djTab").id, { height:strVentana });
+                        dijit.byId("djTab").resize();
+                    });
+                    // Eliminar la cortina de entrada
+                    fx.fadeOut({node: dom.byId("loadingOverlay"), duration: 1}).play();
+                    setTimeout(function () {
+                        domConstruct.destroy("loadingOverlay");
+                    }, 1);
+
+                });
+            });
+    </script>
+
+</head>
+
+<body class="claro">
+<div id="loadingOverlay" class="loadingOverlay pageOverlay">
+    <div class="loadingMessage">Espere...</div>
+</div>
+
+<div id="wrapper_container_module">
+    <div id="wrapper_table" style="position:relative;">
+        <div data-dojo-type="dijit/form/Form" id="frm" data-dojo-id="frm" encType="multipart/form-data"
+             action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" style="position:relative;">
+            <script type="dojo/on" data-dojo-event="submit">return true;</script>
+            <div id="wrapper_table_head">Panel de Control</div>
+            <div id="wrapper_table_body_mod_app">
+                <table width="100%" height="auto">
+                    <tr>
+                        <td width="100%" colspan="20" align="center">
+                    </tr>
+
+                    <tr>
+                        <td width="100%" colspan="20" align="center">
+                            <button id="BTNBUSCAR" type="button"></button>
+                            <button id="BTNLIMPIAR" type="button"></button>
+                        </td>
+                    </tr>
+                </table>
+
+
+                <div id="djTab" data-dojo-type="dijit/layout/TabContainer" data-dojo-props="tabPosition:'top'" style="width:100%;">
+                    <div data-dojo-type="dijit/layout/ContentPane" title="Panel de Control" data-dojo-props="selected:true">
+                        <div style="margin-top: 15px">
+                            <div id="div_GridPrincipal"></div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+</body>
+

+ 176 - 0
plantasyp/plantillaEjemplo.php

@@ -0,0 +1,176 @@
+<?php
+$strModulo = 'PRUEBA';
+?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="imagetoolbar" content="no" />
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Poppins:400,500,700,300,600">
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans">
+    <link media="screen" rel="stylesheet" type="text/css" href="css/principal.css" />
+    <!--<link media="screen" rel="stylesheet" type="text/css" href="css/pagination.css"  />--> <!--Paginador-->
+    <link rel="shortcut icon" type="image/x-icon" href="css/layout/global/sp.ico" />
+
+    <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dijit/themes/claro/claro.css">
+    <script src="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dojo/dojo.js" data-dojo-config="async: true, parseOnLoad:true"></script>
+
+    <script type="application/javascript">
+        // Cargamos los complementos de dojo
+        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",
+                "dojo/store/Memory", "dijit/form/FilteringSelect", "dijit/form/Button", "dojo/dom-class", "dijit/Dialog",
+                "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",
+                "dijit/ProgressBar", "dijit/ConfirmDialog", "dojo/dom-style", "dijit/form/ComboButton", "dijit/Menu", "dijit/MenuItem", "dijit/MenuSeparator", "dijit/Tooltip", "dijit/form/Form", "dijit/form/TextBox",
+                "dojox/grid/enhanced/plugins/Filter", "dijit/form/ValidationTextBox", "dijit/form/NumberSpinner", "dojo/request", "dojo/parser"],
+            function(dom, fx, array, query, domConstruct, dijit, style, ready, on, win,
+                     Memory, FilteringSelect, Button, domClass, Dialog,
+                     lang, DataGrid, ItemFileWriteStore, DnDConfig, EnhancedGrid, Selector, indirectSelection, nestedSorting,
+                     ProgressBar, ConfirmDialog, style, ComboButton, Menu, MenuItem, MenuSeparator, Tooltip, Form, TextBox, filter, ValidationTextBox, NumberSpinner, request) {
+
+                const urlPeticiones = "plantillaEjemplo_DO.php";
+                const idModulo = "<?php echo($strModulo);?>";
+
+                // Para Mostrar de Mensajes de "error o éxito"
+                var dgEjecuta = new Dialog({title: 'Procesando...', style: 'width:300px'});
+                var pbMarcar = new ProgressBar({value: Number.POSITIVE_INFINITY, layoutAlign: 'left'});
+                dgEjecuta.setContent(pbMarcar);
+                dgResultadoError = new ConfirmDialog({ title:"<b>Error</b>", style: "min-width:300px; heigth; auto" });
+                style.set(dgResultadoError.cancelButton.domNode, 'display', 'none');
+                dgResultadoExito = new ConfirmDialog({ title:"<b>Éxito</b>", style: "min-width:300px; heigth; auto" });
+                style.set(dgResultadoExito.cancelButton.domNode, 'display', 'none');
+
+
+                /****************************************************************** Botones ******************************************************************/
+                // Limpiar
+                new Button({
+                    label: "Limpiar",
+                    iconClass: "dijitEditorIcon dijitEditorIconRemoveFormat",
+                    showLabel: true,
+                    onClick: function() {
+                        dijit.byId("frm").submit();
+                    }
+                }, "BTNLIMPIAR").startup();
+
+                // Buscar
+                new Button({
+                    id: "BTNBUSCAR",
+                    label: "Buscar",
+                    iconClass: "dijitIcon dijitIconDatabase",
+                    showLabel: true,
+                    onClick: function(){
+                        alert("Buscando");
+                    }
+                }, "BTNBUSCAR").startup();
+
+                // Buscar
+                new Button({
+                    id: "BTNPETICION",
+                    label: "Realizar Petición",
+                    iconClass: "dijitIconFunction",
+                    showLabel: true,
+                    onClick: function(){
+
+                        realizaAccion("buscarDatos");
+
+                    }
+                }, "BTNPETICION").startup();
+
+                /****************************************************************** Acciones ******************************************************************/
+                realizaAccion = function (accion){
+                    dgEjecuta.set("title", "Consultando...");
+                    dgEjecuta.show();
+
+                    request.post(urlPeticiones, {
+                        data: {
+                            accion: accion,
+                            idModulo: idModulo,
+                            dato1: "prueba"
+                        }
+                    }).then(
+                        function (response) {
+                            var objResponse = JSON.parse(response);
+                            if (objResponse['estatus'] == "ERROR") {
+                                dgEjecuta.hide();
+                                dgResultadoError.setContent(objResponse['errorDescripcion']);
+                                dgResultadoError.show();
+                            } else {
+                                let datosRecibidos = objResponse["datosRecibidos"];
+
+                                console.log(datosRecibidos);
+
+                                dgEjecuta.hide();
+                            }
+                        }
+                    );
+
+
+                };
+
+                ready(function() {
+                    // Actualizar el tamaño del TabContainer en función del tamaño de página
+                    var ventana = win.getBox();
+                    var strVentana = (ventana.h-75-100)+"px";
+                    style.set(dijit.byId("djTab").id, { height:strVentana });
+                    dijit.byId("djTab").resize();
+
+                    // Actualizar el tamaño del TabContainer en función del tamaño de página
+                    on(window, "resize", function() {
+                        var ventana = win.getBox();
+                        var strVentana = (ventana.h-75-100)+"px";
+                        style.set(dijit.byId("djTab").id, { height:strVentana });
+                        dijit.byId("djTab").resize();
+                    });
+                    // Eliminar la cortina de entrada
+                    fx.fadeOut({node: dom.byId("loadingOverlay"), duration: 1}).play();
+                    setTimeout(function () {
+                        domConstruct.destroy("loadingOverlay");
+                    }, 1);
+
+                });
+            });
+    </script>
+
+</head>
+
+<body class="claro">
+<div id="loadingOverlay" class="loadingOverlay pageOverlay">
+    <div class="loadingMessage">Espere...</div>
+</div>
+
+<div id="wrapper_container_module">
+    <div id="wrapper_table" style="position:relative;">
+        <div data-dojo-type="dijit/form/Form" id="frm" data-dojo-id="frm" encType="multipart/form-data"
+             action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" style="position:relative;">
+            <script type="dojo/on" data-dojo-event="submit">return true;</script>
+            <div id="wrapper_table_head">Ejemplo</div>
+            <div id="wrapper_table_body_mod_app">
+                <table width="100%" height="auto">
+                    <tr>
+                        <td width="100%" colspan="20" align="center">
+                    </tr>
+
+                    <tr>
+                        <td width="100%" colspan="20" align="center">
+                            <button id="BTNBUSCAR" type="button"></button>
+                            <button id="BTNLIMPIAR" type="button"></button>
+                            <button id="BTNPETICION" type="button"></button>
+                        </td>
+                    </tr>
+                </table>
+
+
+                <div id="djTab" data-dojo-type="dijit/layout/TabContainer" data-dojo-props="tabPosition:'top'" style="width:100%;">
+                    <div data-dojo-type="dijit/layout/ContentPane" title="Ejemplo" data-dojo-props="selected:true">
+                        <div style="margin-top: 15px">
+                            <div id="div_GridPrincipal"></div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+
+</body>
+

+ 69 - 0
plantasyp/plantillaEjemplo_DO.php

@@ -0,0 +1,69 @@
+<?php
+
+    ob_start(); // Limpia el buffer por errores de salida
+    // Permite un mayor tiempo de respuesta del socket
+    ini_set('memory_limit', '-1');
+
+    $strModulo = $_POST['idModulo'];
+    if(empty($strModulo)){
+        $strModulo = 'ERR';
+    }
+
+    // Variables de respuesta
+    $estatus = 'EXITO';
+    $errorDescripcion = '';
+    $datosRecibidos = array();
+
+    if($_SERVER["REQUEST_METHOD"] == "POST") {
+        // Variables Recibidas
+        $accion = $_POST['accion'];
+        // Acciones Válidas
+        $arrAccionesValidas = array('buscarDatos');
+
+        if(in_array($accion, $arrAccionesValidas)){
+            switch ($accion){
+                case 'buscarDatos':
+                    $arrDatos = array();
+                    $dato = $_POST['dato1'];
+
+                    if($dato == 'prueba'){
+                        for($i = 0; $i < 5; $i++){
+                            $arrDatos[$i]['numLinea'] = $i + 1;
+                            $arrDatos[$i]['codigo'] = 'dato: '. ($i + 1);
+                        }
+
+                        // Para utilizarlos en javascript
+                        $arrDatosJs = array();
+                        foreach ($arrDatos as $Campos) {
+                            $arrDatosJs[] = $Campos;
+                        }
+                        unset($Campos);
+                        $strDatosJs = json_encode($arrDatosJs);
+                        unset($arrDatosJs);
+                        $datosRecibidos = $strDatosJs;
+
+                    }else{
+                        $estatus = 'ERROR';
+                        $errorDescripcion = 'SPS003 (' . $strModulo . ') - El argumento <b>'. $dato.'</b> no es válido';
+                        goto fin;
+                    }
+                    break;
+            }
+        }else{
+            $estatus = 'ERROR';
+            $errorDescripcion = 'SPS003 (' . $strModulo . ') - La acción solicitada no es válida.';
+            goto fin;
+        }
+    }else{
+        $estatus = 'ERROR';
+        $errorDescripcion = 'SPS003 (' . $strModulo . ') - Ocurrió un error al procesar la petición.';
+        goto fin;
+    }
+
+    fin :
+    $jsonResponse = array(
+        'estatus' => $estatus,
+        'errorDescripcion' => $errorDescripcion,
+        'datosRecibidos' => $datosRecibidos
+    );
+    echo json_encode($jsonResponse);

+ 278 - 0
plantasyp/refacciones.php

@@ -0,0 +1,278 @@
+<?php
+$strModulo = 'refacciones';
+
+$arrCT = array();
+//$url = 'https://www.solerpalau.mx/plantasyp/datosPlanta.php';
+$url = 'https://www.solerpalau.mx/plantasyp/datosPlanta.php';
+$opciones = array('http' =>
+    array(
+        'method' => 'GET',
+        'max_redirects' => '0',
+        'ignore_errors' => '1'
+    )
+);
+
+$contexto = stream_context_create($opciones);
+$flujo = fopen($url, 'r', false, $contexto);
+$arrResultadoPeticion = json_decode(stream_get_contents($flujo), true);
+
+$arrCT[0]['idCT'] = 'todos';
+$arrCT[0]['name'] = 'Todos';
+$contadorCT = 1;
+foreach ($arrResultadoPeticion['datosRespuesta'] as $clave => $valor){
+    $arrCT[$contadorCT]['idCT'] = $clave;
+    $arrCT[$contadorCT]['name'] = $clave;
+    $contadorCT++;
+}
+
+$jsonCentrosT = json_encode($arrCT);
+
+?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <meta http-equiv="imagetoolbar" content="no" />
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Poppins:400,500,700,300,600">
+    <link rel="stylesheet" type="text/css" href="//fonts.googleapis.com/css?family=Open+Sans">
+    <link media="screen" rel="stylesheet" type="text/css" href="css/principal.css" />
+    <!--<link media="screen" rel="stylesheet" type="text/css" href="css/pagination.css"  />--> <!--Paginador-->
+    <link rel="shortcut icon" type="image/x-icon" href="css/layout/global/sp.ico" />
+
+    <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dijit/themes/claro/claro.css">
+    <script src="//ajax.googleapis.com/ajax/libs/dojo/1.14.1/dojo/dojo.js" data-dojo-config="async: true, parseOnLoad:true"></script>
+
+    <style type="text/css">
+        /* Estilos para el DataGrid */
+        @import "//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojox/grid/resources/claroGrid.css";
+        @import "//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojo/resources/dojo.css";
+        @import "//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dijit/themes/claro/claro.css";
+        @import "//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dijit/themes/claro/document.css";
+        @import "//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojox/grid/enhanced/resources/claro/EnhancedGrid.css";
+        @import "//ajax.googleapis.com/ajax/libs/dojo/1.10.4/dojox/grid/enhanced/resources/EnhancedGrid_rtl.css";
+        #Grid_Refacciones {
+            height: 600px;
+        }
+
+    </style>
+
+    <script type="application/javascript">
+        // Cargamos los complementos de dojo
+        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",
+                "dojo/store/Memory", "dijit/form/FilteringSelect", "dijit/form/Button", "dojo/dom-class", "dijit/Dialog",
+                "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",
+                "dijit/ProgressBar", "dijit/ConfirmDialog", "dojo/dom-style", "dijit/form/ComboButton", "dijit/Menu", "dijit/MenuItem", "dijit/MenuSeparator", "dijit/Tooltip", "dijit/form/Form", "dijit/form/TextBox",
+                "dojox/grid/enhanced/plugins/Filter", "dijit/form/ValidationTextBox", "dijit/form/NumberSpinner", "dojo/request", "dojo/parser"],
+            function(dom, fx, array, query, domConstruct, dijit, style, ready, on, win,
+                     Memory, FilteringSelect, Button, domClass, Dialog,
+                     lang, DataGrid, ItemFileWriteStore, DnDConfig, EnhancedGrid, Selector, indirectSelection, nestedSorting,
+                     ProgressBar, ConfirmDialog, style, ComboButton, Menu, MenuItem, MenuSeparator, Tooltip, Form, TextBox, filter, ValidationTextBox, NumberSpinner, request) {
+
+                const idModulo = "<?php echo($strModulo);?>";
+                const arrCentrosT = <?php echo($jsonCentrosT); ?>;
+
+                // Para Mostrar de Mensajes de "error o éxito"
+                var dgEjecuta = new Dialog({title: 'Procesando...', style: 'width:300px'});
+                var pbMarcar = new ProgressBar({value: Number.POSITIVE_INFINITY, layoutAlign: 'left'});
+                dgEjecuta.setContent(pbMarcar);
+                dgResultadoError = new ConfirmDialog({ title:"<b>Error</b>", style: "min-width:300px; heigth; auto" });
+                style.set(dgResultadoError.cancelButton.domNode, 'display', 'none');
+                dgResultadoExito = new ConfirmDialog({ title:"<b>Éxito</b>", style: "min-width:300px; heigth; auto" });
+                style.set(dgResultadoExito.cancelButton.domNode, 'display', 'none');
+
+
+                /****************************************************************** Inputs ******************************************************************/
+                new FilteringSelect({
+                    id: "select_CentroTrabajo",
+                    store: new Memory({ idProperty: "idCT", data: arrCentrosT }),
+                    autoComplete: true,
+                    maxHeight: 300,
+                    style: "width: 100%;",
+                    placeHolder: "Seleccione una opción",
+                    onChange: function(idCt){
+                    }
+                }, "select_CentroTrabajo");
+
+                /****************************************************************** Botones ******************************************************************/
+                new Button({
+                    id: "btn_Buscar",
+                    label: "Buscar",
+                    iconClass: "dijitIconSearch",
+                    showLabel: false,
+                    onClick: function(){
+                        let centroT = dijit.byId('select_CentroTrabajo').value;
+                        if(centroT != ""){
+                            cargarGrid("id_Grid_Refacciones", centroT, "");
+                        }
+                    }
+                }, "btn_Buscar").startup();
+
+
+                /****************************************************************** Acciones ******************************************************************/
+                cargarGrid = function (idGrid, ct, maq){
+                    dgEjecuta.set("title", "Consultando...");
+                    dgEjecuta.show();
+
+                    var accion = "";
+                    var resdatosRecibidos = "datosRespuesta";
+                    var posicionDom = "";
+
+                    if(idGrid == "id_Grid_Refacciones"){
+                        accion = "buscarRefacciones";
+                        posicionDom = "Grid_Refacciones";
+                    }
+
+                    request.post("datosPlanta.php", {
+                        data: {
+                            accion: accion,
+                            idModulo: idModulo,
+                            ct: ct,
+                            maq: maq
+                        }
+                    }).then(
+                        function (response) {
+                            var objResponse = JSON.parse(response);
+                            if (objResponse['estatus'] == "ERROR") {
+                                dgEjecuta.hide();
+                                dgResultadoError.setContent(objResponse['errorDescripcion']);
+                                dgResultadoError.show();
+                            } else {
+                                let datosRecibidos = objResponse[resdatosRecibidos];
+
+                                // Configuramos el data store
+                                var data = {
+                                    identifier: "id",
+                                    items: []
+                                };
+
+                                // Creamos la lista de objetos
+                                var data_list = JSON.parse(datosRecibidos);
+
+                                for(var i = 0, l = data_list.length; i < data_list.length; i++){
+                                    data.items.push(lang.mixin({ id: i+1 }, data_list[i%l]));
+                                }
+                                var store = new ItemFileWriteStore({data: data});
+
+                                // Destruimos el dataGrid si ya existe
+                                if (dijit.byId(idGrid)){
+                                    dijit.byId(idGrid).destroy();
+                                }
+
+                                if(idGrid == "id_Grid_Refacciones"){
+                                    var estructuralayout = [[
+                                        {'name': 'No.', 'field': 'id', 'width': '30px', 'datatype':'number'},
+                                        {'name': 'Centro de Trabajo', 'field': 'ct', 'width': '250px', 'datatype':'string'},
+                                        {'name': 'Máquina', 'field': 'maquina', 'width': '250px', 'datatype':'string'},
+                                        {'name': 'Refacción', 'field': 'refaccion', 'width': '250px', 'datatype':'string'},
+                                        {'name': 'Desgaste', 'field': 'desgaste', 'width': '250px', 'datatype':'string'},
+                                        {'name': 'Duración', 'field': 'duracion', 'width': '250px', 'datatype':'string'},
+                                        {'name': 'Próximo Pedido', 'field': 'proximoPedido', 'width': '250px', 'datatype':'string'}
+                                    ]];
+                                }
+
+                                var grid = new EnhancedGrid({
+                                    id: idGrid,
+                                    store: store,
+                                    structure: estructuralayout,
+                                    autoHeight: false,
+                                    autoWidth: false,
+                                    rowSelector: '20px',
+                                    noDataMessage: 'No se encontraron datos',
+                                    canSort: function () {
+                                        return true;
+                                    }, // Filtra
+                                    plugins: {
+                                        nestedSorting: true,
+                                        filter: {
+                                            // Show the closeFilterbarButton at the filter bar
+                                            closeFilterbarButton: false,
+                                            // Set the maximum rule count to 5
+                                            ruleCount: 5,
+                                            // Set the name of the items
+                                            itemsName: "registros"
+                                        }
+                                    }
+                                });
+
+
+                                // Cargamos el dataGrid en el div
+                                grid.placeAt(posicionDom);
+                                // Inicializamos el dataGrid
+                                grid.startup();
+
+                                dgEjecuta.hide();
+                            }
+                        }
+                    );
+
+                };
+
+                ready(function() {
+                    // Actualizar el tamaño del TabContainer en función del tamaño de página
+                    var ventana = win.getBox();
+                    var strVentana = (ventana.h-130)+"px";
+                    style.set(dijit.byId("djTab").id, { height:strVentana });
+                    dijit.byId("djTab").resize();
+
+                    // Actualizar el tamaño del TabContainer en función del tamaño de página
+                    on(window, "resize", function() {
+                        var ventana = win.getBox();
+                        var strVentana = (ventana.h-130)+"px";
+                        style.set(dijit.byId("djTab").id, { height:strVentana });
+                        dijit.byId("djTab").resize();
+                    });
+                    // Eliminar la cortina de entrada
+                    fx.fadeOut({node: dom.byId("loadingOverlay"), duration: 1}).play();
+                    setTimeout(function () {
+                        domConstruct.destroy("loadingOverlay");
+                    }, 1);
+
+                    cargarGrid("id_Grid_Refacciones", "todos", "");
+
+                });
+            });
+    </script>
+
+</head>
+
+<body class="claro">
+<div id="loadingOverlay" class="loadingOverlay pageOverlay">
+    <div class="loadingMessage">Espere...</div>
+</div>
+
+<div id="wrapper_container_module">
+    <div id="wrapper_table" style="position:relative;">
+        <div data-dojo-type="dijit/form/Form" id="frm" data-dojo-id="frm" encType="multipart/form-data"
+             action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post" style="position:relative;">
+            <script type="dojo/on" data-dojo-event="submit">return true;</script>
+            <div id="wrapper_table_head">Refacciones</div>
+            <div id="wrapper_table_body_mod_app">
+
+                <table width="100%" height="auto" border="0" style="border-spacing: 5px;">
+                    <tr>
+                        <td width="10%" colspan="2" class="etiquetaFormulario">
+                            <label class="noTopPadding">Centro de Trabajo:</label>
+                        </td>
+                        <td width="20%" colspan="4">
+                            <input id="select_CentroTrabajo"/>
+                        </td>
+                        <td width="70%" colspan="14">
+                            <button id="btn_Buscar" type="button"></button>
+                        </td>
+                    </tr>
+                </table>
+
+                <div id="djTab" data-dojo-type="dijit/layout/LayoutContainer" style="overflow-y: auto;">
+                    <div style="margin-top: 15px">
+                        <div id="Grid_Refacciones"></div>
+                    </div>
+                </div>
+
+            </div>
+        </div>
+    </div>
+</div>
+
+</body>
+

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác