Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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
            });
        }
Exemplo n.º 3
0
        /// <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.'"));
        }
Exemplo n.º 4
0
        /// <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));
        }