예제 #1
0
        /// <summary>
        /// Builds report
        /// </summary>
        /// <param name="table"><see cref="Table"/> entity</param>
        /// <returns><see cref="Report"/> instance</returns>
        public Report BuildReport(Table table)
        {
            if (table == null)
                throw new ArgumentNullException("table");

            if (table.Records.IsEmpty())
                throw new ArgumentException("table.records");

            var report = new Report();
            report.Year = table.Year;
            report.Month = table.Month;

            foreach (var groupedRecords in table.Records.GroupBy(x => x.Employee))
            {
                var employeeLine = new Report.EmployeeLine();
                employeeLine.FullName = groupedRecords.Key.LastName + " " + groupedRecords.Key.FirstName;
                employeeLine.Post = groupedRecords.Key.Post.ToString();

                employeeLine.FirstWeek.Records = groupedRecords.Take(RECORDS_COUNT_OF_WEEK);
                employeeLine.SecondWeek.Records = groupedRecords.Skip(RECORDS_COUNT_OF_WEEK).Take(groupedRecords.Count() - RECORDS_COUNT_OF_WEEK);

                CalcWeek(employeeLine.FirstWeek);
                CalcWeek(employeeLine.SecondWeek);
                CalcTotal(employeeLine);

                report.EmployeeLines.Add(employeeLine);
            }

            return report;
        }
예제 #2
0
        private void CalcTotal(Report.EmployeeLine employee)
        {
            var records = new List<TableRecord>();
            records.AddRange(employee.FirstWeek.Records);
            records.AddRange(employee.SecondWeek.Records);

            employee.TotalAppeareance = records.Count(x => x.Type == TableRecordType.Appearance);
            employee.TotalHours = records.Sum(x => x.Hours);
        }
예제 #3
0
        /// <summary>
        /// Gets excel document
        /// </summary>
        /// <param name="report"><see cref="Report"/> instance</param>
        /// <returns></returns>
        public XLWorkbook GetExcel(Report report)
        {
            if (report == null)
                throw new ArgumentNullException("report");

            var workbook = new XLWorkbook();
            var worksheet = workbook.Worksheets.Add(report.Year + "." + report.Month);

            var employeeLines = report.EmployeeLines;
            var count = employeeLines.Count;
            for(var i = 0; i < count; i++)
            {
                var row = worksheet.Row(i + 1);
                row.Cell("A").SetValue(employeeLines[i].FullName);

                worksheet.Range(String.Format("A{0}:A{0}", 1, 4)).Column(1).Merge();
            }

            return workbook;
        }
예제 #4
0
 private void CalcWeek(Report.WeekLine week)
 {
     week.TotalAppereance = week.Records.Count(x => x.Type == TableRecordType.Appearance);
     week.TotalHours = week.Records.Sum(x => x.Hours);
 }