using System.Text; using MySql.Data.MySqlClient; using MarketData.MarketDataModel; using MarketData.Utils; namespace MarketData.DataAccess { public class DividendPaymentDA { private DividendPaymentDA() { } public static DividendPayments GetDividendPayments() { MySqlConnection sqlConnection = null; MySqlDataReader sqlDataReader = null; MySqlCommand sqlCommand =null; DividendPayments dividendPayments=new DividendPayments(); String strQuery = null; try { sqlConnection = SqlUtils.CreateMySqlConnection(MainDataSource.Instance.LocateDataSource("portfolio_data")); StringBuilder sb = new StringBuilder(); sb.Append("select symbol,payment_date,account,amount from dividends order by payment_date desc, symbol asc;"); strQuery = sb.ToString(); sqlCommand = new MySqlCommand(strQuery, sqlConnection); sqlCommand.CommandTimeout = SqlUtils.COMMAND_TIMEOUT; sqlDataReader = sqlCommand.ExecuteReader(); while (sqlDataReader.Read()) { DividendPayment dividendPayment=new DividendPayment(); dividendPayment.Symbol = sqlDataReader.GetString(0); dividendPayment.PaymentDate=sqlDataReader.GetDateTime(1); dividendPayment.Account=sqlDataReader.GetString(2); dividendPayment.Amount=sqlDataReader.GetDouble(3); dividendPayments.Add(dividendPayment); } sqlCommand.Dispose(); sqlDataReader.Close(); return dividendPayments; } catch (Exception exception) { MDTrace.WriteLine(LogLevel.DEBUG,exception); return null; } finally { if(null!=sqlCommand)sqlCommand.Dispose(); if (null != sqlDataReader) {sqlDataReader.Close();sqlDataReader.Dispose();} if (null != sqlConnection) sqlConnection.Close(); } } public static DividendPayments GetDividendPaymentsForSymbol(String symbol) { MySqlConnection sqlConnection = null; MySqlDataReader sqlDataReader = null; MySqlCommand sqlCommand =null; DividendPayments dividendPayments=new DividendPayments(); String strQuery = null; try { sqlConnection = SqlUtils.CreateMySqlConnection(MainDataSource.Instance.LocateDataSource("portfolio_data")); StringBuilder sb = new StringBuilder(); sb.Append("select symbol,payment_date,account,amount from dividends "); sb.Append("where symbol=").Append("'").Append(symbol).Append("'"); sb.Append(" order by payment_date desc, symbol asc;"); strQuery = sb.ToString(); sqlCommand = new MySqlCommand(strQuery, sqlConnection); sqlCommand.CommandTimeout = SqlUtils.COMMAND_TIMEOUT; sqlDataReader = sqlCommand.ExecuteReader(); while (sqlDataReader.Read()) { DividendPayment dividendPayment=new DividendPayment(); dividendPayment.Symbol = sqlDataReader.GetString(0); dividendPayment.PaymentDate=sqlDataReader.GetDateTime(1); dividendPayment.Account=sqlDataReader.GetString(2); dividendPayment.Amount=sqlDataReader.GetDouble(3); dividendPayments.Add(dividendPayment); } sqlCommand.Dispose(); sqlDataReader.Close(); return dividendPayments; } catch (Exception exception) { MDTrace.WriteLine(LogLevel.DEBUG,exception); return null; } finally { if(null!=sqlCommand)sqlCommand.Dispose(); if (null != sqlDataReader) {sqlDataReader.Close();sqlDataReader.Dispose();} if (null != sqlConnection) sqlConnection.Close(); } } public static DividendPayments GetDividendPaymentsForAccount(String account) { List accounts = new List(); accounts.Add(account); return GetDividendPaymentsForAccounts(accounts); } public static DividendPayments GetDividendPaymentsForAccounts(List accounts) { MySqlConnection sqlConnection = null; MySqlDataReader sqlDataReader = null; MySqlCommand sqlCommand = null; DividendPayments dividendPayments = new DividendPayments(); String strQuery = null; try { sqlConnection = SqlUtils.CreateMySqlConnection(MainDataSource.Instance.LocateDataSource("portfolio_data")); StringBuilder sb = new StringBuilder(); sb.Append("select symbol,payment_date,account,amount from dividends "); sb.Append("where account in ").Append(SqlUtils.CreateInClause(accounts)); sb.Append(" order by payment_date desc, symbol asc;"); strQuery = sb.ToString(); sqlCommand = new MySqlCommand(strQuery, sqlConnection); sqlCommand.CommandTimeout = SqlUtils.COMMAND_TIMEOUT; sqlDataReader = sqlCommand.ExecuteReader(); while (sqlDataReader.Read()) { DividendPayment dividendPayment = new DividendPayment(); dividendPayment.Symbol = sqlDataReader.GetString(0); dividendPayment.PaymentDate = sqlDataReader.GetDateTime(1); dividendPayment.Account = sqlDataReader.GetString(2); dividendPayment.Amount = sqlDataReader.GetDouble(3); dividendPayments.Add(dividendPayment); } sqlCommand.Dispose(); sqlDataReader.Close(); return dividendPayments; } catch (Exception exception) { MDTrace.WriteLine(LogLevel.DEBUG, exception); return null; } finally { if (null != sqlCommand) sqlCommand.Dispose(); if (null != sqlDataReader) {sqlDataReader.Close();sqlDataReader.Dispose();} if (null != sqlConnection) sqlConnection.Close(); } } public static DividendPayments GetDividendPaymentsForAccountsAndSymbols(List accounts,List symbols) { MySqlConnection sqlConnection = null; MySqlDataReader sqlDataReader = null; MySqlCommand sqlCommand = null; DividendPayments dividendPayments = new DividendPayments(); String strQuery = null; try { sqlConnection = SqlUtils.CreateMySqlConnection(MainDataSource.Instance.LocateDataSource("portfolio_data")); StringBuilder sb = new StringBuilder(); sb.Append("select symbol,payment_date,account,amount from dividends "); if ((null == accounts || 0 == accounts.Count) && (null == symbols || 0 == symbols.Count)) return GetDividendPayments(); if (!accounts.Contains(Constants.CONST_ALL)&&!accounts.Contains("")) { sb.Append("where account in ").Append(SqlUtils.CreateInClause(accounts)).Append(" "); if (!symbols.Contains(Constants.CONST_ALL)&&0!=symbols.Count&&!symbols.Contains("")) sb.Append("and symbol in ").Append(SqlUtils.CreateInClause(symbols)).Append(" "); } else if (!symbols.Contains(Constants.CONST_ALL)&&0!=symbols.Count&&!symbols.Contains("")) sb.Append("where symbol in ").Append(SqlUtils.CreateInClause(symbols)).Append(" "); sb.Append(" order by payment_date desc, account, symbol asc;"); strQuery = sb.ToString(); sqlCommand = new MySqlCommand(strQuery, sqlConnection); sqlCommand.CommandTimeout = SqlUtils.COMMAND_TIMEOUT; sqlDataReader = sqlCommand.ExecuteReader(); while (sqlDataReader.Read()) { DividendPayment dividendPayment = new DividendPayment(); dividendPayment.Symbol = sqlDataReader.GetString(0); dividendPayment.PaymentDate = sqlDataReader.GetDateTime(1); dividendPayment.Account = sqlDataReader.GetString(2); dividendPayment.Amount = sqlDataReader.GetDouble(3); dividendPayments.Add(dividendPayment); } sqlCommand.Dispose(); sqlDataReader.Close(); return dividendPayments; } catch (Exception exception) { MDTrace.WriteLine(LogLevel.DEBUG, exception); return null; } finally { if (null != sqlCommand) sqlCommand.Dispose(); if (null != sqlDataReader) {sqlDataReader.Close();sqlDataReader.Dispose();} if (null != sqlConnection) sqlConnection.Close(); } } public static DividendPayments GetDividendPaymentsMaxDate(String symbol,DateTime maxDate) { MySqlConnection sqlConnection = null; MySqlDataReader sqlDataReader = null; MySqlCommand sqlCommand =null; DividendPayments dividendPayments=new DividendPayments(); String strQuery = null; try { sqlConnection = SqlUtils.CreateMySqlConnection(MainDataSource.Instance.LocateDataSource("portfolio_data")); StringBuilder sb = new StringBuilder(); sb.Append("select symbol,payment_date,account,amount from dividends "); sb.Append("where symbol=").Append("'").Append(symbol).Append("'"); sb.Append(" and payment_date<=").Append("'").Append(SqlUtils.ToSqlDateTime(maxDate)).Append("'"); sb.Append(" order by payment_date desc, symbol asc;"); strQuery = sb.ToString(); sqlCommand = new MySqlCommand(strQuery, sqlConnection); sqlCommand.CommandTimeout = SqlUtils.COMMAND_TIMEOUT; sqlDataReader = sqlCommand.ExecuteReader(); while (sqlDataReader.Read()) { DividendPayment dividendPayment=new DividendPayment(); dividendPayment.Symbol = sqlDataReader.GetString(0); dividendPayment.PaymentDate=sqlDataReader.GetDateTime(1); dividendPayment.Account=sqlDataReader.GetString(2); dividendPayment.Amount=sqlDataReader.GetDouble(3); dividendPayments.Add(dividendPayment); } sqlCommand.Dispose(); sqlDataReader.Close(); return dividendPayments; } catch (Exception exception) { MDTrace.WriteLine(LogLevel.DEBUG,exception); return null; } finally { if(null!=sqlCommand)sqlCommand.Dispose(); if (null != sqlDataReader) {sqlDataReader.Close();sqlDataReader.Dispose();} if (null != sqlConnection) sqlConnection.Close(); } } // *********** public static List GetDividendPaymentAccounts() { MySqlConnection sqlConnection = null; MySqlDataReader sqlDataReader = null; MySqlCommand sqlCommand = null; List accounts = new List(); String strQuery = null; try { sqlConnection = SqlUtils.CreateMySqlConnection(MainDataSource.Instance.LocateDataSource("portfolio_data")); StringBuilder sb = new StringBuilder(); sb.Append("select distinct(account) from dividends "); sb.Append(" order by account asc;"); strQuery = sb.ToString(); sqlCommand = new MySqlCommand(strQuery, sqlConnection); sqlCommand.CommandTimeout = SqlUtils.COMMAND_TIMEOUT; sqlDataReader = sqlCommand.ExecuteReader(); while (sqlDataReader.Read()) { accounts.Add(sqlDataReader.GetString(0)); } sqlCommand.Dispose(); sqlDataReader.Close(); return accounts; } catch (Exception exception) { MDTrace.WriteLine(LogLevel.DEBUG, exception); return null; } finally { if (null != sqlCommand) sqlCommand.Dispose(); if (null != sqlDataReader) {sqlDataReader.Close();sqlDataReader.Dispose();} if (null != sqlConnection) sqlConnection.Close(); } } public static List GetDividendPaymentSymbols() { MySqlConnection sqlConnection = null; MySqlDataReader sqlDataReader = null; MySqlCommand sqlCommand = null; List symbols = new List(); String strQuery = null; try { sqlConnection = SqlUtils.CreateMySqlConnection(MainDataSource.Instance.LocateDataSource("portfolio_data")); StringBuilder sb = new StringBuilder(); sb.Append("select distinct(symbol) from dividends "); sb.Append(" order by symbol asc;"); strQuery = sb.ToString(); sqlCommand = new MySqlCommand(strQuery, sqlConnection); sqlCommand.CommandTimeout = SqlUtils.COMMAND_TIMEOUT; sqlDataReader = sqlCommand.ExecuteReader(); while (sqlDataReader.Read()) { symbols.Add(sqlDataReader.GetString(0)); } sqlCommand.Dispose(); sqlDataReader.Close(); return symbols; } catch (Exception exception) { MDTrace.WriteLine(LogLevel.DEBUG, exception); return null; } finally { if (null != sqlCommand) sqlCommand.Dispose(); if (null != sqlDataReader) {sqlDataReader.Close();sqlDataReader.Dispose();} if (null != sqlConnection) sqlConnection.Close(); } } public static List GetDividendPaymentSymbols(String account) { List accounts = new List(); accounts.Add(account); return GetDividendPaymentSymbols(accounts); } public static List GetDividendPaymentSymbols(List accounts) { MySqlConnection sqlConnection = null; MySqlDataReader sqlDataReader = null; MySqlCommand sqlCommand = null; List symbols = new List(); String strQuery = null; try { sqlConnection = SqlUtils.CreateMySqlConnection(MainDataSource.Instance.LocateDataSource("portfolio_data")); StringBuilder sb = new StringBuilder(); sb.Append("select distinct(symbol) from dividends where account in ").Append(SqlUtils.CreateInClause(accounts)); sb.Append(" order by symbol asc;"); strQuery = sb.ToString(); sqlCommand = new MySqlCommand(strQuery, sqlConnection); sqlCommand.CommandTimeout = SqlUtils.COMMAND_TIMEOUT; sqlDataReader = sqlCommand.ExecuteReader(); while (sqlDataReader.Read()) { symbols.Add(sqlDataReader.GetString(0)); } sqlCommand.Dispose(); sqlDataReader.Close(); return symbols; } catch (Exception exception) { MDTrace.WriteLine(LogLevel.DEBUG, exception); return null; } finally { if (null != sqlCommand) sqlCommand.Dispose(); if (null != sqlDataReader) {sqlDataReader.Close();sqlDataReader.Dispose();} if (null != sqlConnection) sqlConnection.Close(); } } } }