private static void ValidateList(IEnumerable <FuelScaleChargeResult> fuelScaleCharges, List <string> errors) { decimal vatRate = fuelScaleCharges.First().VatRate; FuelScaleChargeResult last = null; foreach (var item in fuelScaleCharges) { if (last != null) { if (last.CO2Band >= item.CO2Band) { errors.Add($"{nameof(item.CO2Band)} has decreased from last item."); } if (last.Nett >= item.Nett) { errors.Add($"{nameof(item.Nett)} has decreased from last item."); } if (last.Vat >= item.Vat) { errors.Add($"{nameof(item.Vat)} has decreased from last item."); } } if (vatRate != item.VatRate) { errors.Add($"VAT Rate has changed from {vatRate} to {item.VatRate}"); } if (item.Nett == 0) { errors.Add($"{nameof(item.Nett)} cannot be 0"); } if (item.Vat == 0) { errors.Add($"{nameof(item.Vat)} cannot be 0"); } if (item.CO2Band == 0) { errors.Add($"{nameof(item.CO2Band)} cannot be 0"); } last = item; } }
private static IEnumerable <FuelScaleChargeResult> GetValues(HtmlNode table) { var intExpression = new Regex("([0-9]+)"); var resp = new List <FuelScaleChargeResult>(); bool isStarted = false; foreach (var row in table.SelectNodes(".//tbody/tr")) { if (!isStarted && !row.InnerText.Contains("or less")) { continue; } isStarted = true; var cells = row.SelectNodes(".//td"); try { var scaleCharge = new FuelScaleChargeResult() { CO2Band = int.Parse(intExpression.Match(cells[0].InnerText).Value, NumberStyles.AllowThousands, CultureInfo.CurrentCulture), Vat = decimal.Parse(cells[2].InnerText, NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, CultureInfo.CurrentCulture), Nett = decimal.Parse(cells[3].InnerText, NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, CultureInfo.CurrentCulture) }; // CO2Band is actually the upper bound, but these pages use round-down to next 5g/km scaleCharge.CO2Band += 4; resp.Add(scaleCharge); } catch (Exception) { throw; } } resp.Last().CO2Band = int.MaxValue; return(resp); }