136a64ea2151200ec4a3b1a9f010f9eb11fdd21c
Odoo 19 silently ignores the legacy `_sql_constraints` list (repo CLAUDE.md rule 9), so it never created a DB constraint — two employees could be assigned the same x_fclk_nfc_card_uid and the NFC tap's search(limit=1) then picked an arbitrary one. Replace it with a declarative models.UniqueIndex carrying a partial WHERE predicate, so uniqueness is enforced only when a UID is set; employees without a card keep sharing a blank/NULL value. Makes test_nfc_models.TestNfcModels.test_card_uid_is_unique_when_set pass. Verified on entech (DB admin): 0 pre-existing duplicate UIDs, full upgrade + 61/61 fusion_clock tests green, and the unique partial index hr_employee_fclk_nfc_card_uid_unique now exists. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Description
Odoo 19 custom modules
Languages
Python
57.1%
HTML
24.8%
JavaScript
14.7%
SCSS
2.2%
CSS
0.8%
Other
0.3%