diff --git a/BeWo/BeWo.csproj b/BeWo/BeWo.csproj index 90773815e..5201a5c91 100644 --- a/BeWo/BeWo.csproj +++ b/BeWo/BeWo.csproj @@ -282,11 +282,15 @@ MSBuild:Compile Designer + + MSBuild:Compile + Designer + Designer MSBuild:Compile - + MSBuild:Compile Designer @@ -816,14 +820,23 @@ BudgetView.xaml + + Component + + + PivotGridReport.cs + EMailStatusLogControl.xaml + + FlexibleReportLayoutListControl.xaml + FlexibleReportView.xaml - - FlexibleReportLayoutSave.xaml + + FlexibleReportLayoutSaveControl.xaml TestEMailControl.xaml @@ -2050,6 +2063,10 @@ Resources.Designer.cs Designer + + PivotGridReport.cs + Designer + Designer @@ -2101,6 +2118,14 @@ {D5E53B0F-BF5A-41E8-93E2-0F32845FC729} Controls + + {B0D73E3D-4AE7-4024-93A6-DB1F46D7CCEE} + Data + + + {094331C3-ECEE-4C89-BBFD-4C9DED89F0EF} + Service + {2F50B83D-A3F0-4EC4-979A-3F9B7E3D8ED4} Shared diff --git a/BeWo/Core/BeWoUtils.cs b/BeWo/Core/BeWoUtils.cs index 9b68ee089..c5213ee0a 100644 --- a/BeWo/Core/BeWoUtils.cs +++ b/BeWo/Core/BeWoUtils.cs @@ -113,7 +113,7 @@ namespace BeWo.Core })); } - private static void CustomizeReportPreviewToolBar(object s, RoutedEventArgs e) + public static void CustomizeReportPreviewToolBar(object s, RoutedEventArgs e) { var cont = LayoutHelper.FindElementByType(s as FrameworkElement, typeof(BarContainerControl)) as BarContainerControl; diff --git a/BeWo/Properties/licenses.licx b/BeWo/Properties/licenses.licx index e69de29bb..c7fd819d5 100644 --- a/BeWo/Properties/licenses.licx +++ b/BeWo/Properties/licenses.licx @@ -0,0 +1 @@ +DevExpress.XtraReports.UI.XtraReport, DevExpress.XtraReports.v17.1, Version=17.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a diff --git a/BeWo/ServiceProxy/Generated.cs b/BeWo/ServiceProxy/Generated.cs index ca2f33e72..51a3a60e4 100644 --- a/BeWo/ServiceProxy/Generated.cs +++ b/BeWo/ServiceProxy/Generated.cs @@ -1183,6 +1183,10 @@ namespace BeWo.ServiceProxy [System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.EmployeeDC))] BS.Shared.DataContracts.PersonDC GetPersonWithCustomerOid(long oid); + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ICustomerService/GetTimesheetStatusList", ReplyAction="http://tempuri.org/ICustomerService/GetTimesheetStatusListResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/ICustomerService/GetTimesheetStatusListBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + System.Collections.Generic.List GetTimesheetStatusList(System.DateTime monat); + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/ICustomerService/GetAllActiveCustomersCompactWithQBCheckList", ReplyAction="http://tempuri.org/ICustomerService/GetAllActiveCustomersCompactWithQBCheckListRe" + "sponse")] [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/ICustomerService/GetAllActiveCustomersCompactWithQBCheckListBe" + @@ -1989,6 +1993,11 @@ namespace BeWo.ServiceProxy return base.Channel.GetPersonWithCustomerOid(oid); } + public System.Collections.Generic.List GetTimesheetStatusList(System.DateTime monat) + { + return base.Channel.GetTimesheetStatusList(monat); + } + public System.Collections.Generic.List GetAllActiveCustomersCompactWithQBCheckList(bool fetchReferenceNumbers, System.Nullable currentEmployeeOid, System.DateTime monat) { return base.Channel.GetAllActiveCustomersCompactWithQBCheckList(fetchReferenceNumbers, currentEmployeeOid, monat); @@ -4209,10 +4218,29 @@ namespace BeWo.ServiceProxy public interface IOperationsService { + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GetAllFlexibleReportEntrys", ReplyAction="http://tempuri.org/IOperationsService/GetAllFlexibleReportEntrysResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GetAllFlexibleReportEntrysBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + System.Collections.Generic.List GetAllFlexibleReportEntrys(BS.Shared.DataContracts.FlexibleReportFilterDC filter); + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GetFlexibleReportLayouts", ReplyAction="http://tempuri.org/IOperationsService/GetFlexibleReportLayoutsResponse")] [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GetFlexibleReportLayoutsBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] System.Collections.Generic.List GetFlexibleReportLayouts(); + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/InsertNewFlexibleReportLayout", ReplyAction="http://tempuri.org/IOperationsService/InsertNewFlexibleReportLayoutResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/InsertNewFlexibleReportLayoutBeWoFaultFault" + + "", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + void InsertNewFlexibleReportLayout(BS.Shared.DataContracts.FlexibleReportLayoutDC flexibleReportLayoutDC); + + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/UpdateFlexibleReportLayouts", ReplyAction="http://tempuri.org/IOperationsService/UpdateFlexibleReportLayoutsResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/UpdateFlexibleReportLayoutsBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + void UpdateFlexibleReportLayouts(System.Collections.Generic.List flexibleReportLayouts); + + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/UpdateIsChatActiveCustomerAPPCodeDC", ReplyAction="http://tempuri.org/IOperationsService/UpdateIsChatActiveCustomerAPPCodeDCResponse" + + "")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/UpdateIsChatActiveCustomerAPPCodeDCBeWoFaul" + + "tFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + void UpdateIsChatActiveCustomerAPPCodeDC(long customerOid, int activeType); + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GetIsChatActiveCustomerAPPCodeDC", ReplyAction="http://tempuri.org/IOperationsService/GetIsChatActiveCustomerAPPCodeDCResponse")] [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GetIsChatActiveCustomerAPPCodeDCBeWoFaultFa" + "ult", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] @@ -4489,9 +4517,9 @@ namespace BeWo.ServiceProxy [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/UpdateBudgetBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] void UpdateBudget(System.Collections.Generic.List budgets); - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/GetAllFlexibleReportEntrys", ReplyAction="http://tempuri.org/IOperationsService/GetAllFlexibleReportEntrysResponse")] - [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/GetAllFlexibleReportEntrysBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] - System.Collections.Generic.List GetAllFlexibleReportEntrys(BS.Shared.DataContracts.FlexibleReportFilterDC filter); + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/UpdateMandator", ReplyAction="http://tempuri.org/IOperationsService/UpdateMandatorResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/UpdateMandatorBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + BS.Shared.DataContracts.MandatorDC UpdateMandator(BS.Shared.DataContracts.MandatorDC mandator); [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/UpdateServiceCategories", ReplyAction="http://tempuri.org/IOperationsService/UpdateServiceCategoriesResponse")] [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/UpdateServiceCategoriesBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] @@ -4792,12 +4820,6 @@ namespace BeWo.ServiceProxy [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/CreateNewChatMessagesDCBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] BS.Shared.DataContracts.ChatMessageDC CreateNewChatMessagesDC(long senderOid, long empfängerOid, string message, bool isDeliverd, long teamid, string messageid); - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/UpdateIsChatActiveCustomerAPPCodeDC", ReplyAction="http://tempuri.org/IOperationsService/UpdateIsChatActiveCustomerAPPCodeDCResponse" + - "")] - [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/UpdateIsChatActiveCustomerAPPCodeDCBeWoFaul" + - "tFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] - void UpdateIsChatActiveCustomerAPPCodeDC(long customerOid, int activeType); - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/DeactivateInvoices", ReplyAction="http://tempuri.org/IOperationsService/DeactivateInvoicesResponse")] [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/DeactivateInvoicesBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] void DeactivateInvoices(System.Collections.Generic.List invoices); @@ -5050,6 +5072,10 @@ namespace BeWo.ServiceProxy "Fault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] long InsertNewServiceRecordAndSignature(BS.Shared.DataContracts.ServiceRecordDC sr, BS.Shared.DataContracts.SignatureDC sig); + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/CreateDefaultServiceRecords", ReplyAction="http://tempuri.org/IOperationsService/CreateDefaultServiceRecordsResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/CreateDefaultServiceRecordsBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + string CreateDefaultServiceRecords(System.DateTime monat, System.Collections.Generic.List oids); + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/IsAlive", ReplyAction="http://tempuri.org/IOperationsService/IsAliveResponse")] [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/IsAliveBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] bool IsAlive(); @@ -5073,10 +5099,6 @@ namespace BeWo.ServiceProxy [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/UpdateInvoices", ReplyAction="http://tempuri.org/IOperationsService/UpdateInvoicesResponse")] [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/UpdateInvoicesBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] void UpdateInvoices(System.Collections.Generic.List invoices); - - [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IOperationsService/UpdateMandator", ReplyAction="http://tempuri.org/IOperationsService/UpdateMandatorResponse")] - [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IOperationsService/UpdateMandatorBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] - BS.Shared.DataContracts.MandatorDC UpdateMandator(BS.Shared.DataContracts.MandatorDC mandator); } [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] @@ -5113,11 +5135,31 @@ namespace BeWo.ServiceProxy { } + public System.Collections.Generic.List GetAllFlexibleReportEntrys(BS.Shared.DataContracts.FlexibleReportFilterDC filter) + { + return base.Channel.GetAllFlexibleReportEntrys(filter); + } + public System.Collections.Generic.List GetFlexibleReportLayouts() { return base.Channel.GetFlexibleReportLayouts(); } + public void InsertNewFlexibleReportLayout(BS.Shared.DataContracts.FlexibleReportLayoutDC flexibleReportLayoutDC) + { + base.Channel.InsertNewFlexibleReportLayout(flexibleReportLayoutDC); + } + + public void UpdateFlexibleReportLayouts(System.Collections.Generic.List flexibleReportLayouts) + { + base.Channel.UpdateFlexibleReportLayouts(flexibleReportLayouts); + } + + public void UpdateIsChatActiveCustomerAPPCodeDC(long customerOid, int activeType) + { + base.Channel.UpdateIsChatActiveCustomerAPPCodeDC(customerOid, activeType); + } + public System.Collections.Generic.List GetIsChatActiveCustomerAPPCodeDC(long customerOid, int activeType) { return base.Channel.GetIsChatActiveCustomerAPPCodeDC(customerOid, activeType); @@ -5433,9 +5475,9 @@ namespace BeWo.ServiceProxy base.Channel.UpdateBudget(budgets); } - public System.Collections.Generic.List GetAllFlexibleReportEntrys(BS.Shared.DataContracts.FlexibleReportFilterDC filter) + public BS.Shared.DataContracts.MandatorDC UpdateMandator(BS.Shared.DataContracts.MandatorDC mandator) { - return base.Channel.GetAllFlexibleReportEntrys(filter); + return base.Channel.UpdateMandator(mandator); } public void UpdateServiceCategories(System.Collections.Generic.List pServiceCategories) @@ -5753,11 +5795,6 @@ namespace BeWo.ServiceProxy return base.Channel.CreateNewChatMessagesDC(senderOid, empfängerOid, message, isDeliverd, teamid, messageid); } - public void UpdateIsChatActiveCustomerAPPCodeDC(long customerOid, int activeType) - { - base.Channel.UpdateIsChatActiveCustomerAPPCodeDC(customerOid, activeType); - } - public void DeactivateInvoices(System.Collections.Generic.List invoices) { base.Channel.DeactivateInvoices(invoices); @@ -6043,6 +6080,11 @@ namespace BeWo.ServiceProxy return base.Channel.InsertNewServiceRecordAndSignature(sr, sig); } + public string CreateDefaultServiceRecords(System.DateTime monat, System.Collections.Generic.List oids) + { + return base.Channel.CreateDefaultServiceRecords(monat, oids); + } + public bool IsAlive() { return base.Channel.IsAlive(); @@ -6072,11 +6114,6 @@ namespace BeWo.ServiceProxy { base.Channel.UpdateInvoices(invoices); } - - public BS.Shared.DataContracts.MandatorDC UpdateMandator(BS.Shared.DataContracts.MandatorDC mandator) - { - return base.Channel.UpdateMandator(mandator); - } } [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] @@ -6723,6 +6760,10 @@ namespace BeWo.ServiceProxy [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IReportService/CreateServiceRecordListReport", ReplyAction="http://tempuri.org/IReportService/CreateServiceRecordListReportResponse")] [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IReportService/CreateServiceRecordListReportBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] System.IO.MemoryStream CreateServiceRecordListReport(long employeeOid, long customerOid, long supportConceptOid, long costbearer2SupportConceptOid, bool isLimited, BS.Shared.Core.DateTimeSpan limitingDateTimeSpan); + + [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IReportService/SendTimeSheetMail", ReplyAction="http://tempuri.org/IReportService/SendTimeSheetMailResponse")] + [System.ServiceModel.FaultContractAttribute(typeof(BeWo.ServiceProxy.BeWoFault), Action="http://tempuri.org/IReportService/SendTimeSheetMailBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BeWo.Service.ServiceContracts")] + string SendTimeSheetMail(BS.Shared.DataContracts.TimeSheetStatusItemDC item, bool saveMailToDatabase); } [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] @@ -6788,6 +6829,11 @@ namespace BeWo.ServiceProxy { return base.Channel.CreateServiceRecordListReport(employeeOid, customerOid, supportConceptOid, costbearer2SupportConceptOid, isLimited, limitingDateTimeSpan); } + + public string SendTimeSheetMail(BS.Shared.DataContracts.TimeSheetStatusItemDC item, bool saveMailToDatabase) + { + return base.Channel.SendTimeSheetMail(item, saveMailToDatabase); + } } [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")] diff --git a/BeWo/View/BeWoWindow.xaml.cs b/BeWo/View/BeWoWindow.xaml.cs index 89b6f4efe..6fe27f70c 100644 --- a/BeWo/View/BeWoWindow.xaml.cs +++ b/BeWo/View/BeWoWindow.xaml.cs @@ -60,11 +60,15 @@ namespace BeWo.View private void RootGroupBox_OnMouseDoubleClick(object sender, MouseButtonEventArgs e) { + if(!IsVisible) + { + return; + } if (!IsMaximizable) { return; } - + var pos = PointToScreen(Mouse.GetPosition(this)); if (!(e.OriginalSource is Border) && !(e.OriginalSource is TextBlock) || pos.Y > 200d || e.OriginalSource is TextBlock && Mouse.DirectlyOver is Button) diff --git a/BeWo/View/Detail/BudgetView.xaml b/BeWo/View/Detail/BudgetView.xaml index 5d94bcc4a..9c13d1568 100644 --- a/BeWo/View/Detail/BudgetView.xaml +++ b/BeWo/View/Detail/BudgetView.xaml @@ -1,52 +1,54 @@ - - - - - - - - - - - - - - - - - - - -
+
- @foreach (var hp in Model.SupporConceptListItemsForGroupBooking) + @foreach (var hp in Model.SupportConceptListObjectsForGroupBooking) { - + + + } @@ -1094,8 +1118,8 @@ resetGroupBookingModeViaGETUrl = '@Url.Action("ResetGroupBookingModeViaGET")'; addSupportConceptCostBearerRelationsToGroupBookingUrl = '@Url.Action("AddSupportConceptCostBearerRelationsToGroupBooking")'; removeSupportConceptCostBearerRelationFromGroupBookingUrl = '@Url.Action("RemoveSupportConceptCostBearerRelationFromGroupBooking")'; - addEmployeesToGroupBookingUrl = '@Url.Action("AddEmployeesToGroupBooking")'; - resetSignatureImage = '@Url.Action("ResetSignatureImage")'; + addEmployeesToGroupBookingUrl = '@Url.Action("AddEmployeesToGroupBooking")'; + resetSignatureImage = '@Url.Action("ResetSignatureImage")'; var isServiceRecordNoticeMandatory = '@(Model.IsServiceRecordNoticeMandatory)'.toLowerCase() === "true"; diff --git a/BeWoPlanerMobil/Views/Shared/_Layout.cshtml b/BeWoPlanerMobil/Views/Shared/_Layout.cshtml index 33ef71a3a..60977ca85 100644 --- a/BeWoPlanerMobil/Views/Shared/_Layout.cshtml +++ b/BeWoPlanerMobil/Views/Shared/_Layout.cshtml @@ -11,6 +11,7 @@ + @@ -27,6 +28,9 @@ + + + @RenderBody() diff --git a/Host/Multitenancy/demo.config b/Host/Multitenancy/demo.config index 004226616..d22557546 100644 --- a/Host/Multitenancy/demo.config +++ b/Host/Multitenancy/demo.config @@ -18,6 +18,10 @@ Server=localhost;Password=root;User ID=root; Initial Catalog=bewodemo + + diff --git a/Service/Plugins/FlexibleReportService.cs b/Service/Plugins/FlexibleReportService.cs new file mode 100644 index 000000000..371816685 --- /dev/null +++ b/Service/Plugins/FlexibleReportService.cs @@ -0,0 +1,467 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using BeWo.Data.Access; +using BeWo.Data.Entities; +using BeWo.Service.Core; +using BeWo.Service.DCEntityMapper; +using BeWo.Service.MessageContracts; +using BS.Shared; +using BS.Shared.Core; +using BS.Shared.DataContracts; +using BS.Shared.Extensions; +using BS.Shared.Services; +using Utils = BS.Shared.Core.Utils; + +namespace BeWo.Service.Plugins +{ + public class FlexibleReportService : AbstractIDSpecificDefaultClass + { + private Dictionary> categoryOid2Stundensatz; + private Dictionary> leistungOid2Stundensatz; + private Dictionary> costbearerOid2Stundensatz; + private Dictionary> costbearerOid2RateFactor; + + public virtual IList GetAllFlexibleReportEntrys(FlexibleReportFilterDC filter) + { + BuildStundensatzDictionaries(); + + var calc = PluginLoader.FindClass(); + var dict = new Dictionary(); + var result = new List(); + + var span = new DateTimeSpan() { StartDateTime = filter.StartDatum.Date, EndDateTime = filter.EndDatum.Date.AddDays(1).AddTicks(-1) }; + var alleRec = DAOFactory.SearchDAO.FindServiceRecordsInSpan(span, null).ToList(); + + if (filter.NullDaten) + { + // Zwischenspeicher für die richtigen Zeiträume + var dateTimeSpan = new DateTimeSpan(); + + var alleHps = DAOFactory.SearchDAO.FindSupportConceptsInSpan(span); + var alleEmps = DAOFactory.GenericDAO.GetAllActive(); + + foreach (var hilfePlan in alleHps.Where(x => span.StartDate <= x.EndDate && span.EndDate >= x.StartDate)) + { + // Holt sich den richtigen Zeitraum zum erstellen der Daten + dateTimeSpan.StartDate = span.StartDate > hilfePlan.StartDate ? span.StartDate : hilfePlan.StartDate.Value; + dateTimeSpan.EndDate = span.EndDate < hilfePlan.EndDate ? span.EndDate : hilfePlan.EndDate.Value; + + result.AddRange(CreateFlexibleReportsInTimeSpan(dateTimeSpan, null, hilfePlan, FlexibleReportEntryType.CustomerNullEntry, 0)); + + foreach (var c2s in hilfePlan.CostBearer2SupportConceptList.Where(x => span.StartDate <= x.EndDate && span.EndDate >= x.StartDate)) + { + foreach (var approvalPeriod in c2s.ApprovalPeriodList.Where(x => span.StartDate <= x.EndDate && span.EndDate >= x.StartDate)) + { + // Holt sich den richtigen Zeitraum zum erstellen der Daten + dateTimeSpan.StartDate = span.StartDate > approvalPeriod.StartDate ? span.StartDate : approvalPeriod.StartDate.Value; + dateTimeSpan.EndDate = span.EndDate < approvalPeriod.EndDate ? span.EndDate : approvalPeriod.EndDate.Value; + + // Wenn kein Mitarbeiter dem Bewilligungszeitraum zugewiesen ist + if (approvalPeriod.SupportConceptApprovalPeriod2Employee.Count == 0) + { + var hauptbetreuer = GetHauptbetreuer(hilfePlan.Customer).ToList(); + + // Wenn der Klient keine Hauptbetreuer hat + if (hauptbetreuer.Count == 0) + { + decimal? soll = GetSollPerDay(hilfePlan.Customer, dateTimeSpan.StartDate, approvalPeriod, calc); + if (soll != null) + result.AddRange(CreateFlexibleReportsInTimeSpan(dateTimeSpan, null, hilfePlan, FlexibleReportEntryType.SollEntry, soll.Value)); + } + // Wenn der Klient ein oder mehr Hauptbetreuer hat + else + { + decimal? soll = GetSollPerDay(hilfePlan.Customer, dateTimeSpan.StartDate, approvalPeriod, calc); + + if (soll.HasValue) + { + decimal sollAnteil = soll.Value / hauptbetreuer.Count; + foreach (var betreuer in hauptbetreuer) + { + result.AddRange(CreateFlexibleReportsInTimeSpan(dateTimeSpan, betreuer, hilfePlan, FlexibleReportEntryType.SollEntry, sollAnteil)); + } + } + } + } + // Wenn ein oder mehr Mitarbeiter dem Bewilligungszeitraum zugewiesen ist/sind + else + { + foreach (var scap2employee in approvalPeriod.SupportConceptApprovalPeriod2Employee) + { + var employee = scap2employee.Employee; + + decimal? soll = GetSollPerDay(hilfePlan.Customer, employee, approvalPeriod.StartDate.Value, approvalPeriod, calc); + if (soll != null) + { + result.AddRange(CreateFlexibleReportsInTimeSpan(dateTimeSpan, employee, hilfePlan, FlexibleReportEntryType.SollEntry, soll.Value)); + } + } + } + } + } + } + + foreach (var item in alleEmps) + { + for (DateTime date = span.StartDate; date <= span.EndDate; date = date.AddDays(1)) + { + result.Add(new FlexibleReportEntryDC() + { + Employee = MapperFactory.CompactEmployeeDC_Employee.MapToNewDC(item), + Type = FlexibleReportEntryType.EmployeeNullEntry, + StartDatum = date, + EndDatum = date + }); + } + } + } + + foreach (var serviceRecordListEntry in alleRec) + { + var resultEntry = result.Where(x => + x.Type == FlexibleReportEntryType.SollEntry && + x.CustomerOid == serviceRecordListEntry.CustomerOid && + x.EmployeeOid == serviceRecordListEntry.EmployeeOid && + x.StartDatum.Date == serviceRecordListEntry.Start.Value.Date).FirstOrDefault(); + + // Falls kein passendes Entry gefunden wurde + if (resultEntry == null) + { + resultEntry = result.Where(x => + x.CustomerOid == serviceRecordListEntry.CustomerOid && + x.Type == FlexibleReportEntryType.CustomerNullEntry && + x.StartDatum == serviceRecordListEntry.Start.Value.Date) + .FirstOrDefault(); + + // Falls immernoch kein passendes Entry gefunden wurde + if (resultEntry == null) + { + resultEntry = new FlexibleReportEntryDC(); + result.Add(resultEntry); + } + } + + resultEntry.AnzahlMinuten = serviceRecordListEntry.RoundedDuration; + resultEntry.EndDatum = serviceRecordListEntry.End.Value; + resultEntry.Kilometer = serviceRecordListEntry.DistanceInMeter; + resultEntry.Leistung = serviceRecordListEntry.ServiceDescription.Name; + resultEntry.Leistungskategorie = serviceRecordListEntry.ServiceDescription.ServiceCategory.Name; + resultEntry.StartDatum = serviceRecordListEntry.Start.Value; + resultEntry.Type = FlexibleReportEntryType.ServiceRecordEntry; + resultEntry.Stundensatz = GetStundensatz(serviceRecordListEntry); + if (resultEntry.Stundensatz.HasValue) + { + resultEntry.Betrag = resultEntry.Stundensatz * (resultEntry.AnzahlMinuten / 60); + } + if (serviceRecordListEntry.Customer != null) + { + resultEntry.Customer = MapperFactory.CompactCustomerDC_Customer.MapToNewDC(serviceRecordListEntry.Customer); + resultEntry.Team = GetTeamNameByTeam2CustomerList(serviceRecordListEntry.Customer.Team2CustomerList); + } + if (serviceRecordListEntry.Employee != null) + resultEntry.Employee = MapperFactory.CompactEmployeeDC_Employee.MapToNewDC(serviceRecordListEntry.Employee); + if (serviceRecordListEntry.SupportConcept != null) + resultEntry.SupportConcept = MapperFactory.CompactSupportConceptDC_SupportConcept.MapToNewDC(serviceRecordListEntry.SupportConcept); + if (serviceRecordListEntry.CostBearer2SupportConcept != null) + resultEntry.Organisation = serviceRecordListEntry.CostBearer2SupportConcept.CostBearer.Organisation.Name; + + if (!filter.NullDaten) + CreateFlexibleReportSoll(resultEntry, serviceRecordListEntry, new DateTime(), PluginLoader.FindClass()); + } + + var i = result.FindAll(x => x.Employee?.LastName == "Wolf"); + return result; + } + + protected virtual decimal? GetStundensatz(ServiceRecord sr) + { + decimal? betrag = null; + + if (sr.CostBearer2SupportConcept != null) + { + if (leistungOid2Stundensatz.ContainsKey(sr.ServiceDescription.Oid.Value)) + { + var crList = leistungOid2Stundensatz[sr.ServiceDescription.Oid.Value]; + + var cr = crList.GetCostRatePeriodForDate(CostRatePeriodType.AmountOfMoney, sr.Start.Value); + if (cr != null && cr.CostRateValue.HasValue) + { + betrag = cr.CostRateValue.Value; + } + } + + if (betrag == null && categoryOid2Stundensatz.ContainsKey(sr.ServiceDescription.ServiceCategory.Oid.Value)) + { + var crList = categoryOid2Stundensatz[sr.ServiceDescription.ServiceCategory.Oid.Value]; + + var cr = crList.GetCostRatePeriodForDate(CostRatePeriodType.AmountOfMoney, sr.Start.Value); + if (cr != null && cr.CostRateValue.HasValue) + { + betrag = cr.CostRateValue.Value; + } + } + + if (betrag == null && costbearerOid2Stundensatz.ContainsKey(sr.CostBearer2SupportConcept.CostBearer.Oid.Value)) + { + var crList = costbearerOid2Stundensatz[sr.CostBearer2SupportConcept.CostBearer.Oid.Value]; + + var cr = crList.GetCostRatePeriodForDate(CostRatePeriodType.HourlyRate, sr.Start.Value); + if (cr != null && cr.CostRateValue.HasValue) + { + betrag = cr.CostRateValue.Value; + } + if (betrag != null && costbearerOid2RateFactor.ContainsKey(sr.CostBearer2SupportConcept.CostBearer.Oid.Value)) + { + crList = costbearerOid2RateFactor[sr.CostBearer2SupportConcept.CostBearer.Oid.Value]; + + cr = crList.GetCostRatePeriodForDate(CostRatePeriodType.RateFactor, sr.Start.Value); + if (cr != null && cr.CostRateValue.HasValue) + { + betrag *= (100 + cr.CostRateValue.Value) / 100; + } + } + } + } + return betrag; + } + + protected virtual void BuildStundensatzDictionaries() + { + categoryOid2Stundensatz = new Dictionary>(); + leistungOid2Stundensatz = new Dictionary>(); + costbearerOid2Stundensatz = new Dictionary>(); + costbearerOid2RateFactor = new Dictionary>(); + + + var categories = DAOFactory.GenericDAO.GetAllActive(); + foreach (var cat in categories) + { + if (cat.AccountingInterval.HasValue && cat.AccountingInterval.Value == AccountingIntervalType.Hourly) + { + var hrCats = cat.CostRatePeriods.ToList(); + if (hrCats.Count > 0) + { + categoryOid2Stundensatz.Add(cat.Oid.Value, MapperFactory.CostRatePeriodDC_CostRatePeriod.MapToNewDCs(hrCats)); + } + } + } + + var descriptions = DAOFactory.GenericDAO.GetAllActive(); + foreach (var desc in descriptions) + { + if (desc.AccountingInterval.HasValue && desc.AccountingInterval.Value == AccountingIntervalType.Hourly) + { + var hrCats = desc.CostRatePeriods.ToList(); + if (hrCats.Count > 0) + { + leistungOid2Stundensatz.Add(desc.Oid.Value, MapperFactory.CostRatePeriodDC_CostRatePeriod.MapToNewDCs(hrCats)); + } + } + } + + var costBearers = DAOFactory.GenericDAO.GetAllActive(); + foreach (var cb in costBearers) + { + var hrCats = cb.CostRatePeriods.Where(c => c.CostRateType == CostRatePeriodType.HourlyRate).ToList(); + if (hrCats.Count > 0) + { + costbearerOid2Stundensatz.Add(cb.Oid.Value, MapperFactory.CostRatePeriodDC_CostRatePeriod.MapToNewDCs(hrCats)); + } + + var rfCats = cb.CostRatePeriods.Where(c => c.CostRateType == CostRatePeriodType.RateFactor).ToList(); + if (rfCats.Count > 0) + { + costbearerOid2RateFactor.Add(cb.Oid.Value, MapperFactory.CostRatePeriodDC_CostRatePeriod.MapToNewDCs(rfCats)); + } + } + } + + //protected virtual IEnumerable CreateFlexibleNullEntries(ServiceRecord sr, DateTime start, DateTime ende, decimal? soll) + //{ + // for (DateTime date = start; date <= ende; date = date.AddDays(1.0)) + // { + // var flex = new FlexibleReportEntryDC() + // { + // Customer = sr.Customer != null ? MapperFactory.CompactCustomerDC_Customer.MapToNewDC(sr.Customer) : null, + // Employee = sr.Employee != null ? MapperFactory.CompactEmployeeDC_Employee.MapToNewDC(sr.Employee) : null, + // StartDatum = date, + // AnzahlMinuten = 0, + // AnzahlMinutenSoll = soll, + // Leistung = sr.ServiceDescription.Name, + // Leistungskategorie = sr.ServiceDescription.ServiceCategory.Name, + // SupportConcept = MapperFactory.CompactSupportConceptDC_SupportConcept.MapToNewDC(sr.SupportConcept) ?? null, + // }; + + // if (sr.Customer != null) + // { + // flex.Customer = MapperFactory.CompactCustomerDC_Customer.MapToNewDC(sr.Customer); + + // flex.Team = GetTeamNameByTeam2CustomerList(sr.Customer.Team2CustomerList); + // } + + // yield return flex; + // } + //} + + protected virtual string GetTeamNameByTeam2CustomerList(IList team2Customers) + { + string name = ""; + + foreach (var t2c in team2Customers) + { + if (name.Length > 0) + name += ", "; + name = t2c.Team.Name; + } + + return name; + } + + protected virtual decimal? GetSollPerDay(Customer customer, Employee employee, DateTime date, SupportConceptApprovalPeriod scap, Calculations calc) + { + var scapDC = MapperFactory.SupportConceptApprovalPeriodDC_SupportConceptApprovalPeriod.MapToNewDC(scap); + var sollPerDay = calc.GetApprovedHoursPerDay(scapDC, new List()) * 60; + + if (employee == null) + return sollPerDay; + + var sc2e = scap.SupportConceptApprovalPeriod2Employee.FirstOrDefault(x => x.Employee.Oid == employee.Oid); + + if (sc2e != null) + return sc2e.IsAbsolut ? sc2e.Betreuungsschluessel : sollPerDay * sc2e.Betreuungsschluessel/100; + else + return sollPerDay; + } + + protected virtual decimal? GetSollPerDay(Customer customer, DateTime date, SupportConceptApprovalPeriod scap, Calculations calc) + { + var scapDC = MapperFactory.SupportConceptApprovalPeriodDC_SupportConceptApprovalPeriod.MapToNewDC(scap); + var sollPerDay = calc.GetApprovedHoursPerDay(scapDC, new List()) * 60; + + return sollPerDay; + } + + protected virtual void CreateFlexibleReportSoll(FlexibleReportEntryDC entry, ServiceRecord item, DateTime datum, Calculations calc) + { + if (item.CostBearer2SupportConcept != null) + { + decimal? soll = null; + SupportConceptApprovalPeriod scap = null; + SupportConceptApprovalPeriodDC scapdc = null; + + //Schritt 1: Prüfe Costbearer2SupportConcept.ApprovalPeriodList welcher im Zeitraum liegt und ob die ApprovalPeriod.Categoriy der item.ServiceDescription.Category entspricht. + foreach (var iscap in item.CostBearer2SupportConcept.ApprovalPeriodList) + { + if (iscap.ServiceCategory != null && iscap.ServiceCategory.Oid == item.ServiceDescription.ServiceCategory.Oid) + { + if (item.Start >= iscap.StartDate && item.Start <= iscap.EndDate) + { + scap = iscap; + } + } + } + + //Schritt 2: Prüfe Costbearer2SupportConcept.ApprovalPeriodList welcher im Zeitraum liegt und ob die ApprovalPeriod.Categoriy = null ist + if (scap == null) + { + foreach (var iscap in item.CostBearer2SupportConcept.ApprovalPeriodList) + { + if (iscap.ServiceCategory == null) + { + if (item.Start >= iscap.StartDate && item.Start <= iscap.EndDate) + { + scap = iscap; + } + } + } + } + + if (scap != null) + { + //Schritt 3: Soll liegt vor, prüfe Verteilung auf Mitarbeiter + + scapdc = MapperFactory.SupportConceptApprovalPeriodDC_SupportConceptApprovalPeriod.MapToNewDC(scap); + var sollPerDay = calc.GetApprovedHoursPerDay(scapdc, new List()) * 60; + // Keine Betreuerverteilung definiert + if (scap.SupportConceptApprovalPeriod2Employee.Count == 0 && IstHauptbetreuer(item.Customer, item.Employee)) + { + soll = sollPerDay; // Hauptbetreuer muss 100% leisten + } + else + { + //Prüfe ob item.Employee in scap.SupportConceptApprovalPeriod2Employee definiert ist und wenn ja berechne Anteil am sollPerDay + //scap.SupportConceptApprovalPeriod2Employee[0] + var sc2e = scap.SupportConceptApprovalPeriod2Employee.FirstOrDefault(x => x.Employee.Oid == item.Employee.Oid); + if (sc2e != null) + { + soll = sc2e.IsAbsolut ? sc2e.Betreuungsschluessel : sollPerDay * sc2e.Betreuungsschluessel/100; + } + } + } + + //if (item.CostBearer2SupportConcept != null && IstHauptbetreuer(item.Customer, item.Employee)) + //{ + // var c2sDc = MapperFactory.SupportConceptCostBearerRelDC_CostBearer2SupportConcept.MapToNewDC(item.CostBearer2SupportConcept); + // var sollPerDay = calc.GetApprovedHoursPerDay(c2sDc, datum); + + // entry.AnzahlMinutenSoll = sollPerDay * 60; + //} + + entry.AnzahlMinutenSoll = soll; + } + } + + protected virtual bool IstHauptbetreuer(Customer c, Employee e) + { + foreach (Employee2Customer e2c in c.Employee2CustomerList) + { + foreach (ValueListEntry2Object vle2o in e2c.ValueList) + { + var vle = vle2o.Entry; + + if (vle.SystemEntryID == SystemEntryID.EmployeeRoleMainAttendant && e2c.EmployeeOid.ToString() == vle.Value) + return true; + //if (vle.SystemEntryID != null && vle.SystemEntryID.Value == SystemEntryID.EmployeeRoleMainAttendant && e2c.EmployeeOid == e.Oid.Value) + //{ + // return true; + //} + } + } + + return false; + } + + protected IEnumerable GetHauptbetreuer(Customer c) + { + foreach (Employee2Customer e2c in c.Employee2CustomerList) + { + foreach (ValueListEntry2Object vle2o in e2c.ValueList) + { + var vle = vle2o.Entry; + + if (vle.SystemEntryID == SystemEntryID.EmployeeRoleMainAttendant && e2c.EmployeeOid.ToString() == vle.Value) + yield return e2c.Employee; + } + } + } + + protected virtual IEnumerable CreateFlexibleReportsInTimeSpan(DateTimeSpan span, Employee employee, SupportConcept supportConcept, FlexibleReportEntryType type, decimal soll) + { + for (DateTime date = span.StartDate; date <= span.EndDate; date = date.AddDays(1)) + { + yield return new FlexibleReportEntryDC() + { + Employee = employee != null ? MapperFactory.CompactEmployeeDC_Employee.MapToNewDC(employee) : null, + Customer = supportConcept.Customer != null ? MapperFactory.CompactCustomerDC_Customer.MapToNewDC(supportConcept.Customer) : null, + Type = type, + StartDatum = date, + EndDatum = date, + SupportConcept = MapperFactory.CompactSupportConceptDC_SupportConcept.MapToNewDC(supportConcept), + AnzahlMinutenSoll = soll + }; + } + } + } +} diff --git a/Service/Service.csproj b/Service/Service.csproj index 437bf0d4b..e8fc4e73a 100644 --- a/Service/Service.csproj +++ b/Service/Service.csproj @@ -326,6 +326,7 @@ + diff --git a/Service/ServiceContracts/IOperationsService.cs b/Service/ServiceContracts/IOperationsService.cs index 9a7ad834f..3d237a467 100644 --- a/Service/ServiceContracts/IOperationsService.cs +++ b/Service/ServiceContracts/IOperationsService.cs @@ -819,5 +819,14 @@ namespace BeWo.Service.ServiceContracts [FaultContract(typeof(BeWoFault))] [OperationContract] IList GetFlexibleReportLayouts(); - } + + [FaultContract(typeof(BeWoFault))] + [OperationContract] + void InsertNewFlexibleReportLayout(FlexibleReportLayoutDC flexibleReportLayoutDC); + + + [FaultContract(typeof(BeWoFault))] + [OperationContract] + void UpdateFlexibleReportLayouts(IList flexibleReportLayouts); + } } \ No newline at end of file diff --git a/Service/ServiceImplementations/OperationsServiceImp.cs b/Service/ServiceImplementations/OperationsServiceImp.cs index caae58c92..5eb9f97cc 100644 --- a/Service/ServiceImplementations/OperationsServiceImp.cs +++ b/Service/ServiceImplementations/OperationsServiceImp.cs @@ -5645,194 +5645,11 @@ namespace BeWo.Service.ServiceImplementations { try { - var calc = PluginLoader.FindClass(); - var dict = new Dictionary(); - var result = new List(); - var span = new DateTimeSpan() { StartDateTime = filter.StartDatum.Date, EndDateTime = filter.EndDatum.Date.AddDays(1).AddTicks(-1) }; + var s = PluginLoader.FindClass(); - var alleRec = DAOFactory.SearchDAO.FindServiceRecordsInSpan(span, null).ToList(); - - if (filter.NullDaten) - { - var alleHps = DAOFactory.SearchDAO.FindSupportConceptsInSpan(span); - var alleEmps = DAOFactory.GenericDAO.GetAllActive(); - - foreach (var hilfePlan in alleHps.Where(x => span.StartDate <= x.EndDate && span.EndDate >= x.StartDate)) - { - foreach (var c2s in hilfePlan.CostBearer2SupportConceptList.Where(x => span.StartDate <= x.EndDate && span.EndDate >= x.StartDate)) - { - result.AddRange(CreateFlexibleReportsInTimeSpan(span, null, hilfePlan, FlexibleReportEntryType.CustomerNullEntry)); - - foreach (var e2c in hilfePlan.Customer.Employee2CustomerList) - { - if (IstHauptbetreuer(hilfePlan.Customer, e2c.Employee)) - { - result.AddRange(CreateFlexibleReportsInTimeSpan(span, e2c.Employee, hilfePlan, FlexibleReportEntryType.CustomerEmployeeNullEntry)); - } - } - } - } - - foreach (var item in alleEmps) - { - for (DateTime date = span.StartDate; date <= span.EndDate; date = date.AddDays(1)) - { - result.Add(new FlexibleReportEntryDC() - { - Employee = MapperFactory.CompactEmployeeDC_Employee.MapToNewDC(item), - Type = FlexibleReportEntryType.EmployeeNullEntry, - StartDatum = date, - EndDatum = date - }); - } - } - } - - foreach (var serviceRecordListEntry in alleRec) - { - var resultEntry = result.Where( - x => - x.CustomerOid == serviceRecordListEntry.CustomerOid && - x.Type == FlexibleReportEntryType.CustomerNullEntry && - x.StartDatum == serviceRecordListEntry.Start.Value.Date) - .FirstOrDefault(); - - if(resultEntry == null) - { - resultEntry = new FlexibleReportEntryDC(); - result.Add(resultEntry); - } - - resultEntry.AnzahlMinuten = serviceRecordListEntry.RoundedDuration; - resultEntry.AnzahlMinutenSoll = 0.0M; - resultEntry.Customer = serviceRecordListEntry.Customer == null ? null : MapperFactory.CompactCustomerDC_Customer.MapToNewDC(serviceRecordListEntry.Customer); - resultEntry.Employee = MapperFactory.CompactEmployeeDC_Employee.MapToNewDC(serviceRecordListEntry.Employee); - resultEntry.EndDatum = serviceRecordListEntry.End.Value; - resultEntry.Kilometer = serviceRecordListEntry.DistanceInMeter; - resultEntry.Leistung = serviceRecordListEntry.ServiceDescription.Name; - resultEntry.Leistungskategorie = serviceRecordListEntry.ServiceDescription.ServiceCategory.Name; - resultEntry.StartDatum = serviceRecordListEntry.Start.Value; - resultEntry.SupportConcept = serviceRecordListEntry.SupportConcept == null ? null : MapperFactory.CompactSupportConceptDC_SupportConcept.MapToNewDC(serviceRecordListEntry.SupportConcept); - resultEntry.Team = GetTeamNameByTeam2CustomerList(serviceRecordListEntry.Customer.Team2CustomerList); - resultEntry.Type = FlexibleReportEntryType.ServiceRecordEntry; - } - #region sollberechnung - //foreach (var serviceRecordListEntry in alleRec) - //{ - // FlexibleReportEntryDC resultEntry; - - // if (serviceRecordListEntry.Customer != null) - // resultEntry = result.Where(x => x.CustomerOid == serviceRecordListEntry.CustomerOid && x.Type == FlexibleReportEntryType.CustomerNullEntry).FirstOrDefault() ?? new FlexibleReportEntryDC(); - // else - // resultEntry = new FlexibleReportEntryDC(); - - // if (serviceRecordListEntry.CustomerOid != null) - // { - // var key = CreateFlexibleDictionaryKey( - // serviceRecordListEntry.CustomerOid.Value, - // serviceRecordListEntry.Start.Value, - // serviceRecordListEntry.EmployeeOid ?? 0, - // GetTeamNameByTeam2CustomerList(serviceRecordListEntry.Customer.Team2CustomerList)); - - // Wenn sich noch kein Eintrag in der Liste befindet - // if (!dict.ContainsKey(key)) - // { - // DateTime start = span.StartDate.Date; - // DateTime ende = span.EndDate.Date; - - // if (serviceRecordListEntry.SupportConcept != null) - // { - // Holt sich den Hilfeplan und erstellt den Solltermin - // resultEntry.SupportConcept = MapperFactory.CompactSupportConceptDC_SupportConcept.MapToNewDC(serviceRecordListEntry.SupportConcept); - - // CreateFlexibleReportSoll(resultEntry, serviceRecordListEntry, serviceRecordListEntry.Start.Value, calc); - - // Schaut, ob der Hilfeplan nach dem ausgewählten Startdatum anfängt - // if (resultEntry.SupportConcept.StartDate.HasValue) - // if (span.StartDate.Date < resultEntry.SupportConcept.StartDate.Value) - // start = resultEntry.SupportConcept.StartDate.Value; - - // Schaut, ob der Hilfeplan vor dem ausgewählten Endzeitpunkt ausläuft - // if (resultEntry.SupportConcept.EndDate.HasValue) - // if (span.EndDate.Date > resultEntry.SupportConcept.EndDate.Value) - // ende = resultEntry.SupportConcept.EndDate.Value; - // } - - // if (serviceRecordListEntry.Customer != null) - // { - // Erstellt die leeren Objekte zur Berechnung der Sollanzahl - - // foreach (var nullEntry in CreateFlexibleNullEntries(serviceRecordListEntry, start, ende, resultEntry.AnzahlMinutenSoll)) - // { - // CreateFlexibleReportSoll(nullEntry, serviceRecordListEntry, nullEntry.Datum, calc); - - // var newKey = CreateFlexibleDictionaryKey( - // serviceRecordListEntry.CustomerOid.Value, - // nullEntry.Datum, - // serviceRecordListEntry.EmployeeOid ?? 0, - // GetTeamNameByTeam2CustomerList(serviceRecordListEntry.Customer.Team2CustomerList)); - // , - // serviceRecordListEntry.ServiceDescription.Name, - // serviceRecordListEntry.ServiceDescription.ServiceCategory.Name); - - // Schaut, ob sich der Schlüssel bereits in dem Dict befindet - // if (!dict.ContainsKey(newKey)) - // { - // Schaut, ob das Objekt direkt in die Liste geworfen wird oder vorher noch bearbeitet werden muss - // if (nullEntry.Datum != serviceRecordListEntry.Start.Value.Date) - // { - // dict.Add(newKey, nullEntry); - // result.Add(nullEntry); - // } - // else - // { - // dict.Add(newKey, resultEntry); - // } - // } - // } - // } - // } - // Wenn sich bereits eine Zeiterfassung oder ein Platzhalter des Klientens an dem Tag in der Liste befindet - // else - // { - // var existingEntry = dict[key]; - - // Platzhalter - // if (existingEntry.EintraegeProTag == 0) - // { - // Entfernt den Eintrag temporär aus der Liste (wird am Ende hinzugefügt) - // result.Remove(existingEntry); - // resultEntry = existingEntry; - // } - // Existierende Zeiterfassung - // else - // { - // resultEntry.EintraegeProTag = existingEntry.EintraegeProTag; - // existingEntry.EintraegeProTag += 1; - // } - // } - // } - - // Überträgt Daten - // resultEntry.EintraegeProTag++; - // resultEntry.AnzahlMinuten = serviceRecordListEntry.RoundedDuration; - // resultEntry.Kilometer = serviceRecordListEntry.DistanceInMeter; - // resultEntry.Datum = serviceRecordListEntry.Start.Value; - // resultEntry.Employee = MapperFactory.CompactEmployeeDC_Employee.MapToNewDC(serviceRecordListEntry.Employee); - // resultEntry.Leistung = serviceRecordListEntry.ServiceDescription.Name; - // resultEntry.Leistungskategorie = serviceRecordListEntry.ServiceDescription.ServiceCategory.Name; - // resultEntry.Type = FlexibleReportEntryType.FullEntry; - - // if (serviceRecordListEntry.Customer != null) - // { - // resultEntry.Customer = MapperFactory.CompactCustomerDC_Customer.MapToNewDC(serviceRecordListEntry.Customer); - // } - - // result.Add(resultEntry); - //} - #endregion - - return result; + var test = s.GetAllFlexibleReportEntrys(filter); + return test; + } catch (Exception e) { @@ -5840,123 +5657,72 @@ namespace BeWo.Service.ServiceImplementations } } - private IEnumerable CreateFlexibleNullEntries(ServiceRecord sr, DateTime start, DateTime ende, decimal? soll) - { - for (DateTime date = start; date <= ende; date = date.AddDays(1.0)) - { - var flex = new FlexibleReportEntryDC() - { - Customer = sr.Customer != null ? MapperFactory.CompactCustomerDC_Customer.MapToNewDC(sr.Customer) : null, - Employee = sr.Employee != null ? MapperFactory.CompactEmployeeDC_Employee.MapToNewDC(sr.Employee) : null, - StartDatum = date, - AnzahlMinuten = 0, - AnzahlMinutenSoll = soll, - Leistung = sr.ServiceDescription.Name, - Leistungskategorie = sr.ServiceDescription.ServiceCategory.Name, - SupportConcept = MapperFactory.CompactSupportConceptDC_SupportConcept.MapToNewDC(sr.SupportConcept) ?? null, - EintraegeProTag = 0, - }; - - if (sr.Customer != null) - { - flex.Customer = MapperFactory.CompactCustomerDC_Customer.MapToNewDC(sr.Customer); - - flex.Team = GetTeamNameByTeam2CustomerList(sr.Customer.Team2CustomerList); - } - - yield return flex; - } - } - - private string CreateFlexibleDictionaryKey(long customerOid, DateTime date, long employeeOid, string team) //, string leistung, string leistungskategorie) - { - return string.Format("{0}_{1:dd.MM.yyyy}_{2}_{3}", customerOid, date, employeeOid, team); //, leistung, leistungskategorie); - } - - private string GetTeamNameByTeam2CustomerList(IList team2Customers) - { - string name = ""; - - foreach (var t2c in team2Customers) - { - if (name.Length > 0) - name += ", "; - name = t2c.Team.Name; - } - - return name; - } - - private void CreateFlexibleReportSoll(FlexibleReportEntryDC entry, ServiceRecord item, DateTime datum, Calculations calc) - { - if (item.CostBearer2SupportConcept != null && IstHauptbetreuer(item.Customer, item.Employee)) - { - var c2sDc = MapperFactory.SupportConceptCostBearerRelDC_CostBearer2SupportConcept.MapToNewDC(item.CostBearer2SupportConcept); - var sollPerDay = calc.GetApprovedHoursPerDay(c2sDc, datum); - - entry.AnzahlMinutenSoll = sollPerDay * 60; - } - } - - private decimal? CalcSollMin(CostBearer2SupportConcept c, DateTime d, Calculations calculations) - { - var c2sDc = MapperFactory.SupportConceptCostBearerRelDC_CostBearer2SupportConcept.MapToNewDC(c); - return calculations.GetApprovedHoursPerDay(c2sDc, d) * 60; - } - - private decimal? CalcSollMin(ServiceRecord serviceRecord, DateTime datum, Calculations calc) - { - if (serviceRecord.CostBearer2SupportConcept != null && IstHauptbetreuer(serviceRecord.Customer, serviceRecord.Employee)) - { - var c2sDc = MapperFactory.SupportConceptCostBearerRelDC_CostBearer2SupportConcept.MapToNewDC(serviceRecord.CostBearer2SupportConcept); - return calc.GetApprovedHoursPerDay(c2sDc, datum) * 60; - } - return null; - } - - private bool IstHauptbetreuer(Customer c, Employee e) - { - foreach (Employee2Customer e2c in c.Employee2CustomerList) - { - foreach (ValueListEntry2Object vle2o in e2c.ValueList) - { - ValueListEntry vle = vle2o.Entry; - if (vle.SystemEntryID != null && vle.SystemEntryID.Value == SystemEntryID.EmployeeRoleMainAttendant && e2c.EmployeeOid == e.Oid.Value) - { - return true; - } - } - } - - return false; - } - - private IEnumerable CreateFlexibleReportsInTimeSpan(DateTimeSpan span, Employee employee, SupportConcept supportConcept, FlexibleReportEntryType type) - { - for (DateTime date = span.StartDate; date <= span.EndDate; date = date.AddDays(1)) - { - yield return new FlexibleReportEntryDC() - { - Employee = employee != null ? MapperFactory.CompactEmployeeDC_Employee.MapToNewDC(employee) : null, - Customer = supportConcept.Customer != null ? MapperFactory.CompactCustomerDC_Customer.MapToNewDC(supportConcept.Customer) : null, - Type = type, - StartDatum = date, - EndDatum = date, - SupportConcept = MapperFactory.CompactSupportConceptDC_SupportConcept.MapToNewDC(supportConcept) - }; - } - } + public IList GetFlexibleReportLayouts() { var result = new List(); - foreach (var item in DAOFactory.GenericDAO.GetAll().Where(x => x.CreatorOid == LoggedInUserOperationContextExt.Current.User.Oid.Value)) + foreach (var item in DAOFactory.GenericDAO.GetAllActive().Where(x => x.CreatorOid == LoggedInUserOperationContextExt.Current.User.Oid.Value)) { result.Add(MapperFactory.FlexibleReportLayoutDC_FlexibleReportLayout.MapToNewDC(item)); } return result; } + + public void InsertNewFlexibleReportLayout(FlexibleReportLayoutDC flexibleReportLayoutDC) + { + try + { + var flexibleReportLayout = MapperFactory.FlexibleReportLayoutDC_FlexibleReportLayout.MapToNewEntity(flexibleReportLayoutDC); + flexibleReportLayout.CreatorOid = LoggedInUserOperationContextExt.Current.User.Oid.Value; + DAOFactory.GenericDAO.Insert(flexibleReportLayout); + } + catch (Exception e) + { + throw Utils.CreateBeWoFaultException(e); + } + } + + public void UpdateFlexibleReportLayouts(IList flexibleReportLayouts) + { + try + { + //Enity + var flexOriList = DAOFactory.GenericDAO.GetAllActive().Where(x => x.CreatorOid == LoggedInUserOperationContextExt.Current.User.Oid.Value); + //DC + var flexNewList = flexibleReportLayouts; + + var toUpdate = new List(); + var toDelete = new List(); + + foreach (var flexOri in flexOriList) + { + bool gefunden = false; + + foreach (var flexNew in flexNewList) + { + if (flexOri.Oid == flexNew.FlexibleReportOid) + { + gefunden = true; + + if (flexOri.LayoutName != flexNew.LayoutName) + { + flexOri.LayoutName = flexNew.LayoutName; + DAOFactory.GenericDAO.Update(flexOri); + } + break; + } + } + if (!gefunden) + DAOFactory.GenericDAO.Deactivate(flexOri); + } + } + catch (Exception e) + { + throw Utils.CreateBeWoFaultException(e); + } + } } } diff --git a/Service/ServiceImplementations/ResourceServiceImp.cs b/Service/ServiceImplementations/ResourceServiceImp.cs index 4080693ae..2a1209aa3 100644 --- a/Service/ServiceImplementations/ResourceServiceImp.cs +++ b/Service/ServiceImplementations/ResourceServiceImp.cs @@ -1645,7 +1645,6 @@ namespace BeWo.Service.ServiceImplementations var saturday = monday.AddDays(5); var sunday = monday.AddDays(6); - //Originator ist angemeldeten Mitarbeiter GenerateAppointments(monday, false, employee, fiveCustomers, fiveOfMyOwnCustomers, fiveResources, employeesWithoutEmployee.TakeWhile((t, i) => i != 5).Select(t => new Employee2SchedulerAppointment(t)).ToList(), null); @@ -1658,7 +1657,6 @@ namespace BeWo.Service.ServiceImplementations //Originator ist nicht angemeldeter Mitarbeiter und der ist auch nicht in der Liste GenerateAppointments(thursday, false, secondEmployee, fiveCustomers, fiveOfSecondEmployeesCustomers, fiveResources, employeesWithoutEmployee.TakeWhile((t, i) => i != 5).Select(t => new Employee2SchedulerAppointment(t)).ToList(), null); - //Private Termine GenerateAppointments(friday, true, employee, fiveCustomers, fiveOfMyOwnCustomers, fiveResources, employeesWithoutEmployee.TakeWhile((t, i) => i != 5).Select(t => new Employee2SchedulerAppointment(t)).ToList(), null); GenerateAppointments(saturday, true, secondEmployee, fiveCustomers, fiveOfSecondEmployeesCustomers, fiveResources, employeesWithoutEmployee.TakeWhile((t, i) => i != 5).Select(t => new Employee2SchedulerAppointment(t)).ToList(), null); @@ -1695,6 +1693,15 @@ namespace BeWo.Service.ServiceImplementations GenerateAppointments(fri.AddHours(12), true, employee, fiveCustomers, fiveOfMyOwnCustomers, fiveResources, employeeListIncludingLoggedInEmployee8, null, true); // -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + var ttttttt1 = employeeListIncludingLoggedInEmployee1.Select(s => s.Oid).ToList(); + var ttttttt2 = employeeListIncludingLoggedInEmployee2.Select(s => s.Oid).ToList(); + var ttttttt3 = employeeListIncludingLoggedInEmployee3.Select(s => s.Oid).ToList(); + var ttttttt4 = employeeListIncludingLoggedInEmployee4.Select(s => s.Oid).ToList(); + var ttttttt5 = employeeListIncludingLoggedInEmployee5.Select(s => s.Oid).ToList(); + var ttttttt6 = employeeListIncludingLoggedInEmployee6.Select(s => s.Oid).ToList(); + var ttttttt7 = employeeListIncludingLoggedInEmployee7.Select(s => s.Oid).ToList(); + var ttttttt8 = employeeListIncludingLoggedInEmployee8.Select(s => s.Oid).ToList(); + var mo = mon.AddDays(7); var tu = tue.AddDays(7); diff --git a/Shared/BeWoEntityEnums.cs b/Shared/BeWoEntityEnums.cs index cccae1077..f7bb08e6a 100644 --- a/Shared/BeWoEntityEnums.cs +++ b/Shared/BeWoEntityEnums.cs @@ -134,7 +134,7 @@ namespace BS.Shared NotizenKategorie = 127, NotizenEintrag = 128, BuchungsExport = 129, - Timesheet2Mail = 130, + Timesheet2Mail = 130, PersonHistory = 131, EmployeeHistory = 132, AddressHistory = 133, diff --git a/Shared/DataContracts/FlexibleReportEntryDC.cs b/Shared/DataContracts/FlexibleReportEntryDC.cs index ba64b7400..d3e62a832 100644 --- a/Shared/DataContracts/FlexibleReportEntryDC.cs +++ b/Shared/DataContracts/FlexibleReportEntryDC.cs @@ -9,53 +9,68 @@ using System.Threading.Tasks; namespace BS.Shared.DataContracts { - [DataContract] - public class FlexibleReportEntryDC : IDataContract - { - [DataMember] - public CompactCustomerDC Customer { get; set; } - - [DataMember] - public CompactSupportConceptDC SupportConcept { get; set; } - - [DataMember] - public CompactEmployeeDC Employee { get; set; } - - [DataMember] - public string Team { get; set; } - - [DataMember] - public string Leistungskategorie { get; set; } - - [DataMember] - public string Leistung { get; set; } - - [DataMember] - public decimal AnzahlMinuten { get; set; } - - [DataMember] - public decimal? AnzahlMinutenSoll { get; set; } - - [DataMember] - public int? Kilometer { get; set; } - - [DataMember] - public DateTime StartDatum { get; set; } - - [DataMember] - public DateTime EndDatum { get; set; } + [DataContract] + public class FlexibleReportEntryDC : IDataContract + { + [DataMember] + public CompactCustomerDC Customer { get; set; } [DataMember] - public int EintraegeProTag { get; set; } + public CompactSupportConceptDC SupportConcept { get; set; } - [DataMember] - public FlexibleReportEntryType Type { get; set; } - public long? CustomerOid - { - get - { - return Customer != null ? Customer.Oid : null; - } - } - } + [DataMember] + public CompactEmployeeDC Employee { get; set; } + + [DataMember] + public string Team { get; set; } + + [DataMember] + public string Leistungskategorie { get; set; } + + [DataMember] + public string Leistung { get; set; } + + [DataMember] + public decimal AnzahlMinuten { get; set; } + + [DataMember] + public decimal? AnzahlMinutenSoll { get; set; } + + [DataMember] + public decimal? Betrag { get; set; } + + [DataMember] + public decimal? Stundensatz { get; set; } + + [DataMember] + public int? Kilometer { get; set; } + + [DataMember] + public DateTime StartDatum { get; set; } + + [DataMember] + public DateTime EndDatum { get; set; } + + [DataMember] + public FlexibleReportEntryType Type { get; set; } + + [DataMember] + public string Organisation { get; set; } + + public long? CustomerOid + { + get + { + return Customer?.Oid; + } + } + + public long? EmployeeOid + { + get + { + return Employee?.EmployeeOid; + } + } + } }
- + + - @hp.Text + @hp.NameAndDateOfBirth +
+

@hp.SupportConceptTimeSpan