/// <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()); } }
/// <summary> /// Creates an instance of the FinancialStatements class /// </summary> public FinancialStatements() { TotalRiskBasedCapital = new TotalRiskBasedCapital(); IncomeStatement = new IncomeStatement(); BalanceSheet = new BalanceSheet(); CashFlowStatement = new CashFlowStatement(); }
/// <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); }
/// <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)); }
/// <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); }
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)); } }
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); }