| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- using GemBox.Spreadsheet;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using ClockifyReport.Models;
-
- namespace BlackRockReportFunction.Bussines
- {
- internal class ReportGenerator
- {
- public const string DefaultFontName = "DejaVu Sans";
- public const int DefaultFontSize = 20;
-
- public static ExcelFile GenerateReportContent(Root reportObject)
- {
- string licenseKey = Environment.GetEnvironmentVariable("GemBoxLicenseKey");
- SpreadsheetInfo.SetLicense(licenseKey);
-
- var excelFile = new ExcelFile();
-
- var ws = excelFile.Worksheets.Add("Content");
-
- var sectionStyle = new CellStyle
- {
- Font =
- {
- Name = DefaultFontName,
- Weight = ExcelFont.BoldWeight,
- Size = DefaultFontSize * 12,
- },
- VerticalAlignment = VerticalAlignmentStyle.Center,
- HorizontalAlignment = HorizontalAlignmentStyle.Left,
- };
-
- var mainDetailsStyle = new CellStyle
- {
- Font =
- {
- Name = DefaultFontName,
- Weight = ExcelFont.BoldWeight,
- Size = DefaultFontSize * 10,
- },
- VerticalAlignment = VerticalAlignmentStyle.Center,
- };
-
- var normalDetailsStyle = new CellStyle
- {
- Font =
- {
- Name = DefaultFontName,
- Weight = ExcelFont.NormalWeight,
- Size = DefaultFontSize * 10,
- },
- VerticalAlignment = VerticalAlignmentStyle.Center,
- };
-
- AddReportItems(reportObject, ws, sectionStyle, mainDetailsStyle, normalDetailsStyle);
-
- // Autofit
- AutoFitReport(excelFile);
-
- return excelFile;
- }
-
- public static void AddReportItems(Root reportObject, ExcelWorksheet ws, CellStyle sectionStyle, CellStyle mainDetailsStyle, CellStyle normalDetailsStyle)
- {
-
- TimeSpan t, time, time1;
- int row = 0;
- string[] sectionNames = { "User ", "Description ", "Time (h) ", "Time (decimal) " };
- decimal totalAmountSum = 0;
- List<string> usersDecimalHours = new List<string>();
-
- for (int i = 0; i < sectionNames.Length; i++)
- {
- ws.Cells[row, i].Style = sectionStyle;
- ws.Cells[row, i].Value = sectionNames[i];
- ws.Cells[row, i].Style.Borders[IndividualBorder.Right].LineStyle = LineStyle.Thin;
- ws.Cells[row, i].Style.Borders[IndividualBorder.Bottom].LineStyle = LineStyle.Thick;
- ws.Cells[row, i].Style.Borders[IndividualBorder.Bottom].LineColor = System.Drawing.Color.LightGray;
- }
-
- row++;
-
- foreach (var reportPerson in reportObject.groupOne)
- {
- ws.Cells[row, 0].Style = mainDetailsStyle;
- ws.Cells[row, 0].Style.Borders[IndividualBorder.Right].LineStyle = LineStyle.Thin;
- ws.Cells[row, 0].Value = reportPerson.name;
-
- ws.Cells[row, 1].Style.Borders[IndividualBorder.Right].LineStyle = LineStyle.Thin;
-
- time = TimeSpan.FromSeconds(reportPerson.duration);
- var sumOfRecordHours = string.Format("{0:00}:{1:D2}:{2:D2}", Math.Floor(time.TotalHours), time.Minutes, time.Seconds);
- ws.Cells[row, 2].Style = mainDetailsStyle;
- ws.Cells[row, 2].Style.HorizontalAlignment = HorizontalAlignmentStyle.Right;
- ws.Cells[row, 2].Style.Borders[IndividualBorder.Right].LineStyle = LineStyle.Thin;
- ws.Cells[row, 2].Value = sumOfRecordHours;
-
- ws.Cells[row, 3].Style = mainDetailsStyle;
- ws.Cells[row, 3].Style.HorizontalAlignment = HorizontalAlignmentStyle.Right;
- ws.Cells[row, 3].Style.Borders[IndividualBorder.Right].LineStyle = LineStyle.Thin;
- var userDecimalHours = Convert.ToDecimal(TimeSpan.FromSeconds(reportPerson.duration).TotalHours).ToString("0.00"); ;
- ws.Cells[row, 3].Value = userDecimalHours;
- usersDecimalHours.Add(userDecimalHours);
-
-
- row++;
-
- foreach (var personRecord in reportPerson.children)
- {
- ws.Cells[row, 0].Style.Borders[IndividualBorder.Right].LineStyle = LineStyle.Thin;
-
- ws.Cells[row, 1].Style = normalDetailsStyle;
- ws.Cells[row, 1].Style.Borders[IndividualBorder.Right].LineStyle = LineStyle.Thin;
- ws.Cells[row, 1].Value = personRecord.name;
-
- ws.Cells[row, 2].Style = normalDetailsStyle;
- ws.Cells[row, 2].Style.HorizontalAlignment = HorizontalAlignmentStyle.Right;
- ws.Cells[row, 2].Style.Borders[IndividualBorder.Right].LineStyle = LineStyle.Thin;
- t = TimeSpan.FromSeconds(personRecord.duration);
- ws.Cells[row, 2].Value = string.Format("{0:00}:{1:D2}:{2:D2}", Math.Floor(t.TotalHours), t.Minutes, t.Seconds);
-
- ws.Cells[row, 3].Style = normalDetailsStyle;
- ws.Cells[row, 3].Style.HorizontalAlignment = HorizontalAlignmentStyle.Right;
- ws.Cells[row, 3].Style.Borders[IndividualBorder.Right].LineStyle = LineStyle.Thin;
- ws.Cells[row, 3].Value = Convert.ToDecimal(TimeSpan.FromSeconds(personRecord.duration).TotalHours).ToString("0.00");
-
-
-
- row++;
- }
- }
-
-
-
- var totalSum = reportObject.totals.Select(total => total.totalTime).FirstOrDefault();
-
- ws.Cells[row, 0].Style = mainDetailsStyle;
- ws.Cells[row, 0].Style.Borders[IndividualBorder.Right].LineStyle = LineStyle.Thin;
- ws.Cells[row, 0].Value = "Total";
-
- ws.Cells[row, 2].Style = mainDetailsStyle;
- ws.Cells[row, 2].Style.HorizontalAlignment = HorizontalAlignmentStyle.Right;
- ws.Cells[row, 2].Style.Borders[IndividualBorder.Right].LineStyle = LineStyle.Thin;
- time1 = t = TimeSpan.FromSeconds(totalSum);
- ws.Cells[row, 2].Value = string.Format("{0:00}:{1:D2}:{2:D2}", Math.Floor(time1.TotalHours), time1.Minutes, time1.Seconds);
-
- ws.Cells[row, 3].Style = mainDetailsStyle;
- ws.Cells[row, 3].Style.HorizontalAlignment = HorizontalAlignmentStyle.Right;
- ws.Cells[row, 3].Style.Borders[IndividualBorder.Right].LineStyle = LineStyle.Thin;
- ws.Cells[row, 3].Value = Convert.ToDecimal(TimeSpan.FromSeconds(totalSum).TotalHours).ToString("0.00"); ;
-
-
- }
-
- public static void AutoFitReport(ExcelFile excelFile)
- {
- foreach (var sheet in excelFile.Worksheets)
- {
- var columnCount = sheet.CalculateMaxUsedColumns();
-
- for (int i = 0; i < columnCount; i++)
- {
- sheet.Columns[i].AutoFit(1, sheet.Rows[0], sheet.Rows[sheet.Rows.Count - 1]);
- }
- }
- }
- }
- }
|