From a0fd9e05e808079b948c72535fe4e72eb84665c4 Mon Sep 17 00:00:00 2001 From: yuri Date: Thu, 29 Dec 2016 17:24:35 +0200 Subject: [PATCH] read only param --- .../Espo/Resources/i18n/en_US/Admin.json | 3 +- .../Resources/i18n/en_US/FieldManager.json | 3 +- .../Espo/Resources/metadata/fields/array.json | 4 ++ .../Resources/metadata/fields/arrayInt.json | 4 ++ .../Espo/Resources/metadata/fields/bool.json | 4 ++ .../Resources/metadata/fields/currency.json | 4 ++ .../Espo/Resources/metadata/fields/date.json | 4 ++ .../Resources/metadata/fields/datetime.json | 4 ++ .../metadata/fields/datetimeOptional.json | 4 ++ .../Espo/Resources/metadata/fields/enum.json | 4 ++ .../Resources/metadata/fields/enumFloat.json | 4 ++ .../Resources/metadata/fields/enumInt.json | 4 ++ .../Espo/Resources/metadata/fields/float.json | 4 ++ .../Espo/Resources/metadata/fields/int.json | 4 ++ .../Espo/Resources/metadata/fields/link.json | 4 ++ .../metadata/fields/linkMultiple.json | 4 ++ .../Resources/metadata/fields/linkParent.json | 4 ++ .../Resources/metadata/fields/multiEnum.json | 4 ++ .../Espo/Resources/metadata/fields/text.json | 4 ++ .../Espo/Resources/metadata/fields/url.json | 4 ++ .../Resources/metadata/fields/varchar.json | 4 ++ .../Resources/metadata/fields/wysiwyg.json | 4 ++ client/src/views/admin/field-manager/edit.js | 54 ++++++++++++++++--- 23 files changed, 132 insertions(+), 8 deletions(-) diff --git a/application/Espo/Resources/i18n/en_US/Admin.json b/application/Espo/Resources/i18n/en_US/Admin.json index 63e7c8e6e9..c679afb079 100644 --- a/application/Espo/Resources/i18n/en_US/Admin.json +++ b/application/Espo/Resources/i18n/en_US/Admin.json @@ -146,7 +146,8 @@ "dynamicLogicReadOnly": "Conditions making field read-only", "dynamicLogicRequired": "Conditions making field required", "dynamicLogicOptions": "Conditional options", - "probabilityMap": "Stage Probabilities (%)" + "probabilityMap": "Stage Probabilities (%)", + "readOnly": "Read-only" }, "messages": { "upgradeVersion": "Your EspoCRM will be upgraded to version {version}. This can take some time.", diff --git a/application/Espo/Resources/i18n/en_US/FieldManager.json b/application/Espo/Resources/i18n/en_US/FieldManager.json index f76fab95fe..71125c439c 100644 --- a/application/Espo/Resources/i18n/en_US/FieldManager.json +++ b/application/Espo/Resources/i18n/en_US/FieldManager.json @@ -69,6 +69,7 @@ "lengthOfCut": "How long text can be before it will be cut.", "maxLength": "Max acceptable length of text.", "before": "The date value should be before the date value of the specified field.", - "after": "The date value should be after the date value of the specified field." + "after": "The date value should be after the date value of the specified field.", + "readOnly": "Field value can't be specified by user. But can be calculated by formula." } } diff --git a/application/Espo/Resources/metadata/fields/array.json b/application/Espo/Resources/metadata/fields/array.json index 74b2149f24..948c62e035 100644 --- a/application/Espo/Resources/metadata/fields/array.json +++ b/application/Espo/Resources/metadata/fields/array.json @@ -23,6 +23,10 @@ { "name":"audited", "type":"bool" + }, + { + "name":"readOnly", + "type":"bool" } ], "filter": true, diff --git a/application/Espo/Resources/metadata/fields/arrayInt.json b/application/Espo/Resources/metadata/fields/arrayInt.json index de16213149..cd90376ab2 100644 --- a/application/Espo/Resources/metadata/fields/arrayInt.json +++ b/application/Espo/Resources/metadata/fields/arrayInt.json @@ -22,6 +22,10 @@ { "name":"audited", "type":"bool" + }, + { + "name":"readOnly", + "type":"bool" } ], "filter": true, diff --git a/application/Espo/Resources/metadata/fields/bool.json b/application/Espo/Resources/metadata/fields/bool.json index c939f69286..bb1cb6f578 100644 --- a/application/Espo/Resources/metadata/fields/bool.json +++ b/application/Espo/Resources/metadata/fields/bool.json @@ -7,6 +7,10 @@ { "name":"audited", "type":"bool" + }, + { + "name":"readOnly", + "type":"bool" } ], "filter": true, diff --git a/application/Espo/Resources/metadata/fields/currency.json b/application/Espo/Resources/metadata/fields/currency.json index f065e39e20..667563a81a 100644 --- a/application/Espo/Resources/metadata/fields/currency.json +++ b/application/Espo/Resources/metadata/fields/currency.json @@ -16,6 +16,10 @@ { "name":"audited", "type":"bool" + }, + { + "name":"readOnly", + "type":"bool" } ], "actualFields":[ diff --git a/application/Espo/Resources/metadata/fields/date.json b/application/Espo/Resources/metadata/fields/date.json index 2ff7f78986..95bdb79f5f 100644 --- a/application/Espo/Resources/metadata/fields/date.json +++ b/application/Espo/Resources/metadata/fields/date.json @@ -51,6 +51,10 @@ { "name":"audited", "type":"bool" + }, + { + "name":"readOnly", + "type":"bool" } ], "filter": true, diff --git a/application/Espo/Resources/metadata/fields/datetime.json b/application/Espo/Resources/metadata/fields/datetime.json index 326ede53b5..b18b247bf1 100644 --- a/application/Espo/Resources/metadata/fields/datetime.json +++ b/application/Espo/Resources/metadata/fields/datetime.json @@ -48,6 +48,10 @@ { "name":"audited", "type":"bool" + }, + { + "name":"readOnly", + "type":"bool" } ], "filter": true, diff --git a/application/Espo/Resources/metadata/fields/datetimeOptional.json b/application/Espo/Resources/metadata/fields/datetimeOptional.json index 35d8f977b4..1c8c5f6bd8 100644 --- a/application/Espo/Resources/metadata/fields/datetimeOptional.json +++ b/application/Espo/Resources/metadata/fields/datetimeOptional.json @@ -48,6 +48,10 @@ { "name":"audited", "type":"bool" + }, + { + "name":"readOnly", + "type":"bool" } ], "actualFields":[ diff --git a/application/Espo/Resources/metadata/fields/enum.json b/application/Espo/Resources/metadata/fields/enum.json index 7003f2e48a..255d961423 100644 --- a/application/Espo/Resources/metadata/fields/enum.json +++ b/application/Espo/Resources/metadata/fields/enum.json @@ -27,6 +27,10 @@ { "name":"audited", "type":"bool" + }, + { + "name":"readOnly", + "type":"bool" } ], "filter": true, diff --git a/application/Espo/Resources/metadata/fields/enumFloat.json b/application/Espo/Resources/metadata/fields/enumFloat.json index 98ab198503..7132c4c359 100644 --- a/application/Espo/Resources/metadata/fields/enumFloat.json +++ b/application/Espo/Resources/metadata/fields/enumFloat.json @@ -11,6 +11,10 @@ { "name":"audited", "type":"bool" + }, + { + "name":"readOnly", + "type":"bool" } ], "filter": true, diff --git a/application/Espo/Resources/metadata/fields/enumInt.json b/application/Espo/Resources/metadata/fields/enumInt.json index 36bad21054..eedf7bf5e1 100644 --- a/application/Espo/Resources/metadata/fields/enumInt.json +++ b/application/Espo/Resources/metadata/fields/enumInt.json @@ -11,6 +11,10 @@ { "name":"audited", "type":"bool" + }, + { + "name":"readOnly", + "type":"bool" } ], "filter": true, diff --git a/application/Espo/Resources/metadata/fields/float.json b/application/Espo/Resources/metadata/fields/float.json index a3a65f4100..3850274344 100644 --- a/application/Espo/Resources/metadata/fields/float.json +++ b/application/Espo/Resources/metadata/fields/float.json @@ -20,6 +20,10 @@ { "name":"audited", "type":"bool" + }, + { + "name":"readOnly", + "type":"bool" } ], "filter": true, diff --git a/application/Espo/Resources/metadata/fields/int.json b/application/Espo/Resources/metadata/fields/int.json index 015da28340..8f26fc1299 100644 --- a/application/Espo/Resources/metadata/fields/int.json +++ b/application/Espo/Resources/metadata/fields/int.json @@ -24,6 +24,10 @@ { "name":"audited", "type":"bool" + }, + { + "name":"readOnly", + "type":"bool" } ], "filter": true diff --git a/application/Espo/Resources/metadata/fields/link.json b/application/Espo/Resources/metadata/fields/link.json index 62f22c1e06..2da2ee4f63 100644 --- a/application/Espo/Resources/metadata/fields/link.json +++ b/application/Espo/Resources/metadata/fields/link.json @@ -8,6 +8,10 @@ { "name":"audited", "type":"bool" + }, + { + "name":"readOnly", + "type":"bool" } ], "actualFields":[ diff --git a/application/Espo/Resources/metadata/fields/linkMultiple.json b/application/Espo/Resources/metadata/fields/linkMultiple.json index dc2957475f..aac937f85c 100644 --- a/application/Espo/Resources/metadata/fields/linkMultiple.json +++ b/application/Espo/Resources/metadata/fields/linkMultiple.json @@ -10,6 +10,10 @@ "type": "bool", "default": false, "hidden": true + }, + { + "name":"readOnly", + "type":"bool" } ], "actualFields":[ diff --git a/application/Espo/Resources/metadata/fields/linkParent.json b/application/Espo/Resources/metadata/fields/linkParent.json index ce93e8d6e8..9853fac684 100644 --- a/application/Espo/Resources/metadata/fields/linkParent.json +++ b/application/Espo/Resources/metadata/fields/linkParent.json @@ -13,6 +13,10 @@ { "name":"audited", "type":"bool" + }, + { + "name":"readOnly", + "type":"bool" } ], "actualFields":[ diff --git a/application/Espo/Resources/metadata/fields/multiEnum.json b/application/Espo/Resources/metadata/fields/multiEnum.json index aa7f6288a6..2377d62295 100644 --- a/application/Espo/Resources/metadata/fields/multiEnum.json +++ b/application/Espo/Resources/metadata/fields/multiEnum.json @@ -18,6 +18,10 @@ { "name":"audited", "type":"bool" + }, + { + "name":"readOnly", + "type":"bool" } ], "filter": true, diff --git a/application/Espo/Resources/metadata/fields/text.json b/application/Espo/Resources/metadata/fields/text.json index 4e56bf169e..25bd101b40 100644 --- a/application/Espo/Resources/metadata/fields/text.json +++ b/application/Espo/Resources/metadata/fields/text.json @@ -30,6 +30,10 @@ "default": 400, "min": 1, "tooltip": true + }, + { + "name":"readOnly", + "type":"bool" } ], "filter": true diff --git a/application/Espo/Resources/metadata/fields/url.json b/application/Espo/Resources/metadata/fields/url.json index 17d98a3241..b655e08f50 100644 --- a/application/Espo/Resources/metadata/fields/url.json +++ b/application/Espo/Resources/metadata/fields/url.json @@ -16,6 +16,10 @@ { "name":"audited", "type":"bool" + }, + { + "name":"readOnly", + "type":"bool" } ], "filter": true, diff --git a/application/Espo/Resources/metadata/fields/varchar.json b/application/Espo/Resources/metadata/fields/varchar.json index fbd4ce84ca..c3c7759cf1 100644 --- a/application/Espo/Resources/metadata/fields/varchar.json +++ b/application/Espo/Resources/metadata/fields/varchar.json @@ -21,6 +21,10 @@ { "name":"audited", "type":"bool" + }, + { + "name":"readOnly", + "type":"bool" } ], "filter": true diff --git a/application/Espo/Resources/metadata/fields/wysiwyg.json b/application/Espo/Resources/metadata/fields/wysiwyg.json index aaac3f3dc1..d348e0a372 100644 --- a/application/Espo/Resources/metadata/fields/wysiwyg.json +++ b/application/Espo/Resources/metadata/fields/wysiwyg.json @@ -25,6 +25,10 @@ { "name": "minHeight", "type": "int" + }, + { + "name":"readOnly", + "type":"bool" } ], "filter": true, diff --git a/client/src/views/admin/field-manager/edit.js b/client/src/views/admin/field-manager/edit.js index d58905712c..1339f0e59e 100644 --- a/client/src/views/admin/field-manager/edit.js +++ b/client/src/views/admin/field-manager/edit.js @@ -34,7 +34,7 @@ Espo.define('views/admin/field-manager/edit', ['view', 'model'], function (Dep, entityTypeWithTranslatedOptionsList: ['enum', 'multiEnum', 'array', 'phone'], - paramWithTooltipList: ['audited', 'required', 'default', 'min', 'max', 'maxLength', 'after', 'before'], + paramWithTooltipList: ['audited', 'required', 'default', 'min', 'max', 'maxLength', 'after', 'before', 'readOnly'], data: function () { return { @@ -91,6 +91,10 @@ Espo.define('views/admin/field-manager/edit', ['view', 'model'], function (Dep, this.model.set('type', this.type); } + this.listenTo(this.model, 'change:readOnly', function () { + this.readOnlyControl(); + }, this); + this.getModelFactory().create(this.scope, function (model) { if (!this.isNew) { this.type = model.getFieldType(this.field); @@ -181,7 +185,6 @@ Espo.define('views/admin/field-manager/edit', ['view', 'model'], function (Dep, if ( !this.getMetadata().get(['entityDefs', this.scope, 'fields', this.field, 'dynamicLogicRequiredDisabled']) && - !this.getMetadata().get(['entityDefs', this.scope, 'fields', this.field, 'readOnly'])&& !this.getMetadata().get(['fields', this.type, 'readOnly']) ) { this.model.set('dynamicLogicRequired', this.getMetadata().get(['clientDefs', this.scope, 'dynamicLogic', 'fields', this.field, 'required'])); @@ -194,8 +197,6 @@ Espo.define('views/admin/field-manager/edit', ['view', 'model'], function (Dep, if ( !this.getMetadata().get(['entityDefs', this.scope, 'fields', this.field, 'dynamicLogicReadOnlyDisabled']) && - !this.getMetadata().get(['entityDefs', this.scope, 'fields', this.field, 'readOnly']) - && !this.getMetadata().get(['fields', this.type, 'readOnly']) ) { this.model.set('dynamicLogicReadOnly', this.getMetadata().get(['clientDefs', this.scope, 'dynamicLogic', 'fields', this.field, 'readOnly'])); @@ -210,8 +211,6 @@ Espo.define('views/admin/field-manager/edit', ['view', 'model'], function (Dep, ~['enum', 'array', 'multiEnum'].indexOf(this.type) && !this.getMetadata().get(['entityDefs', this.scope, 'fields', this.field, 'dynamicLogicOptionsDisabled']) - && - !this.getMetadata().get(['entityDefs', this.scope, 'fields', this.field, 'readOnly']) ) { this.model.set('dynamicLogicOptions', this.getMetadata().get(['clientDefs', this.scope, 'dynamicLogic', 'options', this.field])); this.createFieldView(null, 'dynamicLogicOptions', null, { @@ -260,6 +259,49 @@ Espo.define('views/admin/field-manager/edit', ['view', 'model'], function (Dep, }, this); }, + readOnlyControl: function () { + if (this.model.get('readOnly')) { + this.hideField('dynamicLogicReadOnly'); + this.hideField('dynamicLogicRequired'); + this.hideField('dynamicLogicOptions'); + } else { + this.showField('dynamicLogicReadOnly'); + this.showField('dynamicLogicRequired'); + this.showField('dynamicLogicOptions'); + } + }, + + hideField: function (name) { + var f = function () { + var view = this.getView(name) + console.log(); + if (view) { + this.$el.find('.cell[data-name="'+name+'"]').addClass('hidden'); + view.setDisabled(); + } + }.bind(this); + if (this.isRendered()) { + f(); + } else { + this.once('after:render', f); + } + }, + + showField: function (name) { + var f = function () { + var view = this.getView(name) + if (view) { + this.$el.find('.cell[data-name="'+name+'"]').removeClass('hidden'); + view.setNotDisabled(); + } + }.bind(this); + if (this.isRendered()) { + f(); + } else { + this.once('after:render', f); + } + }, + createFieldView: function (type, name, readOnly, params, options, callback) { var viewName = (params || {}).view || this.getFieldManager().getViewName(type);