我有这个代码,如果缺货,则限制 POS 上的产品销售。但当我选择产品然后单击付款按钮时它就起作用了。当我点击 POS 会话上的付款按钮时,它将显示一条关于缺货产品的消息。我想添加另一个功能,我希望当我点击缺货产品时显示此消息。例如,如果产品缺货,当我点击该产品时,它应该给我警告消息。无法选择缺货产品。因此,我不想选择缺货的产品,然后在付款时显示消息,而是想在选择产品时显示消息。任何人都可以帮助我使代码适用于 odoo 17。我是 Odoo POS 开发的新手。请帮帮我,谢谢。
patch(Order.prototype, {
async pay() {
let order = this.env.services.pos.get_order();
let lines = order.get_orderlines();
let pos_config = this.env.services.pos.config;
let config_id = this.env.services.pos.config.id;
let prod_used_qty = {};
let outOfStockProducts = [];
let restrict = false;
if (pos_config.restrict_zero_qty) {
lines.forEach(line => {
let prd = line.product;
if (prd.type === 'product') {
if (prd.id in prod_used_qty) {
let old_qty = prod_used_qty[prd.id][1];
prod_used_qty[prd.id] = [prd.qty_available, line.quantity + old_qty];
} else {
prod_used_qty[prd.id] = [prd.qty_available, line.quantity];
}
// Check if product is out of stock
if (prd.qty_available <= 0) {
restrict = true;
outOfStockProducts.push(prd.display_name);
}
}
});
// Check if any products are out of stock
if (restrict === true) {
let warning = _t('Out of stock products cannot be sold: \n') + outOfStockProducts.join(', \n');
this.env.services.pos.popup.add(ErrorPopup, {
title: _t('Out of Stock Products'),
body: _t(warning),
});
} else {
// Proceed with payment if no products are out of stock
super.pay();
}
} else {
// Proceed with payment if zero quantity restriction is not enabled
super.pay();
}
},
});
我如何为 odoo 17 制作这个?
我尝试过搜索此问题,但没有得到任何解决方案
首先,您应该在模块资产中指定它,如下所示。
'point_of_sale._assets_pos': [
'your_module_name/static/src/js/your_js_filename.js'
],
然后,您的 JavaScript 代码必须如下所示:Odoo 在 16 和 17 上更新了其资产目录,因此请确保您的资产如下所示列出。
/** @odoo-module */
import { Order } from "@point_of_sale/app/store/models";
import { patch } from "@web/core/utils/patch";
patch(Order.prototype, {
async pay() {
let order = this.env.services.pos.get_order();
let lines = order.get_orderlines();
let pos_config = this.env.services.pos.config;
let config_id = this.env.services.pos.config.id;
let prod_used_qty = {};
let outOfStockProducts = [];
let restrict = false;
if (pos_config.restrict_zero_qty) {
lines.forEach(line => {
let prd = line.product;
if (prd.type === 'product') {
if (prd.id in prod_used_qty) {
let old_qty = prod_used_qty[prd.id][1];
prod_used_qty[prd.id] = [prd.qty_available, line.quantity + old_qty];
} else {
prod_used_qty[prd.id] = [prd.qty_available, line.quantity];
}
// Check if product is out of stock
if (prd.qty_available <= 0) {
restrict = true;
outOfStockProducts.push(prd.display_name);
}
}
});
// Check if any products are out of stock
if (restrict === true) {
let warning = _t('Out of stock products cannot be sold: \n') + outOfStockProducts.join(', \n');
this.env.services.pos.popup.add(ErrorPopup, {
title: _t('Out of Stock Products'),
body: _t(warning),
});
} else {
// Proceed with payment if no products are out of stock
super.pay();
}
} else {
// Proceed with payment if zero quantity restriction is not enabled
super.pay();
}
},
});