Add project files.

This commit is contained in:
2021-05-09 22:10:25 +02:00
parent f20ba23e7b
commit f8c472a4cd
70 changed files with 6207 additions and 0 deletions

View File

@ -0,0 +1,55 @@
using DataDomain;
using DatamodelLibrary;
using StockDAL.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StockDAL
{
public class AddressRepository : IAddressRepository
{
public Address GetAddressById(int AddressId)
{
using var context = new StockContext();
var entity = (from adr in context.Addresses
where adr.Id == AddressId
select adr).FirstOrDefault();
return entity;
}
public Address SaveAddress(Address address)
{
using var context = new StockContext();
var entity = (from adr in context.Addresses
where adr.Id == address.Id
select adr).FirstOrDefault();
if (entity == null)
{
entity = new Address
{
Street = address.Street,
Street2 = address.Street2,
Zipcode = address.Zipcode,
Destination = address.Destination,
Nation = address.Nation
};
context.Addresses.Add(entity);
}
else
{
entity.Street = address.Street;
entity.Street2 = address.Street2;
entity.Zipcode = address.Zipcode;
entity.Destination = address.Destination;
entity.Nation = address.Nation;
}
context.SaveChanges();
return entity;
}
}
}

View File

@ -0,0 +1,61 @@
using DataDomain;
using DatamodelLibrary;
using StockDAL.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StockDAL
{
public class BackupRepository : IBackupRepository
{
public BackupRegister SaveBackupReging(BackupRegister backupRegister)
{
using var context = new StockContext();
var entity = (from brr in context.BackupRegings
where brr.Id == backupRegister.Id
select brr).FirstOrDefault();
if (entity == null)
{
entity = new BackupRegister
{
BackedUp = DateTime.Now,
DbName = "Stocks.db",
BackupDbName = backupRegister.BackupDbName,
BackupPath = backupRegister.BackupPath
};
context.BackupRegings.Add(entity);
}
else
{
entity.BackedUp = backupRegister.BackedUp;
entity.DbName = backupRegister.DbName;
entity.BackupDbName = backupRegister.BackupDbName;
entity.BackupPath = backupRegister.BackupPath;
}
context.SaveChanges();
return entity;
}
public BackupRegister GetBackupRegisterById(int brId)
{
using var context = new StockContext();
var entity = (from br in context.BackupRegings
where br.Id == brId
select br).FirstOrDefault();
return entity;
}
public IEnumerable<BackupRegister> GetAllBackupRegisters()
{
using var context = new StockContext();
var entities = context.BackupRegings;
return entities.ToList();
}
}
}

View File

@ -0,0 +1,75 @@
using DataDomain;
using DatamodelLibrary;
using StockDAL.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StockDAL
{
public class PersonRepository : IPersonRepository
{
public Person GetPersonById(int personId)
{
using var context = new StockContext();
var entity = (from prs in context.Persons
where prs.Id == personId
select prs).FirstOrDefault();
return entity;
}
public IEnumerable<Person> GetAllOwners()
{
using var context = new StockContext();
var output = context.Persons;
return output.ToList();
}
public Person SavePerson(Person person)
{
using var context = new StockContext();
var entity = (from prs in context.Persons
where prs.Id == person.Id
select prs).FirstOrDefault();
if (entity == null)
{
entity = new Person
{
AccountNo = person.AccountNo,
Born = person.Born,
ClearingNo = person.ClearingNo,
Comments = person.Comments,
FirstName = person.FirstName,
HomeAddress = person.HomeAddress,
InvoiceAddress = person.InvoiceAddress,
LastName = person.LastName,
NickName = person.NickName
};
context.Persons.Add(entity);
}
else
{
entity.AccountNo = person.AccountNo;
entity.Born = person.Born;
entity.ClearingNo = person.ClearingNo;
entity.Comments = person.Comments;
entity.FirstName = person.FirstName;
entity.HomeAddress = person.HomeAddress;
entity.InvoiceAddress = person.InvoiceAddress;
entity.LastName = person.LastName;
entity.NickName = person.NickName;
}
context.SaveChanges();
return entity;
}
}
}

20
StockDAL/StockDAL.csproj Normal file
View File

@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="HtmlAgilityPack" Version="1.11.33" />
<PackageReference Include="Selenium.WebDriver.ChromeDriver" Version="90.0.4430.2400" />
<PackageReference Include="Selenium.WebDriverBackedSelenium" Version="3.141.0" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="5.0.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\DataDomain\DataDomain.csproj" />
<ProjectReference Include="..\DatamodelLibrary\DatamodelLibrary.csproj" />
<ProjectReference Include="..\StockDal.Interface\StockDAL.Interface.csproj" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,239 @@
using Newtonsoft.Json;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using StockDal.Interface;
using DataDomain;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using System.Diagnostics;
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 IWebDriver driver;
public StockMarketRepository()
{
ViewBrowser = false;
}
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;
TextResults.Append("\r\n");
}
// var oxe = StockMarketList;
}
private void SaveLogging()
{
var output = JsonConvert.SerializeObject(DumpObjects, Formatting.Indented);
Assembly assem = typeof(StockMarketRepository).Assembly;
var programPath = assem.Location.Substring(0, assem.Location.LastIndexOf("\\"));
var logPath = new DirectoryInfo(programPath + "\\Loggings");
if (!logPath.Exists)
{
logPath.Create();
}
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:
{
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);
}
catch (ArgumentException )
{
try
{
StockMarketList.Add(SaveRow.StockName + "-2", SaveRow);
}
catch (Exception)
{
DumpObjects.Add(SaveRow);
}
}
break;
}
default:
break;
}
}
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);
}
}
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 url1 = "https://www.finansportalen.se/aktiekurser/";
driver.Navigate().GoToUrl(burl2 ? url2 : url);
}
catch
{
throw;
}
}
public void LoadStockMarketList()
{
StockMarketList = new Dictionary<string, DiTraderStockRow>();
DumpObjects = new List<DiTraderStockRow>();
OpenBrowser();
Find_Data();
OpenBrowser(true);
Find_Data();
if (DumpObjects.Any())
{
SaveLogging();
}
}
public void LoadStockMarketList(bool viewBrowser)
{
StockMarketList = new Dictionary<string, DiTraderStockRow>();
ViewBrowser = viewBrowser;
OpenBrowser();
Find_Data();
}
public void RefreshMarketList()
{
StockMarketList = new Dictionary<string, DiTraderStockRow>();
driver.Navigate().Refresh();
Find_Data();
}
public void Clean()
{
driver?.Quit();
}
}
}

