summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorRobin Heinz <rhe@odoo.com>2020-05-05 08:02:57 +0000
committerPierre Masereel <pim@odoo.com>2020-05-12 12:52:23 +0000
commit85c11d1d40b5b54527fae5856c5884f4ad48fe7a (patch)
tree9aac83259dd40d8b1ea98f67506c30fefc9bc300 /addons
parenteabbd3558faa1c14266b22dc3b58c7b046f08990 (diff)
[REF] l10n_fr_pos_cert: migration to OWL framework
Diffstat (limited to 'addons')
-rw-r--r--addons/l10n_fr_pos_cert/__manifest__.py2
-rw-r--r--addons/l10n_fr_pos_cert/static/src/js/NumpadWidget.js24
-rw-r--r--addons/l10n_fr_pos_cert/static/src/js/PaymentScreen.js29
-rw-r--r--addons/l10n_fr_pos_cert/static/src/js/ProductScreen.js16
-rw-r--r--addons/l10n_fr_pos_cert/static/src/js/pos.js141
-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.xml3
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>