public DepositAddResponse AddDeposit <T>(List <T> checks)
        {
            var converter = new QBXMLConverter();

            string xml = converter.ConvertDeposit(checks);

            string depositResponseXml = ProcessRequest(xml);

            DepositAddResponse response = converter.ConvertDepositAddResponse(depositResponseXml);

            return(response);
        }
        public DepositAddResponse ConvertDepositAddResponse(string xml)
        {
            var response = new DepositAddResponse();

            var xmlDoc = new XmlDocument();

            xmlDoc.LoadXml(xml);

            XmlNodeList responseNode = xmlDoc.GetElementsByTagName("DepositAddRs");

            XmlNodeList depositNode      = xmlDoc.GetElementsByTagName("DepositRet");
            XmlNodeList depositLineNodes = xmlDoc.GetElementsByTagName("DepositLineRet");

            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.TxnId        = depositNode[0]["TxnID"]?.InnerText;
            response.TimeCreated  = DateTime.Parse(depositNode[0]["TimeCreated"]?.InnerText);
            response.TimeModified = DateTime.Parse(depositNode[0]["TimeModified"]?.InnerText);
            response.EditSequence = long.Parse(depositNode[0]["EditSequence"]?.InnerText);
            response.TxnNumber    = int.Parse(depositNode[0]["TxnNumber"]?.InnerText);
            response.TxnDate      = DateTime.Parse(depositNode[0]["TxnDate"]?.InnerText);
            response.Memo         = depositNode[0]["Memo"]?.InnerText;
            response.DepositTotal = decimal.Parse(depositNode[0]["DepositTotal"]?.InnerText);

            response.Lines = new List <DepositLine>();

            response.DepositAccount = new QuickbooksAccount()
            {
                ListId   = depositNode[0]["DepositToAccountRef"]["ListID"]?.InnerText,
                FullName = depositNode[0]["DepositToAccountRef"]["FullName"]?.InnerText
            };

            foreach (XmlNode lineNode in depositLineNodes)
            {
                response.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),
                    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
                    }
                });
            }

            return(response);
        }