Exemplo n.º 1
0
        internal async Task AddAsync(Entries.EntryData value)
        {
            var startTime = DateTime.Now;

            try
            {
                if (!value.AccountID.HasValue || value.AccountID == 0)
                {
                    return;
                }
                var date = new DateTime(value.SearchDate.Year, value.SearchDate.Month, 1);

                // TRY TO LOCATE DATA
                var data = await this.GetDataQuery()
                           .Where(x => x.Date == date && x.AccountID == value.AccountID.Value)
                           .FirstOrDefaultAsync();

                // ADD NEW IF DOESNT FOUND
                if (data == null)
                {
                    data = new BalanceData
                    {
                        ResourceID = this.GetService <Helpers.User>().ResourceID,
                        Date       = date,
                        AccountID  = value.AccountID.Value,
                        RowStatus  = 1
                    };
                    await this.dbContext.Balances.AddAsync(data);
                }

                // APPLY VALUE
                var entryValue = value.EntryValue * (value.Type == (short)Categories.enCategoryType.Expense ? -1 : 1);
                data.TotalValue += entryValue;
                if (value.Paid)
                {
                    data.PaidValue += entryValue;
                    if (date.Year != value.DueDate.Year || date.Month != value.DueDate.Month)
                    {
                        data.TotalValue -= entryValue;
                        this.TrackEvent("Add Balance in diff Month", $"AccountID:{value.AccountID}",
                                        $"SearchDate:{value.SearchDate.ToString("yyyy-MM")}", $"DueDate:{value.DueDate.ToString("yyyy-MM")}",
                                        $"EntryValue:{entryValue}", $"Paid:{value.Paid}",
                                        $"TotalValue:{data.TotalValue}", $"PaidValue:{data.PaidValue}");
                    }
                }
                await this.dbContext.SaveChangesAsync();
            }
            catch (Exception) { throw; }
            finally { this.TrackMetric("Add Balance", Math.Round(DateTime.Now.Subtract(startTime).TotalMilliseconds, 0)); }
        }
Exemplo n.º 2
0
        internal async Task FixAsync(Entries.EntryData value)
        {
            var startTime = DateTime.Now;

            try
            {
                if (!value.AccountID.HasValue || value.AccountID == 0)
                {
                    return;
                }

                var queryPath    = "FriendlyCashFlow.ServerApi.Balances.QUERY.Fix.sql";
                var queryContent = await Helpers.EmbededResource.GetResourceContent(queryPath);

                using (var queryReader = this.GetService <Helpers.DataReaderService>().GetDataReader(queryContent))
                {
                    queryReader.AddParameter("@paramResourceID", this.GetService <Helpers.User>().ResourceID);
                    queryReader.AddParameter("@paramAccountID", value.AccountID);
                    queryReader.AddParameter("@paramSearchYear", value.SearchDate.Year);
                    queryReader.AddParameter("@paramSearchMonth", value.SearchDate.Month);

                    if (!await queryReader.ExecuteReaderAsync())
                    {
                        return;
                    }

                    var keyValues = await queryReader.GetValueResultAsync <string>();

                    if (keyValues.All(x => string.IsNullOrEmpty(x)))
                    {
                        return;
                    }

                    keyValues.Add($"AccountID:{value.AccountID}");
                    keyValues.Add($"SearchDate:{value.SearchDate.ToString("yyyy-MM")}");
                    keyValues.Add($"DueDate:{value.DueDate.ToString("yyyy-MM")}");
                    keyValues.Add($"EntryValue:{value.EntryValue}");
                    keyValues.Add($"Paid:{value.Paid}");
                    keyValues.Add($"Type:{value.Type}");
                    this.TrackEvent("Fixed Balance", keyValues.ToArray());
                }
            }
            catch (Exception) { throw; }
        }
Exemplo n.º 3
0
        internal async Task RemoveAsync(Entries.EntryData value)
        {
            try
            {
                if (!value.AccountID.HasValue || value.AccountID == 0)
                {
                    return;
                }
                var date = new DateTime(value.SearchDate.Year, value.SearchDate.Month, 1);
                var user = this.GetService <Helpers.User>();

                // TRY TO LOCATE DATA
                var data = await this.GetDataQuery()
                           .Where(x => x.Date == date && x.AccountID == value.AccountID.Value)
                           .FirstOrDefaultAsync();

                if (data == null)
                {
                    return;
                }

                // APPLY VALUE
                var entryValue = value.EntryValue * (value.Type == (short)Categories.enCategoryType.Expense ? -1 : 1);
                data.TotalValue -= entryValue;
                if (value.Paid)
                {
                    data.PaidValue -= entryValue;
                    if (date.Year != value.DueDate.Year || date.Month != value.DueDate.Month)
                    {
                        data.TotalValue += entryValue;
                        this.TrackEvent("Remove Balance in diff Month", $"AccountID:{value.AccountID}",
                                        $"SearchDate:{value.SearchDate.ToString("yyyy-MM")}", $"DueDate:{value.DueDate.ToString("yyyy-MM")}",
                                        $"EntryValue:{entryValue}", $"Paid:{value.Paid}",
                                        $"TotalValue:{data.TotalValue}", $"PaidValue:{data.PaidValue}");
                    }
                }
                await this.dbContext.SaveChangesAsync();
            }
            catch (Exception) { throw; }
        }