jqwidgets-framework
Version:
jQWidgets is an advanced Angular, Vue, Blazor, React, Web Components, jquery, ASP .NET MVC, Custom Elements and HTML5 UI framework.
1,286 lines (1,215 loc) • 105 kB
JavaScript
$(document).ready(function ()
{
'use strict';
var themeL = 'light';
var themeD = 'dark';
var theme = themeL;
var isInitialFiltering = true;
// If there is an incorrect login.
var logInUser = { UserId: 1005, Name: 'Peter' };
var isLogInUser = true;
var loadedProject = 0;
var capitalize = function (word)
{
return word[0].toUpperCase() + word.slice(1);
};
var today = new Date();
var thisYear = today.getFullYear();
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
var initialData = {
Projects: [
{
ProjectId: 1,
ProjectName: 'IT',
Lead: 1005,
UsersIdList: [1005, 1008, 1009, 1010, 1011, 1012],
sampleData: [{
a: 0.35,
b: 14.5,
c: 6.15
}, {
a: 1,
b: 2.5,
c: 12
}, {
a: 10,
b: 0.2,
c: 4.21
}, {
a: 100,
b: 205,
c: 41.45
}, {
a: 1,
b: 100,
c: 12.1
}, {
a: 5.11,
b: 10.13,
c: 18.95
}, {
a: 42.12,
b: 37,
c: 17.97
}, {
a: 20.13,
b: 10.13,
c: 12.22
}, {
a: 1.9,
b: 2.5,
c: 2
}, {
a: 10,
b: 2,
c: 4
}, {
a: 17,
b: 5,
c: 11
}, {
a: 18.35,
b: 15.29,
c: 27.21
}]
}, {
ProjectId: 2,
ProjectName: 'SDK',
Lead: 1002,
UsersIdList: [1001, 1002, 1003, 1004, 1005, 1006, 1007],
sampleData: [{
a: 1.05,
b: 2.5,
c: 0.15
}, {
a: 1.9,
b: 2.5,
c: 2
}, {
a: 107,
b: 25,
c: 43
}, {
a: 13,
b: 10,
c: 2.1
}, {
a: 15.27,
b: 20,
c: 13.05
}, {
a: 10.35,
b: 5.29,
c: 7.21
}, {
a: 10,
b: 25,
c: 16.45
}, {
a: 6.24,
b: 10.9,
c: 11.18
}, {
a: 15.11,
b: 10.13,
c: 18.95
}, {
a: 10.83,
b: 30.13,
c: 19.36
}, {
a: 18.77,
b: 50,
c: 12.1
}, {
a: 44,
b: 30,
c: 17
}]
}
],
Groups: [
{
GroupId: 110,
GroupName: 'Admins',
UsersIdList: [1002, 1005, 1010]
}, {
GroupId: 111,
GroupName: 'Support',
UsersIdList: [1001, 1003, 1005, 1006, 1007, 1011, 1012]
}, {
GroupId: 112,
GroupName: 'QA',
UsersIdList: [1001, 1002, 1005, 1009, 1011]
}, {
GroupId: 113,
GroupName: 'Sales',
UsersIdList: [1002, 1003, 1008]
}, {
GroupId: 114,
GroupName: 'Development',
UsersIdList: [1002, 1005, 1006, 1007, 1008, 1011]
}
],
Users: [
{
UserId: 1001,
Name: 'Len'
}, {
UserId: 1002,
Name: 'Ann'
}, {
UserId: 1003,
Name: 'Lee'
}, {
UserId: 1004,
Name: 'Bob'
}, {
UserId: 1005,
Name: 'Peter'
}, {
UserId: 1006,
Name: 'Don'
}, {
UserId: 1007,
Name: 'George'
}, {
UserId: 1008,
Name: 'Maria'
}, {
UserId: 1009,
Name: 'Mike'
}, {
UserId: 1010,
Name: 'John'
}, {
UserId: 1011,
Name: 'Bryan'
}, {
UserId: 1012,
Name: 'Aaron'
}
],
Tickets: [
{
TicketId: 10020,
Title: 'Fiant adipiscing clari nunc molestie per placerat vero insitam. ullamcorper saepius etiam claritatem quod.',
CreatedOn: thisYear + '-01-06 00:24',
ModifiedOn: '2016-01-06 00:24',
UserId: 1005,
Status: 'Pending',
ProjectId: 1
}, {
TicketId: 10035,
Title: 'Possim soluta nisl ex volutpat possim est legere.',
CreatedOn: thisYear + '-01-06 02:14',
ModifiedOn: '2016-01-06 03:57',
UserId: 1005,
Status: 'Open',
ProjectId: 2
}, {
TicketId: 10050,
Title: 'Nulla tempor liber option nihil feugiat congue facit quinta.',
CreatedOn: thisYear + '-01-06 05:51',
ModifiedOn: thisYear + '-01-06 11:43',
UserId: 1005,
Status: 'Close',
ProjectId: 2
}, {
TicketId: 10070,
Title: 'Ut possim tempor parum ad eros.',
CreatedOn: thisYear + '-01-06 11:26',
ModifiedOn: thisYear + '-01-06 19:21',
UserId: 1001,
Status: 'Open',
ProjectId: 2
}, {
TicketId: 10475,
Title: 'Lip in solum deterruisset.',
CreatedOn: thisYear + '-01-06 06:03',
ModifiedOn: thisYear + '-01-06 07:21',
UserId: 1001,
Status: 'Open',
ProjectId: 1
}, {
TicketId: 10075,
Title: 'Pro in solum deterruisset.',
CreatedOn: thisYear + '-01-06 06:03',
ModifiedOn: thisYear + '-01-06 07:21',
UserId: 1002,
Status: 'Open',
ProjectId: 2
}, {
TicketId: 10076,
Title: 'Sed at choro sensibus efficiantur, liber vitae blandit no mei.',
CreatedOn: thisYear + '-01-04 10:51',
ModifiedOn: thisYear + '-01-06 16:34',
UserId: 1003,
Status: 'Open',
ProjectId: 2
}, {
TicketId: 10077,
Title: 'Oporteat sadipscing no sit, quo vocibus legendos interpretaris no, cum at eius nostro vulputate.',
CreatedOn: thisYear + '-01-05 11:00',
ModifiedOn: thisYear + '-01-05 13:41',
UserId: 1004,
Status: 'Open',
ProjectId: 2
}, {
TicketId: 10078,
Title: 'Ex dicant verterem menandri est, te est dicat tempor. In sed modus option suscipit.',
CreatedOn: thisYear + '-01-06 12:43',
ModifiedOn: thisYear + '-01-07 01:01',
UserId: 1005,
Status: 'Pending',
ProjectId: 1
}, {
TicketId: 10079,
Title: 'Eos utroque principes persecuti eu, ea nominavi perfecto comprehensam vel, usu te saepe audiam deleniti.',
CreatedOn: thisYear + '-01-07 12:26',
ModifiedOn: thisYear + '-01-08 15:41',
UserId: 1006,
Status: 'Open',
ProjectId: 2
}, {
TicketId: 10123,
Title: 'Qui maiorum convenire necessitatibus ex. Vix ex eripuit eruditi debitis, fabellas maluisset philosophia ius et, causae perfecto dissentias sea ea. Nec nibh idque expetenda ei, veri consectetuer mea eu. Invidunt urbanitas ut his.',
CreatedOn: thisYear + '-01-04 16:10',
ModifiedOn: thisYear + '-01-06 07:52',
UserId: 1009,
Status: 'Open',
ProjectId: 1
}, {
TicketId: 10125,
Title: 'Posse propriae salutandi ad his.',
CreatedOn: thisYear + '-01-05 06:03',
ModifiedOn: thisYear + '-01-06 07:21',
UserId: 1008,
Status: 'Open',
ProjectId: 1
}, {
TicketId: 10175,
Title: 'Prima tacimates perpetua cu usu, eu vix saepe soluta sapientem, zril eripuit fierent et eos.',
CreatedOn: thisYear + '-01-04 06:35',
ModifiedOn: thisYear + '-01-04 07:41',
UserId: 1008,
Status: 'Open',
ProjectId: 1
}, {
TicketId: 10175,
Title: 'Ea pro tale veri melius. Pro in solum deterruisset.',
CreatedOn: thisYear + '-01-04 09:25',
ModifiedOn: thisYear + '-01-06 17:22',
UserId: 1010,
Status: 'Open',
ProjectId: 1
}, {
TicketId: 10120,
Title: 'Litterarum aliquam quarta quis id in sit.',
CreatedOn: thisYear + '-01-06 18:12',
ModifiedOn: thisYear + '-01-06 19:31',
UserId: 1005,
Status: 'Pending',
ProjectId: 1
}, {
TicketId: 10122,
Title: 'Te quo postea regione aperiam, te illud reque vivendum vis, sumo dissentias est no. Duo viderer equidem assueverit ne. Illum assentior vix te, sed deleniti elaboraret temporibus ne, et debitis intellegam vim.',
CreatedOn: thisYear + '-01-06 14:45',
ModifiedOn: thisYear + '-01-07 10:52',
UserId: 1005,
Status: 'Open',
ProjectId: 1
}, {
TicketId: 10223,
Title: 'Te quo postea regione aperiam, te illud reque vivendum vis, sumo dissentias est no. Duo viderer equidem assueverit ne. Illum assentior vix te, sed deleniti elaboraret temporibus ne, et debitis intellegam vim.',
CreatedOn: thisYear + '-01-06 14:45',
ModifiedOn: thisYear + '-01-07 10:52',
UserId: 1002,
Status: 'Open',
ProjectId: 1
}, {
TicketId: 10224,
Title: 'Te quo postea regione aperiam, te illud reque vivendum vis, sumo dissentias est no. Duo viderer equidem assueverit ne. Illum assentior vix te, sed deleniti elaboraret temporibus ne, et debitis intellegam vim.',
CreatedOn: thisYear + '-01-06 14:45',
ModifiedOn: thisYear + '-01-07 10:52',
UserId: 1003,
Status: 'Open',
ProjectId: 1
}, {
TicketId: 10225,
Title: 'Te quo postea regione aperiam, te illud reque vivendum vis, sumo dissentias est no. Duo viderer equidem assueverit ne. Illum assentior vix te, sed deleniti elaboraret temporibus ne, et debitis intellegam vim.',
CreatedOn: thisYear + '-01-06 14:45',
ModifiedOn: thisYear + '-01-07 10:52',
UserId: 1004,
Status: 'Open',
ProjectId: 1
}, {
TicketId: 10226,
Title: 'Te quo postea regione aperiam, te illud reque vivendum vis, sumo dissentias est no. Duo viderer equidem assueverit ne. Illum assentior vix te, sed deleniti elaboraret temporibus ne, et debitis intellegam vim.',
CreatedOn: thisYear + '-01-06 14:45',
ModifiedOn: thisYear + '-01-07 10:52',
UserId: 1005,
Status: 'Open',
ProjectId: 1
}, {
TicketId: 10227,
Title: 'Te quo postea regione aperiam, te illud reque vivendum vis, sumo dissentias est no. Duo viderer equidem assueverit ne. Illum assentior vix te, sed deleniti elaboraret temporibus ne, et debitis intellegam vim.',
CreatedOn: thisYear + '-01-06 14:45',
ModifiedOn: thisYear + '-01-07 10:52',
UserId: 1006,
Status: 'Open',
ProjectId: 1
}, {
TicketId: 10228,
Title: 'Te quo postea regione aperiam, te illud reque vivendum vis, sumo dissentias est no. Duo viderer equidem assueverit ne. Illum assentior vix te, sed deleniti elaboraret temporibus ne, et debitis intellegam vim.',
CreatedOn: thisYear + '-01-06 14:45',
ModifiedOn: thisYear + '-01-07 10:52',
UserId: 1007,
Status: 'Open',
ProjectId: 1
}, {
TicketId: 10229,
Title: 'Te quo postea regione aperiam, te illud reque vivendum vis, sumo dissentias est no. Duo viderer equidem assueverit ne. Illum assentior vix te, sed deleniti elaboraret temporibus ne, et debitis intellegam vim.',
CreatedOn: thisYear + '-01-06 14:45',
ModifiedOn: thisYear + '-01-07 10:52',
UserId: 1008,
Status: 'Open',
ProjectId: 1
}, {
TicketId: 10230,
Title: 'Te quo postea regione aperiam, te illud reque vivendum vis, sumo dissentias est no. Duo viderer equidem assueverit ne. Illum assentior vix te, sed deleniti elaboraret temporibus ne, et debitis intellegam vim.',
CreatedOn: thisYear + '-01-06 14:45',
ModifiedOn: thisYear + '-01-07 10:52',
UserId: 1009,
Status: 'Open',
ProjectId: 1
}, {
TicketId: 10231,
Title: 'Te quo postea regione aperiam, te illud reque vivendum vis, sumo dissentias est no. Duo viderer equidem assueverit ne. Illum assentior vix te, sed deleniti elaboraret temporibus ne, et debitis intellegam vim.',
CreatedOn: thisYear + '-01-06 14:45',
ModifiedOn: thisYear + '-01-07 10:52',
UserId: 1010,
Status: 'Open',
ProjectId: 1
}, {
TicketId: 10232,
Title: 'Te quo postea regione aperiam, te illud reque vivendum vis, sumo dissentias est no. Duo viderer equidem assueverit ne. Illum assentior vix te, sed deleniti elaboraret temporibus ne, et debitis intellegam vim.',
CreatedOn: thisYear + '-01-06 14:45',
ModifiedOn: thisYear + '-01-07 10:52',
UserId: 1011,
Status: 'Open',
ProjectId: 1
}, {
TicketId: 10233,
Title: 'Te quo postea regione aperiam, te illud reque vivendum vis, sumo dissentias est no. Duo viderer equidem assueverit ne. Illum assentior vix te, sed deleniti elaboraret temporibus ne, et debitis intellegam vim.',
CreatedOn: thisYear + '-01-06 14:45',
ModifiedOn: thisYear + '-01-07 10:52',
UserId: 1012,
Status: 'Open',
ProjectId: 1
}
],
Comments: [
{
TicketId: 10020,
Date: thisYear + '-01-06 09:03',
By: 'George',
Description: 'Te dicunt fierent cum, aperiri vivendo tacimates sea ut. At atqui repudiare forensibus mea, quas ridens cu pro. Minim legimus te vel. Sit an atqui dissentias, qui in moderatius neglegentur.'
}, {
TicketId: 10020,
Date: thisYear + '-01-06 11:14',
By: 'Lee',
Description: 'Te nostrud mnesarchum comprehensam pri, no cum vocent eloquentiam.'
}, {
TicketId: 10120,
Date: thisYear + '-01-07 07:25',
By: 'Bryan',
Description: 'Mei ex suas altera assueverit, scaevola phaedrum contentiones sed cu.'
}
]
};
var sourcesOfChartsForUpdates = [];
var adaptersOfChartsForUpdates = [];
var getGroupsRelatedUserId = function (id)
{
var groups = initialData.Groups;
var matchedGroups = [];
var length = groups.length;
for (var i = 0; i < length; i += 1)
{
var group = groups[i];
var groupUsers = group.UsersIdList;
if (groupUsers.indexOf(id) !== -1)
{
matchedGroups.push(group);
}
}
return matchedGroups;
}
var arrayGroupsSelectedUser = [];
var currentEditUser = { UserId: -1, Name: '' };
var VALIDATION = {
emptyString: function (stringValue)
{
if (!stringValue && typeof (stringValue) !== 'string')
{
return false;
}
if (typeof (stringValue) === 'string' && !stringValue.trim())
{
return false;
}
if (stringValue.length < 1)
{
return false;
}
return true;
}
};
var addUserIdToBaseData = function (userId, groupId)
{
var baseGroups = initialData.Groups;
for (var i = 0; i < baseGroups.length; i += 1)
{
if (baseGroups[i].GroupId === groupId)
{
// ADD userId
if (initialData.Groups[i].UsersIdList.indexOf(userId) < 0)
{
initialData.Groups[i].UsersIdList.push(userId);
initialData.Groups[i].UsersIdList.sort();
break;
}
}
}
};
var deleteUserIdToBaseData = function (userId, groupId)
{
var baseGroups = initialData.Groups;
for (var i = 0; i < baseGroups.length; i += 1)
{
if (baseGroups[i].GroupId === groupId)
{
// DELETE userId
var idArray = baseGroups[i].UsersIdList;
var index = idArray.indexOf(userId);
if (index !== -1)
{
idArray.splice(index, 1);
}
initialData.Groups[i].UsersIdList = idArray;
break;
}
}
};
/*
WINDOW Login
*/
$('#loginWindow').jqxWindow({
autoOpen: true,
isModal: true,
width: 290,
height: 205,
draggable: false,
resizable: false,
theme: theme,
initContent: function ()
{
var Users = [
{
UserId: 1001,
Name: 'Len'
}, {
UserId: 1002,
Name: 'Ann'
}, {
UserId: 1003,
Name: 'Lee'
}, {
UserId: 1004,
Name: 'Bob'
}, {
UserId: 1005,
Name: 'Peter'
}, {
UserId: 1006,
Name: 'Don'
}, {
UserId: 1007,
Name: 'George'
}, {
UserId: 1008,
Name: 'Maria'
}, {
UserId: 1009,
Name: 'Mike'
}, {
UserId: 1010,
Name: 'John'
}, {
UserId: 1011,
Name: 'Bryan'
}, {
UserId: 1012,
Name: 'Aaron'
}
]
$('#loginUserNameInput').jqxDropDownList({
theme: theme,
placeHolder: ' Enter username',
width: 156,
source: Users,
selectedIndex: 4,
displayMember: "Name",
valueMember: "UserId",
height: 25
});
$('#loginUserPasswordInput').jqxInput({
theme: theme,
placeHolder: ' Enter password',
width: 150,
height: 25
});
$('#loginOrganizationDropDown').jqxDropDownList({
theme: theme,
selectedIndex: 0,
autoDropDownHeight: true,
width: 156,
height: 25
});
$('#loginSubmitButton').jqxButton({
theme: theme,
width: 80,
height: 25,
disabled: true
});
}
});
$('#loginUserPasswordInput').on('keyup', function ()
{
$('#loginWindow').jqxValidator('validate');
});
$('#loginUserPasswordInput').on('change', function ()
{
$('#loginWindow').jqxValidator('validate');
});
$('#loginWindow').jqxValidator({
hintType: 'label',
rules: [
{
input: '#loginUserPasswordInput',
message: 'Password is required!',
action: 'change, blur',
rule: 'required'
}
],
onSuccess: function ()
{
$('#loginSubmitButton').jqxButton({
disabled: false
});
var inputUsername = $('#loginUserNameInput').jqxDropDownList('getSelectedItem');
logInUser.Name = inputUsername.label;
logInUser.UserId = inputUsername.value;
changeHeaderUserName(logInUser.Name);
},
onError: function ()
{
$('#loginSubmitButton').jqxButton({
disabled: true
});
}
});
$('#loginSubmitButton').on('click', function ()
{
$('#loginWindow').jqxWindow('close');
initializeWidget();
$('#loginSubmitButton').off('click');
});
/*
WINDOW Edit user
*/
var changeUserName = function (newName, userId)
{
var users = initialData.Users;
for (var u = 0; u < users.length; u += 1)
{
if (users[u].UserId === userId)
{
initialData.Users[u].Name = newName;
break;
}
}
};
var collapseEditUser = 300;
var expandEditUser = 560;
var factorEditUser = 0.95;
var editUserWindowWidth = { collapse: collapseEditUser, expand: expandEditUser, collapseWidgets: collapseEditUser * factorEditUser, expandWidgets: expandEditUser * factorEditUser };
$('#editUserWindow').jqxWindow({
autoOpen: false,
resizable: false,
width: editUserWindowWidth.collapse,
isModal: true,
height: 300,
theme: theme,
draggable: false,
initContent: function ()
{
var editUserGroupsGridSource =
{
datatype: 'json',
datafields: [
{ name: 'groups', type: 'string', map: 'GroupName' },
{ name: 'id', type: 'number', map: 'GroupId' },
{ name: 'userslist', type: 'number', map: 'UsersIdList' }
],
localdata: initialData.Groups
};
var editUserGroupsGridDataAdapter = new $.jqx.dataAdapter(editUserGroupsGridSource);
$('#editUserGroupsGrid').jqxGrid({
width: editUserWindowWidth.collapseWidgets,
autoheight: true,
theme: theme,
showheader: false,
showstatusbar: false,
showtoolbar: false,
source: editUserGroupsGridDataAdapter,
columns: [
{ text: 'groups', datafield: 'groups' },
{
text: 'remove', datafield: 'remove', width: '20%', cellsrenderer: function (row, columnfield, value, defaulthtml, columnproperties)
{
return '<div style="text-align: center; margin-top: 7px;"><span class="glyphicon glyphicon-trash" aria-hidden="true"></span></div>'
}
},
]
});
$('#editUserGroupsGrid').on('cellclick', function (event)
{
var args = event.args;
var rowBoundIndex = args.rowindex;
var dataField = args.datafield;
if (dataField === 'remove')
{
var data = $('#editUserGroupsGrid').jqxGrid('getrowdata', rowBoundIndex);
var groupId = data.id;
var groupName = data.groups;
var updatedArrayGroupsSelected = new Array();
for (var i in arrayGroupsSelectedUser)
{
if (arrayGroupsSelectedUser[i].GroupId !== groupId)
{
updatedArrayGroupsSelected.push(arrayGroupsSelectedUser[i]);
}
}
var initGroups = initialData.Groups;
for (var k = 0; k < initGroups.length; k += 1)
{
if (initGroups[k].GroupId === groupId)
{
$('#listboxGroups').jqxListBox('unselectIndex', k);
}
}
deleteUserIdToBaseData(currentEditUser.UserId, groupId);
arrayGroupsSelectedUser = updatedArrayGroupsSelected;
getFilteringGroups();
}
});
$('#editUserNameInput').jqxInput({
theme: theme,
placeHolder: ' Enter username',
width: 216,
height: 25
});
$('#editUserNameInput').val(logInUser.Name);
$('#editUserNameInput').on('keyup', function ()
{
var username = $('#editUserNameInput').val();
if (VALIDATION.emptyString(username))
{
changeEditUserNameInput(username);
changeUserName(username, currentEditUser.UserId);
$('#dashboardProjectMembersGrid').jqxGrid('updatebounddata');
} else
{
changeEditUserNameInput('');
}
if (isLogInUser)
{
changeHeaderUserName(username);
}
});
$('#editUserAddGroupButton').jqxButton({
theme: theme,
width: editUserWindowWidth.collapseWidgets,
height: 30,
disabled: false
});
$('#editUserAddGroupButtonGroups').jqxButton({
theme: theme,
width: 80,
height: 25,
disabled: false
});
$('#editUserAddGroupButtonClose').jqxButton({
theme: theme,
width: 80,
height: 25,
disabled: false
});
}
});
var revertStateEditUserWindow = function ()
{
$('#listboxGroups').hide();
$('#editUserWindow').jqxWindow({ width: editUserWindowWidth.collapse });
$('#buttonsGroupsClose').css('left', 5 + 'px');
};
$('#editUserWindowContent').on('dblclick', function ()
{
revertStateEditUserWindow();
});
$('#editUserWindow').on('close', function (event)
{
revertStateEditUserWindow();
});
var getFilteringGroups = function ()
{
var filtergroup = new $.jqx.filter();
var filter_or_operator = 1;
var filtercondition = 'contains';
for (var j = 0; j < arrayGroupsSelectedUser.length; j += 1)
{
var currentGroup = arrayGroupsSelectedUser[j];
var filtervalue = currentGroup.GroupName;
var filter = filtergroup.createfilter('stringfilter', filtervalue, filtercondition);
filtergroup.addfilter(filter_or_operator, filter);
}
$('#editUserGroupsGrid').jqxGrid('addfilter', 'groups', filtergroup);
$('#editUserGroupsGrid').jqxGrid('applyfilters');
};
var isFirstInitListbox = true;
var isInOperationProcess = false;
var checkContainThatGroup = function (groupsArray, groupId)
{
for (var i = 0; i < groupsArray.length; i += 1)
{
if (groupsArray.GroupId === groupId)
{
return true;
}
}
return false;
};
$('#editUserAddGroupButton').on('click', function ()
{
if (isFirstInitListbox)
{
var groupsListboxSource = {
datatype: 'json',
datafields: [
{ name: 'id', type: 'number', map: 'GroupId' },
{ name: 'groups', type: 'string', map: 'GroupName' }
],
root: 'Groups',
localdata: initialData
};
var groupsListboxDataAdapter = new $.jqx.dataAdapter(groupsListboxSource);
$('#listboxGroups').jqxListBox({
width: 235,
height: 190,
source: groupsListboxDataAdapter,
displayMember: 'groups',
valueMember: 'id',
theme: theme,
multiple: true,
filterable: true
});
isFirstInitListbox = false;
}
isInOperationProcess = true;
$('#listboxGroups').jqxListBox('clearSelection');
for (var i = 0; i < arrayGroupsSelectedUser.length; i += 1)
{
var currentGroup = arrayGroupsSelectedUser[i];
for (var g = 0; g < initialData.Groups.length; g += 1)
{
var group = initialData.Groups[g];
if (group.GroupId === currentGroup.GroupId)
{
$('#listboxGroups').jqxListBox('selectIndex', g);
break;
}
}
}
isInOperationProcess = false;
$('#editUserWindow').jqxWindow({ width: editUserWindowWidth.expand });
$('#buttonsGroupsClose').css('left', 150 + 'px');
// Add / Delete user in one group, when editUser
$('#listboxGroups').on('select', function (event)
{
var args = event.args;
if (args)
{
var item = args.item;
var label = item.label;
var groupId = item.value;
addUserIdToBaseData(currentEditUser.UserId, groupId);
var updatedArrayGroupsSelected = new Array();
if (!isInOperationProcess)
{
if (!checkContainThatGroup(arrayGroupsSelectedUser, groupId))
{
for (var i in initialData.Groups)
{
if (initialData.Groups[i].GroupId === groupId)
{
arrayGroupsSelectedUser.push(initialData.Groups[i]);
}
}
}
}
$('#editUserGroupsGrid').jqxGrid('updatebounddata');
getFilteringGroups();
}
});
$('#listboxGroups').on('unselect', function (event)
{
var args = event.args;
if (args)
{
var item = args.item;
var groupId = item.value;
deleteUserIdToBaseData(currentEditUser.UserId, groupId);
if (!isInOperationProcess)
{
var updatedArrayGroupsSelected = new Array();
for (var i in arrayGroupsSelectedUser)
{
if (arrayGroupsSelectedUser[i].GroupId !== groupId)
{
updatedArrayGroupsSelected.push(arrayGroupsSelectedUser[i]);
}
}
// Prevent filtering
if (updatedArrayGroupsSelected.length === 0)
{
updatedArrayGroupsSelected.push("");
}
arrayGroupsSelectedUser = updatedArrayGroupsSelected;
getFilteringGroups();
}
}
});
$('#listboxGroups').show();
});
$('#editUserAddGroupButtonGroups').on('click', function ()
{
$('#editGroupsWindow').jqxWindow('open');
$('#editGroupsWindow').jqxWindow('focus');
});
$('#editUserAddGroupButtonClose').on('click', function ()
{
$('#editUserWindow').jqxWindow('close');
});
var getFiltering = function (array, filtergroup)
{
// 0 for "and" and 1 for "or"
var filter_or_operator = 1;
// numericfilter, stringfilter, datefilter or booelanfilter
var filtertype = 'numericfilter';
var filtercondition = isInitialFiltering ? 'NULL' : 'EQUAL';
for (var i in array)
{
var key = array[i];
var filter = filtergroup.createfilter(filtertype, key, filtercondition);
filtergroup.addfilter(filter_or_operator, filter);
}
return filtergroup;
};
var isItSecnodOpenGroupsUsers = false;
var currenSelectedGroup = -1;
var currenSelectedGroupName = '';
var editGroupsWindowWidth = { collapse: 540, expand: 750 };
var correctionContainerButtons = { collapse: '125px', expand: '255px' };
/*
WINDOW Edit group
*/
$('#editGroupsWindow').jqxWindow({
autoOpen: false,
isModal: true,
width: editGroupsWindowWidth.collapse,
height: 250,
theme: theme,
draggable: false,
resizable: false,
initContent: function ()
{
var groupsGridSource =
{
datatype: 'json',
datafields: [
{ name: 'id', type: 'number', map: 'GroupId' },
{ name: 'groups', type: 'string', map: 'GroupName' },
{ name: 'usersId', type: 'number', map: 'UsersIdList' }
],
root: 'Groups',
localdata: initialData,
addrow: function (rowid, rowdata, position, commit)
{
commit(true);
},
deleterow: function (rowid, commit)
{
commit(true);
},
updaterow: function (rowid, rowdata, commit)
{
commit(true);
}
};
// Calculate buttons position
$('#editGroupsWindowContainerButtons').css('left', correctionContainerButtons.collapse);
var groupsGridDataAdapter = new $.jqx.dataAdapter(groupsGridSource);
var gridWidth = 250;
var gridHeight = 171;
$('#groupsGrid').jqxGrid({
width: gridWidth,
height: gridHeight,
theme: theme,
source: groupsGridDataAdapter,
columns: [
{ text: 'Groups', datafield: 'groups' }
]
});
var isOpenUsersListbox = false;
$('#groupsGrid').on('rowselect', function (event)
{
$('#listboxUsernames').hide();
$('#editGroupsWindowContainerButtons').css('left', correctionContainerButtons.collapse);
$('#editGroupsWindow').jqxWindow({ width: editGroupsWindowWidth.collapse });
var args = event.args;
var rowBoundIndex = args.rowindex;
var rowData = args.row;
currenSelectedGroup = rowBoundIndex;
var currentGroup = rowData['groups'];
currenSelectedGroupName = currentGroup;
$('#usersGrid').jqxGrid('setcolumnproperty', 'user', 'text', 'Users [' + currentGroup + ']');
isInitialFiltering = false;
var usersIdList = rowData['usersId'];
if (!groupsUsersListState[currentGroup])
{
groupsUsersListState[currentGroup] = usersIdList;
}
var filtergroup = new $.jqx.filter();
if (usersIdList.length == 0)
{
usersIdList = [''];
}
filtergroup = getFiltering(usersIdList, filtergroup);
$('#usersGrid').jqxGrid('addfilter', 'id', filtergroup);
$('#usersGrid').jqxGrid('applyfilters');
});
/* Create listbox - usernames */
var initializeListboxUsernames = function ()
{
var usersListboxSource = {
datatype: 'json',
datafields: [
{ name: 'id', type: 'number', map: 'UserId' },
{ name: 'user', type: 'string', map: 'Name' }
],
root: 'Users',
localdata: initialData,
deleterow: function (rowid, commit)
{
// synchronize with the server - send delete command
// call commit with parameter true if the synchronization with the server was successful
// and with parameter false if the synchronization has failed.
commit(true);
}
};
var usersListboxDataAdapter = new $.jqx.dataAdapter(usersListboxSource);
$('#listboxUsernames').jqxListBox({
source: usersListboxDataAdapter,
width: 202,
height: gridHeight,
theme: themeL,
displayMember: 'user',
valueMember: 'id',
multiple: true,
filterable: true
});
return $('#listboxUsernames');
};
var getIndexesForListbox = function (valueMembers, records)
{
var length = valueMembers.length;
var indexes = new Array();
for (var i = 0; i < records.length; i += 1)
{
var currentUser = records[i];
var currentUserId = currentUser.id;
var coincidence = valueMembers.indexOf(currentUserId);
if (coincidence != -1)
{
var index = i;
indexes.push(index);
}
}
return indexes;
};
/* Information about current state of users in groups */
var groupsUsersListState = {};
var usersGridSource = {
datatype: 'json',
datafields: [
{ name: 'id', type: 'number', map: 'UserId' },
{ name: 'user', type: 'string', map: 'Name' }
],
root: 'Users',
localdata: initialData,
deleterow: function (rowid, commit)
{
// synchronize with the server - send delete command
// call commit with parameter true if the synchronization with the server was successful
// and with parameter false if the synchronization has failed.
commit(true);
}
};
var usersGridDataAdapter = new $.jqx.dataAdapter(usersGridSource);
var localizationobj = {};
localizationobj.emptydatastring = 'Please select a group.';
$('#usersGrid').jqxGrid({
width: gridWidth,
height: gridHeight,
theme: theme,
showstatusbar: false,
showtoolbar: false,
localization: localizationobj,
ready: function ()
{
var usersListbox = initializeListboxUsernames();
usersListbox.hide();
$('#usersGrid').jqxGrid('hidecolumn', 'id');
var filtergroup = new $.jqx.filter();
filtergroup = getFiltering([''], filtergroup);
$('#usersGrid').jqxGrid('addfilter', 'id', filtergroup);
$('#usersGrid').jqxGrid('applyfilters');
isInitialFiltering = false;
$('#usersGrid').on('columnclick', function (event)
{
$('#editGroupsWindowContainerButtons').css('left', correctionContainerButtons.expand);
isOpenUsersListbox = true;
var args = event.args;
var dataField = args.datafield;
if (dataField === 'changeUsers')
{
var rowsFromGroupsGrid = $('#groupsGrid').jqxGrid('getrows');
if (currenSelectedGroup != -1)
{
for (var row in rowsFromGroupsGrid)
{
var currentGroup = rowsFromGroupsGrid[row];
if (currentGroup['uid'] === currenSelectedGroup)
{
var currentUsersList = groupsUsersListState[currenSelectedGroupName];
var records = usersGridDataAdapter.getrecords();
var listboxIndexes = getIndexesForListbox(currentUsersList, records);
usersListbox.jqxListBox('clearSelection');
for (var i = 0; i < listboxIndexes.length; i += 1)
{
usersListbox.jqxListBox('selectIndex', listboxIndexes[i]);
}
usersListbox.show();
$('#editGroupsWindow').jqxWindow({ width: editGroupsWindowWidth.expand });
break;
}
}
} else
{
usersListbox.show();
$('#editGroupsWindow').jqxWindow({ width: editGroupsWindowWidth.expand });
}
}
});
$('#listboxUsernames').on('select', function (event)
{
var args = event.args;
if (args)
{
var item = args.item;
var value = item.value;
if (currenSelectedGroupName.length !== 0)
{
if (groupsUsersListState[currenSelectedGroupName].indexOf(value) === -1)
{
groupsUsersListState[currenSelectedGroupName].push(value);
for (var l = 0; l < initialData.Groups.length; l += 1)
{
if (initialData.Groups[l].GroupName === currenSelectedGroupName && value === currentEditUser.UserId)
{
arrayGroupsSelectedUser.push(initialData.Groups[l]);
}
}
}
}
$('#editUserGroupsGrid').jqxGrid('updatebounddata');
getFilteringGroups();
}
});
$('#listboxUsernames').on('change', function ()
{
$('#usersGrid').jqxGrid('clearfilters');
var items = $('#listboxUsernames').jqxListBox('getSelectedItems');
var length = items.length;
var changeUsersId = new Array();
for (var n = 0; n < length; n += 1)
{
var currentUser = items[n];
changeUsersId.push(currentUser.value);
}
if (changeUsersId.length === 0)
{
changeUsersId.push('');
}
var filtergroup = new $.jqx.filter();
filtergroup = getFiltering(changeUsersId, filtergroup);
$('#usersGrid').jqxGrid('addfilter', 'id', filtergroup);
$('#usersGrid').jqxGrid('applyfilters');
$('#usersGrid').jqxGrid('refreshfilterrow');
});
// This event is used to catch click on 'trash icon'
$('#usersGrid').on('cellclick', function (event)
{
var args = event.args;
var rowBoundIndex = args.rowindex;
var dataField = args.datafield;
if (dataField === 'changeUsers')
{
// Delete users from current selected group
var rowId = $('#usersGrid').jqxGrid('getrowid', rowBoundIndex);
$('#listboxUsernames').jqxListBox('unselectIndex', rowId);
var data = $('#usersGrid').jqxGrid('getrowdatabyid', rowId);
var removeId = data.id;
var currentGroupUsersList = groupsUsersListState[currenSelectedGroupName];
var index = currentGroupUsersList.indexOf(removeId);
currentGroupUsersList.splice(index, 1);
// Create update on current group
groupsUsersListState[currenSelectedGroupName] = currentGroupUsersList;
var filtergroup = new $.jqx.filter();
if (currentGroupUsersList.length == 0)
{
currentGroupUsersList = [''];
localizationobj.emptydatastring = 'The group is empty.';
$('#usersGrid').jqxGrid('localizestrings', localizationobj);
}
filtergroup = getFiltering(currentGroupUsersList, filtergroup);
$('#usersGrid').jqxGrid('addfilter', 'id', filtergroup);
$('#usersGrid').jqxGrid('applyfilters');
}
});
},
source: usersGridDataAdapter,
columns: [
{ text: 'Users',