Files
BeWoPlaner/Report/ReportObjects/SbdStundenaufstellungRO.cs

977 lines
34 KiB
C#
Raw Normal View History

2018-10-08 12:09:48 +02:00
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using BeWo.Data;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.Configuration;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.Plugins;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using BS.Shared.Services;
using BS.Shared.Extensions;
namespace BeWo.Report.ReportObjects
{
public class SbdStundenaufstellungRO : AbstractBeWoReportObject<SbdStundenaufstellungRO>
{
private List<SbdServiceDetail> _Services = new List<SbdServiceDetail>();
public long CustomerOid { get; set; }
public string AbsenceTimes { get; set; }
public List<AbsenceTime> Abwesenheiten { get; set; }
public DateTime? ApprovedStartDate { get; set; }
public DateTime? ApprovedEndDate { get; set; }
public decimal ApprovedPerMonth { get; set; }
public decimal ApprovedPerWeek { get; set; }
public decimal ApprovedTotal { get; set; }
public DateTime? CustomerBirthday { get; set; }
public string CustomerCity { get; set; }
public string CustomerFirstName { get; set; }
public string CustomerLastName { get; set; }
public string CustomerName { get; set; }
public string CustomerAlias { get; set; }
public string CustomerPostalCode { get; set; }
public string CustomerStreet { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
2018-11-22 14:05:45 +01:00
public string EmployeeName { get; set; }
2018-10-08 12:09:48 +02:00
public string EmployeePersonalNumber { get; set; }
public string ReferenceNumber { get; set; }
public string Salutation { get; set; }
public CompactOrganisationDC Schule { get; set; }
public SupportConceptCostBearerRelDC SupportConceptCostBearer { get; set; }
public MandatorDC Mandator { get; set; }
public List<SbdServiceDetail> Services
{
get
{
return this._Services;
}
set
{
this._Services = value;
}
}
public static List<SbdStundenaufstellungRO> Create(int pMonth, int pYear, long orgaOid, long empOid, long serviceCategoryOid, int startDay, int endDay)
{
var roList = new List<SbdStundenaufstellungRO>();
IList<Customer> customers = null;
ApplicationUser loggedInUser = null;
if (LoggedInUserOperationContextExt.Current != null && LoggedInUserOperationContextExt.Current.User != null)
{
loggedInUser = LoggedInUserOperationContextExt.Current.User;
}
else
{
loggedInUser = SessionFacade.LoggedInUser;
}
if (loggedInUser != null && loggedInUser.Employee != null)
{
if (!HasRight(loggedInUser, UserRightType.CustomerView_View))
{
customers = new List<Customer>();
Dictionary<long, bool> customerOidDict = new Dictionary<long, bool>();
if (HasRight(loggedInUser, UserRightType.Customer_ViewMyTeams))
{
foreach (var t in loggedInUser.Employee.LeadingTeams)
{
var teamCustomers = DAOFactory.SearchDAO.FindCustomerOfTeam(t.Oid.Value);
foreach (var c in teamCustomers)
{
if (!customerOidDict.ContainsKey(c.Oid.Value))
{
customers.Add(c);
customerOidDict.Add(c.Oid.Value, true);
}
}
}
}
else
{
foreach (var e2c in loggedInUser.Employee.Employee2CustomerList)
{
customers.Add(e2c.Customer);
}
}
}
}
if (customers == null)
{
customers = DAOFactory.GenericDAO.GetAllActive<Customer>();
}
if (startDay > endDay)
{
int temp = startDay;
startDay = endDay;
endDay = temp;
}
var pSpan = new DateTimeSpan();
pSpan.StartDateTime = new DateTime(pYear, pMonth, startDay);
pSpan.EndDateTime = pSpan.StartDateTime.AddDays(endDay - startDay + 1).AddTicks(-1);
// IList<Customer> customers = DAOFactory.SearchDAO.GetAllCustomerWithServiceRecordsInSpan(pSpan).OrderBy(ob => ob.Person.LastName + ", " + ob.Person.FirstName).ToList();
foreach (Customer customer in customers)
{
2018-11-22 14:05:45 +01:00
var rolist = Create(customer, pSpan, orgaOid, empOid, serviceCategoryOid, true);
if (rolist != null)
2018-10-08 12:09:48 +02:00
{
2018-11-22 14:05:45 +01:00
roList.AddRange(rolist);
2018-10-08 12:09:48 +02:00
}
}
return roList.OrderBy(r => r.CustomerLastName + ", " + r.CustomerFirstName).ToList();
// return DAOFactory.SearchDAO.FindSupportConceptsInSpan(pSpan).OrderBy(ob => ob.Customer.Person.LastName + ", " + ob.Customer.Person.FirstName).Select(
// sc => Create(sc.Customer.Oid.Value, pMonth, pYear, true)).ToList();
}
private static bool HasRight(ApplicationUser user, UserRightType right)
{
return GetGrantedRights(user).Contains(right);
}
public static List<UserRightType> GetGrantedRights(ApplicationUser user)
{
var rights = new List<UserRightType>();
foreach (var ug in user.UserGroups)
{
foreach (var rr in ug.Rights)
{
rights.Add(rr.RightType);
}
}
return rights;
}
2018-11-22 14:05:45 +01:00
public static List<SbdStundenaufstellungRO> Create(long pCustomerOid, int pMonth, int pYear, long orgaOid, long empOid, long serviceCategoryOid, int start, int end, bool disableEmptySupportConcepts = false)
2018-10-08 12:09:48 +02:00
{
var pSpan = new DateTimeSpan();
if (start > end)
{
int temp = start;
start = end;
end = temp;
}
pSpan.StartDateTime = new DateTime(pYear, pMonth, start);
pSpan.EndDateTime = pSpan.StartDateTime.AddDays(end - start + 1).AddTicks(-1);
2019-07-12 17:36:37 +02:00
var resultList = new List<SbdStundenaufstellungRO>();
Customer c = null;
if (pCustomerOid > 0)
{
c = DAOFactory.GenericDAO.LoadByID<Customer>(pCustomerOid);
resultList.AddRange(Create(c, pSpan, orgaOid, empOid, serviceCategoryOid, disableEmptySupportConcepts));
}
else if (empOid > 0)
{
var emp = DAOFactory.GenericDAO.LoadByID<Employee>(empOid);
foreach (var e2c in emp.Employee2CustomerList)
{
2019-12-09 11:38:52 +01:00
if (e2c.Customer.IsActive == ActivationTypeId.Active)
{
resultList.AddRange(Create(e2c.Customer, pSpan, orgaOid, empOid, serviceCategoryOid,
disableEmptySupportConcepts));
}
2019-07-12 17:36:37 +02:00
}
}
return resultList;
2018-10-08 12:09:48 +02:00
}
2019-12-09 11:38:52 +01:00
public static List<SbdStundenaufstellungRO> Create(Customer cust, DateTimeSpan span, long orgaOid, long empOid, long serviceCategoryOid, bool disableEmptySupportConcepts)
2018-10-08 12:09:48 +02:00
{
2018-11-22 14:05:45 +01:00
var resultList = new List<SbdStundenaufstellungRO>();
2018-10-08 12:09:48 +02:00
2018-11-22 14:05:45 +01:00
Dictionary<long, SbdStundenaufstellungRO> employeeOid2Ro = new Dictionary<long, SbdStundenaufstellungRO>();
2018-10-08 12:09:48 +02:00
2019-07-12 17:36:37 +02:00
Dictionary<int, SbdServiceDetail> day2Details = new Dictionary<int, SbdServiceDetail>();
//IList<ServiceRecord> lServiceRecords = null;
//if (cust != null)
//{
// lServiceRecords = DAOFactory.SearchDAO
// .FindCustomerServiceRecords(cust.Oid.Value, span, null, null, false).OrderBy(s => s.Start)
// .ToList();
//}
//else
//{
// lServiceRecords = new List<ServiceRecord>();
//}
var eintraege = ErstelleStundenplanEintraege(cust, empOid, span.StartDate, span.EndDate);
2018-10-08 12:09:48 +02:00
2018-11-22 14:05:45 +01:00
foreach (var sd in eintraege)
2018-10-08 12:09:48 +02:00
{
day2Details.Add(sd.StartDate.Day, sd);
}
2019-07-12 17:36:37 +02:00
2018-10-08 12:09:48 +02:00
var cb2scs = new Dictionary<long, SupportConceptCostBearerRelDC>();
var groupBookingDict = new Dictionary<long, ServiceRecord>();
2019-07-12 17:36:37 +02:00
//bool deleteEntries = false;
2018-10-08 12:09:48 +02:00
2019-07-12 17:36:37 +02:00
// foreach (var iSr in lServiceRecords)
// {
2018-10-08 12:09:48 +02:00
2019-07-12 17:36:37 +02:00
// bool cont = !(empOid != 0 && iSr.EmployeeOid != null && iSr.EmployeeOid != empOid);
2018-10-08 12:09:48 +02:00
2019-07-12 17:36:37 +02:00
// if (cont)
// {
// cont = day2Details.ContainsKey(iSr.Start.Value.Day);
// }
// CostBearer2SupportConcept cb2sc = null;
// if (cont)
// {
// cb2sc = iSr.CostBearer2SupportConcept;
// }
// if (cb2sc == null)
// {
// cont = false;
// }
// else if (cont && orgaOid != 0 && cb2sc.CostBearer.Organisation != null && cb2sc.CostBearer.Organisation.Oid.Value != orgaOid)
// {
// cont = false;
// }
// if (cont)
// {
// if (cb2sc.SupportConcept.IsActive == ActivationTypeId.Deleted)
// {
// cont = false;
// }
// }
// if (cont && iSr.GroupOid != null && groupBookingDict.ContainsKey(iSr.GroupOid.Value))
// {
// cont = false;
// }
// if (cont && serviceCategoryOid > 0 && iSr.ServiceDescription.ServiceCategory.Oid != serviceCategoryOid)
// cont = false;
// if (cont)
// {
2018-10-08 12:09:48 +02:00
2019-07-12 17:36:37 +02:00
// SbdStundenaufstellungRO ro = null;
// if (employeeOid2Ro.ContainsKey(iSr.EmployeeOid.Value))
// {
// ro = employeeOid2Ro[iSr.EmployeeOid.Value];
// }
// else
// {
// ro = CreateInitalRo(cust, span, iSr.Employee, 0);
// employeeOid2Ro.Add(iSr.EmployeeOid.Value, ro);
// resultList.Add(ro);
// }
// ro.ApprovedStartDate = cb2sc.StartDate;
// ro.ApprovedEndDate = cb2sc.EndDate;
// if (!cb2scs.ContainsKey(cb2sc.Oid.Value))
// {
// var cb2scDC = cb2sc.MapToNewDC();
2018-10-08 12:09:48 +02:00
2019-07-12 17:36:37 +02:00
// var calc = PluginLoader.FindClass<Calculations>(cb2sc.CostBearer.ID) ?? Calculations.GetInstance(cb2sc.CostBearer.ID);
2018-10-08 12:09:48 +02:00
2019-07-12 17:36:37 +02:00
// DateTime sdt = span.StartDateTime;
// if (sdt < cb2scDC.StartDate)
// sdt = cb2scDC.StartDate.Value;
// ro.ApprovedPerWeek = calc.GetApprovedHoursPerWeek(cb2scDC, sdt, false) ?? 0;
2018-10-08 12:09:48 +02:00
2019-07-12 17:36:37 +02:00
// ro.ApprovedTotal = calc.GetApprovedHoursTotal(cb2scDC, false) ?? 0;
2018-10-08 12:09:48 +02:00
2019-07-12 17:36:37 +02:00
// cb2scs.Add(cb2sc.Oid.Value, cb2scDC);
// }
// deleteEntries = true;
2018-10-08 12:09:48 +02:00
2019-07-12 17:36:37 +02:00
// var sd = day2Details[iSr.Start.Value.Day];
// sd.CostBearer = iSr.CostBearer2SupportConcept != null &&
// iSr.CostBearer2SupportConcept.CostBearer.Organisation != null
// ? iSr.CostBearer2SupportConcept.CostBearer.Organisation.Name
// : string.Empty;
// sd.StartDate = iSr.Start.Value;
2018-10-08 12:09:48 +02:00
2019-07-12 17:36:37 +02:00
//sd.ServiceRecordOid = iSr.Oid.Value;
// sd.SignatureOid = iSr.SignatureOid;
2018-10-08 12:09:48 +02:00
2019-07-12 17:36:37 +02:00
// decimal roundedDur = iSr.RoundedDuration;
// if (iSr.ServiceDescription != null && iSr.ServiceDescription.ServiceCategory != null && iSr.ServiceDescription.ServiceCategory.Percentage != 100)
// {
// roundedDur = (roundedDur * iSr.ServiceDescription.ServiceCategory.Percentage) / 100;
// }
2018-10-08 12:09:48 +02:00
2019-07-12 17:36:37 +02:00
// sd.Minutes = Convert.ToDouble(roundedDur);
2018-10-08 12:09:48 +02:00
2019-07-12 17:36:37 +02:00
// if (iSr.GroupEmployeeCount != null)
// {
// sd.EmployeeCount = iSr.GroupEmployeeCount.Value;
// }
// else
// {
// sd.EmployeeCount = 1;
// }
// if (iSr.GroupPersonCount != null)
// {
// sd.CustomerCount = iSr.GroupPersonCount.Value;
// }
// else
// {
// sd.CustomerCount = 1;
// }
// sd.GroupRoundedDuration = iSr.GroupRoundedDuration;
// if (iSr.GroupRoundedDuration != null)
// {
// sd.GroupMinutes = (double)iSr.GroupRoundedDuration.Value;
// }
// else
// {
// sd.GroupMinutes = sd.Minutes;
// }
// if (iSr.GroupOid != null)
// {
// sd.IsGroup = true;
// groupBookingDict.Add(iSr.GroupOid.Value, iSr);
// }
2018-10-08 12:09:48 +02:00
2019-07-12 17:36:37 +02:00
// sd.EndDate = sd.StartDate.AddMinutes(sd.GroupMinutes);
// sd.EndDateNotRounded = iSr.End.Value;
// if (sd.StartDate.Second == 0)
// {
// var timeRange = String.Format("{0}-{1}", sd.StartDate.ToShortTimeString(), sd.EndDate.ToShortTimeString());
// if (sd.StundenplanUhrzeiten1 != timeRange && sd.StundenplanUhrzeiten2 != timeRange)
// {
// if (String.IsNullOrWhiteSpace(sd.IstUhrzeiten1))
// {
// sd.IstUhrzeiten1 = String.Format("{0}-{1}", sd.StartDate.ToShortTimeString(),
// sd.EndDate.ToShortTimeString());
// }
// else if (String.IsNullOrWhiteSpace(sd.IstUhrzeiten2))
// {
// sd.IstUhrzeiten2 = String.Format("{0}-{1}", sd.StartDate.ToShortTimeString(),
// sd.EndDate.ToShortTimeString());
// }
// else
// {
// sd.IstUhrzeiten2 += String.Format(", {0}-{1}", sd.StartDate.ToShortTimeString(),
// sd.EndDate.ToShortTimeString());
// }
// }
// sd.StartDateMinutes = sd.StartDate;
// sd.EndDateMinutes = sd.EndDate;
// }
2018-10-08 12:09:48 +02:00
2019-07-12 17:36:37 +02:00
// sd.StartDateString = iSr.Start.Value.ToShortDateString();
// sd.KW = GetKW(sd.StartDate);
// string employeeAbbr = iSr.Employee.Person.Abbreviation;
// string employeeFullName = iSr.Employee.Person.FirstName + " " + iSr.Employee.Person.LastName;
// if (employeeAbbr == null || employeeAbbr.Length == 0)
// {
// employeeAbbr = iSr.Employee.Person.FirstName.Substring(0, 1) + ". " + iSr.Employee.Person.LastName;
// }
// sd.EmployeeAbbr = employeeAbbr;
// sd.EmployeeFullname = employeeFullName;
// sd.EmployeeFirstName = iSr.Employee.Person.FirstName;
// sd.EmployeeLastName = iSr.Employee.Person.LastName;
// sd.EmployeeOid = iSr.Employee.Oid.Value;
// sd.Notice = iSr.Notice;
// sd.Notice2 = iSr.Notice2;
// sd.Notice3 = iSr.Notice3;
// sd.Notice4 = iSr.Notice4;
// sd.Notice5 = iSr.Notice5;
// if (iSr.ServiceDescription != null)
// {
// sd.ServiceDescription = iSr.ServiceDescription.Name;
// sd.ServiceCategory = iSr.ServiceDescription.ServiceCategory.Name;
// sd.ServiceCategoryAbbr = iSr.ServiceDescription.ServiceCategory.Abbreviation;
// if (sd.ServiceCategoryAbbr == null || sd.ServiceCategoryAbbr.Length == 0)
// {
// sd.ServiceCategoryAbbr = iSr.ServiceDescription.ServiceCategory.Name;
// }
// }
// sd.IsBillable = iSr.ServiceDescription.ServiceCategory.IsBillable;
// }
// }
//Lösche alle Stundenplaneinträge für die es keinen ServiceRecord gibt, sobald mindestens ein ServiceRecord in diesem Monat existiert
//if (deleteEntries)
//{
// foreach (var key in day2Details.Keys)
// {
// var dd = day2Details[key];
2018-10-08 12:09:48 +02:00
2019-07-12 17:36:37 +02:00
// if (dd.ServiceRecordOid == 0)
// {
// dd.StundenplanUhrzeiten1 = "";
// dd.StundenplanUhrzeiten2 = "";
2018-10-08 12:09:48 +02:00
2019-07-12 17:36:37 +02:00
// }
// }
//}
2018-11-22 14:05:45 +01:00
if (disableEmptySupportConcepts && eintraege.Count == 0)
2018-10-08 12:09:48 +02:00
{
return null;
}
2019-07-12 17:36:37 +02:00
2018-10-08 12:09:48 +02:00
2018-11-22 14:05:45 +01:00
eintraege.Sort((x, y) =>
2018-10-08 12:09:48 +02:00
{
var c = x.StartDate.CompareTo(y.StartDate);
if (c != 0)
{
return c;
}
return x.ServiceRecordOid.CompareTo(y.ServiceRecordOid);
});
2018-11-22 14:05:45 +01:00
Employee hauptBetreuer = null;
2019-07-12 17:36:37 +02:00
if (cust != null)
2018-10-08 12:09:48 +02:00
{
2019-07-12 17:36:37 +02:00
foreach (var item in cust.Employee2CustomerList)
2018-11-22 14:05:45 +01:00
{
2019-07-12 17:36:37 +02:00
if (hauptBetreuer == null)
2018-11-22 14:05:45 +01:00
{
2019-07-12 17:36:37 +02:00
foreach (var valueEntry in item.ValueList)
2018-11-22 14:05:45 +01:00
{
2019-07-12 17:36:37 +02:00
if (valueEntry.Entry.SystemEntryID != null && valueEntry.Entry.SystemEntryID.Value ==
SystemEntryID.EmployeeRoleMainAttendant)
{
hauptBetreuer = item.Employee;
2018-11-22 14:05:45 +01:00
2019-07-12 17:36:37 +02:00
}
2018-11-22 14:05:45 +01:00
}
}
}
2018-10-08 12:09:48 +02:00
}
2018-11-22 14:05:45 +01:00
foreach (var eintrag in eintraege)
{
2019-07-12 17:36:37 +02:00
if (eintrag.EmployeeOid == 0)
{
eintrag.EmployeeOid = empOid;
}
2018-11-22 14:05:45 +01:00
SbdStundenaufstellungRO ro = null;
if (eintrag.EmployeeOid == 0 && hauptBetreuer != null)
{
eintrag.EmployeeOid = hauptBetreuer.Oid.Value;
}
if (employeeOid2Ro.ContainsKey(eintrag.EmployeeOid))
{
ro = employeeOid2Ro[eintrag.EmployeeOid];
}
else
{
2019-07-12 17:36:37 +02:00
ro = CreateInitalRo(cust, span, null, eintrag.EmployeeOid);
2018-11-22 14:05:45 +01:00
employeeOid2Ro.Add(eintrag.EmployeeOid, ro);
resultList.Add(ro);
}
if (ro.Services == null)
{
ro.Services = new List<SbdServiceDetail>();
}
ro.Services.Add(eintrag);
}
var mandator = MapperFactory.MandatorDC_Mandator.MapToNewDC(AppSettings.GetMandatorEntity());
foreach (var ro in resultList)
{
CreateLeerEintraege(ro, span);
ro.Mandator = mandator;
if (cb2scs.Count > 0)
{
ro.SupportConceptCostBearer = cb2scs.Values.First();
}
}
resultList.Sort((x, y) =>
{
String xx = x.EmployeeName ?? "";
return xx.CompareTo(y.EmployeeName);
});
return resultList;
2018-10-08 12:09:48 +02:00
}
2018-11-22 14:05:45 +01:00
private static void CreateLeerEintraege(SbdStundenaufstellungRO ro, DateTimeSpan span)
2018-10-08 12:09:48 +02:00
{
var vs = PluginLoader.FindClass<VacationService>();
2018-11-22 14:05:45 +01:00
Dictionary<int, bool> tagDict = new Dictionary<int, bool>();
2018-10-08 12:09:48 +02:00
2018-11-22 14:05:45 +01:00
foreach (var s in ro.Services)
2018-10-08 12:09:48 +02:00
{
2018-11-22 14:05:45 +01:00
if (!tagDict.ContainsKey(s.StartDate.Day))
2018-10-08 12:09:48 +02:00
{
2018-11-22 14:05:45 +01:00
tagDict.Add(s.StartDate.Day , true);
2018-10-08 12:09:48 +02:00
}
2018-11-22 14:05:45 +01:00
}
DateTime start = span.StartDateTime;
while (start <= span.EndDateTime)
{
if (!tagDict.ContainsKey(start.Day))
2018-10-08 12:09:48 +02:00
{
2018-11-22 14:05:45 +01:00
SbdServiceDetail detail = CreateDefaultDetail(vs, start);
ro.Services.Add(detail);
2018-10-08 12:09:48 +02:00
}
2018-11-22 14:05:45 +01:00
start = start.AddDays(1);
}
ro.Services.Sort((x, y) =>
{
var c = x.StartDate.CompareTo(y.StartDate);
if (c != 0)
2018-10-08 12:09:48 +02:00
{
2018-11-22 14:05:45 +01:00
return c;
2018-10-08 12:09:48 +02:00
}
2018-11-22 14:05:45 +01:00
return x.ServiceRecordOid.CompareTo(y.ServiceRecordOid);
});
}
private static SbdServiceDetail CreateDefaultDetail(VacationService vs, DateTime start)
{
var detail = new SbdServiceDetail();
detail.StartDate = start;
detail.TimeRangeString = "";
detail.Notice = "";
if (start.DayOfWeek == DayOfWeek.Saturday)
{
detail.IstSamstag = true;
}
if (start.DayOfWeek == DayOfWeek.Sunday)
{
detail.IstSonntag = true;
}
var ferien = vs.GetFerien(start, "nrw");
if (ferien != null)
{
detail.IstFerien = true;
detail.Notice = ferien.Name;
}
2019-07-12 17:36:37 +02:00
var ft = GetFeiertag(vs, start);
2018-11-22 14:05:45 +01:00
if (ft != null)
{
detail.IstFeiertag = true;
detail.Notice = ft.Name;
}
return detail;
}
2019-07-12 17:36:37 +02:00
private static IList<FeiertagDC> _feiertage = null;
public static FeiertagDC GetFeiertag(VacationService vs, DateTime start)
{
if (_feiertage == null)
{
_feiertage = vs.GetFeiertage(start.Year, "NRW");
}
foreach (var ft in _feiertage)
{
if (start == ft.Datum)
return ft;
}
return null;
}
2018-11-22 14:05:45 +01:00
private static SbdStundenaufstellungRO CreateInitalRo(Customer customer, DateTimeSpan span, Employee employee, long employeeoid)
{
var lResult = new SbdStundenaufstellungRO();
2019-07-12 17:36:37 +02:00
2018-11-22 14:05:45 +01:00
lResult.Abwesenheiten = new List<AbsenceTime>();
lResult.StartDate = span.StartDate;
lResult.EndDate = span.EndDate;
2019-07-12 17:36:37 +02:00
if (customer != null)
2018-11-22 14:05:45 +01:00
{
2019-07-12 17:36:37 +02:00
lResult.CustomerOid = customer.Oid.Value;
lResult.CustomerAlias = customer.CustomerAlias;
lResult.CustomerFirstName = customer.Person.FirstName;
lResult.CustomerLastName = customer.Person.LastName;
lResult.CustomerBirthday = customer.Person.DateOfBirth;
2018-11-22 14:05:45 +01:00
2019-07-12 17:36:37 +02:00
lResult.CustomerName = customer.Person.FirstName + " " + customer.Person.LastName;
2018-11-22 14:05:45 +01:00
2019-07-12 17:36:37 +02:00
if (customer.Person.Address != null)
{
lResult.CustomerStreet = customer.Person.Address.Street;
lResult.CustomerPostalCode = customer.Person.Address.PostalCode;
lResult.CustomerCity = customer.Person.Address.Town;
}
var schule = SucheSchule(customer);
if (schule != null)
{
lResult.Schule = MapperFactory.CompactOrganisationDC_Organisation.MapToNewDC(schule);
}
2018-11-22 14:05:45 +01:00
}
if (employee == null && employeeoid > 0)
{
employee = DAOFactory.GenericDAO.LoadByID<Employee>(employeeoid);
}
if (employee != null)
{
lResult.EmployeePersonalNumber = employee.PersonnelNumber;
lResult.EmployeeName = employee.Person.FirstName + " " + employee.Person.LastName;
}
//foreach (var item in customer.Employee2CustomerList)
//{
// foreach (var valueEntry in item.ValueList)
// {
// if (valueEntry.Entry.SystemEntryID != null && valueEntry.Entry.SystemEntryID.Value == SystemEntryID.EmployeeRoleMainAttendant)
// {
// lResult.EmployeePersonalNumber = item.Employee.PersonnelNumber;
// var empName = item.Employee.Person.FirstName + " " + item.Employee.Person.LastName;
// if (String.IsNullOrEmpty(lResult.MainAttendant))
// {
// lResult.MainAttendant = empName;
// }
// else
// {
// if (!lResult.MainAttendant.Contains(empName))
// {
// lResult.MainAttendant += ", " + empName;
// }
// }
// }
// }
//}
return lResult;
}
2019-07-12 17:36:37 +02:00
private static List<SbdServiceDetail> ErstelleStundenplanEintraege(Customer customer, long empOid, DateTime start, DateTime ende)
2018-11-22 14:05:45 +01:00
{
var vs = PluginLoader.FindClass<VacationService>();
List<SbdServiceDetail> details = new List<SbdServiceDetail>();
while (start <= ende)
{
2019-07-12 17:36:37 +02:00
var stundenplan = GetStundenplan(customer, start, start);
2018-11-22 14:05:45 +01:00
SbdServiceDetail detail = CreateDefaultDetail(vs, start);
2018-10-08 12:09:48 +02:00
details.Add(detail);
2018-11-22 14:05:45 +01:00
if (!detail.IstSamstag && !detail.IstSonntag && !detail.IstFerien && !detail.IstFeiertag)
{
2019-07-12 17:36:37 +02:00
SetzeStundenplanEintraege(stundenplan, detail, empOid);
2018-11-22 14:05:45 +01:00
}
2018-10-08 12:09:48 +02:00
start = start.AddDays(1);
}
return details;
}
private static Organisation SucheSchule(Customer customer)
{
foreach (var c2o in customer.Customer2OrganisationList)
{
foreach (var v2o in c2o.ValueList)
{
if (v2o.Entry.Value != null && v2o.Entry.Value.Contains("Schule"))
{
return c2o.Organisation;
}
}
}
return null;
}
2018-11-22 14:05:45 +01:00
private static Arbeitszeit GetStundenplan(Customer customer, DateTime start, DateTime ende)
2018-10-08 12:09:48 +02:00
{
2019-07-12 17:36:37 +02:00
if (customer == null)
{
return null;
}
2018-11-22 14:05:45 +01:00
var stundenplan = SucheStundenplan(customer.Arbeitszeiten, start, ende);
2018-10-08 12:09:48 +02:00
if (stundenplan == null)
{
//Kein Stundenplan hinterlegt, suche Stundenplan bei der Organisation (Schule)
var org = SucheSchule(customer);
if (org != null)
{
2018-11-22 14:05:45 +01:00
return SucheStundenplan(org.Arbeitszeiten, start, ende);
2018-10-08 12:09:48 +02:00
}
}
return stundenplan;
}
2018-11-22 14:05:45 +01:00
private static Arbeitszeit SucheStundenplan(IList<Arbeitszeit> arbeitszeiten, DateTime start, DateTime ende)
2018-10-08 12:09:48 +02:00
{
if (arbeitszeiten != null && arbeitszeiten.Count > 0)
{
foreach (var az in arbeitszeiten)
{
2018-11-22 14:05:45 +01:00
if ((!az.GueltigVon.HasValue || az.GueltigVon <= ende) && (!az.GueltigBis.HasValue || az.GueltigBis >= start))
2018-10-08 12:09:48 +02:00
{
return az;
}
}
}
return null;
}
2019-07-12 17:36:37 +02:00
private static void SetzeStundenplanEintraege(Arbeitszeit arbeitszeit, SbdServiceDetail detail, long empOid)
2018-10-08 12:09:48 +02:00
{
if (arbeitszeit != null && arbeitszeit.ArbeitszeitEintraege != null && arbeitszeit.ArbeitszeitEintraege.Count > 0)
{
2018-11-22 14:05:45 +01:00
if (arbeitszeit.GueltigVon <= detail.StartDate && detail.StartDate.Date <= arbeitszeit.GueltigBis)
2018-10-08 12:09:48 +02:00
{
2018-11-22 14:05:45 +01:00
var day = detail.StartDate.DayOfWeek;
foreach (var ae in arbeitszeit.ArbeitszeitEintraege)
2018-10-08 12:09:48 +02:00
{
2019-07-12 17:36:37 +02:00
if (ae.Employee == null || empOid == 0 || empOid == ae.Employee.Oid.Value)
2018-10-08 12:09:48 +02:00
{
2019-07-12 17:36:37 +02:00
if (SindAmGleichenWochentag(day, ae.Tag))
2018-11-22 14:05:45 +01:00
{
2019-07-12 17:36:37 +02:00
if (String.IsNullOrWhiteSpace(detail.StundenplanUhrzeiten1))
{
detail.StundenplanUhrzeiten1 = CreateTimeRangeString(ae.UhrzeitVon, ae.UhrzeitBis);
}
else if (String.IsNullOrWhiteSpace(detail.StundenplanUhrzeiten2))
{
detail.StundenplanUhrzeiten2 = CreateTimeRangeString(ae.UhrzeitVon, ae.UhrzeitBis);
}
else
{
detail.StundenplanUhrzeiten2 += CreateTimeRangeString(ae.UhrzeitVon, ae.UhrzeitBis);
}
2018-11-22 14:05:45 +01:00
}
2018-10-08 12:09:48 +02:00
}
}
}
}
}
2019-07-12 17:36:37 +02:00
private static string CreateTimeRangeString(string uhrzeitVon, string uhrzeitBis)
{
var dtStart = SchulbegleitenderDienstService.GetDateTime(uhrzeitVon, DateTime.Now);
var dtEnd = SchulbegleitenderDienstService.GetDateTime(uhrzeitBis, DateTime.Now);
return String.Format("{0:HH:mm}-{1:HH:mm}", dtStart, dtEnd);
}
2018-10-08 12:09:48 +02:00
private static bool SindAmGleichenWochentag(DayOfWeek day, AppointmentDayOfWeek aeTag)
{
if (day == DayOfWeek.Monday && aeTag == AppointmentDayOfWeek.Montag)
{
return true;
}
if (day == DayOfWeek.Tuesday && aeTag == AppointmentDayOfWeek.Dienstag)
{
return true;
}
if (day == DayOfWeek.Wednesday && aeTag == AppointmentDayOfWeek.Mittwoch)
{
return true;
}
if (day == DayOfWeek.Thursday && aeTag == AppointmentDayOfWeek.Donnerstag)
{
return true;
}
if (day == DayOfWeek.Friday && aeTag == AppointmentDayOfWeek.Freitag)
{
return true;
}
if (day == DayOfWeek.Saturday && aeTag == AppointmentDayOfWeek.Samstag)
{
return true;
}
return false;
}
private static int GetKW(DateTime actualDate)
{
Calendar objCal = CultureInfo.CurrentCulture.Calendar;
int weekofyear = objCal.GetWeekOfYear(actualDate, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
return weekofyear;
}
public class SbdServiceDetail
{
public long ServiceRecordOid { get; set; }
public string CostBearer { get; set; }
public long EmployeeOid { get; set; }
public string EmployeeFirstName { get; set; }
public string EmployeeLastName { get; set; }
public string EmployeeAbbr { get; set; }
public int CustomerCount { get; set; }
public int EmployeeCount { get; set; }
public string EmployeeFullname { get; set; }
public DateTime EndDate { get; set; }
public DateTime? EndDateMinutes { get; set; }
public double GroupMinutes { get; set; }
public decimal? GroupRoundedDuration { get; set; }
public bool IsBillable { get; set; }
public bool IsGroup { get; set; }
public int KW { get; set; }
public double Minutes { get; set; }
public string Notice { get; set; }
public string Notice2 { get; set; }
public string Notice3 { get; set; }
public string Notice4 { get; set; }
public string Notice5 { get; set; }
public string ServiceCategory { get; set; }
public string ServiceCategoryAbbr { get; set; }
public string ServiceDescription { get; set; }
public DateTime StartDate { get; set; }
public DateTime? StartDateMinutes { get; set; }
public string StartDateString { get; set; }
public string TimeRangeString { get; set; }
public DateTime EndDateNotRounded { get; set; }
public bool IstFeiertag { get; set; }
public bool IstFerien { get; set; }
public bool IstSamstag { get; set; }
public bool IstSonntag { get; set; }
public long? SignatureOid { get; set; }
public String Signature { get; set; }
public DateTime? SignatureDate { get; set; }
public string StundenplanUhrzeiten1 { get; set; }
public string StundenplanUhrzeiten2 { get; set; }
public string IstUhrzeiten1 { get; set; }
public string IstUhrzeiten2 { get; set; }
}
}
}