Files
BACHIR SOULDI 2794e62571 first commit
2025-09-28 08:49:37 +01:00

238 lines
8.1 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
mobileapp.controller('VtigerEditController', function ($scope, $api, $mdToast, $filter, $q) {
var url = jQuery.url();
$scope.module = url.param('module');
$scope.record = url.param('record');
$scope.describeObject = null;
$scope.fields = null;
$scope.createable = null;
$scope.updateable = null;
$scope.deleteable = null;
$scope.fieldsData = null;
$scope.editdata = [];
var _processFields = function(field, newrecord, value){
if(newrecord){
if (typeof field.default != 'undefined') field.raw = field.default;
else if (typeof field.type.defaultValue != 'undefined') field.raw = field.type.defaultValue;
}
if(!newrecord && value){
field.raw = value;
}
if($scope.module == 'Calendar' && field.name == 'activitytype'){
field.raw = 'Task';
}
switch(field.type.name) {
case 'date':
if(value){
field.raw = new Date(value);
}
else{
field.raw = new Date();
}
break;
case 'time':
if(value){
field.raw = new Date(value);
}
else{
field.raw = new Date();
}
break;
case 'reference':
if(value){
field.raw = value.value;
field.valueLabel = value.label;
}
break;
case 'owner':
if(value){
field.raw = value.value;
field.display = value.label;
}
break;
case 'boolean':
if(value){
field.raw = value == '1' ? true : false;
}
break;
}
return field;
};
var ignorefields = ['notime','starred','tags','modifiedby','reminder_time','imagename','taxclass','isconvertedfromlead','donotcall'];
//Function to prepare create data.
var prepareCreateData = function(newRecord, record){
var fields = $scope.fields;
var processedData = {};
for(var i=0; i < fields.length; i++) {
var field = fields[i];
if(ignorefields.indexOf(field.name) !== -1){
continue;
}
if(field.editable) {
//salutationtype type is not picklist
if(field.name == 'salutationtype'){
field.type.name = 'picklist';
}
if(newRecord){
//set default value
if(field.default){
field.raw = field.default;
}
//set today date as default date.
if(!field.default && (field.type.name == 'date' || field.type.name == 'time')){
field.raw = new Date();
}
}
else{
field.raw = record.record[field.name];
}
//Process the field data
if(newRecord){
field = _processFields(field, true);
}
else{
field = _processFields(field, false, record.record[field.name]);
}
processedData[field.name] = field;
}
}
$scope.fieldsData = processedData;
};
$api('describe', {module: $scope.module}, function (e, r) {
$scope.describeObject = r.describe;
$scope.fields = $scope.describeObject.fields;
$scope.createable = $scope.describeObject.createable;
$scope.updateable = $scope.describeObject.updateable;
$scope.deleteable = $scope.describeObject.deleteable;
if($scope.record){
$scope.loadFields();
}
else{
if ($scope.userinfo) {
prepareCreateData(true);
} else {
$scope.$root.$on('UserInfo.Changed', function(){
prepareCreateData(true);
});
}
}
});
$scope.gobacktoUrl = function () {
window.history.back();
};
$scope.loadFields = function () {
$api('fetchRecord', {module: $scope.module, record: $scope.record, view_mode:'web'}, function (e, r) {
if(r){
prepareCreateData(false, r);
$scope.record = r.record.id;
}
});
};
$scope.editdata = {};
$scope.processEditData = function(fieldsData) {
for (var index in fieldsData) {
var field = fieldsData[index];
var value = field.raw;
if(!value) value='';
switch (field.type.name){
//Should convert date time to utc.
case 'date' :
value = field.raw;
value = moment.utc(value).format('MM-DD-YYYY');
break;
case 'time' :
value = field.raw;
value = moment.utc(value).format('HH:mm:ss');
break;
}
if(field.editable){
$scope.editdata[field.name] = value;
}
}
};
$scope.isValid = function(form){
if(!form.$valid) {
return false;
}
return true;
};
$scope.saveThisRecord = function (editForm) {
if(!$scope.isValid(editForm)) {
var toast = $mdToast.simple().content('Mandatory Fields Missing').position($scope.getToastPosition()).hideDelay(1000);
$mdToast.show(toast);
return;
}
$scope.processEditData($scope.fieldsData);
$api('saveRecord', {module: $scope.module, record: $scope.record, values: $scope.editdata}, function (e, r) {
if (r) {
//split the ws id to get actual record id to fetch.
var id = r.record.id.split('x')[1];
var toast = $mdToast.simple().content('Record Saved Successfully!').position($scope.getToastPosition()).hideDelay(1000);
window.location.href = "index.php?module="+$scope.module+"&view=Detail&record="+id+"&app="+$scope.selectedApp;
} else {
var message = 'Some thing went wrong ! \n Save is not Succesfull.';
if (e.message) {
message = e.message;
}
var toast = $mdToast.simple().content(message).position($scope.getToastPosition()).hideDelay(1000);
$mdToast.show(toast);
//window.location.href = "index.php?module="+$scope.module+"&view=List&app="+$scope.selectedApp;
}
});
};
$scope.toastPosition = {
bottom: true,
top: false,
left: false,
right: true
};
$scope.getToastPosition = function () {
return Object.keys($scope.toastPosition)
.filter(function (pos) {
return $scope.toastPosition[pos];
}).join('');
};
//Search reference records
$scope.getMatchedReferenceFields = function (query, field) {
var deferred = $q.defer();
var refModule = field.type.refersTo[0];
if(query) {
$api('fetchReferenceRecords', {module: refModule, searchValue: query}, function (error, response) {
if(response) {
var result = [];
angular.forEach(response, function (item, key) {
item['valueLabel'] = item.label;
result.push(item)
});
return deferred.resolve(result);
}
});
}
return deferred.promise;
};
$scope.setReferenceFieldValue = function(item, field){
if(item){
field.raw = item.value;
field.display = item.label;
field.selectedItem = {'id' : item.id, 'label' : item.label};
}
};
});