public RejectedReportResult RejectedReport(ReportParams Params)
        {
            var searchCriteria = new TicketSearchParams
            {
                Status                 = TicketStatus.Rejected,
                ReceivedAtFrom         = Params.RangeStart,
                ReceivedAtTo           = Params.RangeEnd,
                IncludeResearchHistory = true,
            };
            var items = searchCriteria.Search(requestState).ToRejectedReport();

            foreach (var item in items)
            {
                item.Reasons      = CleanReasons(item.Reasons);
                item.GroupContact = CleanGroupContact(item.GroupContact);
            }

            return(new RejectedReportResult
            {
                Report = new RejectedReport
                {
                    Items = items
                }
            });
        }
Example #2
0
        private IList GenerateCurrentStock(ReportParams model)
        {
            var data = (
                from a in _db.Item
                join b in _db.ItemLocation on a.ItemId equals b.ItemId
                join c in _db.Location on b.LocationId equals c.LocationId
                select new ReportModel
            {
                ItemId = a.ItemId,
                LocationId = b.LocationId,
                Name = a.Name,
                LocationName = c.Name,
                SKU = a.SKU,
                StockCount = b.Quantity,
                AreaId = a.AreaId ?? 0,
                AverageCost = _db.Transaction.Where(w =>
                                                    w.ItemId == a.ItemId &&
                                                    w.TransactionDate <= model.EndDate &&
                                                    w.TransactionTypeId == ETransactionType.NewStock
                                                    )
                              .OrderByDescending(o => o.TransactionDate)
                              .FirstOrDefault()
                              .AverageCost
            }
                )
                       .ToList();

            data.ForEach(item => item.CurrenyValue = item.StockCount * item.AverageCost);

            return(data);
        }
        public async Task <PagedList <DocumentInfo> > GetReport(ReportParams rptParams, string filter = "", string search = "")
        {
            // DbSet<DocumentInfo> docs = _context.DocumentInfo; // as IQueryable<DocumentInfo>;
            IQueryable <DocumentInfo> query;

            if (!string.IsNullOrEmpty(search))
            {
                query = _context.DocumentInfo
                        .Where(doc => doc.LastName.Contains(search) || doc.Company.Contains(search))
                        .OrderByDescending(r => (filter == "Agreed" ? r.dateAgreed : filter == "Resent" ? r.dateResent : filter == "Viewed" ? r.dateViewed : r.dateSent));
                if (!string.IsNullOrEmpty(filter))
                {
                    query = query.Where(doc => doc.Status == filter);
                }
                return(await PagedList <DocumentInfo> .CreateAsync(query, rptParams.PageNumber, rptParams.PageSize));
            }
            else if (filter == "Agreed" || filter == "Viewed" || filter == "Sent" || filter == "Resent")
            {
                var q = _context.DocumentInfo.Where(doc => doc.Status == filter).OrderByDescending(r => (filter == "Agreed" ? r.dateAgreed : filter == "Resent" ? r.dateResent : filter == "Viewed" ? r.dateViewed : r.dateSent));
                return(await PagedList <DocumentInfo> .CreateAsync(q, rptParams.PageNumber, rptParams.PageSize));
            }
            else
            {
                // DbSet<DocumentInfo> docs = _context.DocumentInfo;
                var docs = _context.DocumentInfo.Where(x => x != null).OrderByDescending(r => (filter == "Agreed" ? r.dateAgreed : filter == "Resent" ? r.dateResent : filter == "Viewed" ? r.dateViewed : r.dateSent));
                return(await PagedList <DocumentInfo> .CreateAsync(docs, rptParams.PageNumber, rptParams.PageSize));
            }
        }
        public ReadyToCloseReportResult ReadyToCloseReport(ReportParams Params)
        {
            var searchCriteria = new TicketSearchParams
            {
                IncludeTicketStatusList = new List <string>
                {
                    TicketStatus.ReadyToClose.ToString().PascalCaseToDescription(),
                TicketStatus.ReadyToCloseDuplicate.ToString().PascalCaseToDescription(),
                TicketStatus.ReadyToCloseTooLate.ToString().PascalCaseToDescription(),
                },
                IncludeContactHistory = true
            };
            var items = searchCriteria.Search(requestState).ToReadyToCloseReport();

            foreach (var item in items)
            {
                item.Reasons      = CleanReasons(item.Reasons);
                item.GroupContact = CleanGroupContact(item.GroupContact);
            }

            return(new ReadyToCloseReportResult
            {
                Report = new ReadyToCloseReport
                {
                    Items = items
                }
            });
        }
Example #5
0
            public ThisReportParams(ReportParams ps)
            {
                PeriodType = (PeriodType)((int)ps["PeriodType"]);
                if (!ps.GetParam("IntervalBegin").IsNull)
                {
                    IntervalBegin = (DateTime)ps["IntervalBegin"];
                }
                if (!ps.GetParam("IntervalEnd").IsNull)
                {
                    IntervalEnd = (DateTime)ps["IntervalEnd"];
                }
                if (!ps.GetParam("Quarter").IsNull)
                {
                    Quarter = (Quarter)((int)ps["Quarter"]);
                }
                Folder           = (Guid)ps["Folder"];
                ShowDetalization = (bool)((int)ps["ShowDetalization"] != 0);
                TimeMeasureUnits = (TimeMeasureUnits)((int)ps["TimeMeasureUnits"]);
                SortBy           = (ReportDepartmentCostSort)((int)ps["SortBy"]);
                ShowRestrictions = (bool)((int)ps["ShowRestrictions"] != 0);

                //if (PeriodType != PeriodType.DateInterval && (IntervalBegin.HasValue || IntervalEnd.HasValue))
                //	throw new ApplicationException("Заданы даты интервала при типе периода отличном от Интервал дат");

                //if (PeriodType != PeriodType.SelectedQuarter && Quarter.HasValue)
                //	throw new ApplicationException("Задан квартал при типе периода отличном от Квартал");
            }
        //Khởi tạo các tham số cho báo cáo
        public JsonResult GetRPKSKTheoDonViReport()
        {
            DatabaseHelper db = new DatabaseHelper();
            //Lấy dữ liệu được gửi từ ajax sang
            string tn    = Request.Form["tungay"];
            string dn    = Request.Form["denngay"];
            string tendv = Request.Form["dvk"];
            //Lấy mã đơn vị từ tên đơn vị
            string dv = db.Get_madonvi(tendv);

            if (tn != "" && dn != "")
            {
                ReportParams objectReportParams = new ReportParams();
                DataSet      data = GetInfo(tn, dn, dv);
                objectReportParams.DataSource           = data.Tables[0];
                objectReportParams.ReportTitle          = "Báo cáo khám sức khỏe chi tiết theo đơn vị";
                objectReportParams.ReportType           = "RPKSKTheoDonViReport";
                objectReportParams.RptFileName          = "RPKSKTheoDonViReport.rdlc";
                objectReportParams.DataSetName          = "RPKSKTheoDonViReport";
                this.HttpContext.Session["ReportParam"] = objectReportParams;
                return(Json("Thành công", JsonRequestBehavior.AllowGet));
            }
            else
            {
                return(Json("Xin chọn ngày", JsonRequestBehavior.AllowGet));
            }
        }
Example #7
0
        static void Main(string[] args)
        {
            SAWSessionServiceSoapClient sawSession = new SAWSessionServiceSoapClient();
            string sessionID = sawSession.logon("publico", "publico");

            //Set report parameters
            ReportRef repRef = new ReportRef();

            //path: get from report http url
            repRef.reportPath = @"/shared/Consulta Series Estadisticas desde Excel/1. Tasa de Cambio Peso Colombiano"
                                + "/1.1 TRM - Disponible desde el 27 de noviembre de 1991/TRM para un dia";
            //xml: get from report http url + &format=xml
            repRef.reportXml = @"<xsd:schema targetnamespace='\' urn:schemas-microsoft-com:xml-analysis:rowset=""><xsd:complextype name='\'>"
                               + @"<xsd:sequence><xsd:element 35="" as="" ate="" char="" character="" dd="" de="" echa="" evaluate="" fmday="" maxoccurs='\' minoccurs='\' month="" name='\' nls_date_language='SPANISH' nonagg="" none="" saw-sql:aggregationrule='\' saw-sql:aggregationtype='\' saw-sql:columnheading='\' saw-sql:displayformula='\' saw-sql:tableheading='\' saw-sql:type='\' type='\' xsd:string="" yyyy="">"
                               + @"<xsd:element a="" del="" echa="" maxoccurs='\' mes="" minoccurs='\' name='\' nonagg="" none="" saw-sql:aggregationrule='\' saw-sql:aggregationtype='\' saw-sql:columnheading='\' saw-sql:displayformula='\' saw-sql:tableheading='\' saw-sql:type='\' tinyint="" type='\' xsd:byte="">"
                               + @"<xsd:element agg="" double="" max="" maxoccurs='\' minoccurs='\' name='\' saw-sql:aggregationrule='\' saw-sql:aggregationtype='\' saw-sql:columnheading='\' saw-sql:displayformula='\' saw-sql:tableheading='\' saw-sql:type='\' type='\' xsd:double=""></xsd:element></xsd:element></xsd:element></xsd:sequence></xsd:complextype></xsd:schema>";

            //Create xml view, set xml options
            XmlViewServiceSoapClient xmlView = new XmlViewServiceSoapClient();
            XMLQueryExecutionOptions xmlOpts = new XMLQueryExecutionOptions();

            xmlOpts.maxRowsPerPage = 100;
            xmlOpts.refresh        = true;


            //Pass report parameters
            ReportParams repParams = new ReportParams();

            //Execute XML Query
            QueryResults qResults = xmlView.executeXMLQuery(repRef, XMLQueryOutputFormat.SAWRowsetData, xmlOpts, repParams, sessionID);

            //Print rowset
            sawSession.logoff(sessionID);

            //Get rate value from result XML
            XmlDocument results = new XmlDocument();

            results.LoadXml(qResults.rowset);

            DateTime    trmDate = DateTime.Today.AddDays(-5);
            XmlNodeList xnlDate = results.GetElementsByTagName("Column0");

            foreach (XmlNode xn in xnlDate)
            {
                trmDate = DateTime.ParseExact(xn.InnerText, "dddd d 'de' MMMM 'de' yyyy", CultureInfo.CreateSpecificCulture("es-CO"));
            }

            decimal     trm     = decimal.Zero;
            XmlNodeList xnlRate = results.GetElementsByTagName("Column2");

            foreach (XmlNode xn in xnlRate)
            {
                trm = Convert.ToDecimal(xn.InnerText, CultureInfo.InvariantCulture);
            }


            Console.Write(trm);
            Console.Read();
        }
Example #8
0
            public bool IsSpecifiedIntervalEnd;         //Признак, что дата конца отчетного периода задана

            public ThisReportParams(ReportParams Params)
            {
                // Задание дат начала и конца отчетного периода
                IsSpecifiedIntervalBegin = !Params.GetParam("IntervalBegin").IsNull;
                IntervalBegin            = (IsSpecifiedIntervalBegin ? Params.GetParam("IntervalBegin").Value : DBNull.Value);
                IsSpecifiedIntervalEnd   = !Params.GetParam("IntervalEnd").IsNull;
                IntervalEnd = (IsSpecifiedIntervalEnd ? Params.GetParam("IntervalEnd").Value : DBNull.Value);
            }
Example #9
0
        public async Task <ActionResult <IEnumerable <ReportDto> > > GetTravels(ReportParams reportParams)
        {
            var reports = await _unitOfWork.UserRepository.GetReportsAsync(reportParams);

            Response.AddPaginationHeader(reports.CurrentPage, reports.PageSize, reports.TotalCount, reports.TotalPages);

            return(reports);
        }
