public override void AddNew(string code) { bool saveOnProccessing = this.fOnProccessing; try { this.fOnProccessing = true; databases.baseDS.portfolioRow row = (databases.baseDS.portfolioRow)((DataRowView)myMasterSource.AddNew()).Row; if (row != null) { databases.AppLibs.InitData(row); row.type = (byte)this.myWatchListType; row.investorCode = this.myInvestorCode; row.code = Consts.constMarkerNEW; interestedStrategy.Clear(); int position = myMasterSource.Position; myMasterSource.Position = -1; myMasterSource.Position = position; SetFirstFocus(); } PortfolioCurrentChanged(); this.fOnProccessing = saveOnProccessing; } catch (Exception er) { this.fOnProccessing = saveOnProccessing; 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 LoadData() { databases.baseDS.portfolioRow sysPortfolioRow = DataAccess.Libs.GetPortfolio_DefaultStrategy(); interestedStrategy.myDataTbl = DataAccess.Libs.GetPortfolioDetail_ByCode(sysPortfolioRow.code); interestedStrategy.myPorfolioCode = sysPortfolioRow.code; interestedStrategy.myStockCode = sysPortfolioRow.code; interestedStrategy.Refresh(); }
protected override void RemoveCurrent() { this.ShowMessage(""); databases.baseDS.portfolioRow row = (databases.baseDS.portfolioRow)((DataRowView)myMasterSource.Current).Row; if (row.HasVersion(DataRowVersion.Original)) { DataAccess.Libs.DeleteData(row); } base.RemoveCurrent(); }
protected override void RemoveCurrent() { this.ShowMessage(""); if (myMasterSource.Current == null) { return; } databases.baseDS.portfolioRow row = (databases.baseDS.portfolioRow)(myMasterSource.Current as DataRowView).Row; if (row.HasVersion(DataRowVersion.Original)) { DataAccess.Libs.DeleteData(row); } myMasterSource.RemoveCurrent(); this.ShowMessage(Languages.Libs.GetString("dataWasDeleted")); }
private void CalculateCashAmt() { if (this.portfolioSource.Current == null) { return; } databases.baseDS.portfolioRow row = (databases.baseDS.portfolioRow)((DataRowView)this.portfolioSource.Current).Row; if (row.IsNull(myDataSet.portfolio.startCapAmtColumn.ColumnName)) { cashAmtEd.Value = 0; } else { cashAmtEd.Value = row.startCapAmt - row.usedCapAmt; } }
public static databases.baseDS.portfolioRow FindAndCache(databases.baseDS.portfolioDataTable tbl, string code) { databases.baseDS.portfolioRow row = tbl.FindBycode(code); if (row != null) { return(row); } databases.baseDSTableAdapters.portfolioTA dataTA = new databases.baseDSTableAdapters.portfolioTA(); dataTA.ClearBeforeFill = false; dataTA.FillByCode(tbl, code); row = tbl.FindBycode(code); if (row != null) { return(row); } return(null); }
protected override void UpdateData(DataRow row) { if (row == null) { return; } databases.baseDS.portfolioRow portfolioRow = (databases.baseDS.portfolioRow)row; portfolioRow.ItemArray = DataAccess.Libs.UpdateData(portfolioRow).ItemArray; portfolioRow.AcceptChanges(); if (this.interestedStrategy.myDataTbl != null) { DataAccess.Libs.UpdateData(this.interestedStrategy.myDataTbl); interestedStrategy.myDataTbl.AcceptChanges(); } PortfolioCurrentChanged(); }
protected void LoadDetailData() { if (this.portfolioSource.Current == null) { return; } databases.baseDS.portfolioRow row = (databases.baseDS.portfolioRow)((DataRowView)this.portfolioSource.Current).Row; //Investor stock if (row.IsNull(myDataSet.portfolio.codeColumn.ColumnName)) { investorStockSource.DataSource = null; } else { investorStockSource.DataSource = DataAccess.Libs.GetOwnedStock_ByPortfolio(row.code); } }
public static void InitData(databases.baseDS.portfolioRow row) { row.type = (byte)AppTypes.PortfolioTypes.WatchList; row.code = ""; row.name = ""; row.investorCode = ""; row.description = ""; row.startCapAmt = 0; row.usedCapAmt = 0; row.maxBuyAmtPerc = 100; row.stockReducePerc = 50; row.stockAccumulatePerc = 50; row.interestedSector = ""; row.interestedStock = ""; }
public override void AddNew(string code) { //databases.baseDS.portfolioRow lastRow = (databases.baseDS.portfolioRow)((DataRowView)myMasterSource.Current).Row; databases.baseDS.portfolioRow row = (databases.baseDS.portfolioRow)((DataRowView)myMasterSource.AddNew()).Row; if (row == null) { return; } databases.AppLibs.InitData(row); row.type = (byte)this.myPortfolioType; row.investorCode = this.myInvestorCode; row.code = Consts.constMarkerNEW; int position = myMasterSource.Position; myMasterSource.Position = -1; myMasterSource.Position = position; SetFirstFocus(); }
private void PortfolioCurrentChanged() { if (this.portfolioSource.Current == null) { return; } databases.baseDS.portfolioRow row = (databases.baseDS.portfolioRow)((DataRowView)this.portfolioSource.Current).Row; if (isNewRow(row)) { interestedStrategy.myPorfolioCode = null; interestedStrategy.myDataTbl = null; } else { interestedStrategy.myPorfolioCode = row.code; interestedStrategy.myDataTbl = DataAccess.Libs.GetPortfolioDetail_ByCode(row.code); } interestedStrategy.myStockCode = null; interestedStrategy.Refresh(); ShowReccount((this.portfolioSource.Position + 1).ToString() + "/" + this.portfolioSource.Count.ToString()); }
protected override void SaveData() { common.MultiValueString mvString = new common.MultiValueString(); databases.baseDS.portfolioDataTable portfolioTbl = new databases.baseDS.portfolioDataTable(); databases.baseDS.portfolioDetailDataTable portfolioDataTbl; portfolioTbl.Clear(); for (int portfolioIdx = 0; portfolioIdx < watchListLb.myCheckedValues.Count; portfolioIdx++) { databases.baseDS.portfolioRow portfolioRow = DataAccess.Libs.GetPortfolio_ByCode(watchListLb.myCheckedValues[portfolioIdx]); if (portfolioRow == null) { continue; } mvString.myFormatString = portfolioRow.interestedStock; mvString.Add(codeEd.Text); portfolioRow.interestedStock = mvString.myFormatString; portfolioDataTbl = DataAccess.Libs.GetPortfolioDetail_ByCode(portfolioRow.code); databases.baseDS.portfolioDetailRow dataRow; for (int idx = 0; idx < myStrategyCodes.Count; idx++) { dataRow = portfolioDataTbl.FindByportfoliocodesubCode(portfolioRow.code, this.codeEd.Text, this.myStrategyCodes[idx]); if (dataRow == null) { dataRow = portfolioDataTbl.NewportfolioDetailRow(); databases.AppLibs.InitData(dataRow); dataRow.portfolio = portfolioRow.code; dataRow.code = codeEd.Text; dataRow.subCode = this.myStrategyCodes[idx]; portfolioDataTbl.AddportfolioDetailRow(dataRow); } mvString.myFormatString = dataRow.data; mvString.Add(timeScaleCb.myValue.Code); dataRow.data = mvString.myFormatString; } DataAccess.Libs.UpdateData(portfolioRow); DataAccess.Libs.UpdateData(portfolioDataTbl); } common.system.ShowMessage(Languages.Libs.GetString("dataSaved")); }
private void interestedStockClb_myStockCodeSelectionChange(object sender, EventArgs e) { try { if (this.fOnProccessing) { return; } if (((baseClass.controls.lbStockCode)sender).SelectedItem == null) { return; } databases.baseDS.portfolioRow row = (databases.baseDS.portfolioRow)((DataRowView)this.portfolioSource.Current).Row; interestedStrategy.Clear(); interestedStrategy.myStockCode = ((common.myComboBoxItem)(((baseClass.controls.lbStockCode)sender).SelectedItem)).Value; interestedStrategy.Refresh(); } catch (Exception er) { ShowError(er); } }
private void newWatchListBtn_Click(object sender, EventArgs e) { try { this.ShowMessage(""); baseClass.forms.watchListNew form = baseClass.forms.watchListNew.GetForm(); databases.baseDS.portfolioRow row = form.ShowNew(AppTypes.PortfolioTypes.WatchList, commonClass.SysLibs.sysLoginCode); if (row == null) { return; } watchListLb.LoadData(commonClass.SysLibs.sysLoginCode, false); StringCollection list = watchListLb.myCheckedValues; if (!list.Contains(row.code)) { list.Add(row.code); watchListLb.myCheckedValues = list; } } catch (Exception er) { this.ShowError(er); } }
/// <summary> /// Create records to keep stock transaction (buy,sell...) /// - transactions /// - investorStock /// </summary> /// <param name="onDate"></param> /// <param name="type"></param> /// <param name="stockCode"></param> /// <param name="portfolio"></param> /// <param name="qty"></param> /// <param name="amt"></param> public static databases.baseDS.transactionsDataTable MakeTransaction(AppTypes.TradeActions type, string stockCode, string portfolioCode, int qty, decimal feePerc, out string errorText) { errorText = ""; databases.baseDS.stockExchangeRow marketRow = databases.DbAccess.GetStockExchange(stockCode); if (marketRow == null) { return(null); } errorText = ""; DateTime onTime = DateTime.Now; //Price databases.baseDS.priceDataRow priceRow = databases.DbAccess.GetLastPriceData(stockCode); if (priceRow == null) { errorText = Languages.Libs.GetString("cannotDoTransaction"); return(null); } decimal amt = qty * priceRow.closePrice * marketRow.priceRatio; decimal feeAmt = (decimal)Math.Round(feePerc * amt / 100, common.system.GetPrecisionFromMask(Settings.sysMaskLocalAmt)); databases.baseDS.portfolioRow portfolioRow = databases.DbAccess.GetPortfolio(portfolioCode); if (portfolioRow == null) { errorText = String.Format(Languages.Libs.GetString("dataNotFound"), "[portfolio]"); return(null); } switch (type) { case AppTypes.TradeActions.Buy: case AppTypes.TradeActions.Accumulate: portfolioRow.usedCapAmt += amt; portfolioRow.usedCapAmt += feeAmt; break; default: //Sell portfolioRow.usedCapAmt -= amt; portfolioRow.usedCapAmt += feeAmt; break; } if (portfolioRow.startCapAmt - portfolioRow.usedCapAmt < 0) { portfolioRow.CancelEdit(); errorText = String.Format(Languages.Libs.GetString("outOfMoney"), portfolioRow.startCapAmt - portfolioRow.usedCapAmt - amt - feeAmt); return(null); } //Create records to store data databases.baseDS.transactionsDataTable transTbl = new databases.baseDS.transactionsDataTable(); databases.baseDS.investorStockDataTable investorStockTbl = new databases.baseDS.investorStockDataTable(); databases.baseDS.transactionsRow transRow; databases.baseDS.investorStockRow stockRow; transRow = transTbl.NewtransactionsRow(); databases.AppLibs.InitData(transRow); transRow.onTime = onTime; transRow.tranType = (byte)type; transRow.stockCode = stockCode; transRow.portfolio = portfolioCode; transRow.qty = qty; transRow.amt = amt; transRow.feeAmt = feeAmt; transRow.status = (byte)AppTypes.CommonStatus.Close; transTbl.AddtransactionsRow(transRow); //Update stock DateTime onDate = onTime.Date; switch (type) { case AppTypes.TradeActions.Buy: case AppTypes.TradeActions.Accumulate: investorStockTbl.Clear(); databases.DbAccess.LoadData(investorStockTbl, stockCode, portfolioCode, onDate); if (investorStockTbl.Count == 0) { stockRow = investorStockTbl.NewinvestorStockRow(); databases.AppLibs.InitData(stockRow); stockRow.buyDate = onDate; stockRow.stockCode = stockCode; stockRow.portfolio = portfolioCode; investorStockTbl.AddinvestorStockRow(stockRow); } stockRow = investorStockTbl[0]; stockRow.qty += qty; stockRow.buyAmt += amt; break; default: //Sell DateTime applicableDate = onDate.AddDays(-marketRow.minBuySellDay); investorStockTbl.Clear(); databases.DbAccess.LoadData(investorStockTbl, stockCode, portfolioCode); decimal remainQty = qty; for (int idx = 0; idx < investorStockTbl.Count; idx++) { if (investorStockTbl[idx].buyDate > applicableDate) { continue; } if (investorStockTbl[idx].qty >= remainQty) { investorStockTbl[idx].buyAmt = (investorStockTbl[idx].qty - remainQty) * (investorStockTbl[idx].qty == 0 ? 0 : investorStockTbl[idx].buyAmt / investorStockTbl[idx].qty); investorStockTbl[idx].qty = (investorStockTbl[idx].qty - remainQty); remainQty = 0; } else { remainQty -= investorStockTbl[idx].qty; investorStockTbl[idx].buyAmt = 0; investorStockTbl[idx].qty = 0; } if (remainQty == 0) { break; } } if (remainQty > 0) { errorText = String.Format(Languages.Libs.GetString("outOfQty"), qty - remainQty); return(null); } break; } //Delete empty stock for (int idx = 0; idx < investorStockTbl.Count; idx++) { if (investorStockTbl[idx].qty != 0) { continue; } investorStockTbl[idx].Delete(); } //Update data with transaction support TransactionScopeOption tranOption; tranOption = (commonClass.SysLibs.sysUseTransactionInUpdate ? TransactionScopeOption.Required : TransactionScopeOption.Suppress); using (TransactionScope scope = new TransactionScope(tranOption)) { databases.DbAccess.UpdateData(portfolioRow); databases.DbAccess.UpdateData(investorStockTbl); databases.DbAccess.UpdateData(transTbl); scope.Complete(); } return(transTbl); }