Files
BeWoPlaner/Report/ReportObjects/AbsenceRO.cs

167 lines
4.5 KiB
C#

using System;
using System.Collections.Generic;
using BeWo.Data.Entities;
using BeWo.Data.Access;
using System.Linq;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
namespace BeWo.Report.ReportObjects
{
public class AbsenceRO : AbstractBeWoReportObject<AbsenceRO>
{
public AbsenceOverviewFilterDC ReportFilter { get; set; }
public List<AbsenceReportRow> AbsenceReportRows { get; set; }
public List<CompactTeamDC> Teams { get; set; }
public List<int> Feiertage { get; set; }
public static AbsenceRO Create(List<EmployeeDC> employees, AbsenceOverviewFilterDC filter, List<CompactTeamDC> teams, List<int> feiertage)
{
var res = new AbsenceRO() { ReportFilter = filter, AbsenceReportRows = new List<AbsenceReportRow>() };
var dt = new DateTime(filter.Year, filter.Month, 1);
res.Teams = teams;
res.Feiertage = feiertage;
foreach (var emp in employees)
{
var row = new AbsenceReportRow
{
Employee = emp.LastNameFirstName
};
var absenceTimes = emp.AbsenceTimes
.OrderByDescending(x => x.End ?? DateTime.MaxValue)
.OrderBy(x => x.Start)
.ToArray();
int dayInMonth = 0;
int absNum = 0;
if (absenceTimes != null && absenceTimes.Length > 0)
{
var abs = absenceTimes[0];
while (dayInMonth < DateTime.DaysInMonth(filter.Year, filter.Month))
{
if (abs.Start.Value > dt.AddDays(dayInMonth))
{
dayInMonth++;
continue;
}
if ((abs.End ?? DateTime.MaxValue) < dt.AddDays(dayInMonth))
{
absNum++;
if (absNum >= absenceTimes.Length)
break;
abs = absenceTimes[absNum];
continue;
}
row.Days[dayInMonth++] = new CellValue()
{
Value = abs.Reason.Description[0].ToString(),
//Color = abs.Reason.Color
Color = "#FFFFFF00"
};
}
}
res.AbsenceReportRows.Add(row);
}
return res;
}
}
public class AbsenceReportRow
{
public AbsenceReportRow()
{
Days = new CellValue[31];
}
public string Employee { get; set; }
public int Position { get; set; }
public CellValue[] Days { get; private set; }
public CellValue Day1 => Days[0];
public CellValue Day2 => Days[1];
public CellValue Day3 => Days[2];
public CellValue Day4 => Days[3];
public CellValue Day5 => Days[4];
public CellValue Day6 => Days[5];
public CellValue Day7 => Days[6];
public CellValue Day8 => Days[7];
public CellValue Day9 => Days[8];
public CellValue Day10 => Days[9];
public CellValue Day11 => Days[10];
public CellValue Day12 => Days[11];
public CellValue Day13 => Days[12];
public CellValue Day14 => Days[13];
public CellValue Day15 => Days[14];
public CellValue Day16 => Days[15];
public CellValue Day17 => Days[16];
public CellValue Day18 => Days[17];
public CellValue Day19 => Days[18];
public CellValue Day20 => Days[19];
public CellValue Day21 => Days[20];
public CellValue Day22 => Days[21];
public CellValue Day23 => Days[22];
public CellValue Day24 => Days[23];
public CellValue Day25 => Days[24];
public CellValue Day26 => Days[25];
public CellValue Day27 => Days[26];
public CellValue Day28 => Days[27];
public CellValue Day29 => Days[28];
public CellValue Day30 => Days[29];
public CellValue Day31 => Days[30];
}
public class CellValue
{
public string Value { get; set; }
public string Color { get; set; }
public override string ToString()
{
return Value;
}
}
}