protected override DTO.ServiceResponse ProcessScrape(string outputPath, string debugID)
        {
            DTO.ServiceResponse response = null;
            string statementFilePath     = Path.Combine(outputPath, "statement.qfx");
            string noStatementFilePath   = Path.Combine(outputPath, "empty_statement.txt");

            if (File.Exists(statementFilePath))
            {
                string statementOfx            = File.ReadAllText(statementFilePath);
                Parse.OfxToXmlParser parser    = new Parse.OfxToXmlParser(statementOfx);
                XElement             parsedOfx = parser.Parse();

                Parse.OfxResponseBuilder responseBuilder = new Parse.OfxResponseBuilder();
                response = responseBuilder.BuildStatementResponse(parsedOfx, m_statementParameters.DateStart, m_statementParameters.DateEnd);
            }
            else if (File.Exists(noStatementFilePath))
            {
                response = new DTO.StatementResponse(HttpStatusCode.OK);
            }
            else
            {
                response = new DTO.ResponseError(HttpStatusCode.BadRequest)
                {
                    friendly_error = "An error occured when atempting to get account statement.",
                    detailed_error = "statement file missing"
                };
            }

            return(response);
        }
        public DTO.StatementResponse BuildStatementResponse(XElement parsedOfx, DateTime startDate, DateTime endDate)
        {
            var response = new DTO.StatementResponse();

            var transactions = parsedOfx.Element("BANKTRANLIST");

            if (transactions != null)
            {
                response.statement = new DTO.Statement();
                response.statement.ledger_balance    = new  DTO.StatementBalance();
                response.statement.available_balance = new  DTO.StatementBalance();

                ExtractBalance(parsedOfx.Element("LEDGERBAL"), response.statement.ledger_balance);
                ExtractBalance(parsedOfx.Element("AVAILBAL"), response.statement.available_balance);

                var ofxTransactions =
                    (from c in parsedOfx.Descendants("STMTTRN")
                     let name = ExtractAndScrubElementText(c.Element("NAME"))
                                let memo = ExtractAndScrubElementText(c.Element("MEMO"))
                                           select new DTO.StatementTransaction {
                    id = c.Element("FITID").Value,
                    type = c.Element("TRNTYPE").Value,
                    date = ConvertDateTimeToUTC(c.Element("DTPOSTED").Value),
                    amount = decimal.Parse(
                        c.Element("TRNAMT").Value,
                        NumberFormatInfo.InvariantInfo),
                    name = name
                }).ToList();

                response.statement.transactions = ofxTransactions
                                                  .Where(t => t.date >= startDate && t.date <= endDate)
                                                  .ToList();
            }

            return(response);
        }