<html>
<head>
<title>Tipos de Informes</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.5/font/bootstrap-icons.css">
<link rel="stylesheet" href="css/custom.css">
<script src="https://code.jquery.com/jquery-3.7.0.js"></script>
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.6/css/jquery.dataTables.css" >
<script src="https://cdn.datatables.net/1.13.6/js/jquery.dataTables.js"></script>
<style>
.scrollable {
overflow-y: auto;
height: 475px;
}
</style>
</head>
<body>
<div class="container-fluid">
<div class="row flex-nowrap">
<div class="col-auto col-md-3 col-xl-2 px-sm-2 px-0 bg-dark">
<div class="d-flex flex-column align-items-center align-items-sm-start px-3 pt-2 text-white min-vh-100">
<a href="index.php" style="text-decoration:none; color:white"><span class="fs-5 d-none d-sm-inline">Menu</span></a>
<ul class="nav nav-pills flex-column mb-sm-auto mb-0 align-items-center align-items-sm-start" id="menu">
<!--<ul class="collapse nav flex-column ms-1" id="submenu2" data-bs-parent="#menu">-->
<li class="w-100 li-menu1">
<a href="index_importar.php" class="nav-link px-0"> <span class="d-none d-sm-inline">Importar informes</span></a>
</li>
<li class="li-menu1">
<a href="index_status.php" class="nav-link px-0"> <span class="d-none d-sm-inline">Status imports</span></a>
</li>
<!--
<a href="#submenu2" data-bs-toggle="collapse" class="nav-link px-0 align-middle ">
<i class="fs-4 bi-table"></i> <span class="ms-1 d-none d-sm-inline">Adform </span>
</a>
<ul class=" nav flex-column ms-1" id="submenu2" data-bs-parent="#menu">
<li class="w-100 li-menu1">
<a href="#" class="nav-link px-0"> <span class="d-none d-sm-inline">Importar informes</span></a>
</li>
<li class="li-menu1">
<a href="#" class="nav-link px-0"> <span class="d-none d-sm-inline">Status imports</span></a>
</li>
</ul>-->
</ul>
<hr>
<div class="dropdown pb-4">
<a href="#" class="d-flex align-items-center text-white text-decoration-none dropdown-toggle" id="dropdownUser1" data-bs-toggle="dropdown" aria-expanded="false">
<span class="d-none d-sm-inline mx-1">Bienvenido, user2!</span>
</a>
<ul class="dropdown-menu dropdown-menu-dark text-small shadow" aria-labelledby="dropdownUser1">
<!--<li><a class="dropdown-item" href="#">New project...</a></li>
<li><a class="dropdown-item" href="#">Settings</a></li>
<li><a class="dropdown-item" href="#">Profile</a></li>
<li>
<hr class="dropdown-divider">
</li>-->
<li><a class="dropdown-item" href="logout.php">Sign out</a></li>
</ul>
</div>
</div>
</div> <div class="col py-3">
<h3>Status de los informes</h3>
<h4>Informes corriendo ahora:</h4>
<div class='scrollable'>
<table id='myTable' class='display'>
<thead>
<tr>
<th>Username</th>
<th>Status</th>
<th>Resultado Import</th>
<th>Report ID</th>
<th>ID</th>
<th>Fichero Importado</th>
<th>DateTime Finished</th>
<th>DateTime Created</th>
<th>Comments</th>
</tr>
</thead>
<tbody>
<tr>
<td>user2</td>
<td>procesando</td>
<td></td>
<td>2</td>
<td>1</td>
<td>xxxx.csv</td>
<td>0000-00-00 00:00:00</td>
<td>0000-00-00 00:00:00</td>
<td></td>
</tr>
</tbody>
<tbody>
<tr>
<td>user1</td>
<td>creado</td>
<td></td>
<td>1</td>
<td>2</td>
<td>uyyyyyy.csv</td>
<td>0000-00-00 00:00:00</td>
<td>2023-08-22 20:25:21</td>
<td></td>
</tr>
</tbody>
<tbody>
<tr>
<td>user2</td>
<td>procesando</td>
<td>NULL</td>
<td>2</td>
<td>4</td>
<td>xxxx.csv</td>
<td>0000-00-00 00:00:00</td>
<td>0000-00-00 00:00:00</td>
<td>NULL</td>
</tr>
</tbody>
<tbody>
<tr>
<td>user1</td>
<td>procesando</td>
<td>NULL</td>
<td>1</td>
<td>5</td>
<td>uyyyyyy.csv</td>
<td>0000-00-00 00:00:00</td>
<td>2023-08-22 20:25:21</td>
<td>NULL</td>
</tr>
</tbody>
<tbody>
<tr>
<td>user2</td>
<td>creado</td>
<td>NULL</td>
<td>2</td>
<td>6</td>
<td>xxxx.csv</td>
<td>0000-00-00 00:00:00</td>
<td>0000-00-00 00:00:00</td>
<td>NULL</td>
</tr>
</tbody>
<tbody>
<tr>
<td>user1</td>
<td>creado</td>
<td>NULL</td>
<td>1</td>
<td>7</td>
<td>uyyyyyy.csv</td>
<td>0000-00-00 00:00:00</td>
<td>2023-08-22 20:25:21</td>
<td>NULL</td>
</tr>
</tbody>
<tbody>
<tr>
<td>user2</td>
<td>procesando</td>
<td>NULL</td>
<td>2</td>
<td>8</td>
<td>xxxx.csv</td>
<td>0000-00-00 00:00:00</td>
<td>0000-00-00 00:00:00</td>
<td>NULL</td>
</tr>
</tbody>
<tbody>
<tr>
<td>user1</td>
<td>creado</td>
<td>NULL</td>
<td>1</td>
<td>9</td>
<td>uyyyyyy.csv</td>
<td>0000-00-00 00:00:00</td>
<td>2023-08-22 20:25:21</td>
<td>NULL</td>
</tr>
</tbody>
<tbody>
<tr>
<td>user2</td>
<td>procesando</td>
<td>NULL</td>
<td>2</td>
<td>10</td>
<td>xxxx.csv</td>
<td>0000-00-00 00:00:00</td>
<td>0000-00-00 00:00:00</td>
<td>NULL</td>
</tr>
</tbody>
<tbody>
<tr>
<td>user1</td>
<td>creado</td>
<td>NULL</td>
<td>1</td>
<td>11</td>
<td>uyyyyyy.csv</td>
<td>0000-00-00 00:00:00</td>
<td>2023-08-22 20:25:21</td>
<td>NULL</td>
</tr>
</tbody>
<tbody>
<tr>
<td>user2</td>
<td>creado</td>
<td>NULL</td>
<td>2</td>
<td>12</td>
<td>xxxx.csv</td>
<td>0000-00-00 00:00:00</td>
<td>0000-00-00 00:00:00</td>
<td>NULL</td>
</tr>
</tbody>
<tbody>
<tr>
<td>user1</td>
<td>creado</td>
<td>NULL</td>
<td>1</td>
<td>13</td>
<td>uyyyyyy.csv</td>
<td>0000-00-00 00:00:00</td>
<td>2023-08-22 20:25:21</td>
<td>NULL</td>
</tr>
</tbody>
<tbody>
<tr>
<td>user2</td>
<td>creado</td>
<td>NULL</td>
<td>2</td>
<td>14</td>
<td>xxxx.csv</td>
<td>0000-00-00 00:00:00</td>
<td>0000-00-00 00:00:00</td>
<td>NULL</td>
</tr>
</tbody>
<tbody>
<tr>
<td>user1</td>
<td>creado</td>
<td>NULL</td>
<td>1</td>
<td>15</td>
<td>uyyyyyy.csv</td>
<td>0000-00-00 00:00:00</td>
<td>2023-08-22 20:25:21</td>
<td>NULL</td>
</tr>
</tbody>
<tbody>
<tr>
<td>user2</td>
<td>creado</td>
<td>NULL</td>
<td>2</td>
<td>16</td>
<td>xxxx.csv</td>
<td>0000-00-00 00:00:00</td>
<td>0000-00-00 00:00:00</td>
<td>NULL</td>
</tr>
</tbody>
<tbody>
<tr>
<td>user1</td>
<td>creado</td>
<td>NULL</td>
<td>1</td>
<td>17</td>
<td>uyyyyyy.csv</td>
<td>0000-00-00 00:00:00</td>
<td>2023-08-22 20:25:21</td>
<td>NULL</td>
</tr>
</tbody>
<tbody>
<tr>
<td>user2</td>
<td>creado</td>
<td>NULL</td>
<td>2</td>
<td>18</td>
<td>xxxx.csv</td>
<td>0000-00-00 00:00:00</td>
<td>0000-00-00 00:00:00</td>
<td>NULL</td>
</tr>
</tbody>
<tbody>
<tr>
<td>user1</td>
<td>creado</td>
<td>NULL</td>
<td>1</td>
<td>19</td>
<td>uyyyyyy.csv</td>
<td>0000-00-00 00:00:00</td>
<td>2023-08-22 20:25:21</td>
<td>NULL</td>
</tr>
</tbody>
<tbody>
<tr>
<td>user2</td>
<td>creado</td>
<td>NULL</td>
<td>2</td>
<td>20</td>
<td>xxxx.csv</td>
<td>0000-00-00 00:00:00</td>
<td>0000-00-00 00:00:00</td>
<td>NULL</td>
</tr>
</tbody>
<tbody>
<tr>
<td>user1</td>
<td>creado</td>
<td>NULL</td>
<td>1</td>
<td>21</td>
<td>uyyyyyy.csv</td>
<td>0000-00-00 00:00:00</td>
<td>2023-08-22 20:25:21</td>
<td>NULL</td>
</tr>
</tbody>
<tbody>
<tr>
<td>user2</td>
<td>creado</td>
<td>NULL</td>
<td>2</td>
<td>22</td>
<td>xxxx.csv</td>
<td>0000-00-00 00:00:00</td>
<td>0000-00-00 00:00:00</td>
<td>NULL</td>
</tr>
</tbody>
<tbody>
<tr>
<td>user1</td>
<td>creado</td>
<td>NULL</td>
<td>1</td>
<td>23</td>
<td>uyyyyyy.csv</td>
<td>0000-00-00 00:00:00</td>
<td>2023-08-22 20:25:21</td>
<td>NULL</td>
</tr>
</tbody>
<tbody>
<tr>
<td>user2</td>
<td>creado</td>
<td>NULL</td>
<td>2</td>
<td>24</td>
<td>xxxx.csv</td>
<td>0000-00-00 00:00:00</td>
<td>0000-00-00 00:00:00</td>
<td>NULL</td>
</tr>
</tbody>
<tbody>
<tr>
<td>user1</td>
<td>creado</td>
<td>NULL</td>
<td>1</td>
<td>25</td>
<td>uyyyyyy.csv</td>
<td>0000-00-00 00:00:00</td>
<td>2023-08-22 20:25:21</td>
<td>NULL</td>
</tr>
</tbody>
<tbody>
<tr>
<td>user2</td>
<td>creado</td>
<td>NULL</td>
<td>2</td>
<td>26</td>
<td>xxxx.csv</td>
<td>0000-00-00 00:00:00</td>
<td>0000-00-00 00:00:00</td>
<td>NULL</td>
</tr>
</tbody>
<tbody>
<tr>
<td>user1</td>
<td>creado</td>
<td>NULL</td>
<td>1</td>
<td>27</td>
<td>uyyyyyy.csv</td>
<td>0000-00-00 00:00:00</td>
<td>2023-08-22 20:25:21</td>
<td>NULL</td>
</tr>
</tbody></table></div> </div>
</div>
</div>
<script>
$(document).ready( function () {
$('#myTable').DataTable();
} );
</script>
</body>
</html>
body {
font: 90%/1.45em "Helvetica Neue", HelveticaNeue, Verdana, Arial, Helvetica, sans-serif;
margin: 0;
padding: 0;
color: #333;
background-color: #fff;
}
// Based on example from:
// https://datatables.net/forums/discussion/49457
$(document).ready( function () {
function getHeaderNames(table) {
// Gets header names.
//params:
// table: table ID.
//Returns:
// Array of column header names.
var header = $(table).DataTable().columns().header().toArray();
var names = [];
header.forEach(function(th) {
names.push($(th).html());
});
return names;
}
function buildCols(data) {
// Builds cols XML.
//To do: deifne widths for each column.
//Params:
// data: row data.
//Returns:
// String of XML formatted column widths.
var cols = '<cols>';
for (i=0; i<data.length; i++) {
colNum = i + 1;
cols += '<col min="' + colNum + '" max="' + colNum + '" width="20" customWidth="1"/>';
}
cols += '</cols>';
return cols;
}
function buildRow(data, rowNum, styleNum) {
// Builds row XML.
//Params:
// data: Row data.
// rowNum: Excel row number.
// styleNum: style number or empty string for no style.
//Returns:
// String of XML formatted row.
var style = styleNum ? ' s="' + styleNum + '"' : '';
var row = '<row r="' + rowNum + '">';
for (i=0; i<data.length; i++) {
colNum = (i + 10).toString(36).toUpperCase(); // Convert to alpha
var cr = colNum + rowNum;
row += '<c t="inlineStr" r="' + cr + '"' + style + '>' +
'<is>' +
'<t>' + data[i] + '</t>' +
'</is>' +
'</c>';
}
row += '</row>';
return row;
}
function getTableData(table, title) {
// Processes Datatable row data to build sheet.
//Params:
// table: table ID.
// title: Title displayed at top of SS or empty str for no title.
//Returns:
// String of XML formatted worksheet.
var header = getHeaderNames(table);
var table = $(table).DataTable();
var rowNum = 1;
var mergeCells = '';
var ws = '';
ws += buildCols(header);
ws += '<sheetData>';
if (title.length > 0) {
ws += buildRow([title], rowNum, 51);
rowNum++;
mergeCol = ((header.length - 1) + 10).toString(36).toUpperCase();
mergeCells = '<mergeCells count="1">'+
'<mergeCell ref="A1:' + mergeCol + '1"/>' +
'</mergeCells>';
}
ws += buildRow(header, rowNum, 2);
rowNum++;
// Loop through each row to append to sheet.
table.rows().every( function ( rowIdx, tableLoop, rowLoop ) {
var data = this.data();
// If data is object based then it needs to be converted
// to an array before sending to buildRow()
ws += buildRow(data, rowNum, '');
rowNum++;
} );
ws += '</sheetData>' + mergeCells;
return ws;
}
function setSheetName(xlsx, name) {
// Changes tab title for sheet.
//Params:
// xlsx: xlxs worksheet object.
// name: name for sheet.
if (name.length > 0) {
var source = xlsx.xl['workbook.xml'].getElementsByTagName('sheet')[0];
source.setAttribute('name', name);
}
}
function addSheet(xlsx, table, title, name, sheetId) {
//Clones sheet from Sheet1 to build new sheet.
//Params:
// xlsx: xlsx object.
// table: table ID.
// title: Title for top row or blank if no title.
// name: Name of new sheet.
// sheetId: string containing sheetId for new sheet.
//Returns:
// Updated sheet object.
//Add sheet2 to [Content_Types].xml => <Types>
//============================================
var source = xlsx['[Content_Types].xml'].getElementsByTagName('Override')[1];
var clone = source.cloneNode(true);
clone.setAttribute('PartName','/xl/worksheets/sheet2.xml');
xlsx['[Content_Types].xml'].getElementsByTagName('Types')[0].appendChild(clone);
//Add sheet relationship to xl/_rels/workbook.xml.rels => Relationships
//=====================================================================
var source = xlsx.xl._rels['workbook.xml.rels'].getElementsByTagName('Relationship')[0];
var clone = source.cloneNode(true);
clone.setAttribute('Id','rId3');
clone.setAttribute('Target','worksheets/sheet2.xml');
xlsx.xl._rels['workbook.xml.rels'].getElementsByTagName('Relationships')[0].appendChild(clone);
//Add second sheet to xl/workbook.xml => <workbook><sheets>
//=========================================================
var source = xlsx.xl['workbook.xml'].getElementsByTagName('sheet')[0];
var clone = source.cloneNode(true);
clone.setAttribute('name', name);
clone.setAttribute('sheetId', sheetId);
clone.setAttribute('r:id','rId3');
xlsx.xl['workbook.xml'].getElementsByTagName('sheets')[0].appendChild(clone);
//Add sheet2.xml to xl/worksheets
//===============================
var newSheet = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'+
'<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" mc:Ignorable="x14ac">'+
getTableData(table, title) +
'</worksheet>';
xlsx.xl.worksheets['sheet2.xml'] = $.parseXML(newSheet);
}
var table = $('#example').DataTable({
dom: 'Bftrip',
buttons: [
{
extend: 'excelHtml5',
text: 'Excel',
customize: function( xlsx ) {
setSheetName(xlsx, 'Calls');
addSheet(xlsx, '#example2', 'My Sheet2', 'Summary', '2');
}
}
]
});
$('#example2').DataTable();
} );
You can jump to the latest bin by adding /latest
to your URL
Shortcut | Action |
---|---|
ctrl + [num] | Toggle nth panel |
ctrl + 0 | Close focused panel |
ctrl + enter | Re-render output. If console visible: run JS in console |
Ctrl + l | Clear the console |
ctrl + / | Toggle comment on selected lines |
ctrl + [ | Indents selected lines |
ctrl + ] | Unindents selected lines |
tab | Code complete & Emmet expand |
ctrl + s | Save & lock current Bin from further changes |
ctrl + shift + s | Clone Bin |
ctrl + y | Archive Bin |
Complete list of JS Bin shortcuts |
URL | Action |
---|---|
/ | Show the full rendered output. This content will update in real time as it's updated from the /edit url. |
/edit | Edit the current bin |
/watch | Follow a Code Casting session |
/embed | Create an embeddable version of the bin |
/latest | Load the very latest bin (/latest goes in place of the revision) |
/[username]/last | View the last edited bin for this user |
/[username]/last/edit | Edit the last edited bin for this user |
/[username]/last/watch | Follow the Code Casting session for the latest bin for this user |
/quiet | Remove analytics and edit button from rendered output |
.js | Load only the JavaScript for a bin |
.css | Load only the CSS for a bin |
Except for username prefixed urls, the url may start with http://jsbin.com/abc and the url fragments can be added to the url to view it differently. |