/// <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> /// Fills the period data. /// </summary> /// <param name="reader">The reader.</param> /// <param name="vatReturnRecord">The vat return record.</param> /// <param name="info">The information.</param> /// <returns></returns> private void FillPeriodData(PdfReader reader, VatReturnRecord vatReturnRecord, InfoAccumulator info) { ReadStringField(reader, Period) .IfNotEmpty(val => vatReturnRecord.Period = val) .IfEmpty(() => RegisterError(info, "Invalid 'period'.")); ReadDateTimeField(reader, DateFrom) .IfNotEmpty(from => vatReturnRecord.DateFrom = from) .IfEmpty(() => RegisterError(info, "Invalid 'date from'.")); ReadDateTimeField(reader, DateTo) .IfNotEmpty(to => vatReturnRecord.DateTo = to) .IfEmpty(() => RegisterError(info, "Invalid 'date to'.")); ReadDateTimeField(reader, DateDue) .IfNotEmpty(due => vatReturnRecord.DateDue = due) .IfEmpty(() => RegisterError(info, "Invalid 'date due'.")); }
/// <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> /// 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> /// Saves the vat return record. /// </summary> /// <param name="record">The record.</param> /// <param name="connection">The connection.</param> /// <returns></returns> private int SaveVatReturnRecord(VatReturnRecord record, SqlConnection connection) { var cmd = GetInsertCommand(record, connection, "MP_VatReturnRecords", "Id", SkipColumns("Id")); return(ExecuteInsertCommand(cmd)); }