cleanup get_full_history. fix #3939
This commit is contained in:
@@ -203,8 +203,8 @@ class HistoryList(MyTreeWidget, AcceptFileDragDrop):
|
|||||||
self.transactions = r['transactions']
|
self.transactions = r['transactions']
|
||||||
self.summary = r['summary']
|
self.summary = r['summary']
|
||||||
if not self.years and self.start_timestamp is None and self.end_timestamp is None:
|
if not self.years and self.start_timestamp is None and self.end_timestamp is None:
|
||||||
start_date = self.summary['start_date']
|
start_date = self.summary.get('start_date')
|
||||||
end_date = self.summary['end_date']
|
end_date = self.summary.get('end_date')
|
||||||
if start_date and end_date:
|
if start_date and end_date:
|
||||||
self.years = [str(i) for i in range(start_date.year, end_date.year + 1)]
|
self.years = [str(i) for i in range(start_date.year, end_date.year + 1)]
|
||||||
self.period_combo.insertItems(1, self.years)
|
self.period_combo.insertItems(1, self.years)
|
||||||
|
|||||||
@@ -108,8 +108,6 @@ class ExchangeBase(PrintError):
|
|||||||
return []
|
return []
|
||||||
|
|
||||||
def historical_rate(self, ccy, d_t):
|
def historical_rate(self, ccy, d_t):
|
||||||
if d_t is None:
|
|
||||||
return 'NaN'
|
|
||||||
return self.history.get(ccy, {}).get(d_t.strftime('%Y-%m-%d'), 'NaN')
|
return self.history.get(ccy, {}).get(d_t.strftime('%Y-%m-%d'), 'NaN')
|
||||||
|
|
||||||
def get_currencies(self):
|
def get_currencies(self):
|
||||||
@@ -520,8 +518,6 @@ class FxThread(ThreadJob):
|
|||||||
return "%s" % (self.ccy_amount_str(value, True))
|
return "%s" % (self.ccy_amount_str(value, True))
|
||||||
|
|
||||||
def history_rate(self, d_t):
|
def history_rate(self, d_t):
|
||||||
if d_t is None:
|
|
||||||
return Decimal('NaN')
|
|
||||||
rate = self.exchange.historical_rate(self.ccy, d_t)
|
rate = self.exchange.historical_rate(self.ccy, d_t)
|
||||||
# Frequently there is no rate for today, until tomorrow :)
|
# Frequently there is no rate for today, until tomorrow :)
|
||||||
# Use spot quotes in that case
|
# Use spot quotes in that case
|
||||||
|
|||||||
@@ -416,10 +416,7 @@ def format_satoshis(x, is_diff=False, num_zeros = 0, decimal_point = 8, whitespa
|
|||||||
return result
|
return result
|
||||||
|
|
||||||
def timestamp_to_datetime(timestamp):
|
def timestamp_to_datetime(timestamp):
|
||||||
try:
|
return datetime.fromtimestamp(timestamp)
|
||||||
return datetime.fromtimestamp(timestamp)
|
|
||||||
except:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def format_time(timestamp):
|
def format_time(timestamp):
|
||||||
date = timestamp_to_datetime(timestamp)
|
date = timestamp_to_datetime(timestamp)
|
||||||
|
|||||||
@@ -969,11 +969,6 @@ class Abstract_Wallet(PrintError):
|
|||||||
def get_full_history(self, domain=None, from_timestamp=None, to_timestamp=None, fx=None, show_addresses=False):
|
def get_full_history(self, domain=None, from_timestamp=None, to_timestamp=None, fx=None, show_addresses=False):
|
||||||
from .util import timestamp_to_datetime, Satoshis, Fiat
|
from .util import timestamp_to_datetime, Satoshis, Fiat
|
||||||
out = []
|
out = []
|
||||||
init_balance = None
|
|
||||||
init_timestamp = None
|
|
||||||
end_balance = None
|
|
||||||
end_timestamp = None
|
|
||||||
end_balance = 0
|
|
||||||
capital_gains = 0
|
capital_gains = 0
|
||||||
fiat_income = 0
|
fiat_income = 0
|
||||||
h = self.get_history(domain)
|
h = self.get_history(domain)
|
||||||
@@ -990,11 +985,6 @@ class Abstract_Wallet(PrintError):
|
|||||||
'value': Satoshis(value),
|
'value': Satoshis(value),
|
||||||
'balance': Satoshis(balance)
|
'balance': Satoshis(balance)
|
||||||
}
|
}
|
||||||
if init_balance is None:
|
|
||||||
init_balance = balance - value
|
|
||||||
init_timestamp = timestamp
|
|
||||||
end_balance = balance
|
|
||||||
end_timestamp = timestamp
|
|
||||||
item['date'] = timestamp_to_datetime(timestamp) if timestamp is not None else None
|
item['date'] = timestamp_to_datetime(timestamp) if timestamp is not None else None
|
||||||
item['label'] = self.get_label(tx_hash)
|
item['label'] = self.get_label(tx_hash)
|
||||||
if show_addresses:
|
if show_addresses:
|
||||||
@@ -1032,28 +1022,38 @@ class Abstract_Wallet(PrintError):
|
|||||||
if fiat_value is not None:
|
if fiat_value is not None:
|
||||||
fiat_income += fiat_value
|
fiat_income += fiat_value
|
||||||
out.append(item)
|
out.append(item)
|
||||||
result = {'transactions': out}
|
# add summary
|
||||||
if from_timestamp is not None and to_timestamp is not None:
|
if out:
|
||||||
start_date = timestamp_to_datetime(from_timestamp)
|
start_balance = out[0]['balance'].value - out[0]['value'].value
|
||||||
end_date = timestamp_to_datetime(to_timestamp)
|
end_balance = out[-1]['balance'].value
|
||||||
|
if from_timestamp is not None and to_timestamp is not None:
|
||||||
|
start_date = timestamp_to_datetime(from_timestamp)
|
||||||
|
end_date = timestamp_to_datetime(to_timestamp)
|
||||||
|
else:
|
||||||
|
start_date = out[0]['date']
|
||||||
|
end_date = out[-1]['date']
|
||||||
|
|
||||||
|
summary = {
|
||||||
|
'start_date': start_date,
|
||||||
|
'end_date': end_date,
|
||||||
|
'start_balance': Satoshis(start_balance),
|
||||||
|
'end_balance': Satoshis(end_balance)
|
||||||
|
}
|
||||||
|
if fx:
|
||||||
|
unrealized = self.unrealized_gains(domain, fx.timestamp_rate, fx.ccy)
|
||||||
|
summary['capital_gains'] = Fiat(capital_gains, fx.ccy)
|
||||||
|
summary['fiat_income'] = Fiat(fiat_income, fx.ccy)
|
||||||
|
summary['unrealized_gains'] = Fiat(unrealized, fx.ccy)
|
||||||
|
if start_date:
|
||||||
|
summary['start_fiat_balance'] = Fiat(fx.historical_value(start_balance, start_date), fx.ccy)
|
||||||
|
if end_date:
|
||||||
|
summary['end_fiat_balance'] = Fiat(fx.historical_value(end_balance, end_date), fx.ccy)
|
||||||
else:
|
else:
|
||||||
start_date = timestamp_to_datetime(init_timestamp)
|
summary = {}
|
||||||
end_date = timestamp_to_datetime(end_timestamp)
|
return {
|
||||||
summary = {
|
'transactions': out,
|
||||||
'start_date': start_date,
|
'summary': summary
|
||||||
'end_date': end_date,
|
|
||||||
'start_balance': Satoshis(init_balance),
|
|
||||||
'end_balance': Satoshis(end_balance)
|
|
||||||
}
|
}
|
||||||
result['summary'] = summary
|
|
||||||
if fx:
|
|
||||||
unrealized = self.unrealized_gains(domain, fx.timestamp_rate, fx.ccy)
|
|
||||||
summary['start_fiat_balance'] = Fiat(fx.historical_value(init_balance, start_date), fx.ccy)
|
|
||||||
summary['end_fiat_balance'] = Fiat(fx.historical_value(end_balance, end_date), fx.ccy)
|
|
||||||
summary['capital_gains'] = Fiat(capital_gains, fx.ccy)
|
|
||||||
summary['fiat_income'] = Fiat(fiat_income, fx.ccy)
|
|
||||||
summary['unrealized_gains'] = Fiat(unrealized, fx.ccy)
|
|
||||||
return result
|
|
||||||
|
|
||||||
def get_label(self, tx_hash):
|
def get_label(self, tx_hash):
|
||||||
label = self.labels.get(tx_hash, '')
|
label = self.labels.get(tx_hash, '')
|
||||||
|
|||||||
Reference in New Issue
Block a user