I am trying to achieve a functionality where when a user clicks on an expired product show an error modal. i keep getting the error:
expired_product.models: Cannot read properties of undefined (reading 'extend') TypeError: Cannot read properties of undefined (reading 'extend')
odoo.define('expired_product.ProductScreen', function (require) { "use strict";
const ProductScreen = require('point_of_sale.ProductScreen'); const Registries = require('point_of_sale.Registries'); const { _t } = require('web.core'); const { DateTime } = luxon; const ExpiredProductScreen = ProductScreen => class extends ProductScreen { async _clickProduct(event) { const product = event.detail.product; console.log('Product clicked:', product); // Display expiration_time and expiry_date console.log('Expiration Time (Days):', product.expiration_time); console.log('Expiry Date:', product.expiry_date); // Check if product has expired if (this._isProductExpired(product)) { await this._showExpiredProductModal(product); return; }// If not expired, proceed with normal product selection super._clickProduct(event); }
_isProductExpired(product) { // Check product expiration if (product.expiry_date) { const expirationDate = DateTime.fromISO(product.expiry_date); const today = DateTime.local(); return expirationDate < today; } return false; } async _showExpiredProductModal(product) { const { confirmed } = await this.showPopup('ConfirmPopup', { title: _t('Product Expired'), body: _.str.sprintf( _t('The product "%s" has expired on %s. Do you want to continue?'), product.display_name, DateTime.fromISO(product.expiry_date).toLocaleString(DateTime.DATE_FULL) ), confirmText: _t('Continue'), cancelText: _t('Cancel') }); // If user confirms, allow product selection if (confirmed) { this.env.pos.get_order().add_product(product); } } };Registries.Component.extend(ProductScreen, ExpiredProductScreen);
return ExpiredProductScreen;});
Thank you. This helps a lot.