private void CreateTreeView(databases.baseDS.portfolioDetailDataTable dataTbl, TreeGridView treeGV) { if (this.myPorfolioCode == null || this.myStockCode == null) { return; } DataView dataView = new DataView(dataTbl); dataView.Sort = dataTbl.subCodeColumn.ColumnName; dataView.RowFilter = dataTbl.portfolioColumn + "='" + this.myPorfolioCode + "' AND " + dataTbl.codeColumn + "='" + this.myStockCode + "'"; databases.baseDS.portfolioDetailRow dataRow; Font boldFont = new Font(treeGV.DefaultCellStyle.Font, FontStyle.Bold); string lastStrategy = ""; TreeGridNodeCollection strategyNodes = null; for (int idx = 0; idx < dataView.Count; idx++) { dataRow = (databases.baseDS.portfolioDetailRow)dataView[idx].Row; if (lastStrategy != dataRow.subCode.Trim()) { strategyNodes = AddNode(treeGV.Nodes, dataRow.subCode, GetStrategyDescription(dataRow.subCode), boldFont).Nodes; lastStrategy = dataRow.subCode.Trim(); } AddNodes((strategyNodes == null ? treeGV.Nodes : strategyNodes), dataRow, null); } }
public watchListEdit() { try { InitializeComponent(); this.LoadDataOnLoad = false; myMasterSource = portfolioSource; codeEd.MaxLength = myDataSet.portfolio.codeColumn.MaxLength; nameEd.MaxLength = myDataSet.portfolio.nameColumn.MaxLength; descriptionEd.MaxLength = myDataSet.portfolio.descriptionColumn.MaxLength; interestedStockClb.maxLen = myDataSet.portfolio.interestedStockColumn.MaxLength; interestedStrategy.Init(); interestedStockClb.LoadData(); //Load default Portfolio Data this.defaultStrategyTbl = DataAccess.Libs.GetPortfolioDetail_ByCode(DataAccess.Libs.GetPortfolio_DefaultStrategy().code); codeEd.BackColor = common.Settings.sysColorDisableBG; codeEd.ForeColor = common.Settings.sysColorDisableFG; LockEdit(true); Form_Resize(null, null); } catch (Exception er) { ShowError(er); } }
protected override void SaveData() { databases.baseDS.portfolioDetailDataTable defaultStrategyTbl = DataAccess.Libs.GetPortfolioDetail_ByCode(DataAccess.Libs.GetPortfolio_DefaultStrategy().code); databases.baseDS.portfolioDetailDataTable portfolioDetailTbl; for (int portfolioIdx = 0; portfolioIdx < watchListLb.myCheckedValues.Count; portfolioIdx++) { databases.baseDS.portfolioRow portfolioRow = DataAccess.Libs.GetPortfolio_ByCode(watchListLb.myCheckedValues[portfolioIdx]); if (portfolioRow == null) { continue; } portfolioDetailTbl = DataAccess.Libs.GetPortfolioDetail_ByCode(portfolioRow.code); mvString.myFormatString = portfolioRow.interestedStock; for (int stockIdx = 0; stockIdx < myStockCodes.Count; stockIdx++) { if (!mvString.Add(myStockCodes[stockIdx])) { continue; } mvString.Add(myStockCodes[stockIdx]); //Add default portfolio data DeletePortfolioData(portfolioDetailTbl, portfolioRow.code, myStockCodes[stockIdx]); databases.AppLibs.CopyPortfolioData(defaultStrategyTbl, portfolioDetailTbl, portfolioRow.code, myStockCodes[stockIdx]); } portfolioRow.interestedStock = mvString.myFormatString; DataAccess.Libs.UpdateData(portfolioRow); DataAccess.Libs.UpdateData(portfolioDetailTbl); } common.system.ShowMessage(Languages.Libs.GetString("dataSaved")); }
private void DeletePortfolioData(databases.baseDS.portfolioDetailDataTable dataTbl, string portfolioCode, string code) { for (int idx = 0; idx < dataTbl.Count; idx++) { if (dataTbl[idx].RowState == DataRowState.Deleted) { continue; } if ((dataTbl[idx].portfolio == portfolioCode) && (dataTbl[idx].code == code)) { dataTbl[idx].Delete(); } } }
/// <summary> /// Copy data from one portfolioDetail data table to another /// </summary> /// <param name="frDataTbl">Source data</param> /// <param name="toDataTbl">Destination data</param> /// <param name="porfolioCode">Porfolio code of the data added to destination</param> /// <param name="stockCode">Stock code of the data added to destination</param> public static void CopyPortfolioData(databases.baseDS.portfolioDetailDataTable frDataTbl, databases.baseDS.portfolioDetailDataTable toDataTbl, string porfolioCode, string stockCode) { databases.baseDS.portfolioDetailRow row; for (int idx = 0; idx < frDataTbl.Rows.Count; idx++) { row = toDataTbl.NewportfolioDetailRow(); AppLibs.InitData(row); row.portfolio = porfolioCode; row.code = stockCode; row.subCode = frDataTbl[idx].subCode;; row.data = frDataTbl[idx].data; toDataTbl.AddportfolioDetailRow(row); } }
//private static void SaveLastRunTime(DateTime onTime) //{ // StringCollection aFields = new StringCollection(); // StringCollection aValues = new StringCollection(); // aFields.Add(Configuration.configKeys.sysTradeAlertLastRun.ToString()); // aValues.Add(onTime.ToString()); // application.Configuration.SaveConfig(aFields, aValues); //} //withAplicableCheckInAlert = true : Sell alerts only create when user owned stock that is applible to sell /// <summary> /// Create alerts for all stock in portfolio and return number of alerts created /// </summary> /// <param name="alertList"> all alert resulted from analysis </param> private static int CreateTradeAlert(TradeAlertItem[] alertList) { int noAlertCreated = 0; string msg; StringCollection timeScaleList; databases.baseDS.tradeAlertRow tradeAlertRow; databases.baseDS.tradeAlertDataTable tradeAlertTbl = new databases.baseDS.tradeAlertDataTable(); //Watch list : sort by Stock code + Strategy code databases.baseDS.portfolioDetailDataTable watchlistTbl = databases.DbAccess.GetPortfolioDetail_ByType(new AppTypes.PortfolioTypes[] { AppTypes.PortfolioTypes.WatchList }); DataView watchlistView = new DataView(watchlistTbl); watchlistView.Sort = watchlistTbl.codeColumn.ColumnName + "," + watchlistTbl.subCodeColumn.ColumnName; //Portfolio : Sort by Stock code databases.tmpDS.investorStockDataTable investorStockTbl = new databases.tmpDS.investorStockDataTable(); databases.DbAccess.LoadStockOwnedByAll(investorStockTbl); DataView investorStockView = new DataView(investorStockTbl); investorStockView.Sort = investorStockTbl.stockCodeColumn.ColumnName; DataRowView[] foundRows; // Only create alerts for codes in user's watchlist. for (int alertId = 0; alertId < alertList.Length; alertId++) { databases.baseDS.portfolioDetailRow portfolioDetailRow; //=============================================== // Check if alert's strategy in user's wish list //=============================================== foundRows = watchlistView.FindRows(new object[] { alertList[alertId].StockCode, alertList[alertId].Strategy.Trim() }); for (int dataIdx = 0; dataIdx < foundRows.Length; dataIdx++) { // Check if alert's time scale in user's wish list ?? portfolioDetailRow = ((databases.baseDS.portfolioDetailRow)foundRows[dataIdx].Row); timeScaleList = common.MultiValueString.String2List(portfolioDetailRow.data.Trim()); if (!timeScaleList.Contains(alertList[alertId].TimeScale.Code)) { continue; } //Ignore duplicate alerts. tradeAlertRow = databases.DbAccess.GetOneAlert(alertList[alertId].OnDateTime, portfolioDetailRow.portfolio, alertList[alertId].StockCode, alertList[alertId].Strategy, alertList[alertId].TimeScale.Code, AppTypes.CommonStatus.All); if (tradeAlertRow != null) { continue; } string infoText = alertList[alertId].TradePoint.BusinessInfo.ToText().Trim(); infoText = (infoText != "" ? infoText : common.Consts.constNotAvailable); //Create alert template message, AlertMessageText() will convert it to specified-language text. msg = Consts.constTextMergeMarkerLEFT + "price" + Consts.constTextMergeMarkerRIGHT + " : " + alertList[alertId].Price.ToString() + common.Consts.constCRLF + Consts.constTextMergeMarkerLEFT + "volume" + Consts.constTextMergeMarkerRIGHT + " : " + alertList[alertId].Volume.ToString() + common.Consts.constCRLF + Consts.constTextMergeMarkerLEFT + "marketInfo" + Consts.constTextMergeMarkerRIGHT + " : " + infoText + common.Consts.constCRLF; CreateTradeAlert(tradeAlertTbl, portfolioDetailRow.portfolio, alertList[alertId].StockCode, alertList[alertId].Strategy, alertList[alertId].TimeScale, alertList[alertId].TradePoint, alertList[alertId].OnDateTime, msg); noAlertCreated++; } //=============================================== // Create alerts for all codes in user's porfolio //=============================================== foundRows = investorStockView.FindRows(new object[] { alertList[alertId].StockCode }); for (int dataIdx = 0; dataIdx < foundRows.Length; dataIdx++) { // Check if alert's time scale in user's wish list ?? databases.tmpDS.investorStockRow investorStockRow = ((databases.tmpDS.investorStockRow)foundRows[dataIdx].Row); if (investorStockRow.qty == 0) { continue; } //Ignore duplicate alerts. tradeAlertRow = databases.DbAccess.GetOneAlert(alertList[alertId].OnDateTime, investorStockRow.portfolio, alertList[alertId].StockCode, alertList[alertId].Strategy, alertList[alertId].TimeScale.Code, AppTypes.CommonStatus.All); if (tradeAlertRow != null) { continue; } string infoText = alertList[alertId].TradePoint.BusinessInfo.ToText().Trim(); infoText = (infoText != "" ? infoText : common.Consts.constNotAvailable); //Create alert template message, AlertMessageText() will convert it to specified-language text. msg = Consts.constTextMergeMarkerLEFT + "price" + Consts.constTextMergeMarkerRIGHT + " : " + alertList[alertId].Price.ToString() + common.Consts.constCRLF + Consts.constTextMergeMarkerLEFT + "volume" + Consts.constTextMergeMarkerRIGHT + " : " + alertList[alertId].Volume.ToString() + common.Consts.constCRLF + Consts.constTextMergeMarkerLEFT + "marketInfo" + Consts.constTextMergeMarkerRIGHT + " : " + infoText + common.Consts.constCRLF; msg += Consts.constTextMergeMarkerLEFT + "ownedQty" + Consts.constTextMergeMarkerRIGHT + " : " + investorStockRow.qty.ToString() + common.Consts.constCRLF; CreateTradeAlert(tradeAlertTbl, investorStockRow.portfolio, alertList[alertId].StockCode, alertList[alertId].Strategy, alertList[alertId].TimeScale, alertList[alertId].TradePoint, alertList[alertId].OnDateTime, msg); noAlertCreated++; } } databases.DbAccess.UpdateData(tradeAlertTbl); return(noAlertCreated); }
public bool UpdatePortfolioDetail(ref databases.baseDS.portfolioDetailDataTable portfolioDetailTbl) { return(base.Channel.UpdatePortfolioDetail(ref portfolioDetailTbl)); }
public databases.baseDS.portfolioDetailDataTable GetPortfolioDetail_ByCode(string portfolioCode) { try { databases.baseDS.portfolioDetailDataTable tbl = new databases.baseDS.portfolioDetailDataTable(); databases.DbAccess.LoadData(tbl, portfolioCode); return tbl; } catch (Exception ex) { WriteSysLogLocal("WS049", ex); } return null; }