From 29788c353b241e11659453046b06a5f29eb02bbb Mon Sep 17 00:00:00 2001 From: yuri Date: Fri, 15 Jun 2018 15:18:43 +0300 Subject: [PATCH 1/4] link manager ui prevent existing link names --- client/src/views/admin/link-manager/modals/edit.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/client/src/views/admin/link-manager/modals/edit.js b/client/src/views/admin/link-manager/modals/edit.js index 2f87b6acce..9e442285fc 100644 --- a/client/src/views/admin/link-manager/modals/edit.js +++ b/client/src/views/admin/link-manager/modals/edit.js @@ -349,6 +349,18 @@ Espo.define('views/admin/link-manager/modals/edit', ['views/modal', 'views/admin break; } + var number = 1; + while (this.getMetadata().get(['entityDefs', this.scope, 'links', link])) { + link += number.toString(); + number++; + } + + var number = 1; + while (this.getMetadata().get(['entityDefs', entityForeign, 'links', linkForeign])) { + linkForeign += number.toString(); + number++; + } + this.model.set('link', link); this.model.set('linkForeign', linkForeign); From 88d159d4c646e2912e1dcd3c1f58af2b4228c672 Mon Sep 17 00:00:00 2001 From: yuri Date: Fri, 15 Jun 2018 15:28:45 +0300 Subject: [PATCH 2/4] field manager load language after save --- client/src/views/admin/field-manager/edit.js | 21 +++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/client/src/views/admin/field-manager/edit.js b/client/src/views/admin/field-manager/edit.js index 8d2045c7bb..580945575a 100644 --- a/client/src/views/admin/field-manager/edit.js +++ b/client/src/views/admin/field-manager/edit.js @@ -401,13 +401,24 @@ Espo.define('views/admin/field-manager/edit', ['view', 'model'], function (Dep, Espo.Ui.notify(false); this.enableButtons(); - this.getMetadata().load(function () { - this.getMetadata().storeToCache(); - this.trigger('after:save'); - }.bind(this), true); - this.updateLanguage(); + Promise.all([ + new Promise(function (resolve) { + this.getMetadata().load(function () { + this.getMetadata().storeToCache(); + resolve(); + }.bind(this), true); + }.bind(this)), + new Promise(function (resolve) { + this.getLanguage().load(function () { + resolve(); + }, true); + }.bind(this)) + ]).then(function () { + this.trigger('after:save'); + }.bind(this)); + this.model.fetchedAttributes = this.model.getClonedAttributes(); }, this); From 30909c497b77962a8e1de7ce6b47846495ea062c Mon Sep 17 00:00:00 2001 From: yuri Date: Mon, 18 Jun 2018 14:14:48 +0300 Subject: [PATCH 3/4] record dashlet populate assigned user --- .../Crm/Resources/metadata/dashlets/Calls.json | 1 + .../Crm/Resources/metadata/dashlets/Cases.json | 1 + .../Crm/Resources/metadata/dashlets/Leads.json | 1 + .../Resources/metadata/dashlets/Meetings.json | 1 + .../metadata/dashlets/Opportunities.json | 1 + .../crm/src/views/dashlets/activities.js | 18 +++++++++++++++++- .../src/views/dashlets/abstract/record-list.js | 11 +++++++++++ 7 files changed, 33 insertions(+), 1 deletion(-) diff --git a/application/Espo/Modules/Crm/Resources/metadata/dashlets/Calls.json b/application/Espo/Modules/Crm/Resources/metadata/dashlets/Calls.json index ba055e0ba6..55834d0cab 100644 --- a/application/Espo/Modules/Crm/Resources/metadata/dashlets/Calls.json +++ b/application/Espo/Modules/Crm/Resources/metadata/dashlets/Calls.json @@ -25,6 +25,7 @@ "sortBy": "dateStart", "asc": true, "displayRecords": 5, + "populateAssignedUser": true, "expandedLayout": { "rows": [ [ diff --git a/application/Espo/Modules/Crm/Resources/metadata/dashlets/Cases.json b/application/Espo/Modules/Crm/Resources/metadata/dashlets/Cases.json index beceb9ecfd..a9b7c33ee8 100644 --- a/application/Espo/Modules/Crm/Resources/metadata/dashlets/Cases.json +++ b/application/Espo/Modules/Crm/Resources/metadata/dashlets/Cases.json @@ -25,6 +25,7 @@ "sortBy": "createdAt", "asc": false, "displayRecords": 5, + "populateAssignedUser": true, "expandedLayout": { "rows": [ [ diff --git a/application/Espo/Modules/Crm/Resources/metadata/dashlets/Leads.json b/application/Espo/Modules/Crm/Resources/metadata/dashlets/Leads.json index 5e4a482986..7bb5732220 100644 --- a/application/Espo/Modules/Crm/Resources/metadata/dashlets/Leads.json +++ b/application/Espo/Modules/Crm/Resources/metadata/dashlets/Leads.json @@ -25,6 +25,7 @@ "sortBy": "createdAt", "asc": false, "displayRecords": 5, + "populateAssignedUser": true, "expandedLayout": { "rows": [ [ diff --git a/application/Espo/Modules/Crm/Resources/metadata/dashlets/Meetings.json b/application/Espo/Modules/Crm/Resources/metadata/dashlets/Meetings.json index 4501a44e82..df14f110ba 100644 --- a/application/Espo/Modules/Crm/Resources/metadata/dashlets/Meetings.json +++ b/application/Espo/Modules/Crm/Resources/metadata/dashlets/Meetings.json @@ -25,6 +25,7 @@ "sortBy": "dateStart", "asc": true, "displayRecords": 5, + "populateAssignedUser": true, "expandedLayout": { "rows": [ [ diff --git a/application/Espo/Modules/Crm/Resources/metadata/dashlets/Opportunities.json b/application/Espo/Modules/Crm/Resources/metadata/dashlets/Opportunities.json index f6309f9b00..ec6d07d4bb 100644 --- a/application/Espo/Modules/Crm/Resources/metadata/dashlets/Opportunities.json +++ b/application/Espo/Modules/Crm/Resources/metadata/dashlets/Opportunities.json @@ -25,6 +25,7 @@ "sortBy": "closeDate", "asc": true, "displayRecords": 5, + "populateAssignedUser": true, "expandedLayout": { "rows": [ [ diff --git a/client/modules/crm/src/views/dashlets/activities.js b/client/modules/crm/src/views/dashlets/activities.js index eec62777f8..549fd02fff 100644 --- a/client/modules/crm/src/views/dashlets/activities.js +++ b/client/modules/crm/src/views/dashlets/activities.js @@ -158,6 +158,8 @@ Espo.define('crm:views/dashlets/activities', ['views/dashlets/abstract/base', 'm var scope = data.scope; var attributes = {}; + this.populateAttributesAssignedUser(scope, attributes); + this.notify('Loading...'); var viewName = this.getMetadata().get('clientDefs.'+scope+'.modalViews.edit') || 'views/modals/edit'; this.createView('quickCreate', viewName, { @@ -175,6 +177,8 @@ Espo.define('crm:views/dashlets/activities', ['views/dashlets/abstract/base', 'm actionCreateMeeting: function () { var attributes = {}; + this.populateAttributesAssignedUser('Meeting', attributes); + this.notify('Loading...'); var viewName = this.getMetadata().get('clientDefs.Meeting.modalViews.edit') || 'views/modals/edit'; this.createView('quickCreate', viewName, { @@ -192,6 +196,8 @@ Espo.define('crm:views/dashlets/activities', ['views/dashlets/abstract/base', 'm actionCreateCall: function () { var attributes = {}; + this.populateAttributesAssignedUser('Call', attributes); + this.notify('Loading...'); var viewName = this.getMetadata().get('clientDefs.Call.modalViews.edit') || 'views/modals/edit'; this.createView('quickCreate', viewName, { @@ -204,7 +210,17 @@ Espo.define('crm:views/dashlets/activities', ['views/dashlets/abstract/base', 'm this.actionRefresh(); }, this); }.bind(this)); + }, + + populateAttributesAssignedUser: function (scope, attributes) { + if (this.getMetadata().get(['entityDefs', scope, 'fields', 'assignedUsers'])) { + attributes['assignedUsersIds'] = [this.getUser().id]; + attributes['assignedUsersNames'] = {}; + attributes['assignedUsersNames'][this.getUser().id] = this.getUser().get('name'); + } else { + attributes['assignedUserId'] = this.getUser().id; + attributes['assignedUserName'] = this.getUser().get('name'); + } } }); }); - diff --git a/client/src/views/dashlets/abstract/record-list.js b/client/src/views/dashlets/abstract/record-list.js index 449bdf03b5..95e78dca3b 100644 --- a/client/src/views/dashlets/abstract/record-list.js +++ b/client/src/views/dashlets/abstract/record-list.js @@ -140,6 +140,17 @@ Espo.define('views/dashlets/abstract/record-list', ['views/dashlets/abstract/bas actionCreate: function () { var attributes = this.getCreateAttributes() || {}; + if (this.getOption('populateAssignedUser')) { + if (this.getMetadata().get(['entityDefs', this.scope, 'fields', 'assignedUsers'])) { + attributes['assignedUsersIds'] = [this.getUser().id]; + attributes['assignedUsersNames'] = {}; + attributes['assignedUsersNames'][this.getUser().id] = this.getUser().get('name'); + } else { + attributes['assignedUserId'] = this.getUser().id; + attributes['assignedUserName'] = this.getUser().get('name'); + } + } + this.notify('Loading...'); var viewName = this.getMetadata().get('clientDefs.' + this.scope + '.modalViews.edit') || 'views/modals/edit'; this.createView('modal', viewName, { From 4e226ebcb75f2b6ec472b4aa04c3b22201a929d5 Mon Sep 17 00:00:00 2001 From: yuri Date: Mon, 18 Jun 2018 14:23:04 +0300 Subject: [PATCH 4/4] select records button disable --- client/src/views/modals/select-records.js | 13 ++++++++++++- client/src/views/record/list.js | 4 ++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/client/src/views/modals/select-records.js b/client/src/views/modals/select-records.js index 5d2551e959..83b26e51d9 100644 --- a/client/src/views/modals/select-records.js +++ b/client/src/views/modals/select-records.js @@ -91,6 +91,7 @@ Espo.define('views/modals/select-records', ['views/modal', 'search-manager'], fu name: 'select', style: 'primary', label: 'Select', + disabled: true, onClick: function (dialog) { var listView = this.getView('list'); @@ -193,10 +194,20 @@ Espo.define('views/modals/select-records', ['views/modal', 'search-manager'], fu checkAllResultDisabled: !this.massRelateEnabled, buttonsDisabled: true }, function (view) { - view.once('select', function (model) { + this.listenToOnce(view, 'select', function (model) { this.trigger('select', model); this.close(); }.bind(this)); + + if (this.multiple) { + this.listenTo(view, 'check', function () { + if (view.checkedList.length) { + this.enableButton('select'); + } else { + this.disableButton('select'); + } + }, this); + } }.bind(this)); }.bind(this)); diff --git a/client/src/views/record/list.js b/client/src/views/record/list.js index 3a243fd36e..1c6983d06b 100644 --- a/client/src/views/record/list.js +++ b/client/src/views/record/list.js @@ -161,6 +161,8 @@ Espo.define('views/record/list', 'view', function (Dep) { this.$el.find('.actions-button').attr('disabled', true); this.$el.find('.list > table tbody tr').removeClass('active'); } + + this.trigger('check'); }, 'click .action': function (e) { var $el = $(e.currentTarget); @@ -1002,6 +1004,8 @@ Espo.define('views/record/list', 'view', function (Dep) { } else { this.$el.find('.select-all').prop('checked', false); } + + this.trigger('check'); }, getRowActionsDefs: function () {