diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/hr/static/src/js | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/hr/static/src/js')
| -rw-r--r-- | addons/hr/static/src/js/chat.js | 74 | ||||
| -rw-r--r-- | addons/hr/static/src/js/language.js | 27 | ||||
| -rw-r--r-- | addons/hr/static/src/js/many2one_avatar_employee.js | 43 | ||||
| -rw-r--r-- | addons/hr/static/src/js/standalone_m2o_avatar_employee.js | 61 |
4 files changed, 205 insertions, 0 deletions
diff --git a/addons/hr/static/src/js/chat.js b/addons/hr/static/src/js/chat.js new file mode 100644 index 00000000..9bae9d57 --- /dev/null +++ b/addons/hr/static/src/js/chat.js @@ -0,0 +1,74 @@ +odoo.define('hr.employee_chat', function (require) { +'use strict'; + var viewRegistry = require('web.view_registry'); + + var FormController = require('web.FormController'); + var FormView = require('web.FormView'); + var FormRenderer = require('web.FormRenderer'); + + var KanbanController = require('web.KanbanController'); + var KanbanView = require('web.KanbanView'); + var KanbanRenderer = require('web.KanbanRenderer'); + var KanbanRecord = require('web.KanbanRecord'); + + const { Component } = owl; + + // CHAT MIXIN + var ChatMixin = { + /** + * @override + */ + _render: function () { + var self = this; + return this._super.apply(this, arguments).then(function () { + var $chat_button = self.$el.find('.o_employee_chat_btn'); + $chat_button.off('click').on('click', self._onOpenChat.bind(self)); + }); + }, + + destroy: function () { + if (this.$el) { + this.$el.find('.o_employee_chat_btn').off('click'); + } + return this._super(); + }, + + _onOpenChat: function (ev) { + ev.preventDefault(); + ev.stopImmediatePropagation(); + const env = Component.env; + env.messaging.openChat({ employeeId: this.state.data.id }); + return true; + }, + }; + + // USAGE OF CHAT MIXIN IN FORM VIEWS + var EmployeeFormRenderer = FormRenderer.extend(ChatMixin); + + var EmployeeFormView = FormView.extend({ + config: _.extend({}, FormView.prototype.config, { + Controller: FormController, + Renderer: EmployeeFormRenderer + }), + }); + + viewRegistry.add('hr_employee_form', EmployeeFormView); + + // USAGE OF CHAT MIXIN IN KANBAN VIEWS + var EmployeeKanbanRecord = KanbanRecord.extend(ChatMixin); + + var EmployeeKanbanRenderer = KanbanRenderer.extend({ + config: Object.assign({}, KanbanRenderer.prototype.config, { + KanbanRecord: EmployeeKanbanRecord, + }), + }); + + var EmployeeKanbanView = KanbanView.extend({ + config: _.extend({}, KanbanView.prototype.config, { + Controller: KanbanController, + Renderer: EmployeeKanbanRenderer + }), + }); + + viewRegistry.add('hr_employee_kanban', EmployeeKanbanView); +}); diff --git a/addons/hr/static/src/js/language.js b/addons/hr/static/src/js/language.js new file mode 100644 index 00000000..35140c7f --- /dev/null +++ b/addons/hr/static/src/js/language.js @@ -0,0 +1,27 @@ +odoo.define('hr.employee_language', function (require) { +'use strict'; + +var FormController = require('web.FormController'); +var FormView = require('web.FormView'); +var viewRegistry = require('web.view_registry'); + +var EmployeeFormController = FormController.extend({ + saveRecord: function () { + var self = this; + return this._super.apply(this, arguments).then(function () { + if (arguments[0].indexOf('lang') >= 0) { + self.do_action('reload_context'); + } + }); + }, +}); + +var EmployeeProfileFormView = FormView.extend({ + config: _.extend({}, FormView.prototype.config, { + Controller: EmployeeFormController, + }), +}); + +viewRegistry.add('hr_employee_profile_form', EmployeeProfileFormView); +return EmployeeProfileFormView; +}); diff --git a/addons/hr/static/src/js/many2one_avatar_employee.js b/addons/hr/static/src/js/many2one_avatar_employee.js new file mode 100644 index 00000000..0d5a245a --- /dev/null +++ b/addons/hr/static/src/js/many2one_avatar_employee.js @@ -0,0 +1,43 @@ +odoo.define('hr.Many2OneAvatarEmployee', function (require) { + "use strict"; + + // This module defines a variant of the Many2OneAvatarUser field widget, + // to support many2one fields pointing to 'hr.employee'. It also defines the + // kanban version of this widget. + // + // Usage: + // <field name="employee_id" widget="many2one_avatar_employee"/> + + const fieldRegistry = require('web.field_registry'); + const { Many2OneAvatarUser, KanbanMany2OneAvatarUser } = require('mail.Many2OneAvatarUser'); + + const { Component } = owl; + + const Many2OneAvatarEmployeeMixin = { + supportedModels: ['hr.employee', 'hr.employee.public'], + + //---------------------------------------------------------------------- + // Private + //---------------------------------------------------------------------- + + /** + * @override + */ + async _onAvatarClicked(ev) { + ev.stopPropagation(); // in list view, prevent from opening the record + const env = Component.env; + await env.messaging.openChat({ employeeId: this.value.res_id }); + } + }; + + const Many2OneAvatarEmployee = Many2OneAvatarUser.extend(Many2OneAvatarEmployeeMixin); + const KanbanMany2OneAvatarEmployee = KanbanMany2OneAvatarUser.extend(Many2OneAvatarEmployeeMixin); + + fieldRegistry.add('many2one_avatar_employee', Many2OneAvatarEmployee); + fieldRegistry.add('kanban.many2one_avatar_employee', KanbanMany2OneAvatarEmployee); + + return { + Many2OneAvatarEmployee, + KanbanMany2OneAvatarEmployee, + }; +}); diff --git a/addons/hr/static/src/js/standalone_m2o_avatar_employee.js b/addons/hr/static/src/js/standalone_m2o_avatar_employee.js new file mode 100644 index 00000000..64da43ec --- /dev/null +++ b/addons/hr/static/src/js/standalone_m2o_avatar_employee.js @@ -0,0 +1,61 @@ +odoo.define('hr.StandaloneM2OAvatarEmployee', function (require) { + 'use strict'; + + const StandaloneFieldManagerMixin = require('web.StandaloneFieldManagerMixin'); + const Widget = require('web.Widget'); + + const { Many2OneAvatarEmployee } = require('hr.Many2OneAvatarEmployee'); + + const StandaloneM2OAvatarEmployee = Widget.extend(StandaloneFieldManagerMixin, { + className: 'o_standalone_avatar_employee', + + /** + * @override + */ + init(parent, value) { + this._super(...arguments); + StandaloneFieldManagerMixin.init.call(this); + this.value = value; + }, + /** + * @override + */ + willStart() { + return Promise.all([this._super(...arguments), this._makeAvatarWidget()]); + }, + /** + * @override + */ + start() { + this.avatarWidget.$el.appendTo(this.$el); + return this._super(...arguments); + }, + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * Create a record, and initialize and start the avatar widget. + * + * @private + * @returns {Promise} + */ + async _makeAvatarWidget() { + const modelName = 'hr.employee'; + const fieldName = 'employee_id'; + const recordId = await this.model.makeRecord(modelName, [{ + name: fieldName, + relation: modelName, + type: 'many2one', + value: this.value, + }]); + const state = this.model.get(recordId); + this.avatarWidget = new Many2OneAvatarEmployee(this, fieldName, state); + this._registerWidget(recordId, fieldName, this.avatarWidget); + return this.avatarWidget.appendTo(document.createDocumentFragment()); + }, + }); + + return StandaloneM2OAvatarEmployee; +}); |
