diff options
| author | Robin Heinz <rhe@odoo.com> | 2020-05-05 08:02:57 +0000 |
|---|---|---|
| committer | Pierre Masereel <pim@odoo.com> | 2020-05-12 12:52:23 +0000 |
| commit | 85c11d1d40b5b54527fae5856c5884f4ad48fe7a (patch) | |
| tree | 9aac83259dd40d8b1ea98f67506c30fefc9bc300 /addons/l10n_fr_pos_cert | |
| parent | eabbd3558faa1c14266b22dc3b58c7b046f08990 (diff) | |
[REF] l10n_fr_pos_cert: migration to OWL framework
Diffstat (limited to 'addons/l10n_fr_pos_cert')
| -rw-r--r-- | addons/l10n_fr_pos_cert/__manifest__.py | 2 | ||||
| -rw-r--r-- | addons/l10n_fr_pos_cert/static/src/js/NumpadWidget.js | 24 | ||||
| -rw-r--r-- | addons/l10n_fr_pos_cert/static/src/js/PaymentScreen.js | 29 | ||||
| -rw-r--r-- | addons/l10n_fr_pos_cert/static/src/js/ProductScreen.js | 16 | ||||
| -rw-r--r-- | addons/l10n_fr_pos_cert/static/src/js/pos.js | 141 | ||||
| -rw-r--r-- | addons/l10n_fr_pos_cert/static/src/xml/OrderReceipt.xml (renamed from addons/l10n_fr_pos_cert/static/src/xml/pos.xml) | 9 | ||||
| -rw-r--r-- | addons/l10n_fr_pos_cert/views/l10n_fr_pos_cert_templates.xml | 3 |
7 files changed, 85 insertions, 139 deletions
diff --git a/addons/l10n_fr_pos_cert/__manifest__.py b/addons/l10n_fr_pos_cert/__manifest__.py index 7d96df708ce..4f699f90d72 100644 --- a/addons/l10n_fr_pos_cert/__manifest__.py +++ b/addons/l10n_fr_pos_cert/__manifest__.py @@ -36,6 +36,6 @@ The module adds following features: 'security/ir.model.access.csv', 'security/account_closing_intercompany.xml', ], - 'qweb': ['static/src/xml/pos.xml'], + 'qweb': ['static/src/xml/OrderReceipt.xml'], 'post_init_hook': '_setup_inalterability', } diff --git a/addons/l10n_fr_pos_cert/static/src/js/NumpadWidget.js b/addons/l10n_fr_pos_cert/static/src/js/NumpadWidget.js new file mode 100644 index 00000000000..5362db2daff --- /dev/null +++ b/addons/l10n_fr_pos_cert/static/src/js/NumpadWidget.js @@ -0,0 +1,24 @@ +odoo.define('l10n_fr_pos_cert.NumpadWidget', function(require) { + 'use strict'; + + const NumpadWidget = require('point_of_sale.NumpadWidget'); + const Registries = require('point_of_sale.Registries'); + + const PosFrNumpadWidget = NumpadWidget => class extends NumpadWidget { + async changeMode(mode) { + if (this.env.pos.is_french_country() && mode === 'price') { + await this.showPopup('ErrorPopup', { + title: this.env._t('Module error'), + body: this.env._t('Adjusting the price is not allowed.'), + }); + return; + } else { + super.changeMode(mode); + } + } + }; + + Registries.Component.extend(NumpadWidget, PosFrNumpadWidget); + + return NumpadWidget; + }); diff --git a/addons/l10n_fr_pos_cert/static/src/js/PaymentScreen.js b/addons/l10n_fr_pos_cert/static/src/js/PaymentScreen.js new file mode 100644 index 00000000000..1ec68f9baf8 --- /dev/null +++ b/addons/l10n_fr_pos_cert/static/src/js/PaymentScreen.js @@ -0,0 +1,29 @@ +odoo.define('l10n_fr_pos_cert.PaymentScreen', function(require) { + + const PaymentScreen = require('point_of_sale.PaymentScreen'); + const Registries = require('point_of_sale.Registries'); + const session = require('web.session'); + + const PosFrPaymentScreen = PaymentScreen => class extends PaymentScreen { + async _postPushOrderResolve(order, order_server_ids) { + try { + if(this.env.pos.is_french_country()) { + let result = await this.rpc({ + model: 'pos.order', + method: 'search_read', + domain: [['id', 'in', order_server_ids]], + fields: ['l10n_fr_hash'], + context: session.user_context, + }); + order.set_l10n_fr_hash(result[0].l10n_fr_hash || false); + } + } finally { + return super._postPushOrderResolve(...arguments); + } + } + }; + + Registries.Component.extend(PaymentScreen, PosFrPaymentScreen); + + return PaymentScreen; +}); diff --git a/addons/l10n_fr_pos_cert/static/src/js/ProductScreen.js b/addons/l10n_fr_pos_cert/static/src/js/ProductScreen.js new file mode 100644 index 00000000000..97b781e4130 --- /dev/null +++ b/addons/l10n_fr_pos_cert/static/src/js/ProductScreen.js @@ -0,0 +1,16 @@ +odoo.define('l10n_fr_pos_cert.ProductScreen', function(require) { + + const ProductScreen = require('point_of_sale.ProductScreen'); + const Registries = require('point_of_sale.Registries'); + + const PosFrProductScreen = ProductScreen => class extends ProductScreen { + disallowLineQuantityChange() { + let result = super.disallowLineQuantityChange(); + return (this.env.pos.is_french_country() && this.numpadMode === 'quantity') || result; + } + }; + + Registries.Component.extend(ProductScreen, PosFrProductScreen); + + return ProductScreen; +}); diff --git a/addons/l10n_fr_pos_cert/static/src/js/pos.js b/addons/l10n_fr_pos_cert/static/src/js/pos.js index e724ad149da..8ab462d8ed4 100644 --- a/addons/l10n_fr_pos_cert/static/src/js/pos.js +++ b/addons/l10n_fr_pos_cert/static/src/js/pos.js @@ -1,8 +1,8 @@ odoo.define('l10n_fr_pos_cert.pos', function (require) { "use strict"; +const { Gui } = require('point_of_sale.Gui'); var models = require('point_of_sale.models'); -var screens = require('point_of_sale.screens'); var rpc = require('web.rpc'); var session = require('web.session'); var core = require('web.core'); @@ -26,7 +26,7 @@ models.PosModel = models.PosModel.extend({ }, delete_current_order: function () { if (this.is_french_country() && this.get_order().get_orderlines().length) { - this.gui.show_popup("error", { + Gui.showPopup("ErrorPopup", { 'title': _t("Fiscal Data Module error"), 'body': _t("Deleting of orders is not allowed."), }); @@ -64,141 +64,16 @@ models.Order = models.Order.extend({ var orderline_super = models.Orderline.prototype; models.Orderline = models.Orderline.extend({ - set_quantity: function (quantity, keep_price) { - var current_quantity = this.get_quantity(); - var new_quantity = parseFloat(quantity) || 0; - if (this.pos.is_french_country() && (new_quantity === 0 || new_quantity < current_quantity)) { - var quantity_to_decrease = current_quantity - new_quantity; - this.pos.gui.show_popup("number", { - 'title': _t("Decrease the quantity by"), - 'confirm': function (qty_decrease) { - if (qty_decrease) { - var order = this.pos.get_order(); - var selected_orderline = order.get_selected_orderline(); - qty_decrease = qty_decrease.replace(_t.database.parameters.decimal_point, '.'); - qty_decrease = parseFloat(qty_decrease); - var decimals = this.pos.dp['Product Unit of Measure']; - qty_decrease = round_di(qty_decrease, decimals); - - var current_total_quantity_remaining = selected_orderline.get_quantity(); - order.get_orderlines().forEach(function (orderline, index, array) { - if (selected_orderline.id != orderline.id && - selected_orderline.get_product().id === orderline.get_product().id && - selected_orderline.get_discount() === orderline.get_discount()) { - current_total_quantity_remaining += orderline.get_quantity(); - } - }); - - if (qty_decrease > current_total_quantity_remaining) { - this.pos.gui.show_popup("error", { - 'title': _t("Order error"), - 'body': _t("Not allowed to take back more than was ordered."), - }); - } else { - var decrease_line = selected_orderline.clone(); - decrease_line.order = order; - orderline_super.set_quantity.apply(decrease_line, [-qty_decrease]); - order.add_orderline(decrease_line); - } - } - } - }); - } else { - orderline_super.set_quantity.apply(this, arguments); - } - }, can_be_merged_with: function(orderline) { - var order = this.pos.get_order(); - var last_id = Object.keys(order.orderlines._byId)[Object.keys(order.orderlines._byId).length-1]; - - if(this.pos.is_french_country() && (order.orderlines._byId[last_id].product.id !== orderline.product.id || order.orderlines._byId[last_id].quantity < 0)) { - return false; - } else { - return orderline_super.can_be_merged_with.apply(this, arguments); - } - } -}); - - -screens.PaymentScreenWidget.include({ - post_push_order_resolve: function (order, server_ids) { - if (this.pos.is_french_country()) { - var _super = this._super; - var args = arguments; - var self = this; - var get_hash_prom = new Promise (function (resolve, reject) { - rpc.query({ - model: 'pos.order', - method: 'search_read', - domain: [['id', 'in', server_ids]], - fields: ['l10n_fr_hash'], - context: session.user_context, - }).then(function (result) { - order.set_l10n_fr_hash(result[0].l10n_fr_hash || false); - }).finally(function () { - _super.apply(self, args).then(function () { - resolve(); - }).catch(function (error) { - reject(error); - }); - }); - }); - return get_hash_prom; - } - else { - return this._super(order, server_ids); - } - }, -}); + var order = this.pos.get_order(); + var last_id = Object.keys(order.orderlines._byId)[Object.keys(order.orderlines._byId).length-1]; -screens.ProductScreenWidget.include({ - _onKeypadKeyDown: function (event) { - if (this.pos.is_french_country()) { - var order = this.pos.get_order(); - var orderline = this.pos.get_order().selected_orderline; - var last_id = Object.keys(order.orderlines._byId)[Object.keys(order.orderlines._byId).length-1]; - - if( !orderline || (last_id === orderline.cid && orderline.quantity > 0)){ - this._super(event); - } - } else { - this._super(event); - } - }, - }); - -screens.NumpadWidget.include({ - start: function(event) { - this._super(event); - if (this.pos.is_french_country()) { - this.$el.find('.numpad-minus').prop("disabled",true); - } - }, - clickChangeMode: function (event) { - if (this.pos.is_french_country() && event.currentTarget.attributes['data-mode'].nodeValue === "price") { - this.gui.show_popup("error", { - 'title': _t("Module error"), - 'body': _t("Adjusting the price is not allowed."), - }); + if(this.pos.is_french_country() && (order.orderlines._byId[last_id].product.id !== orderline.product.id || order.orderlines._byId[last_id].quantity < 0)) { + return false; } else { - this._super(event); + return orderline_super.can_be_merged_with.apply(this, arguments); } - }, - clickAppendNewChar: function(event) { - if (this.pos.is_french_country()) { - var order = this.pos.get_order(); - var orderline = this.pos.get_order().selected_orderline; - var last_id = Object.keys(order.orderlines._byId)[Object.keys(order.orderlines._byId).length-1]; - - if(last_id === orderline.cid && orderline.quantity > 0){ - this._super(event); - } - } else { - this._super(event); - } - }, + } }); - - }); diff --git a/addons/l10n_fr_pos_cert/static/src/xml/pos.xml b/addons/l10n_fr_pos_cert/static/src/xml/OrderReceipt.xml index 9cfda4f3444..bb77291ac8a 100644 --- a/addons/l10n_fr_pos_cert/static/src/xml/pos.xml +++ b/addons/l10n_fr_pos_cert/static/src/xml/OrderReceipt.xml @@ -1,12 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> <templates id="template" xml:space="preserve"> - - <t t-extend="OrderReceipt"> - <t t-jquery=".pos-receipt-order-data" t-operation="append"> + <t t-name="OrderReceipt" t-inherit="point_of_sale.OrderReceipt" t-inherit-mode="extension" owl="1"> + <xpath expr="//div[hasclass('pos-receipt-order-data')]" position="inside"> <t t-if="receipt.l10n_fr_hash !== false"> + <br/> <div style="word-wrap:break-word;"><t t-esc="receipt.l10n_fr_hash"/></div> </t> - </t> + </xpath> </t> - </templates> diff --git a/addons/l10n_fr_pos_cert/views/l10n_fr_pos_cert_templates.xml b/addons/l10n_fr_pos_cert/views/l10n_fr_pos_cert_templates.xml index 750335b4c37..af683547c17 100644 --- a/addons/l10n_fr_pos_cert/views/l10n_fr_pos_cert_templates.xml +++ b/addons/l10n_fr_pos_cert/views/l10n_fr_pos_cert_templates.xml @@ -4,6 +4,9 @@ <template id="assets" inherit_id="point_of_sale.assets"> <xpath expr="." position="inside"> <script type="text/javascript" src="/l10n_fr_pos_cert/static/src/js/pos.js"></script> + <script type="text/javascript" src="/l10n_fr_pos_cert/static/src/js/NumpadWidget.js"></script> + <script type="text/javascript" src="/l10n_fr_pos_cert/static/src/js/PaymentScreen.js"></script> + <script type="text/javascript" src="/l10n_fr_pos_cert/static/src/js/ProductScreen.js"></script> </xpath> </template> |
