From b4dc4b245b3cdae701c3e3857b1768235288e05a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tommy=20=C3=96man?= Date: Wed, 14 Sep 2022 17:13:55 +0200 Subject: [PATCH] Take care of splits --- .../LoadStockDbFromTrans.csproj | 8 +- LoadStockDbFromTrans/Runners/FileToJson.cs | 85 ++++++++++++++++++- .../StocksProviders/DapperStocksProvider.cs | 42 +++++++++ .../StocksProviders/IDapperStocksProvider.cs | 2 + LoadStockDbFromTrans/appsettings.json | 2 +- LoadStockDbFromTrans/models/ProcName.cs | 27 ++++++ 6 files changed, 157 insertions(+), 9 deletions(-) create mode 100644 LoadStockDbFromTrans/models/ProcName.cs diff --git a/LoadStockDbFromTrans/LoadStockDbFromTrans.csproj b/LoadStockDbFromTrans/LoadStockDbFromTrans.csproj index f3f739e..c8d1d21 100644 --- a/LoadStockDbFromTrans/LoadStockDbFromTrans.csproj +++ b/LoadStockDbFromTrans/LoadStockDbFromTrans.csproj @@ -1,4 +1,4 @@ - + Exe @@ -10,15 +10,15 @@ - - + + - + diff --git a/LoadStockDbFromTrans/Runners/FileToJson.cs b/LoadStockDbFromTrans/Runners/FileToJson.cs index 5629cf4..ea95c0b 100644 --- a/LoadStockDbFromTrans/Runners/FileToJson.cs +++ b/LoadStockDbFromTrans/Runners/FileToJson.cs @@ -5,6 +5,7 @@ using Microsoft.Extensions.Logging; using Newtonsoft.Json; using System; using System.Collections.Generic; +using System.ComponentModel; using System.Diagnostics; using System.Linq; using System.Text; @@ -15,6 +16,22 @@ namespace LoadStockDbFromTrans.Runners; public class FileToJson : IFileToJson { + //private const string BYTE_INLAGG_VP = "BYTE INLÄGG VP"; + //private const string BYTE_UTTAG_VP = "BYTE UTTAG VP"; + //private const string DECIMALER_LIKVID = "DECIMALER LIKVID"; + //private const string DECIMALER_UTTAG_VP = "DECIMALER UTTAG VP"; + //private const string INLAGG_FISSION = "INLÄGG FISSION"; + //private const string INLOSEN_LIKVID = "INLÖSEN LIKVID"; + //private const string INLOSEN_UTTAG_VP = "INLÖSEN UTTAG VP"; + //private const string INSATTNING = "INSÄTTNING"; + //private const string KOPT = "KÖPT"; + //private const string SPLIT_INLÄGG_VP = "SPLIT INLÄGG VP"; + //private const string SPLIT_UTTAG_VP = "SPLIT UTTAG VP"; + //private const string SALT = "SÅLT"; + //private const string UTDELNING = "UTDELNING"; + //private const string UTL_KUPSKATT = "UTL KUPSKATT"; + //private const string UTTAG = "UTTAG"; + private readonly ILogger _log; private readonly IConfiguration _config; private readonly IDapperStocksProvider _dapperStocksProvider; @@ -63,7 +80,7 @@ public class FileToJson : IFileToJson var skrivna = 0; foreach (var rec in recList) { - if (rec.Transaktionstyp == "KÖPT") + if (rec.Transaktionstyp == ProcName.KOPT) { try { @@ -92,11 +109,27 @@ public class FileToJson : IFileToJson } } - _log.LogInformation("Köpta klart {skrivna} st skrivna", skrivna); + + + _log.LogInformation($"Köpta klart {skrivna} st skrivna" ); skrivna = 0; foreach (var rec in recList) { - if (rec.Transaktionstyp == "SÅLT") + if (rec.Transaktionstyp == ProcName.SPLIT_INLÄGG_VP) + { + UpDateWithSplitPlus(rec); + + skrivna++; + } + + if (rec.Transaktionstyp == ProcName.SPLIT_UTTAG_VP) + { + UpDateWithSplitMinus(rec); + + skrivna++; + } + + if (rec.Transaktionstyp == ProcName.SALT) { UpDateWithSold(rec); @@ -112,6 +145,8 @@ public class FileToJson : IFileToJson } + + private async Task PrepareNameConverter(List recList) { var tempListNew = new HashSet(); @@ -173,6 +208,49 @@ public class FileToJson : IFileToJson } } + } + private async void UpDateWithSplitMinus(FileModel rec) + { + var members = await _dapperStocksProvider.GetStocksByStockIdPart(rec.Beskrivning, rec.Affärsdag); + var remainingInit = rec.Antal; + var remaining = rec.Antal; + foreach (var member in members) + { + if (remaining >= member.ActAmount) + { + remaining -= (int)member.ActAmount; + await _dapperStocksProvider.RemoveStockById(member.Id); + } + else + { + member.ActAmount -= remaining; + member.Comment += ",-Split"; + await _dapperStocksProvider.UpdateStock(member); + } + + _log.LogInformation($"Splittade {member.StockId}({member.Id}) st ändrad (minskad)"); + + if (remaining <= 0) + { + break; + } + } + } + + private async void UpDateWithSplitPlus(FileModel rec) + { + var members = await _dapperStocksProvider.GetStocksByStockIdPart( + rec.Beskrivning, rec.Affärsdag); + foreach (var member in members) + { + member.ActAmount += rec.Antal; + member.Comment += ", +split"; + + await _dapperStocksProvider.UpdateStock(member); + _log.LogInformation($"Sålda {member.Id} st ändrad"); + + break; + } } private async Task UpDateNameConverter() @@ -218,6 +296,5 @@ public class FileToJson : IFileToJson } } - } diff --git a/LoadStockDbFromTrans/StocksProviders/DapperStocksProvider.cs b/LoadStockDbFromTrans/StocksProviders/DapperStocksProvider.cs index a76612d..d4b7191 100644 --- a/LoadStockDbFromTrans/StocksProviders/DapperStocksProvider.cs +++ b/LoadStockDbFromTrans/StocksProviders/DapperStocksProvider.cs @@ -70,6 +70,13 @@ namespace LoadStockDbFromTrans.StocksProviders AND BuyDate <= @BuyDate ORDER BY BuyDate DESC"; + private const string GET_STOCKS_BY_STOCKIDPART = @" + SELECT * + FROM Stocks + WHERE Substring(StockId,1,@Length) = @StockIdPart + AND BuyDate <= @BuyDate + ORDER BY BuyDate DESC"; + private const string ADD_TO_STOCKNAME = @" Insert into StockNames (StockNameWeb, StockNameBank) values ( @StockId, @StockId)"; @@ -97,6 +104,11 @@ namespace LoadStockDbFromTrans.StocksProviders SELECT 1 FROM StockNames WHERE StockNameWeb = @StockNameWeb) THEN 1 ELSE 0 END as BIT)"; + private const string DELETE_STOCK_BY_ID = @" + SELECT * + FROM Stocks + WHERE Id = @Id"; + private readonly SqliteDbConnectionFactory _sqliteDbConnectionFactory; private readonly ILogger _log; @@ -186,6 +198,25 @@ namespace LoadStockDbFromTrans.StocksProviders return stockMembers.ToList(); } } + + public async Task> GetStocksByStockIdPart(string stockIdPart, DateTime Affärsdag) + { + using (IDbConnection database = _sqliteDbConnectionFactory.Connect()) + { + // Obs ta hänsyn till köpdatum + _log.LogInformation("GET_STOCKS_BY_STOCKIDPART"); + var tmpstr = stockIdPart.Substring(0, stockIdPart.IndexOf(" ")); + object parameters = new + { + Length = tmpstr.Length, + StockIdPart = tmpstr, + BuyDate = Affärsdag + }; + + IEnumerable stockMembers = await database.QueryAsync(GET_STOCKS_BY_STOCKIDPART, parameters); + return stockMembers.ToList(); + } + } public async Task UpdateStock(StockMember stockMember) { using (IDbConnection database = _sqliteDbConnectionFactory.Connect()) @@ -248,5 +279,16 @@ namespace LoadStockDbFromTrans.StocksProviders } } + public async Task RemoveStockById(int id) + { + using (IDbConnection database = _sqliteDbConnectionFactory.Connect()) + { + // Obs ta hänsyn till köpdatum + _log.LogInformation("DELETE_STOCK_BY_ID"); + + await database.ExecuteAsync(DELETE_STOCK_BY_ID, new { Id = id }); + } + } + } } diff --git a/LoadStockDbFromTrans/StocksProviders/IDapperStocksProvider.cs b/LoadStockDbFromTrans/StocksProviders/IDapperStocksProvider.cs index 2a9a969..6273bad 100644 --- a/LoadStockDbFromTrans/StocksProviders/IDapperStocksProvider.cs +++ b/LoadStockDbFromTrans/StocksProviders/IDapperStocksProvider.cs @@ -11,6 +11,8 @@ namespace LoadStockDbFromTrans.StocksProviders Task> GetStockNames(); Task> GetStockNameTable(); Task> GetStocksByStockId(string stockId, DateTime Affärsdag); + Task> GetStocksByStockIdPart(string stockIdPart, DateTime Affärsdag); + Task RemoveStockById(int id); Task UpdateStock(StockMember stockMember); Task UpdateStockName(string stockNameBank, string stockNameWeb); } diff --git a/LoadStockDbFromTrans/appsettings.json b/LoadStockDbFromTrans/appsettings.json index 9117a38..1ade5a9 100644 --- a/LoadStockDbFromTrans/appsettings.json +++ b/LoadStockDbFromTrans/appsettings.json @@ -1,5 +1,5 @@ { - "StdFileName": "StockData2022-09-05.txt", + "StdFileName": "StockData2022-09-12.txt", "Serilog": { "MinimumLevel": { "Default": "Information", diff --git a/LoadStockDbFromTrans/models/ProcName.cs b/LoadStockDbFromTrans/models/ProcName.cs new file mode 100644 index 0000000..4fba946 --- /dev/null +++ b/LoadStockDbFromTrans/models/ProcName.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace LoadStockDbFromTrans.models +{ + public static class ProcName + { + public const string BYTE_INLAGG_VP = "BYTE INLÄGG VP"; + public const string BYTE_UTTAG_VP = "BYTE UTTAG VP"; + public const string DECIMALER_LIKVID = "DECIMALER LIKVID"; + public const string DECIMALER_UTTAG_VP = "DECIMALER UTTAG VP"; + public const string INLAGG_FISSION = "INLÄGG FISSION"; + public const string INLOSEN_LIKVID = "INLÖSEN LIKVID"; + public const string INLOSEN_UTTAG_VP = "INLÖSEN UTTAG VP"; + public const string INSATTNING = "INSÄTTNING"; + public const string KOPT = "KÖPT"; + public const string SPLIT_INLÄGG_VP = "SPLIT INLÄGG VP"; + public const string SPLIT_UTTAG_VP = "SPLIT UTTAG VP"; + public const string SALT = "SÅLT"; + public const string UTDELNING = "UTDELNING"; + public const string UTL_KUPSKATT = "UTL KUPSKATT"; + public const string UTTAG = "UTTAG"; + } +}