public static bool StatementsAddUpCorrectly(List <Statement> allStatements) { var balanceSummary = GetBalanceCsvAsList(allStatements); var splitStatements = allStatements.GroupBy(s => s.Bank, s => s).ToList(); foreach (var statementType in splitStatements) { Console.WriteLine($"Checking for {statementType.Key} Statements"); foreach (var statement in statementType) { var lastTransaction = new BalanceSummary(); foreach (var line in balanceSummary.Where(l => l.Bank == statementType.Key)) { if (line.DateReceivedByUs <= statement.StatementDate) { lastTransaction = line; } else { if (lastTransaction.Total != statement.NewBalance) { Console.WriteLine($"Statement: {statement.FilePath}\n" + $"Transaction date: {lastTransaction.DateReceivedByUs} Statement Date: {statement.StatementDate}\n" + $"Total to date: {lastTransaction.Total} Statement New Balance: {statement.NewBalance}\n\n"); return(false); } break; } } } } return(true); }
public void Include_in_total_prev_year_result() { Assert.That(payer.Balance, Is.EqualTo(-1600)); var summary = new BalanceSummary(new DateTime(2012, 1, 1), new DateTime(2012, 12, 31), payer); Assert.That(summary.Before, Is.EqualTo(-800)); Assert.That(summary.Total, Is.EqualTo(-1600)); }
public void BalanceSummary(uint id, int year) { CancelLayout(); var begin = new DateTime(year, 1, 1); var end = new DateTime(year, 12, 31); var payer = DbSession.Load <Payer>(id); var summary = new BalanceSummary(begin, end, payer); PropertyBag["year"] = year; PropertyBag["operation"] = new BalanceOperation(payer); PropertyBag["payer"] = payer; PropertyBag["items"] = summary.Items; PropertyBag["summary"] = summary; PropertyBag["before"] = summary.Before; PropertyBag["total"] = summary.Total; }
public async Task <IReadOnlyList <BlockchainBalanceResult> > GetBalancesAsync(string address) { var balanceResult = new BlockchainBalanceResult { AssetId = LykkeConstants.BitcoinAsset, Balance = 0 }; try { BalanceSummary balanceSummary = await _qBitNinjaClient.GetBalanceSummary(BitcoinAddress.Create(address, _bitcoinNetwork)); balanceResult.Balance = balanceSummary?.Spendable?.Amount?.ToDecimal(MoneyUnit.BTC) ?? 0; } catch (Exception e) { _log.ErrorWithDetails(e, new { address }); } return(new List <BlockchainBalanceResult> { balanceResult }); }
public BalanceSummary BalanceSummary( BalanceId balanceId, BlockFeature at, bool debug, bool colored, int?unconfExpiration) { var expiration = GetExpiration(unconfExpiration); var repo = Configuration.CreateWalletRepository(); CancellationTokenSource cancel = new CancellationTokenSource(); cancel.CancelAfter(30000); var checkpoint = Configuration.Indexer.CreateIndexer() .GetCheckpoint(balanceId.Type == BalanceType.Address ? IndexerCheckpoints.Balances : IndexerCheckpoints.Wallets); var atBlock = AtBlock(at); var query = new BalanceQuery(); query.RawOrdering = true; query.From = null; if (at != null) { query.From = ToBalanceLocator(atBlock); } if (query.From == null) { query.From = new UnconfirmedBalanceLocator(DateTimeOffset.UtcNow - expiration); } query.PageSizes = new[] { 1, 10, 100 }; var cacheTable = repo.GetBalanceSummaryCacheTable(balanceId, colored); var cachedSummary = cacheTable.Query(Chain, query).FirstOrDefault(c => (((ConfirmedBalanceLocator)c.Locator).BlockHash == atBlock.HashBlock && at != null) || c.Immature.TransactionCount == 0 || ((c.Immature.TransactionCount != 0) && !IsMature(c.OlderImmature, atBlock))); var cachedLocator = cachedSummary == null ? null : (ConfirmedBalanceLocator)cachedSummary.Locator; if (cachedSummary != null && at != null && cachedLocator.Height == atBlock.Height) { cachedSummary.CacheHit = CacheHit.FullCache; cachedSummary.PrepareForSend(at, debug); return(cachedSummary); } cachedSummary = cachedSummary ?? new BalanceSummary() { Confirmed = new BalanceSummaryDetails(), UnConfirmed = new BalanceSummaryDetails(), OlderImmature = int.MaxValue }; int stopAtHeight = cachedSummary.Locator == null ? -1 : cachedLocator.Height; int lookback = (int)(expiration.Ticks / this.Network.Consensus.PowTargetSpacing.Ticks); if (at == null) { stopAtHeight = stopAtHeight - lookback; } var client = Configuration.Indexer.CreateIndexerClient(); client.ColoredBalance = colored; var diff = client .GetOrderedBalance(balanceId, query) .WhereNotExpired(expiration) .TakeWhile(_ => !cancel.IsCancellationRequested) //Some confirmation of the fetched unconfirmed may hide behind stopAtHeigh .TakeWhile(_ => _.BlockId == null || _.Height > stopAtHeight - lookback) .AsBalanceSheet(Chain); if (cancel.Token.IsCancellationRequested) { throw new HttpResponseException(new HttpResponseMessage() { StatusCode = HttpStatusCode.InternalServerError, ReasonPhrase = "The server can't fetch the balance summary because the balance is too big. Please, load it in several step with ?at={blockFeature} parameter. Once fully loaded after all the step, the summary will return in constant time." }); } RemoveBehind(diff, stopAtHeight); RemoveConflicts(diff); var unconfs = diff.Unconfirmed; var confs = cachedLocator == null ? diff.Confirmed : diff.Confirmed.Where(c => c.Height > cachedLocator.Height).ToList(); var immature = confs.Where(c => !IsMature(c, atBlock)).ToList(); var summary = new BalanceSummary() { Confirmed = BalanceSummaryDetails.CreateFrom(confs, Network, colored), Immature = BalanceSummaryDetails.CreateFrom(immature, Network, colored), UnConfirmed = BalanceSummaryDetails.CreateFrom(unconfs, Network, colored), }; summary.Confirmed += cachedSummary.Confirmed; summary.Immature += cachedSummary.Immature; summary.Locator = new ConfirmedBalanceLocator(atBlock.Height, atBlock.HashBlock); summary.CacheHit = cachedSummary.Locator == null ? CacheHit.NoCache : CacheHit.PartialCache; var newCachedLocator = (ConfirmedBalanceLocator)summary.Locator; if ( cachedSummary.Locator == null || newCachedLocator.BlockHash != cachedLocator.BlockHash) { var olderImmature = immature.Select(_ => _.Height).Concat(new[] { int.MaxValue }).Min(); var newCachedSummary = new Models.BalanceSummary() { Confirmed = summary.Confirmed, Immature = summary.Immature, Locator = summary.Locator, OlderImmature = Math.Min(cachedSummary.OlderImmature, olderImmature) }; var checkpointBlock = Chain.GetBlock(checkpoint.BlockLocator.Blocks[0]); if (checkpointBlock != null && checkpointBlock.Height >= atBlock.Height) { cacheTable.Create(newCachedLocator, newCachedSummary); } } summary.PrepareForSend(at, debug); return(summary); }
public ActionResult BalanceChart(char period) { var model = new BalanceSummary(period); return(PartialView("Chart", model)); }
public ActionResult Balance() { var model = new BalanceSummary(); return(PartialView(model)); }
public void Calculate_total() { var summary = new BalanceSummary(new DateTime(2012, 1, 1), new DateTime(2012, 12, 31), payer); Assert.That(summary.TotalInvoice, Is.EqualTo(800)); }