").Append(E(bid.Title)).Append("
"); + if (!string.IsNullOrWhiteSpace(bid.Description)) sb.Append("").Append(E(bid.Description)).Append("
"); + sb.Append("| Description | Qty | Hours/day | Days | Rate | Estimate |
|---|---|---|---|---|---|
| ").Append(E(line.Description)).Append(line.CrewSize.HasValue ? $" ({line.CrewSize}-person)" : string.Empty) + .Append(" | ").Append(line.Quantity.ToString("0.##", CultureInfo.InvariantCulture)) + .Append(" | ").Append(line.EstimatedHoursPerDay?.ToString("0.##", CultureInfo.InvariantCulture) ?? "") + .Append(" | ").Append(line.EstimatedDays?.ToString("0.##", CultureInfo.InvariantCulture) ?? "") + .Append(" | ").Append(InvoicingService.FormatMoney(line.UnitRate, currency, 4)) + .Append(" | ").Append(InvoicingService.FormatMoney(line.EstimatedAmount, currency)).Append(" |
| Subtotal | ").Append(InvoicingService.FormatMoney(bid.EstimatedSubTotal, currency)).Append(" |
| Discount").Append(bid.DiscountPercent.HasValue ? $" ({bid.DiscountPercent.Value.ToString("0.##", CultureInfo.InvariantCulture)}%)" : string.Empty).Append(" | -").Append(InvoicingService.FormatMoney(bid.EstimatedDiscountAmount, currency)).Append(" |
| Tax (estimated) | ").Append(InvoicingService.FormatMoney(bid.EstimatedTaxAmount, currency)).Append(" |
| Estimated total | ").Append(InvoicingService.FormatMoney(bid.EstimatedTotal, currency)).Append(" |
Estimates are based on the requested hours and days; actual charges follow the daily time reports and the rate schedule in force.
"); + if (!string.IsNullOrWhiteSpace(bid.TermsText)) sb.Append("