From 2a71bb2ea191a43ca5364186c8884cc880565e31 Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Fri, 25 Jul 2014 11:24:20 +0300 Subject: [PATCH] duplicate --- .../Crm/Resources/i18n/en_US/Meeting.json | 4 +- .../Resources/metadata/clientDefs/Call.json | 145 ++++++++++-------- .../metadata/clientDefs/Meeting.json | 145 ++++++++++-------- .../Espo/Resources/i18n/en_US/Global.json | 3 +- .../modules/crm/src/views/call/detail.js | 44 +++--- .../modules/crm/src/views/meeting/detail.js | 12 +- frontend/client/src/views/detail.js | 15 +- 7 files changed, 203 insertions(+), 165 deletions(-) diff --git a/application/Espo/Modules/Crm/Resources/i18n/en_US/Meeting.json b/application/Espo/Modules/Crm/Resources/i18n/en_US/Meeting.json index b24bdc2d46..3d59b7f1de 100644 --- a/application/Espo/Modules/Crm/Resources/i18n/en_US/Meeting.json +++ b/application/Espo/Modules/Crm/Resources/i18n/en_US/Meeting.json @@ -24,7 +24,9 @@ "Create Meeting": "Create Meeting", "Set Held": "Set Held", "Set Not Held": "Set Not Held", - "Send Invitations": "Send Invitations" + "Send Invitations": "Send Invitations", + "Saved as Held": "Saved as Held", + "Saved as Not Held": "Saved as Not Held" }, "presetFilters": { "planned": "Planned", diff --git a/application/Espo/Modules/Crm/Resources/metadata/clientDefs/Call.json b/application/Espo/Modules/Crm/Resources/metadata/clientDefs/Call.json index 28ccb9f4e5..8df29b2205 100644 --- a/application/Espo/Modules/Crm/Resources/metadata/clientDefs/Call.json +++ b/application/Espo/Modules/Crm/Resources/metadata/clientDefs/Call.json @@ -1,69 +1,80 @@ { - "controller": "Controllers.Record", - "views":{ - "detail":"Crm:Call.Detail" - }, - "sidePanels":{ - "detail":[ - { - "name":"attendees", - "label":"Attendees", - "view":"Record.Panels.Side", - "options":{ - "fields":[ - "users", - "contacts", - "leads" - ], - "mode":"detail" - } - } - ], - "edit":[ - { - "name":"attendees", - "label":"Attendees", - "view":"Record.Panels.Side", - "options":{ - "fields":[ - "users", - "contacts", - "leads" - ], - "mode":"edit" - } - } - ] - }, - "presetFilters": [ - { - "name":"planned", - "style": "primary", - "data": { - "status": { - "type": "in", - "value": ["Planned"] - } - } - }, - { - "name":"held", - "style": "success", - "data": { - "status": { - "type": "in", - "value": ["Held"] - } - } - }, - { - "name":"todays", - "data": { - "dateStart": { - "type": "today", - "dateTime": true - } - } - } - ] + "controller": "Controllers.Record", + "views":{ + "detail":"Crm:Call.Detail" + }, + "menu": { + "detail": { + "dropdown": [ + { + "label": "Duplicate", + "action": "duplicate", + "acl": "edit" + } + ] + } + }, + "sidePanels":{ + "detail":[ + { + "name":"attendees", + "label":"Attendees", + "view":"Record.Panels.Side", + "options":{ + "fields":[ + "users", + "contacts", + "leads" + ], + "mode":"detail" + } + } + ], + "edit":[ + { + "name":"attendees", + "label":"Attendees", + "view":"Record.Panels.Side", + "options":{ + "fields":[ + "users", + "contacts", + "leads" + ], + "mode":"edit" + } + } + ] + }, + "presetFilters": [ + { + "name":"planned", + "style": "primary", + "data": { + "status": { + "type": "in", + "value": ["Planned"] + } + } + }, + { + "name":"held", + "style": "success", + "data": { + "status": { + "type": "in", + "value": ["Held"] + } + } + }, + { + "name":"todays", + "data": { + "dateStart": { + "type": "today", + "dateTime": true + } + } + } + ] } diff --git a/application/Espo/Modules/Crm/Resources/metadata/clientDefs/Meeting.json b/application/Espo/Modules/Crm/Resources/metadata/clientDefs/Meeting.json index 3096d4d424..711774b909 100644 --- a/application/Espo/Modules/Crm/Resources/metadata/clientDefs/Meeting.json +++ b/application/Espo/Modules/Crm/Resources/metadata/clientDefs/Meeting.json @@ -1,69 +1,80 @@ { - "controller": "Controllers.Record", - "views":{ - "detail":"Crm:Meeting.Detail" - }, - "sidePanels":{ - "detail":[ - { - "name":"attendees", - "label":"Attendees", - "view":"Record.Panels.Side", - "options":{ - "fields":[ - "users", - "contacts", - "leads" - ], - "mode":"detail" - } - } - ], - "edit":[ - { - "name":"attendees", - "label":"Attendees", - "view":"Record.Panels.Side", - "options":{ - "fields":[ - "users", - "contacts", - "leads" - ], - "mode":"edit" - } - } - ] - }, - "presetFilters": [ - { - "name":"planned", - "style": "primary", - "data": { - "status": { - "type": "in", - "value": ["Planned"] - } - } - }, - { - "name":"held", - "style": "success", - "data": { - "status": { - "type": "in", - "value": ["Held"] - } - } - }, - { - "name":"todays", - "data": { - "dateStart": { - "type": "today", - "dateTime": true - } - } - } - ] + "controller": "Controllers.Record", + "views":{ + "detail":"Crm:Meeting.Detail" + }, + "menu": { + "detail": { + "dropdown": [ + { + "label": "Duplicate", + "action": "duplicate", + "acl": "edit" + } + ] + } + }, + "sidePanels":{ + "detail":[ + { + "name":"attendees", + "label":"Attendees", + "view":"Record.Panels.Side", + "options":{ + "fields":[ + "users", + "contacts", + "leads" + ], + "mode":"detail" + } + } + ], + "edit":[ + { + "name":"attendees", + "label":"Attendees", + "view":"Record.Panels.Side", + "options":{ + "fields":[ + "users", + "contacts", + "leads" + ], + "mode":"edit" + } + } + ] + }, + "presetFilters": [ + { + "name":"planned", + "style": "primary", + "data": { + "status": { + "type": "in", + "value": ["Planned"] + } + } + }, + { + "name":"held", + "style": "success", + "data": { + "status": { + "type": "in", + "value": ["Held"] + } + } + }, + { + "name":"todays", + "data": { + "dateStart": { + "type": "today", + "dateTime": true + } + } + } + ] } diff --git a/application/Espo/Resources/i18n/en_US/Global.json b/application/Espo/Resources/i18n/en_US/Global.json index 4215584985..b1d28b7bcb 100644 --- a/application/Espo/Resources/i18n/en_US/Global.json +++ b/application/Espo/Resources/i18n/en_US/Global.json @@ -112,7 +112,8 @@ "Primary": "Primary", "Save Filters": "Save Filters", "Administration": "Administration", - "Run Import": "Run Import" + "Run Import": "Run Import", + "Duplicate": "Duplicate" }, "messages": { "notModified": "You have not modified the record", diff --git a/frontend/client/modules/crm/src/views/call/detail.js b/frontend/client/modules/crm/src/views/call/detail.js index 9145c4c395..a1db4c329c 100644 --- a/frontend/client/modules/crm/src/views/call/detail.js +++ b/frontend/client/modules/crm/src/views/call/detail.js @@ -69,31 +69,31 @@ }, actionSetHeld: function () { - if (confirm(this.translate('Are you sure?'))) { - this.model.save({ - status: 'Held' - }, { - patch: true, - success: function () { - this.notify('Saved as Held', 'success'); - this.$el.find('button[data-action="sendInvitations"]').remove(); - }.bind(this), - }); - } + this.model.save({ + status: 'Held' + }, { + patch: true, + success: function () { + this.notify('Saved as Held', 'success'); + this.$el.find('button[data-action="sendInvitations"]').remove(); + this.$el.find('a[data-action="setHeld"]').remove(); + this.$el.find('a[data-action="setNotHeld"]').remove(); + }.bind(this), + }); }, actionSetNotHeld: function () { - if (confirm(this.translate('Are you sure?'))) { - this.model.save({ - status: 'Not Held' - }, { - patch: true, - success: function () { - this.notify('Saved as Not Held', 'success'); - this.$el.find('button[data-action="sendInvitations"]').remove(); - }.bind(this), - }); - } + this.model.save({ + status: 'Not Held' + }, { + patch: true, + success: function () { + this.notify('Saved as Not Held', 'success'); + this.$el.find('button[data-action="sendInvitations"]').remove(); + this.$el.find('a[data-action="setHeld"]').remove(); + this.$el.find('a[data-action="setNotHeld"]').remove(); + }.bind(this), + }); }, }); diff --git a/frontend/client/modules/crm/src/views/meeting/detail.js b/frontend/client/modules/crm/src/views/meeting/detail.js index 6e9f911360..3f9c3587c2 100644 --- a/frontend/client/modules/crm/src/views/meeting/detail.js +++ b/frontend/client/modules/crm/src/views/meeting/detail.js @@ -69,31 +69,31 @@ Espo.define('Crm:Views.Meeting.Detail', 'Views.Detail', function (Dep) { }, actionSetHeld: function () { - if (confirm(this.translate('Are you sure?'))) { this.model.save({ status: 'Held' }, { patch: true, success: function () { - this.notify('Saved as Held', 'success'); + Espo.Ui.success(this.translate('Saved as Held', 'labels', 'Meeting')); this.$el.find('button[data-action="sendInvitations"]').remove(); + this.$el.find('a[data-action="setHeld"]').remove(); + this.$el.find('a[data-action="setNotHeld"]').remove(); }.bind(this), }); - } }, actionSetNotHeld: function () { - if (confirm(this.translate('Are you sure?'))) { this.model.save({ status: 'Not Held' }, { patch: true, success: function () { - this.notify('Saved as Not Held', 'success'); + Espo.Ui.success(this.translate('Saved as Not Held', 'labels', 'Meeting')); this.$el.find('button[data-action="sendInvitations"]').remove(); + this.$el.find('a[data-action="setHeld"]').remove(); + this.$el.find('a[data-action="setNotHeld"]').remove(); }.bind(this), }); - } }, }); diff --git a/frontend/client/src/views/detail.js b/frontend/client/src/views/detail.js index 8db62fd575..5940727d72 100644 --- a/frontend/client/src/views/detail.js +++ b/frontend/client/src/views/detail.js @@ -269,7 +269,20 @@ Espo.define('Views.Detail', 'Views.Main', function (Dep) { }); }.bind(this)); }.bind(this)); - } + }, + + actionDuplicate: function () { + var attributes = Espo.Utils.cloneDeep(this.model.attributes); + delete attributes.id; + + var url = '#' + this.scope + '/create'; + + this.getRouter().dispatch(this.scope, 'create', { + attributes: attributes, + }); + this.getRouter().navigate(url, {trigger: false}); + }, + }); });