Selected Quarterly Financial Data (Unaudited) - Schedule of Quarterly Financial Information (Details) - USD ($)
$ / shares in Units, shares in Thousands, $ in Thousands
3 Months Ended 12 Months Ended
Dec. 31, 2019
Sep. 27, 2019
Jun. 28, 2019
Mar. 29, 2019
Dec. 31, 2018
Sep. 28, 2018
Jun. 29, 2018
Mar. 30, 2018
Dec. 31, 2019
Dec. 31, 2018
Dec. 31, 2017
Quarterly Financial Information Disclosure [Abstract]                      
Total revenue $ 365,271 $ 359,854 $ 331,589 $ 325,928 $ 329,561 $ 308,095 $ 321,132 $ 320,516 $ 1,382,642 $ 1,279,304 $ 1,114,788
Gross profit 34,246 34,317 31,036 30,332 30,030 29,131 29,068 26,466      
Operating income 15,626 14,383 11,193 10,413 12,648 14,006 12,998 8,671 51,615 48,323 41,220
Net income $ 10,626 $ 9,382 $ 7,617 $ 7,091 $ 10,124 $ 9,866 $ 9,195 $ 6,111 $ 34,716 $ 35,296 $ 59,497
Basic earnings per share (in dollars per share) $ 0.92 $ 0.82 $ 0.66 $ 0.63 $ 0.90 $ 0.88 $ 0.82 $ 0.55 $ 3.03 $ 3.14 $ 5.40
Diluted earnings per share (in dollars per share) $ 0.91 $ 0.80 $ 0.66 $ 0.62 $ 0.89 $ 0.86 $ 0.81 $ 0.54 $ 2.99 $ 3.10 $ 5.31
Weighted average number of shares outstanding - basic (in shares) 11,515 11,506 11,455 11,292 11,262 11,248 11,235 11,146 11,444 11,224 11,021
Weighted average number of shares outstanding - diluted (in shares) 11,728 11,678 11,605 11,399 11,369 11,406 11,383 11,338 11,612 11,378 11,209