summaryrefslogtreecommitdiff
path: root/addons/lunch/static/src/js/lunch_widget.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/lunch/static/src/js/lunch_widget.js
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/lunch/static/src/js/lunch_widget.js')
-rw-r--r--addons/lunch/static/src/js/lunch_widget.js168
1 files changed, 168 insertions, 0 deletions
diff --git a/addons/lunch/static/src/js/lunch_widget.js b/addons/lunch/static/src/js/lunch_widget.js
new file mode 100644
index 00000000..ca0c497c
--- /dev/null
+++ b/addons/lunch/static/src/js/lunch_widget.js
@@ -0,0 +1,168 @@
+odoo.define('lunch.LunchWidget', function (require) {
+"use strict";
+
+var core = require('web.core');
+var relationalFields = require('web.relational_fields');
+var session = require('web.session');
+var Widget = require('web.Widget');
+
+var _t = core._t;
+var FieldMany2One = relationalFields.FieldMany2One;
+
+
+var LunchMany2One = FieldMany2One.extend({
+ start: function () {
+ this.$el.addClass('w-100');
+ return this._super.apply(this, arguments);
+ }
+});
+
+var LunchWidget = Widget.extend({
+ template: 'LunchWidget',
+ custom_events: {
+ field_changed: '_onFieldChanged',
+ },
+ events: {
+ 'click .o_add_product': '_onAddProduct',
+ 'click .o_lunch_widget_order_button': '_onOrderNow',
+ 'click .o_remove_product': '_onRemoveProduct',
+ 'click .o_lunch_widget_unlink': '_onUnlinkOrder',
+ 'click .o_lunch_open_wizard': '_onLunchOpenWizard',
+ },
+
+ init: function (parent, params) {
+ this._super.apply(this, arguments);
+
+ this.is_manager = params.is_manager || false;
+ this.userimage = params.userimage || '';
+ this.username = params.username || '';
+
+ this.lunchUserField = null;
+
+ this.group_portal_id = undefined;
+
+ this.locations = params.locations || [];
+ this.userLocation = params.user_location[1] || '';
+
+ this.lunchLocationField = this._createMany2One('locations', 'lunch.location', this.userLocation);
+
+ this.wallet = params.wallet || 0;
+ this.raw_state = params.raw_state || 'new';
+ this.state = params.state || _t('To Order');
+ this.lines = params.lines || [];
+ this.total = params.total || 0;
+
+ this.alerts = params.alerts || [];
+
+ this.currency = params.currency || session.get_currency(session.company_currency_id);
+ },
+ willStart: function () {
+ var self = this;
+ var superDef = this._super.apply(this, arguments);
+
+ var def = this._rpc({
+ model: 'ir.model.data',
+ method: 'xmlid_to_res_id',
+ kwargs: {xmlid: 'base.group_portal'},
+ }).then(function (id) {
+ self.group_portal_id = id;
+
+ if (self.is_manager) {
+ self.lunchUserField = self._createMany2One('users', 'res.users', self.username, function () {
+ return [['groups_id', 'not in', [self.group_portal_id]]];
+ });
+ }
+ });
+ return Promise.all([superDef, def]);
+ },
+ renderElement: function () {
+ this._super.apply(this, arguments);
+ if (this.lunchUserField) {
+ this.lunchUserField.appendTo(this.$('.o_lunch_user_field'));
+ } else {
+ this.$('.o_lunch_user_field').text(this.username);
+ }
+ this.lunchLocationField.appendTo(this.$('.o_lunch_location_field'));
+ },
+
+ //--------------------------------------------------------------------------
+ // Private
+ //--------------------------------------------------------------------------
+
+ _createMany2One: function (name, model, value, domain, context) {
+ var fields = {};
+ fields[name] = {type: 'many2one', relation: model, string: name};
+ var data = {};
+ data[name] = {data: {display_name: value}};
+
+ var record = {
+ id: name,
+ res_id: 1,
+ model: 'dummy',
+ fields: fields,
+ fieldsInfo: {
+ default: fields,
+ },
+ data: data,
+ getDomain: domain || function () { return []; },
+ getContext: context || function () { return {}; },
+ };
+ var options = {
+ mode: 'edit',
+ noOpen: true,
+ attrs: {
+ can_create: false,
+ can_write: false,
+ }
+ };
+ return new LunchMany2One(this, name, record, options);
+ },
+
+ //--------------------------------------------------------------------------
+ // Handlers
+ //--------------------------------------------------------------------------
+
+ _onAddProduct: function (ev) {
+ ev.preventDefault();
+ ev.stopPropagation();
+ this.trigger_up('add_product', {lineId: $(ev.currentTarget).data('id')});
+ },
+ _onOrderNow: function (ev) {
+ ev.preventDefault();
+ ev.stopPropagation();
+
+ this.trigger_up('order_now', {});
+ },
+ _onLunchOpenWizard: function (ev) {
+ ev.preventDefault();
+ ev.stopPropagation();
+
+ var target = $(ev.currentTarget);
+ this.trigger_up('open_wizard', {productId: target.data('product-id'), lineId: target.data('id')});
+ },
+ _onFieldChanged: function (ev) {
+ ev.stopPropagation();
+
+ if (ev.data.dataPointID === 'users') {
+ this.trigger_up('change_user', {userId: ev.data.changes.users.id});
+ } else if (ev.data.dataPointID === 'locations') {
+ this.trigger_up('change_location', {locationId: ev.data.changes.locations.id});
+ }
+ },
+ _onRemoveProduct: function (ev) {
+ ev.preventDefault();
+ ev.stopPropagation();
+
+ this.trigger_up('remove_product', {lineId: $(ev.currentTarget).data('id')});
+ },
+ _onUnlinkOrder: function (ev) {
+ ev.preventDefault();
+ ev.stopPropagation();
+
+ this.trigger_up('unlink_order', {});
+ },
+});
+
+return LunchWidget;
+
+});