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/sale_management/static/src | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/sale_management/static/src')
| -rw-r--r-- | addons/sale_management/static/src/img/Sales-configure-products.gif | bin | 0 -> 13861 bytes | |||
| -rw-r--r-- | addons/sale_management/static/src/img/online_training.png | bin | 0 -> 11682 bytes | |||
| -rw-r--r-- | addons/sale_management/static/src/img/openerp_gold_partner.png | bin | 0 -> 23252 bytes | |||
| -rw-r--r-- | addons/sale_management/static/src/img/partner_icon_01.png | bin | 0 -> 25055 bytes | |||
| -rw-r--r-- | addons/sale_management/static/src/img/partner_icon_02.png | bin | 0 -> 14792 bytes | |||
| -rw-r--r-- | addons/sale_management/static/src/img/partner_icon_04.png | bin | 0 -> 17968 bytes | |||
| -rw-r--r-- | addons/sale_management/static/src/img/partner_sc_01.png | bin | 0 -> 51068 bytes | |||
| -rw-r--r-- | addons/sale_management/static/src/img/t-shirts.png | bin | 0 -> 13506 bytes | |||
| -rw-r--r-- | addons/sale_management/static/src/js/sale_management.js | 182 |
9 files changed, 182 insertions, 0 deletions
diff --git a/addons/sale_management/static/src/img/Sales-configure-products.gif b/addons/sale_management/static/src/img/Sales-configure-products.gif Binary files differnew file mode 100644 index 00000000..e70c4a92 --- /dev/null +++ b/addons/sale_management/static/src/img/Sales-configure-products.gif diff --git a/addons/sale_management/static/src/img/online_training.png b/addons/sale_management/static/src/img/online_training.png Binary files differnew file mode 100644 index 00000000..cc03d0d7 --- /dev/null +++ b/addons/sale_management/static/src/img/online_training.png diff --git a/addons/sale_management/static/src/img/openerp_gold_partner.png b/addons/sale_management/static/src/img/openerp_gold_partner.png Binary files differnew file mode 100644 index 00000000..f0404e8c --- /dev/null +++ b/addons/sale_management/static/src/img/openerp_gold_partner.png diff --git a/addons/sale_management/static/src/img/partner_icon_01.png b/addons/sale_management/static/src/img/partner_icon_01.png Binary files differnew file mode 100644 index 00000000..880752e3 --- /dev/null +++ b/addons/sale_management/static/src/img/partner_icon_01.png diff --git a/addons/sale_management/static/src/img/partner_icon_02.png b/addons/sale_management/static/src/img/partner_icon_02.png Binary files differnew file mode 100644 index 00000000..c3b76637 --- /dev/null +++ b/addons/sale_management/static/src/img/partner_icon_02.png diff --git a/addons/sale_management/static/src/img/partner_icon_04.png b/addons/sale_management/static/src/img/partner_icon_04.png Binary files differnew file mode 100644 index 00000000..a1c2193a --- /dev/null +++ b/addons/sale_management/static/src/img/partner_icon_04.png diff --git a/addons/sale_management/static/src/img/partner_sc_01.png b/addons/sale_management/static/src/img/partner_sc_01.png Binary files differnew file mode 100644 index 00000000..2b4872a2 --- /dev/null +++ b/addons/sale_management/static/src/img/partner_sc_01.png diff --git a/addons/sale_management/static/src/img/t-shirts.png b/addons/sale_management/static/src/img/t-shirts.png Binary files differnew file mode 100644 index 00000000..31bd6a4c --- /dev/null +++ b/addons/sale_management/static/src/img/t-shirts.png diff --git a/addons/sale_management/static/src/js/sale_management.js b/addons/sale_management/static/src/js/sale_management.js new file mode 100644 index 00000000..eaa126cc --- /dev/null +++ b/addons/sale_management/static/src/js/sale_management.js @@ -0,0 +1,182 @@ +odoo.define('sale_management.sale_management', function (require) { +'use strict'; + +var publicWidget = require('web.public.widget'); + +publicWidget.registry.SaleUpdateLineButton = publicWidget.Widget.extend({ + selector: '.o_portal_sale_sidebar', + events: { + 'click a.js_update_line_json': '_onClick', + 'click a.js_add_optional_products': '_onClickOptionalProduct', + 'change .js_quantity': '_onChangeQuantity' + }, + /** + * @override + */ + async start() { + await this._super(...arguments); + this.orderDetail = this.$el.find('table#sales_order_table').data(); + this.elems = this._getUpdatableElements(); + }, + /** + * Process the change in line quantity + * + * @private + * @param {Event} ev + */ + _onChangeQuantity(ev) { + ev.preventDefault(); + let self = this, + $target = $(ev.currentTarget), + quantity = parseInt($target.val()); + + this._callUpdateLineRoute(self.orderDetail.orderId, { + 'line_id': $target.data('lineId'), + 'input_quantity': quantity >= 0 ? quantity : false, + 'access_token': self.orderDetail.token + }).then((data) => { + self._updateOrderLineValues($target.closest('tr'), data); + self._updateOrderValues(data); + }); + }, + /** + * Reacts to the click on the -/+ buttons + * + * @param {Event} ev + */ + _onClick(ev) { + ev.preventDefault(); + let self = this, + $target = $(ev.currentTarget); + this._callUpdateLineRoute(self.orderDetail.orderId, { + 'line_id': $target.data('lineId'), + 'remove': $target.data('remove'), + 'unlink': $target.data('unlink'), + 'access_token': self.orderDetail.token + }).then((data) => { + var $saleTemplate = $(data['sale_template']); + if ($saleTemplate.length && data['unlink']) { + self.$('#portal_sale_content').html($saleTemplate); + self.elems = self._getUpdatableElements(); + } + self._updateOrderLineValues($target.closest('tr'), data); + self._updateOrderValues(data); + }); + }, + /** + * trigger when optional product added to order from portal. + * + * @private + * @param {Event} ev + */ + _onClickOptionalProduct(ev) { + ev.preventDefault(); + let self = this, + $target = $(ev.currentTarget); + // to avoid double click on link with href. + $target.css('pointer-events', 'none'); + + this._rpc({ + route: "/my/orders/" + self.orderDetail.orderId + "/add_option/" + $target.data('optionId'), + params: {access_token: self.orderDetail.token} + }).then((data) => { + if (data) { + self.$('#portal_sale_content').html($(data['sale_template'])); + self.elems = self._getUpdatableElements(); + self._updateOrderValues(data); + } + }); + }, + /** + * Calls the route to get updated values of the line and order + * when the quantity of a product has changed + * + * @private + * @param {integer} order_id + * @param {Object} params + * @return {Deferred} + */ + _callUpdateLineRoute(order_id, params) { + return this._rpc({ + route: "/my/orders/" + order_id + "/update_line_dict", + params: params, + }); + }, + /** + * Processes data from the server to update the orderline UI + * + * @private + * @param {Element} $orderLine: orderline element to update + * @param {Object} data: contains order and line updated values + */ + _updateOrderLineValues($orderLine, data) { + let linePriceTotal = data.order_line_price_total, + linePriceSubTotal = data.order_line_price_subtotal, + $linePriceTotal = $orderLine.find('.oe_order_line_price_total .oe_currency_value'), + $linePriceSubTotal = $orderLine.find('.oe_order_line_price_subtotal .oe_currency_value'); + + if (!$linePriceTotal.length && !$linePriceSubTotal.length) { + $linePriceTotal = $linePriceSubTotal = $orderLine.find('.oe_currency_value').last(); + } + + $orderLine.find('.js_quantity').val(data.order_line_product_uom_qty); + if ($linePriceTotal.length && linePriceTotal !== undefined) { + $linePriceTotal.text(linePriceTotal); + } + if ($linePriceSubTotal.length && linePriceSubTotal !== undefined) { + $linePriceSubTotal.text(linePriceSubTotal); + } + }, + /** + * Processes data from the server to update the UI + * + * @private + * @param {Object} data: contains order and line updated values + */ + _updateOrderValues(data) { + let orderAmountTotal = data.order_amount_total, + orderAmountUntaxed = data.order_amount_untaxed, + orderAmountUndiscounted = data.order_amount_undiscounted, + $orderTotalsTable = $(data.order_totals_table); + if (orderAmountUntaxed !== undefined) { + this.elems.$orderAmountUntaxed.text(orderAmountUntaxed); + } + + if (orderAmountTotal !== undefined) { + this.elems.$orderAmountTotal.text(orderAmountTotal); + } + + if (orderAmountUndiscounted !== undefined) { + this.elems.$orderAmountUndiscounted.text(orderAmountUndiscounted); + } + if ($orderTotalsTable.length) { + this.elems.$orderTotalsTable.find('table').replaceWith($orderTotalsTable); + } + }, + /** + * Locate in the DOM the elements to update + * Mostly for compatibility, when the module has not been upgraded + * In that case, we need to fall back to some other elements + * + * @private + * @return {Object}: Jquery elements to update + */ + _getUpdatableElements() { + let $orderAmountUntaxed = $('[data-id="total_untaxed"]').find('span, b'), + $orderAmountTotal = $('[data-id="total_amount"]').find('span, b'), + $orderAmountUndiscounted = $('[data-id="amount_undiscounted"]').find('span, b'); + + if (!$orderAmountUntaxed.length) { + $orderAmountUntaxed = $orderAmountTotal.eq(1); + $orderAmountTotal = $orderAmountTotal.eq(0).add($orderAmountTotal.eq(2)); + } + + return { + $orderAmountUntaxed: $orderAmountUntaxed, + $orderAmountTotal: $orderAmountTotal, + $orderTotalsTable: $('#total'), + $orderAmountUndiscounted: $orderAmountUndiscounted, + }; + } +}); +}); |
