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); }