Example #10
0
 /// <summary>
 /// Параметризированный конструктор. Инициализирует свойства класса на
 /// основании данных параметров, представленных в коллекции ReportParams.
 /// </summary>
 /// <param name="Params">Данные параметов, передаваемые в отчет</param>
 /// <remarks>
 /// При необходимости выполняет коррекцию значений параметров, полгаемых
 /// по умолчанию, а так же расчет синтетических параметров (таких как
 /// "Направление активности")
 /// </remarks>
 public ThisReportParams(ReportParams Params)
 {
     EmpID = (Guid)Params.GetParam("EmpID").Value;
     IsSpecifiedIntervalBegin = !Params.GetParam("IntervalBegin").IsNull;
     IntervalBegin            = (IsSpecifiedIntervalBegin ? Params.GetParam("IntervalBegin").Value : DBNull.Value);
     IsSpecifiedIntervalEnd   = !Params.GetParam("IntervalEnd").IsNull;
     IntervalEnd = (IsSpecifiedIntervalEnd ? Params.GetParam("IntervalEnd").Value : DBNull.Value);
 }
Example #11
0
        public void GetDeduccionesReport()
        {
            ReportParams <DeduccionesInfoEntity> obj_ReportParams = new ReportParams <DeduccionesInfoEntity>();

            obj_ReportParams.DataSource             = GetAllDeducciones();
            obj_ReportParams.RptFileName            = "DeduccionesReport.rpt";
            this.HttpContext.Session["ReportType"]  = "DeduccionesInfoReport";
            this.HttpContext.Session["ReportParam"] = obj_ReportParams;
        }
        public void GetSolicitud()
        {
            ReportParams <SolicitudViewModel> obj_ReportParams = new ReportParams <SolicitudViewModel>();

            obj_ReportParams.DataSource             = GetAllInfoSol();
            obj_ReportParams.RptFileName            = "Solicitud.rpt";
            this.HttpContext.Session["ReportType"]  = "SolicitudInfoReport";
            this.HttpContext.Session["ReportParam"] = obj_ReportParams;
        }
Example #13
0
        public async Task <PagedList <ReportDto> > GetReportsAsync(ReportParams reportParams)
        {
            var query = _context.Reports.AsQueryable();

            query = query.Where(u => u.UserReported.FullName == reportParams.FullName);

            return(await PagedList <ReportDto> .CreateAsync(query.ProjectTo <ReportDto>(_mapper.ConfigurationProvider).AsNoTracking(),
                                                            reportParams.PageNumber, reportParams.PageSize));
        }
Example #14
0
        public virtual IActionResult GetData([FromBody] ReportParams model)
        {
            var data = Service.GetData(model);

            return(new JsonActionResult(
                       data,
                       data?.Count
                       ));
        }
Example #15
0
        public void GetAgremiadosReport()
        {
            ReportParams <AgremiadosInfoEntity> obj_ReportParams = new ReportParams <AgremiadosInfoEntity>();

            obj_ReportParams.DataSource             = GetAllAgremiados();
            obj_ReportParams.RptFileName            = "AgremiadosReport.rpt";
            this.HttpContext.Session["ReportType"]  = "AgremiadosInfoReport";
            this.HttpContext.Session["ReportParam"] = obj_ReportParams;
        }
 public OpenTicketsReportResult OpenTicketsReport(ReportParams Params)
 {
     return(new OpenTicketsReportResult
     {
         Report = new OpenTicketsReport
         {
             Items = GetOpenTickets(Params.RangeStart, Params.RangeEnd),
             GroupItems = GetOpenTicketsByGroup(Params.RangeStart, Params.RangeEnd)
         }
     });
 }
Example #17
0
 public ProductivityReportModel(ServicesProxy servicesProxy)
 {
     Header           = new ProductivityReportTableItem();
     PostReportParams = new ReportParams();
     ReportParams     = new ReportParams
     {
         RangeStart = DateTime.Now.Date.AddMonths(-1),
         RangeEnd   = DateTime.Now.Date.AddDays(1).AddSeconds(-1)
     };
     Result = servicesProxy.ReportService.ProductivityReport(ReportParams);
 }
 public RejectedReportModel(ServicesProxy servicesProxy)
 {
     Header           = new RejectedReportTableItem();
     PostReportParams = new ReadyToCloseReportParams();
     ReportParams     = new ReportParams
     {
         RangeStart = DateTime.Parse("1990-01-01"),
         RangeEnd   = DateTime.Parse("2100-01-01")
     };
     Result = servicesProxy.ReportService.RejectedReport(ReportParams);
 }
 public ProductivityReportResult ProductivityReport(ReportParams Params)
 {
     return(new ProductivityReportResult
     {
         Report = new ProductivityReport
         {
             Items = GetProductivity(Params.RangeStart, Params.RangeEnd),
             GroupItems = GetProductivity(Params.RangeStart, Params.RangeEnd)
         }
     });
 }
Example #20
0
        //[Route("Employees/EmployeeReport")]
        public void EmployeeReport()
        {
            ReportParams <Employee> reportParams = new ReportParams <Employee>();

            reportParams.DataSoure   = GetAllEmployee();
            reportParams.ReportTitle = "Employee Info Report";
            reportParams.RptFileName = "EmployeeInfoReport.rpt";
            Session["ReportType"]    = "EmployeeInfoReport";
            Session["ReportParam"]   = reportParams;

            Session["sSql"] = "select * from EmployeeView where DepartmentID = 1";
        }
Example #21
0
        // Get paginated reports
        public async Task <PagedList <Report> > GetPagination(ReportParams reportParams)
        {
            var reports = _context.Reports.Where(r => r.Status == reportParams.Status).AsQueryable();

            if (reportParams.Gender == "male" || reportParams.Gender == "female")
            {
                reports = reports.Where(r => _context.Users.Where(u => u.Id == r.UserId).Select(u => u.Gender).First() == reportParams.Gender);
            }
            reports = reports.OrderByDescending(r => r.ReportSent);

            return(await PagedList <Report> .CreateAsync(reports, reportParams.PageNumber, reportParams.PageSize));
        }
 public OpenTicketsReportModel(ServicesProxy servicesProxy)
 {
     Header             = new OpenTicketsReportTableItem();
     dateTimeExtensions = new DateTimeExtensions(servicesProxy.MapsScheduleService);
     PostReportParams   = new ReportParams();
     ReportParams       = new ReportParams
     {
         RangeStart = DateTime.Parse("1/1/2012"),
         RangeEnd   = DateTime.Now.Date.AddDays(1).AddSeconds(-1)
     };
     Result = servicesProxy.ReportService.OpenTicketsReport(ReportParams);
 }
Example #23
0
        public IList GetData(ReportParams model)
        {
            switch (model.ReportType)
            {
            case ReportType.InventoryTransactions:
                return(GenerateInventoryTransactions(model));

            case ReportType.CurrentStockList:
                return(GenerateCurrentStock(model));

            default:
                throw new ApplicationException("Reporte no definido");
            }
        }
Example #24
0
        public async Task <IEnumerable <ReportResponse> > GetPaginationTest(ReportParams reportParams)
        {
            var reports       = GetPagination(reportParams);
            var mappedReports = _mapper.Map <IEnumerable <ReportResponse> >(reports);

            foreach (var report in mappedReports)
            {
                report.UserName = await _context.Users.Where(u => u.Id == report.UserId).Select(u => u.Name).FirstOrDefaultAsync();

                report.PhotoUrl = await _context.Photos.Where(p => p.UserId == report.UserId && p.Order == 0).Select(p => p.Url).FirstOrDefaultAsync();

                report.SenderName = await _context.Users.Where(u => u.Id == report.SenderId).Select(u => u.Name).FirstOrDefaultAsync();
            }

            return(null);
        }
Example #25
0
        public async Task <IActionResult> ReportConsumptionCase2(ReportParams reportParams)
        {
            var delta = reportParams.EndDate - reportParams.StartDate;
            var str   = Math.Abs(delta.TotalDays);

            if (str > 31)
            {
                var error = $"Chỉ được xuất dữ liệu báo cáo trong 30 ngày!!!<br>The report data can only be exported for 30 days!!!";
                return(BadRequest(error));
            }
            else
            {
                var bin = await _planService.ReportConsumptionCase2(reportParams);

                return(File(bin, "application/octet-stream", "reportConsumption2.xlsx"));
            }
        }
        public async Task <IActionResult> GetReport([FromQuery] ReportParams rptParams, string filter)
        {
            string search  = "";
            string filter1 = HttpContext.Request.Query["filter"].ToString();
            string search1 = HttpContext.Request.Query["search"].ToString();

            Console.WriteLine("New get report call w/ filter=" + filter);
            // If there is some sort of filter or search
            if (!string.IsNullOrEmpty(filter))
            {
                // If there is a combo of filter+ search
                if (filter.Contains('+'))
                {
                    string[] parts = filter.Split('+');
                    if (parts[0] == "Agreed" || parts[0] == "Viewed" || parts[0] == "Sent" || parts[0] == "Resent")
                    {
                        filter = parts[0];
                        search = parts[1];
                    }
                    else
                    {
                        filter = parts[1];
                        search = parts[0];
                    }
                } // else if there is only a filter
                else if (filter == "Agreed" || filter == "Viewed" || filter == "Sent" || filter == "Resent")
                {
                    search = "";
                }
                else
                {
                    search = filter;
                    filter = "";
                }
            }

            Console.WriteLine($"New GetReport call w/ filter={filter} and Search={search}");
            var docs = _repo.GetReport(rptParams, filter, search).Result;

            Response.AddPagination(docs.CurrentPage, docs.PageSize, docs.TotalCount, docs.TotalPages);

            return(Ok(docs));
        }
Example #27
0
        public JsonResult GetThongTinReport()
        {
            string macb = Request.Form["macb"];

            if (macb != "")
            {
                ReportParams objectReportParams = new ReportParams();
                DataSet      data = GetInfoTT(macb);
                objectReportParams.DataSource           = data.Tables[0];
                objectReportParams.ReportTitle          = "Thông tin cán bộ";
                objectReportParams.ReportType           = "ThongTinReport";
                objectReportParams.RptFileName          = "ThongTinReport.rdlc";
                objectReportParams.DataSetName          = "ThongTinReport";
                this.HttpContext.Session["ReportParam"] = objectReportParams;
                return(Json("Thành công", JsonRequestBehavior.AllowGet));
            }
            else
            {
                return(Json("Không có dữ liệu", JsonRequestBehavior.AllowGet));
            }
        }
