限制 POS Odoo 17 中的缺货产品

问题描述 投票:0回答:1

我有这个代码,如果缺货,则限制 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 制作这个?

我尝试过搜索此问题,但没有得到任何解决方案

javascript odoo point-of-sale restrict odoo-17
1个回答
0
投票

首先,您应该在模块资产中指定它,如下所示。

    '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();
        }
    },
});
© www.soinside.com 2019 - 2024. All rights reserved.