| Schedule of Earnings Per Share, Basic and Diluted | Basic earnings per share is calculated using the Company’s weighted-average outstanding common shares, including vested restricted shares. When the effects are not anti-dilutive, diluted earnings per share is calculated using the weighted-average outstanding common shares; the dilutive effect of convertible preferred stock, under the “if converted” method; and the treasury stock method with regard to warrants and stock options; all as determined under the treasury stock method. 
|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  
|  | Three Months Ended September 30, |  | Nine Months Ended September 30, |  
|  | 2020 |  | 2019 |  | 2020 |  | 2019 |  
| Numerator: |  |  |  |  |  |  |  |  
| Net income attributable to common shareholders | $ | 20,002 |  |  | $ | 8,870 |  |  | $ | 30,568 |  |  | $ | 22,233 |  |  
| Adjustment for accretion of tax equity financing fees | (91) |  |  | — |  |  | (91) |  |  | — |  |  
| Income attributable to common shareholders | $ | 19,911 |  |  | $ | 8,870 |  |  | $ | 30,477 |  |  | $ | 22,233 |  |  
| Denominator: |  |  |  |  |  |  |  |  
| Basic weighted-average shares outstanding | 47,788 |  |  | 46,555 |  |  | 47,597 |  |  | 46,413 |  |  
| Effect of dilutive securities: |  |  |  |  |  |  |  |  
| Stock options | 1,313 |  |  | 1,138 |  |  | 1,188 |  |  | 1,262 |  |  
| Diluted weighted-average shares outstanding | 49,101 |  |  | 47,693 |  |  | 48,785 |  |  | 47,675 |  |  
| Net income per share attributable to common shareholders: |  |  |  |  |  |  |  |  
| Basic | $ | 0.42 |  |  | $ | 0.19 |  |  | $ | 0.64 |  |  | $ | 0.48 |  |  
| Diluted | $ | 0.41 |  |  | $ | 0.19 |  |  | $ | 0.62 |  |  | $ | 0.47 |  |  
|  |  |  |  |  |  |  |  |  
| 
Potentially dilutive shares(1)
 | 1,268 |  |  | 1,152 |  |  | 1,146 |  |  | 642 |  |  
|  |  |  |  |  |  |  |  |  | (1) Potentially dilutive shares attributable to stock options were excluded from the computation of diluted earnings per share as the effect would have been anti-dilutive. |  | 
| Schedule of Share-based Compensation Expense | The Company recorded stock-based compensation expense, including expense related to the ESPP, as follows: 
|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  
|  | Three Months Ended September 30, |  | Nine Months Ended September 30, |  
|  | 2020 |  | 2019 |  | 2020 |  | 2019 |  
| Stock-based compensation expense | $ | 521 |  |  | $ | 413 |  |  | $ | 1,380 |  |  | $ | 1,195 |  |  |