8 changed files with 127 additions and 0 deletions
@ -0,0 +1,36 @@ |
|||
# -*- coding: utf-8 -*- |
|||
############################################################################### |
|||
# |
|||
# Cybrosys Technologies Pvt. Ltd. |
|||
# |
|||
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>) |
|||
# Author: Gayathri V(odoo@cybrosys.com) |
|||
# |
|||
# You can modify it under the terms of the GNU AFFERO |
|||
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. |
|||
# |
|||
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE |
|||
# (AGPL v3) along with this program. |
|||
# If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
############################################################################### |
|||
from odoo import api, models |
|||
|
|||
|
|||
class ProductProduct(models.Model): |
|||
|
|||
_inherit = 'product.product' |
|||
|
|||
@api.model |
|||
def get_product_quantity(self): |
|||
""" |
|||
Retrieves a list of products that are available in the Point of Sale (POS) system, |
|||
including their current available quantity and virtual available quantity. |
|||
""" |
|||
products= self.search_read([('available_in_pos','=',True)],fields=['id', 'qty_available','virtual_available']) |
|||
return products |
@ -0,0 +1,11 @@ |
|||
/** @odoo-module **/ |
|||
/* |
|||
* This file is used to store a popup for stocks out of stock for forced orders. |
|||
*/ |
|||
import AbstractAwaitablePopup from 'point_of_sale.AbstractAwaitablePopup'; |
|||
import Registries from 'point_of_sale.Registries'; |
|||
|
|||
class OutOfStockPopup extends AbstractAwaitablePopup { |
|||
} |
|||
OutOfStockPopup.template = 'OutOfStockPopup'; |
|||
Registries.Component.add(OutOfStockPopup); |
@ -0,0 +1,34 @@ |
|||
/** @odoo-module **/ |
|||
import Registries from 'point_of_sale.Registries'; |
|||
import ProductItem from 'point_of_sale.ProductItem'; |
|||
var rpc = require('web.rpc'); |
|||
const { hooks } = owl; |
|||
const { onWillStart } = hooks; |
|||
|
|||
const ProductStockDisplay = (ProductItem) => class ProductStockDisplay extends ProductItem { |
|||
|
|||
async willStart() { |
|||
var self = this; |
|||
var result = null |
|||
await rpc.query({ |
|||
model: "product.product", |
|||
method: "get_product_quantity", |
|||
}).then(function (data) { |
|||
// Iterate through each product in the data received from the RPC query
|
|||
result=data |
|||
data.forEach(function (productData) { |
|||
// Find the corresponding product in product_by_id by matching product ID
|
|||
var productInDb = self.env.pos.db.product_by_id[productData.id]; |
|||
if (productInDb) { |
|||
// Compare qty_available and virtual_available between the two data sets
|
|||
if (productInDb.qty_available !== productData.qty_available || productInDb.virtual_available !== productData.virtual_available) { |
|||
// If there's a change, update the product in product_by_id
|
|||
productInDb.qty_available = productData.qty_available; |
|||
productInDb.virtual_available = productData.virtual_available; |
|||
} |
|||
} |
|||
}); |
|||
}); |
|||
} |
|||
} |
|||
Registries.Component.extend(ProductItem, ProductStockDisplay); |
@ -0,0 +1,19 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<template id="template" xml:space="preserve"> |
|||
<!--This template is used for registering a popup for restrict product from ordering--> |
|||
<t t-name="OutOfStockPopup" owl="1"> |
|||
<div role="dialog" class="modal-dialog"> |
|||
<div class="popup popup-text popup-med restrict-stock-popup"> |
|||
<div class="title">Product Out of Stock</div> |
|||
<div style="height:100px; margin-top:20px;"> |
|||
<span style="color:#811331"><t t-esc="props.body"/></span> is out of stock. |
|||
</div> |
|||
<div class="footer"> |
|||
<div class="button cancel" style="color:red" t-on-click="cancel"> |
|||
Cancel |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</t> |
|||
</template> |
Loading…
Reference in new issue