예제 #1
0
        /// <summary>
        /// SaveCashFlowStatement
        /// </summary>
        /// <param name="contract"></param>
        /// <param name="fmpSymbol"></param>
        /// <param name="xmlDocument"></param>
        /// <param name="date"></param>
        private void SaveCashFlowStatement(Contract contract, string fmpSymbol, FundamentalsXmlDocument xmlDocument, string date)
        {
            if (DataContext.Instance.CashFlowStatements.Any(i => i.Symbol == fmpSymbol && i.Date == date))
            {
                LogCurrent.Add($"Cash flow statement for {contract.Company} and date {date} already exists in database.");
                return;
            }

            if (xmlDocument.NetIncomeFromCashStatement == 0 && xmlDocument.OperatingCashFlow == 0 && xmlDocument.InvestmentsInPropertyPlantAndEquipment == 0)
            {
                LogCurrent.Add($"No IB data for cash flow statement for {contract.Company} for year {date}.");
                return;
            }

            var cashFlowStatement = new CashFlowStatement()
            {
                Symbol            = fmpSymbol,
                Date              = date,
                NetIncome         = xmlDocument.NetIncomeFromCashStatement,
                OperatingCashFlow = xmlDocument.OperatingCashFlow,
                InvestmentsInPropertyPlantAndEquipment = xmlDocument.InvestmentsInPropertyPlantAndEquipment
            };

            try
            {
                DataContext.Instance.CashFlowStatements.Add(cashFlowStatement);
                DataContext.Instance.SaveChanges();
                LogCurrent.Add($"OK! Cash flow statement for {contract.Company} {date} saved in database.");
            }
            catch (Exception exception)
            {
                LogCurrent.Add(exception.ToString());
            }
        }
예제 #2
0
 /// <summary>
 /// Creates an instance of the FinancialStatements class
 /// </summary>
 public FinancialStatements()
 {
     TotalRiskBasedCapital = new TotalRiskBasedCapital();
     IncomeStatement       = new IncomeStatement();
     BalanceSheet          = new BalanceSheet();
     CashFlowStatement     = new CashFlowStatement();
 }
예제 #3
0
        /// <summary>
        /// 获取现金流量表
        /// </summary>
        /// <param name="id">现金流量表标识</param>
        /// <returns></returns>
        public CashFlowStatement GetCashFlowStatement(string id)
        {
            DBHelper          dh  = new DBHelper();
            CashFlowStatement rep = new CashFlowStatement();

            dh.strCmd = "SP_GetReport";
            dh.AddPare("@RepID", SqlDbType.NVarChar, 40, id);
            rep         = dh.Reader <CashFlowStatement>().FirstOrDefault();
            dh.strCmd   = "SP_GetReportDetails";
            rep.Details = dh.Reader <T_ReportDetails>();
            return(rep);
        }
예제 #4
0
        /// <summary>
        /// 现金流量表信息页
        /// </summary>
        /// <param name="id">现金流量表标识</param>
        /// <returns></returns>
        public ActionResult CashFlowStatement(string id)
        {
            CashFlowStatement rep = new CashFlowStatement();

            if (string.IsNullOrEmpty(id))
            {
                rep = new ReportSvc().GenPerviewCashFlowStatement(Session["CurrentCompany"].ToString());
            }
            else
            {
                rep = new ReportSvc().GetCashFlowStatement(id);
            }
            return(View(rep));
        }
예제 #5
0
        /// <summary>
        /// 获取现金流量预览表
        /// </summary>
        /// <param name="c_id">公司标识</param>
        /// <returns></returns>
        public CashFlowStatement GenPerviewCashFlowStatement(string c_id)
        {
            CashFlowStatement rep = new CashFlowStatement();
            DBHelper          dh  = new DBHelper();

            dh.strCmd = "SP_GenPerviewCashFlowStatement";
            dh.AddPare("@C_ID", SqlDbType.NVarChar, 40, c_id);
            dh.AddPare("@Year", SqlDbType.Int, ParameterDirection.Output, 0, null);
            dh.AddPare("@Month", SqlDbType.Int, ParameterDirection.Output, 0, null);
            dh.AddPare("@RepNo", SqlDbType.NVarChar, ParameterDirection.Output, 40, null);
            rep.Details = dh.Reader <T_ReportDetails>();
            rep.Year    = dh.GetParaValue <int>("@Year");
            rep.Month   = dh.GetParaValue <int>("@Month");
            rep.RepNo   = dh.GetParaValue <string>("@RepNo");
            return(rep);
        }
