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 | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/sale_management/static')
| -rw-r--r-- | addons/sale_management/static/description/icon.png | bin | 0 -> 9214 bytes | |||
| -rw-r--r-- | addons/sale_management/static/description/icon.svg | 1 | ||||
| -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 |
11 files changed, 183 insertions, 0 deletions
diff --git a/addons/sale_management/static/description/icon.png b/addons/sale_management/static/description/icon.png Binary files differnew file mode 100644 index 00000000..343c9f7e --- /dev/null +++ b/addons/sale_management/static/description/icon.png diff --git a/addons/sale_management/static/description/icon.svg b/addons/sale_management/static/description/icon.svg new file mode 100644 index 00000000..97a19c02 --- /dev/null +++ b/addons/sale_management/static/description/icon.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="70" height="70" viewBox="0 0 70 70"><defs><path id="a" d="M4 0h61c4 0 5 1 5 5v60c0 4-1 5-5 5H4c-3 0-4-1-4-5V5c0-4 1-5 4-5z"/><linearGradient id="c" x1="100%" x2="0%" y1="0%" y2="100%"><stop offset="0%" stop-color="#DA956B"/><stop offset="100%" stop-color="#CC7039"/></linearGradient><path id="d" d="M56.243 52.279c.578 0 1.05.537 1.05 1.193v.978c0 .656-.472 1.194-1.05 1.194H13.532c-.578 0-1.05-.538-1.05-1.194v-35.8c0-.657.472-1.194 1.05-1.194h1.5c.578 0 1.05.537 1.05 1.194v33.629h40.161zM39 23.025l4.981 4.963-6.302 7.25-4.866-5.53c-.411-.467-1.068-.467-1.48 0L20.92 41.423a1.31 1.31 0 0 0-.018 1.68l2.494 2.924c.412.477 1.086.487 1.497.01l7.186-8.165 4.857 5.52a.965.965 0 0 0 1.488 0l9.558-10.86L53 37.664 55 20l-16 3.025z"/><path id="e" d="M56.243 50.279c.578 0 1.05.537 1.05 1.193v.978c0 .656-.472 1.194-1.05 1.194H13.532c-.578 0-1.05-.538-1.05-1.194v-35.8c0-.657.472-1.194 1.05-1.194h1.5c.578 0 1.05.537 1.05 1.194v33.629h40.161zM39 21.025l4.981 4.963-6.302 7.25-4.866-5.53c-.411-.467-1.068-.467-1.48 0L20.92 39.423a1.31 1.31 0 0 0-.018 1.68l2.494 2.924c.412.477 1.086.487 1.497.01l7.186-8.165 4.857 5.52a.965.965 0 0 0 1.488 0l9.558-10.86L53 35.664 55 18l-16 3.025z"/></defs><g fill="none" fill-rule="evenodd"><mask id="b" fill="#fff"><use xlink:href="#a"/></mask><g mask="url(#b)"><path fill="url(#c)" d="M0 0H70V70H0z"/><path fill="#FFF" fill-opacity=".383" d="M4 1h61c2.667 0 4.333.667 5 2V0H0v3c.667-1.333 2-2 4-2z"/><path fill="#393939" d="M45.243 69H4c-2 0-4-.146-4-4.077V35.315L13 16h3v26.5l15-14.27.974.024L40 21.096l13 14.27-18 18.346h22L45.243 69z" opacity=".324"/><path fill="#000" fill-opacity=".383" d="M4 69h61c2.667 0 4.333-1 5-3v4H0v-4c.667 2 2 3 4 3z"/><use fill="#000" fill-rule="nonzero" opacity=".3" xlink:href="#d"/><use fill="#FFF" fill-rule="nonzero" xlink:href="#e"/></g></g></svg>
\ No newline at end of file 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, + }; + } +}); +}); |
