first commit

This commit is contained in:
BACHIR SOULDI
2025-09-28 08:49:37 +01:00
commit 2794e62571
16819 changed files with 2664196 additions and 0 deletions

View File

@@ -0,0 +1,964 @@
/*+***********************************************************************************
* 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) {