예제 #6
0
        public async Task <ActionResult> GetCashFlowAsync(CashFlowStatementQueryModel model)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.InvalidModelState(this.ModelState));
            }


            var meta = await AppUsers.GetCurrentAsync().ConfigureAwait(true);

            model.OfficeId = meta.OfficeId;
            model.UserId   = meta.UserId;

            try
            {
                var result = await CashFlowStatement.GetAsync(this.Tenant, model).ConfigureAwait(true);

                return(this.Ok(result));
            }
            catch (Exception ex)
            {
                return(this.Failed(ex.Message, HttpStatusCode.InternalServerError));
            }
        }
예제 #7
0
        public async Task <List <CashFlowStatement> > ScrapeCashFlowStatement(string ticker, string apiKey)
        {
            #region Data From QuickFS

            string url = "https://api.quickfs.net/stocks/" + ticker + ":US/cf/Annual/" + apiKey;

            var helper  = new WebHelper();
            var request = await helper.ComposeWebRequestGet(url);

            var result = await helper.CallWebRequest(request);

            result = result.Replace("<\\/td>", "");
            result = result.Replace("$", "");
            result = result.Replace(",", ".");
            var html = new HtmlAgilityPack.HtmlDocument();
            html.LoadHtml(result);

            var htmlNodes = html.DocumentNode.Descendants("td").ToList();

            var numberOfColumns = html.DocumentNode.SelectNodes("//tr[@class='thead']").Descendants("td").ToList().Count();

            var numberOfRows = htmlNodes.Count / numberOfColumns;
            var count        = 1;

            #endregion

            #region Data Organization


            var namesList          = new List <string>();
            var cashFlowStatements = new List <CashFlowStatement>();
            var cashFlowStatementForCompanyList = new List <CashFlowStatement>();

            for (var i = 1; i < numberOfColumns; i++)
            {
                var extractedValuesList = new List <ExtractedValues>();

                for (var h = 1; h < numberOfRows; h++)
                {
                    var name = htmlNodes[h * numberOfColumns].InnerText;

                    if (name == "Other")
                    {
                        name = name + h;
                    }

                    namesList.Add(name);
                }

                var parsedYear = int.TryParse(htmlNodes[i].InnerText, out int yearNumber);
                //if (!parsedYear) return; lançar exceção

                for (var j = 1; j < numberOfRows; j++)
                {
                    var extractedValues = new ExtractedValues();
                    var baseItems       = new BaseItem();

                    var name = namesList[j - 1];
                    baseItems.Name = name;

                    var valuesList = new List <string>();
                    foreach (var item in htmlNodes)
                    {
                        var htmlValue = item.GetAttributeValue("data-value", null);
                        valuesList.Add(htmlValue);
                    }

                    var  valuesFromNodes = valuesList[(j * numberOfColumns) + count];
                    bool parsedFloat     = float.TryParse(valuesFromNodes, NumberStyles.Float, CultureInfo.InvariantCulture, out float valuesFloat);


                    if (yearNumber != 0 && name != "" && name != "Operating Expenses")
                    {
                        extractedValues.Year = yearNumber;
                        baseItems.Name       = name;
                        baseItems.Value      = valuesFloat;
                        extractedValues.Items.Add(baseItems);
                        extractedValuesList.Add(extractedValues);
                    }
                }
                count++;
                #endregion

                #region Add to CashFlowStatement

                foreach (var extractedItem in extractedValuesList)
                {
                    var cashFlowStatement = new CashFlowStatement();
                    var props             = cashFlowStatement.GetType().GetProperties();

                    cashFlowStatement.Year = extractedItem.Year;

                    foreach (var prop in props)
                    {
                        var displayAttribute = prop.GetCustomAttributes <DisplayAttribute>().SingleOrDefault();
                        if (displayAttribute != null)
                        {
                            var item = extractedItem.Items.SingleOrDefault(i => i.Name == displayAttribute.Name);

                            if (item != null)
                            {
                                prop.SetValue(cashFlowStatement, item.Value);
                            }
                        }
                    }
                    cashFlowStatements.Add(cashFlowStatement);
                }

                //if (cashFlowStatement.Year != 0) cashFlowStatementForCompanyList.Add(cashFlowStatement);

                #endregion
            }
            await Task.Delay(TimeSpan.FromSeconds(2));

            return(cashFlowStatements);
        }