Beispiel #1
0
        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));
        }
Beispiel #3
0
        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;
        }
Beispiel #4
0
        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
            });
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        public ActionResult BalanceChart(char period)
        {
            var model = new BalanceSummary(period);

            return(PartialView("Chart", model));
        }
Beispiel #7
0
        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));
        }