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