public static data.baseDS.investorStockRow UpdateData(data.baseDS.investorStockRow row) { data.baseDS.investorStockDataTable tbl = new data.baseDS.investorStockDataTable(); tbl.ImportRow(row); myClient.UpdateInvestorStock(ref tbl); row.AcceptChanges(); return(tbl[0]); }
protected void LoadDetailData() { if (this.portfolioSource.Current == null) return; data.baseDS.portfolioRow portfolioRow = (data.baseDS.portfolioRow)((DataRowView)this.portfolioSource.Current).Row; //Investor stock investorStockSource.DataSource = DataAccess.Libs.GetOwnedStock(portfolioRow.code); data.baseDS.investorStockDataTable investorStockTbl = (investorStockSource.DataSource as data.baseDS.investorStockDataTable); for (int idx = 0; idx < investorStockTbl.Count; idx++) { if (investorStockTbl[idx].RowState == DataRowState.Deleted) continue; } }
public static void LoadStockCode_ByPortfolios(data.tmpDS.stockCodeDataTable tbl, StringCollection portfolios) { data.baseDS.investorStockDataTable tmpTbl = new data.baseDS.investorStockDataTable(); string cond = common.system.MakeConditionStr(portfolios, "b." + tmpTbl.portfolioColumn.ColumnName + "=N'", "'", "OR"); if (cond.Trim() == "") { return; } tmpTbl.Dispose(); string sqlCmd = "SELECT DISTINCT a.*" + " FROM stockCode a" + " INNER JOIN investorStock b ON a.code = b.stockCode" + " WHERE " + cond; LoadFromSQL(tbl, sqlCmd); }
public static bool GetOwnStock(string stockCode, string portfolio, int buySellInterval, DateTime sellDate, out decimal qty, out decimal buyAmt) { qty = 0; buyAmt = 0; data.baseDS.investorStockDataTable dataTbl = new data.baseDS.investorStockDataTable(); DbAccess.LoadData(dataTbl, stockCode, portfolio); if (dataTbl.Count == 0) { return(false); } DateTime applicableDate = sellDate.AddDays(-Settings.sysStockSell2BuyInterval); for (int idx = 0; idx < dataTbl.Count; idx++) { if (dataTbl[idx].buyDate > applicableDate) { continue; } qty += dataTbl[idx].qty; buyAmt += dataTbl[idx].buyAmt; } return(true); }
public static bool GetOwnStock(string stockCode, string portfolio, int buySellInterval, DateTime sellDate, out decimal qty, out decimal buyAmt) { data.baseDS.stockExchangeRow marketRow = AppLibs.GetStockExchange(stockCode); qty = 0; buyAmt = 0; data.baseDS.investorStockDataTable dataTbl = new data.baseDS.investorStockDataTable(); LoadData(dataTbl, stockCode, portfolio); if (dataTbl.Count == 0) { return(false); } DateTime applicableDate = sellDate.AddDays(-marketRow.minBuySellDay); for (int idx = 0; idx < dataTbl.Count; idx++) { if (dataTbl[idx].buyDate > applicableDate) { continue; } qty += dataTbl[idx].qty; buyAmt += dataTbl[idx].buyAmt; } return(true); }
public void UpdateInvestorStock(ref data.baseDS.investorStockDataTable tbl) { DbAccess.UpdateData(tbl); }
public data.baseDS.investorStockDataTable GetOwnedStock(string portfolioCode) { data.baseDS.investorStockDataTable tbl = new data.baseDS.investorStockDataTable(); DbAccess.LoadData(tbl, portfolioCode); return(tbl); }
public static data.baseDS.investorStockRow UpdateData(data.baseDS.investorStockRow row) { data.baseDS.investorStockDataTable tbl = new data.baseDS.investorStockDataTable(); tbl.ImportRow(row); myClient.UpdateInvestorStock(ref tbl); row.AcceptChanges(); return tbl[0]; }
public data.baseDS.investorStockDataTable GetOwnedStock(string portfolioCode) { data.baseDS.investorStockDataTable tbl = new data.baseDS.investorStockDataTable(); DbAccess.LoadData(tbl, portfolioCode); return tbl; }
public static void LoadData(data.baseDS.investorStockDataTable tbl, string portfolioCode) { investorStockTA.ClearBeforeFill = false; investorStockTA.FillByPortfolio(tbl, portfolioCode); }
/// <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 data.baseDS.transactionsDataTable MakeTransaction(AppTypes.TradeActions type, string stockCode, string portfolioCode, int qty, decimal feePerc,out string errorText) { errorText=""; data.baseDS.stockExchangeRow marketRow = GetStockExchange(stockCode); if (marketRow == null) return null; errorText=""; DateTime onTime = DateTime.Now; //Price data.baseDS.priceDataRow priceRow = 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, Settings.sysPrecisionLocal); data.baseDS.portfolioRow portfolioRow = 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 data.baseDS.transactionsDataTable transTbl = new data.baseDS.transactionsDataTable(); data.baseDS.investorStockDataTable investorStockTbl = new data.baseDS.investorStockDataTable(); data.baseDS.transactionsRow transRow; data.baseDS.investorStockRow stockRow; transRow = transTbl.NewtransactionsRow(); commonClass.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(); DbAccess.LoadData(investorStockTbl, stockCode, portfolioCode, onDate); if (investorStockTbl.Count == 0) { stockRow = investorStockTbl.NewinvestorStockRow(); commonClass.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(); 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)) { DbAccess.UpdateData(portfolioRow); DbAccess.UpdateData(investorStockTbl); DbAccess.UpdateData(transTbl); scope.Complete(); } return transTbl; }
public static void UpdateData(data.baseDS.investorStockDataTable tbl) { investorStockTA.Update(tbl); tbl.AcceptChanges(); }
public static void LoadStockByInvestor(data.baseDS.investorStockDataTable tbl, string investorCode) { investorStockTA.ClearBeforeFill = false; investorStockTA.FillByInvestor(tbl, investorCode); }
public static void LoadData(data.baseDS.investorStockDataTable tbl, string stockCode, string portfolio, DateTime buyDate) { investorStockTA.ClearBeforeFill = false; investorStockTA.FillByPortfolioStockBuyDate(tbl, portfolio, stockCode, buyDate); }
public static void LoadStockCode_ByPortfolios(data.tmpDS.stockCodeDataTable tbl, StringCollection portfolios) { data.baseDS.investorStockDataTable tmpTbl = new data.baseDS.investorStockDataTable(); string cond = common.system.MakeConditionStr(portfolios, "b." + tmpTbl.portfolioColumn.ColumnName + "=N'", "'", "OR"); if (cond.Trim() == "") return; tmpTbl.Dispose(); string sqlCmd = "SELECT DISTINCT a.*" + " FROM stockCode a" + " INNER JOIN investorStock b ON a.code = b.stockCode"+ " WHERE " + cond; LoadFromSQL(tbl, sqlCmd); }
public static bool GetOwnStock(string stockCode, string portfolio, int buySellInterval, DateTime sellDate, out decimal qty, out decimal buyAmt) { data.baseDS.stockExchangeRow marketRow = AppLibs.GetStockExchange(stockCode); qty = 0; buyAmt = 0; data.baseDS.investorStockDataTable dataTbl = new data.baseDS.investorStockDataTable(); LoadData(dataTbl, stockCode, portfolio); if (dataTbl.Count == 0) return false; DateTime applicableDate = sellDate.AddDays(-marketRow.minBuySellDay); for (int idx = 0; idx < dataTbl.Count; idx++) { if (dataTbl[idx].buyDate > applicableDate) continue; qty += dataTbl[idx].qty; buyAmt += dataTbl[idx].buyAmt; } return true; }
public static bool GetOwnStock(string stockCode, string portfolio, int buySellInterval, DateTime sellDate, out decimal qty, out decimal buyAmt) { qty = 0; buyAmt = 0; data.baseDS.investorStockDataTable dataTbl = new data.baseDS.investorStockDataTable(); DbAccess.LoadData(dataTbl, stockCode, portfolio); if (dataTbl.Count == 0) return false; DateTime applicableDate = sellDate.AddDays(-Settings.sysStockSell2BuyInterval); for (int idx = 0; idx < dataTbl.Count; idx++) { if (dataTbl[idx].buyDate > applicableDate) continue; qty += dataTbl[idx].qty; buyAmt += dataTbl[idx].buyAmt; } return true; }