drop old fields, make use of new fields.

display decimal with 0 properly, non scientific
This commit is contained in:
2021-05-11 20:09:52 +02:00
parent cd68e46b91
commit b356d304b2
6 changed files with 110 additions and 34 deletions
+10 -10
View File
@@ -64,7 +64,7 @@ class Calc:
out["crypto"] = crypto
with connection.cursor() as cursor:
sql = """SELECT SUM(amount_after_fee) as after_fee, SUM(amount) as amount FROM `transaction` WHERE amount_after_fee > 0 and crypto_currency=%s and owner_id=%s"""
sql = """SELECT SUM(crypto_amount) as crypto_amount, SUM(fiat_amount) as fiat_amount FROM `transaction` WHERE transaction_type = 'B' and crypto_currency=%s and owner_id=%s"""
cursor.execute(sql, [crypto, userid])
bought = cursor.fetchone()
if bought[0]:
@@ -75,24 +75,24 @@ class Calc:
out["bought"] = None
with connection.cursor() as cursor:
sql = """SELECT SUM(amount_before_fee) as before_fee, SUM(amount) as amount FROM `transaction` WHERE amount_before_fee < 0 and crypto_currency=%s and owner_id=%s"""
sql = """SELECT SUM(crypto_amount) as crypto_amount, SUM(fiat_amount) as fiat_amount FROM `transaction` WHERE transaction_type = 'S' and crypto_currency=%s and owner_id=%s"""
cursor.execute(sql, [crypto, userid])
sold = cursor.fetchone()
if sold[0]:
out["sold"] = sold[1]
total_investment += Decimal(sold[1])
amount_kept += Decimal(sold[0])
total_investment -= Decimal(sold[1])
amount_kept -= Decimal(sold[0])
else:
out["sold"] = None
# moving coins to other wallet with fees.
# calculate all fees.
with connection.cursor() as cursor:
sql = """SELECT SUM(amount_after_fee) as after_fee FROM `transaction` WHERE amount_before_fee = 0 and crypto_currency=%s and owner_id=%s"""
sql = """SELECT SUM(crypto_fee) as crypto_fee, SUM(fiat_fee) as fiat_fee FROM `transaction` WHERE crypto_currency=%s and owner_id=%s"""
cursor.execute(sql, [crypto, userid])
sold = cursor.fetchone()
fees = cursor.fetchone()
if sold[0]:
# total_investment -= Decimal(sold[1])
amount_kept += Decimal(sold[0])
total_investment -= Decimal(fees[1])
amount_kept -= Decimal(fees[0])
rateEUR = ExchangeRate.objects.filter(crypto_currency=crypto, fiat_currency='EUR').order_by('-datetime_valid').first()
rateUSD = ExchangeRate.objects.filter(crypto_currency=crypto, fiat_currency='USD').order_by('-datetime_valid').first()
@@ -130,7 +130,7 @@ class Calc:
amount_within_past_year = 0
with connection.cursor() as cursor:
sql = """SELECT SUM(amount_after_fee) as amount FROM `transaction` WHERE amount > 0 and crypto_currency=%s and owner_id=%s and date_valid>%s"""
sql = """SELECT SUM(crypto_amount) as amount FROM `transaction` WHERE transaction_type='B' and crypto_currency=%s and owner_id=%s and date_valid>%s"""
cursor.execute(sql, [crypto, userid, datetime.datetime.now() - datetime.timedelta(days=365)])
bought = cursor.fetchone()
out["bought_recently"] = None
@@ -0,0 +1,25 @@
# Generated by Django 3.2.2 on 2021-05-11 16:38
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('transactions', '0004_auto_20210511_0703'),
]
operations = [
migrations.RemoveField(
model_name='transaction',
name='amount',
),
migrations.RemoveField(
model_name='transaction',
name='amount_after_fee',
),
migrations.RemoveField(
model_name='transaction',
name='amount_before_fee',
),
]
+25 -8
View File
@@ -1,5 +1,25 @@
from django.db import models
from django.contrib.auth.models import User
from decimal import Decimal, Context
class NonscientificDecimalField(models.DecimalField):
""" Prevents values from being displayed with E notation, with trailing 0's
after the decimal place truncated. (This causes precision to be lost in
many cases, but is more user friendly and consistent for non-scientist
users)
"""
def value_from_object(self, obj):
def remove_exponent(val):
"""Remove exponent and trailing zeros.
>>> remove_exponent(Decimal('5E+3'))
Decimal('5000')
"""
context = Context(prec=self.max_digits)
return val.quantize(Decimal(1), context=context) if val == val.to_integral() else val.normalize(context)
val = super(NonscientificDecimalField, self).value_from_object(obj)
if isinstance(val, Decimal):
return remove_exponent(val)
# Create your models here.
class Transaction(models.Model):
@@ -12,15 +32,12 @@ class Transaction(models.Model):
trade_id = models.CharField(max_length=20, default='MANUAL')
owner = models.ForeignKey(User, on_delete=models.CASCADE)
crypto_currency = models.CharField(max_length=10)
crypto_amount = models.DecimalField(max_digits=24, decimal_places=10, null=True, blank=True)
crypto_fee = models.DecimalField(max_digits=24, decimal_places=10, null=True, blank=True)
amount_before_fee = models.DecimalField(max_digits=24, decimal_places=10)
amount_after_fee = models.DecimalField(max_digits=24, decimal_places=10)
exchange_rate = models.DecimalField(max_digits=24, decimal_places=10)
crypto_amount = NonscientificDecimalField(max_digits=24, decimal_places=10, null=True, blank=True)
crypto_fee = NonscientificDecimalField(max_digits=24, decimal_places=10, null=True, blank=True)
exchange_rate = NonscientificDecimalField(max_digits=24, decimal_places=10)
fiat_currency = models.CharField(max_length=10)
fiat_amount = models.DecimalField(max_digits=24, decimal_places=10, null=True, blank=True)
fiat_fee = models.DecimalField(max_digits=24, decimal_places=10, null=True, blank=True)
amount = models.DecimalField(max_digits=24, decimal_places=10)
fiat_amount = NonscientificDecimalField(max_digits=24, decimal_places=10, null=True, blank=True)
fiat_fee = NonscientificDecimalField(max_digits=24, decimal_places=10, null=True, blank=True)
date_valid = models.DateTimeField('date transfered')
transaction_type = models.CharField(max_length=1, choices=TRANSACTION_TYPES, default='B')
+19 -5
View File
@@ -28,6 +28,13 @@
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label">Transaction Type:</label>
<div class="col-sm-4">
{{ form.transaction_type }}
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label">Trade ID:</label>
<div class="col-sm-4">
@@ -43,16 +50,16 @@
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label">Amount before fee:</label>
<label class="col-sm-2 col-form-label">Crypto Amount:</label>
<div class="col-sm-4">
{{ form.amount_before_fee }}
{{ form.crypto_amount }}
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label">Amount after fee:</label>
<label class="col-sm-2 col-form-label">Crypto fee:</label>
<div class="col-sm-4">
{{ form.amount_after_fee }}
{{ form.crypto_fee }}
</div>
</div>
@@ -73,7 +80,14 @@
<div class="form-group row">
<label class="col-sm-2 col-form-label">Fiat Amount:</label>
<div class="col-sm-4">
{{ form.amount }}
{{ form.fiat_amount }}
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label">Fiat Fee:</label>
<div class="col-sm-4">
{{ form.fiat_fee }}
</div>
</div>
+21 -7
View File
@@ -29,24 +29,31 @@
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label">Transaction Type:</label>
<div class="col-sm-4">
{{ form.transaction_type }}
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label">Crypto Currency:</label>
<div class="col-sm-4">
{{ form.crypto_currency }}
{{ form.crypto_currency }}
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label">Amount before fee:</label>
<label class="col-sm-2 col-form-label">Crypto Amount:</label>
<div class="col-sm-4">
{{ form.amount_before_fee }}
{{ form.crypto_amount }}
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label">Amount after fee:</label>
<label class="col-sm-2 col-form-label">Crypto fee:</label>
<div class="col-sm-4">
{{ form.amount_after_fee }}
{{ form.crypto_fee }}
</div>
</div>
@@ -67,14 +74,21 @@
<div class="form-group row">
<label class="col-sm-2 col-form-label">Fiat Amount:</label>
<div class="col-sm-4">
{{ form.amount }}
{{ form.fiat_amount }}
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label">Fiat Fee:</label>
<div class="col-sm-4">
{{ form.fiat_fee }}
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label">{{ form.date_valid.label }}:</label>
<div class="col-sm-4">
{{ form.date_valid }}
{{ form.date_valid }}
</div>
</div>
+10 -4
View File
@@ -22,13 +22,19 @@
{% for transaction in transactions %}
<tr>
<td>{{ transaction.date_valid }}</td>
<td>{{ transaction.amount_before_fee|floatformat:3 }} {{ transaction.crypto_currency }}</td>
<td>{{ transaction.amount|formatcurrency }} {{ transaction.fiat_currency }}</td>
<td>{% if transaction.amount < 0 %}
<td>{{ transaction.crypto_amount|floatformat:3 }}
{% if transaction.crypto_fee > 0 %}Fee: {{ transaction.crypto_fee|floatformat:3 }}{% endif %}
{{ transaction.crypto_currency }}
</td>
<td>{{ transaction.fiat_amount|formatcurrency }}
{% if transaction.fiat_fee > 0 %}Fee: {{ transaction.fiat_fee|floatformat:2 }}{% endif %}
{{ transaction.fiat_currency }}
</td>
<td>{% if transaction.transaction_type == 'S' %}
{{ transaction.exchange_rate|formatcurrency }} {{ transaction.crypto_currency }}/{{ transaction.fiat_currency }}
{% endif %}
</td>
<td>{% if transaction.amount > 0 %}
<td>{% if transaction.transaction_type == 'B' %}
{{ transaction.exchange_rate|formatcurrency }} {{ transaction.crypto_currency }}/{{ transaction.fiat_currency }}
{% endif %}
</td>