public string GetComboBoxDetailValue(BizComboBox comboBox, AttrDef attrDef) { if (comboBox.Value == null) { return(null); } if (attrDef == null) { switch (comboBox.Ident) { case SystemIdent.OrgId: case SystemIdent.OrgCode: case SystemIdent.OrgName: return(GetEnumOrganizationValue((Guid)comboBox.Value)); case SystemIdent.UserId: case SystemIdent.UserName: return(GetEnumUserValue((Guid)comboBox.Value)); } return(null); } if (attrDef.Type.Id == (short)CissaDataType.Doc && attrDef.DocDefType != null) { return (_repositories.Where(pair => pair.Key.DataType.HasFlag(DataContextType.Document)) .Select(pair => pair.Value.GetComboBoxDetailValue(comboBox, attrDef)) .FirstOrDefault()); } if (attrDef.Type.Id == (short)CissaDataType.Enum && attrDef.EnumDefType != null) { return(_enumRepo.GetEnumValue(attrDef.EnumDefType.Id, (Guid)comboBox.Value)); } if (attrDef.Type.Id == (short)CissaDataType.Organization) { return(GetEnumOrganizationValue((Guid)comboBox.Value)); } if (attrDef.Type.Id == (short)CissaDataType.User) { return(GetEnumUserValue((Guid)comboBox.Value)); } return(null); }
private void CreateReport(string reportName, IEnumerable <Doc> docs, BizTableReport reportData) { // adding page header var pageHeaderString = reportData.PageHeaders.Aggregate("", (current, pageHeader) => current + pageHeader + "\n"); _report.AddPageHeader(pageHeaderString, Position.Centre); // adding page footer var pageFooterString = reportData.PageFooters.Aggregate("", (current, pageFooter) => current + pageFooter + "\n"); _report.AddPageFooter(pageFooterString, Position.Centre); // adding empty rows for logo _report.AddEmptyRows(6); // report header foreach (string reportHeader in reportData.ReportHeaders) { var headerRow = _report.GetNextRow(); _report.AddCell(reportHeader, 0, headerRow, TextStyle.Header2); } // Report table Row row = _report.GetNextRow(); _report.AddCell(reportName, 0, row, TextStyle.Header1); _report.SetRowHeight(row, 22); if (reportData.ReportDetails != null) { foreach (BizReportDetail repDetail in reportData.ReportDetails) { int rowShift = _report.CurrentRowIndex + 2; for (int rowIndex = 0; rowIndex < repDetail.ChildrenCountLevels; rowIndex++) { for (int columnIndex = 0; columnIndex < repDetail.LeafCount; columnIndex++) { _report.AddCell("", columnIndex, rowShift + rowIndex, TextStyle.TableHeaderGreyCenterdBorder); } } WriteReportDetail(repDetail, rowShift - 1, repDetail.ChildrenCountLevels, 0); foreach (Doc doc in docs) { Row tableRow = _report.GetNextRow(); int colIndex = 0; foreach (ReportColumn col in GetColumns(repDetail)) { Guid attrId = col.AttributeId; IEnumerable <AttributeBase> findAttrQuery = from a in doc.Attributes where a.AttrDef.Id == attrId select a; if (findAttrQuery.Any()) { AttributeBase findedAttr = findAttrQuery.First(); if (findedAttr is EnumAttribute) { var enumAttribute = findedAttr as EnumAttribute; if (enumAttribute.Value.HasValue) { string enumValue = _enumRepository.GetEnumValue(enumAttribute.AttrDef.EnumDefType.Id, enumAttribute.Value.Value); _report.AddCell(enumValue, colIndex, tableRow, TextStyle.TableRowNormal); } } else { _report.AddCell(findedAttr.ObjectValue, colIndex, tableRow, TextStyle.TableRowNormal); } } else { _report.AddCell("", colIndex, tableRow, TextStyle.TableRowNormal); } colIndex++; } } Row aggregatesRow = _report.GetNextRow(); int aggrColIndex = 0; foreach (ReportColumn col in GetColumns(repDetail)) { /* atr.AttrDef.Type.Id * 1 Int * 2 Currency * 3 Text * 4 Float * 5 Enum * 6 Doc * 7 DocList * 8 Bool * 9 DateTime */ Guid attrId = col.AttributeId; IEnumerable <AttributeBase> attrQuery = from atr in docs.SelectMany(d => d.Attributes) where atr.AttrDef.Id == attrId select atr; object aggregateValue; switch (col.AggregateOperation) { case AggregateOperation.Count: aggregateValue = attrQuery.Count(); break; case AggregateOperation.Avg: var q1 = attrQuery.Where(atr => (new[] { 1, 2, 4 }).Contains(atr.AttrDef.Type.Id)); aggregateValue = q1.Any() ? q1.Average(a => double.Parse((a.ObjectValue ?? 0).ToString())) : 0; break; case AggregateOperation.Sum: var q2 = attrQuery.Where(atr => (new[] { 1, 2, 4 }).Contains(atr.AttrDef.Type.Id)); aggregateValue = q2.Any() ? q2.Sum(a => double.Parse((a.ObjectValue ?? 0).ToString())) : 0; break; case AggregateOperation.Max: aggregateValue = attrQuery.Where(atr => (new[] { 1, 2, 4, 9 }).Contains(atr.AttrDef.Type.Id)).Max( a => a.ObjectValue); break; case AggregateOperation.Min: aggregateValue = attrQuery.Where(atr => (new[] { 1, 2, 4, 9 }).Contains(atr.AttrDef.Type.Id)).Min( a => a.ObjectValue); break; default: aggregateValue = ""; break; } _report.AddCell(aggrColIndex == 0 ? "Итог" : aggregateValue, aggrColIndex, aggregatesRow, TextStyle.TableTotal); aggrColIndex++; } } } _report.AddEmptyRow(); // report footer foreach (string reportFooter in reportData.ReportFooters) { var headerRow = _report.GetNextRow(); _report.AddCell(reportFooter, 0, headerRow, TextStyle.Header2); } // report logo // adding logo after all other operations, because it can be resized. _report.AddLogo(0, 0); }
private void CreateReport(string reportName, IEnumerable <Doc> docs, Doc docTemplate) { _report.AddEmptyRows(6); Row row = _report.GetNextRow(); _report.AddCell(reportName, 0, row, TextStyle.Header1); _report.SetRowHeight(row, 22); if (docs == null) { return; } var enumerable = docs as Doc[] ?? docs.ToArray(); if (!enumerable.Any()) { return; } Row rowHeader = _report.GetNextRow(); int columnIndex = 0; foreach (AttributeBase attribute in docTemplate.Attributes) { AttributeBase attribute1 = attribute; _report.AddCell(attribute1.AttrDef.Name, columnIndex, rowHeader, TextStyle.TableHeaderGreyCenterdBorder); int colWidth = enumerable.SelectMany(d => d.Attributes) .Where(a => a.AttrDef.Id == attribute1.AttrDef.Id && a.ObjectValue != null) .Select(aa => aa.ObjectValue.ToString().Length).Max(); _report.SetColumnWidth(columnIndex, colWidth); columnIndex++; } foreach (Doc doc in enumerable) { var tableRow = _report.GetNextRow(); var colIndex = 0; foreach (var attr in docTemplate.Attributes) { var attr1 = attr; var findAttrQuery = (from a in doc.Attributes where a.AttrDef.Id == attr1.AttrDef.Id select a).ToList(); if (findAttrQuery.Any()) { var findedAttr = findAttrQuery.First(); if (findedAttr is EnumAttribute) { var enumAttribute = findedAttr as EnumAttribute; if (enumAttribute.Value.HasValue) { string enumValue = _enumRepository.GetEnumValue(enumAttribute.AttrDef.EnumDefType.Id, enumAttribute.Value.Value); _report.AddCell(enumValue, colIndex, tableRow, TextStyle.NormalText); } } else { _report.AddCell(findedAttr.ObjectValue, colIndex, tableRow, TextStyle.NormalText); } } colIndex++; } } _report.AddLogo(0, 0); }
public string GetComboBoxDetailValue(BizComboBox comboBox, AttrDef attrDef) { if (comboBox.Value == null) { return(null); } if (attrDef == null) { switch (comboBox.Ident) { case SystemIdent.OrgId: case SystemIdent.OrgCode: case SystemIdent.OrgName: return(GetEnumOrganizationValue((Guid)comboBox.Value)); case SystemIdent.UserId: case SystemIdent.UserName: return(GetEnumUserValue((Guid)comboBox.Value)); } return(null); } if (attrDef.Type.Id == (short)CissaDataType.Doc && attrDef.DocDefType != null) { var detailDocDef = _docDefRepo.DocDefById(attrDef.DocDefType.Id); AttrDef detailAttrDef; if (comboBox.DetailAttributeId != null) { detailAttrDef = detailDocDef.Attributes.FirstOrDefault(ad => ad.Id == comboBox.DetailAttributeId); } else { detailAttrDef = detailDocDef.Attributes.FirstOrDefault( ad => String.Equals(ad.Name, comboBox.DetailAttributeName, StringComparison.OrdinalIgnoreCase)) ?? detailDocDef.Attributes.FirstOrDefault(ad => ad.Type.Id == (int)CissaDataType.Text); } if (detailAttrDef == null) { return(null); } var sqlQueryBuilder = _sqlQueryBuilderFactory.Create(); using (var query = sqlQueryBuilder.Build(comboBox, detailDocDef.Id)) { query.AddAttribute("&Id"); query.AddAttribute(detailAttrDef.Id); query.AndCondition("&Id", ConditionOperation.Equal, comboBox.Value); using (var reader = _sqlQueryReaderFactory.Create(query)) { if (reader.Read()) { return(!reader.IsDbNull(1) ? reader.GetString(1) : String.Empty); } } } } else if (attrDef.Type.Id == (short)CissaDataType.Enum && attrDef.EnumDefType != null) { return(_enumRepo.GetEnumValue(attrDef.EnumDefType.Id, (Guid)comboBox.Value)); } else if (attrDef.Type.Id == (short)CissaDataType.Organization) { return(GetEnumOrganizationValue((Guid)comboBox.Value)); } else if (attrDef.Type.Id == (short)CissaDataType.User) { return(GetEnumUserValue((Guid)comboBox.Value)); } return(null); }