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 |