Cleared app from old code, by commenting out
Will do another commit when all comments are taken away
This commit is contained in:
@ -23,5 +23,11 @@ namespace DataDomain
|
||||
public long PostAmount { get; set; }
|
||||
public decimal SoldStockPrice { get; set; }
|
||||
|
||||
//public decimal PostValue
|
||||
//{
|
||||
// get { return ActAmount * ActValue; }
|
||||
//}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -18,14 +18,15 @@ using Helpers;
|
||||
|
||||
namespace StockDal
|
||||
{
|
||||
|
||||
|
||||
public class StockMarketRepository : IStockMarketRepository
|
||||
{
|
||||
public Dictionary<string, DiTraderStockRow> StockMarketList { get; set; }
|
||||
|
||||
public List<DiTraderStockRow> DumpObjects { get; set; } = new List<DiTraderStockRow>();
|
||||
public DiTraderStockRow SaveRow { get; set; }
|
||||
public StringBuilder TextResults { get; set; }
|
||||
public bool ViewBrowser { get; set; }
|
||||
//public bool ViewBrowser { get; set; }
|
||||
|
||||
public IWebDriver driver;
|
||||
private readonly IStockPersonConnect _stockPersonConnect;
|
||||
@ -39,53 +40,53 @@ namespace StockDal
|
||||
TestSettings testSettings,
|
||||
IStockScrapePage scrapePage)
|
||||
{
|
||||
ViewBrowser = false;
|
||||
// ViewBrowser = false;
|
||||
_stockPersonConnect = stockPersonConnect;
|
||||
_stockRepository = stockRepository;
|
||||
_testSettings = testSettings;
|
||||
_scrapePage = scrapePage;
|
||||
}
|
||||
|
||||
private void Find_Data()
|
||||
{
|
||||
TextResults = new StringBuilder();
|
||||
IList<IWebElement> searchElements = driver.FindElements(By.TagName("tbody"));
|
||||
foreach (IWebElement i in searchElements)
|
||||
{
|
||||
//private void Find_Data()
|
||||
//{
|
||||
// TextResults = new StringBuilder();
|
||||
// IList<IWebElement> searchElements = driver.FindElements(By.TagName("tbody"));
|
||||
// foreach (IWebElement i in searchElements)
|
||||
// {
|
||||
|
||||
HtmlAgilityPack.HtmlDocument htmlDocument = new HtmlAgilityPack.HtmlDocument();
|
||||
var text = i.GetAttribute("innerHTML");
|
||||
htmlDocument.LoadHtml(text);
|
||||
var inputs = htmlDocument.DocumentNode.Descendants("tr").ToList();
|
||||
foreach (var items in inputs)
|
||||
{
|
||||
HtmlAgilityPack.HtmlDocument htmlDocument1 = new HtmlAgilityPack.HtmlDocument();
|
||||
htmlDocument1.LoadHtml(items.InnerHtml);
|
||||
var tds = htmlDocument1.DocumentNode.Descendants("td").ToList();
|
||||
var appendText = "";
|
||||
var fNr = 0;
|
||||
foreach (var item in tds)
|
||||
{
|
||||
var intext = item.InnerText.Replace("\r\n", "");
|
||||
appendText += appendText.Length == 0 ? intext : " " + intext;
|
||||
if (tds.Count == 10)
|
||||
{
|
||||
AddValueToListRow(fNr++, intext);
|
||||
}
|
||||
}
|
||||
if (!string.IsNullOrEmpty(appendText))
|
||||
{
|
||||
TextResults.Append(appendText + "\r\n");
|
||||
}
|
||||
htmlDocument1 = null;
|
||||
}
|
||||
htmlDocument = null;
|
||||
// HtmlAgilityPack.HtmlDocument htmlDocument = new HtmlAgilityPack.HtmlDocument();
|
||||
// var text = i.GetAttribute("innerHTML");
|
||||
// htmlDocument.LoadHtml(text);
|
||||
// var inputs = htmlDocument.DocumentNode.Descendants("tr").ToList();
|
||||
// foreach (var items in inputs)
|
||||
// {
|
||||
// HtmlAgilityPack.HtmlDocument htmlDocument1 = new HtmlAgilityPack.HtmlDocument();
|
||||
// htmlDocument1.LoadHtml(items.InnerHtml);
|
||||
// var tds = htmlDocument1.DocumentNode.Descendants("td").ToList();
|
||||
// var appendText = "";
|
||||
// var fNr = 0;
|
||||
// foreach (var item in tds)
|
||||
// {
|
||||
// var intext = item.InnerText.Replace("\r\n", "");
|
||||
// appendText += appendText.Length == 0 ? intext : " " + intext;
|
||||
// if (tds.Count == 10)
|
||||
// {
|
||||
// AddValueToListRow(fNr++, intext);
|
||||
// }
|
||||
// }
|
||||
// if (!string.IsNullOrEmpty(appendText))
|
||||
// {
|
||||
// TextResults.Append(appendText + "\r\n");
|
||||
// }
|
||||
// htmlDocument1 = null;
|
||||
// }
|
||||
// htmlDocument = null;
|
||||
|
||||
TextResults.Append("\r\n");
|
||||
}
|
||||
// TextResults.Append("\r\n");
|
||||
// }
|
||||
|
||||
// var oxe = StockMarketList;
|
||||
}
|
||||
// // var oxe = StockMarketList;
|
||||
//}
|
||||
|
||||
private void SaveLogging()
|
||||
{
|
||||
@ -100,122 +101,122 @@ namespace StockDal
|
||||
File.WriteAllText($"{programPath}\\Loggings\\Log{DateTime.Now.ToShortDateString()}.txt", output);
|
||||
}
|
||||
|
||||
private void AddValueToListRow(int pos, string value)
|
||||
{
|
||||
switch (pos)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
SaveRow = new DiTraderStockRow();
|
||||
SaveRow.StockName = value;
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
SaveRow.ProcChange = string.IsNullOrWhiteSpace(value) ? 0 : decimal.Parse(value);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
SaveRow.RealChange = string.IsNullOrWhiteSpace(value) ? 0 : decimal.Parse(value);
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
SaveRow.BuyPrice = string.IsNullOrWhiteSpace(value) ? 0 : decimal.Parse(value);
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
SaveRow.SellPrice = string.IsNullOrWhiteSpace(value) ? 0 : decimal.Parse(value);
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
SaveRow.LatestPrice = string.IsNullOrWhiteSpace(value) ? 0 : decimal.Parse(value);
|
||||
break;
|
||||
}
|
||||
case 6:
|
||||
{
|
||||
SaveRow.HighestPrice = string.IsNullOrWhiteSpace(value) ? 0 : decimal.Parse(value);
|
||||
break;
|
||||
}
|
||||
case 7:
|
||||
{
|
||||
SaveRow.LowestPrice = string.IsNullOrWhiteSpace(value) ? 0 : decimal.Parse(value);
|
||||
break;
|
||||
}
|
||||
case 8:
|
||||
{
|
||||
//private void AddValueToListRow(int pos, string value)
|
||||
//{
|
||||
// switch (pos)
|
||||
// {
|
||||
// case 0:
|
||||
// {
|
||||
// SaveRow = new DiTraderStockRow();
|
||||
// SaveRow.StockName = value;
|
||||
// break;
|
||||
// }
|
||||
// case 1:
|
||||
// {
|
||||
// SaveRow.ProcChange = string.IsNullOrWhiteSpace(value) ? 0 : decimal.Parse(value);
|
||||
// break;
|
||||
// }
|
||||
// case 2:
|
||||
// {
|
||||
// SaveRow.RealChange = string.IsNullOrWhiteSpace(value) ? 0 : decimal.Parse(value);
|
||||
// break;
|
||||
// }
|
||||
// case 3:
|
||||
// {
|
||||
// SaveRow.BuyPrice = string.IsNullOrWhiteSpace(value) ? 0 : decimal.Parse(value);
|
||||
// break;
|
||||
// }
|
||||
// case 4:
|
||||
// {
|
||||
// SaveRow.SellPrice = string.IsNullOrWhiteSpace(value) ? 0 : decimal.Parse(value);
|
||||
// break;
|
||||
// }
|
||||
// case 5:
|
||||
// {
|
||||
// SaveRow.LatestPrice = string.IsNullOrWhiteSpace(value) ? 0 : decimal.Parse(value);
|
||||
// break;
|
||||
// }
|
||||
// case 6:
|
||||
// {
|
||||
// SaveRow.HighestPrice = string.IsNullOrWhiteSpace(value) ? 0 : decimal.Parse(value);
|
||||
// break;
|
||||
// }
|
||||
// case 7:
|
||||
// {
|
||||
// SaveRow.LowestPrice = string.IsNullOrWhiteSpace(value) ? 0 : decimal.Parse(value);
|
||||
// break;
|
||||
// }
|
||||
// case 8:
|
||||
// {
|
||||
|
||||
SaveRow.Volume = string.IsNullOrWhiteSpace(value) ? 0 : long.Parse(value.Replace(" ", ""));
|
||||
break;
|
||||
}
|
||||
case 9:
|
||||
{
|
||||
SaveRow.TimeOfDay = value == "" ? TimeSpan.Parse("00:01") : TimeSpan.Parse(value);
|
||||
// SaveRow.Volume = string.IsNullOrWhiteSpace(value) ? 0 : long.Parse(value.Replace(" ", ""));
|
||||
// break;
|
||||
// }
|
||||
// case 9:
|
||||
// {
|
||||
// SaveRow.TimeOfDay = value == "" ? TimeSpan.Parse("00:01") : TimeSpan.Parse(value);
|
||||
// //StockMarketList.Add(SaveRow.StockName, SaveRow);
|
||||
// try
|
||||
// {
|
||||
// StockMarketList.Add(SaveRow.StockName, SaveRow);
|
||||
try
|
||||
{
|
||||
StockMarketList.Add(SaveRow.StockName, SaveRow);
|
||||
}
|
||||
catch (ArgumentException)
|
||||
{
|
||||
try
|
||||
{
|
||||
StockMarketList.Add(SaveRow.StockName + "-2", SaveRow);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
DumpObjects.Add(SaveRow);
|
||||
}
|
||||
// }
|
||||
// catch (ArgumentException)
|
||||
// {
|
||||
// try
|
||||
// {
|
||||
// StockMarketList.Add(SaveRow.StockName + "-2", SaveRow);
|
||||
// }
|
||||
// catch (Exception)
|
||||
// {
|
||||
// DumpObjects.Add(SaveRow);
|
||||
// }
|
||||
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
// }
|
||||
// break;
|
||||
// }
|
||||
// default:
|
||||
// break;
|
||||
// }
|
||||
//}
|
||||
|
||||
private void OpenBrowser(bool? burl2 = false)
|
||||
{
|
||||
var driverService = ChromeDriverService.CreateDefaultService();
|
||||
driverService.HideCommandPromptWindow = true;
|
||||
//private void OpenBrowser(bool? burl2 = false)
|
||||
//{
|
||||
// var driverService = ChromeDriverService.CreateDefaultService();
|
||||
// driverService.HideCommandPromptWindow = true;
|
||||
|
||||
if (ViewBrowser)
|
||||
{
|
||||
if (driver == null)
|
||||
{
|
||||
driver = new ChromeDriver(driverService);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (driver == null)
|
||||
{
|
||||
var options = new ChromeOptions();
|
||||
options.AddArgument("headless");
|
||||
driver = new ChromeDriver(driverService, options);
|
||||
}
|
||||
}
|
||||
// if (ViewBrowser)
|
||||
// {
|
||||
// if (driver == null)
|
||||
// {
|
||||
// driver = new ChromeDriver(driverService);
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// if (driver == null)
|
||||
// {
|
||||
// var options = new ChromeOptions();
|
||||
// options.AddArgument("headless");
|
||||
// driver = new ChromeDriver(driverService, options);
|
||||
// }
|
||||
// }
|
||||
|
||||
try
|
||||
{
|
||||
//var url0 = "https://money.cnn.com/data/hotstocks/index.html";
|
||||
var url = "https://trader.di.se/index.php/stocklist/index/2055?list=7126";
|
||||
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);
|
||||
// try
|
||||
// {
|
||||
// //var url0 = "https://money.cnn.com/data/hotstocks/index.html";
|
||||
// var url = "https://trader.di.se/index.php/stocklist/index/2055?list=7126";
|
||||
// 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);
|
||||
|
||||
}
|
||||
catch
|
||||
{
|
||||
throw;
|
||||
}
|
||||
// }
|
||||
// catch
|
||||
// {
|
||||
// throw;
|
||||
// }
|
||||
|
||||
}
|
||||
//}
|
||||
|
||||
private void saveStockData(List<DiTraderStockRow> saveRow)
|
||||
{
|
||||
@ -246,7 +247,8 @@ namespace StockDal
|
||||
{
|
||||
StockMarketList = new Dictionary<string, DiTraderStockRow>();
|
||||
DumpObjects = new List<DiTraderStockRow>();
|
||||
var groupedStocks = _stockRepository.GetStocksGroupedPerPerson(persId);
|
||||
var groupedStocks = persId == 0 ? _stockRepository.GetStocksGroupedAllPersons()
|
||||
: _stockRepository.GetStocksGroupedPerPerson(persId);
|
||||
var lastGroup = string.Empty;
|
||||
var stockList = new List<string>();
|
||||
foreach (var groupedStock in groupedStocks)
|
||||
@ -359,19 +361,20 @@ namespace StockDal
|
||||
}
|
||||
|
||||
|
||||
public void LoadStockMarketList(int persId, bool viewBrowser)
|
||||
{
|
||||
StockMarketList = new Dictionary<string, DiTraderStockRow>();
|
||||
ViewBrowser = viewBrowser;
|
||||
OpenBrowser();
|
||||
Find_Data();
|
||||
}
|
||||
//public void LoadStockMarketList(int persId)
|
||||
//{
|
||||
// LoadStockMarketList(persId);
|
||||
// //StockMarketList = new Dictionary<string, DiTraderStockRow>();
|
||||
// //ViewBrowser = viewBrowser;
|
||||
// //OpenBrowser();
|
||||
// //Find_Data();
|
||||
//}
|
||||
|
||||
public void RefreshMarketList(int persId)
|
||||
{
|
||||
StockMarketList = new Dictionary<string, DiTraderStockRow>();
|
||||
driver.Navigate().Refresh();
|
||||
Find_Data();
|
||||
//StockMarketList = new Dictionary<string, DiTraderStockRow>();
|
||||
//driver.Navigate().Refresh();
|
||||
//Find_Data();
|
||||
}
|
||||
|
||||
public void Clean()
|
||||
|
||||
@ -103,12 +103,6 @@ namespace StockDAL
|
||||
return result;
|
||||
}
|
||||
|
||||
public IEnumerable<StockMember> GetAllStocks()
|
||||
{
|
||||
using var context = new StockContext();
|
||||
var output = context.Stocks;
|
||||
return output.ToList();
|
||||
}
|
||||
|
||||
public IEnumerable<StockMember> GetAllRemainingStocks()
|
||||
{
|
||||
@ -132,8 +126,14 @@ namespace StockDAL
|
||||
context.Stocks.AddRange(stockMembers);
|
||||
context.SaveChanges();
|
||||
}
|
||||
|
||||
|
||||
public IEnumerable<StockMember> GetAllStocks()
|
||||
{
|
||||
using var context = new StockContext();
|
||||
var output = (from stk in context.Stocks
|
||||
orderby stk.StockId, (stk.ActAmount * stk.ActValue).ToString() descending
|
||||
select stk);
|
||||
return output.ToList();
|
||||
}
|
||||
|
||||
public IEnumerable<StockGrpPers> GetStocksGroupedPerPerson(int persId)
|
||||
{
|
||||
@ -152,6 +152,24 @@ namespace StockDAL
|
||||
return result;
|
||||
}
|
||||
|
||||
public IEnumerable<StockGrpPers> GetStocksGroupedAllPersons()
|
||||
{
|
||||
using var context = new StockContext();
|
||||
var result = (from prs in context.PersonStocks
|
||||
join stk in context.Stocks on prs.StockId equals stk.Id
|
||||
join grp in context.StockGroups on stk.StockId equals grp.StockName
|
||||
where stk.ActAmount > 0
|
||||
orderby grp.StockGroup, grp.StockName
|
||||
select new StockGrpPers
|
||||
{
|
||||
PersId = prs.Id,
|
||||
StockId = stk.StockId,
|
||||
StockGroup = grp.StockGroup
|
||||
}).ToList();
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public StockGroupModel SaveStockGroup(StockGroupModel stockGroup)
|
||||
{
|
||||
using var context = new StockContext();
|
||||
@ -231,7 +249,7 @@ namespace StockDAL
|
||||
{
|
||||
using var context = new StockContext();
|
||||
var output = (from stg in context.StockGroups
|
||||
orderby stg.StockName
|
||||
orderby stg.StockName, stg.StockGroup
|
||||
select stg.StockName).ToList();
|
||||
return output;
|
||||
}
|
||||
|
||||
@ -9,12 +9,14 @@ namespace StockDal.Interface
|
||||
{
|
||||
public interface IStockMarketRepository
|
||||
{
|
||||
List<DiTraderStockRow> DumpObjects { get; set; }
|
||||
DiTraderStockRow SaveRow { get; set; }
|
||||
Dictionary<string, DiTraderStockRow> StockMarketList { get; set; }
|
||||
bool ViewBrowser { get; set; }
|
||||
StringBuilder TextResults { get; set; }
|
||||
|
||||
void Clean();
|
||||
void LoadStockMarketList(int persId);
|
||||
void LoadStockMarketList(int persId, bool viewBrowser);
|
||||
//void LoadStockMarketList(int persId, bool viewBrowser);
|
||||
void RefreshMarketList(int persId);
|
||||
DiTraderStockRow LoadStockMarketStockData(string searchedStock);
|
||||
}
|
||||
|
||||
@ -20,6 +20,7 @@ namespace StockDAL.Interface
|
||||
void UpdateActualForSell(int id, int sellAmount, decimal sellPrice, DateTime sellDate);
|
||||
void UpdateActualPrice(int id, decimal price);
|
||||
IEnumerable<StockGrpPers> GetStocksGroupedPerPerson(int persId);
|
||||
IEnumerable<StockGrpPers> GetStocksGroupedAllPersons();
|
||||
List<string> GetStockNames();
|
||||
IEnumerable<StockGrpPers> GetGroupedStock(string stock);
|
||||
StockGroupModel SaveStockGroup(StockGroupModel stockGroup);
|
||||
|
||||
@ -89,28 +89,45 @@ namespace StockInfoCore
|
||||
btnBackupAll.Enabled = false;
|
||||
}
|
||||
|
||||
private void ReloadData()
|
||||
private void ReloadData(bool upd = false)
|
||||
{
|
||||
loading = true;
|
||||
var allStocks = _stockRepository.GetAllStocks();
|
||||
if (upd)
|
||||
{
|
||||
_stockMarketRepository.LoadStockMarketList(SelectedPersonId);
|
||||
|
||||
allStocks.ToList().ForEach(SM => SM.ActValue = UpdateOnlyNonZeroAmount(SM).ActValue);
|
||||
}
|
||||
dataGridView.DataSource = allStocks;
|
||||
// SaveStocks(allStocks);
|
||||
lblTotalRecords.Text = $"Total records: {dataGridView.RowCount}";
|
||||
loading = false;
|
||||
}
|
||||
|
||||
private StockMember UpdateOnlyNonZeroAmount(StockMember sMember)
|
||||
{
|
||||
var output = new StockMember();
|
||||
if (sMember.ActAmount > 0)
|
||||
{
|
||||
sMember.ActValue = _stockMarketRepository.StockMarketList[sMember.StockId].LatestPrice;
|
||||
}
|
||||
output=sMember;
|
||||
return output;
|
||||
}
|
||||
|
||||
|
||||
private void btnReload_Click(object sender, EventArgs e)
|
||||
{
|
||||
ReloadData();
|
||||
ReloadData(true);
|
||||
}
|
||||
|
||||
private void btnTestScrapFunction_Click(object sender, EventArgs e)
|
||||
{
|
||||
_stockMarketRepository.LoadStockMarketList(SelectedPersonId, chbShowBrowser.Checked);
|
||||
var stocklist = _stockMarketRepository.StockMarketList;
|
||||
lblStockRows.Text = stocklist.Count().ToString();
|
||||
btnReloadShares.Enabled = true;
|
||||
//_stockMarketRepository.LoadStockMarketList(SelectedPersonId, chbShowBrowser.Checked);
|
||||
//var stocklist = _stockMarketRepository.StockMarketList;
|
||||
//lblStockRows.Text = stocklist.Count().ToString();
|
||||
//btnReloadShares.Enabled = true;
|
||||
}
|
||||
|
||||
private void frmInitial_FormClosing(object sender, FormClosingEventArgs e)
|
||||
@ -131,7 +148,7 @@ namespace StockInfoCore
|
||||
private void btnStockReg_Click(object sender, EventArgs e)
|
||||
{
|
||||
Cursor.Current = Cursors.WaitCursor;
|
||||
_stockMarketRepository.LoadStockMarketList(SelectedPersonId);
|
||||
_stockMarketRepository.LoadStockMarketList(SelectedPersonId==0?10000: SelectedPersonId);
|
||||
_regWindow.Stocks = _stockMarketRepository.StockMarketList;
|
||||
Cursor.Current = DefaultCursor;
|
||||
_regWindow.ShowDialog();
|
||||
|
||||
@ -59,6 +59,11 @@ namespace StockInfoCore
|
||||
LoadStockCombo();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Val av enstaka Aktie för sökning och registrering
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void cmbStockChoser_SelectedIndexChanged(object sender, EventArgs e)
|
||||
{
|
||||
if (Stocks.ContainsKey(cmbStockChoser.SelectedItem.ToString()))
|
||||
|
||||
Reference in New Issue
Block a user