Files
CRM/customerportal/layouts/default/resources/components/HelpDesk.js
BACHIR SOULDI 2794e62571 first commit
2025-09-28 08:49:37 +01:00

965 lines
31 KiB
JavaScript

/*+***********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.2
* ("License.txt"); You may not use this file except in compliance with the License
* The Original Code is: Vtiger CRM Open Source
* The Initial Developer of the Original Code is Vtiger.
* Portions created by Vtiger are Copyright (C) Vtiger.
* All Rights Reserved.
*************************************************************************************/
function HelpDesk_IndexView_Component($scope, $api, $webapp, $modal, sharedModalService, $translatePartialLoader, $rootScope, $http, $translate) {
if ($translatePartialLoader !== undefined) {
$translatePartialLoader.addPart('home');
$translatePartialLoader.addPart('HelpDesk');
}
var availableModules = JSON.parse(localStorage.getItem('modules'));
var currentModule = 'HelpDesk';
//set creatable true
if (availableModules !== null && availableModules[ currentModule ] !== undefined) {
$scope.isCreatable = availableModules[ currentModule ].create;
$scope.filterPermissions = availableModules[currentModule].recordvisibility;
}
angular.extend(this, new Portal_IndexView_Component($scope, $api, $webapp, sharedModalService));
$scope.exportEnabled = false;
$scope.$on('serviceHelpDesk', function () {
window.location.href = "index.php?module=HelpDesk&status=Open";
});
$scope.$on('editRecordModalHelpDesk.Template', function () {
$modal.open({
templateUrl: 'editRecordModalHelpDesk.template',
controller: HelpDesk_EditView_Component,
backdrop: 'static',
size: 'lg',
keyboard: 'false',
resolve: {
record: function () {
return {};
},
api: function () {
return $api;
},
webapp: function () {
return $webapp;
},
module: function () {
return 'HelpDesk';
},
language: function () {
return $scope.$parent.language;
},
editStatus: function () {
return false;
}
}
});
});
var url = purl();
var status = url.param('status');
var loadStatus = '';
$scope.activateStatusElement = false;
if (status !== undefined && status === 'Open') {
loadStatus = 'Open';
}
if (loadStatus !== undefined && loadStatus !== '') {
$scope.loadOpenStatus = true;
var stateObject = {};
var title = "Portal";
var newUrl = "index.php?module=HelpDesk";
history.pushState(stateObject, title, newUrl);
localStorage.setItem('currentStatus', JSON.stringify({
"label": "Open",
"value": "Open"
}));
}
$scope.isCreateable = true;
$scope.viewLoading = false;
$scope.$watch('searchQ.ticketstatus', function (nvalue, ovalue) {
if (nvalue !== ovalue) {
localStorage.setItem('currentStatus', JSON.stringify($scope.searchQ.ticketstatus));
$scope.loadRecords();
$scope.currentPage = 1;
}
});
$scope.create = function () {
var modalInstance = $modal.open({
templateUrl: 'editRecordModalHelpDesk.template',
controller: HelpDesk_EditView_Component,
backdrop: 'static',
keyboard: 'false',
size: 'lg',
resolve: {
record: function () {
return {};
},
api: function () {
return $api;
},
webapp: function () {
return $webapp;
},
module: function () {
return $scope.module;
},
language: function () {
return $scope.$parent.language;
},
editStatus: function () {
return false;
}
}
});
}
$scope.loadRecords = function (pageNo) {
$scope.viewLoading = true;
$scope.module = 'HelpDesk';
var language = $scope.$parent.language;
var params = {};
$webapp.busy(false);
$scope.itemsPerPage = 10;
if ($scope.searchQ.onlymine) {
$scope.searchQ.mode = 'mine';
} else {
$scope.searchQ.mode = 'all';
}
var filter = {};
if ($scope.searchQ.ticketstatus !== undefined) {
if ($scope.searchQ.ticketstatus.value.toUpperCase() !== 'ALL') {
filter = {
'ticketstatus': $scope.searchQ.ticketstatus.value
}
}
}
if ($scope.sortParams === undefined) {
params = {
'mode': $scope.searchQ.mode,
'page': pageNo
}
} else if ($scope.sortParams !== undefined) {
params = $scope.sortParams;
}
$api.get($scope.module + '/FetchRecords', {
q: params,
filter: filter,
label: 'HelpDesk',
language: language
})
.success(function (result) {
$scope.pageInitialized = true;
var availableModules = JSON.parse(localStorage.getItem('modules'));
var currentModule = 'HelpDesk';
var ptitleLabel = availableModules[ currentModule ].uiLabel;
$scope.ptitle = ptitleLabel
$scope.headers = result.headers;
$scope.records = result.records;
$scope.totalPages = result.count;
$scope.edits = result.editLabels;
$scope.viewLoading = false;
$webapp.busy(false);
});
}
var ticketStatuses = [];
$scope.loadValues = function () {
var language = $scope.$parent.language;
if ($scope.module === 'HelpDesk') {
$api.get($scope.module + '/DescribeModule', {
language: language
})
.success(function (structure) {
var describeStructure = structure.describe.fields;
if (structure.describe === undefined && structure.message === 'Contacts module is disabled') {
alert("Contacts module has been disabled.");
window.location.href = "index.php?view=Logout";
}
var k = true;
angular.forEach(describeStructure, function (field) {
if (k) {
if (field.name === 'ticketstatus') {
$scope.ticketStatus = field.type.picklistValues;
k = false;
}
}
})
var all = {
"label": $translate.instant('All Tickets'),
"value": "all"
};
if ($scope.ticketStatus !== undefined) {
$scope.ticketStatus.unshift(all);
$scope.searchQ.ticketstatus = $scope.ticketStatus[ 0 ];
if (localStorage.getItem('currentStatus') !== undefined) {
$scope.currentStatus = JSON.parse(localStorage.getItem('currentStatus'));
if ($scope.currentStatus !== null && loadStatus == 'Open') {
var existingStatusLabel = $scope.currentStatus.label;
var existingStatusValue = $scope.currentStatus.value;
} else {
var existingStatusLabel = $translate.instant('All Tickets');
var existingStatusValue = "all";
}
var continueLoop = true;
angular.forEach($scope.ticketStatus, function (status, i) {
if (continueLoop) {
if (status.value === existingStatusValue) {
continueLoop = false;
$scope.searchQ.ticketstatus = $scope.ticketStatus[ i ];
}
}
})
}
$scope.activateStatus = true;
if ($scope.loadOpenStatus) {
$scope.searchQ.ticketstatus = $scope.ticketStatus[ 1 ];
}
} else {
$scope.activateStatus = false;
$scope.searchQ.ticketstatus = {
"label": $translate.instant('All Tickets'),
"value": "all"
};
}
})
}
}
$scope.status = [];
ticketStatuses = $scope.loadValues();
$scope.pageChanged = function (pageNo) {
$scope.loadPage = pageNo - 1;
if ($scope.sortParams !== undefined) {
$scope.sortParams.page = pageNo - 1;
$scope.loadRecords();
} else {
$scope.loadRecords(pageNo - 1);
}
}
$scope.setSortOrder = function (header) {
var order = 'ASC';
if (header == $scope.OrderBy) {
$scope.reverse = !$scope.reverse;
}
if ($scope.reverse && $scope.OrderBy !== undefined) {
order = 'DESC';
}
$scope.OrderBy = header;
var params = {
'page': $scope.currentPage - 1,
'mode': $scope.searchQ.mode,
'order': order,
'orderBy': $scope.edits[ header ]
}
if ($scope.loadPage !== undefined) {
params.page = $scope.loadPage;
}
$scope.sortParams = params;
$scope.loadRecords();
}
$scope.exportRecords = function (module) {
$scope.csvHeaders = [];
$scope.filename = $scope.ptitle;
if ($scope.searchQ.ticketstatus.label !== undefined) {
$scope.filename = $scope.ptitle + '_' + $scope.searchQ.ticketstatus.label;
}
var params1 = {};
var filter = {};
var language = $scope.$parent.language;
params1 = {
'mode': $scope.searchQ.mode
}
if ($scope.searchQ.ticketstatus.value.toUpperCase() !== 'ALL') {
filter = {
'ticketstatus': $scope.searchQ.ticketstatus.value
}
}
angular.forEach($scope.headers, function (header) {
if (header !== 'id') {
$scope.csvHeaders.push(header);
}
})
return $http.get('index.php?module=' + module + '&api=ExportRecords', {
params: {
q: params1,
filter: filter,
label: 'HelpDesk'
}
})
.then(function (response) {
return response.data.result.records;
});
}
}
function HelpDesk_DetailView_Component($scope, $api, $webapp, $translatePartialLoader, sharedModalService, $modal) {
$scope.module = 'HelpDesk';
if ($translatePartialLoader !== undefined) {
$translatePartialLoader.addPart('home');
$translatePartialLoader.addPart('HelpDesk');
$translatePartialLoader.addPart('Documents');
}
$scope.documentsEnabled = false;
//Enable or disable edit button
var availableModules = JSON.parse(localStorage.getItem('modules'));
var currentModule = $scope.module;
$scope.isEditable = availableModules[currentModule].edit
angular.extend(this, new Portal_DetailView_Component($scope, $api, $webapp));
$scope.$watch('HelpDeskStatus', function (nvalue, ovalue) {
$scope.closeButtonDisabled = false;
if (nvalue != ovalue) {
if (nvalue.toUpperCase() != 'CLOSED') {
$scope.isCommentCreateable = true;
$scope.closeButtonDisabled = true;
}
}
});
$scope.$on('editRecordModalDocuments.Template', function () {
$modal.open({
templateUrl: 'editRecordModalDocuments.template',
controller: Documents_EditView_Component,
backdrop: 'static',
keyboard: 'false',
resolve: {
record: function () {
return {
'parentId': $scope.id,
'parentModule': $scope.module
};
},
api: function () {
return $api;
},
webapp: function () {
return $webapp;
},
module: function () {
return 'Documents';
}
}
});
});
$scope.close = function () {
var params = {
'ticketstatus': 'Closed'
}
$api.post($scope.module + '/SaveRecord', {
record: params,
recordId: $scope.id
})
.success(function (savedRecord) {
if (savedRecord.record !== undefined) {
$webapp.busy();
// Update client data-structure to reflect Closed status.
var recordStatus = savedRecord.record.ticketstatus;
$scope.HelpDeskStatus = recordStatus;
var statusField = $scope.edits[ 'ticketstatus' ];
$scope.record[ statusField ] = $scope.HelpDeskCloseLabel;
$scope.closeButtonDisabled = false;
$webapp.busy(false)
$scope.isCommentCreateable = (recordStatus.toUpperCase() != 'CLOSED');
} else {
alert("Mandatory fields are missing," + savedRecord.message + '.');
}
});
}
$scope.selectedTab = function (selected) {
$scope.selection = selected;
}
$scope.attachDocument = function (module, action) {
var actionConfig = {
'LBL_ADD_DOCUMENT': 'Documents'
};
if (actionConfig.hasOwnProperty(action)) {
sharedModalService.prepForModal(actionConfig[ action ]);
}
}
$scope.edit = function (module, id) {
var modalInstance = $modal.open({
templateUrl: 'editRecordModalHelpDesk.template',
controller: HelpDesk_EditView_Component,
backdrop: 'static',
keyboard: 'false',
size: 'lg',
resolve: {
record: function () {
return $scope.record;
},
api: function () {
return $api;
},
webapp: function () {
return $webapp;
},
module: function () {
return $scope.module;
},
language: function () {
return $scope.$parent.language;
},
editStatus: function () {
return true;
}
}
});
}
}
function HelpDesk_EditView_Component($scope, $modalInstance, record, api, webapp, module, $timeout, $translatePartialLoader, language, $filter, $http, editStatus) {
$scope.data = {};
$scope.datemodel = {};
$scope.timemodel = {};
$scope.editRecord = angular.copy(record);
$scope.serviceContractFieldPresent = false;
$scope.structure = null;
var availableModules = JSON.parse(localStorage.getItem('modules'));
if (availableModules[ 'ServiceContracts' ] !== undefined) {
$scope.serviceContractFieldPresent = true;
}
if ($translatePartialLoader !== undefined) {
$translatePartialLoader.addPart('home');
$translatePartialLoader.addPart('HelpDesk');
}
function splitFields(arr, size) {
var newArr = [];
for (var i = 0; i < arr.length; i += size) {
newArr.push(arr.slice(i, i + size));
}
return newArr;
}
$scope.openDatePicker = function ($event, elementOpened) {
$event.preventDefault();
$event.stopPropagation();
$scope.datemodel[ elementOpened ] = !$scope.datemodel[ elementOpened ];
};
$scope.openTimePicker = function ($event, elementOpened) {
$event.preventDefault();
$event.stopPropagation();
$scope.timemodel[ elementOpened ] = !$scope.timemodel[ elementOpened ];
};
// Disable weekend selection
$scope.disabled = function (date, mode) {
return (mode === 'day' && (date.getDay() === 0 || date.getDay() === 6));
};
$scope.minDate = new Date();
if (!editStatus) {
api.get(module + '/DescribeModule', {
language: language
})
.success(function (structure) {
var editables = [];
var editablesText = [];
$scope.timeLabels = [];
$scope.multipicklistFields = [];
$scope.referenceFields = [];
$scope.nonAvailableReferenceFields = [];
$scope.descriptionEnabled = false;
$scope.disabledFields = [];
angular.forEach(structure.describe.fields, function (field) {
//If not editable push the field to disabledFields
if (!field.editable) {
$scope.disabledFields[ field.name ] = true;
}
if (field.name === 'ticketpriorities' && !field.editable) {
$scope.ticketprioritiesNotPresent = true;
if (field.default !== '') {
$scope.defaultPriority = field.default;
} else {
$scope.defaultPriority = 'Normal';
}
}
if (field.name === 'ticketstatus' && !field.editable) {
$scope.ticketstatusNotPresent = true;
if (field.default !== '') {
$scope.defaultStatus = field.default;
} else {
$scope.defaultStatus = 'In Progress';
}
}
if (field.name !== 'contact_id' && field.name !== 'parent_id' && field.name !== 'assigned_user_id' && field.name !== 'related_to' && field.editable && field.type.name !== "text") {
//If not editable push the field to disabledFields
if (!field.editable) {
$scope.disabledFields[ field.name ] = true;
}
if (field.type.name == 'string' && field.editable) {
$scope.data[ field.name ] = field.default;
if (field.name == 'ticket_title') {
$scope.ticketTitleLabel = field.label;
$scope.data[ 'ticket_title' ] = field.default;
}
}
if (field.type.name == 'integer' && field.editable) {
$scope.data[ field.name ] = field.default;
}
if (field.type.name == 'phone' || field.type.name == 'skype' && field.editable) {
$scope.data[ field.name ] = field.default;
}
if (field.type.name == 'boolean' && field.editable) {
if (field.default == "on") {
$scope.data[ field.name ] = true;
} else {
$scope.data[ field.name ] = false;
}
}
if (field.type.name == 'email' && field.editable) {
$scope.data[ field.name ] = field.default;
}
if (field.type.name == 'url' && field.editable) {
$scope.data[ field.name ] = field.default;
}
if (field.type.name == 'double' && field.editable) {
$scope.data[ field.name ] = field.default;
}
if (field.type.name == 'currency' && field.editable) {
$scope.data[ field.name ] = field.default;
}
if (field.type.name == 'time' && field.editable) {
var date = new Date();
$scope.timeField = true;
$scope.timeLabels.push(field.name);
if (field.default !== '') {
var defaultTime = field.default.split(':');
date.setHours(defaultTime[ 0 ]);
date.setMinutes(defaultTime[ 1 ]);
$scope.data[ field.name ] = date;
} else {
$scope.data[ field.name ] = date;
}
}
if (field.type.name == 'date' && field.editable) {
if (!isNaN(field.default)) {
var date = new Date();
$scope.data[ field.name ] = $filter('date')(date, "yyyy-MM-dd");
$scope.minDate = $filter('date')(date, "yyyy-MM-dd");
} else {
$scope.data[ field.name ] = $filter('date')(field.default, "yyyy-MM-dd");
$scope.minDate = $filter('date')(field.default, "yyyy-MM-dd");
}
}
if (field.type.name == 'multipicklist' && field.editable) {
$scope.multipicklistFields.push(field.name);
var defaultValues = [];
if (field.default !== null) {
defaultValues = field.default.split(' |##| ');
}
var selectedValues = [];
if (defaultValues.length !== 0) {
angular.forEach(defaultValues, function (values, i) {
var o = {};
o.label = defaultValues[ i ];
o.value = defaultValues[ i ];
selectedValues.push(o);
});
}
$scope.data[ field.name ] = selectedValues;
}
if (field.type.name == 'picklist' && field.editable) {
var continueLoop = true;
var defaultValue = field.default;
angular.forEach(field.type.picklistValues, function (pickList, i) {
if (continueLoop) {
if (defaultValue !== '' && pickList.value == defaultValue) {
field.value = field.type.picklistValues[ i ];
field.index = i;
continueLoop = false;
} else if (defaultValue === '') {
field.value = field.type.picklistValues[ i ];
field.defaultIndex = i;
continueLoop = false;
}
}
});
if (field.index === undefined) {
$scope.data[ field.name ] = field.type.picklistValues[ 0 ].value;
} else {
$scope.data[ field.name ] = field.type.picklistValues[ field.index ].value;
}
}
if (field.name !== 'ticket_title') {
editables.push(field)
}
}
if (field.type.name === "text" && field.editable) {
$scope.data[ field.name ] = field.default;
editablesText.push(field);
}
});
var newEditables = [];
angular.forEach(editables, function (field, i) {
var isDeleted = false;
if (field.type.name === "reference") {
if (field.type.refersTo[ 0 ] === undefined || availableModules[ field.type.refersTo[ 0 ] ] === undefined) {
isDeleted = true;
}
}
if (!isDeleted) {
if (field.type.name === "reference") {
$scope.referenceFields.push(field.name);
}
newEditables.push(field);
}
});
editables = newEditables;
$scope.fields = splitFields(editables, 2);
if (editablesText.length !== 0) {
$scope.textFieldsEnabled = true;
$scope.editableText = editablesText;
}
});
}
$scope.fetchReferenceRecords = function (module, query) {
var records = [];
return $http.get('index.php?module=' + module + '&api=FetchReferenceRecords', {
params: {
module: module,
query: query
}
})
.then(function (response) {
angular.forEach(response.data.result, function (record, i) {
if (angular.isObject(record)) {
records.push(response.data.result[ i ]);
}
})
return records;
});
}
$scope.save = function (validity, dateFilter) {
if (!validity) {
$scope.submit = true;
return false;
}
if ($scope.referenceFields.length > 0) {
angular.forEach($scope.referenceFields, function (label) {
if ($scope.data[ label ] !== undefined && $scope.data[ label ] !== '') {
$scope.data[ label ] = $scope.data[ label ].id;
} else {
$scope.data[ label ] = '';
}
});
}
if ($scope.multipicklistFields.length !== 0) {
angular.forEach($scope.multipicklistFields, function (label) {
var choosenValues = $scope.data[ label ];
var transformedValues = [];
angular.forEach(choosenValues, function (values, i) {
if (values.value !== '')
transformedValues.push(values.value)
});
$scope.data[ label ] = '';
if (transformedValues.length > 0) {
$scope.data[ label ] = transformedValues;
}
});
}
if ($scope.timeField) {
angular.forEach($scope.timeLabels, function (label) {
var convertedTime = $filter('date')($scope.data[ label ], "HH:mm A");
$scope.data[ label ] = convertedTime;
})
}
// Filtering non-editable fields from POST data.
angular.forEach($scope.data, function (data, i) {
if ($scope.disabledFields[ i ]) {
delete($scope.data[ i ]);
}
});
webapp.busy();
if ($scope.data[ 'serviceid' ] !== undefined) {
$scope.data[ 'serviceid' ] = $scope.data[ 'serviceid' ].id;
}
if ($scope.ticketprioritiesNotPresent || $scope.data[ 'ticketpriorities' ] === '') {
$scope.data[ 'ticketpriorities' ] = $scope.defaultPriority;
}
if ($scope.ticketstatusNotPresent || $scope.data[ 'ticketstatus' ] === '') {
$scope.data[ 'ticketstatus' ] = $scope.defaultStatus;
}
var params = {
record: $scope.data
}
if (editStatus)
params.recordId = $scope.editRecord.id;
$modalInstance.close($scope.data);
api.post(module + '/SaveRecord', params)
.success(function (savedRecord) {
webapp.busy(false);
$modalInstance.dismiss('cancel');
if (savedRecord.record !== undefined) {
var id = savedRecord.record.id.split('x');
window.location.href = 'index.php?module=HelpDesk&view=Detail&id=' + savedRecord.record.id;
}
if (savedRecord.record === undefined) {
alert(savedRecord.message);
}
});
}
$scope.cancel = function () {
$modalInstance.dismiss('cancel');
}
if (editStatus) {
var editFields = [];
var editableTextFields = [];
$scope.referenceFields = [];
$scope.nonAvailableReferenceFields = [];
$scope.multipicklistFields = [];
$scope.timeLabels = [];
$scope.header = record.identifierName.label;
$scope.modalTitle = record[ $scope.header ]
$scope.disabledFields = [];
api.get(module + '/DescribeModule')
.success(function (describe) {
var editableFields = describe.describe.fields;
$scope.data[ 'ticket_title' ] = record[ record.identifierName.label ];
angular.forEach(editableFields, function (field) {
//If not editable push the field to disabledFields
if (!field.editable) {
$scope.disabledFields[ field.name ] = true;
}
if (field.name !== 'contact_id' && field.name !== 'parent_id' && field.name !== 'assigned_user_id' && field.name !== 'related_to' && field.type.name !== 'text' && field.editable) {
if (field.type.name == 'string') {
if (field.name == 'ticket_title') {
$scope.ticketTitleLabel = field.label;
}
if (record[ field.label ] === '') {
$scope.data[ field.name ] = field.default;
} else {
$scope.data[ field.name ] = record[ field.label ];
}
}
if (field.type.name == 'integer') {
if (record[ field.label ] === '') {
$scope.data[ field.name ] = field.default;
} else {
$scope.data[ field.name ] = record[ field.label ];
}
}
if (field.type.name == 'phone' || field.type.name == 'skype') {
if (record[ field.label ] === '') {
$scope.data[ field.name ] = field.default;
} else {
$scope.data[ field.name ] = record[ field.label ];
}
}
if (field.type.name == 'boolean') {
if (record[ field.label ] === '') {
$scope.data[ field.name ] = false;
}
if (record[ field.label ] == "Yes" || field.default == "on") {
$scope.data[ field.name ] = true;
} else {
$scope.data[ field.name ] = false;
}
}
if (field.type.name == 'email') {
if (record[ field.label ] === '') {
$scope.data[ field.name ] = field.default;
} else {
$scope.data[ field.name ] = record[ field.label ];
}
}
if (field.type.name == 'url') {
if (record[ field.label ] === '') {
$scope.data[ field.name ] = field.default;
} else {
$scope.data[ field.name ] = record[ field.label ];
}
}
if (field.type.name == 'reference') {
if (record[ field.label ] === '' || record[ field.label ] === 0) {
$scope.data[ field.name ] = '';
} else {
$scope.data[ field.name ] = record.referenceFields[ field.label ];
}
}
if (field.type.name == 'double') {
if (record[ field.label ] === '') {
$scope.data[ field.name ] = field.default;
} else {
$scope.data[ field.name ] = record[ field.label ];
}
}
if (field.type.name == 'currency') {
if (record[ field.label ] === '') {
$scope.data[ field.name ] = field.default;
} else {
$scope.data[ field.name ] = record[ field.label ];
}
}
if (field.type.name == 'picklist') {
var continueLoop = true;
var defaultValue = field.default;
angular.forEach(field.type.picklistValues, function (pickList, i) {
if (continueLoop) {
if (pickList.label == record[ field.label ] && record[ field.label ] !== '') {
field.value = field.type.picklistValues[ i ];
field.index = i;
continueLoop = false;
} else if (record[ field.label ] == '' && pickList.value == defaultValue) {
field.value = field.type.picklistValues[ i ];
field.index = i;
continueLoop = false;
}
}
});
if (field.index === undefined) {
$scope.data[ field.name ] = field.type.picklistValues[ 0 ].value;
} else {
$scope.data[ field.name ] = field.type.picklistValues[ field.index ].value;
}
}
if (field.type.name == 'multipicklist') {
$scope.multipicklistFields.push(field.name);
var defaultValues = [];
var recordValues = record[ field.label ].split(',');
if (field.default !== null) {
defaultValues = field.default.split(' |##| ');
}
var selectedValues = [];
if (recordValues.length > 0 && recordValues[ 0 ] !== '') {
angular.forEach(recordValues, function (values, i) {
var o = {};
o.label = values;
o.value = values;
selectedValues.push(o);
});
} else if ((recordValues.length > 0 || recordValues[ 0 ] !== '') && defaultValues.length > 0) {
angular.forEach(defaultValues, function (values, i) {
var o = {};
o.label = values;
o.value = values;
selectedValues.push(o);
});
}
$scope.data[ field.name ] = selectedValues;
}
if (field.type.name == 'date') {
if (record[ field.label ] === '' && !isNaN(field.default)) {
var date = new Date();
$scope.data[ field.name ] = $filter('date')(date, "yyyy-MM-dd");
$scope.minDate = $filter('date')(record[ field.label ], "yyyy-MM-dd");
} else if (record[ field.label ] === '' && isNaN(field.default)) {
$scope.data[ field.name ] = $filter('date')(field.default, "yyyy-MM-dd");
$scope.minDate = $filter('date')(field.default, "yyyy-MM-dd");
} else {
$scope.data[ field.name ] = $filter('date')(record[ field.label ], "yyyy-MM-dd");
$scope.minDate = $filter('date')(record[ field.label ], "yyyy-MM-dd");
}
}
if (field.type.name == 'time') {
var date = new Date();
$scope.timeField = true;
$scope.timeLabels.push(field.name);
if (record[ field.label ] !== '') {
var selectedTime = record[ field.label ].split(':');
date.setHours(selectedTime[ 0 ]);
date.setMinutes(selectedTime[ 1 ]);
$scope.data[ field.name ] = date;
} else if (field.default !== '') {
var defaultTime = field.default.split(':');
date.setHours(defaultTime[ 0 ]);
date.setMinutes(defaultTime[ 1 ]);
$scope.data[ field.name ] = date;
} else {
$scope.data[ field.name ] = date;
}
}
if (field.name !== 'ticket_title') {
editFields.push(field)
}
}
if (field.type.name === "text" && field.editable) {
editableTextFields.push(field);
if (record[ field.label ] !== '') {
$scope.data[ field.name ] = record[ field.label ];
} else {
$scope.data[ field.name ] = field.default;
}
}
});
var newEditFields = [];
angular.forEach(editFields, function (field, i) {
var isDeleted = false;
if (field.type.name === "reference") {
if (field.type.refersTo[ 0 ] === undefined || availableModules[ field.type.refersTo[ 0 ] ] === undefined) {
isDeleted = true;
}
}
if (!isDeleted) {
if (field.type.name === "reference") {
$scope.referenceFields.push(field.name);
}
newEditFields.push(field);
}
if (field.type.name === 'reference' && availableModules[ field.type.refersTo[ 0 ] ] === undefined) {
$scope.nonAvailableReferenceFields.push(field.name);
}
});
editFields = newEditFields;
$scope.fields = splitFields(editFields, 2);
if (editableTextFields.length !== 0) {
$scope.textFieldsEnabled = true;
$scope.editableText = editableTextFields;
}
})
}
}