Example #1
0
        //Arrange from oldest to newest
        public NonDerivativeTransaction[] SortByTransactionDate(NonDerivativeTransaction[] all)
        {
            List <NonDerivativeTransaction> ToReturn   = new List <NonDerivativeTransaction>();
            List <NonDerivativeTransaction> ToPullFrom = new List <NonDerivativeTransaction>();

            ToPullFrom.AddRange(all);
            while (ToPullFrom.Count > 0)
            {
                NonDerivativeTransaction winner = ToPullFrom[0];
                foreach (NonDerivativeTransaction ndt in ToPullFrom)
                {
                    if (ndt.TransactionDate.Value < winner.TransactionDate.Value)
                    {
                        winner = ndt;
                    }
                }
                ToReturn.Add(winner);
                ToPullFrom.Remove(winner);
            }
            return(ToReturn.ToArray());
        }
Example #2
0
        public static StatementOfBeneficialOwnership ParseXml(string xml)
        {
            StatementOfBeneficialOwnership ToReturn = new StatementOfBeneficialOwnership();

            //Load the xml
            XmlDocument doc = new XmlDocument();

            doc.LoadXml(xml);

            //Get the ownership document node that contains all data
            XmlNode doc_data = doc.SelectSingleNode("ownershipDocument");

            //Get schema version
            if (doc_data.SelectSingleNode("schemaVersion") != null)
            {
                ToReturn.SchemaVersion = doc_data.SelectSingleNode("schemaVersion").InnerText;
            }
            else
            {
                ToReturn.SchemaVersion = null;
            }

            //Get period of report
            ToReturn.PeriodOfReport = DateTime.Parse(doc_data.SelectSingleNode("periodOfReport").InnerText);

            //documentType
            XmlNode node_documentType = doc_data.SelectSingleNode("documentType");

            if (node_documentType != null)
            {
                ToReturn.DocumentType = node_documentType.InnerText.Trim();
            }
            else
            {
                ToReturn.DocumentType = null;
            }

            #region "Issuer"

            XmlNode issuer = doc_data.SelectSingleNode("issuer");

            //CIK
            ToReturn.IssuerCik = issuer.SelectSingleNode("issuerCik").InnerText;

            //Issuer name
            ToReturn.IssuerName = issuer.SelectSingleNode("issuerName").InnerText;

            //Issuer trading symbol
            ToReturn.IssuerTradingSymbol = issuer.SelectSingleNode("issuerTradingSymbol").InnerText;

            #endregion

            #region "Owner"

            //Get the reporting owner node
            XmlNode node_reportingowner = doc_data.SelectSingleNode("reportingOwner");

            //Reporting owner id data
            XmlNode node_reportingOwnerId = node_reportingowner.SelectSingleNode("reportingOwnerId");
            ToReturn.OwnerCik  = node_reportingOwnerId.SelectSingleNode("rptOwnerCik").InnerText;
            ToReturn.OwnerName = node_reportingOwnerId.SelectSingleNode("rptOwnerName").InnerText;

            //Reporting owner address data
            XmlNode node_reportingOwnerAddress = node_reportingowner.SelectSingleNode("reportingOwnerAddress");
            ToReturn.OwnerStreet1   = node_reportingOwnerAddress.SelectSingleNode("rptOwnerStreet1").InnerText;
            ToReturn.OwnerStreet2   = node_reportingOwnerAddress.SelectSingleNode("rptOwnerStreet2").InnerText;
            ToReturn.OwnerCity      = node_reportingOwnerAddress.SelectSingleNode("rptOwnerCity").InnerText;
            ToReturn.OwnerStateCode = node_reportingOwnerAddress.SelectSingleNode("rptOwnerState").InnerText;
            ToReturn.OwnerZipCode   = node_reportingOwnerAddress.SelectSingleNode("rptOwnerZipCode").InnerText;

            //Owner relationship
            XmlNode node_reportingOwnerRelationship = node_reportingowner.SelectSingleNode("reportingOwnerRelationship");

            //Owner is officer (this is sometimes called "Director")
            XmlNode node_isOfficer  = node_reportingOwnerRelationship.SelectSingleNode("isOfficer");
            XmlNode node_isDirector = node_reportingOwnerRelationship.SelectSingleNode("isDirector");
            if (node_isOfficer != null)
            {
                string owner_is_officer_val = node_reportingOwnerRelationship.SelectSingleNode("isOfficer").InnerText;
                if (owner_is_officer_val == "0")
                {
                    ToReturn.OwnerIsOfficer = false;
                }
                else if (owner_is_officer_val == "1")
                {
                    ToReturn.OwnerIsOfficer = true;
                }
            }
            else if (node_isDirector != null) //If the isOfficer node was null, check for the isDirector node instead.
            {
                string owner_is_officer_val = node_reportingOwnerRelationship.SelectSingleNode("isDirector").InnerText;
                if (owner_is_officer_val == "0")
                {
                    ToReturn.OwnerIsOfficer = false;
                }
                else if (owner_is_officer_val == "1")
                {
                    ToReturn.OwnerIsOfficer = true;
                }
            }
            else //If we couldn't find a relevant tag, just say they are not an officer
            {
                ToReturn.OwnerIsOfficer = false;
            }



            //Get the officer title (this will only be there if this person is an officer)
            if (ToReturn.OwnerIsOfficer)
            {
                XmlNode node_officerTitle = node_reportingOwnerRelationship.SelectSingleNode("officerTitle");
                if (node_officerTitle != null)
                {
                    ToReturn.OwnerOfficerTitle = node_reportingOwnerRelationship.SelectSingleNode("officerTitle").InnerText;
                }
                else
                {
                    ToReturn.OwnerOfficerTitle = null;
                }
            }
            else
            {
                ToReturn.OwnerOfficerTitle = null;
            }


            #endregion

            #region "Non Derivative table"

            XmlNode node_nonDerivativeTable = doc_data.SelectSingleNode("nonDerivativeTable");
            if (node_nonDerivativeTable != null)
            {
                List <NonDerivativeTransaction> transactions = new List <NonDerivativeTransaction>();
                foreach (XmlNode node_nonDerivativeEntry in node_nonDerivativeTable.ChildNodes)
                {
                    NonDerivativeTransaction ndt = new NonDerivativeTransaction();
                    ndt.LoadFromNode(node_nonDerivativeEntry);
                    transactions.Add(ndt);
                }
                ToReturn.NonDerivativeTransactions = transactions.ToArray();
            }

            #endregion

            #region "Derivative table"

            XmlNode node_derivativeTable = doc_data.SelectSingleNode("derivativeTable");
            if (node_derivativeTable != null)
            {
                List <DerivativeTransaction> DTs = new List <DerivativeTransaction>();
                foreach (XmlNode node_derivativeTransaction in node_derivativeTable.ChildNodes)
                {
                    DerivativeTransaction dt = new DerivativeTransaction();
                    dt.LoadFromNode(node_derivativeTransaction);
                    DTs.Add(dt);
                }
                ToReturn.DerivativeTransactions = DTs.ToArray();
            }

            #endregion

            return(ToReturn);
        }