Hi,
This is a known issue that can happen in community setups due to network instability, client-side retries, or failure handling bugs.
Root Causes (Common in POS Community):
Offline or unstable network
If the POS goes temporarily offline, the order stays in the browser’s local storage and can be resent when back online, causing duplicates.
Manual browser refresh or crash recovery
The order may re-submit automatically from cache/local storage.
No unique_order_id check on backend
Odoo Community lacks built-in validation to reject duplicate orders based on unique POS order reference (unlike Enterprise with proper sync protections).
Recommended Fixes
1. Enable and enforce unique order identifiers
Modify your POS order model to reject duplicate orders based on a unique ID.
Step-by-step:
Each order has a pos_reference (e.g., SHOP/0012).
Add a constraint on pos.order to prevent duplicates.from odoo import models, api, exceptions
class PosOrder(models.Model):
_inherit = 'pos.order'
@api.model
def create(self, vals):
if vals.get('pos_reference'):
existing = self.search([('pos_reference', '=', vals['pos_reference'])], limit=1)
if existing:
raise exceptions.ValidationError("Duplicate POS order detected: %s" % vals['pos_reference'])
return super().create(vals)
Hope it helps