Example #28
0
        public async Task <IActionResult> GetUserReports([FromQuery] ReportParams reportParams)
        {
            var reports = await _reportService.GetPagination(reportParams);

            var mappedReports = _mapper.Map <IEnumerable <ReportResponse> >(reports);

            foreach (var report in mappedReports)
            {
                report.UserName = await _context.Users.Where(u => u.Id == report.UserId).Select(u => u.Name).FirstOrDefaultAsync();

                report.PhotoUrl = await _context.Photos.Where(p => p.UserId == report.UserId && p.Order == 0).Select(p => p.Url).FirstOrDefaultAsync();

                report.SenderName = await _context.Users.Where(u => u.Id == report.SenderId).Select(u => u.Name).FirstOrDefaultAsync();

                report.ApprovedCount = (byte)await _context.Reports.Where(r => r.UserId == report.UserId && r.Status == ReportStatus.Approved).CountAsync();
            }

            Response.AddPagination(reports.CurrentPage, reports.PageSize, reports.TotalCount, reports.TotalPages);

            return(Ok(mappedReports));
        }
        public JsonResult GetRPKSKTheoLoaiKhamReport()
        {
            string tn = Request.Form["tungay"];
            string dn = Request.Form["denngay"];

            if (tn != "" && dn != "")
            {
                ReportParams objectReportParams = new ReportParams();
                DataSet      data = GetInfo(tn, dn);
                objectReportParams.DataSource           = data.Tables[0];
                objectReportParams.ReportTitle          = "Báo cáo khám sức khỏe theo loại khám";
                objectReportParams.ReportType           = "RPKSKTheoLoaiKhamReport";
                objectReportParams.RptFileName          = "RPKSKTheoLoaiKhamReport.rdlc";
                objectReportParams.DataSetName          = "RPKSKTheoLoaiKhamReport";
                this.HttpContext.Session["ReportParam"] = objectReportParams;
                return(Json("Thành công", JsonRequestBehavior.AllowGet));
            }
            else
            {
                return(Json("Xin chọn ngày", JsonRequestBehavior.AllowGet));
            }
        }
            /// <summary>
            /// Параметризированный конструктор. Инициализирует свойства класса на
            /// основании данных параметров, представленных в коллекции ReportParams.
            /// </summary>
            /// <param name="Params">Данные параметов, передаваемые в отчет</param>
            /// <param name="cn">Соединение с БД (для подгрузки данных)</param>
            /// <remarks>
            /// При необходимости выполняет коррекцию значений параметров
            /// </remarks>
            public ThisReportParams(ReportParams Params, IReportDataProvider provider)
            {
                // #1: ЗАЧИТЫВАЕМ ПАРАМЕТРЫ, ЗАДАННЫЕ ЯВНО
                // Идентификатор сотрудника
                EmployeeID = (Guid)Params.GetParam("Employee").Value;

                // Задание дат начала и конца отчетного периода
                IsSpecifiedIntervalBegin = !Params.GetParam("IntervalBegin").IsNull;
                IntervalBegin            = (IsSpecifiedIntervalBegin? Params.GetParam("IntervalBegin").Value : DBNull.Value);
                IsSpecifiedIntervalEnd   = !Params.GetParam("IntervalEnd").IsNull;
                IntervalEnd = (IsSpecifiedIntervalEnd? Params.GetParam("IntervalEnd").Value : DBNull.Value);

                // Признак "Показывть выходные дни без списаний"
                ShowFreeWeekends = (0 != (int)Params.GetParam("ShowFreeWeekends").Value);
                // Представление времени
                TimeMeasure = (TimeMeasureUnits)((int)Params.GetParam("TimeMeasureUnits").Value);
                // Признак отображения параметров отчета в заголовке
                ShowRestrictions = (0 != (int)Params.GetParam("ShowRestrictions").Value);

                // #2: ДОГРУЖАЕМ ВСЕ ДАННЫЕ ПО СОТРУДНИКУ
                using (IDataReader reader = provider.GetDataReader("dsAdditionaly", null))
                {
                    if (reader.Read())
                    {
                        int nOrdinal = reader.GetOrdinal("FullName");
                        FullName = reader.IsDBNull(nOrdinal)? null : reader.GetString(nOrdinal);

                        nOrdinal      = reader.GetOrdinal("WorkBeginDate");
                        WorkBeginDate = reader.IsDBNull(nOrdinal) ? DateTime.MinValue : reader.GetDateTime(nOrdinal);

                        nOrdinal    = reader.GetOrdinal("WorkEndDate");
                        WorkEndDate = reader.IsDBNull(nOrdinal) ? DateTime.MaxValue : reader.GetDateTime(nOrdinal);

                        nOrdinal        = reader.GetOrdinal("WorkdayDuration");
                        WorkdayDuration = reader.IsDBNull(nOrdinal) ? 0 : reader.GetInt32(nOrdinal);
                    }
                }
            }
        public override void PrepareReport(ReportParams reportParams)
        {
            var servAppealCits = Container.Resolve<IDomainService<AppealCits>>();
            var servAppealCitsSource = Container.Resolve<IDomainService<AppealCitsSource>>();
            var servAppealCitsRealityObject = Container.Resolve<IDomainService<AppealCitsRealityObject>>();
            var servBaseStatementAppealCits = Container.Resolve<IDomainService<InspectionAppealCits>>();
            var servDisposal = Container.Resolve<IDomainService<Disposal>>();
            var servProtocol = Container.Resolve<IDomainService<Protocol>>();
            var servPrescription = Container.Resolve<IDomainService<Prescription>>();
            var servActCheck = Container.Resolve<IDomainService<ActCheck>>();
            var servResolution = Container.Resolve<IDomainService<Resolution>>();

            var zonalByMuIdDict = Container.Resolve<IDomainService<ZonalInspectionMunicipality>>().GetAll()
                .Select(x => new { ZonalInspectionId = x.ZonalInspection.Id, muId = x.Municipality.Id })
                .AsEnumerable()
                .GroupBy(x => x.muId)
                .ToDictionary(x => x.Key, x => x.Select(y => y.ZonalInspectionId).FirstOrDefault());

            // Инспекции с муниципальными образованиями
            var zonalInspectionDict = this.GetZonalInspectionDict();

            // 2.1 Всего поступило обращений с начала года
            var appealCitsForZonInspDict = this.GetAppealCitsForZonalInspDict(servAppealCits, servAppealCitsRealityObject, zonalByMuIdDict);

            // 2.1.1 - 2.1.4
            var appealCitsForRevenueFormDict = this.GetAppealCitsForRevenueForDict(servAppealCitsSource, servAppealCitsRealityObject);

            // 2.2 Данные по ГЖИРТ с разбивкой по районам ЗЖИ
            var appealCitsForInspectionRtDict = this.GetAppealCitsForInspRt(zonalInspectionDict, servAppealCitsSource, servAppealCitsRealityObject);

            // 3 Рассмотрено с выездом на место
            var notPlannedExitDict = this.GetNotPlannedExit(servBaseStatementAppealCits, servAppealCitsRealityObject, servDisposal, servActCheck, zonalByMuIdDict);

            // 3.1 Выдано предписаний
            var countPrescriptionDict = this.GetCountPrescription(servBaseStatementAppealCits, servAppealCitsRealityObject, servDisposal, servPrescription, zonalByMuIdDict);

            // 3.2 оформлено протоколов (первично)
            var countProtocolDict = this.GetCountProtocol(servBaseStatementAppealCits, servAppealCitsRealityObject, servDisposal, servProtocol, zonalByMuIdDict);

            // 3.3 - составлено актов обследования
            var countActCheckDict = this.GetCountActCheck(servBaseStatementAppealCits, servAppealCitsRealityObject, servDisposal, servActCheck, zonalByMuIdDict);

            // 4.1 и 5.1 составлено актов о выполнении предписаний  (они по логике идентичны тк в первой ветка актов проверки предписания быть не может)
            var countActRemovalDict = servBaseStatementAppealCits.GetAll()
                .Join(
                servAppealCitsRealityObject.GetAll(),
                x => x.AppealCits.Id,
                y => y.AppealCits.Id,
                (a, b) => new { baseAppeal = a, appealRealObj = b })
                .WhereIf(municipalityIds.Length > 0, x => municipalityIds.Contains(x.appealRealObj.RealityObject.Municipality.Id))
                .Where(x => x.baseAppeal.AppealCits.ZonalInspection != null && x.baseAppeal.AppealCits.DateFrom != null)
                .Where(x => x.baseAppeal.AppealCits.DateFrom >= dateStart && x.baseAppeal.AppealCits.DateFrom <= dateEnd)
                .Select(y => new
                {
                    BaseStatementId = y.baseAppeal.Inspection.Id,
                    CountActRemoval = this.Container.Resolve<IDomainService<ActRemoval>>().GetAll()
                    .Count(x => x.Inspection.Id == y.baseAppeal.Inspection.Id
                    && x.Stage.Parent.TypeStage == TypeStage.DisposalPrescription
                    && x.TypeRemoval == YesNoNotSet.Yes),
                    muId = y.appealRealObj.RealityObject.Municipality.Id
                })
                .AsEnumerable()
                .GroupBy(x => zonalByMuIdDict.ContainsKey(x.muId) ? zonalByMuIdDict[x.muId] : -1)
                .ToDictionary(x => x.Key, x => x.Distinct(y => y.BaseStatementId).Select(y => y.CountActRemoval).Sum());

            // 4.2 оформлено протоколов по ст. 19.5
            var countProtocol195FirstDict = this.GetCountProtocol195First(servBaseStatementAppealCits, servAppealCitsRealityObject, servProtocol, zonalByMuIdDict);

            // 4.3 вынесено постановлений мировыми судьями
            var countResolutionCourtFirstDict = servBaseStatementAppealCits.GetAll()
                .Join(
                servAppealCitsRealityObject.GetAll(),
                x => x.AppealCits.Id,
                y => y.AppealCits.Id,
                (a, b) => new { baseAppeal = a, appealRealObj = b })
                .WhereIf(municipalityIds.Length > 0, x => municipalityIds.Contains(x.appealRealObj.RealityObject.Municipality.Id))
                .Where(x => x.baseAppeal.AppealCits.ZonalInspection != null
                             && x.baseAppeal.AppealCits.DateFrom != null && x.baseAppeal.AppealCits.DateFrom >= dateStart && x.baseAppeal.AppealCits.DateFrom <= dateEnd)
                .Where(y => servResolution.GetAll().Any(x => x.Inspection.Id == y.baseAppeal.Inspection.Id))
                .Select(y =>
                    new
                    {
                        BaseStatementId = y.baseAppeal.Inspection.Id,
                        CountResolution = servResolution.GetAll()
                        .Count(x => x.Inspection.Id == y.baseAppeal.Inspection.Id
                            && x.Stage.Parent.TypeStage == TypeStage.DisposalPrescription
                            && x.TypeInitiativeOrg == TypeInitiativeOrgGji.Court),
                        muId = y.appealRealObj.RealityObject.Municipality.Id
                    })
                .AsEnumerable()
                .GroupBy(x => zonalByMuIdDict.ContainsKey(x.muId) ? zonalByMuIdDict[x.muId] : -1)
                .ToDictionary(x => x.Key, x => x.Distinct(y => y.BaseStatementId).Select(y => y.CountResolution).Sum());

            // 4.4 сумма штрафов мирового суда
            var sumResolutionCourtFirstDict = servBaseStatementAppealCits.GetAll()
                .Join(
                servAppealCitsRealityObject.GetAll(),
                x => x.AppealCits.Id,
                y => y.AppealCits.Id,
                (a, b) => new { baseAppeal = a, appealRealObj = b })
                .WhereIf(municipalityIds.Length > 0, x => municipalityIds.Contains(x.appealRealObj.RealityObject.Municipality.Id))
                .Where(x => x.baseAppeal.AppealCits.ZonalInspection != null
                            && x.baseAppeal.AppealCits.DateFrom != null && x.baseAppeal.AppealCits.DateFrom >= dateStart && x.baseAppeal.AppealCits.DateFrom <= dateEnd)
                .Where(y => servResolution.GetAll().Any(x => x.Inspection.Id == y.baseAppeal.Inspection.Id))
                .Select(y =>
                    new
                    {
                        BaseStatementId = y.baseAppeal.Inspection.Id,
                        PenaltyAmount = servResolution.GetAll()
                        .Where(x => x.PenaltyAmount != null && x.Inspection.Id == y.baseAppeal.Inspection.Id
                                && x.TypeInitiativeOrg == TypeInitiativeOrgGji.Court
                                && x.Stage.Parent.TypeStage == TypeStage.DisposalPrescription)
                        .Sum(x => x.PenaltyAmount),
                        muId = y.appealRealObj.RealityObject.Municipality.Id
                    })
                    .AsEnumerable()
                    .GroupBy(x => zonalByMuIdDict.ContainsKey(x.muId) ? zonalByMuIdDict[x.muId] : -1)
                    .ToDictionary(x => x.Key, x => x.Where(y => y.PenaltyAmount.HasValue).Distinct(y => y.BaseStatementId).Select(y => y.PenaltyAmount.Value).Sum());

            // 4.5 - оформлено протоколов по ст. 7.21, 7.22, 7.23 (вторично)
            var countProtocolArticleLawsFirstDict = servBaseStatementAppealCits.GetAll()
               .Join(
               servAppealCitsRealityObject.GetAll(),
               x => x.AppealCits.Id,
               y => y.AppealCits.Id,
               (a, b) => new { baseAppeal = a, appealRealObj = b })
               .WhereIf(municipalityIds.Length > 0, x => municipalityIds.Contains(x.appealRealObj.RealityObject.Municipality.Id))
               .Where(x => x.baseAppeal.AppealCits.ZonalInspection != null
                             && x.baseAppeal.AppealCits.DateFrom != null && x.baseAppeal.AppealCits.DateFrom >= dateStart && x.baseAppeal.AppealCits.DateFrom <= dateEnd)
               .Where(y => servProtocol.GetAll().Any(x => x.Inspection.Id == y.baseAppeal.Inspection.Id))
                .Select(y =>
                    new
                    {
                        BaseStatementId = y.baseAppeal.Inspection.Id,
                        CountProtocol = this.Container.Resolve<IDomainService<ProtocolArticleLaw>>().GetAll()
                        .Count(x => x.Protocol.Inspection.Id == y.baseAppeal.Inspection.Id
                            && x.Protocol.Stage.Parent.TypeStage == TypeStage.DisposalPrescription
                            && (x.ArticleLaw.Code == "2" || x.ArticleLaw.Code == "3" || x.ArticleLaw.Code == "4" || x.ArticleLaw.Code == "5")),
                        muId = y.appealRealObj.RealityObject.Municipality.Id
                    })
                .AsEnumerable()
                .GroupBy(x => zonalByMuIdDict.ContainsKey(x.muId) ? zonalByMuIdDict[x.muId] : -1)
                .ToDictionary(x => x.Key, x => x.Distinct(y => y.BaseStatementId).Select(y => y.CountProtocol).Sum());

            // 4.6 вынесено постановлений ГЖИ РТ
            var countResolutionHousingInspectionFirstDict = servBaseStatementAppealCits.GetAll()
               .Join(
               servAppealCitsRealityObject.GetAll(),
               x => x.AppealCits.Id,
               y => y.AppealCits.Id,
               (a, b) => new { baseAppeal = a, appealRealObj = b })
               .WhereIf(municipalityIds.Length > 0, x => municipalityIds.Contains(x.appealRealObj.RealityObject.Municipality.Id))
                .Where(x => x.baseAppeal.AppealCits.ZonalInspection != null
                    && x.baseAppeal.AppealCits.DateFrom != null && x.baseAppeal.AppealCits.DateFrom >= dateStart && x.baseAppeal.AppealCits.DateFrom <= dateEnd)
                .Where(y => Container.Resolve<IDomainService<Resolution>>().GetAll().Any(x => x.Inspection.Id == y.baseAppeal.Inspection.Id))
                .Select(y =>
                    new
                    {
                        BaseStatementId = y.baseAppeal.Inspection.Id,
                        CountResolution = this.Container.Resolve<IDomainService<Resolution>>().GetAll()
                        .Count(x => x.Inspection.Id == y.baseAppeal.Inspection.Id
                            && x.TypeInitiativeOrg == TypeInitiativeOrgGji.HousingInspection
                            && x.Stage.Parent.TypeStage == TypeStage.DisposalPrescription),
                        muId = y.appealRealObj.RealityObject.Municipality.Id
                    })
                .AsEnumerable()
                .GroupBy(x => zonalByMuIdDict.ContainsKey(x.muId) ? zonalByMuIdDict[x.muId] : -1)
                .ToDictionary(x => x.Key, x => x.Distinct(y => y.BaseStatementId).Select(y => y.CountResolution).Sum());

            // 4.7 сумма штрафов ГЖИ
            var sumResolutionHousingInspectionFirstDict = servBaseStatementAppealCits.GetAll()
               .Join(
               servAppealCitsRealityObject.GetAll(),
               x => x.AppealCits.Id,
               y => y.AppealCits.Id,
               (a, b) => new { baseAppeal = a, appealRealObj = b })
               .WhereIf(municipalityIds.Length > 0, x => municipalityIds.Contains(x.appealRealObj.RealityObject.Municipality.Id))
               .Where(x => x.baseAppeal.AppealCits.ZonalInspection != null && x.baseAppeal.AppealCits.DateFrom != null && x.baseAppeal.AppealCits.DateFrom >= dateStart && x.baseAppeal.AppealCits.DateFrom <= dateEnd)
                .Where(y => Container.Resolve<IDomainService<Resolution>>().GetAll().Any(x => x.Inspection.Id == y.baseAppeal.Inspection.Id))
                .Select(y =>
                    new
                    {
                        BaseStatementId = y.baseAppeal.Inspection.Id,
                        IsResolutionDispute = this.Container.Resolve<IDomainService<ResolutionDispute>>().GetAll().Any(x => x.Resolution.Inspection.Id == y.baseAppeal.Inspection.Id),
                        PenaltyAmount = this.Container.Resolve<IDomainService<Resolution>>().GetAll()
                        .Where(x => x.PenaltyAmount != null
                            && x.Inspection.Id == y.baseAppeal.Inspection.Id
                            && x.TypeInitiativeOrg == TypeInitiativeOrgGji.HousingInspection
                            && x.Sanction.Code == "1"
                            && x.Stage.Parent.TypeStage == TypeStage.DisposalPrescription)
                        .Sum(x => x.PenaltyAmount),
                        muId = y.appealRealObj.RealityObject.Municipality.Id
                    })
                    .AsEnumerable()
                    .GroupBy(x => zonalByMuIdDict.ContainsKey(x.muId) ? zonalByMuIdDict[x.muId] : -1)
                    .ToDictionary(x => x.Key, x => x.Where(y => !y.IsResolutionDispute && y.PenaltyAmount.HasValue).Distinct(y => y.BaseStatementId).Select(y => y.PenaltyAmount.Value).Sum());

            // 4.8 - снято с контроля (решено положительно) (используется в 5.8)
            var removedFromControlDict = this.GetRemovedFromControl(servBaseStatementAppealCits, servAppealCitsRealityObject, zonalByMuIdDict);

            // 5.2 оформлено протоколов по ст. 19.5
            var countProtocol195Dict = servBaseStatementAppealCits.GetAll()
               .Join(
               servAppealCitsRealityObject.GetAll(),
               x => x.AppealCits.Id,
               y => y.AppealCits.Id,
               (a, b) => new { baseAppeal = a, appealRealObj = b })
               .WhereIf(municipalityIds.Length > 0, x => municipalityIds.Contains(x.appealRealObj.RealityObject.Municipality.Id))
                .Where(x => x.baseAppeal.AppealCits.ZonalInspection != null
                    && x.baseAppeal.AppealCits.DateFrom != null && x.baseAppeal.AppealCits.DateFrom >= dateStart && x.baseAppeal.AppealCits.DateFrom <= dateEnd)
                .Where(y => servProtocol.GetAll().Any(x => x.Inspection.Id == y.baseAppeal.Inspection.Id))
                .Select(y =>
                    new
                    {
                        BaseStatementId = y.baseAppeal.Inspection.Id,
                        CountProtocol = this.Container.Resolve<IDomainService<ProtocolArticleLaw>>().GetAll()
                        .Count(x => x.Protocol.Inspection.Id == y.baseAppeal.Inspection.Id && (x.ArticleLaw.Code == "1" || x.ArticleLaw.Code == "7")),
                        muId = y.appealRealObj.RealityObject.Municipality.Id
                    })
                .AsEnumerable()
                .GroupBy(x => zonalByMuIdDict.ContainsKey(x.muId) ? zonalByMuIdDict[x.muId] : -1)
                .ToDictionary(x => x.Key, x => x.Distinct(y => y.BaseStatementId).Select(y => y.CountProtocol).Sum());

            // 5.3 вынесено постановлений мировыми судьями
            var countResolutionCourtDict = servBaseStatementAppealCits.GetAll()
               .Join(
               servAppealCitsRealityObject.GetAll(),
               x => x.AppealCits.Id,
               y => y.AppealCits.Id,
               (a, b) => new { baseAppeal = a, appealRealObj = b })
               .WhereIf(municipalityIds.Length > 0, x => municipalityIds.Contains(x.appealRealObj.RealityObject.Municipality.Id))
                .Where(x => x.baseAppeal.AppealCits.ZonalInspection != null
                    && x.baseAppeal.AppealCits.DateFrom != null && x.baseAppeal.AppealCits.DateFrom >= dateStart && x.baseAppeal.AppealCits.DateFrom <= dateEnd)
                .Where(y => servResolution.GetAll().Any(x => x.Inspection.Id == y.baseAppeal.Inspection.Id))
                .Select(y =>
                    new
                    {
                        BaseStatementId = y.baseAppeal.Inspection.Id,
                        CountResolution = servResolution.GetAll()
                        .Count(x => x.Inspection.Id == y.baseAppeal.Inspection.Id && x.TypeInitiativeOrg == TypeInitiativeOrgGji.Court),
                        muId = y.appealRealObj.RealityObject.Municipality.Id
                    })
                .AsEnumerable()
                .GroupBy(x => zonalByMuIdDict.ContainsKey(x.muId) ? zonalByMuIdDict[x.muId] : -1)
                .ToDictionary(x => x.Key, x => x.Distinct(y => y.BaseStatementId).Select(y => y.CountResolution).Sum());

            // 5.4 сумма штрафов мирового суда
            var sumResolutionCourtDict = servBaseStatementAppealCits.GetAll()
               .Join(
               servAppealCitsRealityObject.GetAll(),
               x => x.AppealCits.Id,
               y => y.AppealCits.Id,
               (a, b) => new { baseAppeal = a, appealRealObj = b })
               .WhereIf(municipalityIds.Length > 0, x => municipalityIds.Contains(x.appealRealObj.RealityObject.Municipality.Id))
                .Where(x => x.baseAppeal.AppealCits.ZonalInspection != null
                    && x.baseAppeal.AppealCits.DateFrom != null && x.baseAppeal.AppealCits.DateFrom >= dateStart && x.baseAppeal.AppealCits.DateFrom <= dateEnd)
                .Where(y => Container.Resolve<IDomainService<Resolution>>().GetAll().Any(x => x.Inspection.Id == y.baseAppeal.Inspection.Id))
                .Select(y =>
                    new
                    {
                        BaseStatementId = y.baseAppeal.Inspection.Id,
                        PenaltyAmount = this.Container.Resolve<IDomainService<Resolution>>().GetAll()
                        .Where(x => x.PenaltyAmount != null && x.Inspection.Id == y.baseAppeal.Inspection.Id && x.TypeInitiativeOrg == TypeInitiativeOrgGji.Court)
                        .Sum(x => x.PenaltyAmount),
                        muId = y.appealRealObj.RealityObject.Municipality.Id
                    })
                    .AsEnumerable()
                    .GroupBy(x => zonalByMuIdDict.ContainsKey(x.muId) ? zonalByMuIdDict[x.muId] : -1)
                    .ToDictionary(x => x.Key, x => x.Where(y => y.PenaltyAmount.HasValue).Distinct(y => y.BaseStatementId).Select(y => y.PenaltyAmount.Value).Sum());

            // 5.5 - оформлено протоколов по ст. 7.21, 7.22, 7.23 (вторично)
            var countProtocolArticleLawsDict = servBaseStatementAppealCits.GetAll()
               .Join(
               servAppealCitsRealityObject.GetAll(),
               x => x.AppealCits.Id,
               y => y.AppealCits.Id,
               (a, b) => new { baseAppeal = a, appealRealObj = b })
               .WhereIf(municipalityIds.Length > 0, x => municipalityIds.Contains(x.appealRealObj.RealityObject.Municipality.Id))
                .Where(x => x.baseAppeal.AppealCits.ZonalInspection != null
                    && x.baseAppeal.AppealCits.DateFrom != null && x.baseAppeal.AppealCits.DateFrom >= dateStart && x.baseAppeal.AppealCits.DateFrom <= dateEnd)
                .Where(y => servProtocol.GetAll().Any(x => x.Inspection.Id == y.baseAppeal.Inspection.Id))
                .Select(y =>
                    new
                    {
                        BaseStatementId = y.baseAppeal.Inspection.Id,
                        CountProtocol = this.Container.Resolve<IDomainService<ProtocolArticleLaw>>().GetAll()
                        .Count(x => x.Protocol.Inspection.Id == y.baseAppeal.Inspection.Id
                            && (x.ArticleLaw.Code == "2" || x.ArticleLaw.Code == "3" || x.ArticleLaw.Code == "4" || x.ArticleLaw.Code == "5")),
                        muId = y.appealRealObj.RealityObject.Municipality.Id
                    })
                .AsEnumerable()
                .GroupBy(x => zonalByMuIdDict.ContainsKey(x.muId) ? zonalByMuIdDict[x.muId] : -1)
                .ToDictionary(x => x.Key, x => x.Distinct(y => y.BaseStatementId).Select(y => y.CountProtocol).Sum());

            // 5.6 вынесено постановлений ГЖИ РТ
            var countResolutionHousingInspectionDict = servBaseStatementAppealCits.GetAll()
               .Join(
               servAppealCitsRealityObject.GetAll(),
               x => x.AppealCits.Id,
               y => y.AppealCits.Id,
               (a, b) => new { baseAppeal = a, appealRealObj = b })
               .WhereIf(municipalityIds.Length > 0, x => municipalityIds.Contains(x.appealRealObj.RealityObject.Municipality.Id))
                .Where(x => x.baseAppeal.AppealCits.ZonalInspection != null
                    && x.baseAppeal.AppealCits.DateFrom != null && x.baseAppeal.AppealCits.DateFrom >= dateStart && x.baseAppeal.AppealCits.DateFrom <= dateEnd)
                .Where(y => Container.Resolve<IDomainService<Resolution>>().GetAll().Any(x => x.Inspection.Id == y.baseAppeal.Inspection.Id))
                .Select(y =>
                    new
                    {
                        BaseStatementId = y.baseAppeal.Inspection.Id,
                        CountResolution = this.Container.Resolve<IDomainService<Resolution>>().GetAll()
                        .Count(x => x.Inspection.Id == y.baseAppeal.Inspection.Id
                            && x.TypeInitiativeOrg == TypeInitiativeOrgGji.HousingInspection),
                        muId = y.appealRealObj.RealityObject.Municipality.Id
                    })
                    .AsEnumerable()
                    .GroupBy(x => zonalByMuIdDict.ContainsKey(x.muId) ? zonalByMuIdDict[x.muId] : -1)
                    .ToDictionary(x => x.Key, x => x.Distinct(y => y.BaseStatementId).Select(y => y.CountResolution).Sum());

            // 5.7 сумма штрафов ГЖИ
            var sumResolutionHousingInspectionDict = servBaseStatementAppealCits.GetAll()
               .Join(
               servAppealCitsRealityObject.GetAll(),
               x => x.AppealCits.Id,
               y => y.AppealCits.Id,
               (a, b) => new { baseAppeal = a, appealRealObj = b })
               .WhereIf(municipalityIds.Length > 0, x => municipalityIds.Contains(x.appealRealObj.RealityObject.Municipality.Id))
                .Where(x => x.baseAppeal.AppealCits.ZonalInspection != null
                    && x.baseAppeal.AppealCits.DateFrom != null && x.baseAppeal.AppealCits.DateFrom >= dateStart && x.baseAppeal.AppealCits.DateFrom <= dateEnd)
                .Where(y => Container.Resolve<IDomainService<Resolution>>().GetAll().Any(x => x.Inspection.Id == y.baseAppeal.Inspection.Id))
                .Select(y =>
                    new
                    {
                        BaseStatementId = y.baseAppeal.Inspection.Id,
                        IsResolutionDispute = this.Container.Resolve<IDomainService<ResolutionDispute>>().GetAll().Any(x => x.Resolution.Inspection.Id == y.baseAppeal.Inspection.Id),
                        PenaltyAmount = this.Container.Resolve<IDomainService<Resolution>>().GetAll()
                        .Where(x => x.PenaltyAmount != null
                            && x.Inspection.Id == y.baseAppeal.Inspection.Id
                            && x.TypeInitiativeOrg == TypeInitiativeOrgGji.HousingInspection)
                        .Sum(x => x.PenaltyAmount),
                        muId = y.appealRealObj.RealityObject.Municipality.Id
                    })
                .AsEnumerable()
                .GroupBy(x => zonalByMuIdDict.ContainsKey(x.muId) ? zonalByMuIdDict[x.muId] : -1)
                .ToDictionary(x => x.Key, x => x.Where(y => !y.IsResolutionDispute && y.PenaltyAmount.HasValue).Distinct(y => y.BaseStatementId).Select(y => y.PenaltyAmount.Value).Sum());

            // 5.8 - снято с контроля (решено положительно)
            var removedFromControlProtocolDict = this.GetRemovedFromControlPlusProtocol(servBaseStatementAppealCits, servAppealCitsRealityObject, zonalByMuIdDict);

            // 6 Направлено обращений для принятия мер
            var countSuretyResolveDict = Container.Resolve<IDomainService<AppealCits>>().GetAll()
                .Join(
                servAppealCitsRealityObject.GetAll(),
                x => x.Id,
                y => y.AppealCits.Id,
                (a, b) => new { appealCit = a, appealRealObj = b })
                .WhereIf(municipalityIds.Length > 0, x => municipalityIds.Contains(x.appealRealObj.RealityObject.Municipality.Id))
                .Where(x => x.appealCit.ZonalInspection != null
                     && x.appealCit.DateFrom != null && x.appealCit.DateFrom >= dateStart && x.appealCit.DateFrom <= dateEnd && x.appealCit.SuretyResolve.Code == "4")
                 .Select(y =>
                     new
                     {
                         AppealCitsId = y.appealCit.Id,
                         muId = y.appealRealObj.RealityObject.Municipality.Id
                     })
                     .AsEnumerable()
                     .GroupBy(x => zonalByMuIdDict.ContainsKey(x.muId) ? zonalByMuIdDict[x.muId] : -1)
                     .ToDictionary(x => x.Key, x => x.Select(y => y.AppealCitsId).Count());

            var takeOnControlDict = this.GetTakeOnControl(servBaseStatementAppealCits, servAppealCitsRealityObject, zonalByMuIdDict);

            var секция = reportParams.ComplexReportParams.ДобавитьСекцию("секцияДанных");

            foreach (var запись in zonalInspectionDict)
            {
                var zonalInspectionId = запись.Key;

                секция.ДобавитьСтроку();
                секция["ЗЖИ"] = запись.Value.ZonalInspection;

                var countPrescription = countPrescriptionDict.ContainsKey(zonalInspectionId) ? countPrescriptionDict[zonalInspectionId] : 0;
                var countProtocol = countProtocolDict.ContainsKey(zonalInspectionId) ? countProtocolDict[zonalInspectionId] : 0;
                var sumResolutionFirstCourt = sumResolutionCourtFirstDict.ContainsKey(zonalInspectionId) ? sumResolutionCourtFirstDict[zonalInspectionId] : 0;
                var sumResolutionHousingInspectionFirst = sumResolutionHousingInspectionFirstDict.ContainsKey(zonalInspectionId) ? sumResolutionHousingInspectionFirstDict[zonalInspectionId] : 0;

                var sumResolutionCourt = sumResolutionCourtDict.ContainsKey(zonalInspectionId) ? sumResolutionCourtDict[zonalInspectionId] : 0;
                var sumResolutionHousingInspection = sumResolutionHousingInspectionDict.ContainsKey(zonalInspectionId) ? sumResolutionHousingInspectionDict[zonalInspectionId] : 0;

                var revenueForm9 = appealCitsForRevenueFormDict.ContainsKey(zonalInspectionId) ?
                    appealCitsForRevenueFormDict[zonalInspectionId].ContainsKey("9") ? appealCitsForRevenueFormDict[zonalInspectionId]["9"] : 0
                    : 0;

                var revenueForm1 = appealCitsForRevenueFormDict.ContainsKey(zonalInspectionId) ?
                    appealCitsForRevenueFormDict[zonalInspectionId].ContainsKey("1") ? appealCitsForRevenueFormDict[zonalInspectionId]["1"] : 0
                    : 0;

                var revenueForm12 = appealCitsForRevenueFormDict.ContainsKey(zonalInspectionId) ?
                    appealCitsForRevenueFormDict[zonalInspectionId].ContainsKey("12") ? appealCitsForRevenueFormDict[zonalInspectionId]["12"] : 0
                    : 0;

                var revenueForm13 = appealCitsForRevenueFormDict.ContainsKey(zonalInspectionId) ?
                    appealCitsForRevenueFormDict[zonalInspectionId].ContainsKey("13") ? appealCitsForRevenueFormDict[zonalInspectionId]["13"] : 0
                    : 0;

                var revenueForm10 = appealCitsForRevenueFormDict.ContainsKey(zonalInspectionId) ?
                    appealCitsForRevenueFormDict[zonalInspectionId].ContainsKey("10") ? appealCitsForRevenueFormDict[zonalInspectionId]["10"] : 0
                    : 0;

                var revenueForm19 = appealCitsForRevenueFormDict.ContainsKey(zonalInspectionId) ?
                    appealCitsForRevenueFormDict[zonalInspectionId].ContainsKey("19") ? appealCitsForRevenueFormDict[zonalInspectionId]["19"] : 0
                    : 0;

                var revenueForm5 = appealCitsForRevenueFormDict.ContainsKey(zonalInspectionId) ?
                    appealCitsForRevenueFormDict[zonalInspectionId].ContainsKey("5") ? appealCitsForRevenueFormDict[zonalInspectionId]["5"] : 0
                    : 0;

                var appealCitsZonInsp = appealCitsForZonInspDict.ContainsKey(zonalInspectionId)
                                            ? appealCitsForZonInspDict[zonalInspectionId]
                                            : 0;

                var appealCitsForInspectionRt = appealCitsForInspectionRtDict.ContainsKey(zonalInspectionId)
                                            ? appealCitsForInspectionRtDict[zonalInspectionId]
                                            : 0;
                var takeOnControl1 = takeOnControlDict.ContainsKey(zonalInspectionId)
                                         ? takeOnControlDict[zonalInspectionId].ContainsKey(year - 1)
                                               ? takeOnControlDict[zonalInspectionId][year - 1]
                                               : 0
                                         : 0;
                var takeOnControl2 = takeOnControlDict.ContainsKey(zonalInspectionId)
                                         ? takeOnControlDict[zonalInspectionId].ContainsKey(year - 2)
                                               ? takeOnControlDict[zonalInspectionId][year - 2]
                                               : 0
                                         : 0;
                var takeOnControl3 = takeOnControlDict.ContainsKey(zonalInspectionId)
                                       ? takeOnControlDict[zonalInspectionId].ContainsKey(year - 3)
                                             ? takeOnControlDict[zonalInspectionId][year - 3]
                                             : 0
                                       : 0;

                var takeOnControl4 = takeOnControlDict.ContainsKey(zonalInspectionId)
                                      ? takeOnControlDict[zonalInspectionId].ContainsKey(year - 4)
                                            ? takeOnControlDict[zonalInspectionId][year - 4]
                                            : 0
                                      : 0;

                секция["Значение1"] = takeOnControl1 + takeOnControl2 + takeOnControl3 + takeOnControl4;
                секция["Значение2"] = appealCitsZonInsp + appealCitsForInspectionRt;
                секция["Значение3"] = appealCitsZonInsp;
                секция["Значение4"] = revenueForm9;
                секция["Значение5"] = revenueForm1;
                секция["Значение6"] = revenueForm12 + revenueForm13 + revenueForm19 + revenueForm10;
                секция["Значение35"] = revenueForm5;

                секция["Значение7"] = appealCitsForInspectionRt;

                секция["Значение8"] = notPlannedExitDict.ContainsKey(zonalInspectionId) ? notPlannedExitDict[zonalInspectionId] : 0;
                секция["Значение9"] = countPrescription;
                секция["Значение10"] = countProtocol;
                секция["Значение11"] = countActCheckDict.ContainsKey(zonalInspectionId) ? countActCheckDict[zonalInspectionId] : 0;
                секция["Значение12"] = countPrescription + countProtocol;

                секция["Значение13"] = countActRemovalDict.ContainsKey(zonalInspectionId) ? countActRemovalDict[zonalInspectionId] : 0;
                секция["Значение14"] = countProtocol195FirstDict.ContainsKey(zonalInspectionId) ? countProtocol195FirstDict[zonalInspectionId] : 0;
                секция["Значение15"] = countResolutionCourtFirstDict.ContainsKey(zonalInspectionId) ? countResolutionCourtFirstDict[zonalInspectionId] : 0;
                секция["Значение16"] = sumResolutionFirstCourt > 0 ? sumResolutionFirstCourt / 1000 : 0;
                секция["Значение17"] = countProtocolArticleLawsFirstDict.ContainsKey(zonalInspectionId) ? countProtocolArticleLawsFirstDict[zonalInspectionId] : 0;
                секция["Значение18"] = countResolutionHousingInspectionFirstDict.ContainsKey(zonalInspectionId) ? countResolutionHousingInspectionFirstDict[zonalInspectionId] : 0;
                секция["Значение19"] = sumResolutionHousingInspectionFirst > 0 ? sumResolutionHousingInspectionFirst / 1000 : 0;
                секция["Значение20"] = removedFromControlDict.ContainsKey(zonalInspectionId) ? removedFromControlDict[zonalInspectionId] : 0;

                секция["Значение21"] = countActRemovalDict.ContainsKey(zonalInspectionId) ? countActRemovalDict[zonalInspectionId] : 0;
                секция["Значение22"] = countProtocol195Dict.ContainsKey(zonalInspectionId) ? countProtocol195Dict[zonalInspectionId] : 0;
                секция["Значение23"] = countResolutionCourtDict.ContainsKey(zonalInspectionId) ? countResolutionCourtDict[zonalInspectionId] : 0;
                секция["Значение24"] = sumResolutionCourt > 0 ? sumResolutionCourt / 1000 : 0;
                секция["Значение25"] = countProtocolArticleLawsDict.ContainsKey(zonalInspectionId) ? countProtocolArticleLawsDict[zonalInspectionId] : 0;
                секция["Значение26"] = countResolutionHousingInspectionDict.ContainsKey(zonalInspectionId) ? countResolutionHousingInspectionDict[zonalInspectionId] : 0;
                секция["Значение27"] = sumResolutionHousingInspection > 0 ? sumResolutionHousingInspection / 1000 : 0;
                секция["Значение28"] = removedFromControlProtocolDict.ContainsKey(zonalInspectionId) ? removedFromControlProtocolDict[zonalInspectionId] : 0;
                секция["Значение29"] = countSuretyResolveDict.ContainsKey(zonalInspectionId) ? countSuretyResolveDict[zonalInspectionId] : 0;

                секция["Значение30"] = takeOnControl1 + takeOnControl2 + takeOnControl3 + takeOnControl4;
                секция["Значение31"] = takeOnControl1;
                секция["Значение32"] = takeOnControl2;
                секция["Значение33"] = takeOnControl3;
                секция["Значение34"] = takeOnControl4;
            }

            var appealCitsZonInspTotal = appealCitsForZonInspDict.Where(x => x.Key != -1).Sum(i => i.Value);
            var appealCitsForInspectionRtTotal = appealCitsForInspectionRtDict.Where(x => x.Key != -1).Sum(i => i.Value);
            var revenueForm9Total = appealCitsForRevenueFormDict.Where(x => x.Key != -1).Where(i => i.Value.ContainsKey("9")).Sum(i => i.Value["9"]);
            var revenueForm1Total = appealCitsForRevenueFormDict.Where(x => x.Key != -1).Where(i => i.Value.ContainsKey("1")).Sum(i => i.Value["1"]);
            var revenueForm12Total = appealCitsForRevenueFormDict.Where(x => x.Key != -1).Where(i => i.Value.ContainsKey("12")).Sum(i => i.Value["12"]);
            var revenueForm13Total = appealCitsForRevenueFormDict.Where(x => x.Key != -1).Where(i => i.Value.ContainsKey("13")).Sum(i => i.Value["13"]);
            var revenueForm19Total = appealCitsForRevenueFormDict.Where(x => x.Key != -1).Where(i => i.Value.ContainsKey("19")).Sum(i => i.Value["19"]);
            var revenueForm10Total = appealCitsForRevenueFormDict.Where(x => x.Key != -1).Where(i => i.Value.ContainsKey("10")).Sum(i => i.Value["10"]);
            var revenueForm5Total = appealCitsForRevenueFormDict.Where(x => x.Key != -1).Where(i => i.Value.ContainsKey("5")).Sum(i => i.Value["5"]);

            var countPrescriptionTotal = countPrescriptionDict.Where(x => x.Key != -1).Sum(i => i.Value);
            var countProtocolTotal = countProtocolDict.Where(x => x.Key != -1).Sum(i => i.Value);
            var sumResolutionFirstTotal = sumResolutionCourtFirstDict.Where(x => x.Key != -1).Sum(i => i.Value);
            var sumResolutionHousingInspectionFirstTotal = sumResolutionHousingInspectionFirstDict.Where(x => x.Key != -1).Sum(i => i.Value);

            var sumResolutionCourtTotal = sumResolutionCourtDict.Where(x => x.Key != -1).Sum(i => i.Value);
            var sumResolutionHousingInspectionTotal = sumResolutionHousingInspectionDict.Where(x => x.Key != -1).Sum(i => i.Value);

            var takeOnControl1Total = takeOnControlDict.Where(x => x.Key != -1).Where(v => v.Value.ContainsKey(year - 1)).Sum(v => v.Value[year - 1]);
            var takeOnControl2Total = takeOnControlDict.Where(x => x.Key != -1).Where(v => v.Value.ContainsKey(year - 2)).Sum(v => v.Value[year - 2]);
            var takeOnControl3Total = takeOnControlDict.Where(x => x.Key != -1).Where(v => v.Value.ContainsKey(year - 3)).Sum(v => v.Value[year - 3]);
            var takeOnControl4Total = takeOnControlDict.Where(x => x.Key != -1).Where(v => v.Value.ContainsKey(year - 4)).Sum(v => v.Value[year - 4]);

            reportParams.SimpleReportParams["Сумма1"] = takeOnControl1Total + takeOnControl2Total + takeOnControl3Total + takeOnControl4Total;
            reportParams.SimpleReportParams["Сумма2"] = appealCitsZonInspTotal + appealCitsForInspectionRtTotal;
            reportParams.SimpleReportParams["Сумма3"] = appealCitsZonInspTotal;
            reportParams.SimpleReportParams["Сумма4"] = revenueForm9Total;
            reportParams.SimpleReportParams["Сумма5"] = revenueForm1Total;
            reportParams.SimpleReportParams["Сумма6"] = revenueForm12Total + revenueForm13Total + revenueForm19Total + revenueForm10Total;
            reportParams.SimpleReportParams["Сумма35"] = revenueForm5Total;
            reportParams.SimpleReportParams["Сумма7"] = appealCitsForInspectionRtTotal;
            reportParams.SimpleReportParams["Сумма8"] = notPlannedExitDict.Where(x => x.Key != -1).Sum(i => i.Value);
            reportParams.SimpleReportParams["Сумма9"] = countPrescriptionTotal;
            reportParams.SimpleReportParams["Сумма10"] = countProtocolTotal;
            reportParams.SimpleReportParams["Сумма11"] = countActCheckDict.Where(x => x.Key != -1).Sum(i => i.Value);
            reportParams.SimpleReportParams["Сумма12"] = countPrescriptionTotal + countProtocolTotal;
            reportParams.SimpleReportParams["Сумма13"] = countActRemovalDict.Where(x => x.Key != -1).Sum(i => i.Value);
            reportParams.SimpleReportParams["Сумма14"] = countProtocol195FirstDict.Where(x => x.Key != -1).Sum(i => i.Value);
            reportParams.SimpleReportParams["Сумма15"] = countResolutionCourtFirstDict.Where(x => x.Key != -1).Sum(i => i.Value);
            reportParams.SimpleReportParams["Сумма16"] = sumResolutionFirstTotal > 0 ? sumResolutionFirstTotal / 1000M : 0;
            reportParams.SimpleReportParams["Сумма17"] = countProtocolArticleLawsFirstDict.Where(x => x.Key != -1).Sum(i => i.Value);
            reportParams.SimpleReportParams["Сумма18"] = countResolutionHousingInspectionFirstDict.Where(x => x.Key != -1).Sum(i => i.Value);
            reportParams.SimpleReportParams["Сумма19"] = sumResolutionHousingInspectionFirstTotal > 0 ? sumResolutionHousingInspectionFirstTotal / 1000M : 0;
            reportParams.SimpleReportParams["Сумма20"] = removedFromControlDict.Where(x => x.Key != -1).Sum(i => i.Value);
            reportParams.SimpleReportParams["Сумма21"] = countActRemovalDict.Where(x => x.Key != -1).Sum(i => i.Value);
            reportParams.SimpleReportParams["Сумма22"] = countProtocol195Dict.Where(x => x.Key != -1).Sum(i => i.Value);
            reportParams.SimpleReportParams["Сумма23"] = countResolutionCourtDict.Where(x => x.Key != -1).Sum(i => i.Value);
            reportParams.SimpleReportParams["Сумма24"] = sumResolutionCourtTotal > 0 ? sumResolutionCourtTotal / 1000M : 0;
            reportParams.SimpleReportParams["Сумма25"] = countProtocolArticleLawsDict.Where(x => x.Key != -1).Sum(i => i.Value);
            reportParams.SimpleReportParams["Сумма26"] = countResolutionHousingInspectionDict.Where(x => x.Key != -1).Sum(i => i.Value);
            reportParams.SimpleReportParams["Сумма27"] = sumResolutionHousingInspectionTotal > 0 ? sumResolutionHousingInspectionTotal / 1000M : 0;
            reportParams.SimpleReportParams["Сумма28"] = removedFromControlProtocolDict.Where(x => x.Key != -1).Sum(i => i.Value);
            reportParams.SimpleReportParams["Сумма29"] = countSuretyResolveDict.Where(x => x.Key != -1).Sum(i => i.Value);
            reportParams.SimpleReportParams["Сумма30"] = takeOnControl1Total + takeOnControl2Total + takeOnControl3Total + takeOnControl4Total;
            reportParams.SimpleReportParams["Сумма31"] = takeOnControl1Total;
            reportParams.SimpleReportParams["Сумма32"] = takeOnControl2Total;
            reportParams.SimpleReportParams["Сумма33"] = takeOnControl3Total;
            reportParams.SimpleReportParams["Сумма34"] = takeOnControl4Total;

            reportParams.SimpleReportParams["год"] = dateEnd.Year;
            reportParams.SimpleReportParams["год1"] = dateEnd.Year - 1;
            reportParams.SimpleReportParams["год2"] = dateEnd.Year - 2;
            reportParams.SimpleReportParams["год3"] = dateEnd.Year - 3;
            reportParams.SimpleReportParams["год4"] = dateEnd.Year - 4;
        }
