Merge branch 'Dev/Decimals'
This commit is contained in:
commit
457aeb4eca
61
DBClasses.cs
61
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)"
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
<ListBox x:Name="transactionsFoundListBox" Margin="27,66,331,10"/>
|
||||
<TextBox x:Name="currencyText" HorizontalAlignment="Left" Margin="89,21,0,0" Text="SOL" TextWrapping="Wrap" VerticalAlignment="Top" Width="75" Height="22" LostFocus="currencyText_LostFocus"/>
|
||||
<Button x:Name="searchButton" Content="Search" HorizontalAlignment="Left" Margin="169,20,0,0" VerticalAlignment="Top" Click="searchButton_Click" Height="25" Width="55"/>
|
||||
<DatePicker x:Name="insertTransactionDatePicker" HorizontalAlignment="Right" Margin="0,0,60,157" VerticalAlignment="Bottom" Width="120" FirstDayOfWeek="Monday" SelectedDateFormat="Short"/>
|
||||
</Grid>
|
||||
</TabItem>
|
||||
<TabItem Header="Overview">
|
||||
|
|
|
@ -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)
|
||||
|
|
24
Util.cs
24
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue