public async Task <ActionResult> Report(DateTime?startDate = null, DateTime?finalDate = null) { if (startDate == null && finalDate == null) { startDate = DateTime.Now.AddDays(-7); finalDate = DateTime.Now; } else if (finalDate == null) { startDate = DateTime.Now.AddDays(-7); finalDate = DateTime.Now; } var analyticsResult = Mapper.Map <AnalyticsView>(await _abstractFactory.AnalyticsForTheSelectedPeriod(startDate.Value, finalDate.Value)); var analyticsCash = Mapper.Map <AnalyticsView>(await _abstractFactory.AnalyticsForTheSelectedPeriodFormOfPayment(startDate.Value, finalDate.Value, (int)PaymentMethod.cash)); var analyticsNoCash = Mapper.Map <AnalyticsView>(await _abstractFactory.AnalyticsForTheSelectedPeriodFormOfPayment(startDate.Value, finalDate.Value, (int)PaymentMethod.nonСash)); var Cashier = Mapper.Map <IEnumerable <CashierView> >(await _cashier.Reports(startDate.Value, finalDate.Value)); AnalyticsFull analyticsFull = new AnalyticsFull(); analyticsFull.analyticsViewResult = new AnalyticsView(); analyticsFull.analyticsViewResult = analyticsResult; analyticsFull.analyticsViewCash = new AnalyticsView(); analyticsFull.analyticsViewCash = analyticsCash; analyticsFull.analyticsViewNoCash = new AnalyticsView(); analyticsFull.analyticsViewNoCash = analyticsNoCash; analyticsFull.cashStartOfTheDay = Cashier.Sum(x => x.amountBeginningOfTheDay); analyticsFull.SumWegesAdministrator = analyticsResult.wagesForCompletedOrders.CarpetWashing.TeamLeader + analyticsResult.wagesForCompletedOrders.Washing.TeamLeader; analyticsFull.SumWegesEmployees = analyticsResult.wagesForCompletedOrders.CarpetWashing.SalaryEmployees + analyticsResult.wagesForCompletedOrders.Washing.SalaryEmployees; analyticsFull.SumPendingPayment = SumOrderPendingPayment(analyticsResult); ViewBag.StartDate = DateTime.Now.ToString("D"); ViewBag.DateWhereStart = DateTime.Now; ViewBag.Date = DateTime.Now.AddDays(1).ToString("d"); var invoice = new DateTime(startDate.Value.Year, startDate.Value.Month, 1); ViewBag.InvoiceDate = invoice.ToString("D"); if (finalDate == null) { ViewBag.StartDate = startDate.Value.ToString("D"); ViewBag.DateWhereStart = startDate; } else { ViewBag.StartDate = startDate.Value.ToString("D"); ViewBag.FinalDate = finalDate.Value.ToString("D"); ViewBag.DateWhereStart = startDate; ViewBag.DateWhereFinal = finalDate; } var resultIncome = Mapper.Map <AnalyticsIncomeView>(await _abstractFactory.AnalyticsFinance(startDate.Value, finalDate)); analyticsResult.incomeViews = resultIncome.incomeViews; analyticsResult.paymentofArrears = resultIncome.paymentofArrears; analyticsFull.PaymentOfArrearsTotal = resultIncome.paymentofArrears.Sum(s => s.SumOfIncome); analyticsFull.PaymentOfArrearsCash = resultIncome.paymentofArrears.Sum(s => s.SumCash); analyticsFull.PaymentOfArrearsNoCash = resultIncome.paymentofArrears.Sum(s => s.SumNoCash); analyticsFull.CashEndDay = Math.Round(analyticsResult.incomeViews.Sum(s => s.SumOfIncome) - analyticsResult.expensesClassModels.Sum(s => s.Amount), 1); analyticsFull.CashEndDayCash = SumCashEndDayCash(analyticsResult.incomeViews.Sum(s => s.SumCash), analyticsCash.expensesClassModels.Sum(s => s.Amount), analyticsFull.cashStartOfTheDay, analyticsFull.PaymentOfArrearsCash); analyticsFull.CashEndDayNoCash = Math.Round(analyticsResult.incomeViews.Sum(s => s.SumNoCash) - analyticsNoCash.expensesClassModels.Sum(s => s.Amount), 1); analyticsFull.SumTotal = Math.Round(analyticsFull.CashEndDayCash + analyticsFull.cashStartOfTheDay, 1); analyticsFull.Profit = Math.Round(analyticsResult.incomeViews.Sum(x => x.SumOfIncome) - analyticsResult.expensesClassModels.Sum(x => x.Amount), 1); analyticsFull.SumTotal = Math.Round(analyticsResult.incomeViews.Sum(s => s.SumOfIncome) + analyticsResult.incomeViews.Sum(s => s.AwaitingPayment)); return(View(analyticsFull)); }