/// <summary> /// Use for transaction report /// </summary> /// <param name="filter">object with params for filtering</param> /// <returns>Return object with filtered transactions and families</returns> public TransactionReportResultDto FilterTransactionReport(FilterTransactionReport filter) { Mapper.Initialize(e => e.CreateMap <FilterTransactionReport, SelectTransactionsReportStoredProcedure>() .ConstructUsing(r => QueryProvider.CreateQuery <SelectTransactionsReportStoredProcedure>(ConfigurationManager.AppSettings["schema"])) .ForMember(t => t.MinAmount, r => r.MapFrom(w => w.MinSum))); var queryMember = Mapper.Map <FilterTransactionReport, SelectTransactionsReportStoredProcedure>(filter); Stopwatch sw = new Stopwatch(); sw.Start(); var resultqr = queryMember.Execute(); sw.Stop(); TimeSpan ts = sw.Elapsed; string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10); Console.WriteLine($"Build response from database to DTO: {elapsedTime}"); sw.Reset(); var result = new TransactionReportResultDto(); sw.Start(); if (!resultqr.HasNoDataRows) { ConvertResultToTransactionReport(result, resultqr.ResultToArray <TransactionsReportDto>().ToList(), filter.ReportType, filter); } sw.Stop(); ts = sw.Elapsed; elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10); Console.WriteLine($"Preparing response from database to dto:{elapsedTime}"); return(result); }
/// <summary> /// Convert respose from db and convert to transaction report /// </summary> /// <param name="result">ref obj result</param> /// <param name="response">response from db</param> /// <param name="reportType">Report type: 1 - payment, 2 - bill</param> /// <param name="filter"></param> void ConvertResultToTransactionReport(TransactionReportResultDto result, IList <TransactionsReportDto> response, TransFilterType reportType, FilterTransactionReport filter) { List <TransactionsReportList> unassignedpayments; List <int> categoriesIds; var familiesIds = response.AsParallel().Select(r => r.FamilyID).Distinct().ToList(); result.Families = FillFamilies(familiesIds, response); result.Transactions = FillTransactions(response, reportType, out unassignedpayments, out categoriesIds).ToList(); result.UnassignedPayments = unassignedpayments; result.CategoriesIDs = categoriesIds; if (filter.ExcludeBillsWithCards != null && (bool)filter.ExcludeBillsWithCards) { result.Transactions = ExcludeAutoBills(result.Transactions); } }