# -*- coding: utf-8 -*- # Copyright 2024-2026 Nexa Systems Inc. # License OPL-1 (Odoo Proprietary License v1.0) from odoo import models, fields, api class ResUsers(models.Model): _inherit = 'res.users' x_fc_is_field_staff = fields.Boolean( string='Field Staff', default=False, help='Check this to show the user in the Technician/Field Staff dropdown when scheduling tasks.', ) x_fc_start_address = fields.Char( related='partner_id.x_fc_start_address', readonly=False, string='Start Location', ) x_fc_tech_sync_id = fields.Char( string='Tech Sync ID', help='Shared identifier for this technician across Odoo instances. ' 'Must be the same value on all instances for the same person.', copy=False, ) @api.onchange('x_fc_tech_sync_id') def _onchange_x_fc_tech_sync_id_dup_warning(self): if not self.x_fc_tech_sync_id: return dup = self.env['res.users'].sudo().search([ ('id', '!=', self._origin.id or self.id), ('x_fc_tech_sync_id', '=', self.x_fc_tech_sync_id), ('x_fc_is_field_staff', '=', True), ('active', '=', True), ], limit=1) if dup: return { 'warning': { 'title': "Duplicate Tech Sync ID", 'message': ( f"Tech Sync ID {self.x_fc_tech_sync_id!r} is already used " f"by {dup.login} ({dup.partner_id.name}). Cross-instance " f"task sync only routes to ONE user per sync ID — " f"pick a unique value or only one tech's tasks will sync." ), } }