Annual report pursuant to Section 13 and 15(d)

Revenue from Contracts with Customers - Summary of Impact of Adoption (Details)

v3.19.3.a.u2
Revenue from Contracts with Customers - Summary of Impact of Adoption (Details) - USD ($)
3 Months Ended 12 Months Ended
Dec. 31, 2019
Sep. 30, 2019
Jun. 30, 2019
Mar. 31, 2019
Dec. 31, 2018
Sep. 30, 2018
Jun. 30, 2018
Mar. 31, 2018
Dec. 31, 2019
Dec. 31, 2018
Dec. 31, 2017
Jan. 01, 2018
Assets:                        
Costs and estimated earnings in excess of billings $ 202,243,000       $ 86,842,000       $ 202,243,000 $ 86,842,000   $ 104,852,000
Prepaid expenses and other current assets 29,424,000       11,571,000       29,424,000 11,571,000   14,037,000
Deferred income taxes, net         0         0   0
Liabilities:                        
Accrued expenses and other current liabilities 31,356,000       35,947,000       31,356,000 35,947,000   23,260,000
Deferred income taxes, net 115,000       4,352,000       115,000 4,352,000   584,000
Shareholders' Equity:                        
Retained earnings 314,459,000       269,806,000       314,459,000 269,806,000   235,844,000
Income Statement [Abstract]                        
Revenues 306,612,000 $ 212,026,000 $ 198,183,000 $ 150,112,000 217,371,000 $ 205,375,000 $ 196,982,000 $ 167,410,000 866,933,000 787,138,000 $ 717,152,000  
Cost of revenues                 698,815,000 613,526,000 572,994,000  
Gross profit 47,654,000 44,693,000 43,139,000 32,632,000 49,201,000 46,162,000 42,776,000 35,473,000 168,118,000 173,612,000 144,158,000  
Operating expenses:                        
Selling, general and administrative expenses                 116,504,000 114,513,000 107,570,000  
Operating income                 51,614,000 59,099,000 36,588,000  
Other expenses, net                 15,061,000 16,709,000 7,871,000  
Income before (benefit) provision for income taxes                 36,553,000 42,390,000 28,717,000  
Income tax (benefit) provision                 (3,748,000) 4,813,000 (4,791,000)  
Net income                 40,301,000 37,577,000 33,508,000  
Net loss attributable to redeemable non-controlling interests                 4,135,000 407,000 3,983,000  
Net income attributable to common shareholders $ 22,203,000 $ 8,870,000 $ 9,216,000 $ 4,147,000 $ 11,593,000 $ 10,701,000 $ 8,702,000 $ 6,988,000 $ 44,436,000 $ 37,984,000 $ 37,491,000  
Basic income per share (in usd per share) $ 0.47 $ 0.19 $ 0.20 $ 0.09 $ 0.25 $ 0.23 $ 0.19 $ 0.15 $ 0.95 $ 0.83 $ 0.82  
Diluted income per share (in usd per share) $ 0.46 $ 0.19 $ 0.19 $ 0.09 $ 0.24 $ 0.23 $ 0.19 $ 0.15 $ 0.93 $ 0.81 $ 0.82  
606 Adjustments                        
Assets:                        
Costs and estimated earnings in excess of billings $ (10,848,000)       $ (6,372,000)       $ (10,848,000) $ (6,372,000)   (9,194,000)
Prepaid expenses and other current assets 3,648,000       927,000       3,648,000 927,000   4,343,000
Deferred income taxes, net                       1,003,000
Liabilities:                        
Accrued expenses and other current liabilities 1,209,000       1,070,000       1,209,000 1,070,000   1,190,000
Deferred income taxes, net (2,263,000)       (1,771,000)       (2,263,000) (1,771,000)   (584,000)
Shareholders' Equity:                        
Retained earnings (6,146,000)       (4,744,000)       (6,146,000) (4,744,000)   (4,454,000)
Income Statement [Abstract]                        
Revenues                 (4,476,000) 2,822,000    
Cost of revenues                 (2,582,000) 3,297,000    
Gross profit                 (1,894,000) (475,000)    
Operating expenses:                        
Selling, general and administrative expenses                 0 0    
Operating income                 (1,894,000) (475,000)    
Other expenses, net                 0 0    
Income before (benefit) provision for income taxes                 (1,894,000) (475,000)    
Income tax (benefit) provision                 (492,000) (185,000)    
Net income                 (1,402,000) (290,000)    
Net loss attributable to redeemable non-controlling interests                 0 0    
Net income attributable to common shareholders                 $ (1,402,000) $ (290,000)    
Basic income per share (in usd per share)                 $ (0.03) $ (0.01)    
Diluted income per share (in usd per share)                 $ (0.03) $ (0.01)    
Balances without adoption of Topic 606                        
Assets:                        
Costs and estimated earnings in excess of billings 213,091,000       93,214,000       $ 213,091,000 $ 93,214,000   95,658,000
Prepaid expenses and other current assets 25,776,000       10,644,000       25,776,000 10,644,000   18,380,000
Deferred income taxes, net                       1,003,000
Liabilities:                        
Accrued expenses and other current liabilities 30,147,000       34,877,000       30,147,000 34,877,000   24,450,000
Deferred income taxes, net 2,378,000       6,123,000       2,378,000 6,123,000   0
Shareholders' Equity:                        
Retained earnings $ 320,605,000       $ 274,550,000       320,605,000 274,550,000   $ 231,390,000
Income Statement [Abstract]                        
Revenues                 871,409,000 784,316,000    
Cost of revenues                 701,397,000 610,229,000    
Gross profit                 170,012,000 174,087,000    
Operating expenses:                        
Selling, general and administrative expenses                 116,504,000 114,513,000    
Operating income                 53,508,000 59,574,000    
Other expenses, net                 15,061,000 16,709,000    
Income before (benefit) provision for income taxes                 38,447,000 42,865,000    
Income tax (benefit) provision                 (3,256,000) 4,998,000    
Net income                 41,703,000 37,867,000    
Net loss attributable to redeemable non-controlling interests                 4,135,000 407,000    
Net income attributable to common shareholders                 $ 45,838,000 $ 38,274,000    
Basic income per share (in usd per share)                 $ 0.98 $ 0.84    
Diluted income per share (in usd per share)                 $ 0.96 $ 0.82