<html>
<head>
<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
<link href="https://nightly.datatables.net/css/jquery.dataTables.css" rel="stylesheet" type="text/css" />
<script src="https://nightly.datatables.net/js/jquery.dataTables.js"></script>
<meta charset=utf-8 />
<title>DataTables - JS Bin</title>
</head>
<body>
</div>
<div class="row row-padding">
<div class="col-12">
<div class="card">
<div class="card-body">
<button id="show">Show All</button>
<button id="hide">Hide All</button>
<table id="salespersonBillTo" class="" width="100%">
<thead style="display: none"></thead>
</table>
</div>
</div>
</div>
</div>
</body>
</html>
#salespersonBillTo {
font-family: Sans-serif;
font-size: 0.80rem;
}
#salespersonBillTo table.dataTable.compact tbody th, table.dataTable.compact tbody td,
table.dataTable.compact tfoot td {
padding: 0px 0px 0px 0px;
}
#budgetCompletedBadge {
border-radius: 0.25rem;
background-color: transparent;
border: none;
color: #28a745;
font-weight: bold;
width: 138px;
height: 25px;
}
/**********************************************/
/* Level 1 table and row styles (Salesperson) */
/**********************************************/
/* .level-1-control-row-format-0{ text-align: left; } */
.level-1-control-row-format-1 {
text-align: left;
width: 195px
}
.level-1-control-row-format-2 {
text-align: left;
width: 50px
}
.level-1-control-row-format-3 {
text-align: left;
width: 50px
}
.level-1-control-row-format-4 {
text-align: left;
width: 940px
}
#salespersonBillTo td.BR_CBT_detail-level-control_1,
#salespersonBillTo td.BR_CBT_detail-level-control_2 {
background: url('https://www.datatables.net/examples/resources/details_open.png') no-repeat center ;
cursor: pointer;
transition: .5s;
height: 30px;
width: 25px
}
#salespersonBillTo tr.shown td.BR_CBT_detail-level-control_1,
#salespersonBillTo tr.shown td.BR_CBT_detail-level-control_2 {
background: url('https://www.datatables.net/examples/resources/details_close.png'') no-repeat center ;
transition: .5s;
height: 30px;
width: 25px
}
/* Level 1 button badges (Salesperson) */
#BR_CBT_SalespersonOpenBudgetButton {
border-radius: 0.25rem;
background-color: #dc3545;
border: none;
color: white;
width: 138px;
height: 25px;
}
#BR_CBT_SalespersonCompletedBudgetButton {
border-radius: 0.25rem;
background-color: #28a745;
border: none;
color: white;
width: 138px;
height: 25px;
}
#BR_CBT_SalespersonTotalBudgetButton {
border-radius: 0.25rem;
background-color: #6c757d;
border: none;
color: white;
width: 138px;
height: 25px;
}
/***************************************************/
/* Level 2 table and row styles (Customer Bill To) */
/***************************************************/
.level-2-control-row-format-1 {
text-align: left;
width: 274px
}
.level-2-control-row-format-2 {
text-align: left;
width: 120px
}
.level-2-control-row-format-3 {
text-align: left;
width: 120px
}
.level-2-control-row-format-4 {
text-align: left;
width: 812px
}
#salespersonBillTo td.BR_CBT_detail-level-control_2 {
background: url('https://www.datatables.net/examples/resources/details_open.png') no-repeat center ;
cursor: pointer;
transition: .5s;
height: 30px;
width: 25px
}
#salespersonBillTo tr.shown td.BR_CBT_detail-level-control_2 {
background: url('https://www.datatables.net/examples/resources/details_close.png'') no-repeat center ;
transition: .5s;
height: 30px;
width: 25px
}
/* Level 2 button badges (Customer Bill To) */
#BR_CBT_customerOpenBudgetButton {
border-radius: 0.25rem;
background-color: #dc3545;
border: none;
color: white;
width: 138px;
height: 25px;
}
#BR_CBT_customerCompletedBudgetButton {
border-radius: 0.25rem;
background-color: #28a745;
border: none;
color: white;
width: 138px;
height: 25px;
}
#BR_CBT_customerTotalBudgetButton {
border-radius: 0.25rem;
background-color: #6c757d;
border: none;
color: white;
width: 138px;
height: 25px;
}
/*******************************************/
/* Level 3 table and row styles (Products) */
/*******************************************/
.level-3-control-row-format-1 {
text-align: left;
width: 80px
}
.level-3-control-row-format-2 {
text-align: left;
width: 60px
}
.level-3-control-row-format-3 {
text-align: left;
width: 270px
}
.level-3-control-row-format-4 {
text-align: left;
width: 1022px
}
#salespersonBillTo td.BR_CBT_detail-level-control_3 {
background: url('https://www.datatables.net/examples/resources/details_open.png') no-repeat center;
cursor: pointer;
transition: .5s;
height: 30px;
width: 47px
}
#salespersonBillTo tr.shown td.BR_CBT_detail-level-control_3 {
background: url('https://www.datatables.net/examples/resources/details_close.png') no-repeat center;
transition: .5s;
height: 30px;
width: 47px
}
var salespersonDataSet = [
{returnedSalespersonGroupNumber:"716",salespersonName:"BILL MANN",totalBudget:"2",openBudget:"1",completedBudget:"1"},
{returnedSalespersonGroupNumber:"11",salespersonName:"RICKY BOBBY",totalBudget:"3",openBudget:"3",completedBudget:"0"},
];
var customersDataSet = [
{
customer: '1 - Test Customer',
customerNumber: '1',
openBudget: '1',
completedBudget: '0',
totalBudget: '2',
returnedSalespersonGroupNumber: '716',
},
{
customer: '2 - Test Customer',
customerNumber: '2',
openBudget: '0',
completedBudget: '1',
totalBudget: '2',
returnedSalespersonGroupNumber: '716',
},
{
customer: '3 - Test Customer',
customerNumber: '3',
openBudget: '3',
completedBudget: '0',
totalBudget: '3',
returnedSalespersonGroupNumber: '11',
},
{
customer: '4 - Test Customer',
customerNumber: '4',
openBudget: '3',
completedBudget: '0',
totalBudget: '3',
returnedSalespersonGroupNumber: '11',
},
{
customer: '5 - Test Customer',
customerNumber: '5',
openBudget: '3',
completedBudget: '0',
totalBudget: '3',
returnedSalespersonGroupNumber: '11',
},
];
var productsDataSet = [
{
status: 'Completed',
customerNumber: '1',
productNumber: 'B12348',
productDescription: 'Test Product',
locationCode: 'CHI',
shipToCode: '',
shipMessage: '',
customerBillToName: '',
customerBillToAddress1: '',
customerBillToAddress2: '',
customerBillToAddress3: '',
customerShipToName: '',
customerShipToAddress1: '',
customerShipToAddress2: '',
customerShipToAddress3: '',
lastYear_JanuarySales: '.0',
lastYear_FebruarySales: '.0',
lastYear_MarchSales: '.0',
lastYear_AprilSales: '.0',
lastYear_MaySales: '.0',
lastYear_JuneSales: '.0',
lastYear_JulySales: '.0',
lastYear_AugustSales: '.0',
lastYear_SeptemberSales: '.0',
lastYear_OctoberSales: '.0',
lastYear_NovemberSales: '.0',
lastYear_DecemberSales: '.0',
lastYear_TotalSales: 0,
thisYear_JanuarySales: '.0',
thisYear_FebruarySales: '.0',
thisYear_MarchSales: '.0',
thisYear_AprilSales: '.0',
thisYear_MaySales: '.0',
thisYear_JuneSales: '.0',
thisYear_JulySales: '.0',
thisYear_AugustSales: '.0',
thisYear_SeptemberSales: '.0',
thisYear_OctoberSales: '.0',
thisYear_NovemberSales: '.0',
thisYear_DecemberSales: '.0',
thisYear_TotalSales: 0,
returnedSalespersonGroupNumber: '716',
},
{
status: 'Completed',
customerNumber: '1',
productNumber: 'G11111',
productDescription: 'Test Product',
locationCode: 'CHI',
shipToCode: '',
shipMessage: '',
customerBillToName: '',
customerBillToAddress1: '',
customerBillToAddress2: '',
customerBillToAddress3: '',
customerShipToName: '',
customerShipToAddress1: '',
customerShipToAddress2: '',
customerShipToAddress3: '',
lastYear_JanuarySales: '.0',
lastYear_FebruarySales: '.0',
lastYear_MarchSales: '.0',
lastYear_AprilSales: '.0',
lastYear_MaySales: '.0',
lastYear_JuneSales: '.0',
lastYear_JulySales: '.0',
lastYear_AugustSales: '.0',
lastYear_SeptemberSales: '.0',
lastYear_OctoberSales: '.0',
lastYear_NovemberSales: '.0',
lastYear_DecemberSales: '.0',
lastYear_TotalSales: 0,
thisYear_JanuarySales: '.0',
thisYear_FebruarySales: '.0',
thisYear_MarchSales: '.0',
thisYear_AprilSales: '.0',
thisYear_MaySales: '.0',
thisYear_JuneSales: '.0',
thisYear_JulySales: '.0',
thisYear_AugustSales: '.0',
thisYear_SeptemberSales: '.0',
thisYear_OctoberSales: '.0',
thisYear_NovemberSales: '.0',
thisYear_DecemberSales: '.0',
thisYear_TotalSales: 0,
returnedSalespersonGroupNumber: '716',
},
{
status: 'Open',
customerNumber: '2',
productNumber: 'B12348',
productDescription: 'Test Product',
locationCode: 'CHI',
shipToCode: '',
shipMessage: '',
customerBillToName: '',
customerBillToAddress1: '',
customerBillToAddress2: '',
customerBillToAddress3: '',
customerShipToName: '',
customerShipToAddress1: '',
customerShipToAddress2: '',
customerShipToAddress3: '',
lastYear_JanuarySales: '.0',
lastYear_FebruarySales: '.0',
lastYear_MarchSales: '.0',
lastYear_AprilSales: '.0',
lastYear_MaySales: '.0',
lastYear_JuneSales: '.0',
lastYear_JulySales: '.0',
lastYear_AugustSales: '.0',
lastYear_SeptemberSales: '.0',
lastYear_OctoberSales: '.0',
lastYear_NovemberSales: '.0',
lastYear_DecemberSales: '.0',
lastYear_TotalSales: 0,
thisYear_JanuarySales: '.0',
thisYear_FebruarySales: '.0',
thisYear_MarchSales: '.0',
thisYear_AprilSales: '.0',
thisYear_MaySales: '.0',
thisYear_JuneSales: '.0',
thisYear_JulySales: '.0',
thisYear_AugustSales: '.0',
thisYear_SeptemberSales: '.0',
thisYear_OctoberSales: '.0',
thisYear_NovemberSales: '.0',
thisYear_DecemberSales: '.0',
thisYear_TotalSales: 0,
returnedSalespersonGroupNumber: '11',
},
{
status: 'Open',
customerNumber: '2',
productNumber: 'L11111',
productDescription: 'Test Product',
locationCode: 'CHI',
shipToCode: '',
shipMessage: '',
customerBillToName: '',
customerBillToAddress1: '',
customerBillToAddress2: '',
customerBillToAddress3: '',
customerShipToName: '',
customerShipToAddress1: '',
customerShipToAddress2: '',
customerShipToAddress3: '',
lastYear_JanuarySales: '.0',
lastYear_FebruarySales: '.0',
lastYear_MarchSales: '.0',
lastYear_AprilSales: '.0',
lastYear_MaySales: '.0',
lastYear_JuneSales: '.0',
lastYear_JulySales: '.0',
lastYear_AugustSales: '.0',
lastYear_SeptemberSales: '.0',
lastYear_OctoberSales: '.0',
lastYear_NovemberSales: '.0',
lastYear_DecemberSales: '.0',
lastYear_TotalSales: 0,
thisYear_JanuarySales: '.0',
thisYear_FebruarySales: '.0',
thisYear_MarchSales: '.0',
thisYear_AprilSales: '.0',
thisYear_MaySales: '.0',
thisYear_JuneSales: '.0',
thisYear_JulySales: '.0',
thisYear_AugustSales: '.0',
thisYear_SeptemberSales: '.0',
thisYear_OctoberSales: '.0',
thisYear_NovemberSales: '.0',
thisYear_DecemberSales: '.0',
thisYear_TotalSales: 0,
returnedSalespersonGroupNumber: '11',
},
];
var salespersonRowBudgetCounts = []; // Array used for getting open and closed for salesperson level button badge
var customerRowBudgetCounts = []; // Array used for getting open and closed for customer level button badge
var productRowBudgetCounts = []; // Array used for getting open and closed for product level button badge
function showAll(flag) {
var parentTable = $('#salespersonBillTo').DataTable();
parentTable.rows().every(function () {
// If need to show and not shown yet, or
// If need to hide and is shown,
// Then click the control icon, which toggles the row
if ((flag && ! this.child.isShown()) || (! flag && this.child.isShown())) {
$('td.child-control', this.node()).trigger('click', {
showChildren: true
});
}
});
}
function createChild_1(row, showChildren) {
//parent table data
var rowData = row.data();
var salespersonGroupingNumber = rowData.returnedSalespersonGroupNumber;
// This is the table we'll convert into a DataTable
var salespersonBillTo_childTable1 = $(
'<table class="display nowrap" width="100%"><thead style="display:none"></thead ></table>'
);
// Display it the child row
row.child(salespersonBillTo_childTable1).show();
// Child row DataTable configuration, always passes the parent row's id to server
var customerTable = salespersonBillTo_childTable1
.on(
'click',
'td.BR_CBT_detail-level-control_2',
function (e, d) {
e.stopPropagation(); // Make sure the Parent event doesn't execute
// DT API instance might be passed in as part of the second parameter
// Happens during initialisation
var table = d && d.api
? d.api
: customerTable;
var tr = $(this).closest('tr');
var row = table.row(tr);
if (row.child.isShown()) {
// This row is already open - close it
destroyChild(row);
tr.removeClass('shown');
} else {
// Open this row
createChild_2(row);
tr.addClass('shown');
}
}
)
.DataTable({
//Store budget status total number (used to reset button badge totals when budget is marked complteted)
rowCallback: function (row, data, index) {
customerRowBudgetCounts.push({
id: data.customerNumber,
open: data.openBudget,
closed: data.completedBudget,
});
},
dom: 't',
//data: customersDataSet,
ajax: function (data, callback, settings) {
var rows = [];
for (i=0; i<customersDataSet.length; i++) {
if ( salespersonGroupingNumber === customersDataSet[i].returnedSalespersonGroupNumber ) {
rows.push(customersDataSet[i]);
}
}
callback({
data: rows,
});
},
pageLength: 100,
columns: [
{
className: 'BR_CBT_detail-level-control_2 child-control',
orderable: false,
data: null,
defaultContent: '',
},
{
data: 'customer',
},
{
data: null,
searchable: false,
orderable: false,
render: function (data, type, row) {
if (row.openBudget != 0) {
return (
'<td><button id="BR_CBT_customerOpenBudgetButton">Open ' +
row.openBudget +
'</button></td>'
);
} else {
return '<td><button id="budgetCompletedBadge">Budget Completed</button></td>';
}
},
},
{
data: null,
searchable: false,
orderable: false,
render: function (data, type, row) {
return (
'<td><button id="BR_CBT_customerCompletedBudgetButton">Completed ' +
row.completedBudget +
'</button></td>'
);
},
},
{
data: null,
searchable: false,
orderable: false,
render: function (data, type, row) {
return (
'<td><button id="BR_CBT_customerTotalBudgetButton">Total ' +
row.totalBudget +
'</button></td>'
);
},
},
{ data: 'customerNumber', visible: false },
{ data: 'returnedSalespersonGroupNumber', visible: false },
],
// Set rows IDs
rowId: function (a) {
return 'salespersonBillTo_' + a.customerNumber;
},
columnDefs: [
{ targets: [1], className: 'level-2-control-row-format-1' },
{ targets: [2], className: 'level-2-control-row-format-2' },
{ targets: [3], className: 'level-2-control-row-format-3' },
{ targets: [4], className: 'level-2-control-row-format-4' },
],
select: false,
initComplete: function () {
let api = this.api();
if (showChildren) {
api.rows().every(function () {
$('td.child-control', this.node()).trigger('click', {
api: api
});
});
}
}
});
}
function createChild_2(row) {
//child_1 table data
var rowData = row.data();
var salespersonGroupingNumber = rowData.returnedSalespersonGroupNumber;
console.log(salespersonGroupingNumber)
// This is the table we'll convert into a DataTable
var salespersonBillTo_childTable2 = $(
'<table class="display compact nowrap" width="100%"><thead style="display:none"></thead ></table>'
);
// Display it the child row
row.child(salespersonBillTo_childTable2).show();
// Child row DataTable configuration, always passes the parent row's id to server
salespersonBillTo_childTable2
.DataTable({
rowCallback: function (row, data, index) {
if (data.status == 'Open') {
$(row).find('td:eq(1)').css('font-weight', 'bold'); // text bold
$(row).find('td:eq(1)').css('color', '#dc3545'); // text color
} else {
$(row).find('td:eq(1)').css('font-weight', 'bold'); // text bold
$(row).find('td:eq(1)').css('color', '#28a745'); // text color
}
},
dom: 't',
//data: productsDataSet,
ajax: function (data, callback, settings) {
var rows = [];
for (i=0; i<productsDataSet.length; i++) {
console.log(productsDataSet[i].returnedSalespersonGroupNumber)
if ( salespersonGroupingNumber == productsDataSet[i].returnedSalespersonGroupNumber ) {
rows.push(productsDataSet[i]);
}
}
callback({
data: rows,
});
},
pageLength: 100,
columns: [
{
className: 'BR_CBT_detail-level-control_3',
orderable: false,
data: null,
defaultContent: '',
},
{ data: 'status', id: 'status' },
{ data: 'productNumber' },
{ data: 'productDescription' },
{ data: 'locationCode' },
//Columns used for budget row data information
{ data: 'shipToCode', visible: false },
{ data: 'shipMessage', visible: false },
{ data: 'customerBillToName', visible: false },
{ data: 'customerBillToAddress1', visible: false },
{ data: 'customerBillToAddress2', visible: false },
{ data: 'customerBillToAddress3', visible: false },
{ data: 'customerShipToName', visible: false },
{ data: 'customerShipToAddress1', visible: false },
{ data: 'customerShipToAddress2', visible: false },
{ data: 'customerShipToAddress3', visible: false },
{ data: 'lastYear_JanuarySales', visible: false },
{ data: 'lastYear_FebruarySales', visible: false },
{ data: 'lastYear_MarchSales', visible: false },
{ data: 'lastYear_AprilSales', visible: false },
{ data: 'lastYear_MaySales', visible: false },
{ data: 'lastYear_JuneSales', visible: false },
{ data: 'lastYear_JulySales', visible: false },
{ data: 'lastYear_AugustSales', visible: false },
{ data: 'lastYear_SeptemberSales', visible: false },
{ data: 'lastYear_OctoberSales', visible: false },
{ data: 'lastYear_NovemberSales', visible: false },
{ data: 'lastYear_DecemberSales', visible: false },
{ data: 'lastYear_TotalSales', visible: false },
{ data: 'thisYear_JanuarySales', visible: false },
{ data: 'thisYear_FebruarySales', visible: false },
{ data: 'thisYear_MarchSales', visible: false },
{ data: 'thisYear_AprilSales', visible: false },
{ data: 'thisYear_MaySales', visible: false },
{ data: 'thisYear_JuneSales', visible: false },
{ data: 'thisYear_JulySales', visible: false },
{ data: 'thisYear_AugustSales', visible: false },
{ data: 'thisYear_SeptemberSales', visible: false },
{ data: 'thisYear_OctoberSales', visible: false },
{ data: 'thisYear_NovemberSales', visible: false },
{ data: 'thisYear_DecemberSales', visible: false },
{ data: 'thisYear_TotalSales', visible: false },
{ data: 'returnedSalespersonGroupNumber', visible: false },
],
// Set rows IDs
rowId: function (a) {
return 'salespersonBillTo_' + a.productNumber;
},
columnDefs: [
{
targets: [1],
className: 'level-3-control-row-format-1',
createdCell: function (td, cellData, rowData, row, col) {
$(td).attr('name', 'status');
},
},
{ targets: [2], className: 'level-3-control-row-format-2' },
{ targets: [3], className: 'level-3-control-row-format-3' },
{ targets: [4], className: 'level-3-control-row-format-4' },
],
select: false,
});
}
function destroyChild(row) {
// Remove and destroy the DataTable in the child row
var table = $('table', row.child());
table.detach();
table.DataTable().destroy();
// And then hide the row
row.child.hide();
}
$(document).ready(function () {
//**************************************************************************
// Main table (Salesperson)
//**************************************************************************
var parentTable = $('#salespersonBillTo').DataTable({
//Store budget status total number (used to reset button badge totals when budget is marked complteted)
rowCallback: function (row, data, index) {
salespersonRowBudgetCounts.push({
id: data.returnedSalespersonGroupNumber,
open: data.openBudget,
closed: data.completedBudget,
});
},
// dom: 'ft',
language: { search: 'Table Search: ' },
dom: 't',
//data: salespersonDataSet,
ajax: function (data, callback, settings) {
callback({
data: salespersonDataSet,
});
},
pageLength: 100,
columns: [
{
className: 'BR_CBT_detail-level-control_1 child-control',
orderable: false,
data: null,
defaultContent: '',
},
{ data: 'salespersonName', orderable: false },
{
data: null,
searchable: false,
orderable: false,
render: function (data, type, row) {
if (row.openBudget != 0) {
return (
'<td><button id="BR_CBT_SalespersonOpenBudgetButton">Open ' +
row.openBudget +
'</button></td>'
);
} else {
return '<td><button id="budgetCompletedBadge">Budget Completed</button></td>';
}
},
},
{
data: null,
searchable: false,
orderable: false,
render: function (data, type, row) {
return (
'<td><button id="BR_CBT_SalespersonCompletedBudgetButton">Completed ' +
row.completedBudget +
'</button></td>'
);
},
},
{
data: null,
searchable: false,
orderable: false,
render: function (data, type, row) {
return (
'<td><button id="BR_CBT_SalespersonTotalBudgetButton">Total ' +
row.totalBudget +
'</button></td>'
);
},
},
{
data: 'returnedSalespersonGroupNumber',
visible: false,
orderable: false,
},
],
// Set rows IDs
rowId: function (a) {
return 'salespersonBillTo_' + a.returnedSalespersonGroupNumber;
},
columnDefs: [
{ targets: [1], className: 'level-1-control-row-format-1' },
{ targets: [2], className: 'level-1-control-row-format-2' },
{ targets: [3], className: 'level-1-control-row-format-3' },
{ targets: [4], className: 'level-1-control-row-format-4' },
],
});
// Add event listener for opening and closing details
$('#salespersonBillTo tbody').on(
'click',
'td.BR_CBT_detail-level-control_1',
function (e, d) {
var tr = $(this).closest('tr');
var row = parentTable.row(tr);
if (row.child.isShown()) {
// This row is already open - close it
destroyChild(row);
tr.removeClass('shown');
} else {
// Open this row
createChild_1(row, d && d.showChildren ? true : false);
tr.addClass('shown');
}
}
);
$('#show').on('click', function () {
showAll(true);
});
$('#hide').on('click', function () {
showAll(false);
});
});
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. |