PATH:
home
/
letacommog
/
crmleta
/
consumerportal
/
layouts
/
default
/
resources
/
components
/*+*********************************************************************************** * 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 Portal_IndexView_Component($scope, $api, $webapp, sharedModalService, $translatePartialLoader, $modal, $http) { var url = purl(); $scope.module = url.param('module'); $scope.pageInitialized = false; $scope.searchQ = { onlymine: true } $scope.pageNo = 0; $scope.headers = null; $scope.records = null; $scope.extheaders = null; $scope.extrecords = null; $scope.currentPage = 1; $scope.pageSize = 10; $scope.isCreatable = false; $scope.isEditable = false; $scope.exportEnabled = false; var availableModules = JSON.parse(localStorage.getItem('modules')); var currentModule = $scope.module; var allowedModules = ['HelpDesk', 'Documents']; if (currentModule !== undefined) { var ptitleLabel = availableModules[ currentModule ].uiLabel; $scope.ptitle = ptitleLabel; //set creatable true if (allowedModules.indexOf(currentModule) >= 0) { $scope.isCreatable = availableModules[ currentModule ].create; } $scope.filterPermissions = availableModules[currentModule].recordvisibility; } if ($translatePartialLoader !== undefined) { $translatePartialLoader.addPart('home'); $translatePartialLoader.addPart($scope.module); } $scope.$watch('searchQ.onlymine', function (nvalue, ovalue) { if (nvalue != ovalue) { $scope.loadRecords($scope.pageNo); $scope.currentPage = 1; } }); if ($scope.module !== 'HelpDesk') { localStorage.removeItem('currentStatus'); } setTimeout(function () { $webapp.busy(); if ($scope.module !== undefined) $scope.loadRecords(); }, 500); $scope.loadRecords = function (pageNo) { var params = {}; $webapp.busy(false); $scope.itemsPerPage = 10; if ($scope.module !== undefined) var label = availableModules[ $scope.module ].label; if ($scope.searchQ.onlymine) { $scope.searchQ.mode = 'mine'; } else { $scope.searchQ.mode = 'all'; } if ($scope.sortParams === undefined) { params = { 'mode': $scope.searchQ.mode, 'page': pageNo } } else if ($scope.sortParams !== undefined) { params = $scope.sortParams; } $api.get($scope.module+'/FetchRecords', { label: label, q: params }).success(function (result) { $webapp.busy(false); $scope.pageInitialized = true; if (result.count === undefined && $scope.module !== undefined && $scope.module !== 'HelpDesk') { alert(result.message); window.location.href = "index.php?view=Logout"; } $scope.headers = result.headers; $scope.records = result.records; $scope.edits = result.editLabels; $scope.totalPages = result.count; }); } $scope.ChangeLocation = function (record) { var url = "index.php?module="+$scope.module+"&view=Detail&id="+record.id; window.location = url; } $scope.hoverIn = function () { $scope.hoverEdit = true; }; $scope.hoverOut = function () { $scope.hoverEdit = false; }; $scope.downloadFile = function (recordId) { window.location.href = 'index.php?module='+$scope.module+'&api=DownloadFile&recordId='+recordId; }; $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.pageChanged = function (pageNo) { $scope.loadPage = pageNo - 1; if ($scope.sortParams !== undefined) { $scope.sortParams.page = pageNo - 1; $scope.loadRecords(); } else { $scope.loadRecords(pageNo - 1); } } //Generic craete record Modal. $scope.createRecord = function (module) { var modalInstance = $modal.open({ templateUrl: "createRecordModal.template", controller: Portal_CreateView_Component, backdrop: "static", size: "lg", resolve: { module: function () { return $scope.module; }, api: function () { return $api; }, webapp: function () { return $webapp; }, language: function () { return $scope.$parent.language }, editStatus: function () { return false; } } }); } $scope.checkRecordsVisibility = function (filterValue) { var returnValue; switch (filterValue) { case "1": returnValue = true; break; case "0": returnValue = false; break; case "2": returnValue = false; break; default: returnValue = false; } return returnValue; } } function Portal_DetailView_Component($scope, $api, $webapp, $translatePartialLoader, $modal) { var url = purl(); $scope.module = url.param('module'); $scope.id = url.param('id'); $scope.pageInitialized = false; $scope.splitContentView = false; $scope.record = null; $scope.blocks = []; $scope.fields = []; $scope.isEditable = false; $scope.isCommentCreateable = true; $scope.updatesEnabled = false; $scope.commentsEnabled = false; $scope.comments = []; $scope.newcomment = {}; var parentModules = { "ProjectTask": "Project", "ProjectMilestone": "Project" }; var availableModules = JSON.parse(localStorage.getItem('modules')); $scope.ptitle = availableModules[ $scope.module ].uiLabel; // Checks and logic added to provide bread crumb navigation. if (parentModules.hasOwnProperty($scope.module)) { $scope.ptitle = availableModules[ parentModules[ $scope.module ] ].uiLabel; $scope.childModuleUiLabel = availableModules[ $scope.module ].uiLabel; } //Set editable true $scope.isEditable = availableModules[ $scope.module ].edit; $scope.updates = []; if ($translatePartialLoader !== undefined) { $translatePartialLoader.addPart('home'); $translatePartialLoader.addPart($scope.module); } if ($scope.module !== 'HelpDesk') { localStorage.removeItem('currentStatus'); } setTimeout(function () { $scope.loadRecord(); }, 300); $scope.loadRecord = function () { var language = $scope.$parent.language; $api.get($scope.module+'/FetchRelatedModules').success(function (modules) { var relatedModules = modules; angular.forEach(relatedModules, function (relModule, i) { if (relModule.name === 'History') { $scope.updatesEnabled = (relModule.value === 1) ? true : false; relatedModules[ i ].uiLabel = 'History'; } if (relModule.name === 'ModComments') { $scope.commentsEnabled = (relModule.value === 1) ? true : false; relatedModules[ i ].uiLabel = 'ModComments'; } if (relModule.name === 'ProjectTask') { $scope.projectTaskEnabled = (relModule.value === 1) ? true : false; relatedModules[ i ].uiLabel = availableModules.ProjectTask.uiLabel; } if (relModule.name === 'ProjectMilestone') { $scope.projectMilestoneEnabled = (relModule.value === 1) ? true : false; relatedModules[ i ].uiLabel = availableModules.ProjectMilestone.uiLabel; } if (relModule.name === 'Documents') { $scope.documentsEnabled = (relModule.value === 1) ? true : false; relatedModules[ i ].uiLabel = availableModules.Documents.uiLabel; } }); $scope.relatedModules = relatedModules; if ($scope.updatesEnabled || $scope.commentsEnabled || $scope.projectTaskEnabled || $scope.projectMilestoneEnabled) { $scope.splitContentView = true; } }); $webapp.busy(); $scope.parentId = url.param('parentId'); $api.get($scope.module+'/FetchRecord', { id: $scope.id, parentId: $scope.parentId, language: language }).success(function (result) { $webapp.busy(false); if (result.record === undefined && result.message !== undefined) { if (result.message === 'Record not Accessible') { alert("Record is not accessible."); var moduleLabel = $scope.module; if ($scope.module === 'ProjectTask' || $scope.module === 'ProjectMilestone') moduleLabel = 'Project' window.location.href = "index.php?module="+moduleLabel; } else if (result.message === 'Contacts module is disabled') { alert("Contacts module has been disabled.") window.location.href = "index.php?view=Logout"; } } $scope.pageInitialized = true; $scope.header = result.record.identifierName.label; $scope.record = result.record; $scope.edits = result.editLabels; $scope.documentExists = true; if (result[ $scope.module ] !== undefined) { $scope.record.referenceFields = result[ $scope.module ].referenceFields; } if ($scope.module === 'HelpDesk') { $scope.HelpDeskStatus = result.HelpDesk.status; $scope.HelpDeskCloseLabel = result.HelpDesk.closeLabel; $scope.HelpDeskIsStatusEditable = result.HelpDesk.isStatusEditable; if (result.HelpDesk.referenceFields !== undefined) $scope.record.referenceFields = result.HelpDesk.referenceFields; } //Adding quote accept ability if ($scope.module === 'Quotes') { $scope.quoteStage = result.Quotes.stage; $scope.quoteAcceptLabel = result.Quotes.acceptLabel; $scope.$watch('quoteStage', function (nvalue, ovalue) { $scope.quoteAccepted = false; if (nvalue != ovalue) { if (nvalue.toUpperCase() != 'ACCEPTED') { $scope.quoteAccepted = true; } } else if (ovalue.toUpperCase() != 'ACCEPTED') { $scope.quoteAccepted = true; } }); } if ($scope.module === 'Documents') { $scope.documentExists = result.record.documentExists; } if ($scope.commentsEnabled) { $scope.loadComments(); } if ($scope.updatesEnabled) { $scope.loadUpdates(); } if ($scope.projectTaskEnabled) { $scope.loadProjectTasks(); } if ($scope.projectMilestoneEnabled) { $scope.loadProjectMilestones(); } if ($scope.documentsEnabled) { $scope.loadDocuments(); } }); } $scope.selectedTab = function (selected) { $scope.selection = selected; } $scope.loadComments = function (pageNo) { $scope.commentsLoaded = false; $scope.noComments = false; if (pageNo === undefined) $scope.commentPageNo = 0; else $scope.commentPageNo = pageNo $scope.parentId = url.param('parentId'); var params = { 'relatedModule': 'ModComments', 'id': $scope.id, 'parentId': $scope.parentId, 'page': $scope.commentPageNo } $api.get($scope.module+'/FetchRelatedRecords', params).success(function (comments) { var comments = comments.comments; if (comments === null) { $scope.noComments = true; $scope.commentsLoaded = false; } if (comments !== null) var commentCount = comments.length; var commentList = []; if ($scope.commentPageNo == 0) { angular.forEach(comments, function (comment) { commentList.push(comment); }); var scopeComments = angular.copy(commentList); $scope.comments = scopeComments; if (commentCount < 10) { $scope.commentsLoaded = true; } } else { if (comments === null) $scope.commentsLoaded = true; var newCommentList = []; angular.forEach(comments, function (comment) { if (angular.isObject(comment)) $scope.comments.push(comment); }); if (commentCount < 10) { $scope.commentsLoaded = true; } } }); } $scope.addComment = function (validity) { $scope.parentId = url.param('parentId') !== undefined ? url.param('parentId') : ''; $scope.newcomment.parentId = $scope.parentId; $scope.comments = $scope.comments || {}; $scope.newcomment.related_to = $scope.id; if (validity) { $scope.commentValidate = false; $scope.savingComment = true; $webapp.busy(); $api.post('ModComments/AddComment', {comment: $scope.newcomment}).success(function (comment) { $webapp.busy(false); if ($scope.comments !== null) { $scope.comments = $scope.comments || []; $scope.loadComments($scope.commentsPageNo) $scope.comments.unshift(comment); } else { $scope.comments.push(comment); } $scope.savingComment = false; $scope.newcomment = {}; }); } else { $scope.commentValidate = true; return false; } }; $scope.loadUpdates = function (pageNo, createdStatus) { var language = $scope.$parent.language; if ($scope.module == 'ProjectTask' || $scope.module == 'ProjectMilestone') { var parentId = $scope.parentId; } if (pageNo === undefined) { $scope.historyPageNo = 0; } else { $scope.historyPageNo = pageNo } $api.get($scope.module+'/FetchHistory', { id: $scope.id, page: $scope.historyPageNo, language: language, parentId: parentId }).success(function (updates) { $webapp.busy(false); $scope.updatesLoaded = false; if (createdStatus === undefined) { $scope.created = true; $scope.noUpdates = false; } var recordUpdates = updates.records; if (recordUpdates === undefined) { $scope.noUpdates = true; $scope.updatesLoaded = false; } if (updates.records !== undefined) $scope.updateCount = recordUpdates.count; if (recordUpdates !== null) { if ($scope.historyPageNo == 0) { var updateList = []; angular.forEach(recordUpdates, function (recUpdate) { if (recUpdate.created === undefined) { $scope.createdUndefined = true; updateList.push(recUpdate); } else if (recUpdate.created !== undefined && $scope.created) { if ($scope.created) { updateList.push(recUpdate) $scope.created = false; $scope.noUpdates = false; } } }); $scope.updates = angular.copy(updateList); } else { if (recordUpdates === undefined) $scope.updatesLoaded = true; angular.forEach(recordUpdates, function (update) { if (angular.isObject(update)) { if (update.created === undefined) { $scope.updates.push(update); } else if (update.created !== undefined && $scope.created) { $scope.updates.push(update); $scope.created = false; $scope.updatesLoaded = true; } } }); } } else $scope.updates = ''; }); }; $scope.loadDocuments = function (pageNo) { if (pageNo === undefined) { $scope.documentsPageNo = 0; } else { $scope.documentsPageNo = pageNo } var params = { 'relatedModule': 'Documents', 'id': $scope.id, 'relatedModuleLabel': 'Documents', 'page': $scope.documentsPageNo } $api.get($scope.module+'/FetchRelatedRecords', params).success(function (result) { // $webapp.busy(false); $scope.documentsLoaded = false; $scope.noDocuments = false; var documentsCount = result.records.length; if (documentsCount === 0) { $scope.noDcouments = true; $scope.documentsLoaded = false; } if ($scope.documentsPageNo === 0) { $scope.documentsrecords = result.records; $scope.documentsheaders = result.headers; if (documentsCount < 10) { $scope.documentsLoaded = true; } } else { if (documentsCount === 0) $scope.documentsLoaded = true; var documentsRecords = angular.copy(result.records) angular.forEach(documentsRecords, function (documentRecord) { $scope.documentsrecords.push(documentRecord) }); if (documentsCount < 10) { $scope.documentsLoaded = true; } } }); } $scope.downloadFile = function (module, recordId, parentId) { if (parentId === undefined) { parentId = $scope.parentId; window.location.href = 'index.php?module='+module+'&api=DownloadFile&recordId='+recordId; } else { window.location.href = 'index.php?module='+module+'&api=DownloadFile&recordId='+recordId+"&parentId="+parentId; } }; $scope.downloadCommentFile = function (module, commentId, attachmentId) { window.location.href = 'index.php?module='+module+'&api=DownloadFile&recordId='+commentId+"&attachmentId="+attachmentId; }; $scope.isLanguage = function (val) { if (angular.isObject(val)) return true; else return false; }; $scope.loadHistoryPage = function (pageNo) { $scope.loadUpdates(pageNo+1, $scope.created); $webapp.busy(false); } $scope.loadCommentsPage = function (pageNo) { $scope.loadComments(pageNo+1); $webapp.busy(false); } $scope.loadDocumentsPage = function (pageNo) { $scope.loadDocuments(pageNo+1); $webapp.busy(false); } $scope.ChangeLocation = function (module, id) { var url = "index.php?module="+module+"&view=Detail&id="+id+"&parentId="+$scope.id; window.location.href = url; } //Bread crumb navigation method. $scope.navigateBack = function (module) { var parentModules = { "ProjectMilestone": "Project", "ProjectTask": "Project" }; var url = "index.php?module="+module; if (parentModules.hasOwnProperty(module)) { module = parentModules[ module ]; url = "index.php?module="+module+"&view=Detail&id="+$scope.parentId; } window.location.href = url; } //Generic edit record. $scope.editRecord = function (module, id) { var modalInstance = $modal.open({ templateUrl: "editRecordModal.template", controller: Portal_CreateView_Component, backdrop: "static", size: "lg", resolve: { module: function () { return $scope.module; }, api: function () { return $api; }, webapp: function () { return $webapp; }, language: function () { return $scope.$parent.language }, editStatus: function () { return true; }, record: function () { return $scope.record; } } }); } } function PortalProfile_DetailView_Component($scope, $api, $webapp, $translatePartialLoader, $http, $q) { $scope.hoverEdit = []; if ($translatePartialLoader !== undefined) { $translatePartialLoader.addPart('home'); $translatePartialLoader.addPart('Profile'); } $webapp.busy(); $api.get('Portal'+'/FetchProfile').success(function (profile) { $webapp.busy(false); $scope.contactDetails = profile.customer_details; $scope.accountDetails = profile.company_details; }); $scope.saveContactDetails = function (data, field, type) { var d = $q.defer(); var emailRegex = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; var urlRegex = /^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/i var params = { "api": "saveRecord" }; var record = {}; record[ field ] = data; params.record = record; if (type !== undefined && type === 'email' && !emailRegex.test(data)) { return 'Please enter a valid email address.'; } if (type !== undefined && type === 'weburl' && !urlRegex.test(data)) { return 'Please enter a valid url.'; } if (field === 'lastname' && data === '') { return 'Last name is required'; } $webapp.busy(false); $http.post('index.php?module=Contacts&api=SaveRecord', params) .then(function (data) { if (data.data.success && angular.isObject(data.data.result)) { if (data.data.result[field] !== '' && data.data.result[ field ] == params.record[ field ]) { d.resolve(); } else if (data.data.result.code !== 'undefined' && data.data.result.code !== 'undefined') { d.reject(data.data.result.message); } else { d.reject('Record could not be saved'); } } else { d.reject('Result is not an object'); } }); return d.promise; } $scope.saveOrganizationDetails = function (data, field, type) { var d = $q.defer(); var emailRegex = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; var urlRegex = /^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/i var params = { "api": "saveRecord" }; var record = {}; record[ field ] = data; params.record = record; if (type !== undefined && type === 'email' && !emailRegex.test(data)) { return 'Please enter a valid email address.'; } if (type !== undefined && type === 'weburl' && !urlRegex.test(data)) { return 'Please enter a valid url.'; } if (field === 'accountname' && data === '') { return 'Organization name is required'; } $webapp.busy(false); $http.post('index.php?module=Accounts&api=SaveRecord', params) .then(function (data) { if (data.data.success && angular.isObject(data.data.result)) { if (data.data.result[field] !== '' && data.data.result[ field ] == params.record[ field ]) { d.resolve(); } else if (data.data.result.code !== 'undefined' && data.data.result.code !== 'undefined') { d.reject(data.data.result.message); } else { d.reject('Record could not be saved'); } } else { d.reject('Result is not an object'); } }); return d.promise; } $scope.hoverEditIn = function (item) { $scope.hoverEdit[ item ] = true; } $scope.hoverEditLeave = function (item) { $scope.hoverEdit[ item ] = false; } } function Portal_CreateView_Component($scope, module, $modalInstance, api, webapp, language, $translatePartialLoader, $filter, $http, editStatus, record) { $scope.data = {}; $scope.datemodel = {}; $scope.timemodel = {}; $scope.minDates = []; $scope.structure = null; var availableModules = JSON.parse(localStorage.getItem('modules')); $scope.moduleUiLabel = availableModules[ module ].uiLabel; if ($translatePartialLoader !== undefined) { $translatePartialLoader.addPart('home'); $translatePartialLoader.addPart(module); } 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; var labelField = structure.describe.labelFields; angular.forEach(structure.describe.fields, function (field) { 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 (field.type.name == 'string' && field.editable) { $scope.data[ field.name ] = field.default; if (field.name == labelField) { $scope.recordTitleLabel = field.label; $scope.data[ labelField ] = 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"); var minDate = $filter('date')(date, "yyyy-MM-dd"); $scope.minDates.push(field.name); $scope.minDates[ field.name ] = minDate; } else { $scope.data[ field.name ] = $filter('date')(field.default, "yyyy-MM-dd"); var minDate = $filter('date')(field.default, "yyyy-MM-dd"); $scope.minDates.push(field.name); $scope.minDates[ field.name ] = minDate; } } 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 !== labelField) { 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.nonAvailableReferenceFields.length > 0) { angular.forEach($scope.nonAvailableReferenceFields, function (label) { if ($scope.data[ label ] !== undefined && $scope.data[ label ] !== '') { $scope.data[ label ] = $scope.data[ label ].value; } 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; }) } webapp.busy(); if ($scope.data[ 'serviceid' ] !== undefined) { $scope.data[ 'serviceid' ] = $scope.data[ 'serviceid' ].id; } 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='+module+'&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.editRecord = angular.copy(record); $scope.header = record.identifierName.label; $scope.modalTitle = record[ $scope.header ]; $scope.disabledFields = []; api.get(module+'/DescribeModule').success(function (describe) { var editableFields = describe.describe.fields; var labelField = describe.describe.labelFields; $scope.labelField = labelField; $scope.editRecord.labelField = labelField; $scope.modalTitle = record[ $scope.header ]; angular.forEach(editableFields, function (field) { //If not editable push the field to disabledFields if (!field.editable) { $scope.disabledFields.push(field.name); $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 == labelField) { $scope.recordTitleLabel = field.label; $scope.data[ $scope.labelField ] = record[ field.label ]; } if (field.name == 'serialnumber') { $scope.disabledFields.push(field.name); $scope.disabledFields[ field.name ] = true; } 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 { if (field.name === 'account' || field.name === 'contact') { $scope.disabledFields.push(field.name); $scope.disabledFields[ field.name ] = true; } if (field.name === 'product' && module === 'Assets') { $scope.disabledFields.push(field.name); $scope.disabledFields[ field.name ] = true; } $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 (field.name === 'datesold' && module === 'Assets') { $scope.disabledFields.push(field.name); $scope.disabledFields[ field.name ] = true; } if (record[ field.label ] === '' && !isNaN(field.default)) { var date = new Date(); $scope.data[ field.name ] = $filter('date')(date, "yyyy-MM-dd"); var minDate = $filter('date')(record[ field.label ], "yyyy-MM-dd"); $scope.minDates.push(field.name); $scope.minDates[ field.name ] = minDate; } else if (record[ field.label ] === '' && isNaN(field.default)) { $scope.data[ field.name ] = $filter('date')(field.default, "yyyy-MM-dd"); var minDate = $filter('date')(field.default, "yyyy-MM-dd"); $scope.minDates.push(field.name); $scope.minDates[ field.name ] = minDate; } else { $scope.data[ field.name ] = $filter('date')(record[ field.label ], "yyyy-MM-dd"); var minDate = $filter('date')(record[ field.label ], "yyyy-MM-dd"); $scope.minDates.push(field.name); $scope.minDates[ field.name ] = minDate; } } 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 !== labelField) { 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; } }) } }
[+]
..
[-] Project.js
[edit]
[-] HelpDesk.js
[edit]
[-] Quotes.js
[edit]
[-] Faq.js
[edit]
[-] main.js
[edit]
[-] Portal.js
[edit]
[-] Documents.js
[edit]
[-] Products.js
[edit]
[-] home.js
[edit]