Add project files.

This commit is contained in:
2022-09-09 11:07:33 +02:00
parent b4ddfa3c2c
commit 36c28196f4
29 changed files with 1083 additions and 0 deletions

View File

@ -0,0 +1,215 @@
using LoadStockDbFromTrans.models;
using LoadStockDbFromTrans.StocksProviders;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LoadStockDbFromTrans.Runners;
public class FileToJson : IFileToJson
{
private readonly ILogger<FileToJson> _log;
private readonly IConfiguration _config;
private readonly IDapperStocksProvider _dapperStocksProvider;
public Dictionary<string, string> NameConverter { get; set; } = new Dictionary<string, string>();
public FileToJson(ILogger<FileToJson> log, IConfiguration config, IDapperStocksProvider dapperStocksProvider)
{
_log = log;
_config = config;
_dapperStocksProvider = dapperStocksProvider;
}
public async Task<List<FileModel>> FetchJsonData()
{
_log.LogInformation("Starting with reading from Json!");
Console.WriteLine("FileName ?");
var fileName = Console.ReadLine();
if (fileName == "xx") fileName = _config.GetValue<string>("StdFileName"); //"StockData2022-08-29.txt";
_log.LogInformation("fileName = {fname}", fileName);
List<FileModel> recList = new List<FileModel>();
recList = JsonConvert.DeserializeObject<List<FileModel>>(File.ReadAllText($@"C:\tommycsharp\Source\Consoles\ReadSBAktieTransApp\ReadSBAktieTrans\bin\Debug\net6.0\DataFiles\{fileName}"));
_log.LogInformation("InLäsning klar!");
Console.WriteLine("Create Name Converter ?");
var answ = Console.ReadLine();
if (answ == "Y" || answ == "J")
{
await PrepareNameConverter(recList);
}
await UpDateNameConverter();
Console.WriteLine("Show data ?");
answ = Console.ReadLine();
if (answ == "ok")
{
foreach (var rec in recList)
{
Console.WriteLine($"Bokföringsdag {rec.Bokföringsdag} Affärsdag {rec.Affärsdag} Likviddag {rec.Likviddag}");
}
}
var skrivna = 0;
foreach (var rec in recList)
{
if (rec.Transaktionstyp == "KÖPT")
{
var stockmember = new StockMember();
stockmember.StockId = NameConverter[rec.Beskrivning.Trim()];
stockmember.StockExtId = NameConverter[rec.Beskrivning.Trim()];
stockmember.BuyValue = rec.Kurs;
stockmember.BuyDate = rec.Affärsdag;
stockmember.ActValue = rec.Kurs;
stockmember.ActDate = rec.Affärsdag;
stockmember.ActAmount = rec.Antal;
stockmember.SoldValue = 0;
stockmember.SoldDate = null;
stockmember.Comment = "from trans";
stockmember.PostAmount = rec.Antal;
stockmember.SoldStockPrice = 0;
_dapperStocksProvider.AddStock(stockmember);
skrivna++;
}
}
_log.LogInformation("Köpta klart {skrivna} st skrivna", skrivna);
skrivna = 0;
foreach (var rec in recList)
{
if (rec.Transaktionstyp == "SÅLT")
{
UpDateWithSold(rec);
skrivna++;
}
}
_log.LogInformation($"Sålda klart {skrivna} st skrivna");
return recList;
}
private async Task PrepareNameConverter(List<FileModel> recList)
{
var tempListNew = new HashSet<string>();
await _dapperStocksProvider.CleanStockNames();
foreach (var rec in recList)
{
if (rec.Transaktionstyp == "KÖPT")
{
try
{
tempListNew.Add(rec.Beskrivning);
}
catch (Exception)
{
_log.LogInformation($"Dublett : {rec.Beskrivning}");
}
}
}
var templist = await _dapperStocksProvider.GetStockNames();
foreach (var webName in templist)
{
_log.LogInformation($"Upplägg : {webName}, --");
await _dapperStocksProvider.AddWebStockNames(webName);
}
foreach (var newName in tempListNew)
{
var founds = templist.Where(t => t.StartsWith(newName.Substring(0, 3))).ToList();
if (founds.Any())
{
if (founds.Count > 1)
{
var choseNr = 0;
Console.WriteLine($"{newName} skall passas ihop med en av nedan nr:");
Console.WriteLine();
foreach (var found in founds)
{
Console.WriteLine($"välj {choseNr++} for {found}");
}
Console.WriteLine();
Console.Write("Chose a number: ");
var valNumber = Console.ReadLine();
await _dapperStocksProvider.UpdateStockName(newName, founds[int.Parse(valNumber)]);
}
else
{
await _dapperStocksProvider.UpdateStockName(newName, founds[0]);
}
}
else
{
Console.WriteLine($"{newName} skall passas ihop med ?");
Console.WriteLine();
Console.Write("Write the correct name: ");
var valNumber = Console.ReadLine();
await _dapperStocksProvider.UpdateStockName(newName, valNumber);
}
}
}
private async Task UpDateNameConverter()
{
var stockNameList = await _dapperStocksProvider.GetStockNameTable();
NameConverter.Clear();
foreach (var stockname in stockNameList)
{
NameConverter.Add(stockname.StockNameBank, stockname.StockNameWeb);
}
}
public async void UpDateWithSold(FileModel rec)
{
var members = await _dapperStocksProvider.GetStocksByStockId(NameConverter[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;
member.SoldValue = ((int)member.ActAmount * rec.Belopp) / remainingInit;
member.ActAmount = 0;
}
else
{
member.ActAmount -= remaining;
member.SoldValue = (remaining * rec.Belopp) / remainingInit;
remaining = 0;
}
member.SoldDate = rec.Affärsdag;
member.Comment += ",Sold";
member.SoldStockPrice = rec.Kurs;
await _dapperStocksProvider.UpdateStock(member);
_log.LogInformation($"Sålda {member.Id} st ändrad");
if (remaining <= 0)
{
break;
}
}
}
}

View File

@ -0,0 +1,12 @@
using LoadStockDbFromTrans.models;
namespace LoadStockDbFromTrans.Runners
{
public interface IFileToJson
{
Dictionary<string, string> NameConverter { get; set; }
Task<List<FileModel>> FetchJsonData();
void UpDateWithSold(FileModel rec);
}
}