Example #32
0
        private ReportFilter ParseJSONFilter(ReportParams rp)
        {
            var filter = new ReportFilter();

            var reportType = 0;
            int.TryParse(rp.ReportType, out reportType);

            if (HasValue(rp.Project))
            {
                filter.ProjectIds.Add(int.Parse(rp.Project));
            }
            if (HasValue(rp.User))
            {
                filter.UserId = new Guid(rp.User);
            }
            if (HasValue(rp.Tag))
            {
                filter.ProjectTag = rp.Tag;
            }
            else if (HasValue(rp.Department))
            {
                filter.DepartmentId = new Guid(rp.Department);
            }
            if (HasValue(rp.FromDate))
            {
                filter.FromDate = TenantUtil.DateTimeFromUtc(DateTime.Parse(rp.FromDate).ToUniversalTime()).Date;
            }
            if (HasValue(rp.ToDate))
            {
                var date = default(DateTime);
                if (DateTime.TryParse(rp.ToDate, out date))
                {
                    filter.ToDate = date;
                }
                else
                {
                    var days = 0;
                    if (int.TryParse(rp.ToDate, out days))
                    {
                        if (days == -1)
                            filter.ToDate = DateTime.MaxValue;
                        else
                            filter.ToDate = DateTime.Now.Date.AddDays(days);
                    }
                }
            }
            if (HasValue(rp.ProjectStatuses))
            {
                if (!Convert.ToBoolean(rp.ProjectStatuses)) filter.ProjectStatuses.Add(ProjectStatus.Open);
            }
            if (HasValue(rp.MilestoneStatuses))
            {
                var statuses = rp.MilestoneStatuses
                    .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
                    .Select(s => Convert.ToBoolean(s))
                    .ToArray();
                if (statuses[0]) filter.MilestoneStatuses.Add(MilestoneStatus.Open);
                if (statuses[1]) filter.MilestoneStatuses.Add(MilestoneStatus.Closed);
            }
            if (HasValue(rp.TaskStatuses))
            {
                var statuses = rp.TaskStatuses
                    .Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
                    .Select(s => Convert.ToBoolean(s))
                    .ToArray();
                if (statuses[0]) filter.TaskStatuses.Add(TaskStatus.Open);
                if (statuses[1]) filter.TaskStatuses.Add(TaskStatus.Closed);
            }
            if (HasValue(rp.ViewType))
            {
                filter.ViewType = Convert.ToBoolean(rp.ViewType) ? 0 : 1;
            }
            if (HasValue(rp.TimeInterval))
            {
                var interval = 0;
                int.TryParse(rp.TimeInterval, out interval);
                filter.TimeInterval = (ReportTimeInterval)interval;
            }

            if(HasValue(rp.NoRes))
            {
                filter.NoResponsible = Convert.ToBoolean(rp.NoRes);
            }

            return filter;
        }
