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 } }); }
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 } }); }
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)); } }
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(); }
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); }
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); }
/// <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); }
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; }
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)); }
public virtual IActionResult GetData([FromBody] ReportParams model) { var data = Service.GetData(model); return(new JsonActionResult( data, data?.Count )); }
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) } }); }
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) } }); }
//[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"; }
// 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); }
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"); } }
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); }
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)); }
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)); } }
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; }
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; }
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() : "-"; } }