4 changed files with 67 additions and 2 deletions
@ -0,0 +1,58 @@ |
|||||
|
/** @odoo-module **/ |
||||
|
import { jsonrpc } from "@web/core/network/rpc_service"; |
||||
|
import { patch } from "@web/core/utils/patch"; |
||||
|
import { CrossProduct } from "@pos_pro_cross_selling/app/cross_product/cross_product"; |
||||
|
import { ProductScreen } from "@point_of_sale/app/screens/product_screen/product_screen"; |
||||
|
import { ErrorBarcodePopup } from "@point_of_sale/app/barcode/error_popup/barcode_error_popup"; |
||||
|
|
||||
|
// Function to get cross-selling products for a given product
|
||||
|
async function getCrossSellingProducts(productId) { |
||||
|
const result = await jsonrpc('/web/dataset/call_kw/pos.cross.selling/get_cross_selling_products', { |
||||
|
model: 'pos.cross.selling', |
||||
|
method: 'get_cross_selling_products', |
||||
|
args: [[], productId], |
||||
|
kwargs: {}, |
||||
|
}); |
||||
|
return result; |
||||
|
} |
||||
|
patch(ProductScreen.prototype, { |
||||
|
/** |
||||
|
* @overwrite |
||||
|
*/ |
||||
|
async _barcodeProductAction(code) { |
||||
|
const product = await this._getProductByBarcode(code); |
||||
|
if (!product) { |
||||
|
return this.popup.add(ErrorBarcodePopup, { code: code.base_code }); |
||||
|
} |
||||
|
const result = await getCrossSellingProducts(product.id); |
||||
|
if (result.length >0) { |
||||
|
await this.popup.add(CrossProduct, { |
||||
|
product: result |
||||
|
}); |
||||
|
} |
||||
|
const options = await product.getAddProductOptions(code); |
||||
|
if (!options) { |
||||
|
return; |
||||
|
} |
||||
|
if (code.type === "price") { |
||||
|
Object.assign(options, { |
||||
|
price: code.value, |
||||
|
extras: { |
||||
|
price_type: "manual", |
||||
|
}, |
||||
|
}); |
||||
|
} else if (code.type === "weight" || code.type === "quantity") { |
||||
|
Object.assign(options, { |
||||
|
quantity: code.value, |
||||
|
merge: false, |
||||
|
}); |
||||
|
} else if (code.type === "discount") { |
||||
|
Object.assign(options, { |
||||
|
discount: code.value, |
||||
|
merge: false, |
||||
|
}); |
||||
|
} |
||||
|
this.currentOrder.add_product(product, options); |
||||
|
this.numberBuffer.reset(); |
||||
|
} |
||||
|
}); |
Loading…
Reference in new issue