/*
* The Peer Groups js file would contain the logic of creating data tables for
* the Peer Group panel in create Template Providers tab.
* Author : turlra01
*
**/
jQuery.namespace('lexisnexis.component');
lexisnexis.component.CreateTemplateProviderProviders = lexisnexis.component.tableNodes1.extend({
/**
* On load initializing
*/
ready : function () {
var cs = this;
cs.overrideFunctions();
cs.data.tableId = cs.createTable('selectedProviders', cs.fetchResponse);
cs.data.tableId = cs.createTable('availableProviders', cs.fetchResponse);
cs.data.thresholdExceedMsg = "You have exceeded the 250 maximum number of Providers that you may add to the Selected Providers list. Please uncheck {0} name(s) from the Available Providers List";
cs.bindMoveEvents();
cs.bindSearchEvents();
cs.bindSearchEventsForDropDowns();
cs.bindExcludeSelectedProvider();
cs.bindDataSet();
cs.providerSpecialties();
cs.providerStates();
cs.providerSubClients();
/**
* Intiailizing the Validation of form elements
*/
//cs.validateFormElements();
LN.getPage().registerEvent(EVENT_TYPES.APPLY_BUTTON_CLICK, cs, cs.providersReload);
},
providersReload : function(cs) {
cs.createTable('availableProviders', cs.fetchResponse);
cs.createTable('selectedProviders', cs.fetchResponse);
cs.clearOnReload();
},
validateFormElements : function() {
/* $('#createTemplateForm').validate({
focusInvalid : true,
errorElement : 'div'
});*/
},
displayMessage : function() {
var cs = this;
var msg = cs.data.thresholdExceedMsg.replace('{0}', cs.data.itemsToUncheck || 'some items from selected filter or modify the search to get apt count of');
var msgModal = $("#selectedItemsCountMsgDiv").modal();
msgModal.find('.modal-body').text(msg).end();
},
/**
* Fetches the table response from the service
*/
fetchResponse : function(tableId) {
var response = [];
var sObj = [];
var cs = this;
if (tableId.match('availableProviders')) {
cs.clearAvailable();
}
var responseObj = {
'aoColumns' : [{
sWidth : '5%',
sClass : 'dt-left',
bSortable : false,
mRender : function(data, type, full) {
var found = false;
$.each(cs.data.availableCodes, function(index, obj) {
if (obj.equals(full)) {
found = true;
return false;
}
});
if (found) {
return '<input type="checkbox" id="chkBox_' + data + '" value="' + data + '" checked>';
}
return '<input type="checkbox" id="chkBox_' + data + '" value="' + data + '">';
}
},
{
sWidth : '20%',
sClass : 'dt-left',
bSortable : false
},
{
sWidth : '15%',
sClass : 'dt-center',
bSortable : false
},
{
sWidth : '15%',
sClass : 'dt-center',
bSortable : false
},
{
sWidth : '20%',
sClass : 'dt-left',
bSortable : false
},
{
sWidth : '15%',
sClass : 'dt-left',
bSortable : false
},
{
sWidth : '5%',
sClass : 'dt-center',
bSortable : false
},
{
sWidth : '5%',
sClass : 'dt-center',
bSortable : false
}],
"sScrollXInner" : "110%",
'dom' : 'rtiS',
"sPaginationType" : "scrolling",
"bDeferRender" : true,
"paging" : true,
"processing" : false,
"bInfo" : false,
's' : ['', 'Name', 'Provider ID', 'Sub-client Code', 'Specialty', 'City', 'State', 'Zip'],
'fnDrawCallback' : function(oSettings) {
cs.handleDrawCallback(oSettings, cs);
cs.bindCheckboxMoveButtons('availableProviders', 'selectedProviders');
}
};
if (tableId.match('availableProviders')) {
var ajaxObj = {
'ajax' : function(data, callback, settings) {
var inputData = data;
var startIndex = inputData.start ? inputData.start : 0;
var searchJSON = cs.searchTermsJSON();
var jsonString = {
"startIndex" : startIndex,
"searchTerms" : searchJSON
};
if (jsonString.searchTerms.ln_last_name.length < 2) {
jsonString.searchTerms.ln_last_name = '';
}
LN.debug(JSON.stringify(jsonString));
$.ajax({
'url' : LN.getContextPath() + "/getProviderAvailableProviders" + "?dataSet=" + $('#dataSet').val(),
'method' : 'POST',
'dataType' : "json",
'data' : "inputJson=" + JSON.stringify(jsonString),
'beforeSend' : function() {
LN.showAjaxIndicator($('#' + tableId).parent());
},
'complete' : function(xhr, status) {
LN.hideAjaxIndicator($('#' + tableId).parent());
},
'error' : function(data) {
LN.hideAjaxIndicator($('#' + tableId).parent());
},
'success' : function(data) {
cs.data.totalRecords = data.iTotalRecords;
if (cs.data.totalRecords > LN.THRESHOLD_LIMIT)
{
$("#availableProviders_selectAll").prop('disabled', true);
$("#availableProviders_selectAll").attr('disabled', 'disabled');
}
else
{
$("#availableProviders_selectAll").removeAttr('disabled');
$("#availableProviders_selectAll").prop('disabled', false);
}
callback({
draw : inputData.draw,
data : data.aaData,
recordsTotal : data.iTotalRecords,
recordsFiltered : data.iTotalRecords
});
}
});
},
'language' : {
"emptyTable" : "<div id=\"anyDefaultText\" class=\"text-muted pull-left\"><dfn>No match found</dfn></div>",
"zeroRecords" : "<div id=\"anyDefaultText\" class=\"text-muted pull-left\"><dfn>No Providers Available</dfn></div>"
}
};
$.extend(responseObj, ajaxObj);
} else {
$.extend(responseObj, {
'aaData' : [],
'ajax' : {
'url' : LN.getContextPath() + "/getProviderSelectedProviders",
'type' : 'POST',
'dataType' : "json",
'beforeSend' : function() {
LN.showAjaxIndicator($('#' + tableId).parent());
},
'complete' : function() {
LN.hideAjaxIndicator($('#' + tableId).parent());
},
'error' : function(data) {
LN.hideAjaxIndicator($('#' + tableId).parent());
}
},
"bDeferRender" : false,
"serverSide" : false,
'paging' : false,
'dom': 'rt',
'language' : {
"emptyTable" : "<div id=\"anyDefaultText\" class=\"text-muted\"><dfn>All Providers</dfn></div>",
"zeroRecords" : "<div id=\"anyDefaultText\" class=\"text-muted\"><dfn>All Providers</dfn></div>"
},
"fnRowCallback" : function(nRow, aData, iDisplayIndex, iDisplayIndexFull) {
if (aData) {
if (aData[8] && aData[8] == "0") {
$(nRow).addClass('disabled');
//$(nRow).find(':checkbox').attr('disabled', 'disabled');
} else {
$(nRow).removeClass('disabled');
//$(nRow).find(':checkbox').removeAttr('disabled');
}
}
}
});
}
return responseObj;
},
/**
* Bind the check box events from the source and target
*/
bindCheckboxMoveButtons: function(source, target) {
var cs = this;
if(target) {
sourceAndTargetElems = $('#' + source + ' :checkbox, #' + target + ' :checkbox');
}
else {
sourceAndTargetElems = $('#' + source + ' :checkbox');
}
sourceAndTargetElems.off('change');
sourceAndTargetElems.on('change', function(e){
e.preventDefault();
Array.prototype.wrapper_fn = e.currentTarget.checked ? Array.prototype.push : Array.prototype.remove;
var currentTarget = $(e.currentTarget);
if(!e.currentTarget.checked) {
if(cs.data.selectAllChecked[currentTarget.parents('table').attr('id')]) {
cs.data.selectAllChecked[currentTarget.parents('table').attr('id')] = e.currentTarget.checked;
$('#' + currentTarget.parents('table').attr('id') + '_selectAll').prop('checked', e.currentTarget.checked);
}
} else {
var checkedBoxesLength = currentTarget.parents('table').find(':checkbox:checked').length;
var totalRecords = $("#" + currentTarget.parents('table').attr('id') + " tbody tr").length;
if(checkedBoxesLength == totalRecords) {
cs.data.selectAllChecked[currentTarget.parents('table').attr('id')] = e.currentTarget.checked;
$('#' + currentTarget.parents('table').attr('id') + '_selectAll').prop('checked', e.currentTarget.checked);
}
}
var closestTr;
if(currentTarget.parents('table').attr('id').match('available')) {
cs.data.availableTable = currentTarget.parents('table').DataTable();
closestTr = currentTarget.closest('tr');
cs.data.availableRows.wrapper_fn(closestTr);
var output = [];
var n = cs.data.availableTable.row(currentTarget.closest('tr')).data();
if(!(n instanceof Array)) {
/**
* Convert it to array
*/
var numberOfColumns = 0;
for(key in n) {
if (!isNaN(parseInt(key)) && n.hasOwnProperty(key)) {
output.push(n[numberOfColumns]);
numberOfColumns = numberOfColumns + 1;
}
}
}
else {
output = n;
}
cs.data.availableCodes.wrapper_fn(output);
//Enable/disable move buttons
if(currentTarget.parents('table').find(':checkbox:checked').length > 0){
$("#providers-move-right").prop('disabled', false);
}
else{
$("#providers-move-right").prop('disabled', true);
}
}
else {
cs.data.selectedTable = $(currentTarget).parents('table').DataTable();
closestTr = currentTarget.closest('tr');
cs.data.selectedRows.wrapper_fn(closestTr);
cs.data.selectedCodes.wrapper_fn(cs.data.selectedTable.row(currentTarget.closest('tr')).data());
//Enable/disable move buttons
if(currentTarget.parents('table').find(':checkbox:checked').length > 0){
$("#providers-move-left").prop('disabled', false);
}
else{
$("#providers-move-left").prop('disabled', true);
}
}
});
},
/**
* Bind all the move events to the handler
*/
bindMoveEvents : function() {
var cs = this;
var success = false;
$('#availableProviders_selectAll, #selectedProviders_selectAll').on('change', function(e) {
e.preventDefault();
// Find the currentTarget
var currentTarget = e.currentTarget.id;
switch (currentTarget) {
case 'availableProviders_selectAll' :
var checkAll = $("#availableProviders_selectAll").prop('checked');
if (checkAll)
{
var table = $("#availableProviders").closest('table');
$('td input:checkbox', table).prop("checked", false);
$('td input:checkbox', table).click();
}
else
{
var table = $("#availableProviders").closest('table');
$('td input:checkbox', table).prop("checked", true);
$('td input:checkbox', table).click();
}
break;
case 'selectedProviders_selectAll' :
var checkAll = $("#selectedProviders_selectAll").prop('checked');
if (checkAll)
{
var table = $("#selectedProviders").closest('table');
$('td input:checkbox', table).prop("checked", false);
$('td input:checkbox', table).click();
}
else
{
var table = $("#selectedProviders").closest('table');
$('td input:checkbox', table).prop("checked", true);
$('td input:checkbox', table).click();
}
break;
default :
break;
}
});
$('#providers-move-left, #providers-move-right').on('click', function(e) {
e.preventDefault();
// Find the currentTarget
var currentTarget = e.currentTarget.id;
switch (currentTarget) {
case 'providers-move-left' :
success = cs.moveSelected('selectedProviders', 'availableProviders');
break;
case 'providers-move-right' :
success = cs.moveSelected('availableProviders', 'selectedProviders');
if (success) {
if ($('#availableProviders').DataTable().data().length == 0) {
$('#ln_specialty_for_providers').val('');
$('#ln_state').val('');
$('#ln_subclient_code').val('');
cs.resetInstructionalText();
}
}
break;
default :
break;
}
if (success) {
cs.data.moveComplete = true;
var checkAll = $("#availableProviders_selectAll").prop('checked');
if (checkAll)
{
$('#ln_specialty_for_providers').val('');
$('#ln_state').val('');
$('#ln_subclient_code').val('');
cs.resetInstructionalText();
}
cs.getProviderCountForProviders();
$('#ln_last_name').trigger('keyup');
cs.clearOnMove();
}
});
},
clearOnReload : function() {
var cs = this;
// Need to determine whether to clear this on reload.
//$("#excludeProvidersSelected").prop('checked', false);
cs.clearOnMove();
},
clearOnMove : function(){
var cs=this;
$("#availableProviders_selectAll").prop('checked', false);
$("#selectedProviders_selectAll").prop('checked', false);
//Disable/Enable buttons
$("#providers-move-right").prop('disabled', true);
$("#providers-move-left").prop('disabled', true);
var table = $("#availableProviders").closest('table');
$('td input:checkbox', table).removeAttr('checked');
var table2 = $("#selectedProviders").closest('table');
$('td input:checkbox', table2).removeAttr('checked');
cs.data.selectedCodes = [];
cs.data.selectedRows = [];
cs.data.availableCodes = [];
cs.data.availableRows = [];
},
clearAvailable : function(){
var cs=this;
$("#availableProviders_selectAll").prop('checked', false);
//Disable/Enable buttons
$("#providers-move-right").prop('disabled', true);
var table = $("#availableProviders").closest('table');
$('td input:checkbox', table).removeAttr('checked');
cs.data.availableCodes = [];
cs.data.availableRows = [];
},
resetInstructionalText : function() {
var cs=this;
$('#ln_last_name').val('').attr('placeholder','2 characters minimum');
$('#ln_first_name').val('').attr('placeholder','1 character minimum');
$('#ln_city').val('').attr('placeholder','3 characters minimum');
$('#ln_zip').val('').attr('placeholder','1 character minimum');
$('#ln_identifier_value').val('').attr('placeholder','1 character minimum');
$("label[for = ln_last_name] ").css('display','');
$("label[for = ln_first_name] ").css('display','');
$("label[for = ln_city] ").css('display','');
$("label[for = ln_zip] ").css('display','');
$("label[for = ln_identifier_value] ").css('display','');
},
resetDropdownInstructionalText : function() {
var cs=this;
$('#ln_identifier_value').val('').attr('placeholder','1 character minimum');
$("label[for = ln_identifier_value] ").css('display','');
},
/**
* Bind the search handler to key up events
*/
bindSearchEvents : function() {
var cs = this;
var errorFlag = false;
$('#ln_last_name, #ln_first_name, #ln_city, #ln_zip, #ln_identifier_value').on('keyup', function(e) {
if(!LN.isFnKeyPressed(e)){
return false;
}
e.preventDefault();
// var checkValid = $(e.currentTarget).valid();
var checkValid = true;
if (!checkValid) {
var viewPopulationFiltersText = $("#ln_viewPopulationFiltersText");
viewPopulationFiltersText.html("Please correct error(s) to proceed");
viewPopulationFiltersText.addClass('ln-colorRed');
errorFlag = true;
clearTimeout(cs.timeout);
LN.getPage().disableLeftNav();
return false;
}
else {
LN.getPage().enableLeftNav();
if (errorFlag) {
cs.getProviderCountForProviders();
errorFlag = false;
}
switch (this.id) {
case "ln_last_name" :
if (cs.data.moveComplete || this.value.length > 1 || this.value.length == 0 || (this.value.length < 2 && (e.keyCode == 8 || e.keyCode == 46))) {
cs.clearAvailable();
cs.data.moveComplete = false;
cs.delay.call(cs, function() {
LN.debug('Create Table Invoked');
$('#availableProviders').DataTable().draw();
$('#selectedProviders').DataTable().draw();
}, 1000);
}
break;
case "ln_first_name" :
if (this.value.length > 0 || this.value.length == 0) {
cs.clearAvailable();
cs.delay.call(cs, function() {
LN.debug('Create Table Invoked');
$('#availableProviders').DataTable().draw();
$('#selectedProviders').DataTable().draw();
}, 1000);
}
break;
case "ln_city" :
if (this.value.length > 2 || this.value.length == 0) {
cs.clearAvailable();
cs.delay.call(cs, function() {
LN.debug('Create Table Invoked');
$('#availableProviders').DataTable().draw();
//$('#selectedProviders').DataTable().draw();
}, 1000);
}
break;
case "ln_zip" :
if (this.value.length > 0 || this.value.length == 0) {
cs.clearAvailable();
cs.delay.call(cs, function() {
LN.debug('Create Table Invoked');
cs.createTable('availableProviders', cs.fetchResponse);
//cs.createTable('selectedProviders', cs.fetchResponse);
}, 1000);
}
break;
case "ln_identifier_value" :
if (this.value.length > 0 || this.value.length == 0) {
cs.clearAvailable();
cs.delay.call(cs, function() {
LN.debug('Create Table Invoked');
cs.createTable('availableProviders', cs.fetchResponse);
//cs.createTable('selectedProviders', cs.fetchResponse);
}, 1000);
}
break;
}
}
});
},
/**
* Bind the search for the drop down changes.
*/
bindSearchEventsForDropDowns : function() {
var cs = this;
$('#ln_specialty_for_providers, #ln_state, #ln_subclient_code').on('change', function(e) {
e.preventDefault();
cs.clearAvailable();
cs.delay.call(cs, function() {
LN.debug('Create Table Invoked');
cs.createTable('availableProviders', cs.fetchResponse);
//cs.createTable('selectedProviders', cs.fetchResponse);
}, 1000);
});
// Clearing out the Identifier value no drop down change.
$('#ln_identifier_id').on('change', function(e) {
if ($('#ln_identifier_value').val().length > 0) {
cs.resetDropdownInstructionalText();
$('#ln_identifier_value').trigger('keyup');
}
});
},
/**
* Bind the exclude event to the handler
*/
bindExcludeSelectedProvider : function() {
var cs = this;
$('#excludeProvidersSelected').on('click', function() {
cs.getProviderCountForProviders();
});
},
bindDataSet : function() {
var cs = this;
$( '#dataSet' ).on( 'change', function () {
$('#availableProviders').DataTable().draw();
$('#selectedProviders').DataTable().settings()[0].oFeatures.bServerSide = true;
$('#selectedProviders').DataTable().draw();
$('#selectedProviders').DataTable().settings()[0].oFeatures.bServerSide = false;
} );
},
providerSpecialties : function() {
var cs = this;
$.ajax({
'method' : 'POST',
'url' : 'getProvidersSpecialtiesForSearch',
'contentType' : 'application/json',
'dataType' : 'json',
'data' : {},
beforeSend: function(){
},
success : function(data) {
if (data) {
$("#ln_specialty_for_providers").empty();
var div_data = "<option></option>";
$(div_data).appendTo('#ln_specialty_for_providers');
data.forEach(function(object, index, array) {
div_data = "<option value=" + object.key + ">" + object.value + "</option>";
$(div_data).appendTo('#ln_specialty_for_providers');
});
}
},
complete: function(data){
}
});
},
providerSubClients : function() {
var cs = this;
$.ajax({
'method' : 'POST',
'url' : 'getProvidersSubClientsForSearch',
'contentType' : 'application/json',
'dataType' : 'json',
'data' : "",
success : function(data) {
if (data) {
$("#ln_subclient_code").empty();
var div_data = "<option></option>";
$(div_data).appendTo('#ln_subclient_code');
data.forEach(function(object, index, array) {
div_data = "<option value=" + object.key + ">" + object.value + "</option>";
$(div_data).appendTo('#ln_subclient_code');
});
}
}
});
},
providerStates : function() {
var cs = this;
$.ajax({
'method' : 'POST',
'url' : 'getProvidersStatesForSearch',
'contentType' : 'application/json',
'dataType' : 'json',
'data' : "",
success : function(data) {
if (data) {
$("#ln_state").empty();
var div_data = "<option></option>";
$(div_data).appendTo('#ln_state');
data.forEach(function(object, index, array) {
div_data = "<option value=" + object.key + ">" + object.value + "</option>";
$(div_data).appendTo('#ln_state');
});
}
}
});
},
getSelectedProvidersData: function(){
var cs = this;
var selectedProviders = $( '#selectedProviders' ).DataTable().data().toArray();
var tableData1 = SQLike.q( {
Unpack : selectedProviders,
Columns : ['checkBoxValue', 'displayName', 'subClientCode', 'providerId', 'specialty', 'city', 'state', 'zip', 'grayed', 'firstName', 'lastName',
'alternateId']
} );
return tableData1.length>0?encodeURIComponent(JSON.stringify(tableData1)):"";
},
getExcludedProvidersFlag: function(){
var cs = this;
var excludedProvidersFlag = ($( '#excludeProvidersSelected' ).is(':checked') ) ? 1 : 0;
return excludedProvidersFlag;
},
//Method to update the Provider Count
getProviderCountForProviders:function() {
var cs = this;
createTemplateJs.updatePatientCountAjax("/getProvidersCountForProviders", "&selectedProviders="
+ cs.getSelectedProvidersData() + "&excludeProvidersFlag=" + cs.getExcludedProvidersFlag() + "&selDataSet=" + $('#ln_topmenu_dataset').attr("dataSetkey"));
cs.data.moveComplete = false;
}
});