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/lunch/static/src/js/lunch_widget.js | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (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.js | 168 |
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; + +}); |
