Take care of splits
This commit is contained in:
@ -1,4 +1,4 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
@ -10,15 +10,15 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Dapper" Version="2.0.123" />
|
<PackageReference Include="Dapper" Version="2.0.123" />
|
||||||
<PackageReference Include="Microsoft.Data.Sqlite.core" Version="6.0.8" />
|
<PackageReference Include="Microsoft.Data.Sqlite.core" Version="6.0.8" />
|
||||||
<PackageReference Include="SQLitePCLRaw.core" Version="2.1.0" />
|
<PackageReference Include="SQLitePCLRaw.core" Version="2.1.1" />
|
||||||
<PackageReference Include="SQLitePCLRaw.bundle_e_sqlite3" Version="2.1.0" />
|
<PackageReference Include="SQLitePCLRaw.bundle_e_sqlite3" Version="2.1.1" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.1" />
|
<PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.1" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="6.0.0" />
|
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="6.0.0" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
|
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
|
||||||
<PackageReference Include="Serilog" Version="2.11.0" />
|
<PackageReference Include="Serilog" Version="2.11.0" />
|
||||||
<PackageReference Include="Serilog.Extensions.Hosting" Version="5.0.1" />
|
<PackageReference Include="Serilog.Extensions.Hosting" Version="5.0.1" />
|
||||||
<PackageReference Include="Serilog.Settings.Configuration" Version="3.3.0" />
|
<PackageReference Include="Serilog.Settings.Configuration" Version="3.3.0" />
|
||||||
<PackageReference Include="Serilog.Sinks.Console" Version="4.0.1" />
|
<PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@ -5,6 +5,7 @@ using Microsoft.Extensions.Logging;
|
|||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
@ -15,6 +16,22 @@ namespace LoadStockDbFromTrans.Runners;
|
|||||||
|
|
||||||
public class FileToJson : IFileToJson
|
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<FileToJson> _log;
|
private readonly ILogger<FileToJson> _log;
|
||||||
private readonly IConfiguration _config;
|
private readonly IConfiguration _config;
|
||||||
private readonly IDapperStocksProvider _dapperStocksProvider;
|
private readonly IDapperStocksProvider _dapperStocksProvider;
|
||||||
@ -63,7 +80,7 @@ public class FileToJson : IFileToJson
|
|||||||
var skrivna = 0;
|
var skrivna = 0;
|
||||||
foreach (var rec in recList)
|
foreach (var rec in recList)
|
||||||
{
|
{
|
||||||
if (rec.Transaktionstyp == "KÖPT")
|
if (rec.Transaktionstyp == ProcName.KOPT)
|
||||||
{
|
{
|
||||||
try
|
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;
|
skrivna = 0;
|
||||||
foreach (var rec in recList)
|
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);
|
UpDateWithSold(rec);
|
||||||
|
|
||||||
@ -112,6 +145,8 @@ public class FileToJson : IFileToJson
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private async Task PrepareNameConverter(List<FileModel> recList)
|
private async Task PrepareNameConverter(List<FileModel> recList)
|
||||||
{
|
{
|
||||||
var tempListNew = new HashSet<string>();
|
var tempListNew = new HashSet<string>();
|
||||||
@ -174,6 +209,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()
|
private async Task UpDateNameConverter()
|
||||||
{
|
{
|
||||||
@ -219,5 +297,4 @@ public class FileToJson : IFileToJson
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -70,6 +70,13 @@ namespace LoadStockDbFromTrans.StocksProviders
|
|||||||
AND BuyDate <= @BuyDate
|
AND BuyDate <= @BuyDate
|
||||||
ORDER BY BuyDate DESC";
|
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 = @"
|
private const string ADD_TO_STOCKNAME = @"
|
||||||
Insert into StockNames (StockNameWeb, StockNameBank)
|
Insert into StockNames (StockNameWeb, StockNameBank)
|
||||||
values ( @StockId, @StockId)";
|
values ( @StockId, @StockId)";
|
||||||
@ -97,6 +104,11 @@ namespace LoadStockDbFromTrans.StocksProviders
|
|||||||
SELECT 1 FROM StockNames WHERE StockNameWeb = @StockNameWeb)
|
SELECT 1 FROM StockNames WHERE StockNameWeb = @StockNameWeb)
|
||||||
THEN 1 ELSE 0 END as BIT)";
|
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 SqliteDbConnectionFactory _sqliteDbConnectionFactory;
|
||||||
private readonly ILogger<DapperStocksProvider> _log;
|
private readonly ILogger<DapperStocksProvider> _log;
|
||||||
|
|
||||||
@ -186,6 +198,25 @@ namespace LoadStockDbFromTrans.StocksProviders
|
|||||||
return stockMembers.ToList();
|
return stockMembers.ToList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<IEnumerable<StockMember>> 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<StockMember> stockMembers = await database.QueryAsync<StockMember>(GET_STOCKS_BY_STOCKIDPART, parameters);
|
||||||
|
return stockMembers.ToList();
|
||||||
|
}
|
||||||
|
}
|
||||||
public async Task UpdateStock(StockMember stockMember)
|
public async Task UpdateStock(StockMember stockMember)
|
||||||
{
|
{
|
||||||
using (IDbConnection database = _sqliteDbConnectionFactory.Connect())
|
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 });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,6 +11,8 @@ namespace LoadStockDbFromTrans.StocksProviders
|
|||||||
Task<IEnumerable<string>> GetStockNames();
|
Task<IEnumerable<string>> GetStockNames();
|
||||||
Task<IEnumerable<StockNames>> GetStockNameTable();
|
Task<IEnumerable<StockNames>> GetStockNameTable();
|
||||||
Task<IEnumerable<StockMember>> GetStocksByStockId(string stockId, DateTime Affärsdag);
|
Task<IEnumerable<StockMember>> GetStocksByStockId(string stockId, DateTime Affärsdag);
|
||||||
|
Task<IEnumerable<StockMember>> GetStocksByStockIdPart(string stockIdPart, DateTime Affärsdag);
|
||||||
|
Task RemoveStockById(int id);
|
||||||
Task UpdateStock(StockMember stockMember);
|
Task UpdateStock(StockMember stockMember);
|
||||||
Task UpdateStockName(string stockNameBank, string stockNameWeb);
|
Task UpdateStockName(string stockNameBank, string stockNameWeb);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"StdFileName": "StockData2022-09-05.txt",
|
"StdFileName": "StockData2022-09-12.txt",
|
||||||
"Serilog": {
|
"Serilog": {
|
||||||
"MinimumLevel": {
|
"MinimumLevel": {
|
||||||
"Default": "Information",
|
"Default": "Information",
|
||||||
|
|||||||
27
LoadStockDbFromTrans/models/ProcName.cs
Normal file
27
LoadStockDbFromTrans/models/ProcName.cs
Normal file
@ -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";
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user