Description of Business and Summary of Significant Accounting Policies - Condensed Consolidated Statements of Income (Details) - USD ($) $ / shares in Units, $ in Thousands |
3 Months Ended | 12 Months Ended | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
Dec. 31, 2020 |
Oct. 02, 2020 |
Jul. 03, 2020 |
Apr. 03, 2020 |
Dec. 31, 2019 |
Sep. 27, 2019 |
Jun. 28, 2019 |
Mar. 29, 2019 |
Dec. 31, 2020 |
Dec. 31, 2019 |
Dec. 31, 2018 |
|
| Error Corrections and Prior Period Adjustments Restatement [Line Items] | |||||||||||
| Revenue | $ 1,395,529 | $ 1,382,525 | $ 1,279,036 | ||||||||
| Cost of revenue | 1,271,375 | 1,254,560 | 1,164,609 | ||||||||
| Operating income | $ 13,725 | $ 14,837 | $ 2,430 | $ 12,483 | $ 15,649 | $ 12,416 | $ 11,193 | $ 10,391 | 43,475 | 49,649 | 48,055 |
| Income from operations before income taxes | 38,682 | 43,179 | 42,984 | ||||||||
| Income tax expense | 1,731 | 10,003 | 7,898 | ||||||||
| Net income | $ 16,781 | $ 10,391 | $ 1,111 | $ 8,668 | $ 10,644 | $ 7,841 | $ 7,617 | $ 7,074 | $ 36,951 | $ 33,176 | $ 35,086 |
| Earnings per share | |||||||||||
| Basic (in dollars per share) | $ 1.44 | $ 0.89 | $ 0.10 | $ 0.75 | $ 0.92 | $ 0.69 | $ 0.66 | $ 0.63 | $ 3.19 | $ 2.90 | $ 3.13 |
| Diluted (in dollars per share) | $ 1.42 | $ 0.88 | $ 0.09 | $ 0.74 | $ 0.91 | $ 0.67 | $ 0.66 | $ 0.62 | $ 3.14 | $ 2.86 | $ 3.08 |
| As Previously Reported | |||||||||||
| Error Corrections and Prior Period Adjustments Restatement [Line Items] | |||||||||||
| Revenue | $ 1,382,642 | $ 1,279,304 | |||||||||
| Cost of revenue | 1,252,711 | 1,164,609 | |||||||||
| Operating income | 51,615 | 48,323 | |||||||||
| Income from operations before income taxes | 45,145 | 43,252 | |||||||||
| Income tax expense | 10,429 | 7,956 | |||||||||
| Net income | $ 34,716 | $ 35,296 | |||||||||
| Earnings per share | |||||||||||
| Basic (in dollars per share) | $ 3.03 | $ 3.14 | |||||||||
| Diluted (in dollars per share) | $ 2.99 | $ 3.10 | |||||||||
| Correction | |||||||||||
| Error Corrections and Prior Period Adjustments Restatement [Line Items] | |||||||||||
| Revenue | $ (117) | $ (268) | |||||||||
| Cost of revenue | 1,849 | 0 | |||||||||
| Operating income | (1,966) | (268) | |||||||||
| Income from operations before income taxes | (1,966) | (268) | |||||||||
| Income tax expense | (426) | (58) | |||||||||
| Net income | $ (1,540) | $ (210) | |||||||||
| Earnings per share | |||||||||||
| Basic (in dollars per share) | $ (0.13) | $ (0.01) | |||||||||
| Diluted (in dollars per share) | $ (0.13) | $ (0.02) | |||||||||