Schedule of Restatement Items on Consolidated Statement of Operations (Unaudited) (Details) - USD ($) $ / shares in Units, $ in Thousands |
3 Months Ended |
6 Months Ended |
Jun. 30, 2023 |
Mar. 31, 2023 |
Jun. 30, 2022 |
Mar. 31, 2022 |
Jun. 30, 2023 |
Jun. 30, 2022 |
| Revenue: |
|
|
|
|
|
|
|
| Total Revenue |
|
$ 79,400
|
|
$ 70,500
|
|
$ 144,300
|
$ 130,800
|
| Cost of Sales |
|
|
|
|
|
|
|
| Cost of Service |
[1] |
(20,500)
|
|
(17,800)
|
|
(35,500)
|
(34,600)
|
| Cost of Product sales |
[1] |
(8,400)
|
|
(4,600)
|
|
(15,100)
|
(7,100)
|
| Selling, general and administrative expenses |
|
(26,600)
|
|
(25,700)
|
|
(55,800)
|
(48,900)
|
| Acquisition and integration related transaction expenses |
|
|
|
|
|
|
(200)
|
| Depreciation and amortization |
|
(10,100)
|
|
(10,200)
|
|
(19,500)
|
(20,900)
|
| Net operating income |
|
13,800
|
|
12,200
|
|
18,400
|
19,100
|
| Other expense |
|
|
|
|
|
|
|
| Interest expense, net |
|
(7,300)
|
|
(5,900)
|
|
(13,600)
|
(12,400)
|
| Gain on disposal of business |
|
|
|
|
|
|
900
|
| Other finance income (expense) |
|
100
|
|
300
|
|
200
|
600
|
| Total other expense, net |
|
(7,200)
|
|
(5,600)
|
|
(13,400)
|
(10,900)
|
| Net income before income taxes |
|
6,600
|
|
6,600
|
|
5,000
|
8,200
|
| Income tax (expense) benefit |
|
(1,000)
|
|
(200)
|
|
(800)
|
(300)
|
| Net income |
|
5,600
|
$ (1,400)
|
6,400
|
$ 1,500
|
4,200
|
7,900
|
| Other comprehensive income: |
|
|
|
|
|
|
|
| Foreign currency translation (loss) gain |
|
(2,700)
|
$ (2,900)
|
9,000
|
$ 3,500
|
(5,600)
|
12,500
|
| Reclassification of loss on hedging instrument to comprehensive income |
|
100
|
|
200
|
|
300
|
400
|
| Actuarial (losses) gains on pension plan |
|
300
|
|
(800)
|
|
500
|
(700)
|
| Other comprehensive (loss) income |
|
(2,300)
|
|
8,400
|
|
(4,800)
|
12,200
|
| Comprehensive income (loss) |
|
$ 3,300
|
|
$ 14,800
|
|
$ (600)
|
$ 20,100
|
| Net income per common share - basic |
|
$ 0.20
|
|
$ 0.23
|
|
$ 0.15
|
$ 0.28
|
| Net income per common share - diluted |
|
$ 0.19
|
|
$ 0.22
|
|
$ 0.14
|
$ 0.27
|
| Weighted average number of shares outstanding during the year - basic |
|
28,186,725
|
|
28,426,248
|
|
28,081,041
|
28,431,576
|
| Weighted average number of shares outstanding during the year - diluted |
|
29,073,078
|
|
29,349,718
|
|
29,023,288
|
29,446,526
|
| Stock-based compensation expense included in: |
|
|
|
|
|
|
|
| Selling, general and administrative expenses |
|
$ (3,100)
|
|
$ (2,600)
|
|
$ (6,100)
|
$ (5,400)
|
| Service [Member] |
|
|
|
|
|
|
|
| Revenue: |
|
|
|
|
|
|
|
| Total Revenue |
|
67,500
|
|
64,100
|
|
125,000
|
120,100
|
| Product Sales [Member] |
|
|
|
|
|
|
|
| Revenue: |
|
|
|
|
|
|
|
| Total Revenue |
|
11,900
|
|
6,400
|
|
19,300
|
10,700
|
| Previously Reported [Member] |
|
|
|
|
|
|
|
| Revenue: |
|
|
|
|
|
|
|
| Total Revenue |
|
80,400
|
|
71,300
|
|
146,400
|
131,900
|
| Cost of Sales |
|
|
|
|
|
|
|
| Cost of Service |
|
(13,400)
|
|
(11,700)
|
|
(24,300)
|
(23,500)
|
| Cost of Product sales |
|
(9,800)
|
|
(4,400)
|
|
(15,600)
|
(6,500)
|
| Selling, general and administrative expenses |
|
(34,400)
|
|
(31,900)
|
|
(68,700)
|
(61,500)
|
| Acquisition and integration related transaction expenses |
|
|
|
(100)
|
|
|
(200)
|
| Depreciation and amortization |
|
(10,400)
|
|
(9,800)
|
|
(19,300)
|
(19,900)
|
| Net operating income |
|
12,400
|
|
13,400
|
|
18,500
|
20,300
|
| Other expense |
|
|
|
|
|
|
|
| Interest expense, net |
|
(7,300)
|
|
(6,000)
|
|
(13,600)
|
(12,500)
|
| Gain on disposal of business |
|
|
|
|
|
|
900
|
| Other finance income (expense) |
|
100
|
|
300
|
|
200
|
600
|
| Total other expense, net |
|
(7,200)
|
|
(5,700)
|
|
(13,400)
|
(11,000)
|
| Net income before income taxes |
|
5,200
|
|
7,700
|
|
5,100
|
9,300
|
| Income tax (expense) benefit |
|
(1,100)
|
|
(200)
|
|
(1,200)
|
(300)
|
| Net income |
|
4,100
|
|
7,500
|
|
3,900
|
9,000
|
| Other comprehensive income: |
|
|
|
|
|
|
|
| Foreign currency translation (loss) gain |
|
(1,600)
|
|
5,800
|
|
(3,300)
|
8,200
|
| Reclassification of loss on hedging instrument to comprehensive income |
|
100
|
|
200
|
|
300
|
400
|
| Actuarial (losses) gains on pension plan |
|
(300)
|
|
2,600
|
|
1,700
|
3,300
|
| Other comprehensive (loss) income |
|
(1,800)
|
|
8,600
|
|
(1,300)
|
11,900
|
| Comprehensive income (loss) |
|
$ 2,300
|
|
$ 16,100
|
|
$ 2,600
|
$ 20,900
|
| Net income per common share - basic |
|
$ 0.16
|
|
$ 0.28
|
|
$ 0.15
|
$ 0.34
|
| Net income per common share - diluted |
|
$ 0.14
|
|
$ 0.26
|
|
$ 0.13
|
$ 0.31
|
| Weighted average number of shares outstanding during the year - basic |
|
26,267,215
|
|
26,826,014
|
|
26,211,589
|
26,838,339
|
| Weighted average number of shares outstanding during the year - diluted |
|
29,041,781
|
|
29,262,690
|
|
28,992,987
|
29,375,570
|
| Stock-based compensation expense included in: |
|
|
|
|
|
|
|
| Selling, general and administrative expenses |
|
$ (3,100)
|
|
$ (2,600)
|
|
$ (6,100)
|
$ (5,400)
|
| Previously Reported [Member] | Service [Member] |
|
|
|
|
|
|
|
| Revenue: |
|
|
|
|
|
|
|
| Total Revenue |
|
68,100
|
|
64,800
|
|
126,400
|
121,800
|
| Previously Reported [Member] | Product Sales [Member] |
|
|
|
|
|
|
|
| Revenue: |
|
|
|
|
|
|
|
| Total Revenue |
|
12,300
|
|
6,500
|
|
20,000
|
10,100
|
| Revision of Prior Period, Reclassification, Adjustment [Member] |
|
|
|
|
|
|
|
| Revenue: |
|
|
|
|
|
|
|
| Total Revenue |
|
(1,000)
|
|
(800)
|
|
(2,100)
|
(1,100)
|
| Cost of Sales |
|
|
|
|
|
|
|
| Cost of Service |
|
(7,100)
|
|
(6,100)
|
|
(11,200)
|
(11,100)
|
| Cost of Product sales |
|
1,400
|
|
(200)
|
|
500
|
(600)
|
| Selling, general and administrative expenses |
|
7,800
|
|
6,200
|
|
12,900
|
12,600
|
| Acquisition and integration related transaction expenses |
|
|
|
100
|
|
|
|
| Depreciation and amortization |
|
300
|
|
(100)
|
|
(200)
|
(400)
|
| Net operating income |
|
1,400
|
|
(900)
|
|
(100)
|
(600)
|
| Other expense |
|
|
|
|
|
|
|
| Interest expense, net |
|
|
|
100
|
|
|
100
|
| Gain on disposal of business |
|
|
|
|
|
|
|
| Other finance income (expense) |
|
|
|
|
|
|
|
| Total other expense, net |
|
|
|
100
|
|
|
100
|
| Net income before income taxes |
|
1,400
|
|
(800)
|
|
(100)
|
(500)
|
| Income tax (expense) benefit |
|
100
|
|
|
|
400
|
|
| Net income |
|
1,500
|
|
(800)
|
|
300
|
(500)
|
| Other comprehensive income: |
|
|
|
|
|
|
|
| Foreign currency translation (loss) gain |
|
(1,100)
|
|
3,200
|
|
(2,300)
|
4,300
|
| Reclassification of loss on hedging instrument to comprehensive income |
|
|
|
|
|
|
|
| Actuarial (losses) gains on pension plan |
|
600
|
|
(3,400)
|
|
(1,200)
|
(4,000)
|
| Other comprehensive (loss) income |
|
(500)
|
|
(200)
|
|
(3,500)
|
300
|
| Comprehensive income (loss) |
|
$ 1,000
|
|
$ (1,000)
|
|
$ (3,200)
|
$ (200)
|
| Net income per common share - basic |
|
$ 0.04
|
|
$ (0.04)
|
|
|
$ (0.03)
|
| Net income per common share - diluted |
|
$ 0.05
|
|
|
|
$ 0.01
|
$ (0.02)
|
| Weighted average number of shares outstanding during the year - basic |
|
1,919,510
|
|
1,600,234
|
|
1,869,452
|
1,593,237
|
| Weighted average number of shares outstanding during the year - diluted |
|
31,297
|
|
87,028
|
|
30,301
|
70,956
|
| Stock-based compensation expense included in: |
|
|
|
|
|
|
|
| Selling, general and administrative expenses |
|
|
|
|
|
|
|
| Revision of Prior Period, Reclassification, Adjustment [Member] | Service [Member] |
|
|
|
|
|
|
|
| Revenue: |
|
|
|
|
|
|
|
| Total Revenue |
|
$ (600)
|
|
(700)
|
|
$ (1,400)
|
(1,700)
|
| Revision of Prior Period, Reclassification, Adjustment [Member] | Product Sales [Member] |
|
|
|
|
|
|
|
| Revenue: |
|
|
|
|
|
|
|
| Total Revenue |
|
$ (400)
|
|
(100)
|
|
$ (700)
|
600
|
| Previous Revision [Member] |
|
|
|
|
|
|
|
| Revenue: |
|
|
|
|
|
|
|
| Total Revenue |
|
|
|
|
|
|
|
| Cost of Sales |
|
|
|
|
|
|
|
| Cost of Service |
|
|
|
|
|
|
|
| Cost of Product sales |
|
|
|
|
|
|
|
| Selling, general and administrative expenses |
|
|
|
|
|
|
|
| Acquisition and integration related transaction expenses |
|
|
|
|
|
|
|
| Depreciation and amortization |
|
|
|
(300)
|
|
|
(600)
|
| Net operating income |
|
|
|
(300)
|
|
|
(600)
|
| Other expense |
|
|
|
|
|
|
|
| Interest expense, net |
|
|
|
|
|
|
|
| Gain on disposal of business |
|
|
|
|
|
|
|
| Other finance income (expense) |
|
|
|
|
|
|
|
| Total other expense, net |
|
|
|
|
|
|
|
| Net income before income taxes |
|
|
|
(300)
|
|
|
(600)
|
| Income tax (expense) benefit |
|
|
|
|
|
|
|
| Net income |
|
|
|
(300)
|
|
|
(600)
|
| Other comprehensive income: |
|
|
|
|
|
|
|
| Foreign currency translation (loss) gain |
|
|
|
|
|
|
|
| Reclassification of loss on hedging instrument to comprehensive income |
|
|
|
|
|
|
|
| Actuarial (losses) gains on pension plan |
|
|
|
|
|
|
|
| Other comprehensive (loss) income |
|
|
|
|
|
|
|
| Comprehensive income (loss) |
|
|
|
$ (300)
|
|
|
$ (600)
|
| Net income per common share - basic |
|
|
|
$ (0.01)
|
|
|
$ (0.03)
|
| Net income per common share - diluted |
|
|
|
$ (0.04)
|
|
|
$ (0.02)
|
| Weighted average number of shares outstanding during the year - basic |
|
|
|
|
|
|
|
| Weighted average number of shares outstanding during the year - diluted |
|
|
|
|
|
|
|
| Stock-based compensation expense included in: |
|
|
|
|
|
|
|
| Selling, general and administrative expenses |
|
|
|
|
|
|
|
| Previous Revision [Member] | Service [Member] |
|
|
|
|
|
|
|
| Revenue: |
|
|
|
|
|
|
|
| Total Revenue |
|
|
|
|
|
|
|
| Previous Revision [Member] | Product Sales [Member] |
|
|
|
|
|
|
|
| Revenue: |
|
|
|
|
|
|
|
| Total Revenue |
|
|
|
|
|
|
|
|
|