diff --git a/DBClasses.cs b/DBClasses.cs
index 6d939a1..b51873e 100644
--- a/DBClasses.cs
+++ b/DBClasses.cs
@@ -1,9 +1,19 @@
using System;
+using System.Globalization;
using System.Text.RegularExpressions;
namespace CryptoCalc
{
+ public enum TransactionTypes
+ {
+ Buy,
+ Sell,
+ Transfer,
+ Mining
+ }
+
+
public interface IDBClasses
{
static string DBName { get; }
@@ -21,8 +31,8 @@ namespace CryptoCalc
public virtual string DBVariables { get; set; }
public string DBSaveDataString => $"({Regex.Replace(DBVariables, "@", "")}) values ({DBVariables})";
- public int Index { get; set; }
- public long UnixTime { get; set; }
+ public long Index { get; set; }
+ public ulong UnixTime { get; set; }
#endregion
@@ -31,20 +41,20 @@ namespace CryptoCalc
public void SaveUnixTimeNow()
{
- UnixTime = (long)DateTime.UtcNow.Subtract(DateTime.UnixEpoch).TotalSeconds;
+ UnixTime = (ulong)DateTime.UtcNow.Subtract(DateTime.UnixEpoch).TotalSeconds;
}
- public static long GetUnixTime(DateTime dateTime)
+ public static ulong GetUnixTime(DateTime dateTime)
{
- return (long)dateTime.Subtract(DateTime.UnixEpoch).TotalSeconds;
+ return (ulong)dateTime.Subtract(DateTime.UnixEpoch).TotalSeconds;
}
- public static DateTime GetUTCTimeFromUnixTime(long unix)
+ public static DateTime GetUTCTimeFromUnixTime(ulong unix)
{
return DateTime.UnixEpoch.AddSeconds(unix).ToUniversalTime();
}
- public static DateTime GetLocalTimeFromUnixTime(long unix)
+ public static DateTime GetLocalTimeFromUnixTime(ulong unix)
{
return DateTime.UnixEpoch.AddSeconds(unix).ToLocalTime();
}
@@ -60,12 +70,14 @@ namespace CryptoCalc
public override string DBVariables { get => base.DBVariables; set => base.DBVariables = value; }
public override string DBTableName => "Transactions";
- public int WalletID { get; set; }
+ public long WalletID { get; set; }
public string Currency { get; set; }
- public decimal Amount { get; set; }
+ public long Amount { get; set; }
+ public ulong AmountDecimal { get; set; }
public string TransactionType { get; set; }
public string FeeCurrency { get; set; }
- public decimal FeeAmount { get; set; }
+ public long FeeAmount { get; set; }
+ public ulong FeeAmountDecimal { get; set; }
public string Platform { get; set; }
public string Note { get; set; }
@@ -75,12 +87,12 @@ namespace CryptoCalc
public Transaction() { SetDBStrings(); }
- public Transaction(int walletID, string currency, decimal amount, string type)
+ public Transaction(long walletID, string currency, decimal amount, string type)
{
SaveUnixTimeNow();
WalletID = walletID;
Currency = currency;
- Amount = amount;
+ (Amount, AmountDecimal) = Util.SplitDecimal(amount);
TransactionType = type;
Platform = "";
@@ -93,10 +105,10 @@ namespace CryptoCalc
{
SaveUnixTimeNow();
Currency = currency;
- Amount = amount;
+ (Amount, AmountDecimal) = Util.SplitDecimal(amount);
TransactionType = type;
FeeCurrency = feeCurrency;
- FeeAmount = feeAmount;
+ (FeeAmount, FeeAmountDecimal) = Util.SplitDecimal(feeAmount);
Platform = "";
Note = "";
@@ -114,14 +126,16 @@ namespace CryptoCalc
+ $"@{nameof(UnixTime)},"
+ $"@{nameof(Currency)},"
+ $"@{nameof(Amount)},"
+ + $"@{nameof(AmountDecimal)},"
+ $"@{nameof(TransactionType)},"
+ $"@{nameof(FeeCurrency)},"
+ $"@{nameof(FeeAmount)},"
+ + $"@{nameof(FeeAmountDecimal)},"
+ $"@{nameof(Platform)},"
+ $"@{nameof(Note)}";
}
- public string FullInfo => $"{ Index } {WalletID} { GetLocalTimeFromUnixTime(UnixTime) } { Currency } { Amount } { TransactionType }";
+ public string FullInfo => $"{ Index } {WalletID} { GetLocalTimeFromUnixTime(UnixTime) } { Currency } { Util.CombineDecimal(Amount, AmountDecimal) } { TransactionType }";
public string CreateTable(string walletTableName)
{
@@ -131,10 +145,12 @@ namespace CryptoCalc
+ $"\"{nameof(WalletID)}\" INTEGER NOT NULL,"
+ $"\"{nameof(UnixTime)}\" INTEGER NOT NULL,"
+ $"\"{nameof(Currency)}\" TEXT NOT NULL,"
- + $"\"{nameof(Amount)}\" REAL NOT NULL,"
+ + $"\"{nameof(Amount)}\" INTEGER NOT NULL,"
+ + $"\"{nameof(AmountDecimal)}\" INTEGER NOT NULL,"
+ $"\"{nameof(TransactionType)}\" TEXT NOT NULL,"
+ $"\"{nameof(FeeCurrency)}\" TEXT,"
- + $"\"{nameof(FeeAmount)}\" REAL,"
+ + $"\"{nameof(FeeAmount)}\" INTEGER,"
+ + $"\"{nameof(FeeAmountDecimal)}\" INTEGER,"
+ $"\"{nameof(Platform)}\" TEXT,"
+ $"\"{nameof(Note)}\" TEXT,"
+ $"PRIMARY KEY(\"{nameof(Index)}\" AUTOINCREMENT),"
@@ -152,11 +168,12 @@ namespace CryptoCalc
public override string DBVariables { get => base.DBVariables; set => base.DBVariables = value; }
public override string DBTableName => "Wallets";
- public long UnixTimeCreated { get; set; }
+ public ulong UnixTimeCreated { get; set; }
public string Platform { get; set; }
public string Name { get; set; }
public string Currency { get; set; }
- public decimal Balance { get; set; }
+ public long Balance { get; set; }
+ public ulong BalanceDecimal { get; set; }
public int DefaultWallet { get; set; }
public string Note { get; set; }
@@ -173,7 +190,7 @@ namespace CryptoCalc
Platform = platform;
Name = name;
Currency = currency;
- Balance = 0M;
+ (Balance, BalanceDecimal) = Util.SplitDecimal(0);
DefaultWallet = 0;
Note = note;
@@ -193,6 +210,7 @@ namespace CryptoCalc
+ $"@{nameof(Name)},"
+ $"@{nameof(Currency)},"
+ $"@{nameof(Balance)},"
+ + $"@{nameof(BalanceDecimal)},"
+ $"@{nameof(DefaultWallet)},"
+ $"@{nameof(Note)}";
}
@@ -209,7 +227,8 @@ namespace CryptoCalc
+ $"\"{nameof(Platform)}\" TEXT,"
+ $"\"{nameof(Name)}\" TEXT,"
+ $"\"{nameof(Currency)}\" TEXT NOT NULL,"
- + $"\"{nameof(Balance)}\" REAL NOT NULL,"
+ + $"\"{nameof(Balance)}\" INTEGER NOT NULL,"
+ + $"\"{nameof(BalanceDecimal)}\" INTEGER NOT NULL,"
+ $"\"{nameof(DefaultWallet)}\" INTEGER,"
+ $"\"{nameof(Note)}\" TEXT,"
+ $"PRIMARY KEY(\"{nameof(Index)}\" AUTOINCREMENT)"
diff --git a/MainWindow.xaml b/MainWindow.xaml
index 29fd908..c1a817d 100644
--- a/MainWindow.xaml
+++ b/MainWindow.xaml
@@ -23,6 +23,7 @@
+
diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs
index f54df46..31c5891 100644
--- a/MainWindow.xaml.cs
+++ b/MainWindow.xaml.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
+using System.Globalization;
using System.Windows;
using System.Windows.Controls;
@@ -49,7 +50,7 @@ namespace CryptoCalc
new Transaction(
selectedWallet.Index,
inputCurrency.Text,
- Convert.ToDecimal(inputAmount.Text),
+ Convert.ToDecimal(inputAmount.Text, CultureInfo.InvariantCulture),
inputType.Text
)
);
@@ -110,7 +111,7 @@ namespace CryptoCalc
t.WalletID = selectedWallet.Index;
t.SaveUnixTimeNow();
t.Currency = "SOL";
- t.Amount = Convert.ToDecimal(30 * rand.NextDouble());
+ (t.Amount, t.AmountDecimal) = Util.SplitDecimal(Convert.ToDecimal(30m * (decimal)rand.NextDouble()));
t.TransactionType = "BUY";
t.Platform = "Firi";
t.Note = "Test";
@@ -134,7 +135,8 @@ namespace CryptoCalc
private void inputAmount_LostFocus(object sender, RoutedEventArgs e)
{
- inputAmount.Text = inputAmount.Text.Replace(".", ",");
+ //inputAmount.Text = inputAmount.Text.Replace(".", ",");
+ inputAmount.Text = inputAmount.Text.Replace(",", ".");
}
private void currencyText_LostFocus(object sender, RoutedEventArgs e)
diff --git a/Util.cs b/Util.cs
index ddf0b1a..049c5b5 100644
--- a/Util.cs
+++ b/Util.cs
@@ -4,9 +4,33 @@ namespace CryptoCalc
{
public class Util
{
+ private static readonly decimal lowestUnit = 1e18m;
+
public static string GetConnectionString(string name = "Default")
{
return ConfigurationManager.ConnectionStrings[name].ConnectionString;
}
+
+ public static ulong ConvToULong(decimal value)
+ {
+ return decimal.ToUInt64(value * lowestUnit);
+ }
+
+ public static decimal ConvToDecimal(ulong value)
+ {
+ return value / lowestUnit;
+ }
+
+ public static (long wholeNumber, ulong fractionNumber) SplitDecimal(decimal value)
+ {
+ long w = (long)value;
+ ulong f = ConvToULong((value % 1));
+ return (w, f);
+ }
+
+ public static decimal CombineDecimal(long amount, ulong amountDecimal)
+ {
+ return amount + ConvToDecimal(amountDecimal);
+ }
}
}