/// <summary> /// Parses the HMRC vat returns PDF. /// </summary> /// <param name="fileName">Name of the file.</param> /// <param name="info">The information.</param> /// <returns></returns> public Optional <VatReturnsPerBusiness> ParseHmrcVatReturnsPdf(string fileName, InfoAccumulator info) { PdfReader reader; try { reader = new FdfReader(fileName); } catch (Exception ex) { info.AddException(ex); return(null); } VatReturnsPerBusiness vatReturnsPerBusiness = new VatReturnsPerBusiness(); HmrcBusiness hmrcBusiness = new HmrcBusiness(); VatReturnRecord vatReturnRecord = new VatReturnRecord(); vatReturnsPerBusiness.VatReturnRecord = vatReturnRecord; vatReturnsPerBusiness.Business = hmrcBusiness; vatReturnsPerBusiness.Entries = ParseVatReturnDetails(reader, info).Value; FillPeriodData(reader, vatReturnRecord, info); FillBusinessData(reader, vatReturnRecord, hmrcBusiness, info); if (!info.HasErrors) { return(vatReturnsPerBusiness); } return(null); }
/// <summary> /// Converts to vat return record. /// </summary> /// <param name="vatInfo">The vat information.</param> /// <returns></returns> private VatReturnsPerBusiness ConvertToVatReturnRecord(VatReturnInfo vatInfo) { VatReturnRecord v = new VatReturnRecord { DateDue = vatInfo.DueDate, DateFrom = vatInfo.FromDate, DateTo = vatInfo.ToDate, Period = vatInfo.Period, RegistrationNo = vatInfo.RegistrationNumber }; HmrcBusiness business = new HmrcBusiness { RegistrationNo = vatInfo.RegistrationNumber, Name = vatInfo.BusinessName, Address = CreateAddressString(vatInfo.BusinessAddress) }; IEnumerable <VatReturnEntry> entries = CreateVatReturnEntries(vatInfo); return(new VatReturnsPerBusiness { VatReturnRecord = v, Entries = entries, Business = business }); }
/// <summary> /// Fills the business data. /// </summary> /// <param name="reader">The reader.</param> /// <param name="vatReturnRecord">The vat return record.</param> /// <param name="business">The business.</param> /// <param name="info">The information.</param> private void FillBusinessData(PdfReader reader, VatReturnRecord vatReturnRecord, HmrcBusiness business, InfoAccumulator info) { ReadLongField(reader, RegistrationNo) .IfNotEmpty(reg => { vatReturnRecord.RegistrationNo = reg; business.RegistrationNo = reg; }) .IfEmpty(() => RegisterError(info, "Invalid 'registration number'")); ReadStringField(reader, BusinessName) .IfNotEmpty(name => business.Name = name) .IfEmpty(() => RegisterError(info, "Invalid 'business name'")); AddressFields .SelectMany(addr => ReadStringField(reader, addr)) .DefaultIfEmpty(null) //otherwise, if collection is empty, 'Aggregate' below will throw an exception .Aggregate((s1, s2) => s1 + " " + s2) .AsOptional() .IfNotEmpty(addr => business.Address = addr) .IfEmpty(() => RegisterError(info, "Invalid 'business address.'")); }
/// <summary> /// Saves the business. /// </summary> /// <param name="business">The business.</param> /// <param name="connection">The connection.</param> /// <returns></returns> private int SaveBusiness(HmrcBusiness business, SqlConnection connection) { var cmd = GetInsertCommand(business, connection, "Business", "Id", SkipColumns("Id")); return(ExecuteInsertCommand(cmd)); }