summaryrefslogtreecommitdiff
path: root/addons/hr/static/src/js
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/hr/static/src/js
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/hr/static/src/js')
-rw-r--r--addons/hr/static/src/js/chat.js74
-rw-r--r--addons/hr/static/src/js/language.js27
-rw-r--r--addons/hr/static/src/js/many2one_avatar_employee.js43
-rw-r--r--addons/hr/static/src/js/standalone_m2o_avatar_employee.js61
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;
+});