/// <summary>
 /// Converts a given <see cref="T:XElement"/> into a <see cref="T:Transaction"/>.
 /// </summary>
 /// <param name="element">The <see cref="T:XElement"/> to convert.</param>
 /// <param name="workbook">The <see cref="T:Workbook"/> to use to fetch additional information for the <see cref="Transaction"/>.</param>
 /// <returns>The newly created <see cref="T:Transaction"/>.</returns>
 public Transaction FromXElement(XElement element, Workbook workbook)
 {
     Transaction transaction = new Transaction();
     foreach (XElement childNode in element.Nodes()) {
         switch (childNode.Name.LocalName) {
             case "DebitAccountID":
                 transaction.DebitAccount = workbook.FetchAccount(new Guid(childNode.Value));
                 break;
             case "CreditAccountID":
                 transaction.CreditAccount = workbook.FetchAccount(new Guid(childNode.Value));
                 break;
             case "CreatedByUsername":
                 transaction.CreatedByUsername = childNode.Value;
                 break;
             case "CreatedDate":
                 transaction.CreatedDate = DateTime.Parse(childNode.Value);
                 break;
             case "Date":
                 transaction.Date = DateTime.Parse(childNode.Value);
                 break;
             case "Particulars":
                 transaction.Particulars = childNode.Value;
                 break;
             case "TransactionID":
                 transaction.TransactionID = new Guid(childNode.Value);
                 break;
             case "Value":
                 transaction.Value = decimal.Parse(childNode.Value);
                 break;
             case "UpdatedByUsername":
                 transaction.UpdatedByUsername = childNode.Value;
                 break;
             case "UpdatedDate":
                 transaction.UpdatedDate = DateTime.Parse(childNode.Value);
                 break;
             case "ChangeSetHistory":
                 ChangeSetHistoryXElementAdapter adapter = new ChangeSetHistoryXElementAdapter();
                 transaction.ChangeSetHistory = adapter.FromXElement(childNode);
                 break;
         }
     }
     return transaction;
 }