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