Files
marketdata/MarketDataLib/MarketDataModel/CashflowStatement.cs
2024-02-22 14:52:53 -05:00

161 lines
5.8 KiB
C#

using System;
using System.Text;
using MarketData.Utils;
namespace MarketData.MarketDataModel
{
public class CashflowStatement
{
public enum PeriodType { Annual=0,Quarterly=1}
private String symbol;
private DateTime asof;
private double depreciationAndAmortization;
private double deferredIncomeTaxes;
private double stockBasedCompensation;
private double accountsReceivable;
private double inventory;
private double accountsPayable;
private double accruedLiabilities;
private double operatingCashflow;
private double freeCashflow;
private PeriodType period;
private DateTime modified;
public CashflowStatement()
{
}
// It is appropriate to use the AsOf date in the comparison of the financial statements because the AsOf date is the statement date.
public void MergeFrom(CashflowStatement previousCashflowStatement)
{
if(null==previousCashflowStatement)return;
if(!symbol.Equals(previousCashflowStatement.Symbol))return;
if(!AsOf.Date.Equals(previousCashflowStatement.AsOf.Date))return;
if(!Period.Equals(previousCashflowStatement.Period))return;
if(Utility.IsZeroOrNaN(DepreciationAndAmortization))DepreciationAndAmortization=previousCashflowStatement.DepreciationAndAmortization;
if(Utility.IsZeroOrNaN(DeferredIncomeTaxes))DeferredIncomeTaxes=previousCashflowStatement.DeferredIncomeTaxes;
if(Utility.IsZeroOrNaN(StockBasedCompensation))StockBasedCompensation=previousCashflowStatement.StockBasedCompensation;
if(Utility.IsZeroOrNaN(AccountsReceivable))AccountsReceivable=previousCashflowStatement.AccountsReceivable;
if(Utility.IsZeroOrNaN(Inventory))Inventory=previousCashflowStatement.Inventory;
if(Utility.IsZeroOrNaN(AccountsPayable))AccountsPayable=previousCashflowStatement.AccountsPayable;
if(Utility.IsZeroOrNaN(AccruedLiabilities))AccruedLiabilities=previousCashflowStatement.AccruedLiabilities;
if(Utility.IsZeroOrNaN(OperatingCashflow))OperatingCashflow=previousCashflowStatement.OperatingCashflow;
if(Utility.IsZeroOrNaN(FreeCashflow))FreeCashflow=previousCashflowStatement.FreeCashflow;
}
public bool IsValid()
{
if(String.IsNullOrEmpty(symbol))return false;
if(AsOf.Date.Equals(Utility.Epoch))return false;
if(Utility.IsZeroOrNaN(DepreciationAndAmortization)&&
Utility.IsZeroOrNaN(DeferredIncomeTaxes)&&
Utility.IsZeroOrNaN(StockBasedCompensation)&&
Utility.IsZeroOrNaN(AccountsReceivable)&&
Utility.IsZeroOrNaN(Inventory)&&
Utility.IsZeroOrNaN(AccountsPayable)&&
Utility.IsZeroOrNaN(AccruedLiabilities)&&
Utility.IsZeroOrNaN(OperatingCashflow)&&
Utility.IsZeroOrNaN(FreeCashflow)
)return false;
return true;
}
public String Symbol
{
get { return symbol; }
set { symbol = value; }
}
public DateTime AsOf
{
get { return asof; }
set { asof = value; }
}
public double DepreciationAndAmortization
{
get{return depreciationAndAmortization;}
set{depreciationAndAmortization=value;}
}
public double DeferredIncomeTaxes
{
get{return deferredIncomeTaxes;}
set{deferredIncomeTaxes=value;}
}
public double StockBasedCompensation
{
get{return stockBasedCompensation;}
set{stockBasedCompensation=value;}
}
public double AccountsReceivable
{
get{return accountsReceivable;}
set{accountsReceivable=value;}
}
public double Inventory
{
get{return inventory;}
set{inventory=value;}
}
public double AccountsPayable
{
get{return accountsPayable;}
set{accountsPayable=value;}
}
public double AccruedLiabilities
{
get{return accruedLiabilities;}
set{accruedLiabilities=value;}
}
public double OperatingCashflow
{
get{return operatingCashflow;}
set{operatingCashflow=value;}
}
public double FreeCashflow
{
get{return freeCashflow;}
set{freeCashflow=value;}
}
public PeriodType Period
{
get { return period; }
set { period = value; }
}
public String PeriodAsString
{
get { return PeriodType.Quarterly.Equals(period) ? "Quarterly" : "Annual"; }
}
public DateTime Modified
{
get { return modified; }
set { modified = value; }
}
public static String Heading
{
get
{
StringBuilder sb = new StringBuilder();
sb.Append("Symbol,AsOf,DepreciationAndAmortization,DeferredIncomeTaxes,StockBasedCompensation,AccountsReceivable,Inventory,AccountsPayable,AccruedLiabilities,OperatingCashflow,FreeCashflow,Period");
return sb.ToString();
}
}
public override string ToString()
{
StringBuilder sb = new StringBuilder();
sb.Append(symbol).Append(",");
sb.Append(Utility.DateTimeToStringMMSDDSYYYY(asof)).Append(",");
sb.Append(Utility.AddQuotes(String.Format("{0:C}", DepreciationAndAmortization))).Append(",");
sb.Append(Utility.AddQuotes(String.Format("{0:C}", DeferredIncomeTaxes))).Append(",");
sb.Append(Utility.AddQuotes(String.Format("{0:C}", StockBasedCompensation))).Append(",");
sb.Append(Utility.AddQuotes(String.Format("{0:C}", AccountsReceivable))).Append(",");
sb.Append(Utility.AddQuotes(String.Format("{0:C}", Inventory))).Append(",");
sb.Append(Utility.AddQuotes(String.Format("{0:C}", AccountsPayable))).Append(",");
sb.Append(Utility.AddQuotes(String.Format("{0:C}", AccruedLiabilities))).Append(",");
sb.Append(Utility.AddQuotes(String.Format("{0:C}", OperatingCashflow))).Append(",");
sb.Append(Utility.AddQuotes(String.Format("{0:C}", FreeCashflow))).Append(",");
sb.Append(PeriodAsString);
return sb.ToString();
}
}
}