public List <QuickbooksDeposit> GetDepositsByDateRange(DateTime startDate, DateTime endDate) { var converter = new QBXMLConverter(); string xml = converter.ConvertDepositQuery(startDate, endDate); string queryResponseXml = ProcessRequest(xml); DepositQueryResponse response = converter.ConvertDepositQueryResponse(queryResponseXml); var results = new List <QuickbooksDeposit>(); if (response.Status.Code == 0) { results = response.Deposits; } return(results); }
public DepositQueryResponse ConvertDepositQueryResponse(string xml) { var response = new DepositQueryResponse(); var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(xml); XmlNodeList responseNode = xmlDoc.GetElementsByTagName("DepositQueryRs"); XmlNodeList depositNodes = xmlDoc.GetElementsByTagName("DepositRet"); response.Status = new QuickbooksStatus() { Code = int.Parse(responseNode[0].Attributes["statusCode"].Value), Severity = responseNode[0].Attributes["statusSeverity"].Value, Message = responseNode[0].Attributes["statusMessage"].Value }; response.Deposits = new List <QuickbooksDeposit>(); foreach (XmlNode depositNode in depositNodes) { XmlNodeList childNodes = depositNode.ChildNodes; var deposit = new QuickbooksDeposit() { TxnId = depositNode["TxnID"]?.InnerText, TimeCreated = DateTime.Parse(depositNode["TimeCreated"]?.InnerText), TimeModified = DateTime.Parse(depositNode["TimeModified"]?.InnerText), EditSequence = long.Parse(depositNode["EditSequence"]?.InnerText), TxnNumber = int.Parse(depositNode["TxnNumber"]?.InnerText), TxnDate = DateTime.Parse(depositNode["TxnDate"]?.InnerText), Memo = depositNode["Memo"]?.InnerText, DepositTotal = decimal.Parse(depositNode["DepositTotal"]?.InnerText), Lines = new List <DepositLine>(), DepositAccount = new QuickbooksAccount() { ListId = depositNode["DepositToAccountRef"]["ListID"]?.InnerText, FullName = depositNode["DepositToAccountRef"]["FullName"]?.InnerText } }; if (childNodes != null) { foreach (XmlNode lineNode in childNodes) { if (lineNode.Name != "DepositLineRet") { continue; } if (lineNode["Memo"] == null) { //probably just skipped a line if (lineNode["Amount"] == null && lineNode["AccountRef"] == null && lineNode["EntityRef"] == null) { continue; } if (lineNode["CheckNumber"] != null) { throw new Exception("Error: deposit for check number " + lineNode["CheckNumber"]?.InnerText + " is missing a memo."); } else { throw new Exception("Error: a deposit without a check number is missing a memo."); } } deposit.Lines.Add(new DepositLine() { TxnType = lineNode["TxnType"]?.InnerText, TxnLineId = lineNode["TxnLineID"]?.InnerText, Memo = lineNode["Memo"]?.InnerText, CheckNumber = lineNode["CheckNumber"]?.InnerText, Amount = decimal.Parse(lineNode["Amount"]?.InnerText), DepositDate = depositNode["TxnDate"]?.InnerText, Account = new QuickbooksAccount() { ListId = lineNode["AccountRef"]?["ListID"]?.InnerText, FullName = lineNode["AccountRef"]?["FullName"]?.InnerText }, Entity = new QuickbooksEntity() { ListId = lineNode["EntityRef"]?["ListID"]?.InnerText, FullName = lineNode["EntityRef"]?["FullName"]?.InnerText }, Method = new PaymentMethod() { ListId = lineNode["PaymentMethodRef"]?["ListID"]?.InnerText, FullName = lineNode["PaymentMethodRef"]?["FullName"]?.InnerText } }); } } response.Deposits.Add(deposit); } return(response); }