To add a visible indicator for ongoing processes in Odoo 17's OWL POS (Point of Sale), you can customize the POS module to show a loading spinner or message when a process is in progress. This will help prevent users from clicking multiple times. Here’s how you can implement this:
Step-by-Step Solution
- Enable Developer Mode:- Go to Settings > Scroll to the bottom > Click on Activate the Developer Mode.
 
- Access the POS Module Files:- As Odoo Community doesn't have the GUI customization tools for this, you'll need access to the Odoo server’s file system where the code for OWL POS resides.
 
- Locate the OWL POS JS Files:- OWL POS logic is handled in JavaScript files, usually located in addons/point_of_sale/static/src/js. Look for the relevant JS files that control button clicks or operations such as ProductScreen.js or PaymentScreen.js.
 
- Modify the Code to Add a Loading Indicator:- Open the relevant JavaScript file. Find the section of code where the operations start, such as the place where click events or data fetching operations are triggered.
- Add a loading spinner or overlay logic to the start and end of these operations.
 
// Example code to show loading spinner
const startLoading = () => {
    const loadingDiv = document.createElement('div');
    loadingDiv.id = 'loading-indicator';
    loadingDiv.innerHTML = '
Loading...
';
    document.body.appendChild(loadingDiv);
};
const stopLoading = () => {
    const loadingDiv = document.getElementById('loading-indicator');
    if (loadingDiv) {
        loadingDiv.remove();
    }
};
// Wrap the operation to show loading spinner
someButtonElement.addEventListener('click', async () => {
    try {
        startLoading();
        // Your long-running operation
        await someLongRunningOperation();
    } finally {
        stopLoading();
    }
});
This example adds a div with a spinner that appears when the operation starts and disappears when it completes.
CSS for the Spinner (Add to POS Assets):
- You’ll also need to add CSS to make the spinner look good. Modify the CSS files located in addons/point_of_sale/static/src/css/ or add your custom CSS.
#loading-indicator {    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.5);
    display: flex;
    justify-content: center;
    align-items: center;
    z-index: 9999;
}
.spinner {
    border: 4px solid rgba(255, 255, 255, 0.3);
    border-top: 4px solid #fff;
    border-radius: 50%;
    width: 40px;
    height: 40px;
    animation: spin 0.8s linear infinite;
}
@keyframes spin {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
}
6. Restart Odoo Service