<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 salespersonGroupingNumber = '0';
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: '719',
},
{
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: '719',
},
{
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',
},
];
//*****************************************************
// Show Salesperson Level 1 Rows (Customer Bill To)
//*****************************************************
function BR_CBT_format1(BR_CBT_rowData1) {
var salespersonBillTo_childTable1 = '<table id="salespersonBillTo_customerRows_'+ BR_CBT_rowData1.returnedSalespersonGroupNumber +'" class="display nowrap" width="100%">' +
'<thead style="display:none"></thead >' +
'</table>';
return $(salespersonBillTo_childTable1).toArray();
}
//*****************************************************
// Show Customer Level 2 Row (Products)
//*****************************************************
function BR_CBT_format2(BR_CBT_rowData2) {
var salespersonBillTo_childTable2 = '<table id="salespersonBillTo_productRows_' + BR_CBT_rowData2.customerNumber + '" class="display compact nowrap "width="100%">' +
'<thead style="display:none"></thead >' +
'</table>';
return $(salespersonBillTo_childTable2).toArray();
}
//***********************************************************************
// Show Budget Form and Sales and Budget Level 3 Rows (Budget Details)
//***********************************************************************
function BR_CBT_format3(BR_CBT_rowData3) {
var salespersonBillTo_childTable3 =
'<div class="budgetDetailRowForm col-12 py-3">' +
'<div class="col-12 flex budgetFormRow">' +
'<div class="budgetDetailFormRow-1-format-1"><label>Location:</label> <select id="BR_CBT_locationSelection_' + BR_CBT_rowData3.productNumber +'" name="BR_CBT_locationSelection_' + BR_CBT_rowData3.productNumber +'" onchange="BR_CBT_changeLocation(this.value, '+ BR_CBT_rowData3.returnedSalespersonGroupNumber +', '+ BR_CBT_rowData3.customerNumber +', \''+ BR_CBT_rowData3.productNumber +'\')"></select></div>' +
'<div class="budgetDetailFormRow-1-format-2"><label>Customer Number:</label><span> ' + BR_CBT_rowData3.customerNumber +' </span></div>' +
'<div class="budgetDetailFormRow-1-format-3"><label>Ship Code:</label><span> ' + BR_CBT_rowData3.shipToCode +' </span></div>' +
'<div class="budgetDetailFormRow-1-format-4"><label>Ship Message:</label><span> ' + BR_CBT_rowData3.shipMessage +' </span></div>' +
'<div class="budgetDetailFormRow-1-format-5"><label>Product Number:</label><span> ' + BR_CBT_rowData3.productNumber +' </span></div>' +
'<div class="budgetDetailFormRow-1-format-6"><label>Product Description:</label><span> ' + BR_CBT_rowData3.productDescription +' </span></div>' +
'</div>' +
//Bill To and Ship To Information
'<div class="flex pt-3 pb-1">' +
'<div class="col-3"><label><u>Bill To</u></label></div>' +
'<div class="col-3"><label><u>Ship To</u></label></div>' +
'</div>' +
'<div class="flex budgetFormRow"> ' +
'<div class="col-3"><label>Name:</label><span> ' + BR_CBT_rowData3.customerBillToName +' </span></div>' +
'<div class="col-3"><label>Name:</label><span> ' + BR_CBT_rowData3.customerShipToName +' </span></div>' +
'</div>' +
'<div class="flex budgetFormRow">' +
'<div class="col-3"><label>Address 1:</label><span> ' + BR_CBT_rowData3.customerBillToAddress1 +' </span></div>' +
'<div class="col-3"><label>Address 1:</label><span> ' + BR_CBT_rowData3.customerShipToAddress1 +' </span></div>' +
'</div>' +
'<div class="flex budgetFormRow">' +
'<div class="col-3"><label>Address 2:</label><span> ' + BR_CBT_rowData3.customerBillToAddress2 +' </span></div>' +
'<div class="col-3"><label>Address 2:</label><span> ' + BR_CBT_rowData3.customerShipToAddress2 +' </span></div>' +
'</div>' +
'<div class="flex budgetFormRow">' +
'<div class="col-3"><label>Address 3:</label><span> ' + BR_CBT_rowData3.customerBillToAddress3 +' </span></div>' +
'<div class="col-3"><label>Address 3:</label><span> ' + BR_CBT_rowData3.customerShipToAddress3 +' </span></div>' +
'</div>' +
'</div>' +
// Last Year Sales table
'<table id="salespersonBillTo_salesYearTable" class="center">' +
'<div class="col-5 poundsExpression text-primary" id="poundsExpression"><p>All pounds are expressed in thousands</p></div>' +
'<thead>'+
'<tr><th></th><th>January</th><th>February</th><th>March</th><th>April</th><th>May</th><th>June</th><th>July</th><th>August</th><th>September</th><th>October</th><th>November</th><th>December</th><th>Totals</th><th></th></tr>'+
'</thead>' +
'<tbody>'+
'<tr><td class="px-2"><b>Last Year Sales</b></td><td>' + parseFloat(BR_CBT_rowData3.lastYear_JanuarySales).toFixed(1) +'</td><td>' + parseFloat(BR_CBT_rowData3.lastYear_FebruarySales).toFixed(1) +'</td><td>' + parseFloat(BR_CBT_rowData3.lastYear_MarchSales).toFixed(1) +'</td><td>' + parseFloat(BR_CBT_rowData3.lastYear_AprilSales).toFixed(1) +'</td><td>' + parseFloat(BR_CBT_rowData3.lastYear_MaySales).toFixed(1) +'</td><td>' + parseFloat(BR_CBT_rowData3.lastYear_JuneSales).toFixed(1) +'</td><td>' + parseFloat(BR_CBT_rowData3.lastYear_JulySales).toFixed(1) +'</td><td>' + parseFloat(BR_CBT_rowData3.lastYear_AugustSales).toFixed(1) +'</td><td>' + parseFloat(BR_CBT_rowData3.lastYear_SeptemberSales).toFixed(1) +'</td><td>' + parseFloat(BR_CBT_rowData3.lastYear_OctoberSales).toFixed(1) +'</td><td>' + parseFloat(BR_CBT_rowData3.lastYear_NovemberSales).toFixed(1) +'</td><td>' + parseFloat(BR_CBT_rowData3.lastYear_DecemberSales).toFixed(1) +'</td><td>' + parseFloat(BR_CBT_rowData3.lastYear_TotalSales).toFixed(1) +'</td><td></td></tr>' +
'<tr><td class="px-2"><b>This Year Sales</b></td><td>' + parseFloat(BR_CBT_rowData3.thisYear_JanuarySales).toFixed(1) +'</td><td>' + parseFloat(BR_CBT_rowData3.thisYear_FebruarySales).toFixed(1) +'</td><td>' + parseFloat(BR_CBT_rowData3.thisYear_MarchSales).toFixed(1) +'</td><td>' + parseFloat(BR_CBT_rowData3.thisYear_AprilSales).toFixed(1) +'</td><td>' + parseFloat(BR_CBT_rowData3.thisYear_MaySales).toFixed(1) +'</td><td>' + parseFloat(BR_CBT_rowData3.thisYear_JuneSales).toFixed(1) +'</td><td>' + parseFloat(BR_CBT_rowData3.thisYear_JulySales).toFixed(1) +'</td><td>' + parseFloat(BR_CBT_rowData3.thisYear_AugustSales).toFixed(1) +'</td><td>' + parseFloat(BR_CBT_rowData3.thisYear_SeptemberSales).toFixed(1) +'</td><td>' + parseFloat(BR_CBT_rowData3.thisYear_OctoberSales).toFixed(1) +'</td><td>' + parseFloat(BR_CBT_rowData3.thisYear_NovemberSales).toFixed(1) +'</td><td>' + parseFloat(BR_CBT_rowData3.thisYear_DecemberSales).toFixed(1) +'</td><td>' + parseFloat(BR_CBT_rowData3.thisYear_TotalSales).toFixed(1) +'</td><td></td></tr>'+
'</tbody>' +
'</table>' +
// Budget table
'<table id="salespersonBillTo_budgetRows_' + BR_CBT_rowData3.locationCode + '-' + BR_CBT_rowData3.customerNumber + '-' + BR_CBT_rowData3.productNumber + '"class="budgetDetailTable budgetDetailRow">' +
'</table>' +
'<div class="py-2"><button type="button" id="BR_CBT_setBudgetWithSameValue_'+ BR_CBT_rowData3.locationCode + BR_CBT_rowData3.returnedSalespersonGroupNumber + BR_CBT_rowData3.customerNumber + BR_CBT_rowData3.productNumber + '" class="btn btn-secondary btn-xs" onclick="BR_CBT_showSetBudgetWithSameValueModal(\''+ BR_CBT_rowData3.locationCode +'\', \''+ BR_CBT_rowData3.returnedSalespersonGroupNumber +'\', \''+ BR_CBT_rowData3.customerNumber +'\', \''+ BR_CBT_rowData3.productNumber +'\' )">Enter same value for each month</button></div >' ;
return $(salespersonBillTo_childTable3).toArray();
}
//**************************************************************************
// Main table (Salesperson)
//**************************************************************************
var table = $('#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',
ajax: {
type: 'POST',
url: 'BudgetReporting/getBudgetReporting_SalepersonData.php',
data: {salespersonGroupingNumber: salespersonGroupingNumber},
},
pageLength:100,
columns: [
{
className: 'BR_CBT_detail-level-control_1',
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 type="button" id="BR_CBT_SalespersonOpenBudgetButton">Open '+ row.openBudget + '</button></td>';
}else{
return '<td><button type="button" class="budgetCompletedBadge">Budget Completed</button></td>';
}
}
},
{
data: null,
searchable: false,
orderable: false,
render: function ( data, type, row ) {
return '<td><button type="button" id="BR_CBT_SalespersonCompletedBudgetButton">Completed '+ row.completedBudget + '</button></td>';
}
},
{
data: null,
searchable: false,
orderable: false,
render: function ( data, type, row ) {
return '<td><button type="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' },
],
});
//***********************************************************************************
// Event listener for opening and closing 1st level child details (Customer Bill To)
//***********************************************************************************
$('#salespersonBillTo tbody').on('click', 'td.BR_CBT_detail-level-control_1', function () {
var tr = $(this).closest('tr');
var row = table.row(tr);
var BR_CBT_rowData1 = row.data();
if (row.child.isShown()) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
// Destroy the Child Datatable
$('#salespersonBillTo_customerRows_' + BR_CBT_rowData1.returnedSalespersonGroupNumber).DataTable().destroy();
}
else {
// Open this row
row.child(BR_CBT_format1(BR_CBT_rowData1)).show();
//use salespersonGroupingNumber from returned rows
salespersonBillTo_childTable1 = $('#salespersonBillTo_customerRows_' + BR_CBT_rowData1.returnedSalespersonGroupNumber).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',
ajax: {
type: 'POST',
url: 'BudgetReporting/getBudgetReporting_CustomerBillToData.php',
data: {salespersonGroupingNumber: BR_CBT_rowData1.returnedSalespersonGroupNumber},
},
pageLength:100,
columns: [
{
className: 'BR_CBT_detail-level-control_2',
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 type="button" id="BR_CBT_customerOpenBudgetButton">Open '+ row.openBudget + '</button></td>';
}else{
return '<td><button type="button" class="budgetCompletedBadge">Budget Completed</button></td>';
}
}
},
{
data: null,
searchable: false,
orderable: false,
render: function ( data, type, row ) {
return '<td><button type="button" id="BR_CBT_customerCompletedBudgetButton">Completed '+ row.completedBudget + '</button></td>';
}
},
{
data: null,
searchable: false,
orderable: false,
render: function ( data, type, row ) {
return '<td><button type="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: [0], className: 'level-2-control-row-format-0'},
{ 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,
});
tr.addClass('shown');
}
});
//console.log(BR_CBT_rowData1);
//**************************************************************************
// Event listener for opening and closing 2nd level child details (Products)
//**************************************************************************
//
$('#salespersonBillTo tbody').on('click', 'td.BR_CBT_detail-level-control_2', function () {
var tr = $(this).closest('tr');
var row = salespersonBillTo_childTable1.row(tr);
var BR_CBT_rowData2 = row.data();
if (row.child.isShown()) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
// Destroy the Child Datatable
$('#salespersonBillTo_productRows_' + BR_CBT_rowData2.customerNumber).DataTable().destroy();
}
else {
// Open this row
row.child(BR_CBT_format2(BR_CBT_rowData2)).show();
salespersonBillTo_childTable2 = $('#salespersonBillTo_productRows_' + BR_CBT_rowData2.customerNumber).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",
ajax: {
type: 'POST',
url: 'BudgetReporting/getBudgetReporting_CustomerProductsData.php',
data: {salespersonGroupingNumber: BR_CBT_rowData2.returnedSalespersonGroupNumber,
customerNumber: BR_CBT_rowData2.customerNumber
},
},
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,
});
tr.addClass('shown');
}
});
//********************************************************************************
// Event listener for opening and closing 3nd level child details (Budget Details)
//*********************************************************************************
$('tbody').on('click', 'td.BR_CBT_detail-level-control_3', function () {
var tr = $(this).closest('tr');
var row = salespersonBillTo_childTable2.row(tr);
var BR_CBT_rowData3 = row.data();
if (row.child.isShown()) {
// This row is already open - close it
row.child.hide();
tr.removeClass('shown');
// Destroy the Child Datatable
$('#salespersonBillTo_budgetRows_' + BR_CBT_rowData3.locationCode + '-' + BR_CBT_rowData3.customerNumber + '-' + BR_CBT_rowData3.productNumber).DataTable().destroy();
}
else {
// Open this row
row.child(BR_CBT_format3(BR_CBT_rowData3)).show();
//Set location select with array data found in HomePage.js and built in HomePage.js
$("#BR_CBT_locationSelection_" + BR_CBT_rowData3.productNumber).html(locationSelectionArrayData);
//Set current location code for updating existing location in Budget record (global variable found in HomePage.php)
currentLocationCode = BR_CBT_rowData3.locationCode;
//Set value of location select with current value.
$("#BR_CBT_locationSelection_" + BR_CBT_rowData3.productNumber).val(BR_CBT_rowData3.locationCode);
salespersonBillTo_editor = new $.fn.dataTable.Editor( {
ajax: {
type: 'POST',
url: 'BudgetReporting/ssp_BudgetData.php',
data: { locationCode:BR_CBT_rowData3.locationCode,
salespersonGroupingNumber: BR_CBT_rowData3.returnedSalespersonGroupNumber,
customerNumber: BR_CBT_rowData3.customerNumber,
productNumber: BR_CBT_rowData3.productNumber
},
},
table: '#salespersonBillTo_budgetRows_' + BR_CBT_rowData3.locationCode + '-' + BR_CBT_rowData3.customerNumber + '-' + BR_CBT_rowData3.productNumber,
formOptions: { inline: { onBlur: 'submit' } },
fields: [
{
// label: 'January Budget:',
name: 'BD$01',
},
{name: 'BD$02'},
{name: 'BD$03'},
{name: 'BD$04'},
{name: 'BD$05'},
{name: 'BD$06'},
{name: 'BD$07'},
{name: 'BD$08'},
{name: 'BD$09'},
{name: 'BD$10'},
{name: 'BD$11'},
{name: 'BD$12'},
]
} );
// Set inline cell as selected to immediately start typing in new value
salespersonBillTo_editor.on('open', function () {
$('div.DTE input')[0].select();
});
salespersonBillTo_childTable3 = $('#salespersonBillTo_budgetRows_' + BR_CBT_rowData3.locationCode + '-' + BR_CBT_rowData3.customerNumber + '-' + BR_CBT_rowData3.productNumber).DataTable({
createdRow: function ( row, data, index ) {
$('td', row).eq(1).attr('id', BR_CBT_rowData3.locationCode + '-' + BR_CBT_rowData3.customerNumber + '-' + BR_CBT_rowData3.productNumber + '_janBudget');
$('td', row).eq(2).attr('id', BR_CBT_rowData3.locationCode + '-' + BR_CBT_rowData3.customerNumber + '-' + BR_CBT_rowData3.productNumber + '_febBudget');
$('td', row).eq(3).attr('id', BR_CBT_rowData3.locationCode + '-' + BR_CBT_rowData3.customerNumber + '-' + BR_CBT_rowData3.productNumber + '_marBudget');
$('td', row).eq(4).attr('id', BR_CBT_rowData3.locationCode + '-' + BR_CBT_rowData3.customerNumber + '-' + BR_CBT_rowData3.productNumber + '_aprBudget');
$('td', row).eq(5).attr('id', BR_CBT_rowData3.locationCode + '-' + BR_CBT_rowData3.customerNumber + '-' + BR_CBT_rowData3.productNumber + '_mayBudget');
$('td', row).eq(6).attr('id', BR_CBT_rowData3.locationCode + '-' + BR_CBT_rowData3.customerNumber + '-' + BR_CBT_rowData3.productNumber + '_juneBudget');
$('td', row).eq(7).attr('id', BR_CBT_rowData3.locationCode + '-' + BR_CBT_rowData3.customerNumber + '-' + BR_CBT_rowData3.productNumber + '_julyBudget');
$('td', row).eq(8).attr('id', BR_CBT_rowData3.locationCode + '-' + BR_CBT_rowData3.customerNumber + '-' + BR_CBT_rowData3.productNumber + '_augBudget');
$('td', row).eq(9).attr('id', BR_CBT_rowData3.locationCode + '-' + BR_CBT_rowData3.customerNumber + '-' + BR_CBT_rowData3.productNumber + '_septBudget');
$('td', row).eq(10).attr('id', BR_CBT_rowData3.locationCode + '-' + BR_CBT_rowData3.customerNumber + '-' + BR_CBT_rowData3.productNumber + '_octBudget');
$('td', row).eq(11).attr('id', BR_CBT_rowData3.locationCode + '-' + BR_CBT_rowData3.customerNumber + '-' + BR_CBT_rowData3.productNumber + '_novBudget');
$('td', row).eq(12).attr('id', BR_CBT_rowData3.locationCode + '-' + BR_CBT_rowData3.customerNumber + '-' + BR_CBT_rowData3.productNumber + '_decBudget');
},
dom: 't',
ajax: {
type: 'POST',
url: 'BudgetReporting/ssp_BudgetData.php',
data: { locationCode:BR_CBT_rowData3.locationCode,
salespersonGroupingNumber: BR_CBT_rowData3.returnedSalespersonGroupNumber,
customerNumber: BR_CBT_rowData3.customerNumber,
productNumber: BR_CBT_rowData3.productNumber
},
},
autoWidth: false,
serverSide: true,
order: [ 1, 'asc' ],
keys: {
columns: ':not(:first-child, .markCompleteButton)',
keys: [ 9 ],
editor: salespersonBillTo_editor,
editOnFocus: true
},
columns: [
{
data: null,
searchable: false,
orderable: false,
className: 'budgetRowTitle',
render: function ( data, type, row ) {
return '<td><b>Next Year Budget</b></td>';
}
},
{ data: 'BD$01', "width": "7%" },
{ data: 'BD$02', "width": "7%" },
{ data: 'BD$03', "width": "7%" },
{ data: 'BD$04', "width": "7%" },
{ data: 'BD$05', "width": "7%" },
{ data: 'BD$06', "width": "7%" },
{ data: 'BD$07', "width": "7%" },
{ data: 'BD$08', "width": "7%" },
{ data: 'BD$09', "width": "7%" },
{ data: 'BD$10', "width": "7%" },
{ data: 'BD$11', "width": "7%" },
{ data: 'BD$12', "width": "7%" },
{
data: null,
className: 'totalBudgetTD',
render: function(data, type, full, row ) {
var sum = 0;
for (var i=1 ; i<13 ; i++) {
sum += parseFloat(full['BD$' + (i<10 ? '0' : '') + i]);
sum = Math.round(sum * 10) / 10;
}
return '<span id="salespersonBillTo_totalBudgetSpan">'+sum+'</span>';
}
},
// ** Mark Completed Button
{
data: null,
searchable: false,
orderable: false,
className: 'markCompleteButton',
render: function ( data, type, full, meta ) {
if( full.SYNCFL == 'N'){
return '<button type="button" id="BR_CBT_markBudgetRecordCompletedButon_'+ full.PKLOC + full.PKGRP + full.PKCUST + full.PKPROD +'"class="btn btn-primary btn-xs" onclick="BR_CBT_showMarkBudgetRecordCompletedModal(\''+ full.PKLOC +'\', \''+ full.PKGRP +'\', \''+ full.PKCUST +'\', \''+ full.PKPROD +'\' )">Mark Completed</button>';
}else{
return '<button type="button" id="BR_CBT_markBudgetRecordCompletedButon_'+ full.PKLOC + full.PKGRP + full.PKCUST + full.PKPROD +'"class="unstyled-button" )">Mark Completed</button>';
}
}
},
],
columnDefs: [
{ targets: "_all" , className: "text-center" },
//{ targets: 13, className: "text-center" },
{ targets: "_all", orderable: false}
],
select: {
style: 'os',
selector: 'td:first-child'
},
} );
tr.addClass('shown');
}//END - else
});
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. |