Beispiel #1
0
        private IEnumerable <IResult> LoadPostings()
        {
            // Get filtered transactions during specified time frame
            var transactionsResult = new GetPostingsResult(AccountId, CreateFilter(PageSize), eventAggregator);

            yield return(transactionsResult);

            yield return(new SingleResult
            {
                Action = () =>
                {
                    TotalIncome = 0;
                    TotalExpense = 0;
                    TransactionRecords.Clear();
                }
            });

            foreach (var r in transactionsResult.TransactionRecords)
            {
                var result = CreateTransactionRecordResult(r);
                yield return(result);

                PostAction(result);
            }
        }
Beispiel #2
0
        public IEnumerable <IResult> DeleteTransaction(int transactionId)
        {
            yield return(Show.Busy(new BusyScreen {
                Message = "Deleting..."
            }));

            // Remove transaction on server
            var request = new DeleteTransactionResult(userId, CurrentAccount.Id, transactionId);

            yield return(request);

            // Remove transaction locally
            var transactionToDelete = TransactionRecords.Where(record => record.TransactionId == transactionId).Single();
            var index = TransactionRecords.IndexOf(transactionToDelete);

            TransactionRecords.Remove(transactionToDelete);

            // Correct remained balance for following transactions
            if (TransactionRecords.Count > 0 && index < TransactionRecords.Count)
            {
                var deletedAmount = transactionToDelete.Income > 0
                                                                                                                ? -transactionToDelete.Income
                                                                                                                : transactionToDelete.Expense;

                for (int i = index; i < TransactionRecords.Count; i++)
                {
                    TransactionRecords[i].Balance += deletedAmount;
                }
            }

            yield return(Show.NotBusy());
        }
Beispiel #3
0
        public IEnumerable <IResult> DeleteTransaction(PostingRecord transactionRecord)
        {
            var openConfirmationResult = new OpenConfirmationResult(eventAggregator)
            {
                Message =
                    string.Format(Resources.Strings.PostingViewModelBase_DeleteConfirmation_Message, transactionRecord.TransactionId),
                Title   = Resources.Strings.PostingViewModelBase_DeleteConfirmation_Title,
                Options = MessageBoxOptions.Yes | MessageBoxOptions.Cancel,
            };

            yield return(openConfirmationResult);

            if (openConfirmationResult.Selected == MessageBoxOptions.Yes)
            {
                // Load transaction from server (used below to determine if the deleted posting was transfer)
                var request = new GetPostingResult(AccountId, transactionRecord.TransactionId, eventAggregator);
                yield return(request);

                // Remove transaction on server
                var request2 = new DeleteTransactionResult(AccountId,
                                                           transactionRecord.TransactionId);
                yield return(request2);

                // Update accounts balance
                accountsRepository.Download(AccountId);

                // Update category usage
                if (transactionRecord.Category != null)
                {
                    categoriesRepository.Download(transactionRecord.Category.Id);
                }

                // For transfer the 2-nd account should also be updated
                if (request.Transaction is TransferDTO)
                {
                    int secondAccountId = ((TransferDTO)request.Transaction).SecondAccountId.Value;
                    accountsRepository.Download(secondAccountId);
                }

                // Remove transaction locally
                var transactionToDelete =
                    TransactionRecords.Where(record => record.TransactionId == transactionRecord.TransactionId).Single();
                var index = TransactionRecords.IndexOf(transactionToDelete);
                TransactionRecords.Remove(transactionToDelete);

                // Correct remained balance for following transactions
                if (TransactionRecords.Count > 0 && index < TransactionRecords.Count)
                {
                    var deletedAmount = transactionToDelete.Income > 0
                                                                ? -transactionToDelete.Income
                                                                : transactionToDelete.Expense;

                    for (int i = index; i < TransactionRecords.Count; i++)
                    {
                        ((PostingRecord)TransactionRecords[i]).Balance += deletedAmount;
                    }
                }
            }
        }
Beispiel #4
0
        public Task PlotData()
        {
            var spentTotal = TransactionRecords.Sum(t => Math.Abs(t.Amount));

            TransactionSlices = from record in TransactionRecords group record by record.MccGroup into trxSlice select new PieSlice(trxSlice.Key, trxSlice.Sum(trx => Convert.ToDouble(trx.Amount)));
            PlotModel.Series.Add(new PieSeries()
            {
                ItemsSource = TransactionSlices, StrokeThickness = 2.0, InsideLabelPosition = 0.8, AngleSpan = 360, StartAngle = 0
            });
            return(Task.CompletedTask);
        }
Beispiel #5
0
    private void CallSubmitWins(Action actionOnDone)
    {
        if (transactionRecords.transactions.Count <= 0)
        {
            actionOnDone?.Invoke();
            return; //Nothing to submit
        }
        string jsonString = JsonUtility.ToJson(transactionRecords);

        StartCoroutine(SubmitTransactions(URLs.INSERT_TRANSACTIONS, jsonString, actionOnDone));
        transactionRecords = new TransactionRecords();
    }
Beispiel #6
0
    IEnumerator GetTransactions(Action onFinish)
    {
        WWWForm         form    = new WWWForm();
        UnityWebRequest request = UnityWebRequest.Post(URLs.GET_TRANSACTIONS, form);

        yield return(request.SendWebRequest());

        if (request.isNetworkError || request.isHttpError)
        {
            Debug.Log("Error: " + request.error);
        }
        else
        {
            Debug.Log("Transactions Recieved");
            transactionsRecords = JsonUtility.FromJson <TransactionRecords>(request.downloadHandler.text);
            onFinish?.Invoke();
        }
    }
Beispiel #7
0
        protected void Init()
        {
            if (TransactionRecords == null)
            {
                TransactionRecords = new BindableCollection <PostingRecordBase>();
            }
            else
            {
                TransactionRecords.Clear();
            }

            StartDate          = DateTime.Now.Date;
            EndDate            = StartDate;
            UseStartDate       = false;
            UseEndDate         = false;
            ContainsText       = string.Empty;
            TotalIncome        = 0;
            TotalExpense       = 0;
            TotalPostingsCount = 0;
        }
Beispiel #8
0
 void Start()
 {
     transactionRecords = new TransactionRecords();
     Utils.ShuffleArray <CardData>(CardsData.instance.cardsArray);
     LoadPair();
 }
Beispiel #9
0
 protected virtual void PostAction(AddTransactionRecordBaseResult result)
 {
     TotalIncome  += result.Income;
     TotalExpense -= result.Expense;
     TransactionRecords.Add(result.TransactionRecord);
 }