diff --git a/DataDomain/StockGroupModel.cs b/DataDomain/StockGroupModel.cs new file mode 100644 index 0000000..d7f2b07 --- /dev/null +++ b/DataDomain/StockGroupModel.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataDomain +{ + public class StockGroupModel + { + public int Id { get; set; } + public string StockGroup { get; set; } + public string StockName { get; set; } + } +} diff --git a/PP.cmd b/PP.cmd new file mode 100644 index 0000000..fb6050c --- /dev/null +++ b/PP.cmd @@ -0,0 +1,13 @@ +@echo off +D: +cd \Aktier\net6.0-windows +echo *** på plats \Aktier\net6.0-windows *** +copy Stocks* ..\backup\cpyback +echo *** databas backupad *** +copy D:\TommyCsharp\StockInfoCoreApp\StockInfoCore\bin\Debug\net6.0-windows\*.* .\ +echo *** ny prodversion flyttad *** +copy ..\backup\cpyback\Stocks* .\ +echo ************************************ +echo *** Produktions uppdatering klar *** +echo ************************************ +cmd /k \ No newline at end of file diff --git a/StockDAL/StockMarketRepository.cs b/StockDAL/StockMarketRepository.cs index d045954..438af18 100644 --- a/StockDAL/StockMarketRepository.cs +++ b/StockDAL/StockMarketRepository.cs @@ -34,9 +34,9 @@ namespace StockDal private readonly IStockScrapePage _scrapePage; public StockMarketRepository( - IStockPersonConnect stockPersonConnect, + IStockPersonConnect stockPersonConnect, IStockRepository stockRepository, - TestSettings testSettings, + TestSettings testSettings, IStockScrapePage scrapePage) { ViewBrowser = false; @@ -84,7 +84,7 @@ namespace StockDal TextResults.Append("\r\n"); } - // var oxe = StockMarketList; + // var oxe = StockMarketList; } private void SaveLogging() @@ -153,13 +153,13 @@ namespace StockDal } case 9: { - SaveRow.TimeOfDay = value==""?TimeSpan.Parse("00:01"): TimeSpan.Parse(value); + SaveRow.TimeOfDay = value == "" ? TimeSpan.Parse("00:01") : TimeSpan.Parse(value); //StockMarketList.Add(SaveRow.StockName, SaveRow); try { StockMarketList.Add(SaveRow.StockName, SaveRow); } - catch (ArgumentException ) + catch (ArgumentException) { try { @@ -168,7 +168,7 @@ namespace StockDal catch (Exception) { DumpObjects.Add(SaveRow); - } + } } break; @@ -207,7 +207,7 @@ namespace StockDal var url2 = "https://trader.di.se/index.php/stocklist/index/2055?list=7116"; var url3 = "https://trader.di.se/index.php/stocklist/index/2055?list=7127"; //var url1 = "https://www.finansportalen.se/aktiekurser/"; - driver.Navigate().GoToUrl(burl2.HasValue? (burl2.Value ? url2 : url):url3); + driver.Navigate().GoToUrl(burl2.HasValue ? (burl2.Value ? url2 : url) : url3); } catch @@ -219,7 +219,7 @@ namespace StockDal private void saveStockData(List saveRow) { - foreach(var row in saveRow) + foreach (var row in saveRow) { try { @@ -245,21 +245,21 @@ namespace StockDal public void LoadStockMarketList(int persId) { StockMarketList = new Dictionary(); - DumpObjects = new List(); + DumpObjects = new List(); var groupedStocks = _stockRepository.GetStocksGroupedPerPerson(persId); var lastGroup = string.Empty; var stockList = new List(); - foreach(var groupedStock in groupedStocks) + foreach (var groupedStock in groupedStocks) { if (groupedStock.StockGroup != lastGroup) { - if(lastGroup != string.Empty) + if (lastGroup != string.Empty) { _testSettings.StockWishes = stockList.ToArray(); if (lastGroup == "ZNotFound") foreach (var stk in stockList) { - saveStockData(new List(_scrapePage.SearchStockAndCollect(stk.Substring(0,4)))); + saveStockData(new List(_scrapePage.SearchStockAndCollect(stk.Substring(0, 4)))); } else saveStockData(_scrapePage.GetMyStockStatus(lastGroup)); @@ -279,7 +279,7 @@ namespace StockDal } } - if(stockList.Count > 0) + if (stockList.Count > 0) { _testSettings.StockWishes = stockList.ToArray(); if (lastGroup == "ZNotFound") @@ -298,6 +298,66 @@ namespace StockDal } } + public DiTraderStockRow LoadStockMarketStockData(string searchedStock) + { + //StockMarketList = new Dictionary(); + //DumpObjects = new List(); + var groupedStocks = _stockRepository.GetGroupedStock(searchedStock); + var lastGroup = string.Empty; + var stockList = new List(); + var output = new List(); + foreach (var groupedStock in groupedStocks) + { + if (groupedStock.StockGroup != lastGroup) + { + if (lastGroup != string.Empty) + { + _testSettings.StockWishes = stockList.ToArray(); + if (lastGroup == "ZNotFound") + foreach (var stk in stockList) + { + output = _scrapePage.SearchStockAndCollect(stk.Substring(0, 4)); + } + else + output = _scrapePage.GetMyStockStatus(lastGroup); + + stockList.Clear(); + lastGroup = groupedStock.StockGroup; + } + else + { + lastGroup = groupedStock.StockGroup; + } + + stockList.Add(groupedStock.StockId); + } + else + { + stockList.Add(groupedStock.StockId); + } + } + + if (stockList.Count > 0) + { + _testSettings.StockWishes = stockList.ToArray(); + if (lastGroup == "ZNotFound") + foreach (var stk in stockList) + { + output = _scrapePage.SearchStockAndCollect(stk.Substring(0, 4)); + } + else + output = _scrapePage.GetMyStockStatus(lastGroup); + stockList.Clear(); + } + + return output[0]; + + //if (DumpObjects.Any()) + //{ + // SaveLogging(); + //} + } + public void LoadStockMarketList(int persId, bool viewBrowser) { diff --git a/StockDAL/StockRepository.cs b/StockDAL/StockRepository.cs index 87d6658..5b0aa47 100644 --- a/StockDAL/StockRepository.cs +++ b/StockDAL/StockRepository.cs @@ -133,6 +133,8 @@ namespace StockDAL context.SaveChanges(); } + + public IEnumerable GetStocksGroupedPerPerson(int persId) { using var context = new StockContext(); @@ -140,12 +142,52 @@ namespace StockDAL join stk in context.Stocks on prs.StockId equals stk.Id join grp in context.StockGroups on stk.StockId equals grp.StockName where prs.PersonId == persId - orderby grp.GroupName, grp.StockName + orderby grp.StockGroup, grp.StockName select new StockGrpPers { PersId = persId, StockId = stk.StockId, - StockGroup = grp.GroupName + StockGroup = grp.StockGroup + }).ToList(); + return result; + } + + public StockGroupModel SaveStockGroup(StockGroupModel stockGroup) + { + using var context = new StockContext(); + var entity = (from sg in context.StockGroups + where sg.Id == stockGroup.Id + select sg).FirstOrDefault(); + if (entity == null) + { + entity = new StockGroupModel + { + StockGroup = stockGroup.StockGroup, + StockName = stockGroup.StockName + }; + context.StockGroups.Add(entity); + } + else + { + entity.StockGroup = stockGroup.StockGroup; + entity.StockName = stockGroup.StockName; + } + context.SaveChanges(); + + return entity; + } + + + public IEnumerable GetGroupedStock(string stock) + { + using var context = new StockContext(); + var result = (from grp in context.StockGroups + where grp.StockName == stock + select new StockGrpPers + { + PersId = 0, + StockId = grp.StockName, + StockGroup = grp.StockGroup }).ToList(); return result; } @@ -184,5 +226,17 @@ namespace StockDAL throw new InvalidOperationException(ex.Message); } } + + public List GetStockNames() + { + using var context = new StockContext(); + var output = (from stg in context.StockGroups + orderby stg.StockName + select stg.StockName).ToList(); + return output; + } + + + } } diff --git a/StockDAL/StockScrapePage.cs b/StockDAL/StockScrapePage.cs index 27de065..68b9c94 100644 --- a/StockDAL/StockScrapePage.cs +++ b/StockDAL/StockScrapePage.cs @@ -32,8 +32,8 @@ namespace StockDAL Thread.Sleep(500); chooseList.SelectDropDownByText(listText); Thread.Sleep(800); - var stockListTuple = tblList.SimpleReadTablePartly(_testSettings.StockWishes, _testSettings.StocWishCols); - return stockListTuple; + var stockList = tblList.SimpleReadTablePartly(_testSettings.StockWishes, _testSettings.StocWishCols); + return stockList; } public List SearchStockAndCollect(string stockName) diff --git a/StockDal.Interface/IStockMarketRepository.cs b/StockDal.Interface/IStockMarketRepository.cs index 409d9fb..741a6b7 100644 --- a/StockDal.Interface/IStockMarketRepository.cs +++ b/StockDal.Interface/IStockMarketRepository.cs @@ -16,5 +16,6 @@ namespace StockDal.Interface void LoadStockMarketList(int persId); void LoadStockMarketList(int persId, bool viewBrowser); void RefreshMarketList(int persId); + DiTraderStockRow LoadStockMarketStockData(string searchedStock); } } diff --git a/StockDal.Interface/IStockRepository.cs b/StockDal.Interface/IStockRepository.cs index 399bf76..e64f248 100644 --- a/StockDal.Interface/IStockRepository.cs +++ b/StockDal.Interface/IStockRepository.cs @@ -20,5 +20,8 @@ namespace StockDAL.Interface void UpdateActualForSell(int id, int sellAmount, decimal sellPrice, DateTime sellDate); void UpdateActualPrice(int id, decimal price); IEnumerable GetStocksGroupedPerPerson(int persId); + List GetStockNames(); + IEnumerable GetGroupedStock(string stock); + StockGroupModel SaveStockGroup(StockGroupModel stockGroup); } } diff --git a/StockInfoCore/Stocks.db b/StockInfoCore/Stocks.db index c2d1cd9..ca4a7e1 100644 Binary files a/StockInfoCore/Stocks.db and b/StockInfoCore/Stocks.db differ diff --git a/StockInfoCore/Stocks.db-shm b/StockInfoCore/Stocks.db-shm new file mode 100644 index 0000000..fe9ac28 Binary files /dev/null and b/StockInfoCore/Stocks.db-shm differ diff --git a/StockInfoCore/Stocks.db-wal b/StockInfoCore/Stocks.db-wal new file mode 100644 index 0000000..e69de29 diff --git a/StockInfoCore/TillfBackup/Stocks.db b/StockInfoCore/TillfBackup/Stocks.db new file mode 100644 index 0000000..6ab5923 Binary files /dev/null and b/StockInfoCore/TillfBackup/Stocks.db differ diff --git a/StockInfoCore/TillfBackup/Stocks.db-shm b/StockInfoCore/TillfBackup/Stocks.db-shm new file mode 100644 index 0000000..8540a17 Binary files /dev/null and b/StockInfoCore/TillfBackup/Stocks.db-shm differ diff --git a/StockInfoCore/TillfBackup/Stocks.db-wal b/StockInfoCore/TillfBackup/Stocks.db-wal new file mode 100644 index 0000000..d82d187 Binary files /dev/null and b/StockInfoCore/TillfBackup/Stocks.db-wal differ diff --git a/StockInfoCore/frmRegisterStock.cs b/StockInfoCore/frmRegisterStock.cs index fa9d2a8..7d7c8fb 100644 --- a/StockInfoCore/frmRegisterStock.cs +++ b/StockInfoCore/frmRegisterStock.cs @@ -1,4 +1,5 @@ using DataDomain; +using StockDal.Interface; using StockDAL.Interface; using System; using System.Collections.Generic; @@ -16,24 +17,33 @@ namespace StockInfoCore { Color hdr = Color.Red; private readonly IStockRepository _stockRepository; + private readonly IStockMarketRepository _stockMarketRepository; + private readonly IStockScrapePage _scrapePage; + public List StockNames { get; set; } public Dictionary Stocks { get; set; } public List RegisteredStocks { get; set; } = new List(); - public frmRegisterStock(IStockRepository stockRepository) + public StockGroupModel StockGroupTmp { get; set; } + + public frmRegisterStock(IStockRepository stockRepository, + IStockMarketRepository stockMarketRepository, + IStockScrapePage scrapePage) { InitializeComponent(); _stockRepository = stockRepository; + _stockMarketRepository = stockMarketRepository; + _scrapePage = scrapePage; } private void LoadStockCombo() { - if (Stocks.Count() > 0) + + cmbStockChoser.Items.Clear(); + + foreach (var key in StockNames) { - foreach (var key in Stocks.Keys) - { - cmbStockChoser.Items.Add(key); - } + cmbStockChoser.Items.Add(key); } } @@ -45,22 +55,31 @@ namespace StockInfoCore private void frmRegisterStock_Shown(object sender, EventArgs e) { + StockNames = _stockRepository.GetStockNames(); LoadStockCombo(); } private void cmbStockChoser_SelectedIndexChanged(object sender, EventArgs e) { - var stockChosen = Stocks[cmbStockChoser.SelectedItem.ToString()]; - txtStockExtId.Text = stockChosen.StockName; - txtActValue.Text = stockChosen.LatestPrice.ToString(); - txtActDate.Text = (DateTime.Today + stockChosen.TimeOfDay).ToString(); - var stockSold = _stockRepository.LatestSell(stockChosen.StockName.Trim()); - if (stockSold != null) + if (Stocks.ContainsKey(cmbStockChoser.SelectedItem.ToString())) { - if (stockSold.LatestSoldDate != null) + var stockChosen = Stocks[cmbStockChoser.SelectedItem.ToString()]; + txtStockExtId.Text = stockChosen.StockName; + txtActValue.Text = stockChosen.LatestPrice.ToString(); + txtActDate.Text = (DateTime.Today + stockChosen.TimeOfDay).ToString(); + var stockSold = _stockRepository.LatestSell(stockChosen.StockName.Trim()); + if (stockSold != null) { - txtLatestSoldDate.Text = stockSold.LatestSoldDate.Value.ToString(); - txtLatestSoldPrice.Text = stockSold.SoldStockPrice.ToString(); + if (stockSold.LatestSoldDate != null) + { + txtLatestSoldDate.Text = stockSold.LatestSoldDate.Value.ToString(); + txtLatestSoldPrice.Text = stockSold.SoldStockPrice.ToString(); + } + else + { + txtLatestSoldDate.Text = string.Empty; + txtLatestSoldPrice.Text = string.Empty; + } } else { @@ -68,10 +87,24 @@ namespace StockInfoCore txtLatestSoldPrice.Text = string.Empty; } } + else if (StockNames.Contains(cmbStockChoser.SelectedItem.ToString())) + { + var stockChosen = _stockMarketRepository.LoadStockMarketStockData(cmbStockChoser.SelectedItem.ToString()); + txtStockExtId.Text = stockChosen.StockName; + txtActValue.Text = stockChosen.LatestPrice.ToString(); + txtActDate.Text = (DateTime.Today + stockChosen.TimeOfDay).ToString(); + } else { - txtLatestSoldDate.Text = string.Empty; - txtLatestSoldPrice.Text = string.Empty; + var stockChosen = _scrapePage.SearchStockAndCollect(cmbStockChoser.Text.Substring(0, 4)); + if (stockChosen.Count > 0) + { + txtStockExtId.Text = stockChosen[0].StockName; + txtActValue.Text = stockChosen[0].LatestPrice.ToString(); + txtActDate.Text = (DateTime.Today + stockChosen[0].TimeOfDay).ToString(); + StockGroupTmp.StockGroup = "ZNotFound"; + StockGroupTmp.StockName = stockChosen[0].StockName; + } } } @@ -134,7 +167,13 @@ namespace StockInfoCore private void btnSaveToDB_Click(object sender, EventArgs e) { - + if (RegisteredStocks.Count > 0) + { + _stockRepository.InsertMany(RegisteredStocks); + lwRegBuffer.Clear(); + RegisteredStocks.Clear(); + _stockRepository.SaveStockGroup(StockGroupTmp); + } } private void txtBoughtAmount_TextChanged(object sender, EventArgs e)