diff --git a/fusion_clock/controllers/clock_nfc_kiosk.py b/fusion_clock/controllers/clock_nfc_kiosk.py index 67e5da2f..32ab5e70 100644 --- a/fusion_clock/controllers/clock_nfc_kiosk.py +++ b/fusion_clock/controllers/clock_nfc_kiosk.py @@ -237,3 +237,9 @@ class FusionClockNfcKiosk(http.Controller): 'message': f'{employee.name} clocked out', 'net_hours_today': round(attendance.x_fclk_net_hours or 0, 2), } + + @http.route('/fusion_clock/kiosk/nfc/employee_search', type='jsonrpc', auth='user', methods=['POST']) + def nfc_employee_search(self, query='', **kw): + """Delegate to the existing kiosk search to avoid duplication.""" + from .clock_kiosk import FusionClockKiosk + return FusionClockKiosk().kiosk_search(query=query) diff --git a/fusion_clock/tests/test_clock_nfc_kiosk.py b/fusion_clock/tests/test_clock_nfc_kiosk.py index ab04cfe9..e58ba12d 100644 --- a/fusion_clock/tests/test_clock_nfc_kiosk.py +++ b/fusion_clock/tests/test_clock_nfc_kiosk.py @@ -379,3 +379,35 @@ class TestTapPhotoHandling(HttpCase): self.ICP.set_param('fusion_clock.nfc_photo_required', 'False') result = self._tap(photo_b64='') self.assertTrue(result.get('success')) + + +@tagged('-at_install', 'post_install', 'fusion_clock') +class TestEmployeeSearch(HttpCase): + + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.ICP = cls.env['ir.config_parameter'].sudo() + cls.ICP.set_param('fusion_clock.enable_nfc_kiosk', 'True') + cls.kiosk_user = cls.env['res.users'].create({ + 'name': 'Search Kiosk User', + 'login': 'nfc-kiosk-search', + 'password': 'kioskpass123', + 'group_ids': [(4, cls.env.ref('fusion_clock.group_fusion_clock_manager').id)], + }) + cls.env['hr.employee'].create({'name': 'Searchable Steve', 'x_fclk_enable_clock': True}) + + def test_search_returns_matching_employees(self): + self.authenticate('nfc-kiosk-search', 'kioskpass123') + response = self.url_open( + '/fusion_clock/kiosk/nfc/employee_search', + data=json.dumps({ + 'jsonrpc': '2.0', 'method': 'call', + 'params': {'query': 'Steve'}, + }), + headers={'Content-Type': 'application/json'}, + ) + result = response.json().get('result', {}) + self.assertIn('employees', result) + names = [e['name'] for e in result['employees']] + self.assertIn('Searchable Steve', names)