Example #33
0
        public override void PrepareReport(ReportParams reportParams)
        {
            var serviceTypeWorkCr = Container.Resolve<IDomainService<TypeWorkCr>>();
            var serviceFinanceSourceResource = Container.Resolve<IDomainService<FinanceSourceResource>>();
            var serviceProtocolCr = Container.Resolve<IDomainService<ProtocolCr>>();
            var servicePerformedWorkAct = Container.Resolve<IDomainService<PerformedWorkAct>>();

            //Вывод в отчете сегодняшней даты
            reportParams.SimpleReportParams["ReportDate"] = DateTime.Today.ToShortDateString();

            //Query запрос по FinanceSourceResource
            var financeSourceResourceQuery = serviceFinanceSourceResource.GetAll()
                .Where(x => x.ObjectCr.ProgramCr.Id == programCrId)
                .WhereIf(this.finSourceIds.Length > 0, x => this.finSourceIds.Contains(x.FinanceSource.Id))
                .WhereIf(this.municipalityIds.Length > 0, x => this.municipalityIds.Contains(x.ObjectCr.RealityObject.Municipality.Id));

            //Словарь источника финансирования МО по домам
            var financeSourceResourceDict = financeSourceResourceQuery
                .Select(x => new
                        {
                            muName = x.ObjectCr.RealityObject.Municipality.Name,
                            x.ObjectCr.RealityObject.FiasAddress.PlaceName,
                            roId = x.ObjectCr.RealityObject.Id,
                            x.ObjectCr.RealityObject.FiasAddress.StreetName,
                            x.ObjectCr.RealityObject.FiasAddress.House,
                            x.ObjectCr.RealityObject.FiasAddress.Housing,
                            AreaMkd = x.ObjectCr.RealityObject.AreaMkd.HasValue ? x.ObjectCr.RealityObject.AreaMkd.Value : 0,
                            NumberLiving = x.ObjectCr.RealityObject.NumberLiving.HasValue ? x.ObjectCr.RealityObject.NumberLiving.Value : 0
                        })
                .ToList()
                .GroupBy(x => x.muName)
                .OrderBy(x => x.Key)
                .ToDictionary(x => x.Key, x =>
                    x.GroupBy(y => y.roId)
                    .ToDictionary(y => y.Key, y => y.First()));

            //Словарь  Дом - сумма по актам выполненных работ
            var PerformedWorkActByRoIdDict = servicePerformedWorkAct.GetAll()
                .Where(x => x.ObjectCr.ProgramCr.Id == programCrId)
                .WhereIf(this.municipalityIds.Length > 0, x => this.municipalityIds.Contains(x.ObjectCr.RealityObject.Municipality.Id))
                .Where(x => x.TypeWorkCr.Work.TypeWork == TypeWork.Work)
                .Select(x => new
                    {
                        x.Sum,
                        x.ObjectCr.RealityObject.Id
                    })
                .ToList()
                .GroupBy(x => x.Id)
                .ToDictionary(x => x.Key, x => x.Sum(y => y.Sum));

            var protocolCrQuery = serviceProtocolCr.GetAll()
                .Where(x => x.ObjectCr.ProgramCr.Id == programCrId)
                .WhereIf(this.municipalityIds.Length > 0, x => this.municipalityIds.Contains(x.ObjectCr.RealityObject.Municipality.Id));

            //Дома, у которых есть акт "Акт ввода в эксплуатацию после капремонта"
            var roIdsByProtocolCrList = protocolCrQuery
                .Where(x => x.TypeDocumentCr == TypeDocumentCr.ActExpluatatinAfterCr)
                .Select(x => x.ObjectCr.RealityObject.Id)
                .ToList();

            //Словарь домов, отсортированных по актам
            var protocolCrByRoIdDict = protocolCrQuery
                .Where(x => x.TypeDocumentCr == TypeDocumentCr.ActExpluatatinAfterCr || x.TypeDocumentCr == TypeDocumentCr.ProtocolCompleteCr)
                .Select(x => new
                    {
                        x.ObjectCr.RealityObject.Id,
                        x.DateFrom,
                        x.TypeDocumentCr
                    })
                .ToList()
                .GroupBy(x => x.Id)
                .ToDictionary(x => x.Key, x =>
                    x.GroupBy(y => y.TypeDocumentCr)
                    .ToDictionary(y => y.Key, y => y.Select(z => z.DateFrom).First()));

            //Словарь рабочих групп от с до 17
            var workGroups = Enumerable.Range(1, 17).Select(x => x.ToStr()).ToDictionary(x => x, x => x);

            //Список рабочих кодов от 1 до 17
            var workCodes = Enumerable.Range(1, 17).Select(x => x.ToStr()).ToList();

            //Словарь инженерных кодов от 1 до 11
            var engeneerWorkCodes = Enumerable.Range(1, 11).Select(x => x.ToStr()).ToList();

            //Изменение значений кодов у рабочих групп
            workGroups["3"] = "2";
            workGroups["8"] = "7";
            workGroups["9"] = "7";
            workGroups["10"] = "7";
            workGroups["11"] = "7";
            workGroups["15"] = "14";
            workGroups["17"] = "16";
            workGroups["1018"] = "1018";
            workGroups["1019"] = "1018";

            //Словарь домов из видов работ КР
            var TypeWorkCrByRoIdDict = serviceTypeWorkCr.GetAll()
                .Where(x => x.ObjectCr.ProgramCr.Id == programCrId)
                .WhereIf(this.finSourceIds.Length > 0, x => this.finSourceIds.Contains(x.FinanceSource.Id))
                .WhereIf(this.municipalityIds.Length > 0, x => this.municipalityIds.Contains(x.ObjectCr.RealityObject.Municipality.Id))
                .Select(x => new
                    {
                        x.Work.Code,
                        roId = x.ObjectCr.RealityObject.Id,
                        PlanSum = x.Sum / 1000,
                        CostSum = x.CostSum / 1000,
                        x.VolumeOfCompletion,
                        x.Volume,
                        x.PercentOfCompletion,
                        AreaMkd = x.ObjectCr.RealityObject.AreaMkd.HasValue ? x.ObjectCr.RealityObject.AreaMkd.Value : 0,
                        NumberLiving = x.ObjectCr.RealityObject.NumberLiving.HasValue ? x.ObjectCr.RealityObject.NumberLiving.Value : 0
                    })
                .ToList()
                .GroupBy(x => x.roId)
                .ToDictionary(
                    x => x.Key, x =>
                        {
                            //Словарь по кодам
                            var workData = x.GroupBy(y => workGroups.ContainsKey(y.Code) ? workGroups[y.Code] : "-1")
                                 .ToDictionary(
                                     y => y.Key,
                                     y => new
                                         {
                                             planSum = y.Sum(z => z.PlanSum.HasValue ? z.PlanSum.Value : 0),
                                             costSum = y.Sum(z => z.CostSum.HasValue ? z.CostSum.Value : 0),
                                             planVolume = y.Sum(z => z.Volume.HasValue ? z.Volume.Value : 0),
                                             volume = y.Sum(z => z.VolumeOfCompletion.HasValue ? z.VolumeOfCompletion.Value : 0)
                                         });

                            //проверка все ли работы завершены у дома
                            var allWorksCompleted = x.All(y => y.PercentOfCompletion == 100);

                            //Плановая сумма по рабочим кодам
                            var allWorksPlanSum = workData.Where(y => workCodes.Contains(y.Key)).Sum(y => y.Value.planSum);

                            //Плановая сумма по инженерным кодам
                            var engeneerWorksPlanSum = workData.Where(y => engeneerWorkCodes.Contains(y.Key)).Sum(y => y.Value.planSum);

                            //Фактическая сумма по рабочим кодам
                            var allWorksSum = workData.Where(y => workCodes.Contains(y.Key)).Sum(y => y.Value.costSum);

                            //Фактическая сумма по инженерным кодам
                            var engeneerWorksSum = workData.Where(y => engeneerWorkCodes.Contains(y.Key)).Sum(y => y.Value.costSum);

                            //Площадь МКД
                            var AreaMkd = x.Select(y => y.AreaMkd).First();

                            //Количество проживающих
                            var NumberLiving = x.Select(y => y.NumberLiving).First();

                            return new { key = x.Key, workData, allWorksCompleted, allWorksSum, engeneerWorksSum, AreaMkd, NumberLiving, allWorksPlanSum, engeneerWorksPlanSum };
                        });

            //Коды по рабочим суммам
            var aggregatedWorkSumCodes = new List<string> { "1", "2", "4", "5", "6", "7", "12", "13", "14", "16", "1018" };

            //Коды по рабочим объемам
            var aggregatedWorkVolumeCodes = new List<string> { "12", "13", "14", "16" };

            //Названия для заполнения шаблона
            var aggregatedDataNames = new List<string> { "roCount", "areaMkd", "numberLiving", "totalEngeneerSum", "totalSum" };

            //Словарь по всем домам, у которых завершены все работы
            var aggregatedData = TypeWorkCrByRoIdDict
                .GroupBy(x => x.Value.allWorksCompleted)
                .Select(x =>
                    {
                        var aggregatedDataDict = new Dictionary<string, decimal>();

                        //функции по плановой сумме и объему
                        Func<string, decimal> worksPlanSum = workCode => x.Sum(y => y.Value.workData.ContainsKey(workCode) ? y.Value.workData[workCode].planSum : 0);
                        Func<string, decimal> worksPlanVolume = workCode => x.Sum(y => y.Value.workData.ContainsKey(workCode) ? y.Value.workData[workCode].planVolume / 1000 : 0);

                        //функции по фактической сумме и объему
                        Func<string, List<int>, decimal> worksSum = (workCode, ids) => x.Where(y => ids.Contains(y.Value.key)).Sum(y => y.Value.workData.ContainsKey(workCode) ? y.Value.workData[workCode].costSum : 0);
                        Func<string, List<int>, decimal> worksVolume = (workCode, ids) => x.Where(y => ids.Contains(y.Value.key)).Sum(y => y.Value.workData.ContainsKey(workCode) ? y.Value.workData[workCode].volume / 1000 : 0);

                        //список Id домов, у которых есть акт "Акт ввода в эксплуатацию после капремонта"
                        var roIds = x
                            .Where(y => roIdsByProtocolCrList.Contains(y.Value.key))
                            .Select(y => y.Value.key)
                            .ToList();

                        //словарь плановых сумм по рабочим кодам
                        var aggregatedWorkPlanSumDict = aggregatedWorkSumCodes.ToDictionary(y => y, worksPlanSum);

                        //список плановых сумм по инженерным кодам
                        var totalEngeneerPlanSum = new List<string> { "1", "2", "4", "5", "6", "7" }.Select(y => aggregatedWorkPlanSumDict[y]).Sum();

                        //словарь плановых объемов по рабочим кодам
                        var aggregatedWorkPlanVolumeDict = aggregatedWorkVolumeCodes.ToDictionary(y => y, worksPlanVolume);

                        //словарь фактических сумм по рабочим кодам
                        var aggregatedWorkSumDict = aggregatedWorkSumCodes.ToDictionary(y => y, y => worksSum(y, roIds));

                        //словарь фактических объемов по рабочим кодам
                        var aggregatedWorkVolumeDict = aggregatedWorkVolumeCodes.ToDictionary(y => y, y => worksVolume(y, roIds));

                        //список фактических сумм по инженерным кодам
                        var totalEngeneerSum = new List<string> { "1", "2", "4", "5", "6", "7" }.Select(y => aggregatedWorkSumDict[y]).Sum();

                        //данные по домам, у которых есть акт "Акт ввода в эксплуатацию после капремонта"
                        aggregatedDataDict["roCount"] = roIds.Count();
                        aggregatedDataDict["areaMkd"] = x.Where(y => roIds.Contains(y.Value.key)).Sum(y => y.Value.AreaMkd) / 1000;
                        aggregatedDataDict["numberLiving"] = x.Where(y => roIds.Contains(y.Value.key)).Sum(y => y.Value.NumberLiving);
                        aggregatedDataDict["totalEngeneerSum"] = totalEngeneerSum;
                        aggregatedDataDict["totalSum"] = new List<string> { "12", "13", "14", "16" }.Select(y => aggregatedWorkSumDict[y]).Sum() + totalEngeneerSum;

                        //плановые данные по домам
                        aggregatedDataDict["PlanroCount"] = x.Count();
                        aggregatedDataDict["PlanareaMkd"] = x.Sum(y => y.Value.AreaMkd) / 1000;
                        aggregatedDataDict["PlannumberLiving"] = x.Sum(y => y.Value.NumberLiving);
                        aggregatedDataDict["PlantotalEngeneerSum"] = totalEngeneerPlanSum;
                        aggregatedDataDict["PlantotalSum"] = new List<string> { "12", "13", "14", "16" }.Select(y => aggregatedWorkPlanSumDict[y]).Sum() + totalEngeneerPlanSum;

                        return new { x.Key, aggregatedDataDict, aggregatedWorkPlanSumDict, aggregatedWorkSumDict, aggregatedWorkVolumeDict, aggregatedWorkPlanVolumeDict };
                    })
                .ToDictionary(x => x.Key);

            var fieldsName = new List<string>()
                {
                    "AreaMKD",
                    "PeopleCountMKD",
                    "EngSys",
                    "Device",
                    "RepNetElectro",
                    "RepNetTeplo",
                    "RepNetGas",
                    "RepNetWater",
                    "RepNetWaterDone",
                    "RoofArea",
                    "RoofPrice",
                    "LiftCount",
                    "LiftPrice",
                    "BasementArea",
                    "BasementPrice",
                    "FacadeArea",
                    "FacadePrice",
                    "CostOverhaul",
                    "Consumption",
                    "ActDate",
                    "ActSum",
                    "FinishReport"
                };

            var fieldDict = fieldsName.ToDictionary(x => x, x => string.Empty);
            var mufieldDict = fieldsName.ToDictionary(x => "Itogo" + x, x => new decimal());
            var totalfieldDict = fieldsName.ToDictionary(x => "TotalItogo" + x, x => new decimal());
            var count = 1;

            mufieldDict.Remove("ActDate");
            mufieldDict.Remove("FinishReport");

            var sectionMu = reportParams.ComplexReportParams.ДобавитьСекцию("section");
            var sectionRo = sectionMu.ДобавитьСекцию("sectionRo");

            //заполнение таблицы "1.1. Сведения о многоквартирных домах, в которых полностью завершены ремонтные работы"
            Action<decimal, decimal, string, string> fillReport = (a, b, fieldtype, code) =>
                {
                    reportParams.SimpleReportParams["type1_" + fieldtype + code] = a != 0 ? a.ToStr() : "-";
                    reportParams.SimpleReportParams["type2_" + fieldtype + code] = b != 0 ? b.ToStr() : "-";
                    reportParams.SimpleReportParams["type3_" + fieldtype + code] = Math.Abs(a - b) != 0 ? Math.Abs(a - b).ToStr() : "-";
                };

            //Передача сумм по кодам
            aggregatedWorkSumCodes.ForEach(x =>
            {
                var a = aggregatedData.ContainsKey(true) ? aggregatedData[true].aggregatedWorkPlanSumDict[x] : 0m;
                var b = aggregatedData.ContainsKey(true) ? aggregatedData[true].aggregatedWorkSumDict[x] : 0m;
                fillReport(a, b, "workSum_", x);
            });

            //Передача объемов по кодам
            aggregatedWorkVolumeCodes.ForEach(x =>
            {
                var a = aggregatedData.ContainsKey(true) ? aggregatedData[true].aggregatedWorkPlanVolumeDict[x] : 0m;
                var b = aggregatedData.ContainsKey(true) ? aggregatedData[true].aggregatedWorkVolumeDict[x] : 0m;

                if (x == "14")
                {
                    a = a * 1000;
                    b = b * 1000;
                }

                fillReport(a, b, "workVolume_", x);
            });

            //заполнение строк 1,2,3,4,19 в таблице 1.1
            aggregatedDataNames.ForEach(x =>
            {
                var a = aggregatedData.ContainsKey(true) ? aggregatedData[true].aggregatedDataDict["Plan" + x] : 0m;
                var b = aggregatedData.ContainsKey(true) ? aggregatedData[true].aggregatedDataDict[x] : 0m;
                fillReport(a, b, string.Empty, x);
            });

            foreach (var municipality in financeSourceResourceDict.Keys)
            {
                sectionMu.ДобавитьСтроку();

                mufieldDict.Keys.ToList().ForEach(x => mufieldDict[x] = 0);

                sectionMu["MOName"] = municipality;

                foreach (var realtyObject in financeSourceResourceDict[municipality].Values)
                {
                    fieldDict.Keys.ToList().ForEach(x => fieldDict[x] = string.Empty);

                    sectionRo.ДобавитьСтроку();

                    sectionRo["Num"] = count++;
                    sectionRo["LeavPoint"] = realtyObject.PlaceName;
                    sectionRo["StritName"] = realtyObject.StreetName;
                    sectionRo["HouseNum"] = realtyObject.House;
                    sectionRo["Corpus"] = realtyObject.Housing;

                    fieldDict["AreaMKD"] = realtyObject.AreaMkd != 0 ? realtyObject.AreaMkd.ToStr() : "-";
                    fieldDict["PeopleCountMKD"] = realtyObject.NumberLiving != 0 ? realtyObject.NumberLiving.ToStr() : "-";

                    if (TypeWorkCrByRoIdDict.ContainsKey(realtyObject.roId))
                    {
                        var value = TypeWorkCrByRoIdDict[realtyObject.roId];

                        Func<string, string> worksSum = workCode => value.workData.ContainsKey(workCode) && value.workData[workCode].costSum != 0 ? value.workData[workCode].costSum.ToStr() : "-";
                        Func<string, string> worksVol = workCode => value.workData.ContainsKey(workCode) && value.workData[workCode].volume != 0 ? value.workData[workCode].volume.ToStr() : "-";

                        fieldDict["EngSys"] = value.engeneerWorksSum != 0 ? value.engeneerWorksSum.ToStr() : "-";
                        fieldDict["Device"] = worksSum("7");
                        fieldDict["RepNetElectro"] = worksSum("6");
                        fieldDict["RepNetTeplo"] = worksSum("1");

                        fieldDict["RepNetGas"] = worksSum("5");
                        fieldDict["RepNetWater"] = worksSum("2");
                        fieldDict["RepNetWaterDone"] = worksSum("4");

                        fieldDict["RoofArea"] = worksVol("13");
                        fieldDict["RoofPrice"] = worksSum("13");

                        fieldDict["LiftCount"] = worksVol("14");
                        fieldDict["LiftPrice"] = worksSum("14");

                        fieldDict["BasementArea"] = worksVol("12");
                        fieldDict["BasementPrice"] = worksSum("12");

                        fieldDict["FacadeArea"] = worksVol("16");
                        fieldDict["FacadePrice"] = worksSum("16");

                        fieldDict["CostOverhaul"] = value.allWorksSum != 0 ? value.allWorksSum.ToStr() : "-";
                        fieldDict["Consumption"] = worksSum("1018");
                    }

                    fieldDict["ActDate"] = protocolCrByRoIdDict.ContainsKey(realtyObject.roId)
                                                && protocolCrByRoIdDict[realtyObject.roId].ContainsKey(TypeDocumentCr.ActExpluatatinAfterCr)
                                                ? protocolCrByRoIdDict[realtyObject.roId][TypeDocumentCr.ActExpluatatinAfterCr].Value.ToShortDateString()
                                                : "-";

                    fieldDict["ActSum"] = PerformedWorkActByRoIdDict.ContainsKey(realtyObject.roId) ? PerformedWorkActByRoIdDict[realtyObject.roId].Value.ToStr() : "-";

                    fieldDict["FinishReport"] = protocolCrByRoIdDict.ContainsKey(realtyObject.roId)
                                            && protocolCrByRoIdDict[realtyObject.roId].ContainsKey(TypeDocumentCr.ProtocolCompleteCr)
                                            ? protocolCrByRoIdDict[realtyObject.roId][TypeDocumentCr.ProtocolCompleteCr].Value.ToShortDateString()
                                            : "-";

                    foreach (var ro in fieldDict)
                    {
                        sectionRo[ro.Key] = ro.Value;
                        mufieldDict["Itogo" + ro.Key] += ro.Value != "-" ? ro.Value.ToDecimal() : 0;
                    }
                }

                foreach (var mu in mufieldDict)
                {
                    sectionMu[mu.Key] = mu.Value != 0 ? mu.Value.ToStr() : "-";
                    totalfieldDict["Total" + mu.Key] += mu.Value;
                }
            }

            foreach (var total in totalfieldDict)
            {
                reportParams.SimpleReportParams[total.Key] = total.Value != 0 ? total.Value.ToStr() : "-";
            }
        }