View File

@ -0,0 +1,72 @@
using DataDomain;
using DatamodelLibrary;
using StockDAL.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StockDAL
{
public class StockPersonConnect : IStockPersonConnect
{
public IEnumerable<PersonStock> GetAllConnectionsByPersId(int personId)
{
using var context = new StockContext();
var connections = (from spc in context.PersonStocks
where spc.PersonId == personId
select spc).ToList();
return connections;
}
public IEnumerable<PersonStock> GetAllConnectedStocks()
{
using var context = new StockContext();
var entities = (from spc in context.PersonStocks
where spc.PersonId != 0
select spc).ToList();
return entities;
}
public PersonStock SavePersonStockConnection(PersonStock personStock)
{
using var context = new StockContext();
var entity = (from ps in context.PersonStocks
where ps.Id == personStock.Id
select ps).FirstOrDefault();
if (entity == null)
{
entity = new PersonStock
{
PersonId = personStock.PersonId,
StockId = personStock.StockId,
Comment = personStock.Comment
};
context.PersonStocks.Add(entity);
}
else
{
entity.PersonId = personStock.PersonId;
entity.StockId = personStock.StockId;
entity.Comment = personStock.Comment;
}
context.SaveChanges();
return entity;
}
public void RemoveConnectedShare(PersonStock personStock)
{
using var context = new StockContext();
var entity = (from ps in context.PersonStocks
where ps.StockId == personStock.StockId
select ps).FirstOrDefault();
if (entity != null)
{
context.PersonStocks.Remove(entity);
context.SaveChanges();
}
}
}
}

115
StockDAL/StockRepository.cs Normal file
View File

@ -0,0 +1,115 @@
using DataDomain;
using DatamodelLibrary;
using StockDAL.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StockDAL
{
public class StockRepository : IStockRepository
{
public void SaveStockMember(StockMember stockMember)
{
using (var context = new StockContext())
{
var sm = context.Stocks.Add(stockMember);
context.SaveChanges();
}
}
public void UpdateActualPrice(int id, decimal price)
{
using var context = new StockContext();
var entity = (from stk in context.Stocks
where stk.Id == id
select stk).FirstOrDefault();
entity.ActValue = price;
entity.ActDate = DateTime.Today;
context.SaveChanges();
}
public void UpdateActualForSell(int id, int sellAmount, decimal sellPrice, DateTime sellDate)
{
using var context = new StockContext();
var entity = (from stk in context.Stocks
where stk.Id == id
select stk).FirstOrDefault();
var rest = entity.ActAmount - sellAmount;
entity.ActAmount = rest < 0 ? 0 : rest;
entity.SoldDate = DateTime.Today;
entity.SoldValue = sellAmount * sellPrice;
context.SaveChanges();
}
public IEnumerable<StockMember> GetAllStocks()
{
using var context = new StockContext();
var output = context.Stocks;
return output.ToList();
}
public IEnumerable<StockMember> GetAllRemainingStocks()
{
using var context = new StockContext();
var output = (from stk in context.Stocks
where stk.SoldDate == null || stk.ActAmount > 0
select stk).ToList();
return output;
}
public void RemoveAllStocks()
{
using var context = new StockContext();
context.Stocks.RemoveRange(GetAllStocks());
context.SaveChanges();
}
public void InsertMany(List<StockMember> stockMembers)
{
using var context = new StockContext();
context.Stocks.AddRange(stockMembers);
context.SaveChanges();
}
public void RestoreStockMembers(List<StockMember> stockMembers)
{
using var context = new StockContext();
using var transaction = context.Database.BeginTransaction();
try
{
var stocksToRemove = context.Stocks;
context.Stocks.RemoveRange(stocksToRemove);
var insertStocks = stockMembers.Select(o => new StockMember
{
Id = 0,
StockId = o.StockId,
StockExtId = o.StockExtId,
BuyDate = o.BuyDate,
BuyValue = o.BuyValue,
ActAmount = o.ActAmount,
ActValue = o.ActValue,
ActDate = o.ActDate,
SoldValue = o.SoldValue,
SoldDate = o.SoldDate,
Comment = o.Comment,
PostAmount = o.PostAmount
}).ToList();
context.Stocks.AddRange(insertStocks);
context.SaveChanges();
transaction.Commit();
}
catch (Exception ex)
{
throw new InvalidOperationException(ex.Message);
}
}
}
}