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)); } }
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; } }
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; } }