2026 lines
98 KiB
Plaintext
2026 lines
98 KiB
Plaintext
<%@ Page Title="" Language="C#" MasterPageFile="~/Security/Security.master" AutoEventWireup="true" CodeFile="UserManage.aspx.cs" Inherits="Security_UserManage" %>
|
||
|
||
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
|
||
<style type="text/css">
|
||
.no_wrap th {
|
||
white-space: nowrap;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
}
|
||
|
||
.max160 {
|
||
max-width: 160px;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.dialog-content table {
|
||
border-collapse: collapse;
|
||
width: 100%;
|
||
line-height: 32px;
|
||
}
|
||
|
||
.dialog-content table td.label {
|
||
width: 130px;
|
||
text-align: right;
|
||
padding-right: 10px;
|
||
line-height: 24px;
|
||
height: 24px;
|
||
vertical-align: top;
|
||
}
|
||
|
||
.dialog-content table td input,
|
||
.dialog-content table td textarea {
|
||
border: 1px solid #a9a9a9;
|
||
width: 250px;
|
||
height: 18px;
|
||
padding: 1px;
|
||
}
|
||
|
||
#dialog_machines .dialog-content table td input {
|
||
width: auto;
|
||
}
|
||
|
||
.dialog-content table td textarea {
|
||
margin-top: 6px;
|
||
}
|
||
|
||
.dialog-content table td select {
|
||
width: 254px;
|
||
height: 24px;
|
||
}
|
||
|
||
.dialog-content table td input[type="checkbox"] {
|
||
border: none;
|
||
}
|
||
|
||
.dialog-content table td textarea {
|
||
height: 150px;
|
||
width: 420px;
|
||
max-width: 500px;
|
||
}
|
||
|
||
.ctl_button {
|
||
font-family: 'CalciteWebCoreIcons';
|
||
display: block;
|
||
margin: 6px auto;
|
||
width: 60px;
|
||
height: 22px;
|
||
line-height: 21px;
|
||
padding: 0;
|
||
}
|
||
|
||
.group_table .main_table {
|
||
table-layout: fixed;
|
||
}
|
||
|
||
.group_table .main_table thead tr {
|
||
display: block;
|
||
}
|
||
|
||
.group_table .main_table tbody {
|
||
height: 280px;
|
||
display: block;
|
||
overflow-y: auto;
|
||
}
|
||
|
||
.group_table .main_table th {
|
||
width: 165px;
|
||
}
|
||
|
||
.group_table .main_table td {
|
||
width: 165px;
|
||
white-space: nowrap;
|
||
word-break: keep-all;
|
||
}
|
||
|
||
.group_table .main_table td div {
|
||
width: 165px;
|
||
overflow: hidden;
|
||
white-space: nowrap;
|
||
word-break: keep-all;
|
||
text-overflow: ellipsis;
|
||
}
|
||
|
||
.td_controller {
|
||
vertical-align: middle;
|
||
padding: 40px 8px;
|
||
/*border-left: 1px solid #b0b0b0;
|
||
border-right: 1px solid #b0b0b0;*/
|
||
}
|
||
|
||
.ctl_button {
|
||
font-family: 'CalciteWebCoreIcons';
|
||
display: block;
|
||
margin: 6px auto;
|
||
width: 60px;
|
||
height: 22px;
|
||
line-height: 21px;
|
||
padding: 0;
|
||
}
|
||
|
||
.machine_maskbg {
|
||
top: 0;
|
||
left: 0;
|
||
width: 100%;
|
||
height: 100%;
|
||
position: absolute;
|
||
background: #000;
|
||
opacity: 0.2;
|
||
}
|
||
</style>
|
||
<link href="<%=GetFileUrlWithVersion("../css/panel.css")%>" rel="stylesheet" />
|
||
<script src="<%=GetFileUrlWithVersion("js/controls.js")%>" type="text/javascript"></script>
|
||
<script src="<%=GetFileUrlWithVersion("../js/assetselector.js")%>" type="text/javascript"></script>
|
||
<script type="text/javascript" src="<%=GetFileUrlWithVersion("../fic/fic/js/controls/editGridCtrl.js") %>"></script>
|
||
<script src="<%=GetFileUrlWithVersion("../fic/js/utility.js")%>" type="text/javascript"></script>
|
||
<script src="<%=GetFileUrlWithVersion("js/usermanage.js")%>" type="text/javascript"></script>
|
||
<%--<script src="<%=GetFileUrlWithVersion("../js/lib/ui.min.js")%>" type="text/javascript"></script>
|
||
<link rel="stylesheet" href="<%=GetFileUrlWithVersion("../js/lib/ui.min.css")%>" />--%>
|
||
<script src="<%=GetFileUrlWithVersion("../js/gridlayout.js")%>" type="text/javascript"></script>
|
||
<script type="text/javascript">
|
||
var gridLayoutID = "UserManage";
|
||
var IsDealer = <%=IsDealer ?"true":"false"%>;
|
||
var IsAdmin =<%=IsAdmin ?"true":"false"%>;
|
||
var WorkOrderLisence =<%=WorkOrderLisence ?"true":"false"%>;
|
||
var CustomerRecordLisence =<%=CustomerRecordLisence ?"true":"false"%>;
|
||
var users;
|
||
function isMyself(uid) {
|
||
return uid == '<%=IID%>';
|
||
}
|
||
|
||
_network.userquery = function (method, param, callback, error) {
|
||
_network.request("Security/UserManage.aspx", -1, method, param, callback, error);
|
||
}
|
||
|
||
function OnDelete(u) {
|
||
if (!u) {
|
||
return;
|
||
}
|
||
showConfirm(GetTextByKey("P_UM_DOYOUWANTTODELETE", 'Do you want to delete {0}?').replace('{0}', u.DisplayName), GetTextByKey("P_UM_DELETEUSER", 'Delete user'), function () {
|
||
_network.userquery('DeleteUser', u.IID, function (data) {
|
||
OnRefresh();
|
||
}, function (err) {
|
||
showAlert('Failed to delete this user.', GetTextByKey("P_UM_DELETEUSER", 'Delete user'));
|
||
});
|
||
});
|
||
}
|
||
|
||
function CloseDialog(type, index) {
|
||
$('#dialog_user').hideDialog();
|
||
newUserSelectIndex = index;
|
||
OnRefresh();
|
||
}
|
||
|
||
function changeGridSelectIndex(index) {
|
||
grid_dt.selectedIndexes = [index];
|
||
grid_dt.scrollToIndex(index);
|
||
}
|
||
|
||
function OnAdd() {
|
||
execIframeFunc("init", [], "iframeuser");
|
||
showmaskbg(true);
|
||
$('#dialog_user')
|
||
.attr('act', 'add')
|
||
.showDialogRight();
|
||
}
|
||
|
||
var uiid;
|
||
var indexInEdit = -1;
|
||
function OnEdit() {
|
||
indexInEdit = grid_dt.selectedIndex;
|
||
if (indexInEdit < 0) {
|
||
showAlert(GetTextByKey("P_UM_PLEASESELECTUSER", "Please select user."), GetTextByKey("P_USER", "User")); return;
|
||
}
|
||
var user = grid_dt.source[indexInEdit].Values;
|
||
if (!user) {
|
||
uiid = undefined;
|
||
return;
|
||
}
|
||
uiid = user.IID;
|
||
|
||
execIframeFunc("init", [uiid, grid_dt.source, indexInEdit], "iframeuser");
|
||
showmaskbg(true);
|
||
$('#dialog_user')
|
||
.attr('act', 'edit')
|
||
.showDialogRight();
|
||
}
|
||
|
||
function OnDblClick(e) {
|
||
OnEdit();
|
||
}
|
||
|
||
function OnRefresh() {
|
||
showloading(true);
|
||
var searchtxt = "";
|
||
var active = $('#selactive').val();
|
||
searchtxt = htmlencode($.trim($('#searchinputtxt').val()));
|
||
_network.userquery('GetUsers', JSON.stringify([active, searchtxt]), function (data) {
|
||
showloading(false);
|
||
if ($.nullOrEmpty(searchtxt)) {
|
||
isalluser = true;
|
||
}
|
||
else {
|
||
isalluser = false;
|
||
}
|
||
users = data;
|
||
showUserList(users);
|
||
}, function (err) {
|
||
showloading(false);
|
||
});
|
||
}
|
||
|
||
var usertypesource = [
|
||
{ value: 0, text: GetTextByKey('P_UM_READONLY', 'Read Only') },
|
||
{ value: 1, text: GetTextByKey('P_UM_COMMON', 'Common') },
|
||
{ value: 2, text: GetTextByKey('P_UM_ADMIN', 'Admin') }
|
||
];
|
||
var contacttypesource = [
|
||
{ value: 7, text: GetTextByKey('P_UM_ADVISOR', 'Advisor') },
|
||
{ value: 1, text: GetTextByKey('P_UM_DRIVER', 'Driver') },
|
||
{ value: 5, text: GetTextByKey('P_UM_FLEETMANAGER', 'Fleet Manager') },
|
||
{ value: 0, text: GetTextByKey('P_UM_FOREMAN', 'Foreman') },
|
||
{ value: 2, text: GetTextByKey('P_UM_INVENTORYMANAGER', 'Inventory Manager') },
|
||
{ value: 3, text: GetTextByKey('P_UM_RENTALMANAGER', 'Rental Manager') },
|
||
{ value: 4, text: GetTextByKey('P_UM_SERVICEMANAGER', 'Service Manager') },
|
||
{ value: 6, text: GetTextByKey('P_UM_TECHNICIAN', 'Technician') },
|
||
{ value: 100, text: GetTextByKey('P_UM_OTHER', 'Other') }
|
||
];
|
||
|
||
var managersource = [];
|
||
function getManagerList() {
|
||
managersource = [];
|
||
_network.userquery("GetUsers", JSON.stringify([-1, ""]), function (data) {
|
||
if (data && data.length > 0) {
|
||
var source = [{ value: '', text: ' ' }];
|
||
|
||
for (var i = 0; i < data.length; i++) {
|
||
var s = data[i];
|
||
source.push({ value: s.IID, text: s.DisplayName });
|
||
}
|
||
|
||
managersource = source;
|
||
}
|
||
}, function () {
|
||
});
|
||
}
|
||
|
||
|
||
var newUserSelectIndex = -1;
|
||
function showUserList(data) {
|
||
var rows = [];
|
||
for (var i = 0; i < data.length; i++) {
|
||
var r = data[i];
|
||
if (newuseriid != '' && r.IID == newuseriid)
|
||
newUserSelectIndex = i;
|
||
|
||
var distype = "";
|
||
if (r.UserType == 2)
|
||
distype = 'Admin';
|
||
else if (r.UserType == 1)
|
||
distype = 'Common';
|
||
else
|
||
distype = 'Read Only';
|
||
|
||
for (var j in r) {
|
||
if (j === "UserType") {
|
||
r[j] = { DisplayValue: distype, Value: r[j] };
|
||
}
|
||
else if (j === "Active") {
|
||
r[j] = { DisplayValue: r.Active ? "Yes" : "No", Value: r[j] };
|
||
}
|
||
else if (j === "IsUser") {
|
||
r["IsUser"] = { DisplayValue: r.IsUser ? "Yes" : "No", Value: r[j] };
|
||
}
|
||
else if (j === "AssignedWorkOrders") {
|
||
r["AssignedWorkOrders"] = { DisplayValue: r.AssignedWorkOrders ? "Yes" : "No", Value: r[j] };
|
||
}
|
||
if (j === "GroupNames") {
|
||
r[j] = { DisplayValue: r["GroupNamesStr"], Value: r[j] };
|
||
}
|
||
else if (j === "EmailOptOut") {
|
||
r["EmailOptOut"] = { DisplayValue: r.EmailOptOut ? "Yes" : "No", Value: r[j] };
|
||
}
|
||
}
|
||
|
||
var fr = { Values: r };
|
||
rows.push(fr);
|
||
}
|
||
|
||
var top = grid_dt.scrollTop();
|
||
grid_dt.setData(rows);
|
||
if (newUserSelectIndex > 0) {
|
||
grid_dt.selectedIndexes = [newUserSelectIndex];
|
||
grid_dt.reload();
|
||
newUserSelectIndex = -1;
|
||
newuseriid = '';
|
||
}
|
||
grid_dt.scrollTop(top);
|
||
}
|
||
|
||
function getUserTypeText(usertype) {
|
||
var distype = "";
|
||
if (usertype == 2)
|
||
distype = 'Admin';
|
||
else if (usertype == 1)
|
||
distype = 'Common';
|
||
else
|
||
distype = 'Read Only';
|
||
return distype;
|
||
}
|
||
|
||
var grid_dt;
|
||
function InitGridData() {
|
||
grid_dt = new GridView('#userlist');
|
||
grid_dt.lang = {
|
||
all: GetTextByKey("P_GRID_ALL", "(All)"),
|
||
ok: GetTextByKey("P_GRID_OK", "OK"),
|
||
reset: GetTextByKey("P_GRID_RESET", "Reset")
|
||
};
|
||
grid_dt.isEditable = true;
|
||
var list_columns = [
|
||
{ name: 'ID', caption: GetTextByKey("P_UM_USERIDOREMAIL", "User ID/Email"), valueIndex: 'ID', css: { 'width': 130, 'text-align': 'left' } },
|
||
{ name: 'DisplayName', caption: GetTextByKey("P_UM_USERNAME", "User Name"), valueIndex: 'DisplayName', css: { 'width': 100, 'text-align': 'left' } },
|
||
{ name: 'UserType', caption: GetTextByKey("P_UM_USERTYPE", "User Type"), valueIndex: 'UserType', allowFilter: true, css: { 'width': 85, 'text-align': 'left' } },
|
||
{ name: 'Active', caption: GetTextByKey("P_UM_ACTIVE", "Active"), valueIndex: 'Active', allowFilter: true, css: { 'width': 70, 'text-align': 'left' } },
|
||
{ name: 'IsUser', caption: GetTextByKey("P_UM_ISUSER", "Is User"), valueIndex: 'IsUser', allowFilter: true, css: { 'width': 70, 'text-align': 'left' } },
|
||
{ name: 'AssignedWorkOrders', caption: GetTextByKey("P_UM_ASSIGNEDWORKORDERS", "Assigned Work Orders"), valueIndex: 'AssignedWorkOrders', allowFilter: true, css: { 'width': 100, 'text-align': 'left' } },
|
||
{ name: 'TextAddress', caption: GetTextByKey("P_UM_TEXTADDRESS", "Text Address"), valueIndex: 'TextAddress', css: { 'width': 130, 'text-align': 'left' } },
|
||
{ name: 'Mobile', caption: GetTextByKey("P_UM_MOBILE", "Mobile"), valueIndex: 'Mobile', css: { 'width': 80, 'text-align': 'left' } },
|
||
{ name: 'BusinessPhone', caption: GetTextByKey("P_UM_BUSINESSPHONE", "Business Phone"), valueIndex: 'BusinessPhone', css: { 'width': 80, 'text-align': 'left' } },
|
||
{ name: 'ContactTypeName', caption: GetTextByKey("P_UM_CONTACTTYPE", "Contact Type"), valueIndex: 'ContactTypeName', allowFilter: true, css: { 'width': 105, 'text-align': 'left' } },
|
||
{ name: 'FOB', caption: GetTextByKey("P_UM_EMPLOYEEIDORFOB", "Employee ID or FOB"), valueIndex: 'FOB', css: { 'width': 125, 'text-align': 'left' } },
|
||
{ name: 'ManagerName', caption: GetTextByKey("P_UM_MANAGER", "Manager"), valueIndex: 'ManagerName', allowFilter: true, css: { 'width': 90, 'text-align': 'left' } },
|
||
{ name: 'EmailOptOut', caption: GetTextByKey("P_UM_OPTOUTOFFICOMMUNICATIONS", "Opt Out of FI Communications?"), valueIndex: 'EmailOptOut', allowFilter: true, css: { 'width': 85, 'text-align': 'left' } },
|
||
{ name: 'Notes', caption: GetTextByKey("P_UM_NOTES", "Notes"), valueIndex: 'Notes', css: { 'width': 130, 'text-align': 'left' } },
|
||
{ name: 'GroupNames', caption: GetTextByKey("P_UM_GROUPNAME", "Group Name"), valueIndex: 'GroupNames', css: { 'width': 150, 'text-align': 'left' } },
|
||
{ name: 'Edit', caption: "", alwaysshow: true, css: { 'width': 30, 'text-align': 'center' } },
|
||
{ name: 'Copy', caption: "", alwaysshow: true, css: { 'width': 30, 'text-align': 'center' } },
|
||
{ name: 'AssetAssignment', caption: "", alwaysshow: true, css: { 'width': 30, 'text-align': 'center' } },
|
||
{ name: 'AssetGroupAssignment', caption: "", alwaysshow: true, css: { 'width': 30, 'text-align': 'center' } },
|
||
{ name: 'AssetTypeAssignment', caption: "", alwaysshow: true, css: { 'width': 30, 'text-align': 'center' } },
|
||
{ name: 'JobsiteAssignment', caption: "", alwaysshow: true, css: { 'width': 30, 'text-align': 'center' } },
|
||
{ name: 'Delete', caption: "", alwaysshow: true, css: { 'width': 30, 'text-align': 'center' } },
|
||
{ name: 'ResetPassword', caption: "", alwaysshow: true, css: { 'width': 30, 'text-align': 'center' } }
|
||
];
|
||
var columns = [];
|
||
// head
|
||
for (var hd in list_columns) {
|
||
var col = {};
|
||
col.name = list_columns[hd].name;
|
||
col.caption = list_columns[hd].caption;
|
||
col.visible = true;
|
||
col.sortable = true;
|
||
col.width = list_columns[hd].css.width;
|
||
col.align = list_columns[hd].css["text-align"]
|
||
col.key = list_columns[hd].valueIndex;
|
||
col.allowFilter = list_columns[hd].allowFilter;
|
||
col.oldFilterValues = col.filterValues;
|
||
col.alwaysshow = list_columns[hd].alwaysshow;
|
||
if (col.name === "Active" || col.name === "IsUser" || col.name === "EmailOptOut") {
|
||
col.filterSource = [{ Value: true, DisplayValue: 'Yes' }, { Value: false, DisplayValue: 'No' }];
|
||
}
|
||
if (col.name === "DisplayName") {
|
||
col.allowHtml = true;
|
||
col.filterCustom = true;
|
||
col.filter = function (item) {
|
||
return $('<span class="margin-input-span status-cell"></span>').text(item.DisplayName);
|
||
};
|
||
col.editFilter = function (item) {
|
||
if (!item.IID) {
|
||
return $('<span class="margin-input-span status-cell"></span>').text(item.DisplayName);
|
||
}
|
||
var ipt = $('<input type="text" class="input-cell" maxlength="200"/>');
|
||
ipt.val(item.DisplayName);
|
||
ipt.on('input propertychange', function () {
|
||
var v = $(this).val().trim();
|
||
if (v && v != "") {
|
||
item.TempTextValue = v;
|
||
item.__changed = { "DisplayName": true };
|
||
}
|
||
});
|
||
ipt.on('change', function () {
|
||
var v = $(this).val().trim();
|
||
if (v && v != "") {
|
||
item.DisplayName = v;
|
||
item.TempTextValue = null;
|
||
item.__changed = null;
|
||
updateUser(item);
|
||
}
|
||
});
|
||
return ipt;
|
||
}
|
||
col.styleFilter = function () {
|
||
return { "width": "100%", 'padding': 0 };
|
||
}
|
||
col.onchanged = function (item) {
|
||
item.DisplayName = item.TempTextValue;
|
||
item.TempTextValue = null;
|
||
item.__changed = null;
|
||
updateUser(item);
|
||
}
|
||
}
|
||
else if (col.name === "TextAddress") {
|
||
col.allowHtml = true;
|
||
col.filterCustom = true;
|
||
col.filter = function (item) {
|
||
return $('<span class="margin-input-span status-cell"></span>').text(item.TextAddress);
|
||
};
|
||
col.editFilter = function (item) {
|
||
if (!item.IID) {
|
||
return $('<span class="margin-input-span status-cell"></span>').text(item.TextAddress);
|
||
}
|
||
var ipt = $('<input type="text" class="input-cell" maxlength="100"/>');
|
||
ipt.val(item.TextAddress);
|
||
ipt.on('input propertychange', function () {
|
||
var v = $(this).val().trim();
|
||
if (v == "" || isEmail(v)) {
|
||
item.TempTextValue = v;
|
||
item.__changed = { "TextAddress": true };
|
||
}
|
||
});
|
||
ipt.on('change', function () {
|
||
var v = $(this).val().trim();
|
||
if (v == "" || isEmail(v)) {
|
||
item.TextAddress = v;
|
||
item.TempTextValue = null;
|
||
item.__changed = null;
|
||
updateUser(item);
|
||
}
|
||
});
|
||
|
||
return ipt;
|
||
}
|
||
col.styleFilter = function () {
|
||
return { "width": "100%", 'padding': 0 };
|
||
}
|
||
col.onchanged = function (item) {
|
||
item.TextAddress = item.TempTextValue;
|
||
item.TempTextValue = null;
|
||
item.__changed = null;
|
||
updateUser(item);
|
||
}
|
||
}
|
||
else if (col.name === "Mobile") {
|
||
col.allowHtml = true;
|
||
col.filterCustom = true;
|
||
col.filter = function (item) {
|
||
return $('<span class="margin-input-span status-cell"></span>').text(item.MobilePhoneDisplayText);
|
||
};
|
||
col.editFilter = function (item) {
|
||
if (!item.IID) {
|
||
return $('<span class="margin-input-span status-cell"></span>').text(item.MobilePhoneDisplayText);
|
||
}
|
||
var ipt = $('<input type="text" class="input-cell" maxlength="50"/>');
|
||
ipt.val(item.MobilePhoneDisplayText);
|
||
ipt.on('input propertychange', function () {
|
||
var v = $(this).val().trim();
|
||
item.TempTextValue = v;
|
||
item.__changed = { "Mobile": true };
|
||
|
||
});
|
||
ipt.on('change', function () {
|
||
var v = $(this).val().trim();
|
||
item.Mobile = v;
|
||
item.MobilePhoneDisplayText = v;
|
||
item.TempTextValue = null;
|
||
item.__changed = null;
|
||
updateUser(item);
|
||
});
|
||
return ipt;
|
||
}
|
||
col.styleFilter = function () {
|
||
return { "width": "100%", 'padding': 0 };
|
||
}
|
||
col.onchanged = function (item) {
|
||
item.Mobile = item.TempTextValue;
|
||
item.MobilePhoneDisplayText = item.TempTextValue;
|
||
item.TempTextValue = null;
|
||
item.__changed = null;
|
||
updateUser(item);
|
||
}
|
||
}
|
||
else if (col.name === "BusinessPhone") {
|
||
col.allowHtml = true;
|
||
col.filterCustom = true;
|
||
col.filter = function (item) {
|
||
return $('<span class="margin-input-span status-cell"></span>').text(item.BusinessPhone);
|
||
};
|
||
col.editFilter = function (item) {
|
||
if (!item.IID) {
|
||
return $('<span class="margin-input-span status-cell"></span>').text(item.BusinessPhone);
|
||
}
|
||
var ipt = $('<input type="text" class="input-cell" maxlength="50"/>');
|
||
ipt.val(item.BusinessPhone);
|
||
ipt.on('input propertychange', function () {
|
||
var v = $(this).val().trim();
|
||
item.TempTextValue = v;
|
||
item.__changed = { "BusinessPhone": true };
|
||
});
|
||
ipt.on('change', function () {
|
||
var v = $(this).val().trim();
|
||
item.BusinessPhone = v;
|
||
item.TempTextValue = null;
|
||
item.__changed = null;
|
||
updateUser(item);
|
||
});
|
||
return ipt;
|
||
}
|
||
col.styleFilter = function () {
|
||
return { "width": "100%", 'padding': 0 };
|
||
}
|
||
col.onchanged = function (item) {
|
||
item.BusinessPhone = item.TempTextValue;
|
||
item.TempTextValue = null;
|
||
item.__changed = null;
|
||
updateUser(item);
|
||
}
|
||
}
|
||
else if (col.name === "FOB") {
|
||
col.allowHtml = true;
|
||
col.filterCustom = true;
|
||
col.filter = function (item) {
|
||
return $('<span class="margin-input-span status-cell"></span>').text(item.FOB);
|
||
};
|
||
col.editFilter = function (item) {
|
||
if (!item.IID) {
|
||
return $('<span class="margin-input-span status-cell"></span>').text(item.FOB);
|
||
}
|
||
var ipt = $('<input type="text" class="input-cell" maxlength="50"/>');
|
||
ipt.val(item.FOB);
|
||
ipt.on('input propertychange', function () {
|
||
var v = $(this).val().trim();
|
||
item.TempTextValue = v;
|
||
item.__changed = { "FOB": true };
|
||
});
|
||
ipt.on('change', function () {
|
||
var v = $(this).val().trim();
|
||
item.FOB = v;
|
||
item.TempTextValue = null;
|
||
item.__changed = null;
|
||
updateUser(item);
|
||
});
|
||
return ipt;
|
||
}
|
||
col.styleFilter = function () {
|
||
return { "width": "100%", 'padding': 0 };
|
||
}
|
||
col.onchanged = function (item) {
|
||
item.FOB = item.TempTextValue;
|
||
item.TempTextValue = null;
|
||
item.__changed = null;
|
||
updateUser(item);
|
||
}
|
||
}
|
||
if (col.name === "Active") {
|
||
col.allowHtml = true;
|
||
col.filterCustom = true;
|
||
col.filter = function (item) {
|
||
return $('<span class="margin-span"></span>').text(item.Active.DisplayValue);
|
||
};
|
||
col.editFilter = function (item) {
|
||
if (!item.IID)
|
||
return "";
|
||
|
||
var ipt = $('<input type="checkbox"/>').change(function () {
|
||
var checked = $(this).prop("checked");
|
||
item.Active.Value = checked;
|
||
item.Active.DisplayValue = checked ? 'Yes' : 'No';
|
||
updateUser(item);
|
||
});
|
||
ipt.prop('checked', item.Active.Value);
|
||
return ipt;
|
||
}
|
||
col.styleFilter = function () {
|
||
return { "width": "100%" };
|
||
}
|
||
}
|
||
else if (col.name === "IsUser") {
|
||
col.allowHtml = true;
|
||
col.filterCustom = true;
|
||
col.filter = function (item) {
|
||
return $('<span class="margin-span"></span>').text(item.IsUser.DisplayValue);
|
||
};
|
||
col.editFilter = function (item) {
|
||
if (!item.IID)
|
||
return "";
|
||
|
||
var ipt = $('<input type="checkbox"/>').change(function () {
|
||
var checked = $(this).prop("checked");
|
||
item.IsUser.Value = checked;
|
||
item.IsUser.DisplayValue = checked ? 'Yes' : 'No';
|
||
updateUser(item);
|
||
});
|
||
ipt.prop('checked', item.IsUser.Value);
|
||
return ipt;
|
||
}
|
||
col.styleFilter = function () {
|
||
return { "width": "100%" };
|
||
}
|
||
}
|
||
else if (col.name === "AssignedWorkOrders") {
|
||
col.allowHtml = true;
|
||
col.filterCustom = true;
|
||
col.filter = function (item) {
|
||
return $('<span class="margin-span"></span>').text(item.AssignedWorkOrders.DisplayValue);
|
||
};
|
||
col.editFilter = function (item) {
|
||
if (!item.IID)
|
||
return "";
|
||
|
||
var ipt = $('<input type="checkbox"/>').change(function () {
|
||
var checked = $(this).prop("checked");
|
||
item.AssignedWorkOrders.Value = checked;
|
||
item.AssignedWorkOrders.DisplayValue = checked ? 'Yes' : 'No';
|
||
updateUser(item);
|
||
});
|
||
ipt.prop('checked', item.AssignedWorkOrders.Value);
|
||
return ipt;
|
||
}
|
||
col.styleFilter = function () {
|
||
return { "width": "100%" };
|
||
}
|
||
}
|
||
else if (col.name === "EmailOptOut") {
|
||
col.allowHtml = true;
|
||
col.filterCustom = true;
|
||
col.filter = function (item) {
|
||
return $('<span class="margin-span"></span>').text(item.EmailOptOut.DisplayValue);
|
||
};
|
||
col.editFilter = function (item) {
|
||
if (!item.IID)
|
||
return "";
|
||
|
||
var ipt = $('<input type="checkbox"/>').change(function () {
|
||
var checked = $(this).prop("checked");
|
||
item.EmailOptOut.Value = checked;
|
||
item.EmailOptOut.DisplayValue = checked ? 'Yes' : 'No';
|
||
updateUser(item);
|
||
});
|
||
ipt.prop('checked', item.EmailOptOut.Value);
|
||
return ipt;
|
||
}
|
||
col.styleFilter = function () {
|
||
return { "width": "100%" };
|
||
}
|
||
}
|
||
else if (col.name === "UserType") {
|
||
col.allowHtml = true;
|
||
col.filterCustom = true;
|
||
col.filter = function (item) {
|
||
return $('<span class="margin-span"></span>').text(item.UserType.DisplayValue);
|
||
};
|
||
col.editFilter = function (item) {
|
||
if (!item.IID)
|
||
return $('<span class="margin-span"></span>').text(item.UserType.DisplayValue);
|
||
|
||
return $('<div class="dropdown"></div>').dropdown(usertypesource, {
|
||
search: false,
|
||
selected: item.UserType.Value
|
||
}).on('select', function (_e, it) {
|
||
item.UserType.Value = it.value;
|
||
item.UserType.DisplayValue = it.text;
|
||
updateUser(item);
|
||
});
|
||
}
|
||
col.styleFilter = function () {
|
||
return { "width": "100%", 'padding': 0 };
|
||
}
|
||
}
|
||
else if (col.name === "ContactTypeName") {
|
||
col.allowHtml = true;
|
||
col.filterCustom = true;
|
||
col.filter = function (item) {
|
||
return $('<span class="margin-span"></span>').text(item.ContactTypeName || '');
|
||
};
|
||
col.editFilter = function (item) {
|
||
if (!item.IID)
|
||
return $('<span class="margin-span"></span>').text(item.ContactTypeName || '');
|
||
|
||
return $('<div class="dropdown"></div>').dropdown(contacttypesource, {
|
||
search: false,
|
||
selected: item.ContactType
|
||
}).on('select', function (_e, it) {
|
||
item.ContactType = it.value;
|
||
item.ContactTypeName = it.text;
|
||
updateUser(item);
|
||
});
|
||
}
|
||
col.styleFilter = function () {
|
||
return { "width": "100%", 'padding': 0 };
|
||
}
|
||
}
|
||
else if (col.name === "ManagerName") {
|
||
col.allowHtml = true;
|
||
col.filterCustom = true;
|
||
col.filter = function (item) {
|
||
return $('<span class="margin-span"></span>').text(item.ManagerName || '');
|
||
};
|
||
col.editFilter = function (item) {
|
||
if (!item.IID)
|
||
return $('<span class="margin-span"></span>').text(item.ManagerName || '');
|
||
|
||
var source = [];
|
||
var selected;
|
||
if (item.Managers) {
|
||
for (var i = 0; i < item.Managers.length; i++) {
|
||
var u = item.Managers[i];
|
||
source.push(u);
|
||
if (item.ManagerIID.toLowerCase() == u.IID.toLowerCase())
|
||
selected = u.IID;
|
||
}
|
||
} else {
|
||
source.push({ IID: '', DisplayName: ' ' });
|
||
}
|
||
var selector = $('<div class="dropdown"></div>');
|
||
selector.dropdown(source, {
|
||
search: true,
|
||
textKey: 'DisplayName',
|
||
valueKey: 'IID',
|
||
selected: selected
|
||
}).on('select', function (_e, s) {
|
||
if (s) {
|
||
item.ManagerIID = s.IID;
|
||
item.ManagerName = s.DisplayName;
|
||
updateUser(item);
|
||
}
|
||
}).on('expand', function () {
|
||
if (!item.ManagerLoaded) {
|
||
item.ManagerLoaded = true;
|
||
_network.userquery("GetUsers", JSON.stringify([-1, ""]), function (data) {
|
||
if (data && data.length > 0) {
|
||
var source = [
|
||
{ IID: '', DisplayName: ' ' }
|
||
];
|
||
|
||
var sel = null;
|
||
var exists = false;
|
||
var selected;
|
||
if (item.Managers && item.Managers.length == 1)
|
||
sel = item.Managers[0];
|
||
else
|
||
exists = true;
|
||
|
||
for (var i = 0; i < data.length; i++) {
|
||
var u = data[i];
|
||
source.push(u);
|
||
if (item.ManagerIID.toUpperCase() == u.IID.toUpperCase())
|
||
selected = u.IID;
|
||
|
||
if (sel && sel.IID.toUpperCase() == u.IID.toUpperCase())
|
||
exists = true;
|
||
|
||
}
|
||
if (!exists) {
|
||
source.push(sel);
|
||
}
|
||
|
||
item.Managers = data;
|
||
|
||
var dropdown = selector.data('dropdown');
|
||
dropdown.setSource(source);
|
||
if (selected != null) {
|
||
dropdown.select(selected);
|
||
}
|
||
}
|
||
}, function () {
|
||
});
|
||
}
|
||
});
|
||
return selector;
|
||
}
|
||
col.styleFilter = function () {
|
||
return { "width": "100%", 'padding': 0 };
|
||
}
|
||
}
|
||
else if (col.name === "Notes") {
|
||
col.allowHtml = true;
|
||
col.filterCustom = true;
|
||
col.filter = function (item) {
|
||
return $('<div class="cell-flex">').append(
|
||
$('<span style="flex: 0 0 auto; width: 26px"></span>'),
|
||
$('<span class="cell-flex-memo"></span>').text(item.Notes || '')
|
||
);
|
||
};
|
||
col.editFilter = function (item) {
|
||
if (!item.IID)
|
||
return $('<div class="cell-flex">').append(
|
||
$('<span style="flex: 0 0 auto; width: 26px"></span>'),
|
||
$('<span class="cell-flex-memo"></span>').text(item.Notes || '')
|
||
);
|
||
|
||
var flex = $('<div class="cell-flex">');
|
||
var iconedit = $('<span class="spanbtn iconpen cell-flex-icon"></span>');
|
||
iconedit.click(function () {
|
||
onEditText(item, function () {
|
||
flex.children('.cell-flex-memo').text(item.Notes);
|
||
});
|
||
});
|
||
flex.append(
|
||
iconedit,
|
||
$('<span class="cell-flex-memo"></span>').text(item.Notes)
|
||
);
|
||
return flex;
|
||
}
|
||
}
|
||
else if (col.name === "Edit") {
|
||
col.isurl = true;
|
||
col.text = "\uf044";
|
||
col.sortable = false;
|
||
col.events = {
|
||
onclick: function () {
|
||
OnEdit();
|
||
}
|
||
};
|
||
col.classFilter = function (e) {
|
||
return "icon-col";
|
||
}
|
||
col.attrs = { 'title': GetTextByKey("P_UM_EDIT", 'Edit') };
|
||
}
|
||
else if (col.name === "Copy") {
|
||
col.isurl = true;
|
||
col.text = "\uf0c5";
|
||
col.sortable = false;
|
||
col.events = {
|
||
onclick: function () {
|
||
OnCopy(this);
|
||
}
|
||
};
|
||
col.classFilter = function (e) {
|
||
return "icon-col";
|
||
}
|
||
col.attrs = { 'title': 'Copy' };
|
||
}
|
||
else if (col.name === "Delete") {
|
||
col.isurl = true;
|
||
col.text = "\uf00d";
|
||
col.sortable = false;
|
||
col.events = {
|
||
onclick: function () {
|
||
OnDelete(this);
|
||
}
|
||
};
|
||
col.classFilter = function (e) {
|
||
return "icon-col";
|
||
};
|
||
col.styleFilter = function (e) {
|
||
return {
|
||
display: isMyself(e.IID) ? 'none' : ''
|
||
};
|
||
};
|
||
col.attrs = { 'title': GetTextByKey("P_UM_DELETE", 'Delete') };
|
||
}
|
||
else if (col.name === "AssetAssignment") {
|
||
col.visible = !IsDealer;
|
||
col.isurl = true;
|
||
col.text = "\uf63c";
|
||
col.sortable = false;
|
||
col.events = {
|
||
onclick: function () {
|
||
OnManageMachine(this);
|
||
}
|
||
};
|
||
col.classFilter = function (e) {
|
||
return "icon-col";
|
||
};
|
||
col.attrs = { 'title': GetTextByKey("P_UM_ASSETSASSIGNMENT", 'Assets Assignment') };
|
||
}
|
||
else if (col.name === "AssetGroupAssignment") {
|
||
col.visible = !IsDealer;
|
||
col.isurl = true;
|
||
col.text = "\uf4dc";
|
||
col.sortable = false;
|
||
col.events = {
|
||
onclick: function () {
|
||
OnManageMachineGroup(this);
|
||
}
|
||
};
|
||
col.classFilter = function (e) {
|
||
return "icon-col";
|
||
};
|
||
col.attrs = { 'title': GetTextByKey("P_UM_ASSETGROUPSASSIGNMENT", 'Asset Groups Assignment') };
|
||
}
|
||
else if (col.name === "AssetTypeAssignment") {
|
||
col.visible = !IsDealer;
|
||
col.isurl = true;
|
||
col.text = "\uf00a";
|
||
col.sortable = false;
|
||
col.events = {
|
||
onclick: function () {
|
||
OnManageAssetType(this);
|
||
}
|
||
};
|
||
col.classFilter = function (e) {
|
||
return "icon-col";
|
||
};
|
||
col.attrs = { 'title': GetTextByKey("P_UM_ASSETTYPEASSIGNMENT", 'Asset Types Assignment') };
|
||
}
|
||
else if (col.name === "JobsiteAssignment") {
|
||
col.visible = !IsDealer;
|
||
col.isurl = true;
|
||
col.text = "\uf312";
|
||
col.sortable = false;
|
||
col.events = {
|
||
onclick: function () {
|
||
OnManageJobsite(this);
|
||
}
|
||
};
|
||
col.classFilter = function (e) {
|
||
return "icon-col";
|
||
};
|
||
col.attrs = { 'title': GetTextByKey("P_UM_JOBSITESASSIGNMENT", 'Jobsites Assignment') };
|
||
}
|
||
else if (col.name === "ResetPassword") {
|
||
col.isurl = true;
|
||
col.text = "\uf084";
|
||
col.sortable = false;
|
||
col.events = {
|
||
onclick: function () {
|
||
OnResetPassword(this);
|
||
}
|
||
};
|
||
col.classFilter = function (e) {
|
||
return "icon-col";
|
||
};
|
||
col.styleFilter = function (e) {
|
||
return {
|
||
display: (!e.Active || isMyself(e.IID) || !e.IsUser.Value) ? 'none' : ''
|
||
};
|
||
};
|
||
col.attrs = { 'title': GetTextByKey("P_UM_RESETPASSWORD", 'Reset Password') };
|
||
}
|
||
columns.push(col);
|
||
}
|
||
grid_dt.canMultiSelect = false;
|
||
//grid_dt.columns = columns;
|
||
//grid_dt.init();
|
||
grid_dt.allcolumns = columns;
|
||
getGridLayout(gridLayoutID, grid_dt, OnRefresh);
|
||
//grid_dt.rowdblclick = OnEdit;
|
||
|
||
grid_dt.celldblclick = function (rowindex, colindex) {
|
||
if (colindex >= 0) {
|
||
var col = grid_dt.columns[colindex];
|
||
//if (!col.allowHtml)
|
||
// OnEdit();
|
||
if (col.name != "UserType" && col.name != "ManagerName" && col.name != "ContactTypeName") {
|
||
OnEdit();
|
||
}
|
||
}
|
||
};
|
||
|
||
grid_dt.selectedrowchanged = function (rowindex) {
|
||
var rowdata = grid_dt.source[rowindex];
|
||
if (rowdata) {
|
||
uiid = rowdata.Values.IID;
|
||
}
|
||
}
|
||
}
|
||
|
||
function onEditText(user, next) {
|
||
showmaskbg(true);
|
||
$('#dialog_edittext .dialog-title span.title').text(GetTextByKey("P_WO_EDITNOTES", 'Edit Notes'));
|
||
$('#dialog_text').val(user.Notes);
|
||
$('#dialog_edittext').data('user', user).data('next', next)
|
||
.css({
|
||
'top': (document.documentElement.clientHeight - $('#dialog_edittext').height()) / 3,
|
||
'left': (document.documentElement.clientWidth - $('#dialog_edittext').width()) / 2
|
||
}).showDialogfixed();
|
||
}
|
||
|
||
function SaveText() {
|
||
var text = $('#dialog_text').val();
|
||
var user = $('#dialog_edittext').data("user");
|
||
var next = $('#dialog_edittext').data("next");
|
||
user.Notes = text;
|
||
if (next)
|
||
next();
|
||
|
||
$('#dialog_edittext').hideDialog();
|
||
showmaskbg(false);
|
||
updateUser(user);
|
||
}
|
||
|
||
|
||
function updateUser(user) {
|
||
var item = {
|
||
'IID': user.IID,
|
||
'ID': user.ID,
|
||
'DisplayName': user.DisplayName,
|
||
'UserType': user.UserType.Value,
|
||
'Active': user.Active.Value,
|
||
'IsUser': user.IsUser.Value,
|
||
'AssignedWorkOrders': user.AssignedWorkOrders.Value,
|
||
'TextAddress': user.TextAddress,
|
||
'Mobile': user.Mobile,
|
||
'BusinessPhone': user.BusinessPhone,
|
||
'ContactType': user.ContactType,
|
||
'FOB': user.FOB,
|
||
'ManagerIID': user.ManagerIID,
|
||
'EmailOptOut': user.EmailOptOut.Value,
|
||
'Notes': user.Notes
|
||
};
|
||
var alerttitle = GetTextByKey("P_UM_XXXX", "Save user");
|
||
if (!item.DisplayName || item.DisplayName.trim().length == 0) {
|
||
showAlert(GetTextByKey("P_UM_USERNAMECANNOTBEEMPTY", 'User name cannot be empty.'), alerttitle);
|
||
return;
|
||
}
|
||
if (item.TextAddress !== "" && !isEmail(item.TextAddress)) {
|
||
showAlert(GetTextByKey("P_UM_TEXTADDRESSISNOTAVALID", 'Text Address is not a valid.'), alerttitle);
|
||
return;
|
||
}
|
||
var param = htmlencode(JSON.stringify(item));
|
||
_network.userquery('UpdateUser', param, function (data) {
|
||
if (typeof (data) === "string") {
|
||
showAlert(data, alerttitle);
|
||
return;
|
||
}
|
||
|
||
//grid_dt.refresh();
|
||
}, function (err) {
|
||
});
|
||
}
|
||
|
||
$(function () {
|
||
setPageTitle(GetTextByKey("P_USERMANAGEMENT", 'User Management'), true);
|
||
$('.iconlayout').on('click', function (ev) {
|
||
CreateLayoutMenus(ev.target, gridLayoutID, grid_dt);
|
||
return false;
|
||
});
|
||
InitGridData();
|
||
|
||
$('#dialog_machinegroup').prop('iframe', true).dialog(function () {
|
||
showmaskbg(false);
|
||
});
|
||
|
||
$('#dialog_managemahchine').dialog(function () {
|
||
showmaskbg(false);
|
||
});
|
||
|
||
$('#dialog_managejobsite').dialog(function () {
|
||
showmaskbg(false);
|
||
});
|
||
|
||
$('#dialog_manageassettype').dialog(function () {
|
||
showmaskbg(false);
|
||
});
|
||
|
||
$('#dialog_password').dialog(function () {
|
||
showmaskbg(false);
|
||
});
|
||
|
||
$('#dialog_user_randompass').change(function (e) {
|
||
$('#dialog_user_password').prop('disabled', $(this).prop('checked'));
|
||
$('#dialog_user_password1').prop('disabled', $(this).prop('checked'));
|
||
});
|
||
|
||
$('#dialog_user_randompass1').change(function (e) {
|
||
$('#dialog_user_password2').prop('disabled', $(this).prop('checked'));
|
||
$('#dialog_user_password3').prop('disabled', $(this).prop('checked'));
|
||
});
|
||
|
||
$('#dialog_import').dialog(function () {
|
||
showmaskbg(false);
|
||
});
|
||
|
||
$('#dialog_edittext').dialog(function () {
|
||
showmaskbg(false);
|
||
});
|
||
|
||
$('#dialog_copy_user').dialog(function () {
|
||
$('#dialog_user_id').val('');
|
||
$('#dialog_user_name').val('');
|
||
$('#dialog_user_randompass1').prop('checked', false);
|
||
$('#dialog_user_password2').prop('disabled', false);
|
||
$('#dialog_user_password3').prop('disabled', false);
|
||
$('#dialog_user_password2').val('');
|
||
$('#dialog_user_password3').val('');
|
||
$('#dialog_copyuser').dropdownVal('-1');
|
||
$('#dialog_user_mobile').val('');
|
||
$('#dialog_user_fob').val('');
|
||
showmaskbg(false);
|
||
});
|
||
|
||
$('#searchinputtxt').keydown(searchEnter);
|
||
$(window).resize(function () {
|
||
$("#userlist").css("height", $(window).height() - $("#userlist").offset().top - 4);
|
||
grid_dt && grid_dt.resize();
|
||
}).resize();
|
||
|
||
$('#dialog_copyuser').dropdown([{ ID: '', Name: ' ' }], {
|
||
search: true,
|
||
valueKey: 'ID',
|
||
textKey: 'Name'
|
||
});
|
||
if (!canExport) {
|
||
$('#spExport').hide();
|
||
}
|
||
});
|
||
|
||
function searchEnter(e) {
|
||
if (e.keyCode == 13 || e.keyCode == 9) {
|
||
OnRefresh();
|
||
}
|
||
}
|
||
|
||
function OnExport() {
|
||
var searchtxt = "";
|
||
searchtxt = htmlencode($.trim($('#searchinputtxt').val()));
|
||
|
||
var layout = getLayoutOnGrid(grid_dt);
|
||
var ps = ["users", searchtxt, JSON.stringify(layout)];
|
||
|
||
var data = new FormData();
|
||
data.append('type', 'set');
|
||
data.append('ClientData', JSON.stringify(ps));
|
||
$.ajax({
|
||
url: "../ExportToFile.aspx",
|
||
type: 'POST',
|
||
dataType: 'json',
|
||
processData: false,
|
||
contentType: false,
|
||
data: data,
|
||
success: function (data) {
|
||
if (data && data != "")
|
||
window.open("../ExportToFile.aspx?type=exp&key=" + data);
|
||
},
|
||
error: function (err) {
|
||
}
|
||
});
|
||
|
||
//window.open("../ExportToFile.aspx?type=users&t=" + searchtxt);
|
||
}
|
||
|
||
var columnsdata = [
|
||
{ Id: "ID", Name: GetTextByKey("P_UM_USERIDOREMAIL", "User ID/Email") },
|
||
{ Id: "DisplayName", Name: GetTextByKey("P_UM_USERNAME", "User Name") },
|
||
{ Id: "Password", Name: GetTextByKey("P_UM_PASSWORD", "Password") },
|
||
{ Id: "UserType", Name: GetTextByKey("P_UM_USERTYPE", "User Type") },
|
||
{ Id: "TextAddress", Name: GetTextByKey("P_UM_TEXTADDRESS", "Text Address") },
|
||
{ Id: "Mobile", Name: GetTextByKey("P_UM_MOBILE", "Mobile") },
|
||
{ Id: "BusinessPhone", Name: GetTextByKey("P_UM_BUSINESSPHONE", "Business Phone") },
|
||
{ Id: "IsUser", Name: GetTextByKey("P_UM_ISUSER", "Is User") },
|
||
{ Id: "WebBrowserAccess", Name: GetTextByKey("P_UM_WEBBROWSERACCESS", "Web Browser Access") },
|
||
{ Id: "Inspect", Name: GetTextByKey("P_UM_INSPECTACCESS", "Inspect Access") },
|
||
{ Id: "FleetApp", Name: GetTextByKey("P_UM_MOBILEAPPACCESS", "Mobile App Access") },
|
||
{ Id: "MobileApp", Name: GetTextByKey("P_UM_MOBILEAPPBARCODESCANNER", "Mobile App: Barcode Scanner") },
|
||
{ Id: "ContactType", Name: GetTextByKey("P_UM_CONTACTTYPE", "Contact Type") },
|
||
{ Id: "AssignedWorkOrders", Name: GetTextByKey("P_UM_ASSIGNEDWORKORDERS", "Assigned Work Orders") },
|
||
{ Id: "OptOutOfEmail", Name: GetTextByKey("P_UM_OPTOUTOFFICOMMUNICATIONS", "Opt Out of FI Communications?") },
|
||
{ Id: "InspectEmail", Name: GetTextByKey("P_UM_INSPECTEMAIL", "Inspect Email") },
|
||
{ Id: "TeamIntelligenceUser", Name: GetTextByKey("P_UM_TEAMINTELLIGENCEUSER", "Team Intelligence User") },
|
||
{ Id: "FOB", Name: GetTextByKey("P_UM_EMPLOYEEIDORFOB", "Employee ID or FOB") },
|
||
{ Id: "LandingPage", Name: GetTextByKey("P_UM_LANDINGPAGE", "Landing Page") },
|
||
{ Id: "Department", Name: GetTextByKey("P_UM_DEPARTMENT", "Department") },
|
||
{ Id: "Location", Name: GetTextByKey("P_UM_LOCATION", "Location") },
|
||
{ Id: "UserGroup", Name: GetTextByKey("P_UM_USERSGROUP", "User's Group") },
|
||
{ Id: "WorkOrderFollower", Name: GetTextByKey("P_UM_XXX", "Work Order Follower") },
|
||
{ Id: "PreferredLanguage", Name: GetTextByKey("P_UM_XXX", "Languages") },
|
||
{ Id: "TimeZone", Name: GetTextByKey("P_UM_XXX", "Time Zone") },
|
||
{ Id: "ExcelExports", Name: GetTextByKey("P_UM_XXX", "Excel Exports") },
|
||
//{ Id: "100", Name: "Jobsites", Type: 1 },
|
||
//{ Id: "110", Name: "Auto-Creation Config", Type: 1 },
|
||
//{ Id: "120", Name: "Jobsite Requirements", Type: 1 },
|
||
//{ Id: "130", Name: "Dispatch Requests", Type: 1 },
|
||
//{ Id: "140", Name: "Scheduler", Type: 1 },
|
||
//{ Id: "200", Name: "Alerts Management", Type: 1 },
|
||
//{ Id: "210", Name: "Work Order", Type: 1 },
|
||
//{ Id: "253", Name: "Open WO:restrict work order view", Type: 1 },
|
||
//{ Id: "254", Name: "Closed WO:restrict work order view", Type: 1 },
|
||
//{ Id: "252", Name: "Delete Attachments from Work Orders", Type: 1 },
|
||
//{ Id: "255", Name: "Closed Work Orders", Type: 1 },
|
||
//{ Id: "256", Name: "Delete and Restore Work Orders", Type: 1 },
|
||
//{ Id: "239", Name: "Reopen Work Orders", Type: 1 },
|
||
//{ Id: "220", Name: "Preventative Maintenance Plan", Type: 1 },
|
||
//{ Id: "240", Name: "Maintenance Record", Type: 1 },
|
||
//{ Id: "230", Name: "Fuel Records", Type: 1 },
|
||
//{ Id: "235", Name: "Customer Record", Type: 1 },
|
||
//{ Id: "237", Name: "Work Order Configuration", Type: 1 },
|
||
//{ Id: "245", Name: "Communicate with Customer", Type: 1 },
|
||
//{ Id: "248", Name: "Work Order Surveys", Type: 1 },
|
||
//{ Id: "249", Name: "Work Order Generator", Type: 1 },
|
||
//{ Id: "250", Name: "Work Order History", Type: 1 },
|
||
//{ Id: "300", Name: "FilterQ", Type: 1 },
|
||
//{ Id: "600", Name: "Manage Assets", Type: 1 },
|
||
//{ Id: "601", Name: "Asset Pairing", Type: 1 },
|
||
//{ Id: "602", Name: "Asset Attribute Adjustments", Type: 1 },
|
||
//{ Id: "800", Name: "M3", Type: 1 },
|
||
//{ Id: "900", Name: "Over/Under Trucking Alerts", Type: 1 },
|
||
//{ Id: "1000", Name: "Manage Harsh Driving", Type: 1 },
|
||
//{ Id: "1100", Name: "Manage Templates", Type: 1 },
|
||
//{ Id: "1101", Name: "Inspection Reports", Type: 1 },
|
||
//{ Id: "1110", Name: "(Re)Assign Work Orders", Type: 1 },
|
||
//{ Id: "10", Name: "Estimate Approval/Rejection", Type: 2 },
|
||
//{ Id: "20", Name: "Customer Communication", Type: 2 },
|
||
//{ Id: "30", Name: "Internal Messages", Type: 2 },
|
||
//{ Id: "40", Name: "Invoice Paid", Type: 2 },
|
||
//{ Id: "50", Name: "Inspection Completed", Type: 2 },
|
||
//{ Id: "60", Name: "Status Update", Type: 2 },
|
||
//{ Id: "70", Name: "Attachment Added", Type: 2 },
|
||
//{ Id: "80", Name: "Attachment Deleted", Type: 2 }
|
||
];
|
||
|
||
var isloadimportuserpermission = false;
|
||
function getImportUserPermissionItems(excelcolumns) {
|
||
if (isloadimportuserpermission)
|
||
CreateImportColumns(excelcolumns);
|
||
else {
|
||
_network.userquery("GetImportUserPermissionItems", "", function (data) {
|
||
isloadimportuserpermission = true;
|
||
|
||
if (data && data.length > 0) {
|
||
for (var i = 0; i < data.length; i++) {
|
||
columnsdata.push(data[i]);
|
||
}
|
||
}
|
||
CreateImportColumns(excelcolumns);
|
||
}, function () {
|
||
});
|
||
}
|
||
}
|
||
|
||
function OnImportChange(index) {
|
||
if (parseInt(index) === 0) {
|
||
$('#tb_import').show();
|
||
$('#tb_import_security').hide();
|
||
$('#tb_import_smsmsg').hide();
|
||
$('#a_importusers').hide();
|
||
$('#a_importsecurity').text('Map Additional Fields').show();
|
||
$('#a_importsmsmsg').hide();
|
||
}
|
||
else if (parseInt(index) === 1) {
|
||
$('#tb_import').hide();
|
||
$('#tb_import_security').show();
|
||
$('#tb_import_smsmsg').hide();
|
||
$('#a_importusers').show();
|
||
$('#a_importsecurity').hide();
|
||
$('#a_importsmsmsg').show();
|
||
}
|
||
else if (parseInt(index) === 2) {
|
||
$('#tb_import').hide();
|
||
$('#tb_import_security').hide();
|
||
$('#tb_import_smsmsg').show();
|
||
$('#a_importusers').show();
|
||
$('#a_importsecurity').text('Return to Security').show();
|
||
$('#a_importsmsmsg').hide();
|
||
}
|
||
|
||
if (!WorkOrderLisence || !CustomerRecordLisence) {
|
||
$('#a_importsmsmsg').hide();
|
||
$('#tb_import_smsmsg').hide();
|
||
}
|
||
}
|
||
|
||
function CreateImportColumns(excelcolumns) {
|
||
var tb = $('#tb_import');
|
||
tb.empty();
|
||
var tb_security = $('#tb_import_security');
|
||
tb_security.empty();
|
||
var tb_smsmsg = $('#tb_import_smsmsg');
|
||
tb_smsmsg.empty();
|
||
$('#tb_import_security').append('<tr style="line-height:24px;background:rgb(232, 232, 232);"><td colspan="2" ><div>Security</div></td></tr>');
|
||
$('#tb_import_smsmsg').append('<tr style="line-height:24px;background:rgb(232, 232, 232);"><td colspan="2" ><div>SMS Messages</div></td></tr>');
|
||
//var columnsdata = getcolumnsdata();
|
||
for (var i = 0; i < columnsdata.length; i++) {
|
||
var col = columnsdata[i];
|
||
var tr = $('<tr></tr>');
|
||
if (col.Type == 1) {
|
||
tb_security.append(tr);
|
||
}
|
||
else if (col.Type == 2) {
|
||
tb_smsmsg.append(tr);
|
||
}
|
||
else {
|
||
tb.append(tr);
|
||
}
|
||
var td = $('<td class="label" style="width:195px;">' + col.Name + '</td>');
|
||
tr.append(td);
|
||
td = $('<td></td>');
|
||
tr.append(td);
|
||
var sel = CreateSelect(excelcolumns, col.Id, col.Name);
|
||
td.append(sel);
|
||
}
|
||
}
|
||
|
||
function CreateSelect(excelcolumns, colid, colname) {
|
||
var sel = $('<select style="width:180px;" name="sel_import"></select>').data('id', colid);
|
||
sel.append('<option></option>');
|
||
if (excelcolumns && excelcolumns.length > 0) {
|
||
for (var i = 0; i < excelcolumns.length; i++) {
|
||
var op = $('<option></option>').text(excelcolumns[i]).val(excelcolumns[i]);
|
||
sel.append(op);
|
||
}
|
||
sel.val(colname);
|
||
}
|
||
return sel;
|
||
}
|
||
|
||
function getcolumnsdata() {//Type:0.User Fields; 1.Security; 2.SMS Messages
|
||
var columnsdata = [
|
||
{ Id: "ID", Name: GetTextByKey("P_UM_USERIDOREMAIL", "User ID/Email") },
|
||
{ Id: "DisplayName", Name: GetTextByKey("P_UM_USERNAME", "User Name") },
|
||
{ Id: "Password", Name: GetTextByKey("P_UM_PASSWORD", "Password") },
|
||
{ Id: "UserType", Name: GetTextByKey("P_UM_USERTYPE", "User Type") },
|
||
{ Id: "TextAddress", Name: GetTextByKey("P_UM_TEXTADDRESS", "Text Address") },
|
||
{ Id: "Mobile", Name: GetTextByKey("P_UM_MOBILE", "Mobile") },
|
||
{ Id: "BusinessPhone", Name: GetTextByKey("P_UM_BUSINESSPHONE", "Business Phone") },
|
||
{ Id: "IsUser", Name: GetTextByKey("P_UM_ISUSER", "Is User") },
|
||
{ Id: "WebBrowserAccess", Name: GetTextByKey("P_UM_WEBBROWSERACCESS", "Web Browser Access") },
|
||
{ Id: "Inspect", Name: GetTextByKey("P_UM_INSPECTACCESS", "Inspect Access") },
|
||
{ Id: "FleetApp", Name: GetTextByKey("P_UM_MOBILEAPPACCESS", "Mobile App Access") },
|
||
{ Id: "MobileApp", Name: GetTextByKey("P_UM_MOBILEAPPBARCODESCANNER", "Mobile App: Barcode Scanner") },
|
||
{ Id: "ContactType", Name: GetTextByKey("P_UM_CONTACTTYPE", "Contact Type") },
|
||
{ Id: "AssignedWorkOrders", Name: GetTextByKey("P_UM_ASSIGNEDWORKORDERS", "Assigned Work Orders") },
|
||
{ Id: "OptOutOfEmail", Name: GetTextByKey("P_UM_OPTOUTOFFICOMMUNICATIONS", "Opt Out of FI Communications?") },
|
||
{ Id: "InspectEmail", Name: GetTextByKey("P_UM_INSPECTEMAIL", "Inspect Email") },
|
||
{ Id: "TeamIntelligenceUser", Name: GetTextByKey("P_UM_TEAMINTELLIGENCEUSER", "Team Intelligence User") },
|
||
{ Id: "FOB", Name: GetTextByKey("P_UM_EMPLOYEEIDORFOB", "Employee ID or FOB") },
|
||
{ Id: "LandingPage", Name: GetTextByKey("P_UM_LANDINGPAGE", "Landing Page") },
|
||
{ Id: "Department", Name: GetTextByKey("P_UM_DEPARTMENT", "Department") },
|
||
{ Id: "Location", Name: GetTextByKey("P_UM_LOCATION", "Location") },
|
||
{ Id: "UserGroup", Name: GetTextByKey("P_UM_USERSGROUP", "User's Group") },
|
||
{ Id: "WorkOrderFollower", Name: GetTextByKey("P_UM_XXX", "Work Order Follower") },
|
||
{ Id: "PreferredLanguage", Name: GetTextByKey("P_UM_XXX", "Languages") },
|
||
{ Id: "TimeZone", Name: GetTextByKey("P_UM_XXX", "Time Zone") },
|
||
{ Id: "ExcelExports", Name: GetTextByKey("P_UM_XXX", "Excel Exports") },
|
||
//{ Id: "100", Name: "Jobsites", Type: 1 },
|
||
//{ Id: "110", Name: "Auto-Creation Config", Type: 1 },
|
||
//{ Id: "120", Name: "Jobsite Requirements", Type: 1 },
|
||
//{ Id: "130", Name: "Dispatch Requests", Type: 1 },
|
||
//{ Id: "140", Name: "Scheduler", Type: 1 },
|
||
//{ Id: "200", Name: "Alerts Management", Type: 1 },
|
||
//{ Id: "210", Name: "Work Order", Type: 1 },
|
||
//{ Id: "253", Name: "Open WO:restrict work order view", Type: 1 },
|
||
//{ Id: "254", Name: "Closed WO:restrict work order view", Type: 1 },
|
||
//{ Id: "252", Name: "Delete Attachments from Work Orders", Type: 1 },
|
||
//{ Id: "255", Name: "Closed Work Orders", Type: 1 },
|
||
//{ Id: "256", Name: "Delete and Restore Work Orders", Type: 1 },
|
||
//{ Id: "239", Name: "Reopen Work Orders", Type: 1 },
|
||
//{ Id: "220", Name: "Preventative Maintenance Plan", Type: 1 },
|
||
//{ Id: "240", Name: "Maintenance Record", Type: 1 },
|
||
//{ Id: "230", Name: "Fuel Records", Type: 1 },
|
||
//{ Id: "235", Name: "Customer Record", Type: 1 },
|
||
//{ Id: "237", Name: "Work Order Configuration", Type: 1 },
|
||
//{ Id: "245", Name: "Communicate with Customer", Type: 1 },
|
||
//{ Id: "248", Name: "Work Order Surveys", Type: 1 },
|
||
//{ Id: "249", Name: "Work Order Generator", Type: 1 },
|
||
//{ Id: "250", Name: "Work Order History", Type: 1 },
|
||
//{ Id: "300", Name: "FilterQ", Type: 1 },
|
||
//{ Id: "600", Name: "Manage Assets", Type: 1 },
|
||
//{ Id: "601", Name: "Asset Pairing", Type: 1 },
|
||
//{ Id: "602", Name: "Asset Attribute Adjustments", Type: 1 },
|
||
//{ Id: "800", Name: "M3", Type: 1 },
|
||
//{ Id: "900", Name: "Over/Under Trucking Alerts", Type: 1 },
|
||
//{ Id: "1000", Name: "Manage Harsh Driving", Type: 1 },
|
||
//{ Id: "1100", Name: "Manage Templates", Type: 1 },
|
||
//{ Id: "1101", Name: "Inspection Reports", Type: 1 },
|
||
//{ Id: "1110", Name: "(Re)Assign Work Orders", Type: 1 },
|
||
//{ Id: "10", Name: "Estimate Approval/Rejection", Type: 2 },
|
||
//{ Id: "20", Name: "Customer Communication", Type: 2 },
|
||
//{ Id: "30", Name: "Internal Messages", Type: 2 },
|
||
//{ Id: "40", Name: "Invoice Paid", Type: 2 },
|
||
//{ Id: "50", Name: "Inspection Completed", Type: 2 },
|
||
//{ Id: "60", Name: "Status Update", Type: 2 },
|
||
//{ Id: "70", Name: "Attachment Added", Type: 2 },
|
||
//{ Id: "80", Name: "Attachment Deleted", Type: 2 }
|
||
];
|
||
|
||
return columnsdata;
|
||
}
|
||
var importing = false;
|
||
function OnImportUsers() {
|
||
if (!fildata)
|
||
return;
|
||
|
||
if (importing)
|
||
return;
|
||
|
||
importing = true;
|
||
|
||
var item = [];
|
||
var sels = $("select[name='sel_import']");
|
||
for (var i = 0; i < sels.length; i++) {
|
||
var sel = sels[i];
|
||
var kv = { Key: $(sel).data('id'), Value: $(sel).val() };
|
||
item.push(kv);
|
||
}
|
||
var param = JSON.stringify(item);
|
||
param = htmlencode(param);
|
||
var formData = new FormData();
|
||
formData.append("iconFile", fildata);
|
||
formData.append("MethodName", "ImportUsers");
|
||
formData.append("ClientData", param);
|
||
showloading(true);
|
||
$.ajax({
|
||
url: 'UserManage.aspx',
|
||
type: 'POST',
|
||
dataType: 'json',
|
||
processData: false,
|
||
contentType: false,
|
||
data: formData,
|
||
async: true,
|
||
success: function (data) {
|
||
importing = false;
|
||
if (typeof (data) === "string") {
|
||
showAlert(data, GetTextByKey("P_JS_IMPORT", 'Import'));
|
||
} else {
|
||
showAlert(data + GetTextByKey("P_UM_USERSIMPORTEDSUCCESSFULLY", ' user(s) imported successfully.'), GetTextByKey("P_UM_IMPORT", 'Import Users'));
|
||
$('#dialog_import').hideDialog();
|
||
if (data > 0)
|
||
OnRefresh();
|
||
}
|
||
showloading(false);
|
||
},
|
||
error: function (err) {
|
||
importing = false;
|
||
showloading(false);
|
||
showAlert(err.statusText, GetTextByKey("P_JS_IMPORT", 'Import'));
|
||
}
|
||
});
|
||
|
||
}
|
||
|
||
var fildata;
|
||
function OnImport() {
|
||
OnImportChange(0);
|
||
var file = $('<input type="file" style="display: none;" accept=".xlsx" />');
|
||
file.change(function () {
|
||
fildata = this.files[0];
|
||
var formData = new FormData();
|
||
formData.append("iconFile", fildata);
|
||
formData.append("MethodName", "GetImportUserColumns");
|
||
formData.append("ClientData", '');
|
||
showloading(true);
|
||
$.ajax({
|
||
url: 'UserManage.aspx',
|
||
type: 'POST',
|
||
dataType: 'json',
|
||
processData: false,
|
||
contentType: false,
|
||
data: formData,
|
||
async: true,
|
||
success: function (data) {
|
||
showloading(false);
|
||
if (typeof (data) === "string") {
|
||
showAlert(data, GetTextByKey("P_JS_IMPORT", 'Import'));
|
||
} else {
|
||
getImportUserPermissionItems(data);
|
||
//CreateImportColumns(data);
|
||
|
||
$('#dialog_import')
|
||
.attr('act', 'add')
|
||
.css({
|
||
'top': (document.documentElement.clientHeight - $('#dialog_import').height()) / 3,
|
||
'left': (document.documentElement.clientWidth - $('#dialog_import').width()) / 2
|
||
})
|
||
.showDialogfixed();
|
||
}
|
||
},
|
||
error: function (err) {
|
||
showloading(false);
|
||
showAlert(err.statusText, GetTextByKey("P_JS_IMPORT", 'Import'));
|
||
}
|
||
});
|
||
}).click();
|
||
}
|
||
|
||
function OnCopy(v) {
|
||
if (v) {
|
||
isSelect = true;
|
||
copyuseriid = v.IID;
|
||
showmaskbg(true);
|
||
$('#tr_copyuser').hide();
|
||
$('#dialog_copy_user')
|
||
.css({
|
||
'top': (document.documentElement.clientHeight - $('#dialog_copy_user').height()) / 3,
|
||
'left': (document.documentElement.clientWidth - $('#dialog_copy_user').width()) / 2
|
||
})
|
||
.showDialogfixed();
|
||
}
|
||
else {
|
||
isSelect = false;
|
||
showmaskbg(true);
|
||
$('#tr_copyuser').show();
|
||
var source = [];
|
||
if (isalluser) {
|
||
if (users != null && users.length > 0) {
|
||
for (var i = 0; i < users.length; i++) {
|
||
var u = { ID: users[i].IID, Name: users[i].ID };
|
||
source.push(u);
|
||
}
|
||
}
|
||
$('#dialog_copyuser').dropdownSource(source);
|
||
$('#dialog_copy_user')
|
||
.css({
|
||
'top': (document.documentElement.clientHeight - $('#dialog_copy_user').height()) / 3,
|
||
'left': (document.documentElement.clientWidth - $('#dialog_copy_user').width()) / 2
|
||
})
|
||
.showDialogfixed();
|
||
}
|
||
else {
|
||
_network.userquery('GetUsers', JSON.stringify([-1, ""]), function (data) {
|
||
var allusers = data;
|
||
if (allusers != null && allusers.length > 0) {
|
||
for (var i = 0; i < allusers.length; i++) {
|
||
var u = { ID: allusers[i].IID, Name: allusers[i].ID };
|
||
source.push(u);
|
||
}
|
||
}
|
||
$('#dialog_copyuser').dropdownSource(source);
|
||
$('#dialog_copy_user')
|
||
.css({
|
||
'top': (document.documentElement.clientHeight - $('#dialog_copy_user').height()) / 3,
|
||
'left': (document.documentElement.clientWidth - $('#dialog_copy_user').width()) / 2
|
||
})
|
||
.showDialogfixed();
|
||
}, function (err) {
|
||
$('#dialog_copyuser').dropdownSource([]);
|
||
});
|
||
}
|
||
|
||
}
|
||
}
|
||
var isalluser = false;
|
||
var isSelect = false;
|
||
var copyuseriid = '';
|
||
var newuseriid = '';
|
||
var incopy = false;
|
||
function OnCopyUser() {
|
||
if (incopy) {
|
||
return;
|
||
}
|
||
incopy = true;
|
||
var userID = $('#dialog_user_id').val();
|
||
var name = $('#dialog_user_name').val();
|
||
var mobile = $('#dialog_user_mobile').val();
|
||
var fob = $('#dialog_user_fob').val();
|
||
var pwd = $('#dialog_user_password2').val();
|
||
var title = GetTextByKey("P_UM_COPYUSER", 'Copy User');
|
||
if (!userID || userID.trim().length == 0) {
|
||
showAlert(GetTextByKey("P_UM_USERIDOREMAILCANNOTBEEMPTY", 'User ID/Email cannot be empty.'), title, undefined, function () { $('#dialog_user_id').focus(); });
|
||
incopy = false;
|
||
return;
|
||
}
|
||
if (!isEmail(userID)) {
|
||
showAlert(GetTextByKey("P_UM_USERIDOREMAILISNOTAVALIDEMAILADDRESS", 'User ID/Email is not a valid email address.'), title, undefined, function () { $('#dialog_user_id').focus(); });
|
||
incopy = false;
|
||
return;
|
||
}
|
||
if (!name || name.trim().length == 0) {
|
||
showAlert(GetTextByKey("P_UM_USERNAMECANNOTBEEMPTY", 'User name cannot be empty.'), title, undefined, function () { $('#dialog_user_name').focus(); });
|
||
incopy = false;
|
||
return;
|
||
}
|
||
if (!$('#dialog_user_randompass1').prop('checked')) {
|
||
if (pwd.length < 8) {
|
||
showAlert(GetTextByKey("P_UM_PASSWORDTIPS", 'The password must have at least 8 characters.'), title, undefined, function () { $('#dialog_user_password2').focus(); });
|
||
incopy = false;
|
||
return;
|
||
}
|
||
if (getStrength(pwd) < 2) {
|
||
showAlert(GetTextByKey("P_UM_PASSWORDTIPS1", 'The password must contain both uppercase and lowercase characters and at lease one number.'), title, undefined, function () { $('#dialog_user_password2').focus(); });
|
||
incopy = false;
|
||
return;
|
||
}
|
||
var pass2 = $('#dialog_user_password3').val();
|
||
if (pwd !== pass2) {
|
||
showAlert(GetTextByKey("P_UM_PASSWORDTIPS2", 'The two passwords are different. Please reenter.'), title, undefined, function () { $('#dialog_user_password3').focus(); });
|
||
incopy = false;
|
||
return;
|
||
}
|
||
} else {
|
||
pwd = "";
|
||
}
|
||
|
||
if (!isSelect) {
|
||
var tmp = $('#dialog_copyuser').dropdownVal();
|
||
if (tmp !== undefined) {
|
||
copyuseriid = tmp;
|
||
}
|
||
else {
|
||
var s = GetTextByKey("P_MA_NOTBEEMPTY", "{0} cannot be empty.").replace('{0}', title);
|
||
showAlert(s, title);
|
||
incopy = false;
|
||
return;
|
||
}
|
||
}
|
||
var formData = new FormData();
|
||
formData.append("MethodName", "CopyUserByIID");
|
||
formData.append("CopyUserIID", copyuseriid);
|
||
formData.append("UserID", userID);
|
||
formData.append("UserName", name);
|
||
formData.append("PWD", pwd);
|
||
formData.append("Mobile", mobile);
|
||
formData.append("FOB", fob);
|
||
showloading(true);
|
||
$.ajax({
|
||
url: 'UserManage.aspx',
|
||
type: 'POST',
|
||
dataType: 'json',
|
||
processData: false,
|
||
contentType: false,
|
||
data: formData,
|
||
async: true,
|
||
success: function (data) {
|
||
showloading(false);
|
||
incopy = false;
|
||
if (typeof (data) === "string" && data.indexOf("@error@") >= 0) {
|
||
var msg = data.replace("@error@", "");
|
||
showAlert(msg, title);
|
||
} else {
|
||
$('#dialog_user_id').val('');
|
||
$('#dialog_user_name').val('');
|
||
$('#dialog_user_randompass1').prop('checked', false);
|
||
$('#dialog_user_password2').prop('disabled', false);
|
||
$('#dialog_user_password3').prop('disabled', false);
|
||
$('#dialog_user_password2').val('');
|
||
$('#dialog_user_password3').val('');
|
||
$('#dialog_copyuser').dropdownVal('-1');
|
||
$('#dialog_copy_user').hideDialog();
|
||
$('#dialog_user_mobile').val('');
|
||
$('#dialog_user_fob').val('');
|
||
newuseriid = data;
|
||
OnRefresh();
|
||
}
|
||
},
|
||
error: function (err) {
|
||
showloading(false);
|
||
showAlert(err.statusText, title);
|
||
}
|
||
});
|
||
}
|
||
|
||
function OnResetPivots() {
|
||
if (grid_dt && grid_dt.columns) {
|
||
for (var i = 0; i < grid_dt.columns.length; i++) {
|
||
if (grid_dt.columns[i].filterValues)
|
||
grid_dt.columns[i].filterValues = null;
|
||
}
|
||
grid_dt.refreshGrid();
|
||
}
|
||
}
|
||
</script>
|
||
</asp:Content>
|
||
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
|
||
<div style="min-width: 400px;">
|
||
<div class="page_title" data-lgid="P_USERMANAGEMENT">User Management</div>
|
||
<div class="search_bar">
|
||
<input type="password" autocomplete="new-password" style="display: none" />
|
||
<input type="text" id="searchinputtxt" autocomplete="off" />
|
||
<input class="search" type="button" onclick="OnRefresh();" value="Search" data-lgid="P_CM_SEARCH" style="margin-left: 5px;" />
|
||
<select id="selactive" onchange="OnRefresh();" style="width: 180px; margin-left: 10px;">
|
||
<option value="1" data-lgid="P_UM_XXXXXX">Active Users Only</option>
|
||
<option value="0" data-lgid="P_UM_XXXXXX">Inactive Users Only</option>
|
||
<option value="-1" data-lgid="P_UM_XXXXXX">Both Active and Inactive Users</option>
|
||
</select>
|
||
</div>
|
||
<div class="function_title">
|
||
<span class="sbutton iconadd" onclick="OnAdd();" data-lgid="P_UM_ADD">Add</span>
|
||
<span class="sbutton iconedit" onclick="OnEdit();" data-lgid="P_UM_EDIT">Edit</span>
|
||
<span class="sbutton iconrefresh" onclick="OnRefresh();" data-lgid="P_UM_REFRESH">Refresh</span>
|
||
<span id="spExport" class="sbutton iconexport" onclick="OnExport();" data-lgid="P_MR_EXPORTTOEXCEL">Export to Excel</span>
|
||
<span class="sbutton iconimport" onclick="OnImport();" data-lgid="P_JS_IMPORT">Import</span>
|
||
<span class="sbutton iconcopy" onclick="OnCopy();" data-lgid="P_UM_COPYUSER">Copy User</span>
|
||
<span class="sbutton iconlayout iconmenu" data-lgid="P_MR_LAYOUT">Layout</span>
|
||
<span class="sbutton iconfilter" onclick="OnResetPivots();" data-lgid="P_JS_XXX">Reset Pivots</span>
|
||
</div>
|
||
<div class="clear"></div>
|
||
<div id="userlist"></div>
|
||
|
||
<div id="mask_bg" style="display: none;">
|
||
<div class="loading c-spin"></div>
|
||
</div>
|
||
<div class="dialog" id="dialog_managemahchine" style="display: none;">
|
||
<div id="dialogmask" class="maskbg" style="display: none;">
|
||
<div class="loading_icon icon c-spin"></div>
|
||
</div>
|
||
<div class="dialog-title"><span class="title" data-lgid="P_UM_ASSETASSIGNMENT">Asset Assignment</span><em class="dialog-close"></em></div>
|
||
|
||
<div class="machine_filter" style="display: none">
|
||
<span data-lgid="P_UM_TYPE_COLON">Type: </span>
|
||
<select id="sel_machine_type" tabindex="20"></select>
|
||
<input type="text" id="txt_machine_key" tabindex="21" />
|
||
<input type="button" class="ybutton" id="button_machine_filter" value="Filter" data-lgid="P_UM_FILTER" tabindex="22" />
|
||
<span id="span_text_holder" style="display: none;"></span>
|
||
</div>
|
||
<div class="machine_filter" style="margin: 9px 6px 5px">
|
||
<span class="sbutton iconadd" onclick="OnMachineAdd()" data-lgid="P_UM_ADD">Add</span>
|
||
<span class="sbutton icondelete" onclick="OnMachineDelete()" data-lgid="P_UM_DELETE">Delete</span>
|
||
</div>
|
||
<div class="div_machines">
|
||
<table class="table_holder">
|
||
<thead>
|
||
<tr style="display: none">
|
||
<td data-lgid="P_UM_AVAILABLEASSETS">Available Assets</td>
|
||
<td></td>
|
||
<td><span data-lgid="P_UM_ASSIGNEDASSETS">Assigned Assets</span>
|
||
<input type="checkbox" id="chk_showallassignedassets" title="When checked, all associated or linked items will display regardless of filter. " /><label for="chk_showallassignedassets">Show All Assigned</label>
|
||
</td>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td style="display: none">
|
||
<div id="availablemachinelist" style="height: 400px; width: 540px;"></div>
|
||
</td>
|
||
<td class="td_controller" style="display: none">
|
||
<input class="ctl_button" type="button" value="" onclick="OnEditorAdd();" tabindex="23" />
|
||
<input class="ctl_button" type="button" value="" onclick="OnEditorAddAll();" tabindex="24" />
|
||
<input class="ctl_button" type="button" value="" onclick="OnEditorRemove();" tabindex="25" />
|
||
<input class="ctl_button" type="button" value="" onclick="OnEditorRemoveAll();" tabindex="26" />
|
||
</td>
|
||
<td style="padding: 2px 4px 4px">
|
||
<div id="selectedmachinelist" style="height: 500px; width: 780px;"></div>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="dialog-func">
|
||
<input type="button" value="Close" data-lgid="P_UM_CLOSE" class="dialog-close" tabindex="28" />
|
||
<input type="button" onclick="OnSaveMachines();" value="OK" data-lgid="P_UM_OK" tabindex="27" style="display: none" />
|
||
<div class="clear"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="dialog" id="dialog_user" style="display: none; height: 100%; border-bottom: 0; border-top: 0;">
|
||
<iframe id="iframeuser" src="AddUser.aspx" style="width: 100%; height: 100%; display: block; border: none;"></iframe>
|
||
<div class="maskbg" style="display: none;"></div>
|
||
</div>
|
||
|
||
|
||
<div class="dialog" id="dialog_machinegroup" style="display: none;">
|
||
<div class="dialog-title"><span class="title" data-lgid="P_UM_MANAGEASSETGROUPS">Manage Asset Groups</span><em class="dialog-close"></em></div>
|
||
<div>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<td data-lgid="P_UM_AVAILABLEASSETGROUPS">Available Asset Groups</td>
|
||
<td></td>
|
||
<td data-lgid="P_UM_ASSIGNEDASSETGROUPS">Assigned Asset Groups</td>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>
|
||
<div id="availableassetgrouplist" style="height: 400px; width: 380px;"></div>
|
||
</td>
|
||
<td class="td_controller">
|
||
<input class="ctl_button" type="button" value="" onclick="OnAssetGroupEditorAdd();" tabindex="23" />
|
||
<input class="ctl_button" type="button" value="" onclick="OnAssetGroupEditorAddAll();" tabindex="24" />
|
||
<input class="ctl_button" type="button" value="" onclick="OnAssetGroupEditorRemove();" tabindex="25" />
|
||
<input class="ctl_button" type="button" value="" onclick="OnAssetGroupEditorRemoveAll();" tabindex="26" />
|
||
</td>
|
||
<td>
|
||
<div id="selectedassetgrouplist" style="height: 400px; width: 380px;"></div>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
<div class="dialog-func">
|
||
<input type="button" value="Cancel" data-lgid="P_UM_CANCEL" class="dialog-close" tabindex="18" />
|
||
<input type="button" onclick="OnSaveUserMG();" value="OK" data-lgid="P_UM_OK" tabindex="17" />
|
||
<div class="clear"></div>
|
||
</div>
|
||
<div class="maskbg" style="display: none;"></div>
|
||
</div>
|
||
|
||
<div class="dialog" id="dialog_managejobsite" style="display: none;">
|
||
<div class="dialog-title"><span class="title" data-lgid="P_UM_JOBSITEASSIGNMENT">Jobsite Assignment</span><em class="dialog-close"></em></div>
|
||
|
||
<div class="machine_filter" style="margin: 9px 6px 5px">
|
||
<input type="text" id="txt_jobsite_key" style="margin-left: 8px; width: 280px;" tabindex="40" />
|
||
<input type="button" class="ybutton" id="button_jobsite_filter" value="Filter" data-lgid="P_UM_FILTER" tabindex="42" />
|
||
</div>
|
||
<div class="div_machines">
|
||
<table class="table_holder">
|
||
<thead>
|
||
<tr>
|
||
<td data-lgid="P_UM_AVAILABLEJOBSITES">Available Jobsites</td>
|
||
<td></td>
|
||
<td><span data-lgid="P_UM_ASSIGNEDJOBSITES">Assigned Jobsites </span>
|
||
<input type="checkbox" id="chk_showallassignedjobsites" title="When checked, all associated or linked items will display regardless of filter. " /><label for="chk_showallassignedjobsites">Show All Assigned</label>
|
||
</td>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>
|
||
<div id="availablejobsitelist" style="height: 400px; width: 410px;"></div>
|
||
</td>
|
||
<td class="td_controller">
|
||
<input class="ctl_button" type="button" value="" onclick="OnJobsiteEditorAdd();" tabindex="42" />
|
||
<input class="ctl_button" type="button" value="" onclick="OnJobsiteEditorAddAll();" tabindex="43" />
|
||
<input class="ctl_button" type="button" value="" onclick="OnJobsiteEditorRemove();" tabindex="44" />
|
||
<input class="ctl_button" type="button" value="" onclick="OnJobsiteEditorRemoveAll();" tabindex="45" />
|
||
</td>
|
||
<td>
|
||
<div id="selectedjobsitelist" style="height: 400px; width: 410px;"></div>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="dialog-func">
|
||
<input type="button" value="Cancel" data-lgid="P_UM_CANCEL" class="dialog-close" tabindex="47" />
|
||
<input type="button" onclick="OnSaveJobsites();" value="OK" data-lgid="P_UM_OK" tabindex="46" />
|
||
<div class="clear"></div>
|
||
</div>
|
||
<div id="jobsitedialogmask" class="maskbg" style="display: none;">
|
||
<div class="loading_icon icon c-spin"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="dialog" id="dialog_manageassettype" style="display: none;">
|
||
<div class="dialog-title"><span class="title" data-lgid="P_UM_ASSETTYPEASSIGNMENT">Asset Type Assignment</span><em class="dialog-close"></em></div>
|
||
|
||
<div class="machine_filter" style="margin: 9px 6px 5px">
|
||
<input type="text" id="txt_assettype_key" style="margin-left: 8px; width: 280px;" tabindex="40" />
|
||
<input type="button" class="ybutton" id="button_assettype_filter" value="Filter" data-lgid="P_UM_FILTER" tabindex="42" />
|
||
</div>
|
||
<div class="div_machines">
|
||
<table class="table_holder">
|
||
<thead>
|
||
<tr>
|
||
<td data-lgid="P_UM_AVAILABLEASSETTYPES">Available Asset Types</td>
|
||
<td></td>
|
||
<td><span data-lgid="P_UM_ASSIGNEDASSETTYPES">Assigned Asset Types</span>
|
||
<input type="checkbox" id="chk_showallassignedassettypes" title="When checked, all associated or linked items will display regardless of filter. " /><label for="chk_showallassignedassettypes">Show All Assigned</label>
|
||
</td>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>
|
||
<div id="availableassettypelist" style="height: 400px; width: 410px;"></div>
|
||
</td>
|
||
<td class="td_controller">
|
||
<input class="ctl_button" type="button" value="" onclick="OnAssetTypeEditorAdd();" tabindex="42" />
|
||
<input class="ctl_button" type="button" value="" onclick="OnAssetTypeEditorAddAll();" tabindex="43" />
|
||
<input class="ctl_button" type="button" value="" onclick="OnAssetTypeEditorRemove();" tabindex="44" />
|
||
<input class="ctl_button" type="button" value="" onclick="OnAssetTypeEditorRemoveAll();" tabindex="45" />
|
||
</td>
|
||
<td>
|
||
<div id="selectedassettypelist" style="height: 400px; width: 410px;"></div>
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<div class="dialog-func">
|
||
<input type="button" value="Cancel" data-lgid="P_UM_CANCEL" class="dialog-close" tabindex="47" />
|
||
<input type="button" onclick="OnSaveAssetTypes();" value="OK" data-lgid="P_UM_OK" tabindex="46" />
|
||
<div class="clear"></div>
|
||
</div>
|
||
<div id="assettypedialogmask" class="maskbg" style="display: none;">
|
||
<div class="loading_icon icon c-spin"></div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<div class="dialog" id="dialog_password" style="display: none;">
|
||
<div class="dialog-title"><span class="title" data-lgid="P_UM_RESETPASSWORD">Reset Password</span><em class="dialog-close"></em></div>
|
||
<div class="dialog-content">
|
||
<table style="line-height: 30px;">
|
||
<tr>
|
||
<td style="width: 100px;"></td>
|
||
<td>
|
||
<input type="checkbox" id="dialog_user_randompass" tabindex="1" style="width: auto; height: 13px; margin-left: 0; margin-top: -2px; margin-bottom: 1px; vertical-align: middle;" />
|
||
<label for="dialog_user_randompass" data-lgid="P_UM_RANDOMPASSWORD">Random password</label></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="label" style="width: 100px;" data-lgid="P_UM_PASSWORD_COLON">Password:</td>
|
||
<td>
|
||
<input type="password" id="dialog_user_password" tabindex="2" maxlength="20" />
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="label" style="width: 100px;" data-lgid="P_UM_CONFIRMPASSWORD_COLON">Confirm Password:</td>
|
||
<td>
|
||
<input type="password" id="dialog_user_password1" tabindex="3" maxlength="20" /></td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="dialog-func">
|
||
<input type="button" value="Cancel" data-lgid="P_UM_CANCEL" class="dialog-close" tabindex="5" />
|
||
<input type="button" onclick="ResetPassword();" value="OK" data-lgid="P_UM_OK" tabindex="4" />
|
||
<div class="clear"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="dialog" id="dialog_import" style="display: none;">
|
||
<div class="dialog-title"><span class="title" data-lgid="P_UM_IMPORTUSESFIELDMAPPING"></span><em class="dialog-close"></em></div>
|
||
|
||
<div class="machine_filter" style="margin: 9px 6px 7px; display: none;">
|
||
<span class="sbutton iconimport" onclick="OnImport()" data-lgid="P_JS_IMPORT">Add</span>
|
||
</div>
|
||
<div class="dialog-content adjust-content" style="height: 400px; overflow: auto; padding: 6px 10px 0px 10px;">
|
||
<table id="tb_import" class="table_holder">
|
||
</table>
|
||
<table id="tb_import_security" class="table_holder">
|
||
</table>
|
||
<table id="tb_import_smsmsg" class="table_holder">
|
||
</table>
|
||
</div>
|
||
|
||
<div class="dialog-func">
|
||
<div style="line-height: 30px; text-align: right;">
|
||
<a id="a_importusers" href="#" onclick="OnImportChange(0)" data-lgid="P_UM_XXXX" style="display: none; padding-right: 20px;">Return to User Fields</a>
|
||
<a id="a_importsecurity" href="#" onclick="OnImportChange(1)" data-lgid="P_UM_XXXX" style="padding-right: 20px;">Map Additional Fields</a>
|
||
<a id="a_importsmsmsg" href="#" onclick="OnImportChange(2)" data-lgid="P_UM_XXXX" style="padding-right: 20px; display: none;">Next</a>
|
||
</div>
|
||
<div>
|
||
<input type="button" value="Close" data-lgid="P_JS_CANCEL" class="dialog-close" tabindex="28" />
|
||
<input type="button" onclick="OnImportUsers();" value="OK" tabindex="27" />
|
||
<div class="clear"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="dialog" id="dialog_copy_user" style="display: none;">
|
||
<div class="dialog-title"><span class="title" data-lgid="P_UM_COPYUSER">Copy User</span><em class="dialog-close"></em></div>
|
||
|
||
<div class="dialog-content adjust-content" style="min-height: 50px;">
|
||
<table style="line-height: 30px;">
|
||
<tr>
|
||
<td class="label" style="width: 100px;" data-lgid="P_UM_USERIDOREMAIL_COLON">User ID/Email:</td>
|
||
<td style="width: 220px;">
|
||
<input type="text" id="dialog_user_id" tabindex="1" maxlength="200" autocomplete="off" /></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="label" data-lgid="P_UM_USERNAME_COLON">User Name:</td>
|
||
<td>
|
||
<input type="text" id="dialog_user_name" tabindex="2" maxlength="200" autocomplete="off" /></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="label" data-lgid="P_UM_MOBILE_COLON">Mobile:</td>
|
||
<td>
|
||
<input type="text" id="dialog_user_mobile" tabindex="2" maxlength="50" autocomplete="off" /></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="label" data-lgid="P_UM_EMPLOYEEIDORFOB_COLON">Employee ID or FOB:</td>
|
||
<td>
|
||
<input type="text" id="dialog_user_fob" tabindex="2" maxlength="50" autocomplete="off" /></td>
|
||
</tr>
|
||
<tr>
|
||
<td style="width: 100px;"></td>
|
||
<td>
|
||
<input type="checkbox" id="dialog_user_randompass1" tabindex="3" style="width: auto; height: 13px; margin-left: 0; margin-top: -2px; margin-bottom: 1px; vertical-align: middle;" />
|
||
<label for="dialog_user_randompass1" data-lgid="P_UM_RANDOMPASSWORD">Random password</label></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="label" data-lgid="P_UM_PASSWORD_COLON">Password:</td>
|
||
<td>
|
||
<input type="password" id="dialog_user_password2" style="width: 200px;" tabindex="4" maxlength="20" autocomplete="off" />
|
||
</td>
|
||
<td></td>
|
||
</tr>
|
||
<tr>
|
||
<td class="label" data-lgid="P_UM_CONFIRMPASSWORD_COLON">Confirm Password:</td>
|
||
<td>
|
||
<input type="password" id="dialog_user_password3" style="width: 200px;" tabindex="5" maxlength="20" autocomplete="off" /></td>
|
||
<td></td>
|
||
</tr>
|
||
<tr id="tr_copyuser">
|
||
<td class="label" data-lgid="P_UM_COPYUSER_COLON">Copy User:</td>
|
||
<td>
|
||
<div id="dialog_copyuser" tabindex="6" style="width: 204px"></div>
|
||
</td>
|
||
<td></td>
|
||
</tr>
|
||
|
||
</table>
|
||
</div>
|
||
|
||
<div class="dialog-func">
|
||
<input type="button" value="Close" data-lgid="P_JS_CANCEL" class="dialog-close" tabindex="8" />
|
||
<input type="button" onclick="OnCopyUser();" value="OK" tabindex="7" />
|
||
<div class="clear"></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="dialog" id="dialog_edittext" style="display: none;">
|
||
<div class="dialog-title"><span class="title" data-lgid="P_WO_EDITNOTES">Edit Notes</span><em class="dialog-close"></em></div>
|
||
<div class="dialog-content">
|
||
<table style="line-height: 30px;">
|
||
<tr>
|
||
<td>
|
||
<textarea id="dialog_text" tabindex="1" style="width: 480px; height: 200px; margin-top: 6px;" maxlength="2000"></textarea></td>
|
||
</tr>
|
||
</table>
|
||
</div>
|
||
<div class="dialog-func">
|
||
<input type="button" value="Cancel" data-lgid="P_WO_CANCEL" class="dialog-close" tabindex="18" />
|
||
<input type="button" onclick="SaveText();" value="Save" data-lgid="P_WO_SAVE" tabindex="17" />
|
||
<div class="clear"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</asp:Content>
|
||
|